@cjhyy/code-shell-core 0.7.1 → 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 (594) hide show
  1. package/README.md +36 -23
  2. package/dist/agent/agent-definition-registry.d.ts +2 -2
  3. package/dist/agent/agent-definition-registry.js +47 -10
  4. package/dist/agent/agent-definition.d.ts +5 -0
  5. package/dist/agent/agent-definition.js +14 -0
  6. package/dist/automation/index.d.ts +7 -4
  7. package/dist/automation/index.js +4 -2
  8. package/dist/automation/runner.js +3 -1
  9. package/dist/automation/scheduler.d.ts +57 -1
  10. package/dist/automation/scheduler.js +123 -23
  11. package/dist/automation/store.d.ts +6 -2
  12. package/dist/automation/store.js +7 -3
  13. package/dist/capabilities/index.d.ts +109 -0
  14. package/dist/capabilities/index.js +80 -0
  15. package/dist/capability-control/disabled-lists.d.ts +2 -1
  16. package/dist/capability-control/disabled-lists.js +3 -5
  17. package/dist/capability-control/overlay.d.ts +14 -1
  18. package/dist/capability-control/overlay.js +40 -0
  19. package/dist/capability-control/service.js +6 -4
  20. package/dist/cli/agent-server-stdio.d.ts +1 -1
  21. package/dist/cli/agent-server-stdio.js +66 -6
  22. package/dist/cli/agent-server-tcp.js +7 -3
  23. package/dist/context/compaction.d.ts +39 -3
  24. package/dist/context/compaction.js +151 -39
  25. package/dist/context/manager.d.ts +17 -1
  26. package/dist/context/manager.js +36 -1
  27. package/dist/credentials/access.d.ts +3 -1
  28. package/dist/credentials/access.js +24 -3
  29. package/dist/credentials/index.d.ts +1 -1
  30. package/dist/credentials/index.js +1 -1
  31. package/dist/credentials/oauth.d.ts +4 -1
  32. package/dist/credentials/oauth.js +14 -0
  33. package/dist/credentials/store.d.ts +15 -1
  34. package/dist/credentials/store.js +17 -4
  35. package/dist/credentials/types.d.ts +24 -0
  36. package/dist/credentials/use-credential-tool.js +15 -1
  37. package/dist/engine/auxiliary-pipeline.d.ts +40 -0
  38. package/dist/engine/auxiliary-pipeline.js +181 -0
  39. package/dist/{settings → engine}/disk-defaults.d.ts +2 -2
  40. package/dist/{settings → engine}/disk-defaults.js +5 -2
  41. package/dist/engine/dynamic-tool-defs.d.ts +4 -0
  42. package/dist/engine/dynamic-tool-defs.js +4 -0
  43. package/dist/engine/engine.d.ts +254 -195
  44. package/dist/engine/engine.js +1812 -2041
  45. package/dist/engine/file-history-hook.d.ts +11 -0
  46. package/dist/engine/file-history-hook.js +31 -0
  47. package/dist/engine/goal-judge-context.d.ts +9 -0
  48. package/dist/engine/goal-judge-context.js +234 -0
  49. package/dist/engine/injected-context-cache.d.ts +6 -0
  50. package/dist/engine/injected-context-cache.js +13 -0
  51. package/dist/engine/input-attachments.d.ts +1 -1
  52. package/dist/engine/model-facade.d.ts +3 -3
  53. package/dist/engine/model-facade.js +15 -14
  54. package/dist/engine/permission-controller.d.ts +55 -0
  55. package/dist/engine/permission-controller.js +148 -0
  56. package/dist/engine/prompt-cache-diagnostics.d.ts +58 -0
  57. package/dist/engine/prompt-cache-diagnostics.js +178 -0
  58. package/dist/engine/run-accounting.d.ts +41 -0
  59. package/dist/engine/run-accounting.js +126 -0
  60. package/dist/engine/run-context.d.ts +44 -0
  61. package/dist/engine/run-context.js +88 -0
  62. package/dist/engine/run-environment.d.ts +30 -0
  63. package/dist/engine/run-environment.js +77 -0
  64. package/dist/engine/run-finalize.d.ts +58 -0
  65. package/dist/engine/run-finalize.js +245 -0
  66. package/dist/engine/run-goal.d.ts +58 -0
  67. package/dist/engine/run-goal.js +188 -0
  68. package/dist/engine/run-image-input.d.ts +1 -1
  69. package/dist/engine/run-image-input.js +5 -3
  70. package/dist/engine/run-session-open.d.ts +41 -0
  71. package/dist/engine/run-session-open.js +186 -0
  72. package/dist/engine/run-setup.d.ts +42 -0
  73. package/dist/engine/run-setup.js +58 -0
  74. package/dist/engine/run-tooling.d.ts +125 -0
  75. package/dist/engine/run-tooling.js +283 -0
  76. package/dist/engine/run-types.d.ts +139 -0
  77. package/dist/engine/run-types.js +12 -0
  78. package/dist/engine/run-workspace.d.ts +50 -0
  79. package/dist/engine/run-workspace.js +114 -0
  80. package/dist/engine/steer-queue.d.ts +1 -1
  81. package/dist/engine/subagent-spawner.d.ts +32 -0
  82. package/dist/engine/subagent-spawner.js +287 -0
  83. package/dist/engine/tool-summary.d.ts +2 -2
  84. package/dist/engine/tool-summary.js +2 -2
  85. package/dist/engine/turn-loop.d.ts +49 -10
  86. package/dist/engine/turn-loop.js +370 -104
  87. package/dist/engine/types.d.ts +30 -3
  88. package/dist/engine/types.js +1 -1
  89. package/dist/{engine/goal.d.ts → goal/lifecycle.d.ts} +76 -4
  90. package/dist/goal/lifecycle.js +482 -0
  91. package/dist/hooks/events.d.ts +24 -10
  92. package/dist/hooks/goal-stop-hook.d.ts +17 -28
  93. package/dist/hooks/goal-stop-hook.js +110 -465
  94. package/dist/hooks/registry.js +1 -1
  95. package/dist/index.d.ts +48 -108
  96. package/dist/index.extension.d.ts +51 -0
  97. package/dist/index.extension.js +39 -0
  98. package/dist/index.internal.d.ts +86 -0
  99. package/dist/index.internal.js +92 -0
  100. package/dist/index.js +34 -123
  101. package/dist/links/cli.d.ts +48 -0
  102. package/dist/links/cli.js +617 -0
  103. package/dist/links/http.d.ts +40 -0
  104. package/dist/links/http.js +166 -0
  105. package/dist/links/index.d.ts +4 -0
  106. package/dist/links/index.js +3 -0
  107. package/dist/links/link-action-tool.d.ts +5 -0
  108. package/dist/links/link-action-tool.js +241 -0
  109. package/dist/links/providers.d.ts +8 -0
  110. package/dist/links/providers.js +665 -0
  111. package/dist/links/types.d.ts +44 -0
  112. package/dist/llm/client-base.d.ts +7 -0
  113. package/dist/llm/client-base.js +60 -0
  114. package/dist/llm/model-pool.d.ts +1 -1
  115. package/dist/llm/model-pool.js +1 -1
  116. package/dist/llm/providers/anthropic.d.ts +1 -0
  117. package/dist/llm/providers/anthropic.js +9 -0
  118. package/dist/llm/providers/openai.d.ts +1 -0
  119. package/dist/llm/providers/openai.js +17 -0
  120. package/dist/model-catalog/index.js +15 -2
  121. package/dist/model-catalog/resolve.d.ts +13 -1
  122. package/dist/model-catalog/resolve.js +37 -2
  123. package/dist/model-catalog/types.d.ts +74 -48
  124. package/dist/model-catalog/types.js +16 -5
  125. package/dist/model-catalog/upsert.d.ts +3 -1
  126. package/dist/model-catalog/upsert.js +9 -0
  127. package/dist/onboarding.d.ts +0 -1
  128. package/dist/onboarding.js +1 -22
  129. package/dist/panel-apps/bindings.d.ts +24 -0
  130. package/dist/panel-apps/bindings.js +69 -0
  131. package/dist/panel-apps/github-archive.d.ts +21 -0
  132. package/dist/panel-apps/github-archive.js +98 -0
  133. package/dist/panel-apps/index.d.ts +4 -0
  134. package/dist/panel-apps/index.js +4 -0
  135. package/dist/panel-apps/installer.d.ts +68 -0
  136. package/dist/panel-apps/installer.js +622 -0
  137. package/dist/panel-apps/manifest.d.ts +364 -0
  138. package/dist/panel-apps/manifest.js +189 -0
  139. package/dist/panel-apps/paths.d.ts +13 -0
  140. package/dist/panel-apps/paths.js +38 -0
  141. package/dist/panel-apps/registry.d.ts +51 -0
  142. package/dist/panel-apps/registry.js +99 -0
  143. package/dist/panel-apps/runtime.d.ts +80 -0
  144. package/dist/panel-apps/runtime.js +154 -0
  145. package/dist/plugins/gitOps.js +8 -1
  146. package/dist/plugins/installedPlugins.d.ts +2 -1
  147. package/dist/plugins/installedPlugins.js +146 -8
  148. package/dist/plugins/installer/codex/convertAgents.d.ts +4 -1
  149. package/dist/plugins/installer/codex/convertAgents.js +62 -8
  150. package/dist/plugins/installer/codex/convertCommands.d.ts +5 -5
  151. package/dist/plugins/installer/codex/convertCommands.js +35 -12
  152. package/dist/plugins/installer/codex/convertHooks.d.ts +10 -0
  153. package/dist/plugins/installer/codex/convertHooks.js +82 -0
  154. package/dist/plugins/installer/codex/convertSkills.js +41 -6
  155. package/dist/plugins/installer/install.d.ts +7 -1
  156. package/dist/plugins/installer/install.js +21 -87
  157. package/dist/plugins/installer/installFromArchive.d.ts +26 -4
  158. package/dist/plugins/installer/installFromArchive.js +44 -27
  159. package/dist/plugins/installer/installFromNpm.d.ts +31 -0
  160. package/dist/plugins/installer/installFromNpm.js +273 -0
  161. package/dist/plugins/installer/loadPluginAgents.js +17 -4
  162. package/dist/plugins/installer/loadPluginMcp.d.ts +14 -0
  163. package/dist/plugins/installer/loadPluginMcp.js +245 -35
  164. package/dist/plugins/installer/normalizeManifest.d.ts +13 -0
  165. package/dist/plugins/installer/normalizeManifest.js +306 -0
  166. package/dist/plugins/installer/npmTar.d.ts +13 -0
  167. package/dist/plugins/installer/npmTar.js +321 -0
  168. package/dist/plugins/installer/parseSource.d.ts +11 -0
  169. package/dist/plugins/installer/parseSource.js +48 -0
  170. package/dist/plugins/installer/preview.d.ts +101 -0
  171. package/dist/plugins/installer/preview.js +336 -0
  172. package/dist/plugins/installer/projectPluginSource.d.ts +14 -0
  173. package/dist/plugins/installer/projectPluginSource.js +140 -0
  174. package/dist/plugins/installer/types.d.ts +775 -0
  175. package/dist/plugins/installer/types.js +100 -0
  176. package/dist/plugins/installer/unzip.d.ts +11 -0
  177. package/dist/plugins/installer/unzip.js +123 -9
  178. package/dist/plugins/installer/update.d.ts +2 -2
  179. package/dist/plugins/installer/update.js +43 -4
  180. package/dist/plugins/loadPluginHooks.d.ts +19 -2
  181. package/dist/plugins/loadPluginHooks.js +97 -86
  182. package/dist/plugins/pluginAutomationTemplates.d.ts +18 -0
  183. package/dist/plugins/pluginAutomationTemplates.js +50 -0
  184. package/dist/plugins/pluginCatalog.d.ts +45 -0
  185. package/dist/plugins/pluginCatalog.js +87 -0
  186. package/dist/plugins/pluginCommandHook.d.ts +6 -0
  187. package/dist/plugins/pluginCommandHook.js +25 -8
  188. package/dist/plugins/pluginCommandsLoader.d.ts +19 -0
  189. package/dist/plugins/pluginCommandsLoader.js +181 -7
  190. package/dist/plugins/pluginContent.d.ts +10 -1
  191. package/dist/plugins/pluginContent.js +87 -30
  192. package/dist/plugins/pluginHookApproval.d.ts +30 -0
  193. package/dist/plugins/pluginHookApproval.js +160 -0
  194. package/dist/plugins/pluginHookIntegrity.d.ts +69 -0
  195. package/dist/plugins/pluginHookIntegrity.js +361 -0
  196. package/dist/plugins/pluginInstaller.js +71 -12
  197. package/dist/plugins/pluginMcpApproval.d.ts +19 -0
  198. package/dist/plugins/pluginMcpApproval.js +110 -0
  199. package/dist/plugins/pluginMcpIntegrity.d.ts +21 -0
  200. package/dist/plugins/pluginMcpIntegrity.js +74 -0
  201. package/dist/plugins/types.d.ts +30 -0
  202. package/dist/plugins/varRewrite.d.ts +9 -5
  203. package/dist/plugins/varRewrite.js +26 -17
  204. package/dist/preset/index.d.ts +11 -8
  205. package/dist/preset/index.js +62 -203
  206. package/dist/product/define.js +9 -3
  207. package/dist/product/types.d.ts +0 -2
  208. package/dist/profile/activation.d.ts +36 -0
  209. package/dist/profile/activation.js +57 -0
  210. package/dist/profile/catalog-store.d.ts +77 -0
  211. package/dist/profile/catalog-store.js +346 -0
  212. package/dist/profile/catalog.d.ts +54 -0
  213. package/dist/profile/catalog.js +152 -0
  214. package/dist/profile/index.d.ts +7 -0
  215. package/dist/profile/index.js +7 -0
  216. package/dist/profile/requirements.d.ts +76 -0
  217. package/dist/profile/requirements.js +117 -0
  218. package/dist/profile/resolve.d.ts +11 -0
  219. package/dist/profile/resolve.js +41 -0
  220. package/dist/profile/store.d.ts +17 -0
  221. package/dist/profile/store.js +167 -0
  222. package/dist/profile/types.d.ts +321 -0
  223. package/dist/profile/types.js +104 -0
  224. package/dist/prompt/composer.d.ts +46 -7
  225. package/dist/prompt/composer.js +78 -48
  226. package/dist/prompt/instruction-scanner.d.ts +6 -5
  227. package/dist/prompt/instruction-scanner.js +8 -23
  228. package/dist/prompt/section-loader.d.ts +2 -2
  229. package/dist/prompt/section-loader.js +7 -4
  230. package/dist/prompt/sections/browser.md +10 -9
  231. package/dist/prompt/sections/harness-base.md +9 -0
  232. package/dist/protocol/chat-session-manager.d.ts +64 -1
  233. package/dist/protocol/chat-session-manager.js +104 -0
  234. package/dist/protocol/chat-session.d.ts +61 -10
  235. package/dist/protocol/chat-session.js +135 -25
  236. package/dist/protocol/client.d.ts +33 -3
  237. package/dist/protocol/client.js +96 -5
  238. package/dist/protocol/index.d.ts +2 -2
  239. package/dist/protocol/index.js +2 -2
  240. package/dist/protocol/mobile-remote-types.d.ts +406 -0
  241. package/dist/protocol/mobile-remote-types.js +1 -0
  242. package/dist/protocol/server.d.ts +127 -3
  243. package/dist/protocol/server.js +1309 -182
  244. package/dist/protocol/types.d.ts +152 -34
  245. package/dist/protocol/types.js +16 -0
  246. package/dist/run/ArtifactTracker.d.ts +6 -1
  247. package/dist/run/ArtifactTracker.js +29 -21
  248. package/dist/run/EngineRunner.d.ts +2 -0
  249. package/dist/run/EngineRunner.js +1 -0
  250. package/dist/run/RunManager.d.ts +26 -0
  251. package/dist/run/RunManager.js +82 -11
  252. package/dist/run/factory.d.ts +3 -0
  253. package/dist/run/factory.js +2 -0
  254. package/dist/runtime/safe-spawn.d.ts +6 -0
  255. package/dist/runtime/safe-spawn.js +8 -13
  256. package/dist/services/auto-dream.d.ts +13 -1
  257. package/dist/services/auto-dream.js +56 -8
  258. package/dist/services/dream-consolidation.js +10 -1
  259. package/dist/services/memory-orchestrator.js +6 -2
  260. package/dist/services/oauth.js +4 -1
  261. package/dist/services/session-memory.d.ts +4 -4
  262. package/dist/services/session-memory.js +13 -10
  263. package/dist/session/memory.d.ts +26 -7
  264. package/dist/session/memory.js +79 -21
  265. package/dist/session/session-manager.d.ts +182 -28
  266. package/dist/session/session-manager.js +910 -130
  267. package/dist/session/session-message.d.ts +22 -0
  268. package/dist/session/session-message.js +1 -0
  269. package/dist/session/transcript.d.ts +46 -5
  270. package/dist/session/transcript.js +159 -3
  271. package/dist/settings/feature-flags.d.ts +40 -0
  272. package/dist/settings/feature-flags.js +40 -0
  273. package/dist/settings/manager.d.ts +39 -1
  274. package/dist/settings/manager.js +102 -41
  275. package/dist/settings/migrate-config.js +4 -2
  276. package/dist/settings/schema.d.ts +511 -177
  277. package/dist/settings/schema.js +98 -25
  278. package/dist/skills/scanner.d.ts +6 -2
  279. package/dist/skills/scanner.js +160 -9
  280. package/dist/sources/adapter.d.ts +14 -0
  281. package/dist/sources/adapter.js +7 -0
  282. package/dist/sources/adapters/local-files.d.ts +10 -0
  283. package/dist/sources/adapters/local-files.js +127 -0
  284. package/dist/sources/adapters/mcp-resource.d.ts +17 -0
  285. package/dist/sources/adapters/mcp-resource.js +41 -0
  286. package/dist/sources/adapters/mock.d.ts +3 -0
  287. package/dist/sources/adapters/mock.js +29 -0
  288. package/dist/sources/binding.d.ts +6 -0
  289. package/dist/sources/binding.js +24 -0
  290. package/dist/sources/catalog.d.ts +6 -0
  291. package/dist/sources/catalog.js +64 -0
  292. package/dist/sources/context-summary.d.ts +8 -0
  293. package/dist/sources/context-summary.js +13 -0
  294. package/dist/sources/credential-status.d.ts +2 -0
  295. package/dist/sources/credential-status.js +13 -0
  296. package/dist/sources/index.d.ts +10 -0
  297. package/dist/sources/index.js +10 -0
  298. package/dist/sources/resolve.d.ts +28 -0
  299. package/dist/sources/resolve.js +47 -0
  300. package/dist/sources/truncate-utf8.d.ts +7 -0
  301. package/dist/sources/truncate-utf8.js +18 -0
  302. package/dist/sources/types.d.ts +71 -0
  303. package/dist/sources/types.js +26 -0
  304. package/dist/testing/fetch-stub.d.ts +32 -0
  305. package/dist/testing/fetch-stub.js +24 -0
  306. package/dist/themes/image.d.ts +18 -0
  307. package/dist/themes/image.js +117 -0
  308. package/dist/themes/index.d.ts +4 -0
  309. package/dist/themes/index.js +4 -0
  310. package/dist/themes/installer.d.ts +50 -0
  311. package/dist/themes/installer.js +290 -0
  312. package/dist/themes/manifest.d.ts +102 -0
  313. package/dist/themes/manifest.js +86 -0
  314. package/dist/themes/paths.d.ts +14 -0
  315. package/dist/themes/paths.js +33 -0
  316. package/dist/tool-system/browser-bridge.d.ts +53 -11
  317. package/dist/tool-system/browser-bridge.js +8 -9
  318. package/dist/tool-system/builtin/agent-heartbeat.d.ts +2 -2
  319. package/dist/tool-system/builtin/agent-heartbeat.js +20 -6
  320. package/dist/tool-system/builtin/agent-notifications.d.ts +127 -72
  321. package/dist/tool-system/builtin/agent-notifications.js +291 -101
  322. package/dist/tool-system/builtin/agent-output-file.js +1 -3
  323. package/dist/tool-system/builtin/agent-progress.d.ts +6 -0
  324. package/dist/tool-system/builtin/agent-progress.js +83 -0
  325. package/dist/tool-system/builtin/agent-registry.d.ts +38 -2
  326. package/dist/tool-system/builtin/agent-registry.js +178 -9
  327. package/dist/tool-system/builtin/agent-transcript-translator.js +1 -1
  328. package/dist/tool-system/builtin/agent.d.ts +2 -0
  329. package/dist/tool-system/builtin/agent.js +274 -33
  330. package/dist/tool-system/builtin/background-jobs.d.ts +55 -2
  331. package/dist/tool-system/builtin/background-jobs.js +96 -4
  332. package/dist/tool-system/builtin/background-work.d.ts +6 -0
  333. package/dist/tool-system/builtin/background-work.js +8 -1
  334. package/dist/tool-system/builtin/bash.js +5 -2
  335. package/dist/tool-system/builtin/browser-tools.d.ts +6 -3
  336. package/dist/tool-system/builtin/browser-tools.js +89 -23
  337. package/dist/tool-system/builtin/edit-model-catalog.d.ts +6 -0
  338. package/dist/tool-system/builtin/edit-model-catalog.js +172 -12
  339. package/dist/tool-system/builtin/edit.js +2 -6
  340. package/dist/tool-system/builtin/file-cache.d.ts +2 -0
  341. package/dist/tool-system/builtin/file-cache.js +4 -0
  342. package/dist/tool-system/builtin/generate-image.js +17 -10
  343. package/dist/tool-system/builtin/generate-video.js +26 -7
  344. package/dist/tool-system/builtin/grep.js +2 -2
  345. package/dist/tool-system/builtin/image-uploader.js +7 -1
  346. package/dist/tool-system/builtin/index.d.ts +32 -7
  347. package/dist/tool-system/builtin/index.js +237 -167
  348. package/dist/tool-system/builtin/memory.d.ts +6 -0
  349. package/dist/tool-system/builtin/memory.js +36 -15
  350. package/dist/tool-system/builtin/panel.d.ts +9 -0
  351. package/dist/tool-system/builtin/panel.js +314 -0
  352. package/dist/tool-system/builtin/read.js +5 -1
  353. package/dist/tool-system/builtin/send-message-to-session.d.ts +6 -0
  354. package/dist/tool-system/builtin/send-message-to-session.js +67 -0
  355. package/dist/tool-system/builtin/sources.d.ts +8 -0
  356. package/dist/tool-system/builtin/sources.js +137 -0
  357. package/dist/tool-system/builtin/tool-search.js +7 -2
  358. package/dist/tool-system/builtin/update-automation-memory.js +2 -0
  359. package/dist/tool-system/builtin/web-fetch.js +17 -13
  360. package/dist/tool-system/builtin/web-search.js +1 -3
  361. package/dist/tool-system/capability-module.d.ts +93 -0
  362. package/dist/tool-system/capability-module.js +53 -0
  363. package/dist/tool-system/context.d.ts +77 -19
  364. package/dist/tool-system/executor.js +75 -50
  365. package/dist/tool-system/external-tool-exposure.d.ts +60 -0
  366. package/dist/tool-system/external-tool-exposure.js +304 -0
  367. package/dist/tool-system/mcp-manager.d.ts +11 -1
  368. package/dist/tool-system/mcp-manager.js +19 -4
  369. package/dist/tool-system/mcp-tool-policy.d.ts +9 -0
  370. package/dist/tool-system/mcp-tool-policy.js +34 -0
  371. package/dist/tool-system/panel-bridge.d.ts +53 -0
  372. package/dist/tool-system/panel-bridge.js +1 -0
  373. package/dist/tool-system/permission.d.ts +26 -0
  374. package/dist/tool-system/permission.js +46 -0
  375. package/dist/tool-system/registry.d.ts +12 -1
  376. package/dist/tool-system/registry.js +31 -7
  377. package/dist/tool-system/sandbox/index.js +3 -8
  378. package/dist/tool-system/sandbox/seatbelt.js +2 -6
  379. package/dist/tool-system/session-tool-host.d.ts +139 -0
  380. package/dist/tool-system/session-tool-host.js +167 -0
  381. package/dist/tool-system/testing/tool-registry-harness.d.ts +31 -0
  382. package/dist/tool-system/testing/tool-registry-harness.js +51 -0
  383. package/dist/tool-system/validation.d.ts +14 -7
  384. package/dist/tool-system/validation.js +701 -7
  385. package/dist/types.d.ts +186 -20
  386. package/dist/{cc-orchestrator → utils}/cwd-normalize.d.ts +1 -0
  387. package/dist/{cc-orchestrator → utils}/cwd-normalize.js +1 -0
  388. package/dist/utils/file-mutex.d.ts +65 -0
  389. package/dist/utils/file-mutex.js +145 -0
  390. package/dist/utils/json.d.ts +2 -4
  391. package/dist/utils/json.js +2 -4
  392. package/dist/utils/lockfile.d.ts +30 -1
  393. package/dist/utils/lockfile.js +2 -2
  394. package/dist/utils/secret-scrubber.d.ts +8 -0
  395. package/dist/utils/secret-scrubber.js +227 -0
  396. package/dist/utils/toolDisplay.js +1 -1
  397. package/package.json +20 -5
  398. package/THIRD_PARTY_NOTICES.md +0 -206
  399. package/dist/arena/arena.d.ts +0 -45
  400. package/dist/arena/arena.js +0 -362
  401. package/dist/arena/context/context-tools.d.ts +0 -16
  402. package/dist/arena/context/context-tools.js +0 -272
  403. package/dist/arena/context/within-root.d.ts +0 -7
  404. package/dist/arena/context/within-root.js +0 -15
  405. package/dist/arena/detect-mode.d.ts +0 -20
  406. package/dist/arena/detect-mode.js +0 -78
  407. package/dist/arena/digest-builder.d.ts +0 -25
  408. package/dist/arena/digest-builder.js +0 -120
  409. package/dist/arena/index.d.ts +0 -29
  410. package/dist/arena/index.js +0 -29
  411. package/dist/arena/iterate/convergence.d.ts +0 -25
  412. package/dist/arena/iterate/convergence.js +0 -103
  413. package/dist/arena/iterate/formats/index.d.ts +0 -22
  414. package/dist/arena/iterate/formats/index.js +0 -283
  415. package/dist/arena/iterate/index.d.ts +0 -11
  416. package/dist/arena/iterate/index.js +0 -9
  417. package/dist/arena/iterate/iterative-arena.d.ts +0 -23
  418. package/dist/arena/iterate/iterative-arena.js +0 -237
  419. package/dist/arena/iterate/parse.d.ts +0 -42
  420. package/dist/arena/iterate/parse.js +0 -123
  421. package/dist/arena/iterate/phases/argue.d.ts +0 -22
  422. package/dist/arena/iterate/phases/argue.js +0 -165
  423. package/dist/arena/iterate/phases/revise.d.ts +0 -16
  424. package/dist/arena/iterate/phases/revise.js +0 -62
  425. package/dist/arena/iterate/phases/tournament.d.ts +0 -34
  426. package/dist/arena/iterate/phases/tournament.js +0 -113
  427. package/dist/arena/iterate/tools/web-tools.d.ts +0 -13
  428. package/dist/arena/iterate/tools/web-tools.js +0 -54
  429. package/dist/arena/iterate/types.d.ts +0 -152
  430. package/dist/arena/iterate/types.js +0 -8
  431. package/dist/arena/ledger.d.ts +0 -47
  432. package/dist/arena/ledger.js +0 -159
  433. package/dist/arena/lenses/architecture.d.ts +0 -5
  434. package/dist/arena/lenses/architecture.js +0 -22
  435. package/dist/arena/lenses/engineering.d.ts +0 -5
  436. package/dist/arena/lenses/engineering.js +0 -22
  437. package/dist/arena/lenses/general.d.ts +0 -5
  438. package/dist/arena/lenses/general.js +0 -20
  439. package/dist/arena/lenses/index.d.ts +0 -16
  440. package/dist/arena/lenses/index.js +0 -47
  441. package/dist/arena/lenses/product.d.ts +0 -5
  442. package/dist/arena/lenses/product.js +0 -22
  443. package/dist/arena/model-presets.d.ts +0 -23
  444. package/dist/arena/model-presets.js +0 -44
  445. package/dist/arena/phases/adjudication.d.ts +0 -25
  446. package/dist/arena/phases/adjudication.js +0 -142
  447. package/dist/arena/phases/build-consensus.d.ts +0 -30
  448. package/dist/arena/phases/build-consensus.js +0 -85
  449. package/dist/arena/phases/claim-registry.d.ts +0 -26
  450. package/dist/arena/phases/claim-registry.js +0 -60
  451. package/dist/arena/phases/cross-review.d.ts +0 -47
  452. package/dist/arena/phases/cross-review.js +0 -224
  453. package/dist/arena/phases/debate-rounds.d.ts +0 -28
  454. package/dist/arena/phases/debate-rounds.js +0 -161
  455. package/dist/arena/phases/participant-research.d.ts +0 -39
  456. package/dist/arena/phases/participant-research.js +0 -316
  457. package/dist/arena/phases/planning-detail-expansion.d.ts +0 -39
  458. package/dist/arena/phases/planning-detail-expansion.js +0 -120
  459. package/dist/arena/planner.d.ts +0 -28
  460. package/dist/arena/planner.js +0 -312
  461. package/dist/arena/providers/docs.d.ts +0 -7
  462. package/dist/arena/providers/docs.js +0 -111
  463. package/dist/arena/providers/git.d.ts +0 -8
  464. package/dist/arena/providers/git.js +0 -174
  465. package/dist/arena/providers/index.d.ts +0 -32
  466. package/dist/arena/providers/index.js +0 -132
  467. package/dist/arena/providers/none.d.ts +0 -7
  468. package/dist/arena/providers/none.js +0 -11
  469. package/dist/arena/providers/repo.d.ts +0 -7
  470. package/dist/arena/providers/repo.js +0 -258
  471. package/dist/arena/render/session.d.ts +0 -17
  472. package/dist/arena/render/session.js +0 -190
  473. package/dist/arena/render/terminal.d.ts +0 -34
  474. package/dist/arena/render/terminal.js +0 -286
  475. package/dist/arena/strategies/discussion.d.ts +0 -25
  476. package/dist/arena/strategies/discussion.js +0 -143
  477. package/dist/arena/strategies/index.d.ts +0 -15
  478. package/dist/arena/strategies/index.js +0 -28
  479. package/dist/arena/strategies/language-wrapper.d.ts +0 -17
  480. package/dist/arena/strategies/language-wrapper.js +0 -102
  481. package/dist/arena/strategies/lens-wrapper.d.ts +0 -16
  482. package/dist/arena/strategies/lens-wrapper.js +0 -236
  483. package/dist/arena/strategies/planning.d.ts +0 -30
  484. package/dist/arena/strategies/planning.js +0 -225
  485. package/dist/arena/strategies/review.d.ts +0 -26
  486. package/dist/arena/strategies/review.js +0 -168
  487. package/dist/arena/strategies/utils.d.ts +0 -36
  488. package/dist/arena/strategies/utils.js +0 -603
  489. package/dist/arena/tools/selector.d.ts +0 -17
  490. package/dist/arena/tools/selector.js +0 -61
  491. package/dist/arena/transitions.d.ts +0 -53
  492. package/dist/arena/transitions.js +0 -97
  493. package/dist/arena/types.d.ts +0 -518
  494. package/dist/arena/types.js +0 -27
  495. package/dist/cc-orchestrator/agent-adapter.d.ts +0 -54
  496. package/dist/cc-orchestrator/agent-adapter.js +0 -143
  497. package/dist/cc-orchestrator/cc-capability.d.ts +0 -19
  498. package/dist/cc-orchestrator/cc-capability.js +0 -53
  499. package/dist/cc-orchestrator/codex-session-discovery.d.ts +0 -24
  500. package/dist/cc-orchestrator/codex-session-discovery.js +0 -191
  501. package/dist/cc-orchestrator/codex-session-history.d.ts +0 -38
  502. package/dist/cc-orchestrator/codex-session-history.js +0 -247
  503. package/dist/cc-orchestrator/external-agent-bindings.d.ts +0 -27
  504. package/dist/cc-orchestrator/external-agent-bindings.js +0 -150
  505. package/dist/cc-orchestrator/external-agent-changes.d.ts +0 -19
  506. package/dist/cc-orchestrator/external-agent-changes.js +0 -231
  507. package/dist/cc-orchestrator/external-agent-driver.d.ts +0 -19
  508. package/dist/cc-orchestrator/external-agent-driver.js +0 -284
  509. package/dist/cc-orchestrator/external-agent-session-store.d.ts +0 -23
  510. package/dist/cc-orchestrator/external-agent-session-store.js +0 -146
  511. package/dist/cc-orchestrator/index.d.ts +0 -8
  512. package/dist/cc-orchestrator/index.js +0 -8
  513. package/dist/cc-orchestrator/relevance-judge.d.ts +0 -15
  514. package/dist/cc-orchestrator/relevance-judge.js +0 -29
  515. package/dist/cc-orchestrator/session-discovery.d.ts +0 -46
  516. package/dist/cc-orchestrator/session-discovery.js +0 -125
  517. package/dist/cc-orchestrator/session-history.d.ts +0 -54
  518. package/dist/cc-orchestrator/session-history.js +0 -150
  519. package/dist/cron/cron-runtime.d.ts +0 -2
  520. package/dist/cron/cron-runtime.js +0 -2
  521. package/dist/cron/cron-store.d.ts +0 -2
  522. package/dist/cron/cron-store.js +0 -2
  523. package/dist/cron/scheduler.d.ts +0 -7
  524. package/dist/cron/scheduler.js +0 -7
  525. package/dist/engine/goal.js +0 -206
  526. package/dist/external-agents/config.d.ts +0 -2
  527. package/dist/external-agents/config.js +0 -15
  528. package/dist/external-agents/types.d.ts +0 -31
  529. package/dist/git/parse-log.d.ts +0 -13
  530. package/dist/git/parse-log.js +0 -21
  531. package/dist/git/utils.d.ts +0 -49
  532. package/dist/git/utils.js +0 -161
  533. package/dist/git/worktree/crud.d.ts +0 -72
  534. package/dist/git/worktree/crud.js +0 -235
  535. package/dist/git/worktree/diff.d.ts +0 -14
  536. package/dist/git/worktree/diff.js +0 -82
  537. package/dist/git/worktree/git-exec.d.ts +0 -7
  538. package/dist/git/worktree/git-exec.js +0 -87
  539. package/dist/git/worktree/index.d.ts +0 -5
  540. package/dist/git/worktree/index.js +0 -5
  541. package/dist/git/worktree/query.d.ts +0 -43
  542. package/dist/git/worktree/query.js +0 -128
  543. package/dist/git/worktree/slug.d.ts +0 -11
  544. package/dist/git/worktree/slug.js +0 -58
  545. package/dist/git/worktree.d.ts +0 -1
  546. package/dist/git/worktree.js +0 -5
  547. package/dist/lsp/client.d.ts +0 -41
  548. package/dist/lsp/client.js +0 -186
  549. package/dist/lsp/manager.d.ts +0 -40
  550. package/dist/lsp/manager.js +0 -155
  551. package/dist/lsp/root-path.d.ts +0 -9
  552. package/dist/lsp/root-path.js +0 -12
  553. package/dist/lsp/servers.d.ts +0 -16
  554. package/dist/lsp/servers.js +0 -60
  555. package/dist/prompt/sections/coding.md +0 -35
  556. package/dist/quota/credentials.d.ts +0 -3
  557. package/dist/quota/credentials.js +0 -80
  558. package/dist/quota/index.d.ts +0 -36
  559. package/dist/quota/index.js +0 -155
  560. package/dist/quota/types.d.ts +0 -48
  561. package/dist/quota/types.js +0 -13
  562. package/dist/review/review-prompt.d.ts +0 -28
  563. package/dist/review/review-prompt.js +0 -81
  564. package/dist/state.d.ts +0 -160
  565. package/dist/state.js +0 -267
  566. package/dist/tool-system/builtin/apply-patch/applier.d.ts +0 -26
  567. package/dist/tool-system/builtin/apply-patch/applier.js +0 -308
  568. package/dist/tool-system/builtin/apply-patch/backup-targets.d.ts +0 -10
  569. package/dist/tool-system/builtin/apply-patch/backup-targets.js +0 -30
  570. package/dist/tool-system/builtin/apply-patch/index.d.ts +0 -20
  571. package/dist/tool-system/builtin/apply-patch/index.js +0 -105
  572. package/dist/tool-system/builtin/apply-patch/parser.d.ts +0 -17
  573. package/dist/tool-system/builtin/apply-patch/parser.js +0 -212
  574. package/dist/tool-system/builtin/apply-patch/seek-sequence.d.ts +0 -18
  575. package/dist/tool-system/builtin/apply-patch/seek-sequence.js +0 -123
  576. package/dist/tool-system/builtin/apply-patch/types.d.ts +0 -49
  577. package/dist/tool-system/builtin/apply-patch/types.js +0 -13
  578. package/dist/tool-system/builtin/arena.d.ts +0 -31
  579. package/dist/tool-system/builtin/arena.js +0 -416
  580. package/dist/tool-system/builtin/brief.d.ts +0 -6
  581. package/dist/tool-system/builtin/brief.js +0 -41
  582. package/dist/tool-system/builtin/check-quota.d.ts +0 -15
  583. package/dist/tool-system/builtin/check-quota.js +0 -34
  584. package/dist/tool-system/builtin/drive-claude-code.d.ts +0 -51
  585. package/dist/tool-system/builtin/drive-claude-code.js +0 -698
  586. package/dist/tool-system/builtin/lsp.d.ts +0 -7
  587. package/dist/tool-system/builtin/lsp.js +0 -144
  588. package/dist/tool-system/builtin/notebook-edit.d.ts +0 -7
  589. package/dist/tool-system/builtin/notebook-edit.js +0 -127
  590. package/dist/tool-system/builtin/worktree.d.ts +0 -11
  591. package/dist/tool-system/builtin/worktree.js +0 -363
  592. /package/dist/{external-agents → links}/types.js +0 -0
  593. /package/dist/{engine/session-usage.d.ts → session/usage.d.ts} +0 -0
  594. /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;