@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
@@ -27,6 +27,7 @@ import { mkdirSync, existsSync, readFileSync, writeFileSync, readdirSync, rename
27
27
  import { join } from "node:path";
28
28
  import { homedir } from "node:os";
29
29
  import { createHash, randomUUID } from "node:crypto";
30
+ import { acquireFileLock, writeFileAtomic } from "../utils/file-mutex.js";
30
31
  function frontmatterLine(key, value) {
31
32
  return `${key}: ${JSON.stringify(value)}\n`;
32
33
  }
@@ -178,8 +179,9 @@ export class MemoryManager {
178
179
  // save by paying one loadAll() — every save after that just
179
180
  // mutates the cache and rewrites MEMORY.md.
180
181
  const cache = this.ensureIndexCache();
181
- cache.set(fileName, { name: entry.name, description: entry.description });
182
- this.writeIndex(cache);
182
+ const meta = { name: entry.name, description: entry.description };
183
+ cache.set(fileName, meta);
184
+ this.writeIndex(cache, { kind: "save", fileName, meta });
183
185
  return fileName;
184
186
  }
185
187
  /**
@@ -386,7 +388,7 @@ export class MemoryManager {
386
388
  renameSync(join(this.memoryDir, entry.fileName), join(trashDir, entry.fileName));
387
389
  const cache = this.ensureIndexCache();
388
390
  cache.delete(entry.fileName);
389
- this.writeIndex(cache);
391
+ this.writeIndex(cache, { kind: "delete", fileName: entry.fileName });
390
392
  return true;
391
393
  }
392
394
  catch {
@@ -627,47 +629,64 @@ export class MemoryManager {
627
629
  `\n\nTo read a specific memory, look under ${this.memoryRoot}/{user,dream}/`);
628
630
  }
629
631
  /**
630
- * Two-layer injection index (用户拍板). Merges GLOBAL (cross-project
631
- * experience) + PROJECT (this repo's facts) memories into a compact index —
632
- * one line per entry, name + description only, NO body. The model reads a
633
- * specific entry's full content on demand via MemoryRead (which records a
634
- * recall → drives TTL + UI visibility).
632
+ * Three-layer injection index (用户拍板). Merges GLOBAL (cross-project
633
+ * experience) + DIGITAL-HUMAN (portable profile experience) + PROJECT
634
+ * (this repo's facts) memories into a compact index one line per entry,
635
+ * name + description only, NO body.
635
636
  *
636
637
  * This is what fixes "global memory never shows up": global memories are now
637
638
  * injected alongside project ones, every session, regardless of cwd.
638
639
  *
639
- * Static because it must construct two managers (global = no projectDir,
640
- * project = with projectDir). `projectDir` undefined → only global is shown.
640
+ * Static because it must construct the managers for each configured layer.
641
+ * `projectDir` undefined no project layer; `profileDir` undefined → no
642
+ * digital-human layer.
641
643
  */
642
644
  static buildInjectionIndex(opts) {
643
645
  const global = new MemoryManager({ baseDir: opts.baseDir });
644
646
  const project = opts.projectDir
645
647
  ? new MemoryManager({ baseDir: opts.baseDir, projectDir: opts.projectDir })
646
648
  : null;
649
+ // 数字人层:baseDir 直接指向 profiles/<name>(其 memory/ 子目录随
650
+ // MemoryManager 的常规布局落盘)。跟着 Profile 走、跨 workspace 复用。
651
+ const profile = opts.profileDir ? new MemoryManager({ baseDir: opts.profileDir }) : null;
647
652
  const pinnedFirst = (a, b) => Number(b.pinned ?? false) - Number(a.pinned ?? false);
648
653
  const collect = (mm) => filterByAge([...mm.loadScope("user"), ...mm.loadScope("dream")], opts.maxAgeDays, opts.now).sort(pinnedFirst);
649
654
  const globalEntries = collect(global);
655
+ const profileEntries = profile ? collect(profile) : [];
650
656
  const projectEntries = project ? collect(project) : [];
651
- if (globalEntries.length === 0 && projectEntries.length === 0)
657
+ if (globalEntries.length === 0 && profileEntries.length === 0 && projectEntries.length === 0) {
652
658
  return "";
653
- const fmt = (e) => `- ${e.pinned ? "[pinned] " : ""}[${e.type}] ${e.name}: ${e.description}`;
659
+ }
660
+ const fmt = (e, location) => `- ${e.pinned ? "[pinned] " : ""}[scope="${e.scope}" location="${location}" type="${e.type}"] ${e.name}: ${e.description}`;
661
+ const readableLocations = profile ? "global, profile, or project" : "global or project";
654
662
  const lines = [];
655
663
  if (globalEntries.length > 0) {
656
664
  lines.push("## Global memories (apply across all projects)");
657
665
  for (const e of globalEntries)
658
- lines.push(fmt(e));
666
+ lines.push(fmt(e, "global"));
667
+ }
668
+ if (profileEntries.length > 0) {
669
+ if (lines.length > 0)
670
+ lines.push("");
671
+ lines.push("## Digital-human memories (travel with the active profile)");
672
+ for (const e of profileEntries)
673
+ lines.push(fmt(e, "profile"));
659
674
  }
660
675
  if (projectEntries.length > 0) {
661
676
  if (lines.length > 0)
662
677
  lines.push("");
663
678
  lines.push("## Project memories (this repo)");
664
679
  for (const e of projectEntries)
665
- lines.push(fmt(e));
680
+ lines.push(fmt(e, "project"));
666
681
  }
667
682
  return (`# Persistent Memory (index)\n\n` +
668
683
  `These are summaries of memories from previous sessions. Only the summary is shown here.\n` +
669
684
  `When a memory looks relevant to the current task, read its full content with the ` +
670
- `MemoryRead tool (scope = user or dream; location = global or project) before relying on it.\n\n` +
685
+ `MemoryRead tool before relying on it. Every entry includes its exact scope and location; ` +
686
+ `copy both values exactly and never infer them from the memory name or type. ` +
687
+ `Readable locations for this run: ${readableLocations}.\n` +
688
+ `If MemoryRead reports that an entry is missing, do not repeat the same call. ` +
689
+ `Use MemoryList once to refresh that exact store, or continue without the memory.\n\n` +
671
690
  lines.join("\n"));
672
691
  }
673
692
  /**
@@ -750,13 +769,52 @@ export class MemoryManager {
750
769
  this.indexCache = cache;
751
770
  return cache;
752
771
  }
753
- writeIndex(cache) {
754
- const lines = [];
755
- for (const [fileName, meta] of cache) {
756
- lines.push(`- [${meta.name}](${fileName}) — ${meta.description}`);
772
+ /**
773
+ * Rewrite MEMORY.md from the CURRENT set of memory files on disk, under a
774
+ * cross-process lock.
775
+ *
776
+ * The in-memory `indexCache` is a per-instance optimisation, and several
777
+ * managers exist for the same directory (desktop main, agent worker, TUI, a
778
+ * second desktop instance). Writing the cache out verbatim meant a stale
779
+ * snapshot clobbered whatever another writer had added:
780
+ *
781
+ * A saves a → B loads {a}, saves b → A still holds {a}, saves c
782
+ * → files a, b, c all exist, but MEMORY.md lists only a and c.
783
+ *
784
+ * The individual `<name>.md` files are the source of truth; MEMORY.md is a
785
+ * derived index. So rather than trusting any cache, re-derive it from disk
786
+ * inside the lock. `pending` carries this writer's own change, which may not
787
+ * be visible on disk yet (a delete moves the file to trash first, a save
788
+ * writes it first) — it is applied on top of the freshly scanned set.
789
+ */
790
+ writeIndex(cache, pending) {
791
+ const release = acquireFileLock(this.indexPath);
792
+ try {
793
+ // Re-scan under the lock: picks up entries written by other processes
794
+ // since this instance's cache was built.
795
+ const merged = new Map();
796
+ for (const entry of this.loadAll()) {
797
+ merged.set(entry.fileName, { name: entry.name, description: entry.description });
798
+ }
799
+ if (pending?.kind === "save")
800
+ merged.set(pending.fileName, pending.meta);
801
+ if (pending?.kind === "delete")
802
+ merged.delete(pending.fileName);
803
+ // Keep this instance's cache consistent with what we are about to write,
804
+ // so the next incremental update starts from the merged truth.
805
+ cache.clear();
806
+ for (const [fileName, meta] of merged)
807
+ cache.set(fileName, meta);
808
+ const lines = [];
809
+ for (const [fileName, meta] of merged) {
810
+ lines.push(`- [${meta.name}](${fileName}) — ${meta.description}`);
811
+ }
812
+ const content = lines.length > 0 ? lines.join("\n") + "\n" : "(no memories stored)\n";
813
+ writeFileAtomic(this.indexPath, content);
814
+ }
815
+ finally {
816
+ release();
757
817
  }
758
- const content = lines.length > 0 ? lines.join("\n") + "\n" : "(no memories stored)\n";
759
- writeFileSync(this.indexPath, content, "utf-8");
760
818
  }
761
819
  generateId() {
762
820
  return `mem_${randomUUID().replace(/-/g, "")}`;
@@ -1,12 +1,39 @@
1
1
  /**
2
2
  * Session lifecycle manager.
3
3
  */
4
- import type { SessionState, SessionWorkspace } from "../types.js";
4
+ import type { SessionForkLineage, SessionState, SessionKind, SessionWorkspace, TokenUsage, TranscriptEvent } from "../types.js";
5
5
  import { Transcript } from "./transcript.js";
6
+ import { type GoalConfig, type PersistedGoalTerminationReason } from "../goal/lifecycle.js";
7
+ import { type SessionWorkspaceCapability } from "../capabilities/index.js";
8
+ /** Non-Goal fields accepted by the generic latest-state merge path. */
9
+ export type SessionStateFieldPatch = Readonly<Partial<Omit<SessionState, "sessionId" | "goalLifecycle" | "activeGoal" | "goalTerminal" | "goalTerminals">>>;
10
+ export type GoalTerminalSaveOutcome = "persisted" | "obsolete" | "failed";
6
11
  export interface SessionBundle {
7
12
  state: SessionState;
8
13
  transcript: Transcript;
9
14
  }
15
+ export interface ForkSessionOptions {
16
+ targetSessionId?: string;
17
+ /** Inclusive source event cursor; omitted means the frozen transcript tail. */
18
+ throughEventId?: string;
19
+ /** `completed` is the interrupted snapshot used by ephemeral side chats. */
20
+ snapshotMode?: "tail" | "completed";
21
+ /** Hide this temporary fork from ordinary session lists and resume pickers. */
22
+ ephemeral?: boolean;
23
+ }
24
+ export interface ForkSessionResult {
25
+ bundle: SessionBundle;
26
+ lineage: SessionForkLineage;
27
+ copiedEventCount: number;
28
+ }
29
+ export interface SummaryForkOptions {
30
+ targetSessionId?: string;
31
+ fromEventId: string;
32
+ toEventId: string;
33
+ summary: string;
34
+ sourceEventCount: number;
35
+ estimatedTokens: number;
36
+ }
10
37
  export type SessionWorkspaceResumeResolution = {
11
38
  ok: true;
12
39
  cwd: string;
@@ -18,7 +45,7 @@ export type SessionWorkspaceResumeResolution = {
18
45
  cwd: string;
19
46
  workspace: SessionWorkspace;
20
47
  message: string;
21
- reason: "worktree_missing_branch_exists";
48
+ reason: "worktree_missing_branch_exists" | "workspace_capability_unavailable";
22
49
  };
23
50
  /**
24
51
  * Validate a session ID before it is joined into a filesystem path.
@@ -34,6 +61,13 @@ export type SessionWorkspaceResumeResolution = {
34
61
  * Exported for direct unit testing.
35
62
  */
36
63
  export declare function assertSafeSessionId(sessionId: unknown): asserts sessionId is string;
64
+ /**
65
+ * Runtime source of truth for sessions whose state must not outlive their UI
66
+ * lifecycle. The explicit marker covers modern side forks; the qchat namespace
67
+ * keeps historical/blank quick chats fail-closed if their older state file did
68
+ * not contain the marker yet.
69
+ */
70
+ export declare function isEphemeralSessionState(state: Pick<SessionState, "sessionId" | "ephemeral">): boolean;
37
71
  /**
38
72
  * Resolve the `.code-shell` home dir. `CODE_SHELL_HOME` overrides the default
39
73
  * `~/.code-shell` — mirrors Codex's `CODEX_HOME`. Tests set it to a temp dir
@@ -42,9 +76,29 @@ export declare function assertSafeSessionId(sessionId: unknown): asserts session
42
76
  * with throwaway test sessions (the rm-usage/test-model sidebar junk).
43
77
  */
44
78
  export declare function codeShellHome(): string;
79
+ /**
80
+ * Canonical root for every persisted CodeShell session. An explicit `home`
81
+ * (a `~/.code-shell`-equivalent data root) overrides the default resolution;
82
+ * absent → `codeShellHome()` exactly as before.
83
+ */
84
+ export declare function sessionsRoot(home?: string): string;
85
+ /**
86
+ * Read the session's persisted main-project root from the legacy `state.cwd`
87
+ * field. The field name is part of the state.json compatibility contract and
88
+ * must not be rewritten to `projectRoot`; `state.workspace.root` separately
89
+ * identifies the current main/worktree execution root used on resume.
90
+ */
91
+ export declare function sessionMainRoot(state: Pick<SessionState, "cwd">): string | undefined;
45
92
  export declare class SessionManager {
46
93
  private readonly sessionsDir;
47
- constructor(storageDir?: string);
94
+ private readonly registeredCloseEpochs;
95
+ private readonly workspaceCapability?;
96
+ constructor(storageDir?: string, workspaceCapability?: SessionWorkspaceCapability);
97
+ private cleanupStaleForkStaging;
98
+ /** Bind one Engine/session pair to the current close epoch without advancing it. */
99
+ registerSessionGeneration(sessionId: string): number;
100
+ /** Advance the close epoch once before close waits for the old run to settle. */
101
+ incrementSessionGeneration(sessionId: string): number;
48
102
  /**
49
103
  * Create a new on-disk session. If `explicitSessionId` is passed, use
50
104
  * it verbatim (ChatSessionManager-driven hosts choose a logical sid like
@@ -52,7 +106,7 @@ export declare class SessionManager {
52
106
  * nanoid. Either way the on-disk directory is materialized and the
53
107
  * state.json + transcript.jsonl files are written before return.
54
108
  */
55
- create(cwd: string, model: string, provider: string, explicitSessionId?: string, parentSessionId?: string | null, origin?: import("../types.js").SessionOrigin): SessionBundle;
109
+ create(cwd: string, model: string, provider: string, explicitSessionId?: string, parentSessionId?: string | null, origin?: import("../types.js").SessionOrigin, kind?: SessionKind): SessionBundle;
56
110
  /**
57
111
  * Whether a session directory exists on disk. Used by ChatSession-driven
58
112
  * cold starts to decide between resume vs create-with-explicit-sid
@@ -60,16 +114,36 @@ export declare class SessionManager {
60
114
  */
61
115
  exists(sessionId: string): boolean;
62
116
  /**
63
- * Cheap "what cwd is this session bound to?" probe — reads only state.json,
64
- * NOT the transcript (unlike resume()). engine.run uses this to recover a
65
- * resumed session's project directory when the caller omits options.cwd
66
- * (e.g. a desktop host whose sidebar repo selection has drifted to null),
67
- * so a project-bound session keeps loading its own agents/settings/memory
68
- * instead of falling back to process.cwd(). Returns undefined for an
69
- * unknown, malformed, or traversal-shaped id rather than throwing — the
70
- * caller treats "no recoverable cwd" the same as "not given".
117
+ * Cheap persisted-main-root probe — reads only state.json, NOT the transcript
118
+ * (unlike resume()). This deliberately reads legacy `state.cwd`, not the
119
+ * current `state.workspace.root`; callers use it as the stable main-project
120
+ * fallback when a worktree is unavailable or is being released.
71
121
  */
122
+ readSessionMainRoot(sessionId: string): string | undefined;
123
+ /** Cheap durable classification read. Legacy sessions are ordinary work sessions. */
124
+ readSessionKind(sessionId: string): SessionKind | undefined;
125
+ /** Cheap durable digital-human binding read. */
126
+ readSessionWorkspaceProfile(sessionId: string): string | undefined;
127
+ /**
128
+ * Find durable Sessions currently bound to one digital-human profile without loading
129
+ * transcripts. Used by profile deletion guards so a reusable/historical
130
+ * Session cannot be left permanently unresumable.
131
+ */
132
+ /**
133
+ * Sessions whose state pins this digital human.
134
+ *
135
+ * `includeArchived: false` drops archived Sessions: they are closed history,
136
+ * not a live binding, so they should not block deleting the profile. A
137
+ * dangling name is already handled downstream — resolveActiveWorkspaceProfile
138
+ * logs `profile.active_missing_from_library` and returns undefined.
139
+ */
140
+ findSessionIdsByWorkspaceProfile(profileName: string, limit?: number, options?: {
141
+ includeArchived?: boolean;
142
+ }): string[];
143
+ /** @deprecated Use readSessionMainRoot; retained for public API compatibility. */
72
144
  readCwd(sessionId: string): string | undefined;
145
+ /** Disk-only direct-parent ACL metadata. Undefined means unprovable/corrupt. */
146
+ readParentSessionId(sessionId: string): string | null | undefined;
73
147
  /**
74
148
  * Disk-only workspace pointer reader. Legacy sessions written before
75
149
  * `workspace` existed are treated as main-workspace sessions rooted at
@@ -81,7 +155,11 @@ export declare class SessionManager {
81
155
  * `cwd`. P1 will teach ToolContext to resolve cwd from this field; for P0 it
82
156
  * is a safety pointer and resume breadcrumb.
83
157
  */
84
- setSessionWorkspace(sessionId: string, workspace: SessionWorkspace): void;
158
+ setSessionWorkspace(sessionId: string, workspace: SessionWorkspace): number;
159
+ /** Read the durable archival timestamp; undefined = not archived / unprovable. */
160
+ readSessionArchivedAt(sessionId: string): number | undefined;
161
+ /** Set (number) or clear (undefined) the durable archival marker. */
162
+ setSessionArchived(sessionId: string, archivedAt: number | undefined): number;
85
163
  recordWorkspaceHandoff(sessionId: string, from: SessionWorkspace | undefined, to: SessionWorkspace): void;
86
164
  /**
87
165
  * Resolve the cwd a resumed session must run in from its persisted workspace
@@ -93,8 +171,8 @@ export declare class SessionManager {
93
171
  resolveSessionWorkspaceForResume(sessionId: string): Promise<SessionWorkspaceResumeResolution>;
94
172
  /**
95
173
  * Cheap "does this session have a persisted goal?" probe — reads only
96
- * state.json, NOT the transcript (like readCwd). A persistent goal lives ONLY
97
- * in state.activeGoal; it is never appended to the transcript as an event, so
174
+ * state.json, NOT the transcript (like readSessionMainRoot). A persistent goal lives in
175
+ * the canonical goalLifecycle union; it is never appended to the transcript as an event, so
98
176
  * a session rebuilt from disk (e.g. localStorage wiped) can't recover the
99
177
  * goal from its messages. The desktop host calls this on session load to
100
178
  * re-surface the active-goal block + its Cancel button, which would otherwise
@@ -102,11 +180,12 @@ export declare class SessionManager {
102
180
  * run. Returns undefined for an unknown / malformed / traversal-shaped id, or
103
181
  * a session with no active goal — never throws.
104
182
  */
105
- readActiveGoal(sessionId: string): import("../engine/goal.js").GoalConfig | undefined;
183
+ readActiveGoal(sessionId: string): import("../goal/lifecycle.js").GoalConfig | undefined;
106
184
  /**
107
185
  * Disk-only "wipe this session's persistent goal" — the counterpart to
108
- * readActiveGoal. Reads state.json, removes state.activeGoal, and rewrites it
109
- * atomically (via saveState). Returns true only if a goal was actually
186
+ * readActiveGoal. Reads state.json, transitions the matching goalLifecycle
187
+ * to terminal(user_cleared), and rewrites it through the field-level CAS.
188
+ * Returns true only if a goal was actually
110
189
  * present (idempotent — clearing a session with no goal is a no-op returning
111
190
  * false). Never throws on an unknown / malformed / traversal-shaped id
112
191
  * (returns false), matching readActiveGoal's tolerance.
@@ -119,17 +198,121 @@ export declare class SessionManager {
119
198
  * Engine.clearGoal also delegates its disk write here so the wipe logic lives
120
199
  * in exactly one place.
121
200
  */
122
- clearActiveGoal(sessionId: string): boolean;
201
+ clearActiveGoal(sessionId: string, expected?: {
202
+ goalId?: string;
203
+ revision?: number;
204
+ }): boolean;
205
+ /**
206
+ * Edit or pause/resume the currently active goal with an identity-checked,
207
+ * field-level CAS. The goalId is preserved: editing the objective changes
208
+ * the same user-owned goal rather than terminally cancelling it and arming a
209
+ * replacement. A changed objective receives a fresh deadline anchor.
210
+ *
211
+ * Returns undefined when the session/goal is absent or the patch is invalid.
212
+ * The returned state lets a live Engine rebase its in-memory bundle after
213
+ * this control operation.
214
+ */
215
+ updateActiveGoal(sessionId: string, patch: {
216
+ objective?: string;
217
+ paused?: boolean;
218
+ expectedGoalId?: string;
219
+ expectedRevision?: number;
220
+ }): {
221
+ goal: GoalConfig;
222
+ stateRevision: number;
223
+ state: SessionState;
224
+ } | undefined;
123
225
  resume(sessionId: string): SessionBundle;
124
- saveState(state: SessionState): void;
125
226
  /**
126
- * Fork a session from a specific point.
127
- * Creates a new session that shares events up to the given turn,
128
- * then diverges independently.
227
+ * Return the exact persistence directory owned by this manager.
228
+ *
229
+ * Cross-session sidecars (for example versioned handoffs) use this to stay
230
+ * inside an identity/custom-data-root boundary instead of falling back to
231
+ * the process-global default sessions directory.
232
+ */
233
+ getStorageDir(): string;
234
+ /**
235
+ * Read one durable session state without changing its lifecycle status.
236
+ * `resume()` intentionally marks the returned in-memory state active; host
237
+ * coordination code needs a read-only snapshot for completed cursors and
238
+ * workspace/profile metadata.
239
+ */
240
+ readSessionState(sessionId: string): SessionState | undefined;
241
+ /**
242
+ * Merge a field-level state update into the latest persisted snapshot.
243
+ *
244
+ * Unlike saveState(), callers do not supply a potentially stale whole-state
245
+ * object. saveState serializes the read/revision-check/write section with the
246
+ * per-session lock and returns the new persisted revision to the caller.
247
+ */
248
+ updateSessionState(sessionId: string, partial: SessionStateFieldPatch): number;
249
+ /**
250
+ * Atomically add one billed auxiliary request to the latest source state.
251
+ * This field-level read/add/write avoids publishing a detached stale state
252
+ * snapshot and accounts prompt, completion, total, cache, and cost together.
253
+ */
254
+ recordAuxiliaryUsage(sessionId: string, usage: TokenUsage, costState?: Record<string, unknown>): void;
255
+ /** @deprecated Compatibility fixture writer; runtime code must use domain updates. */
256
+ saveState(state: SessionState, generation?: number): boolean;
257
+ /**
258
+ * Persist one goal terminal transition without allowing a revision race to
259
+ * resurrect that goal. This is always a Goal-domain update: read the newest
260
+ * snapshot, transition only the matching lifecycle identity, then commit. A detached run
261
+ * snapshot is never used as the write candidate,
262
+ * so a successful terminal transition cannot publish stale summary/workspace
263
+ * or accounting fields. Lock/generation conflicts remain distinct failures.
264
+ */
265
+ saveGoalTerminal(state: SessionState, goal: GoalConfig | undefined, reason: PersistedGoalTerminationReason): boolean;
266
+ /**
267
+ * Persist a terminal transition and distinguish a durable commit from a stale
268
+ * run whose Goal identity has already been replaced. Callers may publish a
269
+ * terminal event only for `persisted`.
270
+ */
271
+ saveGoalTerminalOutcome(state: SessionState, goal: GoalConfig | undefined, reason: PersistedGoalTerminationReason): GoalTerminalSaveOutcome;
272
+ /**
273
+ * Arm or migrate one active goal as a Goal-domain update. The newest state is
274
+ * always the write base, so unrelated fields written by another host survive.
275
+ * Replacement is explicit and terminally closes the latest active identity;
276
+ * a non-replacement write may only normalize the same legacy/current goal.
277
+ */
278
+ saveActiveGoal(state: SessionState, goal: GoalConfig, options?: {
279
+ replaceCurrent?: boolean;
280
+ }): boolean;
281
+ /** Persist active → waiting only for the expected concrete Goal version. */
282
+ markGoalWaiting(state: SessionState, goal: GoalConfig): boolean;
283
+ /** Drop a matching active goal only when its terminal identity is durable. */
284
+ clearTerminatedActiveGoal(state: SessionState, goal: GoalConfig): boolean;
285
+ /**
286
+ * Commit only the fields owned by a live run. The detached `state` object is
287
+ * used solely as a live-view target for the returned revision; it is never
288
+ * serialized wholesale. This prevents a Goal/workspace/title domain write
289
+ * from authorizing a later stale metadata overwrite.
129
290
  */
130
- fork(sourceSessionId: string, forkAtTurn?: number): SessionBundle;
131
- list(limit?: number): SessionListEntry[];
291
+ saveStateOrUpdateFields(state: SessionState, partial: SessionStateFieldPatch): boolean;
292
+ private saveStateAttempt;
293
+ private acquireStateLock;
294
+ /** Recover only the old implementation's regular-file orphan lock. */
295
+ private prepareLegacyStateLock;
296
+ private readPersistedState;
297
+ private rebaseLiveState;
298
+ private generationKey;
299
+ /** Create an independent, top-level session from a frozen event cursor. */
300
+ fork(sourceSessionId: string, options?: ForkSessionOptions): ForkSessionResult;
301
+ /** Freeze and validate an inclusive source range before any model call. */
302
+ selectContextPackage(sourceSessionId: string, range: {
303
+ fromEventId: string;
304
+ toEventId: string;
305
+ }): ReturnType<typeof Transcript.selectContextRange>;
306
+ /** Publish a summary-only top-level fork after summarization has succeeded. */
307
+ createSummaryFork(sourceSessionId: string, options: SummaryForkOptions): ForkSessionResult;
308
+ private readForkSnapshot;
309
+ private publishSessionAtomically;
310
+ list(limit?: number, opts?: {
311
+ excludeKinds?: readonly string[];
312
+ }): SessionListEntry[];
132
313
  }
314
+ export declare function buildForkState(source: SessionState, targetSessionId: string, lineage: SessionForkLineage, startedAt?: number): SessionState;
315
+ export declare function buildForkTranscript(sourceEvents: readonly TranscriptEvent[], state: SessionState): TranscriptEvent[];
133
316
  export type SessionListEntry = SessionState & {
134
317
  preview?: string;
135
318
  /** Last activity time — transcript mtime, falling back to startedAt. */