@evalops/maestro 0.10.50 → 0.10.51

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 (406) hide show
  1. package/dist/agent/agent-outcome.d.ts +54 -0
  2. package/dist/agent/agent-outcome.d.ts.map +1 -0
  3. package/dist/agent/agent-outcome.js +142 -0
  4. package/dist/agent/agent-outcome.js.map +1 -0
  5. package/dist/agent/agent-resume.d.ts.map +1 -1
  6. package/dist/agent/agent-resume.js +3 -3
  7. package/dist/agent/agent-resume.js.map +1 -1
  8. package/dist/agent/agent-run-summary.d.ts +37 -0
  9. package/dist/agent/agent-run-summary.d.ts.map +1 -0
  10. package/dist/agent/agent-run-summary.js +15 -0
  11. package/dist/agent/agent-run-summary.js.map +1 -0
  12. package/dist/agent/agent-work-board.d.ts +82 -0
  13. package/dist/agent/agent-work-board.d.ts.map +1 -0
  14. package/dist/agent/agent-work-board.js +312 -0
  15. package/dist/agent/agent-work-board.js.map +1 -0
  16. package/dist/agent/auto-compaction.d.ts +7 -2
  17. package/dist/agent/auto-compaction.d.ts.map +1 -1
  18. package/dist/agent/auto-compaction.js +23 -10
  19. package/dist/agent/auto-compaction.js.map +1 -1
  20. package/dist/agent/mission-artifacts.d.ts +62 -0
  21. package/dist/agent/mission-artifacts.d.ts.map +1 -0
  22. package/dist/agent/mission-artifacts.js +438 -0
  23. package/dist/agent/mission-artifacts.js.map +1 -0
  24. package/dist/agent/mission-manifest.d.ts +139 -3
  25. package/dist/agent/mission-manifest.d.ts.map +1 -1
  26. package/dist/agent/mission-manifest.js +549 -3
  27. package/dist/agent/mission-manifest.js.map +1 -1
  28. package/dist/agent/mission-store.d.ts +80 -0
  29. package/dist/agent/mission-store.d.ts.map +1 -0
  30. package/dist/agent/mission-store.js +603 -0
  31. package/dist/agent/mission-store.js.map +1 -0
  32. package/dist/agent/modes.d.ts +2 -2
  33. package/dist/agent/modes.d.ts.map +1 -1
  34. package/dist/agent/modes.js +10 -3
  35. package/dist/agent/modes.js.map +1 -1
  36. package/dist/agent/providers/codex-app-server.d.ts.map +1 -1
  37. package/dist/agent/providers/codex-app-server.js +1 -3
  38. package/dist/agent/providers/codex-app-server.js.map +1 -1
  39. package/dist/agent/providers/google-gemini-cli.js +203 -107
  40. package/dist/agent/providers/google.js +100 -41
  41. package/dist/agent/providers/scripted.d.ts.map +1 -1
  42. package/dist/agent/providers/scripted.js +1 -3
  43. package/dist/agent/providers/scripted.js.map +1 -1
  44. package/dist/agent/providers/validation.d.ts.map +1 -1
  45. package/dist/agent/providers/validation.js +1 -3
  46. package/dist/agent/providers/validation.js.map +1 -1
  47. package/dist/agent/providers/vertex.js +203 -107
  48. package/dist/agent/snapshot-store.d.ts +32 -0
  49. package/dist/agent/snapshot-store.d.ts.map +1 -0
  50. package/dist/agent/snapshot-store.js +195 -0
  51. package/dist/agent/snapshot-store.js.map +1 -0
  52. package/dist/agent/specialist-profiles.d.ts +36 -0
  53. package/dist/agent/specialist-profiles.d.ts.map +1 -0
  54. package/dist/agent/specialist-profiles.js +159 -0
  55. package/dist/agent/specialist-profiles.js.map +1 -0
  56. package/dist/agent/subagent-specs.d.ts +4 -1
  57. package/dist/agent/subagent-specs.d.ts.map +1 -1
  58. package/dist/agent/subagent-specs.js +81 -8
  59. package/dist/agent/subagent-specs.js.map +1 -1
  60. package/dist/agent/swarm/coverage-gate.d.ts +37 -0
  61. package/dist/agent/swarm/coverage-gate.d.ts.map +1 -0
  62. package/dist/agent/swarm/coverage-gate.js +48 -0
  63. package/dist/agent/swarm/coverage-gate.js.map +1 -0
  64. package/dist/agent/swarm/executor.d.ts +1 -0
  65. package/dist/agent/swarm/executor.d.ts.map +1 -1
  66. package/dist/agent/swarm/executor.js +151 -15
  67. package/dist/agent/swarm/executor.js.map +1 -1
  68. package/dist/agent/swarm/orchestrator-prompt.d.ts +25 -0
  69. package/dist/agent/swarm/orchestrator-prompt.d.ts.map +1 -0
  70. package/dist/agent/swarm/orchestrator-prompt.js +48 -0
  71. package/dist/agent/swarm/orchestrator-prompt.js.map +1 -0
  72. package/dist/agent/swarm/plan-parser.d.ts.map +1 -1
  73. package/dist/agent/swarm/plan-parser.js +27 -2
  74. package/dist/agent/swarm/plan-parser.js.map +1 -1
  75. package/dist/agent/swarm/types.d.ts +17 -0
  76. package/dist/agent/swarm/types.d.ts.map +1 -1
  77. package/dist/agent/swarm/types.js.map +1 -1
  78. package/dist/agent/swarm/validation-directive.d.ts +21 -0
  79. package/dist/agent/swarm/validation-directive.d.ts.map +1 -0
  80. package/dist/agent/swarm/validation-directive.js +25 -0
  81. package/dist/agent/swarm/validation-directive.js.map +1 -0
  82. package/dist/agent/transport/tool-execution-bridge.d.ts.map +1 -1
  83. package/dist/agent/transport/tool-execution-bridge.js +4 -1
  84. package/dist/agent/transport/tool-execution-bridge.js.map +1 -1
  85. package/dist/api/enterprise-routes.d.ts.map +1 -1
  86. package/dist/api/enterprise-routes.js +87 -10
  87. package/dist/api/enterprise-routes.js.map +1 -1
  88. package/dist/api/org-settings-merge.d.ts +12 -0
  89. package/dist/api/org-settings-merge.d.ts.map +1 -0
  90. package/dist/api/org-settings-merge.js +38 -0
  91. package/dist/api/org-settings-merge.js.map +1 -0
  92. package/dist/api/user-settings-merge.d.ts +16 -0
  93. package/dist/api/user-settings-merge.d.ts.map +1 -0
  94. package/dist/api/user-settings-merge.js +37 -0
  95. package/dist/api/user-settings-merge.js.map +1 -0
  96. package/dist/app-server/daemon-lifecycle-api.d.ts.map +1 -1
  97. package/dist/app-server/daemon-lifecycle-api.js +1 -3
  98. package/dist/app-server/daemon-lifecycle-api.js.map +1 -1
  99. package/dist/app-server/external-agent-import-api.d.ts.map +1 -1
  100. package/dist/app-server/external-agent-import-api.js +1 -3
  101. package/dist/app-server/external-agent-import-api.js.map +1 -1
  102. package/dist/app-server/network-governance-api.d.ts.map +1 -1
  103. package/dist/app-server/network-governance-api.js +1 -3
  104. package/dist/app-server/network-governance-api.js.map +1 -1
  105. package/dist/app-server/plugin-bundle-api.d.ts.map +1 -1
  106. package/dist/app-server/plugin-bundle-api.js +1 -3
  107. package/dist/app-server/plugin-bundle-api.js.map +1 -1
  108. package/dist/app-server/policy-control-api.d.ts.map +1 -1
  109. package/dist/app-server/policy-control-api.js +1 -3
  110. package/dist/app-server/policy-control-api.js.map +1 -1
  111. package/dist/app-server/protocol-modes-api.d.ts.map +1 -1
  112. package/dist/app-server/protocol-modes-api.js +1 -3
  113. package/dist/app-server/protocol-modes-api.js.map +1 -1
  114. package/dist/cli/args.d.ts +2 -0
  115. package/dist/cli/args.d.ts.map +1 -1
  116. package/dist/cli/args.js +15 -0
  117. package/dist/cli/args.js.map +1 -1
  118. package/dist/cli/commands/a2a.d.ts.map +1 -1
  119. package/dist/cli/commands/a2a.js +1 -3
  120. package/dist/cli/commands/a2a.js.map +1 -1
  121. package/dist/cli/commands/agents.d.ts +4 -0
  122. package/dist/cli/commands/agents.d.ts.map +1 -1
  123. package/dist/cli/commands/agents.js +149 -0
  124. package/dist/cli/commands/agents.js.map +1 -1
  125. package/dist/cli/commands/mission.d.ts +4 -0
  126. package/dist/cli/commands/mission.d.ts.map +1 -0
  127. package/dist/cli/commands/mission.js +196 -0
  128. package/dist/cli/commands/mission.js.map +1 -0
  129. package/dist/cli/commands/value.d.ts +10 -0
  130. package/dist/cli/commands/value.d.ts.map +1 -0
  131. package/dist/cli/commands/value.js +33 -0
  132. package/dist/cli/commands/value.js.map +1 -0
  133. package/dist/cli/headless-protocol.d.ts.map +1 -1
  134. package/dist/cli/headless-protocol.js +1 -3
  135. package/dist/cli/headless-protocol.js.map +1 -1
  136. package/dist/cli/help.d.ts.map +1 -1
  137. package/dist/cli/help.js +10 -0
  138. package/dist/cli/help.js.map +1 -1
  139. package/dist/cli/system-prompt.d.ts.map +1 -1
  140. package/dist/cli/system-prompt.js +38 -7
  141. package/dist/cli/system-prompt.js.map +1 -1
  142. package/dist/cli-runtime.js +7756 -2800
  143. package/dist/cli-tui/client-tools/client-tool-controller.d.ts.map +1 -1
  144. package/dist/cli-tui/client-tools/client-tool-controller.js +1 -3
  145. package/dist/cli-tui/client-tools/client-tool-controller.js.map +1 -1
  146. package/dist/cli-tui/commands/undo-handlers.d.ts.map +1 -1
  147. package/dist/cli-tui/commands/undo-handlers.js +7 -2
  148. package/dist/cli-tui/commands/undo-handlers.js.map +1 -1
  149. package/dist/cli-tui/tui-renderer/skills-controller.d.ts +3 -0
  150. package/dist/cli-tui/tui-renderer/skills-controller.d.ts.map +1 -1
  151. package/dist/cli-tui/tui-renderer/skills-controller.js +77 -33
  152. package/dist/cli-tui/tui-renderer/skills-controller.js.map +1 -1
  153. package/dist/codex/app-server-client.d.ts.map +1 -1
  154. package/dist/codex/app-server-client.js +1 -3
  155. package/dist/codex/app-server-client.js.map +1 -1
  156. package/dist/codex/compatibility.d.ts.map +1 -1
  157. package/dist/codex/compatibility.js +1 -3
  158. package/dist/codex/compatibility.js.map +1 -1
  159. package/dist/codex/subagent-dispatch-table.d.ts +8 -0
  160. package/dist/codex/subagent-dispatch-table.d.ts.map +1 -1
  161. package/dist/codex/subagent-dispatch-table.js +23 -0
  162. package/dist/codex/subagent-dispatch-table.js.map +1 -1
  163. package/dist/context/manifest.d.ts.map +1 -1
  164. package/dist/context/manifest.js +1 -3
  165. package/dist/context/manifest.js.map +1 -1
  166. package/dist/conversation/render-model.d.ts +0 -36
  167. package/dist/conversation/render-model.d.ts.map +1 -1
  168. package/dist/conversation/render-model.js +1 -3
  169. package/dist/conversation/render-model.js.map +1 -1
  170. package/dist/customer-value/ambient-learning.d.ts +75 -0
  171. package/dist/customer-value/ambient-learning.d.ts.map +1 -0
  172. package/dist/customer-value/ambient-learning.js +472 -0
  173. package/dist/customer-value/ambient-learning.js.map +1 -0
  174. package/dist/customer-value/internal-helpers.d.ts +13 -0
  175. package/dist/customer-value/internal-helpers.d.ts.map +1 -0
  176. package/dist/customer-value/internal-helpers.js +70 -0
  177. package/dist/customer-value/internal-helpers.js.map +1 -0
  178. package/dist/customer-value/report.d.ts +282 -0
  179. package/dist/customer-value/report.d.ts.map +1 -0
  180. package/dist/customer-value/report.js +2085 -0
  181. package/dist/customer-value/report.js.map +1 -0
  182. package/dist/db/schema.d.ts +5 -1
  183. package/dist/db/schema.d.ts.map +1 -1
  184. package/dist/db/schema.js.map +1 -1
  185. package/dist/evalops/agent-bootstrap.d.ts.map +1 -1
  186. package/dist/evalops/agent-bootstrap.js +1 -3
  187. package/dist/evalops/agent-bootstrap.js.map +1 -1
  188. package/dist/evalops/agent-mcp-metadata.d.ts.map +1 -1
  189. package/dist/evalops/agent-mcp-metadata.js +1 -3
  190. package/dist/evalops/agent-mcp-metadata.js.map +1 -1
  191. package/dist/index.d.ts +1 -0
  192. package/dist/index.d.ts.map +1 -1
  193. package/dist/index.js +1 -0
  194. package/dist/index.js.map +1 -1
  195. package/dist/installers/maestro-review-workflow.d.ts +38 -0
  196. package/dist/installers/maestro-review-workflow.d.ts.map +1 -0
  197. package/dist/installers/maestro-review-workflow.js +163 -0
  198. package/dist/installers/maestro-review-workflow.js.map +1 -0
  199. package/dist/load-env.d.ts.map +1 -1
  200. package/dist/load-env.js +2 -1
  201. package/dist/load-env.js.map +1 -1
  202. package/dist/main.d.ts.map +1 -1
  203. package/dist/main.js +92 -3
  204. package/dist/main.js.map +1 -1
  205. package/dist/mcp/config.d.ts.map +1 -1
  206. package/dist/mcp/config.js +1 -3
  207. package/dist/mcp/config.js.map +1 -1
  208. package/dist/mcp/elicitation.d.ts.map +1 -1
  209. package/dist/mcp/elicitation.js +1 -3
  210. package/dist/mcp/elicitation.js.map +1 -1
  211. package/dist/mcp/official-registry.d.ts.map +1 -1
  212. package/dist/mcp/official-registry.js +1 -3
  213. package/dist/mcp/official-registry.js.map +1 -1
  214. package/dist/mcp/workspace-trust.d.ts.map +1 -1
  215. package/dist/mcp/workspace-trust.js +1 -3
  216. package/dist/mcp/workspace-trust.js.map +1 -1
  217. package/dist/memory/service-client.d.ts.map +1 -1
  218. package/dist/memory/service-client.js +1 -3
  219. package/dist/memory/service-client.js.map +1 -1
  220. package/dist/models/config-loader.d.ts.map +1 -1
  221. package/dist/models/config-loader.js +1 -3
  222. package/dist/models/config-loader.js.map +1 -1
  223. package/dist/node_modules/@evalops/contracts/dist/index.d.ts +1 -0
  224. package/dist/node_modules/@evalops/contracts/dist/index.d.ts.map +1 -1
  225. package/dist/node_modules/@evalops/contracts/dist/index.js +1 -0
  226. package/dist/node_modules/@evalops/contracts/dist/index.js.map +1 -1
  227. package/dist/node_modules/@evalops/contracts/dist/maestro-settings.d.ts +61 -0
  228. package/dist/node_modules/@evalops/contracts/dist/maestro-settings.d.ts.map +1 -0
  229. package/dist/node_modules/@evalops/contracts/dist/maestro-settings.js +183 -0
  230. package/dist/node_modules/@evalops/contracts/dist/maestro-settings.js.map +1 -0
  231. package/dist/node_modules/@evalops/contracts/package.json +1 -1
  232. package/dist/node_modules/@evalops/tui/package.json +1 -1
  233. package/dist/oauth/connectors.d.ts.map +1 -1
  234. package/dist/oauth/connectors.js +1 -3
  235. package/dist/oauth/connectors.js.map +1 -1
  236. package/dist/oauth/evalops.d.ts.map +1 -1
  237. package/dist/oauth/evalops.js +1 -3
  238. package/dist/oauth/evalops.js.map +1 -1
  239. package/dist/platform/a2a-client.d.ts.map +1 -1
  240. package/dist/platform/a2a-client.js +1 -3
  241. package/dist/platform/a2a-client.js.map +1 -1
  242. package/dist/platform/a2a-cockpit.d.ts +1 -0
  243. package/dist/platform/a2a-cockpit.d.ts.map +1 -1
  244. package/dist/platform/a2a-cockpit.js +42 -11
  245. package/dist/platform/a2a-cockpit.js.map +1 -1
  246. package/dist/platform/a2a-completion-audit.d.ts +1 -1
  247. package/dist/platform/a2a-completion-audit.d.ts.map +1 -1
  248. package/dist/platform/a2a-completion-audit.js +7 -11
  249. package/dist/platform/a2a-completion-audit.js.map +1 -1
  250. package/dist/platform/a2a-maestro-peer.js +16 -0
  251. package/dist/platform/a2a-maestro-peer.js.map +1 -1
  252. package/dist/platform/a2a-peer-pairing.d.ts.map +1 -1
  253. package/dist/platform/a2a-peer-pairing.js +1 -3
  254. package/dist/platform/a2a-peer-pairing.js.map +1 -1
  255. package/dist/platform/a2a-peer-registry.d.ts.map +1 -1
  256. package/dist/platform/a2a-peer-registry.js +1 -3
  257. package/dist/platform/a2a-peer-registry.js.map +1 -1
  258. package/dist/platform/a2a-task-ledger.d.ts +20 -0
  259. package/dist/platform/a2a-task-ledger.d.ts.map +1 -1
  260. package/dist/platform/a2a-task-ledger.js +207 -11
  261. package/dist/platform/a2a-task-ledger.js.map +1 -1
  262. package/dist/platform/a2a-work-graph.d.ts.map +1 -1
  263. package/dist/platform/a2a-work-graph.js +1 -3
  264. package/dist/platform/a2a-work-graph.js.map +1 -1
  265. package/dist/platform/operating-layer.d.ts.map +1 -1
  266. package/dist/platform/operating-layer.js +14 -8
  267. package/dist/platform/operating-layer.js.map +1 -1
  268. package/dist/platform/tool-execution-client.d.ts.map +1 -1
  269. package/dist/platform/tool-execution-client.js +19 -2
  270. package/dist/platform/tool-execution-client.js.map +1 -1
  271. package/dist/providers/auth.d.ts.map +1 -1
  272. package/dist/providers/auth.js +1 -3
  273. package/dist/providers/auth.js.map +1 -1
  274. package/dist/runtime/env.d.ts +9 -1
  275. package/dist/runtime/env.d.ts.map +1 -1
  276. package/dist/runtime/env.js +63 -1
  277. package/dist/runtime/env.js.map +1 -1
  278. package/dist/safety/policy.d.ts.map +1 -1
  279. package/dist/safety/policy.js +1 -4
  280. package/dist/safety/policy.js.map +1 -1
  281. package/dist/sandbox/docker-sandbox.d.ts.map +1 -1
  282. package/dist/sandbox/docker-sandbox.js +6 -1
  283. package/dist/sandbox/docker-sandbox.js.map +1 -1
  284. package/dist/server/handlers/hosted-runner-drain.d.ts.map +1 -1
  285. package/dist/server/handlers/hosted-runner-drain.js +1 -3
  286. package/dist/server/handlers/hosted-runner-drain.js.map +1 -1
  287. package/dist/server/handlers/platform-a2a-push.d.ts.map +1 -1
  288. package/dist/server/handlers/platform-a2a-push.js +53 -2
  289. package/dist/server/handlers/platform-a2a-push.js.map +1 -1
  290. package/dist/server/handlers/runtime-app-server-ws.d.ts.map +1 -1
  291. package/dist/server/handlers/runtime-app-server-ws.js +1 -3
  292. package/dist/server/handlers/runtime-app-server-ws.js.map +1 -1
  293. package/dist/server/headless-runtime-service.d.ts +16 -0
  294. package/dist/server/headless-runtime-service.d.ts.map +1 -1
  295. package/dist/server/headless-runtime-service.js +232 -206
  296. package/dist/server/headless-runtime-service.js.map +1 -1
  297. package/dist/server/hosted-agent-runtime-progress.d.ts.map +1 -1
  298. package/dist/server/hosted-agent-runtime-progress.js +12 -3
  299. package/dist/server/hosted-agent-runtime-progress.js.map +1 -1
  300. package/dist/server/pending-request-payload.d.ts.map +1 -1
  301. package/dist/server/pending-request-payload.js +1 -3
  302. package/dist/server/pending-request-payload.js.map +1 -1
  303. package/dist/server/route-auth.d.ts.map +1 -1
  304. package/dist/server/route-auth.js +2 -0
  305. package/dist/server/route-auth.js.map +1 -1
  306. package/dist/server/session-serialization.d.ts.map +1 -1
  307. package/dist/server/session-serialization.js +1 -3
  308. package/dist/server/session-serialization.js.map +1 -1
  309. package/dist/services/compliance/normalize.d.ts.map +1 -1
  310. package/dist/services/compliance/normalize.js +1 -3
  311. package/dist/services/compliance/normalize.js.map +1 -1
  312. package/dist/services/intelligent-router/normalize.d.ts.map +1 -1
  313. package/dist/services/intelligent-router/normalize.js +1 -3
  314. package/dist/services/intelligent-router/normalize.js.map +1 -1
  315. package/dist/services/revenue-attribution/normalize.d.ts.map +1 -1
  316. package/dist/services/revenue-attribution/normalize.js +1 -3
  317. package/dist/services/revenue-attribution/normalize.js.map +1 -1
  318. package/dist/services/traces/normalize.d.ts.map +1 -1
  319. package/dist/services/traces/normalize.js +1 -3
  320. package/dist/services/traces/normalize.js.map +1 -1
  321. package/dist/services/workspace-config/normalize.d.ts.map +1 -1
  322. package/dist/services/workspace-config/normalize.js +1 -3
  323. package/dist/services/workspace-config/normalize.js.map +1 -1
  324. package/dist/skills/composer.d.ts.map +1 -1
  325. package/dist/skills/composer.js +13 -1
  326. package/dist/skills/composer.js.map +1 -1
  327. package/dist/skills/index.d.ts +1 -0
  328. package/dist/skills/index.d.ts.map +1 -1
  329. package/dist/skills/index.js +1 -0
  330. package/dist/skills/index.js.map +1 -1
  331. package/dist/skills/learned-guidelines.d.ts +33 -0
  332. package/dist/skills/learned-guidelines.d.ts.map +1 -0
  333. package/dist/skills/learned-guidelines.js +291 -0
  334. package/dist/skills/learned-guidelines.js.map +1 -0
  335. package/dist/skills/linter.d.ts.map +1 -1
  336. package/dist/skills/linter.js +1 -3
  337. package/dist/skills/linter.js.map +1 -1
  338. package/dist/skills/runtime-activation.d.ts +1 -0
  339. package/dist/skills/runtime-activation.d.ts.map +1 -1
  340. package/dist/skills/runtime-activation.js +2 -3
  341. package/dist/skills/runtime-activation.js.map +1 -1
  342. package/dist/skills/tool.d.ts.map +1 -1
  343. package/dist/skills/tool.js +26 -21
  344. package/dist/skills/tool.js.map +1 -1
  345. package/dist/skills/trust-cache.d.ts +7 -0
  346. package/dist/skills/trust-cache.d.ts.map +1 -1
  347. package/dist/skills/trust-cache.js +16 -0
  348. package/dist/skills/trust-cache.js.map +1 -1
  349. package/dist/telemetry/agent-workforce-native-event.d.ts.map +1 -1
  350. package/dist/telemetry/agent-workforce-native-event.js +1 -3
  351. package/dist/telemetry/agent-workforce-native-event.js.map +1 -1
  352. package/dist/telemetry/maestro-event-bus.d.ts.map +1 -1
  353. package/dist/telemetry/maestro-event-bus.js +42 -81
  354. package/dist/telemetry/maestro-event-bus.js.map +1 -1
  355. package/dist/telemetry/maestro-platform-replay-fixture.d.ts.map +1 -1
  356. package/dist/telemetry/maestro-platform-replay-fixture.js +1 -3
  357. package/dist/telemetry/maestro-platform-replay-fixture.js.map +1 -1
  358. package/dist/telemetry.d.ts.map +1 -1
  359. package/dist/telemetry.js +54 -43
  360. package/dist/telemetry.js.map +1 -1
  361. package/dist/theme/theme-loader.d.ts.map +1 -1
  362. package/dist/theme/theme-loader.js +1 -3
  363. package/dist/theme/theme-loader.js.map +1 -1
  364. package/dist/tools/apply-patch.d.ts.map +1 -1
  365. package/dist/tools/apply-patch.js +76 -8
  366. package/dist/tools/apply-patch.js.map +1 -1
  367. package/dist/tools/diff-preview.d.ts.map +1 -1
  368. package/dist/tools/diff-preview.js +10 -1
  369. package/dist/tools/diff-preview.js.map +1 -1
  370. package/dist/tools/edit.d.ts.map +1 -1
  371. package/dist/tools/edit.js +17 -0
  372. package/dist/tools/edit.js.map +1 -1
  373. package/dist/tools/write.d.ts.map +1 -1
  374. package/dist/tools/write.js +9 -0
  375. package/dist/tools/write.js.map +1 -1
  376. package/dist/undo/tracker.d.ts +5 -0
  377. package/dist/undo/tracker.d.ts.map +1 -1
  378. package/dist/undo/tracker.js +13 -0
  379. package/dist/undo/tracker.js.map +1 -1
  380. package/dist/utils/fs.d.ts +1 -1
  381. package/dist/utils/fs.d.ts.map +1 -1
  382. package/dist/utils/fs.js +29 -2
  383. package/dist/utils/fs.js.map +1 -1
  384. package/dist/utils/git-stash.d.ts.map +1 -1
  385. package/dist/utils/git-stash.js +15 -8
  386. package/dist/utils/git-stash.js.map +1 -1
  387. package/dist/utils/json.d.ts +11 -0
  388. package/dist/utils/json.d.ts.map +1 -1
  389. package/dist/utils/json.js +9 -0
  390. package/dist/utils/json.js.map +1 -1
  391. package/dist/utils/shell-env.d.ts.map +1 -1
  392. package/dist/utils/shell-env.js +2 -0
  393. package/dist/utils/shell-env.js.map +1 -1
  394. package/dist/utils/url-extractor-git.d.ts +26 -0
  395. package/dist/utils/url-extractor-git.d.ts.map +1 -0
  396. package/dist/utils/url-extractor-git.js +259 -0
  397. package/dist/utils/url-extractor-git.js.map +1 -0
  398. package/dist/utils/url-extractor.d.ts.map +1 -1
  399. package/dist/utils/url-extractor.js +23 -251
  400. package/dist/utils/url-extractor.js.map +1 -1
  401. package/dist/version.json +2 -2
  402. package/package.json +310 -306
  403. package/skills/incident-triage/SKILL.md +19 -1
  404. package/skills/install-code-review/SKILL.md +69 -0
  405. package/skills/security-review/SKILL.md +68 -0
  406. package/skills/security-review/reference/rubric.md +85 -0
@@ -1,16 +1,19 @@
1
1
  import crypto from "node:crypto";
2
2
  import { constants } from "node:fs";
3
3
  import { access, mkdir, readFile, rename, rm, unlink, writeFile, } from "node:fs/promises";
4
- import { dirname, posix, resolve as resolvePath } from "node:path";
4
+ import { dirname, isAbsolute, posix, resolve as resolvePath } from "node:path";
5
5
  import { Type } from "@sinclair/typebox";
6
+ import { detectMissionSessionRole, validateMissionArtifactDelete, validateMissionArtifactWrite, } from "../agent/mission-artifacts.js";
6
7
  import { captureDiagnosticBaseline, collectDiagnosticDelta, } from "../lsp/diagnostic-deltas.js";
7
8
  import { buildDiagnosticDeltaToolSummary, formatDiagnosticDeltaForToolOutput, } from "../lsp/diagnostic-repair.js";
8
9
  import { assertTeamMemoryContentSafe } from "../memory/team-memory.js";
9
10
  import { isContainedInWorkspace } from "../safety/path-containment.js";
10
11
  import { requirePlanCheck, runValidatorsOnSuccess, } from "../safety/safe-mode.js";
12
+ import { createLogger } from "../utils/logger.js";
11
13
  import { parseApplyPatch, } from "./apply-patch-parser.js";
12
14
  import { generateDiffString } from "./diff-utils.js";
13
15
  import { ToolError, createTool, expandUserPath } from "./tool-dsl.js";
16
+ const logger = createLogger("tools:apply-patch");
14
17
  const applyPatchSchema = Type.Object({
15
18
  patch: Type.String({
16
19
  description: "OpenAI apply_patch block from *** Begin Patch to *** End Patch",
@@ -84,13 +87,15 @@ Use this when a Codex-family model emits its native apply_patch grammar. Use edi
84
87
  }
85
88
  };
86
89
  const document = parseApplyPatch(patch);
90
+ const missionRole = detectMissionSessionRole();
87
91
  const plan = sandbox
88
- ? await planSandboxPatch(document, sandbox)
89
- : await planFilesystemPatch(document);
92
+ ? await planSandboxPatch(document, sandbox, missionRole)
93
+ : await planFilesystemPatch(document, missionRole);
90
94
  const details = buildDetails(plan, sandbox ? "sandbox" : undefined);
91
95
  if (plan.hunksFailed > 0) {
92
96
  throw new ApplyPatchConflictError(`apply_patch failed: ${plan.hunksFailed} hunk(s) could not be applied. Re-read the affected file(s), re-author the patch with fresh context, and retry.`, details);
93
97
  }
98
+ validateMissionPatchPlan(plan, details);
94
99
  throwIfAborted();
95
100
  let postWriteOutput = "";
96
101
  if (!dryRun) {
@@ -127,7 +132,7 @@ Use this when a Codex-family model emits its native apply_patch grammar. Use edi
127
132
  .detail(details);
128
133
  },
129
134
  });
130
- async function planFilesystemPatch(document) {
135
+ async function planFilesystemPatch(document, role) {
131
136
  const plan = emptyPlan();
132
137
  const stagedFiles = new Map();
133
138
  const getState = async (path) => {
@@ -156,6 +161,7 @@ async function planFilesystemPatch(document) {
156
161
  }
157
162
  const nextContent = serializeLines(operation.lines, true);
158
163
  assertTeamMemoryContentSafe(absolutePath, nextContent);
164
+ assertMissionArtifactPatchAllowed(state.path, nextContent, role, undefined);
159
165
  addPlannedChange(plan, {
160
166
  path: state.path,
161
167
  absolutePath,
@@ -170,6 +176,7 @@ async function planFilesystemPatch(document) {
170
176
  }
171
177
  else if (operation.type === "delete") {
172
178
  const previousContent = await readFilesystemStateContent(state, operation.path);
179
+ assertMissionArtifactPatchAllowed(state.path, null, role, undefined);
173
180
  addPlannedChange(plan, {
174
181
  path: state.path,
175
182
  absolutePath,
@@ -198,6 +205,8 @@ async function planFilesystemPatch(document) {
198
205
  throw new Error(`File already exists: ${operation.moveTo}`);
199
206
  }
200
207
  assertTeamMemoryContentSafe(destinationState.absolutePath, nextContent);
208
+ assertMissionArtifactPatchAllowed(state.path, null, role, undefined);
209
+ assertMissionArtifactPatchAllowed(destinationState.path, nextContent, role, undefined);
201
210
  addPlannedChange(plan, {
202
211
  path: state.path,
203
212
  absolutePath,
@@ -223,6 +232,7 @@ async function planFilesystemPatch(document) {
223
232
  continue;
224
233
  }
225
234
  assertTeamMemoryContentSafe(absolutePath, nextContent);
235
+ assertMissionArtifactPatchAllowed(state.path, nextContent, role, undefined);
226
236
  addPlannedChange(plan, {
227
237
  path: state.path,
228
238
  absolutePath,
@@ -238,11 +248,11 @@ async function planFilesystemPatch(document) {
238
248
  }
239
249
  return plan;
240
250
  }
241
- async function planSandboxPatch(document, sandbox) {
251
+ async function planSandboxPatch(document, sandbox, role) {
242
252
  const plan = emptyPlan();
243
253
  const stagedFiles = new Map();
244
254
  const getState = async (path) => {
245
- const absolutePath = path;
255
+ const absolutePath = resolvePath(expandUserPath(path));
246
256
  assertApplyPatchPathContained(path, absolutePath, "sandbox");
247
257
  const cacheKey = normalizeSandboxPathKey(path);
248
258
  const cached = stagedFiles.get(cacheKey);
@@ -268,6 +278,7 @@ async function planSandboxPatch(document, sandbox) {
268
278
  }
269
279
  const nextContent = serializeLines(operation.lines, true);
270
280
  assertTeamMemoryContentSafe(absolutePath, nextContent);
281
+ assertMissionArtifactPatchAllowed(state.path, nextContent, role, "sandbox");
271
282
  addPlannedChange(plan, {
272
283
  path: state.path,
273
284
  absolutePath,
@@ -282,6 +293,7 @@ async function planSandboxPatch(document, sandbox) {
282
293
  }
283
294
  else if (operation.type === "delete") {
284
295
  const previousContent = await readSandboxStateContent(state, operation.path, sandbox, "in sandbox");
296
+ assertMissionArtifactPatchAllowed(state.path, null, role, "sandbox");
285
297
  addPlannedChange(plan, {
286
298
  path: state.path,
287
299
  absolutePath,
@@ -310,6 +322,8 @@ async function planSandboxPatch(document, sandbox) {
310
322
  throw new Error(`File already exists in sandbox: ${operation.moveTo}`);
311
323
  }
312
324
  assertTeamMemoryContentSafe(destinationState.absolutePath, nextContent);
325
+ assertMissionArtifactPatchAllowed(state.path, null, role, "sandbox");
326
+ assertMissionArtifactPatchAllowed(destinationState.path, nextContent, role, "sandbox");
313
327
  addPlannedChange(plan, {
314
328
  path: state.path,
315
329
  absolutePath,
@@ -335,6 +349,7 @@ async function planSandboxPatch(document, sandbox) {
335
349
  continue;
336
350
  }
337
351
  assertTeamMemoryContentSafe(absolutePath, nextContent);
352
+ assertMissionArtifactPatchAllowed(state.path, nextContent, role, "sandbox");
338
353
  addPlannedChange(plan, {
339
354
  path: state.path,
340
355
  absolutePath,
@@ -350,6 +365,27 @@ async function planSandboxPatch(document, sandbox) {
350
365
  }
351
366
  return plan;
352
367
  }
368
+ function assertMissionArtifactPatchAllowed(path, nextContent, role, mode) {
369
+ const absolutePath = resolvePath(expandUserPath(path));
370
+ if (nextContent !== null) {
371
+ const writeValidation = validateMissionArtifactWrite({
372
+ filePath: absolutePath,
373
+ content: nextContent,
374
+ role,
375
+ });
376
+ if (writeValidation.ok) {
377
+ return;
378
+ }
379
+ throw new ToolError(writeValidation.message, "APPLY_PATCH_MISSION_ARTIFACT", emptyApplyPatchDetails(mode));
380
+ }
381
+ const deleteValidation = validateMissionArtifactDelete({
382
+ filePath: absolutePath,
383
+ });
384
+ if (deleteValidation.ok) {
385
+ return;
386
+ }
387
+ throw new ToolError(deleteValidation.message, "APPLY_PATCH_MISSION_ARTIFACT", emptyApplyPatchDetails(mode));
388
+ }
353
389
  function applyUpdateHunks(previousContent, hunks) {
354
390
  const document = normalizeDocument(previousContent);
355
391
  let lines = [...document.lines];
@@ -426,6 +462,28 @@ async function writeFilesystemChanges(plan, throwIfAborted) {
426
462
  await writeFileAtomically(change.absolutePath, change.nextContent);
427
463
  }
428
464
  }
465
+ function validateMissionPatchPlan(plan, details) {
466
+ const role = detectMissionSessionRole();
467
+ for (const change of plan.changes) {
468
+ const result = change.nextContent === null
469
+ ? validateMissionArtifactDelete({
470
+ filePath: missionValidationPath(change),
471
+ })
472
+ : validateMissionArtifactWrite({
473
+ filePath: missionValidationPath(change),
474
+ content: change.nextContent,
475
+ role,
476
+ });
477
+ if (!result.ok) {
478
+ throw new ToolError(result.message, "APPLY_PATCH_MISSION_ARTIFACT", details);
479
+ }
480
+ }
481
+ }
482
+ function missionValidationPath(change) {
483
+ return isAbsolute(change.absolutePath)
484
+ ? change.absolutePath
485
+ : resolvePath(expandUserPath(change.path));
486
+ }
429
487
  async function writeSandboxChanges(plan, sandbox) {
430
488
  validateSandboxRollbackSupport(plan, sandbox);
431
489
  try {
@@ -461,7 +519,12 @@ async function rollbackSandboxChanges(plan, sandbox) {
461
519
  }
462
520
  await sandbox.writeFile(change.path, change.previousContent);
463
521
  }
464
- catch { }
522
+ catch (error) {
523
+ logger.debug("Sandbox rollback step failed", {
524
+ path: change.path,
525
+ error,
526
+ });
527
+ }
465
528
  }
466
529
  }
467
530
  async function captureWriteBaselines(plan) {
@@ -510,7 +573,12 @@ async function rollbackFilesystemChanges(plan) {
510
573
  await mkdir(dirname(change.absolutePath), { recursive: true });
511
574
  await writeFileAtomically(change.absolutePath, change.previousContent);
512
575
  }
513
- catch { }
576
+ catch (error) {
577
+ logger.debug("Filesystem rollback step failed", {
578
+ path: change.absolutePath,
579
+ error,
580
+ });
581
+ }
514
582
  }
515
583
  }
516
584
  async function writeFileAtomically(filePath, contents) {
@@ -1 +1 @@
1
- {"version":3,"file":"apply-patch.js","sourceRoot":"","sources":["../../src/tools/apply-patch.ts"],"names":[],"mappings":"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","sourcesContent":["import crypto from \"node:crypto\";\nimport { constants } from \"node:fs\";\nimport {\n\taccess,\n\tmkdir,\n\treadFile,\n\trename,\n\trm,\n\tunlink,\n\twriteFile,\n} from \"node:fs/promises\";\nimport { dirname, posix, resolve as resolvePath } from \"node:path\";\nimport { Type } from \"@sinclair/typebox\";\nimport {\n\tcaptureDiagnosticBaseline,\n\tcollectDiagnosticDelta,\n} from \"../lsp/diagnostic-deltas.js\";\nimport {\n\ttype DiagnosticDeltaToolSummary,\n\tbuildDiagnosticDeltaToolSummary,\n\tformatDiagnosticDeltaForToolOutput,\n} from \"../lsp/diagnostic-repair.js\";\nimport { assertTeamMemoryContentSafe } from \"../memory/team-memory.js\";\nimport { isContainedInWorkspace } from \"../safety/path-containment.js\";\nimport {\n\trequirePlanCheck,\n\trunValidatorsOnSuccess,\n} from \"../safety/safe-mode.js\";\nimport type { ValidatorRunResult } from \"../safety/safe-mode.js\";\nimport type { Sandbox } from \"../sandbox/types.js\";\nimport {\n\ttype ApplyPatchDocument,\n\ttype ApplyPatchHunk,\n\tparseApplyPatch,\n} from \"./apply-patch-parser.js\";\nimport { generateDiffString } from \"./diff-utils.js\";\nimport { ToolError, createTool, expandUserPath } from \"./tool-dsl.js\";\n\ntype LineEnding = \"\\n\" | \"\\r\\n\" | \"\\r\";\n\ntype NormalizedDocument = {\n\toriginal: string;\n\tlines: string[];\n\thadFinalNewline: boolean;\n\tbom: string;\n\tlineEnding: LineEnding;\n};\n\ntype PlannedFileChange = {\n\tpath: string;\n\tabsolutePath: string;\n\tpreviousContent: string | null;\n\tnextContent: string | null;\n\toperation: \"add\" | \"update\" | \"delete\";\n\thunksApplied: number;\n\tdiff?: string;\n};\n\ntype StagedFileState = {\n\tpath: string;\n\tabsolutePath: string;\n\texists: boolean;\n\tcurrentContent?: string | null;\n};\n\ntype DiagnosticBaseline = Awaited<ReturnType<typeof captureDiagnosticBaseline>>;\n\ntype ApplyPatchPlan = {\n\tfilesModified: string[];\n\tfilesCreated: string[];\n\tfilesDeleted: string[];\n\thunksApplied: number;\n\thunksFailed: number;\n\tconflictDetails?: string[];\n\tchanges: PlannedFileChange[];\n};\n\nconst applyPatchSchema = Type.Object({\n\tpatch: Type.String({\n\t\tdescription:\n\t\t\t\"OpenAI apply_patch block from *** Begin Patch to *** End Patch\",\n\t\tminLength: 1,\n\t}),\n\tdryRun: Type.Optional(\n\t\tType.Boolean({\n\t\t\tdescription: \"Preview the patch without writing changes\",\n\t\t\tdefault: false,\n\t\t}),\n\t),\n});\n\nexport type ApplyPatchToolDetails = {\n\tfilesModified: string[];\n\tfilesCreated: string[];\n\tfilesDeleted: string[];\n\thunksApplied: number;\n\thunksFailed: number;\n\tconflictDetails?: string[];\n\tdiffs?: Record<string, string>;\n\tvalidators?: ValidatorRunResult[];\n\tdiagnosticDelta?: DiagnosticDeltaToolSummary;\n\tdiagnosticDeltas?: DiagnosticDeltaToolSummary[];\n\teditGrammar: \"apply_patch\";\n\tmode?: \"sandbox\";\n};\n\nclass ApplyPatchConflictError extends ToolError {\n\tconstructor(message: string, details: ApplyPatchToolDetails) {\n\t\tsuper(message, \"APPLY_PATCH_CONFLICT\", details);\n\t}\n}\n\nfunction emptyApplyPatchDetails(mode?: \"sandbox\"): ApplyPatchToolDetails {\n\treturn {\n\t\tfilesModified: [],\n\t\tfilesCreated: [],\n\t\tfilesDeleted: [],\n\t\thunksApplied: 0,\n\t\thunksFailed: 0,\n\t\teditGrammar: \"apply_patch\",\n\t\t...(mode ? { mode } : {}),\n\t};\n}\n\nfunction assertApplyPatchPathContained(\n\tpath: string,\n\tabsolutePath: string,\n\tmode?: \"sandbox\",\n): void {\n\tif (mode === \"sandbox\") {\n\t\tassertSandboxApplyPatchPathContained(path);\n\t\treturn;\n\t}\n\tif (isContainedInWorkspace(absolutePath)) {\n\t\treturn;\n\t}\n\tthrowApplyPatchPathOutsideWorkspace(path, mode);\n}\n\nfunction assertSandboxApplyPatchPathContained(path: string): void {\n\tconst containmentPath = path.replaceAll(\"\\\\\", \"/\");\n\tif (posix.isAbsolute(containmentPath)) {\n\t\tif (!containmentPath.split(\"/\").includes(\"..\")) {\n\t\t\treturn;\n\t\t}\n\t\tthrowApplyPatchPathOutsideWorkspace(path, \"sandbox\");\n\t}\n\tconst normalized = normalizeSandboxPathKey(containmentPath);\n\tif (normalized !== \"..\" && !normalized.startsWith(\"../\")) {\n\t\treturn;\n\t}\n\tthrowApplyPatchPathOutsideWorkspace(path, \"sandbox\");\n}\n\nfunction throwApplyPatchPathOutsideWorkspace(\n\tpath: string,\n\tmode?: \"sandbox\",\n): never {\n\tthrow new ToolError(\n\t\t`apply_patch path is outside the workspace: ${path}`,\n\t\t\"APPLY_PATCH_PATH_OUTSIDE_WORKSPACE\",\n\t\temptyApplyPatchDetails(mode),\n\t);\n}\n\nexport const applyPatchTool = createTool<\n\ttypeof applyPatchSchema,\n\tApplyPatchToolDetails\n>({\n\tname: \"apply_patch\",\n\tlabel: \"apply_patch\",\n\tdescription: `Apply an OpenAI/Codex apply_patch block directly.\n\nParameters:\n- patch: Patch text using *** Begin Patch / *** End Patch with Add, Update, or Delete File operations.\n- dryRun: Preview only (default: false).\n\nUse this when a Codex-family model emits its native apply_patch grammar. Use edit for targeted find-and-replace edits.`,\n\tschema: applyPatchSchema,\n\tshouldRetry: (error) => error instanceof ApplyPatchConflictError,\n\tasync run({ patch, dryRun = false }, { signal, respond, sandbox }) {\n\t\trequirePlanCheck(\"apply_patch\");\n\t\tconst throwIfAborted = () => {\n\t\t\tif (signal?.aborted) {\n\t\t\t\tthrow new Error(\"Operation aborted\");\n\t\t\t}\n\t\t};\n\n\t\tconst document = parseApplyPatch(patch);\n\t\tconst plan = sandbox\n\t\t\t? await planSandboxPatch(document, sandbox)\n\t\t\t: await planFilesystemPatch(document);\n\t\tconst details = buildDetails(plan, sandbox ? \"sandbox\" : undefined);\n\n\t\tif (plan.hunksFailed > 0) {\n\t\t\tthrow new ApplyPatchConflictError(\n\t\t\t\t`apply_patch failed: ${plan.hunksFailed} hunk(s) could not be applied. Re-read the affected file(s), re-author the patch with fresh context, and retry.`,\n\t\t\t\tdetails,\n\t\t\t);\n\t\t}\n\n\t\tthrowIfAborted();\n\t\tlet postWriteOutput = \"\";\n\t\tif (!dryRun) {\n\t\t\tif (sandbox) {\n\t\t\t\tawait writeSandboxChanges(plan, sandbox);\n\t\t\t} else {\n\t\t\t\tconst baselines = await captureWriteBaselines(plan);\n\t\t\t\tthrowIfAborted();\n\t\t\t\ttry {\n\t\t\t\t\tawait writeFilesystemChanges(plan, throwIfAborted);\n\t\t\t\t\tconst postWriteDetails = await collectPostWriteDetails(\n\t\t\t\t\t\tplan,\n\t\t\t\t\t\tbaselines,\n\t\t\t\t\t\tthrowIfAborted,\n\t\t\t\t\t);\n\t\t\t\t\tObject.assign(details, postWriteDetails);\n\t\t\t\t\tif (postWriteDetails.diagnosticDelta) {\n\t\t\t\t\t\tpostWriteOutput = formatDiagnosticDeltaForToolOutput(\n\t\t\t\t\t\t\tpostWriteDetails.diagnosticDelta,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tawait rollbackFilesystemChanges(plan);\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst changedFileCount = countChangedFiles(plan);\n\t\treturn respond\n\t\t\t.text(\n\t\t\t\t[\n\t\t\t\t\tdryRun\n\t\t\t\t\t\t? `Dry run: apply_patch would update ${changedFileCount} file(s) with ${plan.hunksApplied} hunk(s).`\n\t\t\t\t\t\t: `Applied patch to ${changedFileCount} file(s) with ${plan.hunksApplied} hunk(s).`,\n\t\t\t\t\tpostWriteOutput,\n\t\t\t\t]\n\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t.join(\"\\n\"),\n\t\t\t)\n\t\t\t.detail(details);\n\t},\n});\n\nasync function planFilesystemPatch(\n\tdocument: ApplyPatchDocument,\n): Promise<ApplyPatchPlan> {\n\tconst plan = emptyPlan();\n\tconst stagedFiles = new Map<string, StagedFileState>();\n\tconst getState = async (path: string): Promise<StagedFileState> => {\n\t\tconst absolutePath = resolvePath(expandUserPath(path));\n\t\tassertApplyPatchPathContained(path, absolutePath);\n\t\tconst cached = stagedFiles.get(absolutePath);\n\t\tif (cached) {\n\t\t\treturn cached;\n\t\t}\n\t\tconst exists = await fileExists(absolutePath);\n\t\tconst state = {\n\t\t\tpath,\n\t\t\tabsolutePath,\n\t\t\texists,\n\t\t\tcurrentContent: exists ? undefined : null,\n\t\t};\n\t\tstagedFiles.set(absolutePath, state);\n\t\treturn state;\n\t};\n\n\tfor (const operation of document.operations) {\n\t\tconst state = await getState(operation.path);\n\t\tconst { absolutePath } = state;\n\t\tif (operation.type === \"add\") {\n\t\t\tif (state.exists) {\n\t\t\t\tthrow new Error(`File already exists: ${operation.path}`);\n\t\t\t}\n\t\t\tconst nextContent = serializeLines(operation.lines, true);\n\t\t\tassertTeamMemoryContentSafe(absolutePath, nextContent);\n\t\t\taddPlannedChange(plan, {\n\t\t\t\tpath: state.path,\n\t\t\t\tabsolutePath,\n\t\t\t\tpreviousContent: null,\n\t\t\t\tnextContent,\n\t\t\t\toperation: \"add\",\n\t\t\t\thunksApplied: 1,\n\t\t\t\tdiff: generateDiffString(\"\", nextContent),\n\t\t\t});\n\t\t\tstate.exists = true;\n\t\t\tstate.currentContent = nextContent;\n\t\t} else if (operation.type === \"delete\") {\n\t\t\tconst previousContent = await readFilesystemStateContent(\n\t\t\t\tstate,\n\t\t\t\toperation.path,\n\t\t\t);\n\t\t\taddPlannedChange(plan, {\n\t\t\t\tpath: state.path,\n\t\t\t\tabsolutePath,\n\t\t\t\tpreviousContent,\n\t\t\t\tnextContent: null,\n\t\t\t\toperation: \"delete\",\n\t\t\t\thunksApplied: 1,\n\t\t\t\tdiff: generateDiffString(previousContent, \"\"),\n\t\t\t});\n\t\t\tstate.exists = false;\n\t\t\tstate.currentContent = null;\n\t\t} else {\n\t\t\tconst previousContent = await readFilesystemStateContent(\n\t\t\t\tstate,\n\t\t\t\toperation.path,\n\t\t\t);\n\t\t\tconst applied =\n\t\t\t\toperation.hunks.length > 0\n\t\t\t\t\t? applyUpdateHunks(previousContent, operation.hunks)\n\t\t\t\t\t: { content: previousContent, hunksApplied: 0, conflicts: [] };\n\t\t\tif (applied.conflicts.length > 0) {\n\t\t\t\trecordConflicts(plan, operation.path, applied.conflicts);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst nextContent = applied.content;\n\t\t\tif (operation.moveTo) {\n\t\t\t\tconst destinationState = await getState(operation.moveTo);\n\t\t\t\tif (destinationState.exists) {\n\t\t\t\t\tthrow new Error(`File already exists: ${operation.moveTo}`);\n\t\t\t\t}\n\t\t\t\tassertTeamMemoryContentSafe(destinationState.absolutePath, nextContent);\n\t\t\t\taddPlannedChange(plan, {\n\t\t\t\t\tpath: state.path,\n\t\t\t\t\tabsolutePath,\n\t\t\t\t\tpreviousContent,\n\t\t\t\t\tnextContent: null,\n\t\t\t\t\toperation: \"delete\",\n\t\t\t\t\thunksApplied: 0,\n\t\t\t\t\tdiff: generateDiffString(previousContent, \"\"),\n\t\t\t\t});\n\t\t\t\taddPlannedChange(plan, {\n\t\t\t\t\tpath: destinationState.path,\n\t\t\t\t\tabsolutePath: destinationState.absolutePath,\n\t\t\t\t\tpreviousContent: null,\n\t\t\t\t\tnextContent,\n\t\t\t\t\toperation: \"add\",\n\t\t\t\t\thunksApplied: applied.hunksApplied,\n\t\t\t\t\tdiff: generateDiffString(\"\", nextContent),\n\t\t\t\t});\n\t\t\t\tstate.exists = false;\n\t\t\t\tstate.currentContent = null;\n\t\t\t\tdestinationState.exists = true;\n\t\t\t\tdestinationState.currentContent = nextContent;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tassertTeamMemoryContentSafe(absolutePath, nextContent);\n\t\t\taddPlannedChange(plan, {\n\t\t\t\tpath: state.path,\n\t\t\t\tabsolutePath,\n\t\t\t\tpreviousContent,\n\t\t\t\tnextContent,\n\t\t\t\toperation: \"update\",\n\t\t\t\thunksApplied: applied.hunksApplied,\n\t\t\t\tdiff: generateDiffString(previousContent, nextContent),\n\t\t\t});\n\t\t\tstate.exists = true;\n\t\t\tstate.currentContent = nextContent;\n\t\t}\n\t}\n\treturn plan;\n}\n\nasync function planSandboxPatch(\n\tdocument: ApplyPatchDocument,\n\tsandbox: Sandbox,\n): Promise<ApplyPatchPlan> {\n\tconst plan = emptyPlan();\n\tconst stagedFiles = new Map<string, StagedFileState>();\n\tconst getState = async (path: string): Promise<StagedFileState> => {\n\t\tconst absolutePath = path;\n\t\tassertApplyPatchPathContained(path, absolutePath, \"sandbox\");\n\t\tconst cacheKey = normalizeSandboxPathKey(path);\n\t\tconst cached = stagedFiles.get(cacheKey);\n\t\tif (cached) {\n\t\t\treturn cached;\n\t\t}\n\t\tconst exists = await sandbox.exists(path);\n\t\tconst state = {\n\t\t\tpath,\n\t\t\tabsolutePath,\n\t\t\texists,\n\t\t\tcurrentContent: exists ? undefined : null,\n\t\t};\n\t\tstagedFiles.set(cacheKey, state);\n\t\treturn state;\n\t};\n\n\tfor (const operation of document.operations) {\n\t\tconst state = await getState(operation.path);\n\t\tconst { absolutePath } = state;\n\t\tif (operation.type === \"add\") {\n\t\t\tif (state.exists) {\n\t\t\t\tthrow new Error(`File already exists: ${operation.path}`);\n\t\t\t}\n\t\t\tconst nextContent = serializeLines(operation.lines, true);\n\t\t\tassertTeamMemoryContentSafe(absolutePath, nextContent);\n\t\t\taddPlannedChange(plan, {\n\t\t\t\tpath: state.path,\n\t\t\t\tabsolutePath,\n\t\t\t\tpreviousContent: null,\n\t\t\t\tnextContent,\n\t\t\t\toperation: \"add\",\n\t\t\t\thunksApplied: 1,\n\t\t\t\tdiff: generateDiffString(\"\", nextContent),\n\t\t\t});\n\t\t\tstate.exists = true;\n\t\t\tstate.currentContent = nextContent;\n\t\t} else if (operation.type === \"delete\") {\n\t\t\tconst previousContent = await readSandboxStateContent(\n\t\t\t\tstate,\n\t\t\t\toperation.path,\n\t\t\t\tsandbox,\n\t\t\t\t\"in sandbox\",\n\t\t\t);\n\t\t\taddPlannedChange(plan, {\n\t\t\t\tpath: state.path,\n\t\t\t\tabsolutePath,\n\t\t\t\tpreviousContent,\n\t\t\t\tnextContent: null,\n\t\t\t\toperation: \"delete\",\n\t\t\t\thunksApplied: 1,\n\t\t\t\tdiff: generateDiffString(previousContent, \"\"),\n\t\t\t});\n\t\t\tstate.exists = false;\n\t\t\tstate.currentContent = null;\n\t\t} else {\n\t\t\tconst previousContent = await readSandboxStateContent(\n\t\t\t\tstate,\n\t\t\t\toperation.path,\n\t\t\t\tsandbox,\n\t\t\t\t\"in sandbox\",\n\t\t\t);\n\t\t\tconst applied =\n\t\t\t\toperation.hunks.length > 0\n\t\t\t\t\t? applyUpdateHunks(previousContent, operation.hunks)\n\t\t\t\t\t: { content: previousContent, hunksApplied: 0, conflicts: [] };\n\t\t\tif (applied.conflicts.length > 0) {\n\t\t\t\trecordConflicts(plan, operation.path, applied.conflicts);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst nextContent = applied.content;\n\t\t\tif (operation.moveTo) {\n\t\t\t\tconst destinationState = await getState(operation.moveTo);\n\t\t\t\tif (destinationState.exists) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`File already exists in sandbox: ${operation.moveTo}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tassertTeamMemoryContentSafe(destinationState.absolutePath, nextContent);\n\t\t\t\taddPlannedChange(plan, {\n\t\t\t\t\tpath: state.path,\n\t\t\t\t\tabsolutePath,\n\t\t\t\t\tpreviousContent,\n\t\t\t\t\tnextContent: null,\n\t\t\t\t\toperation: \"delete\",\n\t\t\t\t\thunksApplied: 0,\n\t\t\t\t\tdiff: generateDiffString(previousContent, \"\"),\n\t\t\t\t});\n\t\t\t\taddPlannedChange(plan, {\n\t\t\t\t\tpath: destinationState.path,\n\t\t\t\t\tabsolutePath: destinationState.absolutePath,\n\t\t\t\t\tpreviousContent: null,\n\t\t\t\t\tnextContent,\n\t\t\t\t\toperation: \"add\",\n\t\t\t\t\thunksApplied: applied.hunksApplied,\n\t\t\t\t\tdiff: generateDiffString(\"\", nextContent),\n\t\t\t\t});\n\t\t\t\tstate.exists = false;\n\t\t\t\tstate.currentContent = null;\n\t\t\t\tdestinationState.exists = true;\n\t\t\t\tdestinationState.currentContent = nextContent;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tassertTeamMemoryContentSafe(absolutePath, nextContent);\n\t\t\taddPlannedChange(plan, {\n\t\t\t\tpath: state.path,\n\t\t\t\tabsolutePath,\n\t\t\t\tpreviousContent,\n\t\t\t\tnextContent,\n\t\t\t\toperation: \"update\",\n\t\t\t\thunksApplied: applied.hunksApplied,\n\t\t\t\tdiff: generateDiffString(previousContent, nextContent),\n\t\t\t});\n\t\t\tstate.exists = true;\n\t\t\tstate.currentContent = nextContent;\n\t\t}\n\t}\n\treturn plan;\n}\n\nfunction applyUpdateHunks(\n\tpreviousContent: string,\n\thunks: ApplyPatchHunk[],\n): { content: string; hunksApplied: number; conflicts: string[] } {\n\tconst document = normalizeDocument(previousContent);\n\tlet lines = [...document.lines];\n\tlet finalNewline = document.hadFinalNewline;\n\tconst conflicts: string[] = [];\n\tlet hunksApplied = 0;\n\tfor (const [index, hunk] of hunks.entries()) {\n\t\tif (hunk.oldLines.length === 0) {\n\t\t\tlines = [...lines, ...hunk.newLines];\n\t\t\tfinalNewline = resolveHunkFinalNewline(finalNewline, hunk, lines.length);\n\t\t\thunksApplied++;\n\t\t\tcontinue;\n\t\t}\n\t\tconst matches = findLineSequence(lines, hunk.oldLines).filter(\n\t\t\t(start) =>\n\t\t\t\t!hunk.oldMustEndAtEOF || start + hunk.oldLines.length === lines.length,\n\t\t);\n\t\tif (matches.length === 0) {\n\t\t\tconflicts.push(`hunk ${index + 1}: context not found`);\n\t\t\tcontinue;\n\t\t}\n\t\tif (matches.length > 1) {\n\t\t\tconflicts.push(\n\t\t\t\t`hunk ${index + 1}: context matched ${matches.length} times`,\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\t\tconst start = matches[0] ?? 0;\n\t\tlines = [\n\t\t\t...lines.slice(0, start),\n\t\t\t...hunk.newLines,\n\t\t\t...lines.slice(start + hunk.oldLines.length),\n\t\t];\n\t\tfinalNewline = resolveHunkFinalNewline(finalNewline, hunk, lines.length);\n\t\thunksApplied++;\n\t}\n\treturn {\n\t\tcontent: restoreDocumentContent(lines, document, finalNewline),\n\t\thunksApplied,\n\t\tconflicts,\n\t};\n}\n\nfunction resolveHunkFinalNewline(\n\tcurrentFinalNewline: boolean,\n\thunk: ApplyPatchHunk,\n\tresultLineCount: number,\n): boolean {\n\tif (hunk.newNoFinalNewline === true) {\n\t\treturn false;\n\t}\n\tif (hunk.oldNoFinalNewline === true) {\n\t\treturn resultLineCount > 0;\n\t}\n\treturn currentFinalNewline;\n}\n\nfunction findLineSequence(lines: string[], needle: string[]): number[] {\n\tconst matches: number[] = [];\n\tif (needle.length === 0 || needle.length > lines.length) {\n\t\treturn matches;\n\t}\n\tfor (let index = 0; index <= lines.length - needle.length; index++) {\n\t\tlet matched = true;\n\t\tfor (let offset = 0; offset < needle.length; offset++) {\n\t\t\tif (lines[index + offset] !== needle[offset]) {\n\t\t\t\tmatched = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (matched) {\n\t\t\tmatches.push(index);\n\t\t}\n\t}\n\treturn matches;\n}\n\nasync function writeFilesystemChanges(\n\tplan: ApplyPatchPlan,\n\tthrowIfAborted: () => void,\n): Promise<void> {\n\tfor (const change of plan.changes) {\n\t\tthrowIfAborted();\n\t\tif (change.nextContent === null) {\n\t\t\tawait rm(change.absolutePath, { force: true });\n\t\t\tcontinue;\n\t\t}\n\t\tawait mkdir(dirname(change.absolutePath), { recursive: true });\n\t\tawait writeFileAtomically(change.absolutePath, change.nextContent);\n\t}\n}\n\nasync function writeSandboxChanges(\n\tplan: ApplyPatchPlan,\n\tsandbox: Sandbox,\n): Promise<void> {\n\tvalidateSandboxRollbackSupport(plan, sandbox);\n\ttry {\n\t\tfor (const change of plan.changes) {\n\t\t\tif (change.nextContent === null) {\n\t\t\t\tif (!sandbox.delete) {\n\t\t\t\t\tthrow new Error(\"Sandbox does not support deleting files\");\n\t\t\t\t}\n\t\t\t\tawait sandbox.delete(change.path, false);\n\t\t\t} else {\n\t\t\t\tawait sandbox.writeFile(change.path, change.nextContent);\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\tawait rollbackSandboxChanges(plan, sandbox);\n\t\tthrow error;\n\t}\n}\n\nfunction validateSandboxRollbackSupport(\n\tplan: ApplyPatchPlan,\n\tsandbox: Sandbox,\n): void {\n\tconst needsDeleteForApplyOrRollback = plan.changes.some(\n\t\t(change) => change.nextContent === null || change.previousContent === null,\n\t);\n\tif (needsDeleteForApplyOrRollback && !sandbox.delete) {\n\t\tthrow new Error(\n\t\t\t\"Sandbox does not support deleting files, so apply_patch cannot safely apply add/delete operations\",\n\t\t);\n\t}\n}\n\nasync function rollbackSandboxChanges(\n\tplan: ApplyPatchPlan,\n\tsandbox: Sandbox,\n): Promise<void> {\n\tfor (const change of [...plan.changes].reverse()) {\n\t\ttry {\n\t\t\tif (change.previousContent === null) {\n\t\t\t\tawait sandbox.delete?.(change.path, false);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tawait sandbox.writeFile(change.path, change.previousContent);\n\t\t} catch {}\n\t}\n}\n\nasync function captureWriteBaselines(\n\tplan: ApplyPatchPlan,\n): Promise<Map<string, DiagnosticBaseline>> {\n\tconst baselines = new Map<string, DiagnosticBaseline>();\n\tfor (const change of plan.changes) {\n\t\tif (change.nextContent === null) {\n\t\t\tcontinue;\n\t\t}\n\t\tbaselines.set(\n\t\t\tchange.absolutePath,\n\t\t\tawait captureDiagnosticBaseline(change.absolutePath),\n\t\t);\n\t}\n\treturn baselines;\n}\n\nasync function collectPostWriteDetails(\n\tplan: ApplyPatchPlan,\n\tbaselines: Map<string, DiagnosticBaseline>,\n\tthrowIfAborted: () => void,\n): Promise<\n\tPick<\n\t\tApplyPatchToolDetails,\n\t\t\"validators\" | \"diagnosticDelta\" | \"diagnosticDeltas\"\n\t>\n> {\n\tconst writePaths = plan.changes\n\t\t.filter((change) => change.nextContent !== null)\n\t\t.map((change) => change.absolutePath);\n\tif (writePaths.length === 0) {\n\t\treturn {};\n\t}\n\tthrowIfAborted();\n\tconst deltaResults = await Promise.all(\n\t\twritePaths.map((writePath) =>\n\t\t\tcollectDiagnosticDelta(baselines.get(writePath)!),\n\t\t),\n\t);\n\tconst deltas = deltaResults.map((result, index) => {\n\t\tconst writePath = writePaths[index] ?? \"\";\n\t\treturn buildDiagnosticDeltaToolSummary({\n\t\t\tfile: writePath,\n\t\t\tdisplayPath:\n\t\t\t\tplan.changes.find((change) => change.absolutePath === writePath)\n\t\t\t\t\t?.path ?? writePath,\n\t\t\tresult,\n\t\t});\n\t});\n\tconst validatorDiagnostics = Object.fromEntries(\n\t\tdeltaResults.flatMap((result) =>\n\t\t\tObject.entries(result.validatorDiagnostics),\n\t\t),\n\t);\n\tconst validatorSummaries = await runValidatorsOnSuccess(\n\t\twritePaths,\n\t\tvalidatorDiagnostics,\n\t);\n\treturn {\n\t\tvalidators: validatorSummaries,\n\t\tdiagnosticDelta: deltas[0],\n\t\tdiagnosticDeltas: deltas,\n\t};\n}\n\nasync function rollbackFilesystemChanges(plan: ApplyPatchPlan): Promise<void> {\n\tfor (const change of [...plan.changes].reverse()) {\n\t\ttry {\n\t\t\tif (change.previousContent === null) {\n\t\t\t\tawait rm(change.absolutePath, { force: true });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tawait mkdir(dirname(change.absolutePath), { recursive: true });\n\t\t\tawait writeFileAtomically(change.absolutePath, change.previousContent);\n\t\t} catch {}\n\t}\n}\n\nasync function writeFileAtomically(\n\tfilePath: string,\n\tcontents: string,\n): Promise<void> {\n\tconst tempPath = `${filePath}.${crypto.randomUUID()}.tmp`;\n\tawait writeFile(tempPath, contents, \"utf-8\");\n\ttry {\n\t\tawait rename(tempPath, filePath);\n\t} catch (error) {\n\t\tawait unlink(tempPath).catch(() => {});\n\t\tthrow error;\n\t}\n}\n\nasync function readExistingFile(\n\tabsolutePath: string,\n\tdisplayPath: string,\n): Promise<string> {\n\ttry {\n\t\tawait access(absolutePath, constants.R_OK | constants.W_OK);\n\t\treturn await readFile(absolutePath, \"utf-8\");\n\t} catch {\n\t\tthrow new Error(\n\t\t\t`File not readable/writable: ${displayPath}. Use read/list to verify the path and permissions.`,\n\t\t);\n\t}\n}\n\nasync function fileExists(absolutePath: string): Promise<boolean> {\n\ttry {\n\t\tawait access(absolutePath, constants.F_OK);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction normalizeSandboxPathKey(path: string): string {\n\tconst isAbsolute = path.startsWith(\"/\");\n\tconst parts = path.split(\"/\").reduce<string[]>((segments, segment) => {\n\t\tif (segment === \"\" || segment === \".\") {\n\t\t\treturn segments;\n\t\t}\n\t\tif (segment === \"..\") {\n\t\t\tif (segments.length > 0 && segments.at(-1) !== \"..\") {\n\t\t\t\tsegments.pop();\n\t\t\t} else if (!isAbsolute) {\n\t\t\t\tsegments.push(segment);\n\t\t\t}\n\t\t\treturn segments;\n\t\t}\n\t\tsegments.push(segment);\n\t\treturn segments;\n\t}, []);\n\tconst normalized = parts.join(\"/\");\n\treturn isAbsolute ? `/${normalized}` : normalized;\n}\n\nasync function readFilesystemStateContent(\n\tstate: StagedFileState,\n\tdisplayPath: string,\n): Promise<string> {\n\tconst currentContent = requireLoadedStateContent(state, displayPath);\n\tif (currentContent !== undefined) {\n\t\treturn currentContent;\n\t}\n\tconst content = await readExistingFile(state.absolutePath, displayPath);\n\tstate.currentContent = content;\n\treturn content;\n}\n\nasync function readSandboxStateContent(\n\tstate: StagedFileState,\n\tdisplayPath: string,\n\tsandbox: Sandbox,\n\tlocation = \"\",\n): Promise<string> {\n\tconst currentContent = requireLoadedStateContent(\n\t\tstate,\n\t\tdisplayPath,\n\t\tlocation,\n\t);\n\tif (currentContent !== undefined) {\n\t\treturn currentContent;\n\t}\n\tconst content = await sandbox.readFile(displayPath);\n\tstate.currentContent = content;\n\treturn content;\n}\n\nfunction requireLoadedStateContent(\n\tstate: StagedFileState,\n\tdisplayPath: string,\n\tlocation = \"\",\n): string | undefined {\n\tconst locationSuffix = location ? ` ${location}` : \"\";\n\tif (state.currentContent !== undefined) {\n\t\tif (state.currentContent !== null) {\n\t\t\treturn state.currentContent;\n\t\t}\n\t\tthrow new Error(`File not found${locationSuffix}: ${displayPath}`);\n\t}\n\tif (state.exists) {\n\t\treturn undefined;\n\t}\n\tthrow new Error(`File not found${locationSuffix}: ${displayPath}`);\n}\n\nfunction emptyPlan(): ApplyPatchPlan {\n\treturn {\n\t\tfilesModified: [],\n\t\tfilesCreated: [],\n\t\tfilesDeleted: [],\n\t\thunksApplied: 0,\n\t\thunksFailed: 0,\n\t\tchanges: [],\n\t};\n}\n\nfunction addPlannedChange(\n\tplan: ApplyPatchPlan,\n\tchange: PlannedFileChange,\n): void {\n\tplan.changes.push(change);\n\tplan.hunksApplied += change.hunksApplied;\n\tif (change.operation === \"add\") {\n\t\tpushUnique(plan.filesCreated, change.path);\n\t} else if (change.operation === \"delete\") {\n\t\tpushUnique(plan.filesDeleted, change.path);\n\t} else {\n\t\tpushUnique(plan.filesModified, change.path);\n\t}\n}\n\nfunction pushUnique(values: string[], value: string): void {\n\tif (!values.includes(value)) {\n\t\tvalues.push(value);\n\t}\n}\n\nfunction recordConflicts(\n\tplan: ApplyPatchPlan,\n\tpath: string,\n\tconflicts: string[],\n): void {\n\tplan.hunksFailed += conflicts.length;\n\tplan.conflictDetails ??= [];\n\tfor (const conflict of conflicts) {\n\t\tplan.conflictDetails.push(`${path}: ${conflict}`);\n\t}\n}\n\nfunction buildDetails(\n\tplan: ApplyPatchPlan,\n\tmode?: \"sandbox\",\n): ApplyPatchToolDetails {\n\treturn {\n\t\tfilesModified: plan.filesModified,\n\t\tfilesCreated: plan.filesCreated,\n\t\tfilesDeleted: plan.filesDeleted,\n\t\thunksApplied: plan.hunksApplied,\n\t\thunksFailed: plan.hunksFailed,\n\t\tconflictDetails: plan.conflictDetails,\n\t\tdiffs: buildDiffDetails(plan),\n\t\teditGrammar: \"apply_patch\",\n\t\tmode,\n\t};\n}\n\nfunction buildDiffDetails(plan: ApplyPatchPlan): Record<string, string> {\n\tconst diffs: Record<string, string> = {};\n\tfor (const change of plan.changes) {\n\t\tif (change.diff === undefined) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst existing = diffs[change.path];\n\t\tdiffs[change.path] = existing ? `${existing}\\n${change.diff}` : change.diff;\n\t}\n\treturn diffs;\n}\n\nfunction countChangedFiles(plan: ApplyPatchPlan): number {\n\treturn new Set([\n\t\t...plan.filesCreated,\n\t\t...plan.filesModified,\n\t\t...plan.filesDeleted,\n\t]).size;\n}\n\nfunction detectLineEnding(text: string): LineEnding {\n\tif (text.includes(\"\\r\\n\")) return \"\\r\\n\";\n\tif (text.includes(\"\\r\")) return \"\\r\";\n\treturn \"\\n\";\n}\n\nfunction normalizeDocument(content: string): NormalizedDocument {\n\tconst bom = content.startsWith(\"\\uFEFF\") ? \"\\uFEFF\" : \"\";\n\tconst withoutBom = bom ? content.slice(1) : content;\n\tconst lineEnding = detectLineEnding(withoutBom);\n\tconst normalized = withoutBom.replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\");\n\tconst hadFinalNewline = normalized.endsWith(\"\\n\");\n\tconst trimmed = hadFinalNewline ? normalized.slice(0, -1) : normalized;\n\tconst lines = trimmed.length === 0 ? [] : trimmed.split(\"\\n\");\n\treturn { original: content, lines, hadFinalNewline, bom, lineEnding };\n}\n\nfunction restoreDocumentContent(\n\tlines: string[],\n\tdocument: NormalizedDocument,\n\tfinalNewline = document.hadFinalNewline,\n): string {\n\treturn `${document.bom}${serializeLines(lines, finalNewline).replace(/\\n/g, document.lineEnding)}`;\n}\n\nfunction serializeLines(lines: string[], finalNewline: boolean): string {\n\tif (lines.length === 0) {\n\t\treturn finalNewline ? \"\\n\" : \"\";\n\t}\n\treturn `${lines.join(\"\\n\")}${finalNewline ? \"\\n\" : \"\"}`;\n}\n"]}
1
+ {"version":3,"file":"apply-patch.js","sourceRoot":"","sources":["../../src/tools/apply-patch.ts"],"names":[],"mappings":"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","sourcesContent":["import crypto from \"node:crypto\";\nimport { constants } from \"node:fs\";\nimport {\n\taccess,\n\tmkdir,\n\treadFile,\n\trename,\n\trm,\n\tunlink,\n\twriteFile,\n} from \"node:fs/promises\";\nimport { dirname, isAbsolute, posix, resolve as resolvePath } from \"node:path\";\nimport { Type } from \"@sinclair/typebox\";\nimport {\n\ttype MissionSessionRole,\n\tdetectMissionSessionRole,\n\tvalidateMissionArtifactDelete,\n\tvalidateMissionArtifactWrite,\n} from \"../agent/mission-artifacts.js\";\nimport {\n\tcaptureDiagnosticBaseline,\n\tcollectDiagnosticDelta,\n} from \"../lsp/diagnostic-deltas.js\";\nimport {\n\ttype DiagnosticDeltaToolSummary,\n\tbuildDiagnosticDeltaToolSummary,\n\tformatDiagnosticDeltaForToolOutput,\n} from \"../lsp/diagnostic-repair.js\";\nimport { assertTeamMemoryContentSafe } from \"../memory/team-memory.js\";\nimport { isContainedInWorkspace } from \"../safety/path-containment.js\";\nimport {\n\trequirePlanCheck,\n\trunValidatorsOnSuccess,\n} from \"../safety/safe-mode.js\";\nimport type { ValidatorRunResult } from \"../safety/safe-mode.js\";\nimport type { Sandbox } from \"../sandbox/types.js\";\nimport { createLogger } from \"../utils/logger.js\";\nimport {\n\ttype ApplyPatchDocument,\n\ttype ApplyPatchHunk,\n\tparseApplyPatch,\n} from \"./apply-patch-parser.js\";\nimport { generateDiffString } from \"./diff-utils.js\";\nimport { ToolError, createTool, expandUserPath } from \"./tool-dsl.js\";\n\nconst logger = createLogger(\"tools:apply-patch\");\n\ntype LineEnding = \"\\n\" | \"\\r\\n\" | \"\\r\";\n\ntype NormalizedDocument = {\n\toriginal: string;\n\tlines: string[];\n\thadFinalNewline: boolean;\n\tbom: string;\n\tlineEnding: LineEnding;\n};\n\ntype PlannedFileChange = {\n\tpath: string;\n\tabsolutePath: string;\n\tpreviousContent: string | null;\n\tnextContent: string | null;\n\toperation: \"add\" | \"update\" | \"delete\";\n\thunksApplied: number;\n\tdiff?: string;\n};\n\ntype StagedFileState = {\n\tpath: string;\n\tabsolutePath: string;\n\texists: boolean;\n\tcurrentContent?: string | null;\n};\n\ntype DiagnosticBaseline = Awaited<ReturnType<typeof captureDiagnosticBaseline>>;\n\ntype ApplyPatchPlan = {\n\tfilesModified: string[];\n\tfilesCreated: string[];\n\tfilesDeleted: string[];\n\thunksApplied: number;\n\thunksFailed: number;\n\tconflictDetails?: string[];\n\tchanges: PlannedFileChange[];\n};\n\nconst applyPatchSchema = Type.Object({\n\tpatch: Type.String({\n\t\tdescription:\n\t\t\t\"OpenAI apply_patch block from *** Begin Patch to *** End Patch\",\n\t\tminLength: 1,\n\t}),\n\tdryRun: Type.Optional(\n\t\tType.Boolean({\n\t\t\tdescription: \"Preview the patch without writing changes\",\n\t\t\tdefault: false,\n\t\t}),\n\t),\n});\n\nexport type ApplyPatchToolDetails = {\n\tfilesModified: string[];\n\tfilesCreated: string[];\n\tfilesDeleted: string[];\n\thunksApplied: number;\n\thunksFailed: number;\n\tconflictDetails?: string[];\n\tdiffs?: Record<string, string>;\n\tvalidators?: ValidatorRunResult[];\n\tdiagnosticDelta?: DiagnosticDeltaToolSummary;\n\tdiagnosticDeltas?: DiagnosticDeltaToolSummary[];\n\teditGrammar: \"apply_patch\";\n\tmode?: \"sandbox\";\n};\n\nclass ApplyPatchConflictError extends ToolError {\n\tconstructor(message: string, details: ApplyPatchToolDetails) {\n\t\tsuper(message, \"APPLY_PATCH_CONFLICT\", details);\n\t}\n}\n\nfunction emptyApplyPatchDetails(mode?: \"sandbox\"): ApplyPatchToolDetails {\n\treturn {\n\t\tfilesModified: [],\n\t\tfilesCreated: [],\n\t\tfilesDeleted: [],\n\t\thunksApplied: 0,\n\t\thunksFailed: 0,\n\t\teditGrammar: \"apply_patch\",\n\t\t...(mode ? { mode } : {}),\n\t};\n}\n\nfunction assertApplyPatchPathContained(\n\tpath: string,\n\tabsolutePath: string,\n\tmode?: \"sandbox\",\n): void {\n\tif (mode === \"sandbox\") {\n\t\tassertSandboxApplyPatchPathContained(path);\n\t\treturn;\n\t}\n\tif (isContainedInWorkspace(absolutePath)) {\n\t\treturn;\n\t}\n\tthrowApplyPatchPathOutsideWorkspace(path, mode);\n}\n\nfunction assertSandboxApplyPatchPathContained(path: string): void {\n\tconst containmentPath = path.replaceAll(\"\\\\\", \"/\");\n\tif (posix.isAbsolute(containmentPath)) {\n\t\tif (!containmentPath.split(\"/\").includes(\"..\")) {\n\t\t\treturn;\n\t\t}\n\t\tthrowApplyPatchPathOutsideWorkspace(path, \"sandbox\");\n\t}\n\tconst normalized = normalizeSandboxPathKey(containmentPath);\n\tif (normalized !== \"..\" && !normalized.startsWith(\"../\")) {\n\t\treturn;\n\t}\n\tthrowApplyPatchPathOutsideWorkspace(path, \"sandbox\");\n}\n\nfunction throwApplyPatchPathOutsideWorkspace(\n\tpath: string,\n\tmode?: \"sandbox\",\n): never {\n\tthrow new ToolError(\n\t\t`apply_patch path is outside the workspace: ${path}`,\n\t\t\"APPLY_PATCH_PATH_OUTSIDE_WORKSPACE\",\n\t\temptyApplyPatchDetails(mode),\n\t);\n}\n\nexport const applyPatchTool = createTool<\n\ttypeof applyPatchSchema,\n\tApplyPatchToolDetails\n>({\n\tname: \"apply_patch\",\n\tlabel: \"apply_patch\",\n\tdescription: `Apply an OpenAI/Codex apply_patch block directly.\n\nParameters:\n- patch: Patch text using *** Begin Patch / *** End Patch with Add, Update, or Delete File operations.\n- dryRun: Preview only (default: false).\n\nUse this when a Codex-family model emits its native apply_patch grammar. Use edit for targeted find-and-replace edits.`,\n\tschema: applyPatchSchema,\n\tshouldRetry: (error) => error instanceof ApplyPatchConflictError,\n\tasync run({ patch, dryRun = false }, { signal, respond, sandbox }) {\n\t\trequirePlanCheck(\"apply_patch\");\n\t\tconst throwIfAborted = () => {\n\t\t\tif (signal?.aborted) {\n\t\t\t\tthrow new Error(\"Operation aborted\");\n\t\t\t}\n\t\t};\n\n\t\tconst document = parseApplyPatch(patch);\n\t\tconst missionRole = detectMissionSessionRole();\n\t\tconst plan = sandbox\n\t\t\t? await planSandboxPatch(document, sandbox, missionRole)\n\t\t\t: await planFilesystemPatch(document, missionRole);\n\t\tconst details = buildDetails(plan, sandbox ? \"sandbox\" : undefined);\n\n\t\tif (plan.hunksFailed > 0) {\n\t\t\tthrow new ApplyPatchConflictError(\n\t\t\t\t`apply_patch failed: ${plan.hunksFailed} hunk(s) could not be applied. Re-read the affected file(s), re-author the patch with fresh context, and retry.`,\n\t\t\t\tdetails,\n\t\t\t);\n\t\t}\n\t\tvalidateMissionPatchPlan(plan, details);\n\n\t\tthrowIfAborted();\n\t\tlet postWriteOutput = \"\";\n\t\tif (!dryRun) {\n\t\t\tif (sandbox) {\n\t\t\t\tawait writeSandboxChanges(plan, sandbox);\n\t\t\t} else {\n\t\t\t\tconst baselines = await captureWriteBaselines(plan);\n\t\t\t\tthrowIfAborted();\n\t\t\t\ttry {\n\t\t\t\t\tawait writeFilesystemChanges(plan, throwIfAborted);\n\t\t\t\t\tconst postWriteDetails = await collectPostWriteDetails(\n\t\t\t\t\t\tplan,\n\t\t\t\t\t\tbaselines,\n\t\t\t\t\t\tthrowIfAborted,\n\t\t\t\t\t);\n\t\t\t\t\tObject.assign(details, postWriteDetails);\n\t\t\t\t\tif (postWriteDetails.diagnosticDelta) {\n\t\t\t\t\t\tpostWriteOutput = formatDiagnosticDeltaForToolOutput(\n\t\t\t\t\t\t\tpostWriteDetails.diagnosticDelta,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tawait rollbackFilesystemChanges(plan);\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst changedFileCount = countChangedFiles(plan);\n\t\treturn respond\n\t\t\t.text(\n\t\t\t\t[\n\t\t\t\t\tdryRun\n\t\t\t\t\t\t? `Dry run: apply_patch would update ${changedFileCount} file(s) with ${plan.hunksApplied} hunk(s).`\n\t\t\t\t\t\t: `Applied patch to ${changedFileCount} file(s) with ${plan.hunksApplied} hunk(s).`,\n\t\t\t\t\tpostWriteOutput,\n\t\t\t\t]\n\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t.join(\"\\n\"),\n\t\t\t)\n\t\t\t.detail(details);\n\t},\n});\n\nasync function planFilesystemPatch(\n\tdocument: ApplyPatchDocument,\n\trole?: MissionSessionRole,\n): Promise<ApplyPatchPlan> {\n\tconst plan = emptyPlan();\n\tconst stagedFiles = new Map<string, StagedFileState>();\n\tconst getState = async (path: string): Promise<StagedFileState> => {\n\t\tconst absolutePath = resolvePath(expandUserPath(path));\n\t\tassertApplyPatchPathContained(path, absolutePath);\n\t\tconst cached = stagedFiles.get(absolutePath);\n\t\tif (cached) {\n\t\t\treturn cached;\n\t\t}\n\t\tconst exists = await fileExists(absolutePath);\n\t\tconst state = {\n\t\t\tpath,\n\t\t\tabsolutePath,\n\t\t\texists,\n\t\t\tcurrentContent: exists ? undefined : null,\n\t\t};\n\t\tstagedFiles.set(absolutePath, state);\n\t\treturn state;\n\t};\n\n\tfor (const operation of document.operations) {\n\t\tconst state = await getState(operation.path);\n\t\tconst { absolutePath } = state;\n\t\tif (operation.type === \"add\") {\n\t\t\tif (state.exists) {\n\t\t\t\tthrow new Error(`File already exists: ${operation.path}`);\n\t\t\t}\n\t\t\tconst nextContent = serializeLines(operation.lines, true);\n\t\t\tassertTeamMemoryContentSafe(absolutePath, nextContent);\n\t\t\tassertMissionArtifactPatchAllowed(\n\t\t\t\tstate.path,\n\t\t\t\tnextContent,\n\t\t\t\trole,\n\t\t\t\tundefined,\n\t\t\t);\n\t\t\taddPlannedChange(plan, {\n\t\t\t\tpath: state.path,\n\t\t\t\tabsolutePath,\n\t\t\t\tpreviousContent: null,\n\t\t\t\tnextContent,\n\t\t\t\toperation: \"add\",\n\t\t\t\thunksApplied: 1,\n\t\t\t\tdiff: generateDiffString(\"\", nextContent),\n\t\t\t});\n\t\t\tstate.exists = true;\n\t\t\tstate.currentContent = nextContent;\n\t\t} else if (operation.type === \"delete\") {\n\t\t\tconst previousContent = await readFilesystemStateContent(\n\t\t\t\tstate,\n\t\t\t\toperation.path,\n\t\t\t);\n\t\t\tassertMissionArtifactPatchAllowed(state.path, null, role, undefined);\n\t\t\taddPlannedChange(plan, {\n\t\t\t\tpath: state.path,\n\t\t\t\tabsolutePath,\n\t\t\t\tpreviousContent,\n\t\t\t\tnextContent: null,\n\t\t\t\toperation: \"delete\",\n\t\t\t\thunksApplied: 1,\n\t\t\t\tdiff: generateDiffString(previousContent, \"\"),\n\t\t\t});\n\t\t\tstate.exists = false;\n\t\t\tstate.currentContent = null;\n\t\t} else {\n\t\t\tconst previousContent = await readFilesystemStateContent(\n\t\t\t\tstate,\n\t\t\t\toperation.path,\n\t\t\t);\n\t\t\tconst applied =\n\t\t\t\toperation.hunks.length > 0\n\t\t\t\t\t? applyUpdateHunks(previousContent, operation.hunks)\n\t\t\t\t\t: { content: previousContent, hunksApplied: 0, conflicts: [] };\n\t\t\tif (applied.conflicts.length > 0) {\n\t\t\t\trecordConflicts(plan, operation.path, applied.conflicts);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst nextContent = applied.content;\n\t\t\tif (operation.moveTo) {\n\t\t\t\tconst destinationState = await getState(operation.moveTo);\n\t\t\t\tif (destinationState.exists) {\n\t\t\t\t\tthrow new Error(`File already exists: ${operation.moveTo}`);\n\t\t\t\t}\n\t\t\t\tassertTeamMemoryContentSafe(destinationState.absolutePath, nextContent);\n\t\t\t\tassertMissionArtifactPatchAllowed(state.path, null, role, undefined);\n\t\t\t\tassertMissionArtifactPatchAllowed(\n\t\t\t\t\tdestinationState.path,\n\t\t\t\t\tnextContent,\n\t\t\t\t\trole,\n\t\t\t\t\tundefined,\n\t\t\t\t);\n\t\t\t\taddPlannedChange(plan, {\n\t\t\t\t\tpath: state.path,\n\t\t\t\t\tabsolutePath,\n\t\t\t\t\tpreviousContent,\n\t\t\t\t\tnextContent: null,\n\t\t\t\t\toperation: \"delete\",\n\t\t\t\t\thunksApplied: 0,\n\t\t\t\t\tdiff: generateDiffString(previousContent, \"\"),\n\t\t\t\t});\n\t\t\t\taddPlannedChange(plan, {\n\t\t\t\t\tpath: destinationState.path,\n\t\t\t\t\tabsolutePath: destinationState.absolutePath,\n\t\t\t\t\tpreviousContent: null,\n\t\t\t\t\tnextContent,\n\t\t\t\t\toperation: \"add\",\n\t\t\t\t\thunksApplied: applied.hunksApplied,\n\t\t\t\t\tdiff: generateDiffString(\"\", nextContent),\n\t\t\t\t});\n\t\t\t\tstate.exists = false;\n\t\t\t\tstate.currentContent = null;\n\t\t\t\tdestinationState.exists = true;\n\t\t\t\tdestinationState.currentContent = nextContent;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tassertTeamMemoryContentSafe(absolutePath, nextContent);\n\t\t\tassertMissionArtifactPatchAllowed(\n\t\t\t\tstate.path,\n\t\t\t\tnextContent,\n\t\t\t\trole,\n\t\t\t\tundefined,\n\t\t\t);\n\t\t\taddPlannedChange(plan, {\n\t\t\t\tpath: state.path,\n\t\t\t\tabsolutePath,\n\t\t\t\tpreviousContent,\n\t\t\t\tnextContent,\n\t\t\t\toperation: \"update\",\n\t\t\t\thunksApplied: applied.hunksApplied,\n\t\t\t\tdiff: generateDiffString(previousContent, nextContent),\n\t\t\t});\n\t\t\tstate.exists = true;\n\t\t\tstate.currentContent = nextContent;\n\t\t}\n\t}\n\treturn plan;\n}\n\nasync function planSandboxPatch(\n\tdocument: ApplyPatchDocument,\n\tsandbox: Sandbox,\n\trole?: MissionSessionRole,\n): Promise<ApplyPatchPlan> {\n\tconst plan = emptyPlan();\n\tconst stagedFiles = new Map<string, StagedFileState>();\n\tconst getState = async (path: string): Promise<StagedFileState> => {\n\t\tconst absolutePath = resolvePath(expandUserPath(path));\n\t\tassertApplyPatchPathContained(path, absolutePath, \"sandbox\");\n\t\tconst cacheKey = normalizeSandboxPathKey(path);\n\t\tconst cached = stagedFiles.get(cacheKey);\n\t\tif (cached) {\n\t\t\treturn cached;\n\t\t}\n\t\tconst exists = await sandbox.exists(path);\n\t\tconst state = {\n\t\t\tpath,\n\t\t\tabsolutePath,\n\t\t\texists,\n\t\t\tcurrentContent: exists ? undefined : null,\n\t\t};\n\t\tstagedFiles.set(cacheKey, state);\n\t\treturn state;\n\t};\n\n\tfor (const operation of document.operations) {\n\t\tconst state = await getState(operation.path);\n\t\tconst { absolutePath } = state;\n\t\tif (operation.type === \"add\") {\n\t\t\tif (state.exists) {\n\t\t\t\tthrow new Error(`File already exists: ${operation.path}`);\n\t\t\t}\n\t\t\tconst nextContent = serializeLines(operation.lines, true);\n\t\t\tassertTeamMemoryContentSafe(absolutePath, nextContent);\n\t\t\tassertMissionArtifactPatchAllowed(\n\t\t\t\tstate.path,\n\t\t\t\tnextContent,\n\t\t\t\trole,\n\t\t\t\t\"sandbox\",\n\t\t\t);\n\t\t\taddPlannedChange(plan, {\n\t\t\t\tpath: state.path,\n\t\t\t\tabsolutePath,\n\t\t\t\tpreviousContent: null,\n\t\t\t\tnextContent,\n\t\t\t\toperation: \"add\",\n\t\t\t\thunksApplied: 1,\n\t\t\t\tdiff: generateDiffString(\"\", nextContent),\n\t\t\t});\n\t\t\tstate.exists = true;\n\t\t\tstate.currentContent = nextContent;\n\t\t} else if (operation.type === \"delete\") {\n\t\t\tconst previousContent = await readSandboxStateContent(\n\t\t\t\tstate,\n\t\t\t\toperation.path,\n\t\t\t\tsandbox,\n\t\t\t\t\"in sandbox\",\n\t\t\t);\n\t\t\tassertMissionArtifactPatchAllowed(state.path, null, role, \"sandbox\");\n\t\t\taddPlannedChange(plan, {\n\t\t\t\tpath: state.path,\n\t\t\t\tabsolutePath,\n\t\t\t\tpreviousContent,\n\t\t\t\tnextContent: null,\n\t\t\t\toperation: \"delete\",\n\t\t\t\thunksApplied: 1,\n\t\t\t\tdiff: generateDiffString(previousContent, \"\"),\n\t\t\t});\n\t\t\tstate.exists = false;\n\t\t\tstate.currentContent = null;\n\t\t} else {\n\t\t\tconst previousContent = await readSandboxStateContent(\n\t\t\t\tstate,\n\t\t\t\toperation.path,\n\t\t\t\tsandbox,\n\t\t\t\t\"in sandbox\",\n\t\t\t);\n\t\t\tconst applied =\n\t\t\t\toperation.hunks.length > 0\n\t\t\t\t\t? applyUpdateHunks(previousContent, operation.hunks)\n\t\t\t\t\t: { content: previousContent, hunksApplied: 0, conflicts: [] };\n\t\t\tif (applied.conflicts.length > 0) {\n\t\t\t\trecordConflicts(plan, operation.path, applied.conflicts);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst nextContent = applied.content;\n\t\t\tif (operation.moveTo) {\n\t\t\t\tconst destinationState = await getState(operation.moveTo);\n\t\t\t\tif (destinationState.exists) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`File already exists in sandbox: ${operation.moveTo}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tassertTeamMemoryContentSafe(destinationState.absolutePath, nextContent);\n\t\t\t\tassertMissionArtifactPatchAllowed(state.path, null, role, \"sandbox\");\n\t\t\t\tassertMissionArtifactPatchAllowed(\n\t\t\t\t\tdestinationState.path,\n\t\t\t\t\tnextContent,\n\t\t\t\t\trole,\n\t\t\t\t\t\"sandbox\",\n\t\t\t\t);\n\t\t\t\taddPlannedChange(plan, {\n\t\t\t\t\tpath: state.path,\n\t\t\t\t\tabsolutePath,\n\t\t\t\t\tpreviousContent,\n\t\t\t\t\tnextContent: null,\n\t\t\t\t\toperation: \"delete\",\n\t\t\t\t\thunksApplied: 0,\n\t\t\t\t\tdiff: generateDiffString(previousContent, \"\"),\n\t\t\t\t});\n\t\t\t\taddPlannedChange(plan, {\n\t\t\t\t\tpath: destinationState.path,\n\t\t\t\t\tabsolutePath: destinationState.absolutePath,\n\t\t\t\t\tpreviousContent: null,\n\t\t\t\t\tnextContent,\n\t\t\t\t\toperation: \"add\",\n\t\t\t\t\thunksApplied: applied.hunksApplied,\n\t\t\t\t\tdiff: generateDiffString(\"\", nextContent),\n\t\t\t\t});\n\t\t\t\tstate.exists = false;\n\t\t\t\tstate.currentContent = null;\n\t\t\t\tdestinationState.exists = true;\n\t\t\t\tdestinationState.currentContent = nextContent;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tassertTeamMemoryContentSafe(absolutePath, nextContent);\n\t\t\tassertMissionArtifactPatchAllowed(\n\t\t\t\tstate.path,\n\t\t\t\tnextContent,\n\t\t\t\trole,\n\t\t\t\t\"sandbox\",\n\t\t\t);\n\t\t\taddPlannedChange(plan, {\n\t\t\t\tpath: state.path,\n\t\t\t\tabsolutePath,\n\t\t\t\tpreviousContent,\n\t\t\t\tnextContent,\n\t\t\t\toperation: \"update\",\n\t\t\t\thunksApplied: applied.hunksApplied,\n\t\t\t\tdiff: generateDiffString(previousContent, nextContent),\n\t\t\t});\n\t\t\tstate.exists = true;\n\t\t\tstate.currentContent = nextContent;\n\t\t}\n\t}\n\treturn plan;\n}\n\nfunction assertMissionArtifactPatchAllowed(\n\tpath: string,\n\tnextContent: string | null,\n\trole: MissionSessionRole | undefined,\n\tmode?: \"sandbox\",\n): void {\n\tconst absolutePath = resolvePath(expandUserPath(path));\n\tif (nextContent !== null) {\n\t\tconst writeValidation = validateMissionArtifactWrite({\n\t\t\tfilePath: absolutePath,\n\t\t\tcontent: nextContent,\n\t\t\trole,\n\t\t});\n\t\tif (writeValidation.ok) {\n\t\t\treturn;\n\t\t}\n\t\tthrow new ToolError(\n\t\t\twriteValidation.message,\n\t\t\t\"APPLY_PATCH_MISSION_ARTIFACT\",\n\t\t\temptyApplyPatchDetails(mode),\n\t\t);\n\t}\n\tconst deleteValidation = validateMissionArtifactDelete({\n\t\tfilePath: absolutePath,\n\t});\n\tif (deleteValidation.ok) {\n\t\treturn;\n\t}\n\tthrow new ToolError(\n\t\tdeleteValidation.message,\n\t\t\"APPLY_PATCH_MISSION_ARTIFACT\",\n\t\temptyApplyPatchDetails(mode),\n\t);\n}\n\nfunction applyUpdateHunks(\n\tpreviousContent: string,\n\thunks: ApplyPatchHunk[],\n): { content: string; hunksApplied: number; conflicts: string[] } {\n\tconst document = normalizeDocument(previousContent);\n\tlet lines = [...document.lines];\n\tlet finalNewline = document.hadFinalNewline;\n\tconst conflicts: string[] = [];\n\tlet hunksApplied = 0;\n\tfor (const [index, hunk] of hunks.entries()) {\n\t\tif (hunk.oldLines.length === 0) {\n\t\t\tlines = [...lines, ...hunk.newLines];\n\t\t\tfinalNewline = resolveHunkFinalNewline(finalNewline, hunk, lines.length);\n\t\t\thunksApplied++;\n\t\t\tcontinue;\n\t\t}\n\t\tconst matches = findLineSequence(lines, hunk.oldLines).filter(\n\t\t\t(start) =>\n\t\t\t\t!hunk.oldMustEndAtEOF || start + hunk.oldLines.length === lines.length,\n\t\t);\n\t\tif (matches.length === 0) {\n\t\t\tconflicts.push(`hunk ${index + 1}: context not found`);\n\t\t\tcontinue;\n\t\t}\n\t\tif (matches.length > 1) {\n\t\t\tconflicts.push(\n\t\t\t\t`hunk ${index + 1}: context matched ${matches.length} times`,\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\t\tconst start = matches[0] ?? 0;\n\t\tlines = [\n\t\t\t...lines.slice(0, start),\n\t\t\t...hunk.newLines,\n\t\t\t...lines.slice(start + hunk.oldLines.length),\n\t\t];\n\t\tfinalNewline = resolveHunkFinalNewline(finalNewline, hunk, lines.length);\n\t\thunksApplied++;\n\t}\n\treturn {\n\t\tcontent: restoreDocumentContent(lines, document, finalNewline),\n\t\thunksApplied,\n\t\tconflicts,\n\t};\n}\n\nfunction resolveHunkFinalNewline(\n\tcurrentFinalNewline: boolean,\n\thunk: ApplyPatchHunk,\n\tresultLineCount: number,\n): boolean {\n\tif (hunk.newNoFinalNewline === true) {\n\t\treturn false;\n\t}\n\tif (hunk.oldNoFinalNewline === true) {\n\t\treturn resultLineCount > 0;\n\t}\n\treturn currentFinalNewline;\n}\n\nfunction findLineSequence(lines: string[], needle: string[]): number[] {\n\tconst matches: number[] = [];\n\tif (needle.length === 0 || needle.length > lines.length) {\n\t\treturn matches;\n\t}\n\tfor (let index = 0; index <= lines.length - needle.length; index++) {\n\t\tlet matched = true;\n\t\tfor (let offset = 0; offset < needle.length; offset++) {\n\t\t\tif (lines[index + offset] !== needle[offset]) {\n\t\t\t\tmatched = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (matched) {\n\t\t\tmatches.push(index);\n\t\t}\n\t}\n\treturn matches;\n}\n\nasync function writeFilesystemChanges(\n\tplan: ApplyPatchPlan,\n\tthrowIfAborted: () => void,\n): Promise<void> {\n\tfor (const change of plan.changes) {\n\t\tthrowIfAborted();\n\t\tif (change.nextContent === null) {\n\t\t\tawait rm(change.absolutePath, { force: true });\n\t\t\tcontinue;\n\t\t}\n\t\tawait mkdir(dirname(change.absolutePath), { recursive: true });\n\t\tawait writeFileAtomically(change.absolutePath, change.nextContent);\n\t}\n}\n\nfunction validateMissionPatchPlan(\n\tplan: ApplyPatchPlan,\n\tdetails: ApplyPatchToolDetails,\n): void {\n\tconst role = detectMissionSessionRole();\n\tfor (const change of plan.changes) {\n\t\tconst result =\n\t\t\tchange.nextContent === null\n\t\t\t\t? validateMissionArtifactDelete({\n\t\t\t\t\t\tfilePath: missionValidationPath(change),\n\t\t\t\t\t})\n\t\t\t\t: validateMissionArtifactWrite({\n\t\t\t\t\t\tfilePath: missionValidationPath(change),\n\t\t\t\t\t\tcontent: change.nextContent,\n\t\t\t\t\t\trole,\n\t\t\t\t\t});\n\t\tif (!result.ok) {\n\t\t\tthrow new ToolError(\n\t\t\t\tresult.message,\n\t\t\t\t\"APPLY_PATCH_MISSION_ARTIFACT\",\n\t\t\t\tdetails,\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction missionValidationPath(change: PlannedFileChange): string {\n\treturn isAbsolute(change.absolutePath)\n\t\t? change.absolutePath\n\t\t: resolvePath(expandUserPath(change.path));\n}\n\nasync function writeSandboxChanges(\n\tplan: ApplyPatchPlan,\n\tsandbox: Sandbox,\n): Promise<void> {\n\tvalidateSandboxRollbackSupport(plan, sandbox);\n\ttry {\n\t\tfor (const change of plan.changes) {\n\t\t\tif (change.nextContent === null) {\n\t\t\t\tif (!sandbox.delete) {\n\t\t\t\t\tthrow new Error(\"Sandbox does not support deleting files\");\n\t\t\t\t}\n\t\t\t\tawait sandbox.delete(change.path, false);\n\t\t\t} else {\n\t\t\t\tawait sandbox.writeFile(change.path, change.nextContent);\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\tawait rollbackSandboxChanges(plan, sandbox);\n\t\tthrow error;\n\t}\n}\n\nfunction validateSandboxRollbackSupport(\n\tplan: ApplyPatchPlan,\n\tsandbox: Sandbox,\n): void {\n\tconst needsDeleteForApplyOrRollback = plan.changes.some(\n\t\t(change) => change.nextContent === null || change.previousContent === null,\n\t);\n\tif (needsDeleteForApplyOrRollback && !sandbox.delete) {\n\t\tthrow new Error(\n\t\t\t\"Sandbox does not support deleting files, so apply_patch cannot safely apply add/delete operations\",\n\t\t);\n\t}\n}\n\nasync function rollbackSandboxChanges(\n\tplan: ApplyPatchPlan,\n\tsandbox: Sandbox,\n): Promise<void> {\n\tfor (const change of [...plan.changes].reverse()) {\n\t\ttry {\n\t\t\tif (change.previousContent === null) {\n\t\t\t\tawait sandbox.delete?.(change.path, false);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tawait sandbox.writeFile(change.path, change.previousContent);\n\t\t} catch (error) {\n\t\t\tlogger.debug(\"Sandbox rollback step failed\", {\n\t\t\t\tpath: change.path,\n\t\t\t\terror,\n\t\t\t});\n\t\t}\n\t}\n}\n\nasync function captureWriteBaselines(\n\tplan: ApplyPatchPlan,\n): Promise<Map<string, DiagnosticBaseline>> {\n\tconst baselines = new Map<string, DiagnosticBaseline>();\n\tfor (const change of plan.changes) {\n\t\tif (change.nextContent === null) {\n\t\t\tcontinue;\n\t\t}\n\t\tbaselines.set(\n\t\t\tchange.absolutePath,\n\t\t\tawait captureDiagnosticBaseline(change.absolutePath),\n\t\t);\n\t}\n\treturn baselines;\n}\n\nasync function collectPostWriteDetails(\n\tplan: ApplyPatchPlan,\n\tbaselines: Map<string, DiagnosticBaseline>,\n\tthrowIfAborted: () => void,\n): Promise<\n\tPick<\n\t\tApplyPatchToolDetails,\n\t\t\"validators\" | \"diagnosticDelta\" | \"diagnosticDeltas\"\n\t>\n> {\n\tconst writePaths = plan.changes\n\t\t.filter((change) => change.nextContent !== null)\n\t\t.map((change) => change.absolutePath);\n\tif (writePaths.length === 0) {\n\t\treturn {};\n\t}\n\tthrowIfAborted();\n\tconst deltaResults = await Promise.all(\n\t\twritePaths.map((writePath) =>\n\t\t\tcollectDiagnosticDelta(baselines.get(writePath)!),\n\t\t),\n\t);\n\tconst deltas = deltaResults.map((result, index) => {\n\t\tconst writePath = writePaths[index] ?? \"\";\n\t\treturn buildDiagnosticDeltaToolSummary({\n\t\t\tfile: writePath,\n\t\t\tdisplayPath:\n\t\t\t\tplan.changes.find((change) => change.absolutePath === writePath)\n\t\t\t\t\t?.path ?? writePath,\n\t\t\tresult,\n\t\t});\n\t});\n\tconst validatorDiagnostics = Object.fromEntries(\n\t\tdeltaResults.flatMap((result) =>\n\t\t\tObject.entries(result.validatorDiagnostics),\n\t\t),\n\t);\n\tconst validatorSummaries = await runValidatorsOnSuccess(\n\t\twritePaths,\n\t\tvalidatorDiagnostics,\n\t);\n\treturn {\n\t\tvalidators: validatorSummaries,\n\t\tdiagnosticDelta: deltas[0],\n\t\tdiagnosticDeltas: deltas,\n\t};\n}\n\nasync function rollbackFilesystemChanges(plan: ApplyPatchPlan): Promise<void> {\n\tfor (const change of [...plan.changes].reverse()) {\n\t\ttry {\n\t\t\tif (change.previousContent === null) {\n\t\t\t\tawait rm(change.absolutePath, { force: true });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tawait mkdir(dirname(change.absolutePath), { recursive: true });\n\t\t\tawait writeFileAtomically(change.absolutePath, change.previousContent);\n\t\t} catch (error) {\n\t\t\tlogger.debug(\"Filesystem rollback step failed\", {\n\t\t\t\tpath: change.absolutePath,\n\t\t\t\terror,\n\t\t\t});\n\t\t}\n\t}\n}\n\nasync function writeFileAtomically(\n\tfilePath: string,\n\tcontents: string,\n): Promise<void> {\n\tconst tempPath = `${filePath}.${crypto.randomUUID()}.tmp`;\n\tawait writeFile(tempPath, contents, \"utf-8\");\n\ttry {\n\t\tawait rename(tempPath, filePath);\n\t} catch (error) {\n\t\tawait unlink(tempPath).catch(() => {});\n\t\tthrow error;\n\t}\n}\n\nasync function readExistingFile(\n\tabsolutePath: string,\n\tdisplayPath: string,\n): Promise<string> {\n\ttry {\n\t\tawait access(absolutePath, constants.R_OK | constants.W_OK);\n\t\treturn await readFile(absolutePath, \"utf-8\");\n\t} catch {\n\t\tthrow new Error(\n\t\t\t`File not readable/writable: ${displayPath}. Use read/list to verify the path and permissions.`,\n\t\t);\n\t}\n}\n\nasync function fileExists(absolutePath: string): Promise<boolean> {\n\ttry {\n\t\tawait access(absolutePath, constants.F_OK);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction normalizeSandboxPathKey(path: string): string {\n\tconst isAbsolute = path.startsWith(\"/\");\n\tconst parts = path.split(\"/\").reduce<string[]>((segments, segment) => {\n\t\tif (segment === \"\" || segment === \".\") {\n\t\t\treturn segments;\n\t\t}\n\t\tif (segment === \"..\") {\n\t\t\tif (segments.length > 0 && segments.at(-1) !== \"..\") {\n\t\t\t\tsegments.pop();\n\t\t\t} else if (!isAbsolute) {\n\t\t\t\tsegments.push(segment);\n\t\t\t}\n\t\t\treturn segments;\n\t\t}\n\t\tsegments.push(segment);\n\t\treturn segments;\n\t}, []);\n\tconst normalized = parts.join(\"/\");\n\treturn isAbsolute ? `/${normalized}` : normalized;\n}\n\nasync function readFilesystemStateContent(\n\tstate: StagedFileState,\n\tdisplayPath: string,\n): Promise<string> {\n\tconst currentContent = requireLoadedStateContent(state, displayPath);\n\tif (currentContent !== undefined) {\n\t\treturn currentContent;\n\t}\n\tconst content = await readExistingFile(state.absolutePath, displayPath);\n\tstate.currentContent = content;\n\treturn content;\n}\n\nasync function readSandboxStateContent(\n\tstate: StagedFileState,\n\tdisplayPath: string,\n\tsandbox: Sandbox,\n\tlocation = \"\",\n): Promise<string> {\n\tconst currentContent = requireLoadedStateContent(\n\t\tstate,\n\t\tdisplayPath,\n\t\tlocation,\n\t);\n\tif (currentContent !== undefined) {\n\t\treturn currentContent;\n\t}\n\tconst content = await sandbox.readFile(displayPath);\n\tstate.currentContent = content;\n\treturn content;\n}\n\nfunction requireLoadedStateContent(\n\tstate: StagedFileState,\n\tdisplayPath: string,\n\tlocation = \"\",\n): string | undefined {\n\tconst locationSuffix = location ? ` ${location}` : \"\";\n\tif (state.currentContent !== undefined) {\n\t\tif (state.currentContent !== null) {\n\t\t\treturn state.currentContent;\n\t\t}\n\t\tthrow new Error(`File not found${locationSuffix}: ${displayPath}`);\n\t}\n\tif (state.exists) {\n\t\treturn undefined;\n\t}\n\tthrow new Error(`File not found${locationSuffix}: ${displayPath}`);\n}\n\nfunction emptyPlan(): ApplyPatchPlan {\n\treturn {\n\t\tfilesModified: [],\n\t\tfilesCreated: [],\n\t\tfilesDeleted: [],\n\t\thunksApplied: 0,\n\t\thunksFailed: 0,\n\t\tchanges: [],\n\t};\n}\n\nfunction addPlannedChange(\n\tplan: ApplyPatchPlan,\n\tchange: PlannedFileChange,\n): void {\n\tplan.changes.push(change);\n\tplan.hunksApplied += change.hunksApplied;\n\tif (change.operation === \"add\") {\n\t\tpushUnique(plan.filesCreated, change.path);\n\t} else if (change.operation === \"delete\") {\n\t\tpushUnique(plan.filesDeleted, change.path);\n\t} else {\n\t\tpushUnique(plan.filesModified, change.path);\n\t}\n}\n\nfunction pushUnique(values: string[], value: string): void {\n\tif (!values.includes(value)) {\n\t\tvalues.push(value);\n\t}\n}\n\nfunction recordConflicts(\n\tplan: ApplyPatchPlan,\n\tpath: string,\n\tconflicts: string[],\n): void {\n\tplan.hunksFailed += conflicts.length;\n\tplan.conflictDetails ??= [];\n\tfor (const conflict of conflicts) {\n\t\tplan.conflictDetails.push(`${path}: ${conflict}`);\n\t}\n}\n\nfunction buildDetails(\n\tplan: ApplyPatchPlan,\n\tmode?: \"sandbox\",\n): ApplyPatchToolDetails {\n\treturn {\n\t\tfilesModified: plan.filesModified,\n\t\tfilesCreated: plan.filesCreated,\n\t\tfilesDeleted: plan.filesDeleted,\n\t\thunksApplied: plan.hunksApplied,\n\t\thunksFailed: plan.hunksFailed,\n\t\tconflictDetails: plan.conflictDetails,\n\t\tdiffs: buildDiffDetails(plan),\n\t\teditGrammar: \"apply_patch\",\n\t\tmode,\n\t};\n}\n\nfunction buildDiffDetails(plan: ApplyPatchPlan): Record<string, string> {\n\tconst diffs: Record<string, string> = {};\n\tfor (const change of plan.changes) {\n\t\tif (change.diff === undefined) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst existing = diffs[change.path];\n\t\tdiffs[change.path] = existing ? `${existing}\\n${change.diff}` : change.diff;\n\t}\n\treturn diffs;\n}\n\nfunction countChangedFiles(plan: ApplyPatchPlan): number {\n\treturn new Set([\n\t\t...plan.filesCreated,\n\t\t...plan.filesModified,\n\t\t...plan.filesDeleted,\n\t]).size;\n}\n\nfunction detectLineEnding(text: string): LineEnding {\n\tif (text.includes(\"\\r\\n\")) return \"\\r\\n\";\n\tif (text.includes(\"\\r\")) return \"\\r\";\n\treturn \"\\n\";\n}\n\nfunction normalizeDocument(content: string): NormalizedDocument {\n\tconst bom = content.startsWith(\"\\uFEFF\") ? \"\\uFEFF\" : \"\";\n\tconst withoutBom = bom ? content.slice(1) : content;\n\tconst lineEnding = detectLineEnding(withoutBom);\n\tconst normalized = withoutBom.replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\");\n\tconst hadFinalNewline = normalized.endsWith(\"\\n\");\n\tconst trimmed = hadFinalNewline ? normalized.slice(0, -1) : normalized;\n\tconst lines = trimmed.length === 0 ? [] : trimmed.split(\"\\n\");\n\treturn { original: content, lines, hadFinalNewline, bom, lineEnding };\n}\n\nfunction restoreDocumentContent(\n\tlines: string[],\n\tdocument: NormalizedDocument,\n\tfinalNewline = document.hadFinalNewline,\n): string {\n\treturn `${document.bom}${serializeLines(lines, finalNewline).replace(/\\n/g, document.lineEnding)}`;\n}\n\nfunction serializeLines(lines: string[], finalNewline: boolean): string {\n\tif (lines.length === 0) {\n\t\treturn finalNewline ? \"\\n\" : \"\";\n\t}\n\treturn `${lines.join(\"\\n\")}${finalNewline ? \"\\n\" : \"\"}`;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"diff-preview.d.ts","sourceRoot":"","sources":["../../src/tools/diff-preview.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAQH;;GAEG;AACH,MAAM,WAAW,QAAQ;IACxB,IAAI,EAAE,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC;AAoKlD;;GAEG;AACH,cAAM,kBAAkB;IACvB,OAAO,CAAC,eAAe,CAAwC;IAE/D;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAwDtE;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM;IA0BjD;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM;IAgCjD;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,SAAK,GAAG,MAAM;IAuDhE;;OAEG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAIlE;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIpC;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAIxB;;OAEG;IACH,UAAU,IAAI;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,MAAM,CAAC;QACvB,KAAK,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACrE;IAwBD;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM;CAkCrE;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,oBAA2B,CAAC;AAEpD;;GAEG;AACH,wBAAsB,WAAW,CAChC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CAGjB"}
1
+ {"version":3,"file":"diff-preview.d.ts","sourceRoot":"","sources":["../../src/tools/diff-preview.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAQH;;GAEG;AACH,MAAM,WAAW,QAAQ;IACxB,IAAI,EAAE,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC;AAoKlD;;GAEG;AACH,cAAM,kBAAkB;IACvB,OAAO,CAAC,eAAe,CAAwC;IAE/D;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAwDtE;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM;IA0BjD;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM;IAgCjD;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,SAAK,GAAG,MAAM;IAuDhE;;OAEG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAIlE;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIpC;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAIxB;;OAEG;IACH,UAAU,IAAI;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,MAAM,CAAC;QACvB,KAAK,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACrE;IAwBD;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM;CA0CrE;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,oBAA2B,CAAC;AAEpD;;GAEG;AACH,wBAAsB,WAAW,CAChC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CAGjB"}
@@ -396,17 +396,26 @@ class DiffPreviewManager {
396
396
  const hunk = preview.hunks[hunkIdx];
397
397
  if (!hunk)
398
398
  continue;
399
- const startIdx = hunk.oldStart - 1 + offset;
400
399
  let removeCount = 0;
400
+ let leadingContext = 0;
401
+ let seenRemove = false;
401
402
  const addLines = [];
402
403
  for (const line of hunk.lines) {
403
404
  if (line.type === "remove") {
404
405
  removeCount++;
406
+ seenRemove = true;
405
407
  }
406
408
  else if (line.type === "add") {
407
409
  addLines.push(line.content);
410
+ seenRemove = true;
411
+ }
412
+ else if (line.type === "context" && !seenRemove) {
413
+ // oldStart points at the hunk's first line, which may be leading
414
+ // context — skip past it so the splice lands on the first removal.
415
+ leadingContext++;
408
416
  }
409
417
  }
418
+ const startIdx = hunk.oldStart - 1 + leadingContext + offset;
410
419
  result.splice(startIdx, removeCount, ...addLines);
411
420
  offset += addLines.length - removeCount;
412
421
  }