@cjhyy/code-shell-core 0.7.1 → 0.8.1
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/README.md +36 -23
- package/dist/agent/agent-definition-registry.d.ts +2 -2
- package/dist/agent/agent-definition-registry.js +47 -10
- package/dist/agent/agent-definition.d.ts +5 -0
- package/dist/agent/agent-definition.js +14 -0
- package/dist/automation/index.d.ts +7 -4
- package/dist/automation/index.js +4 -2
- package/dist/automation/runner.js +3 -1
- package/dist/automation/scheduler.d.ts +57 -1
- package/dist/automation/scheduler.js +123 -23
- package/dist/automation/store.d.ts +6 -2
- package/dist/automation/store.js +7 -3
- package/dist/capabilities/index.d.ts +109 -0
- package/dist/capabilities/index.js +80 -0
- package/dist/capability-control/disabled-lists.d.ts +2 -1
- package/dist/capability-control/disabled-lists.js +3 -5
- package/dist/capability-control/overlay.d.ts +14 -1
- package/dist/capability-control/overlay.js +40 -0
- package/dist/capability-control/service.js +6 -4
- package/dist/cli/agent-server-stdio.d.ts +1 -1
- package/dist/cli/agent-server-stdio.js +66 -6
- package/dist/cli/agent-server-tcp.js +7 -3
- package/dist/context/compaction.d.ts +39 -3
- package/dist/context/compaction.js +151 -39
- package/dist/context/manager.d.ts +17 -1
- package/dist/context/manager.js +36 -1
- package/dist/credentials/access.d.ts +3 -1
- package/dist/credentials/access.js +24 -3
- package/dist/credentials/index.d.ts +1 -1
- package/dist/credentials/index.js +1 -1
- package/dist/credentials/oauth.d.ts +4 -1
- package/dist/credentials/oauth.js +14 -0
- package/dist/credentials/store.d.ts +15 -1
- package/dist/credentials/store.js +17 -4
- package/dist/credentials/types.d.ts +24 -0
- package/dist/credentials/use-credential-tool.js +15 -1
- package/dist/engine/auxiliary-pipeline.d.ts +40 -0
- package/dist/engine/auxiliary-pipeline.js +181 -0
- package/dist/{settings → engine}/disk-defaults.d.ts +2 -2
- package/dist/{settings → engine}/disk-defaults.js +5 -2
- package/dist/engine/dynamic-tool-defs.d.ts +4 -0
- package/dist/engine/dynamic-tool-defs.js +4 -0
- package/dist/engine/engine.d.ts +254 -195
- package/dist/engine/engine.js +1812 -2041
- package/dist/engine/file-history-hook.d.ts +11 -0
- package/dist/engine/file-history-hook.js +31 -0
- package/dist/engine/goal-judge-context.d.ts +9 -0
- package/dist/engine/goal-judge-context.js +234 -0
- package/dist/engine/injected-context-cache.d.ts +6 -0
- package/dist/engine/injected-context-cache.js +13 -0
- package/dist/engine/input-attachments.d.ts +1 -1
- package/dist/engine/model-facade.d.ts +3 -3
- package/dist/engine/model-facade.js +15 -14
- package/dist/engine/permission-controller.d.ts +55 -0
- package/dist/engine/permission-controller.js +148 -0
- package/dist/engine/prompt-cache-diagnostics.d.ts +58 -0
- package/dist/engine/prompt-cache-diagnostics.js +178 -0
- package/dist/engine/run-accounting.d.ts +41 -0
- package/dist/engine/run-accounting.js +126 -0
- package/dist/engine/run-context.d.ts +44 -0
- package/dist/engine/run-context.js +88 -0
- package/dist/engine/run-environment.d.ts +30 -0
- package/dist/engine/run-environment.js +77 -0
- package/dist/engine/run-finalize.d.ts +58 -0
- package/dist/engine/run-finalize.js +245 -0
- package/dist/engine/run-goal.d.ts +58 -0
- package/dist/engine/run-goal.js +188 -0
- package/dist/engine/run-image-input.d.ts +1 -1
- package/dist/engine/run-image-input.js +5 -3
- package/dist/engine/run-session-open.d.ts +41 -0
- package/dist/engine/run-session-open.js +186 -0
- package/dist/engine/run-setup.d.ts +42 -0
- package/dist/engine/run-setup.js +58 -0
- package/dist/engine/run-tooling.d.ts +125 -0
- package/dist/engine/run-tooling.js +283 -0
- package/dist/engine/run-types.d.ts +139 -0
- package/dist/engine/run-types.js +12 -0
- package/dist/engine/run-workspace.d.ts +50 -0
- package/dist/engine/run-workspace.js +114 -0
- package/dist/engine/steer-queue.d.ts +1 -1
- package/dist/engine/subagent-spawner.d.ts +32 -0
- package/dist/engine/subagent-spawner.js +287 -0
- package/dist/engine/tool-summary.d.ts +2 -2
- package/dist/engine/tool-summary.js +2 -2
- package/dist/engine/turn-loop.d.ts +49 -10
- package/dist/engine/turn-loop.js +370 -104
- package/dist/engine/types.d.ts +30 -3
- package/dist/engine/types.js +1 -1
- package/dist/{engine/goal.d.ts → goal/lifecycle.d.ts} +76 -4
- package/dist/goal/lifecycle.js +482 -0
- package/dist/hooks/events.d.ts +24 -10
- package/dist/hooks/goal-stop-hook.d.ts +17 -28
- package/dist/hooks/goal-stop-hook.js +110 -465
- package/dist/hooks/registry.js +1 -1
- package/dist/index.d.ts +48 -108
- package/dist/index.extension.d.ts +51 -0
- package/dist/index.extension.js +39 -0
- package/dist/index.internal.d.ts +86 -0
- package/dist/index.internal.js +92 -0
- package/dist/index.js +34 -123
- package/dist/links/cli.d.ts +48 -0
- package/dist/links/cli.js +617 -0
- package/dist/links/http.d.ts +40 -0
- package/dist/links/http.js +166 -0
- package/dist/links/index.d.ts +4 -0
- package/dist/links/index.js +3 -0
- package/dist/links/link-action-tool.d.ts +5 -0
- package/dist/links/link-action-tool.js +241 -0
- package/dist/links/providers.d.ts +8 -0
- package/dist/links/providers.js +665 -0
- package/dist/links/types.d.ts +44 -0
- package/dist/llm/client-base.d.ts +7 -0
- package/dist/llm/client-base.js +60 -0
- package/dist/llm/model-pool.d.ts +1 -1
- package/dist/llm/model-pool.js +1 -1
- package/dist/llm/providers/anthropic.d.ts +1 -0
- package/dist/llm/providers/anthropic.js +9 -0
- package/dist/llm/providers/openai.d.ts +1 -0
- package/dist/llm/providers/openai.js +17 -0
- package/dist/model-catalog/index.js +15 -2
- package/dist/model-catalog/resolve.d.ts +13 -1
- package/dist/model-catalog/resolve.js +37 -2
- package/dist/model-catalog/types.d.ts +74 -48
- package/dist/model-catalog/types.js +16 -5
- package/dist/model-catalog/upsert.d.ts +3 -1
- package/dist/model-catalog/upsert.js +9 -0
- package/dist/onboarding.d.ts +0 -1
- package/dist/onboarding.js +1 -22
- package/dist/panel-apps/bindings.d.ts +24 -0
- package/dist/panel-apps/bindings.js +69 -0
- package/dist/panel-apps/github-archive.d.ts +21 -0
- package/dist/panel-apps/github-archive.js +98 -0
- package/dist/panel-apps/index.d.ts +4 -0
- package/dist/panel-apps/index.js +4 -0
- package/dist/panel-apps/installer.d.ts +68 -0
- package/dist/panel-apps/installer.js +622 -0
- package/dist/panel-apps/manifest.d.ts +364 -0
- package/dist/panel-apps/manifest.js +189 -0
- package/dist/panel-apps/paths.d.ts +13 -0
- package/dist/panel-apps/paths.js +38 -0
- package/dist/panel-apps/registry.d.ts +51 -0
- package/dist/panel-apps/registry.js +99 -0
- package/dist/panel-apps/runtime.d.ts +80 -0
- package/dist/panel-apps/runtime.js +154 -0
- package/dist/plugins/gitOps.js +8 -1
- package/dist/plugins/installedPlugins.d.ts +2 -1
- package/dist/plugins/installedPlugins.js +146 -8
- package/dist/plugins/installer/codex/convertAgents.d.ts +4 -1
- package/dist/plugins/installer/codex/convertAgents.js +62 -8
- package/dist/plugins/installer/codex/convertCommands.d.ts +5 -5
- package/dist/plugins/installer/codex/convertCommands.js +35 -12
- package/dist/plugins/installer/codex/convertHooks.d.ts +10 -0
- package/dist/plugins/installer/codex/convertHooks.js +82 -0
- package/dist/plugins/installer/codex/convertSkills.js +41 -6
- package/dist/plugins/installer/install.d.ts +7 -1
- package/dist/plugins/installer/install.js +21 -87
- package/dist/plugins/installer/installFromArchive.d.ts +26 -4
- package/dist/plugins/installer/installFromArchive.js +44 -27
- package/dist/plugins/installer/installFromNpm.d.ts +31 -0
- package/dist/plugins/installer/installFromNpm.js +273 -0
- package/dist/plugins/installer/loadPluginAgents.js +17 -4
- package/dist/plugins/installer/loadPluginMcp.d.ts +14 -0
- package/dist/plugins/installer/loadPluginMcp.js +245 -35
- package/dist/plugins/installer/normalizeManifest.d.ts +13 -0
- package/dist/plugins/installer/normalizeManifest.js +306 -0
- package/dist/plugins/installer/npmTar.d.ts +13 -0
- package/dist/plugins/installer/npmTar.js +321 -0
- package/dist/plugins/installer/parseSource.d.ts +11 -0
- package/dist/plugins/installer/parseSource.js +48 -0
- package/dist/plugins/installer/preview.d.ts +101 -0
- package/dist/plugins/installer/preview.js +336 -0
- package/dist/plugins/installer/projectPluginSource.d.ts +14 -0
- package/dist/plugins/installer/projectPluginSource.js +140 -0
- package/dist/plugins/installer/types.d.ts +775 -0
- package/dist/plugins/installer/types.js +100 -0
- package/dist/plugins/installer/unzip.d.ts +11 -0
- package/dist/plugins/installer/unzip.js +123 -9
- package/dist/plugins/installer/update.d.ts +2 -2
- package/dist/plugins/installer/update.js +43 -4
- package/dist/plugins/loadPluginHooks.d.ts +19 -2
- package/dist/plugins/loadPluginHooks.js +97 -86
- package/dist/plugins/pluginAutomationTemplates.d.ts +18 -0
- package/dist/plugins/pluginAutomationTemplates.js +50 -0
- package/dist/plugins/pluginCatalog.d.ts +45 -0
- package/dist/plugins/pluginCatalog.js +87 -0
- package/dist/plugins/pluginCommandHook.d.ts +6 -0
- package/dist/plugins/pluginCommandHook.js +25 -8
- package/dist/plugins/pluginCommandsLoader.d.ts +19 -0
- package/dist/plugins/pluginCommandsLoader.js +181 -7
- package/dist/plugins/pluginContent.d.ts +10 -1
- package/dist/plugins/pluginContent.js +87 -30
- package/dist/plugins/pluginHookApproval.d.ts +30 -0
- package/dist/plugins/pluginHookApproval.js +160 -0
- package/dist/plugins/pluginHookIntegrity.d.ts +69 -0
- package/dist/plugins/pluginHookIntegrity.js +361 -0
- package/dist/plugins/pluginInstaller.js +71 -12
- package/dist/plugins/pluginMcpApproval.d.ts +19 -0
- package/dist/plugins/pluginMcpApproval.js +110 -0
- package/dist/plugins/pluginMcpIntegrity.d.ts +21 -0
- package/dist/plugins/pluginMcpIntegrity.js +74 -0
- package/dist/plugins/types.d.ts +30 -0
- package/dist/plugins/varRewrite.d.ts +9 -5
- package/dist/plugins/varRewrite.js +26 -17
- package/dist/preset/index.d.ts +11 -8
- package/dist/preset/index.js +62 -203
- package/dist/product/define.js +9 -3
- package/dist/product/types.d.ts +0 -2
- package/dist/profile/activation.d.ts +36 -0
- package/dist/profile/activation.js +57 -0
- package/dist/profile/catalog-store.d.ts +77 -0
- package/dist/profile/catalog-store.js +346 -0
- package/dist/profile/catalog.d.ts +54 -0
- package/dist/profile/catalog.js +152 -0
- package/dist/profile/index.d.ts +7 -0
- package/dist/profile/index.js +7 -0
- package/dist/profile/requirements.d.ts +76 -0
- package/dist/profile/requirements.js +117 -0
- package/dist/profile/resolve.d.ts +11 -0
- package/dist/profile/resolve.js +41 -0
- package/dist/profile/store.d.ts +17 -0
- package/dist/profile/store.js +167 -0
- package/dist/profile/types.d.ts +321 -0
- package/dist/profile/types.js +104 -0
- package/dist/prompt/composer.d.ts +46 -7
- package/dist/prompt/composer.js +78 -48
- package/dist/prompt/instruction-scanner.d.ts +6 -5
- package/dist/prompt/instruction-scanner.js +8 -23
- package/dist/prompt/section-loader.d.ts +2 -2
- package/dist/prompt/section-loader.js +7 -4
- package/dist/prompt/sections/browser.md +10 -9
- package/dist/prompt/sections/harness-base.md +9 -0
- package/dist/protocol/chat-session-manager.d.ts +64 -1
- package/dist/protocol/chat-session-manager.js +104 -0
- package/dist/protocol/chat-session.d.ts +61 -10
- package/dist/protocol/chat-session.js +135 -25
- package/dist/protocol/client.d.ts +33 -3
- package/dist/protocol/client.js +96 -5
- package/dist/protocol/index.d.ts +2 -2
- package/dist/protocol/index.js +2 -2
- package/dist/protocol/mobile-remote-types.d.ts +406 -0
- package/dist/protocol/mobile-remote-types.js +1 -0
- package/dist/protocol/server.d.ts +127 -3
- package/dist/protocol/server.js +1309 -182
- package/dist/protocol/types.d.ts +152 -34
- package/dist/protocol/types.js +16 -0
- package/dist/run/ArtifactTracker.d.ts +6 -1
- package/dist/run/ArtifactTracker.js +29 -21
- package/dist/run/EngineRunner.d.ts +2 -0
- package/dist/run/EngineRunner.js +1 -0
- package/dist/run/RunManager.d.ts +26 -0
- package/dist/run/RunManager.js +82 -11
- package/dist/run/factory.d.ts +3 -0
- package/dist/run/factory.js +2 -0
- package/dist/runtime/safe-spawn.d.ts +6 -0
- package/dist/runtime/safe-spawn.js +8 -13
- package/dist/services/auto-dream.d.ts +13 -1
- package/dist/services/auto-dream.js +56 -8
- package/dist/services/dream-consolidation.js +10 -1
- package/dist/services/memory-orchestrator.js +6 -2
- package/dist/services/oauth.js +4 -1
- package/dist/services/session-memory.d.ts +4 -4
- package/dist/services/session-memory.js +13 -10
- package/dist/session/memory.d.ts +26 -7
- package/dist/session/memory.js +79 -21
- package/dist/session/session-manager.d.ts +182 -28
- package/dist/session/session-manager.js +910 -130
- package/dist/session/session-message.d.ts +22 -0
- package/dist/session/session-message.js +1 -0
- package/dist/session/transcript.d.ts +46 -5
- package/dist/session/transcript.js +159 -3
- package/dist/settings/feature-flags.d.ts +40 -0
- package/dist/settings/feature-flags.js +40 -0
- package/dist/settings/manager.d.ts +39 -1
- package/dist/settings/manager.js +102 -41
- package/dist/settings/migrate-config.js +4 -2
- package/dist/settings/schema.d.ts +511 -177
- package/dist/settings/schema.js +98 -25
- package/dist/skills/scanner.d.ts +6 -2
- package/dist/skills/scanner.js +160 -9
- package/dist/sources/adapter.d.ts +14 -0
- package/dist/sources/adapter.js +7 -0
- package/dist/sources/adapters/local-files.d.ts +10 -0
- package/dist/sources/adapters/local-files.js +127 -0
- package/dist/sources/adapters/mcp-resource.d.ts +17 -0
- package/dist/sources/adapters/mcp-resource.js +41 -0
- package/dist/sources/adapters/mock.d.ts +3 -0
- package/dist/sources/adapters/mock.js +29 -0
- package/dist/sources/binding.d.ts +6 -0
- package/dist/sources/binding.js +24 -0
- package/dist/sources/catalog.d.ts +6 -0
- package/dist/sources/catalog.js +64 -0
- package/dist/sources/context-summary.d.ts +8 -0
- package/dist/sources/context-summary.js +13 -0
- package/dist/sources/credential-status.d.ts +2 -0
- package/dist/sources/credential-status.js +13 -0
- package/dist/sources/index.d.ts +10 -0
- package/dist/sources/index.js +10 -0
- package/dist/sources/resolve.d.ts +28 -0
- package/dist/sources/resolve.js +47 -0
- package/dist/sources/truncate-utf8.d.ts +7 -0
- package/dist/sources/truncate-utf8.js +18 -0
- package/dist/sources/types.d.ts +71 -0
- package/dist/sources/types.js +26 -0
- package/dist/testing/fetch-stub.d.ts +32 -0
- package/dist/testing/fetch-stub.js +24 -0
- package/dist/themes/image.d.ts +18 -0
- package/dist/themes/image.js +117 -0
- package/dist/themes/index.d.ts +4 -0
- package/dist/themes/index.js +4 -0
- package/dist/themes/installer.d.ts +50 -0
- package/dist/themes/installer.js +290 -0
- package/dist/themes/manifest.d.ts +102 -0
- package/dist/themes/manifest.js +86 -0
- package/dist/themes/paths.d.ts +14 -0
- package/dist/themes/paths.js +33 -0
- package/dist/tool-system/browser-bridge.d.ts +53 -11
- package/dist/tool-system/browser-bridge.js +8 -9
- package/dist/tool-system/builtin/agent-heartbeat.d.ts +2 -2
- package/dist/tool-system/builtin/agent-heartbeat.js +20 -6
- package/dist/tool-system/builtin/agent-notifications.d.ts +127 -72
- package/dist/tool-system/builtin/agent-notifications.js +291 -101
- package/dist/tool-system/builtin/agent-output-file.js +1 -3
- package/dist/tool-system/builtin/agent-progress.d.ts +6 -0
- package/dist/tool-system/builtin/agent-progress.js +83 -0
- package/dist/tool-system/builtin/agent-registry.d.ts +38 -2
- package/dist/tool-system/builtin/agent-registry.js +178 -9
- package/dist/tool-system/builtin/agent-transcript-translator.js +1 -1
- package/dist/tool-system/builtin/agent.d.ts +2 -0
- package/dist/tool-system/builtin/agent.js +274 -33
- package/dist/tool-system/builtin/background-jobs.d.ts +55 -2
- package/dist/tool-system/builtin/background-jobs.js +96 -4
- package/dist/tool-system/builtin/background-work.d.ts +6 -0
- package/dist/tool-system/builtin/background-work.js +8 -1
- package/dist/tool-system/builtin/bash.js +5 -2
- package/dist/tool-system/builtin/browser-tools.d.ts +6 -3
- package/dist/tool-system/builtin/browser-tools.js +89 -23
- package/dist/tool-system/builtin/edit-model-catalog.d.ts +6 -0
- package/dist/tool-system/builtin/edit-model-catalog.js +172 -12
- package/dist/tool-system/builtin/edit.js +2 -6
- package/dist/tool-system/builtin/file-cache.d.ts +2 -0
- package/dist/tool-system/builtin/file-cache.js +4 -0
- package/dist/tool-system/builtin/generate-image.js +17 -10
- package/dist/tool-system/builtin/generate-video.js +26 -7
- package/dist/tool-system/builtin/grep.js +2 -2
- package/dist/tool-system/builtin/image-uploader.js +7 -1
- package/dist/tool-system/builtin/index.d.ts +32 -7
- package/dist/tool-system/builtin/index.js +237 -167
- package/dist/tool-system/builtin/memory.d.ts +6 -0
- package/dist/tool-system/builtin/memory.js +36 -15
- package/dist/tool-system/builtin/panel.d.ts +9 -0
- package/dist/tool-system/builtin/panel.js +314 -0
- package/dist/tool-system/builtin/read.js +5 -1
- package/dist/tool-system/builtin/send-message-to-session.d.ts +6 -0
- package/dist/tool-system/builtin/send-message-to-session.js +67 -0
- package/dist/tool-system/builtin/sources.d.ts +8 -0
- package/dist/tool-system/builtin/sources.js +137 -0
- package/dist/tool-system/builtin/tool-search.js +7 -2
- package/dist/tool-system/builtin/update-automation-memory.js +2 -0
- package/dist/tool-system/builtin/web-fetch.js +17 -13
- package/dist/tool-system/builtin/web-search.js +1 -3
- package/dist/tool-system/capability-module.d.ts +93 -0
- package/dist/tool-system/capability-module.js +53 -0
- package/dist/tool-system/context.d.ts +77 -19
- package/dist/tool-system/executor.js +75 -50
- package/dist/tool-system/external-tool-exposure.d.ts +60 -0
- package/dist/tool-system/external-tool-exposure.js +304 -0
- package/dist/tool-system/mcp-manager.d.ts +11 -1
- package/dist/tool-system/mcp-manager.js +19 -4
- package/dist/tool-system/mcp-tool-policy.d.ts +9 -0
- package/dist/tool-system/mcp-tool-policy.js +34 -0
- package/dist/tool-system/panel-bridge.d.ts +53 -0
- package/dist/tool-system/panel-bridge.js +1 -0
- package/dist/tool-system/path-policy.js +99 -2
- package/dist/tool-system/permission.d.ts +26 -0
- package/dist/tool-system/permission.js +46 -0
- package/dist/tool-system/registry.d.ts +12 -1
- package/dist/tool-system/registry.js +31 -7
- package/dist/tool-system/sandbox/index.js +3 -8
- package/dist/tool-system/sandbox/seatbelt.js +2 -6
- package/dist/tool-system/session-tool-host.d.ts +139 -0
- package/dist/tool-system/session-tool-host.js +167 -0
- package/dist/tool-system/testing/tool-registry-harness.d.ts +31 -0
- package/dist/tool-system/testing/tool-registry-harness.js +51 -0
- package/dist/tool-system/validation.d.ts +14 -7
- package/dist/tool-system/validation.js +701 -7
- package/dist/types.d.ts +186 -20
- package/dist/{cc-orchestrator → utils}/cwd-normalize.d.ts +1 -0
- package/dist/{cc-orchestrator → utils}/cwd-normalize.js +1 -0
- package/dist/utils/file-mutex.d.ts +65 -0
- package/dist/utils/file-mutex.js +145 -0
- package/dist/utils/json.d.ts +2 -4
- package/dist/utils/json.js +2 -4
- package/dist/utils/lockfile.d.ts +30 -1
- package/dist/utils/lockfile.js +2 -2
- package/dist/utils/secret-scrubber.d.ts +8 -0
- package/dist/utils/secret-scrubber.js +227 -0
- package/dist/utils/toolDisplay.js +1 -1
- package/package.json +20 -5
- package/THIRD_PARTY_NOTICES.md +0 -206
- package/dist/arena/arena.d.ts +0 -45
- package/dist/arena/arena.js +0 -362
- package/dist/arena/context/context-tools.d.ts +0 -16
- package/dist/arena/context/context-tools.js +0 -272
- package/dist/arena/context/within-root.d.ts +0 -7
- package/dist/arena/context/within-root.js +0 -15
- package/dist/arena/detect-mode.d.ts +0 -20
- package/dist/arena/detect-mode.js +0 -78
- package/dist/arena/digest-builder.d.ts +0 -25
- package/dist/arena/digest-builder.js +0 -120
- package/dist/arena/index.d.ts +0 -29
- package/dist/arena/index.js +0 -29
- package/dist/arena/iterate/convergence.d.ts +0 -25
- package/dist/arena/iterate/convergence.js +0 -103
- package/dist/arena/iterate/formats/index.d.ts +0 -22
- package/dist/arena/iterate/formats/index.js +0 -283
- package/dist/arena/iterate/index.d.ts +0 -11
- package/dist/arena/iterate/index.js +0 -9
- package/dist/arena/iterate/iterative-arena.d.ts +0 -23
- package/dist/arena/iterate/iterative-arena.js +0 -237
- package/dist/arena/iterate/parse.d.ts +0 -42
- package/dist/arena/iterate/parse.js +0 -123
- package/dist/arena/iterate/phases/argue.d.ts +0 -22
- package/dist/arena/iterate/phases/argue.js +0 -165
- package/dist/arena/iterate/phases/revise.d.ts +0 -16
- package/dist/arena/iterate/phases/revise.js +0 -62
- package/dist/arena/iterate/phases/tournament.d.ts +0 -34
- package/dist/arena/iterate/phases/tournament.js +0 -113
- package/dist/arena/iterate/tools/web-tools.d.ts +0 -13
- package/dist/arena/iterate/tools/web-tools.js +0 -54
- package/dist/arena/iterate/types.d.ts +0 -152
- package/dist/arena/iterate/types.js +0 -8
- package/dist/arena/ledger.d.ts +0 -47
- package/dist/arena/ledger.js +0 -159
- package/dist/arena/lenses/architecture.d.ts +0 -5
- package/dist/arena/lenses/architecture.js +0 -22
- package/dist/arena/lenses/engineering.d.ts +0 -5
- package/dist/arena/lenses/engineering.js +0 -22
- package/dist/arena/lenses/general.d.ts +0 -5
- package/dist/arena/lenses/general.js +0 -20
- package/dist/arena/lenses/index.d.ts +0 -16
- package/dist/arena/lenses/index.js +0 -47
- package/dist/arena/lenses/product.d.ts +0 -5
- package/dist/arena/lenses/product.js +0 -22
- package/dist/arena/model-presets.d.ts +0 -23
- package/dist/arena/model-presets.js +0 -44
- package/dist/arena/phases/adjudication.d.ts +0 -25
- package/dist/arena/phases/adjudication.js +0 -142
- package/dist/arena/phases/build-consensus.d.ts +0 -30
- package/dist/arena/phases/build-consensus.js +0 -85
- package/dist/arena/phases/claim-registry.d.ts +0 -26
- package/dist/arena/phases/claim-registry.js +0 -60
- package/dist/arena/phases/cross-review.d.ts +0 -47
- package/dist/arena/phases/cross-review.js +0 -224
- package/dist/arena/phases/debate-rounds.d.ts +0 -28
- package/dist/arena/phases/debate-rounds.js +0 -161
- package/dist/arena/phases/participant-research.d.ts +0 -39
- package/dist/arena/phases/participant-research.js +0 -316
- package/dist/arena/phases/planning-detail-expansion.d.ts +0 -39
- package/dist/arena/phases/planning-detail-expansion.js +0 -120
- package/dist/arena/planner.d.ts +0 -28
- package/dist/arena/planner.js +0 -312
- package/dist/arena/providers/docs.d.ts +0 -7
- package/dist/arena/providers/docs.js +0 -111
- package/dist/arena/providers/git.d.ts +0 -8
- package/dist/arena/providers/git.js +0 -174
- package/dist/arena/providers/index.d.ts +0 -32
- package/dist/arena/providers/index.js +0 -132
- package/dist/arena/providers/none.d.ts +0 -7
- package/dist/arena/providers/none.js +0 -11
- package/dist/arena/providers/repo.d.ts +0 -7
- package/dist/arena/providers/repo.js +0 -258
- package/dist/arena/render/session.d.ts +0 -17
- package/dist/arena/render/session.js +0 -190
- package/dist/arena/render/terminal.d.ts +0 -34
- package/dist/arena/render/terminal.js +0 -286
- package/dist/arena/strategies/discussion.d.ts +0 -25
- package/dist/arena/strategies/discussion.js +0 -143
- package/dist/arena/strategies/index.d.ts +0 -15
- package/dist/arena/strategies/index.js +0 -28
- package/dist/arena/strategies/language-wrapper.d.ts +0 -17
- package/dist/arena/strategies/language-wrapper.js +0 -102
- package/dist/arena/strategies/lens-wrapper.d.ts +0 -16
- package/dist/arena/strategies/lens-wrapper.js +0 -236
- package/dist/arena/strategies/planning.d.ts +0 -30
- package/dist/arena/strategies/planning.js +0 -225
- package/dist/arena/strategies/review.d.ts +0 -26
- package/dist/arena/strategies/review.js +0 -168
- package/dist/arena/strategies/utils.d.ts +0 -36
- package/dist/arena/strategies/utils.js +0 -603
- package/dist/arena/tools/selector.d.ts +0 -17
- package/dist/arena/tools/selector.js +0 -61
- package/dist/arena/transitions.d.ts +0 -53
- package/dist/arena/transitions.js +0 -97
- package/dist/arena/types.d.ts +0 -518
- package/dist/arena/types.js +0 -27
- package/dist/cc-orchestrator/agent-adapter.d.ts +0 -54
- package/dist/cc-orchestrator/agent-adapter.js +0 -143
- package/dist/cc-orchestrator/cc-capability.d.ts +0 -19
- package/dist/cc-orchestrator/cc-capability.js +0 -53
- package/dist/cc-orchestrator/codex-session-discovery.d.ts +0 -24
- package/dist/cc-orchestrator/codex-session-discovery.js +0 -191
- package/dist/cc-orchestrator/codex-session-history.d.ts +0 -38
- package/dist/cc-orchestrator/codex-session-history.js +0 -247
- package/dist/cc-orchestrator/external-agent-bindings.d.ts +0 -27
- package/dist/cc-orchestrator/external-agent-bindings.js +0 -150
- package/dist/cc-orchestrator/external-agent-changes.d.ts +0 -19
- package/dist/cc-orchestrator/external-agent-changes.js +0 -231
- package/dist/cc-orchestrator/external-agent-driver.d.ts +0 -19
- package/dist/cc-orchestrator/external-agent-driver.js +0 -284
- package/dist/cc-orchestrator/external-agent-session-store.d.ts +0 -23
- package/dist/cc-orchestrator/external-agent-session-store.js +0 -146
- package/dist/cc-orchestrator/index.d.ts +0 -8
- package/dist/cc-orchestrator/index.js +0 -8
- package/dist/cc-orchestrator/relevance-judge.d.ts +0 -15
- package/dist/cc-orchestrator/relevance-judge.js +0 -29
- package/dist/cc-orchestrator/session-discovery.d.ts +0 -46
- package/dist/cc-orchestrator/session-discovery.js +0 -125
- package/dist/cc-orchestrator/session-history.d.ts +0 -54
- package/dist/cc-orchestrator/session-history.js +0 -150
- package/dist/cron/cron-runtime.d.ts +0 -2
- package/dist/cron/cron-runtime.js +0 -2
- package/dist/cron/cron-store.d.ts +0 -2
- package/dist/cron/cron-store.js +0 -2
- package/dist/cron/scheduler.d.ts +0 -7
- package/dist/cron/scheduler.js +0 -7
- package/dist/engine/goal.js +0 -206
- package/dist/external-agents/config.d.ts +0 -2
- package/dist/external-agents/config.js +0 -15
- package/dist/external-agents/types.d.ts +0 -31
- package/dist/git/parse-log.d.ts +0 -13
- package/dist/git/parse-log.js +0 -21
- package/dist/git/utils.d.ts +0 -49
- package/dist/git/utils.js +0 -161
- package/dist/git/worktree/crud.d.ts +0 -72
- package/dist/git/worktree/crud.js +0 -235
- package/dist/git/worktree/diff.d.ts +0 -14
- package/dist/git/worktree/diff.js +0 -82
- package/dist/git/worktree/git-exec.d.ts +0 -7
- package/dist/git/worktree/git-exec.js +0 -87
- package/dist/git/worktree/index.d.ts +0 -5
- package/dist/git/worktree/index.js +0 -5
- package/dist/git/worktree/query.d.ts +0 -43
- package/dist/git/worktree/query.js +0 -128
- package/dist/git/worktree/slug.d.ts +0 -11
- package/dist/git/worktree/slug.js +0 -58
- package/dist/git/worktree.d.ts +0 -1
- package/dist/git/worktree.js +0 -5
- package/dist/lsp/client.d.ts +0 -41
- package/dist/lsp/client.js +0 -186
- package/dist/lsp/manager.d.ts +0 -40
- package/dist/lsp/manager.js +0 -155
- package/dist/lsp/root-path.d.ts +0 -9
- package/dist/lsp/root-path.js +0 -12
- package/dist/lsp/servers.d.ts +0 -16
- package/dist/lsp/servers.js +0 -60
- package/dist/prompt/sections/coding.md +0 -35
- package/dist/quota/credentials.d.ts +0 -3
- package/dist/quota/credentials.js +0 -80
- package/dist/quota/index.d.ts +0 -36
- package/dist/quota/index.js +0 -155
- package/dist/quota/types.d.ts +0 -48
- package/dist/quota/types.js +0 -13
- package/dist/review/review-prompt.d.ts +0 -28
- package/dist/review/review-prompt.js +0 -81
- package/dist/state.d.ts +0 -160
- package/dist/state.js +0 -267
- package/dist/tool-system/builtin/apply-patch/applier.d.ts +0 -26
- package/dist/tool-system/builtin/apply-patch/applier.js +0 -308
- package/dist/tool-system/builtin/apply-patch/backup-targets.d.ts +0 -10
- package/dist/tool-system/builtin/apply-patch/backup-targets.js +0 -30
- package/dist/tool-system/builtin/apply-patch/index.d.ts +0 -20
- package/dist/tool-system/builtin/apply-patch/index.js +0 -105
- package/dist/tool-system/builtin/apply-patch/parser.d.ts +0 -17
- package/dist/tool-system/builtin/apply-patch/parser.js +0 -212
- package/dist/tool-system/builtin/apply-patch/seek-sequence.d.ts +0 -18
- package/dist/tool-system/builtin/apply-patch/seek-sequence.js +0 -123
- package/dist/tool-system/builtin/apply-patch/types.d.ts +0 -49
- package/dist/tool-system/builtin/apply-patch/types.js +0 -13
- package/dist/tool-system/builtin/arena.d.ts +0 -31
- package/dist/tool-system/builtin/arena.js +0 -416
- package/dist/tool-system/builtin/brief.d.ts +0 -6
- package/dist/tool-system/builtin/brief.js +0 -41
- package/dist/tool-system/builtin/check-quota.d.ts +0 -15
- package/dist/tool-system/builtin/check-quota.js +0 -34
- package/dist/tool-system/builtin/drive-claude-code.d.ts +0 -51
- package/dist/tool-system/builtin/drive-claude-code.js +0 -698
- package/dist/tool-system/builtin/lsp.d.ts +0 -7
- package/dist/tool-system/builtin/lsp.js +0 -144
- package/dist/tool-system/builtin/notebook-edit.d.ts +0 -7
- package/dist/tool-system/builtin/notebook-edit.js +0 -127
- package/dist/tool-system/builtin/worktree.d.ts +0 -11
- package/dist/tool-system/builtin/worktree.js +0 -363
- /package/dist/{external-agents → links}/types.js +0 -0
- /package/dist/{engine/session-usage.d.ts → session/usage.d.ts} +0 -0
- /package/dist/{engine/session-usage.js → session/usage.js} +0 -0
|
@@ -1,308 +0,0 @@
|
|
|
1
|
-
// Atomic patch applier — dry-runs all hunks, then commits all-or-nothing.
|
|
2
|
-
//
|
|
3
|
-
// This deliberately diverges from codex-rs/apply-patch which applies hunks
|
|
4
|
-
// one-by-one and leaves partial changes on disk if a later hunk fails (see
|
|
5
|
-
// fixture 015_failure_after_partial_success_leaves_changes for codex's
|
|
6
|
-
// behavior). We treat the patch as a transaction: either every hunk applies
|
|
7
|
-
// or none do. Set `allowPartialOnCommit` to mimic codex semantics for the
|
|
8
|
-
// rare case where you want it.
|
|
9
|
-
//
|
|
10
|
-
// Algorithm uses code adapted from codex-rs/apply-patch/src/lib.rs (Apache-2.0)
|
|
11
|
-
// for the chunk-replacement phase (compute_replacements, apply_replacements).
|
|
12
|
-
import { mkdir, readFile, stat, unlink, writeFile } from "node:fs/promises";
|
|
13
|
-
import { existsSync, realpathSync } from "node:fs";
|
|
14
|
-
import { dirname, isAbsolute, resolve, sep } from "node:path";
|
|
15
|
-
import { seekSequence } from "./seek-sequence.js";
|
|
16
|
-
import { detectEol, toLf, applyEol } from "../eol.js";
|
|
17
|
-
/**
|
|
18
|
-
* Plan and commit the patch atomically.
|
|
19
|
-
*
|
|
20
|
-
* Phase 1 (plan): walk every hunk, compute the resulting file content in
|
|
21
|
-
* memory. Throws if any hunk cannot be applied; nothing is written.
|
|
22
|
-
*
|
|
23
|
-
* Phase 2 (commit): write all planned changes. If any write fails, restore
|
|
24
|
-
* from the in-memory snapshot captured in phase 1 and rethrow.
|
|
25
|
-
*/
|
|
26
|
-
export async function applyPatch(hunks, options) {
|
|
27
|
-
if (hunks.length === 0) {
|
|
28
|
-
throw new Error("No files were modified.");
|
|
29
|
-
}
|
|
30
|
-
const planned = await planHunks(hunks, options.cwd);
|
|
31
|
-
return commitPlanned(planned, !!options.allowPartialOnCommit);
|
|
32
|
-
}
|
|
33
|
-
async function planHunks(hunks, cwd) {
|
|
34
|
-
const set = {
|
|
35
|
-
byPath: new Map(),
|
|
36
|
-
added: [],
|
|
37
|
-
modified: [],
|
|
38
|
-
deleted: [],
|
|
39
|
-
};
|
|
40
|
-
function schedule(path, change) {
|
|
41
|
-
if (set.byPath.has(path)) {
|
|
42
|
-
throw new Error(`Patch references ${path} more than once. Combine the operations into a single hunk.`);
|
|
43
|
-
}
|
|
44
|
-
set.byPath.set(path, change);
|
|
45
|
-
}
|
|
46
|
-
for (const hunk of hunks) {
|
|
47
|
-
const original = hunk.path;
|
|
48
|
-
const sourcePath = resolveAgainst(original, cwd);
|
|
49
|
-
if (hunk.kind === "add") {
|
|
50
|
-
const existed = await readIfExists(sourcePath);
|
|
51
|
-
schedule(sourcePath, {
|
|
52
|
-
path: sourcePath,
|
|
53
|
-
newContent: hunk.contents,
|
|
54
|
-
originalContent: existed,
|
|
55
|
-
});
|
|
56
|
-
set.added.push(original);
|
|
57
|
-
continue;
|
|
58
|
-
}
|
|
59
|
-
if (hunk.kind === "delete") {
|
|
60
|
-
const stats = await safeStat(sourcePath);
|
|
61
|
-
if (!stats)
|
|
62
|
-
throw new Error(`Failed to delete file: ${sourcePath} not found`);
|
|
63
|
-
if (stats.isDirectory()) {
|
|
64
|
-
throw new Error(`Failed to delete file: ${sourcePath} is a directory`);
|
|
65
|
-
}
|
|
66
|
-
const content = await readFile(sourcePath, "utf-8");
|
|
67
|
-
schedule(sourcePath, {
|
|
68
|
-
path: sourcePath,
|
|
69
|
-
newContent: null,
|
|
70
|
-
originalContent: content,
|
|
71
|
-
});
|
|
72
|
-
set.deleted.push(original);
|
|
73
|
-
continue;
|
|
74
|
-
}
|
|
75
|
-
// Update (with optional rename).
|
|
76
|
-
const stats = await safeStat(sourcePath);
|
|
77
|
-
if (!stats) {
|
|
78
|
-
throw new Error(`Failed to update file: ${sourcePath} does not exist`);
|
|
79
|
-
}
|
|
80
|
-
const originalRaw = await readFile(sourcePath, "utf-8");
|
|
81
|
-
// CRLF handling: patch context lines are LF (the model emits LF). Match in
|
|
82
|
-
// LF space, then write back in the file's original EOL so a CRLF file isn't
|
|
83
|
-
// silently converted to LF (which would diff the whole file). originalText
|
|
84
|
-
// (LF) is what we compare; originalRaw is preserved for rollback so a
|
|
85
|
-
// restore writes back the exact bytes. See eol.ts.
|
|
86
|
-
const eol = detectEol(originalRaw);
|
|
87
|
-
const originalText = toLf(originalRaw);
|
|
88
|
-
const newText = applyEol(applyChunksToText(originalText, hunk.chunks, sourcePath), eol);
|
|
89
|
-
if (hunk.movePath !== undefined) {
|
|
90
|
-
const destPath = resolveAgainst(hunk.movePath, cwd);
|
|
91
|
-
if (destPath === sourcePath) {
|
|
92
|
-
// Rename to self → degenerate update.
|
|
93
|
-
schedule(sourcePath, {
|
|
94
|
-
path: sourcePath,
|
|
95
|
-
newContent: newText,
|
|
96
|
-
originalContent: originalRaw,
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
else {
|
|
100
|
-
const destOriginal = await readIfExists(destPath);
|
|
101
|
-
schedule(sourcePath, {
|
|
102
|
-
path: sourcePath,
|
|
103
|
-
newContent: null,
|
|
104
|
-
originalContent: originalRaw,
|
|
105
|
-
});
|
|
106
|
-
schedule(destPath, {
|
|
107
|
-
path: destPath,
|
|
108
|
-
newContent: newText,
|
|
109
|
-
originalContent: destOriginal,
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
set.modified.push(original);
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
schedule(sourcePath, {
|
|
116
|
-
path: sourcePath,
|
|
117
|
-
newContent: newText,
|
|
118
|
-
originalContent: originalRaw,
|
|
119
|
-
});
|
|
120
|
-
set.modified.push(original);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
return set;
|
|
124
|
-
}
|
|
125
|
-
/** Apply the chunk list to a file's text and return the new text. */
|
|
126
|
-
function applyChunksToText(original, chunks, pathForError) {
|
|
127
|
-
// split('\n') leaves an empty trailing element when the file ends with \n;
|
|
128
|
-
// drop it so line indices match standard diff semantics. We re-add the
|
|
129
|
-
// trailing newline at the end.
|
|
130
|
-
const lines = original.split("\n");
|
|
131
|
-
if (lines.length > 0 && lines[lines.length - 1] === "") {
|
|
132
|
-
lines.pop();
|
|
133
|
-
}
|
|
134
|
-
// Each replacement: [startIndex, oldLen, newLines]
|
|
135
|
-
const replacements = [];
|
|
136
|
-
let lineIndex = 0;
|
|
137
|
-
for (const chunk of chunks) {
|
|
138
|
-
if (chunk.changeContext !== undefined) {
|
|
139
|
-
const found = seekSequence(lines, [chunk.changeContext], lineIndex, false);
|
|
140
|
-
if (found === null) {
|
|
141
|
-
throw new Error(`Failed to find context '${chunk.changeContext}' in ${pathForError}`);
|
|
142
|
-
}
|
|
143
|
-
lineIndex = found + 1;
|
|
144
|
-
}
|
|
145
|
-
if (chunk.oldLines.length === 0) {
|
|
146
|
-
// Pure addition — append at end. Mirrors codex behavior: even when the
|
|
147
|
-
// chunk has a `@@ <context>` anchor, pure additions are inserted at
|
|
148
|
-
// EOF rather than near the anchor. Models should include at least one
|
|
149
|
-
// `-` or ` ` line if they want positional insertion.
|
|
150
|
-
const insertionIdx = lines.length > 0 && lines[lines.length - 1] === ""
|
|
151
|
-
? lines.length - 1
|
|
152
|
-
: lines.length;
|
|
153
|
-
replacements.push([insertionIdx, 0, [...chunk.newLines]]);
|
|
154
|
-
continue;
|
|
155
|
-
}
|
|
156
|
-
let pattern = chunk.oldLines;
|
|
157
|
-
let newSlice = chunk.newLines;
|
|
158
|
-
let found = seekSequence(lines, pattern, lineIndex, chunk.isEndOfFile);
|
|
159
|
-
if (found === null && pattern.length > 0 && pattern[pattern.length - 1] === "") {
|
|
160
|
-
// Retry without trailing empty sentinel that represents the file's final newline.
|
|
161
|
-
pattern = pattern.slice(0, -1);
|
|
162
|
-
if (newSlice.length > 0 && newSlice[newSlice.length - 1] === "") {
|
|
163
|
-
newSlice = newSlice.slice(0, -1);
|
|
164
|
-
}
|
|
165
|
-
found = seekSequence(lines, pattern, lineIndex, chunk.isEndOfFile);
|
|
166
|
-
}
|
|
167
|
-
if (found === null) {
|
|
168
|
-
throw new Error(`Failed to find expected lines in ${pathForError}:\n${chunk.oldLines.join("\n")}`);
|
|
169
|
-
}
|
|
170
|
-
replacements.push([found, pattern.length, [...newSlice]]);
|
|
171
|
-
lineIndex = found + pattern.length;
|
|
172
|
-
}
|
|
173
|
-
// Apply in descending start-index order so indices stay valid.
|
|
174
|
-
replacements.sort((a, b) => a[0] - b[0]);
|
|
175
|
-
const working = lines.slice();
|
|
176
|
-
for (let i = replacements.length - 1; i >= 0; i--) {
|
|
177
|
-
const [start, oldLen, newSeg] = replacements[i];
|
|
178
|
-
working.splice(start, oldLen, ...newSeg);
|
|
179
|
-
}
|
|
180
|
-
// Always end with a trailing newline.
|
|
181
|
-
if (working.length === 0 || working[working.length - 1] !== "") {
|
|
182
|
-
working.push("");
|
|
183
|
-
}
|
|
184
|
-
return working.join("\n");
|
|
185
|
-
}
|
|
186
|
-
// ─── Phase 2: commit ──────────────────────────────────────────────
|
|
187
|
-
async function commitPlanned(set, allowPartial) {
|
|
188
|
-
// Iterate insertion order (Map iteration is spec-guaranteed).
|
|
189
|
-
const ordered = [...set.byPath.values()];
|
|
190
|
-
if (allowPartial) {
|
|
191
|
-
for (const change of ordered) {
|
|
192
|
-
await writeChange(change);
|
|
193
|
-
}
|
|
194
|
-
return { added: set.added, modified: set.modified, deleted: set.deleted };
|
|
195
|
-
}
|
|
196
|
-
// Track which writes have completed so rollback only touches them. We use
|
|
197
|
-
// the originalContent captured during plan() rather than re-reading from
|
|
198
|
-
// disk — this avoids a TOCTOU window between planning and committing.
|
|
199
|
-
const committed = [];
|
|
200
|
-
try {
|
|
201
|
-
for (const change of ordered) {
|
|
202
|
-
await writeChange(change);
|
|
203
|
-
committed.push(change);
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
catch (err) {
|
|
207
|
-
for (let i = committed.length - 1; i >= 0; i--) {
|
|
208
|
-
const c = committed[i];
|
|
209
|
-
try {
|
|
210
|
-
if (c.originalContent === null) {
|
|
211
|
-
// File did not exist before we wrote it — remove our write.
|
|
212
|
-
if (existsSync(c.path))
|
|
213
|
-
await unlink(c.path);
|
|
214
|
-
}
|
|
215
|
-
else {
|
|
216
|
-
await writeFile(c.path, c.originalContent, "utf-8");
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
catch {
|
|
220
|
-
// Best-effort restore — surface the original error to the caller.
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
throw err;
|
|
224
|
-
}
|
|
225
|
-
return { added: set.added, modified: set.modified, deleted: set.deleted };
|
|
226
|
-
}
|
|
227
|
-
async function writeChange(change) {
|
|
228
|
-
if (change.newContent === null) {
|
|
229
|
-
if (existsSync(change.path))
|
|
230
|
-
await unlink(change.path);
|
|
231
|
-
return;
|
|
232
|
-
}
|
|
233
|
-
const parent = dirname(change.path);
|
|
234
|
-
if (!existsSync(parent)) {
|
|
235
|
-
await mkdir(parent, { recursive: true });
|
|
236
|
-
}
|
|
237
|
-
await writeFile(change.path, change.newContent, "utf-8");
|
|
238
|
-
}
|
|
239
|
-
// ─── helpers ──────────────────────────────────────────────────────
|
|
240
|
-
/**
|
|
241
|
-
* Resolve a patch-relative (or absolute) path against cwd, then HARD-ENFORCE
|
|
242
|
-
* that the result stays inside cwd.
|
|
243
|
-
*
|
|
244
|
-
* This is the applier's own containment guard, independent of the executor-level
|
|
245
|
-
* pathPolicy. apply-patch is reachable with the path gate bypassed (e.g.
|
|
246
|
-
* bypassPermissions, or a direct call), so the last line of defense lives here.
|
|
247
|
-
*
|
|
248
|
-
* Containment is checked against the REAL paths: we realpath cwd and walk the
|
|
249
|
-
* target up to its nearest existing ancestor and realpath that. This defeats a
|
|
250
|
-
* symlink planted inside cwd that points outside — a plain string `resolve()`
|
|
251
|
-
* would look contained while the write follows the link out.
|
|
252
|
-
*/
|
|
253
|
-
function resolveAgainst(p, cwd) {
|
|
254
|
-
const resolved = isAbsolute(p) ? p : resolve(cwd, p);
|
|
255
|
-
const realCwd = nearestRealPath(cwd);
|
|
256
|
-
const realTarget = nearestRealPath(resolved);
|
|
257
|
-
if (!isInside(realTarget, realCwd)) {
|
|
258
|
-
throw new Error(`Refusing to apply patch outside the working directory: "${p}" resolves to "${realTarget}", which escapes "${realCwd}".`);
|
|
259
|
-
}
|
|
260
|
-
return resolved;
|
|
261
|
-
}
|
|
262
|
-
/**
|
|
263
|
-
* Realpath the nearest existing ancestor of `abs`, then re-attach the
|
|
264
|
-
* not-yet-existing trailing segments. Mirrors path-policy.safeRealpath so
|
|
265
|
-
* symlinked ancestors are resolved even when the leaf doesn't exist yet.
|
|
266
|
-
*/
|
|
267
|
-
function nearestRealPath(abs) {
|
|
268
|
-
let candidate = abs;
|
|
269
|
-
const segments = [];
|
|
270
|
-
for (let i = 0; i < 64; i++) {
|
|
271
|
-
try {
|
|
272
|
-
const real = realpathSync(candidate);
|
|
273
|
-
if (segments.length === 0)
|
|
274
|
-
return real;
|
|
275
|
-
return resolve(real, ...segments.reverse());
|
|
276
|
-
}
|
|
277
|
-
catch {
|
|
278
|
-
const parent = dirname(candidate);
|
|
279
|
-
if (parent === candidate)
|
|
280
|
-
return abs;
|
|
281
|
-
segments.push(candidate.slice(parent.length + (parent.endsWith(sep) ? 0 : 1)));
|
|
282
|
-
candidate = parent;
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
return abs;
|
|
286
|
-
}
|
|
287
|
-
function isInside(child, parent) {
|
|
288
|
-
if (child === parent)
|
|
289
|
-
return true;
|
|
290
|
-
const p = parent.endsWith(sep) ? parent : parent + sep;
|
|
291
|
-
return child.startsWith(p);
|
|
292
|
-
}
|
|
293
|
-
async function safeStat(path) {
|
|
294
|
-
try {
|
|
295
|
-
return await stat(path);
|
|
296
|
-
}
|
|
297
|
-
catch {
|
|
298
|
-
return null;
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
async function readIfExists(path) {
|
|
302
|
-
try {
|
|
303
|
-
return await readFile(path, "utf-8");
|
|
304
|
-
}
|
|
305
|
-
catch {
|
|
306
|
-
return null;
|
|
307
|
-
}
|
|
308
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Which files an ApplyPatch would modify-in-place or delete — i.e. the files
|
|
3
|
-
* that already exist and therefore have pre-patch content worth snapshotting
|
|
4
|
-
* for /undo. Pure (parse-only, no fs): given the patch text and the cwd to
|
|
5
|
-
* resolve relative paths against, return absolute target paths.
|
|
6
|
-
*
|
|
7
|
-
* "add" hunks are excluded: a newly-created file has no prior content to back
|
|
8
|
-
* up (undo of an add = delete, handled separately if/when /undo grows that).
|
|
9
|
-
*/
|
|
10
|
-
export declare function patchBackupTargets(patchText: string, cwd: string): string[];
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Which files an ApplyPatch would modify-in-place or delete — i.e. the files
|
|
3
|
-
* that already exist and therefore have pre-patch content worth snapshotting
|
|
4
|
-
* for /undo. Pure (parse-only, no fs): given the patch text and the cwd to
|
|
5
|
-
* resolve relative paths against, return absolute target paths.
|
|
6
|
-
*
|
|
7
|
-
* "add" hunks are excluded: a newly-created file has no prior content to back
|
|
8
|
-
* up (undo of an add = delete, handled separately if/when /undo grows that).
|
|
9
|
-
*/
|
|
10
|
-
import { resolve as resolvePath } from "node:path";
|
|
11
|
-
import { parsePatch } from "./parser.js";
|
|
12
|
-
export function patchBackupTargets(patchText, cwd) {
|
|
13
|
-
let parsed;
|
|
14
|
-
try {
|
|
15
|
-
parsed = parsePatch(patchText, "lenient");
|
|
16
|
-
}
|
|
17
|
-
catch {
|
|
18
|
-
// Unparseable patch → nothing to back up; the tool itself will reject it.
|
|
19
|
-
return [];
|
|
20
|
-
}
|
|
21
|
-
const out = [];
|
|
22
|
-
for (const hunk of parsed.hunks) {
|
|
23
|
-
if (hunk.kind === "update" || hunk.kind === "delete") {
|
|
24
|
-
out.push(resolvePath(cwd, hunk.path));
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
// De-dupe while preserving order (a patch shouldn't target one file twice,
|
|
28
|
-
// but be defensive — saveSnapshot is idempotent on identical content anyway).
|
|
29
|
-
return [...new Set(out)];
|
|
30
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ApplyPatch tool — atomic, multi-file V4A patch application.
|
|
3
|
-
*
|
|
4
|
-
* Adapted from openai/codex codex-rs/apply-patch (Apache-2.0). See LICENSE-codex.
|
|
5
|
-
*
|
|
6
|
-
* Compared to Codex's reference implementation:
|
|
7
|
-
* - We dry-run all hunks first; nothing is written until every hunk
|
|
8
|
-
* successfully resolves.
|
|
9
|
-
* - On commit we snapshot every target file, so a write failure rolls back
|
|
10
|
-
* to the pre-patch state instead of leaving partial changes.
|
|
11
|
-
*
|
|
12
|
-
* Compared to CodeShell's existing Edit:
|
|
13
|
-
* - Multi-file in one call (cuts LLM round-trips for large changes).
|
|
14
|
-
* - Supports create / update / delete / rename in one transaction.
|
|
15
|
-
* - Context-anchor matching tolerates whitespace and Unicode quirks.
|
|
16
|
-
*/
|
|
17
|
-
import type { ToolDefinition } from "../../../types.js";
|
|
18
|
-
import type { ToolContext } from "../../context.js";
|
|
19
|
-
export declare const applyPatchToolDef: ToolDefinition;
|
|
20
|
-
export declare function applyPatchTool(args: Record<string, unknown>, ctx?: ToolContext): Promise<string>;
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ApplyPatch tool — atomic, multi-file V4A patch application.
|
|
3
|
-
*
|
|
4
|
-
* Adapted from openai/codex codex-rs/apply-patch (Apache-2.0). See LICENSE-codex.
|
|
5
|
-
*
|
|
6
|
-
* Compared to Codex's reference implementation:
|
|
7
|
-
* - We dry-run all hunks first; nothing is written until every hunk
|
|
8
|
-
* successfully resolves.
|
|
9
|
-
* - On commit we snapshot every target file, so a write failure rolls back
|
|
10
|
-
* to the pre-patch state instead of leaving partial changes.
|
|
11
|
-
*
|
|
12
|
-
* Compared to CodeShell's existing Edit:
|
|
13
|
-
* - Multi-file in one call (cuts LLM round-trips for large changes).
|
|
14
|
-
* - Supports create / update / delete / rename in one transaction.
|
|
15
|
-
* - Context-anchor matching tolerates whitespace and Unicode quirks.
|
|
16
|
-
*/
|
|
17
|
-
import { fileCache } from "../file-cache.js";
|
|
18
|
-
import { applyPatch } from "./applier.js";
|
|
19
|
-
import { parsePatch } from "./parser.js";
|
|
20
|
-
import { resolve as resolvePath } from "node:path";
|
|
21
|
-
export const applyPatchToolDef = {
|
|
22
|
-
name: "ApplyPatch",
|
|
23
|
-
description: "Apply a V4A-format patch atomically across one or more files. " +
|
|
24
|
-
"Supports create, update, delete, and rename operations in a single call. " +
|
|
25
|
-
"If any hunk fails to apply, the entire patch is rejected and no files are modified. " +
|
|
26
|
-
"Patch envelope:\n" +
|
|
27
|
-
" *** Begin Patch\n" +
|
|
28
|
-
" *** Add File: <path>\n" +
|
|
29
|
-
" +<line>\n" +
|
|
30
|
-
" *** Update File: <path>\n" +
|
|
31
|
-
" *** Move to: <new path> # optional rename\n" +
|
|
32
|
-
" @@ <context> # optional anchor\n" +
|
|
33
|
-
" <unchanged line>\n" +
|
|
34
|
-
" -<removed line>\n" +
|
|
35
|
-
" +<added line>\n" +
|
|
36
|
-
" *** End of File # optional, anchors to file end\n" +
|
|
37
|
-
" *** Delete File: <path>\n" +
|
|
38
|
-
" *** End Patch\n" +
|
|
39
|
-
"Use relative paths; they resolve against the working directory.",
|
|
40
|
-
inputSchema: {
|
|
41
|
-
type: "object",
|
|
42
|
-
properties: {
|
|
43
|
-
patch: {
|
|
44
|
-
type: "string",
|
|
45
|
-
description: "Full patch text including '*** Begin Patch' and '*** End Patch' markers. " +
|
|
46
|
-
"All paths must be relative (preferred) or absolute. " +
|
|
47
|
-
"Each Update hunk must include enough context lines (' '-prefixed) " +
|
|
48
|
-
"to uniquely locate the change within the file.",
|
|
49
|
-
},
|
|
50
|
-
},
|
|
51
|
-
required: ["patch"],
|
|
52
|
-
},
|
|
53
|
-
};
|
|
54
|
-
export async function applyPatchTool(args, ctx) {
|
|
55
|
-
const patchText = args.patch;
|
|
56
|
-
if (typeof patchText !== "string" || patchText.length === 0) {
|
|
57
|
-
return "Error: patch is required and must be a non-empty string";
|
|
58
|
-
}
|
|
59
|
-
let parsed;
|
|
60
|
-
try {
|
|
61
|
-
parsed = parsePatch(patchText, "lenient");
|
|
62
|
-
}
|
|
63
|
-
catch (err) {
|
|
64
|
-
return `Error: ${err.message}`;
|
|
65
|
-
}
|
|
66
|
-
if (parsed.hunks.length === 0) {
|
|
67
|
-
return "Error: patch contains no hunks";
|
|
68
|
-
}
|
|
69
|
-
// A4: resolve relative patch paths against the Engine's cwd, not the
|
|
70
|
-
// host process cwd. See standard §S5.
|
|
71
|
-
const cwd = ctx?.cwd ?? process.cwd();
|
|
72
|
-
let result;
|
|
73
|
-
try {
|
|
74
|
-
result = await applyPatch(parsed.hunks, { cwd });
|
|
75
|
-
}
|
|
76
|
-
catch (err) {
|
|
77
|
-
return `Error applying patch: ${err.message}`;
|
|
78
|
-
}
|
|
79
|
-
// Invalidate file cache for every touched path. The cache is keyed by
|
|
80
|
-
// ABSOLUTE path (see file-cache.ts), and patch paths are relative to the
|
|
81
|
-
// Engine cwd — resolve them the same way the path-policy gate did above, or
|
|
82
|
-
// the stale entry survives and a later Read returns pre-patch content.
|
|
83
|
-
for (const hunk of parsed.hunks) {
|
|
84
|
-
fileCache.invalidate(resolvePath(cwd, hunk.path));
|
|
85
|
-
if (hunk.kind === "update" && hunk.movePath) {
|
|
86
|
-
fileCache.invalidate(resolvePath(cwd, hunk.movePath));
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
const parts = [];
|
|
90
|
-
if (result.added.length > 0)
|
|
91
|
-
parts.push(`added ${result.added.length}`);
|
|
92
|
-
if (result.modified.length > 0)
|
|
93
|
-
parts.push(`modified ${result.modified.length}`);
|
|
94
|
-
if (result.deleted.length > 0)
|
|
95
|
-
parts.push(`deleted ${result.deleted.length}`);
|
|
96
|
-
const summary = parts.join(", ");
|
|
97
|
-
const lines = [`Patch applied successfully — ${summary}`];
|
|
98
|
-
for (const p of result.added)
|
|
99
|
-
lines.push(` A ${p}`);
|
|
100
|
-
for (const p of result.modified)
|
|
101
|
-
lines.push(` M ${p}`);
|
|
102
|
-
for (const p of result.deleted)
|
|
103
|
-
lines.push(` D ${p}`);
|
|
104
|
-
return lines.join("\n");
|
|
105
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { Hunk } from "./types.js";
|
|
2
|
-
export declare const BEGIN_PATCH_MARKER = "*** Begin Patch";
|
|
3
|
-
export declare const END_PATCH_MARKER = "*** End Patch";
|
|
4
|
-
export declare const ADD_FILE_MARKER = "*** Add File: ";
|
|
5
|
-
export declare const DELETE_FILE_MARKER = "*** Delete File: ";
|
|
6
|
-
export declare const UPDATE_FILE_MARKER = "*** Update File: ";
|
|
7
|
-
export declare const MOVE_TO_MARKER = "*** Move to: ";
|
|
8
|
-
export declare const EOF_MARKER = "*** End of File";
|
|
9
|
-
export declare const CHANGE_CONTEXT_MARKER = "@@ ";
|
|
10
|
-
export declare const EMPTY_CHANGE_CONTEXT_MARKER = "@@";
|
|
11
|
-
export interface ParsedPatch {
|
|
12
|
-
hunks: Hunk[];
|
|
13
|
-
/** The patch body with any heredoc wrapper stripped. */
|
|
14
|
-
patch: string;
|
|
15
|
-
}
|
|
16
|
-
export type ParseMode = "strict" | "lenient";
|
|
17
|
-
export declare function parsePatch(text: string, mode?: ParseMode): ParsedPatch;
|