aws-runtime-bridge 1.9.92 → 1.9.93
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 +22 -126
- package/dist/adapter/AdapterRegistry.d.ts +10 -38
- package/dist/adapter/ClaudeSdkAdapter.d.ts +21 -84
- package/dist/adapter/CodexSdkAdapter.d.ts +2 -10
- package/dist/adapter/OpencodeSdkAdapter.d.ts +6 -42
- package/dist/adapter/acode-tool-names.d.ts +3 -12
- package/dist/adapter/idle-poll-loop.d.ts +4 -16
- package/dist/adapter/index.d.ts +1 -4
- package/dist/adapter/instance-ai-config-resolver.d.ts +9 -29
- package/dist/adapter/types.d.ts +124 -242
- package/dist/adapters/cc-switch/common.d.ts +4 -14
- package/dist/adapters/cc-switch/index.d.ts +3 -11
- package/dist/adapters/cc-switch/mcp-acode.d.ts +1 -7
- package/dist/adapters/cc-switch/mcp-claude.d.ts +1 -5
- package/dist/adapters/cc-switch/mcp-claudecode.d.ts +1 -5
- package/dist/adapters/cc-switch/mcp-codex.d.ts +1 -7
- package/dist/adapters/cc-switch/mcp-opencode.d.ts +3 -11
- package/dist/adapters/cc-switch/mcp-placeholder.d.ts +1 -5
- package/dist/adapters/cc-switch/skill-acode.d.ts +1 -6
- package/dist/adapters/cc-switch/skill-claude.d.ts +1 -5
- package/dist/adapters/cc-switch/skill-claudecode.d.ts +1 -5
- package/dist/adapters/cc-switch/skill-opencode.d.ts +1 -5
- package/dist/adapters/cc-switch/skill-placeholder.d.ts +1 -5
- package/dist/config.d.ts +39 -57
- package/dist/index.d.ts +1 -5
- package/dist/middleware/auth.d.ts +4 -22
- package/dist/routes/acode-todos.d.ts +1 -9
- package/dist/routes/dashboard.d.ts +1 -6
- package/dist/routes/events.d.ts +1 -5
- package/dist/routes/file-browser.d.ts +2 -8
- package/dist/routes/file-diff-rollback.d.ts +13 -41
- package/dist/routes/file-snapshot.d.ts +1 -8
- package/dist/routes/git.d.ts +18 -91
- package/dist/routes/instance.d.ts +4 -15
- package/dist/routes/processes.d.ts +1 -5
- package/dist/routes/properties.d.ts +1 -5
- package/dist/routes/pty.d.ts +9 -36
- package/dist/routes/runtime-binding.d.ts +1 -4
- package/dist/routes/sessions.d.ts +2 -9
- package/dist/routes/sub-agents.d.ts +1 -12
- package/dist/routes/task-context.d.ts +1 -6
- package/dist/routes/terminal.d.ts +18 -92
- package/dist/routes/yml.d.ts +1 -5
- package/dist/services/acode-package.d.ts +2 -12
- package/dist/services/agent-event-store.d.ts +6 -26
- package/dist/services/agent-process-manager.d.ts +30 -184
- package/dist/services/ai-source-apply.d.ts +1 -3
- package/dist/services/auto-register.d.ts +29 -106
- package/dist/services/bridge-package-publish-hooks.d.ts +5 -19
- package/dist/services/cc-switch-sdk.d.ts +1 -6
- package/dist/services/cli-commands.d.ts +12 -33
- package/dist/services/event-delta-pusher.d.ts +5 -20
- package/dist/services/fileSnapshotStore.d.ts +7 -35
- package/dist/services/instance-ai-config-service.d.ts +4 -21
- package/dist/services/instance-service.d.ts +1 -10
- package/dist/services/instance-state.d.ts +5 -30
- package/dist/services/legacy-path-migration.d.ts +1 -1
- package/dist/services/lifecycle-state.d.ts +1 -4
- package/dist/services/mcp-launch-binding-queue.d.ts +2 -8
- package/dist/services/orphan-monitor.d.ts +20 -63
- package/dist/services/panel-auth.d.ts +12 -28
- package/dist/services/process-detector.d.ts +18 -122
- package/dist/services/process-registry.d.ts +30 -150
- package/dist/services/ring-buffer.d.ts +9 -42
- package/dist/services/runtime-binding.d.ts +2 -9
- package/dist/services/runtime-lifecycle-policy.d.ts +3 -15
- package/dist/services/session-output.d.ts +14 -67
- package/dist/services/startup-config-wizard.d.ts +3 -10
- package/dist/services/system-metrics.d.ts +1 -4
- package/dist/services/terminal-persistence.d.ts +10 -53
- package/dist/services/tool-installer.d.ts +6 -18
- package/dist/services/tunnel-client.d.ts +3 -18
- package/dist/services/windows-service-manager.d.ts +1 -13
- package/dist/services/workspace-files.d.ts +17 -57
- package/dist/services/workspace-watch.d.ts +2 -6
- package/dist/services/workspaceTaskChangeWatcher.d.ts +13 -51
- package/dist/types.d.ts +2 -8
- package/dist/utils/instance-ai-config-debug-logger.d.ts +5 -20
- package/dist/utils/logger.d.ts +7 -20
- package/dist/utils/mcp-utils.d.ts +8 -44
- package/dist/utils/path-utils.d.ts +3 -15
- package/dist/utils/sdk-package-loader.d.ts +2 -8
- package/dist/utils/validation.d.ts +3 -20
- package/dist/utils/yaml-utils.d.ts +8 -56
- package/node_modules/@cc-switch/sdk/dist/index.d.ts +1 -6
- package/node_modules/@cc-switch/sdk/dist/sdk.d.ts +11 -42
- package/package/acode/dist/ask-user-question-tool.d.ts +7 -20
- package/package/acode/dist/built-in-file-tools.d.ts +3 -6
- package/package/acode/dist/built-in-symbols-tool.d.ts +1 -4
- package/package/acode/dist/builtins/commandArtifacts.d.ts +1 -4
- package/package/acode/dist/builtins/shellOutputDecoder.d.ts +3 -18
- package/package/acode/dist/commands/commandLoader.d.ts +1 -4
- package/package/acode/dist/commands/commandParser.d.ts +1 -4
- package/package/acode/dist/compaction.d.ts +38 -175
- package/package/acode/dist/config.d.ts +1 -4
- package/package/acode/dist/fs-utils.d.ts +1 -19
- package/package/acode/dist/hooks/hookBus.d.ts +1 -4
- package/package/acode/dist/mcpToolNames.d.ts +2 -8
- package/package/acode/dist/parsers/ast-cache.d.ts +7 -20
- package/package/acode/dist/parsers/language-detector.d.ts +1 -5
- package/package/acode/dist/parsers/language-queries.d.ts +1 -1
- package/package/acode/dist/parsers/tree-sitter-loader.d.ts +4 -12
- package/package/acode/dist/parsers/types.d.ts +19 -30
- package/package/acode/dist/runtime.d.ts +47 -269
- package/package/acode/dist/skill-tool.d.ts +3 -23
- package/package/acode/dist/sub-agent-manager.d.ts +41 -206
- package/package/acode/dist/sub-agent-store.d.ts +12 -61
- package/package/acode/dist/sub-agent-tools.d.ts +9 -18
- package/package/acode/dist/sub-agent-types.d.ts +32 -38
- package/package/acode/dist/todo-store.d.ts +8 -23
- package/package/acode/dist/todo-tool.d.ts +2 -2
- package/package/acode/dist/types.d.ts +17 -38
- package/package/aws-client-agent-mcp/dist/agent-client.d.ts +44 -161
- package/package/aws-client-agent-mcp/dist/config.d.ts +4 -18
- package/package/aws-client-agent-mcp/dist/constants.d.ts +1 -3
- package/package/aws-client-agent-mcp/dist/context-manager.d.ts +25 -95
- package/package/aws-client-agent-mcp/dist/context-manager.test.d.ts +1 -4
- package/package/aws-client-agent-mcp/dist/http-client.d.ts +15 -56
- package/package/aws-client-agent-mcp/dist/index.d.ts +1 -11
- package/package/aws-client-agent-mcp/dist/logger.d.ts +5 -22
- package/package/aws-client-agent-mcp/dist/mcp-server.d.ts +76 -365
- package/package/aws-client-agent-mcp/dist/mcp-tools.d.ts +21 -83
- package/package/aws-client-agent-mcp/dist/memory-store.d.ts +15 -70
- package/package/aws-client-agent-mcp/dist/memory-tools.d.ts +4 -17
- package/package/aws-client-agent-mcp/dist/message-buffer.d.ts +23 -92
- package/package/aws-client-agent-mcp/dist/messageContent.d.ts +5 -29
- package/package/aws-client-agent-mcp/dist/server-memory-store.d.ts +2 -9
- package/package/aws-client-agent-mcp/dist/status-reporter.d.ts +17 -55
- package/package/aws-client-agent-mcp/dist/types.d.ts +66 -125
- package/package/aws-client-agent-mcp/dist/websocket-client.d.ts +30 -125
- package/package/cc-switch-sdk/dist/index.d.ts +1 -6
- package/package/cc-switch-sdk/dist/sdk.d.ts +11 -42
- package/package.json +1 -1
|
@@ -1,15 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* ACode SDK Adapter
|
|
3
|
-
*
|
|
4
|
-
* 主流程:直接加载随 aws-runtime-bridge 内置发布的 ACode headless runtime,
|
|
5
|
-
* 不依赖外部 CLI 安装;将 ACode 的结构化事件映射为 runtime-bridge 统一事件流。
|
|
6
|
-
*
|
|
7
|
-
* 模型/baseURL/apiKey 解析(核心):
|
|
8
|
-
* - 调用 instance-ai-config-resolver 按 "instance > global > default" 三层仲裁
|
|
9
|
-
* - "instance" 包含 per-session config.model 与 per-instance config.instanceAiConfig
|
|
10
|
-
* - "global" 来自 configPath 指向的 acode.json(per-instance 文件已 deep-merge 全局)
|
|
11
|
-
* - 解析结果会写入 d:/Instance-ai-configuration-debug.log,bridge + 后端共享同一份
|
|
12
|
-
*/
|
|
1
|
+
|
|
13
2
|
import { EventEmitter } from "node:events";
|
|
14
3
|
import type { SubAgentManager } from "@agentswork/acode";
|
|
15
4
|
import type { AdapterSessionConfig, BaseProviderAdapter, ConversationMessage, RuntimeCapabilities, SessionStatus } from "./types.js";
|
|
@@ -26,7 +15,7 @@ type ACodeRuntimeInstance = {
|
|
|
26
15
|
abort(): Promise<void>;
|
|
27
16
|
resetContext?(): Promise<void>;
|
|
28
17
|
stop(): Promise<void>;
|
|
29
|
-
|
|
18
|
+
|
|
30
19
|
submitQuestionAnswer?(toolCallId: string, answers: Record<string, string>): boolean;
|
|
31
20
|
};
|
|
32
21
|
type ACodeRuntimeConstructor = new (config: {
|
|
@@ -51,10 +40,7 @@ type ACodeRuntimeConstructor = new (config: {
|
|
|
51
40
|
}) => void | Promise<void>;
|
|
52
41
|
}) => ACodeRuntimeInstance;
|
|
53
42
|
export declare function toAcodeEsmImportSpecifier(modulePath: string): string;
|
|
54
|
-
|
|
55
|
-
* Check whether an ACode turn_complete event represents a failed turn.
|
|
56
|
-
* Main flow: only explicit failed=true prevents error status from being reset to waiting_input.
|
|
57
|
-
*/
|
|
43
|
+
|
|
58
44
|
export declare function isFailedAcodeTurnComplete(data: Record<string, unknown>): boolean;
|
|
59
45
|
export declare class AcodeSdkAdapter extends EventEmitter implements BaseProviderAdapter {
|
|
60
46
|
readonly providerId = "acode";
|
|
@@ -64,12 +50,7 @@ export declare class AcodeSdkAdapter extends EventEmitter implements BaseProvide
|
|
|
64
50
|
startSession(sessionId: string, config: AdapterSessionConfig): Promise<void>;
|
|
65
51
|
sendMessage(sessionId: string, message: string): Promise<void>;
|
|
66
52
|
sendConfirmation(_sessionId: string, _accept: boolean): Promise<void>;
|
|
67
|
-
|
|
68
|
-
* 接收前端对 ask_user_question 的回答(来自 terminal.ts /sdk/answer 路由)。
|
|
69
|
-
* 通过 pendingQuestionToolCallId 找到 runtime.submitQuestionAnswer 的入参 toolCallId,
|
|
70
|
-
* resolve 阻塞的工具 execute(),让 ACode 继续下一轮 LLM 请求。
|
|
71
|
-
* 重新启动 submit 超时检测(继续计费后续工具执行时间)。
|
|
72
|
-
*/
|
|
53
|
+
|
|
73
54
|
sendQuestionAnswer(sessionId: string, answers: Record<string, string>): Promise<void>;
|
|
74
55
|
abortCurrentTurn(sessionId: string): Promise<void>;
|
|
75
56
|
resetContext(sessionId: string): Promise<void>;
|
|
@@ -78,18 +59,9 @@ export declare class AcodeSdkAdapter extends EventEmitter implements BaseProvide
|
|
|
78
59
|
hasSession(sessionId: string): boolean;
|
|
79
60
|
getProviderSessionId(sessionId: string): string | undefined;
|
|
80
61
|
getSessionStatus(sessionId: string): SessionStatus | undefined;
|
|
81
|
-
|
|
82
|
-
* 主动查询会话的运行时能力清单(MCP 工具 + skills)。
|
|
83
|
-
* 只读 adapter 内存缓存(lastCombinedCapabilities),不触发 runtime 重新探测。
|
|
84
|
-
* 由 mcp_status / skill_status 事件维护;若尚未收到任何 runtime_capabilities 事件则返回 undefined。
|
|
85
|
-
*/
|
|
62
|
+
|
|
86
63
|
getCapabilities(sessionId: string): RuntimeCapabilities | undefined;
|
|
87
|
-
|
|
88
|
-
* 主动查询会话当前挂起的 ask_user_question。
|
|
89
|
-
* 只读 adapter 内存缓存(pendingQuestionToolCallId + pendingQuestions)。
|
|
90
|
-
* 由 bridge GET /runtime/sdk/pending-questions 端点调用,用于前端刷新后重建提问 UI。
|
|
91
|
-
* 返回 undefined 表示当前无挂起提问(会话不存在或 agent 未提问)。
|
|
92
|
-
*/
|
|
64
|
+
|
|
93
65
|
getPendingQuestion(sessionId: string): {
|
|
94
66
|
toolCallId: string;
|
|
95
67
|
questions: unknown[];
|
|
@@ -99,124 +71,48 @@ export declare class AcodeSdkAdapter extends EventEmitter implements BaseProvide
|
|
|
99
71
|
idleInputCommand: string;
|
|
100
72
|
nonInputCommand: string;
|
|
101
73
|
}): void;
|
|
102
|
-
|
|
74
|
+
|
|
103
75
|
setRuntimeConstructorForTest(runtimeConstructor: ACodeRuntimeConstructor): void;
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
* 以及顶层 contextLimit(用户自定义上下文窗口大小)。
|
|
107
|
-
* 主流程:先尝试 per-instance 文件(由 instance-ai-config-service 写入,含 deep-merge 结果),
|
|
108
|
-
* 失败回退到 global acode.json;解析失败返回空对象。
|
|
109
|
-
*/
|
|
110
|
-
/**
|
|
111
|
-
* 从 acode.json 中读取 provider.default 信息及模型配置字典。
|
|
112
|
-
* 返回包含 model/baseURL/apiKey 的仲裁配置,以及:
|
|
113
|
-
* - contextLimit: 顶层 contextLimit(优先)
|
|
114
|
-
* - modelContextLimits: 各模型的 contextLimit 字典,供 resolveAcodeProvider 回退查找
|
|
115
|
-
*/
|
|
76
|
+
|
|
77
|
+
|
|
116
78
|
private loadAcodeProviderSection;
|
|
117
|
-
|
|
118
|
-
* 解析 ACode provider 配置:按 "instance > global > default" 优先级逐字段仲裁。
|
|
119
|
-
* 入口在 createRuntime;该方法独立出来便于测试。
|
|
120
|
-
*
|
|
121
|
-
* @param config AdapterSessionConfig(per-session model 与 per-instance instanceAiConfig)
|
|
122
|
-
* @param configPath 实际作为 ACodeRuntime.configPath 的 acode.json 路径
|
|
123
|
-
* (可能为 per-instance 文件或全局文件)
|
|
124
|
-
*/
|
|
79
|
+
|
|
125
80
|
private resolveAcodeProvider;
|
|
126
81
|
private createRuntime;
|
|
127
82
|
private loadRuntimeConstructor;
|
|
128
83
|
private requireSession;
|
|
129
|
-
|
|
130
|
-
* Run the startup prompt after the HTTP launch has already completed.
|
|
131
|
-
* Main flow: mark the session busy -> submit the prompt in the background ->
|
|
132
|
-
* rely on normal ACode events to publish turn completion or errors.
|
|
133
|
-
*/
|
|
84
|
+
|
|
134
85
|
private startInitialPromptTurn;
|
|
135
86
|
private forwardAcodeEvent;
|
|
136
87
|
private emitProviderEvent;
|
|
137
|
-
|
|
138
|
-
* After a completed turn, prefer the configured IdlePollLoop (set via setIdleCommands).
|
|
139
|
-
* Fall back to the legacy auto-poll mechanism when no idle commands are configured.
|
|
140
|
-
*/
|
|
88
|
+
|
|
141
89
|
private armIdleLoopOrAutoPoll;
|
|
142
90
|
private getIdlePollLoop;
|
|
143
91
|
private submitAutoPollPrompt;
|
|
144
|
-
|
|
145
|
-
* Continue ACode's headless agent loop after a completed turn.
|
|
146
|
-
* Main flow: debounce duplicate scheduling -> mark busy -> submit an internal
|
|
147
|
-
* poll instruction -> let normal ACode events publish MCP/tool/turn states.
|
|
148
|
-
*
|
|
149
|
-
* @param delayMs Optional override for the default 250ms backoff. The R2
|
|
150
|
-
* recovery path uses ACODE_AUTO_POLL_FAILURE_DELAY_MS (2s) to avoid
|
|
151
|
-
* busy-looping when the same failure recurs on every retry.
|
|
152
|
-
*/
|
|
92
|
+
|
|
153
93
|
private scheduleAutoPoll;
|
|
154
94
|
private cancelScheduledAutoPoll;
|
|
155
95
|
private isTerminalStatus;
|
|
156
96
|
private emitRuntimeError;
|
|
157
97
|
private emitRuntimeErrorEvent;
|
|
158
|
-
|
|
159
|
-
* 从会话消息中估算 AI 输出 token 数(字符数 / 4 粗略估算)。
|
|
160
|
-
* 注意:该估算对 CJK 文本偏高(实际每字约 1-2 tokens),
|
|
161
|
-
* 对纯 ASCII 文本偏低(约 3-5 字符/token),仅供面板展示实时趋势使用,
|
|
162
|
-
* 不应用于精确计费或配额判定。精确值以 turn_complete 事件中的 usage 为准。
|
|
163
|
-
*/
|
|
98
|
+
|
|
164
99
|
private estimateOutputTokensFromMessages;
|
|
165
100
|
private recoverTurnFailure;
|
|
166
|
-
|
|
167
|
-
* Recover turns where runtime.submit() resolved but no terminal turn event arrived.
|
|
168
|
-
*
|
|
169
|
-
* Main flow: ACode should normally emit turn_complete/session_complete/error before
|
|
170
|
-
* submit resolves. Some edge paths can emit only intermediate events (for example
|
|
171
|
-
* command_status or tool_result), then resolve. At that point there is no active
|
|
172
|
-
* turn anymore, so keeping the adapter at thinking/tool_using makes the dashboard
|
|
173
|
-
* look permanently stuck. Recover to waiting_input and arm the listening loop.
|
|
174
|
-
*/
|
|
101
|
+
|
|
175
102
|
private recoverResolvedTurnWithoutTerminalEvent;
|
|
176
|
-
|
|
177
|
-
* 启动异步看门狗:周期性轮询运行时状态,仅在真正卡死时恢复。
|
|
178
|
-
*
|
|
179
|
-
* 替代原来两个独立的 setTimeout(submitTimeoutDetection + dataFlowWatchdog),
|
|
180
|
-
* 改为单一 setInterval 轮询。核心设计:
|
|
181
|
-
* - 每 ACODE_WATCHDOG_POLL_INTERVAL_MS(5s)检查一次状态
|
|
182
|
-
* - waiting_input 状态下不累计超时(agent 正在有意等待,如 poll_message/ask_user_question)
|
|
183
|
-
* - 仅在 thinking/tool_using 状态下累计"活跃持续时间"和"无数据流时间"
|
|
184
|
-
* - submit 超时 120s 或数据流超时 40s 时触发 recoverTurnFailure
|
|
185
|
-
*
|
|
186
|
-
* 相比 setTimeout 方案的优势:
|
|
187
|
-
* 1. 状态感知:每次轮询都读取当前真实状态,不会因状态在定时周期内多次变化而误判
|
|
188
|
-
* 2. waiting_input 自动暂停计时:无需递归重新计时,天然跳过
|
|
189
|
-
* 3. 单一 timer:避免两个独立 timer 的竞态和重复恢复
|
|
190
|
-
*/
|
|
103
|
+
|
|
191
104
|
private startSubmitTimeoutDetection;
|
|
192
|
-
|
|
193
|
-
* 执行看门狗恢复:abort runtime + recoverTurnFailure
|
|
194
|
-
*/
|
|
105
|
+
|
|
195
106
|
private executeWatchdogRecovery;
|
|
196
|
-
|
|
197
|
-
* 取消看门狗
|
|
198
|
-
*/
|
|
107
|
+
|
|
199
108
|
private cancelSubmitTimeoutDetection;
|
|
200
|
-
|
|
201
|
-
* 重置数据流计时基准:收到流式数据(assistant_delta/thinking_delta)时调用。
|
|
202
|
-
* 不再重启定时器,仅更新计时基准,下次轮询时从新基准计算。
|
|
203
|
-
*/
|
|
109
|
+
|
|
204
110
|
private resetDataFlowWatchdog;
|
|
205
|
-
|
|
206
|
-
* 启动数据流看门狗:由 ai_request 调用,初始化数据流计时基准。
|
|
207
|
-
* 实际的轮询由 startSubmitTimeoutDetection 的 interval 统一处理。
|
|
208
|
-
*/
|
|
111
|
+
|
|
209
112
|
private startDataFlowWatchdog;
|
|
210
|
-
|
|
211
|
-
* 取消数据流看门狗(已合并到 cancelSubmitTimeoutDetection,此方法保留兼容性)
|
|
212
|
-
*/
|
|
113
|
+
|
|
213
114
|
private cancelDataFlowWatchdog;
|
|
214
|
-
|
|
215
|
-
* 构建 ai_request 事件的 actionDetail,携带请求头和请求体,
|
|
216
|
-
* 供前端 DevTools 网络面板 Payload 页签展示。
|
|
217
|
-
* 格式与 terminal.ts 的 formatAiRequestDetail 保持一致:
|
|
218
|
-
* 模型/接口/方法等元信息 + "\n\n请求头:\n" + headers + "\n\n请求体:\n" + body
|
|
219
|
-
*/
|
|
115
|
+
|
|
220
116
|
private formatAiRequestActionDetail;
|
|
221
117
|
}
|
|
222
118
|
export {};
|
|
@@ -1,52 +1,24 @@
|
|
|
1
|
-
|
|
2
|
-
* Adapter 注册表 —— 管理 Provider ID → Adapter 实例的映射
|
|
3
|
-
*/
|
|
1
|
+
|
|
4
2
|
import type { BaseProviderAdapter } from './types.js';
|
|
5
3
|
export type AdapterType = 'acode-sdk' | 'claude-sdk' | 'codex-sdk' | 'opencode-sdk';
|
|
6
|
-
|
|
7
|
-
* Adapter 注册表
|
|
8
|
-
* 管理所有 Provider Adapter 实例的生命周期
|
|
9
|
-
*/
|
|
4
|
+
|
|
10
5
|
export declare class AdapterRegistry {
|
|
11
6
|
private adapters;
|
|
12
|
-
|
|
13
|
-
* 注册 Adapter 实例
|
|
14
|
-
* @param adapter Adapter 实例(providerId 作为 key)
|
|
15
|
-
* @throws 如果该 providerId 已注册
|
|
16
|
-
*/
|
|
7
|
+
|
|
17
8
|
register(adapter: BaseProviderAdapter): void;
|
|
18
|
-
|
|
19
|
-
* 按 Provider ID 获取 Adapter
|
|
20
|
-
* @param providerId Provider 标识(如 'claude-code', 'opencode')
|
|
21
|
-
* @throws 如果该 providerId 未注册
|
|
22
|
-
*/
|
|
9
|
+
|
|
23
10
|
get(providerId: string): BaseProviderAdapter;
|
|
24
|
-
|
|
25
|
-
* 按 AdapterType 获取 Adapter
|
|
26
|
-
* @param adapterType 适配器类型
|
|
27
|
-
* @throws 如果该类型未注册
|
|
28
|
-
*/
|
|
11
|
+
|
|
29
12
|
getByType(adapterType: AdapterType): BaseProviderAdapter;
|
|
30
|
-
|
|
31
|
-
* 检查是否已注册
|
|
32
|
-
* @param providerId Provider 标识
|
|
33
|
-
*/
|
|
13
|
+
|
|
34
14
|
has(providerId: string): boolean;
|
|
35
|
-
|
|
36
|
-
* 获取所有已注册的 Provider ID
|
|
37
|
-
*/
|
|
15
|
+
|
|
38
16
|
getRegisteredIds(): string[];
|
|
39
|
-
|
|
40
|
-
* 获取所有已注册 Adapter。
|
|
41
|
-
*/
|
|
17
|
+
|
|
42
18
|
getAll(): BaseProviderAdapter[];
|
|
43
|
-
|
|
44
|
-
* 清理所有 Adapter 资源
|
|
45
|
-
*/
|
|
19
|
+
|
|
46
20
|
cleanup(): void;
|
|
47
|
-
|
|
48
|
-
* Provider ID → AdapterType 匹配
|
|
49
|
-
*/
|
|
21
|
+
|
|
50
22
|
private matchType;
|
|
51
23
|
}
|
|
52
24
|
export declare const adapterRegistry: AdapterRegistry;
|
|
@@ -1,19 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
* Claude Code Agent SDK Adapter
|
|
3
|
-
*
|
|
4
|
-
* 通过 @anthropic-ai/claude-agent-sdk 的 query() API
|
|
5
|
-
* 实现与 Claude Code 的结构化交互。
|
|
6
|
-
*
|
|
7
|
-
* 核心特性:
|
|
8
|
-
* - 支持 autoAccept 模式自动确认所有权限
|
|
9
|
-
* - 支持 AskUserQuestion 拦截并转发到聊天面板
|
|
10
|
-
* - 支持 turn_complete 事件精确判断 AI 就绪状态
|
|
11
|
-
*/
|
|
1
|
+
|
|
12
2
|
import { EventEmitter } from 'events';
|
|
13
3
|
import type { AdapterSessionConfig, BaseProviderAdapter, ConversationMessage, SessionStatus } from './types.js';
|
|
14
|
-
|
|
15
|
-
* Claude Code Agent SDK Adapter
|
|
16
|
-
*/
|
|
4
|
+
|
|
17
5
|
export declare class ClaudeSdkAdapter extends EventEmitter implements BaseProviderAdapter {
|
|
18
6
|
readonly providerId = "claude-code";
|
|
19
7
|
readonly displayName = "Claude Code";
|
|
@@ -29,10 +17,7 @@ export declare class ClaudeSdkAdapter extends EventEmitter implements BaseProvid
|
|
|
29
17
|
private toolInputBuffers;
|
|
30
18
|
startSession(sessionId: string, config: AdapterSessionConfig): Promise<void>;
|
|
31
19
|
sendMessage(sessionId: string, message: string): Promise<void>;
|
|
32
|
-
|
|
33
|
-
* 解析消息内容,提取图片和文本
|
|
34
|
-
* 支持 [图片: url] 标记格式
|
|
35
|
-
*/
|
|
20
|
+
|
|
36
21
|
private parseMessageContent;
|
|
37
22
|
sendConfirmation(sessionId: string, accept: boolean): Promise<void>;
|
|
38
23
|
sendQuestionAnswer(sessionId: string, answers: Record<string, string>): Promise<void>;
|
|
@@ -48,104 +33,56 @@ export declare class ClaudeSdkAdapter extends EventEmitter implements BaseProvid
|
|
|
48
33
|
private idleTimers;
|
|
49
34
|
private idlePollLoops;
|
|
50
35
|
private lastActivityAt;
|
|
51
|
-
|
|
52
|
-
* 设置空闲命令配置
|
|
53
|
-
*/
|
|
36
|
+
|
|
54
37
|
setIdleCommands(sessionId: string, commands: {
|
|
55
38
|
idleInputCommand: string;
|
|
56
39
|
nonInputCommand: string;
|
|
57
40
|
}): void;
|
|
58
|
-
|
|
59
|
-
* 启动空闲检测定时器
|
|
60
|
-
*/
|
|
41
|
+
|
|
61
42
|
private startIdleDetection;
|
|
62
|
-
|
|
63
|
-
* 停止空闲检测定时器
|
|
64
|
-
*/
|
|
43
|
+
|
|
65
44
|
private stopIdleDetection;
|
|
66
|
-
|
|
67
|
-
* 检测空闲状态并执行命令
|
|
68
|
-
*/
|
|
45
|
+
|
|
69
46
|
private checkIdleState;
|
|
70
|
-
|
|
71
|
-
* 发送空闲提示到 SDK
|
|
72
|
-
*/
|
|
47
|
+
|
|
73
48
|
private sendIdlePrompt;
|
|
74
49
|
private isMessagePollingIdleCommand;
|
|
75
50
|
private buildMessagePollingIdlePrompt;
|
|
76
|
-
|
|
77
|
-
* 获取当前会话的空闲轮询驱动器。
|
|
78
|
-
* 主流程:惰性创建 -> 绑定会话状态与命令读取 -> 统一派发 poll/普通 idle prompt。
|
|
79
|
-
*/
|
|
51
|
+
|
|
80
52
|
private getIdlePollLoop;
|
|
81
|
-
|
|
82
|
-
* 发送手动快捷键 token 序列,和空闲自动命令共用解析逻辑。
|
|
83
|
-
*/
|
|
53
|
+
|
|
84
54
|
sendShortcutInput(sessionId: string, command: string): Promise<void>;
|
|
85
|
-
|
|
86
|
-
* 执行空闲命令(支持 [enter], [wait:n] 等 token)
|
|
87
|
-
*/
|
|
55
|
+
|
|
88
56
|
private executeIdleCommand;
|
|
89
|
-
|
|
90
|
-
* 更新活动时间(在收到输出或状态变化时调用)
|
|
91
|
-
*/
|
|
57
|
+
|
|
92
58
|
private updateActivity;
|
|
93
|
-
|
|
94
|
-
* 恢复之前的会话
|
|
95
|
-
* 注意:SDK 的 resume 功能需要 providerSessionId
|
|
96
|
-
*/
|
|
59
|
+
|
|
97
60
|
resumeSession(sessionId: string, providerSessionId: string, config: AdapterSessionConfig): Promise<void>;
|
|
98
61
|
private loadSdk;
|
|
99
|
-
|
|
100
|
-
* 查找 Claude Code 可执行文件路径
|
|
101
|
-
* 支持 Windows / macOS / Linux
|
|
102
|
-
*/
|
|
62
|
+
|
|
103
63
|
private findClaudeExecutable;
|
|
104
|
-
|
|
105
|
-
* 从面板配置的命令行中提取实际可执行文件,避免把参数一起传给 PATH 查找。
|
|
106
|
-
*/
|
|
64
|
+
|
|
107
65
|
private extractExecutableCommand;
|
|
108
|
-
|
|
109
|
-
* 按当前 Bridge 进程的 PATH/PATHEXT 直接查找可执行文件,避免依赖 which/where 和 shell 解析。
|
|
110
|
-
*/
|
|
66
|
+
|
|
111
67
|
private resolveExecutableFromPath;
|
|
112
68
|
private getWindowsPathExtensions;
|
|
113
69
|
private shouldUseDefaultClaudeFallbacks;
|
|
114
70
|
private isWindowsWrapperPath;
|
|
115
71
|
private resolveWindowsWrapper;
|
|
116
|
-
|
|
117
|
-
* 从 wrapper 脚本解析 cli.js 路径
|
|
118
|
-
*/
|
|
72
|
+
|
|
119
73
|
private resolveCliJsFromWrapper;
|
|
120
74
|
private buildQueryOptions;
|
|
121
75
|
private createPermissionHandler;
|
|
122
76
|
private consumeStream;
|
|
123
|
-
|
|
124
|
-
* Apply Claude SDK usage snapshots to the adapter session.
|
|
125
|
-
* Main flow: accept assistant-step or final-result usage, then keep the largest observed totals.
|
|
126
|
-
*/
|
|
77
|
+
|
|
127
78
|
private applyUsage;
|
|
128
79
|
private handleSdkMessage;
|
|
129
80
|
private handleToolUse;
|
|
130
|
-
|
|
131
|
-
* 处理 SDK 流式事件
|
|
132
|
-
* 用于检测工具调用开始、增量更新和结束
|
|
133
|
-
*
|
|
134
|
-
* 注意:此方法只更新状态,不发送时间线事件
|
|
135
|
-
* 时间线事件由 handleToolUse 发送,这样能获取完整的工具参数
|
|
136
|
-
*/
|
|
81
|
+
|
|
137
82
|
private handleStreamEvent;
|
|
138
|
-
|
|
139
|
-
* 从 Claude SDK 工具名中提取 MCP 服务器名
|
|
140
|
-
* Claude SDK 的 MCP 工具命名格式:mcp__<server>__<tool>
|
|
141
|
-
* 例如:mcp__memory-server__list_memories -> memory-server
|
|
142
|
-
*/
|
|
83
|
+
|
|
143
84
|
private extractMcpServerName;
|
|
144
|
-
|
|
145
|
-
* 提取工具名后缀
|
|
146
|
-
* 用于匹配不同格式的工具名
|
|
147
|
-
* 例如:aws-mcp__get_profile -> get_profile
|
|
148
|
-
*/
|
|
85
|
+
|
|
149
86
|
private extractToolNameSuffix;
|
|
150
87
|
private emitEvent;
|
|
151
88
|
private cleanupSession;
|
|
@@ -1,9 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* OpenAI Codex SDK Adapter
|
|
3
|
-
*
|
|
4
|
-
* 通过 @openai/codex-sdk 的 Thread/runStreamed() API
|
|
5
|
-
* 将 Codex 事件流映射到 runtime-bridge 统一 ProviderEvent。
|
|
6
|
-
*/
|
|
1
|
+
|
|
7
2
|
import { EventEmitter } from 'node:events';
|
|
8
3
|
import type { AdapterSessionConfig, BaseProviderAdapter, ConversationMessage, SessionStatus } from './types.js';
|
|
9
4
|
export declare class CodexSdkAdapter extends EventEmitter implements BaseProviderAdapter {
|
|
@@ -28,10 +23,7 @@ export declare class CodexSdkAdapter extends EventEmitter implements BaseProvide
|
|
|
28
23
|
getSessionStatus(sessionId: string): SessionStatus | undefined;
|
|
29
24
|
getSessionPid(_sessionId: string): number | undefined;
|
|
30
25
|
cleanup(): void;
|
|
31
|
-
|
|
32
|
-
* 按需加载 Codex SDK:只有启动 Codex provider 时才解析重依赖,
|
|
33
|
-
* 避免 bridge 基础安装默认拉取 @openai/codex 的多平台二进制包。
|
|
34
|
-
*/
|
|
26
|
+
|
|
35
27
|
private loadSdk;
|
|
36
28
|
private buildCodexOptions;
|
|
37
29
|
private warnUnsupportedMcpConfig;
|
|
@@ -1,15 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* OpenCode SDK Adapter
|
|
3
|
-
*
|
|
4
|
-
* 主干流程:
|
|
5
|
-
* 1. spawn `opencode serve --port <port>` 进程(使用 shell: true)
|
|
6
|
-
* 2. 创建 SDK 客户端连接到该端口
|
|
7
|
-
* 3. 通过 client.session.create() 创建 OpenCode 会话
|
|
8
|
-
* 4. 订阅 SSE 事件流并映射到统一 ProviderEvent
|
|
9
|
-
* 5. 通过 client.session.prompt() 发送用户消息
|
|
10
|
-
*
|
|
11
|
-
* 参考:spectrai-community/src/main/adapter/OpenCodeSdkAdapter.ts
|
|
12
|
-
*/
|
|
1
|
+
|
|
13
2
|
import { EventEmitter } from 'node:events';
|
|
14
3
|
import { type AdapterSessionConfig, type BaseProviderAdapter, type ConversationMessage, type SessionStatus } from './types.js';
|
|
15
4
|
export declare class OpencodeSdkAdapter extends EventEmitter implements BaseProviderAdapter {
|
|
@@ -35,45 +24,20 @@ export declare class OpencodeSdkAdapter extends EventEmitter implements BaseProv
|
|
|
35
24
|
getSessionStatus(sessionId: string): SessionStatus | undefined;
|
|
36
25
|
getSessionPid(sessionId: string): number | undefined;
|
|
37
26
|
cleanup(): void;
|
|
38
|
-
|
|
39
|
-
* 按需加载 OpenCode SDK:只有启动 OpenCode provider 时才解析依赖,
|
|
40
|
-
* 避免 bridge 基础安装默认携带所有可选 runtime SDK。
|
|
41
|
-
*/
|
|
27
|
+
|
|
42
28
|
private loadSdk;
|
|
43
29
|
private waitForServer;
|
|
44
|
-
|
|
45
|
-
* 记录 OpenCode serve 启动阶段输出,用于进程提前退出时返回可诊断错误。
|
|
46
|
-
*/
|
|
30
|
+
|
|
47
31
|
private recordStartupOutput;
|
|
48
|
-
|
|
49
|
-
* 将 OpenCode serve 提前退出信息转成前端可直接展示的错误文本。
|
|
50
|
-
*/
|
|
32
|
+
|
|
51
33
|
private formatStartupExitMessage;
|
|
52
|
-
|
|
53
|
-
* 异步投递启动提示,避免首轮 OpenCode 处理耗时导致 /runtime/start 被前端误判为启动失败。
|
|
54
|
-
*/
|
|
34
|
+
|
|
55
35
|
private dispatchInitialPrompt;
|
|
56
36
|
private startSseLoop;
|
|
57
37
|
private runSseLoop;
|
|
58
38
|
private handleOpenCodeEvent;
|
|
59
39
|
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
|
-
*/
|
|
40
|
+
|
|
77
41
|
private getTodoStoreDir;
|
|
78
42
|
private syncTodosFromToolCall;
|
|
79
43
|
private emitEvent;
|
|
@@ -1,15 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
* Main flow: normalize common MCP separators, then use the final segment as
|
|
3
|
-
* the semantic tool name exposed to the agent.
|
|
4
|
-
*/
|
|
1
|
+
|
|
5
2
|
export declare function getSemanticToolName(toolName: string): string;
|
|
6
|
-
|
|
7
|
-
* Main flow: detect free-form idle guidance that asks the agent to enter the
|
|
8
|
-
* message-polling loop.
|
|
9
|
-
*/
|
|
3
|
+
|
|
10
4
|
export declare function isMessagePollingIdleCommand(command: string): boolean;
|
|
11
|
-
|
|
12
|
-
* Main flow: validate startup MCP tool descriptors against the exact
|
|
13
|
-
* poll_message semantic tool name instead of substring matching.
|
|
14
|
-
*/
|
|
5
|
+
|
|
15
6
|
export declare function isPollMessageToolDescriptor(tool: Readonly<Record<string, unknown>>): boolean;
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* SDK 空闲轮询驱动器。
|
|
3
|
-
* 主流程:进入 waiting_input -> 立即触发 poll 提示或延迟触发普通 idle 命令 -> 交给 adapter 启动模型 turn -> turn 完成后由 adapter 再次启动本驱动器。
|
|
4
|
-
*/
|
|
1
|
+
|
|
5
2
|
import type { SessionStatus } from "./types.js";
|
|
6
3
|
export interface IdlePollLoopOptions {
|
|
7
4
|
readonly getStatus: () => SessionStatus | undefined;
|
|
@@ -12,10 +9,7 @@ export interface IdlePollLoopOptions {
|
|
|
12
9
|
readonly pollDelayMs?: number;
|
|
13
10
|
readonly regularIdleDelayMs?: number;
|
|
14
11
|
}
|
|
15
|
-
|
|
16
|
-
* 管理单个 SDK 会话的空闲自动命令。
|
|
17
|
-
* 具体逻辑:poll_message 类命令立即进入 MCP 阻塞等待;普通命令保留原有延迟触发语义。
|
|
18
|
-
*/
|
|
12
|
+
|
|
19
13
|
export declare class IdlePollLoop {
|
|
20
14
|
private readonly options;
|
|
21
15
|
private timer;
|
|
@@ -23,15 +17,9 @@ export declare class IdlePollLoop {
|
|
|
23
17
|
private readonly pollDelayMs;
|
|
24
18
|
private readonly regularIdleDelayMs;
|
|
25
19
|
constructor(options: IdlePollLoopOptions);
|
|
26
|
-
|
|
27
|
-
* 启动或重臂空闲驱动。
|
|
28
|
-
* 主流程:清理旧定时器 -> 校验会话仍在 waiting_input -> 根据命令类型选择 poll 驱动或普通 idle 命令。
|
|
29
|
-
*/
|
|
20
|
+
|
|
30
21
|
start(): void;
|
|
31
|
-
|
|
32
|
-
* 停止当前空闲驱动。
|
|
33
|
-
* 具体逻辑:只取消尚未触发的调度;已经进入模型 turn 的任务由 adapter 生命周期负责。
|
|
34
|
-
*/
|
|
22
|
+
|
|
35
23
|
stop(): void;
|
|
36
24
|
private fire;
|
|
37
25
|
}
|
package/dist/adapter/index.d.ts
CHANGED
|
@@ -1,31 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
* 按 "instance > global > default" 三层优先级仲裁 ACode 的
|
|
5
|
-
* model/baseURL/apiKey 配置。
|
|
6
|
-
*/
|
|
7
|
-
/**
|
|
8
|
-
* 实例级 AI 配置(来自 per-session model + per-instance instanceAiConfig)。
|
|
9
|
-
*/
|
|
1
|
+
|
|
2
|
+
|
|
10
3
|
export interface InstanceAiConfig {
|
|
11
4
|
model?: string;
|
|
12
5
|
baseURL?: string;
|
|
13
6
|
apiKey?: string;
|
|
14
7
|
effort?: string;
|
|
15
8
|
}
|
|
16
|
-
|
|
17
|
-
* 仲裁结果。
|
|
18
|
-
*/
|
|
9
|
+
|
|
19
10
|
export interface ResolvedAcodeProviderConfig {
|
|
20
|
-
|
|
11
|
+
|
|
21
12
|
model: string;
|
|
22
|
-
|
|
13
|
+
|
|
23
14
|
baseURL?: string;
|
|
24
|
-
|
|
15
|
+
|
|
25
16
|
apiKey?: string;
|
|
26
|
-
|
|
17
|
+
|
|
27
18
|
effort?: string;
|
|
28
|
-
|
|
19
|
+
|
|
29
20
|
source: {
|
|
30
21
|
model: string;
|
|
31
22
|
baseURL: string;
|
|
@@ -33,16 +24,5 @@ export interface ResolvedAcodeProviderConfig {
|
|
|
33
24
|
effort: string;
|
|
34
25
|
};
|
|
35
26
|
}
|
|
36
|
-
|
|
37
|
-
* 仲裁 ACode provider 配置。
|
|
38
|
-
*
|
|
39
|
-
* 优先级:instance > global > default
|
|
40
|
-
* - instance:来自 per-session model + per-instance instanceAiConfig
|
|
41
|
-
* - global:来自 acode.json 顶层 provider.default
|
|
42
|
-
* - default:调用方提供的默认值
|
|
43
|
-
*
|
|
44
|
-
* @param instanceConfig 请求级实例配置(含 perSessionModel 覆盖后的 instanceAiConfig)
|
|
45
|
-
* @param globalConfig 全局 acode.json 中的 provider.default 层
|
|
46
|
-
* @param defaultModel 兜底默认模型名
|
|
47
|
-
*/
|
|
27
|
+
|
|
48
28
|
export declare function resolveAcodeProviderConfig(instanceConfig: InstanceAiConfig, globalConfig: InstanceAiConfig | undefined, defaultModel: string): ResolvedAcodeProviderConfig;
|