@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,54 +0,0 @@
1
- export type PermissionMode = "default" | "acceptEdits" | "bypassPermissions";
2
- export interface BuildArgsOpts {
3
- prompt: string;
4
- resumeSessionId?: string;
5
- /** Optional caller-specified model override. Passed through without validation; the CLI reports unknown models. */
6
- model?: string;
7
- permissionMode: PermissionMode;
8
- cwd: string;
9
- imagePaths?: string[];
10
- codexImageInputSupported?: boolean;
11
- }
12
- export interface ParsedResult {
13
- sessionId: string;
14
- finalText: string;
15
- isError: boolean;
16
- }
17
- export interface AgentAdapter {
18
- /** Display name, e.g. "claude" / "codex". */
19
- kind: string;
20
- /** Build the CLI argv (command itself excluded). */
21
- buildArgs(opts: BuildArgsOpts): string[];
22
- /** Reduce collected stream-json output lines to {sessionId, finalText, isError}. */
23
- parseResult(lines: string[]): ParsedResult;
24
- /**
25
- * When true, the prompt is fed over stdin instead of being passed in argv.
26
- * claude takes the prompt as `-p <prompt>` (argv) so leaves this unset; codex
27
- * `exec` reads the prompt from stdin (its argv ends with a bare `-`).
28
- */
29
- promptViaStdin?: boolean;
30
- }
31
- /**
32
- * Soft cost-guard appended to a driven CC's system prompt. Workflow fans out a
33
- * fleet of agents and is the main token sink; we ask CC to surface intent and
34
- * get a go-ahead before running one, so a human can intervene (rooms) and the
35
- * model stays cost-aware even where Workflow isn't hard-disabled. Shared so the
36
- * room's resident process can reuse the exact same wording.
37
- */
38
- export declare const CC_COST_GUARD_PROMPT: string;
39
- export declare const claudeAdapter: AgentAdapter;
40
- /**
41
- * Drives the OpenAI Codex CLI via `codex exec`. Mirrors claudeAdapter but for
42
- * codex's different surface:
43
- * - prompt is fed over STDIN (argv ends with a bare `-`), not argv → promptViaStdin
44
- * - permission is a spawn-time SANDBOX choice, not a per-tool approval loop:
45
- * default → --sandbox read-only (codex can read, not write)
46
- * acceptEdits → --sandbox workspace-write (codex can write the workspace)
47
- * bypassPermissions → --dangerously-bypass-approvals-and-sandbox (full auto)
48
- * (Matches the only model codex supports — same choice the `wand` tool makes;
49
- * codex has no `--permission-prompt-tool stdio` equivalent.)
50
- * - JSONL event shape differs: session id is `thread.started`.thread_id, the
51
- * final answer is the last `item.completed` of item.type "agent_message", and
52
- * failure is `turn.failed` / `error` events (no `is_error` flag).
53
- */
54
- export declare const codexAdapter: AgentAdapter;
@@ -1,143 +0,0 @@
1
- /**
2
- * Soft cost-guard appended to a driven CC's system prompt. Workflow fans out a
3
- * fleet of agents and is the main token sink; we ask CC to surface intent and
4
- * get a go-ahead before running one, so a human can intervene (rooms) and the
5
- * model stays cost-aware even where Workflow isn't hard-disabled. Shared so the
6
- * room's resident process can reuse the exact same wording.
7
- */
8
- export const CC_COST_GUARD_PROMPT = "Cost guard: before invoking the Workflow tool (which fans out many agents and " +
9
- "burns a lot of tokens), first state in one short message what workflow you intend " +
10
- "to run and why, and ask for a go-ahead — do NOT launch a Workflow unprompted. A " +
11
- "single Task sub-agent is fine without asking.";
12
- export const claudeAdapter = {
13
- kind: "claude",
14
- buildArgs(opts) {
15
- // -p (print/headless) + stream-json REQUIRES --verbose (verified).
16
- const args = ["-p", opts.prompt, "--output-format", "stream-json", "--verbose"];
17
- if (opts.model)
18
- args.push("--model", opts.model);
19
- if (opts.resumeSessionId)
20
- args.push("--resume", opts.resumeSessionId);
21
- // Hard-disallow Workflow: driving CC unattended (esp. bypassPermissions),
22
- // CC's Workflow tool fans out a FLEET of agents — the real token-burn culprit
23
- // (user: "自动了 2 个 workflow token 就烧没了"). A single Task (one sub-agent)
24
- // is cheap, so it stays ALLOWED. (We earlier disallowed Task by mistake;
25
- // Workflow is the one that fans out.) Disabling outright is cleaner than an
26
- // approval round-trip this path doesn't have.
27
- args.push("--disallowedTools", "Workflow");
28
- // Soft constraint (belt-and-suspenders + carries to rooms where Workflow is
29
- // allowed): ask CC to check in before expensive multi-agent work.
30
- args.push("--append-system-prompt", CC_COST_GUARD_PROMPT);
31
- args.push("--permission-mode", opts.permissionMode);
32
- return args;
33
- },
34
- parseResult(lines) {
35
- let sessionId = "";
36
- let finalText = "";
37
- let isError = false;
38
- for (const line of lines) {
39
- const t = line.trim();
40
- if (!t)
41
- continue;
42
- let d;
43
- try {
44
- d = JSON.parse(t);
45
- }
46
- catch {
47
- continue;
48
- }
49
- if (typeof d.session_id === "string" && !sessionId)
50
- sessionId = d.session_id;
51
- if (d.type === "result") {
52
- if (typeof d.session_id === "string")
53
- sessionId = d.session_id;
54
- if (typeof d.result === "string")
55
- finalText = d.result;
56
- isError = Boolean(d.is_error);
57
- }
58
- }
59
- return { sessionId, finalText, isError };
60
- },
61
- };
62
- /**
63
- * Drives the OpenAI Codex CLI via `codex exec`. Mirrors claudeAdapter but for
64
- * codex's different surface:
65
- * - prompt is fed over STDIN (argv ends with a bare `-`), not argv → promptViaStdin
66
- * - permission is a spawn-time SANDBOX choice, not a per-tool approval loop:
67
- * default → --sandbox read-only (codex can read, not write)
68
- * acceptEdits → --sandbox workspace-write (codex can write the workspace)
69
- * bypassPermissions → --dangerously-bypass-approvals-and-sandbox (full auto)
70
- * (Matches the only model codex supports — same choice the `wand` tool makes;
71
- * codex has no `--permission-prompt-tool stdio` equivalent.)
72
- * - JSONL event shape differs: session id is `thread.started`.thread_id, the
73
- * final answer is the last `item.completed` of item.type "agent_message", and
74
- * failure is `turn.failed` / `error` events (no `is_error` flag).
75
- */
76
- export const codexAdapter = {
77
- kind: "codex",
78
- promptViaStdin: true,
79
- buildArgs(opts) {
80
- const args = ["exec", "--json", "--color", "never", "--skip-git-repo-check"];
81
- if (opts.permissionMode === "bypassPermissions") {
82
- args.push("--dangerously-bypass-approvals-and-sandbox");
83
- }
84
- else {
85
- args.push("--sandbox", opts.permissionMode === "acceptEdits" ? "workspace-write" : "read-only");
86
- }
87
- if (opts.model)
88
- args.push("--model", opts.model);
89
- if (opts.codexImageInputSupported) {
90
- for (const imagePath of opts.imagePaths ?? [])
91
- args.push("-i", imagePath);
92
- }
93
- // `resume <thread_id>` continues a prior codex session; the trailing `-`
94
- // tells codex exec to read the prompt from stdin (we feed it there).
95
- if (opts.resumeSessionId)
96
- args.push("resume", opts.resumeSessionId, "-");
97
- else
98
- args.push("-");
99
- return args;
100
- },
101
- parseResult(lines) {
102
- let sessionId = "";
103
- let finalText = "";
104
- let isError = false;
105
- const errorBits = [];
106
- for (const line of lines) {
107
- const t = line.trim();
108
- if (!t)
109
- continue;
110
- let d;
111
- try {
112
- d = JSON.parse(t);
113
- }
114
- catch {
115
- continue;
116
- }
117
- if (d.type === "thread.started" && typeof d.thread_id === "string")
118
- sessionId = d.thread_id;
119
- else if (d.type === "item.completed" &&
120
- d.item?.type === "agent_message" &&
121
- typeof d.item.text === "string") {
122
- finalText = d.item.text; // keep the LAST agent_message
123
- }
124
- else if (d.type === "turn.failed") {
125
- isError = true;
126
- const msg = d.error?.message ?? d.error ?? "turn failed";
127
- if (typeof msg === "string")
128
- errorBits.push(msg);
129
- }
130
- else if (d.type === "error") {
131
- isError = true;
132
- const msg = d.message ?? d.error?.message ?? d.error ?? "error";
133
- if (typeof msg === "string")
134
- errorBits.push(msg);
135
- }
136
- }
137
- // On failure, surface the error text as finalText (so the caller/notification
138
- // shows *why*), preferring it over any partial agent_message.
139
- if (isError && errorBits.length)
140
- finalText = errorBits.join("\n");
141
- return { sessionId, finalText, isError };
142
- },
143
- };
@@ -1,19 +0,0 @@
1
- export interface CCAvailability {
2
- available: boolean;
3
- command: string;
4
- version?: string;
5
- reason?: "not-found" | "not-executable";
6
- }
7
- /** macOS GUI-launched Electron has a minimal PATH (no Homebrew). Prepend common
8
- * CLI dirs so `claude` resolves. Mirrors resident-agent.ts's fix. */
9
- export declare function pathWithCommonBins(env?: NodeJS.ProcessEnv): string;
10
- export type ProbeRunner = (command: string) => Promise<{
11
- ok: boolean;
12
- stdout: string;
13
- }>;
14
- /** Probe a CLI's availability. Injectable runner for tests. */
15
- export declare function probeCli(command: string, runner?: ProbeRunner): Promise<CCAvailability>;
16
- /** Cached probe; pass force=true to re-detect (user installed CLI mid-session). */
17
- export declare function probeClaudeCli(force?: boolean): Promise<CCAvailability>;
18
- /** Cached probe for the OpenAI Codex CLI; force=true re-detects. */
19
- export declare function probeCodexCli(force?: boolean): Promise<CCAvailability>;
@@ -1,53 +0,0 @@
1
- import { spawn } from "node:child_process";
2
- import { delimiter } from "node:path";
3
- /** macOS GUI-launched Electron has a minimal PATH (no Homebrew). Prepend common
4
- * CLI dirs so `claude` resolves. Mirrors resident-agent.ts's fix. */
5
- export function pathWithCommonBins(env = process.env) {
6
- const extra = ["/opt/homebrew/bin", "/usr/local/bin", "/usr/bin", "/bin"];
7
- const current = (env.PATH ?? "").split(delimiter).filter(Boolean);
8
- const merged = [];
9
- for (const dir of [...extra, ...current])
10
- if (!merged.includes(dir))
11
- merged.push(dir);
12
- return merged.join(delimiter);
13
- }
14
- /** Default runner: `<command> --version` with PATH fix. */
15
- const defaultRunner = (command) => new Promise((resolve, reject) => {
16
- const child = spawn(command, ["--version"], {
17
- env: { ...process.env, PATH: pathWithCommonBins() },
18
- stdio: ["ignore", "pipe", "pipe"],
19
- });
20
- let stdout = "";
21
- child.stdout?.on("data", (c) => (stdout += String(c)));
22
- child.on("error", reject);
23
- child.on("exit", (code) => resolve({ ok: code === 0, stdout }));
24
- });
25
- /** Probe a CLI's availability. Injectable runner for tests. */
26
- export async function probeCli(command, runner = defaultRunner) {
27
- try {
28
- const { ok, stdout } = await runner(command);
29
- if (!ok)
30
- return { available: false, command, reason: "not-executable" };
31
- return { available: true, command, version: stdout.trim() || undefined };
32
- }
33
- catch (err) {
34
- const code = err.code;
35
- return { available: false, command, reason: code === "ENOENT" ? "not-found" : "not-executable" };
36
- }
37
- }
38
- let cached;
39
- /** Cached probe; pass force=true to re-detect (user installed CLI mid-session). */
40
- export async function probeClaudeCli(force = false) {
41
- if (cached && !force)
42
- return cached;
43
- cached = await probeCli("claude");
44
- return cached;
45
- }
46
- let cachedCodex;
47
- /** Cached probe for the OpenAI Codex CLI; force=true re-detects. */
48
- export async function probeCodexCli(force = false) {
49
- if (cachedCodex && !force)
50
- return cachedCodex;
51
- cachedCodex = await probeCli("codex");
52
- return cachedCodex;
53
- }
@@ -1,24 +0,0 @@
1
- import type { DiscoveredSession, DiscoverOptions } from "./session-discovery.js";
2
- /**
3
- * Discover codex CLI sessions for a given `cwd`, mirroring the claude-side
4
- * `discoverSessions` but for codex's storage layout, which is fundamentally
5
- * different:
6
- *
7
- * ~/.codex/sessions/YYYY/MM/DD/rollout-<ts>-<uuid>.jsonl
8
- *
9
- * Unlike claude (one dir per project), codex stores rollouts by DATE, not by
10
- * cwd. The cwd lives INSIDE the file: the first line is a `session_meta` event
11
- * whose `payload` carries `{ id, cwd, timestamp }` (`id` is the thread id we
12
- * resume by). So discovery means: walk every rollout file, read just its first
13
- * line to learn its cwd, and keep the ones matching the requested project.
14
- *
15
- * Codex rollout files can be large, so we deliberately AVOID `readFileSync` on
16
- * the whole file (the claude version reads the whole file because claude
17
- * sessions are small). We read the first line for the meta, and — only for a
18
- * matching file — read a bounded prefix to find the first real user message for
19
- * the title. Returns the same `DiscoveredSession` shape so the UI is CLI-blind.
20
- */
21
- export declare function discoverCodexSessions(cwd: string, codexHome?: string, opts?: DiscoverOptions): DiscoveredSession[];
22
- /** Count codex sessions for `cwd` (reads first-line meta of every rollout; no
23
- * window). Used so the UI knows whether a bounded list left older ones hidden. */
24
- export declare function countCodexSessions(cwd: string, codexHome?: string): number;
@@ -1,191 +0,0 @@
1
- import { readdirSync, statSync, existsSync, openSync, readSync, closeSync } from "node:fs";
2
- import { join } from "node:path";
3
- import { homedir } from "node:os";
4
- import { selectRecentStats } from "./session-discovery.js";
5
- /**
6
- * Discover codex CLI sessions for a given `cwd`, mirroring the claude-side
7
- * `discoverSessions` but for codex's storage layout, which is fundamentally
8
- * different:
9
- *
10
- * ~/.codex/sessions/YYYY/MM/DD/rollout-<ts>-<uuid>.jsonl
11
- *
12
- * Unlike claude (one dir per project), codex stores rollouts by DATE, not by
13
- * cwd. The cwd lives INSIDE the file: the first line is a `session_meta` event
14
- * whose `payload` carries `{ id, cwd, timestamp }` (`id` is the thread id we
15
- * resume by). So discovery means: walk every rollout file, read just its first
16
- * line to learn its cwd, and keep the ones matching the requested project.
17
- *
18
- * Codex rollout files can be large, so we deliberately AVOID `readFileSync` on
19
- * the whole file (the claude version reads the whole file because claude
20
- * sessions are small). We read the first line for the meta, and — only for a
21
- * matching file — read a bounded prefix to find the first real user message for
22
- * the title. Returns the same `DiscoveredSession` shape so the UI is CLI-blind.
23
- */
24
- export function discoverCodexSessions(cwd, codexHome = join(homedir(), ".codex"), opts = {}) {
25
- const root = join(codexHome, "sessions");
26
- if (!existsSync(root))
27
- return [];
28
- // Cheap pass: stat every rollout (no read). Apply the recency window here so
29
- // the meta read (first line) only runs on in-window files. The limit can't be
30
- // applied yet — we don't know which files match `cwd` until we read the meta,
31
- // so we'd otherwise drop matching-but-not-yet-seen sessions.
32
- const stats = [];
33
- for (const file of walkRollouts(root)) {
34
- let st;
35
- try {
36
- st = statSync(file);
37
- }
38
- catch {
39
- continue;
40
- }
41
- stats.push({ file, mtimeMs: st.mtimeMs });
42
- }
43
- const windowed = selectRecentStats(stats, { sinceMs: opts.sinceMs, now: opts.now });
44
- const limit = opts.limit && opts.limit > 0 ? opts.limit : Infinity;
45
- const out = [];
46
- for (const s of windowed) {
47
- if (out.length >= limit)
48
- break;
49
- let meta;
50
- try {
51
- meta = readSessionMeta(s.file);
52
- }
53
- catch {
54
- continue;
55
- }
56
- if (!meta || !meta.id || meta.cwd !== cwd)
57
- continue;
58
- out.push({
59
- sessionId: meta.id,
60
- firstMessage: readFirstUserMessage(s.file),
61
- lastModified: s.mtimeMs,
62
- messageCount: 0, // not tracked for codex (would need a full scan); UI shows time + title.
63
- });
64
- }
65
- return out;
66
- }
67
- /** Count codex sessions for `cwd` (reads first-line meta of every rollout; no
68
- * window). Used so the UI knows whether a bounded list left older ones hidden. */
69
- export function countCodexSessions(cwd, codexHome = join(homedir(), ".codex")) {
70
- const root = join(codexHome, "sessions");
71
- if (!existsSync(root))
72
- return 0;
73
- let n = 0;
74
- for (const file of walkRollouts(root)) {
75
- let meta;
76
- try {
77
- meta = readSessionMeta(file);
78
- }
79
- catch {
80
- continue;
81
- }
82
- if (meta && meta.id && meta.cwd === cwd)
83
- n++;
84
- }
85
- return n;
86
- }
87
- /** Recursively yield every `rollout-*.jsonl` file under `root`. */
88
- function* walkRollouts(root) {
89
- let entries;
90
- try {
91
- entries = readdirSync(root);
92
- }
93
- catch {
94
- return;
95
- }
96
- for (const name of entries) {
97
- const full = join(root, name);
98
- let st;
99
- try {
100
- st = statSync(full);
101
- }
102
- catch {
103
- continue;
104
- }
105
- if (st.isDirectory()) {
106
- yield* walkRollouts(full);
107
- }
108
- else if (name.startsWith("rollout-") && name.endsWith(".jsonl")) {
109
- yield full;
110
- }
111
- }
112
- }
113
- /** Read just the first line of a file (bounded), without loading the whole file. */
114
- function readFirstLine(file, maxBytes = 1 << 16) {
115
- const fd = openSync(file, "r");
116
- try {
117
- const buf = Buffer.alloc(maxBytes);
118
- const n = readSync(fd, buf, 0, maxBytes, 0);
119
- const text = buf.toString("utf-8", 0, n);
120
- const nl = text.indexOf("\n");
121
- return nl === -1 ? text : text.slice(0, nl);
122
- }
123
- finally {
124
- closeSync(fd);
125
- }
126
- }
127
- /** Parse the first-line `session_meta` event → `{ id, cwd }`. */
128
- function readSessionMeta(file) {
129
- const first = readFirstLine(file).trim();
130
- if (!first)
131
- return undefined;
132
- const d = JSON.parse(first);
133
- if (d.type !== "session_meta" || !d.payload)
134
- return undefined;
135
- return { id: d.payload.id, cwd: d.payload.cwd };
136
- }
137
- /**
138
- * Find the first *real* user message text for the session title. Codex user
139
- * messages look like:
140
- * {type:"response_item", payload:{type:"message", role:"user",
141
- * content:[{type:"input_text", text}]}}
142
- * The very first user message is usually an `<environment_context>` injection
143
- * (analogous to claude's `<local-command-caveat>`); skip those wrappers.
144
- *
145
- * Reads a bounded prefix of the file rather than the whole thing.
146
- */
147
- function readFirstUserMessage(file, maxBytes = 1 << 20) {
148
- let chunk;
149
- try {
150
- const fd = openSync(file, "r");
151
- try {
152
- const buf = Buffer.alloc(maxBytes);
153
- const n = readSync(fd, buf, 0, maxBytes, 0);
154
- chunk = buf.toString("utf-8", 0, n);
155
- }
156
- finally {
157
- closeSync(fd);
158
- }
159
- }
160
- catch {
161
- return "";
162
- }
163
- for (const line of chunk.split("\n")) {
164
- if (!line.trim())
165
- continue;
166
- let d;
167
- try {
168
- d = JSON.parse(line);
169
- }
170
- catch {
171
- // Truncated last line of the bounded read — stop scanning.
172
- break;
173
- }
174
- const p = d?.payload;
175
- if (d?.type !== "response_item" || p?.type !== "message" || p?.role !== "user")
176
- continue;
177
- const content = p.content;
178
- const text = Array.isArray(content)
179
- ? content.map((c) => (typeof c?.text === "string" ? c.text : "")).join("")
180
- : typeof content === "string"
181
- ? content
182
- : "";
183
- const t = text.trim();
184
- if (!t)
185
- continue;
186
- if (t.startsWith("<environment_context>"))
187
- continue;
188
- return t.slice(0, 200);
189
- }
190
- return "";
191
- }
@@ -1,38 +0,0 @@
1
- import type { HistoryMessage, SessionTailEvent } from "./session-history.js";
2
- /**
3
- * Read the last `limit` user/assistant messages from a codex CLI session,
4
- * returning the SAME shape as the claude-side `readRecentHistory` so the room
5
- * UI stays CLI-blind.
6
- *
7
- * Codex storage differs from claude fundamentally (see `codex-session-discovery`):
8
- * rollouts live under `~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl`, keyed by
9
- * DATE not cwd, with the thread id inside the file's `session_meta` first line.
10
- * So we first locate the rollout file whose `session_meta` matches both
11
- * `threadId` and `cwd`, then parse its event stream:
12
- *
13
- * - {type:"response_item", payload:{type:"message", role:"user"|"assistant",
14
- * content:[{type:"input_text"|"output_text", text}]}} → message text
15
- * - {type:"response_item", payload:{type:"function_call", name, arguments}} → tool
16
- * - {type:"response_item", payload:{type:"custom_tool_call", name, input}} → tool
17
- *
18
- * `developer`-role messages (environment/system injections) and the leading
19
- * `<environment_context>` user wrapper are skipped, mirroring discovery.
20
- */
21
- export declare function readCodexRecentHistory(cwd: string, threadId: string, limit: number, codexHome?: string): {
22
- messages: HistoryMessage[];
23
- hasMore: boolean;
24
- totalCount: number;
25
- };
26
- /** Parse a bounded/raw Codex rollout snapshot. Shared with the desktop tail
27
- * follower so its initial history and EOF cursor are atomic. */
28
- export declare function parseCodexRecentHistory(raw: string, limit: number): {
29
- messages: HistoryMessage[];
30
- hasMore: boolean;
31
- totalCount: number;
32
- };
33
- /** Parse one newly-appended Codex rollout JSONL line. `response_item` is the
34
- * authoritative rendered stream; parallel `event_msg.agent_message` records
35
- * are deliberately ignored to avoid duplicate assistant bubbles. */
36
- export declare function parseCodexTranscriptLine(line: string): SessionTailEvent[];
37
- /** Find the rollout file whose `session_meta` matches both `threadId` and `cwd`. */
38
- export declare function findCodexRolloutFile(codexHome: string, cwd: string, threadId: string): string | undefined;