@cjhyy/code-shell-core 0.7.0 → 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 (621) 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 +20 -5
  23. package/dist/context/compaction.d.ts +39 -3
  24. package/dist/context/compaction.js +151 -39
  25. package/dist/context/manager.d.ts +20 -4
  26. package/dist/context/manager.js +42 -7
  27. package/dist/context/token-counter.js +5 -3
  28. package/dist/context/tool-result-storage.d.ts +6 -0
  29. package/dist/context/tool-result-storage.js +25 -4
  30. package/dist/credentials/access.d.ts +13 -2
  31. package/dist/credentials/access.js +99 -4
  32. package/dist/credentials/index.d.ts +3 -2
  33. package/dist/credentials/index.js +2 -1
  34. package/dist/credentials/oauth.d.ts +9 -1
  35. package/dist/credentials/oauth.js +80 -1
  36. package/dist/credentials/store.d.ts +16 -2
  37. package/dist/credentials/store.js +33 -11
  38. package/dist/credentials/types.d.ts +62 -1
  39. package/dist/credentials/types.js +16 -1
  40. package/dist/credentials/use-credential-tool.js +15 -1
  41. package/dist/engine/auxiliary-pipeline.d.ts +40 -0
  42. package/dist/engine/auxiliary-pipeline.js +181 -0
  43. package/dist/{settings → engine}/disk-defaults.d.ts +2 -2
  44. package/dist/{settings → engine}/disk-defaults.js +5 -2
  45. package/dist/engine/dynamic-tool-defs.d.ts +4 -0
  46. package/dist/engine/dynamic-tool-defs.js +4 -0
  47. package/dist/engine/engine.d.ts +272 -184
  48. package/dist/engine/engine.js +1869 -1864
  49. package/dist/engine/file-history-hook.d.ts +11 -0
  50. package/dist/engine/file-history-hook.js +31 -0
  51. package/dist/engine/goal-judge-context.d.ts +9 -0
  52. package/dist/engine/goal-judge-context.js +234 -0
  53. package/dist/engine/injected-context-cache.d.ts +6 -0
  54. package/dist/engine/injected-context-cache.js +13 -0
  55. package/dist/engine/input-attachments.d.ts +1 -1
  56. package/dist/engine/model-facade.d.ts +3 -3
  57. package/dist/engine/model-facade.js +15 -14
  58. package/dist/engine/permission-controller.d.ts +55 -0
  59. package/dist/engine/permission-controller.js +148 -0
  60. package/dist/engine/prompt-cache-diagnostics.d.ts +58 -0
  61. package/dist/engine/prompt-cache-diagnostics.js +178 -0
  62. package/dist/engine/run-accounting.d.ts +41 -0
  63. package/dist/engine/run-accounting.js +126 -0
  64. package/dist/engine/run-context.d.ts +44 -0
  65. package/dist/engine/run-context.js +88 -0
  66. package/dist/engine/run-environment.d.ts +30 -0
  67. package/dist/engine/run-environment.js +77 -0
  68. package/dist/engine/run-finalize.d.ts +58 -0
  69. package/dist/engine/run-finalize.js +245 -0
  70. package/dist/engine/run-goal.d.ts +58 -0
  71. package/dist/engine/run-goal.js +188 -0
  72. package/dist/engine/run-image-input.d.ts +1 -1
  73. package/dist/engine/run-image-input.js +5 -3
  74. package/dist/engine/run-session-open.d.ts +41 -0
  75. package/dist/engine/run-session-open.js +186 -0
  76. package/dist/engine/run-setup.d.ts +42 -0
  77. package/dist/engine/run-setup.js +58 -0
  78. package/dist/engine/run-tooling.d.ts +125 -0
  79. package/dist/engine/run-tooling.js +283 -0
  80. package/dist/engine/run-types.d.ts +139 -0
  81. package/dist/engine/run-types.js +12 -0
  82. package/dist/engine/run-workspace.d.ts +50 -0
  83. package/dist/engine/run-workspace.js +114 -0
  84. package/dist/engine/session-title.d.ts +2 -1
  85. package/dist/engine/session-title.js +4 -1
  86. package/dist/engine/steer-queue.d.ts +1 -1
  87. package/dist/engine/subagent-spawner.d.ts +32 -0
  88. package/dist/engine/subagent-spawner.js +287 -0
  89. package/dist/engine/tool-summary.d.ts +2 -2
  90. package/dist/engine/tool-summary.js +2 -2
  91. package/dist/engine/turn-loop.d.ts +67 -10
  92. package/dist/engine/turn-loop.js +538 -97
  93. package/dist/engine/types.d.ts +35 -4
  94. package/dist/engine/types.js +1 -1
  95. package/dist/{engine/goal.d.ts → goal/lifecycle.d.ts} +80 -6
  96. package/dist/goal/lifecycle.js +482 -0
  97. package/dist/hooks/events.d.ts +26 -9
  98. package/dist/hooks/events.js +0 -3
  99. package/dist/hooks/goal-stop-hook.d.ts +28 -29
  100. package/dist/hooks/goal-stop-hook.js +344 -144
  101. package/dist/hooks/registry.js +4 -1
  102. package/dist/hooks/shell-runner.d.ts +12 -1
  103. package/dist/hooks/shell-runner.js +160 -9
  104. package/dist/index.d.ts +51 -110
  105. package/dist/index.extension.d.ts +51 -0
  106. package/dist/index.extension.js +39 -0
  107. package/dist/index.internal.d.ts +86 -0
  108. package/dist/index.internal.js +92 -0
  109. package/dist/index.js +37 -125
  110. package/dist/links/cli.d.ts +48 -0
  111. package/dist/links/cli.js +617 -0
  112. package/dist/links/http.d.ts +40 -0
  113. package/dist/links/http.js +166 -0
  114. package/dist/links/index.d.ts +4 -0
  115. package/dist/links/index.js +3 -0
  116. package/dist/links/link-action-tool.d.ts +5 -0
  117. package/dist/links/link-action-tool.js +241 -0
  118. package/dist/links/providers.d.ts +8 -0
  119. package/dist/links/providers.js +665 -0
  120. package/dist/links/types.d.ts +44 -0
  121. package/dist/llm/client-base.d.ts +7 -0
  122. package/dist/llm/client-base.js +72 -10
  123. package/dist/llm/model-pool.d.ts +1 -1
  124. package/dist/llm/model-pool.js +1 -1
  125. package/dist/llm/providers/anthropic.d.ts +1 -0
  126. package/dist/llm/providers/anthropic.js +9 -0
  127. package/dist/llm/providers/openai.d.ts +1 -0
  128. package/dist/llm/providers/openai.js +17 -0
  129. package/dist/llm/types.d.ts +12 -5
  130. package/dist/model-catalog/index.js +15 -2
  131. package/dist/model-catalog/resolve.d.ts +13 -1
  132. package/dist/model-catalog/resolve.js +37 -2
  133. package/dist/model-catalog/types.d.ts +74 -48
  134. package/dist/model-catalog/types.js +16 -5
  135. package/dist/model-catalog/upsert.d.ts +3 -1
  136. package/dist/model-catalog/upsert.js +9 -0
  137. package/dist/onboarding.d.ts +0 -1
  138. package/dist/onboarding.js +1 -22
  139. package/dist/panel-apps/bindings.d.ts +24 -0
  140. package/dist/panel-apps/bindings.js +69 -0
  141. package/dist/panel-apps/github-archive.d.ts +21 -0
  142. package/dist/panel-apps/github-archive.js +98 -0
  143. package/dist/panel-apps/index.d.ts +4 -0
  144. package/dist/panel-apps/index.js +4 -0
  145. package/dist/panel-apps/installer.d.ts +68 -0
  146. package/dist/panel-apps/installer.js +622 -0
  147. package/dist/panel-apps/manifest.d.ts +364 -0
  148. package/dist/panel-apps/manifest.js +189 -0
  149. package/dist/panel-apps/paths.d.ts +13 -0
  150. package/dist/panel-apps/paths.js +38 -0
  151. package/dist/panel-apps/registry.d.ts +51 -0
  152. package/dist/panel-apps/registry.js +99 -0
  153. package/dist/panel-apps/runtime.d.ts +80 -0
  154. package/dist/panel-apps/runtime.js +154 -0
  155. package/dist/plugins/gitOps.js +8 -1
  156. package/dist/plugins/installedPlugins.d.ts +2 -1
  157. package/dist/plugins/installedPlugins.js +146 -8
  158. package/dist/plugins/installer/codex/convertAgents.d.ts +4 -1
  159. package/dist/plugins/installer/codex/convertAgents.js +62 -8
  160. package/dist/plugins/installer/codex/convertCommands.d.ts +5 -5
  161. package/dist/plugins/installer/codex/convertCommands.js +35 -12
  162. package/dist/plugins/installer/codex/convertHooks.d.ts +10 -0
  163. package/dist/plugins/installer/codex/convertHooks.js +82 -0
  164. package/dist/plugins/installer/codex/convertSkills.js +41 -6
  165. package/dist/plugins/installer/install.d.ts +7 -1
  166. package/dist/plugins/installer/install.js +21 -87
  167. package/dist/plugins/installer/installFromArchive.d.ts +26 -4
  168. package/dist/plugins/installer/installFromArchive.js +44 -27
  169. package/dist/plugins/installer/installFromNpm.d.ts +31 -0
  170. package/dist/plugins/installer/installFromNpm.js +273 -0
  171. package/dist/plugins/installer/loadPluginAgents.js +17 -4
  172. package/dist/plugins/installer/loadPluginMcp.d.ts +14 -0
  173. package/dist/plugins/installer/loadPluginMcp.js +245 -35
  174. package/dist/plugins/installer/normalizeManifest.d.ts +13 -0
  175. package/dist/plugins/installer/normalizeManifest.js +306 -0
  176. package/dist/plugins/installer/npmTar.d.ts +13 -0
  177. package/dist/plugins/installer/npmTar.js +321 -0
  178. package/dist/plugins/installer/parseSource.d.ts +11 -0
  179. package/dist/plugins/installer/parseSource.js +48 -0
  180. package/dist/plugins/installer/preview.d.ts +101 -0
  181. package/dist/plugins/installer/preview.js +336 -0
  182. package/dist/plugins/installer/projectPluginSource.d.ts +14 -0
  183. package/dist/plugins/installer/projectPluginSource.js +140 -0
  184. package/dist/plugins/installer/types.d.ts +775 -0
  185. package/dist/plugins/installer/types.js +100 -0
  186. package/dist/plugins/installer/unzip.d.ts +11 -0
  187. package/dist/plugins/installer/unzip.js +123 -9
  188. package/dist/plugins/installer/update.d.ts +2 -2
  189. package/dist/plugins/installer/update.js +43 -4
  190. package/dist/plugins/loadPluginHooks.d.ts +19 -2
  191. package/dist/plugins/loadPluginHooks.js +97 -86
  192. package/dist/plugins/pluginAutomationTemplates.d.ts +18 -0
  193. package/dist/plugins/pluginAutomationTemplates.js +50 -0
  194. package/dist/plugins/pluginCatalog.d.ts +45 -0
  195. package/dist/plugins/pluginCatalog.js +87 -0
  196. package/dist/plugins/pluginCommandHook.d.ts +10 -4
  197. package/dist/plugins/pluginCommandHook.js +133 -18
  198. package/dist/plugins/pluginCommandsLoader.d.ts +19 -0
  199. package/dist/plugins/pluginCommandsLoader.js +181 -7
  200. package/dist/plugins/pluginContent.d.ts +10 -1
  201. package/dist/plugins/pluginContent.js +87 -30
  202. package/dist/plugins/pluginHookApproval.d.ts +30 -0
  203. package/dist/plugins/pluginHookApproval.js +160 -0
  204. package/dist/plugins/pluginHookIntegrity.d.ts +69 -0
  205. package/dist/plugins/pluginHookIntegrity.js +361 -0
  206. package/dist/plugins/pluginInstaller.js +71 -12
  207. package/dist/plugins/pluginMcpApproval.d.ts +19 -0
  208. package/dist/plugins/pluginMcpApproval.js +110 -0
  209. package/dist/plugins/pluginMcpIntegrity.d.ts +21 -0
  210. package/dist/plugins/pluginMcpIntegrity.js +74 -0
  211. package/dist/plugins/types.d.ts +30 -0
  212. package/dist/plugins/varRewrite.d.ts +9 -5
  213. package/dist/plugins/varRewrite.js +26 -17
  214. package/dist/preset/index.d.ts +11 -8
  215. package/dist/preset/index.js +62 -203
  216. package/dist/product/define.js +9 -3
  217. package/dist/product/types.d.ts +0 -2
  218. package/dist/profile/activation.d.ts +36 -0
  219. package/dist/profile/activation.js +57 -0
  220. package/dist/profile/catalog-store.d.ts +77 -0
  221. package/dist/profile/catalog-store.js +346 -0
  222. package/dist/profile/catalog.d.ts +54 -0
  223. package/dist/profile/catalog.js +152 -0
  224. package/dist/profile/index.d.ts +7 -0
  225. package/dist/profile/index.js +7 -0
  226. package/dist/profile/requirements.d.ts +76 -0
  227. package/dist/profile/requirements.js +117 -0
  228. package/dist/profile/resolve.d.ts +11 -0
  229. package/dist/profile/resolve.js +41 -0
  230. package/dist/profile/store.d.ts +17 -0
  231. package/dist/profile/store.js +167 -0
  232. package/dist/profile/types.d.ts +321 -0
  233. package/dist/profile/types.js +104 -0
  234. package/dist/prompt/composer.d.ts +46 -7
  235. package/dist/prompt/composer.js +78 -48
  236. package/dist/prompt/instruction-scanner.d.ts +6 -5
  237. package/dist/prompt/instruction-scanner.js +8 -23
  238. package/dist/prompt/section-loader.d.ts +2 -2
  239. package/dist/prompt/section-loader.js +7 -4
  240. package/dist/prompt/sections/browser.md +10 -9
  241. package/dist/prompt/sections/harness-base.md +9 -0
  242. package/dist/protocol/chat-session-manager.d.ts +77 -3
  243. package/dist/protocol/chat-session-manager.js +194 -18
  244. package/dist/protocol/chat-session.d.ts +72 -9
  245. package/dist/protocol/chat-session.js +151 -16
  246. package/dist/protocol/client.d.ts +37 -4
  247. package/dist/protocol/client.js +118 -6
  248. package/dist/protocol/index.d.ts +2 -2
  249. package/dist/protocol/index.js +2 -2
  250. package/dist/protocol/mobile-remote-types.d.ts +406 -0
  251. package/dist/protocol/mobile-remote-types.js +1 -0
  252. package/dist/protocol/server.d.ts +152 -14
  253. package/dist/protocol/server.js +1574 -229
  254. package/dist/protocol/types.d.ts +182 -32
  255. package/dist/protocol/types.js +18 -0
  256. package/dist/run/ArtifactTracker.d.ts +6 -1
  257. package/dist/run/ArtifactTracker.js +29 -21
  258. package/dist/run/EngineRunner.d.ts +2 -0
  259. package/dist/run/EngineRunner.js +1 -0
  260. package/dist/run/RunManager.d.ts +26 -0
  261. package/dist/run/RunManager.js +82 -11
  262. package/dist/run/factory.d.ts +3 -0
  263. package/dist/run/factory.js +2 -0
  264. package/dist/runtime/safe-spawn.d.ts +6 -0
  265. package/dist/runtime/safe-spawn.js +8 -13
  266. package/dist/services/auto-dream.d.ts +13 -1
  267. package/dist/services/auto-dream.js +56 -8
  268. package/dist/services/dream-consolidation.d.ts +3 -0
  269. package/dist/services/dream-consolidation.js +14 -2
  270. package/dist/services/index.d.ts +1 -1
  271. package/dist/services/index.js +1 -1
  272. package/dist/services/memory-orchestrator.js +6 -2
  273. package/dist/services/oauth.d.ts +34 -10
  274. package/dist/services/oauth.js +236 -98
  275. package/dist/services/session-memory.d.ts +4 -4
  276. package/dist/services/session-memory.js +13 -10
  277. package/dist/session/memory.d.ts +26 -7
  278. package/dist/session/memory.js +79 -21
  279. package/dist/session/session-manager.d.ts +208 -25
  280. package/dist/session/session-manager.js +1232 -116
  281. package/dist/session/session-message.d.ts +22 -0
  282. package/dist/session/session-message.js +1 -0
  283. package/dist/session/transcript.d.ts +76 -6
  284. package/dist/session/transcript.js +278 -7
  285. package/dist/settings/feature-flags.d.ts +40 -0
  286. package/dist/settings/feature-flags.js +40 -0
  287. package/dist/settings/manager.d.ts +39 -1
  288. package/dist/settings/manager.js +102 -41
  289. package/dist/settings/migrate-config.js +4 -2
  290. package/dist/settings/schema.d.ts +511 -177
  291. package/dist/settings/schema.js +98 -25
  292. package/dist/skills/scanner.d.ts +6 -2
  293. package/dist/skills/scanner.js +160 -9
  294. package/dist/sources/adapter.d.ts +14 -0
  295. package/dist/sources/adapter.js +7 -0
  296. package/dist/sources/adapters/local-files.d.ts +10 -0
  297. package/dist/sources/adapters/local-files.js +127 -0
  298. package/dist/sources/adapters/mcp-resource.d.ts +17 -0
  299. package/dist/sources/adapters/mcp-resource.js +41 -0
  300. package/dist/sources/adapters/mock.d.ts +3 -0
  301. package/dist/sources/adapters/mock.js +29 -0
  302. package/dist/sources/binding.d.ts +6 -0
  303. package/dist/sources/binding.js +24 -0
  304. package/dist/sources/catalog.d.ts +6 -0
  305. package/dist/sources/catalog.js +64 -0
  306. package/dist/sources/context-summary.d.ts +8 -0
  307. package/dist/sources/context-summary.js +13 -0
  308. package/dist/sources/credential-status.d.ts +2 -0
  309. package/dist/sources/credential-status.js +13 -0
  310. package/dist/sources/index.d.ts +10 -0
  311. package/dist/sources/index.js +10 -0
  312. package/dist/sources/resolve.d.ts +28 -0
  313. package/dist/sources/resolve.js +47 -0
  314. package/dist/sources/truncate-utf8.d.ts +7 -0
  315. package/dist/sources/truncate-utf8.js +18 -0
  316. package/dist/sources/types.d.ts +71 -0
  317. package/dist/sources/types.js +26 -0
  318. package/dist/testing/fetch-stub.d.ts +32 -0
  319. package/dist/testing/fetch-stub.js +24 -0
  320. package/dist/themes/image.d.ts +18 -0
  321. package/dist/themes/image.js +117 -0
  322. package/dist/themes/index.d.ts +4 -0
  323. package/dist/themes/index.js +4 -0
  324. package/dist/themes/installer.d.ts +50 -0
  325. package/dist/themes/installer.js +290 -0
  326. package/dist/themes/manifest.d.ts +102 -0
  327. package/dist/themes/manifest.js +86 -0
  328. package/dist/themes/paths.d.ts +14 -0
  329. package/dist/themes/paths.js +33 -0
  330. package/dist/tool-system/browser-bridge.d.ts +53 -11
  331. package/dist/tool-system/browser-bridge.js +8 -9
  332. package/dist/tool-system/builtin/agent-heartbeat.d.ts +2 -2
  333. package/dist/tool-system/builtin/agent-heartbeat.js +20 -6
  334. package/dist/tool-system/builtin/agent-notifications.d.ts +127 -72
  335. package/dist/tool-system/builtin/agent-notifications.js +291 -101
  336. package/dist/tool-system/builtin/agent-output-file.js +1 -3
  337. package/dist/tool-system/builtin/agent-progress.d.ts +6 -0
  338. package/dist/tool-system/builtin/agent-progress.js +83 -0
  339. package/dist/tool-system/builtin/agent-registry.d.ts +38 -2
  340. package/dist/tool-system/builtin/agent-registry.js +178 -9
  341. package/dist/tool-system/builtin/agent-transcript-translator.js +1 -1
  342. package/dist/tool-system/builtin/agent.d.ts +2 -0
  343. package/dist/tool-system/builtin/agent.js +279 -34
  344. package/dist/tool-system/builtin/background-jobs.d.ts +63 -7
  345. package/dist/tool-system/builtin/background-jobs.js +111 -15
  346. package/dist/tool-system/builtin/background-work.d.ts +12 -1
  347. package/dist/tool-system/builtin/background-work.js +12 -1
  348. package/dist/tool-system/builtin/bash.d.ts +3 -5
  349. package/dist/tool-system/builtin/bash.js +14 -6
  350. package/dist/tool-system/builtin/browser-tools.d.ts +8 -5
  351. package/dist/tool-system/builtin/browser-tools.js +89 -23
  352. package/dist/tool-system/builtin/edit-model-catalog.d.ts +6 -0
  353. package/dist/tool-system/builtin/edit-model-catalog.js +172 -12
  354. package/dist/tool-system/builtin/edit.d.ts +2 -1
  355. package/dist/tool-system/builtin/edit.js +14 -10
  356. package/dist/tool-system/builtin/file-cache.d.ts +2 -0
  357. package/dist/tool-system/builtin/file-cache.js +4 -0
  358. package/dist/tool-system/builtin/generate-image.js +17 -10
  359. package/dist/tool-system/builtin/generate-video.d.ts +4 -0
  360. package/dist/tool-system/builtin/generate-video.js +164 -28
  361. package/dist/tool-system/builtin/glob.d.ts +2 -1
  362. package/dist/tool-system/builtin/glob.js +28 -3
  363. package/dist/tool-system/builtin/grep.d.ts +1 -0
  364. package/dist/tool-system/builtin/grep.js +82 -17
  365. package/dist/tool-system/builtin/image-uploader.js +7 -1
  366. package/dist/tool-system/builtin/index.d.ts +57 -18
  367. package/dist/tool-system/builtin/index.js +280 -167
  368. package/dist/tool-system/builtin/memory.d.ts +6 -0
  369. package/dist/tool-system/builtin/memory.js +36 -15
  370. package/dist/tool-system/builtin/panel.d.ts +9 -0
  371. package/dist/tool-system/builtin/panel.js +314 -0
  372. package/dist/tool-system/builtin/read.js +5 -1
  373. package/dist/tool-system/builtin/send-message-to-session.d.ts +6 -0
  374. package/dist/tool-system/builtin/send-message-to-session.js +67 -0
  375. package/dist/tool-system/builtin/sources.d.ts +8 -0
  376. package/dist/tool-system/builtin/sources.js +137 -0
  377. package/dist/tool-system/builtin/tool-search.js +7 -2
  378. package/dist/tool-system/builtin/update-automation-memory.js +2 -0
  379. package/dist/tool-system/builtin/video-providers.d.ts +12 -15
  380. package/dist/tool-system/builtin/video-providers.js +1 -0
  381. package/dist/tool-system/builtin/view-image.d.ts +2 -2
  382. package/dist/tool-system/builtin/web-fetch.js +60 -15
  383. package/dist/tool-system/builtin/web-search.js +1 -3
  384. package/dist/tool-system/builtin/write.d.ts +2 -1
  385. package/dist/tool-system/builtin/write.js +14 -4
  386. package/dist/tool-system/capability-module.d.ts +93 -0
  387. package/dist/tool-system/capability-module.js +53 -0
  388. package/dist/tool-system/context.d.ts +94 -24
  389. package/dist/tool-system/executor.js +99 -58
  390. package/dist/tool-system/external-tool-exposure.d.ts +60 -0
  391. package/dist/tool-system/external-tool-exposure.js +304 -0
  392. package/dist/tool-system/mcp-manager.d.ts +17 -1
  393. package/dist/tool-system/mcp-manager.js +72 -7
  394. package/dist/tool-system/mcp-tool-policy.d.ts +9 -0
  395. package/dist/tool-system/mcp-tool-policy.js +34 -0
  396. package/dist/tool-system/panel-bridge.d.ts +53 -0
  397. package/dist/tool-system/panel-bridge.js +1 -0
  398. package/dist/tool-system/path-policy.d.ts +19 -0
  399. package/dist/tool-system/path-policy.js +62 -1
  400. package/dist/tool-system/permission.d.ts +69 -3
  401. package/dist/tool-system/permission.js +429 -30
  402. package/dist/tool-system/registry.d.ts +15 -3
  403. package/dist/tool-system/registry.js +82 -40
  404. package/dist/tool-system/sandbox/index.js +3 -8
  405. package/dist/tool-system/sandbox/seatbelt.js +2 -6
  406. package/dist/tool-system/session-tool-host.d.ts +139 -0
  407. package/dist/tool-system/session-tool-host.js +167 -0
  408. package/dist/tool-system/testing/tool-registry-harness.d.ts +31 -0
  409. package/dist/tool-system/testing/tool-registry-harness.js +51 -0
  410. package/dist/tool-system/validation.d.ts +14 -7
  411. package/dist/tool-system/validation.js +701 -7
  412. package/dist/types.d.ts +201 -20
  413. package/dist/{cc-orchestrator → utils}/cwd-normalize.d.ts +1 -0
  414. package/dist/{cc-orchestrator → utils}/cwd-normalize.js +1 -0
  415. package/dist/utils/file-mutex.d.ts +65 -0
  416. package/dist/utils/file-mutex.js +145 -0
  417. package/dist/utils/json.d.ts +2 -4
  418. package/dist/utils/json.js +2 -4
  419. package/dist/utils/lockfile.d.ts +30 -1
  420. package/dist/utils/lockfile.js +2 -2
  421. package/dist/utils/secret-scrubber.d.ts +8 -0
  422. package/dist/utils/secret-scrubber.js +227 -0
  423. package/dist/utils/toolDisplay.js +1 -1
  424. package/package.json +20 -5
  425. package/THIRD_PARTY_NOTICES.md +0 -206
  426. package/dist/arena/arena.d.ts +0 -43
  427. package/dist/arena/arena.js +0 -333
  428. package/dist/arena/context/context-tools.d.ts +0 -16
  429. package/dist/arena/context/context-tools.js +0 -272
  430. package/dist/arena/context/within-root.d.ts +0 -7
  431. package/dist/arena/context/within-root.js +0 -15
  432. package/dist/arena/detect-mode.d.ts +0 -20
  433. package/dist/arena/detect-mode.js +0 -78
  434. package/dist/arena/digest-builder.d.ts +0 -25
  435. package/dist/arena/digest-builder.js +0 -120
  436. package/dist/arena/index.d.ts +0 -29
  437. package/dist/arena/index.js +0 -29
  438. package/dist/arena/iterate/convergence.d.ts +0 -25
  439. package/dist/arena/iterate/convergence.js +0 -103
  440. package/dist/arena/iterate/formats/index.d.ts +0 -22
  441. package/dist/arena/iterate/formats/index.js +0 -283
  442. package/dist/arena/iterate/index.d.ts +0 -11
  443. package/dist/arena/iterate/index.js +0 -9
  444. package/dist/arena/iterate/iterative-arena.d.ts +0 -23
  445. package/dist/arena/iterate/iterative-arena.js +0 -237
  446. package/dist/arena/iterate/parse.d.ts +0 -42
  447. package/dist/arena/iterate/parse.js +0 -123
  448. package/dist/arena/iterate/phases/argue.d.ts +0 -22
  449. package/dist/arena/iterate/phases/argue.js +0 -165
  450. package/dist/arena/iterate/phases/revise.d.ts +0 -16
  451. package/dist/arena/iterate/phases/revise.js +0 -62
  452. package/dist/arena/iterate/phases/tournament.d.ts +0 -34
  453. package/dist/arena/iterate/phases/tournament.js +0 -113
  454. package/dist/arena/iterate/tools/web-tools.d.ts +0 -13
  455. package/dist/arena/iterate/tools/web-tools.js +0 -54
  456. package/dist/arena/iterate/types.d.ts +0 -152
  457. package/dist/arena/iterate/types.js +0 -8
  458. package/dist/arena/ledger.d.ts +0 -47
  459. package/dist/arena/ledger.js +0 -159
  460. package/dist/arena/lenses/architecture.d.ts +0 -5
  461. package/dist/arena/lenses/architecture.js +0 -22
  462. package/dist/arena/lenses/engineering.d.ts +0 -5
  463. package/dist/arena/lenses/engineering.js +0 -22
  464. package/dist/arena/lenses/general.d.ts +0 -5
  465. package/dist/arena/lenses/general.js +0 -20
  466. package/dist/arena/lenses/index.d.ts +0 -16
  467. package/dist/arena/lenses/index.js +0 -47
  468. package/dist/arena/lenses/product.d.ts +0 -5
  469. package/dist/arena/lenses/product.js +0 -22
  470. package/dist/arena/model-presets.d.ts +0 -23
  471. package/dist/arena/model-presets.js +0 -44
  472. package/dist/arena/phases/adjudication.d.ts +0 -24
  473. package/dist/arena/phases/adjudication.js +0 -141
  474. package/dist/arena/phases/build-consensus.d.ts +0 -29
  475. package/dist/arena/phases/build-consensus.js +0 -83
  476. package/dist/arena/phases/claim-registry.d.ts +0 -26
  477. package/dist/arena/phases/claim-registry.js +0 -60
  478. package/dist/arena/phases/cross-review.d.ts +0 -45
  479. package/dist/arena/phases/cross-review.js +0 -218
  480. package/dist/arena/phases/debate-rounds.d.ts +0 -27
  481. package/dist/arena/phases/debate-rounds.js +0 -159
  482. package/dist/arena/phases/participant-research.d.ts +0 -38
  483. package/dist/arena/phases/participant-research.js +0 -314
  484. package/dist/arena/phases/planning-detail-expansion.d.ts +0 -38
  485. package/dist/arena/phases/planning-detail-expansion.js +0 -119
  486. package/dist/arena/planner.d.ts +0 -27
  487. package/dist/arena/planner.js +0 -311
  488. package/dist/arena/providers/docs.d.ts +0 -7
  489. package/dist/arena/providers/docs.js +0 -111
  490. package/dist/arena/providers/git.d.ts +0 -8
  491. package/dist/arena/providers/git.js +0 -174
  492. package/dist/arena/providers/index.d.ts +0 -32
  493. package/dist/arena/providers/index.js +0 -132
  494. package/dist/arena/providers/none.d.ts +0 -7
  495. package/dist/arena/providers/none.js +0 -11
  496. package/dist/arena/providers/repo.d.ts +0 -7
  497. package/dist/arena/providers/repo.js +0 -258
  498. package/dist/arena/render/session.d.ts +0 -17
  499. package/dist/arena/render/session.js +0 -190
  500. package/dist/arena/render/terminal.d.ts +0 -34
  501. package/dist/arena/render/terminal.js +0 -286
  502. package/dist/arena/strategies/discussion.d.ts +0 -25
  503. package/dist/arena/strategies/discussion.js +0 -143
  504. package/dist/arena/strategies/index.d.ts +0 -15
  505. package/dist/arena/strategies/index.js +0 -28
  506. package/dist/arena/strategies/language-wrapper.d.ts +0 -17
  507. package/dist/arena/strategies/language-wrapper.js +0 -102
  508. package/dist/arena/strategies/lens-wrapper.d.ts +0 -16
  509. package/dist/arena/strategies/lens-wrapper.js +0 -236
  510. package/dist/arena/strategies/planning.d.ts +0 -30
  511. package/dist/arena/strategies/planning.js +0 -225
  512. package/dist/arena/strategies/review.d.ts +0 -26
  513. package/dist/arena/strategies/review.js +0 -168
  514. package/dist/arena/strategies/utils.d.ts +0 -36
  515. package/dist/arena/strategies/utils.js +0 -603
  516. package/dist/arena/tools/selector.d.ts +0 -17
  517. package/dist/arena/tools/selector.js +0 -61
  518. package/dist/arena/transitions.d.ts +0 -53
  519. package/dist/arena/transitions.js +0 -97
  520. package/dist/arena/types.d.ts +0 -514
  521. package/dist/arena/types.js +0 -27
  522. package/dist/cc-orchestrator/agent-adapter.d.ts +0 -54
  523. package/dist/cc-orchestrator/agent-adapter.js +0 -143
  524. package/dist/cc-orchestrator/cc-capability.d.ts +0 -19
  525. package/dist/cc-orchestrator/cc-capability.js +0 -53
  526. package/dist/cc-orchestrator/codex-session-discovery.d.ts +0 -24
  527. package/dist/cc-orchestrator/codex-session-discovery.js +0 -191
  528. package/dist/cc-orchestrator/codex-session-history.d.ts +0 -38
  529. package/dist/cc-orchestrator/codex-session-history.js +0 -247
  530. package/dist/cc-orchestrator/external-agent-bindings.d.ts +0 -27
  531. package/dist/cc-orchestrator/external-agent-bindings.js +0 -150
  532. package/dist/cc-orchestrator/external-agent-changes.d.ts +0 -19
  533. package/dist/cc-orchestrator/external-agent-changes.js +0 -231
  534. package/dist/cc-orchestrator/external-agent-driver.d.ts +0 -19
  535. package/dist/cc-orchestrator/external-agent-driver.js +0 -284
  536. package/dist/cc-orchestrator/external-agent-session-store.d.ts +0 -23
  537. package/dist/cc-orchestrator/external-agent-session-store.js +0 -146
  538. package/dist/cc-orchestrator/index.d.ts +0 -8
  539. package/dist/cc-orchestrator/index.js +0 -8
  540. package/dist/cc-orchestrator/relevance-judge.d.ts +0 -15
  541. package/dist/cc-orchestrator/relevance-judge.js +0 -29
  542. package/dist/cc-orchestrator/session-discovery.d.ts +0 -46
  543. package/dist/cc-orchestrator/session-discovery.js +0 -125
  544. package/dist/cc-orchestrator/session-history.d.ts +0 -54
  545. package/dist/cc-orchestrator/session-history.js +0 -150
  546. package/dist/cron/cron-runtime.d.ts +0 -2
  547. package/dist/cron/cron-runtime.js +0 -2
  548. package/dist/cron/cron-store.d.ts +0 -2
  549. package/dist/cron/cron-store.js +0 -2
  550. package/dist/cron/scheduler.d.ts +0 -7
  551. package/dist/cron/scheduler.js +0 -7
  552. package/dist/engine/goal.js +0 -206
  553. package/dist/external-agents/config.d.ts +0 -2
  554. package/dist/external-agents/config.js +0 -15
  555. package/dist/external-agents/types.d.ts +0 -31
  556. package/dist/git/parse-log.d.ts +0 -13
  557. package/dist/git/parse-log.js +0 -21
  558. package/dist/git/utils.d.ts +0 -49
  559. package/dist/git/utils.js +0 -161
  560. package/dist/git/worktree/crud.d.ts +0 -69
  561. package/dist/git/worktree/crud.js +0 -206
  562. package/dist/git/worktree/diff.d.ts +0 -14
  563. package/dist/git/worktree/diff.js +0 -82
  564. package/dist/git/worktree/git-exec.d.ts +0 -7
  565. package/dist/git/worktree/git-exec.js +0 -51
  566. package/dist/git/worktree/index.d.ts +0 -5
  567. package/dist/git/worktree/index.js +0 -5
  568. package/dist/git/worktree/query.d.ts +0 -42
  569. package/dist/git/worktree/query.js +0 -121
  570. package/dist/git/worktree/slug.d.ts +0 -11
  571. package/dist/git/worktree/slug.js +0 -58
  572. package/dist/git/worktree.d.ts +0 -1
  573. package/dist/git/worktree.js +0 -5
  574. package/dist/lsp/client.d.ts +0 -41
  575. package/dist/lsp/client.js +0 -186
  576. package/dist/lsp/manager.d.ts +0 -40
  577. package/dist/lsp/manager.js +0 -155
  578. package/dist/lsp/root-path.d.ts +0 -9
  579. package/dist/lsp/root-path.js +0 -12
  580. package/dist/lsp/servers.d.ts +0 -16
  581. package/dist/lsp/servers.js +0 -60
  582. package/dist/prompt/sections/coding.md +0 -35
  583. package/dist/quota/credentials.d.ts +0 -3
  584. package/dist/quota/credentials.js +0 -80
  585. package/dist/quota/index.d.ts +0 -36
  586. package/dist/quota/index.js +0 -155
  587. package/dist/quota/types.d.ts +0 -48
  588. package/dist/quota/types.js +0 -13
  589. package/dist/review/review-prompt.d.ts +0 -28
  590. package/dist/review/review-prompt.js +0 -81
  591. package/dist/state.d.ts +0 -160
  592. package/dist/state.js +0 -267
  593. package/dist/tool-system/builtin/apply-patch/applier.d.ts +0 -26
  594. package/dist/tool-system/builtin/apply-patch/applier.js +0 -308
  595. package/dist/tool-system/builtin/apply-patch/backup-targets.d.ts +0 -10
  596. package/dist/tool-system/builtin/apply-patch/backup-targets.js +0 -30
  597. package/dist/tool-system/builtin/apply-patch/index.d.ts +0 -20
  598. package/dist/tool-system/builtin/apply-patch/index.js +0 -105
  599. package/dist/tool-system/builtin/apply-patch/parser.d.ts +0 -17
  600. package/dist/tool-system/builtin/apply-patch/parser.js +0 -212
  601. package/dist/tool-system/builtin/apply-patch/seek-sequence.d.ts +0 -18
  602. package/dist/tool-system/builtin/apply-patch/seek-sequence.js +0 -123
  603. package/dist/tool-system/builtin/apply-patch/types.d.ts +0 -49
  604. package/dist/tool-system/builtin/apply-patch/types.js +0 -13
  605. package/dist/tool-system/builtin/arena.d.ts +0 -31
  606. package/dist/tool-system/builtin/arena.js +0 -415
  607. package/dist/tool-system/builtin/brief.d.ts +0 -6
  608. package/dist/tool-system/builtin/brief.js +0 -41
  609. package/dist/tool-system/builtin/check-quota.d.ts +0 -15
  610. package/dist/tool-system/builtin/check-quota.js +0 -34
  611. package/dist/tool-system/builtin/drive-claude-code.d.ts +0 -51
  612. package/dist/tool-system/builtin/drive-claude-code.js +0 -698
  613. package/dist/tool-system/builtin/lsp.d.ts +0 -7
  614. package/dist/tool-system/builtin/lsp.js +0 -144
  615. package/dist/tool-system/builtin/notebook-edit.d.ts +0 -7
  616. package/dist/tool-system/builtin/notebook-edit.js +0 -127
  617. package/dist/tool-system/builtin/worktree.d.ts +0 -11
  618. package/dist/tool-system/builtin/worktree.js +0 -345
  619. /package/dist/{external-agents → links}/types.js +0 -0
  620. /package/dist/{engine/session-usage.d.ts → session/usage.d.ts} +0 -0
  621. /package/dist/{engine/session-usage.js → session/usage.js} +0 -0
package/dist/types.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Core type definitions for the code-shell orchestration framework.
3
3
  */
4
- import type { GoalConfig, GoalTerminal } from "./engine/goal.js";
4
+ import type { GoalConfig, GoalLifecycleV1, GoalTerminal } from "./goal/lifecycle.js";
5
5
  export interface ContentBlock {
6
6
  type: "text" | "tool_use" | "tool_result" | "image" | "reasoning";
7
7
  text?: string;
@@ -33,16 +33,22 @@ export interface ToolDefinition {
33
33
  name: string;
34
34
  description: string;
35
35
  inputSchema: Record<string, unknown>;
36
+ /** Omit this tool's result body from retained Goal-judge evidence. */
37
+ sensitiveResult?: boolean;
36
38
  }
37
39
  export interface ToolCall {
38
40
  id: string;
39
41
  toolName: string;
40
42
  serverName?: string;
41
43
  args: Record<string, unknown>;
44
+ /** Host-projected UI visibility. Does not affect execution or transcript retention. */
45
+ uiVisibility?: "hidden" | "milestones" | "full";
42
46
  }
43
47
  export interface ToolResult {
44
48
  id: string;
45
49
  toolName: string;
50
+ /** Host-projected UI visibility. Does not affect the model-facing result. */
51
+ uiVisibility?: "hidden" | "milestones" | "full";
46
52
  /**
47
53
  * Sensitive tool results keep `result` as the model-facing value for the
48
54
  * current model round only. Persisted/displayed/streamed observers must use
@@ -86,25 +92,27 @@ export type ToolPathPolicyOperation = "read" | "write" | {
86
92
  /** Fallback when the argument is absent or does not match either list. */
87
93
  default: "read" | "write";
88
94
  };
89
- export type ToolPathPolicy = {
95
+ export interface ToolPathPolicy {
90
96
  kind: "arg";
91
97
  /** Argument containing a file or directory path. */
92
98
  arg: string;
93
99
  operation: ToolPathPolicyOperation;
94
100
  /** Use ctx.cwd when the argument is omitted. Useful for Glob/Grep roots. */
95
101
  defaultToCwd?: boolean;
96
- } | {
97
- kind: "apply_patch";
98
- /** Argument containing the V4A patch text. */
99
- arg: string;
100
- operation: "write";
101
- };
102
+ }
103
+ /** Capability-owned resolver for compound inputs that reference multiple paths. */
104
+ export interface ToolPathResolver {
105
+ operation: "read" | "write";
106
+ resolve(args: Record<string, unknown>, cwd: string): readonly string[];
107
+ }
102
108
  export interface RegisteredTool {
103
109
  name: string;
104
110
  description: string;
105
111
  inputSchema: Record<string, unknown>;
106
112
  source: ToolSource;
107
113
  serverName?: string;
114
+ /** Original, unprefixed MCP tool name used by per-server allow/deny policy. */
115
+ mcpToolName?: string;
108
116
  /**
109
117
  * Declarative UI/metadata hint for hosts, docs, and capability listings.
110
118
  * It is not an execution-policy input: PermissionClassifier does not read
@@ -114,6 +122,10 @@ export interface RegisteredTool {
114
122
  permissionDefault: PermissionDecision;
115
123
  isConcurrencySafe?: boolean;
116
124
  isReadOnly?: boolean;
125
+ /** Used when file targets cannot be described as one direct schema argument. */
126
+ pathResolver?: ToolPathResolver;
127
+ /** Declaratively marks result bodies as sensitive for retained Goal evidence. */
128
+ sensitiveResult?: boolean;
117
129
  /**
118
130
  * Declarative file-path safety metadata. ToolExecutor enforces this before
119
131
  * dispatching the tool, so file access cannot depend on each tool handler
@@ -133,7 +145,7 @@ export interface RegisteredTool {
133
145
  */
134
146
  timeoutMs?: number;
135
147
  }
136
- export type TranscriptEventType = "message" | "tool_use" | "tool_result" | "summary" | "content_replace" | "file_history" | "plan_operation" | "session_meta" | "subagent" | "external_file_changes" | "turn_boundary" | "goal_progress" | "turn_stopped" | "error";
148
+ export type TranscriptEventType = "message" | "tool_use" | "tool_result" | "summary" | "context_transfer" | "content_replace" | "file_history" | "plan_operation" | "session_meta" | "subagent" | "external_file_changes" | "turn_boundary" | "run_result" | "goal_progress" | "turn_stopped" | "error";
137
149
  export interface TranscriptEvent {
138
150
  id: string;
139
151
  type: TranscriptEventType;
@@ -150,10 +162,23 @@ export interface TranscriptEvent {
150
162
  * error (`"model_error"`, `"prompt_too_long"`, ...).
151
163
  */
152
164
  export type SessionStatus = "active" | "paused" | TerminalReason;
153
- /** Which host/context created a session used by the desktop disk-rebuild to
154
- * filter the sidebar (only `desktop` + `automation` are shown). */
155
- export type SessionOrigin = "desktop" | "tui" | "automation" | "subagent";
165
+ /** Known first-party session origins. Hosts may contribute stable names of their own. */
166
+ export type BuiltinSessionOrigin = "desktop" | "tui" | "automation" | "subagent";
167
+ /**
168
+ * Which host/context created a session. This is intentionally open: core
169
+ * persists the provenance label but product hosts decide how to group/filter
170
+ * it, so extension packages never need to add a literal back into core.
171
+ */
172
+ export type SessionOrigin = BuiltinSessionOrigin | (string & {});
173
+ /**
174
+ * Persisted session kind. "work" is the core default; extensions may own
175
+ * additional kinds (e.g. the pet extension's "pet") — the open string form
176
+ * keeps literal inference/autocomplete for "work" while allowing extension
177
+ * kinds without a core enum change.
178
+ */
179
+ export type SessionKind = "work" | (string & {});
156
180
  export interface SessionWorkspace {
181
+ /** Current execution root used when this session resumes. */
157
182
  root: string;
158
183
  kind: "main" | "worktree";
159
184
  worktree?: {
@@ -171,10 +196,40 @@ export interface ContextUsageAnchor {
171
196
  provider?: string;
172
197
  model?: string;
173
198
  }
199
+ /** Provenance for a user-visible session fork. Optional on legacy sessions. */
200
+ export interface SessionForkLineage {
201
+ sessionId: string;
202
+ mode: "full" | "summary";
203
+ fromEventId?: string;
204
+ throughEventId?: string;
205
+ sourceEventCount: number;
206
+ createdAt: number;
207
+ }
174
208
  export interface SessionState {
175
209
  sessionId: string;
210
+ /** Durable local classification. Missing on legacy state and normalized to `work`. */
211
+ kind?: SessionKind;
212
+ /** Durable per-session digital-human binding. It overrides the Workspace default profile. */
213
+ workspaceProfile?: string;
214
+ /**
215
+ * Standing brief for this Session, injected as system context on every run.
216
+ *
217
+ * Set when a team is summoned: the member's role, its teammates' Session ids
218
+ * and the lead's playbook. It used to be pre-filled into the composer instead,
219
+ * which read as if the *user* had typed a specification — and one stray edit or
220
+ * Enter lost it. This is configuration for the agent, so it belongs in the
221
+ * prompt, not the input box.
222
+ */
223
+ sessionBrief?: string;
224
+ /**
225
+ * Monotonic whole-state revision used by SessionManager.saveState as a CAS
226
+ * token. Absent only on legacy state files; the first successful save
227
+ * upgrades them. Detached writers with an older revision are rejected.
228
+ */
229
+ stateRevision?: number;
230
+ /** Legacy persisted main-project root. Kept byte-compatible in state.json. */
176
231
  cwd: string;
177
- /** Current session workspace pointer. Absent only on legacy state.json files. */
232
+ /** Current main/worktree execution pointer. Absent only on legacy state.json files. */
178
233
  workspace?: SessionWorkspace;
179
234
  startedAt: number;
180
235
  model: string;
@@ -190,6 +245,11 @@ export interface SessionState {
190
245
  * before the next provider response.
191
246
  */
192
247
  contextUsageAnchor?: ContextUsageAnchor;
248
+ /**
249
+ * Exceptional boundary for the most recently persisted completed run.
250
+ * Absent means `status === "completed"` is an ordinary final answer.
251
+ */
252
+ lastCompletionKind?: TurnCompletionKind;
193
253
  /**
194
254
  * Monotonic prompt-cache counters for the whole session. These only increase
195
255
  * from session start and are separate from the resettable tokenUsage window.
@@ -207,6 +267,20 @@ export interface SessionState {
207
267
  * the last user message changed. Absent on legacy sessions → treated as 0.
208
268
  */
209
269
  turnSeq?: number;
270
+ /**
271
+ * Inclusive transcript cursor for the last naturally completed conversation
272
+ * turn. It advances only when Engine.run finishes with reason="completed",
273
+ * so a side fork can exclude a newer user message already persisted by an
274
+ * in-flight run. Absent on legacy sessions and before the first completion.
275
+ */
276
+ completedThroughEventId?: string;
277
+ /**
278
+ * Presence distinguishes sessions written by the completed-snapshot cursor
279
+ * implementation from legacy sessions. Version 1 with no cursor means the
280
+ * latest completion could not establish a durable snapshot (for example a
281
+ * transcript flush failure) and must fail closed instead of using the tail.
282
+ */
283
+ completedSnapshotVersion?: 1;
210
284
  invokedSkills: string[];
211
285
  /**
212
286
  * Owning parent session for a sub-agent run; `null` explicitly marks a
@@ -215,6 +289,20 @@ export interface SessionState {
215
289
  * "key present && null" to tell a new top-level session apart from legacy.
216
290
  */
217
291
  parentSessionId?: string | null;
292
+ /**
293
+ * Durable archival timestamp (ms). Absent = not archived. Generic session
294
+ * lifecycle marker: list surfaces filter it out by default. Set/cleared via
295
+ * SessionManager.setSessionArchived.
296
+ */
297
+ archivedAt?: number;
298
+ /** User-fork lineage; deliberately separate from sub-agent ownership. */
299
+ forkedFrom?: SessionForkLineage;
300
+ /**
301
+ * Temporary child sessions are persisted only while their owning surface is
302
+ * alive. Ordinary resume/session pickers must omit them. Absent on legacy
303
+ * sessions; desktop also recognizes its historical `qchat-*` namespace.
304
+ */
305
+ ephemeral?: boolean;
218
306
  /**
219
307
  * Which host/context created this session. Desktop disk-rebuild shows only
220
308
  * `desktop` + `automation`. Absent on legacy sessions.
@@ -232,7 +320,10 @@ export interface SessionState {
232
320
  title?: string;
233
321
  /** Persisted cost tracking state (survives process restart). */
234
322
  costState?: Record<string, unknown>;
323
+ /** Canonical persisted and runtime Goal state. */
324
+ goalLifecycle?: GoalLifecycleV1;
235
325
  /**
326
+ * Legacy persisted input only. Runtime hydration removes this field and new writers omit it.
236
327
  * Active persistent goal (CC `/goal` style). Set once, it survives across
237
328
  * messages AND manual interrupts until the judge says it's met or the user
238
329
  * clears it. Absent → no active goal. When a run supplies a new goal it
@@ -243,11 +334,14 @@ export interface SessionState {
243
334
  */
244
335
  activeGoal?: GoalConfig;
245
336
  /**
246
- * Last force-terminated goal instance. Kept separately from activeGoal so an
247
- * old whole-state writer cannot make that same exhausted goal armable again.
337
+ * Legacy persisted input only. Runtime hydration removes this field and new writers omit it.
338
+ * Latest terminal goal instance (legacy/single-marker view). Kept alongside
339
+ * the bounded goalTerminals identity set for backward-compatible readers.
248
340
  * Optional for backward compatibility with pre-tombstone state.json files.
249
341
  */
250
342
  goalTerminal?: GoalTerminal;
343
+ /** Legacy persisted terminal history input; runtime hydration removes it. */
344
+ goalTerminals?: GoalTerminal[];
251
345
  }
252
346
  export interface TokenUsage {
253
347
  promptTokens: number;
@@ -341,12 +435,23 @@ export interface TaskInfo {
341
435
  }
342
436
  export type PromptTokenSource = "provider_usage" | "anchor_delta" | "anchor_rescale" | "calibrated_estimate" | "heuristic_estimate" | "session_cumulative";
343
437
  export type PromptTokenConfidence = "high" | "medium" | "low";
438
+ /**
439
+ * Why a syntactically completed engine run did not finish its logical task.
440
+ * Absent means the model reached an ordinary final response. Consumers that
441
+ * manage durable work can use this to avoid treating an async handoff or a
442
+ * Goal-control boundary as objective completion.
443
+ */
444
+ export type TurnCompletionKind = "background_wait" | "goal_control_stop" | "limit_stop";
344
445
  export type StreamEvent = {
345
446
  type: "session_started";
346
447
  sessionId: string;
347
448
  promptTokens: number;
348
449
  promptTokensSource?: PromptTokenSource;
349
450
  promptTokensConfidence?: PromptTokenConfidence;
451
+ } | {
452
+ type: "session_user_message";
453
+ text: string;
454
+ clientMessageId?: string;
350
455
  } | {
351
456
  type: "session_title";
352
457
  sessionId: string;
@@ -386,9 +491,14 @@ export type StreamEvent = {
386
491
  } | {
387
492
  type: "turn_complete";
388
493
  reason: TerminalReason;
494
+ completionKind?: TurnCompletionKind;
389
495
  agentId?: string;
390
496
  } | {
391
497
  type: "goal_progress";
498
+ /** Concrete goal instance; absent only on legacy replayed events. */
499
+ goalId?: string;
500
+ /** Edit/pause/resume revision for stale-event fencing. */
501
+ revision?: number;
392
502
  status: "not_met" | "met" | "exhausted" | "approaching_limit";
393
503
  round: number;
394
504
  gaps?: string;
@@ -401,10 +511,21 @@ export type StreamEvent = {
401
511
  agentId?: string;
402
512
  } | {
403
513
  type: "goal_set";
514
+ goalId?: string;
515
+ revision?: number;
404
516
  objective: string;
405
517
  replaced: boolean;
518
+ paused?: boolean;
519
+ } | {
520
+ type: "goal_updated";
521
+ goalId?: string;
522
+ revision?: number;
523
+ objective: string;
524
+ paused: boolean;
406
525
  } | {
407
526
  type: "goal_cleared";
527
+ goalId?: string;
528
+ revision?: number;
408
529
  } | {
409
530
  type: "error";
410
531
  error: string;
@@ -421,7 +542,7 @@ export type StreamEvent = {
421
542
  type: "memory_recalled";
422
543
  name: string;
423
544
  scope: "user" | "dream";
424
- location: "global" | "project";
545
+ location: "global" | "project" | "profile";
425
546
  agentId?: string;
426
547
  } | {
427
548
  type: "thinking_delta";
@@ -458,10 +579,19 @@ export type StreamEvent = {
458
579
  agentId?: string;
459
580
  } | {
460
581
  type: "context_compact";
461
- strategy: "micro" | "summary" | "window" | "snip" | "emergency" | "compacted";
582
+ strategy: "micro" | "summary" | "window" | "snip" | "emergency" | "compacted" | "range";
462
583
  before: number;
463
584
  after: number;
464
585
  agentId?: string;
586
+ } | {
587
+ /** Persisted summary-only history transferred into a newly forked session. */
588
+ type: "context_transfer";
589
+ summary: string;
590
+ sourceSessionId: string;
591
+ fromEventId: string;
592
+ toEventId: string;
593
+ sourceEventCount: number;
594
+ estimatedTokens: number;
465
595
  } | {
466
596
  type: "usage_update";
467
597
  promptTokens: number;
@@ -680,16 +810,28 @@ export interface MCPServerConfig {
680
810
  * UI toggle can flip it back on. See connectAll().
681
811
  */
682
812
  enabled?: boolean;
813
+ /**
814
+ * Exact MCP tool-name allowlist. Undefined exposes every discovered tool;
815
+ * an empty list exposes none. `disabledTools` is applied afterwards.
816
+ */
817
+ allowedTools?: string[];
818
+ /** Exact MCP tool-name denylist, applied after `allowedTools`. */
819
+ disabledTools?: string[];
683
820
  }
684
821
  /**
685
822
  * User-supplied supplement for a PLUGIN-provided MCP server, keyed by the
686
823
  * server's `<plugin>:<server>` name. Stored globally under
687
824
  * `settings.mcpServerOverrides` and layered onto the plugin's config at merge
688
- * time (see mergePluginMcpServers). Only env/credential fields are allowed —
689
- * command/args/url/transport stay owned by the plugin manifest so a plugin
690
- * update is never shadowed by a stale user copy.
825
+ * time (see mergePluginMcpServers). Only user-controlled server/tool policy
826
+ * and env/credential fields are allowed — command/args/url/transport stay
827
+ * owned by the plugin manifest so an update is never shadowed by a stale copy.
691
828
  */
692
829
  export interface MCPServerOverride {
830
+ /** Per-server user policy. Allows one server to be disabled without disabling its owner plugin. */
831
+ enabled?: boolean;
832
+ /** User policy layered over the plugin server's reviewed connection identity. */
833
+ allowedTools?: string[];
834
+ disabledTools?: string[];
693
835
  env?: Record<string, string>;
694
836
  envVars?: string[];
695
837
  /** (HTTP) id of a stored token/link/oauth credential used as Bearer auth. */
@@ -761,3 +903,42 @@ export interface Settings {
761
903
  */
762
904
  hooks?: SettingsHookConfig[];
763
905
  }
906
+ export type InputAttachmentKind = "image" | "file" | "directory";
907
+ export type InputAttachmentOrigin = "paste" | "os-drop" | "file-panel" | "picker" | "mention" | "generated" | "mobile" | "im-gateway" | "tool";
908
+ export interface InputAttachmentMeta {
909
+ id: string;
910
+ sessionId: string;
911
+ kind: InputAttachmentKind;
912
+ origin: InputAttachmentOrigin;
913
+ path: string;
914
+ absPath: string;
915
+ relPath?: string;
916
+ mime?: string;
917
+ size: number;
918
+ sha256: string;
919
+ originalName?: string;
920
+ createdAt: number;
921
+ sourcePath?: string;
922
+ width?: number;
923
+ height?: number;
924
+ vision?: {
925
+ include: boolean;
926
+ mediaPath?: string;
927
+ detail?: "low" | "standard" | "high";
928
+ };
929
+ directory?: {
930
+ treePath?: string;
931
+ truncated?: boolean;
932
+ entryCount?: number;
933
+ };
934
+ }
935
+ export interface LegacyPetWorkspaceOption {
936
+ id: string;
937
+ name: string;
938
+ description?: string;
939
+ }
940
+ export interface LegacyPetWorkDelegation {
941
+ workspaceId: string;
942
+ objective: string;
943
+ reusableSessionId?: string;
944
+ }
@@ -1,2 +1,3 @@
1
+ /** Canonicalize a runtime cwd without assuming any product domain. */
1
2
  export declare function normalizeCwdPath(cwd: string): string;
2
3
  export declare function isExistingDirectory(cwd: string): boolean;
@@ -1,5 +1,6 @@
1
1
  import { realpathSync, statSync } from "node:fs";
2
2
  import { resolve } from "node:path";
3
+ /** Canonicalize a runtime cwd without assuming any product domain. */
3
4
  export function normalizeCwdPath(cwd) {
4
5
  const resolved = resolve(cwd);
5
6
  try {
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Cross-process read-modify-write for a single JSON file.
3
+ *
4
+ * WHY THIS EXISTS
5
+ * ---------------
6
+ * Several subsystems independently implemented "load → change → save" against a
7
+ * shared file with NO cross-process lock. Atomic tmp+rename protects against a
8
+ * torn file, but not against lost updates: two processes both read revision N,
9
+ * both write N+1, and one change vanishes. Measured on this repo: 48 concurrent
10
+ * writers each setting a distinct settings key left only 17 keys; 48 concurrent
11
+ * AutoDream increments recorded 1–2.
12
+ *
13
+ * CronStore already had the correct shape (directory lock + reload-inside-lock +
14
+ * unique tmp + rename). This module extracts exactly that so every writer shares
15
+ * one implementation instead of re-deriving it — and so the retry/stale tuning
16
+ * lives in one place.
17
+ *
18
+ * The lock is taken on the file's DIRECTORY (proper-lockfile creates
19
+ * `<dir>.lock`), matching CronStore. Locking the directory rather than the file
20
+ * means a writer that creates the file for the first time is still serialized.
21
+ */
22
+ /**
23
+ * Acquire the directory lock guarding `file`. Returns the release function.
24
+ *
25
+ * Retries for LOCK_WAIT_MS because contention here is normal (several hosts can
26
+ * write the same file), then throws — a caller must never silently proceed
27
+ * unlocked, since that is precisely the lost-update bug.
28
+ */
29
+ export declare function acquireFileLock(file: string): () => void;
30
+ /**
31
+ * Lock one specific path rather than its whole directory.
32
+ *
33
+ * Use when several independent resources live side by side and must NOT
34
+ * serialize against each other — e.g. per-repo clone dirs, where locking the
35
+ * shared parent would make unrelated installs queue behind one another (and
36
+ * would deadlock against any directory-scoped lock taken inside).
37
+ *
38
+ * `target` must already exist; proper-lockfile creates a sibling `<target>.lock`.
39
+ * `timeoutMs` can exceed the default when the critical section legitimately
40
+ * takes a while (network clone + directory swap).
41
+ */
42
+ export declare function acquireLockOnPath(target: string, timeoutMs?: number): () => void;
43
+ /** Stage to a unique temp file, then rename — never a partially written target. */
44
+ export declare function writeFileAtomic(file: string, contents: string, mode?: number): void;
45
+ /**
46
+ * Run `mutation` against the file's CURRENT on-disk content while holding the
47
+ * lock, then persist whatever it returns.
48
+ *
49
+ * The reload happens INSIDE the lock, which is the entire point: a caller that
50
+ * read the file earlier (before contending for the lock) would otherwise write
51
+ * back a stale snapshot and drop a concurrent writer's change.
52
+ *
53
+ * `parse` receives `undefined` when the file is missing or unreadable, so each
54
+ * caller decides what "empty" means. Returning `undefined` from `mutation`
55
+ * skips the write entirely (no-op mutations should not rewrite the file).
56
+ */
57
+ export declare function mutateJsonFile<T, R = void>(file: string, options: {
58
+ parse: (raw: string | undefined) => T;
59
+ serialize: (value: T) => string;
60
+ mutation: (current: T) => {
61
+ value?: T;
62
+ result?: R;
63
+ };
64
+ mode?: number;
65
+ }): R | undefined;
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Cross-process read-modify-write for a single JSON file.
3
+ *
4
+ * WHY THIS EXISTS
5
+ * ---------------
6
+ * Several subsystems independently implemented "load → change → save" against a
7
+ * shared file with NO cross-process lock. Atomic tmp+rename protects against a
8
+ * torn file, but not against lost updates: two processes both read revision N,
9
+ * both write N+1, and one change vanishes. Measured on this repo: 48 concurrent
10
+ * writers each setting a distinct settings key left only 17 keys; 48 concurrent
11
+ * AutoDream increments recorded 1–2.
12
+ *
13
+ * CronStore already had the correct shape (directory lock + reload-inside-lock +
14
+ * unique tmp + rename). This module extracts exactly that so every writer shares
15
+ * one implementation instead of re-deriving it — and so the retry/stale tuning
16
+ * lives in one place.
17
+ *
18
+ * The lock is taken on the file's DIRECTORY (proper-lockfile creates
19
+ * `<dir>.lock`), matching CronStore. Locking the directory rather than the file
20
+ * means a writer that creates the file for the first time is still serialized.
21
+ */
22
+ import { existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from "node:fs";
23
+ import { dirname } from "node:path";
24
+ import { randomUUID } from "node:crypto";
25
+ import { lockSync } from "./lockfile.js";
26
+ /**
27
+ * How long to keep retrying the lock before giving up.
28
+ *
29
+ * Sized for real contention, not the happy path. Every holder does a bounded
30
+ * amount of work (re-read, merge, atomic rename), but with N writers the last
31
+ * one in line waits for all N-1 ahead of it. Measured here: 48 concurrent
32
+ * processes saving memories against one index blew through a 2s budget and up to
33
+ * 46 of them died with ELOCKED. 30s leaves generous headroom while still
34
+ * failing loudly if a holder is genuinely wedged.
35
+ */
36
+ const LOCK_WAIT_MS = 30_000;
37
+ /** A lock older than this is treated as abandoned by a crashed holder. */
38
+ const LOCK_STALE_MS = 10_000;
39
+ /** Backoff bounds for the retry loop (see acquireLockOn). */
40
+ const LOCK_RETRY_MIN_MS = 5;
41
+ const LOCK_RETRY_MAX_MS = 50;
42
+ // Atomics.wait only ever reads slot 0, which stays 0, so one shared buffer is
43
+ // safe and avoids allocating per retry.
44
+ const SLEEP_SIGNAL = new Int32Array(new SharedArrayBuffer(4));
45
+ function sleepSync(ms) {
46
+ Atomics.wait(SLEEP_SIGNAL, 0, 0, ms);
47
+ }
48
+ /**
49
+ * Acquire the directory lock guarding `file`. Returns the release function.
50
+ *
51
+ * Retries for LOCK_WAIT_MS because contention here is normal (several hosts can
52
+ * write the same file), then throws — a caller must never silently proceed
53
+ * unlocked, since that is precisely the lost-update bug.
54
+ */
55
+ export function acquireFileLock(file) {
56
+ const dir = dirname(file);
57
+ if (!existsSync(dir))
58
+ mkdirSync(dir, { recursive: true });
59
+ return acquireLockOn(dir, LOCK_WAIT_MS);
60
+ }
61
+ /**
62
+ * Lock one specific path rather than its whole directory.
63
+ *
64
+ * Use when several independent resources live side by side and must NOT
65
+ * serialize against each other — e.g. per-repo clone dirs, where locking the
66
+ * shared parent would make unrelated installs queue behind one another (and
67
+ * would deadlock against any directory-scoped lock taken inside).
68
+ *
69
+ * `target` must already exist; proper-lockfile creates a sibling `<target>.lock`.
70
+ * `timeoutMs` can exceed the default when the critical section legitimately
71
+ * takes a while (network clone + directory swap).
72
+ */
73
+ export function acquireLockOnPath(target, timeoutMs = LOCK_WAIT_MS) {
74
+ return acquireLockOn(target, timeoutMs);
75
+ }
76
+ function acquireLockOn(target, timeoutMs) {
77
+ const deadline = Date.now() + timeoutMs;
78
+ let lastError;
79
+ let attempt = 0;
80
+ for (;;) {
81
+ try {
82
+ return lockSync(target, { stale: LOCK_STALE_MS, retries: 0 });
83
+ }
84
+ catch (err) {
85
+ lastError = err;
86
+ if (Date.now() > deadline)
87
+ throw lastError;
88
+ // Randomized backoff. A fixed delay makes every waiter wake at the same
89
+ // instant and collide again, so under real contention (dozens of writers)
90
+ // the same unlucky processes kept losing and eventually timed out.
91
+ // Jitter spreads the retries out; the cap keeps latency low when only a
92
+ // couple of writers are competing.
93
+ const ceiling = Math.min(LOCK_RETRY_MIN_MS * 2 ** attempt, LOCK_RETRY_MAX_MS);
94
+ attempt += 1;
95
+ sleepSync(LOCK_RETRY_MIN_MS + Math.floor(Math.random() * ceiling));
96
+ }
97
+ }
98
+ }
99
+ /** Stage to a unique temp file, then rename — never a partially written target. */
100
+ export function writeFileAtomic(file, contents, mode) {
101
+ mkdirSync(dirname(file), { recursive: true });
102
+ // Unique per writer: a shared `.tmp` name lets two writers clobber each
103
+ // other's staging file even while both hold different locks.
104
+ const tmp = `${file}.${process.pid}.${randomUUID()}.tmp`;
105
+ try {
106
+ writeFileSync(tmp, contents, mode === undefined ? "utf-8" : { encoding: "utf-8", mode });
107
+ renameSync(tmp, file);
108
+ }
109
+ finally {
110
+ rmSync(tmp, { force: true });
111
+ }
112
+ }
113
+ /**
114
+ * Run `mutation` against the file's CURRENT on-disk content while holding the
115
+ * lock, then persist whatever it returns.
116
+ *
117
+ * The reload happens INSIDE the lock, which is the entire point: a caller that
118
+ * read the file earlier (before contending for the lock) would otherwise write
119
+ * back a stale snapshot and drop a concurrent writer's change.
120
+ *
121
+ * `parse` receives `undefined` when the file is missing or unreadable, so each
122
+ * caller decides what "empty" means. Returning `undefined` from `mutation`
123
+ * skips the write entirely (no-op mutations should not rewrite the file).
124
+ */
125
+ export function mutateJsonFile(file, options) {
126
+ const release = acquireFileLock(file);
127
+ try {
128
+ let raw;
129
+ try {
130
+ raw = readFileSync(file, "utf-8");
131
+ }
132
+ catch {
133
+ raw = undefined;
134
+ }
135
+ const current = options.parse(raw);
136
+ const { value, result } = options.mutation(current);
137
+ if (value !== undefined) {
138
+ writeFileAtomic(file, options.serialize(value), options.mode);
139
+ }
140
+ return result;
141
+ }
142
+ finally {
143
+ release();
144
+ }
145
+ }
@@ -1,10 +1,8 @@
1
1
  /**
2
2
  * Generic JSON extraction from LLM text output — strip markdown fences and
3
3
  * pull out the first balanced object/array. These are provider-agnostic and
4
- * have no Arena dependency; they live here (not in arena/strategies/utils.ts)
5
- * so non-Arena consumers (e.g. services/memory-orchestrator) can use them
6
- * without dragging in the Arena subsystem. Arena re-exports them for
7
- * back-compat.
4
+ * live in core so any service or extension can consume them without importing
5
+ * a product capability package.
8
6
  */
9
7
  /** Extract JSON from text that might have markdown fences or surrounding text. */
10
8
  export declare function extractJSON(text: string): string;
@@ -1,10 +1,8 @@
1
1
  /**
2
2
  * Generic JSON extraction from LLM text output — strip markdown fences and
3
3
  * pull out the first balanced object/array. These are provider-agnostic and
4
- * have no Arena dependency; they live here (not in arena/strategies/utils.ts)
5
- * so non-Arena consumers (e.g. services/memory-orchestrator) can use them
6
- * without dragging in the Arena subsystem. Arena re-exports them for
7
- * back-compat.
4
+ * live in core so any service or extension can consume them without importing
5
+ * a product capability package.
8
6
  */
9
7
  /** Extract JSON from text that might have markdown fences or surrounding text. */
10
8
  export function extractJSON(text) {