@cjhyy/code-shell-core 0.5.0-rc.2 → 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 (387) 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 +56 -0
  45. package/dist/context/compaction.js +186 -0
  46. package/dist/context/manager.js +25 -4
  47. package/dist/cost-tracker.js +5 -61
  48. package/dist/credentials/cipher.d.ts +49 -0
  49. package/dist/credentials/cipher.js +45 -0
  50. package/dist/credentials/cookie-jar.d.ts +24 -0
  51. package/dist/credentials/cookie-jar.js +40 -0
  52. package/dist/credentials/index.d.ts +7 -0
  53. package/dist/credentials/index.js +5 -0
  54. package/dist/credentials/inject-credential-tool.d.ts +20 -0
  55. package/dist/credentials/inject-credential-tool.js +130 -0
  56. package/dist/credentials/store.d.ts +72 -0
  57. package/dist/credentials/store.js +184 -0
  58. package/dist/credentials/types.d.ts +56 -0
  59. package/dist/credentials/use-credential-tool.d.ts +29 -0
  60. package/dist/credentials/use-credential-tool.js +205 -0
  61. package/dist/credentials/use-gate.d.ts +56 -0
  62. package/dist/credentials/use-gate.js +52 -0
  63. package/dist/data/model-metadata.d.ts +77 -0
  64. package/dist/data/model-metadata.js +56 -0
  65. package/dist/data/model-metadata.json +216 -0
  66. package/dist/data/openrouter-models.d.ts +18 -7
  67. package/dist/data/openrouter-models.js +35 -8
  68. package/dist/engine/aux-key.d.ts +10 -0
  69. package/dist/engine/aux-key.js +11 -0
  70. package/dist/engine/dynamic-tool-defs.d.ts +19 -0
  71. package/dist/engine/dynamic-tool-defs.js +36 -0
  72. package/dist/engine/engine.d.ts +267 -138
  73. package/dist/engine/engine.js +957 -191
  74. package/dist/engine/friendly-error.d.ts +18 -0
  75. package/dist/engine/friendly-error.js +63 -0
  76. package/dist/engine/goal.d.ts +145 -0
  77. package/dist/engine/goal.js +144 -0
  78. package/dist/engine/image-policy.d.ts +13 -0
  79. package/dist/engine/image-policy.js +24 -0
  80. package/dist/engine/model-connections-pool.d.ts +17 -0
  81. package/dist/engine/model-connections-pool.js +66 -0
  82. package/dist/engine/model-facade.d.ts +10 -0
  83. package/dist/engine/model-facade.js +25 -0
  84. package/dist/engine/patch-orphaned-tools.js +3 -0
  85. package/dist/engine/resolve-llm-config.d.ts +16 -0
  86. package/dist/engine/resolve-llm-config.js +44 -0
  87. package/dist/engine/runtime.js +2 -1
  88. package/dist/engine/sandbox-cache-key.d.ts +10 -0
  89. package/dist/engine/sandbox-cache-key.js +9 -0
  90. package/dist/engine/sandbox-config.d.ts +31 -0
  91. package/dist/engine/sandbox-config.js +38 -0
  92. package/dist/engine/session-usage.d.ts +19 -0
  93. package/dist/engine/session-usage.js +25 -0
  94. package/dist/engine/steer-queue.d.ts +32 -0
  95. package/dist/engine/steer-queue.js +26 -0
  96. package/dist/engine/streaming-tool-queue.d.ts +12 -0
  97. package/dist/engine/streaming-tool-queue.js +50 -10
  98. package/dist/engine/turn-loop.d.ts +67 -3
  99. package/dist/engine/turn-loop.js +292 -41
  100. package/dist/engine/types.d.ts +175 -0
  101. package/dist/engine/types.js +13 -0
  102. package/dist/external-agents/config.d.ts +2 -0
  103. package/dist/external-agents/config.js +15 -0
  104. package/dist/external-agents/types.d.ts +31 -0
  105. package/dist/external-agents/types.js +1 -0
  106. package/dist/git/utils.js +11 -6
  107. package/dist/git/worktree.d.ts +48 -0
  108. package/dist/git/worktree.js +86 -10
  109. package/dist/hooks/goal-stop-hook.d.ts +28 -0
  110. package/dist/hooks/goal-stop-hook.js +186 -9
  111. package/dist/hooks/registry.d.ts +8 -0
  112. package/dist/hooks/registry.js +19 -0
  113. package/dist/hooks/shell-runner.js +10 -21
  114. package/dist/index.d.ts +49 -6
  115. package/dist/index.js +60 -4
  116. package/dist/llm/capabilities/param-specs.d.ts +14 -0
  117. package/dist/llm/capabilities/param-specs.js +62 -0
  118. package/dist/llm/capabilities/rules.js +4 -0
  119. package/dist/llm/capabilities/types.d.ts +10 -0
  120. package/dist/llm/client-base.d.ts +28 -1
  121. package/dist/llm/client-base.js +119 -13
  122. package/dist/llm/model-cache.js +4 -2
  123. package/dist/llm/model-pool.d.ts +14 -0
  124. package/dist/llm/model-pool.js +13 -0
  125. package/dist/llm/provider-auth.d.ts +41 -0
  126. package/dist/llm/provider-auth.js +76 -0
  127. package/dist/llm/provider-catalog.d.ts +4 -0
  128. package/dist/llm/providers/anthropic.js +64 -14
  129. package/dist/llm/providers/openai.d.ts +36 -0
  130. package/dist/llm/providers/openai.js +257 -51
  131. package/dist/llm/reasoning-setting.d.ts +3 -3
  132. package/dist/llm/reasoning-setting.js +9 -1
  133. package/dist/llm/stream-watchdog.js +5 -1
  134. package/dist/llm/token-counter.js +9 -2
  135. package/dist/llm/types.d.ts +4 -0
  136. package/dist/logging/sanitize-messages.js +22 -0
  137. package/dist/lsp/manager.d.ts +1 -1
  138. package/dist/lsp/manager.js +40 -10
  139. package/dist/model-catalog/builtin.d.ts +12 -0
  140. package/dist/model-catalog/builtin.js +407 -0
  141. package/dist/model-catalog/gen-connections.d.ts +20 -0
  142. package/dist/model-catalog/gen-connections.js +28 -0
  143. package/dist/model-catalog/index.d.ts +41 -0
  144. package/dist/model-catalog/index.js +90 -0
  145. package/dist/model-catalog/params.d.ts +20 -0
  146. package/dist/model-catalog/params.js +45 -0
  147. package/dist/model-catalog/resolve.d.ts +48 -0
  148. package/dist/model-catalog/resolve.js +33 -0
  149. package/dist/model-catalog/save-entry.d.ts +32 -0
  150. package/dist/model-catalog/save-entry.js +104 -0
  151. package/dist/model-catalog/types.d.ts +561 -0
  152. package/dist/model-catalog/types.js +93 -0
  153. package/dist/model-catalog/upsert.d.ts +9 -0
  154. package/dist/model-catalog/upsert.js +8 -0
  155. package/dist/onboarding.d.ts +12 -82
  156. package/dist/onboarding.js +61 -326
  157. package/dist/plugins/gitOps.d.ts +19 -0
  158. package/dist/plugins/gitOps.js +73 -4
  159. package/dist/plugins/installer/checkUpdate.d.ts +16 -0
  160. package/dist/plugins/installer/checkUpdate.js +32 -0
  161. package/dist/plugins/installer/codex/convertCommands.d.ts +19 -0
  162. package/dist/plugins/installer/codex/convertCommands.js +46 -0
  163. package/dist/plugins/installer/codex/convertMcp.d.ts +5 -2
  164. package/dist/plugins/installer/codex/convertMcp.js +45 -5
  165. package/dist/plugins/installer/install.js +25 -1
  166. package/dist/plugins/installer/installFromArchive.d.ts +43 -0
  167. package/dist/plugins/installer/installFromArchive.js +134 -0
  168. package/dist/plugins/installer/installFromSource.js +8 -2
  169. package/dist/plugins/installer/loadPluginAgents.js +6 -2
  170. package/dist/plugins/installer/loadPluginMcp.d.ts +9 -2
  171. package/dist/plugins/installer/loadPluginMcp.js +35 -2
  172. package/dist/plugins/installer/pruneDisabled.d.ts +24 -0
  173. package/dist/plugins/installer/pruneDisabled.js +73 -0
  174. package/dist/plugins/installer/types.d.ts +5 -2
  175. package/dist/plugins/installer/types.js +1 -0
  176. package/dist/plugins/installer/uninstall.js +4 -0
  177. package/dist/plugins/installer/unzip.d.ts +14 -0
  178. package/dist/plugins/installer/unzip.js +82 -0
  179. package/dist/plugins/installer/update.d.ts +14 -0
  180. package/dist/plugins/installer/update.js +53 -21
  181. package/dist/plugins/loadPluginHooks.d.ts +47 -1
  182. package/dist/plugins/loadPluginHooks.js +73 -1
  183. package/dist/plugins/marketplaceManager.d.ts +7 -0
  184. package/dist/plugins/marketplaceManager.js +20 -0
  185. package/dist/plugins/pluginCommandHook.js +4 -18
  186. package/dist/plugins/pluginContent.d.ts +30 -0
  187. package/dist/plugins/pluginContent.js +83 -0
  188. package/dist/plugins/pluginInstaller.d.ts +13 -0
  189. package/dist/plugins/pluginInstaller.js +42 -8
  190. package/dist/plugins/schemas.js +1 -0
  191. package/dist/plugins/types.d.ts +6 -0
  192. package/dist/preset/index.d.ts +7 -1
  193. package/dist/preset/index.js +96 -6
  194. package/dist/product/types.d.ts +1 -1
  195. package/dist/prompt/composer.d.ts +27 -0
  196. package/dist/prompt/composer.js +67 -21
  197. package/dist/prompt/instruction-scanner.js +5 -3
  198. package/dist/prompt/section-loader.js +1 -0
  199. package/dist/prompt/sections/base.md +1 -0
  200. package/dist/prompt/sections/browser.md +10 -0
  201. package/dist/prompt/sections/coding.md +4 -0
  202. package/dist/protocol/chat-session-manager.d.ts +8 -2
  203. package/dist/protocol/chat-session-manager.js +36 -0
  204. package/dist/protocol/chat-session.d.ts +65 -0
  205. package/dist/protocol/chat-session.js +94 -2
  206. package/dist/protocol/client.d.ts +27 -0
  207. package/dist/protocol/client.js +38 -0
  208. package/dist/protocol/server.d.ts +112 -0
  209. package/dist/protocol/server.js +586 -16
  210. package/dist/protocol/transport.js +3 -2
  211. package/dist/protocol/types.d.ts +46 -0
  212. package/dist/protocol/types.js +16 -0
  213. package/dist/quota/credentials.d.ts +3 -0
  214. package/dist/quota/credentials.js +80 -0
  215. package/dist/quota/index.d.ts +36 -0
  216. package/dist/quota/index.js +155 -0
  217. package/dist/quota/types.d.ts +48 -0
  218. package/dist/quota/types.js +13 -0
  219. package/dist/review/review-prompt.d.ts +28 -0
  220. package/dist/review/review-prompt.js +81 -0
  221. package/dist/run/FileRunStore.js +8 -3
  222. package/dist/run/RunApprovalBackend.js +25 -5
  223. package/dist/run/RunManager.d.ts +12 -0
  224. package/dist/run/RunManager.js +35 -0
  225. package/dist/run/factory.d.ts +1 -1
  226. package/dist/runtime/background-shell.d.ts +139 -0
  227. package/dist/runtime/background-shell.js +495 -0
  228. package/dist/runtime/output-clean.d.ts +24 -0
  229. package/dist/runtime/output-clean.js +41 -0
  230. package/dist/runtime/ring-file.d.ts +64 -0
  231. package/dist/runtime/ring-file.js +174 -0
  232. package/dist/runtime/safe-spawn.js +15 -34
  233. package/dist/runtime/spawn-common.d.ts +148 -0
  234. package/dist/runtime/spawn-common.js +303 -0
  235. package/dist/runtime/truncate-output.d.ts +22 -0
  236. package/dist/runtime/truncate-output.js +49 -0
  237. package/dist/runtime/utf8-cut.d.ts +11 -0
  238. package/dist/runtime/utf8-cut.js +23 -0
  239. package/dist/services/auto-dream.d.ts +4 -0
  240. package/dist/services/auto-dream.js +26 -26
  241. package/dist/services/diagnostics.d.ts +1 -2
  242. package/dist/services/diagnostics.js +12 -7
  243. package/dist/services/extract-memories.d.ts +14 -1
  244. package/dist/services/extract-memories.js +45 -6
  245. package/dist/services/memory-orchestrator.d.ts +21 -0
  246. package/dist/services/memory-orchestrator.js +125 -50
  247. package/dist/services/session-memory.js +24 -12
  248. package/dist/session/file-history.d.ts +124 -1
  249. package/dist/session/file-history.js +222 -6
  250. package/dist/session/memory.d.ts +116 -2
  251. package/dist/session/memory.js +250 -28
  252. package/dist/session/session-manager.d.ts +40 -0
  253. package/dist/session/session-manager.js +113 -3
  254. package/dist/session/simple-diff.d.ts +23 -0
  255. package/dist/session/simple-diff.js +84 -0
  256. package/dist/session/transcript.d.ts +25 -1
  257. package/dist/session/transcript.js +35 -2
  258. package/dist/session/undo-target.d.ts +67 -0
  259. package/dist/session/undo-target.js +144 -0
  260. package/dist/settings/disk-defaults.d.ts +9 -2
  261. package/dist/settings/disk-defaults.js +11 -2
  262. package/dist/settings/feature-flags.d.ts +64 -0
  263. package/dist/settings/feature-flags.js +61 -0
  264. package/dist/settings/manager.d.ts +68 -1
  265. package/dist/settings/manager.js +266 -29
  266. package/dist/settings/migrate-config.d.ts +45 -0
  267. package/dist/settings/migrate-config.js +125 -0
  268. package/dist/settings/schema-export.d.ts +25 -0
  269. package/dist/settings/schema-export.js +38 -0
  270. package/dist/settings/schema.d.ts +1186 -771
  271. package/dist/settings/schema.js +268 -97
  272. package/dist/skills/scanner.d.ts +9 -0
  273. package/dist/skills/scanner.js +30 -2
  274. package/dist/stt/resolve-transcribe.d.ts +31 -0
  275. package/dist/stt/resolve-transcribe.js +108 -0
  276. package/dist/stt/transcribe.d.ts +51 -0
  277. package/dist/stt/transcribe.js +65 -0
  278. package/dist/tool-system/browser-bridge.d.ts +226 -0
  279. package/dist/tool-system/browser-bridge.js +163 -0
  280. package/dist/tool-system/builtin/agent-heartbeat.d.ts +49 -0
  281. package/dist/tool-system/builtin/agent-heartbeat.js +89 -0
  282. package/dist/tool-system/builtin/agent-notifications.d.ts +12 -3
  283. package/dist/tool-system/builtin/agent-notifications.js +9 -3
  284. package/dist/tool-system/builtin/agent-output-file.d.ts +38 -0
  285. package/dist/tool-system/builtin/agent-output-file.js +72 -0
  286. package/dist/tool-system/builtin/agent-registry.d.ts +12 -0
  287. package/dist/tool-system/builtin/agent-registry.js +8 -0
  288. package/dist/tool-system/builtin/agent.d.ts +21 -1
  289. package/dist/tool-system/builtin/agent.js +489 -42
  290. package/dist/tool-system/builtin/apply-patch/applier.js +66 -8
  291. package/dist/tool-system/builtin/apply-patch/backup-targets.d.ts +10 -0
  292. package/dist/tool-system/builtin/apply-patch/backup-targets.js +30 -0
  293. package/dist/tool-system/builtin/apply-patch/index.js +0 -15
  294. package/dist/tool-system/builtin/background-jobs.d.ts +76 -0
  295. package/dist/tool-system/builtin/background-jobs.js +124 -0
  296. package/dist/tool-system/builtin/background-shell-tools.d.ts +20 -0
  297. package/dist/tool-system/builtin/background-shell-tools.js +108 -0
  298. package/dist/tool-system/builtin/background-work.d.ts +67 -0
  299. package/dist/tool-system/builtin/background-work.js +86 -0
  300. package/dist/tool-system/builtin/bash-output-style.d.ts +32 -0
  301. package/dist/tool-system/builtin/bash-output-style.js +40 -0
  302. package/dist/tool-system/builtin/bash.d.ts +5 -2
  303. package/dist/tool-system/builtin/bash.js +98 -62
  304. package/dist/tool-system/builtin/browser-tools.d.ts +33 -0
  305. package/dist/tool-system/builtin/browser-tools.js +312 -0
  306. package/dist/tool-system/builtin/cancel-goal.d.ts +31 -0
  307. package/dist/tool-system/builtin/cancel-goal.js +64 -0
  308. package/dist/tool-system/builtin/check-quota.d.ts +15 -0
  309. package/dist/tool-system/builtin/check-quota.js +34 -0
  310. package/dist/tool-system/builtin/config.js +7 -0
  311. package/dist/tool-system/builtin/cron.d.ts +7 -0
  312. package/dist/tool-system/builtin/cron.js +55 -3
  313. package/dist/tool-system/builtin/drive-claude-code.d.ts +30 -0
  314. package/dist/tool-system/builtin/drive-claude-code.js +157 -0
  315. package/dist/tool-system/builtin/edit-model-catalog.d.ts +3 -0
  316. package/dist/tool-system/builtin/edit-model-catalog.js +94 -0
  317. package/dist/tool-system/builtin/edit.js +20 -16
  318. package/dist/tool-system/builtin/eol.d.ts +29 -0
  319. package/dist/tool-system/builtin/eol.js +37 -0
  320. package/dist/tool-system/builtin/file-cache.d.ts +6 -0
  321. package/dist/tool-system/builtin/file-cache.js +8 -0
  322. package/dist/tool-system/builtin/generate-image.d.ts +35 -0
  323. package/dist/tool-system/builtin/generate-image.js +278 -50
  324. package/dist/tool-system/builtin/generate-video.d.ts +55 -0
  325. package/dist/tool-system/builtin/generate-video.js +361 -0
  326. package/dist/tool-system/builtin/glob.js +0 -7
  327. package/dist/tool-system/builtin/grep.js +6 -8
  328. package/dist/tool-system/builtin/image-providers.d.ts +86 -0
  329. package/dist/tool-system/builtin/image-providers.js +190 -0
  330. package/dist/tool-system/builtin/image-uploader.d.ts +33 -0
  331. package/dist/tool-system/builtin/image-uploader.js +74 -0
  332. package/dist/tool-system/builtin/index.d.ts +7 -1
  333. package/dist/tool-system/builtin/index.js +249 -25
  334. package/dist/tool-system/builtin/mcp-tools.js +23 -3
  335. package/dist/tool-system/builtin/memory.js +45 -7
  336. package/dist/tool-system/builtin/notebook-edit.js +0 -7
  337. package/dist/tool-system/builtin/powershell.js +4 -1
  338. package/dist/tool-system/builtin/read.js +10 -10
  339. package/dist/tool-system/builtin/repl.js +4 -1
  340. package/dist/tool-system/builtin/skill.js +9 -0
  341. package/dist/tool-system/builtin/sleep.js +3 -2
  342. package/dist/tool-system/builtin/tool-search.js +25 -7
  343. package/dist/tool-system/builtin/video-providers.d.ts +154 -0
  344. package/dist/tool-system/builtin/video-providers.js +235 -0
  345. package/dist/tool-system/builtin/web-fetch.js +12 -2
  346. package/dist/tool-system/builtin/web-search.js +21 -7
  347. package/dist/tool-system/builtin/worktree.d.ts +2 -1
  348. package/dist/tool-system/builtin/worktree.js +31 -4
  349. package/dist/tool-system/builtin/write.js +0 -6
  350. package/dist/tool-system/context.d.ts +154 -6
  351. package/dist/tool-system/executor.d.ts +3 -1
  352. package/dist/tool-system/executor.js +172 -88
  353. package/dist/tool-system/investigation-guard.js +1 -1
  354. package/dist/tool-system/mcp-manager.d.ts +42 -4
  355. package/dist/tool-system/mcp-manager.js +186 -20
  356. package/dist/tool-system/path-policy.d.ts +5 -0
  357. package/dist/tool-system/path-policy.js +307 -8
  358. package/dist/tool-system/permission.d.ts +36 -1
  359. package/dist/tool-system/permission.js +281 -69
  360. package/dist/tool-system/plan-mode-allowlist.d.ts +13 -2
  361. package/dist/tool-system/plan-mode-allowlist.js +24 -2
  362. package/dist/tool-system/registry.d.ts +1 -0
  363. package/dist/tool-system/registry.js +16 -2
  364. package/dist/tool-system/sandbox/index.d.ts +8 -0
  365. package/dist/tool-system/sandbox/index.js +7 -2
  366. package/dist/tool-system/validate-tool-metadata.d.ts +36 -0
  367. package/dist/tool-system/validate-tool-metadata.js +63 -0
  368. package/dist/types.d.ts +217 -6
  369. package/dist/updater.js +20 -9
  370. package/dist/utils/envUtils.d.ts +0 -9
  371. package/dist/utils/envUtils.js +3 -28
  372. package/dist/utils/exec.d.ts +40 -0
  373. package/dist/utils/exec.js +144 -0
  374. package/dist/utils/json.d.ts +12 -0
  375. package/dist/utils/json.js +92 -0
  376. package/dist/utils/theme.d.ts +1 -1
  377. package/dist/utils/theme.js +1 -1
  378. package/dist/utils/toolDisplay.js +0 -1
  379. package/package.json +13 -7
  380. package/dist/agent/coordinator.d.ts +0 -49
  381. package/dist/agent/coordinator.js +0 -77
  382. package/dist/settings/manager.test.js +0 -73
  383. package/dist/tool-system/builtin/remote-trigger.d.ts +0 -6
  384. package/dist/tool-system/builtin/remote-trigger.js +0 -54
  385. package/dist/tool-system/builtin/send-message.d.ts +0 -6
  386. package/dist/tool-system/builtin/send-message.js +0 -47
  387. /package/dist/{settings/manager.test.d.ts → credentials/types.js} +0 -0
@@ -1,22 +1,16 @@
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";
12
9
  import { SessionManager } from "../session/session-manager.js";
13
- import type { CostStateStore } from "./cost-store.js";
14
10
  import type { AskUserFn } from "../tool-system/builtin/ask-user.js";
15
- import { type SettingsScope } from "../settings/manager.js";
16
11
  import type { CapabilityOverride } from "../settings/schema.js";
12
+ import { type FeatureFlagName } from "../settings/feature-flags.js";
17
13
  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
14
  import { ModelPool, type ModelEntry } from "../llm/model-pool.js";
21
15
  import { AgentDefinitionRegistry } from "../agent/agent-definition-registry.js";
22
16
  import { EngineRuntime } from "./runtime.js";
@@ -31,118 +25,9 @@ export declare function compatFileNamesFrom(instructions?: {
31
25
  compatClaude?: boolean;
32
26
  compatCodex?: boolean;
33
27
  }): 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;
131
- }
28
+ export type { EngineConfig, EngineHookConfig, EngineResult } from "./types.js";
29
+ import type { EngineConfig, EngineResult } from "./types.js";
132
30
  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
31
  /**
147
32
  * Resolve the LLM config for a spawned child Engine.
148
33
  * - `modelKey` set + present in pool → that model's config (pure entry-derived
@@ -162,6 +47,23 @@ export declare function resolveChildLlm(modelKey: string | undefined, pool: Mode
162
47
  * 2. user-level ~/.code-shell/agents/*.md (user wins on name)
163
48
  * Names in `disabledAgents` are filtered out so the LLM never sees them.
164
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;
165
67
  export declare function loadAgentDefinitionsForCwd(cwd: string, disabledAgents?: string[], disabledPlugins?: string[]): AgentDefinitionRegistry;
166
68
  /**
167
69
  * #7: apply a project's per-turn builtin capability override to a tool list.
@@ -245,10 +147,49 @@ export declare class Engine {
245
147
  * LLM response arrives.
246
148
  */
247
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;
248
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;
249
183
  /** Public accessor so UI/clients can read the resolved per-model window. */
250
184
  get maxContextTokens(): number;
251
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;
252
193
  /**
253
194
  * Emit a lifecycle hook with isSubAgent auto-merged into data so handlers
254
195
  * can skip noisy injections for spawned children. All Engine-side hook
@@ -279,20 +220,20 @@ export declare class Engine {
279
220
  reloadHooks(): void;
280
221
  constructor(config: EngineConfig);
281
222
  /**
282
- * Load models[] / providers[] from settings into the active ModelPool and
223
+ * Load modelConnections[] from settings into the active ModelPool and
283
224
  * resync this.config.llm with the matching entry. Called from the ctor and
284
225
  * from reloadModelPool() (e.g. after onboarding writes new entries to disk).
285
226
  */
286
227
  private populateModelPoolFromSettings;
287
228
  /**
288
229
  * 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
230
+ * writes new modelConnections[] to disk so the running engine picks them
290
231
  * up without a process restart. Existing pool entries are kept (re-registering
291
232
  * the same key overwrites them), so callers don't need to clear first.
292
233
  */
293
234
  reloadModelPool(): void;
294
235
  /**
295
- * Auto-populate the model pool when settings.models[] is empty but
236
+ * Auto-populate the model pool when no modelConnections[] are configured but
296
237
  * the user has configured an API key. Detects the provider from the
297
238
  * key prefix / baseUrl and registers all its known models.
298
239
  */
@@ -308,11 +249,51 @@ export declare class Engine {
308
249
  * before the server existed (chicken-and-egg: server takes engine in ctor).
309
250
  */
310
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;
311
284
  /**
312
285
  * Whether this engine runs unattended (no interactive human). Used by the
313
286
  * in-process AgentServer to decide whether to wire an interactive askUser.
314
287
  */
315
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;
316
297
  /**
317
298
  * Run a task from start to finish.
318
299
  */
@@ -328,6 +309,15 @@ export declare class Engine {
328
309
  * string or a full GoalConfig; normalized once at the run boundary.
329
310
  */
330
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;
331
321
  }): Promise<EngineResult>;
332
322
  /**
333
323
  * Run the end-of-session memory pipeline as a fire-and-forget background
@@ -336,8 +326,8 @@ export declare class Engine {
336
326
  */
337
327
  /**
338
328
  * 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
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
341
331
  * fast model instead of the expensive primary. Falls back to `fallback` (the
342
332
  * active run's client) when unset, unknown, or on any build failure — aux
343
333
  * work is best-effort and must never break a run.
@@ -366,20 +356,26 @@ export declare class Engine {
366
356
  * Switch the active model by pool key. Takes effect on the next run() call.
367
357
  * Returns the new model entry.
368
358
  *
369
- * Persists settings.activeKey (and a legacy settings.model.* mirror) so the
359
+ * Persists settings.defaults.text (= the connection id / pool key) so the
370
360
  * next process startup defaults to the same model — without this, switches
371
361
  * only live in memory and every restart reverts to the previously persisted
372
- * activeKey.
362
+ * defaults.text.
373
363
  */
374
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;
375
372
  /**
376
373
  * Write the active model selection to ~/.code-shell/settings.json.
377
374
  *
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.
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.
383
379
  */
384
380
  private persistActiveModel;
385
381
  /** Get the model pool. */
@@ -401,12 +397,10 @@ export declare class Engine {
401
397
  * payloads are dropped so out-of-order reload deliveries can't let an older
402
398
  * config clobber a newer one (Q5).
403
399
  *
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.
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.
410
404
  *
411
405
  * Preset (#2): a preset hot-reload re-resolves `this.preset` so the next-turn
412
406
  * PromptComposer picks up the new preset's system prompt / behavior — that's
@@ -436,6 +430,26 @@ export declare class Engine {
436
430
  * engine.run() call for this session picks up the injected content
437
431
  * instead of a stale snapshot from the previous run.
438
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;
439
453
  injectContext(sessionId: string, content: string): void;
440
454
  /**
441
455
  * Force context compaction on the current session.
@@ -466,6 +480,25 @@ export declare class Engine {
466
480
  */
467
481
  setPermissionMode(mode: NonNullable<EngineConfig["permissionMode"]>): void;
468
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[];
469
502
  /**
470
503
  * Toggle plan mode directly. Called by the Plan tool (Task 7) via ToolContext.engine.
471
504
  * Also syncs permissionMode to keep both fields consistent.
@@ -489,6 +522,14 @@ export declare class Engine {
489
522
  * both. Subscribe-before-await closes the check/wait race either way.
490
523
  */
491
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;
492
533
  /**
493
534
  * Sub-agent role registry for the given cwd, memoized per-cwd so the
494
535
  * directory is read once rather than every turn. A new cwd (e.g. via
@@ -519,6 +560,58 @@ export declare class Engine {
519
560
  * by tests that want a ToolContext without a full run() cycle.
520
561
  */
521
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;
522
615
  buildToolContext(): ToolContext;
523
616
  /**
524
617
  * Read settings.disabledSkills + settings.disabledPlugins in a single
@@ -532,4 +625,40 @@ export declare class Engine {
532
625
  * the same snapshot.
533
626
  */
534
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;
535
664
  }