@cjhyy/code-shell-core 0.7.0 → 0.8.0

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 (621) hide show
  1. package/README.md +36 -23
  2. package/dist/agent/agent-definition-registry.d.ts +2 -2
  3. package/dist/agent/agent-definition-registry.js +47 -10
  4. package/dist/agent/agent-definition.d.ts +5 -0
  5. package/dist/agent/agent-definition.js +14 -0
  6. package/dist/automation/index.d.ts +7 -4
  7. package/dist/automation/index.js +4 -2
  8. package/dist/automation/runner.js +3 -1
  9. package/dist/automation/scheduler.d.ts +57 -1
  10. package/dist/automation/scheduler.js +123 -23
  11. package/dist/automation/store.d.ts +6 -2
  12. package/dist/automation/store.js +7 -3
  13. package/dist/capabilities/index.d.ts +109 -0
  14. package/dist/capabilities/index.js +80 -0
  15. package/dist/capability-control/disabled-lists.d.ts +2 -1
  16. package/dist/capability-control/disabled-lists.js +3 -5
  17. package/dist/capability-control/overlay.d.ts +14 -1
  18. package/dist/capability-control/overlay.js +40 -0
  19. package/dist/capability-control/service.js +6 -4
  20. package/dist/cli/agent-server-stdio.d.ts +1 -1
  21. package/dist/cli/agent-server-stdio.js +66 -6
  22. package/dist/cli/agent-server-tcp.js +20 -5
  23. package/dist/context/compaction.d.ts +39 -3
  24. package/dist/context/compaction.js +151 -39
  25. package/dist/context/manager.d.ts +20 -4
  26. package/dist/context/manager.js +42 -7
  27. package/dist/context/token-counter.js +5 -3
  28. package/dist/context/tool-result-storage.d.ts +6 -0
  29. package/dist/context/tool-result-storage.js +25 -4
  30. package/dist/credentials/access.d.ts +13 -2
  31. package/dist/credentials/access.js +99 -4
  32. package/dist/credentials/index.d.ts +3 -2
  33. package/dist/credentials/index.js +2 -1
  34. package/dist/credentials/oauth.d.ts +9 -1
  35. package/dist/credentials/oauth.js +80 -1
  36. package/dist/credentials/store.d.ts +16 -2
  37. package/dist/credentials/store.js +33 -11
  38. package/dist/credentials/types.d.ts +62 -1
  39. package/dist/credentials/types.js +16 -1
  40. package/dist/credentials/use-credential-tool.js +15 -1
  41. package/dist/engine/auxiliary-pipeline.d.ts +40 -0
  42. package/dist/engine/auxiliary-pipeline.js +181 -0
  43. package/dist/{settings → engine}/disk-defaults.d.ts +2 -2
  44. package/dist/{settings → engine}/disk-defaults.js +5 -2
  45. package/dist/engine/dynamic-tool-defs.d.ts +4 -0
  46. package/dist/engine/dynamic-tool-defs.js +4 -0
  47. package/dist/engine/engine.d.ts +272 -184
  48. package/dist/engine/engine.js +1869 -1864
  49. package/dist/engine/file-history-hook.d.ts +11 -0
  50. package/dist/engine/file-history-hook.js +31 -0
  51. package/dist/engine/goal-judge-context.d.ts +9 -0
  52. package/dist/engine/goal-judge-context.js +234 -0
  53. package/dist/engine/injected-context-cache.d.ts +6 -0
  54. package/dist/engine/injected-context-cache.js +13 -0
  55. package/dist/engine/input-attachments.d.ts +1 -1
  56. package/dist/engine/model-facade.d.ts +3 -3
  57. package/dist/engine/model-facade.js +15 -14
  58. package/dist/engine/permission-controller.d.ts +55 -0
  59. package/dist/engine/permission-controller.js +148 -0
  60. package/dist/engine/prompt-cache-diagnostics.d.ts +58 -0
  61. package/dist/engine/prompt-cache-diagnostics.js +178 -0
  62. package/dist/engine/run-accounting.d.ts +41 -0
  63. package/dist/engine/run-accounting.js +126 -0
  64. package/dist/engine/run-context.d.ts +44 -0
  65. package/dist/engine/run-context.js +88 -0
  66. package/dist/engine/run-environment.d.ts +30 -0
  67. package/dist/engine/run-environment.js +77 -0
  68. package/dist/engine/run-finalize.d.ts +58 -0
  69. package/dist/engine/run-finalize.js +245 -0
  70. package/dist/engine/run-goal.d.ts +58 -0
  71. package/dist/engine/run-goal.js +188 -0
  72. package/dist/engine/run-image-input.d.ts +1 -1
  73. package/dist/engine/run-image-input.js +5 -3
  74. package/dist/engine/run-session-open.d.ts +41 -0
  75. package/dist/engine/run-session-open.js +186 -0
  76. package/dist/engine/run-setup.d.ts +42 -0
  77. package/dist/engine/run-setup.js +58 -0
  78. package/dist/engine/run-tooling.d.ts +125 -0
  79. package/dist/engine/run-tooling.js +283 -0
  80. package/dist/engine/run-types.d.ts +139 -0
  81. package/dist/engine/run-types.js +12 -0
  82. package/dist/engine/run-workspace.d.ts +50 -0
  83. package/dist/engine/run-workspace.js +114 -0
  84. package/dist/engine/session-title.d.ts +2 -1
  85. package/dist/engine/session-title.js +4 -1
  86. package/dist/engine/steer-queue.d.ts +1 -1
  87. package/dist/engine/subagent-spawner.d.ts +32 -0
  88. package/dist/engine/subagent-spawner.js +287 -0
  89. package/dist/engine/tool-summary.d.ts +2 -2
  90. package/dist/engine/tool-summary.js +2 -2
  91. package/dist/engine/turn-loop.d.ts +67 -10
  92. package/dist/engine/turn-loop.js +538 -97
  93. package/dist/engine/types.d.ts +35 -4
  94. package/dist/engine/types.js +1 -1
  95. package/dist/{engine/goal.d.ts → goal/lifecycle.d.ts} +80 -6
  96. package/dist/goal/lifecycle.js +482 -0
  97. package/dist/hooks/events.d.ts +26 -9
  98. package/dist/hooks/events.js +0 -3
  99. package/dist/hooks/goal-stop-hook.d.ts +28 -29
  100. package/dist/hooks/goal-stop-hook.js +344 -144
  101. package/dist/hooks/registry.js +4 -1
  102. package/dist/hooks/shell-runner.d.ts +12 -1
  103. package/dist/hooks/shell-runner.js +160 -9
  104. package/dist/index.d.ts +51 -110
  105. package/dist/index.extension.d.ts +51 -0
  106. package/dist/index.extension.js +39 -0
  107. package/dist/index.internal.d.ts +86 -0
  108. package/dist/index.internal.js +92 -0
  109. package/dist/index.js +37 -125
  110. package/dist/links/cli.d.ts +48 -0
  111. package/dist/links/cli.js +617 -0
  112. package/dist/links/http.d.ts +40 -0
  113. package/dist/links/http.js +166 -0
  114. package/dist/links/index.d.ts +4 -0
  115. package/dist/links/index.js +3 -0
  116. package/dist/links/link-action-tool.d.ts +5 -0
  117. package/dist/links/link-action-tool.js +241 -0
  118. package/dist/links/providers.d.ts +8 -0
  119. package/dist/links/providers.js +665 -0
  120. package/dist/links/types.d.ts +44 -0
  121. package/dist/llm/client-base.d.ts +7 -0
  122. package/dist/llm/client-base.js +72 -10
  123. package/dist/llm/model-pool.d.ts +1 -1
  124. package/dist/llm/model-pool.js +1 -1
  125. package/dist/llm/providers/anthropic.d.ts +1 -0
  126. package/dist/llm/providers/anthropic.js +9 -0
  127. package/dist/llm/providers/openai.d.ts +1 -0
  128. package/dist/llm/providers/openai.js +17 -0
  129. package/dist/llm/types.d.ts +12 -5
  130. package/dist/model-catalog/index.js +15 -2
  131. package/dist/model-catalog/resolve.d.ts +13 -1
  132. package/dist/model-catalog/resolve.js +37 -2
  133. package/dist/model-catalog/types.d.ts +74 -48
  134. package/dist/model-catalog/types.js +16 -5
  135. package/dist/model-catalog/upsert.d.ts +3 -1
  136. package/dist/model-catalog/upsert.js +9 -0
  137. package/dist/onboarding.d.ts +0 -1
  138. package/dist/onboarding.js +1 -22
  139. package/dist/panel-apps/bindings.d.ts +24 -0
  140. package/dist/panel-apps/bindings.js +69 -0
  141. package/dist/panel-apps/github-archive.d.ts +21 -0
  142. package/dist/panel-apps/github-archive.js +98 -0
  143. package/dist/panel-apps/index.d.ts +4 -0
  144. package/dist/panel-apps/index.js +4 -0
  145. package/dist/panel-apps/installer.d.ts +68 -0
  146. package/dist/panel-apps/installer.js +622 -0
  147. package/dist/panel-apps/manifest.d.ts +364 -0
  148. package/dist/panel-apps/manifest.js +189 -0
  149. package/dist/panel-apps/paths.d.ts +13 -0
  150. package/dist/panel-apps/paths.js +38 -0
  151. package/dist/panel-apps/registry.d.ts +51 -0
  152. package/dist/panel-apps/registry.js +99 -0
  153. package/dist/panel-apps/runtime.d.ts +80 -0
  154. package/dist/panel-apps/runtime.js +154 -0
  155. package/dist/plugins/gitOps.js +8 -1
  156. package/dist/plugins/installedPlugins.d.ts +2 -1
  157. package/dist/plugins/installedPlugins.js +146 -8
  158. package/dist/plugins/installer/codex/convertAgents.d.ts +4 -1
  159. package/dist/plugins/installer/codex/convertAgents.js +62 -8
  160. package/dist/plugins/installer/codex/convertCommands.d.ts +5 -5
  161. package/dist/plugins/installer/codex/convertCommands.js +35 -12
  162. package/dist/plugins/installer/codex/convertHooks.d.ts +10 -0
  163. package/dist/plugins/installer/codex/convertHooks.js +82 -0
  164. package/dist/plugins/installer/codex/convertSkills.js +41 -6
  165. package/dist/plugins/installer/install.d.ts +7 -1
  166. package/dist/plugins/installer/install.js +21 -87
  167. package/dist/plugins/installer/installFromArchive.d.ts +26 -4
  168. package/dist/plugins/installer/installFromArchive.js +44 -27
  169. package/dist/plugins/installer/installFromNpm.d.ts +31 -0
  170. package/dist/plugins/installer/installFromNpm.js +273 -0
  171. package/dist/plugins/installer/loadPluginAgents.js +17 -4
  172. package/dist/plugins/installer/loadPluginMcp.d.ts +14 -0
  173. package/dist/plugins/installer/loadPluginMcp.js +245 -35
  174. package/dist/plugins/installer/normalizeManifest.d.ts +13 -0
  175. package/dist/plugins/installer/normalizeManifest.js +306 -0
  176. package/dist/plugins/installer/npmTar.d.ts +13 -0
  177. package/dist/plugins/installer/npmTar.js +321 -0
  178. package/dist/plugins/installer/parseSource.d.ts +11 -0
  179. package/dist/plugins/installer/parseSource.js +48 -0
  180. package/dist/plugins/installer/preview.d.ts +101 -0
  181. package/dist/plugins/installer/preview.js +336 -0
  182. package/dist/plugins/installer/projectPluginSource.d.ts +14 -0
  183. package/dist/plugins/installer/projectPluginSource.js +140 -0
  184. package/dist/plugins/installer/types.d.ts +775 -0
  185. package/dist/plugins/installer/types.js +100 -0
  186. package/dist/plugins/installer/unzip.d.ts +11 -0
  187. package/dist/plugins/installer/unzip.js +123 -9
  188. package/dist/plugins/installer/update.d.ts +2 -2
  189. package/dist/plugins/installer/update.js +43 -4
  190. package/dist/plugins/loadPluginHooks.d.ts +19 -2
  191. package/dist/plugins/loadPluginHooks.js +97 -86
  192. package/dist/plugins/pluginAutomationTemplates.d.ts +18 -0
  193. package/dist/plugins/pluginAutomationTemplates.js +50 -0
  194. package/dist/plugins/pluginCatalog.d.ts +45 -0
  195. package/dist/plugins/pluginCatalog.js +87 -0
  196. package/dist/plugins/pluginCommandHook.d.ts +10 -4
  197. package/dist/plugins/pluginCommandHook.js +133 -18
  198. package/dist/plugins/pluginCommandsLoader.d.ts +19 -0
  199. package/dist/plugins/pluginCommandsLoader.js +181 -7
  200. package/dist/plugins/pluginContent.d.ts +10 -1
  201. package/dist/plugins/pluginContent.js +87 -30
  202. package/dist/plugins/pluginHookApproval.d.ts +30 -0
  203. package/dist/plugins/pluginHookApproval.js +160 -0
  204. package/dist/plugins/pluginHookIntegrity.d.ts +69 -0
  205. package/dist/plugins/pluginHookIntegrity.js +361 -0
  206. package/dist/plugins/pluginInstaller.js +71 -12
  207. package/dist/plugins/pluginMcpApproval.d.ts +19 -0
  208. package/dist/plugins/pluginMcpApproval.js +110 -0
  209. package/dist/plugins/pluginMcpIntegrity.d.ts +21 -0
  210. package/dist/plugins/pluginMcpIntegrity.js +74 -0
  211. package/dist/plugins/types.d.ts +30 -0
  212. package/dist/plugins/varRewrite.d.ts +9 -5
  213. package/dist/plugins/varRewrite.js +26 -17
  214. package/dist/preset/index.d.ts +11 -8
  215. package/dist/preset/index.js +62 -203
  216. package/dist/product/define.js +9 -3
  217. package/dist/product/types.d.ts +0 -2
  218. package/dist/profile/activation.d.ts +36 -0
  219. package/dist/profile/activation.js +57 -0
  220. package/dist/profile/catalog-store.d.ts +77 -0
  221. package/dist/profile/catalog-store.js +346 -0
  222. package/dist/profile/catalog.d.ts +54 -0
  223. package/dist/profile/catalog.js +152 -0
  224. package/dist/profile/index.d.ts +7 -0
  225. package/dist/profile/index.js +7 -0
  226. package/dist/profile/requirements.d.ts +76 -0
  227. package/dist/profile/requirements.js +117 -0
  228. package/dist/profile/resolve.d.ts +11 -0
  229. package/dist/profile/resolve.js +41 -0
  230. package/dist/profile/store.d.ts +17 -0
  231. package/dist/profile/store.js +167 -0
  232. package/dist/profile/types.d.ts +321 -0
  233. package/dist/profile/types.js +104 -0
  234. package/dist/prompt/composer.d.ts +46 -7
  235. package/dist/prompt/composer.js +78 -48
  236. package/dist/prompt/instruction-scanner.d.ts +6 -5
  237. package/dist/prompt/instruction-scanner.js +8 -23
  238. package/dist/prompt/section-loader.d.ts +2 -2
  239. package/dist/prompt/section-loader.js +7 -4
  240. package/dist/prompt/sections/browser.md +10 -9
  241. package/dist/prompt/sections/harness-base.md +9 -0
  242. package/dist/protocol/chat-session-manager.d.ts +77 -3
  243. package/dist/protocol/chat-session-manager.js +194 -18
  244. package/dist/protocol/chat-session.d.ts +72 -9
  245. package/dist/protocol/chat-session.js +151 -16
  246. package/dist/protocol/client.d.ts +37 -4
  247. package/dist/protocol/client.js +118 -6
  248. package/dist/protocol/index.d.ts +2 -2
  249. package/dist/protocol/index.js +2 -2
  250. package/dist/protocol/mobile-remote-types.d.ts +406 -0
  251. package/dist/protocol/mobile-remote-types.js +1 -0
  252. package/dist/protocol/server.d.ts +152 -14
  253. package/dist/protocol/server.js +1574 -229
  254. package/dist/protocol/types.d.ts +182 -32
  255. package/dist/protocol/types.js +18 -0
  256. package/dist/run/ArtifactTracker.d.ts +6 -1
  257. package/dist/run/ArtifactTracker.js +29 -21
  258. package/dist/run/EngineRunner.d.ts +2 -0
  259. package/dist/run/EngineRunner.js +1 -0
  260. package/dist/run/RunManager.d.ts +26 -0
  261. package/dist/run/RunManager.js +82 -11
  262. package/dist/run/factory.d.ts +3 -0
  263. package/dist/run/factory.js +2 -0
  264. package/dist/runtime/safe-spawn.d.ts +6 -0
  265. package/dist/runtime/safe-spawn.js +8 -13
  266. package/dist/services/auto-dream.d.ts +13 -1
  267. package/dist/services/auto-dream.js +56 -8
  268. package/dist/services/dream-consolidation.d.ts +3 -0
  269. package/dist/services/dream-consolidation.js +14 -2
  270. package/dist/services/index.d.ts +1 -1
  271. package/dist/services/index.js +1 -1
  272. package/dist/services/memory-orchestrator.js +6 -2
  273. package/dist/services/oauth.d.ts +34 -10
  274. package/dist/services/oauth.js +236 -98
  275. package/dist/services/session-memory.d.ts +4 -4
  276. package/dist/services/session-memory.js +13 -10
  277. package/dist/session/memory.d.ts +26 -7
  278. package/dist/session/memory.js +79 -21
  279. package/dist/session/session-manager.d.ts +208 -25
  280. package/dist/session/session-manager.js +1232 -116
  281. package/dist/session/session-message.d.ts +22 -0
  282. package/dist/session/session-message.js +1 -0
  283. package/dist/session/transcript.d.ts +76 -6
  284. package/dist/session/transcript.js +278 -7
  285. package/dist/settings/feature-flags.d.ts +40 -0
  286. package/dist/settings/feature-flags.js +40 -0
  287. package/dist/settings/manager.d.ts +39 -1
  288. package/dist/settings/manager.js +102 -41
  289. package/dist/settings/migrate-config.js +4 -2
  290. package/dist/settings/schema.d.ts +511 -177
  291. package/dist/settings/schema.js +98 -25
  292. package/dist/skills/scanner.d.ts +6 -2
  293. package/dist/skills/scanner.js +160 -9
  294. package/dist/sources/adapter.d.ts +14 -0
  295. package/dist/sources/adapter.js +7 -0
  296. package/dist/sources/adapters/local-files.d.ts +10 -0
  297. package/dist/sources/adapters/local-files.js +127 -0
  298. package/dist/sources/adapters/mcp-resource.d.ts +17 -0
  299. package/dist/sources/adapters/mcp-resource.js +41 -0
  300. package/dist/sources/adapters/mock.d.ts +3 -0
  301. package/dist/sources/adapters/mock.js +29 -0
  302. package/dist/sources/binding.d.ts +6 -0
  303. package/dist/sources/binding.js +24 -0
  304. package/dist/sources/catalog.d.ts +6 -0
  305. package/dist/sources/catalog.js +64 -0
  306. package/dist/sources/context-summary.d.ts +8 -0
  307. package/dist/sources/context-summary.js +13 -0
  308. package/dist/sources/credential-status.d.ts +2 -0
  309. package/dist/sources/credential-status.js +13 -0
  310. package/dist/sources/index.d.ts +10 -0
  311. package/dist/sources/index.js +10 -0
  312. package/dist/sources/resolve.d.ts +28 -0
  313. package/dist/sources/resolve.js +47 -0
  314. package/dist/sources/truncate-utf8.d.ts +7 -0
  315. package/dist/sources/truncate-utf8.js +18 -0
  316. package/dist/sources/types.d.ts +71 -0
  317. package/dist/sources/types.js +26 -0
  318. package/dist/testing/fetch-stub.d.ts +32 -0
  319. package/dist/testing/fetch-stub.js +24 -0
  320. package/dist/themes/image.d.ts +18 -0
  321. package/dist/themes/image.js +117 -0
  322. package/dist/themes/index.d.ts +4 -0
  323. package/dist/themes/index.js +4 -0
  324. package/dist/themes/installer.d.ts +50 -0
  325. package/dist/themes/installer.js +290 -0
  326. package/dist/themes/manifest.d.ts +102 -0
  327. package/dist/themes/manifest.js +86 -0
  328. package/dist/themes/paths.d.ts +14 -0
  329. package/dist/themes/paths.js +33 -0
  330. package/dist/tool-system/browser-bridge.d.ts +53 -11
  331. package/dist/tool-system/browser-bridge.js +8 -9
  332. package/dist/tool-system/builtin/agent-heartbeat.d.ts +2 -2
  333. package/dist/tool-system/builtin/agent-heartbeat.js +20 -6
  334. package/dist/tool-system/builtin/agent-notifications.d.ts +127 -72
  335. package/dist/tool-system/builtin/agent-notifications.js +291 -101
  336. package/dist/tool-system/builtin/agent-output-file.js +1 -3
  337. package/dist/tool-system/builtin/agent-progress.d.ts +6 -0
  338. package/dist/tool-system/builtin/agent-progress.js +83 -0
  339. package/dist/tool-system/builtin/agent-registry.d.ts +38 -2
  340. package/dist/tool-system/builtin/agent-registry.js +178 -9
  341. package/dist/tool-system/builtin/agent-transcript-translator.js +1 -1
  342. package/dist/tool-system/builtin/agent.d.ts +2 -0
  343. package/dist/tool-system/builtin/agent.js +279 -34
  344. package/dist/tool-system/builtin/background-jobs.d.ts +63 -7
  345. package/dist/tool-system/builtin/background-jobs.js +111 -15
  346. package/dist/tool-system/builtin/background-work.d.ts +12 -1
  347. package/dist/tool-system/builtin/background-work.js +12 -1
  348. package/dist/tool-system/builtin/bash.d.ts +3 -5
  349. package/dist/tool-system/builtin/bash.js +14 -6
  350. package/dist/tool-system/builtin/browser-tools.d.ts +8 -5
  351. package/dist/tool-system/builtin/browser-tools.js +89 -23
  352. package/dist/tool-system/builtin/edit-model-catalog.d.ts +6 -0
  353. package/dist/tool-system/builtin/edit-model-catalog.js +172 -12
  354. package/dist/tool-system/builtin/edit.d.ts +2 -1
  355. package/dist/tool-system/builtin/edit.js +14 -10
  356. package/dist/tool-system/builtin/file-cache.d.ts +2 -0
  357. package/dist/tool-system/builtin/file-cache.js +4 -0
  358. package/dist/tool-system/builtin/generate-image.js +17 -10
  359. package/dist/tool-system/builtin/generate-video.d.ts +4 -0
  360. package/dist/tool-system/builtin/generate-video.js +164 -28
  361. package/dist/tool-system/builtin/glob.d.ts +2 -1
  362. package/dist/tool-system/builtin/glob.js +28 -3
  363. package/dist/tool-system/builtin/grep.d.ts +1 -0
  364. package/dist/tool-system/builtin/grep.js +82 -17
  365. package/dist/tool-system/builtin/image-uploader.js +7 -1
  366. package/dist/tool-system/builtin/index.d.ts +57 -18
  367. package/dist/tool-system/builtin/index.js +280 -167
  368. package/dist/tool-system/builtin/memory.d.ts +6 -0
  369. package/dist/tool-system/builtin/memory.js +36 -15
  370. package/dist/tool-system/builtin/panel.d.ts +9 -0
  371. package/dist/tool-system/builtin/panel.js +314 -0
  372. package/dist/tool-system/builtin/read.js +5 -1
  373. package/dist/tool-system/builtin/send-message-to-session.d.ts +6 -0
  374. package/dist/tool-system/builtin/send-message-to-session.js +67 -0
  375. package/dist/tool-system/builtin/sources.d.ts +8 -0
  376. package/dist/tool-system/builtin/sources.js +137 -0
  377. package/dist/tool-system/builtin/tool-search.js +7 -2
  378. package/dist/tool-system/builtin/update-automation-memory.js +2 -0
  379. package/dist/tool-system/builtin/video-providers.d.ts +12 -15
  380. package/dist/tool-system/builtin/video-providers.js +1 -0
  381. package/dist/tool-system/builtin/view-image.d.ts +2 -2
  382. package/dist/tool-system/builtin/web-fetch.js +60 -15
  383. package/dist/tool-system/builtin/web-search.js +1 -3
  384. package/dist/tool-system/builtin/write.d.ts +2 -1
  385. package/dist/tool-system/builtin/write.js +14 -4
  386. package/dist/tool-system/capability-module.d.ts +93 -0
  387. package/dist/tool-system/capability-module.js +53 -0
  388. package/dist/tool-system/context.d.ts +94 -24
  389. package/dist/tool-system/executor.js +99 -58
  390. package/dist/tool-system/external-tool-exposure.d.ts +60 -0
  391. package/dist/tool-system/external-tool-exposure.js +304 -0
  392. package/dist/tool-system/mcp-manager.d.ts +17 -1
  393. package/dist/tool-system/mcp-manager.js +72 -7
  394. package/dist/tool-system/mcp-tool-policy.d.ts +9 -0
  395. package/dist/tool-system/mcp-tool-policy.js +34 -0
  396. package/dist/tool-system/panel-bridge.d.ts +53 -0
  397. package/dist/tool-system/panel-bridge.js +1 -0
  398. package/dist/tool-system/path-policy.d.ts +19 -0
  399. package/dist/tool-system/path-policy.js +62 -1
  400. package/dist/tool-system/permission.d.ts +69 -3
  401. package/dist/tool-system/permission.js +429 -30
  402. package/dist/tool-system/registry.d.ts +15 -3
  403. package/dist/tool-system/registry.js +82 -40
  404. package/dist/tool-system/sandbox/index.js +3 -8
  405. package/dist/tool-system/sandbox/seatbelt.js +2 -6
  406. package/dist/tool-system/session-tool-host.d.ts +139 -0
  407. package/dist/tool-system/session-tool-host.js +167 -0
  408. package/dist/tool-system/testing/tool-registry-harness.d.ts +31 -0
  409. package/dist/tool-system/testing/tool-registry-harness.js +51 -0
  410. package/dist/tool-system/validation.d.ts +14 -7
  411. package/dist/tool-system/validation.js +701 -7
  412. package/dist/types.d.ts +201 -20
  413. package/dist/{cc-orchestrator → utils}/cwd-normalize.d.ts +1 -0
  414. package/dist/{cc-orchestrator → utils}/cwd-normalize.js +1 -0
  415. package/dist/utils/file-mutex.d.ts +65 -0
  416. package/dist/utils/file-mutex.js +145 -0
  417. package/dist/utils/json.d.ts +2 -4
  418. package/dist/utils/json.js +2 -4
  419. package/dist/utils/lockfile.d.ts +30 -1
  420. package/dist/utils/lockfile.js +2 -2
  421. package/dist/utils/secret-scrubber.d.ts +8 -0
  422. package/dist/utils/secret-scrubber.js +227 -0
  423. package/dist/utils/toolDisplay.js +1 -1
  424. package/package.json +20 -5
  425. package/THIRD_PARTY_NOTICES.md +0 -206
  426. package/dist/arena/arena.d.ts +0 -43
  427. package/dist/arena/arena.js +0 -333
  428. package/dist/arena/context/context-tools.d.ts +0 -16
  429. package/dist/arena/context/context-tools.js +0 -272
  430. package/dist/arena/context/within-root.d.ts +0 -7
  431. package/dist/arena/context/within-root.js +0 -15
  432. package/dist/arena/detect-mode.d.ts +0 -20
  433. package/dist/arena/detect-mode.js +0 -78
  434. package/dist/arena/digest-builder.d.ts +0 -25
  435. package/dist/arena/digest-builder.js +0 -120
  436. package/dist/arena/index.d.ts +0 -29
  437. package/dist/arena/index.js +0 -29
  438. package/dist/arena/iterate/convergence.d.ts +0 -25
  439. package/dist/arena/iterate/convergence.js +0 -103
  440. package/dist/arena/iterate/formats/index.d.ts +0 -22
  441. package/dist/arena/iterate/formats/index.js +0 -283
  442. package/dist/arena/iterate/index.d.ts +0 -11
  443. package/dist/arena/iterate/index.js +0 -9
  444. package/dist/arena/iterate/iterative-arena.d.ts +0 -23
  445. package/dist/arena/iterate/iterative-arena.js +0 -237
  446. package/dist/arena/iterate/parse.d.ts +0 -42
  447. package/dist/arena/iterate/parse.js +0 -123
  448. package/dist/arena/iterate/phases/argue.d.ts +0 -22
  449. package/dist/arena/iterate/phases/argue.js +0 -165
  450. package/dist/arena/iterate/phases/revise.d.ts +0 -16
  451. package/dist/arena/iterate/phases/revise.js +0 -62
  452. package/dist/arena/iterate/phases/tournament.d.ts +0 -34
  453. package/dist/arena/iterate/phases/tournament.js +0 -113
  454. package/dist/arena/iterate/tools/web-tools.d.ts +0 -13
  455. package/dist/arena/iterate/tools/web-tools.js +0 -54
  456. package/dist/arena/iterate/types.d.ts +0 -152
  457. package/dist/arena/iterate/types.js +0 -8
  458. package/dist/arena/ledger.d.ts +0 -47
  459. package/dist/arena/ledger.js +0 -159
  460. package/dist/arena/lenses/architecture.d.ts +0 -5
  461. package/dist/arena/lenses/architecture.js +0 -22
  462. package/dist/arena/lenses/engineering.d.ts +0 -5
  463. package/dist/arena/lenses/engineering.js +0 -22
  464. package/dist/arena/lenses/general.d.ts +0 -5
  465. package/dist/arena/lenses/general.js +0 -20
  466. package/dist/arena/lenses/index.d.ts +0 -16
  467. package/dist/arena/lenses/index.js +0 -47
  468. package/dist/arena/lenses/product.d.ts +0 -5
  469. package/dist/arena/lenses/product.js +0 -22
  470. package/dist/arena/model-presets.d.ts +0 -23
  471. package/dist/arena/model-presets.js +0 -44
  472. package/dist/arena/phases/adjudication.d.ts +0 -24
  473. package/dist/arena/phases/adjudication.js +0 -141
  474. package/dist/arena/phases/build-consensus.d.ts +0 -29
  475. package/dist/arena/phases/build-consensus.js +0 -83
  476. package/dist/arena/phases/claim-registry.d.ts +0 -26
  477. package/dist/arena/phases/claim-registry.js +0 -60
  478. package/dist/arena/phases/cross-review.d.ts +0 -45
  479. package/dist/arena/phases/cross-review.js +0 -218
  480. package/dist/arena/phases/debate-rounds.d.ts +0 -27
  481. package/dist/arena/phases/debate-rounds.js +0 -159
  482. package/dist/arena/phases/participant-research.d.ts +0 -38
  483. package/dist/arena/phases/participant-research.js +0 -314
  484. package/dist/arena/phases/planning-detail-expansion.d.ts +0 -38
  485. package/dist/arena/phases/planning-detail-expansion.js +0 -119
  486. package/dist/arena/planner.d.ts +0 -27
  487. package/dist/arena/planner.js +0 -311
  488. package/dist/arena/providers/docs.d.ts +0 -7
  489. package/dist/arena/providers/docs.js +0 -111
  490. package/dist/arena/providers/git.d.ts +0 -8
  491. package/dist/arena/providers/git.js +0 -174
  492. package/dist/arena/providers/index.d.ts +0 -32
  493. package/dist/arena/providers/index.js +0 -132
  494. package/dist/arena/providers/none.d.ts +0 -7
  495. package/dist/arena/providers/none.js +0 -11
  496. package/dist/arena/providers/repo.d.ts +0 -7
  497. package/dist/arena/providers/repo.js +0 -258
  498. package/dist/arena/render/session.d.ts +0 -17
  499. package/dist/arena/render/session.js +0 -190
  500. package/dist/arena/render/terminal.d.ts +0 -34
  501. package/dist/arena/render/terminal.js +0 -286
  502. package/dist/arena/strategies/discussion.d.ts +0 -25
  503. package/dist/arena/strategies/discussion.js +0 -143
  504. package/dist/arena/strategies/index.d.ts +0 -15
  505. package/dist/arena/strategies/index.js +0 -28
  506. package/dist/arena/strategies/language-wrapper.d.ts +0 -17
  507. package/dist/arena/strategies/language-wrapper.js +0 -102
  508. package/dist/arena/strategies/lens-wrapper.d.ts +0 -16
  509. package/dist/arena/strategies/lens-wrapper.js +0 -236
  510. package/dist/arena/strategies/planning.d.ts +0 -30
  511. package/dist/arena/strategies/planning.js +0 -225
  512. package/dist/arena/strategies/review.d.ts +0 -26
  513. package/dist/arena/strategies/review.js +0 -168
  514. package/dist/arena/strategies/utils.d.ts +0 -36
  515. package/dist/arena/strategies/utils.js +0 -603
  516. package/dist/arena/tools/selector.d.ts +0 -17
  517. package/dist/arena/tools/selector.js +0 -61
  518. package/dist/arena/transitions.d.ts +0 -53
  519. package/dist/arena/transitions.js +0 -97
  520. package/dist/arena/types.d.ts +0 -514
  521. package/dist/arena/types.js +0 -27
  522. package/dist/cc-orchestrator/agent-adapter.d.ts +0 -54
  523. package/dist/cc-orchestrator/agent-adapter.js +0 -143
  524. package/dist/cc-orchestrator/cc-capability.d.ts +0 -19
  525. package/dist/cc-orchestrator/cc-capability.js +0 -53
  526. package/dist/cc-orchestrator/codex-session-discovery.d.ts +0 -24
  527. package/dist/cc-orchestrator/codex-session-discovery.js +0 -191
  528. package/dist/cc-orchestrator/codex-session-history.d.ts +0 -38
  529. package/dist/cc-orchestrator/codex-session-history.js +0 -247
  530. package/dist/cc-orchestrator/external-agent-bindings.d.ts +0 -27
  531. package/dist/cc-orchestrator/external-agent-bindings.js +0 -150
  532. package/dist/cc-orchestrator/external-agent-changes.d.ts +0 -19
  533. package/dist/cc-orchestrator/external-agent-changes.js +0 -231
  534. package/dist/cc-orchestrator/external-agent-driver.d.ts +0 -19
  535. package/dist/cc-orchestrator/external-agent-driver.js +0 -284
  536. package/dist/cc-orchestrator/external-agent-session-store.d.ts +0 -23
  537. package/dist/cc-orchestrator/external-agent-session-store.js +0 -146
  538. package/dist/cc-orchestrator/index.d.ts +0 -8
  539. package/dist/cc-orchestrator/index.js +0 -8
  540. package/dist/cc-orchestrator/relevance-judge.d.ts +0 -15
  541. package/dist/cc-orchestrator/relevance-judge.js +0 -29
  542. package/dist/cc-orchestrator/session-discovery.d.ts +0 -46
  543. package/dist/cc-orchestrator/session-discovery.js +0 -125
  544. package/dist/cc-orchestrator/session-history.d.ts +0 -54
  545. package/dist/cc-orchestrator/session-history.js +0 -150
  546. package/dist/cron/cron-runtime.d.ts +0 -2
  547. package/dist/cron/cron-runtime.js +0 -2
  548. package/dist/cron/cron-store.d.ts +0 -2
  549. package/dist/cron/cron-store.js +0 -2
  550. package/dist/cron/scheduler.d.ts +0 -7
  551. package/dist/cron/scheduler.js +0 -7
  552. package/dist/engine/goal.js +0 -206
  553. package/dist/external-agents/config.d.ts +0 -2
  554. package/dist/external-agents/config.js +0 -15
  555. package/dist/external-agents/types.d.ts +0 -31
  556. package/dist/git/parse-log.d.ts +0 -13
  557. package/dist/git/parse-log.js +0 -21
  558. package/dist/git/utils.d.ts +0 -49
  559. package/dist/git/utils.js +0 -161
  560. package/dist/git/worktree/crud.d.ts +0 -69
  561. package/dist/git/worktree/crud.js +0 -206
  562. package/dist/git/worktree/diff.d.ts +0 -14
  563. package/dist/git/worktree/diff.js +0 -82
  564. package/dist/git/worktree/git-exec.d.ts +0 -7
  565. package/dist/git/worktree/git-exec.js +0 -51
  566. package/dist/git/worktree/index.d.ts +0 -5
  567. package/dist/git/worktree/index.js +0 -5
  568. package/dist/git/worktree/query.d.ts +0 -42
  569. package/dist/git/worktree/query.js +0 -121
  570. package/dist/git/worktree/slug.d.ts +0 -11
  571. package/dist/git/worktree/slug.js +0 -58
  572. package/dist/git/worktree.d.ts +0 -1
  573. package/dist/git/worktree.js +0 -5
  574. package/dist/lsp/client.d.ts +0 -41
  575. package/dist/lsp/client.js +0 -186
  576. package/dist/lsp/manager.d.ts +0 -40
  577. package/dist/lsp/manager.js +0 -155
  578. package/dist/lsp/root-path.d.ts +0 -9
  579. package/dist/lsp/root-path.js +0 -12
  580. package/dist/lsp/servers.d.ts +0 -16
  581. package/dist/lsp/servers.js +0 -60
  582. package/dist/prompt/sections/coding.md +0 -35
  583. package/dist/quota/credentials.d.ts +0 -3
  584. package/dist/quota/credentials.js +0 -80
  585. package/dist/quota/index.d.ts +0 -36
  586. package/dist/quota/index.js +0 -155
  587. package/dist/quota/types.d.ts +0 -48
  588. package/dist/quota/types.js +0 -13
  589. package/dist/review/review-prompt.d.ts +0 -28
  590. package/dist/review/review-prompt.js +0 -81
  591. package/dist/state.d.ts +0 -160
  592. package/dist/state.js +0 -267
  593. package/dist/tool-system/builtin/apply-patch/applier.d.ts +0 -26
  594. package/dist/tool-system/builtin/apply-patch/applier.js +0 -308
  595. package/dist/tool-system/builtin/apply-patch/backup-targets.d.ts +0 -10
  596. package/dist/tool-system/builtin/apply-patch/backup-targets.js +0 -30
  597. package/dist/tool-system/builtin/apply-patch/index.d.ts +0 -20
  598. package/dist/tool-system/builtin/apply-patch/index.js +0 -105
  599. package/dist/tool-system/builtin/apply-patch/parser.d.ts +0 -17
  600. package/dist/tool-system/builtin/apply-patch/parser.js +0 -212
  601. package/dist/tool-system/builtin/apply-patch/seek-sequence.d.ts +0 -18
  602. package/dist/tool-system/builtin/apply-patch/seek-sequence.js +0 -123
  603. package/dist/tool-system/builtin/apply-patch/types.d.ts +0 -49
  604. package/dist/tool-system/builtin/apply-patch/types.js +0 -13
  605. package/dist/tool-system/builtin/arena.d.ts +0 -31
  606. package/dist/tool-system/builtin/arena.js +0 -415
  607. package/dist/tool-system/builtin/brief.d.ts +0 -6
  608. package/dist/tool-system/builtin/brief.js +0 -41
  609. package/dist/tool-system/builtin/check-quota.d.ts +0 -15
  610. package/dist/tool-system/builtin/check-quota.js +0 -34
  611. package/dist/tool-system/builtin/drive-claude-code.d.ts +0 -51
  612. package/dist/tool-system/builtin/drive-claude-code.js +0 -698
  613. package/dist/tool-system/builtin/lsp.d.ts +0 -7
  614. package/dist/tool-system/builtin/lsp.js +0 -144
  615. package/dist/tool-system/builtin/notebook-edit.d.ts +0 -7
  616. package/dist/tool-system/builtin/notebook-edit.js +0 -127
  617. package/dist/tool-system/builtin/worktree.d.ts +0 -11
  618. package/dist/tool-system/builtin/worktree.js +0 -345
  619. /package/dist/{external-agents → links}/types.js +0 -0
  620. /package/dist/{engine/session-usage.d.ts → session/usage.d.ts} +0 -0
  621. /package/dist/{engine/session-usage.js → session/usage.js} +0 -0
@@ -1,20 +1,19 @@
1
1
  /**
2
2
  * BrowserBridge — driver-agnostic contract between the browser tools (core)
3
- * and whatever drives the actual browser (renderer's webview via CDP).
3
+ * and whatever drives the actual browser (a renderer webview, hidden main-
4
+ * process BrowserWindow, or external provider via CDP).
4
5
  *
5
6
  * Spec: docs/superpowers/specs/2026-06-16-browser-automation-mvp.md
6
7
  *
7
- * The core tools only know this interface. The renderer implements it on top
8
- * of the webview's `webContents.debugger` (CDP): observe via
9
- * Accessibility.getFullAXTree, act via DOM.getBoxModel Input.dispatchMouseEvent.
10
- * Keeping it driver-agnostic means a future implementation (a hidden
11
- * BrowserWindow for unattended runs, or an external engine) can swap in without
12
- * touching the tools. Undefined on ToolContext → headless / no panel → tools
13
- * degrade with a clear error.
8
+ * The core tools only know this interface. Desktop can implement it with a
9
+ * Playwright-owned context, Electron `webContents.debugger`, or an authorized
10
+ * Chrome-extension CDP transport. Keeping it driver-agnostic lets those targets
11
+ * swap without touching the tools. Undefined on ToolContext means the current
12
+ * host did not provide browser automation, so tools degrade with a clear error.
14
13
  */
15
14
  /** One interactive element from the page's accessibility tree. */
16
15
  export interface BrowserElement {
17
- /** Per-snapshot reference id (e1, e2, ); the renderer maps it back to a
16
+ /** Per-snapshot reference id (for example s3:e1); the host maps it back to a
18
17
  * backendDOMNodeId for the action tools. Reassigned each snapshot. */
19
18
  ref: string;
20
19
  /** ARIA role (button, link, textbox, checkbox, combobox, …). */
@@ -29,26 +28,69 @@ export interface BrowserElement {
29
28
  export interface BrowserSnapshot {
30
29
  url: string;
31
30
  title?: string;
31
+ /** Main-frame document identity. Changes on every cross-document navigation. */
32
+ documentId?: string;
33
+ /** Identity of this exact observation; refs belong only to this snapshot. */
34
+ snapshotId?: string;
32
35
  elements: BrowserElement[];
36
+ /** Operational/policy failure. Unlike needsHuman, this must not trigger takeover. */
37
+ detail?: string;
33
38
  /** Set when the page needs the user to act (login wall / 2FA) — agent should
34
39
  * hand control back to the user rather than retry. */
35
40
  needsHuman?: string;
36
41
  }
42
+ export type BrowserResultCode = "OK" | "STALE_SNAPSHOT" | "STALE_CURSOR" | "NO_PROGRESS" | "NAVIGATION" | "BLOCKED" | "NEEDS_HUMAN" | "FAILED";
43
+ export interface BrowserScrollState {
44
+ x: number;
45
+ y: number;
46
+ maxX: number;
47
+ maxY: number;
48
+ viewportWidth: number;
49
+ viewportHeight: number;
50
+ atTop: boolean;
51
+ atEnd: boolean;
52
+ }
37
53
  export interface BrowserResult {
38
54
  ok: boolean;
55
+ /** Stable machine-readable outcome; detail remains for the model/user. */
56
+ code?: BrowserResultCode;
57
+ /** Whether repeating the same operation without a new observation can help. */
58
+ retryable?: boolean;
39
59
  /** Human-readable detail (error reason, or short success note). */
40
60
  detail?: string;
41
61
  /** True when a ref no longer resolves (DOM changed) → agent should re-snapshot. */
42
62
  staleRef?: boolean;
63
+ documentId?: string;
64
+ documentChanged?: boolean;
65
+ /** Present for scroll-like actions so callers can prove forward progress. */
66
+ scroll?: BrowserScrollState;
67
+ contentChanged?: boolean;
68
+ }
69
+ export interface BrowserReadOptions {
70
+ /** Opaque continuation returned by the previous read call. */
71
+ cursor?: string;
72
+ /** Requested chunk size; the driver clamps it to a safe maximum. */
73
+ maxChars?: number;
43
74
  }
44
75
  /** Result of reading the page's main textual content (扒内容). */
45
76
  export interface BrowserContent {
46
77
  ok: boolean;
47
78
  url: string;
48
79
  title?: string;
80
+ code?: BrowserResultCode;
81
+ documentId?: string;
49
82
  /** Extracted readable text (main content, scripts/styles/nav stripped). */
50
83
  text: string;
51
- /** True if the text was truncated to a cap. */
84
+ /** Cursor represented by this response (the first page uses an implicit start). */
85
+ cursor?: string;
86
+ /** Opaque cursor for the next chunk. Absent when done. */
87
+ nextCursor?: string;
88
+ /** True when the complete normalized document text has been consumed. */
89
+ done?: boolean;
90
+ /** Stable hash of the normalized full text for progress/deduplication. */
91
+ contentHash?: string;
92
+ scroll?: BrowserScrollState;
93
+ /** Compatibility alias for !done. */
52
94
  truncated?: boolean;
53
95
  detail?: string;
54
96
  }
@@ -109,7 +151,7 @@ export interface BrowserBridge {
109
151
  navigate(url: string): Promise<BrowserResult>;
110
152
  scroll(dir: "up" | "down", amount?: number): Promise<BrowserResult>;
111
153
  /** Read the page's main readable text content (for summarizing / extraction). */
112
- readContent(): Promise<BrowserContent>;
154
+ readContent(options?: BrowserReadOptions): Promise<BrowserContent>;
113
155
  /** Extract the page's hyperlink + image URLs (href/src the a11y tree omits). */
114
156
  extractLinks(): Promise<BrowserExtract>;
115
157
  /** Wait until the page finishes loading (or a timeout). */
@@ -1,16 +1,15 @@
1
1
  /**
2
2
  * BrowserBridge — driver-agnostic contract between the browser tools (core)
3
- * and whatever drives the actual browser (renderer's webview via CDP).
3
+ * and whatever drives the actual browser (a renderer webview, hidden main-
4
+ * process BrowserWindow, or external provider via CDP).
4
5
  *
5
6
  * Spec: docs/superpowers/specs/2026-06-16-browser-automation-mvp.md
6
7
  *
7
- * The core tools only know this interface. The renderer implements it on top
8
- * of the webview's `webContents.debugger` (CDP): observe via
9
- * Accessibility.getFullAXTree, act via DOM.getBoxModel Input.dispatchMouseEvent.
10
- * Keeping it driver-agnostic means a future implementation (a hidden
11
- * BrowserWindow for unattended runs, or an external engine) can swap in without
12
- * touching the tools. Undefined on ToolContext → headless / no panel → tools
13
- * degrade with a clear error.
8
+ * The core tools only know this interface. Desktop can implement it with a
9
+ * Playwright-owned context, Electron `webContents.debugger`, or an authorized
10
+ * Chrome-extension CDP transport. Keeping it driver-agnostic lets those targets
11
+ * swap without touching the tools. Undefined on ToolContext means the current
12
+ * host did not provide browser automation, so tools degrade with a clear error.
14
13
  */
15
14
  /** Roles we surface as actionable/meaningful to the agent. */
16
15
  const INTERACTIVE_ROLES = new Set([
@@ -69,7 +68,7 @@ export function flattenAxTree(nodes) {
69
68
  if (node.backendDOMNodeId === undefined)
70
69
  continue;
71
70
  const sensitive = propValue(node, "protected") === true || // ARIA "protected" → password-like
72
- role === "textbox" && /password|密码/i.test(name);
71
+ (role === "textbox" && /password|密码/i.test(name));
73
72
  counter += 1;
74
73
  const ref = `e${counter}`;
75
74
  refToBackendId[ref] = node.backendDOMNodeId;
@@ -21,13 +21,13 @@ export declare const DEFAULT_HEARTBEAT_INTERVAL_MS = 30000;
21
21
  export interface AgentHeartbeatConfig {
22
22
  intervalMs?: number;
23
23
  /** Sink for each heartbeat event (server forwards to the client). */
24
- publish: (sessionId: string, event: StreamEvent) => void;
24
+ publish?: (sessionId: string, event: StreamEvent) => void;
25
25
  /** Injectable clock for tests. */
26
26
  now?: () => number;
27
27
  }
28
28
  export declare class AgentHeartbeatPinger {
29
29
  private readonly intervalMs;
30
- private readonly publish;
30
+ private readonly publish?;
31
31
  private readonly now;
32
32
  private timer;
33
33
  constructor(config: AgentHeartbeatConfig);
@@ -16,7 +16,8 @@
16
16
  * Heartbeat.ts / chat-session-manager sweeper pattern.
17
17
  */
18
18
  import { asyncAgentRegistry } from "./agent-registry.js";
19
- import { agentNotificationBus } from "./agent-notifications.js";
19
+ import { notificationQueue } from "./agent-notifications.js";
20
+ import { initialAgentProgress } from "./agent-progress.js";
20
21
  /** Default 30s — user-chosen. Stale threshold downstream is 3× (90s). */
21
22
  export const DEFAULT_HEARTBEAT_INTERVAL_MS = 30_000;
22
23
  export class AgentHeartbeatPinger {
@@ -56,20 +57,35 @@ export class AgentHeartbeatPinger {
56
57
  return;
57
58
  }
58
59
  const bySession = new Map();
60
+ const ts = this.now();
59
61
  for (const e of running) {
60
62
  // Background agents always carry their spawning sessionId; skip any
61
63
  // legacy/ad-hoc entry without one (can't address a heartbeat to nobody).
62
64
  if (!e.sessionId)
63
65
  continue;
66
+ if (!this.publish) {
67
+ notificationQueue.enqueue({
68
+ kind: "progress",
69
+ from: {
70
+ sessionId: e.childSessionId ?? e.agentId,
71
+ agentId: e.agentId,
72
+ authority: "agent",
73
+ },
74
+ to: { sessionId: e.sessionId, authority: "agent" },
75
+ delivery: "observe-only",
76
+ runtimeGeneration: e.runtimeGeneration,
77
+ payload: e.progress ?? initialAgentProgress(ts),
78
+ });
79
+ continue;
80
+ }
64
81
  const list = bySession.get(e.sessionId);
65
82
  if (list)
66
83
  list.push(e.agentId);
67
84
  else
68
85
  bySession.set(e.sessionId, [e.agentId]);
69
86
  }
70
- const ts = this.now();
71
87
  for (const [sessionId, agentIds] of bySession) {
72
- this.publish(sessionId, { type: "agent_heartbeat", agentIds, ts });
88
+ this.publish?.(sessionId, { type: "agent_heartbeat", agentIds, ts });
73
89
  }
74
90
  }
75
91
  }
@@ -79,9 +95,7 @@ export class AgentHeartbeatPinger {
79
95
  * event to the client). `ensureRunning()` is called when an agent backgrounds;
80
96
  * the pinger self-stops once no agent is running, so a fresh handoff re-arms it.
81
97
  */
82
- export const agentHeartbeatPinger = new AgentHeartbeatPinger({
83
- publish: (sessionId, event) => agentNotificationBus.publish(sessionId, event),
84
- });
98
+ export const agentHeartbeatPinger = new AgentHeartbeatPinger({});
85
99
  /** Start the shared pinger if not already ticking (idempotent). Call when an
86
100
  * agent enters the background. */
87
101
  export function ensureAgentHeartbeat() {
@@ -1,54 +1,120 @@
1
1
  import type { BackgroundAgentCompletedEvent, StreamEvent } from "../../types.js";
2
- /**
3
- * Background-agent completion notification queue.
4
- *
5
- * Mirrors Claude Code's `commandQueue` with `mode: 'task-notification'`. A
6
- * background sub-agent that finishes (completed | failed) enqueues an item
7
- * here; the UI layer subscribes and, when the main agent is idle, drains
8
- * the queue and submits the formatted XML as a new user turn so the LLM
9
- * sees the result. Sub-agent cancellation does NOT enqueue (user explicitly
10
- * stopped the agent; no follow-up needed). DriveAgent cancellation does enqueue
11
- * so a detached external CLI job never leaves the waiting session hanging.
12
- *
13
- * The result text lives only in this queue + the eventual user message —
14
- * not in `asyncAgentRegistry`. Registry stays metadata-only.
15
- *
16
- * Every enqueue must carry a sessionId. The B2 shim that allowed undefined
17
- * sessionId (a `__legacy__` bucket fallback) is gone — callers without a
18
- * session context (standalone tool tests) must mint a sessionId or use the
19
- * test helpers in `tests/` that do. At runtime, a bad sessionId (empty or
20
- * non-string, e.g. a caller bypassing the type via `as any`) is logged at
21
- * warn level and dropped — it does NOT touch the buckets or fire the bus.
22
- *
23
- * Listeners are still process-wide: any bucket change wakes every
24
- * subscriber, and each subscriber filters by sessionId when reading
25
- * `getSnapshot(sid)`. This matches `useSyncExternalStore`'s contract.
26
- *
27
- * Process-local singleton; same lifetime contract as `asyncAgentRegistry`.
28
- */
2
+ export type NotificationAuthority = "user" | "agent" | "system" | "policy";
3
+ export interface NotificationEndpoint {
4
+ sessionId: string;
5
+ agentId?: string;
6
+ authority: NotificationAuthority;
7
+ }
8
+ export type DirectionDelivery = "next-safe-point" | "interrupt-and-redrive";
9
+ export type ProgressDelivery = "observe-only";
10
+ export type ResultDelivery = "idle-drain";
11
+ export type AgentProgressPhase = "starting" | "model" | "tool" | "waiting-permission" | "compacting" | "finalizing";
12
+ export interface AgentProgressTokens {
13
+ prompt: number;
14
+ completion: number;
15
+ total: number;
16
+ }
17
+ export interface AgentProgressLastTool {
18
+ name: string;
19
+ state: "running" | "completed" | "failed" | "aborted";
20
+ startedAt?: number;
21
+ finishedAt?: number;
22
+ }
23
+ export interface DirectionPayload {
24
+ prompt: string;
25
+ origin: "agent_send_input";
26
+ }
27
+ export interface ProgressPayload {
28
+ phase: AgentProgressPhase;
29
+ lastTool?: AgentProgressLastTool;
30
+ tokens: AgentProgressTokens;
31
+ summary: string;
32
+ observedAt: number;
33
+ }
34
+ export interface ResultPayload {
35
+ workId: string;
36
+ name?: string;
37
+ description: string;
38
+ status: "completed" | "failed" | "cancelled";
39
+ workKind: "agent" | "shell" | "video" | "cc";
40
+ finalText?: string;
41
+ error?: string;
42
+ command?: string;
43
+ ccSessionId?: string;
44
+ changedFiles?: string[];
45
+ cwd?: string;
46
+ originClientMessageId?: string;
47
+ finishedAt: number;
48
+ }
49
+ interface NotificationEnvelopeBase<K extends "direction" | "progress" | "result", D extends DirectionDelivery | ProgressDelivery | ResultDelivery, P> {
50
+ schemaVersion: 1;
51
+ id: string;
52
+ kind: K;
53
+ from: NotificationEndpoint;
54
+ to: NotificationEndpoint;
55
+ teamId?: string;
56
+ correlationId?: string;
57
+ /** Fences process-local agent runtime generations; trusted producers only. */
58
+ runtimeGeneration?: number;
59
+ sequence: number;
60
+ delivery: D;
61
+ createdAt: number;
62
+ payload: P;
63
+ /** Deprecated read-only aliases kept for one compatibility window. */
64
+ readonly agentId?: string;
65
+ readonly name?: string;
66
+ readonly description?: string;
67
+ readonly status?: "completed" | "failed" | "cancelled";
68
+ readonly workKind?: "agent" | "shell" | "video" | "cc";
69
+ readonly command?: string;
70
+ readonly finalText?: string;
71
+ readonly ccSessionId?: string;
72
+ readonly error?: string;
73
+ readonly changedFiles?: string[];
74
+ readonly cwd?: string;
75
+ readonly originClientMessageId?: string;
76
+ readonly enqueuedAt?: number;
77
+ }
78
+ export type DirectionEnvelope = NotificationEnvelopeBase<"direction", DirectionDelivery, DirectionPayload>;
79
+ export type ProgressEnvelope = NotificationEnvelopeBase<"progress", ProgressDelivery, ProgressPayload>;
80
+ export type ResultEnvelope = NotificationEnvelopeBase<"result", ResultDelivery, ResultPayload> & {
81
+ readonly agentId: string;
82
+ readonly description: string;
83
+ readonly status: "completed" | "failed" | "cancelled";
84
+ readonly enqueuedAt: number;
85
+ };
86
+ export type NotificationEnvelope = DirectionEnvelope | ProgressEnvelope | ResultEnvelope;
87
+ export type DirectionEnvelopeDraft = Omit<DirectionEnvelope, "schemaVersion" | "id" | "sequence" | "createdAt" | "agentId" | "name" | "description" | "status" | "workKind" | "command" | "finalText" | "ccSessionId" | "error" | "changedFiles" | "cwd" | "originClientMessageId" | "enqueuedAt">;
88
+ export type ProgressEnvelopeDraft = Omit<ProgressEnvelope, "schemaVersion" | "id" | "sequence" | "createdAt" | "agentId" | "name" | "description" | "status" | "workKind" | "command" | "finalText" | "ccSessionId" | "error" | "changedFiles" | "cwd" | "originClientMessageId" | "enqueuedAt">;
89
+ export type ResultEnvelopeDraft = Omit<ResultEnvelope, "schemaVersion" | "id" | "sequence" | "createdAt" | "agentId" | "name" | "description" | "status" | "workKind" | "command" | "finalText" | "ccSessionId" | "error" | "changedFiles" | "cwd" | "originClientMessageId" | "enqueuedAt">;
90
+ export type NotificationEnvelopeDraft = DirectionEnvelopeDraft | ProgressEnvelopeDraft | ResultEnvelopeDraft;
91
+ export type DirectionRejectReason = "invalid-request" | "target-not-found" | "target-not-running" | "target-not-ready" | "not-direct-parent" | "cross-session" | "team-not-supported" | "runtime-generation-mismatch" | "intake-closed";
92
+ export type DirectionAck = {
93
+ status: "queued" | "delivered" | "interrupted";
94
+ envelopeId: string;
95
+ sequence: number;
96
+ correlationId?: string;
97
+ target: NotificationEndpoint;
98
+ acceptedAt: number;
99
+ } | {
100
+ status: "rejected";
101
+ reason: DirectionRejectReason;
102
+ target?: NotificationEndpoint;
103
+ rejectedAt: number;
104
+ };
105
+ /** Deprecated producer shape. Queue storage is always NotificationEnvelope. */
29
106
  export type NotificationItem = {
30
107
  agentId: string;
31
108
  name?: string;
32
109
  description: string;
33
110
  status: "completed" | "failed" | "cancelled";
34
- /** What kind of background work this was (lets UIs localize the toast). */
35
111
  workKind?: "agent" | "shell" | "video" | "cc";
36
- /** For workKind === "shell": the command that ran. */
37
112
  command?: string;
38
- /** Final assistant text (completed only). */
39
113
  finalText?: string;
40
- /** For workKind === "cc": the external claude session id this drove, so the
41
- * result is recoverable from ~/.claude/projects/.../<ccSessionId>.jsonl even
42
- * if this notification is lost, and the user sees a real session id (not just
43
- * an opaque background jobId). */
44
114
  ccSessionId?: string;
45
- /** Error message (failed/cancelled only). */
46
115
  error?: string;
47
- /** Files attributed to an external DriveAgent transcript. */
48
116
  changedFiles?: string[];
49
- /** DriveAgent cwd used to canonicalize path aliases in clients. */
50
117
  cwd?: string;
51
- /** Client id of the real user turn that launched this background work. */
52
118
  originClientMessageId?: string;
53
119
  enqueuedAt: number;
54
120
  };
@@ -56,45 +122,34 @@ type Listener = () => void;
56
122
  declare class NotificationQueue {
57
123
  private buckets;
58
124
  private listeners;
59
- enqueue(item: NotificationItem, sessionId: string): void;
60
- subscribe: (cb: Listener) => (() => void);
61
- getSnapshot: (sessionId: string) => readonly NotificationItem[];
62
- /** Atomic: returns all items for a session and clears that bucket. */
63
- drainAll(sessionId: string): NotificationItem[];
64
- /**
65
- * Clear one bucket (sessionId given) or every bucket (no arg). Used by
66
- * tests; production code drains per-session through `drainAll`.
67
- */
125
+ private sequences;
126
+ private sequenceRoutes;
127
+ private readonly maxSequenceRoutes;
128
+ enqueue(draft: NotificationEnvelopeDraft): NotificationEnvelope | undefined;
129
+ enqueue(item: NotificationItem, sessionId: string): ResultEnvelope | undefined;
130
+ subscribe: (listener: Listener) => (() => void);
131
+ getSnapshot: (sessionId: string) => readonly NotificationEnvelope[];
132
+ drain(sessionId: string, predicate: (envelope: NotificationEnvelope) => boolean): NotificationEnvelope[];
133
+ /** Compatibility consumer: only terminal results, never direction/progress. */
134
+ drainAll(sessionId: string): ResultEnvelope[];
135
+ clearProgress(sessionId: string, agentId: string, runtimeGeneration?: number): boolean;
136
+ clearDirections(sessionId: string, runtimeGeneration: number): boolean;
68
137
  reset(sessionId?: string): void;
69
138
  private notify;
70
139
  }
71
- export declare const notificationQueue: NotificationQueue;
72
- type BusHandler = (sessionId: string, event: StreamEvent) => void;
140
+ type EnvelopeBusHandler = (envelope: NotificationEnvelope) => void;
141
+ type LegacyBusHandler = (sessionId: string, event: StreamEvent) => void;
73
142
  declare class AgentNotificationBus {
74
143
  private handlers;
75
- publish(sessionId: string, event: StreamEvent): void;
76
- subscribe(handler: BusHandler): () => void;
144
+ publish(envelope: NotificationEnvelope): void;
145
+ subscribe(handler: EnvelopeBusHandler): () => void;
146
+ subscribe(handler: LegacyBusHandler): () => void;
77
147
  }
78
148
  export declare const agentNotificationBus: AgentNotificationBus;
79
- /**
80
- * Project a queue item to its protocol-event shape. The two types are
81
- * field-compatible by design (see the comment on BackgroundAgentCompletedEvent
82
- * in types.ts) so this is essentially an identity tag.
83
- */
84
- export declare function notificationItemToStreamEvent(item: NotificationItem): BackgroundAgentCompletedEvent;
85
- /**
86
- * Render a batch of completion notifications as the XML user-message
87
- * body that the main agent's LLM will see. Format is stable — main
88
- * agent prompts can rely on the `<background-agents-completed>` root
89
- * tag as a signal that this turn is a system-injected notification,
90
- * not a real user message.
91
- */
92
- export declare function buildNotificationMessage(items: readonly NotificationItem[]): string;
93
- /**
94
- * One-line-per-agent human summary for the chat feed. The full result
95
- * body goes to the LLM via buildNotificationMessage; the user sees only
96
- * this terse marker plus an optional inline error preview, and can
97
- * switch to the sub-agent's dock view if they want details.
98
- */
99
- export declare function buildNotificationSummary(items: readonly NotificationItem[]): string;
149
+ export declare const notificationQueue: NotificationQueue;
150
+ export declare function buildAgentDirectionMessage(envelopes: readonly DirectionEnvelope[]): string;
151
+ export declare function notificationItemToStreamEvent(value: NotificationItem | ResultEnvelope): BackgroundAgentCompletedEvent;
152
+ export declare function notificationEnvelopeToLegacyStreamEvent(envelope: NotificationEnvelope): StreamEvent | undefined;
153
+ export declare function buildNotificationMessage(values: readonly (NotificationItem | ResultEnvelope)[]): string;
154
+ export declare function buildNotificationSummary(values: readonly (NotificationItem | ResultEnvelope)[]): string;
100
155
  export {};