@cjhyy/code-shell-core 0.7.1 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/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
package/dist/git/utils.js
DELETED
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Git utility functions for the git workflow commands.
|
|
3
|
-
*
|
|
4
|
-
* Every call goes through execFileSync with an argv array — no command
|
|
5
|
-
* strings, no shell interpolation. Even arguments that look "safe" (already
|
|
6
|
-
* quoted, hard-coded) are passed as separate argv tokens so a future caller
|
|
7
|
-
* can't accidentally widen the attack surface by interpolating user input
|
|
8
|
-
* into the string form.
|
|
9
|
-
*/
|
|
10
|
-
import { execFileSync } from "node:child_process";
|
|
11
|
-
import { realpathSync } from "node:fs";
|
|
12
|
-
import { parseGitLog } from "./parse-log.js";
|
|
13
|
-
import { resolveExecutable, resolveGit } from "../utils/exec.js";
|
|
14
|
-
// Resolve git/gh through PATH×PATHEXT on Windows so a .cmd/.exe shim is found
|
|
15
|
-
// (bare execFile doesn't walk PATHEXT). No-op on POSIX. See utils/exec.ts.
|
|
16
|
-
const GH_BIN = resolveExecutable("gh");
|
|
17
|
-
/** Run git with an argv array and return its trimmed stdout. */
|
|
18
|
-
function git(cwd, args, timeoutMs = 10000) {
|
|
19
|
-
return execFileSync(resolveGit(), args, { cwd, encoding: "utf-8", timeout: timeoutMs }).trim();
|
|
20
|
-
}
|
|
21
|
-
/** Run gh with an argv array and return its trimmed stdout. */
|
|
22
|
-
function gh(cwd, args, timeoutMs = 10000) {
|
|
23
|
-
return execFileSync(GH_BIN, args, { cwd, encoding: "utf-8", timeout: timeoutMs }).trim();
|
|
24
|
-
}
|
|
25
|
-
export function isGitRepo(cwd) {
|
|
26
|
-
try {
|
|
27
|
-
git(cwd, ["rev-parse", "--is-inside-work-tree"], 5000);
|
|
28
|
-
return true;
|
|
29
|
-
}
|
|
30
|
-
catch {
|
|
31
|
-
return false;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Resolve a directory to its PROJECT ROOT: the enclosing git repository's
|
|
36
|
-
* top-level dir if `cwd` is inside a git repo, otherwise `cwd` unchanged.
|
|
37
|
-
*
|
|
38
|
-
* This is the project-boundary rule the desktop uses when adding/identifying a
|
|
39
|
-
* project: picking a SUBDIRECTORY of a git repo should belong to that one repo
|
|
40
|
-
* (its root), not spawn a separate project per subdir — mirrors how editors
|
|
41
|
-
* (and Claude Code) treat a repo as one workspace. A non-git folder is its own
|
|
42
|
-
* project (returned as-is). Never throws; on any git failure falls back to cwd.
|
|
43
|
-
* Returns the git-reported toplevel (already absolute, forward-slashed on win).
|
|
44
|
-
*/
|
|
45
|
-
export function resolveProjectRoot(cwd) {
|
|
46
|
-
let realCwd = cwd;
|
|
47
|
-
try {
|
|
48
|
-
realCwd = realpathSync(cwd);
|
|
49
|
-
}
|
|
50
|
-
catch {
|
|
51
|
-
// Non-existent paths are allowed to fall back unchanged below.
|
|
52
|
-
}
|
|
53
|
-
try {
|
|
54
|
-
const top = git(realCwd, ["rev-parse", "--show-toplevel"], 5000);
|
|
55
|
-
return top ? realpathSync(top) : realCwd;
|
|
56
|
-
}
|
|
57
|
-
catch {
|
|
58
|
-
return realCwd;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
export function getCurrentBranch(cwd) {
|
|
62
|
-
return git(cwd, ["branch", "--show-current"], 5000);
|
|
63
|
-
}
|
|
64
|
-
export function getGitStatus(cwd) {
|
|
65
|
-
const raw = git(cwd, ["status", "--porcelain"], 10000);
|
|
66
|
-
if (!raw)
|
|
67
|
-
return [];
|
|
68
|
-
return raw.split("\n").map((line) => ({
|
|
69
|
-
status: line.slice(0, 2).trim(),
|
|
70
|
-
path: line.slice(3),
|
|
71
|
-
}));
|
|
72
|
-
}
|
|
73
|
-
export function getGitDiff(cwd, opts) {
|
|
74
|
-
const args = ["diff", "--no-color"];
|
|
75
|
-
if (opts?.staged)
|
|
76
|
-
args.push("--staged");
|
|
77
|
-
// `--` terminates option parsing so a file path starting with `-` can't
|
|
78
|
-
// be re-interpreted as a flag.
|
|
79
|
-
if (opts?.file)
|
|
80
|
-
args.push("--", opts.file);
|
|
81
|
-
return git(cwd, args, 30000);
|
|
82
|
-
}
|
|
83
|
-
export function getGitDiffStat(cwd, opts) {
|
|
84
|
-
const args = ["diff", "--stat", "--no-color"];
|
|
85
|
-
if (opts?.staged)
|
|
86
|
-
args.push("--staged");
|
|
87
|
-
if (opts?.file)
|
|
88
|
-
args.push("--", opts.file);
|
|
89
|
-
return git(cwd, args, 10000);
|
|
90
|
-
}
|
|
91
|
-
export function getGitLog(cwd, n = 10) {
|
|
92
|
-
// `n` is numeric — coerce/validate to keep the argv clean even if a caller
|
|
93
|
-
// hands us a string.
|
|
94
|
-
const count = Number.isFinite(n) && n > 0 ? Math.floor(n) : 10;
|
|
95
|
-
const raw = git(cwd, ["log", "--oneline", "--format=%H|%s|%an|%ci", `-${count}`], 10000);
|
|
96
|
-
if (!raw)
|
|
97
|
-
return [];
|
|
98
|
-
return parseGitLog(raw);
|
|
99
|
-
}
|
|
100
|
-
export function getRemoteUrl(cwd) {
|
|
101
|
-
try {
|
|
102
|
-
return git(cwd, ["remote", "get-url", "origin"], 5000);
|
|
103
|
-
}
|
|
104
|
-
catch {
|
|
105
|
-
return undefined;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
export function gitAdd(cwd, files = ["."]) {
|
|
109
|
-
// `--` ensures a path starting with `-` cannot be parsed as a flag.
|
|
110
|
-
// Each file is its own argv token, so spaces / quotes / non-ASCII pass
|
|
111
|
-
// through verbatim with no shell parsing.
|
|
112
|
-
execFileSync(resolveGit(), ["add", "--", ...files], { cwd, timeout: 10000 });
|
|
113
|
-
}
|
|
114
|
-
export function gitCommit(cwd, message) {
|
|
115
|
-
// Pre-fix this used `JSON.stringify(message)` which only happened to be
|
|
116
|
-
// safe because JSON.stringify covers most shell metacharacters — but it's
|
|
117
|
-
// not real escaping. The argv form is.
|
|
118
|
-
return execFileSync(resolveGit(), ["commit", "-m", message], {
|
|
119
|
-
cwd,
|
|
120
|
-
encoding: "utf-8",
|
|
121
|
-
timeout: 30000,
|
|
122
|
-
}).trim();
|
|
123
|
-
}
|
|
124
|
-
export function gitListBranches(cwd) {
|
|
125
|
-
const raw = git(cwd, ["branch", "--no-color"], 5000);
|
|
126
|
-
if (!raw)
|
|
127
|
-
return [];
|
|
128
|
-
return raw.split("\n").map((line) => ({
|
|
129
|
-
current: line.startsWith("*"),
|
|
130
|
-
name: line.replace(/^\*?\s+/, "").trim(),
|
|
131
|
-
}));
|
|
132
|
-
}
|
|
133
|
-
export function gitCheckout(cwd, branch, create = false) {
|
|
134
|
-
// argv form defeats shell injection. We additionally reject branch names
|
|
135
|
-
// that start with `-` so a value like `--orphan` can't slip through git's
|
|
136
|
-
// own option parser (the trailing `--` trick doesn't help on checkout:
|
|
137
|
-
// git interprets it as the option's value, not as an option terminator).
|
|
138
|
-
if (typeof branch !== "string" || branch.length === 0) {
|
|
139
|
-
throw new Error("branch must be a non-empty string");
|
|
140
|
-
}
|
|
141
|
-
if (branch.startsWith("-")) {
|
|
142
|
-
throw new Error(`refusing branch name that starts with '-': ${branch}`);
|
|
143
|
-
}
|
|
144
|
-
const args = create ? ["checkout", "-b", branch] : ["checkout", branch];
|
|
145
|
-
execFileSync(resolveGit(), args, { cwd, timeout: 10000 });
|
|
146
|
-
}
|
|
147
|
-
export function ghAvailable() {
|
|
148
|
-
try {
|
|
149
|
-
execFileSync(GH_BIN, ["--version"], { encoding: "utf-8", timeout: 5000 });
|
|
150
|
-
return true;
|
|
151
|
-
}
|
|
152
|
-
catch {
|
|
153
|
-
return false;
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
export function ghPrComments(cwd, prUrl) {
|
|
157
|
-
// Pre-fix `gh pr view ${prUrl}` interpolated the URL directly. argv form
|
|
158
|
-
// means even a value like "$(rm -rf ~)" is sent to gh as a literal
|
|
159
|
-
// positional argument (which gh will then reject as a bad PR URL).
|
|
160
|
-
return gh(cwd, ["pr", "view", prUrl, "--comments", "--json", "comments", "-q", ".comments[].body"], 30000);
|
|
161
|
-
}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import type { SandboxBackend } from "../../tool-system/sandbox/index.js";
|
|
2
|
-
export interface WorktreeSession {
|
|
3
|
-
originalCwd: string;
|
|
4
|
-
worktreePath: string;
|
|
5
|
-
worktreeName: string;
|
|
6
|
-
worktreeBranch: string;
|
|
7
|
-
originalBranch?: string;
|
|
8
|
-
sessionId: string;
|
|
9
|
-
createdAt: number;
|
|
10
|
-
}
|
|
11
|
-
/** Per-platform setup/cleanup scripts (a project's localEnvironment). */
|
|
12
|
-
export interface PlatformScripts {
|
|
13
|
-
default?: string;
|
|
14
|
-
macos?: string;
|
|
15
|
-
linux?: string;
|
|
16
|
-
windows?: string;
|
|
17
|
-
}
|
|
18
|
-
export interface CreateWorktreeOptions {
|
|
19
|
-
prefix?: string;
|
|
20
|
-
signal?: AbortSignal;
|
|
21
|
-
}
|
|
22
|
-
/** Best-effort rollback for an aborted `git worktree add`. */
|
|
23
|
-
export declare function cleanupAbortedWorktree(gitRoot: string, worktreePath: string, branchName: string): Promise<void>;
|
|
24
|
-
/**
|
|
25
|
-
* Pick the setup/cleanup script for the running platform, falling back to
|
|
26
|
-
* `default`. Empty/whitespace-only scripts are treated as absent so a project
|
|
27
|
-
* can leave a platform key blank without spawning an empty shell. `platform`
|
|
28
|
-
* defaults to `process.platform` so callers usually omit it; tests pass a
|
|
29
|
-
* fixed value.
|
|
30
|
-
*/
|
|
31
|
-
export declare function selectPlatformScript(scripts: PlatformScripts | undefined, platform?: NodeJS.Platform): string | undefined;
|
|
32
|
-
/**
|
|
33
|
-
* Create an isolated git worktree for an agent session.
|
|
34
|
-
*/
|
|
35
|
-
export declare function createWorktree(cwd: string, slug: string, sessionId: string, opts?: CreateWorktreeOptions): Promise<WorktreeSession>;
|
|
36
|
-
export interface WorktreeSetupResult {
|
|
37
|
-
/** True if no setup script was configured for this platform (nothing ran). */
|
|
38
|
-
skipped: boolean;
|
|
39
|
-
/** True if a script ran and exited 0. */
|
|
40
|
-
ok: boolean;
|
|
41
|
-
/** Combined stdout/stderr, for surfacing to the user on failure. */
|
|
42
|
-
output: string;
|
|
43
|
-
/** Exit code when a script ran; undefined when skipped. */
|
|
44
|
-
exitCode?: number | null;
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Run a project's `localEnvironment.setupScripts` once, in the freshly-created
|
|
48
|
-
* worktree's root, right after `git worktree add`.
|
|
49
|
-
*/
|
|
50
|
-
export declare function runWorktreeSetup(worktreePath: string, script: string | undefined, opts?: {
|
|
51
|
-
sandbox?: SandboxBackend;
|
|
52
|
-
shellEnv?: Record<string, string>;
|
|
53
|
-
timeoutMs?: number;
|
|
54
|
-
signal?: AbortSignal;
|
|
55
|
-
}): Promise<WorktreeSetupResult>;
|
|
56
|
-
export interface RemoveWorktreeResult {
|
|
57
|
-
/** True once `git worktree remove` completed and the directory is gone. */
|
|
58
|
-
dirRemoved: boolean;
|
|
59
|
-
/** The branch targeted for deletion when removeBranch=true. */
|
|
60
|
-
branch?: string;
|
|
61
|
-
/** True when removeBranch=true and branch deletion completed. */
|
|
62
|
-
branchDeleted?: boolean;
|
|
63
|
-
/** Non-empty when the worktree directory is gone but branch deletion failed. */
|
|
64
|
-
branchError?: string;
|
|
65
|
-
}
|
|
66
|
-
export interface RemoveWorktreeOptions {
|
|
67
|
-
prefix?: string;
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Remove a worktree and optionally its branch.
|
|
71
|
-
*/
|
|
72
|
-
export declare function removeWorktree(worktreePath: string, removeBranch?: boolean, opts?: RemoveWorktreeOptions): RemoveWorktreeResult;
|
|
@@ -1,235 +0,0 @@
|
|
|
1
|
-
import { existsSync, lstatSync, mkdirSync, readdirSync, symlinkSync } from "node:fs";
|
|
2
|
-
import { rm } from "node:fs/promises";
|
|
3
|
-
import { dirname, join, resolve } from "node:path";
|
|
4
|
-
import { safeSpawnShell } from "../../runtime/safe-spawn.js";
|
|
5
|
-
import { buildSandboxEnv, defaultShellBinary, mergeShellEnv } from "../../runtime/spawn-common.js";
|
|
6
|
-
import { execGit, execGitSync, gitErrorMessage } from "./git-exec.js";
|
|
7
|
-
import { assertBranchNotCheckedOut, currentBranch, findGitRoot } from "./query.js";
|
|
8
|
-
import { applyPrefix, isManagedWorktreeBranch, validateWorktreeSlug } from "./slug.js";
|
|
9
|
-
function throwIfAborted(signal) {
|
|
10
|
-
signal?.throwIfAborted();
|
|
11
|
-
}
|
|
12
|
-
/** Best-effort rollback for an aborted `git worktree add`. */
|
|
13
|
-
export async function cleanupAbortedWorktree(gitRoot, worktreePath, branchName) {
|
|
14
|
-
try {
|
|
15
|
-
await execGit(gitRoot, ["worktree", "remove", worktreePath, "--force"], 30_000);
|
|
16
|
-
}
|
|
17
|
-
catch {
|
|
18
|
-
await rm(worktreePath, { recursive: true, force: true }).catch(() => { });
|
|
19
|
-
await execGit(gitRoot, ["worktree", "prune"], 10_000).catch(() => { });
|
|
20
|
-
}
|
|
21
|
-
await execGit(gitRoot, ["branch", "-D", branchName], 10_000).catch(() => { });
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Pick the setup/cleanup script for the running platform, falling back to
|
|
25
|
-
* `default`. Empty/whitespace-only scripts are treated as absent so a project
|
|
26
|
-
* can leave a platform key blank without spawning an empty shell. `platform`
|
|
27
|
-
* defaults to `process.platform` so callers usually omit it; tests pass a
|
|
28
|
-
* fixed value.
|
|
29
|
-
*/
|
|
30
|
-
export function selectPlatformScript(scripts, platform = process.platform) {
|
|
31
|
-
if (!scripts)
|
|
32
|
-
return undefined;
|
|
33
|
-
const key = platform === "darwin" ? "macos" : platform === "win32" ? "windows" : "linux";
|
|
34
|
-
// A blank platform key shouldn't shadow a real `default` — fall through.
|
|
35
|
-
const platformScript = scripts[key]?.trim() ? scripts[key] : undefined;
|
|
36
|
-
const candidate = platformScript ?? scripts.default;
|
|
37
|
-
const trimmed = candidate?.trim();
|
|
38
|
-
return trimmed ? candidate : undefined;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Create an isolated git worktree for an agent session.
|
|
42
|
-
*/
|
|
43
|
-
export async function createWorktree(cwd, slug, sessionId, opts = {}) {
|
|
44
|
-
validateWorktreeSlug(slug);
|
|
45
|
-
throwIfAborted(opts.signal);
|
|
46
|
-
const gitRoot = await findGitRoot(cwd);
|
|
47
|
-
throwIfAborted(opts.signal);
|
|
48
|
-
const branchName = applyPrefix(opts.prefix, slug, sessionId);
|
|
49
|
-
const worktreePath = resolve(gitRoot, "..", `.worktrees/${slug}-${sessionId.slice(0, 8)}`);
|
|
50
|
-
await assertBranchNotCheckedOut(gitRoot, branchName);
|
|
51
|
-
throwIfAborted(opts.signal);
|
|
52
|
-
const originalBranch = await currentBranch(gitRoot);
|
|
53
|
-
throwIfAborted(opts.signal);
|
|
54
|
-
// The argv form keeps branchName/worktreePath as literal positional
|
|
55
|
-
// arguments even if a future caller bypasses validateWorktreeSlug.
|
|
56
|
-
try {
|
|
57
|
-
await execGit(gitRoot, ["worktree", "add", "-b", branchName, worktreePath], 30_000, opts.signal);
|
|
58
|
-
throwIfAborted(opts.signal);
|
|
59
|
-
// Symlink large directories to avoid disk bloat.
|
|
60
|
-
symlinkLargeDirectories(gitRoot, worktreePath);
|
|
61
|
-
throwIfAborted(opts.signal);
|
|
62
|
-
}
|
|
63
|
-
catch (error) {
|
|
64
|
-
if (opts.signal?.aborted) {
|
|
65
|
-
await cleanupAbortedWorktree(gitRoot, worktreePath, branchName);
|
|
66
|
-
}
|
|
67
|
-
throw error;
|
|
68
|
-
}
|
|
69
|
-
return {
|
|
70
|
-
originalCwd: cwd,
|
|
71
|
-
worktreePath,
|
|
72
|
-
worktreeName: slug,
|
|
73
|
-
worktreeBranch: branchName,
|
|
74
|
-
originalBranch,
|
|
75
|
-
sessionId,
|
|
76
|
-
createdAt: Date.now(),
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Run a project's `localEnvironment.setupScripts` once, in the freshly-created
|
|
81
|
-
* worktree's root, right after `git worktree add`.
|
|
82
|
-
*/
|
|
83
|
-
export async function runWorktreeSetup(worktreePath, script, opts = {}) {
|
|
84
|
-
const trimmed = script?.trim();
|
|
85
|
-
if (!trimmed)
|
|
86
|
-
return { skipped: true, ok: true, output: "" };
|
|
87
|
-
const shell = defaultShellBinary();
|
|
88
|
-
const backend = opts.sandbox;
|
|
89
|
-
const baseEnv = backend && backend.name !== "off" ? buildSandboxEnv() : { ...process.env };
|
|
90
|
-
const env = mergeShellEnv(baseEnv, opts.shellEnv);
|
|
91
|
-
const result = await safeSpawnShell(trimmed, {
|
|
92
|
-
cwd: worktreePath,
|
|
93
|
-
env,
|
|
94
|
-
timeoutMs: opts.timeoutMs ?? 120_000,
|
|
95
|
-
maxOutputBytes: 1024 * 1024,
|
|
96
|
-
sandbox: backend,
|
|
97
|
-
shell,
|
|
98
|
-
signal: opts.signal,
|
|
99
|
-
});
|
|
100
|
-
const parts = [];
|
|
101
|
-
if (result.stdout)
|
|
102
|
-
parts.push(result.stdout);
|
|
103
|
-
if (result.stderr)
|
|
104
|
-
parts.push(result.stderr);
|
|
105
|
-
const output = parts.join("\n").trim();
|
|
106
|
-
if (result.aborted)
|
|
107
|
-
return { skipped: false, ok: false, output: output || "setup aborted" };
|
|
108
|
-
if (result.timedOut)
|
|
109
|
-
return { skipped: false, ok: false, output: output || "setup timed out" };
|
|
110
|
-
if (result.spawnFailed) {
|
|
111
|
-
return { skipped: false, ok: false, output: result.error ?? "failed to spawn setup script" };
|
|
112
|
-
}
|
|
113
|
-
return { skipped: false, ok: result.exitCode === 0, output, exitCode: result.exitCode };
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Remove a worktree and optionally its branch.
|
|
117
|
-
*/
|
|
118
|
-
export function removeWorktree(worktreePath, removeBranch = false, opts = {}) {
|
|
119
|
-
// The MAIN repo root, not the worktree's own toplevel. `git rev-parse
|
|
120
|
-
// --show-toplevel` from inside a worktree returns the worktree path, which
|
|
121
|
-
// is about to be deleted; the branch-delete must run from the main repo,
|
|
122
|
-
// which outlives the worktree. Derive it from the common git dir.
|
|
123
|
-
let mainRoot;
|
|
124
|
-
try {
|
|
125
|
-
const commonDir = execGitSync(worktreePath, ["rev-parse", "--path-format=absolute", "--git-common-dir"], 5000).trim();
|
|
126
|
-
mainRoot = dirname(commonDir);
|
|
127
|
-
}
|
|
128
|
-
catch (err) {
|
|
129
|
-
throw new Error(`failed to inspect worktree ${worktreePath}: ${gitErrorMessage(err)}`, {
|
|
130
|
-
cause: err,
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
|
-
// Capture the worktree's branch BEFORE removing the worktree — afterwards
|
|
134
|
-
// the directory is gone and `git branch --show-current` in it would fail.
|
|
135
|
-
let branch = "";
|
|
136
|
-
if (removeBranch) {
|
|
137
|
-
try {
|
|
138
|
-
branch = execGitSync(worktreePath, ["branch", "--show-current"], 5000).trim();
|
|
139
|
-
}
|
|
140
|
-
catch (err) {
|
|
141
|
-
throw new Error(`failed to determine branch for worktree ${worktreePath}: ${gitErrorMessage(err)}`, { cause: err });
|
|
142
|
-
}
|
|
143
|
-
if (!branch) {
|
|
144
|
-
throw new Error(`failed to determine branch for worktree ${worktreePath}`);
|
|
145
|
-
}
|
|
146
|
-
if (!isManagedWorktreeBranch(branch, opts.prefix)) {
|
|
147
|
-
throw new Error(`refusing to delete non-CodeShell worktree branch ${branch}`);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
try {
|
|
151
|
-
execGitSync(mainRoot, ["worktree", "remove", worktreePath, "--force"], 30000);
|
|
152
|
-
}
|
|
153
|
-
catch (err) {
|
|
154
|
-
throw new Error(`failed to remove worktree ${worktreePath}: ${gitErrorMessage(err)}`, {
|
|
155
|
-
cause: err,
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
if (removeBranch) {
|
|
159
|
-
try {
|
|
160
|
-
execGitSync(mainRoot, ["branch", "-D", branch], 10000);
|
|
161
|
-
}
|
|
162
|
-
catch (err) {
|
|
163
|
-
return {
|
|
164
|
-
dirRemoved: true,
|
|
165
|
-
branch,
|
|
166
|
-
branchDeleted: false,
|
|
167
|
-
branchError: gitErrorMessage(err),
|
|
168
|
-
};
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
return removeBranch ? { dirRemoved: true, branch, branchDeleted: true } : { dirRemoved: true };
|
|
172
|
-
}
|
|
173
|
-
/**
|
|
174
|
-
* Symlink large directories (node_modules, .venv, etc.) from main repo to
|
|
175
|
-
* worktree. Also links each monorepo workspace package's private
|
|
176
|
-
* `node_modules` (e.g. `packages/desktop/node_modules`, where bun keeps
|
|
177
|
-
* un-hoisted deps like electron) so a fresh worktree can build/run the whole
|
|
178
|
-
* workspace, not just the packages whose deps happen to be hoisted to the root.
|
|
179
|
-
*/
|
|
180
|
-
function symlinkLargeDirectories(sourceRoot, worktreePath) {
|
|
181
|
-
const largeDirs = ["node_modules", ".venv", "vendor", ".pnpm-store"];
|
|
182
|
-
for (const dir of largeDirs) {
|
|
183
|
-
linkDir(join(sourceRoot, dir), join(worktreePath, dir));
|
|
184
|
-
}
|
|
185
|
-
// Monorepo workspace packages keep private node_modules that are NOT hoisted
|
|
186
|
-
// to the root. Link `<pkg>/node_modules` for each package under `packages/`.
|
|
187
|
-
const packagesDir = join(sourceRoot, "packages");
|
|
188
|
-
if (!dirExists(packagesDir))
|
|
189
|
-
return;
|
|
190
|
-
let pkgNames;
|
|
191
|
-
try {
|
|
192
|
-
pkgNames = readdirSync(packagesDir);
|
|
193
|
-
}
|
|
194
|
-
catch {
|
|
195
|
-
return;
|
|
196
|
-
}
|
|
197
|
-
for (const pkg of pkgNames) {
|
|
198
|
-
const source = join(packagesDir, pkg, "node_modules");
|
|
199
|
-
if (!dirExists(source))
|
|
200
|
-
continue;
|
|
201
|
-
const targetPkgDir = join(worktreePath, "packages", pkg);
|
|
202
|
-
// The worktree only has package dirs that exist in this branch's tree; a
|
|
203
|
-
// package present in the main repo but not checked out here is skipped.
|
|
204
|
-
if (!dirExists(targetPkgDir)) {
|
|
205
|
-
try {
|
|
206
|
-
mkdirSync(targetPkgDir, { recursive: true });
|
|
207
|
-
}
|
|
208
|
-
catch {
|
|
209
|
-
continue;
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
linkDir(source, join(targetPkgDir, "node_modules"));
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
function dirExists(path) {
|
|
216
|
-
try {
|
|
217
|
-
return lstatSync(path).isDirectory();
|
|
218
|
-
}
|
|
219
|
-
catch {
|
|
220
|
-
return false;
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
function linkDir(source, target) {
|
|
224
|
-
// Windows directory symlinks need admin/Developer Mode and throw EPERM for a
|
|
225
|
-
// normal user; NTFS junctions don't and behave the same for our purpose.
|
|
226
|
-
const linkType = process.platform === "win32" ? "junction" : "dir";
|
|
227
|
-
if (dirExists(source) && !existsSync(target)) {
|
|
228
|
-
try {
|
|
229
|
-
symlinkSync(source, target, linkType);
|
|
230
|
-
}
|
|
231
|
-
catch {
|
|
232
|
-
// Symlink/junction might fail on some systems — non-fatal.
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export interface WorktreeDiffSummary {
|
|
2
|
-
/** Best-effort base used for the branch comparison, usually main/master. */
|
|
3
|
-
baseRef?: string;
|
|
4
|
-
/** Unique files changed either by commits ahead of base or by uncommitted changes. */
|
|
5
|
-
changedFiles: number;
|
|
6
|
-
/** Commits reachable from HEAD but not from baseRef. */
|
|
7
|
-
aheadCommits: number;
|
|
8
|
-
/** True when `git status --porcelain` reports local changes. */
|
|
9
|
-
hasUncommittedChanges: boolean;
|
|
10
|
-
}
|
|
11
|
-
export declare function getWorktreeDiff(worktreePath: string, baseRef?: string): Promise<WorktreeDiffSummary>;
|
|
12
|
-
export declare function worktreeHasUncommittedChanges(worktreePath: string): Promise<boolean>;
|
|
13
|
-
export declare function worktreeHasUncommittedOrAheadChanges(worktreePath: string, baseRef?: string): Promise<boolean>;
|
|
14
|
-
export declare function findComparisonBaseRef(cwd: string): Promise<string | undefined>;
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import { gitOutput } from "./git-exec.js";
|
|
2
|
-
export async function getWorktreeDiff(worktreePath, baseRef) {
|
|
3
|
-
const comparisonBase = baseRef && (await commitRefExists(worktreePath, baseRef))
|
|
4
|
-
? baseRef
|
|
5
|
-
: await findComparisonBaseRef(worktreePath);
|
|
6
|
-
return diffSummary(worktreePath, comparisonBase);
|
|
7
|
-
}
|
|
8
|
-
export async function worktreeHasUncommittedChanges(worktreePath) {
|
|
9
|
-
const out = await gitOutput(worktreePath, ["status", "--porcelain"], 10000);
|
|
10
|
-
return (out?.trim().length ?? 0) > 0;
|
|
11
|
-
}
|
|
12
|
-
export async function worktreeHasUncommittedOrAheadChanges(worktreePath, baseRef) {
|
|
13
|
-
if (await worktreeHasUncommittedChanges(worktreePath))
|
|
14
|
-
return true;
|
|
15
|
-
const comparisonBase = baseRef && (await commitRefExists(worktreePath, baseRef))
|
|
16
|
-
? baseRef
|
|
17
|
-
: await findComparisonBaseRef(worktreePath);
|
|
18
|
-
return comparisonBase ? (await aheadCommitCount(worktreePath, comparisonBase)) > 0 : false;
|
|
19
|
-
}
|
|
20
|
-
export async function findComparisonBaseRef(cwd) {
|
|
21
|
-
for (const ref of ["main", "master", "origin/main", "origin/master"]) {
|
|
22
|
-
if (await commitRefExists(cwd, ref))
|
|
23
|
-
return ref;
|
|
24
|
-
}
|
|
25
|
-
return undefined;
|
|
26
|
-
}
|
|
27
|
-
async function commitRefExists(cwd, ref) {
|
|
28
|
-
const out = await gitOutput(cwd, ["rev-parse", "--verify", "--quiet", `${ref}^{commit}`], 5000);
|
|
29
|
-
return out !== undefined;
|
|
30
|
-
}
|
|
31
|
-
async function diffSummary(cwd, baseRef) {
|
|
32
|
-
const [dirtyFiles, committedFiles, aheadCommits] = await Promise.all([
|
|
33
|
-
statusFileSet(cwd),
|
|
34
|
-
baseRef ? changedFilesSinceBase(cwd, baseRef) : Promise.resolve(new Set()),
|
|
35
|
-
baseRef ? aheadCommitCount(cwd, baseRef) : Promise.resolve(0),
|
|
36
|
-
]);
|
|
37
|
-
const changedFiles = new Set([...dirtyFiles, ...committedFiles]);
|
|
38
|
-
return {
|
|
39
|
-
...(baseRef ? { baseRef } : {}),
|
|
40
|
-
changedFiles: changedFiles.size,
|
|
41
|
-
aheadCommits,
|
|
42
|
-
hasUncommittedChanges: dirtyFiles.size > 0,
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
async function changedFilesSinceBase(cwd, baseRef) {
|
|
46
|
-
const out = await gitOutput(cwd, ["diff", "--name-only", `${baseRef}...HEAD`]);
|
|
47
|
-
const raw = out ?? (await gitOutput(cwd, ["diff", "--name-only", `${baseRef}..HEAD`])) ?? "";
|
|
48
|
-
return new Set(raw
|
|
49
|
-
.split("\n")
|
|
50
|
-
.map((line) => line.trim())
|
|
51
|
-
.filter(Boolean));
|
|
52
|
-
}
|
|
53
|
-
async function aheadCommitCount(cwd, baseRef) {
|
|
54
|
-
const out = await gitOutput(cwd, ["rev-list", "--count", `${baseRef}..HEAD`]);
|
|
55
|
-
const n = Number.parseInt(out?.trim() ?? "0", 10);
|
|
56
|
-
return Number.isFinite(n) ? n : 0;
|
|
57
|
-
}
|
|
58
|
-
async function statusFileSet(cwd) {
|
|
59
|
-
const raw = (await gitOutput(cwd, ["status", "--porcelain=v1"])) ?? "";
|
|
60
|
-
const files = new Set();
|
|
61
|
-
for (const line of raw.split("\n")) {
|
|
62
|
-
if (!line.trim())
|
|
63
|
-
continue;
|
|
64
|
-
const path = line.slice(3).trim();
|
|
65
|
-
if (!path)
|
|
66
|
-
continue;
|
|
67
|
-
const renameTarget = path.includes(" -> ") ? path.split(" -> ").at(-1) : path;
|
|
68
|
-
if (renameTarget)
|
|
69
|
-
files.add(unquoteGitPath(renameTarget));
|
|
70
|
-
}
|
|
71
|
-
return files;
|
|
72
|
-
}
|
|
73
|
-
function unquoteGitPath(path) {
|
|
74
|
-
if (!path.startsWith('"') || !path.endsWith('"'))
|
|
75
|
-
return path;
|
|
76
|
-
try {
|
|
77
|
-
return JSON.parse(path);
|
|
78
|
-
}
|
|
79
|
-
catch {
|
|
80
|
-
return path.slice(1, -1);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export declare const GIT_BIN: string;
|
|
2
|
-
export declare function execGit(cwd: string, args: string[], timeout?: number, signal?: AbortSignal): Promise<string>;
|
|
3
|
-
export declare function execGitSync(cwd: string, args: string[], timeout?: number): string;
|
|
4
|
-
export declare function gitOutput(cwd: string, args: string[], timeout?: number, signal?: AbortSignal): Promise<string | undefined>;
|
|
5
|
-
export declare function gitOutputSync(cwd: string, args: string[], timeout?: number): string | undefined;
|
|
6
|
-
export declare function gitErrorMessage(err: unknown): string;
|
|
7
|
-
export declare function normalizeBranchName(branch: string): string;
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import { execFile, execFileSync } from "node:child_process";
|
|
2
|
-
import { killChildTree } from "../../runtime/spawn-common.js";
|
|
3
|
-
import { resolveExecutable } from "../../utils/exec.js";
|
|
4
|
-
// git resolved via PATH×PATHEXT on Windows (.cmd/.exe shim); no-op on POSIX.
|
|
5
|
-
export const GIT_BIN = resolveExecutable("git");
|
|
6
|
-
export async function execGit(cwd, args, timeout = 10000, signal) {
|
|
7
|
-
return new Promise((resolve, reject) => {
|
|
8
|
-
if (signal?.aborted) {
|
|
9
|
-
reject(signal.reason);
|
|
10
|
-
return;
|
|
11
|
-
}
|
|
12
|
-
let settled = false;
|
|
13
|
-
const child = execFile(GIT_BIN, args, { cwd, encoding: "utf-8" }, (error, stdout, stderr) => {
|
|
14
|
-
if (settled)
|
|
15
|
-
return;
|
|
16
|
-
settled = true;
|
|
17
|
-
cleanup();
|
|
18
|
-
if (error) {
|
|
19
|
-
Object.assign(error, { stdout, stderr });
|
|
20
|
-
reject(error);
|
|
21
|
-
}
|
|
22
|
-
else {
|
|
23
|
-
resolve(stdout);
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
const terminate = (error) => {
|
|
27
|
-
if (settled)
|
|
28
|
-
return;
|
|
29
|
-
settled = true;
|
|
30
|
-
cleanup();
|
|
31
|
-
killChildTree(child, 1000);
|
|
32
|
-
reject(error);
|
|
33
|
-
};
|
|
34
|
-
const onAbort = () => terminate(signal?.reason ?? Object.assign(new Error("Git command aborted"), { name: "AbortError" }));
|
|
35
|
-
const timer = setTimeout(() => {
|
|
36
|
-
terminate(Object.assign(new Error(`Git command timed out after ${timeout}ms`), {
|
|
37
|
-
code: "ETIMEDOUT",
|
|
38
|
-
}));
|
|
39
|
-
}, timeout);
|
|
40
|
-
const cleanup = () => {
|
|
41
|
-
clearTimeout(timer);
|
|
42
|
-
signal?.removeEventListener("abort", onAbort);
|
|
43
|
-
};
|
|
44
|
-
signal?.addEventListener("abort", onAbort, { once: true });
|
|
45
|
-
if (signal?.aborted)
|
|
46
|
-
onAbort();
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
export function execGitSync(cwd, args, timeout = 10000) {
|
|
50
|
-
return execFileSync(GIT_BIN, args, {
|
|
51
|
-
cwd,
|
|
52
|
-
encoding: "utf-8",
|
|
53
|
-
timeout,
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
export async function gitOutput(cwd, args, timeout = 10000, signal) {
|
|
57
|
-
try {
|
|
58
|
-
return await execGit(cwd, args, timeout, signal);
|
|
59
|
-
}
|
|
60
|
-
catch (error) {
|
|
61
|
-
if (signal?.aborted)
|
|
62
|
-
throw error;
|
|
63
|
-
return undefined;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
export function gitOutputSync(cwd, args, timeout = 10000) {
|
|
67
|
-
try {
|
|
68
|
-
return execGitSync(cwd, args, timeout);
|
|
69
|
-
}
|
|
70
|
-
catch {
|
|
71
|
-
return undefined;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
export function gitErrorMessage(err) {
|
|
75
|
-
const stderr = err.stderr;
|
|
76
|
-
if (Buffer.isBuffer(stderr)) {
|
|
77
|
-
const msg = stderr.toString("utf-8").trim();
|
|
78
|
-
if (msg)
|
|
79
|
-
return msg;
|
|
80
|
-
}
|
|
81
|
-
if (typeof stderr === "string" && stderr.trim())
|
|
82
|
-
return stderr.trim();
|
|
83
|
-
return err instanceof Error ? err.message : String(err);
|
|
84
|
-
}
|
|
85
|
-
export function normalizeBranchName(branch) {
|
|
86
|
-
return branch.replace(/^refs\/heads\//, "");
|
|
87
|
-
}
|