@cjhyy/code-shell-core 0.7.1 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (595) 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/path-policy.js +99 -2
  374. package/dist/tool-system/permission.d.ts +26 -0
  375. package/dist/tool-system/permission.js +46 -0
  376. package/dist/tool-system/registry.d.ts +12 -1
  377. package/dist/tool-system/registry.js +31 -7
  378. package/dist/tool-system/sandbox/index.js +3 -8
  379. package/dist/tool-system/sandbox/seatbelt.js +2 -6
  380. package/dist/tool-system/session-tool-host.d.ts +139 -0
  381. package/dist/tool-system/session-tool-host.js +167 -0
  382. package/dist/tool-system/testing/tool-registry-harness.d.ts +31 -0
  383. package/dist/tool-system/testing/tool-registry-harness.js +51 -0
  384. package/dist/tool-system/validation.d.ts +14 -7
  385. package/dist/tool-system/validation.js +701 -7
  386. package/dist/types.d.ts +186 -20
  387. package/dist/{cc-orchestrator → utils}/cwd-normalize.d.ts +1 -0
  388. package/dist/{cc-orchestrator → utils}/cwd-normalize.js +1 -0
  389. package/dist/utils/file-mutex.d.ts +65 -0
  390. package/dist/utils/file-mutex.js +145 -0
  391. package/dist/utils/json.d.ts +2 -4
  392. package/dist/utils/json.js +2 -4
  393. package/dist/utils/lockfile.d.ts +30 -1
  394. package/dist/utils/lockfile.js +2 -2
  395. package/dist/utils/secret-scrubber.d.ts +8 -0
  396. package/dist/utils/secret-scrubber.js +227 -0
  397. package/dist/utils/toolDisplay.js +1 -1
  398. package/package.json +20 -5
  399. package/THIRD_PARTY_NOTICES.md +0 -206
  400. package/dist/arena/arena.d.ts +0 -45
  401. package/dist/arena/arena.js +0 -362
  402. package/dist/arena/context/context-tools.d.ts +0 -16
  403. package/dist/arena/context/context-tools.js +0 -272
  404. package/dist/arena/context/within-root.d.ts +0 -7
  405. package/dist/arena/context/within-root.js +0 -15
  406. package/dist/arena/detect-mode.d.ts +0 -20
  407. package/dist/arena/detect-mode.js +0 -78
  408. package/dist/arena/digest-builder.d.ts +0 -25
  409. package/dist/arena/digest-builder.js +0 -120
  410. package/dist/arena/index.d.ts +0 -29
  411. package/dist/arena/index.js +0 -29
  412. package/dist/arena/iterate/convergence.d.ts +0 -25
  413. package/dist/arena/iterate/convergence.js +0 -103
  414. package/dist/arena/iterate/formats/index.d.ts +0 -22
  415. package/dist/arena/iterate/formats/index.js +0 -283
  416. package/dist/arena/iterate/index.d.ts +0 -11
  417. package/dist/arena/iterate/index.js +0 -9
  418. package/dist/arena/iterate/iterative-arena.d.ts +0 -23
  419. package/dist/arena/iterate/iterative-arena.js +0 -237
  420. package/dist/arena/iterate/parse.d.ts +0 -42
  421. package/dist/arena/iterate/parse.js +0 -123
  422. package/dist/arena/iterate/phases/argue.d.ts +0 -22
  423. package/dist/arena/iterate/phases/argue.js +0 -165
  424. package/dist/arena/iterate/phases/revise.d.ts +0 -16
  425. package/dist/arena/iterate/phases/revise.js +0 -62
  426. package/dist/arena/iterate/phases/tournament.d.ts +0 -34
  427. package/dist/arena/iterate/phases/tournament.js +0 -113
  428. package/dist/arena/iterate/tools/web-tools.d.ts +0 -13
  429. package/dist/arena/iterate/tools/web-tools.js +0 -54
  430. package/dist/arena/iterate/types.d.ts +0 -152
  431. package/dist/arena/iterate/types.js +0 -8
  432. package/dist/arena/ledger.d.ts +0 -47
  433. package/dist/arena/ledger.js +0 -159
  434. package/dist/arena/lenses/architecture.d.ts +0 -5
  435. package/dist/arena/lenses/architecture.js +0 -22
  436. package/dist/arena/lenses/engineering.d.ts +0 -5
  437. package/dist/arena/lenses/engineering.js +0 -22
  438. package/dist/arena/lenses/general.d.ts +0 -5
  439. package/dist/arena/lenses/general.js +0 -20
  440. package/dist/arena/lenses/index.d.ts +0 -16
  441. package/dist/arena/lenses/index.js +0 -47
  442. package/dist/arena/lenses/product.d.ts +0 -5
  443. package/dist/arena/lenses/product.js +0 -22
  444. package/dist/arena/model-presets.d.ts +0 -23
  445. package/dist/arena/model-presets.js +0 -44
  446. package/dist/arena/phases/adjudication.d.ts +0 -25
  447. package/dist/arena/phases/adjudication.js +0 -142
  448. package/dist/arena/phases/build-consensus.d.ts +0 -30
  449. package/dist/arena/phases/build-consensus.js +0 -85
  450. package/dist/arena/phases/claim-registry.d.ts +0 -26
  451. package/dist/arena/phases/claim-registry.js +0 -60
  452. package/dist/arena/phases/cross-review.d.ts +0 -47
  453. package/dist/arena/phases/cross-review.js +0 -224
  454. package/dist/arena/phases/debate-rounds.d.ts +0 -28
  455. package/dist/arena/phases/debate-rounds.js +0 -161
  456. package/dist/arena/phases/participant-research.d.ts +0 -39
  457. package/dist/arena/phases/participant-research.js +0 -316
  458. package/dist/arena/phases/planning-detail-expansion.d.ts +0 -39
  459. package/dist/arena/phases/planning-detail-expansion.js +0 -120
  460. package/dist/arena/planner.d.ts +0 -28
  461. package/dist/arena/planner.js +0 -312
  462. package/dist/arena/providers/docs.d.ts +0 -7
  463. package/dist/arena/providers/docs.js +0 -111
  464. package/dist/arena/providers/git.d.ts +0 -8
  465. package/dist/arena/providers/git.js +0 -174
  466. package/dist/arena/providers/index.d.ts +0 -32
  467. package/dist/arena/providers/index.js +0 -132
  468. package/dist/arena/providers/none.d.ts +0 -7
  469. package/dist/arena/providers/none.js +0 -11
  470. package/dist/arena/providers/repo.d.ts +0 -7
  471. package/dist/arena/providers/repo.js +0 -258
  472. package/dist/arena/render/session.d.ts +0 -17
  473. package/dist/arena/render/session.js +0 -190
  474. package/dist/arena/render/terminal.d.ts +0 -34
  475. package/dist/arena/render/terminal.js +0 -286
  476. package/dist/arena/strategies/discussion.d.ts +0 -25
  477. package/dist/arena/strategies/discussion.js +0 -143
  478. package/dist/arena/strategies/index.d.ts +0 -15
  479. package/dist/arena/strategies/index.js +0 -28
  480. package/dist/arena/strategies/language-wrapper.d.ts +0 -17
  481. package/dist/arena/strategies/language-wrapper.js +0 -102
  482. package/dist/arena/strategies/lens-wrapper.d.ts +0 -16
  483. package/dist/arena/strategies/lens-wrapper.js +0 -236
  484. package/dist/arena/strategies/planning.d.ts +0 -30
  485. package/dist/arena/strategies/planning.js +0 -225
  486. package/dist/arena/strategies/review.d.ts +0 -26
  487. package/dist/arena/strategies/review.js +0 -168
  488. package/dist/arena/strategies/utils.d.ts +0 -36
  489. package/dist/arena/strategies/utils.js +0 -603
  490. package/dist/arena/tools/selector.d.ts +0 -17
  491. package/dist/arena/tools/selector.js +0 -61
  492. package/dist/arena/transitions.d.ts +0 -53
  493. package/dist/arena/transitions.js +0 -97
  494. package/dist/arena/types.d.ts +0 -518
  495. package/dist/arena/types.js +0 -27
  496. package/dist/cc-orchestrator/agent-adapter.d.ts +0 -54
  497. package/dist/cc-orchestrator/agent-adapter.js +0 -143
  498. package/dist/cc-orchestrator/cc-capability.d.ts +0 -19
  499. package/dist/cc-orchestrator/cc-capability.js +0 -53
  500. package/dist/cc-orchestrator/codex-session-discovery.d.ts +0 -24
  501. package/dist/cc-orchestrator/codex-session-discovery.js +0 -191
  502. package/dist/cc-orchestrator/codex-session-history.d.ts +0 -38
  503. package/dist/cc-orchestrator/codex-session-history.js +0 -247
  504. package/dist/cc-orchestrator/external-agent-bindings.d.ts +0 -27
  505. package/dist/cc-orchestrator/external-agent-bindings.js +0 -150
  506. package/dist/cc-orchestrator/external-agent-changes.d.ts +0 -19
  507. package/dist/cc-orchestrator/external-agent-changes.js +0 -231
  508. package/dist/cc-orchestrator/external-agent-driver.d.ts +0 -19
  509. package/dist/cc-orchestrator/external-agent-driver.js +0 -284
  510. package/dist/cc-orchestrator/external-agent-session-store.d.ts +0 -23
  511. package/dist/cc-orchestrator/external-agent-session-store.js +0 -146
  512. package/dist/cc-orchestrator/index.d.ts +0 -8
  513. package/dist/cc-orchestrator/index.js +0 -8
  514. package/dist/cc-orchestrator/relevance-judge.d.ts +0 -15
  515. package/dist/cc-orchestrator/relevance-judge.js +0 -29
  516. package/dist/cc-orchestrator/session-discovery.d.ts +0 -46
  517. package/dist/cc-orchestrator/session-discovery.js +0 -125
  518. package/dist/cc-orchestrator/session-history.d.ts +0 -54
  519. package/dist/cc-orchestrator/session-history.js +0 -150
  520. package/dist/cron/cron-runtime.d.ts +0 -2
  521. package/dist/cron/cron-runtime.js +0 -2
  522. package/dist/cron/cron-store.d.ts +0 -2
  523. package/dist/cron/cron-store.js +0 -2
  524. package/dist/cron/scheduler.d.ts +0 -7
  525. package/dist/cron/scheduler.js +0 -7
  526. package/dist/engine/goal.js +0 -206
  527. package/dist/external-agents/config.d.ts +0 -2
  528. package/dist/external-agents/config.js +0 -15
  529. package/dist/external-agents/types.d.ts +0 -31
  530. package/dist/git/parse-log.d.ts +0 -13
  531. package/dist/git/parse-log.js +0 -21
  532. package/dist/git/utils.d.ts +0 -49
  533. package/dist/git/utils.js +0 -161
  534. package/dist/git/worktree/crud.d.ts +0 -72
  535. package/dist/git/worktree/crud.js +0 -235
  536. package/dist/git/worktree/diff.d.ts +0 -14
  537. package/dist/git/worktree/diff.js +0 -82
  538. package/dist/git/worktree/git-exec.d.ts +0 -7
  539. package/dist/git/worktree/git-exec.js +0 -87
  540. package/dist/git/worktree/index.d.ts +0 -5
  541. package/dist/git/worktree/index.js +0 -5
  542. package/dist/git/worktree/query.d.ts +0 -43
  543. package/dist/git/worktree/query.js +0 -128
  544. package/dist/git/worktree/slug.d.ts +0 -11
  545. package/dist/git/worktree/slug.js +0 -58
  546. package/dist/git/worktree.d.ts +0 -1
  547. package/dist/git/worktree.js +0 -5
  548. package/dist/lsp/client.d.ts +0 -41
  549. package/dist/lsp/client.js +0 -186
  550. package/dist/lsp/manager.d.ts +0 -40
  551. package/dist/lsp/manager.js +0 -155
  552. package/dist/lsp/root-path.d.ts +0 -9
  553. package/dist/lsp/root-path.js +0 -12
  554. package/dist/lsp/servers.d.ts +0 -16
  555. package/dist/lsp/servers.js +0 -60
  556. package/dist/prompt/sections/coding.md +0 -35
  557. package/dist/quota/credentials.d.ts +0 -3
  558. package/dist/quota/credentials.js +0 -80
  559. package/dist/quota/index.d.ts +0 -36
  560. package/dist/quota/index.js +0 -155
  561. package/dist/quota/types.d.ts +0 -48
  562. package/dist/quota/types.js +0 -13
  563. package/dist/review/review-prompt.d.ts +0 -28
  564. package/dist/review/review-prompt.js +0 -81
  565. package/dist/state.d.ts +0 -160
  566. package/dist/state.js +0 -267
  567. package/dist/tool-system/builtin/apply-patch/applier.d.ts +0 -26
  568. package/dist/tool-system/builtin/apply-patch/applier.js +0 -308
  569. package/dist/tool-system/builtin/apply-patch/backup-targets.d.ts +0 -10
  570. package/dist/tool-system/builtin/apply-patch/backup-targets.js +0 -30
  571. package/dist/tool-system/builtin/apply-patch/index.d.ts +0 -20
  572. package/dist/tool-system/builtin/apply-patch/index.js +0 -105
  573. package/dist/tool-system/builtin/apply-patch/parser.d.ts +0 -17
  574. package/dist/tool-system/builtin/apply-patch/parser.js +0 -212
  575. package/dist/tool-system/builtin/apply-patch/seek-sequence.d.ts +0 -18
  576. package/dist/tool-system/builtin/apply-patch/seek-sequence.js +0 -123
  577. package/dist/tool-system/builtin/apply-patch/types.d.ts +0 -49
  578. package/dist/tool-system/builtin/apply-patch/types.js +0 -13
  579. package/dist/tool-system/builtin/arena.d.ts +0 -31
  580. package/dist/tool-system/builtin/arena.js +0 -416
  581. package/dist/tool-system/builtin/brief.d.ts +0 -6
  582. package/dist/tool-system/builtin/brief.js +0 -41
  583. package/dist/tool-system/builtin/check-quota.d.ts +0 -15
  584. package/dist/tool-system/builtin/check-quota.js +0 -34
  585. package/dist/tool-system/builtin/drive-claude-code.d.ts +0 -51
  586. package/dist/tool-system/builtin/drive-claude-code.js +0 -698
  587. package/dist/tool-system/builtin/lsp.d.ts +0 -7
  588. package/dist/tool-system/builtin/lsp.js +0 -144
  589. package/dist/tool-system/builtin/notebook-edit.d.ts +0 -7
  590. package/dist/tool-system/builtin/notebook-edit.js +0 -127
  591. package/dist/tool-system/builtin/worktree.d.ts +0 -11
  592. package/dist/tool-system/builtin/worktree.js +0 -363
  593. /package/dist/{external-agents → links}/types.js +0 -0
  594. /package/dist/{engine/session-usage.d.ts → session/usage.d.ts} +0 -0
  595. /package/dist/{engine/session-usage.js → session/usage.js} +0 -0
@@ -1,247 +0,0 @@
1
- import { readdirSync, readFileSync, statSync, existsSync, openSync, readSync, closeSync, } from "node:fs";
2
- import { join } from "node:path";
3
- import { homedir } from "node:os";
4
- /**
5
- * Read the last `limit` user/assistant messages from a codex CLI session,
6
- * returning the SAME shape as the claude-side `readRecentHistory` so the room
7
- * UI stays CLI-blind.
8
- *
9
- * Codex storage differs from claude fundamentally (see `codex-session-discovery`):
10
- * rollouts live under `~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl`, keyed by
11
- * DATE not cwd, with the thread id inside the file's `session_meta` first line.
12
- * So we first locate the rollout file whose `session_meta` matches both
13
- * `threadId` and `cwd`, then parse its event stream:
14
- *
15
- * - {type:"response_item", payload:{type:"message", role:"user"|"assistant",
16
- * content:[{type:"input_text"|"output_text", text}]}} → message text
17
- * - {type:"response_item", payload:{type:"function_call", name, arguments}} → tool
18
- * - {type:"response_item", payload:{type:"custom_tool_call", name, input}} → tool
19
- *
20
- * `developer`-role messages (environment/system injections) and the leading
21
- * `<environment_context>` user wrapper are skipped, mirroring discovery.
22
- */
23
- export function readCodexRecentHistory(cwd, threadId, limit, codexHome = join(homedir(), ".codex")) {
24
- const empty = { messages: [], hasMore: false, totalCount: 0 };
25
- const file = findCodexRolloutFile(codexHome, cwd, threadId);
26
- if (!file)
27
- return empty;
28
- let raw;
29
- try {
30
- raw = readFileSync(file, "utf-8");
31
- }
32
- catch {
33
- return empty;
34
- }
35
- return parseCodexRecentHistory(raw, limit);
36
- }
37
- /** Parse a bounded/raw Codex rollout snapshot. Shared with the desktop tail
38
- * follower so its initial history and EOF cursor are atomic. */
39
- export function parseCodexRecentHistory(raw, limit) {
40
- const all = [];
41
- for (const line of raw.split("\n")) {
42
- if (!line.trim())
43
- continue;
44
- let d;
45
- try {
46
- d = JSON.parse(line);
47
- }
48
- catch {
49
- continue;
50
- }
51
- if (d?.type !== "response_item")
52
- continue;
53
- const p = d.payload;
54
- if (!p)
55
- continue;
56
- if (p.type === "message" && (p.role === "user" || p.role === "assistant")) {
57
- const t = textOf(p.content).trim();
58
- if (!t || t.startsWith("<environment_context>"))
59
- continue;
60
- all.push({ role: p.role, text: t });
61
- }
62
- else if (p.type === "function_call" || p.type === "custom_tool_call") {
63
- const tool = {
64
- name: typeof p.name === "string" ? p.name : "tool",
65
- summary: summaryOf(p),
66
- args: argsOf(p),
67
- };
68
- const last = all[all.length - 1];
69
- // Attach the tool to the preceding assistant turn; otherwise start one.
70
- if (last && last.role === "assistant") {
71
- (last.tools ??= []).push(tool);
72
- }
73
- else {
74
- all.push({ role: "assistant", text: "", tools: [tool] });
75
- }
76
- }
77
- }
78
- const lim = limit > 0 ? limit : 20;
79
- const start = Math.max(0, all.length - lim);
80
- return { messages: all.slice(start), hasMore: start > 0, totalCount: all.length };
81
- }
82
- /** Parse one newly-appended Codex rollout JSONL line. `response_item` is the
83
- * authoritative rendered stream; parallel `event_msg.agent_message` records
84
- * are deliberately ignored to avoid duplicate assistant bubbles. */
85
- export function parseCodexTranscriptLine(line) {
86
- let d;
87
- try {
88
- d = JSON.parse(line);
89
- }
90
- catch {
91
- return [];
92
- }
93
- if (d?.type === "event_msg" && d.payload?.type === "task_complete") {
94
- return [{ type: "turn_end", reason: "completed" }];
95
- }
96
- if (d?.type !== "response_item" || !d.payload)
97
- return [];
98
- const p = d.payload;
99
- if (p.type === "message" && (p.role === "user" || p.role === "assistant")) {
100
- const text = textOf(p.content).trim();
101
- if (!text || text.startsWith("<environment_context>"))
102
- return [];
103
- return [{ type: p.role === "user" ? "user" : "assistant", text }];
104
- }
105
- if (p.type === "function_call" || p.type === "custom_tool_call") {
106
- return [
107
- {
108
- type: "tool",
109
- id: typeof p.call_id === "string" ? p.call_id : undefined,
110
- name: typeof p.name === "string" ? p.name : "tool",
111
- summary: summaryOf(p),
112
- args: argsOf(p),
113
- },
114
- ];
115
- }
116
- if (p.type === "function_call_output" || p.type === "custom_tool_call_output") {
117
- const result = typeof p.output === "string"
118
- ? p.output
119
- : typeof p.content === "string"
120
- ? p.content
121
- : JSON.stringify(p.output ?? p.content ?? "");
122
- return [
123
- {
124
- type: "tool_result",
125
- id: typeof p.call_id === "string" ? p.call_id : undefined,
126
- result: result.slice(0, 4000),
127
- isError: Boolean(p.is_error),
128
- },
129
- ];
130
- }
131
- return [];
132
- }
133
- /** Join the text of codex content parts (`input_text`/`output_text`). */
134
- function textOf(content) {
135
- if (typeof content === "string")
136
- return content;
137
- if (Array.isArray(content))
138
- return content.map((c) => (typeof c?.text === "string" ? c.text : "")).join("");
139
- return "";
140
- }
141
- /** Build a short summary for a codex tool event from its arguments/input. */
142
- function summaryOf(payload) {
143
- // function_call carries `arguments` as a JSON string; custom_tool_call carries `input` as a string.
144
- if (typeof payload.arguments === "string") {
145
- try {
146
- const a = JSON.parse(payload.arguments);
147
- const s = a?.cmd ?? a?.command ?? a?.file_path ?? a?.path ?? a?.workdir ?? "";
148
- if (s)
149
- return String(s).slice(0, 120);
150
- }
151
- catch {
152
- /* fall through to raw */
153
- }
154
- return payload.arguments.slice(0, 120);
155
- }
156
- if (typeof payload.input === "string")
157
- return payload.input.slice(0, 120);
158
- return "";
159
- }
160
- /**
161
- * Build the FULL structured tool args for a codex tool event so a replayed tool
162
- * card can show the real parameters (not just the lossy one-field summary).
163
- * `function_call.arguments` is a JSON string → parse it; `custom_tool_call.input`
164
- * is a raw string → keep it under `{input}`. Returns undefined when neither is
165
- * present or the JSON is malformed.
166
- */
167
- function argsOf(payload) {
168
- if (typeof payload.arguments === "string") {
169
- try {
170
- const a = JSON.parse(payload.arguments);
171
- if (a && typeof a === "object")
172
- return a;
173
- }
174
- catch {
175
- /* malformed JSON → fall through */
176
- }
177
- return { arguments: payload.arguments };
178
- }
179
- if (typeof payload.input === "string")
180
- return { input: payload.input };
181
- return undefined;
182
- }
183
- /** Find the rollout file whose `session_meta` matches both `threadId` and `cwd`. */
184
- export function findCodexRolloutFile(codexHome, cwd, threadId) {
185
- const root = join(codexHome, "sessions");
186
- if (!existsSync(root))
187
- return undefined;
188
- for (const file of walkRollouts(root)) {
189
- let meta;
190
- try {
191
- meta = readSessionMeta(file);
192
- }
193
- catch {
194
- continue;
195
- }
196
- if (meta && meta.id === threadId && meta.cwd === cwd)
197
- return file;
198
- }
199
- return undefined;
200
- }
201
- /** Recursively yield every `rollout-*.jsonl` file under `root`. */
202
- function* walkRollouts(root) {
203
- let entries;
204
- try {
205
- entries = readdirSync(root);
206
- }
207
- catch {
208
- return;
209
- }
210
- for (const name of entries) {
211
- const full = join(root, name);
212
- let st;
213
- try {
214
- st = statSync(full);
215
- }
216
- catch {
217
- continue;
218
- }
219
- if (st.isDirectory()) {
220
- yield* walkRollouts(full);
221
- }
222
- else if (name.startsWith("rollout-") && name.endsWith(".jsonl")) {
223
- yield full;
224
- }
225
- }
226
- }
227
- /** Parse the first-line `session_meta` event → `{ id, cwd }`, reading a bounded prefix. */
228
- function readSessionMeta(file, maxBytes = 1 << 16) {
229
- const fd = openSync(file, "r");
230
- let text;
231
- try {
232
- const buf = Buffer.alloc(maxBytes);
233
- const n = readSync(fd, buf, 0, maxBytes, 0);
234
- text = buf.toString("utf-8", 0, n);
235
- }
236
- finally {
237
- closeSync(fd);
238
- }
239
- const nl = text.indexOf("\n");
240
- const first = (nl === -1 ? text : text.slice(0, nl)).trim();
241
- if (!first)
242
- return undefined;
243
- const d = JSON.parse(first);
244
- if (d.type !== "session_meta" || !d.payload)
245
- return undefined;
246
- return { id: d.payload.id, cwd: d.payload.cwd };
247
- }
@@ -1,27 +0,0 @@
1
- export type ExternalAgentCli = "claude" | "codex";
2
- export interface ExternalAgentRunBinding {
3
- cli: ExternalAgentCli;
4
- externalSessionId: string;
5
- codeShellSessionId: string;
6
- cwd: string;
7
- worktreePath?: string;
8
- worktreeBranch?: string;
9
- createdAt: number;
10
- lastUsedAt: number;
11
- }
12
- export declare function externalAgentBindingsPath(home?: string): string;
13
- export declare class ExternalAgentBindingStore {
14
- private readonly filePath?;
15
- constructor(filePath?: string | undefined);
16
- get(externalSessionId: string): ExternalAgentRunBinding | undefined;
17
- upsert(next: Omit<ExternalAgentRunBinding, "createdAt" | "lastUsedAt">): ExternalAgentRunBinding;
18
- private read;
19
- private write;
20
- private file;
21
- }
22
- export declare function detectExternalAgentWorktree(cwd: string): {
23
- worktreePath?: string;
24
- worktreeBranch?: string;
25
- };
26
- export declare function externalAgentResumeCwdError(binding: ExternalAgentRunBinding): string | undefined;
27
- export declare const externalAgentBindingStore: ExternalAgentBindingStore;
@@ -1,150 +0,0 @@
1
- import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
2
- import { dirname, join, resolve } from "node:path";
3
- import { execFileSync } from "node:child_process";
4
- import { codeShellHome, SessionManager } from "../session/session-manager.js";
5
- export function externalAgentBindingsPath(home = codeShellHome()) {
6
- return join(home, "external-agents", "bindings.json");
7
- }
8
- export class ExternalAgentBindingStore {
9
- filePath;
10
- constructor(filePath) {
11
- this.filePath = filePath;
12
- }
13
- get(externalSessionId) {
14
- return this.read({ failOnCorrupt: true }).bindings[externalSessionId];
15
- }
16
- upsert(next) {
17
- const data = this.read({ failOnCorrupt: false });
18
- const existing = data.bindings[next.externalSessionId];
19
- const now = Date.now();
20
- const binding = {
21
- ...next,
22
- codeShellSessionId: next.codeShellSessionId || existing?.codeShellSessionId || "",
23
- createdAt: existing?.createdAt ?? now,
24
- lastUsedAt: now,
25
- };
26
- data.bindings[next.externalSessionId] = binding;
27
- this.write(data);
28
- return binding;
29
- }
30
- read(opts) {
31
- const file = this.file();
32
- if (!existsSync(file))
33
- return { bindings: {} };
34
- try {
35
- const parsed = JSON.parse(readFileSync(file, "utf-8"));
36
- if (parsed && typeof parsed.bindings === "object" && parsed.bindings) {
37
- return { bindings: parsed.bindings };
38
- }
39
- if (opts.failOnCorrupt) {
40
- throw new Error(`external agent bindings file is corrupt: expected object with bindings`);
41
- }
42
- return { bindings: {} };
43
- }
44
- catch (err) {
45
- if (opts.failOnCorrupt) {
46
- throw new Error(`external agent bindings file is corrupt or unreadable: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
47
- }
48
- return { bindings: {} };
49
- }
50
- }
51
- write(data) {
52
- const file = this.file();
53
- mkdirSync(dirname(file), { recursive: true });
54
- const tmp = `${file}.${process.pid}.${Date.now()}.tmp`;
55
- writeFileSync(tmp, JSON.stringify(data, null, 2), "utf-8");
56
- renameSync(tmp, file);
57
- }
58
- file() {
59
- return this.filePath ?? externalAgentBindingsPath();
60
- }
61
- }
62
- export function detectExternalAgentWorktree(cwd) {
63
- if (!existsSync(cwd))
64
- return {};
65
- try {
66
- const root = git(cwd, ["rev-parse", "--show-toplevel"]);
67
- const branch = git(root, ["branch", "--show-current"]);
68
- const entries = parseWorktreeList(git(root, ["worktree", "list", "--porcelain"]));
69
- const current = entries.find((entry) => resolve(entry.path) === resolve(root));
70
- const main = entries[0];
71
- if (!current || !branch || !main || resolve(current.path) === resolve(main.path))
72
- return {};
73
- return { worktreePath: root, worktreeBranch: branch };
74
- }
75
- catch {
76
- return {};
77
- }
78
- }
79
- export function externalAgentResumeCwdError(binding) {
80
- if (existsSync(binding.cwd))
81
- return undefined;
82
- const branch = binding.worktreeBranch;
83
- if (branch && branchExistsForBinding(binding)) {
84
- return (`Error: external ${binding.cli} session ${binding.externalSessionId} is bound to cwd ` +
85
- `${binding.cwd}, but that directory no longer exists. Worktree branch ${branch} still ` +
86
- `exists; recreate the worktree at ${binding.worktreePath ?? binding.cwd} before resuming.`);
87
- }
88
- return (`Error: external ${binding.cli} session ${binding.externalSessionId} is bound to cwd ` +
89
- `${binding.cwd}, but the workspace deleted${branch ? ` and branch ${branch} is gone` : ""}. ` +
90
- `Start a new external session.`);
91
- }
92
- function branchExistsForBinding(binding) {
93
- if (!binding.worktreeBranch)
94
- return false;
95
- for (const cwd of candidateGitCwds(binding)) {
96
- if (!cwd || !existsSync(cwd))
97
- continue;
98
- try {
99
- const out = git(cwd, ["branch", "--list", binding.worktreeBranch]);
100
- if (out.length > 0)
101
- return true;
102
- }
103
- catch {
104
- // Try the next candidate.
105
- }
106
- }
107
- return false;
108
- }
109
- function candidateGitCwds(binding) {
110
- const candidates = new Set();
111
- if (existsSync(binding.cwd))
112
- candidates.add(binding.cwd);
113
- if (binding.codeShellSessionId) {
114
- const sessionCwd = new SessionManager().readCwd(binding.codeShellSessionId);
115
- if (sessionCwd)
116
- candidates.add(sessionCwd);
117
- }
118
- candidates.add(process.cwd());
119
- candidates.add(dirname(binding.cwd));
120
- candidates.add(dirname(dirname(binding.cwd)));
121
- return [...candidates];
122
- }
123
- function parseWorktreeList(raw) {
124
- if (!raw.trim())
125
- return [];
126
- const entries = [];
127
- let current = { path: "", branch: "" };
128
- for (const line of raw.split("\n")) {
129
- if (line.startsWith("worktree ")) {
130
- if (current.path)
131
- entries.push(current);
132
- current = { path: line.slice(9), branch: "" };
133
- }
134
- else if (line.startsWith("branch ")) {
135
- current.branch = line.slice(7).replace("refs/heads/", "");
136
- }
137
- }
138
- if (current.path)
139
- entries.push(current);
140
- return entries;
141
- }
142
- function git(cwd, args) {
143
- return execFileSync("git", args, {
144
- cwd,
145
- encoding: "utf-8",
146
- timeout: 10000,
147
- stdio: ["ignore", "pipe", "ignore"],
148
- }).trim();
149
- }
150
- export const externalAgentBindingStore = new ExternalAgentBindingStore();
@@ -1,19 +0,0 @@
1
- /**
2
- * Parse claude transcript JSONL text → deduped list of changed file paths.
3
- * Each line is `{ message: { content: [{ type:"tool_use", name, input }] } }`.
4
- * Exported for direct unit testing without a transcript file on disk.
5
- */
6
- export declare function extractChangedFilesFromClaudeLines(text: string): string[];
7
- /** Locate `<claudeHome>/projects/<encodeCwd(cwd)>/<sid>.jsonl` and extract changes. */
8
- export declare function readClaudeChangedFiles(cwd: string, sessionId: string, claudeHome?: string): string[];
9
- /**
10
- * Parse codex rollout JSONL text → changed file paths. Codex tool calls are
11
- * `{type:"response_item", payload:{type:"function_call", name, arguments}}` or
12
- * `{...custom_tool_call, input}`. apply_patch carries the patch text; write/edit
13
- * carry a file path in arguments. Exported for unit testing.
14
- */
15
- export declare function extractChangedFilesFromCodexLines(text: string): string[];
16
- /** Locate a codex rollout by threadId+cwd under `<codexHome>/sessions` and extract changes. */
17
- export declare function readCodexChangedFiles(cwd: string, threadId: string, codexHome?: string): string[];
18
- /** Dispatch by CLI. Unknown cli → []. Never throws. */
19
- export declare function readExternalChangedFiles(cli: string, cwd: string, sessionId: string): string[];
@@ -1,231 +0,0 @@
1
- import { readFileSync, existsSync, readdirSync, statSync, openSync, readSync, closeSync } from "node:fs";
2
- import { join } from "node:path";
3
- import { homedir } from "node:os";
4
- import { encodeCwd } from "./session-discovery.js";
5
- import { logger } from "../logging/logger.js";
6
- /**
7
- * #6 — attribute file changes made by a background external agent (DriveAgent
8
- * running `claude` / `codex`). Those Edit/Write calls land in the external CLI's
9
- * own transcript, invisible to the host's in-session file-change aggregator.
10
- * Given the external session id + cwd, locate that transcript and extract the
11
- * set of changed files, so the UI can show "N files edited" for the run.
12
- *
13
- * Read-only; tolerant — a malformed line is skipped, a missing transcript
14
- * returns []. Never throws for the caller.
15
- */
16
- const CLAUDE_WRITE_TOOLS = new Set(["Write", "Edit", "MultiEdit", "NotebookEdit"]);
17
- const CODEX_WRITE_TOOLS = new Set(["apply_patch", "ApplyPatch", "write_file", "edit_file"]);
18
- /** Pull the changed-file path out of a claude tool_use input block. */
19
- function claudeInputPath(input) {
20
- if (!input || typeof input !== "object")
21
- return undefined;
22
- const o = input;
23
- const p = o.file_path ?? o.notebook_path;
24
- return typeof p === "string" && p.length > 0 ? p : undefined;
25
- }
26
- /**
27
- * Parse claude transcript JSONL text → deduped list of changed file paths.
28
- * Each line is `{ message: { content: [{ type:"tool_use", name, input }] } }`.
29
- * Exported for direct unit testing without a transcript file on disk.
30
- */
31
- export function extractChangedFilesFromClaudeLines(text) {
32
- const seen = new Set();
33
- for (const line of text.split("\n")) {
34
- if (!line.trim())
35
- continue;
36
- let d;
37
- try {
38
- d = JSON.parse(line);
39
- }
40
- catch {
41
- continue;
42
- }
43
- const content = d?.message?.content;
44
- if (!Array.isArray(content))
45
- continue;
46
- for (const block of content) {
47
- if (block &&
48
- typeof block === "object" &&
49
- block.type === "tool_use" &&
50
- CLAUDE_WRITE_TOOLS.has(block.name ?? "")) {
51
- const p = claudeInputPath(block.input);
52
- if (p)
53
- seen.add(p);
54
- }
55
- }
56
- }
57
- return [...seen];
58
- }
59
- /** Locate `<claudeHome>/projects/<encodeCwd(cwd)>/<sid>.jsonl` and extract changes. */
60
- export function readClaudeChangedFiles(cwd, sessionId, claudeHome = join(homedir(), ".claude")) {
61
- const file = join(claudeHome, "projects", encodeCwd(cwd), `${sessionId}.jsonl`);
62
- if (!existsSync(file))
63
- return [];
64
- let text;
65
- try {
66
- text = readFileSync(file, "utf-8");
67
- }
68
- catch {
69
- return [];
70
- }
71
- return extractChangedFilesFromClaudeLines(text);
72
- }
73
- /**
74
- * Parse codex rollout JSONL text → changed file paths. Codex tool calls are
75
- * `{type:"response_item", payload:{type:"function_call", name, arguments}}` or
76
- * `{...custom_tool_call, input}`. apply_patch carries the patch text; write/edit
77
- * carry a file path in arguments. Exported for unit testing.
78
- */
79
- export function extractChangedFilesFromCodexLines(text) {
80
- const seen = new Set();
81
- for (const line of text.split("\n")) {
82
- if (!line.trim())
83
- continue;
84
- let d;
85
- try {
86
- d = JSON.parse(line);
87
- }
88
- catch {
89
- continue;
90
- }
91
- if (d?.type !== "response_item" || !d.payload)
92
- continue;
93
- const p = d.payload;
94
- const name = typeof p.name === "string" ? p.name : "";
95
- if (!CODEX_WRITE_TOOLS.has(name))
96
- continue;
97
- // function_call.arguments is a JSON string; custom_tool_call.input a string.
98
- const rawArgs = typeof p.arguments === "string" ? p.arguments : typeof p.input === "string" ? p.input : "";
99
- for (const f of filesFromCodexArgs(name, rawArgs))
100
- seen.add(f);
101
- }
102
- return [...seen];
103
- }
104
- /** Pull file paths out of a codex tool's arguments string. */
105
- function filesFromCodexArgs(name, raw) {
106
- if (!raw)
107
- return [];
108
- if (name === "apply_patch" || name === "ApplyPatch") {
109
- // apply_patch payload wraps a patch; headers look like `*** Update File: <p>`
110
- // or `*** Add File: <p>`. Match those directly off the raw text.
111
- const out = [];
112
- const re = /\*\*\*\s+(?:Update|Add|Delete) File:\s+(.+)/g;
113
- let m;
114
- while ((m = re.exec(raw)) !== null) {
115
- const f = m[1]?.trim();
116
- if (f)
117
- out.push(f);
118
- }
119
- return out;
120
- }
121
- try {
122
- const a = JSON.parse(raw);
123
- const p = a.file_path ?? a.path;
124
- return typeof p === "string" && p ? [p] : [];
125
- }
126
- catch {
127
- return [];
128
- }
129
- }
130
- /** Locate a codex rollout by threadId+cwd under `<codexHome>/sessions` and extract changes. */
131
- export function readCodexChangedFiles(cwd, threadId, codexHome = join(homedir(), ".codex")) {
132
- const file = findRolloutFile(codexHome, cwd, threadId);
133
- if (!file)
134
- return [];
135
- let text;
136
- try {
137
- text = readFileSync(file, "utf-8");
138
- }
139
- catch {
140
- return [];
141
- }
142
- return extractChangedFilesFromCodexLines(text);
143
- }
144
- /** Dispatch by CLI. Unknown cli → []. Never throws. */
145
- export function readExternalChangedFiles(cli, cwd, sessionId) {
146
- try {
147
- const files = cli === "codex"
148
- ? readCodexChangedFiles(cwd, sessionId)
149
- : readClaudeChangedFiles(cwd, sessionId);
150
- logger.debug("changed_files.external.extracted", {
151
- cat: "changed_files",
152
- cli,
153
- cwd,
154
- externalSessionId: sessionId,
155
- size: files.length,
156
- files,
157
- });
158
- return files;
159
- }
160
- catch (err) {
161
- logger.debug("changed_files.external.extract_failed", {
162
- cat: "changed_files",
163
- cli,
164
- cwd,
165
- externalSessionId: sessionId,
166
- error: err instanceof Error ? err.message : String(err),
167
- });
168
- return [];
169
- }
170
- }
171
- // ── codex rollout location (mirrors codex-session-history.ts) ──────────────
172
- function findRolloutFile(codexHome, cwd, threadId) {
173
- const root = join(codexHome, "sessions");
174
- if (!existsSync(root))
175
- return undefined;
176
- for (const file of walkRollouts(root)) {
177
- let meta;
178
- try {
179
- meta = readSessionMeta(file);
180
- }
181
- catch {
182
- continue;
183
- }
184
- if (meta && meta.id === threadId && meta.cwd === cwd)
185
- return file;
186
- }
187
- return undefined;
188
- }
189
- function* walkRollouts(root) {
190
- let entries;
191
- try {
192
- entries = readdirSync(root);
193
- }
194
- catch {
195
- return;
196
- }
197
- for (const name of entries) {
198
- const full = join(root, name);
199
- let st;
200
- try {
201
- st = statSync(full);
202
- }
203
- catch {
204
- continue;
205
- }
206
- if (st.isDirectory())
207
- yield* walkRollouts(full);
208
- else if (name.startsWith("rollout-") && name.endsWith(".jsonl"))
209
- yield full;
210
- }
211
- }
212
- function readSessionMeta(file, maxBytes = 1 << 16) {
213
- const fd = openSync(file, "r");
214
- let text;
215
- try {
216
- const buf = Buffer.alloc(maxBytes);
217
- const n = readSync(fd, buf, 0, maxBytes, 0);
218
- text = buf.toString("utf-8", 0, n);
219
- }
220
- finally {
221
- closeSync(fd);
222
- }
223
- const nl = text.indexOf("\n");
224
- const first = (nl === -1 ? text : text.slice(0, nl)).trim();
225
- if (!first)
226
- return undefined;
227
- const d = JSON.parse(first);
228
- if (d.type !== "session_meta" || !d.payload)
229
- return undefined;
230
- return { id: d.payload.id, cwd: d.payload.cwd };
231
- }
@@ -1,19 +0,0 @@
1
- import type { AgentAdapter, BuildArgsOpts, PermissionMode } from "./agent-adapter.js";
2
- export interface AgentRunResult {
3
- sessionId: string;
4
- finalText: string;
5
- isError: boolean;
6
- exitCode: number | null;
7
- lines: string[];
8
- }
9
- /** Pure: reduce collected output lines + exit code to a result. Unit-testable. */
10
- export declare function runWithLines(adapter: AgentAdapter, lines: string[], exitCode: number | null): AgentRunResult;
11
- export interface DriverRunOpts extends Omit<BuildArgsOpts, "permissionMode"> {
12
- permissionMode?: PermissionMode;
13
- }
14
- export declare function detectCodexImageInput(command: string, cwd: string, signal?: AbortSignal): Promise<boolean>;
15
- /** Spawn ONE headless agent run, collect stream-json to exit, return result.
16
- * No time concept — a single turn. Honors AbortSignal (kills the child). */
17
- export declare function runAgentOnce(adapter: AgentAdapter, opts: DriverRunOpts & {
18
- command: string;
19
- }, signal?: AbortSignal): Promise<AgentRunResult>;