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

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 (396) hide show
  1. package/README.md +13 -10
  2. package/dist/agent/agent-definition-registry.d.ts +3 -0
  3. package/dist/agent/agent-definition-registry.js +3 -1
  4. package/dist/agent/agent-definition.d.ts +15 -0
  5. package/dist/agent/agent-definition.js +27 -3
  6. package/dist/arena/context/context-tools.js +47 -4
  7. package/dist/arena/ledger.js +9 -1
  8. package/dist/arena/strategies/utils.d.ts +1 -4
  9. package/dist/arena/strategies/utils.js +7 -84
  10. package/dist/automation/cron-expr.d.ts +10 -0
  11. package/dist/automation/cron-expr.js +23 -5
  12. package/dist/automation/runner.d.ts +21 -4
  13. package/dist/automation/runner.js +48 -12
  14. package/dist/automation/scheduler.d.ts +38 -0
  15. package/dist/automation/scheduler.js +89 -12
  16. package/dist/automation/store.js +5 -2
  17. package/dist/capability-control/disabled-lists.d.ts +25 -0
  18. package/dist/capability-control/disabled-lists.js +57 -0
  19. package/dist/capability-control/overlay.d.ts +15 -0
  20. package/dist/capability-control/overlay.js +27 -0
  21. package/dist/cc-orchestrator/agent-adapter.d.ts +50 -0
  22. package/dist/cc-orchestrator/agent-adapter.js +133 -0
  23. package/dist/cc-orchestrator/cc-capability.d.ts +19 -0
  24. package/dist/cc-orchestrator/cc-capability.js +53 -0
  25. package/dist/cc-orchestrator/codex-session-discovery.d.ts +24 -0
  26. package/dist/cc-orchestrator/codex-session-discovery.js +191 -0
  27. package/dist/cc-orchestrator/codex-session-history.d.ts +25 -0
  28. package/dist/cc-orchestrator/codex-session-history.js +187 -0
  29. package/dist/cc-orchestrator/external-agent-changes.d.ts +19 -0
  30. package/dist/cc-orchestrator/external-agent-changes.js +214 -0
  31. package/dist/cc-orchestrator/external-agent-driver.d.ts +18 -0
  32. package/dist/cc-orchestrator/external-agent-driver.js +69 -0
  33. package/dist/cc-orchestrator/index.d.ts +8 -0
  34. package/dist/cc-orchestrator/index.js +8 -0
  35. package/dist/cc-orchestrator/relevance-judge.d.ts +15 -0
  36. package/dist/cc-orchestrator/relevance-judge.js +29 -0
  37. package/dist/cc-orchestrator/session-discovery.d.ts +46 -0
  38. package/dist/cc-orchestrator/session-discovery.js +125 -0
  39. package/dist/cc-orchestrator/session-history.d.ts +19 -0
  40. package/dist/cc-orchestrator/session-history.js +67 -0
  41. package/dist/cli/agent-server-stdio.d.ts +15 -1
  42. package/dist/cli/agent-server-stdio.js +115 -17
  43. package/dist/cli/agent-server-tcp.js +40 -26
  44. package/dist/context/compaction.d.ts +86 -0
  45. package/dist/context/compaction.js +279 -0
  46. package/dist/context/manager.d.ts +18 -0
  47. package/dist/context/manager.js +181 -48
  48. package/dist/context/token-counter.js +13 -0
  49. package/dist/cost-tracker.js +5 -61
  50. package/dist/credentials/cipher.d.ts +49 -0
  51. package/dist/credentials/cipher.js +45 -0
  52. package/dist/credentials/cookie-jar.d.ts +24 -0
  53. package/dist/credentials/cookie-jar.js +40 -0
  54. package/dist/credentials/index.d.ts +7 -0
  55. package/dist/credentials/index.js +5 -0
  56. package/dist/credentials/inject-credential-tool.d.ts +20 -0
  57. package/dist/credentials/inject-credential-tool.js +130 -0
  58. package/dist/credentials/store.d.ts +72 -0
  59. package/dist/credentials/store.js +184 -0
  60. package/dist/credentials/types.d.ts +56 -0
  61. package/dist/credentials/use-credential-tool.d.ts +29 -0
  62. package/dist/credentials/use-credential-tool.js +205 -0
  63. package/dist/credentials/use-gate.d.ts +56 -0
  64. package/dist/credentials/use-gate.js +52 -0
  65. package/dist/data/model-metadata.d.ts +77 -0
  66. package/dist/data/model-metadata.js +56 -0
  67. package/dist/data/model-metadata.json +216 -0
  68. package/dist/data/openrouter-models.d.ts +18 -7
  69. package/dist/data/openrouter-models.js +35 -8
  70. package/dist/engine/aux-key.d.ts +10 -0
  71. package/dist/engine/aux-key.js +11 -0
  72. package/dist/engine/dynamic-tool-defs.d.ts +19 -0
  73. package/dist/engine/dynamic-tool-defs.js +36 -0
  74. package/dist/engine/engine.d.ts +280 -141
  75. package/dist/engine/engine.js +1193 -245
  76. package/dist/engine/friendly-error.d.ts +18 -0
  77. package/dist/engine/friendly-error.js +63 -0
  78. package/dist/engine/goal.d.ts +145 -0
  79. package/dist/engine/goal.js +144 -0
  80. package/dist/engine/image-policy.d.ts +13 -0
  81. package/dist/engine/image-policy.js +24 -0
  82. package/dist/engine/model-connections-pool.d.ts +17 -0
  83. package/dist/engine/model-connections-pool.js +67 -0
  84. package/dist/engine/model-facade.d.ts +10 -0
  85. package/dist/engine/model-facade.js +15 -0
  86. package/dist/engine/patch-orphaned-tools.js +3 -0
  87. package/dist/engine/query.js +2 -0
  88. package/dist/engine/resolve-llm-config.d.ts +16 -0
  89. package/dist/engine/resolve-llm-config.js +44 -0
  90. package/dist/engine/runtime.d.ts +2 -0
  91. package/dist/engine/runtime.js +27 -1
  92. package/dist/engine/sandbox-cache-key.d.ts +10 -0
  93. package/dist/engine/sandbox-cache-key.js +9 -0
  94. package/dist/engine/sandbox-config.d.ts +31 -0
  95. package/dist/engine/sandbox-config.js +38 -0
  96. package/dist/engine/session-usage.d.ts +31 -0
  97. package/dist/engine/session-usage.js +81 -0
  98. package/dist/engine/steer-queue.d.ts +33 -0
  99. package/dist/engine/steer-queue.js +26 -0
  100. package/dist/engine/streaming-tool-queue.d.ts +12 -0
  101. package/dist/engine/streaming-tool-queue.js +50 -10
  102. package/dist/engine/turn-loop.d.ts +94 -4
  103. package/dist/engine/turn-loop.js +432 -54
  104. package/dist/engine/types.d.ts +175 -0
  105. package/dist/engine/types.js +13 -0
  106. package/dist/external-agents/config.d.ts +2 -0
  107. package/dist/external-agents/config.js +15 -0
  108. package/dist/external-agents/types.d.ts +31 -0
  109. package/dist/external-agents/types.js +1 -0
  110. package/dist/git/utils.d.ts +12 -0
  111. package/dist/git/utils.js +38 -6
  112. package/dist/git/worktree.d.ts +48 -0
  113. package/dist/git/worktree.js +86 -10
  114. package/dist/hooks/goal-stop-hook.d.ts +28 -0
  115. package/dist/hooks/goal-stop-hook.js +186 -9
  116. package/dist/hooks/registry.d.ts +8 -0
  117. package/dist/hooks/registry.js +19 -0
  118. package/dist/hooks/shell-runner.js +10 -21
  119. package/dist/index.d.ts +51 -7
  120. package/dist/index.js +62 -5
  121. package/dist/llm/capabilities/param-specs.d.ts +14 -0
  122. package/dist/llm/capabilities/param-specs.js +62 -0
  123. package/dist/llm/capabilities/rules.js +5 -1
  124. package/dist/llm/capabilities/types.d.ts +10 -0
  125. package/dist/llm/client-base.d.ts +28 -1
  126. package/dist/llm/client-base.js +119 -13
  127. package/dist/llm/model-cache.js +4 -2
  128. package/dist/llm/model-pool.d.ts +21 -0
  129. package/dist/llm/model-pool.js +21 -1
  130. package/dist/llm/provider-auth.d.ts +41 -0
  131. package/dist/llm/provider-auth.js +76 -0
  132. package/dist/llm/provider-catalog.d.ts +4 -0
  133. package/dist/llm/providers/anthropic.js +64 -14
  134. package/dist/llm/providers/openai.d.ts +36 -0
  135. package/dist/llm/providers/openai.js +257 -51
  136. package/dist/llm/reasoning-setting.d.ts +3 -3
  137. package/dist/llm/reasoning-setting.js +9 -1
  138. package/dist/llm/stream-watchdog.js +5 -1
  139. package/dist/llm/token-counter.js +9 -2
  140. package/dist/llm/types.d.ts +4 -0
  141. package/dist/logging/sanitize-messages.js +22 -0
  142. package/dist/lsp/manager.d.ts +1 -1
  143. package/dist/lsp/manager.js +40 -10
  144. package/dist/model-catalog/builtin.d.ts +12 -0
  145. package/dist/model-catalog/builtin.js +412 -0
  146. package/dist/model-catalog/gen-connections.d.ts +20 -0
  147. package/dist/model-catalog/gen-connections.js +28 -0
  148. package/dist/model-catalog/index.d.ts +41 -0
  149. package/dist/model-catalog/index.js +90 -0
  150. package/dist/model-catalog/params.d.ts +20 -0
  151. package/dist/model-catalog/params.js +45 -0
  152. package/dist/model-catalog/resolve.d.ts +48 -0
  153. package/dist/model-catalog/resolve.js +33 -0
  154. package/dist/model-catalog/save-entry.d.ts +32 -0
  155. package/dist/model-catalog/save-entry.js +104 -0
  156. package/dist/model-catalog/types.d.ts +561 -0
  157. package/dist/model-catalog/types.js +93 -0
  158. package/dist/model-catalog/upsert.d.ts +9 -0
  159. package/dist/model-catalog/upsert.js +8 -0
  160. package/dist/onboarding.d.ts +12 -82
  161. package/dist/onboarding.js +61 -326
  162. package/dist/plugins/gitOps.d.ts +19 -0
  163. package/dist/plugins/gitOps.js +73 -4
  164. package/dist/plugins/installer/checkUpdate.d.ts +16 -0
  165. package/dist/plugins/installer/checkUpdate.js +32 -0
  166. package/dist/plugins/installer/codex/convertCommands.d.ts +19 -0
  167. package/dist/plugins/installer/codex/convertCommands.js +46 -0
  168. package/dist/plugins/installer/codex/convertMcp.d.ts +5 -2
  169. package/dist/plugins/installer/codex/convertMcp.js +45 -5
  170. package/dist/plugins/installer/install.js +25 -1
  171. package/dist/plugins/installer/installFromArchive.d.ts +43 -0
  172. package/dist/plugins/installer/installFromArchive.js +134 -0
  173. package/dist/plugins/installer/installFromSource.js +8 -2
  174. package/dist/plugins/installer/loadPluginAgents.js +6 -2
  175. package/dist/plugins/installer/loadPluginMcp.d.ts +9 -2
  176. package/dist/plugins/installer/loadPluginMcp.js +35 -2
  177. package/dist/plugins/installer/pruneDisabled.d.ts +24 -0
  178. package/dist/plugins/installer/pruneDisabled.js +73 -0
  179. package/dist/plugins/installer/types.d.ts +5 -2
  180. package/dist/plugins/installer/types.js +1 -0
  181. package/dist/plugins/installer/uninstall.js +4 -0
  182. package/dist/plugins/installer/unzip.d.ts +14 -0
  183. package/dist/plugins/installer/unzip.js +82 -0
  184. package/dist/plugins/installer/update.d.ts +14 -0
  185. package/dist/plugins/installer/update.js +53 -21
  186. package/dist/plugins/loadPluginHooks.d.ts +47 -1
  187. package/dist/plugins/loadPluginHooks.js +73 -1
  188. package/dist/plugins/marketplaceManager.d.ts +7 -0
  189. package/dist/plugins/marketplaceManager.js +20 -0
  190. package/dist/plugins/pluginCommandHook.js +4 -18
  191. package/dist/plugins/pluginContent.d.ts +30 -0
  192. package/dist/plugins/pluginContent.js +83 -0
  193. package/dist/plugins/pluginInstaller.d.ts +13 -0
  194. package/dist/plugins/pluginInstaller.js +42 -8
  195. package/dist/plugins/schemas.js +1 -0
  196. package/dist/plugins/types.d.ts +6 -0
  197. package/dist/preset/index.d.ts +11 -1
  198. package/dist/preset/index.js +115 -6
  199. package/dist/product/types.d.ts +1 -1
  200. package/dist/prompt/composer.d.ts +32 -0
  201. package/dist/prompt/composer.js +75 -21
  202. package/dist/prompt/instruction-scanner.js +5 -3
  203. package/dist/prompt/section-loader.js +1 -0
  204. package/dist/prompt/sections/base.md +2 -0
  205. package/dist/prompt/sections/browser.md +10 -0
  206. package/dist/prompt/sections/coding.md +4 -0
  207. package/dist/protocol/chat-session-manager.d.ts +9 -2
  208. package/dist/protocol/chat-session-manager.js +38 -0
  209. package/dist/protocol/chat-session.d.ts +69 -1
  210. package/dist/protocol/chat-session.js +102 -4
  211. package/dist/protocol/client.d.ts +31 -0
  212. package/dist/protocol/client.js +44 -0
  213. package/dist/protocol/server.d.ts +120 -7
  214. package/dist/protocol/server.js +753 -51
  215. package/dist/protocol/transport.js +3 -2
  216. package/dist/protocol/types.d.ts +60 -0
  217. package/dist/protocol/types.js +16 -0
  218. package/dist/quota/credentials.d.ts +3 -0
  219. package/dist/quota/credentials.js +80 -0
  220. package/dist/quota/index.d.ts +36 -0
  221. package/dist/quota/index.js +155 -0
  222. package/dist/quota/types.d.ts +48 -0
  223. package/dist/quota/types.js +13 -0
  224. package/dist/review/review-prompt.d.ts +28 -0
  225. package/dist/review/review-prompt.js +81 -0
  226. package/dist/run/FileRunStore.js +8 -3
  227. package/dist/run/RunApprovalBackend.js +25 -5
  228. package/dist/run/RunManager.d.ts +12 -0
  229. package/dist/run/RunManager.js +35 -0
  230. package/dist/run/factory.d.ts +1 -1
  231. package/dist/runtime/background-shell.d.ts +139 -0
  232. package/dist/runtime/background-shell.js +509 -0
  233. package/dist/runtime/output-clean.d.ts +24 -0
  234. package/dist/runtime/output-clean.js +41 -0
  235. package/dist/runtime/ring-file.d.ts +64 -0
  236. package/dist/runtime/ring-file.js +174 -0
  237. package/dist/runtime/safe-spawn.js +98 -39
  238. package/dist/runtime/spawn-common.d.ts +159 -0
  239. package/dist/runtime/spawn-common.js +404 -0
  240. package/dist/runtime/truncate-output.d.ts +22 -0
  241. package/dist/runtime/truncate-output.js +49 -0
  242. package/dist/runtime/utf8-cut.d.ts +11 -0
  243. package/dist/runtime/utf8-cut.js +23 -0
  244. package/dist/services/auto-dream.d.ts +4 -0
  245. package/dist/services/auto-dream.js +26 -26
  246. package/dist/services/diagnostics.d.ts +1 -2
  247. package/dist/services/diagnostics.js +12 -7
  248. package/dist/services/extract-memories.d.ts +14 -1
  249. package/dist/services/extract-memories.js +45 -6
  250. package/dist/services/memory-orchestrator.d.ts +21 -0
  251. package/dist/services/memory-orchestrator.js +125 -50
  252. package/dist/services/session-memory.js +24 -12
  253. package/dist/session/file-history.d.ts +124 -1
  254. package/dist/session/file-history.js +222 -6
  255. package/dist/session/memory.d.ts +116 -2
  256. package/dist/session/memory.js +250 -28
  257. package/dist/session/session-manager.d.ts +40 -0
  258. package/dist/session/session-manager.js +119 -3
  259. package/dist/session/simple-diff.d.ts +23 -0
  260. package/dist/session/simple-diff.js +84 -0
  261. package/dist/session/transcript.d.ts +29 -1
  262. package/dist/session/transcript.js +56 -2
  263. package/dist/session/undo-target.d.ts +67 -0
  264. package/dist/session/undo-target.js +144 -0
  265. package/dist/settings/disk-defaults.d.ts +9 -2
  266. package/dist/settings/disk-defaults.js +11 -2
  267. package/dist/settings/feature-flags.d.ts +64 -0
  268. package/dist/settings/feature-flags.js +61 -0
  269. package/dist/settings/manager.d.ts +68 -1
  270. package/dist/settings/manager.js +266 -29
  271. package/dist/settings/migrate-config.d.ts +45 -0
  272. package/dist/settings/migrate-config.js +125 -0
  273. package/dist/settings/schema-export.d.ts +25 -0
  274. package/dist/settings/schema-export.js +38 -0
  275. package/dist/settings/schema.d.ts +1186 -771
  276. package/dist/settings/schema.js +268 -97
  277. package/dist/skills/scanner.d.ts +9 -0
  278. package/dist/skills/scanner.js +30 -2
  279. package/dist/stt/resolve-transcribe.d.ts +31 -0
  280. package/dist/stt/resolve-transcribe.js +108 -0
  281. package/dist/stt/transcribe.d.ts +51 -0
  282. package/dist/stt/transcribe.js +65 -0
  283. package/dist/tool-system/browser-bridge.d.ts +226 -0
  284. package/dist/tool-system/browser-bridge.js +163 -0
  285. package/dist/tool-system/builtin/agent-heartbeat.d.ts +49 -0
  286. package/dist/tool-system/builtin/agent-heartbeat.js +89 -0
  287. package/dist/tool-system/builtin/agent-notifications.d.ts +12 -3
  288. package/dist/tool-system/builtin/agent-notifications.js +9 -3
  289. package/dist/tool-system/builtin/agent-output-file.d.ts +38 -0
  290. package/dist/tool-system/builtin/agent-output-file.js +72 -0
  291. package/dist/tool-system/builtin/agent-registry.d.ts +12 -0
  292. package/dist/tool-system/builtin/agent-registry.js +8 -0
  293. package/dist/tool-system/builtin/agent.d.ts +21 -1
  294. package/dist/tool-system/builtin/agent.js +489 -42
  295. package/dist/tool-system/builtin/apply-patch/applier.js +66 -8
  296. package/dist/tool-system/builtin/apply-patch/backup-targets.d.ts +10 -0
  297. package/dist/tool-system/builtin/apply-patch/backup-targets.js +30 -0
  298. package/dist/tool-system/builtin/apply-patch/index.js +0 -15
  299. package/dist/tool-system/builtin/background-jobs.d.ts +76 -0
  300. package/dist/tool-system/builtin/background-jobs.js +124 -0
  301. package/dist/tool-system/builtin/background-shell-tools.d.ts +20 -0
  302. package/dist/tool-system/builtin/background-shell-tools.js +108 -0
  303. package/dist/tool-system/builtin/background-work.d.ts +67 -0
  304. package/dist/tool-system/builtin/background-work.js +86 -0
  305. package/dist/tool-system/builtin/bash-output-style.d.ts +32 -0
  306. package/dist/tool-system/builtin/bash-output-style.js +40 -0
  307. package/dist/tool-system/builtin/bash.d.ts +5 -2
  308. package/dist/tool-system/builtin/bash.js +101 -64
  309. package/dist/tool-system/builtin/browser-tools.d.ts +33 -0
  310. package/dist/tool-system/builtin/browser-tools.js +312 -0
  311. package/dist/tool-system/builtin/cancel-goal.d.ts +31 -0
  312. package/dist/tool-system/builtin/cancel-goal.js +64 -0
  313. package/dist/tool-system/builtin/check-quota.d.ts +15 -0
  314. package/dist/tool-system/builtin/check-quota.js +34 -0
  315. package/dist/tool-system/builtin/config.js +7 -0
  316. package/dist/tool-system/builtin/cron.d.ts +7 -0
  317. package/dist/tool-system/builtin/cron.js +64 -4
  318. package/dist/tool-system/builtin/drive-claude-code.d.ts +30 -0
  319. package/dist/tool-system/builtin/drive-claude-code.js +157 -0
  320. package/dist/tool-system/builtin/edit-model-catalog.d.ts +3 -0
  321. package/dist/tool-system/builtin/edit-model-catalog.js +104 -0
  322. package/dist/tool-system/builtin/edit.js +20 -16
  323. package/dist/tool-system/builtin/eol.d.ts +29 -0
  324. package/dist/tool-system/builtin/eol.js +37 -0
  325. package/dist/tool-system/builtin/file-cache.d.ts +6 -0
  326. package/dist/tool-system/builtin/file-cache.js +8 -0
  327. package/dist/tool-system/builtin/generate-image.d.ts +35 -0
  328. package/dist/tool-system/builtin/generate-image.js +278 -50
  329. package/dist/tool-system/builtin/generate-video.d.ts +55 -0
  330. package/dist/tool-system/builtin/generate-video.js +364 -0
  331. package/dist/tool-system/builtin/glob.js +0 -7
  332. package/dist/tool-system/builtin/grep.d.ts +9 -0
  333. package/dist/tool-system/builtin/grep.js +106 -11
  334. package/dist/tool-system/builtin/image-providers.d.ts +86 -0
  335. package/dist/tool-system/builtin/image-providers.js +190 -0
  336. package/dist/tool-system/builtin/image-uploader.d.ts +33 -0
  337. package/dist/tool-system/builtin/image-uploader.js +74 -0
  338. package/dist/tool-system/builtin/index.d.ts +10 -2
  339. package/dist/tool-system/builtin/index.js +251 -27
  340. package/dist/tool-system/builtin/mcp-tools.js +23 -3
  341. package/dist/tool-system/builtin/memory.js +45 -7
  342. package/dist/tool-system/builtin/notebook-edit.js +0 -7
  343. package/dist/tool-system/builtin/powershell.js +8 -2
  344. package/dist/tool-system/builtin/read.js +10 -10
  345. package/dist/tool-system/builtin/repl.js +4 -1
  346. package/dist/tool-system/builtin/skill.js +9 -0
  347. package/dist/tool-system/builtin/sleep.js +8 -2
  348. package/dist/tool-system/builtin/tool-search.js +25 -7
  349. package/dist/tool-system/builtin/video-providers.d.ts +154 -0
  350. package/dist/tool-system/builtin/video-providers.js +235 -0
  351. package/dist/tool-system/builtin/web-fetch.js +12 -2
  352. package/dist/tool-system/builtin/web-search.js +21 -7
  353. package/dist/tool-system/builtin/worktree.d.ts +2 -1
  354. package/dist/tool-system/builtin/worktree.js +31 -4
  355. package/dist/tool-system/builtin/write.js +0 -6
  356. package/dist/tool-system/context.d.ts +164 -6
  357. package/dist/tool-system/executor.d.ts +3 -1
  358. package/dist/tool-system/executor.js +197 -90
  359. package/dist/tool-system/investigation-guard.js +1 -1
  360. package/dist/tool-system/mcp-manager.d.ts +42 -4
  361. package/dist/tool-system/mcp-manager.js +203 -20
  362. package/dist/tool-system/mcp-stdio-diagnostics.d.ts +9 -0
  363. package/dist/tool-system/mcp-stdio-diagnostics.js +93 -0
  364. package/dist/tool-system/path-policy.d.ts +5 -0
  365. package/dist/tool-system/path-policy.js +307 -8
  366. package/dist/tool-system/permission.d.ts +39 -2
  367. package/dist/tool-system/permission.js +283 -70
  368. package/dist/tool-system/plan-mode-allowlist.d.ts +13 -2
  369. package/dist/tool-system/plan-mode-allowlist.js +24 -2
  370. package/dist/tool-system/registry.d.ts +1 -0
  371. package/dist/tool-system/registry.js +16 -2
  372. package/dist/tool-system/sandbox/index.d.ts +8 -0
  373. package/dist/tool-system/sandbox/index.js +7 -2
  374. package/dist/tool-system/sandbox/off.js +7 -1
  375. package/dist/tool-system/validate-tool-metadata.d.ts +36 -0
  376. package/dist/tool-system/validate-tool-metadata.js +63 -0
  377. package/dist/types.d.ts +252 -7
  378. package/dist/updater.js +20 -9
  379. package/dist/utils/envUtils.d.ts +0 -9
  380. package/dist/utils/envUtils.js +3 -28
  381. package/dist/utils/exec.d.ts +48 -0
  382. package/dist/utils/exec.js +154 -0
  383. package/dist/utils/json.d.ts +12 -0
  384. package/dist/utils/json.js +92 -0
  385. package/dist/utils/theme.d.ts +1 -1
  386. package/dist/utils/theme.js +1 -1
  387. package/dist/utils/toolDisplay.js +0 -1
  388. package/package.json +13 -7
  389. package/dist/agent/coordinator.d.ts +0 -49
  390. package/dist/agent/coordinator.js +0 -77
  391. package/dist/settings/manager.test.js +0 -73
  392. package/dist/tool-system/builtin/remote-trigger.d.ts +0 -6
  393. package/dist/tool-system/builtin/remote-trigger.js +0 -54
  394. package/dist/tool-system/builtin/send-message.d.ts +0 -6
  395. package/dist/tool-system/builtin/send-message.js +0 -47
  396. /package/dist/{settings/manager.test.d.ts → credentials/types.js} +0 -0
@@ -1,22 +1,17 @@
1
1
  /**
2
2
  * Engine — the main facade that wires all components together.
3
3
  */
4
- import type { ClientDefaults, LLMConfig, SessionOrigin, StreamCallback, TerminalReason, TokenUsage } from "../types.js";
4
+ import type { LLMConfig, StreamCallback } from "../types.js";
5
5
  import { ToolRegistry } from "../tool-system/registry.js";
6
6
  import { type BuiltinToolFn } from "../tool-system/builtin/index.js";
7
- import { type ApprovalBackend } from "../tool-system/permission.js";
8
7
  import { HookRegistry } from "../hooks/registry.js";
9
- import type { HookEventName } from "../hooks/events.js";
10
- import type { HookHandler } from "../hooks/registry.js";
11
- import { type GoalConfig } from "./goal.js";
8
+ import { type GoalConfig, type GoalExtension } from "./goal.js";
9
+ import { type CompactStrategy } from "../context/manager.js";
12
10
  import { SessionManager } from "../session/session-manager.js";
13
- import type { CostStateStore } from "./cost-store.js";
14
11
  import type { AskUserFn } from "../tool-system/builtin/ask-user.js";
15
- import { type SettingsScope } from "../settings/manager.js";
16
12
  import type { CapabilityOverride } from "../settings/schema.js";
13
+ import { type FeatureFlagName } from "../settings/feature-flags.js";
17
14
  import type { ToolContext } from "../tool-system/context.js";
18
- import { type SandboxConfig } from "../tool-system/sandbox/index.js";
19
- import { type AgentPresetName } from "../preset/index.js";
20
15
  import { ModelPool, type ModelEntry } from "../llm/model-pool.js";
21
16
  import { AgentDefinitionRegistry } from "../agent/agent-definition-registry.js";
22
17
  import { EngineRuntime } from "./runtime.js";
@@ -31,118 +26,13 @@ export declare function compatFileNamesFrom(instructions?: {
31
26
  compatClaude?: boolean;
32
27
  compatCodex?: boolean;
33
28
  }): string[];
34
- export interface EngineConfig {
35
- llm: LLMConfig;
36
- /**
37
- * Cross-model runtime knobs (temperature/timeout/retryMaxAttempts/imageDetail).
38
- * Stays stable across hot model switches — only `llm` rotates. When omitted,
39
- * Engine reads settings.json (model.temperature, images.detail) on construction.
40
- */
41
- clientDefaults?: ClientDefaults;
42
- cwd?: string;
43
- maxTurns?: number;
44
- maxToolCallsPerTurn?: number;
45
- permissionMode?: "default" | "acceptEdits" | "dontAsk" | "bypassPermissions" | "auto" | "plan";
46
- preset?: AgentPresetName;
47
- enabledBuiltinTools?: string[];
48
- disabledBuiltinTools?: string[];
49
- customSystemPrompt?: string;
50
- appendSystemPrompt?: string;
51
- responseLanguage?: string;
52
- userProfile?: string;
53
- instructions?: {
54
- compatClaude?: boolean;
55
- compatCodex?: boolean;
56
- };
57
- /**
58
- * Goal mode: when set, the engine registers a GoalStopHook on `on_stop`
59
- * so the turn loop runs until the session model judges this goal met
60
- * (bounded by maxStopBlocks + maxTurns). Orthogonal to permissionMode —
61
- * the desktop UI defaults permission to bypass when a goal is set, but
62
- * the engine treats the two independently.
63
- *
64
- * Accepts a raw string (objective only) or a full GoalConfig (objective +
65
- * optional token/time budgets); the run boundary normalizes it once.
66
- */
67
- goal?: string | GoalConfig;
68
- sessionStorageDir?: string;
69
- maxContextTokens?: number;
70
- approvalBackend?: ApprovalBackend;
71
- hooks?: EngineHookConfig[];
72
- askUser?: AskUserFn;
73
- mcpServers?: Record<string, import("../types.js").MCPServerConfig>;
74
- /**
75
- * Optional opaque store for per-session cost/usage state. When provided,
76
- * Engine calls `restore()` on session resume and `serialize()` at the end
77
- * of each `run()` and stores the blob on the session. Without this the
78
- * Engine doesn't persist cost state — it's a UI concern.
79
- */
80
- costStore?: CostStateStore;
81
- /**
82
- * True when the Engine runs in a no-UI / one-shot context (e.g. the `run`
83
- * command). Currently controls InvestigationGuard soft-mode: in headless
84
- * we never hard-block a tool call because there is no human to retry.
85
- * Defaults to false.
86
- */
87
- headless?: boolean;
88
- /**
89
- * When true, treat like headless for InvestigationGuard soft-mode — a
90
- * read-only session should never be hard-blocked for repeated reads.
91
- */
92
- readOnlySession?: boolean;
93
- /**
94
- * Sandbox configuration for shell-tool execution. When omitted, headless
95
- * runs default to "auto" (Seatbelt on macOS / bwrap on Linux when
96
- * available) and interactive runs default to "off" because a human is in
97
- * the loop to approve commands.
98
- */
99
- sandbox?: SandboxConfig;
100
- /**
101
- * True when this Engine is itself a sub-agent (spawned by another
102
- * Engine's Agent tool). Threaded into ToolContext so the Agent tool can
103
- * refuse re-entry — defense in depth against the tool-list strip in
104
- * spawn(): if a tool registry regression ever leaks Agent into a child's
105
- * pool, the runtime check still blocks the call.
106
- */
107
- isSubAgent?: boolean;
108
- /**
109
- * Host/context that created this Engine's sessions — written to state.json's
110
- * `origin` so the desktop disk-rebuild can filter the sidebar (desktop +
111
- * automation shown; tui hidden). Sub-agents override to "subagent".
112
- */
113
- origin?: SessionOrigin;
114
- /**
115
- * Optional shared EngineRuntime providing pre-constructed shared resources
116
- * (modelPool, toolRegistry, etc.). When provided, Engine uses these instead
117
- * of constructing its own. Existing callers that omit this field continue to
118
- * work unchanged — T11 will migrate them.
119
- */
120
- runtime?: EngineRuntime;
121
- /**
122
- * Which disk config layers this Engine may read. Defaults to 'project' —
123
- * the safe default: a library/SDK embedding never silently inherits the
124
- * host user's personal ~/.code-shell config (keys, models, MCP, hooks); it
125
- * only reads the project-level ${cwd}/.code-shell that travels with a repo.
126
- * Host-terminal entrypoints (TUI/desktop/CLI) pass 'full' to restore the
127
- * managed+user+project+local behavior. 'isolated' reads no disk at all.
128
- * Subagents inherit the parent Engine's scope. See SettingsScope.
129
- */
130
- settingsScope?: SettingsScope;
29
+ export type { EngineConfig, EngineHookConfig, EngineResult } from "./types.js";
30
+ import type { EngineConfig, EngineResult } from "./types.js";
31
+ export interface EnqueueSteerResult {
32
+ accepted: boolean;
33
+ id: string;
131
34
  }
132
35
  export { diskDefaultsFrom, type DiskDefaultPatch } from "../settings/disk-defaults.js";
133
- export interface EngineHookConfig {
134
- event: HookEventName;
135
- handler: HookHandler;
136
- priority?: number;
137
- name?: string;
138
- }
139
- export interface EngineResult {
140
- text: string;
141
- reason: TerminalReason;
142
- sessionId: string;
143
- turnCount: number;
144
- usage: TokenUsage;
145
- }
146
36
  /**
147
37
  * Resolve the LLM config for a spawned child Engine.
148
38
  * - `modelKey` set + present in pool → that model's config (pure entry-derived
@@ -162,6 +52,23 @@ export declare function resolveChildLlm(modelKey: string | undefined, pool: Mode
162
52
  * 2. user-level ~/.code-shell/agents/*.md (user wins on name)
163
53
  * Names in `disabledAgents` are filtered out so the LLM never sees them.
164
54
  */
55
+ /**
56
+ * Resolve the working directory for a run. Precedence:
57
+ * options.cwd > resumed session's state.cwd > config.cwd > process.cwd()
58
+ *
59
+ * The session-cwd tier is what stops a project-bound session from being
60
+ * resumed against the wrong directory: when a host omits options.cwd (e.g. its
61
+ * sidebar repo selection drifted to null), the session's own recorded cwd is
62
+ * recovered so the engine still loads THAT project's agents/settings/memory,
63
+ * not whatever process.cwd() happens to be. Pure so the precedence is testable
64
+ * without standing up an Engine.
65
+ */
66
+ export declare function resolveRunCwd(args: {
67
+ optionCwd?: string;
68
+ sessionCwd?: string;
69
+ configCwd?: string;
70
+ processCwd: string;
71
+ }): string;
165
72
  export declare function loadAgentDefinitionsForCwd(cwd: string, disabledAgents?: string[], disabledPlugins?: string[]): AgentDefinitionRegistry;
166
73
  /**
167
74
  * #7: apply a project's per-turn builtin capability override to a tool list.
@@ -245,10 +152,49 @@ export declare class Engine {
245
152
  * LLM response arrives.
246
153
  */
247
154
  private ctxOverheadBySid;
155
+ /**
156
+ * Step-gap steering queue (per sessionId, in-memory). Host pushes user
157
+ * messages here via enqueueSteer while a run is in flight; the turn loop
158
+ * drains it at each step boundary and splices them into the next LLM request
159
+ * WITHOUT aborting (the 不打断 path, vs cancel+resend). Pure memory, forgotten
160
+ * on process exit — same model as the credential session-allow set, so
161
+ * multiple Engines don't interfere and it stays cleanly extractable.
162
+ */
163
+ private steerQueueBySid;
248
164
  private activePermission;
165
+ /**
166
+ * The TurnLoop of the in-flight run(), exposed so extendGoalRun() can bump a
167
+ * running goal's turn/budget ceilings mid-run (TODO 3.1). Null when idle.
168
+ */
169
+ private activeTurnLoop;
170
+ /**
171
+ * The goal-stop hook of the in-flight goal run, exposed so clearGoal() can
172
+ * unregister it mid-run (the closure holds the now-cleared goal and would
173
+ * otherwise keep re-blocking the stop). Null when no goal run is active.
174
+ */
175
+ private activeGoalHook;
176
+ /**
177
+ * The in-flight run's session bundle, held so clearGoal() can wipe the goal
178
+ * on the SAME instance the run loop is persisting each turn — not a fresh
179
+ * detached copy from resume(). Without this, a mid-run 清除 clears disk, but
180
+ * the still-running loop's next saveState(bundle.state) resurrects the goal
181
+ * (bundle.state.activeGoal was never dropped). A never-completing goal run
182
+ * (judge keeps returning not_met → continueSession) stays live for a long
183
+ * time, so this write-back race is the norm, not an edge case, for such runs.
184
+ * Single-valued like activeTurnLoop — one top-level run per engine at a time.
185
+ * Null when idle; set at run start, cleared in run's finally.
186
+ */
187
+ private activeRunSession;
249
188
  /** Public accessor so UI/clients can read the resolved per-model window. */
250
189
  get maxContextTokens(): number;
251
190
  private resolveMaxContextTokens;
191
+ /**
192
+ * Compaction thresholds from settings.context, clamped so they keep the
193
+ * required ordering floor < compact < summarize even if the user configures
194
+ * conflicting values (e.g. summarize below compact). Falls back to the
195
+ * ContextManager defaults when a field is absent.
196
+ */
197
+ private resolveContextRatios;
252
198
  /**
253
199
  * Emit a lifecycle hook with isSubAgent auto-merged into data so handlers
254
200
  * can skip noisy injections for spawned children. All Engine-side hook
@@ -279,20 +225,20 @@ export declare class Engine {
279
225
  reloadHooks(): void;
280
226
  constructor(config: EngineConfig);
281
227
  /**
282
- * Load models[] / providers[] from settings into the active ModelPool and
228
+ * Load modelConnections[] from settings into the active ModelPool and
283
229
  * resync this.config.llm with the matching entry. Called from the ctor and
284
230
  * from reloadModelPool() (e.g. after onboarding writes new entries to disk).
285
231
  */
286
232
  private populateModelPoolFromSettings;
287
233
  /**
288
234
  * Re-read settings and refresh the model pool. Used after onboarding /login
289
- * writes new providers[] / models[] to disk so the running engine picks them
235
+ * writes new modelConnections[] to disk so the running engine picks them
290
236
  * up without a process restart. Existing pool entries are kept (re-registering
291
237
  * the same key overwrites them), so callers don't need to clear first.
292
238
  */
293
239
  reloadModelPool(): void;
294
240
  /**
295
- * Auto-populate the model pool when settings.models[] is empty but
241
+ * Auto-populate the model pool when no modelConnections[] are configured but
296
242
  * the user has configured an API key. Detects the provider from the
297
243
  * key prefix / baseUrl and registers all its known models.
298
244
  */
@@ -308,11 +254,51 @@ export declare class Engine {
308
254
  * before the server existed (chicken-and-egg: server takes engine in ctor).
309
255
  */
310
256
  setAskUser(fn: AskUserFn | undefined): void;
257
+ /**
258
+ * Inject the browser automation bridge after construction (same chicken-and-egg
259
+ * as setAskUser: the desktop host builds the bridge — which drives a webview —
260
+ * after the Engine exists). Undefined → the browser_* tools degrade with a
261
+ * clear "no browser panel" error.
262
+ */
263
+ setBrowserBridge(bridge: import("../tool-system/browser-bridge.js").BrowserBridge | undefined): void;
264
+ /**
265
+ * Queue a user message to be spliced into the in-flight run for `sessionId`
266
+ * at the next turn-loop step boundary — the 不打断 steering path (vs cancel +
267
+ * resend). General-purpose: any host path (UI 引导, future agent coordination,
268
+ * external triggers) can call it. If no run is active for this session, reject
269
+ * without queueing so the host can downgrade to a normal run immediately.
270
+ * No-op on blank text.
271
+ *
272
+ * `id` is the host's stable queue-entry id. It rides through to the
273
+ * `steer_injected` event (so the host can match the injected bubble back to
274
+ * the queued draft) and is the handle `unsteer` uses to revoke a still-pending
275
+ * entry. A blank id is tolerated but means the entry can't be revoked.
276
+ */
277
+ enqueueSteer(sessionId: string, text: string, id?: string, clientMessageId?: string): EnqueueSteerResult;
278
+ /**
279
+ * Revoke a still-pending steer entry (the 撤回 path). Returns true if it was
280
+ * removed, false if it was already consumed by the turn loop (can't take it
281
+ * back — it has been spliced into the run).
282
+ */
283
+ unsteer(sessionId: string, id: string): boolean;
284
+ /** Drain + clear the steer queue for a session (turn loop consumes per step). */
285
+ private consumeSteer;
286
+ /** Wire the cookie→browser injection callback (InjectCredential tool). Same
287
+ * post-construction injection model as setBrowserBridge. */
288
+ setInjectCredential(fn: import("../tool-system/context.js").InjectCredentialFn | undefined): void;
311
289
  /**
312
290
  * Whether this engine runs unattended (no interactive human). Used by the
313
291
  * in-process AgentServer to decide whether to wire an interactive askUser.
314
292
  */
315
293
  isHeadless(): boolean;
294
+ /**
295
+ * Probe whether a session already exists on disk (its state/transcript dir is
296
+ * present). Used by the protocol server to distinguish "resume an existing
297
+ * session" from "silently create a fresh empty one" — e.g. a cron resume job
298
+ * whose target session the user deleted must fail loudly, not run its prompt
299
+ * against a blank session. A stat probe, not a load.
300
+ */
301
+ sessionExistsOnDisk(sessionId: string): boolean;
316
302
  /**
317
303
  * Run a task from start to finish.
318
304
  */
@@ -328,6 +314,17 @@ export declare class Engine {
328
314
  * string or a full GoalConfig; normalized once at the run boundary.
329
315
  */
330
316
  goal?: string | GoalConfig;
317
+ /**
318
+ * Marks this turn's task as a SYNTHETIC system-reminder injection (e.g. a
319
+ * background-job completion notification the server re-injects to wake an
320
+ * idle session) rather than the user's own input. The task is still sent
321
+ * to the model as a `role:"user"` message, but it is persisted with an
322
+ * `injected` flag so the disk reader skips rendering it as a user bubble
323
+ * on replay (matching the live UI, which shows only the assistant reply).
324
+ */
325
+ injected?: boolean;
326
+ /** Stable id for this user-intent, used to make duplicate submits idempotent. */
327
+ clientMessageId?: string;
331
328
  }): Promise<EngineResult>;
332
329
  /**
333
330
  * Run the end-of-session memory pipeline as a fire-and-forget background
@@ -336,12 +333,17 @@ export declare class Engine {
336
333
  */
337
334
  /**
338
335
  * Resolve the LLM client for background/auxiliary work (memory extraction,
339
- * auto-dream). When settings.auxModelKey names a valid pool model, build (and
340
- * cache) a dedicated client for it so per-turn book-keeping runs on a cheap
336
+ * auto-dream). When settings.defaults.auxText names a valid pool model, build
337
+ * (and cache) a dedicated client for it so per-turn book-keeping runs on a cheap
341
338
  * fast model instead of the expensive primary. Falls back to `fallback` (the
342
339
  * active run's client) when unset, unknown, or on any build failure — aux
343
340
  * work is best-effort and must never break a run.
344
341
  */
342
+ /**
343
+ * Build the SummarizeFn used for context compaction. Extracted so both the
344
+ * run path and forceCompact share one definition of the summarization call.
345
+ */
346
+ private buildSummarizeFn;
345
347
  private resolveAuxClient;
346
348
  private runMemoryPipeline;
347
349
  /**
@@ -366,20 +368,24 @@ export declare class Engine {
366
368
  * Switch the active model by pool key. Takes effect on the next run() call.
367
369
  * Returns the new model entry.
368
370
  *
369
- * Persists settings.activeKey (and a legacy settings.model.* mirror) so the
371
+ * Persists settings.defaults.text (= the connection id / pool key) so the
370
372
  * next process startup defaults to the same model — without this, switches
371
373
  * only live in memory and every restart reverts to the previously persisted
372
- * activeKey.
374
+ * defaults.text.
373
375
  */
374
376
  switchModel(key: string): ModelEntry;
377
+ /**
378
+ * Zero the legacy/model-scoped token/cache usage window on disk. The
379
+ * whole-session cumulative counters are intentionally left alone.
380
+ */
381
+ resetSessionUsage(sessionId: string): void;
375
382
  /**
376
383
  * Write the active model selection to ~/.code-shell/settings.json.
377
384
  *
378
- * We mirror into the legacy settings.model.* block (provider/name/apiKey/
379
- * baseUrl) because boot paths in cli/main.ts, repl.ts, run.ts still read it.
380
- * The mirror uses resolved llm values (not raw entry.*) so credentials that
381
- * live on settings.providers[] flow through correctly — entry.apiKey is
382
- * undefined when the entry resolves via providerCatalog.
385
+ * Persists settings.defaults.text = entry.key (the connection id == pool
386
+ * key). That is the single field the boot path reads to restore the active
387
+ * text model on the next startup (see ctor: settings.defaults.text pool
388
+ * switch). No legacy activeKey/model.* mirror is written.
383
389
  */
384
390
  private persistActiveModel;
385
391
  /** Get the model pool. */
@@ -401,12 +407,10 @@ export declare class Engine {
401
407
  * payloads are dropped so out-of-order reload deliveries can't let an older
402
408
  * config clobber a newer one (Q5).
403
409
  *
404
- * MCP: only connects (idempotent already-connected servers are skipped);
405
- * never disconnects, so an in-flight tool call on an existing server is
406
- * never severed (Q3). Removed servers are deferred to the next session
407
- * rebuild. If mcpManager isn't built yet (no MCP run has happened), the
408
- * new servers will be connected on the next run via the existing per-run
409
- * connectAll path — so we skip the connect here.
410
+ * MCP: reconciles the shared MCP pool against the new disk-default server
411
+ * set. Added servers connect idempotently; removed/disabled servers are
412
+ * disconnected and their registered MCP tools are unregistered so plugin
413
+ * disable takes effect without an Electron restart.
410
414
  *
411
415
  * Preset (#2): a preset hot-reload re-resolves `this.preset` so the next-turn
412
416
  * PromptComposer picks up the new preset's system prompt / behavior — that's
@@ -436,16 +440,36 @@ export declare class Engine {
436
440
  * engine.run() call for this session picks up the injected content
437
441
  * instead of a stale snapshot from the previous run.
438
442
  */
443
+ /**
444
+ * Read a session's persisted active goal WITHOUT resuming it (cheap — reads
445
+ * only state.json via SessionManager.readActiveGoal). The desktop host calls
446
+ * this on session load to re-surface the goal block + its Cancel button: a
447
+ * persistent goal lives only in state.activeGoal and is never replayed from
448
+ * the transcript, so after a reload of an aborted goal run the UI would
449
+ * otherwise show nothing (the "goal 还在但页面不显示、取消不了" bug). Returns
450
+ * undefined when the session is unknown or has no active goal.
451
+ */
452
+ getGoal(sessionId: string): GoalConfig | undefined;
453
+ /**
454
+ * Clear a session's persisted active goal (CC `/goal clear`). Works whether
455
+ * the session is idle or its goal run is in flight: it wipes
456
+ * `state.activeGoal` (so the next bare send won't re-inherit it) and, if a
457
+ * goal hook is currently registered for this engine, unregisters it so an
458
+ * in-flight run can stop instead of being re-blocked by the now-cleared goal.
459
+ * Returns true if a goal was actually cleared. Idempotent — clearing a
460
+ * session with no active goal is a no-op returning false.
461
+ */
462
+ clearGoal(sessionId: string): boolean;
439
463
  injectContext(sessionId: string, content: string): void;
440
464
  /**
441
- * Force context compaction on the current session.
465
+ * Force context compaction on a session.
442
466
  * Returns token stats before/after.
443
467
  */
444
- forceCompact(): {
468
+ forceCompact(sessionId?: string): Promise<{
445
469
  before: number;
446
470
  after: number;
447
- strategy: string;
448
- };
471
+ strategy: "none (no active session)" | "no compaction needed" | "compacted" | CompactStrategy;
472
+ }>;
449
473
  private stripUserContextMessage;
450
474
  private getSettingsManager;
451
475
  /**
@@ -466,6 +490,25 @@ export declare class Engine {
466
490
  */
467
491
  setPermissionMode(mode: NonNullable<EngineConfig["permissionMode"]>): void;
468
492
  getPermissionMode(): NonNullable<EngineConfig["permissionMode"]>;
493
+ /**
494
+ * Extend the in-flight run's turn ceiling and/or goal budgets (TODO 3.1 —
495
+ * 运行中续轮/加预算). No-op (returns null) when no run is active. Lets a user
496
+ * keep an unattended goal going past its original cap instead of restarting.
497
+ */
498
+ extendGoalRun(opts: GoalExtension): {
499
+ maxTurns: number;
500
+ tokenBudget?: number;
501
+ timeBudgetMs?: number;
502
+ maxStopBlocks: number;
503
+ } | null;
504
+ /**
505
+ * The effective permission rules for the current mode + cwd (TODO 5.1) —
506
+ * preset defaults + mode-derived + settings.permissions.rules, in the same
507
+ * order the classifier evaluates them. Exposed read-only so `/permissions`
508
+ * (and any UI) can list what's actually in force. Pure read; builds the same
509
+ * rule set buildPermissionConfig does, without constructing a backend.
510
+ */
511
+ getPermissionRules(): import("../types.js").PermissionRule[];
469
512
  /**
470
513
  * Toggle plan mode directly. Called by the Plan tool (Task 7) via ToolContext.engine.
471
514
  * Also syncs permissionMode to keep both fields consistent.
@@ -489,6 +532,14 @@ export declare class Engine {
489
532
  * both. Subscribe-before-await closes the check/wait race either way.
490
533
  */
491
534
  private waitForBackgroundAgentChange;
535
+ /**
536
+ * Like waitForBackgroundAgentChange but with no abort signal and a hard
537
+ * timeout. Resolves `true` on a registry/queue change, `false` if `timeoutMs`
538
+ * elapses first. Used only by the headless abort-drain cleanup, where we want
539
+ * to catch a completing agent's just-about-to-enqueue notification without
540
+ * risking a permanent hang on an agent that never completes.
541
+ */
542
+ private waitForBackgroundAgentChangeOrTimeout;
492
543
  /**
493
544
  * Sub-agent role registry for the given cwd, memoized per-cwd so the
494
545
  * directory is read once rather than every turn. A new cwd (e.g. via
@@ -519,6 +570,58 @@ export declare class Engine {
519
570
  * by tests that want a ToolContext without a full run() cycle.
520
571
  */
521
572
  private resolveSandboxWithoutRuntime;
573
+ /**
574
+ * Build the shell env layered onto the Bash tool / background shells (see
575
+ * mergeShellEnv). Three user-configured sources, merged lowest → highest:
576
+ *
577
+ * 1. project `localEnvironment.env` — the per-project "local environment"
578
+ * panel (DATABASE_URL etc.); the floor, so a project's own panel values
579
+ * can be overridden by an explicit top-level `env`.
580
+ * 2. global top-level `env` — ~/.code-shell/settings.json; the
581
+ * canonical home for API keys (OPENAI_API_KEY) a skill script reads —
582
+ * configure once, every project's skills get it.
583
+ * 3. project top-level `env` — .code-shell/settings.json; a project
584
+ * that wants to override a global key wins.
585
+ *
586
+ * Each scope is read UNMERGED so the layering here is the single source of
587
+ * precedence (getForScope merges nothing). Returns undefined when no layer
588
+ * contributes a key, so the caller passes it through unchanged for projects
589
+ * that configure none.
590
+ *
591
+ * Sub-agents: a sub-agent is the user's OWN agent doing the user's work
592
+ * (mirrors Claude Code, where sub-agents inherit the parent environment), so
593
+ * it now reads the SAME env as the parent. The sub-agent branch is kept as an
594
+ * explicit seam (`filterSubagentEnv`) rather than removed — a future policy
595
+ * could narrow what a sub-agent sees (e.g. drop credential secrets) by
596
+ * changing that one hook; today it passes everything through unchanged.
597
+ * A no-cwd context still gets nothing (there is genuinely no project to read).
598
+ *
599
+ * None of these is filtered through the deny regex (mergeShellEnv): the user
600
+ * put them there deliberately. The allowlist/deny machinery only guards the
601
+ * host's process.env from a tainted model exfiltrating it via `env | curl`.
602
+ */
603
+ private readShellEnv;
604
+ /**
605
+ * Policy seam for what a sub-agent's shell sees. A sub-agent inherits the
606
+ * parent environment by default (mirrors Claude Code), so this is the
607
+ * identity function today. It exists so a future policy can narrow the set
608
+ * (e.g. strip credential `exposeAsEnv` secrets, or allowlist by name) in ONE
609
+ * place instead of scattering `isSubAgent` checks through readShellEnv.
610
+ */
611
+ private filterSubagentEnv;
612
+ /**
613
+ * Read the project's `localEnvironment.setupScripts` for this cwd (the raw
614
+ * per-platform map). Used by EnterWorktree to run setup once in a freshly
615
+ * created worktree. Returns undefined for sub-agents / no cwd (same minimal
616
+ * surface as readShellEnv). The platform selection + run live in
617
+ * git/worktree.ts; this only fetches the configured scripts.
618
+ */
619
+ readWorktreeSetupScripts(cwd?: string): {
620
+ default?: string;
621
+ macos?: string;
622
+ linux?: string;
623
+ windows?: string;
624
+ } | undefined;
522
625
  buildToolContext(): ToolContext;
523
626
  /**
524
627
  * Read settings.disabledSkills + settings.disabledPlugins in a single
@@ -532,4 +635,40 @@ export declare class Engine {
532
635
  * the same snapshot.
533
636
  */
534
637
  private readDisabledLists;
638
+ /**
639
+ * Public view of the folded disabled lists, for hosts that need the
640
+ * EFFECTIVE state (e.g. the protocol server's settings hot-reload rebuilds
641
+ * the plugin-MCP merge per session — a project-level "on" must override the
642
+ * global disabledPlugins there too).
643
+ */
644
+ getEffectiveDisabledLists(): {
645
+ disabledSkills: string[];
646
+ disabledPlugins: string[];
647
+ };
648
+ /**
649
+ * Public: resolve every known feature flag to its effective boolean (the
650
+ * settings overlay merged over the compiled-in defaults). Used by the
651
+ * `config` protocol query so the `/features` command can list flag state.
652
+ */
653
+ getFeatureFlags(): Record<FeatureFlagName, boolean>;
654
+ /**
655
+ * Read the merged `settings.featureFlags` overlay for this cwd. Project
656
+ * settings override user settings via the normal SettingsManager merge.
657
+ * Returns undefined (→ all defaults) on any read error or for sub-agents,
658
+ * so a flag check never throws and a child runs with default behavior.
659
+ */
660
+ private readFeatureFlags;
661
+ /**
662
+ * Read settings.memories ({ maxCount, maxAge, extractionModel, autoExtract }).
663
+ * Returns undefined on any error or when absent, so the memory pipeline
664
+ * falls back to its built-in defaults.
665
+ */
666
+ private readMemoriesConfig;
667
+ /**
668
+ * LLM client for memory extraction (TODO 8.1). Prefers
669
+ * settings.memories.extractionModel when it names a valid pool model;
670
+ * otherwise falls back to the aux client (which itself falls back to the
671
+ * passed primary). Build failures fall back too — extraction is best-effort.
672
+ */
673
+ private resolveExtractionClient;
535
674
  }