@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
@@ -1,308 +0,0 @@
1
- // Atomic patch applier — dry-runs all hunks, then commits all-or-nothing.
2
- //
3
- // This deliberately diverges from codex-rs/apply-patch which applies hunks
4
- // one-by-one and leaves partial changes on disk if a later hunk fails (see
5
- // fixture 015_failure_after_partial_success_leaves_changes for codex's
6
- // behavior). We treat the patch as a transaction: either every hunk applies
7
- // or none do. Set `allowPartialOnCommit` to mimic codex semantics for the
8
- // rare case where you want it.
9
- //
10
- // Algorithm uses code adapted from codex-rs/apply-patch/src/lib.rs (Apache-2.0)
11
- // for the chunk-replacement phase (compute_replacements, apply_replacements).
12
- import { mkdir, readFile, stat, unlink, writeFile } from "node:fs/promises";
13
- import { existsSync, realpathSync } from "node:fs";
14
- import { dirname, isAbsolute, resolve, sep } from "node:path";
15
- import { seekSequence } from "./seek-sequence.js";
16
- import { detectEol, toLf, applyEol } from "../eol.js";
17
- /**
18
- * Plan and commit the patch atomically.
19
- *
20
- * Phase 1 (plan): walk every hunk, compute the resulting file content in
21
- * memory. Throws if any hunk cannot be applied; nothing is written.
22
- *
23
- * Phase 2 (commit): write all planned changes. If any write fails, restore
24
- * from the in-memory snapshot captured in phase 1 and rethrow.
25
- */
26
- export async function applyPatch(hunks, options) {
27
- if (hunks.length === 0) {
28
- throw new Error("No files were modified.");
29
- }
30
- const planned = await planHunks(hunks, options.cwd);
31
- return commitPlanned(planned, !!options.allowPartialOnCommit);
32
- }
33
- async function planHunks(hunks, cwd) {
34
- const set = {
35
- byPath: new Map(),
36
- added: [],
37
- modified: [],
38
- deleted: [],
39
- };
40
- function schedule(path, change) {
41
- if (set.byPath.has(path)) {
42
- throw new Error(`Patch references ${path} more than once. Combine the operations into a single hunk.`);
43
- }
44
- set.byPath.set(path, change);
45
- }
46
- for (const hunk of hunks) {
47
- const original = hunk.path;
48
- const sourcePath = resolveAgainst(original, cwd);
49
- if (hunk.kind === "add") {
50
- const existed = await readIfExists(sourcePath);
51
- schedule(sourcePath, {
52
- path: sourcePath,
53
- newContent: hunk.contents,
54
- originalContent: existed,
55
- });
56
- set.added.push(original);
57
- continue;
58
- }
59
- if (hunk.kind === "delete") {
60
- const stats = await safeStat(sourcePath);
61
- if (!stats)
62
- throw new Error(`Failed to delete file: ${sourcePath} not found`);
63
- if (stats.isDirectory()) {
64
- throw new Error(`Failed to delete file: ${sourcePath} is a directory`);
65
- }
66
- const content = await readFile(sourcePath, "utf-8");
67
- schedule(sourcePath, {
68
- path: sourcePath,
69
- newContent: null,
70
- originalContent: content,
71
- });
72
- set.deleted.push(original);
73
- continue;
74
- }
75
- // Update (with optional rename).
76
- const stats = await safeStat(sourcePath);
77
- if (!stats) {
78
- throw new Error(`Failed to update file: ${sourcePath} does not exist`);
79
- }
80
- const originalRaw = await readFile(sourcePath, "utf-8");
81
- // CRLF handling: patch context lines are LF (the model emits LF). Match in
82
- // LF space, then write back in the file's original EOL so a CRLF file isn't
83
- // silently converted to LF (which would diff the whole file). originalText
84
- // (LF) is what we compare; originalRaw is preserved for rollback so a
85
- // restore writes back the exact bytes. See eol.ts.
86
- const eol = detectEol(originalRaw);
87
- const originalText = toLf(originalRaw);
88
- const newText = applyEol(applyChunksToText(originalText, hunk.chunks, sourcePath), eol);
89
- if (hunk.movePath !== undefined) {
90
- const destPath = resolveAgainst(hunk.movePath, cwd);
91
- if (destPath === sourcePath) {
92
- // Rename to self → degenerate update.
93
- schedule(sourcePath, {
94
- path: sourcePath,
95
- newContent: newText,
96
- originalContent: originalRaw,
97
- });
98
- }
99
- else {
100
- const destOriginal = await readIfExists(destPath);
101
- schedule(sourcePath, {
102
- path: sourcePath,
103
- newContent: null,
104
- originalContent: originalRaw,
105
- });
106
- schedule(destPath, {
107
- path: destPath,
108
- newContent: newText,
109
- originalContent: destOriginal,
110
- });
111
- }
112
- set.modified.push(original);
113
- }
114
- else {
115
- schedule(sourcePath, {
116
- path: sourcePath,
117
- newContent: newText,
118
- originalContent: originalRaw,
119
- });
120
- set.modified.push(original);
121
- }
122
- }
123
- return set;
124
- }
125
- /** Apply the chunk list to a file's text and return the new text. */
126
- function applyChunksToText(original, chunks, pathForError) {
127
- // split('\n') leaves an empty trailing element when the file ends with \n;
128
- // drop it so line indices match standard diff semantics. We re-add the
129
- // trailing newline at the end.
130
- const lines = original.split("\n");
131
- if (lines.length > 0 && lines[lines.length - 1] === "") {
132
- lines.pop();
133
- }
134
- // Each replacement: [startIndex, oldLen, newLines]
135
- const replacements = [];
136
- let lineIndex = 0;
137
- for (const chunk of chunks) {
138
- if (chunk.changeContext !== undefined) {
139
- const found = seekSequence(lines, [chunk.changeContext], lineIndex, false);
140
- if (found === null) {
141
- throw new Error(`Failed to find context '${chunk.changeContext}' in ${pathForError}`);
142
- }
143
- lineIndex = found + 1;
144
- }
145
- if (chunk.oldLines.length === 0) {
146
- // Pure addition — append at end. Mirrors codex behavior: even when the
147
- // chunk has a `@@ <context>` anchor, pure additions are inserted at
148
- // EOF rather than near the anchor. Models should include at least one
149
- // `-` or ` ` line if they want positional insertion.
150
- const insertionIdx = lines.length > 0 && lines[lines.length - 1] === ""
151
- ? lines.length - 1
152
- : lines.length;
153
- replacements.push([insertionIdx, 0, [...chunk.newLines]]);
154
- continue;
155
- }
156
- let pattern = chunk.oldLines;
157
- let newSlice = chunk.newLines;
158
- let found = seekSequence(lines, pattern, lineIndex, chunk.isEndOfFile);
159
- if (found === null && pattern.length > 0 && pattern[pattern.length - 1] === "") {
160
- // Retry without trailing empty sentinel that represents the file's final newline.
161
- pattern = pattern.slice(0, -1);
162
- if (newSlice.length > 0 && newSlice[newSlice.length - 1] === "") {
163
- newSlice = newSlice.slice(0, -1);
164
- }
165
- found = seekSequence(lines, pattern, lineIndex, chunk.isEndOfFile);
166
- }
167
- if (found === null) {
168
- throw new Error(`Failed to find expected lines in ${pathForError}:\n${chunk.oldLines.join("\n")}`);
169
- }
170
- replacements.push([found, pattern.length, [...newSlice]]);
171
- lineIndex = found + pattern.length;
172
- }
173
- // Apply in descending start-index order so indices stay valid.
174
- replacements.sort((a, b) => a[0] - b[0]);
175
- const working = lines.slice();
176
- for (let i = replacements.length - 1; i >= 0; i--) {
177
- const [start, oldLen, newSeg] = replacements[i];
178
- working.splice(start, oldLen, ...newSeg);
179
- }
180
- // Always end with a trailing newline.
181
- if (working.length === 0 || working[working.length - 1] !== "") {
182
- working.push("");
183
- }
184
- return working.join("\n");
185
- }
186
- // ─── Phase 2: commit ──────────────────────────────────────────────
187
- async function commitPlanned(set, allowPartial) {
188
- // Iterate insertion order (Map iteration is spec-guaranteed).
189
- const ordered = [...set.byPath.values()];
190
- if (allowPartial) {
191
- for (const change of ordered) {
192
- await writeChange(change);
193
- }
194
- return { added: set.added, modified: set.modified, deleted: set.deleted };
195
- }
196
- // Track which writes have completed so rollback only touches them. We use
197
- // the originalContent captured during plan() rather than re-reading from
198
- // disk — this avoids a TOCTOU window between planning and committing.
199
- const committed = [];
200
- try {
201
- for (const change of ordered) {
202
- await writeChange(change);
203
- committed.push(change);
204
- }
205
- }
206
- catch (err) {
207
- for (let i = committed.length - 1; i >= 0; i--) {
208
- const c = committed[i];
209
- try {
210
- if (c.originalContent === null) {
211
- // File did not exist before we wrote it — remove our write.
212
- if (existsSync(c.path))
213
- await unlink(c.path);
214
- }
215
- else {
216
- await writeFile(c.path, c.originalContent, "utf-8");
217
- }
218
- }
219
- catch {
220
- // Best-effort restore — surface the original error to the caller.
221
- }
222
- }
223
- throw err;
224
- }
225
- return { added: set.added, modified: set.modified, deleted: set.deleted };
226
- }
227
- async function writeChange(change) {
228
- if (change.newContent === null) {
229
- if (existsSync(change.path))
230
- await unlink(change.path);
231
- return;
232
- }
233
- const parent = dirname(change.path);
234
- if (!existsSync(parent)) {
235
- await mkdir(parent, { recursive: true });
236
- }
237
- await writeFile(change.path, change.newContent, "utf-8");
238
- }
239
- // ─── helpers ──────────────────────────────────────────────────────
240
- /**
241
- * Resolve a patch-relative (or absolute) path against cwd, then HARD-ENFORCE
242
- * that the result stays inside cwd.
243
- *
244
- * This is the applier's own containment guard, independent of the executor-level
245
- * pathPolicy. apply-patch is reachable with the path gate bypassed (e.g.
246
- * bypassPermissions, or a direct call), so the last line of defense lives here.
247
- *
248
- * Containment is checked against the REAL paths: we realpath cwd and walk the
249
- * target up to its nearest existing ancestor and realpath that. This defeats a
250
- * symlink planted inside cwd that points outside — a plain string `resolve()`
251
- * would look contained while the write follows the link out.
252
- */
253
- function resolveAgainst(p, cwd) {
254
- const resolved = isAbsolute(p) ? p : resolve(cwd, p);
255
- const realCwd = nearestRealPath(cwd);
256
- const realTarget = nearestRealPath(resolved);
257
- if (!isInside(realTarget, realCwd)) {
258
- throw new Error(`Refusing to apply patch outside the working directory: "${p}" resolves to "${realTarget}", which escapes "${realCwd}".`);
259
- }
260
- return resolved;
261
- }
262
- /**
263
- * Realpath the nearest existing ancestor of `abs`, then re-attach the
264
- * not-yet-existing trailing segments. Mirrors path-policy.safeRealpath so
265
- * symlinked ancestors are resolved even when the leaf doesn't exist yet.
266
- */
267
- function nearestRealPath(abs) {
268
- let candidate = abs;
269
- const segments = [];
270
- for (let i = 0; i < 64; i++) {
271
- try {
272
- const real = realpathSync(candidate);
273
- if (segments.length === 0)
274
- return real;
275
- return resolve(real, ...segments.reverse());
276
- }
277
- catch {
278
- const parent = dirname(candidate);
279
- if (parent === candidate)
280
- return abs;
281
- segments.push(candidate.slice(parent.length + (parent.endsWith(sep) ? 0 : 1)));
282
- candidate = parent;
283
- }
284
- }
285
- return abs;
286
- }
287
- function isInside(child, parent) {
288
- if (child === parent)
289
- return true;
290
- const p = parent.endsWith(sep) ? parent : parent + sep;
291
- return child.startsWith(p);
292
- }
293
- async function safeStat(path) {
294
- try {
295
- return await stat(path);
296
- }
297
- catch {
298
- return null;
299
- }
300
- }
301
- async function readIfExists(path) {
302
- try {
303
- return await readFile(path, "utf-8");
304
- }
305
- catch {
306
- return null;
307
- }
308
- }
@@ -1,10 +0,0 @@
1
- /**
2
- * Which files an ApplyPatch would modify-in-place or delete — i.e. the files
3
- * that already exist and therefore have pre-patch content worth snapshotting
4
- * for /undo. Pure (parse-only, no fs): given the patch text and the cwd to
5
- * resolve relative paths against, return absolute target paths.
6
- *
7
- * "add" hunks are excluded: a newly-created file has no prior content to back
8
- * up (undo of an add = delete, handled separately if/when /undo grows that).
9
- */
10
- export declare function patchBackupTargets(patchText: string, cwd: string): string[];
@@ -1,30 +0,0 @@
1
- /**
2
- * Which files an ApplyPatch would modify-in-place or delete — i.e. the files
3
- * that already exist and therefore have pre-patch content worth snapshotting
4
- * for /undo. Pure (parse-only, no fs): given the patch text and the cwd to
5
- * resolve relative paths against, return absolute target paths.
6
- *
7
- * "add" hunks are excluded: a newly-created file has no prior content to back
8
- * up (undo of an add = delete, handled separately if/when /undo grows that).
9
- */
10
- import { resolve as resolvePath } from "node:path";
11
- import { parsePatch } from "./parser.js";
12
- export function patchBackupTargets(patchText, cwd) {
13
- let parsed;
14
- try {
15
- parsed = parsePatch(patchText, "lenient");
16
- }
17
- catch {
18
- // Unparseable patch → nothing to back up; the tool itself will reject it.
19
- return [];
20
- }
21
- const out = [];
22
- for (const hunk of parsed.hunks) {
23
- if (hunk.kind === "update" || hunk.kind === "delete") {
24
- out.push(resolvePath(cwd, hunk.path));
25
- }
26
- }
27
- // De-dupe while preserving order (a patch shouldn't target one file twice,
28
- // but be defensive — saveSnapshot is idempotent on identical content anyway).
29
- return [...new Set(out)];
30
- }
@@ -1,20 +0,0 @@
1
- /**
2
- * ApplyPatch tool — atomic, multi-file V4A patch application.
3
- *
4
- * Adapted from openai/codex codex-rs/apply-patch (Apache-2.0). See LICENSE-codex.
5
- *
6
- * Compared to Codex's reference implementation:
7
- * - We dry-run all hunks first; nothing is written until every hunk
8
- * successfully resolves.
9
- * - On commit we snapshot every target file, so a write failure rolls back
10
- * to the pre-patch state instead of leaving partial changes.
11
- *
12
- * Compared to CodeShell's existing Edit:
13
- * - Multi-file in one call (cuts LLM round-trips for large changes).
14
- * - Supports create / update / delete / rename in one transaction.
15
- * - Context-anchor matching tolerates whitespace and Unicode quirks.
16
- */
17
- import type { ToolDefinition } from "../../../types.js";
18
- import type { ToolContext } from "../../context.js";
19
- export declare const applyPatchToolDef: ToolDefinition;
20
- export declare function applyPatchTool(args: Record<string, unknown>, ctx?: ToolContext): Promise<string>;
@@ -1,105 +0,0 @@
1
- /**
2
- * ApplyPatch tool — atomic, multi-file V4A patch application.
3
- *
4
- * Adapted from openai/codex codex-rs/apply-patch (Apache-2.0). See LICENSE-codex.
5
- *
6
- * Compared to Codex's reference implementation:
7
- * - We dry-run all hunks first; nothing is written until every hunk
8
- * successfully resolves.
9
- * - On commit we snapshot every target file, so a write failure rolls back
10
- * to the pre-patch state instead of leaving partial changes.
11
- *
12
- * Compared to CodeShell's existing Edit:
13
- * - Multi-file in one call (cuts LLM round-trips for large changes).
14
- * - Supports create / update / delete / rename in one transaction.
15
- * - Context-anchor matching tolerates whitespace and Unicode quirks.
16
- */
17
- import { fileCache } from "../file-cache.js";
18
- import { applyPatch } from "./applier.js";
19
- import { parsePatch } from "./parser.js";
20
- import { resolve as resolvePath } from "node:path";
21
- export const applyPatchToolDef = {
22
- name: "ApplyPatch",
23
- description: "Apply a V4A-format patch atomically across one or more files. " +
24
- "Supports create, update, delete, and rename operations in a single call. " +
25
- "If any hunk fails to apply, the entire patch is rejected and no files are modified. " +
26
- "Patch envelope:\n" +
27
- " *** Begin Patch\n" +
28
- " *** Add File: <path>\n" +
29
- " +<line>\n" +
30
- " *** Update File: <path>\n" +
31
- " *** Move to: <new path> # optional rename\n" +
32
- " @@ <context> # optional anchor\n" +
33
- " <unchanged line>\n" +
34
- " -<removed line>\n" +
35
- " +<added line>\n" +
36
- " *** End of File # optional, anchors to file end\n" +
37
- " *** Delete File: <path>\n" +
38
- " *** End Patch\n" +
39
- "Use relative paths; they resolve against the working directory.",
40
- inputSchema: {
41
- type: "object",
42
- properties: {
43
- patch: {
44
- type: "string",
45
- description: "Full patch text including '*** Begin Patch' and '*** End Patch' markers. " +
46
- "All paths must be relative (preferred) or absolute. " +
47
- "Each Update hunk must include enough context lines (' '-prefixed) " +
48
- "to uniquely locate the change within the file.",
49
- },
50
- },
51
- required: ["patch"],
52
- },
53
- };
54
- export async function applyPatchTool(args, ctx) {
55
- const patchText = args.patch;
56
- if (typeof patchText !== "string" || patchText.length === 0) {
57
- return "Error: patch is required and must be a non-empty string";
58
- }
59
- let parsed;
60
- try {
61
- parsed = parsePatch(patchText, "lenient");
62
- }
63
- catch (err) {
64
- return `Error: ${err.message}`;
65
- }
66
- if (parsed.hunks.length === 0) {
67
- return "Error: patch contains no hunks";
68
- }
69
- // A4: resolve relative patch paths against the Engine's cwd, not the
70
- // host process cwd. See standard §S5.
71
- const cwd = ctx?.cwd ?? process.cwd();
72
- let result;
73
- try {
74
- result = await applyPatch(parsed.hunks, { cwd });
75
- }
76
- catch (err) {
77
- return `Error applying patch: ${err.message}`;
78
- }
79
- // Invalidate file cache for every touched path. The cache is keyed by
80
- // ABSOLUTE path (see file-cache.ts), and patch paths are relative to the
81
- // Engine cwd — resolve them the same way the path-policy gate did above, or
82
- // the stale entry survives and a later Read returns pre-patch content.
83
- for (const hunk of parsed.hunks) {
84
- fileCache.invalidate(resolvePath(cwd, hunk.path));
85
- if (hunk.kind === "update" && hunk.movePath) {
86
- fileCache.invalidate(resolvePath(cwd, hunk.movePath));
87
- }
88
- }
89
- const parts = [];
90
- if (result.added.length > 0)
91
- parts.push(`added ${result.added.length}`);
92
- if (result.modified.length > 0)
93
- parts.push(`modified ${result.modified.length}`);
94
- if (result.deleted.length > 0)
95
- parts.push(`deleted ${result.deleted.length}`);
96
- const summary = parts.join(", ");
97
- const lines = [`Patch applied successfully — ${summary}`];
98
- for (const p of result.added)
99
- lines.push(` A ${p}`);
100
- for (const p of result.modified)
101
- lines.push(` M ${p}`);
102
- for (const p of result.deleted)
103
- lines.push(` D ${p}`);
104
- return lines.join("\n");
105
- }
@@ -1,17 +0,0 @@
1
- import { Hunk } from "./types.js";
2
- export declare const BEGIN_PATCH_MARKER = "*** Begin Patch";
3
- export declare const END_PATCH_MARKER = "*** End Patch";
4
- export declare const ADD_FILE_MARKER = "*** Add File: ";
5
- export declare const DELETE_FILE_MARKER = "*** Delete File: ";
6
- export declare const UPDATE_FILE_MARKER = "*** Update File: ";
7
- export declare const MOVE_TO_MARKER = "*** Move to: ";
8
- export declare const EOF_MARKER = "*** End of File";
9
- export declare const CHANGE_CONTEXT_MARKER = "@@ ";
10
- export declare const EMPTY_CHANGE_CONTEXT_MARKER = "@@";
11
- export interface ParsedPatch {
12
- hunks: Hunk[];
13
- /** The patch body with any heredoc wrapper stripped. */
14
- patch: string;
15
- }
16
- export type ParseMode = "strict" | "lenient";
17
- export declare function parsePatch(text: string, mode?: ParseMode): ParsedPatch;