@cjhyy/code-shell-core 0.7.1 → 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 (594) 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 +7 -3
  23. package/dist/context/compaction.d.ts +39 -3
  24. package/dist/context/compaction.js +151 -39
  25. package/dist/context/manager.d.ts +17 -1
  26. package/dist/context/manager.js +36 -1
  27. package/dist/credentials/access.d.ts +3 -1
  28. package/dist/credentials/access.js +24 -3
  29. package/dist/credentials/index.d.ts +1 -1
  30. package/dist/credentials/index.js +1 -1
  31. package/dist/credentials/oauth.d.ts +4 -1
  32. package/dist/credentials/oauth.js +14 -0
  33. package/dist/credentials/store.d.ts +15 -1
  34. package/dist/credentials/store.js +17 -4
  35. package/dist/credentials/types.d.ts +24 -0
  36. package/dist/credentials/use-credential-tool.js +15 -1
  37. package/dist/engine/auxiliary-pipeline.d.ts +40 -0
  38. package/dist/engine/auxiliary-pipeline.js +181 -0
  39. package/dist/{settings → engine}/disk-defaults.d.ts +2 -2
  40. package/dist/{settings → engine}/disk-defaults.js +5 -2
  41. package/dist/engine/dynamic-tool-defs.d.ts +4 -0
  42. package/dist/engine/dynamic-tool-defs.js +4 -0
  43. package/dist/engine/engine.d.ts +254 -195
  44. package/dist/engine/engine.js +1812 -2041
  45. package/dist/engine/file-history-hook.d.ts +11 -0
  46. package/dist/engine/file-history-hook.js +31 -0
  47. package/dist/engine/goal-judge-context.d.ts +9 -0
  48. package/dist/engine/goal-judge-context.js +234 -0
  49. package/dist/engine/injected-context-cache.d.ts +6 -0
  50. package/dist/engine/injected-context-cache.js +13 -0
  51. package/dist/engine/input-attachments.d.ts +1 -1
  52. package/dist/engine/model-facade.d.ts +3 -3
  53. package/dist/engine/model-facade.js +15 -14
  54. package/dist/engine/permission-controller.d.ts +55 -0
  55. package/dist/engine/permission-controller.js +148 -0
  56. package/dist/engine/prompt-cache-diagnostics.d.ts +58 -0
  57. package/dist/engine/prompt-cache-diagnostics.js +178 -0
  58. package/dist/engine/run-accounting.d.ts +41 -0
  59. package/dist/engine/run-accounting.js +126 -0
  60. package/dist/engine/run-context.d.ts +44 -0
  61. package/dist/engine/run-context.js +88 -0
  62. package/dist/engine/run-environment.d.ts +30 -0
  63. package/dist/engine/run-environment.js +77 -0
  64. package/dist/engine/run-finalize.d.ts +58 -0
  65. package/dist/engine/run-finalize.js +245 -0
  66. package/dist/engine/run-goal.d.ts +58 -0
  67. package/dist/engine/run-goal.js +188 -0
  68. package/dist/engine/run-image-input.d.ts +1 -1
  69. package/dist/engine/run-image-input.js +5 -3
  70. package/dist/engine/run-session-open.d.ts +41 -0
  71. package/dist/engine/run-session-open.js +186 -0
  72. package/dist/engine/run-setup.d.ts +42 -0
  73. package/dist/engine/run-setup.js +58 -0
  74. package/dist/engine/run-tooling.d.ts +125 -0
  75. package/dist/engine/run-tooling.js +283 -0
  76. package/dist/engine/run-types.d.ts +139 -0
  77. package/dist/engine/run-types.js +12 -0
  78. package/dist/engine/run-workspace.d.ts +50 -0
  79. package/dist/engine/run-workspace.js +114 -0
  80. package/dist/engine/steer-queue.d.ts +1 -1
  81. package/dist/engine/subagent-spawner.d.ts +32 -0
  82. package/dist/engine/subagent-spawner.js +287 -0
  83. package/dist/engine/tool-summary.d.ts +2 -2
  84. package/dist/engine/tool-summary.js +2 -2
  85. package/dist/engine/turn-loop.d.ts +49 -10
  86. package/dist/engine/turn-loop.js +370 -104
  87. package/dist/engine/types.d.ts +30 -3
  88. package/dist/engine/types.js +1 -1
  89. package/dist/{engine/goal.d.ts → goal/lifecycle.d.ts} +76 -4
  90. package/dist/goal/lifecycle.js +482 -0
  91. package/dist/hooks/events.d.ts +24 -10
  92. package/dist/hooks/goal-stop-hook.d.ts +17 -28
  93. package/dist/hooks/goal-stop-hook.js +110 -465
  94. package/dist/hooks/registry.js +1 -1
  95. package/dist/index.d.ts +48 -108
  96. package/dist/index.extension.d.ts +51 -0
  97. package/dist/index.extension.js +39 -0
  98. package/dist/index.internal.d.ts +86 -0
  99. package/dist/index.internal.js +92 -0
  100. package/dist/index.js +34 -123
  101. package/dist/links/cli.d.ts +48 -0
  102. package/dist/links/cli.js +617 -0
  103. package/dist/links/http.d.ts +40 -0
  104. package/dist/links/http.js +166 -0
  105. package/dist/links/index.d.ts +4 -0
  106. package/dist/links/index.js +3 -0
  107. package/dist/links/link-action-tool.d.ts +5 -0
  108. package/dist/links/link-action-tool.js +241 -0
  109. package/dist/links/providers.d.ts +8 -0
  110. package/dist/links/providers.js +665 -0
  111. package/dist/links/types.d.ts +44 -0
  112. package/dist/llm/client-base.d.ts +7 -0
  113. package/dist/llm/client-base.js +60 -0
  114. package/dist/llm/model-pool.d.ts +1 -1
  115. package/dist/llm/model-pool.js +1 -1
  116. package/dist/llm/providers/anthropic.d.ts +1 -0
  117. package/dist/llm/providers/anthropic.js +9 -0
  118. package/dist/llm/providers/openai.d.ts +1 -0
  119. package/dist/llm/providers/openai.js +17 -0
  120. package/dist/model-catalog/index.js +15 -2
  121. package/dist/model-catalog/resolve.d.ts +13 -1
  122. package/dist/model-catalog/resolve.js +37 -2
  123. package/dist/model-catalog/types.d.ts +74 -48
  124. package/dist/model-catalog/types.js +16 -5
  125. package/dist/model-catalog/upsert.d.ts +3 -1
  126. package/dist/model-catalog/upsert.js +9 -0
  127. package/dist/onboarding.d.ts +0 -1
  128. package/dist/onboarding.js +1 -22
  129. package/dist/panel-apps/bindings.d.ts +24 -0
  130. package/dist/panel-apps/bindings.js +69 -0
  131. package/dist/panel-apps/github-archive.d.ts +21 -0
  132. package/dist/panel-apps/github-archive.js +98 -0
  133. package/dist/panel-apps/index.d.ts +4 -0
  134. package/dist/panel-apps/index.js +4 -0
  135. package/dist/panel-apps/installer.d.ts +68 -0
  136. package/dist/panel-apps/installer.js +622 -0
  137. package/dist/panel-apps/manifest.d.ts +364 -0
  138. package/dist/panel-apps/manifest.js +189 -0
  139. package/dist/panel-apps/paths.d.ts +13 -0
  140. package/dist/panel-apps/paths.js +38 -0
  141. package/dist/panel-apps/registry.d.ts +51 -0
  142. package/dist/panel-apps/registry.js +99 -0
  143. package/dist/panel-apps/runtime.d.ts +80 -0
  144. package/dist/panel-apps/runtime.js +154 -0
  145. package/dist/plugins/gitOps.js +8 -1
  146. package/dist/plugins/installedPlugins.d.ts +2 -1
  147. package/dist/plugins/installedPlugins.js +146 -8
  148. package/dist/plugins/installer/codex/convertAgents.d.ts +4 -1
  149. package/dist/plugins/installer/codex/convertAgents.js +62 -8
  150. package/dist/plugins/installer/codex/convertCommands.d.ts +5 -5
  151. package/dist/plugins/installer/codex/convertCommands.js +35 -12
  152. package/dist/plugins/installer/codex/convertHooks.d.ts +10 -0
  153. package/dist/plugins/installer/codex/convertHooks.js +82 -0
  154. package/dist/plugins/installer/codex/convertSkills.js +41 -6
  155. package/dist/plugins/installer/install.d.ts +7 -1
  156. package/dist/plugins/installer/install.js +21 -87
  157. package/dist/plugins/installer/installFromArchive.d.ts +26 -4
  158. package/dist/plugins/installer/installFromArchive.js +44 -27
  159. package/dist/plugins/installer/installFromNpm.d.ts +31 -0
  160. package/dist/plugins/installer/installFromNpm.js +273 -0
  161. package/dist/plugins/installer/loadPluginAgents.js +17 -4
  162. package/dist/plugins/installer/loadPluginMcp.d.ts +14 -0
  163. package/dist/plugins/installer/loadPluginMcp.js +245 -35
  164. package/dist/plugins/installer/normalizeManifest.d.ts +13 -0
  165. package/dist/plugins/installer/normalizeManifest.js +306 -0
  166. package/dist/plugins/installer/npmTar.d.ts +13 -0
  167. package/dist/plugins/installer/npmTar.js +321 -0
  168. package/dist/plugins/installer/parseSource.d.ts +11 -0
  169. package/dist/plugins/installer/parseSource.js +48 -0
  170. package/dist/plugins/installer/preview.d.ts +101 -0
  171. package/dist/plugins/installer/preview.js +336 -0
  172. package/dist/plugins/installer/projectPluginSource.d.ts +14 -0
  173. package/dist/plugins/installer/projectPluginSource.js +140 -0
  174. package/dist/plugins/installer/types.d.ts +775 -0
  175. package/dist/plugins/installer/types.js +100 -0
  176. package/dist/plugins/installer/unzip.d.ts +11 -0
  177. package/dist/plugins/installer/unzip.js +123 -9
  178. package/dist/plugins/installer/update.d.ts +2 -2
  179. package/dist/plugins/installer/update.js +43 -4
  180. package/dist/plugins/loadPluginHooks.d.ts +19 -2
  181. package/dist/plugins/loadPluginHooks.js +97 -86
  182. package/dist/plugins/pluginAutomationTemplates.d.ts +18 -0
  183. package/dist/plugins/pluginAutomationTemplates.js +50 -0
  184. package/dist/plugins/pluginCatalog.d.ts +45 -0
  185. package/dist/plugins/pluginCatalog.js +87 -0
  186. package/dist/plugins/pluginCommandHook.d.ts +6 -0
  187. package/dist/plugins/pluginCommandHook.js +25 -8
  188. package/dist/plugins/pluginCommandsLoader.d.ts +19 -0
  189. package/dist/plugins/pluginCommandsLoader.js +181 -7
  190. package/dist/plugins/pluginContent.d.ts +10 -1
  191. package/dist/plugins/pluginContent.js +87 -30
  192. package/dist/plugins/pluginHookApproval.d.ts +30 -0
  193. package/dist/plugins/pluginHookApproval.js +160 -0
  194. package/dist/plugins/pluginHookIntegrity.d.ts +69 -0
  195. package/dist/plugins/pluginHookIntegrity.js +361 -0
  196. package/dist/plugins/pluginInstaller.js +71 -12
  197. package/dist/plugins/pluginMcpApproval.d.ts +19 -0
  198. package/dist/plugins/pluginMcpApproval.js +110 -0
  199. package/dist/plugins/pluginMcpIntegrity.d.ts +21 -0
  200. package/dist/plugins/pluginMcpIntegrity.js +74 -0
  201. package/dist/plugins/types.d.ts +30 -0
  202. package/dist/plugins/varRewrite.d.ts +9 -5
  203. package/dist/plugins/varRewrite.js +26 -17
  204. package/dist/preset/index.d.ts +11 -8
  205. package/dist/preset/index.js +62 -203
  206. package/dist/product/define.js +9 -3
  207. package/dist/product/types.d.ts +0 -2
  208. package/dist/profile/activation.d.ts +36 -0
  209. package/dist/profile/activation.js +57 -0
  210. package/dist/profile/catalog-store.d.ts +77 -0
  211. package/dist/profile/catalog-store.js +346 -0
  212. package/dist/profile/catalog.d.ts +54 -0
  213. package/dist/profile/catalog.js +152 -0
  214. package/dist/profile/index.d.ts +7 -0
  215. package/dist/profile/index.js +7 -0
  216. package/dist/profile/requirements.d.ts +76 -0
  217. package/dist/profile/requirements.js +117 -0
  218. package/dist/profile/resolve.d.ts +11 -0
  219. package/dist/profile/resolve.js +41 -0
  220. package/dist/profile/store.d.ts +17 -0
  221. package/dist/profile/store.js +167 -0
  222. package/dist/profile/types.d.ts +321 -0
  223. package/dist/profile/types.js +104 -0
  224. package/dist/prompt/composer.d.ts +46 -7
  225. package/dist/prompt/composer.js +78 -48
  226. package/dist/prompt/instruction-scanner.d.ts +6 -5
  227. package/dist/prompt/instruction-scanner.js +8 -23
  228. package/dist/prompt/section-loader.d.ts +2 -2
  229. package/dist/prompt/section-loader.js +7 -4
  230. package/dist/prompt/sections/browser.md +10 -9
  231. package/dist/prompt/sections/harness-base.md +9 -0
  232. package/dist/protocol/chat-session-manager.d.ts +64 -1
  233. package/dist/protocol/chat-session-manager.js +104 -0
  234. package/dist/protocol/chat-session.d.ts +61 -10
  235. package/dist/protocol/chat-session.js +135 -25
  236. package/dist/protocol/client.d.ts +33 -3
  237. package/dist/protocol/client.js +96 -5
  238. package/dist/protocol/index.d.ts +2 -2
  239. package/dist/protocol/index.js +2 -2
  240. package/dist/protocol/mobile-remote-types.d.ts +406 -0
  241. package/dist/protocol/mobile-remote-types.js +1 -0
  242. package/dist/protocol/server.d.ts +127 -3
  243. package/dist/protocol/server.js +1309 -182
  244. package/dist/protocol/types.d.ts +152 -34
  245. package/dist/protocol/types.js +16 -0
  246. package/dist/run/ArtifactTracker.d.ts +6 -1
  247. package/dist/run/ArtifactTracker.js +29 -21
  248. package/dist/run/EngineRunner.d.ts +2 -0
  249. package/dist/run/EngineRunner.js +1 -0
  250. package/dist/run/RunManager.d.ts +26 -0
  251. package/dist/run/RunManager.js +82 -11
  252. package/dist/run/factory.d.ts +3 -0
  253. package/dist/run/factory.js +2 -0
  254. package/dist/runtime/safe-spawn.d.ts +6 -0
  255. package/dist/runtime/safe-spawn.js +8 -13
  256. package/dist/services/auto-dream.d.ts +13 -1
  257. package/dist/services/auto-dream.js +56 -8
  258. package/dist/services/dream-consolidation.js +10 -1
  259. package/dist/services/memory-orchestrator.js +6 -2
  260. package/dist/services/oauth.js +4 -1
  261. package/dist/services/session-memory.d.ts +4 -4
  262. package/dist/services/session-memory.js +13 -10
  263. package/dist/session/memory.d.ts +26 -7
  264. package/dist/session/memory.js +79 -21
  265. package/dist/session/session-manager.d.ts +182 -28
  266. package/dist/session/session-manager.js +910 -130
  267. package/dist/session/session-message.d.ts +22 -0
  268. package/dist/session/session-message.js +1 -0
  269. package/dist/session/transcript.d.ts +46 -5
  270. package/dist/session/transcript.js +159 -3
  271. package/dist/settings/feature-flags.d.ts +40 -0
  272. package/dist/settings/feature-flags.js +40 -0
  273. package/dist/settings/manager.d.ts +39 -1
  274. package/dist/settings/manager.js +102 -41
  275. package/dist/settings/migrate-config.js +4 -2
  276. package/dist/settings/schema.d.ts +511 -177
  277. package/dist/settings/schema.js +98 -25
  278. package/dist/skills/scanner.d.ts +6 -2
  279. package/dist/skills/scanner.js +160 -9
  280. package/dist/sources/adapter.d.ts +14 -0
  281. package/dist/sources/adapter.js +7 -0
  282. package/dist/sources/adapters/local-files.d.ts +10 -0
  283. package/dist/sources/adapters/local-files.js +127 -0
  284. package/dist/sources/adapters/mcp-resource.d.ts +17 -0
  285. package/dist/sources/adapters/mcp-resource.js +41 -0
  286. package/dist/sources/adapters/mock.d.ts +3 -0
  287. package/dist/sources/adapters/mock.js +29 -0
  288. package/dist/sources/binding.d.ts +6 -0
  289. package/dist/sources/binding.js +24 -0
  290. package/dist/sources/catalog.d.ts +6 -0
  291. package/dist/sources/catalog.js +64 -0
  292. package/dist/sources/context-summary.d.ts +8 -0
  293. package/dist/sources/context-summary.js +13 -0
  294. package/dist/sources/credential-status.d.ts +2 -0
  295. package/dist/sources/credential-status.js +13 -0
  296. package/dist/sources/index.d.ts +10 -0
  297. package/dist/sources/index.js +10 -0
  298. package/dist/sources/resolve.d.ts +28 -0
  299. package/dist/sources/resolve.js +47 -0
  300. package/dist/sources/truncate-utf8.d.ts +7 -0
  301. package/dist/sources/truncate-utf8.js +18 -0
  302. package/dist/sources/types.d.ts +71 -0
  303. package/dist/sources/types.js +26 -0
  304. package/dist/testing/fetch-stub.d.ts +32 -0
  305. package/dist/testing/fetch-stub.js +24 -0
  306. package/dist/themes/image.d.ts +18 -0
  307. package/dist/themes/image.js +117 -0
  308. package/dist/themes/index.d.ts +4 -0
  309. package/dist/themes/index.js +4 -0
  310. package/dist/themes/installer.d.ts +50 -0
  311. package/dist/themes/installer.js +290 -0
  312. package/dist/themes/manifest.d.ts +102 -0
  313. package/dist/themes/manifest.js +86 -0
  314. package/dist/themes/paths.d.ts +14 -0
  315. package/dist/themes/paths.js +33 -0
  316. package/dist/tool-system/browser-bridge.d.ts +53 -11
  317. package/dist/tool-system/browser-bridge.js +8 -9
  318. package/dist/tool-system/builtin/agent-heartbeat.d.ts +2 -2
  319. package/dist/tool-system/builtin/agent-heartbeat.js +20 -6
  320. package/dist/tool-system/builtin/agent-notifications.d.ts +127 -72
  321. package/dist/tool-system/builtin/agent-notifications.js +291 -101
  322. package/dist/tool-system/builtin/agent-output-file.js +1 -3
  323. package/dist/tool-system/builtin/agent-progress.d.ts +6 -0
  324. package/dist/tool-system/builtin/agent-progress.js +83 -0
  325. package/dist/tool-system/builtin/agent-registry.d.ts +38 -2
  326. package/dist/tool-system/builtin/agent-registry.js +178 -9
  327. package/dist/tool-system/builtin/agent-transcript-translator.js +1 -1
  328. package/dist/tool-system/builtin/agent.d.ts +2 -0
  329. package/dist/tool-system/builtin/agent.js +274 -33
  330. package/dist/tool-system/builtin/background-jobs.d.ts +55 -2
  331. package/dist/tool-system/builtin/background-jobs.js +96 -4
  332. package/dist/tool-system/builtin/background-work.d.ts +6 -0
  333. package/dist/tool-system/builtin/background-work.js +8 -1
  334. package/dist/tool-system/builtin/bash.js +5 -2
  335. package/dist/tool-system/builtin/browser-tools.d.ts +6 -3
  336. package/dist/tool-system/builtin/browser-tools.js +89 -23
  337. package/dist/tool-system/builtin/edit-model-catalog.d.ts +6 -0
  338. package/dist/tool-system/builtin/edit-model-catalog.js +172 -12
  339. package/dist/tool-system/builtin/edit.js +2 -6
  340. package/dist/tool-system/builtin/file-cache.d.ts +2 -0
  341. package/dist/tool-system/builtin/file-cache.js +4 -0
  342. package/dist/tool-system/builtin/generate-image.js +17 -10
  343. package/dist/tool-system/builtin/generate-video.js +26 -7
  344. package/dist/tool-system/builtin/grep.js +2 -2
  345. package/dist/tool-system/builtin/image-uploader.js +7 -1
  346. package/dist/tool-system/builtin/index.d.ts +32 -7
  347. package/dist/tool-system/builtin/index.js +237 -167
  348. package/dist/tool-system/builtin/memory.d.ts +6 -0
  349. package/dist/tool-system/builtin/memory.js +36 -15
  350. package/dist/tool-system/builtin/panel.d.ts +9 -0
  351. package/dist/tool-system/builtin/panel.js +314 -0
  352. package/dist/tool-system/builtin/read.js +5 -1
  353. package/dist/tool-system/builtin/send-message-to-session.d.ts +6 -0
  354. package/dist/tool-system/builtin/send-message-to-session.js +67 -0
  355. package/dist/tool-system/builtin/sources.d.ts +8 -0
  356. package/dist/tool-system/builtin/sources.js +137 -0
  357. package/dist/tool-system/builtin/tool-search.js +7 -2
  358. package/dist/tool-system/builtin/update-automation-memory.js +2 -0
  359. package/dist/tool-system/builtin/web-fetch.js +17 -13
  360. package/dist/tool-system/builtin/web-search.js +1 -3
  361. package/dist/tool-system/capability-module.d.ts +93 -0
  362. package/dist/tool-system/capability-module.js +53 -0
  363. package/dist/tool-system/context.d.ts +77 -19
  364. package/dist/tool-system/executor.js +75 -50
  365. package/dist/tool-system/external-tool-exposure.d.ts +60 -0
  366. package/dist/tool-system/external-tool-exposure.js +304 -0
  367. package/dist/tool-system/mcp-manager.d.ts +11 -1
  368. package/dist/tool-system/mcp-manager.js +19 -4
  369. package/dist/tool-system/mcp-tool-policy.d.ts +9 -0
  370. package/dist/tool-system/mcp-tool-policy.js +34 -0
  371. package/dist/tool-system/panel-bridge.d.ts +53 -0
  372. package/dist/tool-system/panel-bridge.js +1 -0
  373. package/dist/tool-system/permission.d.ts +26 -0
  374. package/dist/tool-system/permission.js +46 -0
  375. package/dist/tool-system/registry.d.ts +12 -1
  376. package/dist/tool-system/registry.js +31 -7
  377. package/dist/tool-system/sandbox/index.js +3 -8
  378. package/dist/tool-system/sandbox/seatbelt.js +2 -6
  379. package/dist/tool-system/session-tool-host.d.ts +139 -0
  380. package/dist/tool-system/session-tool-host.js +167 -0
  381. package/dist/tool-system/testing/tool-registry-harness.d.ts +31 -0
  382. package/dist/tool-system/testing/tool-registry-harness.js +51 -0
  383. package/dist/tool-system/validation.d.ts +14 -7
  384. package/dist/tool-system/validation.js +701 -7
  385. package/dist/types.d.ts +186 -20
  386. package/dist/{cc-orchestrator → utils}/cwd-normalize.d.ts +1 -0
  387. package/dist/{cc-orchestrator → utils}/cwd-normalize.js +1 -0
  388. package/dist/utils/file-mutex.d.ts +65 -0
  389. package/dist/utils/file-mutex.js +145 -0
  390. package/dist/utils/json.d.ts +2 -4
  391. package/dist/utils/json.js +2 -4
  392. package/dist/utils/lockfile.d.ts +30 -1
  393. package/dist/utils/lockfile.js +2 -2
  394. package/dist/utils/secret-scrubber.d.ts +8 -0
  395. package/dist/utils/secret-scrubber.js +227 -0
  396. package/dist/utils/toolDisplay.js +1 -1
  397. package/package.json +20 -5
  398. package/THIRD_PARTY_NOTICES.md +0 -206
  399. package/dist/arena/arena.d.ts +0 -45
  400. package/dist/arena/arena.js +0 -362
  401. package/dist/arena/context/context-tools.d.ts +0 -16
  402. package/dist/arena/context/context-tools.js +0 -272
  403. package/dist/arena/context/within-root.d.ts +0 -7
  404. package/dist/arena/context/within-root.js +0 -15
  405. package/dist/arena/detect-mode.d.ts +0 -20
  406. package/dist/arena/detect-mode.js +0 -78
  407. package/dist/arena/digest-builder.d.ts +0 -25
  408. package/dist/arena/digest-builder.js +0 -120
  409. package/dist/arena/index.d.ts +0 -29
  410. package/dist/arena/index.js +0 -29
  411. package/dist/arena/iterate/convergence.d.ts +0 -25
  412. package/dist/arena/iterate/convergence.js +0 -103
  413. package/dist/arena/iterate/formats/index.d.ts +0 -22
  414. package/dist/arena/iterate/formats/index.js +0 -283
  415. package/dist/arena/iterate/index.d.ts +0 -11
  416. package/dist/arena/iterate/index.js +0 -9
  417. package/dist/arena/iterate/iterative-arena.d.ts +0 -23
  418. package/dist/arena/iterate/iterative-arena.js +0 -237
  419. package/dist/arena/iterate/parse.d.ts +0 -42
  420. package/dist/arena/iterate/parse.js +0 -123
  421. package/dist/arena/iterate/phases/argue.d.ts +0 -22
  422. package/dist/arena/iterate/phases/argue.js +0 -165
  423. package/dist/arena/iterate/phases/revise.d.ts +0 -16
  424. package/dist/arena/iterate/phases/revise.js +0 -62
  425. package/dist/arena/iterate/phases/tournament.d.ts +0 -34
  426. package/dist/arena/iterate/phases/tournament.js +0 -113
  427. package/dist/arena/iterate/tools/web-tools.d.ts +0 -13
  428. package/dist/arena/iterate/tools/web-tools.js +0 -54
  429. package/dist/arena/iterate/types.d.ts +0 -152
  430. package/dist/arena/iterate/types.js +0 -8
  431. package/dist/arena/ledger.d.ts +0 -47
  432. package/dist/arena/ledger.js +0 -159
  433. package/dist/arena/lenses/architecture.d.ts +0 -5
  434. package/dist/arena/lenses/architecture.js +0 -22
  435. package/dist/arena/lenses/engineering.d.ts +0 -5
  436. package/dist/arena/lenses/engineering.js +0 -22
  437. package/dist/arena/lenses/general.d.ts +0 -5
  438. package/dist/arena/lenses/general.js +0 -20
  439. package/dist/arena/lenses/index.d.ts +0 -16
  440. package/dist/arena/lenses/index.js +0 -47
  441. package/dist/arena/lenses/product.d.ts +0 -5
  442. package/dist/arena/lenses/product.js +0 -22
  443. package/dist/arena/model-presets.d.ts +0 -23
  444. package/dist/arena/model-presets.js +0 -44
  445. package/dist/arena/phases/adjudication.d.ts +0 -25
  446. package/dist/arena/phases/adjudication.js +0 -142
  447. package/dist/arena/phases/build-consensus.d.ts +0 -30
  448. package/dist/arena/phases/build-consensus.js +0 -85
  449. package/dist/arena/phases/claim-registry.d.ts +0 -26
  450. package/dist/arena/phases/claim-registry.js +0 -60
  451. package/dist/arena/phases/cross-review.d.ts +0 -47
  452. package/dist/arena/phases/cross-review.js +0 -224
  453. package/dist/arena/phases/debate-rounds.d.ts +0 -28
  454. package/dist/arena/phases/debate-rounds.js +0 -161
  455. package/dist/arena/phases/participant-research.d.ts +0 -39
  456. package/dist/arena/phases/participant-research.js +0 -316
  457. package/dist/arena/phases/planning-detail-expansion.d.ts +0 -39
  458. package/dist/arena/phases/planning-detail-expansion.js +0 -120
  459. package/dist/arena/planner.d.ts +0 -28
  460. package/dist/arena/planner.js +0 -312
  461. package/dist/arena/providers/docs.d.ts +0 -7
  462. package/dist/arena/providers/docs.js +0 -111
  463. package/dist/arena/providers/git.d.ts +0 -8
  464. package/dist/arena/providers/git.js +0 -174
  465. package/dist/arena/providers/index.d.ts +0 -32
  466. package/dist/arena/providers/index.js +0 -132
  467. package/dist/arena/providers/none.d.ts +0 -7
  468. package/dist/arena/providers/none.js +0 -11
  469. package/dist/arena/providers/repo.d.ts +0 -7
  470. package/dist/arena/providers/repo.js +0 -258
  471. package/dist/arena/render/session.d.ts +0 -17
  472. package/dist/arena/render/session.js +0 -190
  473. package/dist/arena/render/terminal.d.ts +0 -34
  474. package/dist/arena/render/terminal.js +0 -286
  475. package/dist/arena/strategies/discussion.d.ts +0 -25
  476. package/dist/arena/strategies/discussion.js +0 -143
  477. package/dist/arena/strategies/index.d.ts +0 -15
  478. package/dist/arena/strategies/index.js +0 -28
  479. package/dist/arena/strategies/language-wrapper.d.ts +0 -17
  480. package/dist/arena/strategies/language-wrapper.js +0 -102
  481. package/dist/arena/strategies/lens-wrapper.d.ts +0 -16
  482. package/dist/arena/strategies/lens-wrapper.js +0 -236
  483. package/dist/arena/strategies/planning.d.ts +0 -30
  484. package/dist/arena/strategies/planning.js +0 -225
  485. package/dist/arena/strategies/review.d.ts +0 -26
  486. package/dist/arena/strategies/review.js +0 -168
  487. package/dist/arena/strategies/utils.d.ts +0 -36
  488. package/dist/arena/strategies/utils.js +0 -603
  489. package/dist/arena/tools/selector.d.ts +0 -17
  490. package/dist/arena/tools/selector.js +0 -61
  491. package/dist/arena/transitions.d.ts +0 -53
  492. package/dist/arena/transitions.js +0 -97
  493. package/dist/arena/types.d.ts +0 -518
  494. package/dist/arena/types.js +0 -27
  495. package/dist/cc-orchestrator/agent-adapter.d.ts +0 -54
  496. package/dist/cc-orchestrator/agent-adapter.js +0 -143
  497. package/dist/cc-orchestrator/cc-capability.d.ts +0 -19
  498. package/dist/cc-orchestrator/cc-capability.js +0 -53
  499. package/dist/cc-orchestrator/codex-session-discovery.d.ts +0 -24
  500. package/dist/cc-orchestrator/codex-session-discovery.js +0 -191
  501. package/dist/cc-orchestrator/codex-session-history.d.ts +0 -38
  502. package/dist/cc-orchestrator/codex-session-history.js +0 -247
  503. package/dist/cc-orchestrator/external-agent-bindings.d.ts +0 -27
  504. package/dist/cc-orchestrator/external-agent-bindings.js +0 -150
  505. package/dist/cc-orchestrator/external-agent-changes.d.ts +0 -19
  506. package/dist/cc-orchestrator/external-agent-changes.js +0 -231
  507. package/dist/cc-orchestrator/external-agent-driver.d.ts +0 -19
  508. package/dist/cc-orchestrator/external-agent-driver.js +0 -284
  509. package/dist/cc-orchestrator/external-agent-session-store.d.ts +0 -23
  510. package/dist/cc-orchestrator/external-agent-session-store.js +0 -146
  511. package/dist/cc-orchestrator/index.d.ts +0 -8
  512. package/dist/cc-orchestrator/index.js +0 -8
  513. package/dist/cc-orchestrator/relevance-judge.d.ts +0 -15
  514. package/dist/cc-orchestrator/relevance-judge.js +0 -29
  515. package/dist/cc-orchestrator/session-discovery.d.ts +0 -46
  516. package/dist/cc-orchestrator/session-discovery.js +0 -125
  517. package/dist/cc-orchestrator/session-history.d.ts +0 -54
  518. package/dist/cc-orchestrator/session-history.js +0 -150
  519. package/dist/cron/cron-runtime.d.ts +0 -2
  520. package/dist/cron/cron-runtime.js +0 -2
  521. package/dist/cron/cron-store.d.ts +0 -2
  522. package/dist/cron/cron-store.js +0 -2
  523. package/dist/cron/scheduler.d.ts +0 -7
  524. package/dist/cron/scheduler.js +0 -7
  525. package/dist/engine/goal.js +0 -206
  526. package/dist/external-agents/config.d.ts +0 -2
  527. package/dist/external-agents/config.js +0 -15
  528. package/dist/external-agents/types.d.ts +0 -31
  529. package/dist/git/parse-log.d.ts +0 -13
  530. package/dist/git/parse-log.js +0 -21
  531. package/dist/git/utils.d.ts +0 -49
  532. package/dist/git/utils.js +0 -161
  533. package/dist/git/worktree/crud.d.ts +0 -72
  534. package/dist/git/worktree/crud.js +0 -235
  535. package/dist/git/worktree/diff.d.ts +0 -14
  536. package/dist/git/worktree/diff.js +0 -82
  537. package/dist/git/worktree/git-exec.d.ts +0 -7
  538. package/dist/git/worktree/git-exec.js +0 -87
  539. package/dist/git/worktree/index.d.ts +0 -5
  540. package/dist/git/worktree/index.js +0 -5
  541. package/dist/git/worktree/query.d.ts +0 -43
  542. package/dist/git/worktree/query.js +0 -128
  543. package/dist/git/worktree/slug.d.ts +0 -11
  544. package/dist/git/worktree/slug.js +0 -58
  545. package/dist/git/worktree.d.ts +0 -1
  546. package/dist/git/worktree.js +0 -5
  547. package/dist/lsp/client.d.ts +0 -41
  548. package/dist/lsp/client.js +0 -186
  549. package/dist/lsp/manager.d.ts +0 -40
  550. package/dist/lsp/manager.js +0 -155
  551. package/dist/lsp/root-path.d.ts +0 -9
  552. package/dist/lsp/root-path.js +0 -12
  553. package/dist/lsp/servers.d.ts +0 -16
  554. package/dist/lsp/servers.js +0 -60
  555. package/dist/prompt/sections/coding.md +0 -35
  556. package/dist/quota/credentials.d.ts +0 -3
  557. package/dist/quota/credentials.js +0 -80
  558. package/dist/quota/index.d.ts +0 -36
  559. package/dist/quota/index.js +0 -155
  560. package/dist/quota/types.d.ts +0 -48
  561. package/dist/quota/types.js +0 -13
  562. package/dist/review/review-prompt.d.ts +0 -28
  563. package/dist/review/review-prompt.js +0 -81
  564. package/dist/state.d.ts +0 -160
  565. package/dist/state.js +0 -267
  566. package/dist/tool-system/builtin/apply-patch/applier.d.ts +0 -26
  567. package/dist/tool-system/builtin/apply-patch/applier.js +0 -308
  568. package/dist/tool-system/builtin/apply-patch/backup-targets.d.ts +0 -10
  569. package/dist/tool-system/builtin/apply-patch/backup-targets.js +0 -30
  570. package/dist/tool-system/builtin/apply-patch/index.d.ts +0 -20
  571. package/dist/tool-system/builtin/apply-patch/index.js +0 -105
  572. package/dist/tool-system/builtin/apply-patch/parser.d.ts +0 -17
  573. package/dist/tool-system/builtin/apply-patch/parser.js +0 -212
  574. package/dist/tool-system/builtin/apply-patch/seek-sequence.d.ts +0 -18
  575. package/dist/tool-system/builtin/apply-patch/seek-sequence.js +0 -123
  576. package/dist/tool-system/builtin/apply-patch/types.d.ts +0 -49
  577. package/dist/tool-system/builtin/apply-patch/types.js +0 -13
  578. package/dist/tool-system/builtin/arena.d.ts +0 -31
  579. package/dist/tool-system/builtin/arena.js +0 -416
  580. package/dist/tool-system/builtin/brief.d.ts +0 -6
  581. package/dist/tool-system/builtin/brief.js +0 -41
  582. package/dist/tool-system/builtin/check-quota.d.ts +0 -15
  583. package/dist/tool-system/builtin/check-quota.js +0 -34
  584. package/dist/tool-system/builtin/drive-claude-code.d.ts +0 -51
  585. package/dist/tool-system/builtin/drive-claude-code.js +0 -698
  586. package/dist/tool-system/builtin/lsp.d.ts +0 -7
  587. package/dist/tool-system/builtin/lsp.js +0 -144
  588. package/dist/tool-system/builtin/notebook-edit.d.ts +0 -7
  589. package/dist/tool-system/builtin/notebook-edit.js +0 -127
  590. package/dist/tool-system/builtin/worktree.d.ts +0 -11
  591. package/dist/tool-system/builtin/worktree.js +0 -363
  592. /package/dist/{external-agents → links}/types.js +0 -0
  593. /package/dist/{engine/session-usage.d.ts → session/usage.d.ts} +0 -0
  594. /package/dist/{engine/session-usage.js → session/usage.js} +0 -0
@@ -0,0 +1,283 @@
1
+ import { ToolExecutor } from "../tool-system/executor.js";
2
+ import { InvestigationGuard } from "../tool-system/investigation-guard.js";
3
+ import { TaskGuard } from "../tool-system/task-guard.js";
4
+ import { PermissionClassifier, InteractiveApprovalBackend } from "../tool-system/permission.js";
5
+ import { MCPManager } from "../tool-system/mcp-manager.js";
6
+ import { buildMcpToolPolicies, isRegisteredMcpToolAllowed, } from "../tool-system/mcp-tool-policy.js";
7
+ import { PLAN_MODE_ALLOWED_TOOLS } from "../tool-system/plan-mode-allowlist.js";
8
+ import { isFeatureEnabled } from "../settings/feature-flags.js";
9
+ import { applyDynamicToolDef } from "./dynamic-tool-defs.js";
10
+ /** engine.ts L1485-1522 —— ToolContext 组装(spawner、agentDefinitions、base 由调用方传入)。 */
11
+ export function buildRunToolContext(args) {
12
+ const { options, profile, profileParams } = args;
13
+ let pendingRunYield;
14
+ // sessionId is filled in after the session bundle is resolved below
15
+ // (the session may be cold-started or resumed). Until then this is
16
+ // intentionally shaped as a mutable local; we treat it as immutable
17
+ // after the assignment.
18
+ const toolCtx = {
19
+ ...args.base,
20
+ approvalRouter: options?.approvalRouter ?? args.configApprovalRouter,
21
+ permissionMode: args.runPermissionMode,
22
+ planMode: args.runPlanMode,
23
+ subAgentSpawner: args.subAgentSpawner,
24
+ agentDefinitions: args.agentDefinitions,
25
+ // Stamp the resolved network policy onto the backend the tools see so
26
+ // Bash can surface "网络 deny" on its result. Shallow-copy (don't mutate
27
+ // the cached backend) — `wrap`/`hintForBlockedOutput` are plain function
28
+ // properties and survive the spread. Off keeps network undefined.
29
+ sandbox: args.sandbox,
30
+ cwd: args.cwd,
31
+ shellEnv: args.shellEnv,
32
+ // TodoWrite reads this to push task_update events independently
33
+ // of its return value, so the UI's pinned task panel refreshes
34
+ // immediately rather than after the LLM next surfaces the
35
+ // snapshot. wrappedOnStream snoops the same channel to keep
36
+ // latestTodos current for TaskGuard.
37
+ streamCallback: options?.onStream,
38
+ setCwd(nextCwd) {
39
+ toolCtx.cwd = nextCwd;
40
+ },
41
+ runYield: {
42
+ request(reason) {
43
+ pendingRunYield ??= reason;
44
+ },
45
+ peek() {
46
+ return pendingRunYield;
47
+ },
48
+ consume() {
49
+ const reason = pendingRunYield;
50
+ pendingRunYield = undefined;
51
+ return reason;
52
+ },
53
+ },
54
+ };
55
+ if (profile?.allowedToolNames) {
56
+ toolCtx.allowedToolNames = profile.allowedToolNames;
57
+ }
58
+ if (profile?.createRunServices) {
59
+ toolCtx.runScopedServices = profile.createRunServices({
60
+ profileParams,
61
+ reportResult: (key, value) => {
62
+ args.reportResult(key, value);
63
+ },
64
+ });
65
+ }
66
+ return toolCtx;
67
+ }
68
+ /** engine.ts L1876-1933 —— 权限分类器 + 审批监听 + ToolExecutor + guards。 */
69
+ export function buildRunPermissionPipeline(args) {
70
+ const mode = args.mode;
71
+ const { rules: defaultRules, backend: approvalBackend } = args.permissionController.build(mode, args.cwd, args.approvalRouter);
72
+ const permission = new PermissionClassifier(defaultRules, mode, approvalBackend);
73
+ permission.setApprovalStateListener((waiting, toolName) => {
74
+ args.onApprovalPhase(waiting, toolName);
75
+ });
76
+ // Surface approval waits on the notification hook (fire-and-forget, like
77
+ // background-agent terminal states) so plugins / settings hooks can ping
78
+ // the user while a decision is pending.
79
+ permission.setApprovalEventListener((event) => {
80
+ args.emitNotificationHook({
81
+ kind: event.phase === "requested" ? "approval_requested" : "approval_resolved",
82
+ toolName: event.toolName,
83
+ riskLevel: event.riskLevel,
84
+ ...(event.approved !== undefined ? { approved: event.approved } : {}),
85
+ ...(event.sessionId ? { sessionId: event.sessionId } : {}),
86
+ });
87
+ });
88
+ args.permissionController.attach(permission, args.approvalRouter);
89
+ // If the backend is the interactive one, wire it for project-scope
90
+ // persistence: it needs cwd to find settings.local.json, and a callback
91
+ // to apply newly-saved rules to the live classifier so subsequent calls
92
+ // in this same session don't re-prompt. Headless/auto backends skip
93
+ // this — they don't prompt, so there are no project rules to persist.
94
+ if (approvalBackend instanceof InteractiveApprovalBackend) {
95
+ approvalBackend.setSessionContext(args.sessionId, {
96
+ cwd: args.cwd,
97
+ onProjectRules: (rules) => {
98
+ // Prepend the *full* accumulated list of session-saved project rules
99
+ // so user approvals win over defaults and earlier approvals aren't
100
+ // dropped when later ones come in.
101
+ permission.reconfigure(mode, approvalBackend, [...rules, ...defaultRules]);
102
+ },
103
+ });
104
+ }
105
+ const toolExecutor = new ToolExecutor(args.toolRegistry, permission, args.hooks);
106
+ const investigationGuard = new InvestigationGuard();
107
+ if (args.readOnlySession) {
108
+ investigationGuard.setPolicy("read-only-review");
109
+ }
110
+ else if (args.headless) {
111
+ investigationGuard.setSoftMode(true);
112
+ }
113
+ toolExecutor.setInvestigationGuard(investigationGuard);
114
+ toolExecutor.setTaskGuard(new TaskGuard(() => args.getLatestTodos()));
115
+ // Wire abort signal for cascading cancellation + per-Engine ToolContext
116
+ toolExecutor.setSignal(args.signal);
117
+ toolExecutor.setContext(args.toolCtx);
118
+ return { permission, toolExecutor };
119
+ }
120
+ /** engine.ts L1986-2003 —— MCP 连接(Runtime 池优先,回退 per-Engine)。 */
121
+ export async function connectRunMcp(args) {
122
+ // Connect MCP servers (if configured and not already connected).
123
+ // B1: prefer the Runtime-owned MCPManager so all sessions in a
124
+ // worker share one set of connections. Falling back to a
125
+ // per-Engine instance keeps the null-runtime path (tests, ad-hoc
126
+ // scripts) working.
127
+ const mcpServers = args.mcpServers;
128
+ const mcpDisabled = args.mcpDisabled;
129
+ if (!mcpDisabled && Object.keys(mcpServers).length > 0 && !args.getManager()) {
130
+ if (args.runtimePool) {
131
+ args.setManager(args.runtimePool);
132
+ }
133
+ else {
134
+ args.setManager(new MCPManager(args.toolRegistry));
135
+ }
136
+ await args.getManager().connectAll(mcpServers, args.engineForConnect, (event) => {
137
+ // Fire-and-forget onto the notification hook: hosts/plugins learn
138
+ // about MCP availability changes without polling the pool.
139
+ args.emitNotificationHook({
140
+ kind: event.type,
141
+ server: event.server,
142
+ ...(event.error ? { error: event.error } : {}),
143
+ });
144
+ });
145
+ }
146
+ }
147
+ /**
148
+ * Build the availability-guard context for a tool surface.
149
+ *
150
+ * Extracted from {@link assembleRunToolDefs} so it is callable on its own. It
151
+ * matters that this has exactly one implementation: the executor SKIPS its
152
+ * visibility gate when `toolCtx.toolVisibility` is absent, so a caller that
153
+ * forgets to populate it doesn't just under-expose tools — it makes host-gated
154
+ * tools callable in contexts their guards were written to exclude.
155
+ *
156
+ * Optional keys are omitted rather than set to `undefined`: guards use
157
+ * `!== true` / `?? 0` style checks, and an empty `sessionMessageTargets` must not
158
+ * read as "the host authorized targets".
159
+ */
160
+ export function buildToolVisibility(inputs) {
161
+ return {
162
+ cwd: inputs.cwd,
163
+ hasGoal: inputs.hasGoal,
164
+ ...(inputs.sessionId ? { sessionId: inputs.sessionId } : {}),
165
+ ...(inputs.settingsScope ? { settingsScope: inputs.settingsScope } : {}),
166
+ ...(inputs.host !== undefined ? { host: inputs.host } : {}),
167
+ ...(inputs.isSubAgent !== undefined ? { isSubAgent: inputs.isSubAgent } : {}),
168
+ ...(inputs.behaviorProfile !== undefined ? { behaviorProfile: inputs.behaviorProfile } : {}),
169
+ ...(inputs.sessionMessageTargets?.length
170
+ ? { sessionMessageTargets: inputs.sessionMessageTargets }
171
+ : {}),
172
+ ...(inputs.profileMeta ? { profileMeta: inputs.profileMeta } : {}),
173
+ };
174
+ }
175
+ /** engine.ts L2023-2145 —— builtin override / MCP 可见性 / feature flags / 动态 defs / plan-mode 过滤。
176
+ * 注意:本函数按原逻辑就地 mutate toolCtx(toolVisibility/disabledBuiltins/
177
+ * allowedMcpServers/mcpToolPolicies)。 */
178
+ export function assembleRunToolDefs(args) {
179
+ const { toolCtx } = args;
180
+ const guardCwd = args.guardCwd;
181
+ const toolVisibility = buildToolVisibility({
182
+ cwd: guardCwd,
183
+ hasGoal: args.hasRunnableGoal,
184
+ sessionId: toolCtx.sessionId,
185
+ settingsScope: args.settingsScope,
186
+ host: args.builtinToolHost,
187
+ isSubAgent: args.isSubAgent,
188
+ behaviorProfile: args.behaviorProfileId,
189
+ sessionMessageTargets: toolCtx.sessionMessages?.targets,
190
+ profileMeta: args.profileMeta,
191
+ });
192
+ toolCtx.toolVisibility = toolVisibility;
193
+ // #7: per-turn project builtin override. The toolRegistry's builtin tool
194
+ // SET is ctor-frozen (and may be shared via runtime), so a mid-session
195
+ // project override of a builtin can't rebuild the registry. But the tool
196
+ // LIST handed to the LLM is assembled fresh every turn, so we apply the
197
+ // override here: a builtin marked `off` for this cwd is HIDDEN from the
198
+ // turn's tool list (matching how skills/plugins/agents `off` apply
199
+ // mid-session via readDisabledLists). `on`/`inherit` keep whatever the
200
+ // registry already has — we can't re-add a tool the frozen registry omits,
201
+ // but `on` for a tool already present is a no-op (it stays). This makes a
202
+ // builtin toggle take effect on the NEXT message, like other capability
203
+ // kinds, without touching the registry.
204
+ const builtinOverride = args.builtinOverride;
205
+ // Turn `off` from a prompt-visibility filter into a real execution gate:
206
+ // collect the builtin tool names the override marks `off` and hand them to
207
+ // the executor (via the shared toolCtx the executor already holds a
208
+ // reference to, set at setContext above) so it rejects a call to a hidden
209
+ // builtin instead of running it from the still-populated registry.
210
+ if (builtinOverride) {
211
+ const registryNames = new Set(args.toolRegistry.getToolDefinitions().map((t) => t.name));
212
+ const disabledBuiltins = new Set(Object.keys(builtinOverride).filter((name) => builtinOverride[name] === "off" && registryNames.has(name)));
213
+ toolCtx.disabledBuiltins = disabledBuiltins;
214
+ }
215
+ // MCP tool exposure is per-SESSION even though the pool/registry are
216
+ // worker-shared (B1): a server connected by another project's session
217
+ // registers its tools into the SHARED registry, and without this filter
218
+ // they leaked into every session (e.g. chrome-devtools tools showing up
219
+ // in a project that never enabled the plugin). Keep an MCP tool only when
220
+ // its server is in THIS session's merged config.mcpServers — which
221
+ // already folds the project's capabilityOverrides. Gated on the config
222
+ // being present: engines without one (sub-agents, bare tests) have no
223
+ // MCP tools in their private registries anyway.
224
+ const allowedMcpServers = new Set(args.mcpDisabled
225
+ ? []
226
+ : Object.entries(args.mcpServers)
227
+ .filter(([, c]) => c.enabled !== false)
228
+ .map(([n]) => n));
229
+ toolCtx.allowedMcpServers = allowedMcpServers;
230
+ const mcpToolPolicies = buildMcpToolPolicies(args.mcpServers);
231
+ toolCtx.mcpToolPolicies = mcpToolPolicies;
232
+ const mcpVisible = (toolName) => {
233
+ const reg = args.toolRegistry.getTool(toolName);
234
+ return (reg?.source !== "mcp" ||
235
+ (allowedMcpServers.has(reg?.serverName ?? "") &&
236
+ isRegisteredMcpToolAllowed({
237
+ source: "mcp",
238
+ serverName: reg?.serverName,
239
+ mcpToolName: reg?.mcpToolName,
240
+ }, mcpToolPolicies)));
241
+ };
242
+ // Feature-flag visibility: a builtin mapped in TOOL_FEATURE_FLAGS is
243
+ // hidden when its flag resolves to false (default-on flags only hide when
244
+ // explicitly disabled, so zero regression out of the box). Read once per
245
+ // turn so flipping a flag in settings takes effect on the NEXT message,
246
+ // like the other capability kinds.
247
+ const featureFlags = args.featureFlags;
248
+ const allToolDefs = args
249
+ .applyBuiltinOverrideVisibility(args.toolRegistry.getToolDefinitions(), builtinOverride)
250
+ .filter((t) => mcpVisible(t.name))
251
+ .filter((t) => {
252
+ const guard = args.toolGuards.get(t.name);
253
+ return guard ? guard(toolVisibility) : true;
254
+ })
255
+ .filter((t) => {
256
+ const flag = args.toolFeatureFlags.get(t.name);
257
+ return flag ? isFeatureEnabled(featureFlags, flag) : true;
258
+ })
259
+ // Dynamic per-engine bits the static defs can't carry: the Agent tool's
260
+ // agent_type enum + listing, and the image/video provider names. See
261
+ // applyDynamicToolDef — forwarding only the Agent description (dropping
262
+ // its rebuilt inputSchema) used to strip the agent_type enum, so the
263
+ // model omitted agent_type and configured roles never applied.
264
+ // A builtin's own exposure.rewriteDefinition (run-scoped rewrites like
265
+ // DelegateWork's closed workspace enum) applies first.
266
+ .map((t) => {
267
+ const rewrite = args.toolRewriters.get(t.name);
268
+ return applyDynamicToolDef(rewrite ? rewrite(t, toolVisibility) : t, toolCtx.agentDefinitions, guardCwd);
269
+ });
270
+ // In plan mode, only expose read-only/planning tools so the model won't
271
+ // attempt writes. Shared with executor.ts's execution gate via
272
+ // PLAN_MODE_ALLOWED_TOOLS so what the model SEES and what the executor
273
+ // RUNS can't drift apart. (Bash is in the set; the executor additionally
274
+ // gates Bash to read-only commands at call time.)
275
+ const profileAllowedToolNames = args.profileAllowedToolNames;
276
+ const profileToolDefs = profileAllowedToolNames
277
+ ? allToolDefs.filter((tool) => profileAllowedToolNames.has(tool.name))
278
+ : allToolDefs;
279
+ const toolDefs = args.runPlanMode
280
+ ? profileToolDefs.filter((t) => PLAN_MODE_ALLOWED_TOOLS.has(t.name))
281
+ : profileToolDefs;
282
+ return toolDefs;
283
+ }
@@ -0,0 +1,139 @@
1
+ import type { SessionKind, StreamCallback, TokenUsage } from "../types.js";
2
+ import type { InputAttachmentMeta } from "../types.js";
3
+ import type { ApprovalRouter } from "../tool-system/permission.js";
4
+ import type { GoalConfig } from "../goal/lifecycle.js";
5
+ import type { EngineConfig, EngineResult } from "./types.js";
6
+ import type { LiveChildState } from "../tool-system/builtin/agent-registry.js";
7
+ import type { LegacyPetWorkspaceOption } from "../types.js";
8
+ import type { SessionMessageTarget } from "../session/session-message.js";
9
+ /**
10
+ * Open string id naming a registered {@link RunBehaviorProfile}. The literal
11
+ * "quickChatRestricted" (and, transitionally, "pet") remain valid values —
12
+ * the type is a string so hosts can register their own profiles.
13
+ */
14
+ export type RunBehaviorMode = string;
15
+ /**
16
+ * A named, domain-agnostic per-run behavior profile. Engine resolves at most
17
+ * one active profile per run (by behaviorMode or session kind) and applies
18
+ * its constraints generically — core carries no knowledge of what the
19
+ * profile is for. Product domains (e.g. the desktop Pet manager) define
20
+ * profile instances and register them via EngineConfig.behaviorProfiles or
21
+ * ExtensionModule.behaviorProfiles.
22
+ */
23
+ export interface RunBehaviorProfile {
24
+ id: string;
25
+ /** Appended to the system prompt after config.appendSystemPrompt. */
26
+ systemPromptAppend?: string;
27
+ /** Hard tool allowlist for the run (model visibility + execution gate). */
28
+ allowedToolNames?: ReadonlySet<string>;
29
+ /** When set, the run's permission mode is locked to this value. */
30
+ forcePermissionMode?: NonNullable<EngineConfig["permissionMode"]>;
31
+ /** When true, per-run planMode requests are ignored. */
32
+ disablePlanMode?: boolean;
33
+ /** When true, MCP servers are neither connected nor exposed for the run. */
34
+ disableMcp?: boolean;
35
+ /**
36
+ * Wrapper tag for host-provided runtime context injected at the system
37
+ * prompt tail (e.g. "pet-world"). Injection happens only when both this tag
38
+ * and profileParams.runtimeContext (a string) are present.
39
+ */
40
+ runtimeContextTag?: string;
41
+ /** Heading line above the runtime-context block. */
42
+ runtimeContextHeading?: string;
43
+ /**
44
+ * Per-run services injected into ToolContext.runScopedServices for tools
45
+ * that share the profile's domain conventions. reportResult(key, value)
46
+ * surfaces structured run output under EngineResult.extensions[profile.id].
47
+ */
48
+ createRunServices?: (opts: {
49
+ profileParams: Readonly<Record<string, unknown>>;
50
+ reportResult: (key: string, value: unknown) => void;
51
+ }) => Record<string, unknown>;
52
+ /**
53
+ * Per-run metadata exposed to builtin availability guards / definition
54
+ * rewriters via ToolVisibilityContext.profileMeta.
55
+ */
56
+ buildVisibilityMeta?: (profileParams: Readonly<Record<string, unknown>>) => Record<string, unknown> | undefined;
57
+ /** Auto-activate this profile for these persisted session kinds. */
58
+ activateForSessionKinds?: readonly string[];
59
+ }
60
+ export declare const QUICK_CHAT_RESTRICTED_SYSTEM_PROMPT = "# Side Conversation Boundary\n\nThis is a side conversation, not the main-thread task execution environment.\n- Treat all content before this boundary as reference history only. Do not proactively continue any earlier plan, task, or modification.\n- Default to answering the user's question directly. Use lightweight read-only exploration only when needed.\n- Do not modify files, git state, configuration, or permissions unless the user explicitly asks after this boundary (for example, \"Allow you to modify files, please help me...\" or \"Please directly edit...\"). When explicitly requested, use the normally available tools subject to the current permission and approval mode.\n- Sub-agents are disabled for this side conversation. Do not create or invoke sub-agents.";
61
+ /** The side-conversation restriction expressed as a generic behavior profile. */
62
+ export declare const QUICK_CHAT_RESTRICTED_PROFILE: RunBehaviorProfile;
63
+ export interface EngineRunOptions {
64
+ cwd?: string;
65
+ onStream?: StreamCallback;
66
+ signal?: AbortSignal;
67
+ sessionId?: string;
68
+ /** User-facing text persisted beside the full model-facing task. */
69
+ displayText?: string;
70
+ permissionMode?: NonNullable<EngineConfig["permissionMode"]>;
71
+ planMode?: boolean;
72
+ approvalRouter?: ApprovalRouter;
73
+ goal?: string | GoalConfig;
74
+ injected?: boolean;
75
+ clientMessageId?: string;
76
+ attachments?: InputAttachmentMeta[];
77
+ /** Named per-run behavior profile supplied by interactive product surfaces. */
78
+ behaviorMode?: RunBehaviorMode;
79
+ /**
80
+ * Generic per-run parameters consumed by the active behavior profile
81
+ * (createRunServices / buildVisibilityMeta / runtime-context injection).
82
+ * Never persisted; never part of `task`.
83
+ */
84
+ profileParams?: Record<string, unknown>;
85
+ /** Digital human bound to this Work Session; persisted on first use. */
86
+ workspaceProfile?: string;
87
+ /**
88
+ * Standing brief for this Session, injected as a system section every turn and
89
+ * persisted on first use (see SessionState.sessionBrief).
90
+ */
91
+ sessionBrief?: string;
92
+ /**
93
+ * Host-authorized Sessions in the same project that this run may message.
94
+ * The Engine validates the closed set against the source workspace
95
+ * before exposing it to the model.
96
+ */
97
+ sessionMessageTargets?: readonly SessionMessageTarget[];
98
+ /**
99
+ * @deprecated Compat alias for `profileParams.runtimeContext` — bounded host
100
+ * Pet world JSON; model-visible for this run, never persisted.
101
+ */
102
+ petRuntimeContext?: string;
103
+ /**
104
+ * @deprecated Compat alias for `profileParams.workspaces` — closed Workspace
105
+ * choices available to DelegateWork for this Pet turn.
106
+ */
107
+ petWorkspaces?: readonly LegacyPetWorkspaceOption[];
108
+ /** Durable classification requested only when creating a new session. */
109
+ kind?: SessionKind;
110
+ /** Trusted metadata for an interrupt redrive initiated by agent direction. */
111
+ agentDirection?: {
112
+ envelopeIds: string[];
113
+ correlationIds: string[];
114
+ };
115
+ /** Trusted child writer generation used to fence mailbox drains. */
116
+ runtimeGeneration?: number;
117
+ /** Trusted runtime-only progress events; never model/tool input. */
118
+ onAgentProgress?: (event: AgentRuntimeProgressEvent) => void;
119
+ }
120
+ export type AgentRuntimeProgressEvent = {
121
+ type: "phase";
122
+ phase: "starting" | "model" | "tool" | "waiting-permission" | "compacting" | "finalizing";
123
+ toolName?: string;
124
+ } | {
125
+ type: "usage";
126
+ usage: TokenUsage;
127
+ };
128
+ export interface ChildEngineRuntime {
129
+ run(task: string, options?: EngineRunOptions): Promise<EngineResult>;
130
+ setAgentControlStateListener(listener: ((state: LiveChildState) => void) | undefined): void;
131
+ setAgentDirectionsDeliveredListener?(listener: ((envelopeIds: string[]) => void) | undefined): void;
132
+ }
133
+ export interface ChildEngineRunner {
134
+ createChild?(config: EngineConfig): ChildEngineRuntime;
135
+ runChild(config: EngineConfig, task: string, options: Pick<EngineRunOptions, "signal" | "onStream" | "sessionId">): Promise<Pick<EngineResult, "text" | "sessionId" | "usage">>;
136
+ }
137
+ export interface RunScopedDisposer {
138
+ dispose(): void | Promise<void>;
139
+ }
@@ -0,0 +1,12 @@
1
+ export const QUICK_CHAT_RESTRICTED_SYSTEM_PROMPT = `# Side Conversation Boundary
2
+
3
+ This is a side conversation, not the main-thread task execution environment.
4
+ - Treat all content before this boundary as reference history only. Do not proactively continue any earlier plan, task, or modification.
5
+ - Default to answering the user's question directly. Use lightweight read-only exploration only when needed.
6
+ - Do not modify files, git state, configuration, or permissions unless the user explicitly asks after this boundary (for example, "Allow you to modify files, please help me..." or "Please directly edit..."). When explicitly requested, use the normally available tools subject to the current permission and approval mode.
7
+ - Sub-agents are disabled for this side conversation. Do not create or invoke sub-agents.`;
8
+ /** The side-conversation restriction expressed as a generic behavior profile. */
9
+ export const QUICK_CHAT_RESTRICTED_PROFILE = {
10
+ id: "quickChatRestricted",
11
+ systemPromptAppend: QUICK_CHAT_RESTRICTED_SYSTEM_PROMPT,
12
+ };
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Run-workspace resolution — the pre-session phase of Engine.runExclusive:
3
+ * pins session kind, resolves the switchable work-Session profile binding,
4
+ * behavior profile / permission mode / plan mode, workspace resume (with its
5
+ * two early-return shapes), and the effective cwd. Pure of Engine — everything
6
+ * arrives via the args object (run-setup.ts / run-image-input.ts style).
7
+ */
8
+ import type { SessionKind } from "../types.js";
9
+ import type { SessionManager } from "../session/session-manager.js";
10
+ import type { SettingsManager } from "../settings/manager.js";
11
+ import type { EngineConfig, EngineResult } from "./types.js";
12
+ import type { EngineRunOptions, RunBehaviorProfile } from "./run-types.js";
13
+ import { type RunProfileState } from "./run-setup.js";
14
+ /**
15
+ * Resolve the working directory for a run. Precedence for legacy sessions:
16
+ * options.cwd > resumed session's state.cwd > config.cwd > process.cwd()
17
+ * (Moved verbatim from engine.ts; engine.ts re-exports it for compatibility.)
18
+ */
19
+ export declare function resolveRunCwd(args: {
20
+ optionCwd?: string;
21
+ sessionCwd?: string;
22
+ configCwd?: string;
23
+ processCwd: string;
24
+ }): string;
25
+ export interface RunWorkspaceResolution {
26
+ sessionKind: SessionKind;
27
+ sessionWorkspaceProfile: string | undefined;
28
+ profile: RunBehaviorProfile | undefined;
29
+ profileParams: Readonly<Record<string, unknown>>;
30
+ runPermissionMode: NonNullable<EngineConfig["permissionMode"]>;
31
+ runPlanMode: boolean;
32
+ cwd: string;
33
+ profileState: RunProfileState;
34
+ }
35
+ export type ResolveRunWorkspaceResult = {
36
+ ok: true;
37
+ resolution: RunWorkspaceResolution;
38
+ } | {
39
+ ok: false;
40
+ result: EngineResult;
41
+ };
42
+ export declare function resolveRunWorkspace(args: {
43
+ options: EngineRunOptions | undefined;
44
+ sessionManager: Pick<SessionManager, "exists" | "readSessionKind" | "readSessionWorkspaceProfile" | "resolveSessionWorkspaceForResume" | "readSessionMainRoot">;
45
+ resolveBehaviorProfile: (sessionKind: string, behaviorMode: string | undefined) => RunBehaviorProfile | undefined;
46
+ configPermissionMode: EngineConfig["permissionMode"];
47
+ configCwd: string | undefined;
48
+ settings: SettingsManager;
49
+ processCwd: string;
50
+ }): Promise<ResolveRunWorkspaceResult>;
@@ -0,0 +1,114 @@
1
+ import { resolveRunProfileState } from "./run-setup.js";
2
+ /**
3
+ * Resolve the working directory for a run. Precedence for legacy sessions:
4
+ * options.cwd > resumed session's state.cwd > config.cwd > process.cwd()
5
+ * (Moved verbatim from engine.ts; engine.ts re-exports it for compatibility.)
6
+ */
7
+ export function resolveRunCwd(args) {
8
+ return args.optionCwd ?? args.sessionCwd ?? args.configCwd ?? args.processCwd;
9
+ }
10
+ export async function resolveRunWorkspace(args) {
11
+ const { options } = args;
12
+ const persistedSessionKind = options?.sessionId && args.sessionManager.exists(options.sessionId)
13
+ ? args.sessionManager.readSessionKind(options.sessionId)
14
+ : undefined;
15
+ if (persistedSessionKind !== undefined &&
16
+ options?.kind !== undefined &&
17
+ persistedSessionKind !== options.kind) {
18
+ throw new Error(`session kind mismatch: persisted ${persistedSessionKind}, requested ${options.kind}`);
19
+ }
20
+ const sessionKind = persistedSessionKind ?? options?.kind ?? "work";
21
+ const persistedWorkspaceProfile = options?.sessionId && args.sessionManager.exists(options.sessionId)
22
+ ? args.sessionManager.readSessionWorkspaceProfile(options.sessionId)
23
+ : undefined;
24
+ const sessionWorkspaceProfile = options?.workspaceProfile ?? persistedWorkspaceProfile;
25
+ if (sessionKind !== "work" && sessionWorkspaceProfile) {
26
+ throw new Error(`session kind ${sessionKind} cannot bind a workspace profile`);
27
+ }
28
+ const profile = args.resolveBehaviorProfile(sessionKind, options?.behaviorMode);
29
+ // Normalize per-run profile parameters. The legacy pet-named run options
30
+ // fold into the generic bag (runtimeContext / workspaces) so existing
31
+ // hosts keep working; an explicit profileParams entry wins on key clash.
32
+ const profileParams = {
33
+ ...(options?.petRuntimeContext !== undefined
34
+ ? { runtimeContext: options.petRuntimeContext }
35
+ : {}),
36
+ ...(options?.petWorkspaces !== undefined ? { workspaces: options.petWorkspaces } : {}),
37
+ ...(options?.profileParams ?? {}),
38
+ };
39
+ const planModeDisabled = profile?.disablePlanMode === true;
40
+ let runPermissionMode = profile?.forcePermissionMode ??
41
+ options?.permissionMode ??
42
+ args.configPermissionMode ??
43
+ "acceptEdits";
44
+ if (!planModeDisabled && options?.planMode === true) {
45
+ runPermissionMode = "plan";
46
+ }
47
+ else if (!planModeDisabled && options?.planMode === false && runPermissionMode === "plan") {
48
+ runPermissionMode = "acceptEdits";
49
+ }
50
+ const runPlanMode = runPermissionMode === "plan";
51
+ const workspaceResume = options?.sessionId && args.sessionManager.exists(options.sessionId)
52
+ ? await args.sessionManager.resolveSessionWorkspaceForResume(options.sessionId)
53
+ : undefined;
54
+ if (workspaceResume && !workspaceResume.ok) {
55
+ return {
56
+ ok: false,
57
+ result: {
58
+ text: `ERROR: ${workspaceResume.message}`,
59
+ reason: "completed",
60
+ sessionId: options.sessionId,
61
+ turnCount: 0,
62
+ usage: { promptTokens: 0, completionTokens: 0, totalTokens: 0 },
63
+ },
64
+ };
65
+ }
66
+ if (workspaceResume?.ok &&
67
+ workspaceResume.reason === "worktree_missing_branch_gone" &&
68
+ workspaceResume.message) {
69
+ return {
70
+ ok: false,
71
+ result: {
72
+ text: workspaceResume.message,
73
+ reason: "completed",
74
+ sessionId: options.sessionId,
75
+ turnCount: 0,
76
+ usage: { promptTokens: 0, completionTokens: 0, totalTokens: 0 },
77
+ },
78
+ };
79
+ }
80
+ // Existing P1 sessions resolve cwd from SessionWorkspace, even if the host
81
+ // passes a stale cwd. Legacy sessions without workspace keep the historical
82
+ // explicit-cwd precedence for backward compatibility.
83
+ const workspaceCwd = workspaceResume?.ok && workspaceResume.reason !== "legacy" ? workspaceResume.cwd : undefined;
84
+ const sessionCwd = workspaceCwd === undefined && options?.cwd === undefined && options?.sessionId
85
+ ? workspaceResume?.ok
86
+ ? workspaceResume.cwd
87
+ : args.sessionManager.readSessionMainRoot(options.sessionId)
88
+ : undefined;
89
+ const cwd = workspaceCwd ??
90
+ resolveRunCwd({
91
+ optionCwd: options?.cwd,
92
+ sessionCwd,
93
+ configCwd: args.configCwd,
94
+ processCwd: args.processCwd,
95
+ });
96
+ const profileState = resolveRunProfileState({
97
+ sessionWorkspaceProfile,
98
+ cwd,
99
+ settings: args.settings,
100
+ });
101
+ return {
102
+ ok: true,
103
+ resolution: {
104
+ sessionKind,
105
+ sessionWorkspaceProfile,
106
+ profile,
107
+ profileParams,
108
+ runPermissionMode,
109
+ runPlanMode,
110
+ cwd,
111
+ profileState,
112
+ },
113
+ };
114
+ }
@@ -6,7 +6,7 @@
6
6
  * it. Pure + side-effect-free so it unit-tests without the Engine/TurnLoop
7
7
  * harness (same rationale as the renderer's queuedInput.ts).
8
8
  */
9
- import type { InputAttachmentMeta } from "../protocol/types.js";
9
+ import type { InputAttachmentMeta } from "../types.js";
10
10
  export interface SteerItem {
11
11
  id: string;
12
12
  text: string;
@@ -0,0 +1,32 @@
1
+ import type { LLMConfig, StreamCallback } from "../types.js";
2
+ import type { AgentPresetName } from "../preset/index.js";
3
+ import type { ModelPool } from "../llm/model-pool.js";
4
+ import type { SubAgentSpawner } from "../tool-system/context.js";
5
+ import type { EngineConfig } from "./types.js";
6
+ import type { ChildEngineRunner } from "./run-types.js";
7
+ import { type SandboxConfig, type SandboxMode } from "../tool-system/sandbox/index.js";
8
+ import type { MCPServerConfig } from "../types.js";
9
+ export declare const NESTED_AGENT_TOOLS: string[];
10
+ export declare function resolveChildLlm(modelKey: string | undefined, pool: ModelPool | undefined, parentLlm: LLMConfig): LLMConfig;
11
+ export declare function resolveChildToolScope(allowlist: string[] | undefined, parentDisabled: string[] | undefined, parentEnabled: string[] | undefined): {
12
+ enabled?: string[];
13
+ disabled: string[];
14
+ };
15
+ export declare function resolveChildSandbox(mode: SandboxMode | undefined, parent: SandboxConfig): SandboxConfig;
16
+ export declare function resolveChildMcpServers(allowlist: string[] | undefined, parent: Record<string, MCPServerConfig> | undefined): Record<string, MCPServerConfig> | undefined;
17
+ export declare function wrapChildStream(destination: StreamCallback | undefined, agentId: string): StreamCallback | undefined;
18
+ export interface CreateSubAgentSpawnerDeps {
19
+ parentConfig: EngineConfig;
20
+ /** Fully resolved sandbox for this parent run, including settings layers. */
21
+ parentSandbox: SandboxConfig;
22
+ presetName: AgentPresetName;
23
+ cwd: string;
24
+ permissionMode: NonNullable<EngineConfig["permissionMode"]>;
25
+ modelPool?: ModelPool;
26
+ appendParentSubagent: (agentId: string, description: string) => void;
27
+ sessionExists: (sessionId: string) => boolean;
28
+ getSessionParentId?: (sessionId: string) => string | null | undefined;
29
+ childRunner: ChildEngineRunner;
30
+ parentStream?: StreamCallback;
31
+ }
32
+ export declare function createSubAgentSpawner(deps: CreateSubAgentSpawnerDeps): SubAgentSpawner;