aws-runtime-bridge 1.9.33 → 1.9.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapter/AcodeSdkAdapter.d.ts +66 -5
- package/dist/adapter/AcodeSdkAdapter.d.ts.map +1 -1
- package/dist/adapter/AcodeSdkAdapter.js +771 -69
- package/dist/adapter/ClaudeSdkAdapter.d.ts +6 -0
- package/dist/adapter/ClaudeSdkAdapter.d.ts.map +1 -1
- package/dist/adapter/ClaudeSdkAdapter.js +24 -1
- package/dist/adapter/OpencodeSdkAdapter.d.ts +19 -0
- package/dist/adapter/OpencodeSdkAdapter.d.ts.map +1 -1
- package/dist/adapter/OpencodeSdkAdapter.js +62 -0
- package/dist/adapter/idle-poll-loop.d.ts +2 -1
- package/dist/adapter/idle-poll-loop.d.ts.map +1 -1
- package/dist/adapter/types.d.ts +86 -9
- package/dist/adapter/types.d.ts.map +1 -1
- package/dist/adapter/types.js +15 -5
- package/dist/index.js +15 -0
- package/dist/routes/acode-todos.d.ts +11 -0
- package/dist/routes/acode-todos.d.ts.map +1 -0
- package/dist/routes/acode-todos.js +75 -0
- package/dist/routes/ai-sources.js +4 -1
- package/dist/routes/dashboard.d.ts.map +1 -1
- package/dist/routes/dashboard.js +1 -1
- package/dist/routes/memory.d.ts +1 -1
- package/dist/routes/memory.d.ts.map +1 -1
- package/dist/routes/memory.js +3 -3
- package/dist/routes/pty.d.ts.map +1 -1
- package/dist/routes/pty.js +9 -0
- package/dist/routes/runtime-binding.d.ts.map +1 -1
- package/dist/routes/runtime-binding.js +6 -3
- package/dist/routes/sessions.js +89 -4
- package/dist/routes/sub-agents.d.ts +14 -0
- package/dist/routes/sub-agents.d.ts.map +1 -0
- package/dist/routes/sub-agents.js +267 -0
- package/dist/routes/terminal.d.ts +12 -1
- package/dist/routes/terminal.d.ts.map +1 -1
- package/dist/routes/terminal.js +326 -24
- package/dist/services/acode-package.d.ts +8 -1
- package/dist/services/acode-package.d.ts.map +1 -1
- package/dist/services/acode-package.js +33 -4
- package/dist/services/agent-event-store.d.ts +1 -0
- package/dist/services/agent-event-store.d.ts.map +1 -1
- package/dist/services/aws-client-agent-mcp.d.ts.map +1 -1
- package/dist/services/aws-client-agent-mcp.js +11 -4
- package/dist/services/event-delta-pusher.js +4 -4
- package/dist/services/fileSnapshotStore.js +1 -1
- package/dist/services/legacy-path-migration.d.ts +3 -0
- package/dist/services/legacy-path-migration.d.ts.map +1 -0
- package/dist/services/legacy-path-migration.js +66 -0
- package/dist/services/lifecycle-state.d.ts.map +1 -1
- package/dist/services/lifecycle-state.js +1 -1
- package/dist/services/runtime-binding.d.ts +5 -0
- package/dist/services/runtime-binding.d.ts.map +1 -1
- package/dist/services/runtime-binding.js +33 -1
- package/dist/services/session-output.d.ts +10 -1
- package/dist/services/session-output.d.ts.map +1 -1
- package/dist/services/session-output.js +54 -4
- package/dist/services/sub-agent-manager-instance.d.ts +4 -0
- package/dist/services/sub-agent-manager-instance.d.ts.map +1 -0
- package/dist/services/sub-agent-manager-instance.js +12 -0
- package/dist/services/workspace-files.d.ts +1 -0
- package/dist/services/workspace-files.d.ts.map +1 -1
- package/dist/services/workspace-files.js +57 -1
- package/package/acode/dist/ask-user-question-tool.d.ts +47 -0
- package/package/acode/dist/ask-user-question-tool.d.ts.map +1 -0
- package/package/acode/dist/ask-user-question-tool.js +233 -0
- package/package/acode/dist/built-in-file-tools.d.ts +2 -0
- package/package/acode/dist/built-in-file-tools.d.ts.map +1 -1
- package/package/acode/dist/built-in-file-tools.js +504 -3
- package/package/acode/dist/compaction.d.ts +242 -0
- package/package/acode/dist/compaction.d.ts.map +1 -0
- package/package/acode/dist/compaction.js +919 -0
- package/package/acode/dist/config.d.ts +6 -1
- package/package/acode/dist/config.d.ts.map +1 -1
- package/package/acode/dist/config.js +27 -2
- package/package/acode/dist/index.d.ts +4 -0
- package/package/acode/dist/index.d.ts.map +1 -1
- package/package/acode/dist/index.js +4 -0
- package/package/acode/dist/runtime.d.ts +257 -0
- package/package/acode/dist/runtime.d.ts.map +1 -1
- package/package/acode/dist/runtime.js +1843 -191
- package/package/acode/dist/skill-tool.d.ts +30 -0
- package/package/acode/dist/skill-tool.d.ts.map +1 -0
- package/package/acode/dist/skill-tool.js +174 -0
- package/package/acode/dist/sub-agent-manager.d.ts +264 -0
- package/package/acode/dist/sub-agent-manager.d.ts.map +1 -0
- package/package/acode/dist/sub-agent-manager.js +825 -0
- package/package/acode/dist/sub-agent-store.d.ts +40 -0
- package/package/acode/dist/sub-agent-store.d.ts.map +1 -0
- package/package/acode/dist/sub-agent-store.js +164 -0
- package/package/acode/dist/sub-agent-tools.d.ts +72 -0
- package/package/acode/dist/sub-agent-tools.d.ts.map +1 -0
- package/package/acode/dist/sub-agent-tools.js +429 -0
- package/package/acode/dist/sub-agent-types.d.ts +85 -0
- package/package/acode/dist/sub-agent-types.d.ts.map +1 -0
- package/package/acode/dist/sub-agent-types.js +8 -0
- package/package/acode/dist/todo-store.d.ts +42 -0
- package/package/acode/dist/todo-store.d.ts.map +1 -0
- package/package/acode/dist/todo-store.js +68 -0
- package/package/acode/dist/todo-tool.d.ts +6 -0
- package/package/acode/dist/todo-tool.d.ts.map +1 -0
- package/package/acode/dist/todo-tool.js +138 -0
- package/package/acode/dist/types.d.ts +41 -1
- package/package/acode/dist/types.d.ts.map +1 -1
- package/package/acode/package.json +13 -2
- package/package/aws-client-agent-mcp/dist/agent-client.d.ts +9 -0
- package/package/aws-client-agent-mcp/dist/agent-client.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/agent-client.js +69 -10
- package/package/aws-client-agent-mcp/dist/agent-client.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/config.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/config.js +4 -0
- package/package/aws-client-agent-mcp/dist/config.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/constants.d.ts +2 -0
- package/package/aws-client-agent-mcp/dist/constants.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/constants.js +3 -1
- package/package/aws-client-agent-mcp/dist/constants.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/context-manager.d.ts +4 -1
- package/package/aws-client-agent-mcp/dist/context-manager.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/context-manager.js +6 -2
- package/package/aws-client-agent-mcp/dist/context-manager.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/context-manager.test.js +5 -3
- package/package/aws-client-agent-mcp/dist/context-manager.test.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/http-client.d.ts +5 -0
- package/package/aws-client-agent-mcp/dist/http-client.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/http-client.js +15 -1
- package/package/aws-client-agent-mcp/dist/http-client.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/mcp-server.d.ts +162 -71
- package/package/aws-client-agent-mcp/dist/mcp-server.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/mcp-server.js +1007 -504
- package/package/aws-client-agent-mcp/dist/mcp-server.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/mcp-server.test.js +371 -253
- package/package/aws-client-agent-mcp/dist/mcp-server.test.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/mcp-tools.d.ts +6 -17
- package/package/aws-client-agent-mcp/dist/mcp-tools.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/mcp-tools.js +20 -75
- package/package/aws-client-agent-mcp/dist/mcp-tools.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/memory-store.d.ts +45 -45
- package/package/aws-client-agent-mcp/dist/memory-store.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/memory-store.js +114 -162
- package/package/aws-client-agent-mcp/dist/memory-store.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/memory-store.test.js +175 -164
- package/package/aws-client-agent-mcp/dist/memory-store.test.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/memory-tools.d.ts +3 -9
- package/package/aws-client-agent-mcp/dist/memory-tools.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/memory-tools.js +31 -58
- package/package/aws-client-agent-mcp/dist/memory-tools.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/message-buffer.d.ts +40 -9
- package/package/aws-client-agent-mcp/dist/message-buffer.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/message-buffer.js +123 -23
- package/package/aws-client-agent-mcp/dist/message-buffer.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/server-memory-store.d.ts +13 -13
- package/package/aws-client-agent-mcp/dist/server-memory-store.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/server-memory-store.js +23 -16
- package/package/aws-client-agent-mcp/dist/server-memory-store.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/status-reporter.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/status-reporter.js +8 -5
- package/package/aws-client-agent-mcp/dist/status-reporter.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/status-reporter.test.js +93 -0
- package/package/aws-client-agent-mcp/dist/status-reporter.test.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/types.d.ts +12 -25
- package/package/aws-client-agent-mcp/dist/types.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/types.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/websocket-client.d.ts +34 -1
- package/package/aws-client-agent-mcp/dist/websocket-client.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/websocket-client.js +146 -18
- package/package/aws-client-agent-mcp/dist/websocket-client.js.map +1 -1
- package/package.json +17 -7
- package/dist/adapter/AcodeSdkAdapter.test.d.ts +0 -2
- package/dist/adapter/AcodeSdkAdapter.test.d.ts.map +0 -1
- package/dist/adapter/AcodeSdkAdapter.test.js +0 -2000
- package/dist/adapter/AdapterRegistry.test.d.ts +0 -5
- package/dist/adapter/AdapterRegistry.test.d.ts.map +0 -1
- package/dist/adapter/AdapterRegistry.test.js +0 -118
- package/dist/adapter/ClaudeSdkAdapter.test.d.ts +0 -2
- package/dist/adapter/ClaudeSdkAdapter.test.d.ts.map +0 -1
- package/dist/adapter/ClaudeSdkAdapter.test.js +0 -311
- package/dist/adapter/CodexSdkAdapter.test.d.ts +0 -2
- package/dist/adapter/CodexSdkAdapter.test.d.ts.map +0 -1
- package/dist/adapter/CodexSdkAdapter.test.js +0 -270
- package/dist/adapter/OpencodeSdkAdapter.test.d.ts +0 -2
- package/dist/adapter/OpencodeSdkAdapter.test.d.ts.map +0 -1
- package/dist/adapter/OpencodeSdkAdapter.test.js +0 -158
- package/dist/adapter/acode-tool-names.test.d.ts +0 -2
- package/dist/adapter/acode-tool-names.test.d.ts.map +0 -1
- package/dist/adapter/acode-tool-names.test.js +0 -28
- package/dist/adapter/adapter.test.d.ts +0 -5
- package/dist/adapter/adapter.test.d.ts.map +0 -1
- package/dist/adapter/adapter.test.js +0 -180
- package/dist/adapter/idle-poll-loop.test.d.ts +0 -2
- package/dist/adapter/idle-poll-loop.test.d.ts.map +0 -1
- package/dist/adapter/idle-poll-loop.test.js +0 -85
- package/dist/adapter/types.test.d.ts +0 -2
- package/dist/adapter/types.test.d.ts.map +0 -1
- package/dist/adapter/types.test.js +0 -50
- package/dist/adapters/cc-switch/mcp-acode.test.d.ts +0 -2
- package/dist/adapters/cc-switch/mcp-acode.test.d.ts.map +0 -1
- package/dist/adapters/cc-switch/mcp-acode.test.js +0 -80
- package/dist/adapters/cc-switch/mcp-claudecode.test.d.ts +0 -2
- package/dist/adapters/cc-switch/mcp-claudecode.test.d.ts.map +0 -1
- package/dist/adapters/cc-switch/mcp-claudecode.test.js +0 -75
- package/dist/adapters/cc-switch/mcp-codex.test.d.ts +0 -2
- package/dist/adapters/cc-switch/mcp-codex.test.d.ts.map +0 -1
- package/dist/adapters/cc-switch/mcp-codex.test.js +0 -126
- package/dist/adapters/cc-switch/mcp-opencode.test.d.ts +0 -2
- package/dist/adapters/cc-switch/mcp-opencode.test.d.ts.map +0 -1
- package/dist/adapters/cc-switch/mcp-opencode.test.js +0 -62
- package/dist/adapters/cc-switch/skill-directory.test.d.ts +0 -2
- package/dist/adapters/cc-switch/skill-directory.test.d.ts.map +0 -1
- package/dist/adapters/cc-switch/skill-directory.test.js +0 -74
- package/dist/config.test.d.ts +0 -2
- package/dist/config.test.d.ts.map +0 -1
- package/dist/config.test.js +0 -107
- package/dist/routes/ai-sources.test.d.ts +0 -2
- package/dist/routes/ai-sources.test.d.ts.map +0 -1
- package/dist/routes/ai-sources.test.js +0 -169
- package/dist/routes/file-browser.test.d.ts +0 -5
- package/dist/routes/file-browser.test.d.ts.map +0 -1
- package/dist/routes/file-browser.test.js +0 -155
- package/dist/routes/git.test.d.ts +0 -2
- package/dist/routes/git.test.d.ts.map +0 -1
- package/dist/routes/git.test.js +0 -330
- package/dist/routes/instance.test.d.ts +0 -5
- package/dist/routes/instance.test.d.ts.map +0 -1
- package/dist/routes/instance.test.js +0 -389
- package/dist/routes/mcp.test.d.ts +0 -5
- package/dist/routes/mcp.test.d.ts.map +0 -1
- package/dist/routes/mcp.test.js +0 -92
- package/dist/routes/memory-route-wiring.test.d.ts +0 -2
- package/dist/routes/memory-route-wiring.test.d.ts.map +0 -1
- package/dist/routes/memory-route-wiring.test.js +0 -15
- package/dist/routes/memory.test.d.ts +0 -2
- package/dist/routes/memory.test.d.ts.map +0 -1
- package/dist/routes/memory.test.js +0 -177
- package/dist/routes/properties.test.d.ts +0 -5
- package/dist/routes/properties.test.d.ts.map +0 -1
- package/dist/routes/properties.test.js +0 -72
- package/dist/routes/pty.test.d.ts +0 -2
- package/dist/routes/pty.test.d.ts.map +0 -1
- package/dist/routes/pty.test.js +0 -82
- package/dist/routes/runtime-binding.test.d.ts +0 -2
- package/dist/routes/runtime-binding.test.d.ts.map +0 -1
- package/dist/routes/runtime-binding.test.js +0 -32
- package/dist/routes/sessions.test.d.ts +0 -5
- package/dist/routes/sessions.test.d.ts.map +0 -1
- package/dist/routes/sessions.test.js +0 -86
- package/dist/routes/skills.test.d.ts +0 -5
- package/dist/routes/skills.test.d.ts.map +0 -1
- package/dist/routes/skills.test.js +0 -50
- package/dist/routes/system-metrics.test.d.ts +0 -2
- package/dist/routes/system-metrics.test.d.ts.map +0 -1
- package/dist/routes/system-metrics.test.js +0 -16
- package/dist/routes/terminal.stop-options.test.d.ts +0 -2
- package/dist/routes/terminal.stop-options.test.d.ts.map +0 -1
- package/dist/routes/terminal.stop-options.test.js +0 -39
- package/dist/routes/terminal.test.d.ts +0 -2
- package/dist/routes/terminal.test.d.ts.map +0 -1
- package/dist/routes/terminal.test.js +0 -746
- package/dist/routes/yml.test.d.ts +0 -5
- package/dist/routes/yml.test.d.ts.map +0 -1
- package/dist/routes/yml.test.js +0 -58
- package/dist/services/ai-source-apply.test.d.ts +0 -2
- package/dist/services/ai-source-apply.test.d.ts.map +0 -1
- package/dist/services/ai-source-apply.test.js +0 -138
- package/dist/services/auto-register.test.d.ts +0 -2
- package/dist/services/auto-register.test.d.ts.map +0 -1
- package/dist/services/auto-register.test.js +0 -184
- package/dist/services/aws-client-agent-mcp.test.d.ts +0 -2
- package/dist/services/aws-client-agent-mcp.test.d.ts.map +0 -1
- package/dist/services/aws-client-agent-mcp.test.js +0 -242
- package/dist/services/bridge-package-publish-hooks.test.d.ts +0 -2
- package/dist/services/bridge-package-publish-hooks.test.d.ts.map +0 -1
- package/dist/services/bridge-package-publish-hooks.test.js +0 -136
- package/dist/services/cc-switch-discovery.test.d.ts +0 -2
- package/dist/services/cc-switch-discovery.test.d.ts.map +0 -1
- package/dist/services/cc-switch-discovery.test.js +0 -56
- package/dist/services/cli-commands.test.d.ts +0 -2
- package/dist/services/cli-commands.test.d.ts.map +0 -1
- package/dist/services/cli-commands.test.js +0 -230
- package/dist/services/instance-init-service.test.d.ts +0 -2
- package/dist/services/instance-init-service.test.d.ts.map +0 -1
- package/dist/services/instance-init-service.test.js +0 -140
- package/dist/services/instance-state.test.d.ts +0 -2
- package/dist/services/instance-state.test.d.ts.map +0 -1
- package/dist/services/instance-state.test.js +0 -245
- package/dist/services/mcp-launch-binding-queue.test.d.ts +0 -2
- package/dist/services/mcp-launch-binding-queue.test.d.ts.map +0 -1
- package/dist/services/mcp-launch-binding-queue.test.js +0 -181
- package/dist/services/runtime-binding.test.d.ts +0 -2
- package/dist/services/runtime-binding.test.d.ts.map +0 -1
- package/dist/services/runtime-binding.test.js +0 -78
- package/dist/services/runtime-lifecycle-policy.test.d.ts +0 -2
- package/dist/services/runtime-lifecycle-policy.test.d.ts.map +0 -1
- package/dist/services/runtime-lifecycle-policy.test.js +0 -41
- package/dist/services/session-output.test.d.ts +0 -5
- package/dist/services/session-output.test.d.ts.map +0 -1
- package/dist/services/session-output.test.js +0 -177
- package/dist/services/startup-config-wizard.test.d.ts +0 -2
- package/dist/services/startup-config-wizard.test.d.ts.map +0 -1
- package/dist/services/startup-config-wizard.test.js +0 -184
- package/dist/services/terminal-persistence.test.d.ts +0 -5
- package/dist/services/terminal-persistence.test.d.ts.map +0 -1
- package/dist/services/terminal-persistence.test.js +0 -159
- package/dist/services/tool-installer.test.d.ts +0 -2
- package/dist/services/tool-installer.test.d.ts.map +0 -1
- package/dist/services/tool-installer.test.js +0 -225
- package/dist/services/workspace-files.test.d.ts +0 -2
- package/dist/services/workspace-files.test.d.ts.map +0 -1
- package/dist/services/workspace-files.test.js +0 -648
- package/dist/services/workspace-watch.test.d.ts +0 -2
- package/dist/services/workspace-watch.test.d.ts.map +0 -1
- package/dist/services/workspace-watch.test.js +0 -38
- package/dist/utils/file-utils.test.d.ts +0 -2
- package/dist/utils/file-utils.test.d.ts.map +0 -1
- package/dist/utils/file-utils.test.js +0 -244
- package/dist/utils/logger.test.d.ts +0 -2
- package/dist/utils/logger.test.d.ts.map +0 -1
- package/dist/utils/logger.test.js +0 -93
- package/dist/utils/sdk-package-loader.test.d.ts +0 -2
- package/dist/utils/sdk-package-loader.test.d.ts.map +0 -1
- package/dist/utils/sdk-package-loader.test.js +0 -84
- package/dist/utils/validation.test.d.ts +0 -2
- package/dist/utils/validation.test.d.ts.map +0 -1
- package/dist/utils/validation.test.js +0 -88
- package/dist/utils/yaml-utils.test.d.ts +0 -2
- package/dist/utils/yaml-utils.test.d.ts.map +0 -1
- package/dist/utils/yaml-utils.test.js +0 -363
|
@@ -135,6 +135,12 @@ export declare class ClaudeSdkAdapter extends EventEmitter implements BaseProvid
|
|
|
135
135
|
* 时间线事件由 handleToolUse 发送,这样能获取完整的工具参数
|
|
136
136
|
*/
|
|
137
137
|
private handleStreamEvent;
|
|
138
|
+
/**
|
|
139
|
+
* 从 Claude SDK 工具名中提取 MCP 服务器名
|
|
140
|
+
* Claude SDK 的 MCP 工具命名格式:mcp__<server>__<tool>
|
|
141
|
+
* 例如:mcp__memory-server__list_memories -> memory-server
|
|
142
|
+
*/
|
|
143
|
+
private extractMcpServerName;
|
|
138
144
|
/**
|
|
139
145
|
* 提取工具名后缀
|
|
140
146
|
* 用于匹配不同格式的工具名
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClaudeSdkAdapter.d.ts","sourceRoot":"","sources":["../../src/adapter/ClaudeSdkAdapter.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ClaudeSdkAdapter.d.ts","sourceRoot":"","sources":["../../src/adapter/ClaudeSdkAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -853,6 +853,7 @@ export class ClaudeSdkAdapter extends EventEmitter {
|
|
|
853
853
|
this.pendingQuestions.set(sessionId, { resolve, toolInput });
|
|
854
854
|
this.emit('ask-user-question', {
|
|
855
855
|
sessionId,
|
|
856
|
+
toolCallId: this.activeToolUseIds.get(sessionId) || undefined,
|
|
856
857
|
questions: toolInput.questions,
|
|
857
858
|
});
|
|
858
859
|
});
|
|
@@ -961,12 +962,14 @@ export class ClaudeSdkAdapter extends EventEmitter {
|
|
|
961
962
|
const actionInfo = { ...getToolActionInfo(msg.tool_name, msg.tool_input), actionId: msg.tool_use_id };
|
|
962
963
|
const nextStatus = actionInfo.actionType === 'idle' ? 'waiting_input' : 'tool_using';
|
|
963
964
|
session.status = nextStatus;
|
|
965
|
+
const mcpServer = this.extractMcpServerName(msg.tool_name || '');
|
|
964
966
|
this.emit('status-change', sessionId, nextStatus, {
|
|
965
967
|
actionType: actionInfo.actionType,
|
|
966
968
|
actionLabel: actionInfo.actionLabel,
|
|
967
969
|
actionDetail: actionInfo.actionDetail,
|
|
968
970
|
actionId: actionInfo.actionId,
|
|
969
971
|
usage: session.totalUsage,
|
|
972
|
+
...(mcpServer ? { metadata: { mcpServer } } : {}),
|
|
970
973
|
});
|
|
971
974
|
if (actionInfo.actionType !== 'idle') {
|
|
972
975
|
this.stopIdleDetection(sessionId);
|
|
@@ -1110,6 +1113,7 @@ export class ClaudeSdkAdapter extends EventEmitter {
|
|
|
1110
1113
|
// 获取工具动作分类信息
|
|
1111
1114
|
const actionInfo = getToolActionInfo(msg.tool_name, msg.tool_input);
|
|
1112
1115
|
console.log(`[ClaudeSdkAdapter] Tool use: ${msg.tool_name}, actionType: ${actionInfo.actionType}, actionDetail: ${actionInfo.actionDetail}`);
|
|
1116
|
+
const mcpServer = this.extractMcpServerName(msg.tool_name || '');
|
|
1113
1117
|
this.emitEvent(sessionId, {
|
|
1114
1118
|
type: 'tool_use_start',
|
|
1115
1119
|
sessionId,
|
|
@@ -1121,6 +1125,7 @@ export class ClaudeSdkAdapter extends EventEmitter {
|
|
|
1121
1125
|
actionType: actionInfo.actionType,
|
|
1122
1126
|
actionLabel: actionInfo.actionLabel,
|
|
1123
1127
|
actionDetail: actionInfo.actionDetail,
|
|
1128
|
+
...(mcpServer ? { metadata: { mcpServer } } : {}),
|
|
1124
1129
|
},
|
|
1125
1130
|
});
|
|
1126
1131
|
// 记录到消息历史
|
|
@@ -1196,8 +1201,9 @@ export class ClaudeSdkAdapter extends EventEmitter {
|
|
|
1196
1201
|
console.warn(`[ClaudeSdkAdapter] Failed to parse tool input JSON:`, jsonStr.slice(0, 100));
|
|
1197
1202
|
}
|
|
1198
1203
|
}
|
|
1199
|
-
//
|
|
1204
|
+
// 获取工具动作分类信息(使用��整参数)
|
|
1200
1205
|
const actionInfo = { ...getToolActionInfo(recentInfo.name, toolInput), actionId: toolId };
|
|
1206
|
+
const mcpServer = this.extractMcpServerName(recentInfo.name);
|
|
1201
1207
|
// 更新状态
|
|
1202
1208
|
session.status = 'tool_using';
|
|
1203
1209
|
this.emit('status-change', sessionId, 'tool_using', {
|
|
@@ -1206,6 +1212,7 @@ export class ClaudeSdkAdapter extends EventEmitter {
|
|
|
1206
1212
|
actionDetail: actionInfo.actionDetail,
|
|
1207
1213
|
actionId: actionInfo.actionId,
|
|
1208
1214
|
usage: session.totalUsage,
|
|
1215
|
+
...(mcpServer ? { metadata: { mcpServer } } : {}),
|
|
1209
1216
|
});
|
|
1210
1217
|
this.stopIdleDetection(sessionId);
|
|
1211
1218
|
// 发送工具调用开始事件(此时有完整参数)
|
|
@@ -1221,6 +1228,7 @@ export class ClaudeSdkAdapter extends EventEmitter {
|
|
|
1221
1228
|
actionLabel: actionInfo.actionLabel,
|
|
1222
1229
|
actionDetail: actionInfo.actionDetail,
|
|
1223
1230
|
actionId: actionInfo.actionId,
|
|
1231
|
+
...(mcpServer ? { metadata: { mcpServer } } : {}),
|
|
1224
1232
|
},
|
|
1225
1233
|
});
|
|
1226
1234
|
// 记录到消息历史
|
|
@@ -1242,6 +1250,21 @@ export class ClaudeSdkAdapter extends EventEmitter {
|
|
|
1242
1250
|
}
|
|
1243
1251
|
}
|
|
1244
1252
|
}
|
|
1253
|
+
/**
|
|
1254
|
+
* 从 Claude SDK 工具名中提取 MCP 服务器名
|
|
1255
|
+
* Claude SDK 的 MCP 工具命名格式:mcp__<server>__<tool>
|
|
1256
|
+
* 例如:mcp__memory-server__list_memories -> memory-server
|
|
1257
|
+
*/
|
|
1258
|
+
extractMcpServerName(toolName) {
|
|
1259
|
+
if (toolName.startsWith('mcp__')) {
|
|
1260
|
+
const parts = toolName.split('__');
|
|
1261
|
+
// mcp__<server>__<tool> — 至少 3 段
|
|
1262
|
+
if (parts.length >= 3) {
|
|
1263
|
+
return parts[1];
|
|
1264
|
+
}
|
|
1265
|
+
}
|
|
1266
|
+
return undefined;
|
|
1267
|
+
}
|
|
1245
1268
|
/**
|
|
1246
1269
|
* 提取工具名后缀
|
|
1247
1270
|
* 用于匹配不同格式的工具名
|
|
@@ -57,6 +57,25 @@ export declare class OpencodeSdkAdapter extends EventEmitter implements BaseProv
|
|
|
57
57
|
private runSseLoop;
|
|
58
58
|
private handleOpenCodeEvent;
|
|
59
59
|
private handlePartUpdate;
|
|
60
|
+
/**
|
|
61
|
+
* 同步 todowrite 工具调用的 todo 到公共 TodoStore 路径 ~/.acode/todos/{agentId}.json。
|
|
62
|
+
*
|
|
63
|
+
* OpenCode 内置 todowrite 工具与 ACode 共享同一文件格式,确保 poll_message
|
|
64
|
+
* 的 buildTodoReminderNotification() 能在 OpenCode runtime 下正确感知未完成 todo。
|
|
65
|
+
*
|
|
66
|
+
* 触发条件:
|
|
67
|
+
* - toolName 为 todowrite 或 todo_write
|
|
68
|
+
* - state.status 为 completed(工具调用成功完成)
|
|
69
|
+
* - session.config.agentId 存在
|
|
70
|
+
* - toolInput 包含有效的 todos 数组
|
|
71
|
+
*
|
|
72
|
+
* 写入格式(与 ACode TodoStore 一致):
|
|
73
|
+
* { agentId, updatedAt, background, todos: [{content, status, priority}] }
|
|
74
|
+
*
|
|
75
|
+
* 测试替身可通过覆写 getTodoStoreDir 注入临时目录。
|
|
76
|
+
*/
|
|
77
|
+
private getTodoStoreDir;
|
|
78
|
+
private syncTodosFromToolCall;
|
|
60
79
|
private emitEvent;
|
|
61
80
|
private startIdleDetection;
|
|
62
81
|
private stopIdleDetection;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpencodeSdkAdapter.d.ts","sourceRoot":"","sources":["../../src/adapter/OpencodeSdkAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAkB3C,OAAO,EAKL,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EAExB,KAAK,aAAa,EACnB,MAAM,YAAY,CAAC;AA8HpB,qBAAa,kBAAmB,SAAQ,YAAa,YAAW,mBAAmB;IACjF,QAAQ,CAAC,UAAU,cAAc;IACjC,QAAQ,CAAC,WAAW,cAAc;IAElC,OAAO,CAAC,QAAQ,CAA2C;IAC3D,OAAO,CAAC,SAAS,CAAC,CAAoB;IAEhC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAkK5E,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,iBAAiB,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAqDzG,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBnE,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7F,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE;QAAE,gBAAgB,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAUnG,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAclD,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BxD,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,mBAAmB,EAAE;IAIzD,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAItC,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI3D,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAI9D,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAOpD,OAAO,IAAI,IAAI;IAaf;;;OAGG;YACW,OAAO;YA2BP,aAAa;IAmB3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAahC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,YAAY;YAYN,UAAU;IAuBxB,OAAO,CAAC,mBAAmB;IAiJ3B,OAAO,CAAC,gBAAgB;
|
|
1
|
+
{"version":3,"file":"OpencodeSdkAdapter.d.ts","sourceRoot":"","sources":["../../src/adapter/OpencodeSdkAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAkB3C,OAAO,EAKL,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EAExB,KAAK,aAAa,EACnB,MAAM,YAAY,CAAC;AA8HpB,qBAAa,kBAAmB,SAAQ,YAAa,YAAW,mBAAmB;IACjF,QAAQ,CAAC,UAAU,cAAc;IACjC,QAAQ,CAAC,WAAW,cAAc;IAElC,OAAO,CAAC,QAAQ,CAA2C;IAC3D,OAAO,CAAC,SAAS,CAAC,CAAoB;IAEhC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAkK5E,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,iBAAiB,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAqDzG,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBnE,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7F,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE;QAAE,gBAAgB,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAUnG,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAclD,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BxD,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,mBAAmB,EAAE;IAIzD,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAItC,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI3D,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAI9D,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAOpD,OAAO,IAAI,IAAI;IAaf;;;OAGG;YACW,OAAO;YA2BP,aAAa;IAmB3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAahC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,YAAY;YAYN,UAAU;IAuBxB,OAAO,CAAC,mBAAmB;IAiJ3B,OAAO,CAAC,gBAAgB;IAwHxB;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,eAAe;YAIT,qBAAqB;IA0CnC,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,kBAAkB;IAuC1B,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,2BAA2B;CAOpC"}
|
|
@@ -720,6 +720,12 @@ export class OpencodeSdkAdapter extends EventEmitter {
|
|
|
720
720
|
this.emit('status-change', sessionId, 'tool_using', { ...actionInfo, usage: session.adapterSession.totalUsage });
|
|
721
721
|
}
|
|
722
722
|
else if (state.status === 'completed') {
|
|
723
|
+
// 同步 todowrite 工具完成的 todo 到公共 TodoStore 路径,供 poll_message 提醒使用
|
|
724
|
+
if (toolName === 'todowrite' || toolName === 'todo_write') {
|
|
725
|
+
this.syncTodosFromToolCall(session, toolInput).catch((err) => {
|
|
726
|
+
console.warn('[OpencodeSdkAdapter] 同步 todo 到文件失败:', err);
|
|
727
|
+
});
|
|
728
|
+
}
|
|
723
729
|
emitToolStart();
|
|
724
730
|
const output = redactTransientClipboardPastePaths(state.output);
|
|
725
731
|
this.emitEvent({
|
|
@@ -745,6 +751,62 @@ export class OpencodeSdkAdapter extends EventEmitter {
|
|
|
745
751
|
}
|
|
746
752
|
}
|
|
747
753
|
}
|
|
754
|
+
/**
|
|
755
|
+
* 同步 todowrite 工具调用的 todo 到公共 TodoStore 路径 ~/.acode/todos/{agentId}.json。
|
|
756
|
+
*
|
|
757
|
+
* OpenCode 内置 todowrite 工具与 ACode 共享同一文件格式,确保 poll_message
|
|
758
|
+
* 的 buildTodoReminderNotification() 能在 OpenCode runtime 下正确感知未完成 todo。
|
|
759
|
+
*
|
|
760
|
+
* 触发条件:
|
|
761
|
+
* - toolName 为 todowrite 或 todo_write
|
|
762
|
+
* - state.status 为 completed(工具调用成功完成)
|
|
763
|
+
* - session.config.agentId 存在
|
|
764
|
+
* - toolInput 包含有效的 todos 数组
|
|
765
|
+
*
|
|
766
|
+
* 写入格式(与 ACode TodoStore 一致):
|
|
767
|
+
* { agentId, updatedAt, background, todos: [{content, status, priority}] }
|
|
768
|
+
*
|
|
769
|
+
* 测试替身可通过覆写 getTodoStoreDir 注入临时目录。
|
|
770
|
+
*/
|
|
771
|
+
getTodoStoreDir() {
|
|
772
|
+
return path.join(os.homedir(), '.acode', 'todos');
|
|
773
|
+
}
|
|
774
|
+
async syncTodosFromToolCall(session, toolInput) {
|
|
775
|
+
const agentId = session.config.agentId;
|
|
776
|
+
if (!agentId)
|
|
777
|
+
return;
|
|
778
|
+
const rawTodos = toolInput['todos'];
|
|
779
|
+
if (!Array.isArray(rawTodos) || rawTodos.length === 0)
|
|
780
|
+
return;
|
|
781
|
+
// 校验并标准化为 TodoItem 格式
|
|
782
|
+
const todos = [];
|
|
783
|
+
for (const item of rawTodos) {
|
|
784
|
+
if (item && typeof item === 'object') {
|
|
785
|
+
const content = typeof item.content === 'string' ? item.content.trim() : '';
|
|
786
|
+
const status = typeof item.status === 'string' ? item.status : '';
|
|
787
|
+
const priority = typeof item.priority === 'string' ? item.priority : '';
|
|
788
|
+
if (content && status && priority) {
|
|
789
|
+
todos.push({ content, status, priority });
|
|
790
|
+
}
|
|
791
|
+
}
|
|
792
|
+
}
|
|
793
|
+
if (todos.length === 0)
|
|
794
|
+
return;
|
|
795
|
+
// 安全化 agentId 防止路径穿越
|
|
796
|
+
const safe = String(agentId).replace(/[^a-zA-Z0-9_-]/g, '_');
|
|
797
|
+
const todosDir = this.getTodoStoreDir();
|
|
798
|
+
const target = path.join(todosDir, `${safe}.json`);
|
|
799
|
+
const doc = {
|
|
800
|
+
agentId,
|
|
801
|
+
updatedAt: new Date().toISOString(),
|
|
802
|
+
background: 'OpenCode runtime todos',
|
|
803
|
+
todos,
|
|
804
|
+
};
|
|
805
|
+
await fs.promises.mkdir(todosDir, { recursive: true });
|
|
806
|
+
const tmp = `${target}.tmp`;
|
|
807
|
+
await fs.promises.writeFile(tmp, JSON.stringify(doc, null, 2), 'utf-8');
|
|
808
|
+
await fs.promises.rename(tmp, target);
|
|
809
|
+
}
|
|
748
810
|
emitEvent(event) {
|
|
749
811
|
this.emit('event', event);
|
|
750
812
|
}
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
* SDK 空闲轮询驱动器。
|
|
3
3
|
* 主流程:进入 waiting_input -> 立即触发 poll 提示或延迟触发普通 idle 命令 -> 交给 adapter 启动模型 turn -> turn 完成后由 adapter 再次启动本驱动器。
|
|
4
4
|
*/
|
|
5
|
+
import type { SessionStatus } from "./types.js";
|
|
5
6
|
export interface IdlePollLoopOptions {
|
|
6
|
-
readonly getStatus: () =>
|
|
7
|
+
readonly getStatus: () => SessionStatus | undefined;
|
|
7
8
|
readonly getCommand: () => string | undefined;
|
|
8
9
|
readonly isPollingCommand: (command: string) => boolean;
|
|
9
10
|
readonly dispatchPollingPrompt: (command: string) => void | Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idle-poll-loop.d.ts","sourceRoot":"","sources":["../../src/adapter/idle-poll-loop.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"idle-poll-loop.d.ts","sourceRoot":"","sources":["../../src/adapter/idle-poll-loop.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,aAAa,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,UAAU,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IACxD,QAAQ,CAAC,qBAAqB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1E,QAAQ,CAAC,0BAA0B,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/E,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CACtC;AAID;;;GAGG;AACH,qBAAa,YAAY;IAMX,OAAO,CAAC,QAAQ,CAAC,OAAO;IALpC,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;gBAEf,OAAO,EAAE,mBAAmB;IAKzD;;;OAGG;IACH,KAAK,IAAI,IAAI;IAmBb;;;OAGG;IACH,IAAI,IAAI,IAAI;YAOE,IAAI;CAgBnB"}
|
package/dist/adapter/types.d.ts
CHANGED
|
@@ -5,13 +5,13 @@
|
|
|
5
5
|
* 参考自 SpectrAI 项目的 adapter 设计,用于支持多种 AI Provider
|
|
6
6
|
*/
|
|
7
7
|
import { EventEmitter } from "node:events";
|
|
8
|
-
export type SessionStatus = "starting" | "thinking" | "tool_using" | "waiting_input" | "completed" | "terminated" | "error";
|
|
9
|
-
export type ProviderEventType = "ai_request" | "text_delta" | "thinking" | "command_output" | "tool_use_start" | "tool_use_end" | "permission_request" | "ask_user_question" | "exit_plan_mode" | "turn_complete" | "session_complete" | "error";
|
|
8
|
+
export type SessionStatus = "starting" | "thinking" | "tool_using" | "waiting_input" | "completed" | "terminated" | "error" | "compacting";
|
|
9
|
+
export type ProviderEventType = "ai_request" | "text_delta" | "thinking" | "command_output" | "tool_use_start" | "tool_use_end" | "permission_request" | "ask_user_question" | "exit_plan_mode" | "turn_complete" | "session_complete" | "error" | "context_compaction" | "runtime_capabilities";
|
|
10
10
|
/**
|
|
11
11
|
* Agent 工具动作类型分类
|
|
12
12
|
* 用于细粒度显示 agent 当前正在执行的具体动作
|
|
13
13
|
*/
|
|
14
|
-
export type ToolActionType = "skill" | "mcp" | "idle" | "edit_file" | "write_file" | "read_file" | "bash" | "search" | "web" | "ai_request" | "lsp" | "notebook" | "other";
|
|
14
|
+
export type ToolActionType = "skill" | "mcp" | "idle" | "edit_file" | "write_file" | "read_file" | "bash" | "search" | "web" | "ai_request" | "lsp" | "notebook" | "other" | "context_compaction" | "runtime_capabilities";
|
|
15
15
|
/**
|
|
16
16
|
* 工具动作信息
|
|
17
17
|
*/
|
|
@@ -59,6 +59,15 @@ export interface RuntimeTokenUsage {
|
|
|
59
59
|
outputTokens: number;
|
|
60
60
|
/** Model context window token limit used for the used/limit display. */
|
|
61
61
|
contextLimit?: number;
|
|
62
|
+
/** Model max output token limit, used to compute the compaction point. */
|
|
63
|
+
maxOutput?: number;
|
|
64
|
+
/** Provider 显式输入上限(部分 Provider 的 input+output 总额 ≠ context 上限)。
|
|
65
|
+
* 来自 runtime resolveProviderConfig,前端用于精确显示压缩点。 */
|
|
66
|
+
inputLimit?: number;
|
|
67
|
+
/** 后端实际触发压缩的阈值(= min(contextLimit×动态比例, hardLimit - min(buffer, maxOutput)))。
|
|
68
|
+
* 动态比例按窗口大小分级(<32K=0.70, 32K-128K=0.75, 128K-512K=0.80, >=512K=0.85)。
|
|
69
|
+
* 前端 AgentContextPanel 优先用此值显示竖线,消除前端自算公式的脱节。 */
|
|
70
|
+
compactionThreshold?: number;
|
|
62
71
|
}
|
|
63
72
|
export type CommandOutputStream = "stdout" | "stderr" | "mixed";
|
|
64
73
|
export interface RuntimeStatusActionInfo {
|
|
@@ -69,6 +78,8 @@ export interface RuntimeStatusActionInfo {
|
|
|
69
78
|
actionInput?: string;
|
|
70
79
|
actionResult?: string;
|
|
71
80
|
actionId?: string;
|
|
81
|
+
/** 父事件 ID,用于事件父子层级(如压缩子事件关联到父压缩事件) */
|
|
82
|
+
parentId?: string;
|
|
72
83
|
usage?: RuntimeTokenUsage;
|
|
73
84
|
}
|
|
74
85
|
export interface ProviderEvent {
|
|
@@ -136,6 +147,8 @@ export interface ProviderEvent {
|
|
|
136
147
|
actionDetail?: string;
|
|
137
148
|
/** 工具调用关联 ID(tool_use_start / tool_use_end) */
|
|
138
149
|
actionId?: string;
|
|
150
|
+
/** 父事件 ID,用于事件父子层级(如压缩子事件关联到父压缩事件) */
|
|
151
|
+
parentId?: string;
|
|
139
152
|
/** 工具返回数据(tool_use_end) */
|
|
140
153
|
actionResult?: string;
|
|
141
154
|
/** 命令输出批次序号(command_output) */
|
|
@@ -146,8 +159,48 @@ export interface ProviderEvent {
|
|
|
146
159
|
commandFilePath?: string;
|
|
147
160
|
/** 命令行数(command_output) */
|
|
148
161
|
commandLineCount?: number;
|
|
162
|
+
/** 运行时能力清单(runtime_capabilities) */
|
|
163
|
+
capabilities?: RuntimeCapabilities;
|
|
149
164
|
};
|
|
150
165
|
}
|
|
166
|
+
/**
|
|
167
|
+
* 运行时能力清单
|
|
168
|
+
* 描述 ACode 会话启动时加载的 MCP 工具与 Skill 列表,供前端调试面板展示。
|
|
169
|
+
*/
|
|
170
|
+
export interface RuntimeSkillGroup {
|
|
171
|
+
/** 目录完整路径 */
|
|
172
|
+
dir: string;
|
|
173
|
+
/** 目录是否存在 */
|
|
174
|
+
exists: boolean;
|
|
175
|
+
/** 该目录下的 skills 列表 */
|
|
176
|
+
skills: Array<{
|
|
177
|
+
name: string;
|
|
178
|
+
description?: string;
|
|
179
|
+
directory?: string;
|
|
180
|
+
}>;
|
|
181
|
+
}
|
|
182
|
+
export interface RuntimeCapabilities {
|
|
183
|
+
/** 能力类型:mcp / skill / combined(合并的完整能力清单) */
|
|
184
|
+
kind: "mcp" | "skill" | "combined";
|
|
185
|
+
/** MCP 服务器名列表 */
|
|
186
|
+
mcpServers?: string[];
|
|
187
|
+
/** MCP 工具列表 */
|
|
188
|
+
mcpTools?: Array<{
|
|
189
|
+
name: string;
|
|
190
|
+
source: string;
|
|
191
|
+
description?: string;
|
|
192
|
+
}>;
|
|
193
|
+
/** Skill 列表(所有目录合并,向后兼容) */
|
|
194
|
+
skills?: Array<{
|
|
195
|
+
name: string;
|
|
196
|
+
description?: string;
|
|
197
|
+
directory?: string;
|
|
198
|
+
}>;
|
|
199
|
+
/** Skill 目录路径(全局,向后兼容) */
|
|
200
|
+
skillsDir?: string;
|
|
201
|
+
/** 按目录分组的 Skill 列表,供前端按目录展示(含空目录节点) */
|
|
202
|
+
skillGroups?: RuntimeSkillGroup[];
|
|
203
|
+
}
|
|
151
204
|
/**
|
|
152
205
|
* 实例自配置 AI provider 覆盖(仅 ACode 适配器消费)。
|
|
153
206
|
*
|
|
@@ -161,6 +214,10 @@ export interface AdapterInstanceAiConfig {
|
|
|
161
214
|
apiKey?: string;
|
|
162
215
|
/** Per-instance model reasoning effort (minimal|low|medium|high|xhigh) */
|
|
163
216
|
effort?: string;
|
|
217
|
+
/** Sub Agent 专用模型覆盖(空值=继承主 Agent 模型,仅 ACode 消费) */
|
|
218
|
+
subAgentModel?: string;
|
|
219
|
+
/** Sub Agent 专用思考强度覆盖(空值=继承主 Agent 强度,仅 ACode 消费) */
|
|
220
|
+
subAgentEffort?: string;
|
|
164
221
|
}
|
|
165
222
|
export interface AdapterSessionConfig {
|
|
166
223
|
/** CLI 命令(支持绝对路径) */
|
|
@@ -201,6 +258,10 @@ export interface AdapterSessionConfig {
|
|
|
201
258
|
* per-instance acode.json 后作为 configPath 使用。
|
|
202
259
|
*/
|
|
203
260
|
instanceAiConfig?: AdapterInstanceAiConfig;
|
|
261
|
+
/** Sub Agent 模型覆盖(仅 ACode 消费,空值=继承主 Agent 模型) */
|
|
262
|
+
subAgentModel?: string;
|
|
263
|
+
/** Sub Agent 思考强度覆盖(仅 ACode 消费,空值=继承主 Agent 强度) */
|
|
264
|
+
subAgentEffort?: string;
|
|
204
265
|
/** Provider 特定参数 */
|
|
205
266
|
providerArgs?: string[];
|
|
206
267
|
/** 环境变量覆盖 */
|
|
@@ -227,12 +288,8 @@ export interface AdapterSession {
|
|
|
227
288
|
messages: ConversationMessage[];
|
|
228
289
|
/** 创建时间 */
|
|
229
290
|
createdAt: string;
|
|
230
|
-
/**
|
|
231
|
-
totalUsage:
|
|
232
|
-
inputTokens: number;
|
|
233
|
-
outputTokens: number;
|
|
234
|
-
contextLimit?: number;
|
|
235
|
-
};
|
|
291
|
+
/** Token 用量快照(input=当前上下文大小,output=当前轮输出,均为覆盖式赋值) */
|
|
292
|
+
totalUsage: RuntimeTokenUsage;
|
|
236
293
|
/** SDK 进程 PID(用于检测进程是否存活) */
|
|
237
294
|
pid?: number;
|
|
238
295
|
}
|
|
@@ -261,6 +318,8 @@ export interface PermissionRequest {
|
|
|
261
318
|
}
|
|
262
319
|
export interface AskUserQuestionRequest {
|
|
263
320
|
sessionId: string;
|
|
321
|
+
/** 提问实例的唯一标识(toolCallId),用于前端精确去重,区分同一会话内连续多次提问 */
|
|
322
|
+
toolCallId?: string;
|
|
264
323
|
questions: Array<{
|
|
265
324
|
question: string;
|
|
266
325
|
header?: string;
|
|
@@ -374,6 +433,24 @@ export declare abstract class BaseProviderAdapter extends EventEmitter {
|
|
|
374
433
|
* 获取会话的 SDK 进程 PID(用于孤儿进程检测)
|
|
375
434
|
*/
|
|
376
435
|
abstract getSessionPid?(sessionId: string): number | undefined;
|
|
436
|
+
/**
|
|
437
|
+
* 主动查询会话的运行时能力清单(MCP 工具 + skills)。
|
|
438
|
+
* 只读 adapter 内存缓存,不触发 runtime 重新探测。
|
|
439
|
+
* 仅 AcodeSdkAdapter 实现此方法(其他 adapter 返回 undefined)。
|
|
440
|
+
* @returns 缓存的能力清单,若尚未收到任何 runtime_capabilities 事件则返回 undefined
|
|
441
|
+
*/
|
|
442
|
+
abstract getCapabilities?(sessionId: string): RuntimeCapabilities | undefined;
|
|
443
|
+
/**
|
|
444
|
+
* 主动查询会话当前挂起的 ask_user_question(agent 提问)。
|
|
445
|
+
* 只读 adapter 内存缓存,不触发 runtime 重新探测。
|
|
446
|
+
* 仅 AcodeSdkAdapter 实现此方法(其他 adapter 返回 undefined)。
|
|
447
|
+
* 由 bridge GET /runtime/sdk/pending-questions 端点调用,用于前端刷新后重建提问 UI。
|
|
448
|
+
* @returns 挂起提问的 toolCallId 与 questions 数组;undefined 表示当前无挂起提问
|
|
449
|
+
*/
|
|
450
|
+
abstract getPendingQuestion?(sessionId: string): {
|
|
451
|
+
toolCallId: string;
|
|
452
|
+
questions: unknown[];
|
|
453
|
+
} | undefined;
|
|
377
454
|
/**
|
|
378
455
|
* 清理所有资源(应用退出时调用)
|
|
379
456
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/adapter/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,MAAM,MAAM,aAAa,GACrB,UAAU,GACV,UAAU,GACV,YAAY,GACZ,eAAe,GACf,WAAW,GACX,YAAY,GACZ,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/adapter/types.ts"],"names":[],"mappings":"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"}
|
package/dist/adapter/types.js
CHANGED
|
@@ -64,7 +64,6 @@ const KNOWN_MCP_TOOLS = {
|
|
|
64
64
|
get_colleague: "aws-mcp",
|
|
65
65
|
get_group_rooms: "aws-mcp",
|
|
66
66
|
get_profile: "aws-mcp",
|
|
67
|
-
get_status: "aws-mcp",
|
|
68
67
|
hire_colleague: "aws-mcp",
|
|
69
68
|
hire_colleagues_batch: "aws-mcp",
|
|
70
69
|
send_group: "aws-mcp",
|
|
@@ -139,7 +138,9 @@ export function getToolActionInfo(toolName, toolInput, metadata) {
|
|
|
139
138
|
? name.slice(name.indexOf("-mcp__") + 6)
|
|
140
139
|
: name.includes("/")
|
|
141
140
|
? name.split("/").filter(Boolean).at(-1) || name
|
|
142
|
-
: name
|
|
141
|
+
: name.includes("__")
|
|
142
|
+
? name.split("__").pop() || name
|
|
143
|
+
: name;
|
|
143
144
|
const normalizedSemanticToolName = semanticToolName.replace(/[_-]/g, "");
|
|
144
145
|
const normalizeSkillList = (value) => {
|
|
145
146
|
if (!Array.isArray(value)) {
|
|
@@ -273,6 +274,13 @@ export function getToolActionInfo(toolName, toolInput, metadata) {
|
|
|
273
274
|
actionDetail: getCanonicalMcpDetail(toolName),
|
|
274
275
|
};
|
|
275
276
|
}
|
|
277
|
+
// ask_user_question 内置工具:阻塞等待用户回答
|
|
278
|
+
if (matchesToolName("ask_user_question", "askuserquestion")) {
|
|
279
|
+
return {
|
|
280
|
+
actionType: "other",
|
|
281
|
+
actionLabel: "等待回答",
|
|
282
|
+
};
|
|
283
|
+
}
|
|
276
284
|
// MCP 工具调用
|
|
277
285
|
// 优先使用 metadata 中的 mcpServer 信息(SDK 直接提供)
|
|
278
286
|
// 格式包括:
|
|
@@ -407,10 +415,12 @@ export function getToolActionInfo(toolName, toolInput, metadata) {
|
|
|
407
415
|
if (name === "notebookedit" || name.includes("notebook")) {
|
|
408
416
|
return { actionType: "notebook", actionLabel: "编辑Notebook" };
|
|
409
417
|
}
|
|
410
|
-
//
|
|
418
|
+
// 默认分类为 MCP 工具调用 — 未匹配文件/命令/搜索等已知模式的工具,
|
|
419
|
+
// 实际上几乎都是 MCP 工具(自定义 MCP 工具名通常不含 mcp__ 前缀)。
|
|
420
|
+
// 使用 "mcp" 而非 "other" 确保所有工具调用都能在时间线上正确显示。
|
|
411
421
|
return {
|
|
412
|
-
actionType: "
|
|
413
|
-
actionLabel: "
|
|
422
|
+
actionType: "mcp",
|
|
423
|
+
actionLabel: "调用MCP",
|
|
414
424
|
actionDetail: toolName,
|
|
415
425
|
};
|
|
416
426
|
}
|
package/dist/index.js
CHANGED
|
@@ -20,6 +20,8 @@ import { sessionsRouter } from "./routes/sessions.js";
|
|
|
20
20
|
import { gitRouter } from "./routes/git.js";
|
|
21
21
|
import { fileSnapshotRouter } from "./routes/file-snapshot.js";
|
|
22
22
|
import { memoryRouter } from "./routes/memory.js";
|
|
23
|
+
import { acodeTodosRouter } from "./routes/acode-todos.js";
|
|
24
|
+
import { subAgentsRouter } from "./routes/sub-agents.js";
|
|
23
25
|
import { fileBrowserRouter } from "./routes/file-browser.js";
|
|
24
26
|
import { aiSourcesRouter } from "./routes/ai-sources.js";
|
|
25
27
|
import { processesRouter } from "./routes/processes.js";
|
|
@@ -39,6 +41,8 @@ import { ensureAwsClientAgentMcpReleased } from "./services/aws-client-agent-mcp
|
|
|
39
41
|
import { ensureAcodePackageReleased } from "./services/acode-package.js";
|
|
40
42
|
import { ensureStartupConfig } from "./services/startup-config-wizard.js";
|
|
41
43
|
import { handleCliCommand } from "./services/cli-commands.js";
|
|
44
|
+
import { migrateOldPathsOnStartup } from "./services/legacy-path-migration.js";
|
|
45
|
+
import { subAgentStore } from "./services/sub-agent-manager-instance.js";
|
|
42
46
|
import { buildGracefulShutdownPlan, shouldCleanupPersistedSessionsOnStartup, } from "./services/runtime-lifecycle-policy.js";
|
|
43
47
|
import { deliverPendingBridgeLifecycleNotifications } from "./services/lifecycle-state.js";
|
|
44
48
|
const cliCommandResult = await handleCliCommand();
|
|
@@ -50,6 +54,7 @@ await ensureStartupConfig();
|
|
|
50
54
|
validateProductionToken();
|
|
51
55
|
ensureAwsClientAgentMcpReleased();
|
|
52
56
|
ensureAcodePackageReleased();
|
|
57
|
+
migrateOldPathsOnStartup();
|
|
53
58
|
logRuntimeBindingStartupState();
|
|
54
59
|
// ★ 启动时自动注册
|
|
55
60
|
async function performAutoRegister() {
|
|
@@ -301,6 +306,8 @@ app.use("/runtime", eventsRouter);
|
|
|
301
306
|
app.use("/runtime", gitRouter);
|
|
302
307
|
app.use("/runtime", fileSnapshotRouter);
|
|
303
308
|
app.use("/runtime", memoryRouter);
|
|
309
|
+
app.use("/runtime", acodeTodosRouter);
|
|
310
|
+
app.use("/runtime", subAgentsRouter);
|
|
304
311
|
app.use("/runtime", aiSourcesRouter);
|
|
305
312
|
app.use("/pty", ptyRouter);
|
|
306
313
|
app.use("/", dashboardRouter);
|
|
@@ -491,6 +498,14 @@ async function gracefulShutdown(signal, server, preserveSessions = false) {
|
|
|
491
498
|
process.exit(1);
|
|
492
499
|
}
|
|
493
500
|
}
|
|
501
|
+
// 启动前清理僵尸 sub-agent 记录(bridge 重启前未完成的 running/pending 记录)
|
|
502
|
+
subAgentStore.reconcileZombies().then((fixed) => {
|
|
503
|
+
if (fixed > 0) {
|
|
504
|
+
logger.info(`[runtime-bridge] 已清理 ${fixed} 个僵尸 sub-agent 记录`);
|
|
505
|
+
}
|
|
506
|
+
}).catch((err) => {
|
|
507
|
+
logger.warn("[runtime-bridge] 清理僵尸 sub-agent 记录失败:", err.message);
|
|
508
|
+
});
|
|
494
509
|
// 启动服务器
|
|
495
510
|
const server = startServer();
|
|
496
511
|
/**
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ACode Todo 读取 API 路由
|
|
3
|
+
*
|
|
4
|
+
* 直接读取 bridge 家目录下 ~/.acode/todos/{agentId}.json,
|
|
5
|
+
* 不依赖 agent 工作目录,避免 workspacePath 错误导致读取失败。
|
|
6
|
+
*
|
|
7
|
+
* 文件由 ACode 内置 TodoStore 写入(package/acode/src/todo-store.ts),
|
|
8
|
+
* 路径与 ~/.acode/cmd-dist/ 惯例一致。
|
|
9
|
+
*/
|
|
10
|
+
export declare const acodeTodosRouter: import("express-serve-static-core").Router;
|
|
11
|
+
//# sourceMappingURL=acode-todos.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acode-todos.d.ts","sourceRoot":"","sources":["../../src/routes/acode-todos.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAaH,eAAO,MAAM,gBAAgB,4CAAW,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ACode Todo 读取 API 路由
|
|
3
|
+
*
|
|
4
|
+
* 直接读取 bridge 家目录下 ~/.acode/todos/{agentId}.json,
|
|
5
|
+
* 不依赖 agent 工作目录,避免 workspacePath 错误导致读取失败。
|
|
6
|
+
*
|
|
7
|
+
* 文件由 ACode 内置 TodoStore 写入(package/acode/src/todo-store.ts),
|
|
8
|
+
* 路径与 ~/.acode/cmd-dist/ 惯例一致。
|
|
9
|
+
*/
|
|
10
|
+
import { promises as fs } from 'node:fs';
|
|
11
|
+
import os from 'node:os';
|
|
12
|
+
import path from 'node:path';
|
|
13
|
+
import { Router } from 'express';
|
|
14
|
+
import { validateToken } from '../middleware/auth.js';
|
|
15
|
+
import { createLogger } from '../utils/logger.js';
|
|
16
|
+
const log = createLogger('acode-todos');
|
|
17
|
+
export const acodeTodosRouter = Router();
|
|
18
|
+
const TODOS_DIR = path.join(os.homedir(), '.acode', 'todos');
|
|
19
|
+
/**
|
|
20
|
+
* 防止路径穿越:与 TodoStore.filePath 一致的字符白名单。
|
|
21
|
+
* 仅允许字母数字下划线短横,其它字符替换为下划线。
|
|
22
|
+
*/
|
|
23
|
+
function sanitizeAgentId(agentId) {
|
|
24
|
+
return String(agentId).replace(/[^a-zA-Z0-9_-]/g, '_');
|
|
25
|
+
}
|
|
26
|
+
function resolveTodoFilePath(agentId) {
|
|
27
|
+
return path.join(TODOS_DIR, `${sanitizeAgentId(agentId)}.json`);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* GET /runtime/acode-todos/:agentId
|
|
31
|
+
* 返回该 agent 的 todo 列表。
|
|
32
|
+
*
|
|
33
|
+
* 响应:
|
|
34
|
+
* 200 { ok: true, agentId, updatedAt, todos: [...] }
|
|
35
|
+
* 200 { ok: true, agentId, updatedAt: null, todos: [] } 文件不存在/损坏时
|
|
36
|
+
* 400 { ok: false, error: "agentId is required" }
|
|
37
|
+
*/
|
|
38
|
+
acodeTodosRouter.get('/acode-todos/:agentId', validateToken, async (req, res) => {
|
|
39
|
+
const agentIdParam = req.params.agentId;
|
|
40
|
+
const agentId = Array.isArray(agentIdParam) ? agentIdParam[0] : agentIdParam;
|
|
41
|
+
if (!agentId || !String(agentId).trim()) {
|
|
42
|
+
res.status(400).json({ ok: false, error: 'agentId is required' });
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const filePath = resolveTodoFilePath(String(agentId));
|
|
46
|
+
try {
|
|
47
|
+
const raw = await fs.readFile(filePath, 'utf-8');
|
|
48
|
+
const doc = JSON.parse(raw);
|
|
49
|
+
const todos = Array.isArray(doc.todos) ? doc.todos : [];
|
|
50
|
+
res.json({
|
|
51
|
+
ok: true,
|
|
52
|
+
agentId: String(agentId),
|
|
53
|
+
updatedAt: typeof doc.updatedAt === 'string' ? doc.updatedAt : null,
|
|
54
|
+
background: typeof doc.background === 'string' ? doc.background : '',
|
|
55
|
+
todos,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
const code = typeof err === 'object' && err !== null ? Reflect.get(err, 'code') : undefined;
|
|
60
|
+
if (code === 'ENOENT') {
|
|
61
|
+
// 文件不存在:返回空列表(agent 尚未写过 todo)
|
|
62
|
+
res.json({ ok: true, agentId: String(agentId), updatedAt: null, todos: [] });
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
// JSON 解析错误等:返回空列表,避免损坏文件阻断读取
|
|
66
|
+
if (err instanceof SyntaxError) {
|
|
67
|
+
log.warn('[acode-todos] 文件损坏(JSON 解析失败): %s', filePath);
|
|
68
|
+
res.json({ ok: true, agentId: String(agentId), updatedAt: null, todos: [] });
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const e = err;
|
|
72
|
+
log.error('[acode-todos] 读取失败: %s', e.message);
|
|
73
|
+
res.status(500).json({ ok: false, error: e.message });
|
|
74
|
+
}
|
|
75
|
+
});
|