@cjhyy/code-shell-core 0.7.1 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (594) hide show
  1. package/README.md +36 -23
  2. package/dist/agent/agent-definition-registry.d.ts +2 -2
  3. package/dist/agent/agent-definition-registry.js +47 -10
  4. package/dist/agent/agent-definition.d.ts +5 -0
  5. package/dist/agent/agent-definition.js +14 -0
  6. package/dist/automation/index.d.ts +7 -4
  7. package/dist/automation/index.js +4 -2
  8. package/dist/automation/runner.js +3 -1
  9. package/dist/automation/scheduler.d.ts +57 -1
  10. package/dist/automation/scheduler.js +123 -23
  11. package/dist/automation/store.d.ts +6 -2
  12. package/dist/automation/store.js +7 -3
  13. package/dist/capabilities/index.d.ts +109 -0
  14. package/dist/capabilities/index.js +80 -0
  15. package/dist/capability-control/disabled-lists.d.ts +2 -1
  16. package/dist/capability-control/disabled-lists.js +3 -5
  17. package/dist/capability-control/overlay.d.ts +14 -1
  18. package/dist/capability-control/overlay.js +40 -0
  19. package/dist/capability-control/service.js +6 -4
  20. package/dist/cli/agent-server-stdio.d.ts +1 -1
  21. package/dist/cli/agent-server-stdio.js +66 -6
  22. package/dist/cli/agent-server-tcp.js +7 -3
  23. package/dist/context/compaction.d.ts +39 -3
  24. package/dist/context/compaction.js +151 -39
  25. package/dist/context/manager.d.ts +17 -1
  26. package/dist/context/manager.js +36 -1
  27. package/dist/credentials/access.d.ts +3 -1
  28. package/dist/credentials/access.js +24 -3
  29. package/dist/credentials/index.d.ts +1 -1
  30. package/dist/credentials/index.js +1 -1
  31. package/dist/credentials/oauth.d.ts +4 -1
  32. package/dist/credentials/oauth.js +14 -0
  33. package/dist/credentials/store.d.ts +15 -1
  34. package/dist/credentials/store.js +17 -4
  35. package/dist/credentials/types.d.ts +24 -0
  36. package/dist/credentials/use-credential-tool.js +15 -1
  37. package/dist/engine/auxiliary-pipeline.d.ts +40 -0
  38. package/dist/engine/auxiliary-pipeline.js +181 -0
  39. package/dist/{settings → engine}/disk-defaults.d.ts +2 -2
  40. package/dist/{settings → engine}/disk-defaults.js +5 -2
  41. package/dist/engine/dynamic-tool-defs.d.ts +4 -0
  42. package/dist/engine/dynamic-tool-defs.js +4 -0
  43. package/dist/engine/engine.d.ts +254 -195
  44. package/dist/engine/engine.js +1812 -2041
  45. package/dist/engine/file-history-hook.d.ts +11 -0
  46. package/dist/engine/file-history-hook.js +31 -0
  47. package/dist/engine/goal-judge-context.d.ts +9 -0
  48. package/dist/engine/goal-judge-context.js +234 -0
  49. package/dist/engine/injected-context-cache.d.ts +6 -0
  50. package/dist/engine/injected-context-cache.js +13 -0
  51. package/dist/engine/input-attachments.d.ts +1 -1
  52. package/dist/engine/model-facade.d.ts +3 -3
  53. package/dist/engine/model-facade.js +15 -14
  54. package/dist/engine/permission-controller.d.ts +55 -0
  55. package/dist/engine/permission-controller.js +148 -0
  56. package/dist/engine/prompt-cache-diagnostics.d.ts +58 -0
  57. package/dist/engine/prompt-cache-diagnostics.js +178 -0
  58. package/dist/engine/run-accounting.d.ts +41 -0
  59. package/dist/engine/run-accounting.js +126 -0
  60. package/dist/engine/run-context.d.ts +44 -0
  61. package/dist/engine/run-context.js +88 -0
  62. package/dist/engine/run-environment.d.ts +30 -0
  63. package/dist/engine/run-environment.js +77 -0
  64. package/dist/engine/run-finalize.d.ts +58 -0
  65. package/dist/engine/run-finalize.js +245 -0
  66. package/dist/engine/run-goal.d.ts +58 -0
  67. package/dist/engine/run-goal.js +188 -0
  68. package/dist/engine/run-image-input.d.ts +1 -1
  69. package/dist/engine/run-image-input.js +5 -3
  70. package/dist/engine/run-session-open.d.ts +41 -0
  71. package/dist/engine/run-session-open.js +186 -0
  72. package/dist/engine/run-setup.d.ts +42 -0
  73. package/dist/engine/run-setup.js +58 -0
  74. package/dist/engine/run-tooling.d.ts +125 -0
  75. package/dist/engine/run-tooling.js +283 -0
  76. package/dist/engine/run-types.d.ts +139 -0
  77. package/dist/engine/run-types.js +12 -0
  78. package/dist/engine/run-workspace.d.ts +50 -0
  79. package/dist/engine/run-workspace.js +114 -0
  80. package/dist/engine/steer-queue.d.ts +1 -1
  81. package/dist/engine/subagent-spawner.d.ts +32 -0
  82. package/dist/engine/subagent-spawner.js +287 -0
  83. package/dist/engine/tool-summary.d.ts +2 -2
  84. package/dist/engine/tool-summary.js +2 -2
  85. package/dist/engine/turn-loop.d.ts +49 -10
  86. package/dist/engine/turn-loop.js +370 -104
  87. package/dist/engine/types.d.ts +30 -3
  88. package/dist/engine/types.js +1 -1
  89. package/dist/{engine/goal.d.ts → goal/lifecycle.d.ts} +76 -4
  90. package/dist/goal/lifecycle.js +482 -0
  91. package/dist/hooks/events.d.ts +24 -10
  92. package/dist/hooks/goal-stop-hook.d.ts +17 -28
  93. package/dist/hooks/goal-stop-hook.js +110 -465
  94. package/dist/hooks/registry.js +1 -1
  95. package/dist/index.d.ts +48 -108
  96. package/dist/index.extension.d.ts +51 -0
  97. package/dist/index.extension.js +39 -0
  98. package/dist/index.internal.d.ts +86 -0
  99. package/dist/index.internal.js +92 -0
  100. package/dist/index.js +34 -123
  101. package/dist/links/cli.d.ts +48 -0
  102. package/dist/links/cli.js +617 -0
  103. package/dist/links/http.d.ts +40 -0
  104. package/dist/links/http.js +166 -0
  105. package/dist/links/index.d.ts +4 -0
  106. package/dist/links/index.js +3 -0
  107. package/dist/links/link-action-tool.d.ts +5 -0
  108. package/dist/links/link-action-tool.js +241 -0
  109. package/dist/links/providers.d.ts +8 -0
  110. package/dist/links/providers.js +665 -0
  111. package/dist/links/types.d.ts +44 -0
  112. package/dist/llm/client-base.d.ts +7 -0
  113. package/dist/llm/client-base.js +60 -0
  114. package/dist/llm/model-pool.d.ts +1 -1
  115. package/dist/llm/model-pool.js +1 -1
  116. package/dist/llm/providers/anthropic.d.ts +1 -0
  117. package/dist/llm/providers/anthropic.js +9 -0
  118. package/dist/llm/providers/openai.d.ts +1 -0
  119. package/dist/llm/providers/openai.js +17 -0
  120. package/dist/model-catalog/index.js +15 -2
  121. package/dist/model-catalog/resolve.d.ts +13 -1
  122. package/dist/model-catalog/resolve.js +37 -2
  123. package/dist/model-catalog/types.d.ts +74 -48
  124. package/dist/model-catalog/types.js +16 -5
  125. package/dist/model-catalog/upsert.d.ts +3 -1
  126. package/dist/model-catalog/upsert.js +9 -0
  127. package/dist/onboarding.d.ts +0 -1
  128. package/dist/onboarding.js +1 -22
  129. package/dist/panel-apps/bindings.d.ts +24 -0
  130. package/dist/panel-apps/bindings.js +69 -0
  131. package/dist/panel-apps/github-archive.d.ts +21 -0
  132. package/dist/panel-apps/github-archive.js +98 -0
  133. package/dist/panel-apps/index.d.ts +4 -0
  134. package/dist/panel-apps/index.js +4 -0
  135. package/dist/panel-apps/installer.d.ts +68 -0
  136. package/dist/panel-apps/installer.js +622 -0
  137. package/dist/panel-apps/manifest.d.ts +364 -0
  138. package/dist/panel-apps/manifest.js +189 -0
  139. package/dist/panel-apps/paths.d.ts +13 -0
  140. package/dist/panel-apps/paths.js +38 -0
  141. package/dist/panel-apps/registry.d.ts +51 -0
  142. package/dist/panel-apps/registry.js +99 -0
  143. package/dist/panel-apps/runtime.d.ts +80 -0
  144. package/dist/panel-apps/runtime.js +154 -0
  145. package/dist/plugins/gitOps.js +8 -1
  146. package/dist/plugins/installedPlugins.d.ts +2 -1
  147. package/dist/plugins/installedPlugins.js +146 -8
  148. package/dist/plugins/installer/codex/convertAgents.d.ts +4 -1
  149. package/dist/plugins/installer/codex/convertAgents.js +62 -8
  150. package/dist/plugins/installer/codex/convertCommands.d.ts +5 -5
  151. package/dist/plugins/installer/codex/convertCommands.js +35 -12
  152. package/dist/plugins/installer/codex/convertHooks.d.ts +10 -0
  153. package/dist/plugins/installer/codex/convertHooks.js +82 -0
  154. package/dist/plugins/installer/codex/convertSkills.js +41 -6
  155. package/dist/plugins/installer/install.d.ts +7 -1
  156. package/dist/plugins/installer/install.js +21 -87
  157. package/dist/plugins/installer/installFromArchive.d.ts +26 -4
  158. package/dist/plugins/installer/installFromArchive.js +44 -27
  159. package/dist/plugins/installer/installFromNpm.d.ts +31 -0
  160. package/dist/plugins/installer/installFromNpm.js +273 -0
  161. package/dist/plugins/installer/loadPluginAgents.js +17 -4
  162. package/dist/plugins/installer/loadPluginMcp.d.ts +14 -0
  163. package/dist/plugins/installer/loadPluginMcp.js +245 -35
  164. package/dist/plugins/installer/normalizeManifest.d.ts +13 -0
  165. package/dist/plugins/installer/normalizeManifest.js +306 -0
  166. package/dist/plugins/installer/npmTar.d.ts +13 -0
  167. package/dist/plugins/installer/npmTar.js +321 -0
  168. package/dist/plugins/installer/parseSource.d.ts +11 -0
  169. package/dist/plugins/installer/parseSource.js +48 -0
  170. package/dist/plugins/installer/preview.d.ts +101 -0
  171. package/dist/plugins/installer/preview.js +336 -0
  172. package/dist/plugins/installer/projectPluginSource.d.ts +14 -0
  173. package/dist/plugins/installer/projectPluginSource.js +140 -0
  174. package/dist/plugins/installer/types.d.ts +775 -0
  175. package/dist/plugins/installer/types.js +100 -0
  176. package/dist/plugins/installer/unzip.d.ts +11 -0
  177. package/dist/plugins/installer/unzip.js +123 -9
  178. package/dist/plugins/installer/update.d.ts +2 -2
  179. package/dist/plugins/installer/update.js +43 -4
  180. package/dist/plugins/loadPluginHooks.d.ts +19 -2
  181. package/dist/plugins/loadPluginHooks.js +97 -86
  182. package/dist/plugins/pluginAutomationTemplates.d.ts +18 -0
  183. package/dist/plugins/pluginAutomationTemplates.js +50 -0
  184. package/dist/plugins/pluginCatalog.d.ts +45 -0
  185. package/dist/plugins/pluginCatalog.js +87 -0
  186. package/dist/plugins/pluginCommandHook.d.ts +6 -0
  187. package/dist/plugins/pluginCommandHook.js +25 -8
  188. package/dist/plugins/pluginCommandsLoader.d.ts +19 -0
  189. package/dist/plugins/pluginCommandsLoader.js +181 -7
  190. package/dist/plugins/pluginContent.d.ts +10 -1
  191. package/dist/plugins/pluginContent.js +87 -30
  192. package/dist/plugins/pluginHookApproval.d.ts +30 -0
  193. package/dist/plugins/pluginHookApproval.js +160 -0
  194. package/dist/plugins/pluginHookIntegrity.d.ts +69 -0
  195. package/dist/plugins/pluginHookIntegrity.js +361 -0
  196. package/dist/plugins/pluginInstaller.js +71 -12
  197. package/dist/plugins/pluginMcpApproval.d.ts +19 -0
  198. package/dist/plugins/pluginMcpApproval.js +110 -0
  199. package/dist/plugins/pluginMcpIntegrity.d.ts +21 -0
  200. package/dist/plugins/pluginMcpIntegrity.js +74 -0
  201. package/dist/plugins/types.d.ts +30 -0
  202. package/dist/plugins/varRewrite.d.ts +9 -5
  203. package/dist/plugins/varRewrite.js +26 -17
  204. package/dist/preset/index.d.ts +11 -8
  205. package/dist/preset/index.js +62 -203
  206. package/dist/product/define.js +9 -3
  207. package/dist/product/types.d.ts +0 -2
  208. package/dist/profile/activation.d.ts +36 -0
  209. package/dist/profile/activation.js +57 -0
  210. package/dist/profile/catalog-store.d.ts +77 -0
  211. package/dist/profile/catalog-store.js +346 -0
  212. package/dist/profile/catalog.d.ts +54 -0
  213. package/dist/profile/catalog.js +152 -0
  214. package/dist/profile/index.d.ts +7 -0
  215. package/dist/profile/index.js +7 -0
  216. package/dist/profile/requirements.d.ts +76 -0
  217. package/dist/profile/requirements.js +117 -0
  218. package/dist/profile/resolve.d.ts +11 -0
  219. package/dist/profile/resolve.js +41 -0
  220. package/dist/profile/store.d.ts +17 -0
  221. package/dist/profile/store.js +167 -0
  222. package/dist/profile/types.d.ts +321 -0
  223. package/dist/profile/types.js +104 -0
  224. package/dist/prompt/composer.d.ts +46 -7
  225. package/dist/prompt/composer.js +78 -48
  226. package/dist/prompt/instruction-scanner.d.ts +6 -5
  227. package/dist/prompt/instruction-scanner.js +8 -23
  228. package/dist/prompt/section-loader.d.ts +2 -2
  229. package/dist/prompt/section-loader.js +7 -4
  230. package/dist/prompt/sections/browser.md +10 -9
  231. package/dist/prompt/sections/harness-base.md +9 -0
  232. package/dist/protocol/chat-session-manager.d.ts +64 -1
  233. package/dist/protocol/chat-session-manager.js +104 -0
  234. package/dist/protocol/chat-session.d.ts +61 -10
  235. package/dist/protocol/chat-session.js +135 -25
  236. package/dist/protocol/client.d.ts +33 -3
  237. package/dist/protocol/client.js +96 -5
  238. package/dist/protocol/index.d.ts +2 -2
  239. package/dist/protocol/index.js +2 -2
  240. package/dist/protocol/mobile-remote-types.d.ts +406 -0
  241. package/dist/protocol/mobile-remote-types.js +1 -0
  242. package/dist/protocol/server.d.ts +127 -3
  243. package/dist/protocol/server.js +1309 -182
  244. package/dist/protocol/types.d.ts +152 -34
  245. package/dist/protocol/types.js +16 -0
  246. package/dist/run/ArtifactTracker.d.ts +6 -1
  247. package/dist/run/ArtifactTracker.js +29 -21
  248. package/dist/run/EngineRunner.d.ts +2 -0
  249. package/dist/run/EngineRunner.js +1 -0
  250. package/dist/run/RunManager.d.ts +26 -0
  251. package/dist/run/RunManager.js +82 -11
  252. package/dist/run/factory.d.ts +3 -0
  253. package/dist/run/factory.js +2 -0
  254. package/dist/runtime/safe-spawn.d.ts +6 -0
  255. package/dist/runtime/safe-spawn.js +8 -13
  256. package/dist/services/auto-dream.d.ts +13 -1
  257. package/dist/services/auto-dream.js +56 -8
  258. package/dist/services/dream-consolidation.js +10 -1
  259. package/dist/services/memory-orchestrator.js +6 -2
  260. package/dist/services/oauth.js +4 -1
  261. package/dist/services/session-memory.d.ts +4 -4
  262. package/dist/services/session-memory.js +13 -10
  263. package/dist/session/memory.d.ts +26 -7
  264. package/dist/session/memory.js +79 -21
  265. package/dist/session/session-manager.d.ts +182 -28
  266. package/dist/session/session-manager.js +910 -130
  267. package/dist/session/session-message.d.ts +22 -0
  268. package/dist/session/session-message.js +1 -0
  269. package/dist/session/transcript.d.ts +46 -5
  270. package/dist/session/transcript.js +159 -3
  271. package/dist/settings/feature-flags.d.ts +40 -0
  272. package/dist/settings/feature-flags.js +40 -0
  273. package/dist/settings/manager.d.ts +39 -1
  274. package/dist/settings/manager.js +102 -41
  275. package/dist/settings/migrate-config.js +4 -2
  276. package/dist/settings/schema.d.ts +511 -177
  277. package/dist/settings/schema.js +98 -25
  278. package/dist/skills/scanner.d.ts +6 -2
  279. package/dist/skills/scanner.js +160 -9
  280. package/dist/sources/adapter.d.ts +14 -0
  281. package/dist/sources/adapter.js +7 -0
  282. package/dist/sources/adapters/local-files.d.ts +10 -0
  283. package/dist/sources/adapters/local-files.js +127 -0
  284. package/dist/sources/adapters/mcp-resource.d.ts +17 -0
  285. package/dist/sources/adapters/mcp-resource.js +41 -0
  286. package/dist/sources/adapters/mock.d.ts +3 -0
  287. package/dist/sources/adapters/mock.js +29 -0
  288. package/dist/sources/binding.d.ts +6 -0
  289. package/dist/sources/binding.js +24 -0
  290. package/dist/sources/catalog.d.ts +6 -0
  291. package/dist/sources/catalog.js +64 -0
  292. package/dist/sources/context-summary.d.ts +8 -0
  293. package/dist/sources/context-summary.js +13 -0
  294. package/dist/sources/credential-status.d.ts +2 -0
  295. package/dist/sources/credential-status.js +13 -0
  296. package/dist/sources/index.d.ts +10 -0
  297. package/dist/sources/index.js +10 -0
  298. package/dist/sources/resolve.d.ts +28 -0
  299. package/dist/sources/resolve.js +47 -0
  300. package/dist/sources/truncate-utf8.d.ts +7 -0
  301. package/dist/sources/truncate-utf8.js +18 -0
  302. package/dist/sources/types.d.ts +71 -0
  303. package/dist/sources/types.js +26 -0
  304. package/dist/testing/fetch-stub.d.ts +32 -0
  305. package/dist/testing/fetch-stub.js +24 -0
  306. package/dist/themes/image.d.ts +18 -0
  307. package/dist/themes/image.js +117 -0
  308. package/dist/themes/index.d.ts +4 -0
  309. package/dist/themes/index.js +4 -0
  310. package/dist/themes/installer.d.ts +50 -0
  311. package/dist/themes/installer.js +290 -0
  312. package/dist/themes/manifest.d.ts +102 -0
  313. package/dist/themes/manifest.js +86 -0
  314. package/dist/themes/paths.d.ts +14 -0
  315. package/dist/themes/paths.js +33 -0
  316. package/dist/tool-system/browser-bridge.d.ts +53 -11
  317. package/dist/tool-system/browser-bridge.js +8 -9
  318. package/dist/tool-system/builtin/agent-heartbeat.d.ts +2 -2
  319. package/dist/tool-system/builtin/agent-heartbeat.js +20 -6
  320. package/dist/tool-system/builtin/agent-notifications.d.ts +127 -72
  321. package/dist/tool-system/builtin/agent-notifications.js +291 -101
  322. package/dist/tool-system/builtin/agent-output-file.js +1 -3
  323. package/dist/tool-system/builtin/agent-progress.d.ts +6 -0
  324. package/dist/tool-system/builtin/agent-progress.js +83 -0
  325. package/dist/tool-system/builtin/agent-registry.d.ts +38 -2
  326. package/dist/tool-system/builtin/agent-registry.js +178 -9
  327. package/dist/tool-system/builtin/agent-transcript-translator.js +1 -1
  328. package/dist/tool-system/builtin/agent.d.ts +2 -0
  329. package/dist/tool-system/builtin/agent.js +274 -33
  330. package/dist/tool-system/builtin/background-jobs.d.ts +55 -2
  331. package/dist/tool-system/builtin/background-jobs.js +96 -4
  332. package/dist/tool-system/builtin/background-work.d.ts +6 -0
  333. package/dist/tool-system/builtin/background-work.js +8 -1
  334. package/dist/tool-system/builtin/bash.js +5 -2
  335. package/dist/tool-system/builtin/browser-tools.d.ts +6 -3
  336. package/dist/tool-system/builtin/browser-tools.js +89 -23
  337. package/dist/tool-system/builtin/edit-model-catalog.d.ts +6 -0
  338. package/dist/tool-system/builtin/edit-model-catalog.js +172 -12
  339. package/dist/tool-system/builtin/edit.js +2 -6
  340. package/dist/tool-system/builtin/file-cache.d.ts +2 -0
  341. package/dist/tool-system/builtin/file-cache.js +4 -0
  342. package/dist/tool-system/builtin/generate-image.js +17 -10
  343. package/dist/tool-system/builtin/generate-video.js +26 -7
  344. package/dist/tool-system/builtin/grep.js +2 -2
  345. package/dist/tool-system/builtin/image-uploader.js +7 -1
  346. package/dist/tool-system/builtin/index.d.ts +32 -7
  347. package/dist/tool-system/builtin/index.js +237 -167
  348. package/dist/tool-system/builtin/memory.d.ts +6 -0
  349. package/dist/tool-system/builtin/memory.js +36 -15
  350. package/dist/tool-system/builtin/panel.d.ts +9 -0
  351. package/dist/tool-system/builtin/panel.js +314 -0
  352. package/dist/tool-system/builtin/read.js +5 -1
  353. package/dist/tool-system/builtin/send-message-to-session.d.ts +6 -0
  354. package/dist/tool-system/builtin/send-message-to-session.js +67 -0
  355. package/dist/tool-system/builtin/sources.d.ts +8 -0
  356. package/dist/tool-system/builtin/sources.js +137 -0
  357. package/dist/tool-system/builtin/tool-search.js +7 -2
  358. package/dist/tool-system/builtin/update-automation-memory.js +2 -0
  359. package/dist/tool-system/builtin/web-fetch.js +17 -13
  360. package/dist/tool-system/builtin/web-search.js +1 -3
  361. package/dist/tool-system/capability-module.d.ts +93 -0
  362. package/dist/tool-system/capability-module.js +53 -0
  363. package/dist/tool-system/context.d.ts +77 -19
  364. package/dist/tool-system/executor.js +75 -50
  365. package/dist/tool-system/external-tool-exposure.d.ts +60 -0
  366. package/dist/tool-system/external-tool-exposure.js +304 -0
  367. package/dist/tool-system/mcp-manager.d.ts +11 -1
  368. package/dist/tool-system/mcp-manager.js +19 -4
  369. package/dist/tool-system/mcp-tool-policy.d.ts +9 -0
  370. package/dist/tool-system/mcp-tool-policy.js +34 -0
  371. package/dist/tool-system/panel-bridge.d.ts +53 -0
  372. package/dist/tool-system/panel-bridge.js +1 -0
  373. package/dist/tool-system/permission.d.ts +26 -0
  374. package/dist/tool-system/permission.js +46 -0
  375. package/dist/tool-system/registry.d.ts +12 -1
  376. package/dist/tool-system/registry.js +31 -7
  377. package/dist/tool-system/sandbox/index.js +3 -8
  378. package/dist/tool-system/sandbox/seatbelt.js +2 -6
  379. package/dist/tool-system/session-tool-host.d.ts +139 -0
  380. package/dist/tool-system/session-tool-host.js +167 -0
  381. package/dist/tool-system/testing/tool-registry-harness.d.ts +31 -0
  382. package/dist/tool-system/testing/tool-registry-harness.js +51 -0
  383. package/dist/tool-system/validation.d.ts +14 -7
  384. package/dist/tool-system/validation.js +701 -7
  385. package/dist/types.d.ts +186 -20
  386. package/dist/{cc-orchestrator → utils}/cwd-normalize.d.ts +1 -0
  387. package/dist/{cc-orchestrator → utils}/cwd-normalize.js +1 -0
  388. package/dist/utils/file-mutex.d.ts +65 -0
  389. package/dist/utils/file-mutex.js +145 -0
  390. package/dist/utils/json.d.ts +2 -4
  391. package/dist/utils/json.js +2 -4
  392. package/dist/utils/lockfile.d.ts +30 -1
  393. package/dist/utils/lockfile.js +2 -2
  394. package/dist/utils/secret-scrubber.d.ts +8 -0
  395. package/dist/utils/secret-scrubber.js +227 -0
  396. package/dist/utils/toolDisplay.js +1 -1
  397. package/package.json +20 -5
  398. package/THIRD_PARTY_NOTICES.md +0 -206
  399. package/dist/arena/arena.d.ts +0 -45
  400. package/dist/arena/arena.js +0 -362
  401. package/dist/arena/context/context-tools.d.ts +0 -16
  402. package/dist/arena/context/context-tools.js +0 -272
  403. package/dist/arena/context/within-root.d.ts +0 -7
  404. package/dist/arena/context/within-root.js +0 -15
  405. package/dist/arena/detect-mode.d.ts +0 -20
  406. package/dist/arena/detect-mode.js +0 -78
  407. package/dist/arena/digest-builder.d.ts +0 -25
  408. package/dist/arena/digest-builder.js +0 -120
  409. package/dist/arena/index.d.ts +0 -29
  410. package/dist/arena/index.js +0 -29
  411. package/dist/arena/iterate/convergence.d.ts +0 -25
  412. package/dist/arena/iterate/convergence.js +0 -103
  413. package/dist/arena/iterate/formats/index.d.ts +0 -22
  414. package/dist/arena/iterate/formats/index.js +0 -283
  415. package/dist/arena/iterate/index.d.ts +0 -11
  416. package/dist/arena/iterate/index.js +0 -9
  417. package/dist/arena/iterate/iterative-arena.d.ts +0 -23
  418. package/dist/arena/iterate/iterative-arena.js +0 -237
  419. package/dist/arena/iterate/parse.d.ts +0 -42
  420. package/dist/arena/iterate/parse.js +0 -123
  421. package/dist/arena/iterate/phases/argue.d.ts +0 -22
  422. package/dist/arena/iterate/phases/argue.js +0 -165
  423. package/dist/arena/iterate/phases/revise.d.ts +0 -16
  424. package/dist/arena/iterate/phases/revise.js +0 -62
  425. package/dist/arena/iterate/phases/tournament.d.ts +0 -34
  426. package/dist/arena/iterate/phases/tournament.js +0 -113
  427. package/dist/arena/iterate/tools/web-tools.d.ts +0 -13
  428. package/dist/arena/iterate/tools/web-tools.js +0 -54
  429. package/dist/arena/iterate/types.d.ts +0 -152
  430. package/dist/arena/iterate/types.js +0 -8
  431. package/dist/arena/ledger.d.ts +0 -47
  432. package/dist/arena/ledger.js +0 -159
  433. package/dist/arena/lenses/architecture.d.ts +0 -5
  434. package/dist/arena/lenses/architecture.js +0 -22
  435. package/dist/arena/lenses/engineering.d.ts +0 -5
  436. package/dist/arena/lenses/engineering.js +0 -22
  437. package/dist/arena/lenses/general.d.ts +0 -5
  438. package/dist/arena/lenses/general.js +0 -20
  439. package/dist/arena/lenses/index.d.ts +0 -16
  440. package/dist/arena/lenses/index.js +0 -47
  441. package/dist/arena/lenses/product.d.ts +0 -5
  442. package/dist/arena/lenses/product.js +0 -22
  443. package/dist/arena/model-presets.d.ts +0 -23
  444. package/dist/arena/model-presets.js +0 -44
  445. package/dist/arena/phases/adjudication.d.ts +0 -25
  446. package/dist/arena/phases/adjudication.js +0 -142
  447. package/dist/arena/phases/build-consensus.d.ts +0 -30
  448. package/dist/arena/phases/build-consensus.js +0 -85
  449. package/dist/arena/phases/claim-registry.d.ts +0 -26
  450. package/dist/arena/phases/claim-registry.js +0 -60
  451. package/dist/arena/phases/cross-review.d.ts +0 -47
  452. package/dist/arena/phases/cross-review.js +0 -224
  453. package/dist/arena/phases/debate-rounds.d.ts +0 -28
  454. package/dist/arena/phases/debate-rounds.js +0 -161
  455. package/dist/arena/phases/participant-research.d.ts +0 -39
  456. package/dist/arena/phases/participant-research.js +0 -316
  457. package/dist/arena/phases/planning-detail-expansion.d.ts +0 -39
  458. package/dist/arena/phases/planning-detail-expansion.js +0 -120
  459. package/dist/arena/planner.d.ts +0 -28
  460. package/dist/arena/planner.js +0 -312
  461. package/dist/arena/providers/docs.d.ts +0 -7
  462. package/dist/arena/providers/docs.js +0 -111
  463. package/dist/arena/providers/git.d.ts +0 -8
  464. package/dist/arena/providers/git.js +0 -174
  465. package/dist/arena/providers/index.d.ts +0 -32
  466. package/dist/arena/providers/index.js +0 -132
  467. package/dist/arena/providers/none.d.ts +0 -7
  468. package/dist/arena/providers/none.js +0 -11
  469. package/dist/arena/providers/repo.d.ts +0 -7
  470. package/dist/arena/providers/repo.js +0 -258
  471. package/dist/arena/render/session.d.ts +0 -17
  472. package/dist/arena/render/session.js +0 -190
  473. package/dist/arena/render/terminal.d.ts +0 -34
  474. package/dist/arena/render/terminal.js +0 -286
  475. package/dist/arena/strategies/discussion.d.ts +0 -25
  476. package/dist/arena/strategies/discussion.js +0 -143
  477. package/dist/arena/strategies/index.d.ts +0 -15
  478. package/dist/arena/strategies/index.js +0 -28
  479. package/dist/arena/strategies/language-wrapper.d.ts +0 -17
  480. package/dist/arena/strategies/language-wrapper.js +0 -102
  481. package/dist/arena/strategies/lens-wrapper.d.ts +0 -16
  482. package/dist/arena/strategies/lens-wrapper.js +0 -236
  483. package/dist/arena/strategies/planning.d.ts +0 -30
  484. package/dist/arena/strategies/planning.js +0 -225
  485. package/dist/arena/strategies/review.d.ts +0 -26
  486. package/dist/arena/strategies/review.js +0 -168
  487. package/dist/arena/strategies/utils.d.ts +0 -36
  488. package/dist/arena/strategies/utils.js +0 -603
  489. package/dist/arena/tools/selector.d.ts +0 -17
  490. package/dist/arena/tools/selector.js +0 -61
  491. package/dist/arena/transitions.d.ts +0 -53
  492. package/dist/arena/transitions.js +0 -97
  493. package/dist/arena/types.d.ts +0 -518
  494. package/dist/arena/types.js +0 -27
  495. package/dist/cc-orchestrator/agent-adapter.d.ts +0 -54
  496. package/dist/cc-orchestrator/agent-adapter.js +0 -143
  497. package/dist/cc-orchestrator/cc-capability.d.ts +0 -19
  498. package/dist/cc-orchestrator/cc-capability.js +0 -53
  499. package/dist/cc-orchestrator/codex-session-discovery.d.ts +0 -24
  500. package/dist/cc-orchestrator/codex-session-discovery.js +0 -191
  501. package/dist/cc-orchestrator/codex-session-history.d.ts +0 -38
  502. package/dist/cc-orchestrator/codex-session-history.js +0 -247
  503. package/dist/cc-orchestrator/external-agent-bindings.d.ts +0 -27
  504. package/dist/cc-orchestrator/external-agent-bindings.js +0 -150
  505. package/dist/cc-orchestrator/external-agent-changes.d.ts +0 -19
  506. package/dist/cc-orchestrator/external-agent-changes.js +0 -231
  507. package/dist/cc-orchestrator/external-agent-driver.d.ts +0 -19
  508. package/dist/cc-orchestrator/external-agent-driver.js +0 -284
  509. package/dist/cc-orchestrator/external-agent-session-store.d.ts +0 -23
  510. package/dist/cc-orchestrator/external-agent-session-store.js +0 -146
  511. package/dist/cc-orchestrator/index.d.ts +0 -8
  512. package/dist/cc-orchestrator/index.js +0 -8
  513. package/dist/cc-orchestrator/relevance-judge.d.ts +0 -15
  514. package/dist/cc-orchestrator/relevance-judge.js +0 -29
  515. package/dist/cc-orchestrator/session-discovery.d.ts +0 -46
  516. package/dist/cc-orchestrator/session-discovery.js +0 -125
  517. package/dist/cc-orchestrator/session-history.d.ts +0 -54
  518. package/dist/cc-orchestrator/session-history.js +0 -150
  519. package/dist/cron/cron-runtime.d.ts +0 -2
  520. package/dist/cron/cron-runtime.js +0 -2
  521. package/dist/cron/cron-store.d.ts +0 -2
  522. package/dist/cron/cron-store.js +0 -2
  523. package/dist/cron/scheduler.d.ts +0 -7
  524. package/dist/cron/scheduler.js +0 -7
  525. package/dist/engine/goal.js +0 -206
  526. package/dist/external-agents/config.d.ts +0 -2
  527. package/dist/external-agents/config.js +0 -15
  528. package/dist/external-agents/types.d.ts +0 -31
  529. package/dist/git/parse-log.d.ts +0 -13
  530. package/dist/git/parse-log.js +0 -21
  531. package/dist/git/utils.d.ts +0 -49
  532. package/dist/git/utils.js +0 -161
  533. package/dist/git/worktree/crud.d.ts +0 -72
  534. package/dist/git/worktree/crud.js +0 -235
  535. package/dist/git/worktree/diff.d.ts +0 -14
  536. package/dist/git/worktree/diff.js +0 -82
  537. package/dist/git/worktree/git-exec.d.ts +0 -7
  538. package/dist/git/worktree/git-exec.js +0 -87
  539. package/dist/git/worktree/index.d.ts +0 -5
  540. package/dist/git/worktree/index.js +0 -5
  541. package/dist/git/worktree/query.d.ts +0 -43
  542. package/dist/git/worktree/query.js +0 -128
  543. package/dist/git/worktree/slug.d.ts +0 -11
  544. package/dist/git/worktree/slug.js +0 -58
  545. package/dist/git/worktree.d.ts +0 -1
  546. package/dist/git/worktree.js +0 -5
  547. package/dist/lsp/client.d.ts +0 -41
  548. package/dist/lsp/client.js +0 -186
  549. package/dist/lsp/manager.d.ts +0 -40
  550. package/dist/lsp/manager.js +0 -155
  551. package/dist/lsp/root-path.d.ts +0 -9
  552. package/dist/lsp/root-path.js +0 -12
  553. package/dist/lsp/servers.d.ts +0 -16
  554. package/dist/lsp/servers.js +0 -60
  555. package/dist/prompt/sections/coding.md +0 -35
  556. package/dist/quota/credentials.d.ts +0 -3
  557. package/dist/quota/credentials.js +0 -80
  558. package/dist/quota/index.d.ts +0 -36
  559. package/dist/quota/index.js +0 -155
  560. package/dist/quota/types.d.ts +0 -48
  561. package/dist/quota/types.js +0 -13
  562. package/dist/review/review-prompt.d.ts +0 -28
  563. package/dist/review/review-prompt.js +0 -81
  564. package/dist/state.d.ts +0 -160
  565. package/dist/state.js +0 -267
  566. package/dist/tool-system/builtin/apply-patch/applier.d.ts +0 -26
  567. package/dist/tool-system/builtin/apply-patch/applier.js +0 -308
  568. package/dist/tool-system/builtin/apply-patch/backup-targets.d.ts +0 -10
  569. package/dist/tool-system/builtin/apply-patch/backup-targets.js +0 -30
  570. package/dist/tool-system/builtin/apply-patch/index.d.ts +0 -20
  571. package/dist/tool-system/builtin/apply-patch/index.js +0 -105
  572. package/dist/tool-system/builtin/apply-patch/parser.d.ts +0 -17
  573. package/dist/tool-system/builtin/apply-patch/parser.js +0 -212
  574. package/dist/tool-system/builtin/apply-patch/seek-sequence.d.ts +0 -18
  575. package/dist/tool-system/builtin/apply-patch/seek-sequence.js +0 -123
  576. package/dist/tool-system/builtin/apply-patch/types.d.ts +0 -49
  577. package/dist/tool-system/builtin/apply-patch/types.js +0 -13
  578. package/dist/tool-system/builtin/arena.d.ts +0 -31
  579. package/dist/tool-system/builtin/arena.js +0 -416
  580. package/dist/tool-system/builtin/brief.d.ts +0 -6
  581. package/dist/tool-system/builtin/brief.js +0 -41
  582. package/dist/tool-system/builtin/check-quota.d.ts +0 -15
  583. package/dist/tool-system/builtin/check-quota.js +0 -34
  584. package/dist/tool-system/builtin/drive-claude-code.d.ts +0 -51
  585. package/dist/tool-system/builtin/drive-claude-code.js +0 -698
  586. package/dist/tool-system/builtin/lsp.d.ts +0 -7
  587. package/dist/tool-system/builtin/lsp.js +0 -144
  588. package/dist/tool-system/builtin/notebook-edit.d.ts +0 -7
  589. package/dist/tool-system/builtin/notebook-edit.js +0 -127
  590. package/dist/tool-system/builtin/worktree.d.ts +0 -11
  591. package/dist/tool-system/builtin/worktree.js +0 -363
  592. /package/dist/{external-agents → links}/types.js +0 -0
  593. /package/dist/{engine/session-usage.d.ts → session/usage.d.ts} +0 -0
  594. /package/dist/{engine/session-usage.js → session/usage.js} +0 -0
@@ -0,0 +1,22 @@
1
+ /** A host-authorized project Session that may receive a model-sent message. */
2
+ export interface SessionMessageTarget {
3
+ sessionId: string;
4
+ title: string;
5
+ workspaceRoot: string;
6
+ workspaceProfile?: string;
7
+ }
8
+ export interface RouteSessionMessageInput {
9
+ sourceSessionId: string;
10
+ target: SessionMessageTarget;
11
+ message: string;
12
+ /** Full same-project catalog so the target can send a later message onward. */
13
+ catalog: readonly SessionMessageTarget[];
14
+ }
15
+ export type SessionMessageRouter = (input: RouteSessionMessageInput) => Promise<void>;
16
+ export interface SessionMessageToolService {
17
+ targets: readonly SessionMessageTarget[];
18
+ send(input: {
19
+ targetSessionId: string;
20
+ message: string;
21
+ }): Promise<SessionMessageTarget>;
22
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -3,6 +3,7 @@
3
3
  * toMessages() derives Message[] from events for sending to LLM.
4
4
  */
5
5
  import type { TranscriptEvent, TranscriptEventType, Message, ContentBlock } from "../types.js";
6
+ import type { EngineResult } from "../engine/types.js";
6
7
  type TranscriptWriter = (filePath: string, data: string, encoding: "utf-8") => void;
7
8
  type ParsedEvents = {
8
9
  events: TranscriptEvent[];
@@ -17,6 +18,31 @@ export interface TranscriptFlushFailure {
17
18
  recoverable: false;
18
19
  filePath: string;
19
20
  }
21
+ export interface ContextEventRange {
22
+ fromEventId: string;
23
+ toEventId: string;
24
+ }
25
+ export interface SelectedContextRange {
26
+ events: TranscriptEvent[];
27
+ messages: Message[];
28
+ sourceEventCount: number;
29
+ }
30
+ export type SummaryAppendMetadata = {
31
+ fromTurn: number;
32
+ toTurn: number;
33
+ eventCount: number;
34
+ } | {
35
+ trigger: "context_transfer";
36
+ sourceRange: {
37
+ sessionId: string;
38
+ fromEventId: string;
39
+ toEventId: string;
40
+ };
41
+ sourceEventCount: number;
42
+ estimatedTokens: number;
43
+ summaryVersion: number;
44
+ summaryHash: string;
45
+ };
20
46
  export declare class Transcript {
21
47
  private events;
22
48
  private filePath;
@@ -41,8 +67,21 @@ export declare class Transcript {
41
67
  injected?: boolean;
42
68
  steerId?: string;
43
69
  clientMessageId?: string;
70
+ displayText?: string;
71
+ authority?: "user" | "agent" | "system" | "policy";
72
+ source?: "agent-direction" | "goal-control";
73
+ envelopeIds?: string[];
74
+ correlationIds?: string[];
44
75
  }): TranscriptEvent;
45
76
  hasClientMessageId(clientMessageId: string): boolean;
77
+ /**
78
+ * Persist the exact response associated with one idempotent submit. The
79
+ * receipt stays outside toMessages(), so replay support does not change the
80
+ * model's conversation history.
81
+ */
82
+ appendRunResult(clientMessageId: string, result: EngineResult): TranscriptEvent;
83
+ /** Return the newest valid durable response for an idempotent submit. */
84
+ findRunResultByClientMessageId(clientMessageId: string): EngineResult | undefined;
46
85
  appendToolUse(toolName: string, toolCallId: string, args: Record<string, unknown>): TranscriptEvent;
47
86
  appendToolResult(toolCallId: string, toolName: string, result?: string, error?: string, contentBlocks?: ContentBlock[]): TranscriptEvent;
48
87
  /** Anchor for a spawned sub-agent (see TranscriptEventType "subagent").
@@ -58,11 +97,7 @@ export declare class Transcript {
58
97
  * can hit more than one abort return for a single Stop).
59
98
  */
60
99
  appendTurnStopped(): TranscriptEvent | undefined;
61
- appendSummary(summary: string, compactedRange: {
62
- fromTurn: number;
63
- toTurn: number;
64
- eventCount: number;
65
- }): TranscriptEvent;
100
+ appendSummary(summary: string, metadata: SummaryAppendMetadata): TranscriptEvent;
66
101
  appendError(error: string, details?: Record<string, unknown>): TranscriptEvent;
67
102
  /**
68
103
  * Derive Message[] from transcript events for sending to the LLM.
@@ -91,6 +126,12 @@ export declare class Transcript {
91
126
  role: string;
92
127
  content: string | ContentBlock[];
93
128
  }>;
129
+ /**
130
+ * Select one inclusive, stable event-id range and project only LLM-context
131
+ * events from it. Audit/UI events remain part of sourceEventCount but never
132
+ * enter the package prompt.
133
+ */
134
+ static selectContextRange(events: readonly TranscriptEvent[], range: ContextEventRange): SelectedContextRange;
94
135
  static loadFromFile(filePath: string): Transcript;
95
136
  }
96
137
  export {};
@@ -6,6 +6,13 @@ import { appendFileSync, readFileSync, existsSync, mkdirSync, writeFileSync } fr
6
6
  import { dirname } from "node:path";
7
7
  import { nanoid } from "nanoid";
8
8
  import { logger } from "../logging/logger.js";
9
+ const CONTEXT_EVENT_TYPES = new Set([
10
+ "message",
11
+ "tool_use",
12
+ "tool_result",
13
+ "summary",
14
+ "context_transfer",
15
+ ]);
9
16
  export class Transcript {
10
17
  events = [];
11
18
  filePath;
@@ -64,11 +71,37 @@ export class Transcript {
64
71
  ...(opts?.injected ? { injected: true } : {}),
65
72
  ...(opts?.steerId ? { steerId: opts.steerId } : {}),
66
73
  ...(opts?.clientMessageId ? { clientMessageId: opts.clientMessageId } : {}),
74
+ ...(opts?.displayText ? { displayText: opts.displayText } : {}),
75
+ ...(opts?.authority ? { authority: opts.authority } : {}),
76
+ ...(opts?.source ? { source: opts.source } : {}),
77
+ ...(opts?.envelopeIds ? { envelopeIds: opts.envelopeIds } : {}),
78
+ ...(opts?.correlationIds ? { correlationIds: opts.correlationIds } : {}),
67
79
  });
68
80
  }
69
81
  hasClientMessageId(clientMessageId) {
70
82
  return this.findMessageByClientId(clientMessageId) !== undefined;
71
83
  }
84
+ /**
85
+ * Persist the exact response associated with one idempotent submit. The
86
+ * receipt stays outside toMessages(), so replay support does not change the
87
+ * model's conversation history.
88
+ */
89
+ appendRunResult(clientMessageId, result) {
90
+ return this.append("run_result", { clientMessageId, result });
91
+ }
92
+ /** Return the newest valid durable response for an idempotent submit. */
93
+ findRunResultByClientMessageId(clientMessageId) {
94
+ for (let index = this.events.length - 1; index >= 0; index -= 1) {
95
+ const event = this.events[index];
96
+ if (event.type !== "run_result" || event.data.clientMessageId !== clientMessageId)
97
+ continue;
98
+ const result = event.data.result;
99
+ if (!isEngineResultReceipt(result))
100
+ return undefined;
101
+ return result;
102
+ }
103
+ return undefined;
104
+ }
72
105
  appendToolUse(toolName, toolCallId, args) {
73
106
  return this.append("tool_use", { toolName, toolCallId, args });
74
107
  }
@@ -104,11 +137,15 @@ export class Transcript {
104
137
  return undefined;
105
138
  return this.append("turn_stopped", {});
106
139
  }
107
- appendSummary(summary, compactedRange) {
140
+ appendSummary(summary, metadata) {
141
+ if ("trigger" in metadata) {
142
+ const { trigger: _trigger, ...provenance } = metadata;
143
+ return this.append("context_transfer", { summary, ...provenance });
144
+ }
108
145
  return this.append("summary", {
109
146
  summary,
110
147
  trigger: "auto",
111
- compactedRange,
148
+ compactedRange: metadata,
112
149
  preservedSegment: {
113
150
  headEventId: this.events[0]?.id,
114
151
  tailEventId: this.events[this.events.length - 1]?.id,
@@ -166,7 +203,17 @@ export class Transcript {
166
203
  });
167
204
  break;
168
205
  }
169
- // turn_boundary, session_meta, file_history, plan_operation, error
206
+ case "context_transfer": {
207
+ const { summary, handoffId } = event.data;
208
+ messages.push({
209
+ role: "user",
210
+ content: handoffId
211
+ ? `<system-reminder>Session handoff received:\n${summary}</system-reminder>`
212
+ : `<system-reminder>Background context transferred from a selected conversation range:\n${summary}</system-reminder>`,
213
+ });
214
+ break;
215
+ }
216
+ // turn_boundary, run_result, session_meta, file_history, plan_operation, error
170
217
  // are not included in LLM messages
171
218
  }
172
219
  }
@@ -338,10 +385,51 @@ export class Transcript {
338
385
  });
339
386
  break;
340
387
  }
388
+ case "context_transfer": {
389
+ const { summary, handoffId } = event.data;
390
+ messages.push({
391
+ role: "user",
392
+ content: handoffId
393
+ ? `<system-reminder>Session handoff received:\n${summary}</system-reminder>`
394
+ : `<system-reminder>Background context transferred from a selected conversation range:\n${summary}</system-reminder>`,
395
+ });
396
+ break;
397
+ }
341
398
  }
342
399
  }
343
400
  return messages;
344
401
  }
402
+ /**
403
+ * Select one inclusive, stable event-id range and project only LLM-context
404
+ * events from it. Audit/UI events remain part of sourceEventCount but never
405
+ * enter the package prompt.
406
+ */
407
+ static selectContextRange(events, range) {
408
+ const fromMatches = events
409
+ .map((event, index) => (event.id === range.fromEventId ? index : -1))
410
+ .filter((index) => index >= 0);
411
+ const toMatches = events
412
+ .map((event, index) => (event.id === range.toEventId ? index : -1))
413
+ .filter((index) => index >= 0);
414
+ if (fromMatches.length !== 1 || toMatches.length !== 1) {
415
+ throw new Error("Context range endpoints must each identify exactly one source event");
416
+ }
417
+ const fromIndex = fromMatches[0];
418
+ const toIndex = toMatches[0];
419
+ if (fromIndex > toIndex)
420
+ throw new Error("Context range endpoints are out of order");
421
+ const frozen = structuredClone(events.slice(fromIndex, toIndex + 1));
422
+ if (frozen[0]?.type === "session_meta" || frozen.at(-1)?.type === "session_meta") {
423
+ throw new Error("Context range cannot use session metadata as a boundary");
424
+ }
425
+ const selected = frozen.filter((event) => CONTEXT_EVENT_TYPES.has(event.type));
426
+ validateSelectedToolPairs(selected);
427
+ return {
428
+ events: selected,
429
+ messages: Transcript.eventsToMessages(selected),
430
+ sourceEventCount: frozen.length,
431
+ };
432
+ }
345
433
  static loadFromFile(filePath) {
346
434
  const transcript = new Transcript(filePath);
347
435
  if (!existsSync(filePath))
@@ -365,3 +453,71 @@ export class Transcript {
365
453
  return transcript;
366
454
  }
367
455
  }
456
+ function isEngineResultReceipt(value) {
457
+ if (!value || typeof value !== "object" || Array.isArray(value))
458
+ return false;
459
+ const result = value;
460
+ const usage = result.usage;
461
+ return (typeof result.text === "string" &&
462
+ typeof result.reason === "string" &&
463
+ typeof result.sessionId === "string" &&
464
+ typeof result.turnCount === "number" &&
465
+ Number.isSafeInteger(result.turnCount) &&
466
+ Boolean(usage) &&
467
+ typeof usage?.promptTokens === "number" &&
468
+ typeof usage?.completionTokens === "number" &&
469
+ typeof usage?.totalTokens === "number");
470
+ }
471
+ function validateSelectedToolPairs(events) {
472
+ const providerUses = [];
473
+ const metadataUses = [];
474
+ const results = [];
475
+ for (const event of events) {
476
+ if (event.type === "message") {
477
+ const content = event.data.content;
478
+ if (!Array.isArray(content))
479
+ continue;
480
+ for (const block of content) {
481
+ if (block.type === "tool_use" && typeof block.id === "string")
482
+ providerUses.push(block.id);
483
+ }
484
+ }
485
+ else if (event.type === "tool_use") {
486
+ if (typeof event.data.toolCallId === "string")
487
+ metadataUses.push(event.data.toolCallId);
488
+ }
489
+ else if (event.type === "tool_result") {
490
+ if (typeof event.data.toolCallId === "string")
491
+ results.push(event.data.toolCallId);
492
+ }
493
+ }
494
+ if (new Set(providerUses).size !== providerUses.length) {
495
+ throw new Error("Context range contains duplicate provider tool metadata");
496
+ }
497
+ if (new Set(metadataUses).size !== metadataUses.length) {
498
+ throw new Error("Context range contains duplicate tool metadata");
499
+ }
500
+ if (new Set(results).size !== results.length) {
501
+ throw new Error("Context range contains duplicate tool results");
502
+ }
503
+ if (providerUses.length !== metadataUses.length ||
504
+ providerUses.some((id, index) => metadataUses[index] !== id)) {
505
+ throw new Error("Context range has orphaned or mismatched tool metadata");
506
+ }
507
+ const pending = new Set();
508
+ for (const event of events) {
509
+ if (event.type === "tool_use") {
510
+ const id = event.data.toolCallId;
511
+ if (typeof id === "string")
512
+ pending.add(id);
513
+ }
514
+ else if (event.type === "tool_result") {
515
+ const id = event.data.toolCallId;
516
+ if (typeof id !== "string" || !pending.delete(id)) {
517
+ throw new Error("Context range contains an orphaned or out-of-order tool result");
518
+ }
519
+ }
520
+ }
521
+ if (pending.size > 0)
522
+ throw new Error("Context range ends with an unfinished tool round");
523
+ }
@@ -43,6 +43,46 @@ export declare const FEATURE_FLAGS: {
43
43
  readonly default: false;
44
44
  readonly description: "Capture full command stdout/stderr snapshots";
45
45
  };
46
+ /**
47
+ * Run a session on an EXTERNAL Agent Runtime (Codex / Claude Code) instead of
48
+ * the native Engine.
49
+ *
50
+ * Default ON, which reverses the original §20 decision. The reasoning behind
51
+ * "off" was that the native path must not depend on an external binary — that
52
+ * still holds, and is now enforced by a better mechanism than a flag: the
53
+ * picker only lists a runtime whose binary is actually installed
54
+ * (external-runtime-availability.ts), and every non-prefixed model key still
55
+ * routes to the native Engine. A machine without `codex` sees exactly what it
56
+ * saw before.
57
+ *
58
+ * What the flag actually did in practice was hide the feature from everyone,
59
+ * including the people who installed Codex on purpose: the entries never
60
+ * appeared, with no hint that a setting was responsible. An opt-in nobody can
61
+ * discover is indistinguishable from a missing feature.
62
+ *
63
+ * Turning it off remains the escape hatch — it hides the entries outright.
64
+ */
65
+ readonly external_agent_runtime: {
66
+ readonly default: true;
67
+ readonly description: "Allow a session to run on Codex or Claude Code instead of the native engine";
68
+ };
69
+ /**
70
+ * Expose CodeShell Host Tools to an external runtime. Separate from the flag
71
+ * above so the runtime can be trialled with NO tool surface at all — §20 asks
72
+ * for exactly that split, because the tool bridge is the part that carries the
73
+ * security burden.
74
+ *
75
+ * Also default ON now, for a blunt reason: with it off the runtime has an
76
+ * EMPTY tool surface — no skills, no memory, no file access — which is not a
77
+ * usable Agent Runtime, so shipping that as the default just means the
78
+ * feature appears broken. Every exposed tool still executes through
79
+ * ToolExecutor, so the user's permission rules and the approval dialog apply
80
+ * exactly as they do on the native path.
81
+ */
82
+ readonly external_host_tools: {
83
+ readonly default: true;
84
+ readonly description: "Expose allowlisted CodeShell tools to an external Agent Runtime";
85
+ };
46
86
  };
47
87
  export type FeatureFlagName = keyof typeof FEATURE_FLAGS;
48
88
  /** The settings overlay shape: a partial map of known flags → boolean. */
@@ -28,6 +28,46 @@ export const FEATURE_FLAGS = {
28
28
  undo: { default: false, description: "Per-session file undo (/undo)" },
29
29
  /** Shell snapshot: capture full stdout/stderr of commands. */
30
30
  shell_snapshot: { default: false, description: "Capture full command stdout/stderr snapshots" },
31
+ /**
32
+ * Run a session on an EXTERNAL Agent Runtime (Codex / Claude Code) instead of
33
+ * the native Engine.
34
+ *
35
+ * Default ON, which reverses the original §20 decision. The reasoning behind
36
+ * "off" was that the native path must not depend on an external binary — that
37
+ * still holds, and is now enforced by a better mechanism than a flag: the
38
+ * picker only lists a runtime whose binary is actually installed
39
+ * (external-runtime-availability.ts), and every non-prefixed model key still
40
+ * routes to the native Engine. A machine without `codex` sees exactly what it
41
+ * saw before.
42
+ *
43
+ * What the flag actually did in practice was hide the feature from everyone,
44
+ * including the people who installed Codex on purpose: the entries never
45
+ * appeared, with no hint that a setting was responsible. An opt-in nobody can
46
+ * discover is indistinguishable from a missing feature.
47
+ *
48
+ * Turning it off remains the escape hatch — it hides the entries outright.
49
+ */
50
+ external_agent_runtime: {
51
+ default: true,
52
+ description: "Allow a session to run on Codex or Claude Code instead of the native engine",
53
+ },
54
+ /**
55
+ * Expose CodeShell Host Tools to an external runtime. Separate from the flag
56
+ * above so the runtime can be trialled with NO tool surface at all — §20 asks
57
+ * for exactly that split, because the tool bridge is the part that carries the
58
+ * security burden.
59
+ *
60
+ * Also default ON now, for a blunt reason: with it off the runtime has an
61
+ * EMPTY tool surface — no skills, no memory, no file access — which is not a
62
+ * usable Agent Runtime, so shipping that as the default just means the
63
+ * feature appears broken. Every exposed tool still executes through
64
+ * ToolExecutor, so the user's permission rules and the approval dialog apply
65
+ * exactly as they do on the native path.
66
+ */
67
+ external_host_tools: {
68
+ default: true,
69
+ description: "Expose allowlisted CodeShell tools to an external Agent Runtime",
70
+ },
31
71
  };
32
72
  /** All known flag names, for iteration (e.g. the /features listing). */
33
73
  export function featureFlagNames() {
@@ -71,6 +71,15 @@ export declare class SettingsManager {
71
71
  * host (desktop) passes the real trust decision from its trust-store.
72
72
  */
73
73
  private readonly projectTrusted;
74
+ /**
75
+ * Override the user-level config directory (the `~/.code-shell` layer:
76
+ * settings.managed.json / settings.json live directly inside it). When
77
+ * absent the manager keeps today's behavior — `join(userHome(),
78
+ * ".code-shell")` resolved per call so `$HOME` overrides still work.
79
+ * Injection point for identity-scoped server deployments (a per-user
80
+ * worker passes `<dataRoot>` here instead of relocating `$HOME`).
81
+ */
82
+ private readonly userConfigDirOverride?;
74
83
  private sources;
75
84
  private merged;
76
85
  constructor(cwd?: string, scope?: SettingsScope,
@@ -86,7 +95,18 @@ export declare class SettingsManager {
86
95
  * Defaults to `true` so existing embedders/tests keep their behavior; the
87
96
  * host (desktop) passes the real trust decision from its trust-store.
88
97
  */
89
- projectTrusted?: boolean);
98
+ projectTrusted?: boolean,
99
+ /**
100
+ * Override the user-level config directory (the `~/.code-shell` layer:
101
+ * settings.managed.json / settings.json live directly inside it). When
102
+ * absent the manager keeps today's behavior — `join(userHome(),
103
+ * ".code-shell")` resolved per call so `$HOME` overrides still work.
104
+ * Injection point for identity-scoped server deployments (a per-user
105
+ * worker passes `<dataRoot>` here instead of relocating `$HOME`).
106
+ */
107
+ userConfigDirOverride?: string | undefined);
108
+ /** User-layer config dir: explicit override wins, else `~/.code-shell`. */
109
+ private userConfigDir;
90
110
  /**
91
111
  * Load settings from all sources.
92
112
  */
@@ -143,6 +163,24 @@ export declare class SettingsManager {
143
163
  private projectSettingsPath;
144
164
  private readJsonObject;
145
165
  private atomicWriteJson;
166
+ /**
167
+ * Read-modify-write a settings file under a cross-process lock.
168
+ *
169
+ * Atomic rename alone only prevents a half-written file; it does NOT prevent a
170
+ * lost update. Every writer here used to read its own snapshot outside any
171
+ * lock, so two processes changing DIFFERENT keys still clobbered each other:
172
+ * 48 concurrent writers each setting a distinct key left only 17 keys on disk.
173
+ *
174
+ * Real multi-writer paths, not a theoretical concern: the desktop settings
175
+ * page, the Agent `Config` tool, an automation worker, the TUI and a second
176
+ * desktop instance all write the same files. The desktop settings service
177
+ * already locked correctly; this brings Core's own writers onto the same
178
+ * protocol so they interlock rather than race past one another.
179
+ *
180
+ * `mutate` receives the CURRENT on-disk object (re-read inside the lock) and
181
+ * mutates it in place; returning false skips the write.
182
+ */
183
+ private mutateSettingsFile;
146
184
  private loadJsonFile;
147
185
  private deepMerge;
148
186
  }