@cjhyy/code-shell-core 0.7.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (621) hide show
  1. package/README.md +36 -23
  2. package/dist/agent/agent-definition-registry.d.ts +2 -2
  3. package/dist/agent/agent-definition-registry.js +47 -10
  4. package/dist/agent/agent-definition.d.ts +5 -0
  5. package/dist/agent/agent-definition.js +14 -0
  6. package/dist/automation/index.d.ts +7 -4
  7. package/dist/automation/index.js +4 -2
  8. package/dist/automation/runner.js +3 -1
  9. package/dist/automation/scheduler.d.ts +57 -1
  10. package/dist/automation/scheduler.js +123 -23
  11. package/dist/automation/store.d.ts +6 -2
  12. package/dist/automation/store.js +7 -3
  13. package/dist/capabilities/index.d.ts +109 -0
  14. package/dist/capabilities/index.js +80 -0
  15. package/dist/capability-control/disabled-lists.d.ts +2 -1
  16. package/dist/capability-control/disabled-lists.js +3 -5
  17. package/dist/capability-control/overlay.d.ts +14 -1
  18. package/dist/capability-control/overlay.js +40 -0
  19. package/dist/capability-control/service.js +6 -4
  20. package/dist/cli/agent-server-stdio.d.ts +1 -1
  21. package/dist/cli/agent-server-stdio.js +66 -6
  22. package/dist/cli/agent-server-tcp.js +20 -5
  23. package/dist/context/compaction.d.ts +39 -3
  24. package/dist/context/compaction.js +151 -39
  25. package/dist/context/manager.d.ts +20 -4
  26. package/dist/context/manager.js +42 -7
  27. package/dist/context/token-counter.js +5 -3
  28. package/dist/context/tool-result-storage.d.ts +6 -0
  29. package/dist/context/tool-result-storage.js +25 -4
  30. package/dist/credentials/access.d.ts +13 -2
  31. package/dist/credentials/access.js +99 -4
  32. package/dist/credentials/index.d.ts +3 -2
  33. package/dist/credentials/index.js +2 -1
  34. package/dist/credentials/oauth.d.ts +9 -1
  35. package/dist/credentials/oauth.js +80 -1
  36. package/dist/credentials/store.d.ts +16 -2
  37. package/dist/credentials/store.js +33 -11
  38. package/dist/credentials/types.d.ts +62 -1
  39. package/dist/credentials/types.js +16 -1
  40. package/dist/credentials/use-credential-tool.js +15 -1
  41. package/dist/engine/auxiliary-pipeline.d.ts +40 -0
  42. package/dist/engine/auxiliary-pipeline.js +181 -0
  43. package/dist/{settings → engine}/disk-defaults.d.ts +2 -2
  44. package/dist/{settings → engine}/disk-defaults.js +5 -2
  45. package/dist/engine/dynamic-tool-defs.d.ts +4 -0
  46. package/dist/engine/dynamic-tool-defs.js +4 -0
  47. package/dist/engine/engine.d.ts +272 -184
  48. package/dist/engine/engine.js +1869 -1864
  49. package/dist/engine/file-history-hook.d.ts +11 -0
  50. package/dist/engine/file-history-hook.js +31 -0
  51. package/dist/engine/goal-judge-context.d.ts +9 -0
  52. package/dist/engine/goal-judge-context.js +234 -0
  53. package/dist/engine/injected-context-cache.d.ts +6 -0
  54. package/dist/engine/injected-context-cache.js +13 -0
  55. package/dist/engine/input-attachments.d.ts +1 -1
  56. package/dist/engine/model-facade.d.ts +3 -3
  57. package/dist/engine/model-facade.js +15 -14
  58. package/dist/engine/permission-controller.d.ts +55 -0
  59. package/dist/engine/permission-controller.js +148 -0
  60. package/dist/engine/prompt-cache-diagnostics.d.ts +58 -0
  61. package/dist/engine/prompt-cache-diagnostics.js +178 -0
  62. package/dist/engine/run-accounting.d.ts +41 -0
  63. package/dist/engine/run-accounting.js +126 -0
  64. package/dist/engine/run-context.d.ts +44 -0
  65. package/dist/engine/run-context.js +88 -0
  66. package/dist/engine/run-environment.d.ts +30 -0
  67. package/dist/engine/run-environment.js +77 -0
  68. package/dist/engine/run-finalize.d.ts +58 -0
  69. package/dist/engine/run-finalize.js +245 -0
  70. package/dist/engine/run-goal.d.ts +58 -0
  71. package/dist/engine/run-goal.js +188 -0
  72. package/dist/engine/run-image-input.d.ts +1 -1
  73. package/dist/engine/run-image-input.js +5 -3
  74. package/dist/engine/run-session-open.d.ts +41 -0
  75. package/dist/engine/run-session-open.js +186 -0
  76. package/dist/engine/run-setup.d.ts +42 -0
  77. package/dist/engine/run-setup.js +58 -0
  78. package/dist/engine/run-tooling.d.ts +125 -0
  79. package/dist/engine/run-tooling.js +283 -0
  80. package/dist/engine/run-types.d.ts +139 -0
  81. package/dist/engine/run-types.js +12 -0
  82. package/dist/engine/run-workspace.d.ts +50 -0
  83. package/dist/engine/run-workspace.js +114 -0
  84. package/dist/engine/session-title.d.ts +2 -1
  85. package/dist/engine/session-title.js +4 -1
  86. package/dist/engine/steer-queue.d.ts +1 -1
  87. package/dist/engine/subagent-spawner.d.ts +32 -0
  88. package/dist/engine/subagent-spawner.js +287 -0
  89. package/dist/engine/tool-summary.d.ts +2 -2
  90. package/dist/engine/tool-summary.js +2 -2
  91. package/dist/engine/turn-loop.d.ts +67 -10
  92. package/dist/engine/turn-loop.js +538 -97
  93. package/dist/engine/types.d.ts +35 -4
  94. package/dist/engine/types.js +1 -1
  95. package/dist/{engine/goal.d.ts → goal/lifecycle.d.ts} +80 -6
  96. package/dist/goal/lifecycle.js +482 -0
  97. package/dist/hooks/events.d.ts +26 -9
  98. package/dist/hooks/events.js +0 -3
  99. package/dist/hooks/goal-stop-hook.d.ts +28 -29
  100. package/dist/hooks/goal-stop-hook.js +344 -144
  101. package/dist/hooks/registry.js +4 -1
  102. package/dist/hooks/shell-runner.d.ts +12 -1
  103. package/dist/hooks/shell-runner.js +160 -9
  104. package/dist/index.d.ts +51 -110
  105. package/dist/index.extension.d.ts +51 -0
  106. package/dist/index.extension.js +39 -0
  107. package/dist/index.internal.d.ts +86 -0
  108. package/dist/index.internal.js +92 -0
  109. package/dist/index.js +37 -125
  110. package/dist/links/cli.d.ts +48 -0
  111. package/dist/links/cli.js +617 -0
  112. package/dist/links/http.d.ts +40 -0
  113. package/dist/links/http.js +166 -0
  114. package/dist/links/index.d.ts +4 -0
  115. package/dist/links/index.js +3 -0
  116. package/dist/links/link-action-tool.d.ts +5 -0
  117. package/dist/links/link-action-tool.js +241 -0
  118. package/dist/links/providers.d.ts +8 -0
  119. package/dist/links/providers.js +665 -0
  120. package/dist/links/types.d.ts +44 -0
  121. package/dist/llm/client-base.d.ts +7 -0
  122. package/dist/llm/client-base.js +72 -10
  123. package/dist/llm/model-pool.d.ts +1 -1
  124. package/dist/llm/model-pool.js +1 -1
  125. package/dist/llm/providers/anthropic.d.ts +1 -0
  126. package/dist/llm/providers/anthropic.js +9 -0
  127. package/dist/llm/providers/openai.d.ts +1 -0
  128. package/dist/llm/providers/openai.js +17 -0
  129. package/dist/llm/types.d.ts +12 -5
  130. package/dist/model-catalog/index.js +15 -2
  131. package/dist/model-catalog/resolve.d.ts +13 -1
  132. package/dist/model-catalog/resolve.js +37 -2
  133. package/dist/model-catalog/types.d.ts +74 -48
  134. package/dist/model-catalog/types.js +16 -5
  135. package/dist/model-catalog/upsert.d.ts +3 -1
  136. package/dist/model-catalog/upsert.js +9 -0
  137. package/dist/onboarding.d.ts +0 -1
  138. package/dist/onboarding.js +1 -22
  139. package/dist/panel-apps/bindings.d.ts +24 -0
  140. package/dist/panel-apps/bindings.js +69 -0
  141. package/dist/panel-apps/github-archive.d.ts +21 -0
  142. package/dist/panel-apps/github-archive.js +98 -0
  143. package/dist/panel-apps/index.d.ts +4 -0
  144. package/dist/panel-apps/index.js +4 -0
  145. package/dist/panel-apps/installer.d.ts +68 -0
  146. package/dist/panel-apps/installer.js +622 -0
  147. package/dist/panel-apps/manifest.d.ts +364 -0
  148. package/dist/panel-apps/manifest.js +189 -0
  149. package/dist/panel-apps/paths.d.ts +13 -0
  150. package/dist/panel-apps/paths.js +38 -0
  151. package/dist/panel-apps/registry.d.ts +51 -0
  152. package/dist/panel-apps/registry.js +99 -0
  153. package/dist/panel-apps/runtime.d.ts +80 -0
  154. package/dist/panel-apps/runtime.js +154 -0
  155. package/dist/plugins/gitOps.js +8 -1
  156. package/dist/plugins/installedPlugins.d.ts +2 -1
  157. package/dist/plugins/installedPlugins.js +146 -8
  158. package/dist/plugins/installer/codex/convertAgents.d.ts +4 -1
  159. package/dist/plugins/installer/codex/convertAgents.js +62 -8
  160. package/dist/plugins/installer/codex/convertCommands.d.ts +5 -5
  161. package/dist/plugins/installer/codex/convertCommands.js +35 -12
  162. package/dist/plugins/installer/codex/convertHooks.d.ts +10 -0
  163. package/dist/plugins/installer/codex/convertHooks.js +82 -0
  164. package/dist/plugins/installer/codex/convertSkills.js +41 -6
  165. package/dist/plugins/installer/install.d.ts +7 -1
  166. package/dist/plugins/installer/install.js +21 -87
  167. package/dist/plugins/installer/installFromArchive.d.ts +26 -4
  168. package/dist/plugins/installer/installFromArchive.js +44 -27
  169. package/dist/plugins/installer/installFromNpm.d.ts +31 -0
  170. package/dist/plugins/installer/installFromNpm.js +273 -0
  171. package/dist/plugins/installer/loadPluginAgents.js +17 -4
  172. package/dist/plugins/installer/loadPluginMcp.d.ts +14 -0
  173. package/dist/plugins/installer/loadPluginMcp.js +245 -35
  174. package/dist/plugins/installer/normalizeManifest.d.ts +13 -0
  175. package/dist/plugins/installer/normalizeManifest.js +306 -0
  176. package/dist/plugins/installer/npmTar.d.ts +13 -0
  177. package/dist/plugins/installer/npmTar.js +321 -0
  178. package/dist/plugins/installer/parseSource.d.ts +11 -0
  179. package/dist/plugins/installer/parseSource.js +48 -0
  180. package/dist/plugins/installer/preview.d.ts +101 -0
  181. package/dist/plugins/installer/preview.js +336 -0
  182. package/dist/plugins/installer/projectPluginSource.d.ts +14 -0
  183. package/dist/plugins/installer/projectPluginSource.js +140 -0
  184. package/dist/plugins/installer/types.d.ts +775 -0
  185. package/dist/plugins/installer/types.js +100 -0
  186. package/dist/plugins/installer/unzip.d.ts +11 -0
  187. package/dist/plugins/installer/unzip.js +123 -9
  188. package/dist/plugins/installer/update.d.ts +2 -2
  189. package/dist/plugins/installer/update.js +43 -4
  190. package/dist/plugins/loadPluginHooks.d.ts +19 -2
  191. package/dist/plugins/loadPluginHooks.js +97 -86
  192. package/dist/plugins/pluginAutomationTemplates.d.ts +18 -0
  193. package/dist/plugins/pluginAutomationTemplates.js +50 -0
  194. package/dist/plugins/pluginCatalog.d.ts +45 -0
  195. package/dist/plugins/pluginCatalog.js +87 -0
  196. package/dist/plugins/pluginCommandHook.d.ts +10 -4
  197. package/dist/plugins/pluginCommandHook.js +133 -18
  198. package/dist/plugins/pluginCommandsLoader.d.ts +19 -0
  199. package/dist/plugins/pluginCommandsLoader.js +181 -7
  200. package/dist/plugins/pluginContent.d.ts +10 -1
  201. package/dist/plugins/pluginContent.js +87 -30
  202. package/dist/plugins/pluginHookApproval.d.ts +30 -0
  203. package/dist/plugins/pluginHookApproval.js +160 -0
  204. package/dist/plugins/pluginHookIntegrity.d.ts +69 -0
  205. package/dist/plugins/pluginHookIntegrity.js +361 -0
  206. package/dist/plugins/pluginInstaller.js +71 -12
  207. package/dist/plugins/pluginMcpApproval.d.ts +19 -0
  208. package/dist/plugins/pluginMcpApproval.js +110 -0
  209. package/dist/plugins/pluginMcpIntegrity.d.ts +21 -0
  210. package/dist/plugins/pluginMcpIntegrity.js +74 -0
  211. package/dist/plugins/types.d.ts +30 -0
  212. package/dist/plugins/varRewrite.d.ts +9 -5
  213. package/dist/plugins/varRewrite.js +26 -17
  214. package/dist/preset/index.d.ts +11 -8
  215. package/dist/preset/index.js +62 -203
  216. package/dist/product/define.js +9 -3
  217. package/dist/product/types.d.ts +0 -2
  218. package/dist/profile/activation.d.ts +36 -0
  219. package/dist/profile/activation.js +57 -0
  220. package/dist/profile/catalog-store.d.ts +77 -0
  221. package/dist/profile/catalog-store.js +346 -0
  222. package/dist/profile/catalog.d.ts +54 -0
  223. package/dist/profile/catalog.js +152 -0
  224. package/dist/profile/index.d.ts +7 -0
  225. package/dist/profile/index.js +7 -0
  226. package/dist/profile/requirements.d.ts +76 -0
  227. package/dist/profile/requirements.js +117 -0
  228. package/dist/profile/resolve.d.ts +11 -0
  229. package/dist/profile/resolve.js +41 -0
  230. package/dist/profile/store.d.ts +17 -0
  231. package/dist/profile/store.js +167 -0
  232. package/dist/profile/types.d.ts +321 -0
  233. package/dist/profile/types.js +104 -0
  234. package/dist/prompt/composer.d.ts +46 -7
  235. package/dist/prompt/composer.js +78 -48
  236. package/dist/prompt/instruction-scanner.d.ts +6 -5
  237. package/dist/prompt/instruction-scanner.js +8 -23
  238. package/dist/prompt/section-loader.d.ts +2 -2
  239. package/dist/prompt/section-loader.js +7 -4
  240. package/dist/prompt/sections/browser.md +10 -9
  241. package/dist/prompt/sections/harness-base.md +9 -0
  242. package/dist/protocol/chat-session-manager.d.ts +77 -3
  243. package/dist/protocol/chat-session-manager.js +194 -18
  244. package/dist/protocol/chat-session.d.ts +72 -9
  245. package/dist/protocol/chat-session.js +151 -16
  246. package/dist/protocol/client.d.ts +37 -4
  247. package/dist/protocol/client.js +118 -6
  248. package/dist/protocol/index.d.ts +2 -2
  249. package/dist/protocol/index.js +2 -2
  250. package/dist/protocol/mobile-remote-types.d.ts +406 -0
  251. package/dist/protocol/mobile-remote-types.js +1 -0
  252. package/dist/protocol/server.d.ts +152 -14
  253. package/dist/protocol/server.js +1574 -229
  254. package/dist/protocol/types.d.ts +182 -32
  255. package/dist/protocol/types.js +18 -0
  256. package/dist/run/ArtifactTracker.d.ts +6 -1
  257. package/dist/run/ArtifactTracker.js +29 -21
  258. package/dist/run/EngineRunner.d.ts +2 -0
  259. package/dist/run/EngineRunner.js +1 -0
  260. package/dist/run/RunManager.d.ts +26 -0
  261. package/dist/run/RunManager.js +82 -11
  262. package/dist/run/factory.d.ts +3 -0
  263. package/dist/run/factory.js +2 -0
  264. package/dist/runtime/safe-spawn.d.ts +6 -0
  265. package/dist/runtime/safe-spawn.js +8 -13
  266. package/dist/services/auto-dream.d.ts +13 -1
  267. package/dist/services/auto-dream.js +56 -8
  268. package/dist/services/dream-consolidation.d.ts +3 -0
  269. package/dist/services/dream-consolidation.js +14 -2
  270. package/dist/services/index.d.ts +1 -1
  271. package/dist/services/index.js +1 -1
  272. package/dist/services/memory-orchestrator.js +6 -2
  273. package/dist/services/oauth.d.ts +34 -10
  274. package/dist/services/oauth.js +236 -98
  275. package/dist/services/session-memory.d.ts +4 -4
  276. package/dist/services/session-memory.js +13 -10
  277. package/dist/session/memory.d.ts +26 -7
  278. package/dist/session/memory.js +79 -21
  279. package/dist/session/session-manager.d.ts +208 -25
  280. package/dist/session/session-manager.js +1232 -116
  281. package/dist/session/session-message.d.ts +22 -0
  282. package/dist/session/session-message.js +1 -0
  283. package/dist/session/transcript.d.ts +76 -6
  284. package/dist/session/transcript.js +278 -7
  285. package/dist/settings/feature-flags.d.ts +40 -0
  286. package/dist/settings/feature-flags.js +40 -0
  287. package/dist/settings/manager.d.ts +39 -1
  288. package/dist/settings/manager.js +102 -41
  289. package/dist/settings/migrate-config.js +4 -2
  290. package/dist/settings/schema.d.ts +511 -177
  291. package/dist/settings/schema.js +98 -25
  292. package/dist/skills/scanner.d.ts +6 -2
  293. package/dist/skills/scanner.js +160 -9
  294. package/dist/sources/adapter.d.ts +14 -0
  295. package/dist/sources/adapter.js +7 -0
  296. package/dist/sources/adapters/local-files.d.ts +10 -0
  297. package/dist/sources/adapters/local-files.js +127 -0
  298. package/dist/sources/adapters/mcp-resource.d.ts +17 -0
  299. package/dist/sources/adapters/mcp-resource.js +41 -0
  300. package/dist/sources/adapters/mock.d.ts +3 -0
  301. package/dist/sources/adapters/mock.js +29 -0
  302. package/dist/sources/binding.d.ts +6 -0
  303. package/dist/sources/binding.js +24 -0
  304. package/dist/sources/catalog.d.ts +6 -0
  305. package/dist/sources/catalog.js +64 -0
  306. package/dist/sources/context-summary.d.ts +8 -0
  307. package/dist/sources/context-summary.js +13 -0
  308. package/dist/sources/credential-status.d.ts +2 -0
  309. package/dist/sources/credential-status.js +13 -0
  310. package/dist/sources/index.d.ts +10 -0
  311. package/dist/sources/index.js +10 -0
  312. package/dist/sources/resolve.d.ts +28 -0
  313. package/dist/sources/resolve.js +47 -0
  314. package/dist/sources/truncate-utf8.d.ts +7 -0
  315. package/dist/sources/truncate-utf8.js +18 -0
  316. package/dist/sources/types.d.ts +71 -0
  317. package/dist/sources/types.js +26 -0
  318. package/dist/testing/fetch-stub.d.ts +32 -0
  319. package/dist/testing/fetch-stub.js +24 -0
  320. package/dist/themes/image.d.ts +18 -0
  321. package/dist/themes/image.js +117 -0
  322. package/dist/themes/index.d.ts +4 -0
  323. package/dist/themes/index.js +4 -0
  324. package/dist/themes/installer.d.ts +50 -0
  325. package/dist/themes/installer.js +290 -0
  326. package/dist/themes/manifest.d.ts +102 -0
  327. package/dist/themes/manifest.js +86 -0
  328. package/dist/themes/paths.d.ts +14 -0
  329. package/dist/themes/paths.js +33 -0
  330. package/dist/tool-system/browser-bridge.d.ts +53 -11
  331. package/dist/tool-system/browser-bridge.js +8 -9
  332. package/dist/tool-system/builtin/agent-heartbeat.d.ts +2 -2
  333. package/dist/tool-system/builtin/agent-heartbeat.js +20 -6
  334. package/dist/tool-system/builtin/agent-notifications.d.ts +127 -72
  335. package/dist/tool-system/builtin/agent-notifications.js +291 -101
  336. package/dist/tool-system/builtin/agent-output-file.js +1 -3
  337. package/dist/tool-system/builtin/agent-progress.d.ts +6 -0
  338. package/dist/tool-system/builtin/agent-progress.js +83 -0
  339. package/dist/tool-system/builtin/agent-registry.d.ts +38 -2
  340. package/dist/tool-system/builtin/agent-registry.js +178 -9
  341. package/dist/tool-system/builtin/agent-transcript-translator.js +1 -1
  342. package/dist/tool-system/builtin/agent.d.ts +2 -0
  343. package/dist/tool-system/builtin/agent.js +279 -34
  344. package/dist/tool-system/builtin/background-jobs.d.ts +63 -7
  345. package/dist/tool-system/builtin/background-jobs.js +111 -15
  346. package/dist/tool-system/builtin/background-work.d.ts +12 -1
  347. package/dist/tool-system/builtin/background-work.js +12 -1
  348. package/dist/tool-system/builtin/bash.d.ts +3 -5
  349. package/dist/tool-system/builtin/bash.js +14 -6
  350. package/dist/tool-system/builtin/browser-tools.d.ts +8 -5
  351. package/dist/tool-system/builtin/browser-tools.js +89 -23
  352. package/dist/tool-system/builtin/edit-model-catalog.d.ts +6 -0
  353. package/dist/tool-system/builtin/edit-model-catalog.js +172 -12
  354. package/dist/tool-system/builtin/edit.d.ts +2 -1
  355. package/dist/tool-system/builtin/edit.js +14 -10
  356. package/dist/tool-system/builtin/file-cache.d.ts +2 -0
  357. package/dist/tool-system/builtin/file-cache.js +4 -0
  358. package/dist/tool-system/builtin/generate-image.js +17 -10
  359. package/dist/tool-system/builtin/generate-video.d.ts +4 -0
  360. package/dist/tool-system/builtin/generate-video.js +164 -28
  361. package/dist/tool-system/builtin/glob.d.ts +2 -1
  362. package/dist/tool-system/builtin/glob.js +28 -3
  363. package/dist/tool-system/builtin/grep.d.ts +1 -0
  364. package/dist/tool-system/builtin/grep.js +82 -17
  365. package/dist/tool-system/builtin/image-uploader.js +7 -1
  366. package/dist/tool-system/builtin/index.d.ts +57 -18
  367. package/dist/tool-system/builtin/index.js +280 -167
  368. package/dist/tool-system/builtin/memory.d.ts +6 -0
  369. package/dist/tool-system/builtin/memory.js +36 -15
  370. package/dist/tool-system/builtin/panel.d.ts +9 -0
  371. package/dist/tool-system/builtin/panel.js +314 -0
  372. package/dist/tool-system/builtin/read.js +5 -1
  373. package/dist/tool-system/builtin/send-message-to-session.d.ts +6 -0
  374. package/dist/tool-system/builtin/send-message-to-session.js +67 -0
  375. package/dist/tool-system/builtin/sources.d.ts +8 -0
  376. package/dist/tool-system/builtin/sources.js +137 -0
  377. package/dist/tool-system/builtin/tool-search.js +7 -2
  378. package/dist/tool-system/builtin/update-automation-memory.js +2 -0
  379. package/dist/tool-system/builtin/video-providers.d.ts +12 -15
  380. package/dist/tool-system/builtin/video-providers.js +1 -0
  381. package/dist/tool-system/builtin/view-image.d.ts +2 -2
  382. package/dist/tool-system/builtin/web-fetch.js +60 -15
  383. package/dist/tool-system/builtin/web-search.js +1 -3
  384. package/dist/tool-system/builtin/write.d.ts +2 -1
  385. package/dist/tool-system/builtin/write.js +14 -4
  386. package/dist/tool-system/capability-module.d.ts +93 -0
  387. package/dist/tool-system/capability-module.js +53 -0
  388. package/dist/tool-system/context.d.ts +94 -24
  389. package/dist/tool-system/executor.js +99 -58
  390. package/dist/tool-system/external-tool-exposure.d.ts +60 -0
  391. package/dist/tool-system/external-tool-exposure.js +304 -0
  392. package/dist/tool-system/mcp-manager.d.ts +17 -1
  393. package/dist/tool-system/mcp-manager.js +72 -7
  394. package/dist/tool-system/mcp-tool-policy.d.ts +9 -0
  395. package/dist/tool-system/mcp-tool-policy.js +34 -0
  396. package/dist/tool-system/panel-bridge.d.ts +53 -0
  397. package/dist/tool-system/panel-bridge.js +1 -0
  398. package/dist/tool-system/path-policy.d.ts +19 -0
  399. package/dist/tool-system/path-policy.js +62 -1
  400. package/dist/tool-system/permission.d.ts +69 -3
  401. package/dist/tool-system/permission.js +429 -30
  402. package/dist/tool-system/registry.d.ts +15 -3
  403. package/dist/tool-system/registry.js +82 -40
  404. package/dist/tool-system/sandbox/index.js +3 -8
  405. package/dist/tool-system/sandbox/seatbelt.js +2 -6
  406. package/dist/tool-system/session-tool-host.d.ts +139 -0
  407. package/dist/tool-system/session-tool-host.js +167 -0
  408. package/dist/tool-system/testing/tool-registry-harness.d.ts +31 -0
  409. package/dist/tool-system/testing/tool-registry-harness.js +51 -0
  410. package/dist/tool-system/validation.d.ts +14 -7
  411. package/dist/tool-system/validation.js +701 -7
  412. package/dist/types.d.ts +201 -20
  413. package/dist/{cc-orchestrator → utils}/cwd-normalize.d.ts +1 -0
  414. package/dist/{cc-orchestrator → utils}/cwd-normalize.js +1 -0
  415. package/dist/utils/file-mutex.d.ts +65 -0
  416. package/dist/utils/file-mutex.js +145 -0
  417. package/dist/utils/json.d.ts +2 -4
  418. package/dist/utils/json.js +2 -4
  419. package/dist/utils/lockfile.d.ts +30 -1
  420. package/dist/utils/lockfile.js +2 -2
  421. package/dist/utils/secret-scrubber.d.ts +8 -0
  422. package/dist/utils/secret-scrubber.js +227 -0
  423. package/dist/utils/toolDisplay.js +1 -1
  424. package/package.json +20 -5
  425. package/THIRD_PARTY_NOTICES.md +0 -206
  426. package/dist/arena/arena.d.ts +0 -43
  427. package/dist/arena/arena.js +0 -333
  428. package/dist/arena/context/context-tools.d.ts +0 -16
  429. package/dist/arena/context/context-tools.js +0 -272
  430. package/dist/arena/context/within-root.d.ts +0 -7
  431. package/dist/arena/context/within-root.js +0 -15
  432. package/dist/arena/detect-mode.d.ts +0 -20
  433. package/dist/arena/detect-mode.js +0 -78
  434. package/dist/arena/digest-builder.d.ts +0 -25
  435. package/dist/arena/digest-builder.js +0 -120
  436. package/dist/arena/index.d.ts +0 -29
  437. package/dist/arena/index.js +0 -29
  438. package/dist/arena/iterate/convergence.d.ts +0 -25
  439. package/dist/arena/iterate/convergence.js +0 -103
  440. package/dist/arena/iterate/formats/index.d.ts +0 -22
  441. package/dist/arena/iterate/formats/index.js +0 -283
  442. package/dist/arena/iterate/index.d.ts +0 -11
  443. package/dist/arena/iterate/index.js +0 -9
  444. package/dist/arena/iterate/iterative-arena.d.ts +0 -23
  445. package/dist/arena/iterate/iterative-arena.js +0 -237
  446. package/dist/arena/iterate/parse.d.ts +0 -42
  447. package/dist/arena/iterate/parse.js +0 -123
  448. package/dist/arena/iterate/phases/argue.d.ts +0 -22
  449. package/dist/arena/iterate/phases/argue.js +0 -165
  450. package/dist/arena/iterate/phases/revise.d.ts +0 -16
  451. package/dist/arena/iterate/phases/revise.js +0 -62
  452. package/dist/arena/iterate/phases/tournament.d.ts +0 -34
  453. package/dist/arena/iterate/phases/tournament.js +0 -113
  454. package/dist/arena/iterate/tools/web-tools.d.ts +0 -13
  455. package/dist/arena/iterate/tools/web-tools.js +0 -54
  456. package/dist/arena/iterate/types.d.ts +0 -152
  457. package/dist/arena/iterate/types.js +0 -8
  458. package/dist/arena/ledger.d.ts +0 -47
  459. package/dist/arena/ledger.js +0 -159
  460. package/dist/arena/lenses/architecture.d.ts +0 -5
  461. package/dist/arena/lenses/architecture.js +0 -22
  462. package/dist/arena/lenses/engineering.d.ts +0 -5
  463. package/dist/arena/lenses/engineering.js +0 -22
  464. package/dist/arena/lenses/general.d.ts +0 -5
  465. package/dist/arena/lenses/general.js +0 -20
  466. package/dist/arena/lenses/index.d.ts +0 -16
  467. package/dist/arena/lenses/index.js +0 -47
  468. package/dist/arena/lenses/product.d.ts +0 -5
  469. package/dist/arena/lenses/product.js +0 -22
  470. package/dist/arena/model-presets.d.ts +0 -23
  471. package/dist/arena/model-presets.js +0 -44
  472. package/dist/arena/phases/adjudication.d.ts +0 -24
  473. package/dist/arena/phases/adjudication.js +0 -141
  474. package/dist/arena/phases/build-consensus.d.ts +0 -29
  475. package/dist/arena/phases/build-consensus.js +0 -83
  476. package/dist/arena/phases/claim-registry.d.ts +0 -26
  477. package/dist/arena/phases/claim-registry.js +0 -60
  478. package/dist/arena/phases/cross-review.d.ts +0 -45
  479. package/dist/arena/phases/cross-review.js +0 -218
  480. package/dist/arena/phases/debate-rounds.d.ts +0 -27
  481. package/dist/arena/phases/debate-rounds.js +0 -159
  482. package/dist/arena/phases/participant-research.d.ts +0 -38
  483. package/dist/arena/phases/participant-research.js +0 -314
  484. package/dist/arena/phases/planning-detail-expansion.d.ts +0 -38
  485. package/dist/arena/phases/planning-detail-expansion.js +0 -119
  486. package/dist/arena/planner.d.ts +0 -27
  487. package/dist/arena/planner.js +0 -311
  488. package/dist/arena/providers/docs.d.ts +0 -7
  489. package/dist/arena/providers/docs.js +0 -111
  490. package/dist/arena/providers/git.d.ts +0 -8
  491. package/dist/arena/providers/git.js +0 -174
  492. package/dist/arena/providers/index.d.ts +0 -32
  493. package/dist/arena/providers/index.js +0 -132
  494. package/dist/arena/providers/none.d.ts +0 -7
  495. package/dist/arena/providers/none.js +0 -11
  496. package/dist/arena/providers/repo.d.ts +0 -7
  497. package/dist/arena/providers/repo.js +0 -258
  498. package/dist/arena/render/session.d.ts +0 -17
  499. package/dist/arena/render/session.js +0 -190
  500. package/dist/arena/render/terminal.d.ts +0 -34
  501. package/dist/arena/render/terminal.js +0 -286
  502. package/dist/arena/strategies/discussion.d.ts +0 -25
  503. package/dist/arena/strategies/discussion.js +0 -143
  504. package/dist/arena/strategies/index.d.ts +0 -15
  505. package/dist/arena/strategies/index.js +0 -28
  506. package/dist/arena/strategies/language-wrapper.d.ts +0 -17
  507. package/dist/arena/strategies/language-wrapper.js +0 -102
  508. package/dist/arena/strategies/lens-wrapper.d.ts +0 -16
  509. package/dist/arena/strategies/lens-wrapper.js +0 -236
  510. package/dist/arena/strategies/planning.d.ts +0 -30
  511. package/dist/arena/strategies/planning.js +0 -225
  512. package/dist/arena/strategies/review.d.ts +0 -26
  513. package/dist/arena/strategies/review.js +0 -168
  514. package/dist/arena/strategies/utils.d.ts +0 -36
  515. package/dist/arena/strategies/utils.js +0 -603
  516. package/dist/arena/tools/selector.d.ts +0 -17
  517. package/dist/arena/tools/selector.js +0 -61
  518. package/dist/arena/transitions.d.ts +0 -53
  519. package/dist/arena/transitions.js +0 -97
  520. package/dist/arena/types.d.ts +0 -514
  521. package/dist/arena/types.js +0 -27
  522. package/dist/cc-orchestrator/agent-adapter.d.ts +0 -54
  523. package/dist/cc-orchestrator/agent-adapter.js +0 -143
  524. package/dist/cc-orchestrator/cc-capability.d.ts +0 -19
  525. package/dist/cc-orchestrator/cc-capability.js +0 -53
  526. package/dist/cc-orchestrator/codex-session-discovery.d.ts +0 -24
  527. package/dist/cc-orchestrator/codex-session-discovery.js +0 -191
  528. package/dist/cc-orchestrator/codex-session-history.d.ts +0 -38
  529. package/dist/cc-orchestrator/codex-session-history.js +0 -247
  530. package/dist/cc-orchestrator/external-agent-bindings.d.ts +0 -27
  531. package/dist/cc-orchestrator/external-agent-bindings.js +0 -150
  532. package/dist/cc-orchestrator/external-agent-changes.d.ts +0 -19
  533. package/dist/cc-orchestrator/external-agent-changes.js +0 -231
  534. package/dist/cc-orchestrator/external-agent-driver.d.ts +0 -19
  535. package/dist/cc-orchestrator/external-agent-driver.js +0 -284
  536. package/dist/cc-orchestrator/external-agent-session-store.d.ts +0 -23
  537. package/dist/cc-orchestrator/external-agent-session-store.js +0 -146
  538. package/dist/cc-orchestrator/index.d.ts +0 -8
  539. package/dist/cc-orchestrator/index.js +0 -8
  540. package/dist/cc-orchestrator/relevance-judge.d.ts +0 -15
  541. package/dist/cc-orchestrator/relevance-judge.js +0 -29
  542. package/dist/cc-orchestrator/session-discovery.d.ts +0 -46
  543. package/dist/cc-orchestrator/session-discovery.js +0 -125
  544. package/dist/cc-orchestrator/session-history.d.ts +0 -54
  545. package/dist/cc-orchestrator/session-history.js +0 -150
  546. package/dist/cron/cron-runtime.d.ts +0 -2
  547. package/dist/cron/cron-runtime.js +0 -2
  548. package/dist/cron/cron-store.d.ts +0 -2
  549. package/dist/cron/cron-store.js +0 -2
  550. package/dist/cron/scheduler.d.ts +0 -7
  551. package/dist/cron/scheduler.js +0 -7
  552. package/dist/engine/goal.js +0 -206
  553. package/dist/external-agents/config.d.ts +0 -2
  554. package/dist/external-agents/config.js +0 -15
  555. package/dist/external-agents/types.d.ts +0 -31
  556. package/dist/git/parse-log.d.ts +0 -13
  557. package/dist/git/parse-log.js +0 -21
  558. package/dist/git/utils.d.ts +0 -49
  559. package/dist/git/utils.js +0 -161
  560. package/dist/git/worktree/crud.d.ts +0 -69
  561. package/dist/git/worktree/crud.js +0 -206
  562. package/dist/git/worktree/diff.d.ts +0 -14
  563. package/dist/git/worktree/diff.js +0 -82
  564. package/dist/git/worktree/git-exec.d.ts +0 -7
  565. package/dist/git/worktree/git-exec.js +0 -51
  566. package/dist/git/worktree/index.d.ts +0 -5
  567. package/dist/git/worktree/index.js +0 -5
  568. package/dist/git/worktree/query.d.ts +0 -42
  569. package/dist/git/worktree/query.js +0 -121
  570. package/dist/git/worktree/slug.d.ts +0 -11
  571. package/dist/git/worktree/slug.js +0 -58
  572. package/dist/git/worktree.d.ts +0 -1
  573. package/dist/git/worktree.js +0 -5
  574. package/dist/lsp/client.d.ts +0 -41
  575. package/dist/lsp/client.js +0 -186
  576. package/dist/lsp/manager.d.ts +0 -40
  577. package/dist/lsp/manager.js +0 -155
  578. package/dist/lsp/root-path.d.ts +0 -9
  579. package/dist/lsp/root-path.js +0 -12
  580. package/dist/lsp/servers.d.ts +0 -16
  581. package/dist/lsp/servers.js +0 -60
  582. package/dist/prompt/sections/coding.md +0 -35
  583. package/dist/quota/credentials.d.ts +0 -3
  584. package/dist/quota/credentials.js +0 -80
  585. package/dist/quota/index.d.ts +0 -36
  586. package/dist/quota/index.js +0 -155
  587. package/dist/quota/types.d.ts +0 -48
  588. package/dist/quota/types.js +0 -13
  589. package/dist/review/review-prompt.d.ts +0 -28
  590. package/dist/review/review-prompt.js +0 -81
  591. package/dist/state.d.ts +0 -160
  592. package/dist/state.js +0 -267
  593. package/dist/tool-system/builtin/apply-patch/applier.d.ts +0 -26
  594. package/dist/tool-system/builtin/apply-patch/applier.js +0 -308
  595. package/dist/tool-system/builtin/apply-patch/backup-targets.d.ts +0 -10
  596. package/dist/tool-system/builtin/apply-patch/backup-targets.js +0 -30
  597. package/dist/tool-system/builtin/apply-patch/index.d.ts +0 -20
  598. package/dist/tool-system/builtin/apply-patch/index.js +0 -105
  599. package/dist/tool-system/builtin/apply-patch/parser.d.ts +0 -17
  600. package/dist/tool-system/builtin/apply-patch/parser.js +0 -212
  601. package/dist/tool-system/builtin/apply-patch/seek-sequence.d.ts +0 -18
  602. package/dist/tool-system/builtin/apply-patch/seek-sequence.js +0 -123
  603. package/dist/tool-system/builtin/apply-patch/types.d.ts +0 -49
  604. package/dist/tool-system/builtin/apply-patch/types.js +0 -13
  605. package/dist/tool-system/builtin/arena.d.ts +0 -31
  606. package/dist/tool-system/builtin/arena.js +0 -415
  607. package/dist/tool-system/builtin/brief.d.ts +0 -6
  608. package/dist/tool-system/builtin/brief.js +0 -41
  609. package/dist/tool-system/builtin/check-quota.d.ts +0 -15
  610. package/dist/tool-system/builtin/check-quota.js +0 -34
  611. package/dist/tool-system/builtin/drive-claude-code.d.ts +0 -51
  612. package/dist/tool-system/builtin/drive-claude-code.js +0 -698
  613. package/dist/tool-system/builtin/lsp.d.ts +0 -7
  614. package/dist/tool-system/builtin/lsp.js +0 -144
  615. package/dist/tool-system/builtin/notebook-edit.d.ts +0 -7
  616. package/dist/tool-system/builtin/notebook-edit.js +0 -127
  617. package/dist/tool-system/builtin/worktree.d.ts +0 -11
  618. package/dist/tool-system/builtin/worktree.js +0 -345
  619. /package/dist/{external-agents → links}/types.js +0 -0
  620. /package/dist/{engine/session-usage.d.ts → session/usage.d.ts} +0 -0
  621. /package/dist/{engine/session-usage.js → session/usage.js} +0 -0
package/dist/git/utils.js DELETED
@@ -1,161 +0,0 @@
1
- /**
2
- * Git utility functions for the git workflow commands.
3
- *
4
- * Every call goes through execFileSync with an argv array — no command
5
- * strings, no shell interpolation. Even arguments that look "safe" (already
6
- * quoted, hard-coded) are passed as separate argv tokens so a future caller
7
- * can't accidentally widen the attack surface by interpolating user input
8
- * into the string form.
9
- */
10
- import { execFileSync } from "node:child_process";
11
- import { realpathSync } from "node:fs";
12
- import { parseGitLog } from "./parse-log.js";
13
- import { resolveExecutable, resolveGit } from "../utils/exec.js";
14
- // Resolve git/gh through PATH×PATHEXT on Windows so a .cmd/.exe shim is found
15
- // (bare execFile doesn't walk PATHEXT). No-op on POSIX. See utils/exec.ts.
16
- const GH_BIN = resolveExecutable("gh");
17
- /** Run git with an argv array and return its trimmed stdout. */
18
- function git(cwd, args, timeoutMs = 10000) {
19
- return execFileSync(resolveGit(), args, { cwd, encoding: "utf-8", timeout: timeoutMs }).trim();
20
- }
21
- /** Run gh with an argv array and return its trimmed stdout. */
22
- function gh(cwd, args, timeoutMs = 10000) {
23
- return execFileSync(GH_BIN, args, { cwd, encoding: "utf-8", timeout: timeoutMs }).trim();
24
- }
25
- export function isGitRepo(cwd) {
26
- try {
27
- git(cwd, ["rev-parse", "--is-inside-work-tree"], 5000);
28
- return true;
29
- }
30
- catch {
31
- return false;
32
- }
33
- }
34
- /**
35
- * Resolve a directory to its PROJECT ROOT: the enclosing git repository's
36
- * top-level dir if `cwd` is inside a git repo, otherwise `cwd` unchanged.
37
- *
38
- * This is the project-boundary rule the desktop uses when adding/identifying a
39
- * project: picking a SUBDIRECTORY of a git repo should belong to that one repo
40
- * (its root), not spawn a separate project per subdir — mirrors how editors
41
- * (and Claude Code) treat a repo as one workspace. A non-git folder is its own
42
- * project (returned as-is). Never throws; on any git failure falls back to cwd.
43
- * Returns the git-reported toplevel (already absolute, forward-slashed on win).
44
- */
45
- export function resolveProjectRoot(cwd) {
46
- let realCwd = cwd;
47
- try {
48
- realCwd = realpathSync(cwd);
49
- }
50
- catch {
51
- // Non-existent paths are allowed to fall back unchanged below.
52
- }
53
- try {
54
- const top = git(realCwd, ["rev-parse", "--show-toplevel"], 5000);
55
- return top ? realpathSync(top) : realCwd;
56
- }
57
- catch {
58
- return realCwd;
59
- }
60
- }
61
- export function getCurrentBranch(cwd) {
62
- return git(cwd, ["branch", "--show-current"], 5000);
63
- }
64
- export function getGitStatus(cwd) {
65
- const raw = git(cwd, ["status", "--porcelain"], 10000);
66
- if (!raw)
67
- return [];
68
- return raw.split("\n").map((line) => ({
69
- status: line.slice(0, 2).trim(),
70
- path: line.slice(3),
71
- }));
72
- }
73
- export function getGitDiff(cwd, opts) {
74
- const args = ["diff", "--no-color"];
75
- if (opts?.staged)
76
- args.push("--staged");
77
- // `--` terminates option parsing so a file path starting with `-` can't
78
- // be re-interpreted as a flag.
79
- if (opts?.file)
80
- args.push("--", opts.file);
81
- return git(cwd, args, 30000);
82
- }
83
- export function getGitDiffStat(cwd, opts) {
84
- const args = ["diff", "--stat", "--no-color"];
85
- if (opts?.staged)
86
- args.push("--staged");
87
- if (opts?.file)
88
- args.push("--", opts.file);
89
- return git(cwd, args, 10000);
90
- }
91
- export function getGitLog(cwd, n = 10) {
92
- // `n` is numeric — coerce/validate to keep the argv clean even if a caller
93
- // hands us a string.
94
- const count = Number.isFinite(n) && n > 0 ? Math.floor(n) : 10;
95
- const raw = git(cwd, ["log", "--oneline", "--format=%H|%s|%an|%ci", `-${count}`], 10000);
96
- if (!raw)
97
- return [];
98
- return parseGitLog(raw);
99
- }
100
- export function getRemoteUrl(cwd) {
101
- try {
102
- return git(cwd, ["remote", "get-url", "origin"], 5000);
103
- }
104
- catch {
105
- return undefined;
106
- }
107
- }
108
- export function gitAdd(cwd, files = ["."]) {
109
- // `--` ensures a path starting with `-` cannot be parsed as a flag.
110
- // Each file is its own argv token, so spaces / quotes / non-ASCII pass
111
- // through verbatim with no shell parsing.
112
- execFileSync(resolveGit(), ["add", "--", ...files], { cwd, timeout: 10000 });
113
- }
114
- export function gitCommit(cwd, message) {
115
- // Pre-fix this used `JSON.stringify(message)` which only happened to be
116
- // safe because JSON.stringify covers most shell metacharacters — but it's
117
- // not real escaping. The argv form is.
118
- return execFileSync(resolveGit(), ["commit", "-m", message], {
119
- cwd,
120
- encoding: "utf-8",
121
- timeout: 30000,
122
- }).trim();
123
- }
124
- export function gitListBranches(cwd) {
125
- const raw = git(cwd, ["branch", "--no-color"], 5000);
126
- if (!raw)
127
- return [];
128
- return raw.split("\n").map((line) => ({
129
- current: line.startsWith("*"),
130
- name: line.replace(/^\*?\s+/, "").trim(),
131
- }));
132
- }
133
- export function gitCheckout(cwd, branch, create = false) {
134
- // argv form defeats shell injection. We additionally reject branch names
135
- // that start with `-` so a value like `--orphan` can't slip through git's
136
- // own option parser (the trailing `--` trick doesn't help on checkout:
137
- // git interprets it as the option's value, not as an option terminator).
138
- if (typeof branch !== "string" || branch.length === 0) {
139
- throw new Error("branch must be a non-empty string");
140
- }
141
- if (branch.startsWith("-")) {
142
- throw new Error(`refusing branch name that starts with '-': ${branch}`);
143
- }
144
- const args = create ? ["checkout", "-b", branch] : ["checkout", branch];
145
- execFileSync(resolveGit(), args, { cwd, timeout: 10000 });
146
- }
147
- export function ghAvailable() {
148
- try {
149
- execFileSync(GH_BIN, ["--version"], { encoding: "utf-8", timeout: 5000 });
150
- return true;
151
- }
152
- catch {
153
- return false;
154
- }
155
- }
156
- export function ghPrComments(cwd, prUrl) {
157
- // Pre-fix `gh pr view ${prUrl}` interpolated the URL directly. argv form
158
- // means even a value like "$(rm -rf ~)" is sent to gh as a literal
159
- // positional argument (which gh will then reject as a bad PR URL).
160
- return gh(cwd, ["pr", "view", prUrl, "--comments", "--json", "comments", "-q", ".comments[].body"], 30000);
161
- }
@@ -1,69 +0,0 @@
1
- import type { SandboxBackend } from "../../tool-system/sandbox/index.js";
2
- export interface WorktreeSession {
3
- originalCwd: string;
4
- worktreePath: string;
5
- worktreeName: string;
6
- worktreeBranch: string;
7
- originalBranch?: string;
8
- sessionId: string;
9
- createdAt: number;
10
- }
11
- /** Per-platform setup/cleanup scripts (a project's localEnvironment). */
12
- export interface PlatformScripts {
13
- default?: string;
14
- macos?: string;
15
- linux?: string;
16
- windows?: string;
17
- }
18
- export interface CreateWorktreeOptions {
19
- prefix?: string;
20
- }
21
- /**
22
- * Pick the setup/cleanup script for the running platform, falling back to
23
- * `default`. Empty/whitespace-only scripts are treated as absent so a project
24
- * can leave a platform key blank without spawning an empty shell. `platform`
25
- * defaults to `process.platform` so callers usually omit it; tests pass a
26
- * fixed value.
27
- */
28
- export declare function selectPlatformScript(scripts: PlatformScripts | undefined, platform?: NodeJS.Platform): string | undefined;
29
- /**
30
- * Create an isolated git worktree for an agent session.
31
- */
32
- export declare function createWorktree(cwd: string, slug: string, sessionId: string, opts?: CreateWorktreeOptions): Promise<WorktreeSession>;
33
- export interface WorktreeSetupResult {
34
- /** True if no setup script was configured for this platform (nothing ran). */
35
- skipped: boolean;
36
- /** True if a script ran and exited 0. */
37
- ok: boolean;
38
- /** Combined stdout/stderr, for surfacing to the user on failure. */
39
- output: string;
40
- /** Exit code when a script ran; undefined when skipped. */
41
- exitCode?: number | null;
42
- }
43
- /**
44
- * Run a project's `localEnvironment.setupScripts` once, in the freshly-created
45
- * worktree's root, right after `git worktree add`.
46
- */
47
- export declare function runWorktreeSetup(worktreePath: string, script: string | undefined, opts?: {
48
- sandbox?: SandboxBackend;
49
- shellEnv?: Record<string, string>;
50
- timeoutMs?: number;
51
- signal?: AbortSignal;
52
- }): Promise<WorktreeSetupResult>;
53
- export interface RemoveWorktreeResult {
54
- /** True once `git worktree remove` completed and the directory is gone. */
55
- dirRemoved: boolean;
56
- /** The branch targeted for deletion when removeBranch=true. */
57
- branch?: string;
58
- /** True when removeBranch=true and branch deletion completed. */
59
- branchDeleted?: boolean;
60
- /** Non-empty when the worktree directory is gone but branch deletion failed. */
61
- branchError?: string;
62
- }
63
- export interface RemoveWorktreeOptions {
64
- prefix?: string;
65
- }
66
- /**
67
- * Remove a worktree and optionally its branch.
68
- */
69
- export declare function removeWorktree(worktreePath: string, removeBranch?: boolean, opts?: RemoveWorktreeOptions): RemoveWorktreeResult;
@@ -1,206 +0,0 @@
1
- import { existsSync, lstatSync, mkdirSync, readdirSync, symlinkSync } from "node:fs";
2
- import { dirname, join, resolve } from "node:path";
3
- import { safeSpawnShell } from "../../runtime/safe-spawn.js";
4
- import { buildSandboxEnv, defaultShellBinary, mergeShellEnv } from "../../runtime/spawn-common.js";
5
- import { execGit, execGitSync, gitErrorMessage } from "./git-exec.js";
6
- import { assertBranchNotCheckedOut, currentBranch, findGitRoot } from "./query.js";
7
- import { applyPrefix, isManagedWorktreeBranch, validateWorktreeSlug } from "./slug.js";
8
- /**
9
- * Pick the setup/cleanup script for the running platform, falling back to
10
- * `default`. Empty/whitespace-only scripts are treated as absent so a project
11
- * can leave a platform key blank without spawning an empty shell. `platform`
12
- * defaults to `process.platform` so callers usually omit it; tests pass a
13
- * fixed value.
14
- */
15
- export function selectPlatformScript(scripts, platform = process.platform) {
16
- if (!scripts)
17
- return undefined;
18
- const key = platform === "darwin" ? "macos" : platform === "win32" ? "windows" : "linux";
19
- // A blank platform key shouldn't shadow a real `default` — fall through.
20
- const platformScript = scripts[key]?.trim() ? scripts[key] : undefined;
21
- const candidate = platformScript ?? scripts.default;
22
- const trimmed = candidate?.trim();
23
- return trimmed ? candidate : undefined;
24
- }
25
- /**
26
- * Create an isolated git worktree for an agent session.
27
- */
28
- export async function createWorktree(cwd, slug, sessionId, opts = {}) {
29
- validateWorktreeSlug(slug);
30
- const gitRoot = await findGitRoot(cwd);
31
- const branchName = applyPrefix(opts.prefix, slug, sessionId);
32
- const worktreePath = resolve(gitRoot, "..", `.worktrees/${slug}-${sessionId.slice(0, 8)}`);
33
- await assertBranchNotCheckedOut(gitRoot, branchName);
34
- const originalBranch = await currentBranch(gitRoot);
35
- // The argv form keeps branchName/worktreePath as literal positional
36
- // arguments even if a future caller bypasses validateWorktreeSlug.
37
- await execGit(gitRoot, ["worktree", "add", "-b", branchName, worktreePath], 30000);
38
- // Symlink large directories to avoid disk bloat.
39
- symlinkLargeDirectories(gitRoot, worktreePath);
40
- return {
41
- originalCwd: cwd,
42
- worktreePath,
43
- worktreeName: slug,
44
- worktreeBranch: branchName,
45
- originalBranch,
46
- sessionId,
47
- createdAt: Date.now(),
48
- };
49
- }
50
- /**
51
- * Run a project's `localEnvironment.setupScripts` once, in the freshly-created
52
- * worktree's root, right after `git worktree add`.
53
- */
54
- export async function runWorktreeSetup(worktreePath, script, opts = {}) {
55
- const trimmed = script?.trim();
56
- if (!trimmed)
57
- return { skipped: true, ok: true, output: "" };
58
- const shell = defaultShellBinary();
59
- const backend = opts.sandbox;
60
- const baseEnv = backend && backend.name !== "off" ? buildSandboxEnv() : { ...process.env };
61
- const env = mergeShellEnv(baseEnv, opts.shellEnv);
62
- const result = await safeSpawnShell(trimmed, {
63
- cwd: worktreePath,
64
- env,
65
- timeoutMs: opts.timeoutMs ?? 120_000,
66
- maxOutputBytes: 1024 * 1024,
67
- sandbox: backend,
68
- shell,
69
- signal: opts.signal,
70
- });
71
- const parts = [];
72
- if (result.stdout)
73
- parts.push(result.stdout);
74
- if (result.stderr)
75
- parts.push(result.stderr);
76
- const output = parts.join("\n").trim();
77
- if (result.aborted)
78
- return { skipped: false, ok: false, output: output || "setup aborted" };
79
- if (result.timedOut)
80
- return { skipped: false, ok: false, output: output || "setup timed out" };
81
- if (result.spawnFailed) {
82
- return { skipped: false, ok: false, output: result.error ?? "failed to spawn setup script" };
83
- }
84
- return { skipped: false, ok: result.exitCode === 0, output, exitCode: result.exitCode };
85
- }
86
- /**
87
- * Remove a worktree and optionally its branch.
88
- */
89
- export function removeWorktree(worktreePath, removeBranch = false, opts = {}) {
90
- // The MAIN repo root, not the worktree's own toplevel. `git rev-parse
91
- // --show-toplevel` from inside a worktree returns the worktree path, which
92
- // is about to be deleted; the branch-delete must run from the main repo,
93
- // which outlives the worktree. Derive it from the common git dir.
94
- let mainRoot;
95
- try {
96
- const commonDir = execGitSync(worktreePath, ["rev-parse", "--path-format=absolute", "--git-common-dir"], 5000).trim();
97
- mainRoot = dirname(commonDir);
98
- }
99
- catch (err) {
100
- throw new Error(`failed to inspect worktree ${worktreePath}: ${gitErrorMessage(err)}`, {
101
- cause: err,
102
- });
103
- }
104
- // Capture the worktree's branch BEFORE removing the worktree — afterwards
105
- // the directory is gone and `git branch --show-current` in it would fail.
106
- let branch = "";
107
- if (removeBranch) {
108
- try {
109
- branch = execGitSync(worktreePath, ["branch", "--show-current"], 5000).trim();
110
- }
111
- catch (err) {
112
- throw new Error(`failed to determine branch for worktree ${worktreePath}: ${gitErrorMessage(err)}`, { cause: err });
113
- }
114
- if (!branch) {
115
- throw new Error(`failed to determine branch for worktree ${worktreePath}`);
116
- }
117
- if (!isManagedWorktreeBranch(branch, opts.prefix)) {
118
- throw new Error(`refusing to delete non-CodeShell worktree branch ${branch}`);
119
- }
120
- }
121
- try {
122
- execGitSync(mainRoot, ["worktree", "remove", worktreePath, "--force"], 30000);
123
- }
124
- catch (err) {
125
- throw new Error(`failed to remove worktree ${worktreePath}: ${gitErrorMessage(err)}`, {
126
- cause: err,
127
- });
128
- }
129
- if (removeBranch) {
130
- try {
131
- execGitSync(mainRoot, ["branch", "-D", branch], 10000);
132
- }
133
- catch (err) {
134
- return {
135
- dirRemoved: true,
136
- branch,
137
- branchDeleted: false,
138
- branchError: gitErrorMessage(err),
139
- };
140
- }
141
- }
142
- return removeBranch ? { dirRemoved: true, branch, branchDeleted: true } : { dirRemoved: true };
143
- }
144
- /**
145
- * Symlink large directories (node_modules, .venv, etc.) from main repo to
146
- * worktree. Also links each monorepo workspace package's private
147
- * `node_modules` (e.g. `packages/desktop/node_modules`, where bun keeps
148
- * un-hoisted deps like electron) so a fresh worktree can build/run the whole
149
- * workspace, not just the packages whose deps happen to be hoisted to the root.
150
- */
151
- function symlinkLargeDirectories(sourceRoot, worktreePath) {
152
- const largeDirs = ["node_modules", ".venv", "vendor", ".pnpm-store"];
153
- for (const dir of largeDirs) {
154
- linkDir(join(sourceRoot, dir), join(worktreePath, dir));
155
- }
156
- // Monorepo workspace packages keep private node_modules that are NOT hoisted
157
- // to the root. Link `<pkg>/node_modules` for each package under `packages/`.
158
- const packagesDir = join(sourceRoot, "packages");
159
- if (!dirExists(packagesDir))
160
- return;
161
- let pkgNames;
162
- try {
163
- pkgNames = readdirSync(packagesDir);
164
- }
165
- catch {
166
- return;
167
- }
168
- for (const pkg of pkgNames) {
169
- const source = join(packagesDir, pkg, "node_modules");
170
- if (!dirExists(source))
171
- continue;
172
- const targetPkgDir = join(worktreePath, "packages", pkg);
173
- // The worktree only has package dirs that exist in this branch's tree; a
174
- // package present in the main repo but not checked out here is skipped.
175
- if (!dirExists(targetPkgDir)) {
176
- try {
177
- mkdirSync(targetPkgDir, { recursive: true });
178
- }
179
- catch {
180
- continue;
181
- }
182
- }
183
- linkDir(source, join(targetPkgDir, "node_modules"));
184
- }
185
- }
186
- function dirExists(path) {
187
- try {
188
- return lstatSync(path).isDirectory();
189
- }
190
- catch {
191
- return false;
192
- }
193
- }
194
- function linkDir(source, target) {
195
- // Windows directory symlinks need admin/Developer Mode and throw EPERM for a
196
- // normal user; NTFS junctions don't and behave the same for our purpose.
197
- const linkType = process.platform === "win32" ? "junction" : "dir";
198
- if (dirExists(source) && !existsSync(target)) {
199
- try {
200
- symlinkSync(source, target, linkType);
201
- }
202
- catch {
203
- // Symlink/junction might fail on some systems — non-fatal.
204
- }
205
- }
206
- }
@@ -1,14 +0,0 @@
1
- export interface WorktreeDiffSummary {
2
- /** Best-effort base used for the branch comparison, usually main/master. */
3
- baseRef?: string;
4
- /** Unique files changed either by commits ahead of base or by uncommitted changes. */
5
- changedFiles: number;
6
- /** Commits reachable from HEAD but not from baseRef. */
7
- aheadCommits: number;
8
- /** True when `git status --porcelain` reports local changes. */
9
- hasUncommittedChanges: boolean;
10
- }
11
- export declare function getWorktreeDiff(worktreePath: string, baseRef?: string): Promise<WorktreeDiffSummary>;
12
- export declare function worktreeHasUncommittedChanges(worktreePath: string): Promise<boolean>;
13
- export declare function worktreeHasUncommittedOrAheadChanges(worktreePath: string, baseRef?: string): Promise<boolean>;
14
- export declare function findComparisonBaseRef(cwd: string): Promise<string | undefined>;
@@ -1,82 +0,0 @@
1
- import { gitOutput } from "./git-exec.js";
2
- export async function getWorktreeDiff(worktreePath, baseRef) {
3
- const comparisonBase = baseRef && (await commitRefExists(worktreePath, baseRef))
4
- ? baseRef
5
- : await findComparisonBaseRef(worktreePath);
6
- return diffSummary(worktreePath, comparisonBase);
7
- }
8
- export async function worktreeHasUncommittedChanges(worktreePath) {
9
- const out = await gitOutput(worktreePath, ["status", "--porcelain"], 10000);
10
- return (out?.trim().length ?? 0) > 0;
11
- }
12
- export async function worktreeHasUncommittedOrAheadChanges(worktreePath, baseRef) {
13
- if (await worktreeHasUncommittedChanges(worktreePath))
14
- return true;
15
- const comparisonBase = baseRef && (await commitRefExists(worktreePath, baseRef))
16
- ? baseRef
17
- : await findComparisonBaseRef(worktreePath);
18
- return comparisonBase ? (await aheadCommitCount(worktreePath, comparisonBase)) > 0 : false;
19
- }
20
- export async function findComparisonBaseRef(cwd) {
21
- for (const ref of ["main", "master", "origin/main", "origin/master"]) {
22
- if (await commitRefExists(cwd, ref))
23
- return ref;
24
- }
25
- return undefined;
26
- }
27
- async function commitRefExists(cwd, ref) {
28
- const out = await gitOutput(cwd, ["rev-parse", "--verify", "--quiet", `${ref}^{commit}`], 5000);
29
- return out !== undefined;
30
- }
31
- async function diffSummary(cwd, baseRef) {
32
- const [dirtyFiles, committedFiles, aheadCommits] = await Promise.all([
33
- statusFileSet(cwd),
34
- baseRef ? changedFilesSinceBase(cwd, baseRef) : Promise.resolve(new Set()),
35
- baseRef ? aheadCommitCount(cwd, baseRef) : Promise.resolve(0),
36
- ]);
37
- const changedFiles = new Set([...dirtyFiles, ...committedFiles]);
38
- return {
39
- ...(baseRef ? { baseRef } : {}),
40
- changedFiles: changedFiles.size,
41
- aheadCommits,
42
- hasUncommittedChanges: dirtyFiles.size > 0,
43
- };
44
- }
45
- async function changedFilesSinceBase(cwd, baseRef) {
46
- const out = await gitOutput(cwd, ["diff", "--name-only", `${baseRef}...HEAD`]);
47
- const raw = out ?? (await gitOutput(cwd, ["diff", "--name-only", `${baseRef}..HEAD`])) ?? "";
48
- return new Set(raw
49
- .split("\n")
50
- .map((line) => line.trim())
51
- .filter(Boolean));
52
- }
53
- async function aheadCommitCount(cwd, baseRef) {
54
- const out = await gitOutput(cwd, ["rev-list", "--count", `${baseRef}..HEAD`]);
55
- const n = Number.parseInt(out?.trim() ?? "0", 10);
56
- return Number.isFinite(n) ? n : 0;
57
- }
58
- async function statusFileSet(cwd) {
59
- const raw = (await gitOutput(cwd, ["status", "--porcelain=v1"])) ?? "";
60
- const files = new Set();
61
- for (const line of raw.split("\n")) {
62
- if (!line.trim())
63
- continue;
64
- const path = line.slice(3).trim();
65
- if (!path)
66
- continue;
67
- const renameTarget = path.includes(" -> ") ? path.split(" -> ").at(-1) : path;
68
- if (renameTarget)
69
- files.add(unquoteGitPath(renameTarget));
70
- }
71
- return files;
72
- }
73
- function unquoteGitPath(path) {
74
- if (!path.startsWith('"') || !path.endsWith('"'))
75
- return path;
76
- try {
77
- return JSON.parse(path);
78
- }
79
- catch {
80
- return path.slice(1, -1);
81
- }
82
- }
@@ -1,7 +0,0 @@
1
- export declare const GIT_BIN: string;
2
- export declare function execGit(cwd: string, args: string[], timeout?: number): Promise<string>;
3
- export declare function execGitSync(cwd: string, args: string[], timeout?: number): string;
4
- export declare function gitOutput(cwd: string, args: string[], timeout?: number): Promise<string | undefined>;
5
- export declare function gitOutputSync(cwd: string, args: string[], timeout?: number): string | undefined;
6
- export declare function gitErrorMessage(err: unknown): string;
7
- export declare function normalizeBranchName(branch: string): string;
@@ -1,51 +0,0 @@
1
- import { execFile, execFileSync } from "node:child_process";
2
- import { promisify } from "node:util";
3
- import { resolveExecutable } from "../../utils/exec.js";
4
- // git resolved via PATH×PATHEXT on Windows (.cmd/.exe shim); no-op on POSIX.
5
- export const GIT_BIN = resolveExecutable("git");
6
- const execFileAsync = promisify(execFile);
7
- export async function execGit(cwd, args, timeout = 10000) {
8
- const { stdout } = await execFileAsync(GIT_BIN, args, {
9
- cwd,
10
- encoding: "utf-8",
11
- timeout,
12
- });
13
- return stdout;
14
- }
15
- export function execGitSync(cwd, args, timeout = 10000) {
16
- return execFileSync(GIT_BIN, args, {
17
- cwd,
18
- encoding: "utf-8",
19
- timeout,
20
- });
21
- }
22
- export async function gitOutput(cwd, args, timeout = 10000) {
23
- try {
24
- return await execGit(cwd, args, timeout);
25
- }
26
- catch {
27
- return undefined;
28
- }
29
- }
30
- export function gitOutputSync(cwd, args, timeout = 10000) {
31
- try {
32
- return execGitSync(cwd, args, timeout);
33
- }
34
- catch {
35
- return undefined;
36
- }
37
- }
38
- export function gitErrorMessage(err) {
39
- const stderr = err.stderr;
40
- if (Buffer.isBuffer(stderr)) {
41
- const msg = stderr.toString("utf-8").trim();
42
- if (msg)
43
- return msg;
44
- }
45
- if (typeof stderr === "string" && stderr.trim())
46
- return stderr.trim();
47
- return err instanceof Error ? err.message : String(err);
48
- }
49
- export function normalizeBranchName(branch) {
50
- return branch.replace(/^refs\/heads\//, "");
51
- }
@@ -1,5 +0,0 @@
1
- export * from "./git-exec.js";
2
- export * from "./slug.js";
3
- export * from "./diff.js";
4
- export * from "./query.js";
5
- export * from "./crud.js";
@@ -1,5 +0,0 @@
1
- export * from "./git-exec.js";
2
- export * from "./slug.js";
3
- export * from "./diff.js";
4
- export * from "./query.js";
5
- export * from "./crud.js";
@@ -1,42 +0,0 @@
1
- import type { SessionWorkspace } from "../../types.js";
2
- import { type WorktreeDiffSummary } from "./diff.js";
3
- export interface WorktreeWorkspaceOwner {
4
- sessionId: string;
5
- workspace?: SessionWorkspace;
6
- }
7
- export interface ListWorktreesFastOptions {
8
- currentSessionId?: string;
9
- workspaceOwners?: WorktreeWorkspaceOwner[];
10
- owners?: WorktreeWorkspaceOwner[];
11
- prefix?: string;
12
- }
13
- export interface ListWorktreesOptions extends ListWorktreesFastOptions {
14
- includeDiffSummary?: boolean;
15
- }
16
- export interface WorktreeInfo {
17
- path: string;
18
- branch: string;
19
- head: string;
20
- isMain?: boolean;
21
- isManaged?: boolean;
22
- diff?: WorktreeDiffSummary;
23
- occupiedBySessionIds?: string[];
24
- occupiedByOtherSession?: boolean;
25
- }
26
- /**
27
- * Find the canonical git root (resolves worktree -> main repo).
28
- */
29
- export declare function findGitRoot(cwd: string): Promise<string>;
30
- export declare function findMainWorktreeRoot(cwd: string): Promise<string>;
31
- export declare function findWorktreeForBranch(cwd: string, branch: string): Promise<string | undefined>;
32
- export declare function assertBranchNotCheckedOut(cwd: string, branch: string): Promise<void>;
33
- export declare function branchExists(cwd: string, branch: string): Promise<boolean>;
34
- export declare function isGitWorktreeRoot(cwd: string): Promise<boolean>;
35
- export declare function currentBranch(cwd: string): Promise<string | undefined>;
36
- export declare function listWorktreesFast(cwd: string, opts?: ListWorktreesFastOptions): Promise<WorktreeInfo[]>;
37
- /**
38
- * List active worktrees. Kept for internal/test compatibility; use
39
- * listWorktreesFast for UI lists that should not block on diff work.
40
- */
41
- export declare function listWorktrees(cwd: string, opts?: ListWorktreesOptions): Promise<WorktreeInfo[]>;
42
- export declare function ownersForWorktree(path: string, owners: WorktreeWorkspaceOwner[]): string[];