Commit Graph

3786 Commits

Author SHA1 Message Date
huanghuoguoguo d1d074f492 docs(agent-runner): record release probe results 2026-07-15 09:13:28 +08:00
huanghuoguoguo cc4c24e57f fix(agent-runner): unify streamed completion delivery 2026-07-15 09:10:49 +08:00
huanghuoguoguo 0060edaf3e fix(agent-runner): aggregate non-streaming replies 2026-07-15 08:48:14 +08:00
huanghuoguoguo 730d52bcd0 fix(agent-runner): close sandbox skill authoring flow 2026-07-15 08:35:52 +08:00
huanghuoguoguo d871baab68 fix(agent-runner): prepare local runner functional tests 2026-07-15 08:11:52 +08:00
huanghuoguoguo 32216a82f5 fix(agent-runner): validate clean marketplace onboarding 2026-07-15 07:52:43 +08:00
huanghuoguoguo 99d9c227f9 feat(agent-runner): enforce 4.x host-owned execution 2026-07-12 20:36:32 +08:00
huanghuoguoguo e6384aae5d feat(agent-runner): finalize 4.x processor integration 2026-07-12 17:00:41 +08:00
Junyan Qin 29689962f3 feat(market): support AgentRunner component filters 2026-07-12 16:58:28 +08:00
huanghuoguoguo 11bd5c6fd7 feat(wizard): add scenario templates and EBA release gate 2026-07-12 16:58:28 +08:00
huanghuoguoguo 24322836ce feat(wizard): start bot setup from scenarios 2026-07-12 16:58:28 +08:00
huanghuoguoguo a2b30957b6 feat(agent-platform): add scenario-based route creation 2026-07-12 16:58:28 +08:00
huanghuoguoguo f15f004680 feat(agent-platform): explain route conflicts and fallback 2026-07-12 16:58:28 +08:00
huanghuoguoguo bda0e68644 test(skills): add bot event routing product flow 2026-07-12 16:58:28 +08:00
huanghuoguoguo c59616fc89 feat(agent-platform): productize bot event route testing 2026-07-12 16:58:28 +08:00
huanghuoguoguo 3c6e87ab49 feat(agent-platform): show bot route runtime status 2026-07-12 16:58:28 +08:00
huanghuoguoguo 4e9464dd19 feat(agent-platform): add bot route dry-run 2026-07-12 16:58:28 +08:00
Junyan Qin 2004ac0dfc docs: add EBA productization release plan 2026-07-12 16:58:28 +08:00
Junyan Qin 0d6aa8dcd4 refactor: consolidate bot event routing 2026-07-12 16:58:28 +08:00
huanghuoguoguo 995888f6b2 test(agent-runner): strengthen local agent e2e gate 2026-07-12 16:58:28 +08:00
Junyan Qin d0f8f080e9 feat: improve sidebar usability 2026-07-12 16:54:18 +08:00
Junyan Qin 6dd296612b fix: remove internal adapter terminology from UI 2026-07-12 16:54:18 +08:00
Junyan Qin bdc6704d88 fix: stabilize 4.11 branch runtime state 2026-07-12 16:54:18 +08:00
huanghuoguoguo 35d970c4a5 test(provider): support fake token counting 2026-07-12 16:52:55 +08:00
huanghuoguoguo 705845b41d docs(agent-runner): align protocol compatibility notes 2026-07-12 16:52:55 +08:00
wangcham 66c900fec4 fix(platform): align eba event declarations 2026-07-12 16:52:55 +08:00
huanghuoguoguo 801ffbf8fe fix(debug-chat): preserve websocket pipeline routing 2026-07-12 16:52:54 +08:00
huanghuoguoguo df6c94f364 feat(agent-runner): support scoped token counting 2026-07-12 16:52:54 +08:00
Junyan Qin 7d295640c2 i18n: add missing agents block to es-ES, ru-RU, th-TH, vi-VN, zh-Hant
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-12 16:52:54 +08:00
Junyan Qin 0027ea8f68 feat(sidebar): add group-by-type toggle to installed extensions section
- Add group-by-type button to extensions category header (mirrors the
  agent group-by-kind pattern) — syncs with the extensions page Switch
  via shared SidebarDataContext state
- Relocate both group and refresh controls to sit left-aligned
  immediately after the title for both Agent and Extensions sections
- Add plugins.groupByTypeShort i18n key to all 8 locales

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-12 16:52:54 +08:00
Junyan Qin 1a3599eb7a feat(sidebar): add group-by-kind toggle to Agent section
Add a toggle (left of the "+" button) that groups the Agent section by
kind, showing "Agent" and "Pipeline" sub-headers. State persists in
localStorage, mirroring the extensions group-by-type pattern.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-12 16:52:54 +08:00
Junyan Qin d6be272ab4 refine(sidebar): show Agent/Pipeline marker as icon only
Drop the text label; keep the icon with a title tooltip so names have
more room in the narrow sidebar.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-12 16:52:54 +08:00
Junyan Qin bd4626a5e3 feat(sidebar): mark Agent entries as Agent or Pipeline
Add a trailing badge (icon + label) to each entry in the sidebar Agent
section so users can tell Agent orchestration apart from legacy Pipeline.
Thread the agent `kind` field through SidebarEntityItem.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-12 16:52:54 +08:00
Junyan Qin 55ed1d4595 fix(bots): hide redundant namespace wildcard and show raw event code
- Only surface `ns.*` wildcard when the namespace has 2+ concrete events,
  so single-event adapters (legacy) show just the one event
- Show raw event code as a muted subtitle under each option's label

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-12 16:52:54 +08:00
Junyan Qin 8aedb57340 feat(bots): refine event binding editor UI and i18n
- Move conditions toggle between event select and arrow; drop "IF" label
- Remove "all events" (*) option from event select
- Add i18n labels for concrete event names (zh/en/ja) via bots.eventNames
- Narrow fallback event set to message.received for adapters without
  declared supported_events (legacy adapters only emit message.received)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-12 16:52:54 +08:00
Junyan Qin a275740fbd fix(adapters): add categories to telegram EBA manifest
The Telegram (EBA) manifest was missing spec.categories, so it fell
into the uncategorized/protocol bucket. Restore popular + global to
match the legacy telegram adapter.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-12 16:52:54 +08:00
Junyan Qin c34a54324f feat(adapters): mark EBA-superseded adapters as legacy and collapse them
The 12 old adapters that now have an EBA replacement are tagged
`spec.legacy: true` in their source manifests. Principle: don't delete,
de-emphasize.

- sources/*.yaml (aiocqhttp, dingtalk, discord, kook, lark,
  officialaccount, qqofficial, slack, telegram, wecom, wecombot,
  wecomcs): add spec.legacy: true
- Adapter / IChooseAdapterEntity types: add optional legacy flag
- BotForm adapter Select: split legacy adapters into a collapsed,
  grayscale group at the bottom with an explanatory hint; auto-expand
  when the bot already uses a legacy adapter
- Wizard platform picker: same collapsed legacy section
- i18n: legacyAdapters / legacyAdaptersHint (zh-Hans, en-US)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-12 16:52:54 +08:00
Junyan Qin 47a967d688 fix(web): remove discard option from event target selector
Unorchestrated events are discarded by default, so an explicit discard
target is redundant. Drop the discard CommandGroup (and the now-unused
CommandSeparator import); the currentLabel() discard branch is kept so
any pre-existing discard bindings still render correctly.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-12 16:52:54 +08:00
Junyan Qin 8eb5ca1dd1 fix(web): place each adapter in a single category bucket
groupByCategory pushed multi-category adapters (lark, wecom, discord,
slack) into every matching bucket, so the adapter Select rendered
duplicate SelectItem values — triggering React duplicate-key warnings
and corrupting Radix item tracking. Assign each item to its highest
-priority matching category only. Also de-dupes the wizard card grid.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-12 16:52:54 +08:00
Junyan Qin 4aa0ac401b feat(eba): consolidate event bindings, fix command.tsx pointer-events
- Replace legacy pipeline binding card + RoutingRulesEditor with unified
  EventBindingsEditor; remove use_pipeline_uuid/pipeline_routing_rules
  from bot form schema and API update handler
- Add _augment_event_data() to botmgr for filter virtual fields
  (message_text, message_element_types, chat_type)
- Add alembic migration 0009: migrate use_pipeline_uuid and
  pipeline_routing_rules into event_bindings on first run
- Fix command.tsx: data-[disabled] -> data-[disabled=true] so cmdk 1.x
  items (data-disabled=false) are not pointer-events:none
- EventBindingsEditor: onSelect on CommandItems, filter conditions panel,
  disabled bindings section, dnd reorder
- i18n: add filter/condition keys for zh-Hans and en-US
- Update tests to match new bot service behavior

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-12 16:52:54 +08:00
huanghuoguoguo d08f163bff test(agent): cover agent service event bindings 2026-07-12 16:52:54 +08:00
huanghuoguoguo 96f2e471d2 test(agent): cover pluginized agent runner runtime 2026-07-12 16:52:54 +08:00
Junyan Qin 59e0edb3d5 feat(agent): add event orchestration surface 2026-07-12 16:52:54 +08:00
Junyan Qin 3dd49a8a6e fix(web): add agent runner component i18n 2026-07-12 16:51:59 +08:00
huanghuoguoguo 29f552dc29 docs(agent): update pluginization status 2026-07-12 16:51:59 +08:00
huanghuoguoguo 3767cd2818 test(agent): align tests with agent runner plugin path 2026-07-12 16:51:59 +08:00
huanghuoguoguo 96c1ed8e90 test(agent): remove obsolete local agent runner attachment tests 2026-07-12 16:51:59 +08:00
huanghuoguoguo 5d9e6adb52 refactor(tools): unify tool-detail normalization in ToolManager
Drop the PluginToolLoader.get_tool() override that returned a raw
ComponentManifest, so every loader's get_tool() now returns a uniform
resource_tool.LLMTool (PluginToolLoader.get_tools() already did this
conversion). This removes the only source of tool-shape heterogeneity.

- ToolManager.get_tool_schema(): drop the ComponentManifest-vs-LLMTool branch
- ToolManager.get_tool_detail(): new host-level shape {name, description,
  human_desc, parameters}
- handler.py GET_TOOL_DETAIL: call tool_mgr.get_tool_detail(); delete the
  handler-local _build_tool_detail + _i18n_to_dict/_i18n_to_text adapters and
  the litellm TODO
- ToolLookupResult is now just LLMTool

The dropped label/spec fields were not consumed by any runner (local-agent
build_llm_tool and external harnesses use only name/description/parameters).
2026-07-12 16:51:59 +08:00
huanghuoguoguo b386b883b8 refactor(plugin): split agent-runner action handlers out of handler.py
Extract the AgentRunner Protocol v1 host-side surface from the giant
RuntimeConnectionHandler.__init__ into sibling modules using a registration-
function pattern (behavior-preserving; @h.action == @self.action):

- agent_run_support.py: shared constants + authorization/scope/projection helpers
- agent_pull_actions.py: register(h) for history/event pull APIs
- agent_runner_actions.py: register(h) for run/runtime/stats/claim lifecycle
- agent_state_actions.py: register(h) for steering/state APIs

__init__ now calls the three register(self) functions. handler.py keeps the
pre-existing plugin/llm/vector/knowledge handlers, get_prompt/call_tool/
get_tool_detail (coupled to retained helpers), shared helpers, and outbound
methods; it re-imports _validate_agent_run_session so external imports keep
working. handler.py: 4066 -> 1871 lines.

test_state_api_auth.py: repoint get_session_registry patch targets to
agent_run_support (the lookup moved modules). 385 agent unit tests pass; ruff clean.
2026-07-12 16:51:59 +08:00
huanghuoguoguo c4e8df7df4 test(qa): sandbox-skill-authoring OPERATE passes on nsjail + docker (#2271 fixed)
- nsjail: full create→exec→register→activate→exec-from-activated-path chain
  returns exit 0; activated mount runs scripts/use.py (reads data/input.json)
  and writes activated_writeback.txt through to the host skill store.
- docker: same chain now passes after langbot-plugin-sdk#87 (recreate sandbox
  container when extra_mounts change). Corrected #2271 root cause from
  'docker masks nested bind mount' to container-reuse: extra_mounts was not in
  the box session compatibility check, so docker reused a running container and
  could not append the activated skill's bind mount.
- Exit criterion 3 (real end-to-end skill use) now DONE; all 5 criteria met.
- Documents the nsjail stale-docker-artifact environment gotcha.
2026-07-12 16:51:59 +08:00