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.
Files changed (276) hide show
  1. package/dist/adapter/AcodeSdkAdapter.d.ts +35 -1
  2. package/dist/adapter/AcodeSdkAdapter.d.ts.map +1 -1
  3. package/dist/adapter/AcodeSdkAdapter.js +417 -40
  4. package/dist/adapter/ClaudeSdkAdapter.d.ts +6 -0
  5. package/dist/adapter/ClaudeSdkAdapter.d.ts.map +1 -1
  6. package/dist/adapter/ClaudeSdkAdapter.js +23 -1
  7. package/dist/adapter/idle-poll-loop.d.ts +2 -1
  8. package/dist/adapter/idle-poll-loop.d.ts.map +1 -1
  9. package/dist/adapter/types.d.ts +65 -3
  10. package/dist/adapter/types.d.ts.map +1 -1
  11. package/dist/adapter/types.js +5 -4
  12. package/dist/index.js +4 -0
  13. package/dist/routes/acode-todos.d.ts +11 -0
  14. package/dist/routes/acode-todos.d.ts.map +1 -0
  15. package/dist/routes/acode-todos.js +75 -0
  16. package/dist/routes/memory.d.ts +1 -1
  17. package/dist/routes/memory.d.ts.map +1 -1
  18. package/dist/routes/memory.js +3 -3
  19. package/dist/routes/pty.d.ts.map +1 -1
  20. package/dist/routes/pty.js +9 -0
  21. package/dist/routes/sub-agents.d.ts +14 -0
  22. package/dist/routes/sub-agents.d.ts.map +1 -0
  23. package/dist/routes/sub-agents.js +253 -0
  24. package/dist/routes/terminal.d.ts +9 -1
  25. package/dist/routes/terminal.d.ts.map +1 -1
  26. package/dist/routes/terminal.js +207 -22
  27. package/dist/services/agent-event-store.d.ts +1 -0
  28. package/dist/services/agent-event-store.d.ts.map +1 -1
  29. package/dist/services/event-delta-pusher.js +4 -4
  30. package/dist/services/session-output.d.ts +3 -0
  31. package/dist/services/session-output.d.ts.map +1 -1
  32. package/dist/services/session-output.js +38 -2
  33. package/dist/services/sub-agent-manager-instance.d.ts +4 -0
  34. package/dist/services/sub-agent-manager-instance.d.ts.map +1 -0
  35. package/dist/services/sub-agent-manager-instance.js +12 -0
  36. package/dist/services/workspace-files.d.ts +1 -0
  37. package/dist/services/workspace-files.d.ts.map +1 -1
  38. package/dist/services/workspace-files.js +57 -1
  39. package/package/acode/dist/ask-user-question-tool.d.ts +47 -0
  40. package/package/acode/dist/ask-user-question-tool.d.ts.map +1 -0
  41. package/package/acode/dist/ask-user-question-tool.js +233 -0
  42. package/package/acode/dist/built-in-file-tools.d.ts +2 -0
  43. package/package/acode/dist/built-in-file-tools.d.ts.map +1 -1
  44. package/package/acode/dist/compaction.d.ts +206 -0
  45. package/package/acode/dist/compaction.d.ts.map +1 -0
  46. package/package/acode/dist/compaction.js +664 -0
  47. package/package/acode/dist/config.d.ts +6 -1
  48. package/package/acode/dist/config.d.ts.map +1 -1
  49. package/package/acode/dist/config.js +27 -2
  50. package/package/acode/dist/index.d.ts +4 -0
  51. package/package/acode/dist/index.d.ts.map +1 -1
  52. package/package/acode/dist/index.js +4 -0
  53. package/package/acode/dist/runtime.d.ts +137 -0
  54. package/package/acode/dist/runtime.d.ts.map +1 -1
  55. package/package/acode/dist/runtime.js +974 -172
  56. package/package/acode/dist/skill-tool.d.ts +30 -0
  57. package/package/acode/dist/skill-tool.d.ts.map +1 -0
  58. package/package/acode/dist/skill-tool.js +174 -0
  59. package/package/acode/dist/sub-agent-manager.d.ts +169 -0
  60. package/package/acode/dist/sub-agent-manager.d.ts.map +1 -0
  61. package/package/acode/dist/sub-agent-manager.js +535 -0
  62. package/package/acode/dist/sub-agent-store.d.ts +33 -0
  63. package/package/acode/dist/sub-agent-store.d.ts.map +1 -0
  64. package/package/acode/dist/sub-agent-store.js +109 -0
  65. package/package/acode/dist/sub-agent-tools.d.ts +72 -0
  66. package/package/acode/dist/sub-agent-tools.d.ts.map +1 -0
  67. package/package/acode/dist/sub-agent-tools.js +429 -0
  68. package/package/acode/dist/sub-agent-types.d.ts +81 -0
  69. package/package/acode/dist/sub-agent-types.d.ts.map +1 -0
  70. package/package/acode/dist/sub-agent-types.js +8 -0
  71. package/package/acode/dist/todo-store.d.ts +42 -0
  72. package/package/acode/dist/todo-store.d.ts.map +1 -0
  73. package/package/acode/dist/todo-store.js +68 -0
  74. package/package/acode/dist/todo-tool.d.ts +6 -0
  75. package/package/acode/dist/todo-tool.d.ts.map +1 -0
  76. package/package/acode/dist/todo-tool.js +138 -0
  77. package/package/acode/dist/types.d.ts +22 -1
  78. package/package/acode/dist/types.d.ts.map +1 -1
  79. package/package/acode/package.json +13 -2
  80. package/package/aws-client-agent-mcp/dist/context-manager.test.js +0 -2
  81. package/package/aws-client-agent-mcp/dist/context-manager.test.js.map +1 -1
  82. package/package/aws-client-agent-mcp/dist/mcp-server.d.ts +83 -45
  83. package/package/aws-client-agent-mcp/dist/mcp-server.d.ts.map +1 -1
  84. package/package/aws-client-agent-mcp/dist/mcp-server.js +451 -325
  85. package/package/aws-client-agent-mcp/dist/mcp-server.js.map +1 -1
  86. package/package/aws-client-agent-mcp/dist/mcp-server.test.js +259 -241
  87. package/package/aws-client-agent-mcp/dist/mcp-server.test.js.map +1 -1
  88. package/package/aws-client-agent-mcp/dist/mcp-tools.d.ts +1 -19
  89. package/package/aws-client-agent-mcp/dist/mcp-tools.d.ts.map +1 -1
  90. package/package/aws-client-agent-mcp/dist/mcp-tools.js +2 -69
  91. package/package/aws-client-agent-mcp/dist/mcp-tools.js.map +1 -1
  92. package/package/aws-client-agent-mcp/dist/memory-store.d.ts +17 -19
  93. package/package/aws-client-agent-mcp/dist/memory-store.d.ts.map +1 -1
  94. package/package/aws-client-agent-mcp/dist/memory-store.js +62 -99
  95. package/package/aws-client-agent-mcp/dist/memory-store.js.map +1 -1
  96. package/package/aws-client-agent-mcp/dist/memory-store.test.js +207 -125
  97. package/package/aws-client-agent-mcp/dist/memory-store.test.js.map +1 -1
  98. package/package/aws-client-agent-mcp/dist/memory-tools.d.ts +3 -4
  99. package/package/aws-client-agent-mcp/dist/memory-tools.d.ts.map +1 -1
  100. package/package/aws-client-agent-mcp/dist/memory-tools.js +28 -33
  101. package/package/aws-client-agent-mcp/dist/memory-tools.js.map +1 -1
  102. package/package/aws-client-agent-mcp/dist/message-buffer.d.ts +27 -9
  103. package/package/aws-client-agent-mcp/dist/message-buffer.d.ts.map +1 -1
  104. package/package/aws-client-agent-mcp/dist/message-buffer.js +100 -23
  105. package/package/aws-client-agent-mcp/dist/message-buffer.js.map +1 -1
  106. package/package/aws-client-agent-mcp/dist/server-memory-store.d.ts +1 -3
  107. package/package/aws-client-agent-mcp/dist/server-memory-store.d.ts.map +1 -1
  108. package/package/aws-client-agent-mcp/dist/server-memory-store.js +7 -11
  109. package/package/aws-client-agent-mcp/dist/server-memory-store.js.map +1 -1
  110. package/package/aws-client-agent-mcp/dist/status-reporter.d.ts.map +1 -1
  111. package/package/aws-client-agent-mcp/dist/status-reporter.js +8 -5
  112. package/package/aws-client-agent-mcp/dist/status-reporter.js.map +1 -1
  113. package/package/aws-client-agent-mcp/dist/status-reporter.test.js +93 -0
  114. package/package/aws-client-agent-mcp/dist/status-reporter.test.js.map +1 -1
  115. package/package/aws-client-agent-mcp/dist/types.d.ts +3 -25
  116. package/package/aws-client-agent-mcp/dist/types.d.ts.map +1 -1
  117. package/package.json +17 -7
  118. package/dist/adapter/AcodeSdkAdapter.test.d.ts +0 -2
  119. package/dist/adapter/AcodeSdkAdapter.test.d.ts.map +0 -1
  120. package/dist/adapter/AcodeSdkAdapter.test.js +0 -2000
  121. package/dist/adapter/AdapterRegistry.test.d.ts +0 -5
  122. package/dist/adapter/AdapterRegistry.test.d.ts.map +0 -1
  123. package/dist/adapter/AdapterRegistry.test.js +0 -118
  124. package/dist/adapter/ClaudeSdkAdapter.test.d.ts +0 -2
  125. package/dist/adapter/ClaudeSdkAdapter.test.d.ts.map +0 -1
  126. package/dist/adapter/ClaudeSdkAdapter.test.js +0 -311
  127. package/dist/adapter/CodexSdkAdapter.test.d.ts +0 -2
  128. package/dist/adapter/CodexSdkAdapter.test.d.ts.map +0 -1
  129. package/dist/adapter/CodexSdkAdapter.test.js +0 -270
  130. package/dist/adapter/OpencodeSdkAdapter.test.d.ts +0 -2
  131. package/dist/adapter/OpencodeSdkAdapter.test.d.ts.map +0 -1
  132. package/dist/adapter/OpencodeSdkAdapter.test.js +0 -158
  133. package/dist/adapter/acode-tool-names.test.d.ts +0 -2
  134. package/dist/adapter/acode-tool-names.test.d.ts.map +0 -1
  135. package/dist/adapter/acode-tool-names.test.js +0 -28
  136. package/dist/adapter/adapter.test.d.ts +0 -5
  137. package/dist/adapter/adapter.test.d.ts.map +0 -1
  138. package/dist/adapter/adapter.test.js +0 -180
  139. package/dist/adapter/idle-poll-loop.test.d.ts +0 -2
  140. package/dist/adapter/idle-poll-loop.test.d.ts.map +0 -1
  141. package/dist/adapter/idle-poll-loop.test.js +0 -85
  142. package/dist/adapter/types.test.d.ts +0 -2
  143. package/dist/adapter/types.test.d.ts.map +0 -1
  144. package/dist/adapter/types.test.js +0 -50
  145. package/dist/adapters/cc-switch/mcp-acode.test.d.ts +0 -2
  146. package/dist/adapters/cc-switch/mcp-acode.test.d.ts.map +0 -1
  147. package/dist/adapters/cc-switch/mcp-acode.test.js +0 -80
  148. package/dist/adapters/cc-switch/mcp-claudecode.test.d.ts +0 -2
  149. package/dist/adapters/cc-switch/mcp-claudecode.test.d.ts.map +0 -1
  150. package/dist/adapters/cc-switch/mcp-claudecode.test.js +0 -75
  151. package/dist/adapters/cc-switch/mcp-codex.test.d.ts +0 -2
  152. package/dist/adapters/cc-switch/mcp-codex.test.d.ts.map +0 -1
  153. package/dist/adapters/cc-switch/mcp-codex.test.js +0 -126
  154. package/dist/adapters/cc-switch/mcp-opencode.test.d.ts +0 -2
  155. package/dist/adapters/cc-switch/mcp-opencode.test.d.ts.map +0 -1
  156. package/dist/adapters/cc-switch/mcp-opencode.test.js +0 -62
  157. package/dist/adapters/cc-switch/skill-directory.test.d.ts +0 -2
  158. package/dist/adapters/cc-switch/skill-directory.test.d.ts.map +0 -1
  159. package/dist/adapters/cc-switch/skill-directory.test.js +0 -74
  160. package/dist/config.test.d.ts +0 -2
  161. package/dist/config.test.d.ts.map +0 -1
  162. package/dist/config.test.js +0 -107
  163. package/dist/routes/ai-sources.test.d.ts +0 -2
  164. package/dist/routes/ai-sources.test.d.ts.map +0 -1
  165. package/dist/routes/ai-sources.test.js +0 -169
  166. package/dist/routes/file-browser.test.d.ts +0 -5
  167. package/dist/routes/file-browser.test.d.ts.map +0 -1
  168. package/dist/routes/file-browser.test.js +0 -155
  169. package/dist/routes/git.test.d.ts +0 -2
  170. package/dist/routes/git.test.d.ts.map +0 -1
  171. package/dist/routes/git.test.js +0 -330
  172. package/dist/routes/instance.test.d.ts +0 -5
  173. package/dist/routes/instance.test.d.ts.map +0 -1
  174. package/dist/routes/instance.test.js +0 -389
  175. package/dist/routes/mcp.test.d.ts +0 -5
  176. package/dist/routes/mcp.test.d.ts.map +0 -1
  177. package/dist/routes/mcp.test.js +0 -92
  178. package/dist/routes/memory-route-wiring.test.d.ts +0 -2
  179. package/dist/routes/memory-route-wiring.test.d.ts.map +0 -1
  180. package/dist/routes/memory-route-wiring.test.js +0 -15
  181. package/dist/routes/memory.test.d.ts +0 -2
  182. package/dist/routes/memory.test.d.ts.map +0 -1
  183. package/dist/routes/memory.test.js +0 -177
  184. package/dist/routes/properties.test.d.ts +0 -5
  185. package/dist/routes/properties.test.d.ts.map +0 -1
  186. package/dist/routes/properties.test.js +0 -72
  187. package/dist/routes/pty.test.d.ts +0 -2
  188. package/dist/routes/pty.test.d.ts.map +0 -1
  189. package/dist/routes/pty.test.js +0 -82
  190. package/dist/routes/runtime-binding.test.d.ts +0 -2
  191. package/dist/routes/runtime-binding.test.d.ts.map +0 -1
  192. package/dist/routes/runtime-binding.test.js +0 -32
  193. package/dist/routes/sessions.test.d.ts +0 -5
  194. package/dist/routes/sessions.test.d.ts.map +0 -1
  195. package/dist/routes/sessions.test.js +0 -86
  196. package/dist/routes/skills.test.d.ts +0 -5
  197. package/dist/routes/skills.test.d.ts.map +0 -1
  198. package/dist/routes/skills.test.js +0 -50
  199. package/dist/routes/system-metrics.test.d.ts +0 -2
  200. package/dist/routes/system-metrics.test.d.ts.map +0 -1
  201. package/dist/routes/system-metrics.test.js +0 -16
  202. package/dist/routes/terminal.stop-options.test.d.ts +0 -2
  203. package/dist/routes/terminal.stop-options.test.d.ts.map +0 -1
  204. package/dist/routes/terminal.stop-options.test.js +0 -39
  205. package/dist/routes/terminal.test.d.ts +0 -2
  206. package/dist/routes/terminal.test.d.ts.map +0 -1
  207. package/dist/routes/terminal.test.js +0 -746
  208. package/dist/routes/yml.test.d.ts +0 -5
  209. package/dist/routes/yml.test.d.ts.map +0 -1
  210. package/dist/routes/yml.test.js +0 -58
  211. package/dist/services/ai-source-apply.test.d.ts +0 -2
  212. package/dist/services/ai-source-apply.test.d.ts.map +0 -1
  213. package/dist/services/ai-source-apply.test.js +0 -138
  214. package/dist/services/auto-register.test.d.ts +0 -2
  215. package/dist/services/auto-register.test.d.ts.map +0 -1
  216. package/dist/services/auto-register.test.js +0 -184
  217. package/dist/services/aws-client-agent-mcp.test.d.ts +0 -2
  218. package/dist/services/aws-client-agent-mcp.test.d.ts.map +0 -1
  219. package/dist/services/aws-client-agent-mcp.test.js +0 -242
  220. package/dist/services/bridge-package-publish-hooks.test.d.ts +0 -2
  221. package/dist/services/bridge-package-publish-hooks.test.d.ts.map +0 -1
  222. package/dist/services/bridge-package-publish-hooks.test.js +0 -136
  223. package/dist/services/cc-switch-discovery.test.d.ts +0 -2
  224. package/dist/services/cc-switch-discovery.test.d.ts.map +0 -1
  225. package/dist/services/cc-switch-discovery.test.js +0 -56
  226. package/dist/services/cli-commands.test.d.ts +0 -2
  227. package/dist/services/cli-commands.test.d.ts.map +0 -1
  228. package/dist/services/cli-commands.test.js +0 -230
  229. package/dist/services/instance-init-service.test.d.ts +0 -2
  230. package/dist/services/instance-init-service.test.d.ts.map +0 -1
  231. package/dist/services/instance-init-service.test.js +0 -140
  232. package/dist/services/instance-state.test.d.ts +0 -2
  233. package/dist/services/instance-state.test.d.ts.map +0 -1
  234. package/dist/services/instance-state.test.js +0 -245
  235. package/dist/services/mcp-launch-binding-queue.test.d.ts +0 -2
  236. package/dist/services/mcp-launch-binding-queue.test.d.ts.map +0 -1
  237. package/dist/services/mcp-launch-binding-queue.test.js +0 -181
  238. package/dist/services/runtime-binding.test.d.ts +0 -2
  239. package/dist/services/runtime-binding.test.d.ts.map +0 -1
  240. package/dist/services/runtime-binding.test.js +0 -78
  241. package/dist/services/runtime-lifecycle-policy.test.d.ts +0 -2
  242. package/dist/services/runtime-lifecycle-policy.test.d.ts.map +0 -1
  243. package/dist/services/runtime-lifecycle-policy.test.js +0 -41
  244. package/dist/services/session-output.test.d.ts +0 -5
  245. package/dist/services/session-output.test.d.ts.map +0 -1
  246. package/dist/services/session-output.test.js +0 -177
  247. package/dist/services/startup-config-wizard.test.d.ts +0 -2
  248. package/dist/services/startup-config-wizard.test.d.ts.map +0 -1
  249. package/dist/services/startup-config-wizard.test.js +0 -184
  250. package/dist/services/terminal-persistence.test.d.ts +0 -5
  251. package/dist/services/terminal-persistence.test.d.ts.map +0 -1
  252. package/dist/services/terminal-persistence.test.js +0 -159
  253. package/dist/services/tool-installer.test.d.ts +0 -2
  254. package/dist/services/tool-installer.test.d.ts.map +0 -1
  255. package/dist/services/tool-installer.test.js +0 -225
  256. package/dist/services/workspace-files.test.d.ts +0 -2
  257. package/dist/services/workspace-files.test.d.ts.map +0 -1
  258. package/dist/services/workspace-files.test.js +0 -648
  259. package/dist/services/workspace-watch.test.d.ts +0 -2
  260. package/dist/services/workspace-watch.test.d.ts.map +0 -1
  261. package/dist/services/workspace-watch.test.js +0 -38
  262. package/dist/utils/file-utils.test.d.ts +0 -2
  263. package/dist/utils/file-utils.test.d.ts.map +0 -1
  264. package/dist/utils/file-utils.test.js +0 -244
  265. package/dist/utils/logger.test.d.ts +0 -2
  266. package/dist/utils/logger.test.d.ts.map +0 -1
  267. package/dist/utils/logger.test.js +0 -93
  268. package/dist/utils/sdk-package-loader.test.d.ts +0 -2
  269. package/dist/utils/sdk-package-loader.test.d.ts.map +0 -1
  270. package/dist/utils/sdk-package-loader.test.js +0 -84
  271. package/dist/utils/validation.test.d.ts +0 -2
  272. package/dist/utils/validation.test.d.ts.map +0 -1
  273. package/dist/utils/validation.test.js +0 -88
  274. package/dist/utils/yaml-utils.test.d.ts +0 -2
  275. package/dist/utils/yaml-utils.test.d.ts.map +0 -1
  276. package/dist/utils/yaml-utils.test.js +0 -363
@@ -0,0 +1,253 @@
1
+ /**
2
+ * Sub Agent HTTP 路由
3
+ *
4
+ * 提供/dashboard 直连 bridge 拉取 sub-agent 数据的接口:
5
+ * GET /runtime/sub-agents/:agentId 列表(含历史)
6
+ * GET /runtime/sub-agents/:agentId/:subId 单个详情
7
+ * GET /runtime/sub-agents/:agentId/:subId/events SSE 实时事件流
8
+ * POST /runtime/sub-agents/:agentId/:subId/abort 取消运行中的 sub-agent
9
+ *
10
+ * 设计与 acode-todos.ts 同构:validateToken 鉴权,agentId 路径隔离。
11
+ * 数据源:SubAgentStore(持久化历史) + SubAgentManager(运行中实时状态)。
12
+ */
13
+ import { Router } from "express";
14
+ import { validateToken } from "../middleware/auth.js";
15
+ import { createLogger } from "../utils/logger.js";
16
+ import { subAgentManager, subAgentStore } from "../services/sub-agent-manager-instance.js";
17
+ const log = createLogger("sub-agents");
18
+ export const subAgentsRouter = Router();
19
+ /**
20
+ * GET /runtime/sub-agents/:agentId
21
+ * 返回该 agent 的全部 sub-agent 列表(运行中 + 历史)。
22
+ *
23
+ * 响应:
24
+ * 200 { ok: true, agentId, updatedAt, running: [...], history: [...] }
25
+ */
26
+ subAgentsRouter.get("/sub-agents/:agentId", validateToken, async (req, res) => {
27
+ const agentId = String(req.params.agentId ?? "");
28
+ if (!agentId.trim()) {
29
+ res.status(400).json({ ok: false, error: "agentId is required" });
30
+ return;
31
+ }
32
+ try {
33
+ // 从 store 读取全部历史
34
+ const allRecords = await subAgentStore.list(agentId);
35
+ // 从 manager 读取活跃 entry(pending / running),已完成但未 TTL 清理的不计入
36
+ const runningEntries = subAgentManager.listActiveByParent(agentId);
37
+ const runningIds = new Set(runningEntries.map((e) => e.subId));
38
+ // 合并:运行中的用 manager 的实时状态覆盖 store 的记录
39
+ const running = runningEntries.map((e) => ({
40
+ subId: e.subId,
41
+ parentAgentId: e.parentAgentId,
42
+ parentSessionId: e.parentSessionId,
43
+ subagentType: e.subagentType,
44
+ description: e.description,
45
+ prompt: e.prompt,
46
+ status: e.status,
47
+ startedAt: e.startedAt,
48
+ contextSnapshot: e.contextSnapshot,
49
+ }));
50
+ const history = allRecords.filter((r) => !runningIds.has(r.subId));
51
+ const doc = await subAgentStore.read(agentId);
52
+ res.json({
53
+ ok: true,
54
+ agentId,
55
+ updatedAt: doc.updatedAt,
56
+ running,
57
+ history,
58
+ });
59
+ }
60
+ catch (err) {
61
+ const e = err;
62
+ log.error("[sub-agents] 列表失败: %s", e.message);
63
+ res.status(500).json({ ok: false, error: e.message });
64
+ }
65
+ });
66
+ /**
67
+ * GET /runtime/sub-agents/:agentId/events
68
+ * SSE 实时事件流(agent 级,推送该 agent 下所有 sub-agent 的事件)。
69
+ *
70
+ * 用于 dashboard 面板订阅,避免高频轮询。
71
+ * 通过 SubAgentManager.subscribe("*", ...) 全局订阅,在回调中按 parentAgentId 过滤。
72
+ * 连接建立时先发送一次 snapshot(当前运行中的 sub-agent 列表)。
73
+ *
74
+ * 事件类型:
75
+ * snapshot - 连接建立时的当前快照(data.running: SubAgentEntry[])
76
+ * spawned - sub-agent 创建
77
+ * running - sub-agent 开始运行
78
+ * completed - sub-agent 完成
79
+ * failed - sub-agent 失败
80
+ * cancelled - sub-agent 被取消
81
+ * (tool_start/tool_end/delta 等高频事件不在此流推送,避免噪声;如需查看详情订阅 subId 级 SSE)
82
+ */
83
+ subAgentsRouter.get("/sub-agents/:agentId/events", validateToken, async (req, res) => {
84
+ const agentId = String(req.params.agentId ?? "");
85
+ if (!agentId.trim()) {
86
+ res.status(400).json({ ok: false, error: "agentId is required" });
87
+ return;
88
+ }
89
+ res.writeHead(200, {
90
+ "Content-Type": "text/event-stream",
91
+ "Cache-Control": "no-cache",
92
+ "Connection": "keep-alive",
93
+ "X-Accel-Buffering": "no", // nginx 关闭缓冲
94
+ });
95
+ res.write(": connected\n\n");
96
+ // 发送当前快照(仅活跃 sub-agent:pending / running;已完成但未清理的不计入)
97
+ const runningEntries = subAgentManager.listActiveByParent(agentId);
98
+ if (runningEntries.length > 0) {
99
+ res.write(`data: ${JSON.stringify({
100
+ type: "snapshot",
101
+ agentId,
102
+ timestamp: new Date().toISOString(),
103
+ data: {
104
+ running: runningEntries.map((e) => ({
105
+ subId: e.subId,
106
+ subagentType: e.subagentType,
107
+ description: e.description,
108
+ status: e.status,
109
+ startedAt: e.startedAt,
110
+ })),
111
+ },
112
+ })}\n\n`);
113
+ }
114
+ // 全局订阅,按 parentAgentId 过滤
115
+ const unsubscribe = subAgentManager.subscribe("*", (event) => {
116
+ const entry = subAgentManager.getSubAgent(event.subId);
117
+ if (!entry || entry.parentAgentId !== agentId)
118
+ return;
119
+ res.write(`data: ${JSON.stringify(event)}\n\n`);
120
+ });
121
+ // 心跳(30s)
122
+ const heartbeat = setInterval(() => {
123
+ try {
124
+ res.write(": heartbeat\n\n");
125
+ }
126
+ catch { /* 已断开 */ }
127
+ }, 30000);
128
+ req.on("close", () => {
129
+ unsubscribe();
130
+ clearInterval(heartbeat);
131
+ try {
132
+ res.end();
133
+ }
134
+ catch { /* 忽略 */ }
135
+ });
136
+ });
137
+ /**
138
+ * GET /runtime/sub-agents/:agentId/:subId
139
+ * 返回单个 sub-agent 详情(含上下文快照)。
140
+ *
141
+ * 优先从 manager 内存读取(运行中),否则从 store 读取(历史)。
142
+ */
143
+ subAgentsRouter.get("/sub-agents/:agentId/:subId", validateToken, async (req, res) => {
144
+ const agentId = String(req.params.agentId ?? "");
145
+ const subId = String(req.params.subId ?? "");
146
+ if (!agentId.trim() || !subId.trim()) {
147
+ res.status(400).json({ ok: false, error: "agentId and subId are required" });
148
+ return;
149
+ }
150
+ try {
151
+ // 优先内存
152
+ const entry = subAgentManager.getSubAgent(subId);
153
+ if (entry) {
154
+ res.json({
155
+ ok: true,
156
+ subAgent: {
157
+ subId: entry.subId,
158
+ parentAgentId: entry.parentAgentId,
159
+ parentSessionId: entry.parentSessionId,
160
+ subagentType: entry.subagentType,
161
+ description: entry.description,
162
+ prompt: entry.prompt,
163
+ status: entry.status,
164
+ startedAt: entry.startedAt,
165
+ contextSnapshot: entry.contextSnapshot,
166
+ },
167
+ });
168
+ return;
169
+ }
170
+ // 回退到 store
171
+ const record = await subAgentStore.get(agentId, subId);
172
+ if (!record) {
173
+ res.status(404).json({ ok: false, error: "sub-agent not found" });
174
+ return;
175
+ }
176
+ res.json({ ok: true, subAgent: record });
177
+ }
178
+ catch (err) {
179
+ const e = err;
180
+ log.error("[sub-agents] 详情失败: %s", e.message);
181
+ res.status(500).json({ ok: false, error: e.message });
182
+ }
183
+ });
184
+ /**
185
+ * GET /runtime/sub-agents/:agentId/:subId/events
186
+ * SSE 实时事件流(sub-agent 运行期间推送 spawned/running/tool_start/delta/tool_end/completed/failed/cancelled)。
187
+ *
188
+ * 客户端关闭连接时自动取消订阅。
189
+ */
190
+ subAgentsRouter.get("/sub-agents/:agentId/:subId/events", validateToken, async (req, res) => {
191
+ const agentId = String(req.params.agentId ?? "");
192
+ const subId = String(req.params.subId ?? "");
193
+ if (!agentId.trim() || !subId.trim()) {
194
+ res.status(400).json({ ok: false, error: "agentId and subId are required" });
195
+ return;
196
+ }
197
+ res.writeHead(200, {
198
+ "Content-Type": "text/event-stream",
199
+ "Cache-Control": "no-cache",
200
+ "Connection": "keep-alive",
201
+ "X-Accel-Buffering": "no", // nginx 关闭缓冲
202
+ });
203
+ res.write(": connected\n\n");
204
+ // 发送当前状态(如果已存在)
205
+ const entry = subAgentManager.getSubAgent(subId);
206
+ if (entry) {
207
+ res.write(`data: ${JSON.stringify({
208
+ type: entry.status === "pending" ? "spawned" : "running",
209
+ subId,
210
+ timestamp: new Date().toISOString(),
211
+ data: { snapshot: entry.contextSnapshot },
212
+ })}\n\n`);
213
+ }
214
+ const unsubscribe = subAgentManager.subscribe(subId, (event) => {
215
+ res.write(`data: ${JSON.stringify(event)}\n\n`);
216
+ });
217
+ // 心跳(30s)
218
+ const heartbeat = setInterval(() => {
219
+ try {
220
+ res.write(": heartbeat\n\n");
221
+ }
222
+ catch { /* 已断开 */ }
223
+ }, 30000);
224
+ req.on("close", () => {
225
+ unsubscribe();
226
+ clearInterval(heartbeat);
227
+ try {
228
+ res.end();
229
+ }
230
+ catch { /* 忽略 */ }
231
+ });
232
+ });
233
+ /**
234
+ * POST /runtime/sub-agents/:agentId/:subId/abort
235
+ * 取消运行中的 sub-agent。
236
+ */
237
+ subAgentsRouter.post("/sub-agents/:agentId/:subId/abort", validateToken, async (req, res) => {
238
+ const agentId = String(req.params.agentId ?? "");
239
+ const subId = String(req.params.subId ?? "");
240
+ if (!agentId.trim() || !subId.trim()) {
241
+ res.status(400).json({ ok: false, error: "agentId and subId are required" });
242
+ return;
243
+ }
244
+ try {
245
+ await subAgentManager.abort(subId);
246
+ res.json({ ok: true, subId, status: "cancelled" });
247
+ }
248
+ catch (err) {
249
+ const e = err;
250
+ log.error("[sub-agents] 取消失败: %s", e.message);
251
+ res.status(500).json({ ok: false, error: e.message });
252
+ }
253
+ });
@@ -23,6 +23,14 @@ export interface SdkSessionEntry {
23
23
  currentRuntimeActionLabel?: string;
24
24
  currentRuntimeActionDetail?: string;
25
25
  currentRuntimeActionInput?: string;
26
+ /**
27
+ * runtime_capabilities 事件的 actionDetail 缓存。
28
+ * 修复时序竞争条件:session 启动时 "starting" 状态变更与 runtime_capabilities
29
+ * 几乎同时发送到服务端,若 capabilities POST 先到达且 runtime_session_id 尚未更新,
30
+ * 服务端会视为过期会话直接丢弃。缓存此值后,在 session 稳定到 waiting_input 时重发,
31
+ * 确保能力清单最终送达前端。
32
+ */
33
+ cachedCapabilitiesActionDetail?: string;
26
34
  }
27
35
  export declare const sdkSessions: Map<string, SdkSessionEntry>;
28
36
  export interface RuntimeStopOptions {
@@ -48,9 +56,9 @@ export declare function shouldProbeSdkProcessPid(providerId: string): boolean;
48
56
  */
49
57
  export declare function parseRuntimeStopOptions(body: unknown): RuntimeStopOptions;
50
58
  export declare function resolveStatusChangeUsage(actionInfo?: RuntimeStatusActionInfo): {
51
- contextLimit?: number | undefined;
52
59
  inputTokens: number;
53
60
  outputTokens: number;
61
+ contextLimit?: number;
54
62
  } | undefined;
55
63
  export declare function resolveStatusChangeRuntimeState(status: string, actionInfo?: RuntimeStatusActionInfo): {
56
64
  status: string;
@@ -1 +1 @@
1
- {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../src/routes/terminal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../src/routes/terminal.ts"],"names":[],"mappings":"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"}
@@ -58,10 +58,10 @@ const AI_REQUEST_HEADERS_MARKER = "\n\n请求头:\n";
58
58
  const startingAgents = new Set();
59
59
  // ============ 启动记忆加载 ============
60
60
  /**
61
- * 从工作区的 .agentswork/memory/ 目录加载 task_listrecently_memory
61
+ * 从工作区的 .agentswork/memory/ 目录加载 recently_memoryagent_memory
62
62
  * 格式化为可注入 System 3 的文本。
63
63
  *
64
- * 主流程:遍历目录下所有 domain JSON 文件 -> 提取 task_list/recently_memory 记录 ->
64
+ * 主流程:遍历目录下所有 domain JSON 文件 -> 提取 recently_memory/agent_memory 记录 ->
65
65
  * 按类型分组排序 -> 返回格式化文本;目录不存在或解析失败时返回 undefined。
66
66
  */
67
67
  async function loadAgentStartupMemories(workspacePath, options) {
@@ -93,10 +93,10 @@ async function loadAgentStartupMemories(workspacePath, options) {
93
93
  const content = (record.content || "").trim();
94
94
  if (!content)
95
95
  continue;
96
- if (type === "task_list") {
96
+ if (type === "recently_memory") {
97
97
  taskList.push({ title: record.title, content, uri: record.uri || "" });
98
98
  }
99
- else if (type === "recently_memory") {
99
+ else if (type === "agent_memory") {
100
100
  recentMemories.push({ title: record.title, content, uri: record.uri || "" });
101
101
  }
102
102
  }
@@ -115,8 +115,8 @@ async function loadAgentStartupMemories(workspacePath, options) {
115
115
  "X-Runtime-Token": options.runtimeAccessToken,
116
116
  Authorization: `Bearer ${options.runtimeAccessToken}`,
117
117
  };
118
- // 并行请求 task_listrecently_memory
119
- const typesToFetch = ["task_list", "recently_memory"];
118
+ // 并行请求 recently_memoryagent_memory
119
+ const typesToFetch = ["recently_memory", "agent_memory"];
120
120
  const results = await Promise.allSettled(typesToFetch.map((memoryType) => fetch(mcpUrl, {
121
121
  method: "POST",
122
122
  headers,
@@ -136,7 +136,7 @@ async function loadAgentStartupMemories(workspacePath, options) {
136
136
  const records = settled.value;
137
137
  if (!Array.isArray(records))
138
138
  continue;
139
- const target = typesToFetch[i] === "task_list" ? taskList : recentMemories;
139
+ const target = typesToFetch[i] === "recently_memory" ? taskList : recentMemories;
140
140
  for (const r of records) {
141
141
  const content = (r.content || "").trim();
142
142
  if (!content)
@@ -156,12 +156,12 @@ async function loadAgentStartupMemories(workspacePath, options) {
156
156
  if (taskList.length > 0) {
157
157
  const items = taskList.slice(0, MAX_PER_TYPE);
158
158
  const lines = items.map((t, i) => {
159
- const titleLine = t.title ? `【${t.title}】` : `待办 ${i + 1}`;
159
+ const titleLine = t.title ? `【${t.title}】` : `条目 ${i + 1}`;
160
160
  return `${titleLine}\n${t.content}`;
161
161
  });
162
- sections.push(`【短期任务清单】\n${lines.join("\n\n")}`);
162
+ sections.push(`【短期记忆】\n${lines.join("\n\n")}`);
163
163
  if (taskList.length > MAX_PER_TYPE) {
164
- sections.push(`... 及另外 ${taskList.length - MAX_PER_TYPE} 条任务`);
164
+ sections.push(`... 及另外 ${taskList.length - MAX_PER_TYPE} 条短期记忆`);
165
165
  }
166
166
  }
167
167
  if (recentMemories.length > 0) {
@@ -170,9 +170,9 @@ async function loadAgentStartupMemories(workspacePath, options) {
170
170
  const titleLine = t.title ? `【${t.title}】` : "";
171
171
  return titleLine ? `${titleLine}\n${t.content}` : t.content;
172
172
  });
173
- sections.push(`【近期记忆】\n${lines.join("\n\n")}`);
173
+ sections.push(`【agent认知】\n${lines.join("\n\n")}`);
174
174
  if (recentMemories.length > MAX_PER_TYPE) {
175
- sections.push(`... 及另外 ${recentMemories.length - MAX_PER_TYPE} 条近期记忆`);
175
+ sections.push(`... 及另外 ${recentMemories.length - MAX_PER_TYPE} 条 agent 认知`);
176
176
  }
177
177
  }
178
178
  if (sections.length === 0)
@@ -226,21 +226,24 @@ export function parseRuntimeStopOptions(body) {
226
226
  }
227
227
  export function resolveStatusChangeUsage(actionInfo) {
228
228
  const usage = actionInfo?.usage;
229
- if (!usage)
229
+ if (!usage) {
230
230
  return undefined;
231
+ }
231
232
  const inputTokens = Number.isFinite(usage.inputTokens)
232
233
  ? usage.inputTokens
233
234
  : 0;
234
235
  const outputTokens = Number.isFinite(usage.outputTokens)
235
236
  ? usage.outputTokens
236
237
  : 0;
237
- if (inputTokens <= 0 && outputTokens <= 0 && !usage.contextLimit)
238
+ if (inputTokens <= 0 && outputTokens <= 0 && !usage.contextLimit) {
238
239
  return undefined;
239
- return {
240
+ }
241
+ const result = {
240
242
  inputTokens,
241
243
  outputTokens,
242
244
  ...(usage.contextLimit ? { contextLimit: usage.contextLimit } : {}),
243
245
  };
246
+ return result;
244
247
  }
245
248
  export function resolveStatusChangeRuntimeState(status, actionInfo) {
246
249
  const normalizedStatus = String(status || "")
@@ -937,10 +940,15 @@ function formatSdkLogMessage(event) {
937
940
  }
938
941
  return undefined;
939
942
  }
943
+ // 匹配 CSI 类 ANSI 转义序列(颜色/光标/清屏等),用于 DevTools 日志预览剥离
944
+ const ANSI_ESCAPE_PATTERN = /\x1b\[[0-9;?]*[a-zA-Z]/g;
945
+ function stripAnsiEscapeCodes(text) {
946
+ return text.replace(ANSI_ESCAPE_PATTERN, "");
947
+ }
940
948
  function formatCommandOutputLogMessage(event) {
941
949
  const stream = typeof event.data.stream === "string" ? event.data.stream : "mixed";
942
950
  const sequence = typeof event.data.sequence === "number" ? ` #${event.data.sequence}` : "";
943
- const normalized = String(event.data.text || "")
951
+ const normalized = stripAnsiEscapeCodes(String(event.data.text || ""))
944
952
  .replace(/\s+/g, " ")
945
953
  .trim();
946
954
  const preview = normalized.length > 240 ? `${normalized.slice(0, 240)}...` : normalized;
@@ -1145,11 +1153,39 @@ export function resolveRuntimeStatusFromProviderEvent(event, currentRuntimeStatu
1145
1153
  if (event.type === "error") {
1146
1154
  return { status: "error" };
1147
1155
  }
1156
+ if (event.type === "context_compaction") {
1157
+ return {
1158
+ status: "compacting",
1159
+ actionInfo: {
1160
+ actionType: "context_compaction",
1161
+ actionLabel: event.data.actionLabel,
1162
+ actionDetail: event.data.actionDetail,
1163
+ ...(event.data.actionId ? { actionId: event.data.actionId } : {}),
1164
+ ...(event.data.parentId ? { parentId: event.data.parentId } : {}),
1165
+ },
1166
+ };
1167
+ }
1168
+ if (event.type === "runtime_capabilities") {
1169
+ // 运行时能力清单(MCP 工具 / Skill 列表)—— 保持当前运行态不变,仅推送 actionInfo 到时间线供调试面板展示
1170
+ return {
1171
+ status: currentRuntimeStatus || "waiting_input",
1172
+ actionInfo: {
1173
+ actionType: "runtime_capabilities",
1174
+ actionLabel: event.data.actionLabel || "运行时能力",
1175
+ actionDetail: event.data.actionDetail,
1176
+ },
1177
+ };
1178
+ }
1148
1179
  return undefined;
1149
1180
  }
1150
1181
  // Per-session 输出队列:确保 sendOutput HTTP POST 按事件顺序串行到达 Server,
1151
1182
  // 避免并发 POST 因网络时序导致流式文本 chunk 乱序。
1152
1183
  const sdkOutputQueueBySession = new Map();
1184
+ // Per-session 压缩状态事件队列:确保 context_compaction 事件(start/detect/prune/.../end)
1185
+ // 按发射顺序串行发送 HTTP POST,避免并发请求导致部分事件丢失(DB 证据:所有压缩都只保留了 2-4 个事件)。
1186
+ // ★ 根因:runtime.ts 同步连续发射 start/detect 等事件,多个 void sendStatus 并发执行 HTTP POST,
1187
+ // 部分 HTTP 请求因竞争/超时/Java 后端 FOR UPDATE 锁等待而失败,事件永久丢失(本地 buffer 不重推)。
1188
+ const compactionStatusChainBySession = new Map();
1153
1189
  /** 小 chunk 积攒缓存:sessionId:sourceEventType → { buffer, seq, timer, sourceEventType, entry },不足 20 字符时积攒最多 500ms 再推送 */
1154
1190
  const sdkOutputSmallChunkAccumulators = new Map();
1155
1191
  /** 小 chunk 积攒阈值:字符数少于此值的 output 事件积攒发送 */
@@ -1272,11 +1308,22 @@ function wireSdkAdapterEvents(adapter, definition) {
1272
1308
  const entry = sdkSessions.get(event.sessionId);
1273
1309
  if (entry) {
1274
1310
  console.log(`[${definition.displayName} Adapter] Event: ${event.type} for session ${event.sessionId}`);
1275
- // Skip sendStatus for thinking/text_delta/tool_use_start events — the status-change
1311
+ // Skip sendStatus for thinking/text_delta/tool_use_start/context_compaction events — the status-change
1276
1312
  // listener already emits the authoritative status with restored actionInfo,
1277
1313
  // avoiding duplicate timeline entries in agentEventStore.
1278
- const isDeferredStatusEvent = event.type === "thinking" || event.type === "text_delta" || event.type === "tool_use_start";
1314
+ // context_compaction 加入此列表:adapter 对每个压缩事件(start/phase/end)都会同时
1315
+ // 调用 emitProviderEvent(触发 event 监听器)和 emit("status-change")(触发 status-change 监听器),
1316
+ // 两条路径都会 sendStatus,导致 Bridge 收到重复事件。虽然前端 seenActionIds 会去重,
1317
+ // 但异步 sendStatus 到达顺序不确定,会造成同时间戳事件顺序错乱(如 prune_end 排在 prune_start 前)。
1318
+ // 只保留 status-change 路径(含完整 actionId/parentId),确保父子事件正确匹配与排序。
1319
+ const isDeferredStatusEvent = event.type === "thinking" || event.type === "text_delta" || event.type === "tool_use_start" || event.type === "context_compaction";
1279
1320
  if (!isDeferredStatusEvent) {
1321
+ // ★ 修复时序竞争:runtime_capabilities 事件缓存 actionDetail,
1322
+ // 用于 session 稳定后重发(防止 "starting" 状态尚未更新 runtime_session_id
1323
+ // 导致服务端丢弃事件)
1324
+ if (event.type === "runtime_capabilities" && event.data.actionDetail) {
1325
+ entry.cachedCapabilitiesActionDetail = event.data.actionDetail;
1326
+ }
1280
1327
  const runtimeStatus = resolveRuntimeStatusFromProviderEvent(event, entry.currentRuntimeStatus);
1281
1328
  if (runtimeStatus) {
1282
1329
  void sendStatus(entry.agentId, event.sessionId, runtimeStatus.status, runtimeStatus.actionInfo, resolveStatusChangeUsage(runtimeStatus.actionInfo), {
@@ -1351,10 +1398,69 @@ function wireSdkAdapterEvents(adapter, definition) {
1351
1398
  actionInput: entry.currentRuntimeActionInput,
1352
1399
  }
1353
1400
  : undefined;
1354
- void sendStatus(entry.agentId, sessionId, runtimeState.status, restoredActionInfo, resolveStatusChangeUsage(runtimeState.actionInfo), {
1355
- runtimeAccessToken: entry.runtimeAccessToken,
1356
- schedulerBaseUrl: entry.schedulerBaseUrl,
1357
- });
1401
+ // compacting 状态(context_compaction 事件)使用 per-session 序列化队列,
1402
+ // 避免 start/detect/prune/.../end 等事件并发 HTTP POST 导致部分事件丢失。
1403
+ // DB 证据:所有压缩都只保留了 2-4 个事件(应该有 7 个),根因是并发请求竞争。
1404
+ if (runtimeState.status === "compacting") {
1405
+ const prev = compactionStatusChainBySession.get(sessionId) ?? Promise.resolve();
1406
+ const next = prev.then(async () => {
1407
+ // ★ 重试机制:HTTP 失败(sendStatus 返回 undefined)时重试,
1408
+ // 避免因网络超时/瞬时故障导致压缩事件(特别是父 start 事件)永久丢失。
1409
+ // scheduleEventPush 是 no-op,HTTP 回调是唯一投递路径,无 fallback。
1410
+ const maxRetries = 2;
1411
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
1412
+ const response = await sendStatus(entry.agentId, sessionId, runtimeState.status, restoredActionInfo, resolveStatusChangeUsage(runtimeState.actionInfo), {
1413
+ runtimeAccessToken: entry.runtimeAccessToken,
1414
+ schedulerBaseUrl: entry.schedulerBaseUrl,
1415
+ });
1416
+ if (response !== undefined)
1417
+ return; // HTTP 成功
1418
+ if (attempt < maxRetries) {
1419
+ log.warn(`[${definition.displayName}] compaction sendStatus attempt ${attempt + 1} failed (HTTP), retrying in ${1000 * (attempt + 1)}ms...`);
1420
+ await new Promise((r) => setTimeout(r, 1000 * (attempt + 1)));
1421
+ }
1422
+ }
1423
+ log.warn(`[${definition.displayName}] compaction sendStatus failed after ${maxRetries + 1} attempts, event may be lost`);
1424
+ }).catch((err) => {
1425
+ // 链中某次失败不影响后续事件发送
1426
+ log.warn(`[${definition.displayName}] compaction status chain error:`, err);
1427
+ });
1428
+ compactionStatusChainBySession.set(sessionId, next);
1429
+ // 链结束后清理,避免内存泄漏
1430
+ next.finally(() => {
1431
+ if (compactionStatusChainBySession.get(sessionId) === next) {
1432
+ compactionStatusChainBySession.delete(sessionId);
1433
+ }
1434
+ });
1435
+ }
1436
+ else {
1437
+ // ★ 修复重复时间线条目:当 shouldPreservePrevAction 为 true 且新 actionInfo 为 undefined
1438
+ // (idle 类型 poll_message 的 tool_use_end status-change 传 undefined)时,
1439
+ // 不传 restoredActionInfo,避免 dashboard 创建第二个"调用MCP"时间线条目。
1440
+ // tool_use_start 的 status-change 已创建了一个条目,这里只需纯状态变更。
1441
+ const skipRestoredActionInfo = shouldPreservePrevAction && !runtimeState.actionInfo?.actionType;
1442
+ void sendStatus(entry.agentId, sessionId, runtimeState.status, skipRestoredActionInfo ? undefined : restoredActionInfo, resolveStatusChangeUsage(runtimeState.actionInfo), {
1443
+ runtimeAccessToken: entry.runtimeAccessToken,
1444
+ schedulerBaseUrl: entry.schedulerBaseUrl,
1445
+ });
1446
+ }
1447
+ // ★ 修复时序竞争:session 稳定到 waiting_input 时,若缓存了 runtime_capabilities
1448
+ // 但尚未被清除(说明第一次发送可能因 runtime_session_id 未及时更新而被服务端丢弃),
1449
+ // 在此重发确保前端最终能收到能力清单。
1450
+ if (runtimeState.status === "waiting_input" &&
1451
+ entry.cachedCapabilitiesActionDetail) {
1452
+ const cachedDetail = entry.cachedCapabilitiesActionDetail;
1453
+ entry.cachedCapabilitiesActionDetail = undefined;
1454
+ console.log(`[${definition.displayName} Adapter] Re-sending cached runtime_capabilities for agent ${entry.agentId} (session stabilized to waiting_input)`);
1455
+ void sendStatus(entry.agentId, sessionId, "waiting_input", {
1456
+ actionType: "runtime_capabilities",
1457
+ actionLabel: "运行时能力",
1458
+ actionDetail: cachedDetail,
1459
+ }, undefined, {
1460
+ runtimeAccessToken: entry.runtimeAccessToken,
1461
+ schedulerBaseUrl: entry.schedulerBaseUrl,
1462
+ });
1463
+ }
1358
1464
  }
1359
1465
  });
1360
1466
  adapter.on("ask-user-question", (data) => {
@@ -2036,6 +2142,85 @@ terminalRouter.get("/sdk/status/:sessionId", validateToken, (req, res) => {
2036
2142
  res.status(500).json({ error: errorMessage });
2037
2143
  }
2038
2144
  });
2145
+ /**
2146
+ * GET /runtime/sdk/capabilities/:sessionId
2147
+ *
2148
+ * 主动查询会话的运行时能力清单(MCP 工具 + skills)。
2149
+ * 只读 adapter 内存缓存(lastCombinedCapabilities),不触发 runtime 重新探测。
2150
+ * 缓存由 mcp_status / skill_status 事件维护;若尚未收到任何事件则返回 capabilities: null。
2151
+ */
2152
+ terminalRouter.get("/sdk/capabilities/:sessionId", validateToken, (req, res) => {
2153
+ const sessionId = req.params.sessionId;
2154
+ if (!sessionId) {
2155
+ res.status(400).json({ error: "sessionId is required" });
2156
+ return;
2157
+ }
2158
+ const entry = sdkSessions.get(sessionId);
2159
+ if (!entry) {
2160
+ res.status(404).json({ error: "SDK session not found" });
2161
+ return;
2162
+ }
2163
+ try {
2164
+ const providerId = entry.providerId || "claude-code";
2165
+ const adapter = adapterRegistry.get(providerId);
2166
+ // 仅 AcodeSdkAdapter 实现 getCapabilities;其他 adapter 返回 undefined
2167
+ const capabilities = adapter.getCapabilities?.(sessionId) ?? null;
2168
+ res.json({
2169
+ ok: true,
2170
+ sessionId,
2171
+ agentId: entry.agentId,
2172
+ capabilities,
2173
+ fetchedAt: Date.now(),
2174
+ });
2175
+ }
2176
+ catch (error) {
2177
+ const errorMessage = error instanceof Error ? error.message : String(error);
2178
+ res.status(500).json({ error: errorMessage });
2179
+ }
2180
+ });
2181
+ /**
2182
+ * 查询会话当前挂起的 ask_user_question(agent 提问)。
2183
+ *
2184
+ * 只读 adapter 内存缓存(pendingQuestionToolCallId + pendingQuestions)。
2185
+ * 用于前端刷新后重建提问 UI:bridge 在 session entry 中保留了最近一次提问的
2186
+ * toolCallId 与 questions 数组,前端刷新后通过此端点取回并重建 directMessages
2187
+ * 与 header 通知。toolCallId 封闭在 bridge 内部,前端无需感知。
2188
+ *
2189
+ * GET /runtime/sdk/pending-questions/:sessionId
2190
+ */
2191
+ terminalRouter.get("/sdk/pending-questions/:sessionId", validateToken, (req, res) => {
2192
+ const sessionId = req.params.sessionId;
2193
+ if (!sessionId) {
2194
+ res.status(400).json({ error: "sessionId is required" });
2195
+ return;
2196
+ }
2197
+ const entry = sdkSessions.get(sessionId);
2198
+ if (!entry) {
2199
+ res.status(404).json({ error: "SDK session not found" });
2200
+ return;
2201
+ }
2202
+ try {
2203
+ const providerId = entry.providerId || "claude-code";
2204
+ const adapter = adapterRegistry.get(providerId);
2205
+ // 仅 AcodeSdkAdapter 实现 getPendingQuestion;其他 adapter 返回 undefined
2206
+ const pendingQuestion = adapter.getPendingQuestion?.(sessionId) ?? null;
2207
+ res.json({
2208
+ ok: true,
2209
+ sessionId,
2210
+ agentId: entry.agentId,
2211
+ pendingQuestion: pendingQuestion
2212
+ ? {
2213
+ questions: pendingQuestion.questions,
2214
+ }
2215
+ : null,
2216
+ fetchedAt: Date.now(),
2217
+ });
2218
+ }
2219
+ catch (error) {
2220
+ const errorMessage = error instanceof Error ? error.message : String(error);
2221
+ res.status(500).json({ error: errorMessage });
2222
+ }
2223
+ });
2039
2224
  /**
2040
2225
  * 执行当前 Agent 工作目录下的终端命令。
2041
2226
  *
@@ -19,6 +19,7 @@ export interface BridgeEventPayload {
19
19
  readonly actionInput?: string;
20
20
  readonly actionResult?: string;
21
21
  readonly actionId?: string;
22
+ readonly parentId?: string;
22
23
  readonly inputTokens?: number;
23
24
  readonly outputTokens?: number;
24
25
  readonly sourceEventType?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"agent-event-store.d.ts","sourceRoot":"","sources":["../../src/services/agent-event-store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEpE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,cAAc,CAAC;IACrE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAQD;;;;GAIG;AACH,cAAM,eAAe;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;IAE9D,OAAO,CAAC,YAAY;IASpB;;;OAGG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,eAAe,CAAC,kBAAkB,CAAC;IAIzF;;;;;OAKG;IACH,mBAAmB,CACjB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,kBAAkB,GAC1B,eAAe,CAAC,kBAAkB,CAAC;IA6BtC;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CAG9B;AAED,WAAW;AACX,eAAO,MAAM,eAAe,iBAAwB,CAAC"}
1
+ {"version":3,"file":"agent-event-store.d.ts","sourceRoot":"","sources":["../../src/services/agent-event-store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEpE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,cAAc,CAAC;IACrE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAQD;;;;GAIG;AACH,cAAM,eAAe;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;IAE9D,OAAO,CAAC,YAAY;IASpB;;;OAGG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,eAAe,CAAC,kBAAkB,CAAC;IAIzF;;;;;OAKG;IACH,mBAAmB,CACjB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,kBAAkB,GAC1B,eAAe,CAAC,kBAAkB,CAAC;IA6BtC;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CAG9B;AAED,WAAW;AACX,eAAO,MAAM,eAAe,iBAAwB,CAAC"}