@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
@@ -1,109 +1,81 @@
1
1
  /**
2
2
  * Engine — the main facade that wires all components together.
3
3
  */
4
- import type { LLMConfig, StreamCallback, TerminalReason, TokenUsage } from "../types.js";
4
+ import type { LLMConfig, StreamCallback } from "../types.js";
5
5
  import { ToolRegistry } from "../tool-system/registry.js";
6
- import { type ApprovalBackend } from "../tool-system/permission.js";
6
+ import { type BuiltinToolFn } from "../tool-system/builtin/index.js";
7
7
  import { HookRegistry } from "../hooks/registry.js";
8
- import type { HookEventName } from "../hooks/events.js";
9
- import type { HookHandler } from "../hooks/registry.js";
8
+ import { type GoalConfig, type GoalExtension } from "./goal.js";
10
9
  import { SessionManager } from "../session/session-manager.js";
11
- import type { CostStateStore } from "./cost-store.js";
12
10
  import type { AskUserFn } from "../tool-system/builtin/ask-user.js";
13
- import { type SettingsScope } from "../settings/manager.js";
11
+ import type { CapabilityOverride } from "../settings/schema.js";
12
+ import { type FeatureFlagName } from "../settings/feature-flags.js";
14
13
  import type { ToolContext } from "../tool-system/context.js";
15
- import { type SandboxConfig } from "../tool-system/sandbox/index.js";
16
- import { type AgentPresetName } from "../preset/index.js";
17
14
  import { ModelPool, type ModelEntry } from "../llm/model-pool.js";
18
15
  import { AgentDefinitionRegistry } from "../agent/agent-definition-registry.js";
19
16
  import { EngineRuntime } from "./runtime.js";
20
- export interface EngineConfig {
21
- llm: LLMConfig;
22
- cwd?: string;
23
- maxTurns?: number;
24
- maxToolCallsPerTurn?: number;
25
- permissionMode?: "default" | "acceptEdits" | "dontAsk" | "bypassPermissions" | "auto" | "plan";
26
- preset?: AgentPresetName;
27
- enabledBuiltinTools?: string[];
28
- disabledBuiltinTools?: string[];
29
- customSystemPrompt?: string;
30
- appendSystemPrompt?: string;
31
- sessionStorageDir?: string;
32
- maxContextTokens?: number;
33
- approvalBackend?: ApprovalBackend;
34
- hooks?: EngineHookConfig[];
35
- askUser?: AskUserFn;
36
- mcpServers?: Record<string, import("../types.js").MCPServerConfig>;
37
- /**
38
- * Optional opaque store for per-session cost/usage state. When provided,
39
- * Engine calls `restore()` on session resume and `serialize()` at the end
40
- * of each `run()` and stores the blob on the session. Without this the
41
- * Engine doesn't persist cost state — it's a UI concern.
42
- */
43
- costStore?: CostStateStore;
44
- /**
45
- * True when the Engine runs in a no-UI / one-shot context (e.g. the `run`
46
- * command). Currently controls InvestigationGuard soft-mode: in headless
47
- * we never hard-block a tool call because there is no human to retry.
48
- * Defaults to false.
49
- */
50
- headless?: boolean;
51
- /**
52
- * Sandbox configuration for shell-tool execution. When omitted, headless
53
- * runs default to "auto" (Seatbelt on macOS / bwrap on Linux when
54
- * available) and interactive runs default to "off" because a human is in
55
- * the loop to approve commands.
56
- */
57
- sandbox?: SandboxConfig;
58
- /**
59
- * True when this Engine is itself a sub-agent (spawned by another
60
- * Engine's Agent tool). Threaded into ToolContext so the Agent tool can
61
- * refuse re-entry — defense in depth against the tool-list strip in
62
- * spawn(): if a tool registry regression ever leaks Agent into a child's
63
- * pool, the runtime check still blocks the call.
64
- */
65
- isSubAgent?: boolean;
66
- /**
67
- * Optional shared EngineRuntime providing pre-constructed shared resources
68
- * (modelPool, toolRegistry, etc.). When provided, Engine uses these instead
69
- * of constructing its own. Existing callers that omit this field continue to
70
- * work unchanged — T11 will migrate them.
71
- */
72
- runtime?: EngineRuntime;
73
- /**
74
- * Which disk config layers this Engine may read. Defaults to 'project' —
75
- * the safe default: a library/SDK embedding never silently inherits the
76
- * host user's personal ~/.code-shell config (keys, models, MCP, hooks); it
77
- * only reads the project-level ${cwd}/.code-shell that travels with a repo.
78
- * Host-terminal entrypoints (TUI/desktop/CLI) pass 'full' to restore the
79
- * managed+user+project+local behavior. 'isolated' reads no disk at all.
80
- * Subagents inherit the parent Engine's scope. See SettingsScope.
81
- */
82
- settingsScope?: SettingsScope;
83
- }
84
- export interface EngineHookConfig {
85
- event: HookEventName;
86
- handler: HookHandler;
87
- priority?: number;
88
- name?: string;
89
- }
90
- export interface EngineResult {
91
- text: string;
92
- reason: TerminalReason;
93
- sessionId: string;
94
- turnCount: number;
95
- usage: TokenUsage;
96
- }
17
+ /**
18
+ * Build ScanOptions.compatFileNames from the user's instruction compat toggles.
19
+ * Primary file name stays hard-wired to CODESHELL.md (not exposed). Turning a
20
+ * compat flag off only drops the same-named .md (CLAUDE.md / AGENTS.md); the
21
+ * .claude/ subdir, *.local.md and rules/ are intentionally NOT linked.
22
+ * undefined (instructions omitted) means both stay on backward compatible.
23
+ */
24
+ export declare function compatFileNamesFrom(instructions?: {
25
+ compatClaude?: boolean;
26
+ compatCodex?: boolean;
27
+ }): string[];
28
+ export type { EngineConfig, EngineHookConfig, EngineResult } from "./types.js";
29
+ import type { EngineConfig, EngineResult } from "./types.js";
30
+ export { diskDefaultsFrom, type DiskDefaultPatch } from "../settings/disk-defaults.js";
97
31
  /**
98
32
  * Resolve the LLM config for a spawned child Engine.
99
- * - `modelKey` set + present in pool → that model's config (over parent base).
33
+ * - `modelKey` set + present in pool → that model's config (pure entry-derived
34
+ * identity; the parent's llm is NOT consulted).
100
35
  * - otherwise (no key, no pool, or key miss) → the parent's llm unchanged.
101
36
  * Key miss is a soft fallback, NOT an error: a stale agent definition must not
102
37
  * crash the spawn.
38
+ *
39
+ * ClientDefaults (temperature/timeout/etc.) are inherited from the parent
40
+ * Engine directly via EngineConfig.clientDefaults — they do not flow through
41
+ * this helper because they're not part of LLMConfig anymore.
103
42
  */
104
43
  export declare function resolveChildLlm(modelKey: string | undefined, pool: ModelPool | undefined, parentLlm: LLMConfig): LLMConfig;
105
- /** Load reusable sub-agent role definitions from <cwd>/.code-shell/agents. */
106
- export declare function loadAgentDefinitionsForCwd(cwd: string): AgentDefinitionRegistry;
44
+ /**
45
+ * Load reusable sub-agent role definitions, merging:
46
+ * 1. project-level <cwd>/.code-shell/agents/*.md (ships built-ins)
47
+ * 2. user-level ~/.code-shell/agents/*.md (user wins on name)
48
+ * Names in `disabledAgents` are filtered out so the LLM never sees them.
49
+ */
50
+ /**
51
+ * Resolve the working directory for a run. Precedence:
52
+ * options.cwd > resumed session's state.cwd > config.cwd > process.cwd()
53
+ *
54
+ * The session-cwd tier is what stops a project-bound session from being
55
+ * resumed against the wrong directory: when a host omits options.cwd (e.g. its
56
+ * sidebar repo selection drifted to null), the session's own recorded cwd is
57
+ * recovered so the engine still loads THAT project's agents/settings/memory,
58
+ * not whatever process.cwd() happens to be. Pure so the precedence is testable
59
+ * without standing up an Engine.
60
+ */
61
+ export declare function resolveRunCwd(args: {
62
+ optionCwd?: string;
63
+ sessionCwd?: string;
64
+ configCwd?: string;
65
+ processCwd: string;
66
+ }): string;
67
+ export declare function loadAgentDefinitionsForCwd(cwd: string, disabledAgents?: string[], disabledPlugins?: string[]): AgentDefinitionRegistry;
68
+ /**
69
+ * #7: apply a project's per-turn builtin capability override to a tool list.
70
+ * A builtin marked `off` for the current cwd is HIDDEN from the turn's tool
71
+ * list (matching how skills/plugins/agents `off` apply mid-session). `on` /
72
+ * `inherit` / absent keep the tool — we can't re-add a tool the ctor-frozen
73
+ * registry omitted, but `on` for a tool already present is a no-op. Pure +
74
+ * exported so it's unit-testable without a full run() turn.
75
+ */
76
+ export declare function applyBuiltinOverrideVisibility<T extends {
77
+ name: string;
78
+ }>(tools: T[], override: Record<string, CapabilityOverride> | undefined): T[];
107
79
  /**
108
80
  * Compute a child Engine's tool scope.
109
81
  * - `allowlist` set → child enabled = allowlist minus nested-agent tools
@@ -117,21 +89,44 @@ export declare function resolveChildToolScope(allowlist: string[] | undefined, p
117
89
  };
118
90
  export declare class Engine {
119
91
  private config;
120
- private readonly preset;
92
+ private preset;
121
93
  private toolRegistry;
122
94
  private hooks;
123
95
  private sessionManager;
124
96
  private mcpManager;
125
97
  private modelPool;
98
+ /**
99
+ * Handles for the settings-sourced hook handlers registered by
100
+ * registerSettingsHooks(), so reloadHooks() can unregister exactly those
101
+ * (and nothing else — plugin hooks, goal/builtin hooks are untouched) before
102
+ * re-registering from fresh settings. Without this, a reload would
103
+ * accumulate duplicate settings-hook handlers that all fire per event.
104
+ */
105
+ private settingsHookHandles;
106
+ /**
107
+ * Highest config-reload version applied so far. refreshRuntimeConfig drops
108
+ * any payload whose version is <= this, so out-of-order reload deliveries
109
+ * (multiple quick settings saves) can't let an older config clobber a newer
110
+ * one.
111
+ */
112
+ private lastAppliedConfigVersion;
126
113
  /** Memoized sub-agent role registry, keyed by the cwd it was loaded from. */
127
114
  private agentDefsCache?;
128
115
  /** Shared resources supplied at construction (adapter pattern — null when self-constructed). */
129
116
  readonly runtime: EngineRuntime | null;
117
+ private readonly sandboxCache;
130
118
  /** Active permission mode for this Engine instance. */
131
119
  permissionMode: NonNullable<EngineConfig["permissionMode"]>;
132
120
  /** True when permissionMode === "plan". */
133
121
  planMode: boolean;
134
122
  private settingsManager;
123
+ /**
124
+ * Cached auxiliary-task LLM client, keyed by the models[].key it was built
125
+ * from. Background calls (memory extraction, auto-dream) reuse it across
126
+ * runs so we don't redo the provider handshake every session. Invalidated
127
+ * implicitly: a changed auxModelKey produces a different cache key.
128
+ */
129
+ private auxClientCache?;
135
130
  private lastContextManager;
136
131
  private lastMessages;
137
132
  private lastSessionId;
@@ -152,10 +147,49 @@ export declare class Engine {
152
147
  * LLM response arrives.
153
148
  */
154
149
  private ctxOverheadBySid;
150
+ /**
151
+ * Step-gap steering queue (per sessionId, in-memory). Host pushes user
152
+ * messages here via enqueueSteer while a run is in flight; the turn loop
153
+ * drains it at each step boundary and splices them into the next LLM request
154
+ * WITHOUT aborting (the 不打断 path, vs cancel+resend). Pure memory, forgotten
155
+ * on process exit — same model as the credential session-allow set, so
156
+ * multiple Engines don't interfere and it stays cleanly extractable.
157
+ */
158
+ private steerQueueBySid;
155
159
  private activePermission;
160
+ /**
161
+ * The TurnLoop of the in-flight run(), exposed so extendGoalRun() can bump a
162
+ * running goal's turn/budget ceilings mid-run (TODO 3.1). Null when idle.
163
+ */
164
+ private activeTurnLoop;
165
+ /**
166
+ * The goal-stop hook of the in-flight goal run, exposed so clearGoal() can
167
+ * unregister it mid-run (the closure holds the now-cleared goal and would
168
+ * otherwise keep re-blocking the stop). Null when no goal run is active.
169
+ */
170
+ private activeGoalHook;
171
+ /**
172
+ * The in-flight run's session bundle, held so clearGoal() can wipe the goal
173
+ * on the SAME instance the run loop is persisting each turn — not a fresh
174
+ * detached copy from resume(). Without this, a mid-run 清除 clears disk, but
175
+ * the still-running loop's next saveState(bundle.state) resurrects the goal
176
+ * (bundle.state.activeGoal was never dropped). A never-completing goal run
177
+ * (judge keeps returning not_met → continueSession) stays live for a long
178
+ * time, so this write-back race is the norm, not an edge case, for such runs.
179
+ * Single-valued like activeTurnLoop — one top-level run per engine at a time.
180
+ * Null when idle; set at run start, cleared in run's finally.
181
+ */
182
+ private activeRunSession;
156
183
  /** Public accessor so UI/clients can read the resolved per-model window. */
157
184
  get maxContextTokens(): number;
158
185
  private resolveMaxContextTokens;
186
+ /**
187
+ * Compaction thresholds from settings.context, clamped so they keep the
188
+ * required ordering floor < compact < summarize even if the user configures
189
+ * conflicting values (e.g. summarize below compact). Falls back to the
190
+ * ContextManager defaults when a field is absent.
191
+ */
192
+ private resolveContextRatios;
159
193
  /**
160
194
  * Emit a lifecycle hook with isSubAgent auto-merged into data so handlers
161
195
  * can skip noisy injections for spawned children. All Engine-side hook
@@ -171,22 +205,35 @@ export declare class Engine {
171
205
  * should register SDK-side handlers.
172
206
  */
173
207
  private registerSettingsHooks;
208
+ /**
209
+ * Re-apply settings.hooks onto the live HookRegistry after a settings
210
+ * change (config hot-reload layer 2). Surgical: removes ONLY the
211
+ * settings-sourced handlers this Engine previously registered (tracked in
212
+ * settingsHookHandles by identity) and re-runs registerSettingsHooks() from
213
+ * fresh disk settings. Plugin hooks (registered once at construction at
214
+ * priority 80) and goal/builtin/SDK-config hooks are never touched.
215
+ *
216
+ * The SettingsManager cache is invalidated first so the re-read reflects the
217
+ * latest settings.json on disk (mirrors freshSettings()'s load() semantics).
218
+ * Sub-agents never register settings hooks, so this is a no-op for them.
219
+ */
220
+ reloadHooks(): void;
174
221
  constructor(config: EngineConfig);
175
222
  /**
176
- * Load models[] / providers[] from settings into the active ModelPool and
223
+ * Load modelConnections[] from settings into the active ModelPool and
177
224
  * resync this.config.llm with the matching entry. Called from the ctor and
178
225
  * from reloadModelPool() (e.g. after onboarding writes new entries to disk).
179
226
  */
180
227
  private populateModelPoolFromSettings;
181
228
  /**
182
229
  * Re-read settings and refresh the model pool. Used after onboarding /login
183
- * writes new providers[] / models[] to disk so the running engine picks them
230
+ * writes new modelConnections[] to disk so the running engine picks them
184
231
  * up without a process restart. Existing pool entries are kept (re-registering
185
232
  * the same key overwrites them), so callers don't need to clear first.
186
233
  */
187
234
  reloadModelPool(): void;
188
235
  /**
189
- * Auto-populate the model pool when settings.models[] is empty but
236
+ * Auto-populate the model pool when no modelConnections[] are configured but
190
237
  * the user has configured an API key. Detects the provider from the
191
238
  * key prefix / baseUrl and registers all its known models.
192
239
  */
@@ -195,13 +242,58 @@ export declare class Engine {
195
242
  * Register a custom tool (from product adapter) into the tool registry.
196
243
  * Must be called before run().
197
244
  */
198
- registerCustomTool(definition: import("../types.js").RegisteredTool, executor: (args: Record<string, unknown>) => Promise<string>): void;
245
+ registerCustomTool(definition: import("../types.js").RegisteredTool, executor: BuiltinToolFn): void;
199
246
  /**
200
247
  * Inject the askUser handler after construction. Used by AgentServer
201
248
  * to wire its protocol-backed askUser into an Engine that was created
202
249
  * before the server existed (chicken-and-egg: server takes engine in ctor).
203
250
  */
204
251
  setAskUser(fn: AskUserFn | undefined): void;
252
+ /**
253
+ * Inject the browser automation bridge after construction (same chicken-and-egg
254
+ * as setAskUser: the desktop host builds the bridge — which drives a webview —
255
+ * after the Engine exists). Undefined → the browser_* tools degrade with a
256
+ * clear "no browser panel" error.
257
+ */
258
+ setBrowserBridge(bridge: import("../tool-system/browser-bridge.js").BrowserBridge | undefined): void;
259
+ /**
260
+ * Queue a user message to be spliced into the in-flight run for `sessionId`
261
+ * at the next turn-loop step boundary — the 不打断 steering path (vs cancel +
262
+ * resend). General-purpose: any host path (UI 引导, future agent coordination,
263
+ * external triggers) can call it. If no run is active for the session the
264
+ * message simply waits in the queue and is consumed when that session next
265
+ * runs (rare race; host normally only steers while busy). No-op on blank text.
266
+ *
267
+ * `id` is the host's stable queue-entry id. It rides through to the
268
+ * `steer_injected` event (so the host can match the injected bubble back to
269
+ * the queued draft) and is the handle `unsteer` uses to revoke a still-pending
270
+ * entry. A blank id is tolerated but means the entry can't be revoked.
271
+ */
272
+ enqueueSteer(sessionId: string, text: string, id?: string): void;
273
+ /**
274
+ * Revoke a still-pending steer entry (the 撤回 path). Returns true if it was
275
+ * removed, false if it was already consumed by the turn loop (can't take it
276
+ * back — it has been spliced into the run).
277
+ */
278
+ unsteer(sessionId: string, id: string): boolean;
279
+ /** Drain + clear the steer queue for a session (turn loop consumes per step). */
280
+ private consumeSteer;
281
+ /** Wire the cookie→browser injection callback (InjectCredential tool). Same
282
+ * post-construction injection model as setBrowserBridge. */
283
+ setInjectCredential(fn: import("../tool-system/context.js").InjectCredentialFn | undefined): void;
284
+ /**
285
+ * Whether this engine runs unattended (no interactive human). Used by the
286
+ * in-process AgentServer to decide whether to wire an interactive askUser.
287
+ */
288
+ isHeadless(): boolean;
289
+ /**
290
+ * Probe whether a session already exists on disk (its state/transcript dir is
291
+ * present). Used by the protocol server to distinguish "resume an existing
292
+ * session" from "silently create a fresh empty one" — e.g. a cron resume job
293
+ * whose target session the user deleted must fail loudly, not run its prompt
294
+ * against a blank session. A stat probe, not a load.
295
+ */
296
+ sessionExistsOnDisk(sessionId: string): boolean;
205
297
  /**
206
298
  * Run a task from start to finish.
207
299
  */
@@ -210,12 +302,37 @@ export declare class Engine {
210
302
  onStream?: StreamCallback;
211
303
  signal?: AbortSignal;
212
304
  sessionId?: string;
305
+ /**
306
+ * Goal mode for this run: the engine registers a GoalStopHook so the
307
+ * turn loop runs until the session model judges this goal met. Falls
308
+ * back to config.goal. Orthogonal to permissionMode. Accepts a raw
309
+ * string or a full GoalConfig; normalized once at the run boundary.
310
+ */
311
+ goal?: string | GoalConfig;
312
+ /**
313
+ * Marks this turn's task as a SYNTHETIC system-reminder injection (e.g. a
314
+ * background-job completion notification the server re-injects to wake an
315
+ * idle session) rather than the user's own input. The task is still sent
316
+ * to the model as a `role:"user"` message, but it is persisted with an
317
+ * `injected` flag so the disk reader skips rendering it as a user bubble
318
+ * on replay (matching the live UI, which shows only the assistant reply).
319
+ */
320
+ injected?: boolean;
213
321
  }): Promise<EngineResult>;
214
322
  /**
215
323
  * Run the end-of-session memory pipeline as a fire-and-forget background
216
324
  * task. Extracts durable memories from the transcript, saves a session
217
325
  * summary, and conditionally triggers auto-dream consolidation.
218
326
  */
327
+ /**
328
+ * Resolve the LLM client for background/auxiliary work (memory extraction,
329
+ * auto-dream). When settings.defaults.auxText names a valid pool model, build
330
+ * (and cache) a dedicated client for it so per-turn book-keeping runs on a cheap
331
+ * fast model instead of the expensive primary. Falls back to `fallback` (the
332
+ * active run's client) when unset, unknown, or on any build failure — aux
333
+ * work is best-effort and must never break a run.
334
+ */
335
+ private resolveAuxClient;
219
336
  private runMemoryPipeline;
220
337
  /**
221
338
  * Drive the auto-dream tool-call loop.
@@ -234,33 +351,31 @@ export declare class Engine {
234
351
  * bailed before the first LLM call (e.g. registry missing the tools).
235
352
  */
236
353
  private runDreamLoop;
237
- /**
238
- * Execute one memory tool call inside the dream loop. Enforces the two
239
- * dream-loop invariants the prompt also states:
240
- * - Only the 4 memory tools are dispatchable.
241
- * - Save/Delete in "user" scope is refused (returned as a tool error)
242
- * because dream runs without an interactive permission backend.
243
- */
244
- private dispatchDreamTool;
245
354
  getToolRegistry(): ToolRegistry;
246
355
  /**
247
356
  * Switch the active model by pool key. Takes effect on the next run() call.
248
357
  * Returns the new model entry.
249
358
  *
250
- * Persists settings.activeKey (and a legacy settings.model.* mirror) so the
359
+ * Persists settings.defaults.text (= the connection id / pool key) so the
251
360
  * next process startup defaults to the same model — without this, switches
252
361
  * only live in memory and every restart reverts to the previously persisted
253
- * activeKey.
362
+ * defaults.text.
254
363
  */
255
364
  switchModel(key: string): ModelEntry;
365
+ /**
366
+ * Zero a session's cumulative token/cache usage on disk. Called on a model
367
+ * switch: a different model has its own prompt cache, so the accumulated
368
+ * cache-hit stats from the prior model are no longer meaningful. The next
369
+ * run's baseline (snapshotted from state.tokenUsage) then starts from zero.
370
+ */
371
+ resetSessionUsage(sessionId: string): void;
256
372
  /**
257
373
  * Write the active model selection to ~/.code-shell/settings.json.
258
374
  *
259
- * We mirror into the legacy settings.model.* block (provider/name/apiKey/
260
- * baseUrl) because boot paths in cli/main.ts, repl.ts, run.ts still read it.
261
- * The mirror uses resolved llm values (not raw entry.*) so credentials that
262
- * live on settings.providers[] flow through correctly — entry.apiKey is
263
- * undefined when the entry resolves via providerCatalog.
375
+ * Persists settings.defaults.text = entry.key (the connection id == pool
376
+ * key). That is the single field the boot path reads to restore the active
377
+ * text model on the next startup (see ctor: settings.defaults.text pool
378
+ * switch). No legacy activeKey/model.* mirror is written.
264
379
  */
265
380
  private persistActiveModel;
266
381
  /** Get the model pool. */
@@ -270,6 +385,42 @@ export declare class Engine {
270
385
  getHookRegistry(): HookRegistry;
271
386
  getSessionManager(): SessionManager;
272
387
  getConfig(): EngineConfig;
388
+ /**
389
+ * Config hot-reload "layer 2": merge a disk-default config patch into this
390
+ * ALREADY-RUNNING session's `this.config`, reload settings hooks, and
391
+ * incrementally connect any newly-added MCP servers. Applied at the next
392
+ * turn boundary — an in-flight turn is NOT interrupted: it keeps using the
393
+ * PromptComposer it was built with, and the next turn rebuilds the composer
394
+ * from the freshly-merged config (composer is rebuilt per-turn).
395
+ *
396
+ * `version` is a monotonic counter from the server: stale (<=last applied)
397
+ * payloads are dropped so out-of-order reload deliveries can't let an older
398
+ * config clobber a newer one (Q5).
399
+ *
400
+ * MCP: reconciles the shared MCP pool against the new disk-default server
401
+ * set. Added servers connect idempotently; removed/disabled servers are
402
+ * disconnected and their registered MCP tools are unregistered so plugin
403
+ * disable takes effect without an Electron restart.
404
+ *
405
+ * Preset (#2): a preset hot-reload re-resolves `this.preset` so the next-turn
406
+ * PromptComposer picks up the new preset's system prompt / behavior — that's
407
+ * the main user-visible preset effect and it IS hot. The toolRegistry's
408
+ * builtin tool SET, however, is ctor-frozen (and may be shared via runtime):
409
+ * it is NOT rebuilt here. So a preset change that alters the builtin tool set
410
+ * (e.g. general → terminal-coding adds LSP/Brief) only takes effect on the
411
+ * next session restart; we log a warning when that case is detected.
412
+ *
413
+ * disk-default-vs-slice caveat (#8): the patch carries pure DISK-default
414
+ * values (preset/customSystemPrompt/appendSystemPrompt/responseLanguage/
415
+ * userProfile — see diskDefaultsFrom). Spreading them here OVERRIDES any
416
+ * per-request slice override of the same field. This is correct for the
417
+ * desktop host today (its per-request slice only carries permissionMode+cwd,
418
+ * which are excluded from the disk patch). A future host that sets
419
+ * slice.preset (or the other prompt fields) per-request MUST exclude those
420
+ * from the reload patch — or track per-request overrides separately — or this
421
+ * reload will clobber them back to disk values.
422
+ */
423
+ refreshRuntimeConfig(patch: Partial<EngineConfig>, version: number): void;
273
424
  /**
274
425
  * Inject context into a session's transcript without triggering a LLM turn.
275
426
  * The injected content appears as an assistant message so the LLM can see it
@@ -279,6 +430,26 @@ export declare class Engine {
279
430
  * engine.run() call for this session picks up the injected content
280
431
  * instead of a stale snapshot from the previous run.
281
432
  */
433
+ /**
434
+ * Read a session's persisted active goal WITHOUT resuming it (cheap — reads
435
+ * only state.json via SessionManager.readActiveGoal). The desktop host calls
436
+ * this on session load to re-surface the goal block + its Cancel button: a
437
+ * persistent goal lives only in state.activeGoal and is never replayed from
438
+ * the transcript, so after a reload of an aborted goal run the UI would
439
+ * otherwise show nothing (the "goal 还在但页面不显示、取消不了" bug). Returns
440
+ * undefined when the session is unknown or has no active goal.
441
+ */
442
+ getGoal(sessionId: string): GoalConfig | undefined;
443
+ /**
444
+ * Clear a session's persisted active goal (CC `/goal clear`). Works whether
445
+ * the session is idle or its goal run is in flight: it wipes
446
+ * `state.activeGoal` (so the next bare send won't re-inherit it) and, if a
447
+ * goal hook is currently registered for this engine, unregisters it so an
448
+ * in-flight run can stop instead of being re-blocked by the now-cleared goal.
449
+ * Returns true if a goal was actually cleared. Idempotent — clearing a
450
+ * session with no active goal is a no-op returning false.
451
+ */
452
+ clearGoal(sessionId: string): boolean;
282
453
  injectContext(sessionId: string, content: string): void;
283
454
  /**
284
455
  * Force context compaction on the current session.
@@ -309,22 +480,138 @@ export declare class Engine {
309
480
  */
310
481
  setPermissionMode(mode: NonNullable<EngineConfig["permissionMode"]>): void;
311
482
  getPermissionMode(): NonNullable<EngineConfig["permissionMode"]>;
483
+ /**
484
+ * Extend the in-flight run's turn ceiling and/or goal budgets (TODO 3.1 —
485
+ * 运行中续轮/加预算). No-op (returns null) when no run is active. Lets a user
486
+ * keep an unattended goal going past its original cap instead of restarting.
487
+ */
488
+ extendGoalRun(opts: GoalExtension): {
489
+ maxTurns: number;
490
+ tokenBudget?: number;
491
+ timeBudgetMs?: number;
492
+ maxStopBlocks: number;
493
+ } | null;
494
+ /**
495
+ * The effective permission rules for the current mode + cwd (TODO 5.1) —
496
+ * preset defaults + mode-derived + settings.permissions.rules, in the same
497
+ * order the classifier evaluates them. Exposed read-only so `/permissions`
498
+ * (and any UI) can list what's actually in force. Pure read; builds the same
499
+ * rule set buildPermissionConfig does, without constructing a backend.
500
+ */
501
+ getPermissionRules(): import("../types.js").PermissionRule[];
312
502
  /**
313
503
  * Toggle plan mode directly. Called by the Plan tool (Task 7) via ToolContext.engine.
314
504
  * Also syncs permissionMode to keep both fields consistent.
315
505
  */
316
506
  setPlanMode(value: boolean): void;
507
+ /**
508
+ * Block until a background agent's state changes (finishes / its result is
509
+ * enqueued) or `signal` aborts. Resolves `true` if aborted, `false` on a
510
+ * change. The caller re-checks `hasRunningForSession` after each wake, so a
511
+ * spurious wake (another session's agent) just loops again.
512
+ *
513
+ * Subscribes to BOTH the registry AND the notification queue — and that's
514
+ * load-bearing, not belt-and-suspenders. A completing agent calls
515
+ * `markCompleted` (registry notify) and only THEN `enqueue` (queue notify),
516
+ * as two separate statements. If we woke on the registry notify alone, the
517
+ * loop could re-check, see no running agents, and `drainAll` BEFORE the
518
+ * result was enqueued — silently losing the last agent's output. Waking on
519
+ * the queue notify guarantees the item is already in the bucket. But a
520
+ * *cancelled* agent marks-but-never-enqueues (by design), so we also need
521
+ * the registry notify or a final cancel would hang the wait forever. Hence
522
+ * both. Subscribe-before-await closes the check/wait race either way.
523
+ */
524
+ private waitForBackgroundAgentChange;
525
+ /**
526
+ * Like waitForBackgroundAgentChange but with no abort signal and a hard
527
+ * timeout. Resolves `true` on a registry/queue change, `false` if `timeoutMs`
528
+ * elapses first. Used only by the headless abort-drain cleanup, where we want
529
+ * to catch a completing agent's just-about-to-enqueue notification without
530
+ * risking a permanent hang on an agent that never completes.
531
+ */
532
+ private waitForBackgroundAgentChangeOrTimeout;
317
533
  /**
318
534
  * Sub-agent role registry for the given cwd, memoized per-cwd so the
319
535
  * directory is read once rather than every turn. A new cwd (e.g. via
320
536
  * run({ cwd })) reloads.
321
537
  */
322
538
  private getAgentDefinitions;
539
+ /**
540
+ * Read settings.disabledAgents, folded with the project's
541
+ * capabilityOverrides.agents overlay for `cwd`. Unlike disabledSkills,
542
+ * sub-agents do NOT skip this — a disabled role must stay invisible
543
+ * everywhere. The overlay lets a project force-enable a globally-disabled
544
+ * role or force-disable a globally-enabled one (tri-state); read UNMERGED
545
+ * (getForScope) so inherit survives. No cwd / no overlay → baseline
546
+ * unchanged. Mirrors readDisabledLists (skills/plugins).
547
+ */
548
+ private readDisabledAgents;
549
+ /**
550
+ * Read the project's capabilityOverrides.builtin bucket for `cwd`, read
551
+ * UNMERGED (getForScope) so tri-state inherit survives. Sub-agents skip the
552
+ * overlay (minimal surface, same as readDisabledLists) — their builtin lists
553
+ * are already narrowed by resolveChildToolScope. No cwd / error → undefined,
554
+ * so the caller's baseline builtin lists pass through unchanged.
555
+ */
556
+ private readBuiltinOverride;
323
557
  /**
324
558
  * Build a base ToolContext for this Engine. Used by run() (which then
325
559
  * overlays turn-specific fields like sandbox and subAgentSpawner) and
326
560
  * by tests that want a ToolContext without a full run() cycle.
327
561
  */
562
+ private resolveSandboxWithoutRuntime;
563
+ /**
564
+ * Build the shell env layered onto the Bash tool / background shells (see
565
+ * mergeShellEnv). Three user-configured sources, merged lowest → highest:
566
+ *
567
+ * 1. project `localEnvironment.env` — the per-project "local environment"
568
+ * panel (DATABASE_URL etc.); the floor, so a project's own panel values
569
+ * can be overridden by an explicit top-level `env`.
570
+ * 2. global top-level `env` — ~/.code-shell/settings.json; the
571
+ * canonical home for API keys (OPENAI_API_KEY) a skill script reads —
572
+ * configure once, every project's skills get it.
573
+ * 3. project top-level `env` — .code-shell/settings.json; a project
574
+ * that wants to override a global key wins.
575
+ *
576
+ * Each scope is read UNMERGED so the layering here is the single source of
577
+ * precedence (getForScope merges nothing). Returns undefined when no layer
578
+ * contributes a key, so the caller passes it through unchanged for projects
579
+ * that configure none.
580
+ *
581
+ * Sub-agents: a sub-agent is the user's OWN agent doing the user's work
582
+ * (mirrors Claude Code, where sub-agents inherit the parent environment), so
583
+ * it now reads the SAME env as the parent. The sub-agent branch is kept as an
584
+ * explicit seam (`filterSubagentEnv`) rather than removed — a future policy
585
+ * could narrow what a sub-agent sees (e.g. drop credential secrets) by
586
+ * changing that one hook; today it passes everything through unchanged.
587
+ * A no-cwd context still gets nothing (there is genuinely no project to read).
588
+ *
589
+ * None of these is filtered through the deny regex (mergeShellEnv): the user
590
+ * put them there deliberately. The allowlist/deny machinery only guards the
591
+ * host's process.env from a tainted model exfiltrating it via `env | curl`.
592
+ */
593
+ private readShellEnv;
594
+ /**
595
+ * Policy seam for what a sub-agent's shell sees. A sub-agent inherits the
596
+ * parent environment by default (mirrors Claude Code), so this is the
597
+ * identity function today. It exists so a future policy can narrow the set
598
+ * (e.g. strip credential `exposeAsEnv` secrets, or allowlist by name) in ONE
599
+ * place instead of scattering `isSubAgent` checks through readShellEnv.
600
+ */
601
+ private filterSubagentEnv;
602
+ /**
603
+ * Read the project's `localEnvironment.setupScripts` for this cwd (the raw
604
+ * per-platform map). Used by EnterWorktree to run setup once in a freshly
605
+ * created worktree. Returns undefined for sub-agents / no cwd (same minimal
606
+ * surface as readShellEnv). The platform selection + run live in
607
+ * git/worktree.ts; this only fetches the configured scripts.
608
+ */
609
+ readWorktreeSetupScripts(cwd?: string): {
610
+ default?: string;
611
+ macos?: string;
612
+ linux?: string;
613
+ windows?: string;
614
+ } | undefined;
328
615
  buildToolContext(): ToolContext;
329
616
  /**
330
617
  * Read settings.disabledSkills + settings.disabledPlugins in a single
@@ -338,4 +625,40 @@ export declare class Engine {
338
625
  * the same snapshot.
339
626
  */
340
627
  private readDisabledLists;
628
+ /**
629
+ * Public view of the folded disabled lists, for hosts that need the
630
+ * EFFECTIVE state (e.g. the protocol server's settings hot-reload rebuilds
631
+ * the plugin-MCP merge per session — a project-level "on" must override the
632
+ * global disabledPlugins there too).
633
+ */
634
+ getEffectiveDisabledLists(): {
635
+ disabledSkills: string[];
636
+ disabledPlugins: string[];
637
+ };
638
+ /**
639
+ * Public: resolve every known feature flag to its effective boolean (the
640
+ * settings overlay merged over the compiled-in defaults). Used by the
641
+ * `config` protocol query so the `/features` command can list flag state.
642
+ */
643
+ getFeatureFlags(): Record<FeatureFlagName, boolean>;
644
+ /**
645
+ * Read the merged `settings.featureFlags` overlay for this cwd. Project
646
+ * settings override user settings via the normal SettingsManager merge.
647
+ * Returns undefined (→ all defaults) on any read error or for sub-agents,
648
+ * so a flag check never throws and a child runs with default behavior.
649
+ */
650
+ private readFeatureFlags;
651
+ /**
652
+ * Read settings.memories ({ maxCount, maxAge, extractionModel, autoExtract }).
653
+ * Returns undefined on any error or when absent, so the memory pipeline
654
+ * falls back to its built-in defaults.
655
+ */
656
+ private readMemoriesConfig;
657
+ /**
658
+ * LLM client for memory extraction (TODO 8.1). Prefers
659
+ * settings.memories.extractionModel when it names a valid pool model;
660
+ * otherwise falls back to the aux client (which itself falls back to the
661
+ * passed primary). Build failures fall back too — extraction is best-effort.
662
+ */
663
+ private resolveExtractionClient;
341
664
  }