@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.
- package/dist/agent/agent-outcome.d.ts +54 -0
- package/dist/agent/agent-outcome.d.ts.map +1 -0
- package/dist/agent/agent-outcome.js +142 -0
- package/dist/agent/agent-outcome.js.map +1 -0
- package/dist/agent/agent-resume.d.ts.map +1 -1
- package/dist/agent/agent-resume.js +3 -3
- package/dist/agent/agent-resume.js.map +1 -1
- package/dist/agent/agent-run-summary.d.ts +37 -0
- package/dist/agent/agent-run-summary.d.ts.map +1 -0
- package/dist/agent/agent-run-summary.js +15 -0
- package/dist/agent/agent-run-summary.js.map +1 -0
- package/dist/agent/agent-work-board.d.ts +82 -0
- package/dist/agent/agent-work-board.d.ts.map +1 -0
- package/dist/agent/agent-work-board.js +312 -0
- package/dist/agent/agent-work-board.js.map +1 -0
- package/dist/agent/auto-compaction.d.ts +7 -2
- package/dist/agent/auto-compaction.d.ts.map +1 -1
- package/dist/agent/auto-compaction.js +23 -10
- package/dist/agent/auto-compaction.js.map +1 -1
- package/dist/agent/mission-artifacts.d.ts +62 -0
- package/dist/agent/mission-artifacts.d.ts.map +1 -0
- package/dist/agent/mission-artifacts.js +438 -0
- package/dist/agent/mission-artifacts.js.map +1 -0
- package/dist/agent/mission-manifest.d.ts +139 -3
- package/dist/agent/mission-manifest.d.ts.map +1 -1
- package/dist/agent/mission-manifest.js +549 -3
- package/dist/agent/mission-manifest.js.map +1 -1
- package/dist/agent/mission-store.d.ts +80 -0
- package/dist/agent/mission-store.d.ts.map +1 -0
- package/dist/agent/mission-store.js +603 -0
- package/dist/agent/mission-store.js.map +1 -0
- package/dist/agent/modes.d.ts +2 -2
- package/dist/agent/modes.d.ts.map +1 -1
- package/dist/agent/modes.js +10 -3
- package/dist/agent/modes.js.map +1 -1
- package/dist/agent/providers/codex-app-server.d.ts.map +1 -1
- package/dist/agent/providers/codex-app-server.js +1 -3
- package/dist/agent/providers/codex-app-server.js.map +1 -1
- package/dist/agent/providers/google-gemini-cli.js +203 -107
- package/dist/agent/providers/google.js +100 -41
- package/dist/agent/providers/scripted.d.ts.map +1 -1
- package/dist/agent/providers/scripted.js +1 -3
- package/dist/agent/providers/scripted.js.map +1 -1
- package/dist/agent/providers/validation.d.ts.map +1 -1
- package/dist/agent/providers/validation.js +1 -3
- package/dist/agent/providers/validation.js.map +1 -1
- package/dist/agent/providers/vertex.js +203 -107
- package/dist/agent/snapshot-store.d.ts +32 -0
- package/dist/agent/snapshot-store.d.ts.map +1 -0
- package/dist/agent/snapshot-store.js +195 -0
- package/dist/agent/snapshot-store.js.map +1 -0
- package/dist/agent/specialist-profiles.d.ts +36 -0
- package/dist/agent/specialist-profiles.d.ts.map +1 -0
- package/dist/agent/specialist-profiles.js +159 -0
- package/dist/agent/specialist-profiles.js.map +1 -0
- package/dist/agent/subagent-specs.d.ts +4 -1
- package/dist/agent/subagent-specs.d.ts.map +1 -1
- package/dist/agent/subagent-specs.js +81 -8
- package/dist/agent/subagent-specs.js.map +1 -1
- package/dist/agent/swarm/coverage-gate.d.ts +37 -0
- package/dist/agent/swarm/coverage-gate.d.ts.map +1 -0
- package/dist/agent/swarm/coverage-gate.js +48 -0
- package/dist/agent/swarm/coverage-gate.js.map +1 -0
- package/dist/agent/swarm/executor.d.ts +1 -0
- package/dist/agent/swarm/executor.d.ts.map +1 -1
- package/dist/agent/swarm/executor.js +151 -15
- package/dist/agent/swarm/executor.js.map +1 -1
- package/dist/agent/swarm/orchestrator-prompt.d.ts +25 -0
- package/dist/agent/swarm/orchestrator-prompt.d.ts.map +1 -0
- package/dist/agent/swarm/orchestrator-prompt.js +48 -0
- package/dist/agent/swarm/orchestrator-prompt.js.map +1 -0
- package/dist/agent/swarm/plan-parser.d.ts.map +1 -1
- package/dist/agent/swarm/plan-parser.js +27 -2
- package/dist/agent/swarm/plan-parser.js.map +1 -1
- package/dist/agent/swarm/types.d.ts +17 -0
- package/dist/agent/swarm/types.d.ts.map +1 -1
- package/dist/agent/swarm/types.js.map +1 -1
- package/dist/agent/swarm/validation-directive.d.ts +21 -0
- package/dist/agent/swarm/validation-directive.d.ts.map +1 -0
- package/dist/agent/swarm/validation-directive.js +25 -0
- package/dist/agent/swarm/validation-directive.js.map +1 -0
- package/dist/agent/transport/tool-execution-bridge.d.ts.map +1 -1
- package/dist/agent/transport/tool-execution-bridge.js +4 -1
- package/dist/agent/transport/tool-execution-bridge.js.map +1 -1
- package/dist/api/enterprise-routes.d.ts.map +1 -1
- package/dist/api/enterprise-routes.js +87 -10
- package/dist/api/enterprise-routes.js.map +1 -1
- package/dist/api/org-settings-merge.d.ts +12 -0
- package/dist/api/org-settings-merge.d.ts.map +1 -0
- package/dist/api/org-settings-merge.js +38 -0
- package/dist/api/org-settings-merge.js.map +1 -0
- package/dist/api/user-settings-merge.d.ts +16 -0
- package/dist/api/user-settings-merge.d.ts.map +1 -0
- package/dist/api/user-settings-merge.js +37 -0
- package/dist/api/user-settings-merge.js.map +1 -0
- package/dist/app-server/daemon-lifecycle-api.d.ts.map +1 -1
- package/dist/app-server/daemon-lifecycle-api.js +1 -3
- package/dist/app-server/daemon-lifecycle-api.js.map +1 -1
- package/dist/app-server/external-agent-import-api.d.ts.map +1 -1
- package/dist/app-server/external-agent-import-api.js +1 -3
- package/dist/app-server/external-agent-import-api.js.map +1 -1
- package/dist/app-server/network-governance-api.d.ts.map +1 -1
- package/dist/app-server/network-governance-api.js +1 -3
- package/dist/app-server/network-governance-api.js.map +1 -1
- package/dist/app-server/plugin-bundle-api.d.ts.map +1 -1
- package/dist/app-server/plugin-bundle-api.js +1 -3
- package/dist/app-server/plugin-bundle-api.js.map +1 -1
- package/dist/app-server/policy-control-api.d.ts.map +1 -1
- package/dist/app-server/policy-control-api.js +1 -3
- package/dist/app-server/policy-control-api.js.map +1 -1
- package/dist/app-server/protocol-modes-api.d.ts.map +1 -1
- package/dist/app-server/protocol-modes-api.js +1 -3
- package/dist/app-server/protocol-modes-api.js.map +1 -1
- package/dist/cli/args.d.ts +2 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +15 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/commands/a2a.d.ts.map +1 -1
- package/dist/cli/commands/a2a.js +1 -3
- package/dist/cli/commands/a2a.js.map +1 -1
- package/dist/cli/commands/agents.d.ts +4 -0
- package/dist/cli/commands/agents.d.ts.map +1 -1
- package/dist/cli/commands/agents.js +149 -0
- package/dist/cli/commands/agents.js.map +1 -1
- package/dist/cli/commands/mission.d.ts +4 -0
- package/dist/cli/commands/mission.d.ts.map +1 -0
- package/dist/cli/commands/mission.js +196 -0
- package/dist/cli/commands/mission.js.map +1 -0
- package/dist/cli/commands/value.d.ts +10 -0
- package/dist/cli/commands/value.d.ts.map +1 -0
- package/dist/cli/commands/value.js +33 -0
- package/dist/cli/commands/value.js.map +1 -0
- package/dist/cli/headless-protocol.d.ts.map +1 -1
- package/dist/cli/headless-protocol.js +1 -3
- package/dist/cli/headless-protocol.js.map +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +10 -0
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/system-prompt.d.ts.map +1 -1
- package/dist/cli/system-prompt.js +38 -7
- package/dist/cli/system-prompt.js.map +1 -1
- package/dist/cli-runtime.js +7756 -2800
- package/dist/cli-tui/client-tools/client-tool-controller.d.ts.map +1 -1
- package/dist/cli-tui/client-tools/client-tool-controller.js +1 -3
- package/dist/cli-tui/client-tools/client-tool-controller.js.map +1 -1
- package/dist/cli-tui/commands/undo-handlers.d.ts.map +1 -1
- package/dist/cli-tui/commands/undo-handlers.js +7 -2
- package/dist/cli-tui/commands/undo-handlers.js.map +1 -1
- package/dist/cli-tui/tui-renderer/skills-controller.d.ts +3 -0
- package/dist/cli-tui/tui-renderer/skills-controller.d.ts.map +1 -1
- package/dist/cli-tui/tui-renderer/skills-controller.js +77 -33
- package/dist/cli-tui/tui-renderer/skills-controller.js.map +1 -1
- package/dist/codex/app-server-client.d.ts.map +1 -1
- package/dist/codex/app-server-client.js +1 -3
- package/dist/codex/app-server-client.js.map +1 -1
- package/dist/codex/compatibility.d.ts.map +1 -1
- package/dist/codex/compatibility.js +1 -3
- package/dist/codex/compatibility.js.map +1 -1
- package/dist/codex/subagent-dispatch-table.d.ts +8 -0
- package/dist/codex/subagent-dispatch-table.d.ts.map +1 -1
- package/dist/codex/subagent-dispatch-table.js +23 -0
- package/dist/codex/subagent-dispatch-table.js.map +1 -1
- package/dist/context/manifest.d.ts.map +1 -1
- package/dist/context/manifest.js +1 -3
- package/dist/context/manifest.js.map +1 -1
- package/dist/conversation/render-model.d.ts +0 -36
- package/dist/conversation/render-model.d.ts.map +1 -1
- package/dist/conversation/render-model.js +1 -3
- package/dist/conversation/render-model.js.map +1 -1
- package/dist/customer-value/ambient-learning.d.ts +75 -0
- package/dist/customer-value/ambient-learning.d.ts.map +1 -0
- package/dist/customer-value/ambient-learning.js +472 -0
- package/dist/customer-value/ambient-learning.js.map +1 -0
- package/dist/customer-value/internal-helpers.d.ts +13 -0
- package/dist/customer-value/internal-helpers.d.ts.map +1 -0
- package/dist/customer-value/internal-helpers.js +70 -0
- package/dist/customer-value/internal-helpers.js.map +1 -0
- package/dist/customer-value/report.d.ts +282 -0
- package/dist/customer-value/report.d.ts.map +1 -0
- package/dist/customer-value/report.js +2085 -0
- package/dist/customer-value/report.js.map +1 -0
- package/dist/db/schema.d.ts +5 -1
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js.map +1 -1
- package/dist/evalops/agent-bootstrap.d.ts.map +1 -1
- package/dist/evalops/agent-bootstrap.js +1 -3
- package/dist/evalops/agent-bootstrap.js.map +1 -1
- package/dist/evalops/agent-mcp-metadata.d.ts.map +1 -1
- package/dist/evalops/agent-mcp-metadata.js +1 -3
- package/dist/evalops/agent-mcp-metadata.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/installers/maestro-review-workflow.d.ts +38 -0
- package/dist/installers/maestro-review-workflow.d.ts.map +1 -0
- package/dist/installers/maestro-review-workflow.js +163 -0
- package/dist/installers/maestro-review-workflow.js.map +1 -0
- package/dist/load-env.d.ts.map +1 -1
- package/dist/load-env.js +2 -1
- package/dist/load-env.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +92 -3
- package/dist/main.js.map +1 -1
- package/dist/mcp/config.d.ts.map +1 -1
- package/dist/mcp/config.js +1 -3
- package/dist/mcp/config.js.map +1 -1
- package/dist/mcp/elicitation.d.ts.map +1 -1
- package/dist/mcp/elicitation.js +1 -3
- package/dist/mcp/elicitation.js.map +1 -1
- package/dist/mcp/official-registry.d.ts.map +1 -1
- package/dist/mcp/official-registry.js +1 -3
- package/dist/mcp/official-registry.js.map +1 -1
- package/dist/mcp/workspace-trust.d.ts.map +1 -1
- package/dist/mcp/workspace-trust.js +1 -3
- package/dist/mcp/workspace-trust.js.map +1 -1
- package/dist/memory/service-client.d.ts.map +1 -1
- package/dist/memory/service-client.js +1 -3
- package/dist/memory/service-client.js.map +1 -1
- package/dist/models/config-loader.d.ts.map +1 -1
- package/dist/models/config-loader.js +1 -3
- package/dist/models/config-loader.js.map +1 -1
- package/dist/node_modules/@evalops/contracts/dist/index.d.ts +1 -0
- package/dist/node_modules/@evalops/contracts/dist/index.d.ts.map +1 -1
- package/dist/node_modules/@evalops/contracts/dist/index.js +1 -0
- package/dist/node_modules/@evalops/contracts/dist/index.js.map +1 -1
- package/dist/node_modules/@evalops/contracts/dist/maestro-settings.d.ts +61 -0
- package/dist/node_modules/@evalops/contracts/dist/maestro-settings.d.ts.map +1 -0
- package/dist/node_modules/@evalops/contracts/dist/maestro-settings.js +183 -0
- package/dist/node_modules/@evalops/contracts/dist/maestro-settings.js.map +1 -0
- package/dist/node_modules/@evalops/contracts/package.json +1 -1
- package/dist/node_modules/@evalops/tui/package.json +1 -1
- package/dist/oauth/connectors.d.ts.map +1 -1
- package/dist/oauth/connectors.js +1 -3
- package/dist/oauth/connectors.js.map +1 -1
- package/dist/oauth/evalops.d.ts.map +1 -1
- package/dist/oauth/evalops.js +1 -3
- package/dist/oauth/evalops.js.map +1 -1
- package/dist/platform/a2a-client.d.ts.map +1 -1
- package/dist/platform/a2a-client.js +1 -3
- package/dist/platform/a2a-client.js.map +1 -1
- package/dist/platform/a2a-cockpit.d.ts +1 -0
- package/dist/platform/a2a-cockpit.d.ts.map +1 -1
- package/dist/platform/a2a-cockpit.js +42 -11
- package/dist/platform/a2a-cockpit.js.map +1 -1
- package/dist/platform/a2a-completion-audit.d.ts +1 -1
- package/dist/platform/a2a-completion-audit.d.ts.map +1 -1
- package/dist/platform/a2a-completion-audit.js +7 -11
- package/dist/platform/a2a-completion-audit.js.map +1 -1
- package/dist/platform/a2a-maestro-peer.js +16 -0
- package/dist/platform/a2a-maestro-peer.js.map +1 -1
- package/dist/platform/a2a-peer-pairing.d.ts.map +1 -1
- package/dist/platform/a2a-peer-pairing.js +1 -3
- package/dist/platform/a2a-peer-pairing.js.map +1 -1
- package/dist/platform/a2a-peer-registry.d.ts.map +1 -1
- package/dist/platform/a2a-peer-registry.js +1 -3
- package/dist/platform/a2a-peer-registry.js.map +1 -1
- package/dist/platform/a2a-task-ledger.d.ts +20 -0
- package/dist/platform/a2a-task-ledger.d.ts.map +1 -1
- package/dist/platform/a2a-task-ledger.js +207 -11
- package/dist/platform/a2a-task-ledger.js.map +1 -1
- package/dist/platform/a2a-work-graph.d.ts.map +1 -1
- package/dist/platform/a2a-work-graph.js +1 -3
- package/dist/platform/a2a-work-graph.js.map +1 -1
- package/dist/platform/operating-layer.d.ts.map +1 -1
- package/dist/platform/operating-layer.js +14 -8
- package/dist/platform/operating-layer.js.map +1 -1
- package/dist/platform/tool-execution-client.d.ts.map +1 -1
- package/dist/platform/tool-execution-client.js +19 -2
- package/dist/platform/tool-execution-client.js.map +1 -1
- package/dist/providers/auth.d.ts.map +1 -1
- package/dist/providers/auth.js +1 -3
- package/dist/providers/auth.js.map +1 -1
- package/dist/runtime/env.d.ts +9 -1
- package/dist/runtime/env.d.ts.map +1 -1
- package/dist/runtime/env.js +63 -1
- package/dist/runtime/env.js.map +1 -1
- package/dist/safety/policy.d.ts.map +1 -1
- package/dist/safety/policy.js +1 -4
- package/dist/safety/policy.js.map +1 -1
- package/dist/sandbox/docker-sandbox.d.ts.map +1 -1
- package/dist/sandbox/docker-sandbox.js +6 -1
- package/dist/sandbox/docker-sandbox.js.map +1 -1
- package/dist/server/handlers/hosted-runner-drain.d.ts.map +1 -1
- package/dist/server/handlers/hosted-runner-drain.js +1 -3
- package/dist/server/handlers/hosted-runner-drain.js.map +1 -1
- package/dist/server/handlers/platform-a2a-push.d.ts.map +1 -1
- package/dist/server/handlers/platform-a2a-push.js +53 -2
- package/dist/server/handlers/platform-a2a-push.js.map +1 -1
- package/dist/server/handlers/runtime-app-server-ws.d.ts.map +1 -1
- package/dist/server/handlers/runtime-app-server-ws.js +1 -3
- package/dist/server/handlers/runtime-app-server-ws.js.map +1 -1
- package/dist/server/headless-runtime-service.d.ts +16 -0
- package/dist/server/headless-runtime-service.d.ts.map +1 -1
- package/dist/server/headless-runtime-service.js +232 -206
- package/dist/server/headless-runtime-service.js.map +1 -1
- package/dist/server/hosted-agent-runtime-progress.d.ts.map +1 -1
- package/dist/server/hosted-agent-runtime-progress.js +12 -3
- package/dist/server/hosted-agent-runtime-progress.js.map +1 -1
- package/dist/server/pending-request-payload.d.ts.map +1 -1
- package/dist/server/pending-request-payload.js +1 -3
- package/dist/server/pending-request-payload.js.map +1 -1
- package/dist/server/route-auth.d.ts.map +1 -1
- package/dist/server/route-auth.js +2 -0
- package/dist/server/route-auth.js.map +1 -1
- package/dist/server/session-serialization.d.ts.map +1 -1
- package/dist/server/session-serialization.js +1 -3
- package/dist/server/session-serialization.js.map +1 -1
- package/dist/services/compliance/normalize.d.ts.map +1 -1
- package/dist/services/compliance/normalize.js +1 -3
- package/dist/services/compliance/normalize.js.map +1 -1
- package/dist/services/intelligent-router/normalize.d.ts.map +1 -1
- package/dist/services/intelligent-router/normalize.js +1 -3
- package/dist/services/intelligent-router/normalize.js.map +1 -1
- package/dist/services/revenue-attribution/normalize.d.ts.map +1 -1
- package/dist/services/revenue-attribution/normalize.js +1 -3
- package/dist/services/revenue-attribution/normalize.js.map +1 -1
- package/dist/services/traces/normalize.d.ts.map +1 -1
- package/dist/services/traces/normalize.js +1 -3
- package/dist/services/traces/normalize.js.map +1 -1
- package/dist/services/workspace-config/normalize.d.ts.map +1 -1
- package/dist/services/workspace-config/normalize.js +1 -3
- package/dist/services/workspace-config/normalize.js.map +1 -1
- package/dist/skills/composer.d.ts.map +1 -1
- package/dist/skills/composer.js +13 -1
- package/dist/skills/composer.js.map +1 -1
- package/dist/skills/index.d.ts +1 -0
- package/dist/skills/index.d.ts.map +1 -1
- package/dist/skills/index.js +1 -0
- package/dist/skills/index.js.map +1 -1
- package/dist/skills/learned-guidelines.d.ts +33 -0
- package/dist/skills/learned-guidelines.d.ts.map +1 -0
- package/dist/skills/learned-guidelines.js +291 -0
- package/dist/skills/learned-guidelines.js.map +1 -0
- package/dist/skills/linter.d.ts.map +1 -1
- package/dist/skills/linter.js +1 -3
- package/dist/skills/linter.js.map +1 -1
- package/dist/skills/runtime-activation.d.ts +1 -0
- package/dist/skills/runtime-activation.d.ts.map +1 -1
- package/dist/skills/runtime-activation.js +2 -3
- package/dist/skills/runtime-activation.js.map +1 -1
- package/dist/skills/tool.d.ts.map +1 -1
- package/dist/skills/tool.js +26 -21
- package/dist/skills/tool.js.map +1 -1
- package/dist/skills/trust-cache.d.ts +7 -0
- package/dist/skills/trust-cache.d.ts.map +1 -1
- package/dist/skills/trust-cache.js +16 -0
- package/dist/skills/trust-cache.js.map +1 -1
- package/dist/telemetry/agent-workforce-native-event.d.ts.map +1 -1
- package/dist/telemetry/agent-workforce-native-event.js +1 -3
- package/dist/telemetry/agent-workforce-native-event.js.map +1 -1
- package/dist/telemetry/maestro-event-bus.d.ts.map +1 -1
- package/dist/telemetry/maestro-event-bus.js +42 -81
- package/dist/telemetry/maestro-event-bus.js.map +1 -1
- package/dist/telemetry/maestro-platform-replay-fixture.d.ts.map +1 -1
- package/dist/telemetry/maestro-platform-replay-fixture.js +1 -3
- package/dist/telemetry/maestro-platform-replay-fixture.js.map +1 -1
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +54 -43
- package/dist/telemetry.js.map +1 -1
- package/dist/theme/theme-loader.d.ts.map +1 -1
- package/dist/theme/theme-loader.js +1 -3
- package/dist/theme/theme-loader.js.map +1 -1
- package/dist/tools/apply-patch.d.ts.map +1 -1
- package/dist/tools/apply-patch.js +76 -8
- package/dist/tools/apply-patch.js.map +1 -1
- package/dist/tools/diff-preview.d.ts.map +1 -1
- package/dist/tools/diff-preview.js +10 -1
- package/dist/tools/diff-preview.js.map +1 -1
- package/dist/tools/edit.d.ts.map +1 -1
- package/dist/tools/edit.js +17 -0
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/write.d.ts.map +1 -1
- package/dist/tools/write.js +9 -0
- package/dist/tools/write.js.map +1 -1
- package/dist/undo/tracker.d.ts +5 -0
- package/dist/undo/tracker.d.ts.map +1 -1
- package/dist/undo/tracker.js +13 -0
- package/dist/undo/tracker.js.map +1 -1
- package/dist/utils/fs.d.ts +1 -1
- package/dist/utils/fs.d.ts.map +1 -1
- package/dist/utils/fs.js +29 -2
- package/dist/utils/fs.js.map +1 -1
- package/dist/utils/git-stash.d.ts.map +1 -1
- package/dist/utils/git-stash.js +15 -8
- package/dist/utils/git-stash.js.map +1 -1
- package/dist/utils/json.d.ts +11 -0
- package/dist/utils/json.d.ts.map +1 -1
- package/dist/utils/json.js +9 -0
- package/dist/utils/json.js.map +1 -1
- package/dist/utils/shell-env.d.ts.map +1 -1
- package/dist/utils/shell-env.js +2 -0
- package/dist/utils/shell-env.js.map +1 -1
- package/dist/utils/url-extractor-git.d.ts +26 -0
- package/dist/utils/url-extractor-git.d.ts.map +1 -0
- package/dist/utils/url-extractor-git.js +259 -0
- package/dist/utils/url-extractor-git.js.map +1 -0
- package/dist/utils/url-extractor.d.ts.map +1 -1
- package/dist/utils/url-extractor.js +23 -251
- package/dist/utils/url-extractor.js.map +1 -1
- package/dist/version.json +2 -2
- package/package.json +310 -306
- package/skills/incident-triage/SKILL.md +19 -1
- package/skills/install-code-review/SKILL.md +69 -0
- package/skills/security-review/SKILL.md +68 -0
- 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":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EACN,MAAM,EACN,KAAK,EACL,QAAQ,EACR,MAAM,EACN,EAAE,EACF,MAAM,EACN,SAAS,GACT,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,WAAW,CAAC;AAC/E,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAEN,wBAAwB,EACxB,6BAA6B,EAC7B,4BAA4B,GAC5B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACN,yBAAyB,EACzB,sBAAsB,GACtB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAEN,+BAA+B,EAC/B,kCAAkC,GAClC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EACN,gBAAgB,EAChB,sBAAsB,GACtB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAGN,eAAe,GACf,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEtE,MAAM,MAAM,GAAG,YAAY,CAAC,mBAAmB,CAAC,CAAC;AAyCjD,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC;IACpC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;QAClB,WAAW,EACV,gEAAgE;QACjE,SAAS,EAAE,CAAC;KACZ,CAAC;IACF,MAAM,EAAE,IAAI,CAAC,QAAQ,CACpB,IAAI,CAAC,OAAO,CAAC;QACZ,WAAW,EAAE,2CAA2C;QACxD,OAAO,EAAE,KAAK;KACd,CAAC,CACF;CACD,CAAC,CAAC;AAiBH,MAAM,uBAAwB,SAAQ,SAAS;IAC9C,YAAY,OAAe,EAAE,OAA8B;QAC1D,KAAK,CAAC,OAAO,EAAE,sBAAsB,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;CACD;AAED,SAAS,sBAAsB,CAAC,IAAgB;IAC/C,OAAO;QACN,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,WAAW,EAAE,CAAC;QACd,WAAW,EAAE,aAAa;QAC1B,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACzB,CAAC;AACH,CAAC;AAED,SAAS,6BAA6B,CACrC,IAAY,EACZ,YAAoB,EACpB,IAAgB;IAEhB,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACxB,oCAAoC,CAAC,IAAI,CAAC,CAAC;QAC3C,OAAO;IACR,CAAC;IACD,IAAI,sBAAsB,CAAC,YAAY,CAAC,EAAE,CAAC;QAC1C,OAAO;IACR,CAAC;IACD,mCAAmC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,oCAAoC,CAAC,IAAY;IACzD,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACnD,IAAI,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACvC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,OAAO;QACR,CAAC;QACD,mCAAmC,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACtD,CAAC;IACD,MAAM,UAAU,GAAG,uBAAuB,CAAC,eAAe,CAAC,CAAC;IAC5D,IAAI,UAAU,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1D,OAAO;IACR,CAAC;IACD,mCAAmC,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,mCAAmC,CAC3C,IAAY,EACZ,IAAgB;IAEhB,MAAM,IAAI,SAAS,CAClB,8CAA8C,IAAI,EAAE,EACpD,oCAAoC,EACpC,sBAAsB,CAAC,IAAI,CAAC,CAC5B,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAGtC;IACD,IAAI,EAAE,aAAa;IACnB,KAAK,EAAE,aAAa;IACpB,WAAW,EAAE;;;;;;uHAMyG;IACtH,MAAM,EAAE,gBAAgB;IACxB,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,YAAY,uBAAuB;IAChE,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE;QAChE,gBAAgB,CAAC,aAAa,CAAC,CAAC;QAChC,MAAM,cAAc,GAAG,GAAG,EAAE;YAC3B,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;gBACrB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACtC,CAAC;QACF,CAAC,CAAC;QAEF,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,WAAW,GAAG,wBAAwB,EAAE,CAAC;QAC/C,MAAM,IAAI,GAAG,OAAO;YACnB,CAAC,CAAC,MAAM,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC;YACxD,CAAC,CAAC,MAAM,mBAAmB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACpD,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAEpE,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,uBAAuB,CAChC,uBAAuB,IAAI,CAAC,WAAW,iHAAiH,EACxJ,OAAO,CACP,CAAC;QACH,CAAC;QACD,wBAAwB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAExC,cAAc,EAAE,CAAC;QACjB,IAAI,eAAe,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,IAAI,OAAO,EAAE,CAAC;gBACb,MAAM,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC1C,CAAC;iBAAM,CAAC;gBACP,MAAM,SAAS,GAAG,MAAM,qBAAqB,CAAC,IAAI,CAAC,CAAC;gBACpD,cAAc,EAAE,CAAC;gBACjB,IAAI,CAAC;oBACJ,MAAM,sBAAsB,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;oBACnD,MAAM,gBAAgB,GAAG,MAAM,uBAAuB,CACrD,IAAI,EACJ,SAAS,EACT,cAAc,CACd,CAAC;oBACF,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;oBACzC,IAAI,gBAAgB,CAAC,eAAe,EAAE,CAAC;wBACtC,eAAe,GAAG,kCAAkC,CACnD,gBAAgB,CAAC,eAAe,CAChC,CAAC;oBACH,CAAC;gBACF,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,MAAM,yBAAyB,CAAC,IAAI,CAAC,CAAC;oBACtC,MAAM,KAAK,CAAC;gBACb,CAAC;YACF,CAAC;QACF,CAAC;QAED,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACjD,OAAO,OAAO;aACZ,IAAI,CACJ;YACC,MAAM;gBACL,CAAC,CAAC,qCAAqC,gBAAgB,iBAAiB,IAAI,CAAC,YAAY,WAAW;gBACpG,CAAC,CAAC,oBAAoB,gBAAgB,iBAAiB,IAAI,CAAC,YAAY,WAAW;YACpF,eAAe;SACf;aACC,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,IAAI,CAAC,CACZ;aACA,MAAM,CAAC,OAAO,CAAC,CAAC;IACnB,CAAC;CACD,CAAC,CAAC;AAEH,KAAK,UAAU,mBAAmB,CACjC,QAA4B,EAC5B,IAAyB;IAEzB,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;IACzB,MAAM,WAAW,GAAG,IAAI,GAAG,EAA2B,CAAC;IACvD,MAAM,QAAQ,GAAG,KAAK,EAAE,IAAY,EAA4B,EAAE;QACjE,MAAM,YAAY,GAAG,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;QACvD,6BAA6B,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC7C,IAAI,MAAM,EAAE,CAAC;YACZ,OAAO,MAAM,CAAC;QACf,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC;QAC9C,MAAM,KAAK,GAAG;YACb,IAAI;YACJ,YAAY;YACZ,MAAM;YACN,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;SACzC,CAAC;QACF,WAAW,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QACrC,OAAO,KAAK,CAAC;IACd,CAAC,CAAC;IAEF,KAAK,MAAM,SAAS,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC;QAC/B,IAAI,SAAS,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAC9B,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CAAC,wBAAwB,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3D,CAAC;YACD,MAAM,WAAW,GAAG,cAAc,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC1D,2BAA2B,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;YACvD,iCAAiC,CAChC,KAAK,CAAC,IAAI,EACV,WAAW,EACX,IAAI,EACJ,SAAS,CACT,CAAC;YACF,gBAAgB,CAAC,IAAI,EAAE;gBACtB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,YAAY;gBACZ,eAAe,EAAE,IAAI;gBACrB,WAAW;gBACX,SAAS,EAAE,KAAK;gBAChB,YAAY,EAAE,CAAC;gBACf,IAAI,EAAE,kBAAkB,CAAC,EAAE,EAAE,WAAW,CAAC;aACzC,CAAC,CAAC;YACH,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;YACpB,KAAK,CAAC,cAAc,GAAG,WAAW,CAAC;QACpC,CAAC;aAAM,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACxC,MAAM,eAAe,GAAG,MAAM,0BAA0B,CACvD,KAAK,EACL,SAAS,CAAC,IAAI,CACd,CAAC;YACF,iCAAiC,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;YACrE,gBAAgB,CAAC,IAAI,EAAE;gBACtB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,YAAY;gBACZ,eAAe;gBACf,WAAW,EAAE,IAAI;gBACjB,SAAS,EAAE,QAAQ;gBACnB,YAAY,EAAE,CAAC;gBACf,IAAI,EAAE,kBAAkB,CAAC,eAAe,EAAE,EAAE,CAAC;aAC7C,CAAC,CAAC;YACH,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;YACrB,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC;aAAM,CAAC;YACP,MAAM,eAAe,GAAG,MAAM,0BAA0B,CACvD,KAAK,EACL,SAAS,CAAC,IAAI,CACd,CAAC;YACF,MAAM,OAAO,GACZ,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;gBACzB,CAAC,CAAC,gBAAgB,CAAC,eAAe,EAAE,SAAS,CAAC,KAAK,CAAC;gBACpD,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;YACjE,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClC,eAAe,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;gBACzD,SAAS;YACV,CAAC;YACD,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;YACpC,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;gBACtB,MAAM,gBAAgB,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBAC1D,IAAI,gBAAgB,CAAC,MAAM,EAAE,CAAC;oBAC7B,MAAM,IAAI,KAAK,CAAC,wBAAwB,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC7D,CAAC;gBACD,2BAA2B,CAAC,gBAAgB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;gBACxE,iCAAiC,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;gBACrE,iCAAiC,CAChC,gBAAgB,CAAC,IAAI,EACrB,WAAW,EACX,IAAI,EACJ,SAAS,CACT,CAAC;gBACF,gBAAgB,CAAC,IAAI,EAAE;oBACtB,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,YAAY;oBACZ,eAAe;oBACf,WAAW,EAAE,IAAI;oBACjB,SAAS,EAAE,QAAQ;oBACnB,YAAY,EAAE,CAAC;oBACf,IAAI,EAAE,kBAAkB,CAAC,eAAe,EAAE,EAAE,CAAC;iBAC7C,CAAC,CAAC;gBACH,gBAAgB,CAAC,IAAI,EAAE;oBACtB,IAAI,EAAE,gBAAgB,CAAC,IAAI;oBAC3B,YAAY,EAAE,gBAAgB,CAAC,YAAY;oBAC3C,eAAe,EAAE,IAAI;oBACrB,WAAW;oBACX,SAAS,EAAE,KAAK;oBAChB,YAAY,EAAE,OAAO,CAAC,YAAY;oBAClC,IAAI,EAAE,kBAAkB,CAAC,EAAE,EAAE,WAAW,CAAC;iBACzC,CAAC,CAAC;gBACH,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;gBACrB,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC5B,gBAAgB,CAAC,MAAM,GAAG,IAAI,CAAC;gBAC/B,gBAAgB,CAAC,cAAc,GAAG,WAAW,CAAC;gBAC9C,SAAS;YACV,CAAC;YACD,2BAA2B,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;YACvD,iCAAiC,CAChC,KAAK,CAAC,IAAI,EACV,WAAW,EACX,IAAI,EACJ,SAAS,CACT,CAAC;YACF,gBAAgB,CAAC,IAAI,EAAE;gBACtB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,YAAY;gBACZ,eAAe;gBACf,WAAW;gBACX,SAAS,EAAE,QAAQ;gBACnB,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,IAAI,EAAE,kBAAkB,CAAC,eAAe,EAAE,WAAW,CAAC;aACtD,CAAC,CAAC;YACH,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;YACpB,KAAK,CAAC,cAAc,GAAG,WAAW,CAAC;QACpC,CAAC;IACF,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC9B,QAA4B,EAC5B,OAAgB,EAChB,IAAyB;IAEzB,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;IACzB,MAAM,WAAW,GAAG,IAAI,GAAG,EAA2B,CAAC;IACvD,MAAM,QAAQ,GAAG,KAAK,EAAE,IAAY,EAA4B,EAAE;QACjE,MAAM,YAAY,GAAG,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;QACvD,6BAA6B,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,MAAM,EAAE,CAAC;YACZ,OAAO,MAAM,CAAC;QACf,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG;YACb,IAAI;YACJ,YAAY;YACZ,MAAM;YACN,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;SACzC,CAAC;QACF,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACjC,OAAO,KAAK,CAAC;IACd,CAAC,CAAC;IAEF,KAAK,MAAM,SAAS,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC;QAC/B,IAAI,SAAS,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAC9B,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CAAC,wBAAwB,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3D,CAAC;YACD,MAAM,WAAW,GAAG,cAAc,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC1D,2BAA2B,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;YACvD,iCAAiC,CAChC,KAAK,CAAC,IAAI,EACV,WAAW,EACX,IAAI,EACJ,SAAS,CACT,CAAC;YACF,gBAAgB,CAAC,IAAI,EAAE;gBACtB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,YAAY;gBACZ,eAAe,EAAE,IAAI;gBACrB,WAAW;gBACX,SAAS,EAAE,KAAK;gBAChB,YAAY,EAAE,CAAC;gBACf,IAAI,EAAE,kBAAkB,CAAC,EAAE,EAAE,WAAW,CAAC;aACzC,CAAC,CAAC;YACH,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;YACpB,KAAK,CAAC,cAAc,GAAG,WAAW,CAAC;QACpC,CAAC;aAAM,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACxC,MAAM,eAAe,GAAG,MAAM,uBAAuB,CACpD,KAAK,EACL,SAAS,CAAC,IAAI,EACd,OAAO,EACP,YAAY,CACZ,CAAC;YACF,iCAAiC,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;YACrE,gBAAgB,CAAC,IAAI,EAAE;gBACtB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,YAAY;gBACZ,eAAe;gBACf,WAAW,EAAE,IAAI;gBACjB,SAAS,EAAE,QAAQ;gBACnB,YAAY,EAAE,CAAC;gBACf,IAAI,EAAE,kBAAkB,CAAC,eAAe,EAAE,EAAE,CAAC;aAC7C,CAAC,CAAC;YACH,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;YACrB,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC;aAAM,CAAC;YACP,MAAM,eAAe,GAAG,MAAM,uBAAuB,CACpD,KAAK,EACL,SAAS,CAAC,IAAI,EACd,OAAO,EACP,YAAY,CACZ,CAAC;YACF,MAAM,OAAO,GACZ,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;gBACzB,CAAC,CAAC,gBAAgB,CAAC,eAAe,EAAE,SAAS,CAAC,KAAK,CAAC;gBACpD,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;YACjE,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClC,eAAe,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;gBACzD,SAAS;YACV,CAAC;YACD,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;YACpC,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;gBACtB,MAAM,gBAAgB,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBAC1D,IAAI,gBAAgB,CAAC,MAAM,EAAE,CAAC;oBAC7B,MAAM,IAAI,KAAK,CACd,mCAAmC,SAAS,CAAC,MAAM,EAAE,CACrD,CAAC;gBACH,CAAC;gBACD,2BAA2B,CAAC,gBAAgB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;gBACxE,iCAAiC,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;gBACrE,iCAAiC,CAChC,gBAAgB,CAAC,IAAI,EACrB,WAAW,EACX,IAAI,EACJ,SAAS,CACT,CAAC;gBACF,gBAAgB,CAAC,IAAI,EAAE;oBACtB,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,YAAY;oBACZ,eAAe;oBACf,WAAW,EAAE,IAAI;oBACjB,SAAS,EAAE,QAAQ;oBACnB,YAAY,EAAE,CAAC;oBACf,IAAI,EAAE,kBAAkB,CAAC,eAAe,EAAE,EAAE,CAAC;iBAC7C,CAAC,CAAC;gBACH,gBAAgB,CAAC,IAAI,EAAE;oBACtB,IAAI,EAAE,gBAAgB,CAAC,IAAI;oBAC3B,YAAY,EAAE,gBAAgB,CAAC,YAAY;oBAC3C,eAAe,EAAE,IAAI;oBACrB,WAAW;oBACX,SAAS,EAAE,KAAK;oBAChB,YAAY,EAAE,OAAO,CAAC,YAAY;oBAClC,IAAI,EAAE,kBAAkB,CAAC,EAAE,EAAE,WAAW,CAAC;iBACzC,CAAC,CAAC;gBACH,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;gBACrB,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC5B,gBAAgB,CAAC,MAAM,GAAG,IAAI,CAAC;gBAC/B,gBAAgB,CAAC,cAAc,GAAG,WAAW,CAAC;gBAC9C,SAAS;YACV,CAAC;YACD,2BAA2B,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;YACvD,iCAAiC,CAChC,KAAK,CAAC,IAAI,EACV,WAAW,EACX,IAAI,EACJ,SAAS,CACT,CAAC;YACF,gBAAgB,CAAC,IAAI,EAAE;gBACtB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,YAAY;gBACZ,eAAe;gBACf,WAAW;gBACX,SAAS,EAAE,QAAQ;gBACnB,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,IAAI,EAAE,kBAAkB,CAAC,eAAe,EAAE,WAAW,CAAC;aACtD,CAAC,CAAC;YACH,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;YACpB,KAAK,CAAC,cAAc,GAAG,WAAW,CAAC;QACpC,CAAC;IACF,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,SAAS,iCAAiC,CACzC,IAAY,EACZ,WAA0B,EAC1B,IAAoC,EACpC,IAAgB;IAEhB,MAAM,YAAY,GAAG,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;IACvD,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QAC1B,MAAM,eAAe,GAAG,4BAA4B,CAAC;YACpD,QAAQ,EAAE,YAAY;YACtB,OAAO,EAAE,WAAW;YACpB,IAAI;SACJ,CAAC,CAAC;QACH,IAAI,eAAe,CAAC,EAAE,EAAE,CAAC;YACxB,OAAO;QACR,CAAC;QACD,MAAM,IAAI,SAAS,CAClB,eAAe,CAAC,OAAO,EACvB,8BAA8B,EAC9B,sBAAsB,CAAC,IAAI,CAAC,CAC5B,CAAC;IACH,CAAC;IACD,MAAM,gBAAgB,GAAG,6BAA6B,CAAC;QACtD,QAAQ,EAAE,YAAY;KACtB,CAAC,CAAC;IACH,IAAI,gBAAgB,CAAC,EAAE,EAAE,CAAC;QACzB,OAAO;IACR,CAAC;IACD,MAAM,IAAI,SAAS,CAClB,gBAAgB,CAAC,OAAO,EACxB,8BAA8B,EAC9B,sBAAsB,CAAC,IAAI,CAAC,CAC5B,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CACxB,eAAuB,EACvB,KAAuB;IAEvB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,eAAe,CAAC,CAAC;IACpD,IAAI,KAAK,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,YAAY,GAAG,QAAQ,CAAC,eAAe,CAAC;IAC5C,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QAC7C,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,KAAK,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrC,YAAY,GAAG,uBAAuB,CAAC,YAAY,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YACzE,YAAY,EAAE,CAAC;YACf,SAAS;QACV,CAAC;QACD,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAC5D,CAAC,KAAK,EAAE,EAAE,CACT,CAAC,IAAI,CAAC,eAAe,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CACvE,CAAC;QACF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,SAAS,CAAC,IAAI,CAAC,QAAQ,KAAK,GAAG,CAAC,qBAAqB,CAAC,CAAC;YACvD,SAAS;QACV,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,SAAS,CAAC,IAAI,CACb,QAAQ,KAAK,GAAG,CAAC,qBAAqB,OAAO,CAAC,MAAM,QAAQ,CAC5D,CAAC;YACF,SAAS;QACV,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC9B,KAAK,GAAG;YACP,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;YACxB,GAAG,IAAI,CAAC,QAAQ;YAChB,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;SAC5C,CAAC;QACF,YAAY,GAAG,uBAAuB,CAAC,YAAY,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACzE,YAAY,EAAE,CAAC;IAChB,CAAC;IACD,OAAO;QACN,OAAO,EAAE,sBAAsB,CAAC,KAAK,EAAE,QAAQ,EAAE,YAAY,CAAC;QAC9D,YAAY;QACZ,SAAS;KACT,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAC/B,mBAA4B,EAC5B,IAAoB,EACpB,eAAuB;IAEvB,IAAI,IAAI,CAAC,iBAAiB,KAAK,IAAI,EAAE,CAAC;QACrC,OAAO,KAAK,CAAC;IACd,CAAC;IACD,IAAI,IAAI,CAAC,iBAAiB,KAAK,IAAI,EAAE,CAAC;QACrC,OAAO,eAAe,GAAG,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,mBAAmB,CAAC;AAC5B,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAe,EAAE,MAAgB;IAC1D,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACzD,OAAO,OAAO,CAAC;IAChB,CAAC;IACD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QACpE,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;YACvD,IAAI,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC9C,OAAO,GAAG,KAAK,CAAC;gBAChB,MAAM;YACP,CAAC;QACF,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACF,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,sBAAsB,CACpC,IAAoB,EACpB,cAA0B;IAE1B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACnC,cAAc,EAAE,CAAC;QACjB,IAAI,MAAM,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;YACjC,MAAM,EAAE,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/C,SAAS;QACV,CAAC;QACD,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/D,MAAM,mBAAmB,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IACpE,CAAC;AACF,CAAC;AAED,SAAS,wBAAwB,CAChC,IAAoB,EACpB,OAA8B;IAE9B,MAAM,IAAI,GAAG,wBAAwB,EAAE,CAAC;IACxC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACnC,MAAM,MAAM,GACX,MAAM,CAAC,WAAW,KAAK,IAAI;YAC1B,CAAC,CAAC,6BAA6B,CAAC;gBAC9B,QAAQ,EAAE,qBAAqB,CAAC,MAAM,CAAC;aACvC,CAAC;YACH,CAAC,CAAC,4BAA4B,CAAC;gBAC7B,QAAQ,EAAE,qBAAqB,CAAC,MAAM,CAAC;gBACvC,OAAO,EAAE,MAAM,CAAC,WAAW;gBAC3B,IAAI;aACJ,CAAC,CAAC;QACN,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YAChB,MAAM,IAAI,SAAS,CAClB,MAAM,CAAC,OAAO,EACd,8BAA8B,EAC9B,OAAO,CACP,CAAC;QACH,CAAC;IACF,CAAC;AACF,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAyB;IACvD,OAAO,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC;QACrC,CAAC,CAAC,MAAM,CAAC,YAAY;QACrB,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,KAAK,UAAU,mBAAmB,CACjC,IAAoB,EACpB,OAAgB;IAEhB,8BAA8B,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9C,IAAI,CAAC;QACJ,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACnC,IAAI,MAAM,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;gBACjC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;oBACrB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;gBAC5D,CAAC;gBACD,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC1C,CAAC;iBAAM,CAAC;gBACP,MAAM,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;YAC1D,CAAC;QACF,CAAC;IACF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,sBAAsB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,KAAK,CAAC;IACb,CAAC;AACF,CAAC;AAED,SAAS,8BAA8B,CACtC,IAAoB,EACpB,OAAgB;IAEhB,MAAM,6BAA6B,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CACtD,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,KAAK,IAAI,IAAI,MAAM,CAAC,eAAe,KAAK,IAAI,CAC1E,CAAC;IACF,IAAI,6BAA6B,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CACd,mGAAmG,CACnG,CAAC;IACH,CAAC;AACF,CAAC;AAED,KAAK,UAAU,sBAAsB,CACpC,IAAoB,EACpB,OAAgB;IAEhB,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAClD,IAAI,CAAC;YACJ,IAAI,MAAM,CAAC,eAAe,KAAK,IAAI,EAAE,CAAC;gBACrC,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBAC3C,SAAS;YACV,CAAC;YACD,MAAM,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;QAC9D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE;gBAC5C,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,KAAK;aACL,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;AACF,CAAC;AAED,KAAK,UAAU,qBAAqB,CACnC,IAAoB;IAEpB,MAAM,SAAS,GAAG,IAAI,GAAG,EAA8B,CAAC;IACxD,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACnC,IAAI,MAAM,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;YACjC,SAAS;QACV,CAAC;QACD,SAAS,CAAC,GAAG,CACZ,MAAM,CAAC,YAAY,EACnB,MAAM,yBAAyB,CAAC,MAAM,CAAC,YAAY,CAAC,CACpD,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,uBAAuB,CACrC,IAAoB,EACpB,SAA0C,EAC1C,cAA0B;IAO1B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO;SAC7B,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,KAAK,IAAI,CAAC;SAC/C,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACvC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,CAAC;IACX,CAAC;IACD,cAAc,EAAE,CAAC;IACjB,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CACrC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAC5B,sBAAsB,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC,CACjD,CACD,CAAC;IACF,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QACjD,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC1C,OAAO,+BAA+B,CAAC;YACtC,IAAI,EAAE,SAAS;YACf,WAAW,EACV,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,KAAK,SAAS,CAAC;gBAC/D,EAAE,IAAI,IAAI,SAAS;YACrB,MAAM;SACN,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,MAAM,oBAAoB,GAAG,MAAM,CAAC,WAAW,CAC9C,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAC/B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAC3C,CACD,CAAC;IACF,MAAM,kBAAkB,GAAG,MAAM,sBAAsB,CACtD,UAAU,EACV,oBAAoB,CACpB,CAAC;IACF,OAAO;QACN,UAAU,EAAE,kBAAkB;QAC9B,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;QAC1B,gBAAgB,EAAE,MAAM;KACxB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,yBAAyB,CAAC,IAAoB;IAC5D,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAClD,IAAI,CAAC;YACJ,IAAI,MAAM,CAAC,eAAe,KAAK,IAAI,EAAE,CAAC;gBACrC,MAAM,EAAE,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC/C,SAAS;YACV,CAAC;YACD,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/D,MAAM,mBAAmB,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;QACxE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE;gBAC/C,IAAI,EAAE,MAAM,CAAC,YAAY;gBACzB,KAAK;aACL,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;AACF,CAAC;AAED,KAAK,UAAU,mBAAmB,CACjC,QAAgB,EAChB,QAAgB;IAEhB,MAAM,QAAQ,GAAG,GAAG,QAAQ,IAAI,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC;IAC1D,MAAM,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC7C,IAAI,CAAC;QACJ,MAAM,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACvC,MAAM,KAAK,CAAC;IACb,CAAC;AACF,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC9B,YAAoB,EACpB,WAAmB;IAEnB,IAAI,CAAC;QACJ,MAAM,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC5D,OAAO,MAAM,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACR,MAAM,IAAI,KAAK,CACd,+BAA+B,WAAW,qDAAqD,CAC/F,CAAC;IACH,CAAC;AACF,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,YAAoB;IAC7C,IAAI,CAAC;QACJ,MAAM,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC;AAED,SAAS,uBAAuB,CAAC,IAAY;IAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE;QACpE,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;YACvC,OAAO,QAAQ,CAAC;QACjB,CAAC;QACD,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACtB,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACrD,QAAQ,CAAC,GAAG,EAAE,CAAC;YAChB,CAAC;iBAAM,IAAI,CAAC,UAAU,EAAE,CAAC;gBACxB,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACxB,CAAC;YACD,OAAO,QAAQ,CAAC;QACjB,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,OAAO,QAAQ,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,CAAC;IACP,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnC,OAAO,UAAU,CAAC,CAAC,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;AACnD,CAAC;AAED,KAAK,UAAU,0BAA0B,CACxC,KAAsB,EACtB,WAAmB;IAEnB,MAAM,cAAc,GAAG,yBAAyB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IACrE,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,cAAc,CAAC;IACvB,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IACxE,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC;IAC/B,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,uBAAuB,CACrC,KAAsB,EACtB,WAAmB,EACnB,OAAgB,EAChB,QAAQ,GAAG,EAAE;IAEb,MAAM,cAAc,GAAG,yBAAyB,CAC/C,KAAK,EACL,WAAW,EACX,QAAQ,CACR,CAAC;IACF,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,cAAc,CAAC;IACvB,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACpD,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC;IAC/B,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,SAAS,yBAAyB,CACjC,KAAsB,EACtB,WAAmB,EACnB,QAAQ,GAAG,EAAE;IAEb,MAAM,cAAc,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACtD,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QACxC,IAAI,KAAK,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;YACnC,OAAO,KAAK,CAAC,cAAc,CAAC;QAC7B,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,iBAAiB,cAAc,KAAK,WAAW,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,iBAAiB,cAAc,KAAK,WAAW,EAAE,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,SAAS;IACjB,OAAO;QACN,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,WAAW,EAAE,CAAC;QACd,OAAO,EAAE,EAAE;KACX,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CACxB,IAAoB,EACpB,MAAyB;IAEzB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1B,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY,CAAC;IACzC,IAAI,MAAM,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;QAChC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;SAAM,IAAI,MAAM,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC1C,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;SAAM,CAAC;QACP,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;AACF,CAAC;AAED,SAAS,UAAU,CAAC,MAAgB,EAAE,KAAa;IAClD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;AACF,CAAC;AAED,SAAS,eAAe,CACvB,IAAoB,EACpB,IAAY,EACZ,SAAmB;IAEnB,IAAI,CAAC,WAAW,IAAI,SAAS,CAAC,MAAM,CAAC;IACrC,IAAI,CAAC,eAAe,KAAK,EAAE,CAAC;IAC5B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QAClC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,QAAQ,EAAE,CAAC,CAAC;IACnD,CAAC;AACF,CAAC;AAED,SAAS,YAAY,CACpB,IAAoB,EACpB,IAAgB;IAEhB,OAAO;QACN,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,eAAe,EAAE,IAAI,CAAC,eAAe;QACrC,KAAK,EAAE,gBAAgB,CAAC,IAAI,CAAC;QAC7B,WAAW,EAAE,aAAa;QAC1B,IAAI;KACJ,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAoB;IAC7C,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACnC,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC/B,SAAS;QACV,CAAC;QACD,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;IAC7E,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAoB;IAC9C,OAAO,IAAI,GAAG,CAAC;QACd,GAAG,IAAI,CAAC,YAAY;QACpB,GAAG,IAAI,CAAC,aAAa;QACrB,GAAG,IAAI,CAAC,YAAY;KACpB,CAAC,CAAC,IAAI,CAAC;AACT,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACrC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IACzC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,OAAO,IAAI,CAAC;AACb,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAe;IACzC,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IACzD,MAAM,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACpD,MAAM,UAAU,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC1E,MAAM,eAAe,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IACvE,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9D,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC;AACvE,CAAC;AAED,SAAS,sBAAsB,CAC9B,KAAe,EACf,QAA4B,EAC5B,YAAY,GAAG,QAAQ,CAAC,eAAe;IAEvC,OAAO,GAAG,QAAQ,CAAC,GAAG,GAAG,cAAc,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;AACpG,CAAC;AAED,SAAS,cAAc,CAAC,KAAe,EAAE,YAAqB;IAC7D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACjC,CAAC;IACD,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACzD,CAAC","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;
|
|
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
|
}
|