@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
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;
@@ -41,10 +41,14 @@ export interface ToolCall {
41
41
  toolName: string;
42
42
  serverName?: string;
43
43
  args: Record<string, unknown>;
44
+ /** Host-projected UI visibility. Does not affect execution or transcript retention. */
45
+ uiVisibility?: "hidden" | "milestones" | "full";
44
46
  }
45
47
  export interface ToolResult {
46
48
  id: string;
47
49
  toolName: string;
50
+ /** Host-projected UI visibility. Does not affect the model-facing result. */
51
+ uiVisibility?: "hidden" | "milestones" | "full";
48
52
  /**
49
53
  * Sensitive tool results keep `result` as the model-facing value for the
50
54
  * current model round only. Persisted/displayed/streamed observers must use
@@ -88,25 +92,27 @@ export type ToolPathPolicyOperation = "read" | "write" | {
88
92
  /** Fallback when the argument is absent or does not match either list. */
89
93
  default: "read" | "write";
90
94
  };
91
- export type ToolPathPolicy = {
95
+ export interface ToolPathPolicy {
92
96
  kind: "arg";
93
97
  /** Argument containing a file or directory path. */
94
98
  arg: string;
95
99
  operation: ToolPathPolicyOperation;
96
100
  /** Use ctx.cwd when the argument is omitted. Useful for Glob/Grep roots. */
97
101
  defaultToCwd?: boolean;
98
- } | {
99
- kind: "apply_patch";
100
- /** Argument containing the V4A patch text. */
101
- arg: string;
102
- operation: "write";
103
- };
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
+ }
104
108
  export interface RegisteredTool {
105
109
  name: string;
106
110
  description: string;
107
111
  inputSchema: Record<string, unknown>;
108
112
  source: ToolSource;
109
113
  serverName?: string;
114
+ /** Original, unprefixed MCP tool name used by per-server allow/deny policy. */
115
+ mcpToolName?: string;
110
116
  /**
111
117
  * Declarative UI/metadata hint for hosts, docs, and capability listings.
112
118
  * It is not an execution-policy input: PermissionClassifier does not read
@@ -116,6 +122,8 @@ export interface RegisteredTool {
116
122
  permissionDefault: PermissionDecision;
117
123
  isConcurrencySafe?: boolean;
118
124
  isReadOnly?: boolean;
125
+ /** Used when file targets cannot be described as one direct schema argument. */
126
+ pathResolver?: ToolPathResolver;
119
127
  /** Declaratively marks result bodies as sensitive for retained Goal evidence. */
120
128
  sensitiveResult?: boolean;
121
129
  /**
@@ -137,7 +145,7 @@ export interface RegisteredTool {
137
145
  */
138
146
  timeoutMs?: number;
139
147
  }
140
- 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";
141
149
  export interface TranscriptEvent {
142
150
  id: string;
143
151
  type: TranscriptEventType;
@@ -154,10 +162,23 @@ export interface TranscriptEvent {
154
162
  * error (`"model_error"`, `"prompt_too_long"`, ...).
155
163
  */
156
164
  export type SessionStatus = "active" | "paused" | TerminalReason;
157
- /** Which host/context created a session used by the desktop disk-rebuild to
158
- * filter the sidebar (only `desktop` + `automation` are shown). */
159
- 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 & {});
160
180
  export interface SessionWorkspace {
181
+ /** Current execution root used when this session resumes. */
161
182
  root: string;
162
183
  kind: "main" | "worktree";
163
184
  worktree?: {
@@ -186,8 +207,29 @@ export interface SessionForkLineage {
186
207
  }
187
208
  export interface SessionState {
188
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. */
189
231
  cwd: string;
190
- /** Current session workspace pointer. Absent only on legacy state.json files. */
232
+ /** Current main/worktree execution pointer. Absent only on legacy state.json files. */
191
233
  workspace?: SessionWorkspace;
192
234
  startedAt: number;
193
235
  model: string;
@@ -203,6 +245,11 @@ export interface SessionState {
203
245
  * before the next provider response.
204
246
  */
205
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;
206
253
  /**
207
254
  * Monotonic prompt-cache counters for the whole session. These only increase
208
255
  * from session start and are separate from the resettable tokenUsage window.
@@ -220,6 +267,20 @@ export interface SessionState {
220
267
  * the last user message changed. Absent on legacy sessions → treated as 0.
221
268
  */
222
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;
223
284
  invokedSkills: string[];
224
285
  /**
225
286
  * Owning parent session for a sub-agent run; `null` explicitly marks a
@@ -228,8 +289,20 @@ export interface SessionState {
228
289
  * "key present && null" to tell a new top-level session apart from legacy.
229
290
  */
230
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;
231
298
  /** User-fork lineage; deliberately separate from sub-agent ownership. */
232
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;
233
306
  /**
234
307
  * Which host/context created this session. Desktop disk-rebuild shows only
235
308
  * `desktop` + `automation`. Absent on legacy sessions.
@@ -247,7 +320,10 @@ export interface SessionState {
247
320
  title?: string;
248
321
  /** Persisted cost tracking state (survives process restart). */
249
322
  costState?: Record<string, unknown>;
323
+ /** Canonical persisted and runtime Goal state. */
324
+ goalLifecycle?: GoalLifecycleV1;
250
325
  /**
326
+ * Legacy persisted input only. Runtime hydration removes this field and new writers omit it.
251
327
  * Active persistent goal (CC `/goal` style). Set once, it survives across
252
328
  * messages AND manual interrupts until the judge says it's met or the user
253
329
  * clears it. Absent → no active goal. When a run supplies a new goal it
@@ -258,11 +334,14 @@ export interface SessionState {
258
334
  */
259
335
  activeGoal?: GoalConfig;
260
336
  /**
261
- * Last force-terminated goal instance. Kept separately from activeGoal so an
262
- * 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.
263
340
  * Optional for backward compatibility with pre-tombstone state.json files.
264
341
  */
265
342
  goalTerminal?: GoalTerminal;
343
+ /** Legacy persisted terminal history input; runtime hydration removes it. */
344
+ goalTerminals?: GoalTerminal[];
266
345
  }
267
346
  export interface TokenUsage {
268
347
  promptTokens: number;
@@ -356,12 +435,23 @@ export interface TaskInfo {
356
435
  }
357
436
  export type PromptTokenSource = "provider_usage" | "anchor_delta" | "anchor_rescale" | "calibrated_estimate" | "heuristic_estimate" | "session_cumulative";
358
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";
359
445
  export type StreamEvent = {
360
446
  type: "session_started";
361
447
  sessionId: string;
362
448
  promptTokens: number;
363
449
  promptTokensSource?: PromptTokenSource;
364
450
  promptTokensConfidence?: PromptTokenConfidence;
451
+ } | {
452
+ type: "session_user_message";
453
+ text: string;
454
+ clientMessageId?: string;
365
455
  } | {
366
456
  type: "session_title";
367
457
  sessionId: string;
@@ -401,9 +491,14 @@ export type StreamEvent = {
401
491
  } | {
402
492
  type: "turn_complete";
403
493
  reason: TerminalReason;
494
+ completionKind?: TurnCompletionKind;
404
495
  agentId?: string;
405
496
  } | {
406
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;
407
502
  status: "not_met" | "met" | "exhausted" | "approaching_limit";
408
503
  round: number;
409
504
  gaps?: string;
@@ -416,10 +511,21 @@ export type StreamEvent = {
416
511
  agentId?: string;
417
512
  } | {
418
513
  type: "goal_set";
514
+ goalId?: string;
515
+ revision?: number;
419
516
  objective: string;
420
517
  replaced: boolean;
518
+ paused?: boolean;
519
+ } | {
520
+ type: "goal_updated";
521
+ goalId?: string;
522
+ revision?: number;
523
+ objective: string;
524
+ paused: boolean;
421
525
  } | {
422
526
  type: "goal_cleared";
527
+ goalId?: string;
528
+ revision?: number;
423
529
  } | {
424
530
  type: "error";
425
531
  error: string;
@@ -436,7 +542,7 @@ export type StreamEvent = {
436
542
  type: "memory_recalled";
437
543
  name: string;
438
544
  scope: "user" | "dream";
439
- location: "global" | "project";
545
+ location: "global" | "project" | "profile";
440
546
  agentId?: string;
441
547
  } | {
442
548
  type: "thinking_delta";
@@ -473,10 +579,19 @@ export type StreamEvent = {
473
579
  agentId?: string;
474
580
  } | {
475
581
  type: "context_compact";
476
- strategy: "micro" | "summary" | "window" | "snip" | "emergency" | "compacted";
582
+ strategy: "micro" | "summary" | "window" | "snip" | "emergency" | "compacted" | "range";
477
583
  before: number;
478
584
  after: number;
479
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;
480
595
  } | {
481
596
  type: "usage_update";
482
597
  promptTokens: number;
@@ -695,16 +810,28 @@ export interface MCPServerConfig {
695
810
  * UI toggle can flip it back on. See connectAll().
696
811
  */
697
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[];
698
820
  }
699
821
  /**
700
822
  * User-supplied supplement for a PLUGIN-provided MCP server, keyed by the
701
823
  * server's `<plugin>:<server>` name. Stored globally under
702
824
  * `settings.mcpServerOverrides` and layered onto the plugin's config at merge
703
- * time (see mergePluginMcpServers). Only env/credential fields are allowed —
704
- * command/args/url/transport stay owned by the plugin manifest so a plugin
705
- * 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.
706
828
  */
707
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[];
708
835
  env?: Record<string, string>;
709
836
  envVars?: string[];
710
837
  /** (HTTP) id of a stored token/link/oauth credential used as Bearer auth. */
@@ -776,3 +903,42 @@ export interface Settings {
776
903
  */
777
904
  hooks?: SettingsHookConfig[];
778
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) {
@@ -8,8 +8,37 @@
8
8
  * Import this module instead of `proper-lockfile` directly. The underlying
9
9
  * package is only loaded the first time a lock function is actually called.
10
10
  */
11
- import type { CheckOptions, LockOptions, UnlockOptions } from 'proper-lockfile';
11
+ interface LockRetryOptions {
12
+ retries?: number;
13
+ factor?: number;
14
+ minTimeout?: number;
15
+ maxTimeout?: number;
16
+ randomize?: boolean;
17
+ forever?: boolean;
18
+ unref?: boolean;
19
+ maxRetryTime?: number;
20
+ }
21
+ interface LockfilePathOptions {
22
+ realpath?: boolean;
23
+ /**
24
+ * proper-lockfile accepts a callback-style fs implementation. Keep this
25
+ * structural at the package boundary so Core's declarations do not leak the
26
+ * untyped CommonJS dependency to TypeScript consumers.
27
+ */
28
+ fs?: object;
29
+ lockfilePath?: string;
30
+ }
31
+ interface CheckOptions extends LockfilePathOptions {
32
+ stale?: number;
33
+ }
34
+ type UnlockOptions = LockfilePathOptions;
35
+ interface LockOptions extends CheckOptions {
36
+ update?: number;
37
+ retries?: number | LockRetryOptions;
38
+ onCompromised?: (error: Error) => void;
39
+ }
12
40
  export declare function lock(file: string, options?: LockOptions): Promise<() => Promise<void>>;
13
41
  export declare function lockSync(file: string, options?: LockOptions): () => void;
14
42
  export declare function unlock(file: string, options?: UnlockOptions): Promise<void>;
15
43
  export declare function check(file: string, options?: CheckOptions): Promise<boolean>;
44
+ export {};