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,72 @@
1
+ import type { ACodeBuiltInTool } from "./built-in-file-tools.js";
2
+ import type { SubAgentType, SubAgentStatus } from "./sub-agent-types.js";
3
+ /**
4
+ * Sub-agent 工具集依赖(由 runtime.ts 注入 SubAgentManager 句柄)。
5
+ *
6
+ * 工具集包含 5 个工具:
7
+ * 1. sub_agent: 非阻塞 spawn 子 agent,立即返回 subId
8
+ * 2. list_sub_agents: 列出当前 agent 的所有子 agent(运行中 + 历史)
9
+ * 3. get_sub_agent_status: 查询某子 agent 的实时状态
10
+ * 4. await_sub_agents: 阻塞等待指定 sub-agent 数组完成
11
+ * 5. abort_sub_agent: 终止某子 agent
12
+ */
13
+ export interface ACodeSubAgentToolDeps {
14
+ /** spawn 子 agent(不阻塞,不自动 start) */
15
+ spawnSubAgent: (opts: {
16
+ subagentType: SubAgentType;
17
+ description: string;
18
+ prompt: string;
19
+ }) => Promise<{
20
+ subId: string;
21
+ }>;
22
+ /** 列出当前 agent 的所有子 agent */
23
+ listSubAgents: () => Promise<{
24
+ running: Array<SubAgentInfo>;
25
+ history: Array<SubAgentInfo>;
26
+ }>;
27
+ /** 查询某子 agent 的实时状态 */
28
+ getSubAgentStatus: (subId: string) => Promise<SubAgentDetail | null>;
29
+ /** 阻塞等待指定 sub-agent 数组完成 */
30
+ awaitSubAgents: (subIds: string[], timeoutMs?: number) => Promise<Array<{
31
+ subId: string;
32
+ output: string;
33
+ error?: string;
34
+ status: SubAgentStatus;
35
+ }>>;
36
+ /** 终止某子 agent */
37
+ abortSubAgent: (subId: string) => Promise<void>;
38
+ }
39
+ /** 子 agent 摘要信息(列表用) */
40
+ export interface SubAgentInfo {
41
+ subId: string;
42
+ subagentType: SubAgentType;
43
+ description: string;
44
+ status: SubAgentStatus;
45
+ startedAt: number;
46
+ endedAt?: number;
47
+ durationMs?: number;
48
+ }
49
+ /** 子 agent 详情(含实时上下文) */
50
+ export interface SubAgentDetail extends SubAgentInfo {
51
+ prompt: string;
52
+ result?: string;
53
+ errorMessage?: string;
54
+ contextSnapshot?: {
55
+ currentTool?: string;
56
+ lastAssistantText?: string;
57
+ tokenUsage: {
58
+ input: number;
59
+ output: number;
60
+ };
61
+ messageCount: number;
62
+ updatedAt: string;
63
+ };
64
+ }
65
+ export declare function createSubAgentTool(deps: ACodeSubAgentToolDeps): ACodeBuiltInTool;
66
+ export declare function createListSubAgentsTool(deps: ACodeSubAgentToolDeps): ACodeBuiltInTool;
67
+ export declare function createGetSubAgentStatusTool(deps: ACodeSubAgentToolDeps): ACodeBuiltInTool;
68
+ export declare function createAwaitSubAgentsTool(deps: ACodeSubAgentToolDeps): ACodeBuiltInTool;
69
+ export declare function createAbortSubAgentTool(deps: ACodeSubAgentToolDeps): ACodeBuiltInTool;
70
+ /** 创建全部 5 个 sub-agent 工具(仅当注入了 SubAgentManager 时调用) */
71
+ export declare function createSubAgentTools(deps: ACodeSubAgentToolDeps): ACodeBuiltInTool[];
72
+ //# sourceMappingURL=sub-agent-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sub-agent-tools.d.ts","sourceRoot":"","sources":["../src/sub-agent-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAc,MAAM,0BAA0B,CAAC;AAC7E,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEzE;;;;;;;;;GASG;AACH,MAAM,WAAW,qBAAqB;IACpC,mCAAmC;IACnC,aAAa,EAAE,CAAC,IAAI,EAAE;QACpB,YAAY,EAAE,YAAY,CAAC;QAC3B,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;KAChB,KAAK,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAEjC,4BAA4B;IAC5B,aAAa,EAAE,MAAM,OAAO,CAAC;QAC3B,OAAO,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;QAC7B,OAAO,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;KAC9B,CAAC,CAAC;IAEH,uBAAuB;IACvB,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAErE,4BAA4B;IAC5B,cAAc,EAAE,CACd,MAAM,EAAE,MAAM,EAAE,EAChB,SAAS,CAAC,EAAE,MAAM,KACf,OAAO,CAAC,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,cAAc,CAAA;KAAE,CAAC,CAAC,CAAC;IAE/F,iBAAiB;IACjB,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD;AAED,wBAAwB;AACxB,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,YAAY,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,cAAc,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,yBAAyB;AACzB,MAAM,WAAW,cAAe,SAAQ,YAAY;IAClD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,UAAU,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;QAC9C,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AA4BD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,qBAAqB,GAAG,gBAAgB,CAsEhF;AAeD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,qBAAqB,GAAG,gBAAgB,CAsDrF;AAiBD,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,qBAAqB,GAAG,gBAAgB,CAoGzF;AAsBD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,qBAAqB,GAAG,gBAAgB,CAsFtF;AAcD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,qBAAqB,GAAG,gBAAgB,CA2CrF;AAID,uDAAuD;AACvD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,qBAAqB,GAAG,gBAAgB,EAAE,CAQnF"}
@@ -0,0 +1,429 @@
1
+ // ==================== 工具 1: sub_agent ====================
2
+ const SUB_AGENT_TOOL_DESCRIPTION = `Launch a new sub-agent to handle a task autonomously (non-blocking).
3
+
4
+ Use this tool to:
5
+ 1. Delegate research, exploration, or implementation work to a specialized sub-agent
6
+ 2. Run multiple independent tasks in parallel (multiple tool calls in one message)
7
+ 3. Keep the main context window focused by offloading detailed work
8
+
9
+ Available subagent types:
10
+ - "general": Full-featured agent for executing multi-step tasks (file ops, bash, etc.)
11
+ - "explore": Read-only agent for codebase exploration (grep, glob, read, bash, web search)
12
+
13
+ This tool is NON-BLOCKING: it returns immediately with a subId after spawn.
14
+ The sub-agent starts automatically and runs in the background.
15
+ To get the result, call await_sub_agents with the subId.
16
+ To check progress, call get_sub_agent_status with the subId.
17
+ To list all sub-agents, call list_sub_agents.
18
+
19
+ Guidelines:
20
+ - Provide a concise 3-5 word description for tracking
21
+ - Write a clear, self-contained prompt (the sub-agent starts with a fresh context)
22
+ - Launch multiple agents concurrently when possible (multiple tool calls in one message)
23
+ - Sub-agents cannot spawn further sub-agents (no nesting)
24
+ - Always call await_sub_agents before reporting completion to the user`;
25
+ export function createSubAgentTool(deps) {
26
+ return {
27
+ kind: "builtin",
28
+ toolName: "sub_agent",
29
+ exposedName: "sub_agent",
30
+ description: SUB_AGENT_TOOL_DESCRIPTION,
31
+ inputSchema: {
32
+ type: "object",
33
+ properties: {
34
+ description: {
35
+ type: "string",
36
+ description: "A short (3-5 words) description of the task.",
37
+ },
38
+ prompt: {
39
+ type: "string",
40
+ description: "The task for the sub-agent to perform (self-contained, fresh context).",
41
+ },
42
+ subagent_type: {
43
+ type: "string",
44
+ enum: ["general", "explore"],
45
+ description: "Type of specialized agent: 'general' for multi-step tasks, 'explore' for read-only codebase exploration.",
46
+ },
47
+ },
48
+ required: ["description", "prompt", "subagent_type"],
49
+ },
50
+ async execute(args) {
51
+ const description = typeof args.description === "string" ? args.description.trim() : "";
52
+ const prompt = typeof args.prompt === "string" ? args.prompt.trim() : "";
53
+ const subagentType = args.subagent_type;
54
+ if (!description) {
55
+ return {
56
+ title: "sub_agent validation error",
57
+ output: "Invalid input: 'description' is required and must be non-empty.",
58
+ metadata: { error: true },
59
+ };
60
+ }
61
+ if (!prompt) {
62
+ return {
63
+ title: "sub_agent validation error",
64
+ output: "Invalid input: 'prompt' is required and must be non-empty.",
65
+ metadata: { error: true },
66
+ };
67
+ }
68
+ if (subagentType !== "general" && subagentType !== "explore") {
69
+ return {
70
+ title: "sub_agent validation error",
71
+ output: `Invalid input: 'subagent_type' must be 'general' or 'explore', got '${subagentType}'.`,
72
+ metadata: { error: true },
73
+ };
74
+ }
75
+ try {
76
+ const { subId } = await deps.spawnSubAgent({ subagentType, description, prompt });
77
+ return {
78
+ title: description,
79
+ output: `sub_agent spawned: ${subId}\nstatus: pending\n\nCall await_sub_agents with this subId to get the result.\nCall get_sub_agent_status to check progress.`,
80
+ metadata: { subId, spawned: true },
81
+ };
82
+ }
83
+ catch (err) {
84
+ const errorMessage = err instanceof Error ? err.message : String(err);
85
+ return {
86
+ title: description,
87
+ output: `Failed to spawn sub-agent: ${errorMessage}`,
88
+ metadata: { error: true },
89
+ };
90
+ }
91
+ },
92
+ };
93
+ }
94
+ // ==================== 工具 2: list_sub_agents ====================
95
+ const LIST_SUB_AGENTS_DESCRIPTION = `List all sub-agents for the current agent.
96
+
97
+ Returns two arrays:
98
+ - running: sub-agents currently in pending/running state
99
+ - history: completed/failed/cancelled sub-agents (most recent first)
100
+
101
+ Use this to:
102
+ 1. Check which sub-agents are still running
103
+ 2. Review completed sub-agent history
104
+ 3. Find a subId before calling await_sub_agents or get_sub_agent_status`;
105
+ export function createListSubAgentsTool(deps) {
106
+ return {
107
+ kind: "builtin",
108
+ toolName: "list_sub_agents",
109
+ exposedName: "list_sub_agents",
110
+ description: LIST_SUB_AGENTS_DESCRIPTION,
111
+ inputSchema: {
112
+ type: "object",
113
+ properties: {},
114
+ },
115
+ async execute(_args) {
116
+ try {
117
+ const { running, history } = await deps.listSubAgents();
118
+ const formatEntry = (e) => {
119
+ const duration = e.durationMs !== undefined
120
+ ? `${(e.durationMs / 1000).toFixed(1)}s`
121
+ : e.endedAt
122
+ ? `${((e.endedAt - e.startedAt) / 1000).toFixed(1)}s`
123
+ : "ongoing";
124
+ return ` - ${e.subId} [${e.status}] (${duration}) ${e.description}`;
125
+ };
126
+ const lines = [];
127
+ lines.push(`Running (${running.length}):`);
128
+ if (running.length === 0) {
129
+ lines.push(" (none)");
130
+ }
131
+ else {
132
+ running.forEach((e) => lines.push(formatEntry(e)));
133
+ }
134
+ lines.push("");
135
+ lines.push(`History (${history.length}):`);
136
+ if (history.length === 0) {
137
+ lines.push(" (none)");
138
+ }
139
+ else {
140
+ history.forEach((e) => lines.push(formatEntry(e)));
141
+ }
142
+ return {
143
+ title: "sub-agents list",
144
+ output: lines.join("\n"),
145
+ metadata: { runningCount: running.length, historyCount: history.length },
146
+ };
147
+ }
148
+ catch (err) {
149
+ const errorMessage = err instanceof Error ? err.message : String(err);
150
+ return {
151
+ title: "list_sub_agents error",
152
+ output: `Failed to list sub-agents: ${errorMessage}`,
153
+ metadata: { error: true },
154
+ };
155
+ }
156
+ },
157
+ };
158
+ }
159
+ // ==================== 工具 3: get_sub_agent_status ====================
160
+ const GET_SUB_AGENT_STATUS_DESCRIPTION = `Get the current status and context snapshot of a sub-agent.
161
+
162
+ Returns:
163
+ - status: pending/running/completed/failed/cancelled
164
+ - currentTool: tool currently being executed (if running)
165
+ - lastAssistantText: recent assistant output (truncated)
166
+ - tokenUsage: input/output token counts
167
+ - messageCount: number of messages so far
168
+ - result: final output (if completed)
169
+ - error: error message (if failed)
170
+
171
+ Use this to check progress of a running sub-agent before awaiting it.`;
172
+ export function createGetSubAgentStatusTool(deps) {
173
+ return {
174
+ kind: "builtin",
175
+ toolName: "get_sub_agent_status",
176
+ exposedName: "get_sub_agent_status",
177
+ description: GET_SUB_AGENT_STATUS_DESCRIPTION,
178
+ inputSchema: {
179
+ type: "object",
180
+ properties: {
181
+ sub_id: {
182
+ type: "string",
183
+ description: "The sub-agent ID returned by sub_agent tool.",
184
+ },
185
+ },
186
+ required: ["sub_id"],
187
+ },
188
+ async execute(args) {
189
+ const subId = typeof args.sub_id === "string" ? args.sub_id.trim() : "";
190
+ if (!subId) {
191
+ return {
192
+ title: "get_sub_agent_status validation error",
193
+ output: "Invalid input: 'sub_id' is required.",
194
+ metadata: { error: true },
195
+ };
196
+ }
197
+ try {
198
+ const detail = await deps.getSubAgentStatus(subId);
199
+ if (!detail) {
200
+ return {
201
+ title: "sub-agent not found",
202
+ output: `sub-agent not found: ${subId}`,
203
+ metadata: { subId, error: true },
204
+ };
205
+ }
206
+ const lines = [];
207
+ lines.push(`subId: ${detail.subId}`);
208
+ lines.push(`type: ${detail.subagentType}`);
209
+ lines.push(`description: ${detail.description}`);
210
+ lines.push(`status: ${detail.status}`);
211
+ if (detail.startedAt) {
212
+ lines.push(`startedAt: ${new Date(detail.startedAt).toISOString()}`);
213
+ }
214
+ if (detail.endedAt) {
215
+ lines.push(`endedAt: ${new Date(detail.endedAt).toISOString()}`);
216
+ }
217
+ if (detail.durationMs !== undefined) {
218
+ lines.push(`duration: ${(detail.durationMs / 1000).toFixed(2)}s`);
219
+ }
220
+ if (detail.contextSnapshot) {
221
+ lines.push("");
222
+ lines.push("Context:");
223
+ if (detail.contextSnapshot.currentTool) {
224
+ lines.push(` currentTool: ${detail.contextSnapshot.currentTool}`);
225
+ }
226
+ if (detail.contextSnapshot.lastAssistantText) {
227
+ const text = detail.contextSnapshot.lastAssistantText;
228
+ lines.push(` lastOutput: ${text.length > 200 ? text.slice(-200) + "..." : text}`);
229
+ }
230
+ lines.push(` tokens: input=${detail.contextSnapshot.tokenUsage.input}, output=${detail.contextSnapshot.tokenUsage.output}`);
231
+ lines.push(` messages: ${detail.contextSnapshot.messageCount}`);
232
+ lines.push(` updatedAt: ${detail.contextSnapshot.updatedAt}`);
233
+ }
234
+ if (detail.result) {
235
+ lines.push("");
236
+ lines.push("Result:");
237
+ const result = detail.result;
238
+ lines.push(result.length > 500 ? result.slice(0, 500) + "\n... (truncated)" : result);
239
+ }
240
+ if (detail.errorMessage) {
241
+ lines.push("");
242
+ lines.push(`Error: ${detail.errorMessage}`);
243
+ }
244
+ return {
245
+ title: `status: ${detail.description}`,
246
+ output: lines.join("\n"),
247
+ metadata: {
248
+ subId: detail.subId,
249
+ status: detail.status,
250
+ },
251
+ };
252
+ }
253
+ catch (err) {
254
+ const errorMessage = err instanceof Error ? err.message : String(err);
255
+ return {
256
+ title: "get_sub_agent_status error",
257
+ output: `Failed to get status: ${errorMessage}`,
258
+ metadata: { subId, error: true },
259
+ };
260
+ }
261
+ },
262
+ };
263
+ }
264
+ // ==================== 工具 4: await_sub_agents ====================
265
+ const AWAIT_SUB_AGENTS_DESCRIPTION = `Block and wait for one or more sub-agents to complete.
266
+
267
+ Use this tool after spawning one or more sub-agents (via sub_agent) to get their results.
268
+ All specified sub-agents must complete (completed/failed/cancelled) before this returns.
269
+
270
+ If a sub-agent is still pending (not started), it will be auto-started.
271
+
272
+ Returns an array of results, each containing:
273
+ - subId: the sub-agent ID
274
+ - output: the final output text (if completed)
275
+ - error: error message (if failed or cancelled)
276
+ - status: final status
277
+
278
+ Guidelines:
279
+ - Pass all subIds you want to wait for in one call
280
+ - Use a timeout to avoid waiting forever (0 = no timeout, default 0)
281
+ - After this returns, call poll_message to receive any pending messages`;
282
+ export function createAwaitSubAgentsTool(deps) {
283
+ return {
284
+ kind: "builtin",
285
+ toolName: "await_sub_agents",
286
+ exposedName: "await_sub_agents",
287
+ description: AWAIT_SUB_AGENTS_DESCRIPTION,
288
+ inputSchema: {
289
+ type: "object",
290
+ properties: {
291
+ sub_ids: {
292
+ type: "array",
293
+ items: { type: "string" },
294
+ description: "Array of sub-agent IDs to wait for.",
295
+ },
296
+ timeout_ms: {
297
+ type: "number",
298
+ description: "Maximum time to wait in milliseconds. 0 = no timeout (wait forever). Default: 0.",
299
+ },
300
+ },
301
+ required: ["sub_ids"],
302
+ },
303
+ async execute(args) {
304
+ const subIdsRaw = args.sub_ids;
305
+ const timeoutMs = typeof args.timeout_ms === "number" ? args.timeout_ms : 0;
306
+ if (!Array.isArray(subIdsRaw) || subIdsRaw.length === 0) {
307
+ return {
308
+ title: "await_sub_agents validation error",
309
+ output: "Invalid input: 'sub_ids' must be a non-empty array of sub-agent IDs.",
310
+ metadata: { error: true },
311
+ };
312
+ }
313
+ const subIds = subIdsRaw.filter((id) => typeof id === "string" && id.trim().length > 0);
314
+ if (subIds.length === 0) {
315
+ return {
316
+ title: "await_sub_agents validation error",
317
+ output: "Invalid input: 'sub_ids' contains no valid IDs.",
318
+ metadata: { error: true },
319
+ };
320
+ }
321
+ try {
322
+ const results = await deps.awaitSubAgents(subIds, timeoutMs);
323
+ const lines = [];
324
+ lines.push(`Awaited ${results.length} sub-agent(s):`);
325
+ lines.push("");
326
+ for (const r of results) {
327
+ lines.push(`=== ${r.subId} [${r.status}] ===`);
328
+ if (r.error) {
329
+ lines.push(`<task_error>`);
330
+ lines.push(r.error);
331
+ lines.push(`</task_error>`);
332
+ }
333
+ else {
334
+ lines.push(`<task_result>`);
335
+ lines.push(r.output || "(empty output)");
336
+ lines.push(`</task_result>`);
337
+ }
338
+ lines.push("");
339
+ }
340
+ const completedCount = results.filter((r) => r.status === "completed").length;
341
+ const failedCount = results.filter((r) => r.status === "failed").length;
342
+ const cancelledCount = results.filter((r) => r.status === "cancelled").length;
343
+ return {
344
+ title: `awaited ${results.length} sub-agent(s)`,
345
+ output: lines.join("\n"),
346
+ metadata: {
347
+ total: results.length,
348
+ completed: completedCount,
349
+ failed: failedCount,
350
+ cancelled: cancelledCount,
351
+ },
352
+ };
353
+ }
354
+ catch (err) {
355
+ const errorMessage = err instanceof Error ? err.message : String(err);
356
+ return {
357
+ title: "await_sub_agents error",
358
+ output: `Failed to await sub-agents: ${errorMessage}`,
359
+ metadata: { error: true },
360
+ };
361
+ }
362
+ },
363
+ };
364
+ }
365
+ // ==================== 工具 5: abort_sub_agent ====================
366
+ const ABORT_SUB_AGENT_DESCRIPTION = `Abort a running sub-agent.
367
+
368
+ Use this to cancel a sub-agent that is taking too long or is no longer needed.
369
+ Only pending or running sub-agents can be aborted; completed/failed/cancelled are no-ops.
370
+
371
+ After abort:
372
+ - The sub-agent's status becomes 'cancelled'
373
+ - Its completionPromise resolves with error='aborted'
374
+ - Any await_sub_agents waiting on it will return immediately`;
375
+ export function createAbortSubAgentTool(deps) {
376
+ return {
377
+ kind: "builtin",
378
+ toolName: "abort_sub_agent",
379
+ exposedName: "abort_sub_agent",
380
+ description: ABORT_SUB_AGENT_DESCRIPTION,
381
+ inputSchema: {
382
+ type: "object",
383
+ properties: {
384
+ sub_id: {
385
+ type: "string",
386
+ description: "The sub-agent ID to abort.",
387
+ },
388
+ },
389
+ required: ["sub_id"],
390
+ },
391
+ async execute(args) {
392
+ const subId = typeof args.sub_id === "string" ? args.sub_id.trim() : "";
393
+ if (!subId) {
394
+ return {
395
+ title: "abort_sub_agent validation error",
396
+ output: "Invalid input: 'sub_id' is required.",
397
+ metadata: { error: true },
398
+ };
399
+ }
400
+ try {
401
+ await deps.abortSubAgent(subId);
402
+ return {
403
+ title: "sub-agent aborted",
404
+ output: `sub-agent ${subId} has been aborted.`,
405
+ metadata: { subId, aborted: true },
406
+ };
407
+ }
408
+ catch (err) {
409
+ const errorMessage = err instanceof Error ? err.message : String(err);
410
+ return {
411
+ title: "abort_sub_agent error",
412
+ output: `Failed to abort sub-agent: ${errorMessage}`,
413
+ metadata: { subId, error: true },
414
+ };
415
+ }
416
+ },
417
+ };
418
+ }
419
+ // ==================== 工厂函数:一次创建全部 5 个工具 ====================
420
+ /** 创建全部 5 个 sub-agent 工具(仅当注入了 SubAgentManager 时调用) */
421
+ export function createSubAgentTools(deps) {
422
+ return [
423
+ createSubAgentTool(deps),
424
+ createListSubAgentsTool(deps),
425
+ createGetSubAgentStatusTool(deps),
426
+ createAwaitSubAgentsTool(deps),
427
+ createAbortSubAgentTool(deps),
428
+ ];
429
+ }
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Sub Agent 类型定义。
3
+ *
4
+ * Sub agent 是由主 agent 通过 task 工具 spawn 的轻量级子代理,
5
+ * 拥有独立的 ACodeRuntime 实例(独立 context window)。
6
+ * 状态持久化到 ~/.acode/sub-agents/{agentId}.json(与 todo 同构)。
7
+ */
8
+ /** Sub agent 类型(决定工具权限) */
9
+ export type SubAgentType = "general" | "explore";
10
+ /** Sub agent 状态机 */
11
+ export type SubAgentStatus = "pending" | "running" | "completed" | "failed" | "cancelled";
12
+ /** 实时上下文快照(供 dashboard popup 展示) */
13
+ export interface SubAgentContextSnapshot {
14
+ /** 当前正在执行的工具名(如 "read_file"),无则 undefined */
15
+ currentTool?: string;
16
+ /** 最近一条 assistant 文本(截断 500 字符) */
17
+ lastAssistantText?: string;
18
+ /** 累计 token 用量 */
19
+ tokenUsage: {
20
+ input: number;
21
+ output: number;
22
+ };
23
+ /** 已产生的消息数(含 user/assistant/tool) */
24
+ messageCount: number;
25
+ /** 最后更新时间(ISO) */
26
+ updatedAt: string;
27
+ }
28
+ /** 持久化的单条 sub-agent 记录 */
29
+ export interface SubAgentRecord {
30
+ /** sub-agent 唯一 ID(= sub-session-id) */
31
+ subId: string;
32
+ /** 父 agent.id */
33
+ parentAgentId: string;
34
+ /** 父 agent 的 runtime_session_id(用于校验归属) */
35
+ parentSessionId: string;
36
+ /** sub-agent 类型 */
37
+ subagentType: SubAgentType;
38
+ /** LLM 给的 3-5 词任务描述 */
39
+ description: string;
40
+ /** LLM 给的完整任务 prompt */
41
+ prompt: string;
42
+ /** 当前状态 */
43
+ status: SubAgentStatus;
44
+ /** 完成时的最终输出文本(tool output) */
45
+ result?: string;
46
+ /** 失败时的错误信息 */
47
+ errorMessage?: string;
48
+ /** 开始时间(毫秒时间戳) */
49
+ startedAt: number;
50
+ /** 结束时间(毫秒时间戳) */
51
+ endedAt?: number;
52
+ /** 运行时长(毫秒) */
53
+ durationMs?: number;
54
+ /** 最后一次上下文快照(仅 running 状态有意义,持久化时清空) */
55
+ contextSnapshot?: SubAgentContextSnapshot;
56
+ }
57
+ /** 持久化的 sub-agent 文档结构 */
58
+ export interface SubAgentDocument {
59
+ agentId: string;
60
+ updatedAt: string;
61
+ /** 全部 sub-agent 记录,按 startedAt 倒序 */
62
+ subAgents: SubAgentRecord[];
63
+ }
64
+ /** Sub agent 运行时事件(SSE 推送) */
65
+ export interface SubAgentEvent {
66
+ /** 事件类型 */
67
+ type: "spawned" | "running" | "tool_start" | "tool_end" | "delta" | "completed" | "failed" | "cancelled";
68
+ /** sub-agent ID */
69
+ subId: string;
70
+ /** 事件时间戳(ISO) */
71
+ timestamp: string;
72
+ /** 事件数据(按 type 不同结构不同) */
73
+ data: {
74
+ tool?: string;
75
+ text?: string;
76
+ result?: string;
77
+ error?: string;
78
+ snapshot?: SubAgentContextSnapshot;
79
+ };
80
+ }
81
+ //# sourceMappingURL=sub-agent-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sub-agent-types.d.ts","sourceRoot":"","sources":["../src/sub-agent-types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,2BAA2B;AAC3B,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,SAAS,CAAC;AAEjD,oBAAoB;AACpB,MAAM,MAAM,cAAc,GACtB,SAAS,GACT,SAAS,GACT,WAAW,GACX,QAAQ,GACR,WAAW,CAAC;AAEhB,oCAAoC;AACpC,MAAM,WAAW,uBAAuB;IACtC,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mCAAmC;IACnC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB;IAClB,UAAU,EAAE;QACV,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,qCAAqC;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,0BAA0B;AAC1B,MAAM,WAAW,cAAc;IAC7B,wCAAwC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,2CAA2C;IAC3C,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB;IACnB,YAAY,EAAE,YAAY,CAAC;IAC3B,uBAAuB;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,wBAAwB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW;IACX,MAAM,EAAE,cAAc,CAAC;IACvB,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,eAAe,CAAC,EAAE,uBAAuB,CAAC;CAC3C;AAED,0BAA0B;AAC1B,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,SAAS,EAAE,cAAc,EAAE,CAAC;CAC7B;AAED,8BAA8B;AAC9B,MAAM,WAAW,aAAa;IAC5B,WAAW;IACX,IAAI,EACA,SAAS,GACT,SAAS,GACT,YAAY,GACZ,UAAU,GACV,OAAO,GACP,WAAW,GACX,QAAQ,GACR,WAAW,CAAC;IAChB,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,0BAA0B;IAC1B,IAAI,EAAE;QACJ,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,uBAAuB,CAAC;KACpC,CAAC;CACH"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Sub Agent 类型定义。
3
+ *
4
+ * Sub agent 是由主 agent 通过 task 工具 spawn 的轻量级子代理,
5
+ * 拥有独立的 ACodeRuntime 实例(独立 context window)。
6
+ * 状态持久化到 ~/.acode/sub-agents/{agentId}.json(与 todo 同构)。
7
+ */
8
+ export {};
@@ -0,0 +1,42 @@
1
+ /** 单条 todo 项 */
2
+ export interface TodoItem {
3
+ /** 任务简短描述(必填) */
4
+ content: string;
5
+ status: "pending" | "in_progress" | "completed" | "cancelled";
6
+ priority: "high" | "medium" | "low";
7
+ }
8
+ /** 持久化的 todo 文档结构 */
9
+ export interface TodoDocument {
10
+ agentId: string;
11
+ updatedAt: string;
12
+ /**
13
+ * 整个 todo 列表的任务背景(必填)—— 描述该批任务的整体来源、目标、约束。
14
+ * 写入时由 todo_write 顶层传入,读取时一并返回,便于恢复任务上下文。
15
+ */
16
+ background: string;
17
+ todos: TodoItem[];
18
+ }
19
+ /**
20
+ * Todo JSON 文件存储,按 agentId 隔离。
21
+ * 文件路径:{homedir}/.acode/todos/{agentId}.json
22
+ *
23
+ * 路径与 bridge 现有 ~/.acode/cmd-dist/ 惯例一致,固定使用家目录:
24
+ * - 不依赖 agent 工作目录,避免 workspacePath 错误时读取失败
25
+ * - todo 跟随 agent(agentId),不跟随项目工作区
26
+ *
27
+ * 并发安全:同一 TodoStore 实例的写操作通过 Promise 链串行化,
28
+ * 避免同一 agentId 的并发 todo_write 互相覆盖。
29
+ * 写入采用 tmp + rename 原子替换,防止半写损坏。
30
+ */
31
+ export declare class TodoStore {
32
+ private readonly todosDir;
33
+ private writeChain;
34
+ constructor();
35
+ /** 文件路径(按 agentId 隔离) */
36
+ private filePath;
37
+ /** 读取该 agentId 的 todo 文档。文件不存在或损坏时返回空文档。 */
38
+ read(agentId: string): Promise<TodoDocument>;
39
+ /** 全量替换该 agentId 的 todo 文档(background + todos)。串行化以避免并发覆盖。 */
40
+ write(agentId: string, background: string, todos: TodoItem[]): Promise<void>;
41
+ }
42
+ //# sourceMappingURL=todo-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"todo-store.d.ts","sourceRoot":"","sources":["../src/todo-store.ts"],"names":[],"mappings":"AAIA,gBAAgB;AAChB,MAAM,WAAW,QAAQ;IACvB,iBAAiB;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,GAAG,aAAa,GAAG,WAAW,GAAG,WAAW,CAAC;IAC9D,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;CACrC;AAED,qBAAqB;AACrB,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,UAAU,CAAoC;;IAMtD,yBAAyB;IACzB,OAAO,CAAC,QAAQ;IAMhB,4CAA4C;IACtC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAmBlD,8DAA8D;IACxD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAkBnF"}