aws-runtime-bridge 1.9.32 → 1.9.40
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 +35 -1
- package/dist/adapter/AcodeSdkAdapter.d.ts.map +1 -1
- package/dist/adapter/AcodeSdkAdapter.js +417 -40
- package/dist/adapter/ClaudeSdkAdapter.d.ts +6 -0
- package/dist/adapter/ClaudeSdkAdapter.d.ts.map +1 -1
- package/dist/adapter/ClaudeSdkAdapter.js +23 -1
- 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 +65 -3
- package/dist/adapter/types.d.ts.map +1 -1
- package/dist/adapter/types.js +5 -4
- package/dist/index.js +4 -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/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/sub-agents.d.ts +14 -0
- package/dist/routes/sub-agents.d.ts.map +1 -0
- package/dist/routes/sub-agents.js +253 -0
- package/dist/routes/terminal.d.ts +9 -1
- package/dist/routes/terminal.d.ts.map +1 -1
- package/dist/routes/terminal.js +207 -22
- package/dist/services/agent-event-store.d.ts +1 -0
- package/dist/services/agent-event-store.d.ts.map +1 -1
- package/dist/services/event-delta-pusher.js +4 -4
- package/dist/services/session-output.d.ts +3 -0
- package/dist/services/session-output.d.ts.map +1 -1
- package/dist/services/session-output.js +38 -2
- 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/compaction.d.ts +206 -0
- package/package/acode/dist/compaction.d.ts.map +1 -0
- package/package/acode/dist/compaction.js +664 -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 +137 -0
- package/package/acode/dist/runtime.d.ts.map +1 -1
- package/package/acode/dist/runtime.js +974 -172
- 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 +169 -0
- package/package/acode/dist/sub-agent-manager.d.ts.map +1 -0
- package/package/acode/dist/sub-agent-manager.js +535 -0
- package/package/acode/dist/sub-agent-store.d.ts +33 -0
- package/package/acode/dist/sub-agent-store.d.ts.map +1 -0
- package/package/acode/dist/sub-agent-store.js +109 -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 +81 -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 +22 -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/context-manager.test.js +0 -2
- package/package/aws-client-agent-mcp/dist/context-manager.test.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/mcp-server.d.ts +83 -45
- package/package/aws-client-agent-mcp/dist/mcp-server.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/mcp-server.js +451 -325
- package/package/aws-client-agent-mcp/dist/mcp-server.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/mcp-server.test.js +259 -241
- 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 +1 -19
- package/package/aws-client-agent-mcp/dist/mcp-tools.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/mcp-tools.js +2 -69
- package/package/aws-client-agent-mcp/dist/mcp-tools.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/memory-store.d.ts +17 -19
- package/package/aws-client-agent-mcp/dist/memory-store.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/memory-store.js +62 -99
- package/package/aws-client-agent-mcp/dist/memory-store.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/memory-store.test.js +207 -125
- 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 -4
- package/package/aws-client-agent-mcp/dist/memory-tools.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/memory-tools.js +28 -33
- package/package/aws-client-agent-mcp/dist/memory-tools.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/message-buffer.d.ts +27 -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 +100 -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 +1 -3
- 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 +7 -11
- 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 +3 -25
- package/package/aws-client-agent-mcp/dist/types.d.ts.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
|
@@ -22,10 +22,10 @@ function runtimeAuthHeaders(authOptions, callbackBaseUrl) {
|
|
|
22
22
|
* 暂以单次 push 模式实现,后续可按需改为批量/定时 flush。
|
|
23
23
|
*/
|
|
24
24
|
export async function scheduleEventPush(agentId, _entry, authOptions) {
|
|
25
|
-
//
|
|
26
|
-
//
|
|
27
|
-
//
|
|
28
|
-
//
|
|
25
|
+
// 事件传输由 sendStatus() / sendOutput() 中的 HTTP 回调直接完成(POST /api/runtime/callback/status|output),
|
|
26
|
+
// 调度中心收到回调后持久化到 DB SSOT 并通过 WebSocket AGENT_EVENTS_DELTA 广播给前端。
|
|
27
|
+
// 此函数仅用于记录推送统计,不做实际 HTTP 推送。
|
|
28
|
+
// 桥接侧 ring buffer 作为本地事件备份,可用于调试面板和增量查询。
|
|
29
29
|
const state = getOrCreatePushState(agentId);
|
|
30
30
|
state.success++;
|
|
31
31
|
state.consecutiveFailures = 0;
|
|
@@ -31,6 +31,7 @@ export interface BridgeEventPayload {
|
|
|
31
31
|
readonly actionInput?: string;
|
|
32
32
|
readonly actionResult?: string;
|
|
33
33
|
readonly actionId?: string;
|
|
34
|
+
readonly parentId?: string;
|
|
34
35
|
readonly inputTokens?: number;
|
|
35
36
|
readonly outputTokens?: number;
|
|
36
37
|
readonly sourceEventType?: string;
|
|
@@ -57,6 +58,8 @@ interface RuntimeStatusActionInfo {
|
|
|
57
58
|
actionInput?: string;
|
|
58
59
|
actionResult?: string;
|
|
59
60
|
actionId?: string;
|
|
61
|
+
/** 父事件 ID,用于事件父子层级(如压缩子事件关联到父压缩事件) */
|
|
62
|
+
parentId?: string;
|
|
60
63
|
}
|
|
61
64
|
export interface RuntimeCallbackAuthOptions {
|
|
62
65
|
runtimeAccessToken?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-output.d.ts","sourceRoot":"","sources":["../../src/services/session-output.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"session-output.d.ts","sourceRoot":"","sources":["../../src/services/session-output.ts"],"names":[],"mappings":"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"}
|
|
@@ -105,6 +105,8 @@ export async function sendStatus(agentId, sessionId, status, actionInfo, usage,
|
|
|
105
105
|
payload.actionResult = actionInfo.actionResult;
|
|
106
106
|
if (actionInfo.actionId)
|
|
107
107
|
payload.actionId = actionInfo.actionId;
|
|
108
|
+
if (actionInfo.parentId)
|
|
109
|
+
payload.parentId = actionInfo.parentId;
|
|
108
110
|
}
|
|
109
111
|
// 添加 token 用量信息
|
|
110
112
|
if (usage) {
|
|
@@ -124,8 +126,29 @@ export async function sendStatus(agentId, sessionId, status, actionInfo, usage,
|
|
|
124
126
|
logger.warn("Skip runtime status callback because runtime token is missing", { agentId, sessionId, status, schedulerBaseUrl: callbackBaseUrl });
|
|
125
127
|
return undefined;
|
|
126
128
|
}
|
|
129
|
+
// ★ 诊断日志:为 context_compaction 事件记录发送过程,排查间歇性丢失
|
|
130
|
+
const isCompactionEvent = actionInfo?.actionType === "context_compaction";
|
|
131
|
+
if (isCompactionEvent) {
|
|
132
|
+
logger.info("[compaction-diag] sendStatus enter", {
|
|
133
|
+
agentId, sessionId, status,
|
|
134
|
+
actionId: actionInfo?.actionId,
|
|
135
|
+
parentId: actionInfo?.parentId,
|
|
136
|
+
actionLabel: actionInfo?.actionLabel,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
127
139
|
try {
|
|
128
|
-
|
|
140
|
+
const response = await axios.post(`${callbackBaseUrl}/api/runtime/callback/status`, payload, { headers, timeout: 15000 });
|
|
141
|
+
if (isCompactionEvent) {
|
|
142
|
+
const data = response?.data;
|
|
143
|
+
logger.info("[compaction-diag] sendStatus success", {
|
|
144
|
+
agentId, actionId: actionInfo?.actionId,
|
|
145
|
+
actionLabel: actionInfo?.actionLabel,
|
|
146
|
+
httpStatus: response?.status,
|
|
147
|
+
ignored: data?.ignored,
|
|
148
|
+
responseBody: data,
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
return response;
|
|
129
152
|
}
|
|
130
153
|
catch (error) {
|
|
131
154
|
if (getAxiosStatusCode(error) === 401) {
|
|
@@ -134,7 +157,17 @@ export async function sendStatus(agentId, sessionId, status, actionInfo, usage,
|
|
|
134
157
|
const retryHeaders = runtimeAuthHeaders(authOptions, callbackBaseUrl);
|
|
135
158
|
if (retryHeaders) {
|
|
136
159
|
try {
|
|
137
|
-
|
|
160
|
+
const retryResponse = await axios.post(`${callbackBaseUrl}/api/runtime/callback/status`, payload, { headers: retryHeaders, timeout: 15000 });
|
|
161
|
+
if (isCompactionEvent) {
|
|
162
|
+
const data = retryResponse?.data;
|
|
163
|
+
logger.info("[compaction-diag] sendStatus retry success", {
|
|
164
|
+
agentId, actionId: actionInfo?.actionId,
|
|
165
|
+
actionLabel: actionInfo?.actionLabel,
|
|
166
|
+
httpStatus: retryResponse?.status,
|
|
167
|
+
ignored: data?.ignored,
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
return retryResponse;
|
|
138
171
|
}
|
|
139
172
|
catch (retryError) {
|
|
140
173
|
logger.warn("Runtime status callback retry failed after token refresh", {
|
|
@@ -167,6 +200,9 @@ export async function sendStatus(agentId, sessionId, status, actionInfo, usage,
|
|
|
167
200
|
actionInput: actionInfo?.actionInput,
|
|
168
201
|
actionResult: actionInfo?.actionResult,
|
|
169
202
|
actionId: actionInfo?.actionId,
|
|
203
|
+
// ★ 必须写入 parentId,否则子事件(如压缩 phase/end 子事件)在前端
|
|
204
|
+
// buildEventTreeFromFlat 中找不到父事件,会作为孤儿子事件扁平化渲染。
|
|
205
|
+
parentId: actionInfo?.parentId,
|
|
170
206
|
inputTokens: usage?.inputTokens,
|
|
171
207
|
outputTokens: usage?.outputTokens,
|
|
172
208
|
sourceEventType,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sub-agent-manager-instance.d.ts","sourceRoot":"","sources":["../../src/services/sub-agent-manager-instance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAWnE,eAAO,MAAM,eAAe,iBAAiC,CAAC;AAC9D,eAAO,MAAM,aAAa,eAAQ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { SubAgentManager, SubAgentStore } from "@agentswork/acode";
|
|
2
|
+
/**
|
|
3
|
+
* Bridge 层 SubAgentManager 单例。
|
|
4
|
+
*
|
|
5
|
+
* 每个 bridge 进程持有一个 SubAgentManager 实例,
|
|
6
|
+
* 所有 ACodeRuntime 实例共享(通过 ACodeRuntimeConfig.subAgentManager 注入)。
|
|
7
|
+
*
|
|
8
|
+
* SubAgentStore 同样单例,所有 agent 共用(按 agentId 文件隔离)。
|
|
9
|
+
*/
|
|
10
|
+
const store = new SubAgentStore();
|
|
11
|
+
export const subAgentManager = new SubAgentManager({ store });
|
|
12
|
+
export const subAgentStore = store;
|
|
@@ -134,6 +134,7 @@ export declare function readWorkspaceFile(params: WorkspaceFileParams): Promise<
|
|
|
134
134
|
/**
|
|
135
135
|
* 读取工作区条目的属性信息。
|
|
136
136
|
* 主流程:解析安全路径 -> 读取 stat/lstat -> 文件额外尝试解析图片尺寸。
|
|
137
|
+
* 对于目录,stat.size 只是目录项元数据大小,需要递归统计子文件总和。
|
|
137
138
|
*/
|
|
138
139
|
export declare function getWorkspaceEntryProperties(params: DeleteWorkspaceEntryParams): Promise<WorkspaceEntryPropertiesResult>;
|
|
139
140
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-files.d.ts","sourceRoot":"","sources":["../../src/services/workspace-files.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"workspace-files.d.ts","sourceRoot":"","sources":["../../src/services/workspace-files.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAqDH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,4BAA4B;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,iBAAiB,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,uBAAuB;IACtC,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,8BAA8B;IAC7C,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,6BAA6B;IAC5C,EAAE,EAAE,IAAI,CAAC;IACT,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,UAAU,mBAAmB;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,mBAAmB;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,wBAAyB,SAAQ,mBAAmB;IAC5D,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,0BAA2B,SAAQ,mBAAmB;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,UAAU,0BAA2B,SAAQ,mBAAmB;IAC9D,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,wBAAyB,SAAQ,mBAAmB;IAC5D,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,UAAU,0BAA2B,SAAQ,mBAAmB;IAC9D,UAAU,EAAE,MAAM,CAAC;CACpB;AAMD,UAAU,0BAA2B,SAAQ,mBAAmB;IAC9D,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,UAAU,4BAA6B,SAAQ,mBAAmB;IAChE,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,6BAA8B,SAAQ,mBAAmB;IACjE,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,yBAA0B,SAAQ,mBAAmB;IAC7D,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,8BAA8B;IAC7C,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,wBAAwB,CAAC;CAClC;AAED,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,IAAI,CAAC;IACT,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAoeD;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,4BAA4B,CAAC,CA0B/G;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAgBrG;AAsDD;;;;GAIG;AACH,wBAAsB,2BAA2B,CAAC,MAAM,EAAE,0BAA0B,GAAG,OAAO,CAAC,8BAA8B,CAAC,CA+B7H;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAoB/G;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,8BAA8B,CAAC,CAkCnH;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAYzI;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,0BAA0B,GACjC,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAAC,CAkCxF;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,0BAA0B,GACjC,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAkCtF;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,wBAAwB,GAC/B,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,CAAC,CAiD/G;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,0BAA0B,GACjC,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAelE;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,0BAA0B,GACjC,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,6BAA6B,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA4CnL;AAED;;GAEG;AACH,wBAAsB,8BAA8B,CAAC,MAAM,EAAE,4BAA4B,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAa3H;AAED;;GAEG;AACH,wBAAsB,2BAA2B,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAarH;AA+GD;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,6BAA6B,GAAG,OAAO,CAAC,6BAA6B,CAAC,CA8C3H"}
|
|
@@ -475,9 +475,61 @@ export async function readWorkspaceFile(params) {
|
|
|
475
475
|
content
|
|
476
476
|
};
|
|
477
477
|
}
|
|
478
|
+
/**
|
|
479
|
+
* 目录大小计算上限,避免在工作区体量异常时长时间阻塞属性查询。
|
|
480
|
+
*/
|
|
481
|
+
const DIRECTORY_SIZE_LIMITS = {
|
|
482
|
+
maxEntries: 100_000,
|
|
483
|
+
maxDepth: 32,
|
|
484
|
+
};
|
|
485
|
+
/**
|
|
486
|
+
* 递归累加目录内所有普通文件的总大小。
|
|
487
|
+
* 跳过符号链接以避免跟随循环,访问失败的单个条目直接忽略。
|
|
488
|
+
*/
|
|
489
|
+
async function calculateDirectorySize(workspaceRoot, directoryPath) {
|
|
490
|
+
let total = 0;
|
|
491
|
+
let entriesProcessed = 0;
|
|
492
|
+
async function walk(dirPath, depth) {
|
|
493
|
+
if (depth >= DIRECTORY_SIZE_LIMITS.maxDepth) {
|
|
494
|
+
return;
|
|
495
|
+
}
|
|
496
|
+
let entries;
|
|
497
|
+
try {
|
|
498
|
+
entries = await fs.readdir(dirPath, { withFileTypes: true });
|
|
499
|
+
}
|
|
500
|
+
catch {
|
|
501
|
+
return;
|
|
502
|
+
}
|
|
503
|
+
for (const entry of entries) {
|
|
504
|
+
entriesProcessed += 1;
|
|
505
|
+
if (entriesProcessed > DIRECTORY_SIZE_LIMITS.maxEntries) {
|
|
506
|
+
return;
|
|
507
|
+
}
|
|
508
|
+
if (entry.isSymbolicLink()) {
|
|
509
|
+
continue;
|
|
510
|
+
}
|
|
511
|
+
const entryPath = ensureInsideWorkspace(workspaceRoot, path.join(dirPath, entry.name));
|
|
512
|
+
try {
|
|
513
|
+
if (entry.isDirectory()) {
|
|
514
|
+
await walk(entryPath, depth + 1);
|
|
515
|
+
}
|
|
516
|
+
else if (entry.isFile()) {
|
|
517
|
+
const stat = await fs.stat(entryPath);
|
|
518
|
+
total += stat.size;
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
catch {
|
|
522
|
+
// 单个条目失败不影响整体统计
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
await walk(directoryPath, 0);
|
|
527
|
+
return total;
|
|
528
|
+
}
|
|
478
529
|
/**
|
|
479
530
|
* 读取工作区条目的属性信息。
|
|
480
531
|
* 主流程:解析安全路径 -> 读取 stat/lstat -> 文件额外尝试解析图片尺寸。
|
|
532
|
+
* 对于目录,stat.size 只是目录项元数据大小,需要递归统计子文件总和。
|
|
481
533
|
*/
|
|
482
534
|
export async function getWorkspaceEntryProperties(params) {
|
|
483
535
|
const { workspaceRoot, resolvedTargetPath } = await resolveEntryTarget(params, { allowWorkspaceRoot: true });
|
|
@@ -485,7 +537,11 @@ export async function getWorkspaceEntryProperties(params) {
|
|
|
485
537
|
fs.stat(resolvedTargetPath),
|
|
486
538
|
fs.lstat(resolvedTargetPath),
|
|
487
539
|
]);
|
|
540
|
+
const isDirectory = stat.isDirectory();
|
|
488
541
|
const image = stat.isFile() ? await readImageProperties(resolvedTargetPath) : undefined;
|
|
542
|
+
const size = isDirectory
|
|
543
|
+
? await calculateDirectorySize(workspaceRoot, resolvedTargetPath)
|
|
544
|
+
: stat.size;
|
|
489
545
|
return {
|
|
490
546
|
workspacePath: toDisplayPath(workspaceRoot),
|
|
491
547
|
targetPath: toDisplayPath(resolvedTargetPath),
|
|
@@ -493,7 +549,7 @@ export async function getWorkspaceEntryProperties(params) {
|
|
|
493
549
|
isDirectory: stat.isDirectory(),
|
|
494
550
|
isFile: stat.isFile(),
|
|
495
551
|
isSymbolicLink: linkStat.isSymbolicLink(),
|
|
496
|
-
size
|
|
552
|
+
size,
|
|
497
553
|
mode: stat.mode,
|
|
498
554
|
modeOctal: formatModeOctal(stat.mode),
|
|
499
555
|
permissions: formatPermissions(stat.mode),
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { type ACodeBuiltInTool } from "./built-in-file-tools.js";
|
|
2
|
+
/**
|
|
3
|
+
* ask_user_question 工具的依赖:由 ACodeRuntime 注入,
|
|
4
|
+
* 让工具的 execute() 能通知 runtime 发出 question_request 事件,
|
|
5
|
+
* 并阻塞等待 runtime 通过 submitQuestionAnswer() 回传答案。
|
|
6
|
+
*/
|
|
7
|
+
export interface AcodeAskUserQuestionDeps {
|
|
8
|
+
/**
|
|
9
|
+
* 当工具被调用时,runtime 应发出 question_request 事件,
|
|
10
|
+
* 携带 questions 与 toolCallId,让适配器转发到前端。
|
|
11
|
+
*/
|
|
12
|
+
onQuestion(toolCallId: string, questions: AcodeQuestionItem[]): void;
|
|
13
|
+
/**
|
|
14
|
+
* 阻塞等待用户回答。runtime 内部用 questionWaiters Map 管理 Promise,
|
|
15
|
+
* submitQuestionAnswer() 调用时 resolve,abort/stop 时 reject。
|
|
16
|
+
*/
|
|
17
|
+
waitForAnswer(toolCallId: string, contextVersion: number): Promise<Record<string, string>>;
|
|
18
|
+
}
|
|
19
|
+
export interface AcodeQuestionOption {
|
|
20
|
+
label: string;
|
|
21
|
+
description?: string;
|
|
22
|
+
requiresCustomInput?: boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface AcodeQuestionItem {
|
|
25
|
+
question: string;
|
|
26
|
+
header?: string;
|
|
27
|
+
options: AcodeQuestionOption[];
|
|
28
|
+
multiple?: boolean;
|
|
29
|
+
}
|
|
30
|
+
export interface AcodeAskUserQuestionResult {
|
|
31
|
+
ok: true;
|
|
32
|
+
tool: "ask_user_question";
|
|
33
|
+
answers: Record<string, string>;
|
|
34
|
+
summary: string;
|
|
35
|
+
}
|
|
36
|
+
/** 工具名常量,供 runtime/adapter 引用 */
|
|
37
|
+
export declare const ASK_USER_QUESTION_TOOL_NAME = "ask_user_question";
|
|
38
|
+
/**
|
|
39
|
+
* 创建 ask_user_question 内置工具。
|
|
40
|
+
* 由 ACodeRuntime.start() 调用并注入 deps。
|
|
41
|
+
*/
|
|
42
|
+
export declare function createAskUserQuestionTool(deps: AcodeAskUserQuestionDeps, contextVersionProvider: () => number): ACodeBuiltInTool;
|
|
43
|
+
/** 类型守卫:判断一个值是否为 ask_user_question 工具的成功结果 */
|
|
44
|
+
export declare function isAskUserQuestionResult(value: unknown): value is AcodeAskUserQuestionResult;
|
|
45
|
+
/** 将成功结果转为 JSON 字符串(供 toToolResultText 调用) */
|
|
46
|
+
export declare function serializeAskUserQuestionResult(result: AcodeAskUserQuestionResult): string;
|
|
47
|
+
//# sourceMappingURL=ask-user-question-tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ask-user-question-tool.d.ts","sourceRoot":"","sources":["../src/ask-user-question-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,gBAAgB,EAItB,MAAM,0BAA0B,CAAC;AAElC;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,UAAU,CACR,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,iBAAiB,EAAE,GAC7B,IAAI,CAAC;IAER;;;OAGG;IACH,aAAa,CACX,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,0BAA0B;IACzC,EAAE,EAAE,IAAI,CAAC;IACT,IAAI,EAAE,mBAAmB,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,iCAAiC;AACjC,eAAO,MAAM,2BAA2B,sBAAsB,CAAC;AAU/D;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,wBAAwB,EAC9B,sBAAsB,EAAE,MAAM,MAAM,GACnC,gBAAgB,CAwDlB;AA2JD,8CAA8C;AAC9C,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,0BAA0B,CAUrC;AAED,8CAA8C;AAC9C,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,0BAA0B,GACjC,MAAM,CAQR"}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
/** 工具名常量,供 runtime/adapter 引用 */
|
|
2
|
+
export const ASK_USER_QUESTION_TOOL_NAME = "ask_user_question";
|
|
3
|
+
const TOOL_DESCRIPTION = [
|
|
4
|
+
"向用户提出结构化问题以收集偏好、澄清需求、做决策或提供方向选择。",
|
|
5
|
+
"每次最多 4 个问题,每个问题 2-4 个选项;UI 会自动追加“其它”选项供用户自定义输入。",
|
|
6
|
+
"工具调用会阻塞当前轮次直到用户回答;用户回答后答案会作为 tool result 回传给你。",
|
|
7
|
+
"请勿用此工具请求计划审批——那是 plan 工具的职责。",
|
|
8
|
+
"如果推荐某个选项,把它放在第一位并在 label 末尾加“(推荐)”。",
|
|
9
|
+
].join("\n");
|
|
10
|
+
/**
|
|
11
|
+
* 创建 ask_user_question 内置工具。
|
|
12
|
+
* 由 ACodeRuntime.start() 调用并注入 deps。
|
|
13
|
+
*/
|
|
14
|
+
export function createAskUserQuestionTool(deps, contextVersionProvider) {
|
|
15
|
+
return {
|
|
16
|
+
kind: "builtin",
|
|
17
|
+
toolName: ASK_USER_QUESTION_TOOL_NAME,
|
|
18
|
+
exposedName: ASK_USER_QUESTION_TOOL_NAME,
|
|
19
|
+
description: TOOL_DESCRIPTION,
|
|
20
|
+
inputSchema: buildInputSchema(),
|
|
21
|
+
async execute(args, context) {
|
|
22
|
+
const toolCallId = context?.toolCallId;
|
|
23
|
+
if (!toolCallId) {
|
|
24
|
+
return {
|
|
25
|
+
ok: false,
|
|
26
|
+
tool: ASK_USER_QUESTION_TOOL_NAME,
|
|
27
|
+
error: "missing toolCallId in execution context",
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
const questions = normalizeQuestions(args.questions);
|
|
31
|
+
if (questions.length === 0) {
|
|
32
|
+
return {
|
|
33
|
+
ok: false,
|
|
34
|
+
tool: ASK_USER_QUESTION_TOOL_NAME,
|
|
35
|
+
error: "questions must be a non-empty array (1-4 items)",
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
// 通知 runtime 发出 question_request 事件
|
|
39
|
+
deps.onQuestion(toolCallId, questions);
|
|
40
|
+
// 阻塞等待用户回答;abort/stop/supersede 时会 reject
|
|
41
|
+
const contextVersion = contextVersionProvider();
|
|
42
|
+
let answers;
|
|
43
|
+
try {
|
|
44
|
+
answers = await deps.waitForAnswer(toolCallId, contextVersion);
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
48
|
+
return {
|
|
49
|
+
ok: false,
|
|
50
|
+
tool: ASK_USER_QUESTION_TOOL_NAME,
|
|
51
|
+
error: reason,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
const summary = formatAnswerSummary(questions, answers);
|
|
55
|
+
const result = {
|
|
56
|
+
ok: true,
|
|
57
|
+
tool: ASK_USER_QUESTION_TOOL_NAME,
|
|
58
|
+
answers,
|
|
59
|
+
summary,
|
|
60
|
+
};
|
|
61
|
+
return result;
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
function buildInputSchema() {
|
|
66
|
+
return {
|
|
67
|
+
type: "object",
|
|
68
|
+
properties: {
|
|
69
|
+
questions: {
|
|
70
|
+
type: "array",
|
|
71
|
+
description: "要提问的问题列表(1-4 个)",
|
|
72
|
+
minItems: 1,
|
|
73
|
+
maxItems: 4,
|
|
74
|
+
items: {
|
|
75
|
+
type: "object",
|
|
76
|
+
properties: {
|
|
77
|
+
question: {
|
|
78
|
+
type: "string",
|
|
79
|
+
description: "完整问题文本,建议以问号结尾",
|
|
80
|
+
},
|
|
81
|
+
header: {
|
|
82
|
+
type: "string",
|
|
83
|
+
description: "≤12 字符的简短标签,用于 UI chip 显示",
|
|
84
|
+
},
|
|
85
|
+
options: {
|
|
86
|
+
type: "array",
|
|
87
|
+
description: "2-4 个互斥选项(multiSelect=true 时可不互斥)",
|
|
88
|
+
minItems: 2,
|
|
89
|
+
maxItems: 4,
|
|
90
|
+
items: {
|
|
91
|
+
type: "object",
|
|
92
|
+
properties: {
|
|
93
|
+
label: {
|
|
94
|
+
type: "string",
|
|
95
|
+
description: "1-5 词的简短标签",
|
|
96
|
+
},
|
|
97
|
+
description: {
|
|
98
|
+
type: "string",
|
|
99
|
+
description: "选项含义或权衡说明",
|
|
100
|
+
},
|
|
101
|
+
requiresCustomInput: {
|
|
102
|
+
type: "boolean",
|
|
103
|
+
description: "选中此项时 UI 显示自定义输入框",
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
required: ["label"],
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
multiple: {
|
|
110
|
+
type: "boolean",
|
|
111
|
+
description: "是否允许多选;默认 false",
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
required: ["question", "options"],
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
custom: {
|
|
118
|
+
type: "boolean",
|
|
119
|
+
description: "是否允许用户补充自定义输入;默认 true",
|
|
120
|
+
},
|
|
121
|
+
},
|
|
122
|
+
required: ["questions"],
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
function normalizeQuestions(raw) {
|
|
126
|
+
if (!Array.isArray(raw) || raw.length === 0) {
|
|
127
|
+
return [];
|
|
128
|
+
}
|
|
129
|
+
const items = [];
|
|
130
|
+
for (const entry of raw) {
|
|
131
|
+
if (!entry || typeof entry !== "object")
|
|
132
|
+
continue;
|
|
133
|
+
const obj = entry;
|
|
134
|
+
const question = typeof obj.question === "string" ? obj.question.trim() : "";
|
|
135
|
+
if (!question)
|
|
136
|
+
continue;
|
|
137
|
+
const options = normalizeOptions(obj.options);
|
|
138
|
+
if (options.length < 2)
|
|
139
|
+
continue;
|
|
140
|
+
const header = typeof obj.header === "string" && obj.header.trim()
|
|
141
|
+
? obj.header.trim()
|
|
142
|
+
: undefined;
|
|
143
|
+
const multiple = obj.multiple === true || obj.multiSelect === true;
|
|
144
|
+
items.push({ question, header, options, multiple });
|
|
145
|
+
if (items.length >= 4)
|
|
146
|
+
break;
|
|
147
|
+
}
|
|
148
|
+
return items;
|
|
149
|
+
}
|
|
150
|
+
function normalizeOptions(raw) {
|
|
151
|
+
if (!Array.isArray(raw))
|
|
152
|
+
return [];
|
|
153
|
+
const options = [];
|
|
154
|
+
for (const entry of raw) {
|
|
155
|
+
if (typeof entry === "string") {
|
|
156
|
+
const label = entry.trim();
|
|
157
|
+
if (label)
|
|
158
|
+
options.push({ label });
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
if (!entry || typeof entry !== "object")
|
|
162
|
+
continue;
|
|
163
|
+
const obj = entry;
|
|
164
|
+
const label = typeof obj.label === "string"
|
|
165
|
+
? obj.label.trim()
|
|
166
|
+
: typeof obj.value === "string"
|
|
167
|
+
? obj.value.trim()
|
|
168
|
+
: typeof obj.text === "string"
|
|
169
|
+
? obj.text.trim()
|
|
170
|
+
: "";
|
|
171
|
+
if (!label)
|
|
172
|
+
continue;
|
|
173
|
+
const description = typeof obj.description === "string" && obj.description.trim()
|
|
174
|
+
? obj.description.trim()
|
|
175
|
+
: undefined;
|
|
176
|
+
const requiresCustomInput = obj.requiresCustomInput === true ||
|
|
177
|
+
obj.requireCustomInput === true ||
|
|
178
|
+
obj.allowCustomInput === true;
|
|
179
|
+
options.push({
|
|
180
|
+
label,
|
|
181
|
+
...(description ? { description } : {}),
|
|
182
|
+
...(requiresCustomInput ? { requiresCustomInput } : {}),
|
|
183
|
+
});
|
|
184
|
+
if (options.length >= 4)
|
|
185
|
+
break;
|
|
186
|
+
}
|
|
187
|
+
return options;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* 将答案格式化为可读摘要,确保即使 answers 序列化丢字段,
|
|
191
|
+
* LLM 也能从 summary 文本读到答案。
|
|
192
|
+
*/
|
|
193
|
+
function formatAnswerSummary(questions, answers) {
|
|
194
|
+
const lines = ["用户已回答了您的问题:"];
|
|
195
|
+
questions.forEach((q, index) => {
|
|
196
|
+
const key = String(index);
|
|
197
|
+
const answer = answers[key] ||
|
|
198
|
+
(q.header ? answers[q.header] : "") ||
|
|
199
|
+
answers[q.question] ||
|
|
200
|
+
"(未填写)";
|
|
201
|
+
const prefix = q.header || q.question;
|
|
202
|
+
lines.push(`• ${prefix}:${answer}`);
|
|
203
|
+
});
|
|
204
|
+
return lines.join("\n");
|
|
205
|
+
}
|
|
206
|
+
/** 类型守卫:判断一个值是否为 ask_user_question 工具的成功结果 */
|
|
207
|
+
export function isAskUserQuestionResult(value) {
|
|
208
|
+
if (!value || typeof value !== "object")
|
|
209
|
+
return false;
|
|
210
|
+
const obj = value;
|
|
211
|
+
return (obj.ok === true &&
|
|
212
|
+
obj.tool === ASK_USER_QUESTION_TOOL_NAME &&
|
|
213
|
+
typeof obj.answers === "object" &&
|
|
214
|
+
obj.answers !== null &&
|
|
215
|
+
typeof obj.summary === "string");
|
|
216
|
+
}
|
|
217
|
+
/** 将成功结果转为 JSON 字符串(供 toToolResultText 调用) */
|
|
218
|
+
export function serializeAskUserQuestionResult(result) {
|
|
219
|
+
const json = {
|
|
220
|
+
ok: true,
|
|
221
|
+
tool: ASK_USER_QUESTION_TOOL_NAME,
|
|
222
|
+
answers: answersToJsonObject(result.answers),
|
|
223
|
+
summary: result.summary,
|
|
224
|
+
};
|
|
225
|
+
return JSON.stringify(json);
|
|
226
|
+
}
|
|
227
|
+
function answersToJsonObject(answers) {
|
|
228
|
+
const out = {};
|
|
229
|
+
for (const [key, value] of Object.entries(answers)) {
|
|
230
|
+
out[key] = value;
|
|
231
|
+
}
|
|
232
|
+
return out;
|
|
233
|
+
}
|
|
@@ -15,6 +15,8 @@ export interface ACodeBuiltInTool {
|
|
|
15
15
|
}
|
|
16
16
|
export interface ACodeBuiltInToolExecutionContext {
|
|
17
17
|
readonly onOutput?: CommandOutputSink;
|
|
18
|
+
/** 当前工具调用的 ID(toolCall.id),用于需要关联请求与响应的工具(如 ask_user_question) */
|
|
19
|
+
readonly toolCallId?: string;
|
|
18
20
|
}
|
|
19
21
|
export declare function createBuiltInFileTools(workingDirectory: string, agentId?: string): ACodeBuiltInTool[];
|
|
20
22
|
//# sourceMappingURL=built-in-file-tools.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"built-in-file-tools.d.ts","sourceRoot":"","sources":["../src/built-in-file-tools.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,kCAAkC,CAAC;AAE1C,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,EAAE,GACX;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AACjC,MAAM,MAAM,UAAU,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAEtD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,UAAU,CAAC;IACxB,OAAO,CACL,IAAI,EAAE,UAAU,EAChB,OAAO,CAAC,EAAE,gCAAgC,GACzC,OAAO,CAAC,OAAO,CAAC,CAAC;CACrB;AAED,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"built-in-file-tools.d.ts","sourceRoot":"","sources":["../src/built-in-file-tools.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,kCAAkC,CAAC;AAE1C,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,EAAE,GACX;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AACjC,MAAM,MAAM,UAAU,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAEtD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,UAAU,CAAC;IACxB,OAAO,CACL,IAAI,EAAE,UAAU,EAChB,OAAO,CAAC,EAAE,gCAAgC,GACzC,OAAO,CAAC,OAAO,CAAC,CAAC;CACrB;AAED,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IACtC,kEAAkE;IAClE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAufD,wBAAgB,sBAAsB,CACpC,gBAAgB,EAAE,MAAM,EACxB,OAAO,CAAC,EAAE,MAAM,GACf,gBAAgB,EAAE,CAQpB"}
|