@cjhyy/code-shell-core 0.5.0-rc.1 → 0.6.0-rc.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 +13 -10
- package/dist/agent/agent-definition-registry.d.ts +21 -3
- package/dist/agent/agent-definition-registry.js +49 -18
- package/dist/agent/agent-definition.d.ts +32 -0
- package/dist/agent/agent-definition.js +49 -4
- package/dist/arena/arena.js +11 -12
- package/dist/arena/context/context-tools.js +47 -6
- package/dist/arena/context/within-root.d.ts +7 -0
- package/dist/arena/context/within-root.js +15 -0
- package/dist/arena/iterate/phases/argue.js +8 -2
- package/dist/arena/iterate/phases/revise.js +1 -1
- package/dist/arena/iterate/phases/tournament.js +3 -3
- package/dist/arena/ledger.js +9 -1
- package/dist/arena/phases/adjudication.js +1 -4
- package/dist/arena/phases/build-consensus.js +1 -4
- package/dist/arena/phases/cross-review.js +2 -8
- package/dist/arena/phases/debate-rounds.js +1 -4
- package/dist/arena/phases/participant-research.js +1 -4
- package/dist/arena/phases/planning-detail-expansion.js +8 -10
- package/dist/arena/planner.js +0 -1
- package/dist/arena/providers/docs.d.ts +1 -0
- package/dist/arena/providers/docs.js +5 -2
- package/dist/arena/providers/repo.d.ts +1 -0
- package/dist/arena/providers/repo.js +5 -2
- package/dist/arena/strategies/utils.d.ts +1 -4
- package/dist/arena/strategies/utils.js +7 -51
- package/dist/arena/transitions.d.ts +7 -2
- package/dist/arena/transitions.js +9 -4
- package/dist/arena/types.d.ts +8 -2
- package/dist/automation/cron-expr.d.ts +41 -0
- package/dist/automation/cron-expr.js +169 -0
- package/dist/automation/index.d.ts +41 -0
- package/dist/automation/index.js +39 -0
- package/dist/automation/runner.d.ts +84 -0
- package/dist/automation/runner.js +92 -0
- package/dist/automation/scheduler.d.ts +194 -0
- package/dist/automation/scheduler.js +623 -0
- package/dist/automation/store.d.ts +39 -0
- package/dist/automation/store.js +122 -0
- package/dist/automation/write-policy.d.ts +34 -0
- package/dist/automation/write-policy.js +113 -0
- package/dist/automation/write-run.d.ts +51 -0
- package/dist/automation/write-run.js +38 -0
- package/dist/capability-control/disabled-lists.d.ts +25 -0
- package/dist/capability-control/disabled-lists.js +57 -0
- package/dist/capability-control/index.d.ts +5 -0
- package/dist/capability-control/index.js +3 -0
- package/dist/capability-control/overlay.d.ts +64 -0
- package/dist/capability-control/overlay.js +116 -0
- package/dist/capability-control/project.d.ts +65 -0
- package/dist/capability-control/project.js +147 -0
- package/dist/capability-control/service.d.ts +70 -0
- package/dist/capability-control/service.js +147 -0
- package/dist/capability-control/types.d.ts +62 -0
- package/dist/capability-control/types.js +17 -0
- package/dist/cc-orchestrator/agent-adapter.d.ts +50 -0
- package/dist/cc-orchestrator/agent-adapter.js +133 -0
- package/dist/cc-orchestrator/cc-capability.d.ts +19 -0
- package/dist/cc-orchestrator/cc-capability.js +53 -0
- package/dist/cc-orchestrator/codex-session-discovery.d.ts +24 -0
- package/dist/cc-orchestrator/codex-session-discovery.js +191 -0
- package/dist/cc-orchestrator/codex-session-history.d.ts +25 -0
- package/dist/cc-orchestrator/codex-session-history.js +187 -0
- package/dist/cc-orchestrator/external-agent-changes.d.ts +19 -0
- package/dist/cc-orchestrator/external-agent-changes.js +214 -0
- package/dist/cc-orchestrator/external-agent-driver.d.ts +18 -0
- package/dist/cc-orchestrator/external-agent-driver.js +69 -0
- package/dist/cc-orchestrator/index.d.ts +8 -0
- package/dist/cc-orchestrator/index.js +8 -0
- package/dist/cc-orchestrator/relevance-judge.d.ts +15 -0
- package/dist/cc-orchestrator/relevance-judge.js +29 -0
- package/dist/cc-orchestrator/session-discovery.d.ts +46 -0
- package/dist/cc-orchestrator/session-discovery.js +125 -0
- package/dist/cc-orchestrator/session-history.d.ts +19 -0
- package/dist/cc-orchestrator/session-history.js +67 -0
- package/dist/cli/agent-server-stdio.d.ts +26 -1
- package/dist/cli/agent-server-stdio.js +221 -28
- package/dist/cli/agent-server-tcp.d.ts +20 -0
- package/dist/cli/agent-server-tcp.js +134 -0
- package/dist/cli/graceful-shutdown.d.ts +27 -0
- package/dist/cli/graceful-shutdown.js +30 -0
- package/dist/context/compaction.d.ts +56 -0
- package/dist/context/compaction.js +209 -15
- package/dist/context/manager.d.ts +0 -20
- package/dist/context/manager.js +25 -41
- package/dist/cost-tracker.js +5 -61
- package/dist/credentials/cipher.d.ts +49 -0
- package/dist/credentials/cipher.js +45 -0
- package/dist/credentials/cookie-jar.d.ts +24 -0
- package/dist/credentials/cookie-jar.js +40 -0
- package/dist/credentials/index.d.ts +7 -0
- package/dist/credentials/index.js +5 -0
- package/dist/credentials/inject-credential-tool.d.ts +20 -0
- package/dist/credentials/inject-credential-tool.js +130 -0
- package/dist/credentials/store.d.ts +72 -0
- package/dist/credentials/store.js +184 -0
- package/dist/credentials/types.d.ts +56 -0
- package/dist/credentials/use-credential-tool.d.ts +29 -0
- package/dist/credentials/use-credential-tool.js +205 -0
- package/dist/credentials/use-gate.d.ts +56 -0
- package/dist/credentials/use-gate.js +52 -0
- package/dist/cron/cron-runtime.d.ts +2 -0
- package/dist/cron/cron-runtime.js +2 -0
- package/dist/cron/cron-store.d.ts +2 -0
- package/dist/cron/cron-store.js +2 -0
- package/dist/cron/scheduler.d.ts +5 -32
- package/dist/cron/scheduler.js +5 -113
- package/dist/data/model-metadata.d.ts +77 -0
- package/dist/data/model-metadata.js +56 -0
- package/dist/data/model-metadata.json +216 -0
- package/dist/data/openrouter-models.d.ts +18 -7
- package/dist/data/openrouter-models.js +35 -8
- package/dist/data/openrouter-sync.js +1 -1
- package/dist/engine/aux-key.d.ts +10 -0
- package/dist/engine/aux-key.js +11 -0
- package/dist/engine/dynamic-tool-defs.d.ts +19 -0
- package/dist/engine/dynamic-tool-defs.js +36 -0
- package/dist/engine/engine.d.ts +431 -108
- package/dist/engine/engine.js +1630 -279
- package/dist/engine/friendly-error.d.ts +18 -0
- package/dist/engine/friendly-error.js +63 -0
- package/dist/engine/goal.d.ts +187 -0
- package/dist/engine/goal.js +196 -0
- package/dist/engine/image-compression.d.ts +81 -0
- package/dist/engine/image-compression.js +186 -0
- package/dist/engine/image-policy.d.ts +165 -0
- package/dist/engine/image-policy.js +189 -0
- package/dist/engine/model-connections-pool.d.ts +17 -0
- package/dist/engine/model-connections-pool.js +66 -0
- package/dist/engine/model-facade.d.ts +10 -0
- package/dist/engine/model-facade.js +25 -0
- package/dist/engine/patch-orphaned-tools.js +3 -0
- package/dist/engine/reactive-threshold.d.ts +13 -0
- package/dist/engine/reactive-threshold.js +17 -0
- package/dist/engine/resolve-llm-config.d.ts +16 -0
- package/dist/engine/resolve-llm-config.js +44 -0
- package/dist/engine/runtime.js +9 -1
- package/dist/engine/sandbox-cache-key.d.ts +10 -0
- package/dist/engine/sandbox-cache-key.js +9 -0
- package/dist/engine/sandbox-config.d.ts +31 -0
- package/dist/engine/sandbox-config.js +38 -0
- package/dist/engine/session-title.d.ts +13 -0
- package/dist/engine/session-title.js +34 -0
- package/dist/engine/session-usage.d.ts +19 -0
- package/dist/engine/session-usage.js +25 -0
- package/dist/engine/steer-queue.d.ts +32 -0
- package/dist/engine/steer-queue.js +26 -0
- package/dist/engine/streaming-tool-queue.d.ts +12 -0
- package/dist/engine/streaming-tool-queue.js +50 -10
- package/dist/engine/turn-loop.d.ts +94 -9
- package/dist/engine/turn-loop.js +775 -342
- package/dist/engine/types.d.ts +175 -0
- package/dist/engine/types.js +13 -0
- package/dist/external-agents/config.d.ts +2 -0
- package/dist/external-agents/config.js +15 -0
- package/dist/external-agents/types.d.ts +31 -0
- package/dist/external-agents/types.js +1 -0
- package/dist/git/parse-log.d.ts +13 -0
- package/dist/git/parse-log.js +21 -0
- package/dist/git/utils.d.ts +8 -6
- package/dist/git/utils.js +62 -26
- package/dist/git/worktree.d.ts +48 -0
- package/dist/git/worktree.js +111 -20
- package/dist/hooks/events.d.ts +23 -1
- package/dist/hooks/goal-stop-hook.d.ts +58 -0
- package/dist/hooks/goal-stop-hook.js +279 -0
- package/dist/hooks/hook-output.d.ts +33 -0
- package/dist/hooks/hook-output.js +79 -0
- package/dist/hooks/registry.d.ts +15 -0
- package/dist/hooks/registry.js +57 -1
- package/dist/hooks/shell-runner.d.ts +2 -0
- package/dist/hooks/shell-runner.js +48 -18
- package/dist/index.d.ts +79 -11
- package/dist/index.js +89 -6
- package/dist/llm/capabilities/param-specs.d.ts +14 -0
- package/dist/llm/capabilities/param-specs.js +62 -0
- package/dist/llm/capabilities/reasoning-control.d.ts +24 -0
- package/dist/llm/capabilities/reasoning-control.js +38 -0
- package/dist/llm/capabilities/rules.js +37 -3
- package/dist/llm/capabilities/types.d.ts +32 -2
- package/dist/llm/clamp-max-tokens.d.ts +11 -0
- package/dist/llm/clamp-max-tokens.js +17 -0
- package/dist/llm/client-base.d.ts +69 -5
- package/dist/llm/client-base.js +185 -25
- package/dist/llm/client-factory.d.ts +3 -3
- package/dist/llm/client-factory.js +2 -2
- package/dist/llm/model-cache.js +4 -2
- package/dist/llm/model-pool.d.ts +29 -11
- package/dist/llm/model-pool.js +36 -20
- package/dist/llm/provider-auth.d.ts +41 -0
- package/dist/llm/provider-auth.js +76 -0
- package/dist/llm/provider-catalog.d.ts +6 -2
- package/dist/llm/providers/anthropic.d.ts +32 -2
- package/dist/llm/providers/anthropic.js +207 -18
- package/dist/llm/providers/openai.d.ts +47 -2
- package/dist/llm/providers/openai.js +478 -71
- package/dist/llm/reasoning-setting.d.ts +51 -0
- package/dist/llm/reasoning-setting.js +40 -0
- package/dist/llm/stop-reason.d.ts +13 -0
- package/dist/llm/stop-reason.js +21 -0
- package/dist/llm/stream-watchdog.js +5 -1
- package/dist/llm/strip-vision.d.ts +32 -0
- package/dist/llm/strip-vision.js +94 -0
- package/dist/llm/token-counter.js +9 -2
- package/dist/llm/types.d.ts +9 -6
- package/dist/logging/logger.js +18 -4
- package/dist/logging/sanitize-messages.d.ts +10 -0
- package/dist/logging/sanitize-messages.js +112 -0
- package/dist/lsp/client.js +28 -8
- package/dist/lsp/manager.d.ts +1 -1
- package/dist/lsp/manager.js +42 -11
- package/dist/lsp/root-path.d.ts +9 -0
- package/dist/lsp/root-path.js +12 -0
- package/dist/model-catalog/builtin.d.ts +12 -0
- package/dist/model-catalog/builtin.js +407 -0
- package/dist/model-catalog/gen-connections.d.ts +20 -0
- package/dist/model-catalog/gen-connections.js +28 -0
- package/dist/model-catalog/index.d.ts +41 -0
- package/dist/model-catalog/index.js +90 -0
- package/dist/model-catalog/params.d.ts +20 -0
- package/dist/model-catalog/params.js +45 -0
- package/dist/model-catalog/resolve.d.ts +48 -0
- package/dist/model-catalog/resolve.js +33 -0
- package/dist/model-catalog/save-entry.d.ts +32 -0
- package/dist/model-catalog/save-entry.js +104 -0
- package/dist/model-catalog/types.d.ts +561 -0
- package/dist/model-catalog/types.js +93 -0
- package/dist/model-catalog/upsert.d.ts +9 -0
- package/dist/model-catalog/upsert.js +8 -0
- package/dist/onboarding.d.ts +12 -82
- package/dist/onboarding.js +75 -333
- package/dist/plugins/gitOps.d.ts +53 -0
- package/dist/plugins/gitOps.js +130 -5
- package/dist/plugins/installer/checkUpdate.d.ts +16 -0
- package/dist/plugins/installer/checkUpdate.js +32 -0
- package/dist/plugins/installer/codex/convertAgents.d.ts +7 -0
- package/dist/plugins/installer/codex/convertAgents.js +55 -0
- package/dist/plugins/installer/codex/convertCommands.d.ts +19 -0
- package/dist/plugins/installer/codex/convertCommands.js +46 -0
- package/dist/plugins/installer/codex/convertMcp.d.ts +11 -0
- package/dist/plugins/installer/codex/convertMcp.js +85 -0
- package/dist/plugins/installer/codex/convertSkills.d.ts +12 -0
- package/dist/plugins/installer/codex/convertSkills.js +33 -0
- package/dist/plugins/installer/detectFormat.d.ts +2 -0
- package/dist/plugins/installer/detectFormat.js +6 -0
- package/dist/plugins/installer/install.d.ts +7 -0
- package/dist/plugins/installer/install.js +123 -0
- package/dist/plugins/installer/installFromArchive.d.ts +43 -0
- package/dist/plugins/installer/installFromArchive.js +134 -0
- package/dist/plugins/installer/installFromSource.d.ts +13 -0
- package/dist/plugins/installer/installFromSource.js +51 -0
- package/dist/plugins/installer/list.d.ts +9 -0
- package/dist/plugins/installer/list.js +30 -0
- package/dist/plugins/installer/loadPluginAgents.d.ts +3 -0
- package/dist/plugins/installer/loadPluginAgents.js +27 -0
- package/dist/plugins/installer/loadPluginMcp.d.ts +14 -0
- package/dist/plugins/installer/loadPluginMcp.js +107 -0
- package/dist/plugins/installer/parseSource.d.ts +20 -0
- package/dist/plugins/installer/parseSource.js +74 -0
- package/dist/plugins/installer/paths.d.ts +5 -0
- package/dist/plugins/installer/paths.js +25 -0
- package/dist/plugins/installer/pruneDisabled.d.ts +24 -0
- package/dist/plugins/installer/pruneDisabled.js +73 -0
- package/dist/plugins/installer/types.d.ts +52 -0
- package/dist/plugins/installer/types.js +28 -0
- package/dist/plugins/installer/uninstall.d.ts +2 -0
- package/dist/plugins/installer/uninstall.js +18 -0
- package/dist/plugins/installer/unzip.d.ts +14 -0
- package/dist/plugins/installer/unzip.js +82 -0
- package/dist/plugins/installer/update.d.ts +28 -0
- package/dist/plugins/installer/update.js +97 -0
- package/dist/plugins/loadPluginHooks.d.ts +54 -1
- package/dist/plugins/loadPluginHooks.js +83 -1
- package/dist/plugins/marketplaceManager.d.ts +15 -1
- package/dist/plugins/marketplaceManager.js +58 -4
- package/dist/plugins/pluginCommandHook.js +34 -14
- package/dist/plugins/pluginContent.d.ts +30 -0
- package/dist/plugins/pluginContent.js +83 -0
- package/dist/plugins/pluginInstaller.d.ts +34 -0
- package/dist/plugins/pluginInstaller.js +168 -35
- package/dist/plugins/schemas.js +41 -6
- package/dist/plugins/types.d.ts +10 -0
- package/dist/preset/index.d.ts +7 -1
- package/dist/preset/index.js +112 -6
- package/dist/product/types.d.ts +1 -1
- package/dist/prompt/composer.d.ts +31 -0
- package/dist/prompt/composer.js +95 -25
- package/dist/prompt/instruction-scanner.js +5 -3
- package/dist/prompt/section-loader.js +1 -0
- package/dist/prompt/sections/base.md +1 -0
- package/dist/prompt/sections/browser.md +10 -0
- package/dist/prompt/sections/coding.md +4 -0
- package/dist/prompt/sections/orchestration.md +8 -0
- package/dist/protocol/chat-session-manager.d.ts +15 -2
- package/dist/protocol/chat-session-manager.js +46 -0
- package/dist/protocol/chat-session.d.ts +82 -0
- package/dist/protocol/chat-session.js +121 -1
- package/dist/protocol/client.d.ts +27 -0
- package/dist/protocol/client.js +38 -0
- package/dist/protocol/redact.d.ts +50 -0
- package/dist/protocol/redact.js +71 -0
- package/dist/protocol/server.d.ts +153 -2
- package/dist/protocol/server.js +807 -39
- package/dist/protocol/tcp-transport.d.ts +45 -0
- package/dist/protocol/tcp-transport.js +74 -0
- package/dist/protocol/transport.js +3 -2
- package/dist/protocol/types.d.ts +69 -0
- package/dist/protocol/types.js +22 -0
- package/dist/quota/credentials.d.ts +3 -0
- package/dist/quota/credentials.js +80 -0
- package/dist/quota/index.d.ts +36 -0
- package/dist/quota/index.js +155 -0
- package/dist/quota/types.d.ts +48 -0
- package/dist/quota/types.js +13 -0
- package/dist/remote/bridge.d.ts +11 -2
- package/dist/remote/bridge.js +61 -33
- package/dist/review/review-prompt.d.ts +28 -0
- package/dist/review/review-prompt.js +81 -0
- package/dist/run/ArtifactTracker.js +5 -4
- package/dist/run/EngineRunner.d.ts +27 -1
- package/dist/run/EngineRunner.js +46 -8
- package/dist/run/FileRunStore.js +40 -11
- package/dist/run/RunApprovalBackend.js +25 -5
- package/dist/run/RunLock.d.ts +28 -2
- package/dist/run/RunLock.js +49 -7
- package/dist/run/RunManager.d.ts +12 -0
- package/dist/run/RunManager.js +86 -3
- package/dist/run/RunQueue.d.ts +1 -0
- package/dist/run/RunQueue.js +8 -2
- package/dist/run/factory.d.ts +8 -1
- package/dist/run/factory.js +1 -0
- package/dist/run/index.d.ts +2 -2
- package/dist/run/index.js +1 -1
- package/dist/run/redirect-target.d.ts +7 -0
- package/dist/run/redirect-target.js +13 -0
- package/dist/run/types.js +1 -1
- package/dist/runtime/background-shell.d.ts +139 -0
- package/dist/runtime/background-shell.js +495 -0
- package/dist/runtime/output-clean.d.ts +24 -0
- package/dist/runtime/output-clean.js +41 -0
- package/dist/runtime/ring-file.d.ts +64 -0
- package/dist/runtime/ring-file.js +174 -0
- package/dist/runtime/safe-spawn.js +15 -34
- package/dist/runtime/spawn-common.d.ts +148 -0
- package/dist/runtime/spawn-common.js +303 -0
- package/dist/runtime/truncate-output.d.ts +22 -0
- package/dist/runtime/truncate-output.js +49 -0
- package/dist/runtime/utf8-cut.d.ts +11 -0
- package/dist/runtime/utf8-cut.js +23 -0
- package/dist/services/auto-dream.d.ts +4 -0
- package/dist/services/auto-dream.js +26 -26
- package/dist/services/browser-open.d.ts +13 -0
- package/dist/services/browser-open.js +16 -0
- package/dist/services/diagnostics.d.ts +1 -2
- package/dist/services/diagnostics.js +12 -7
- package/dist/services/dream-consolidation.d.ts +57 -0
- package/dist/services/dream-consolidation.js +151 -0
- package/dist/services/extract-memories.d.ts +14 -1
- package/dist/services/extract-memories.js +45 -6
- package/dist/services/memory-orchestrator.d.ts +21 -0
- package/dist/services/memory-orchestrator.js +125 -32
- package/dist/services/notifier.d.ts +8 -0
- package/dist/services/notifier.js +39 -25
- package/dist/services/oauth.js +5 -7
- package/dist/services/session-memory-sort.d.ts +8 -0
- package/dist/services/session-memory-sort.js +9 -0
- package/dist/services/session-memory.js +30 -19
- package/dist/session/file-history.d.ts +124 -1
- package/dist/session/file-history.js +232 -9
- package/dist/session/memory.d.ts +116 -2
- package/dist/session/memory.js +250 -28
- package/dist/session/session-manager.d.ts +63 -1
- package/dist/session/session-manager.js +186 -5
- package/dist/session/simple-diff.d.ts +23 -0
- package/dist/session/simple-diff.js +84 -0
- package/dist/session/transcript.d.ts +25 -1
- package/dist/session/transcript.js +35 -2
- package/dist/session/undo-target.d.ts +67 -0
- package/dist/session/undo-target.js +144 -0
- package/dist/settings/disk-defaults.d.ts +42 -0
- package/dist/settings/disk-defaults.js +33 -0
- package/dist/settings/feature-flags.d.ts +64 -0
- package/dist/settings/feature-flags.js +61 -0
- package/dist/settings/manager.d.ts +101 -1
- package/dist/settings/manager.js +345 -15
- package/dist/settings/migrate-config.d.ts +45 -0
- package/dist/settings/migrate-config.js +125 -0
- package/dist/settings/personalization.d.ts +19 -0
- package/dist/settings/personalization.js +7 -0
- package/dist/settings/schema-export.d.ts +25 -0
- package/dist/settings/schema-export.js +38 -0
- package/dist/settings/schema.d.ts +1827 -396
- package/dist/settings/schema.js +361 -81
- package/dist/skills/scanner.d.ts +9 -0
- package/dist/skills/scanner.js +30 -2
- package/dist/stt/resolve-transcribe.d.ts +31 -0
- package/dist/stt/resolve-transcribe.js +108 -0
- package/dist/stt/transcribe.d.ts +51 -0
- package/dist/stt/transcribe.js +65 -0
- package/dist/tool-system/browser-bridge.d.ts +226 -0
- package/dist/tool-system/browser-bridge.js +163 -0
- package/dist/tool-system/builtin/add-marketplace.d.ts +12 -0
- package/dist/tool-system/builtin/add-marketplace.js +76 -0
- package/dist/tool-system/builtin/agent-heartbeat.d.ts +49 -0
- package/dist/tool-system/builtin/agent-heartbeat.js +89 -0
- package/dist/tool-system/builtin/agent-notifications.d.ts +12 -3
- package/dist/tool-system/builtin/agent-notifications.js +9 -3
- package/dist/tool-system/builtin/agent-output-file.d.ts +38 -0
- package/dist/tool-system/builtin/agent-output-file.js +72 -0
- package/dist/tool-system/builtin/agent-registry.d.ts +23 -0
- package/dist/tool-system/builtin/agent-registry.js +16 -4
- package/dist/tool-system/builtin/agent.d.ts +50 -11
- package/dist/tool-system/builtin/agent.js +576 -73
- package/dist/tool-system/builtin/apply-patch/applier.js +66 -8
- package/dist/tool-system/builtin/apply-patch/backup-targets.d.ts +10 -0
- package/dist/tool-system/builtin/apply-patch/backup-targets.js +30 -0
- package/dist/tool-system/builtin/apply-patch/index.js +7 -3
- package/dist/tool-system/builtin/arena.js +6 -7
- package/dist/tool-system/builtin/background-jobs.d.ts +76 -0
- package/dist/tool-system/builtin/background-jobs.js +124 -0
- package/dist/tool-system/builtin/background-shell-tools.d.ts +20 -0
- package/dist/tool-system/builtin/background-shell-tools.js +108 -0
- package/dist/tool-system/builtin/background-work.d.ts +67 -0
- package/dist/tool-system/builtin/background-work.js +86 -0
- package/dist/tool-system/builtin/bash-output-style.d.ts +32 -0
- package/dist/tool-system/builtin/bash-output-style.js +40 -0
- package/dist/tool-system/builtin/bash.d.ts +5 -2
- package/dist/tool-system/builtin/bash.js +98 -62
- package/dist/tool-system/builtin/browser-tools.d.ts +33 -0
- package/dist/tool-system/builtin/browser-tools.js +312 -0
- package/dist/tool-system/builtin/cancel-goal.d.ts +31 -0
- package/dist/tool-system/builtin/cancel-goal.js +64 -0
- package/dist/tool-system/builtin/check-quota.d.ts +15 -0
- package/dist/tool-system/builtin/check-quota.js +34 -0
- package/dist/tool-system/builtin/complete-goal.d.ts +25 -0
- package/dist/tool-system/builtin/complete-goal.js +45 -0
- package/dist/tool-system/builtin/config.js +7 -0
- package/dist/tool-system/builtin/cron.d.ts +7 -0
- package/dist/tool-system/builtin/cron.js +105 -9
- package/dist/tool-system/builtin/drive-claude-code.d.ts +30 -0
- package/dist/tool-system/builtin/drive-claude-code.js +157 -0
- package/dist/tool-system/builtin/edit-model-catalog.d.ts +3 -0
- package/dist/tool-system/builtin/edit-model-catalog.js +94 -0
- package/dist/tool-system/builtin/edit.d.ts +2 -1
- package/dist/tool-system/builtin/edit.js +21 -12
- package/dist/tool-system/builtin/eol.d.ts +29 -0
- package/dist/tool-system/builtin/eol.js +37 -0
- package/dist/tool-system/builtin/file-cache.d.ts +6 -0
- package/dist/tool-system/builtin/file-cache.js +8 -0
- package/dist/tool-system/builtin/generate-image.d.ts +60 -0
- package/dist/tool-system/builtin/generate-image.js +374 -0
- package/dist/tool-system/builtin/generate-video.d.ts +55 -0
- package/dist/tool-system/builtin/generate-video.js +361 -0
- package/dist/tool-system/builtin/grep.js +6 -2
- package/dist/tool-system/builtin/image-providers.d.ts +86 -0
- package/dist/tool-system/builtin/image-providers.js +190 -0
- package/dist/tool-system/builtin/image-uploader.d.ts +33 -0
- package/dist/tool-system/builtin/image-uploader.js +74 -0
- package/dist/tool-system/builtin/index.d.ts +24 -1
- package/dist/tool-system/builtin/index.js +310 -25
- package/dist/tool-system/builtin/mcp-tools.js +23 -3
- package/dist/tool-system/builtin/memory.js +45 -7
- package/dist/tool-system/builtin/notebook-edit.d.ts +2 -1
- package/dist/tool-system/builtin/notebook-edit.js +1 -1
- package/dist/tool-system/builtin/powershell.js +4 -1
- package/dist/tool-system/builtin/read.d.ts +2 -1
- package/dist/tool-system/builtin/read.js +11 -3
- package/dist/tool-system/builtin/repl.js +4 -1
- package/dist/tool-system/builtin/skill.js +9 -0
- package/dist/tool-system/builtin/sleep.js +12 -5
- package/dist/tool-system/builtin/task.js +4 -1
- package/dist/tool-system/builtin/tool-search.js +25 -7
- package/dist/tool-system/builtin/update-automation-memory.d.ts +24 -0
- package/dist/tool-system/builtin/update-automation-memory.js +60 -0
- package/dist/tool-system/builtin/video-providers.d.ts +154 -0
- package/dist/tool-system/builtin/video-providers.js +235 -0
- package/dist/tool-system/builtin/view-image.d.ts +18 -0
- package/dist/tool-system/builtin/view-image.js +96 -0
- package/dist/tool-system/builtin/web-fetch.js +12 -2
- package/dist/tool-system/builtin/web-search.d.ts +4 -1
- package/dist/tool-system/builtin/web-search.js +57 -10
- package/dist/tool-system/builtin/worktree.d.ts +2 -1
- package/dist/tool-system/builtin/worktree.js +31 -4
- package/dist/tool-system/builtin/write.d.ts +2 -1
- package/dist/tool-system/builtin/write.js +1 -1
- package/dist/tool-system/context.d.ts +166 -6
- package/dist/tool-system/executor.d.ts +3 -2
- package/dist/tool-system/executor.js +197 -119
- package/dist/tool-system/investigation-guard.d.ts +4 -1
- package/dist/tool-system/investigation-guard.js +20 -4
- package/dist/tool-system/mcp-manager.d.ts +78 -16
- package/dist/tool-system/mcp-manager.js +357 -28
- package/dist/tool-system/path-policy.d.ts +99 -0
- package/dist/tool-system/path-policy.js +578 -0
- package/dist/tool-system/permission.d.ts +36 -1
- package/dist/tool-system/permission.js +322 -117
- package/dist/tool-system/plan-mode-allowlist.d.ts +32 -0
- package/dist/tool-system/plan-mode-allowlist.js +65 -0
- package/dist/tool-system/registry.d.ts +1 -0
- package/dist/tool-system/registry.js +26 -1
- package/dist/tool-system/sandbox/index.d.ts +8 -0
- package/dist/tool-system/sandbox/index.js +7 -2
- package/dist/tool-system/validate-tool-metadata.d.ts +36 -0
- package/dist/tool-system/validate-tool-metadata.js +63 -0
- package/dist/tool-system/validation.d.ts +10 -0
- package/dist/tool-system/validation.js +16 -3
- package/dist/types.d.ts +301 -15
- package/dist/updater.js +20 -9
- package/dist/utils/envUtils.d.ts +0 -9
- package/dist/utils/envUtils.js +3 -28
- package/dist/utils/exec.d.ts +40 -0
- package/dist/utils/exec.js +144 -0
- package/dist/utils/format.js +4 -2
- package/dist/utils/json.d.ts +12 -0
- package/dist/utils/json.js +92 -0
- package/dist/utils/lockfile.js +9 -2
- package/dist/utils/theme.d.ts +7 -1
- package/dist/utils/theme.js +5 -3
- package/dist/utils/toolDisplay.js +0 -1
- package/package.json +14 -7
- package/dist/agent/coordinator.d.ts +0 -49
- package/dist/agent/coordinator.js +0 -77
- package/dist/settings/manager.test.js +0 -73
- package/dist/tool-system/builtin/remote-trigger.d.ts +0 -6
- package/dist/tool-system/builtin/remote-trigger.js +0 -54
- package/dist/tool-system/builtin/send-message.d.ts +0 -6
- package/dist/tool-system/builtin/send-message.js +0 -47
- /package/dist/{settings/manager.test.d.ts → credentials/types.js} +0 -0
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public Engine configuration & result types.
|
|
3
|
+
*
|
|
4
|
+
* Extracted out of engine/engine.ts so consumers (protocol server, run
|
|
5
|
+
* factory, product layer, settings/disk-defaults, SDK index) can import the
|
|
6
|
+
* Engine's *types* without importing the 3000-line Engine *implementation* —
|
|
7
|
+
* which would pull the whole engine module (and its transitive deps) into a
|
|
8
|
+
* type-only consumer and make engine.ts a "type water tower". engine.ts
|
|
9
|
+
* re-exports these names, so existing `import { EngineConfig } from
|
|
10
|
+
* "../engine/engine.js"` callers keep working; new callers should prefer
|
|
11
|
+
* `engine/types.js`.
|
|
12
|
+
*/
|
|
13
|
+
import type { ClientDefaults, LLMConfig, SessionOrigin, TerminalReason, TokenUsage } from "../types.js";
|
|
14
|
+
import type { AgentPresetName } from "../preset/index.js";
|
|
15
|
+
import type { GoalConfig } from "./goal.js";
|
|
16
|
+
import type { ApprovalBackend } from "../tool-system/permission.js";
|
|
17
|
+
import type { SandboxConfig } from "../tool-system/sandbox/index.js";
|
|
18
|
+
import type { CostStateStore } from "./cost-store.js";
|
|
19
|
+
import type { AskUserFn } from "../tool-system/builtin/ask-user.js";
|
|
20
|
+
import type { SettingsScope } from "../settings/manager.js";
|
|
21
|
+
import type { EngineRuntime } from "./runtime.js";
|
|
22
|
+
import type { HookEventName } from "../hooks/events.js";
|
|
23
|
+
import type { HookHandler } from "../hooks/registry.js";
|
|
24
|
+
export interface EngineConfig {
|
|
25
|
+
llm: LLMConfig;
|
|
26
|
+
/**
|
|
27
|
+
* Cross-model runtime knobs (temperature/timeout/retryMaxAttempts/imageDetail).
|
|
28
|
+
* Stays stable across hot model switches — only `llm` rotates. When omitted,
|
|
29
|
+
* Engine reads settings.json (model.temperature, images.detail) on construction.
|
|
30
|
+
*/
|
|
31
|
+
clientDefaults?: ClientDefaults;
|
|
32
|
+
cwd?: string;
|
|
33
|
+
maxTurns?: number;
|
|
34
|
+
/**
|
|
35
|
+
* Override the goal-mode consecutive-stop-block cap (TODO 3.1). Falls back to
|
|
36
|
+
* goal.maxStopBlocks, then GOAL_DEFAULT_MAX_STOP_BLOCKS. See resolveMaxStopBlocks.
|
|
37
|
+
*/
|
|
38
|
+
maxStopBlocks?: number;
|
|
39
|
+
maxToolCallsPerTurn?: number;
|
|
40
|
+
permissionMode?: "default" | "acceptEdits" | "dontAsk" | "bypassPermissions" | "auto" | "plan";
|
|
41
|
+
preset?: AgentPresetName;
|
|
42
|
+
enabledBuiltinTools?: string[];
|
|
43
|
+
disabledBuiltinTools?: string[];
|
|
44
|
+
/**
|
|
45
|
+
* When false, `Bash(run_in_background=true)` is rejected and the
|
|
46
|
+
* background-shell tools are disabled (design §5.5). Set false by
|
|
47
|
+
* unattended automation/cron hosts — no one is there to reap a long-lived
|
|
48
|
+
* dev server. Defaults to true (interactive sessions allow it).
|
|
49
|
+
*/
|
|
50
|
+
allowBackgroundShells?: boolean;
|
|
51
|
+
customSystemPrompt?: string;
|
|
52
|
+
appendSystemPrompt?: string;
|
|
53
|
+
responseLanguage?: string;
|
|
54
|
+
userProfile?: string;
|
|
55
|
+
instructions?: {
|
|
56
|
+
compatClaude?: boolean;
|
|
57
|
+
compatCodex?: boolean;
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Goal mode: when set, the engine registers a GoalStopHook on `on_stop`
|
|
61
|
+
* so the turn loop runs until the session model judges this goal met
|
|
62
|
+
* (bounded by maxStopBlocks + maxTurns). Orthogonal to permissionMode —
|
|
63
|
+
* the desktop UI defaults permission to bypass when a goal is set, but
|
|
64
|
+
* the engine treats the two independently.
|
|
65
|
+
*
|
|
66
|
+
* Accepts a raw string (objective only) or a full GoalConfig (objective +
|
|
67
|
+
* optional token/time budgets); the run boundary normalizes it once.
|
|
68
|
+
*/
|
|
69
|
+
goal?: string | GoalConfig;
|
|
70
|
+
sessionStorageDir?: string;
|
|
71
|
+
maxContextTokens?: number;
|
|
72
|
+
approvalBackend?: ApprovalBackend;
|
|
73
|
+
hooks?: EngineHookConfig[];
|
|
74
|
+
askUser?: AskUserFn;
|
|
75
|
+
/** Browser automation bridge (browser_* tools). Wired by the host (desktop)
|
|
76
|
+
* after construction via setBrowserBridge. Undefined → tools degrade. */
|
|
77
|
+
browserBridge?: import("../tool-system/browser-bridge.js").BrowserBridge;
|
|
78
|
+
/** Inject a cookie credential into the built-in browser (InjectCredential
|
|
79
|
+
* tool). Wired by the host after construction via setInjectCredential.
|
|
80
|
+
* Undefined → the tool degrades with a clear "no browser" error. */
|
|
81
|
+
injectCredentialToBrowser?: import("../tool-system/context.js").InjectCredentialFn;
|
|
82
|
+
mcpServers?: Record<string, import("../types.js").MCPServerConfig>;
|
|
83
|
+
/**
|
|
84
|
+
* Optional opaque store for per-session cost/usage state. When provided,
|
|
85
|
+
* Engine calls `restore()` on session resume and `serialize()` at the end
|
|
86
|
+
* of each `run()` and stores the blob on the session. Without this the
|
|
87
|
+
* Engine doesn't persist cost state — it's a UI concern.
|
|
88
|
+
*/
|
|
89
|
+
costStore?: CostStateStore;
|
|
90
|
+
/**
|
|
91
|
+
* True when the Engine runs in a no-UI / one-shot context (e.g. the `run`
|
|
92
|
+
* command). Currently controls InvestigationGuard soft-mode: in headless
|
|
93
|
+
* we never hard-block a tool call because there is no human to retry.
|
|
94
|
+
* Defaults to false.
|
|
95
|
+
*/
|
|
96
|
+
headless?: boolean;
|
|
97
|
+
/**
|
|
98
|
+
* When true, treat like headless for InvestigationGuard soft-mode — a
|
|
99
|
+
* read-only session should never be hard-blocked for repeated reads.
|
|
100
|
+
*/
|
|
101
|
+
readOnlySession?: boolean;
|
|
102
|
+
/**
|
|
103
|
+
* Sandbox configuration for shell-tool execution. When omitted, headless
|
|
104
|
+
* runs default to "auto" (Seatbelt on macOS / bwrap on Linux when
|
|
105
|
+
* available) and interactive runs default to "off" because a human is in
|
|
106
|
+
* the loop to approve commands.
|
|
107
|
+
*/
|
|
108
|
+
sandbox?: SandboxConfig;
|
|
109
|
+
/**
|
|
110
|
+
* True when this Engine is itself a sub-agent (spawned by another
|
|
111
|
+
* Engine's Agent tool). Threaded into ToolContext so the Agent tool can
|
|
112
|
+
* refuse re-entry — defense in depth against the tool-list strip in
|
|
113
|
+
* spawn(): if a tool registry regression ever leaks Agent into a child's
|
|
114
|
+
* pool, the runtime check still blocks the call.
|
|
115
|
+
*/
|
|
116
|
+
isSubAgent?: boolean;
|
|
117
|
+
/**
|
|
118
|
+
* Hard skill isolation for a sub-agent. When set, this Engine only lists
|
|
119
|
+
* and invokes skills in this allowlist (applied on top of disabledSkills).
|
|
120
|
+
* Set by the spawn() closure from the role definition's `skills:`
|
|
121
|
+
* frontmatter. Undefined → inherit the parent's full skill pool.
|
|
122
|
+
*/
|
|
123
|
+
skillAllowlist?: string[];
|
|
124
|
+
/**
|
|
125
|
+
* Host/context that created this Engine's sessions — written to state.json's
|
|
126
|
+
* `origin` so the desktop disk-rebuild can filter the sidebar (desktop +
|
|
127
|
+
* automation shown; tui hidden). Sub-agents override to "subagent".
|
|
128
|
+
*/
|
|
129
|
+
origin?: SessionOrigin;
|
|
130
|
+
/**
|
|
131
|
+
* Optional shared EngineRuntime providing pre-constructed shared resources
|
|
132
|
+
* (modelPool, toolRegistry, etc.). When provided, Engine uses these instead
|
|
133
|
+
* of constructing its own. Existing callers that omit this field continue to
|
|
134
|
+
* work unchanged — T11 will migrate them.
|
|
135
|
+
*/
|
|
136
|
+
runtime?: EngineRuntime;
|
|
137
|
+
/**
|
|
138
|
+
* Which disk config layers this Engine may read. Defaults to 'project' —
|
|
139
|
+
* the safe default: a library/SDK embedding never silently inherits the
|
|
140
|
+
* host user's personal ~/.code-shell config (keys, models, MCP, hooks); it
|
|
141
|
+
* only reads the project-level ${cwd}/.code-shell that travels with a repo.
|
|
142
|
+
* Host-terminal entrypoints (TUI/desktop/CLI) pass 'full' to restore the
|
|
143
|
+
* managed+user+project+local behavior. 'isolated' reads no disk at all.
|
|
144
|
+
* Subagents inherit the parent Engine's scope. See SettingsScope.
|
|
145
|
+
*/
|
|
146
|
+
settingsScope?: SettingsScope;
|
|
147
|
+
/**
|
|
148
|
+
* Workspace trust for the project directory (`cwd`). When explicitly `false`,
|
|
149
|
+
* dangerous fields committed into the project's own
|
|
150
|
+
* `.code-shell/settings.{json,local.json}` (permissions / env / hooks /
|
|
151
|
+
* mcpServers / localEnvironment) are stripped before merge, so a cloned
|
|
152
|
+
* malicious repo can't self-authorize permission rules, inject env
|
|
153
|
+
* (BASH_ENV/LD_PRELOAD), register hooks, or auto-connect MCP servers. Safe
|
|
154
|
+
* fields still apply. The user/managed layers are never gated.
|
|
155
|
+
*
|
|
156
|
+
* Undefined / true keeps the pre-trust behavior (fully trusted) so embedders
|
|
157
|
+
* that don't wire a trust store are unaffected. Host terminals (desktop) pass
|
|
158
|
+
* the real decision from their per-directory trust store; when it's "unknown"
|
|
159
|
+
* they should pass `false` (fail-closed) until the user grants trust.
|
|
160
|
+
*/
|
|
161
|
+
projectTrusted?: boolean;
|
|
162
|
+
}
|
|
163
|
+
export interface EngineHookConfig {
|
|
164
|
+
event: HookEventName;
|
|
165
|
+
handler: HookHandler;
|
|
166
|
+
priority?: number;
|
|
167
|
+
name?: string;
|
|
168
|
+
}
|
|
169
|
+
export interface EngineResult {
|
|
170
|
+
text: string;
|
|
171
|
+
reason: TerminalReason;
|
|
172
|
+
sessionId: string;
|
|
173
|
+
turnCount: number;
|
|
174
|
+
usage: TokenUsage;
|
|
175
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public Engine configuration & result types.
|
|
3
|
+
*
|
|
4
|
+
* Extracted out of engine/engine.ts so consumers (protocol server, run
|
|
5
|
+
* factory, product layer, settings/disk-defaults, SDK index) can import the
|
|
6
|
+
* Engine's *types* without importing the 3000-line Engine *implementation* —
|
|
7
|
+
* which would pull the whole engine module (and its transitive deps) into a
|
|
8
|
+
* type-only consumer and make engine.ts a "type water tower". engine.ts
|
|
9
|
+
* re-exports these names, so existing `import { EngineConfig } from
|
|
10
|
+
* "../engine/engine.js"` callers keep working; new callers should prefer
|
|
11
|
+
* `engine/types.js`.
|
|
12
|
+
*/
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export function resolveExternalAgentConfig(settings) {
|
|
2
|
+
return {
|
|
3
|
+
claudeCode: {
|
|
4
|
+
command: settings?.claudeCode?.command ?? "claude",
|
|
5
|
+
defaultMode: settings?.claudeCode?.defaultMode ?? "safe",
|
|
6
|
+
dangerousArgs: settings?.claudeCode?.dangerousArgs ?? [],
|
|
7
|
+
trustedWorkspaces: settings?.claudeCode?.trustedWorkspaces ?? [],
|
|
8
|
+
autoStartInTrustedWorkspaces: settings?.claudeCode?.autoStartInTrustedWorkspaces ?? false,
|
|
9
|
+
},
|
|
10
|
+
codex: {
|
|
11
|
+
command: settings?.codex?.command ?? "codex",
|
|
12
|
+
args: settings?.codex?.args ?? [],
|
|
13
|
+
},
|
|
14
|
+
};
|
|
15
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export type ExternalAgentMode = "safe" | "dangerous";
|
|
2
|
+
export interface ClaudeCodeSettings {
|
|
3
|
+
command?: string;
|
|
4
|
+
defaultMode?: ExternalAgentMode;
|
|
5
|
+
dangerousArgs?: string[];
|
|
6
|
+
trustedWorkspaces?: string[];
|
|
7
|
+
autoStartInTrustedWorkspaces?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface CodexSettings {
|
|
10
|
+
command?: string;
|
|
11
|
+
args?: string[];
|
|
12
|
+
}
|
|
13
|
+
export interface ExternalAgentsSettings {
|
|
14
|
+
claudeCode?: ClaudeCodeSettings;
|
|
15
|
+
codex?: CodexSettings;
|
|
16
|
+
}
|
|
17
|
+
export interface ResolvedClaudeCodeSettings {
|
|
18
|
+
command: string;
|
|
19
|
+
defaultMode: ExternalAgentMode;
|
|
20
|
+
dangerousArgs: string[];
|
|
21
|
+
trustedWorkspaces: string[];
|
|
22
|
+
autoStartInTrustedWorkspaces: boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface ResolvedCodexSettings {
|
|
25
|
+
command: string;
|
|
26
|
+
args: string[];
|
|
27
|
+
}
|
|
28
|
+
export interface ResolvedExternalAgentsConfig {
|
|
29
|
+
claudeCode: ResolvedClaudeCodeSettings;
|
|
30
|
+
codex: ResolvedCodexSettings;
|
|
31
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface GitLogEntry {
|
|
2
|
+
hash: string;
|
|
3
|
+
message: string;
|
|
4
|
+
author: string;
|
|
5
|
+
date: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Parse `git log --format=%H|%s|%an|%ci` output into entries. Tolerates
|
|
9
|
+
* malformed/short lines (missing `|` separators) by defaulting absent fields
|
|
10
|
+
* to "" rather than destructuring `undefined` and crashing on `.slice`
|
|
11
|
+
* (review-2026-05-30). Blank lines are skipped.
|
|
12
|
+
*/
|
|
13
|
+
export declare function parseGitLog(raw: string): GitLogEntry[];
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse `git log --format=%H|%s|%an|%ci` output into entries. Tolerates
|
|
3
|
+
* malformed/short lines (missing `|` separators) by defaulting absent fields
|
|
4
|
+
* to "" rather than destructuring `undefined` and crashing on `.slice`
|
|
5
|
+
* (review-2026-05-30). Blank lines are skipped.
|
|
6
|
+
*/
|
|
7
|
+
export function parseGitLog(raw) {
|
|
8
|
+
return raw
|
|
9
|
+
.split("\n")
|
|
10
|
+
.filter((line) => line.trim() !== "")
|
|
11
|
+
.map((line) => {
|
|
12
|
+
const parts = line.split("|");
|
|
13
|
+
const hash = parts[0] ?? "";
|
|
14
|
+
return {
|
|
15
|
+
hash: hash.slice(0, 8),
|
|
16
|
+
message: parts[1] ?? "",
|
|
17
|
+
author: parts[2] ?? "",
|
|
18
|
+
date: parts[3] ?? "",
|
|
19
|
+
};
|
|
20
|
+
});
|
|
21
|
+
}
|
package/dist/git/utils.d.ts
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
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.
|
|
3
9
|
*/
|
|
10
|
+
import { type GitLogEntry } from "./parse-log.js";
|
|
4
11
|
export interface GitStatusEntry {
|
|
5
12
|
status: string;
|
|
6
13
|
path: string;
|
|
7
14
|
}
|
|
8
|
-
export
|
|
9
|
-
hash: string;
|
|
10
|
-
message: string;
|
|
11
|
-
author: string;
|
|
12
|
-
date: string;
|
|
13
|
-
}
|
|
15
|
+
export type { GitLogEntry };
|
|
14
16
|
export declare function isGitRepo(cwd: string): boolean;
|
|
15
17
|
export declare function getCurrentBranch(cwd: string): string;
|
|
16
18
|
export declare function getGitStatus(cwd: string): GitStatusEntry[];
|
package/dist/git/utils.js
CHANGED
|
@@ -1,10 +1,30 @@
|
|
|
1
1
|
/**
|
|
2
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.
|
|
3
9
|
*/
|
|
4
|
-
import {
|
|
10
|
+
import { execFileSync } from "node:child_process";
|
|
11
|
+
import { parseGitLog } from "./parse-log.js";
|
|
12
|
+
import { resolveExecutable } from "../utils/exec.js";
|
|
13
|
+
// Resolve git/gh through PATH×PATHEXT on Windows so a .cmd/.exe shim is found
|
|
14
|
+
// (bare execFile doesn't walk PATHEXT). No-op on POSIX. See utils/exec.ts.
|
|
15
|
+
const GIT_BIN = resolveExecutable("git");
|
|
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(GIT_BIN, 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
|
+
}
|
|
5
25
|
export function isGitRepo(cwd) {
|
|
6
26
|
try {
|
|
7
|
-
|
|
27
|
+
git(cwd, ["rev-parse", "--is-inside-work-tree"], 5000);
|
|
8
28
|
return true;
|
|
9
29
|
}
|
|
10
30
|
catch {
|
|
@@ -12,10 +32,10 @@ export function isGitRepo(cwd) {
|
|
|
12
32
|
}
|
|
13
33
|
}
|
|
14
34
|
export function getCurrentBranch(cwd) {
|
|
15
|
-
return
|
|
35
|
+
return git(cwd, ["branch", "--show-current"], 5000);
|
|
16
36
|
}
|
|
17
37
|
export function getGitStatus(cwd) {
|
|
18
|
-
const raw =
|
|
38
|
+
const raw = git(cwd, ["status", "--porcelain"], 10000);
|
|
19
39
|
if (!raw)
|
|
20
40
|
return [];
|
|
21
41
|
return raw.split("\n").map((line) => ({
|
|
@@ -24,51 +44,58 @@ export function getGitStatus(cwd) {
|
|
|
24
44
|
}));
|
|
25
45
|
}
|
|
26
46
|
export function getGitDiff(cwd, opts) {
|
|
27
|
-
const args = ["
|
|
47
|
+
const args = ["diff", "--no-color"];
|
|
28
48
|
if (opts?.staged)
|
|
29
49
|
args.push("--staged");
|
|
50
|
+
// `--` terminates option parsing so a file path starting with `-` can't
|
|
51
|
+
// be re-interpreted as a flag.
|
|
30
52
|
if (opts?.file)
|
|
31
53
|
args.push("--", opts.file);
|
|
32
|
-
return
|
|
54
|
+
return git(cwd, args, 30000);
|
|
33
55
|
}
|
|
34
56
|
export function getGitDiffStat(cwd, opts) {
|
|
35
|
-
const args = ["
|
|
57
|
+
const args = ["diff", "--stat", "--no-color"];
|
|
36
58
|
if (opts?.staged)
|
|
37
59
|
args.push("--staged");
|
|
38
60
|
if (opts?.file)
|
|
39
61
|
args.push("--", opts.file);
|
|
40
|
-
return
|
|
62
|
+
return git(cwd, args, 10000);
|
|
41
63
|
}
|
|
42
64
|
export function getGitLog(cwd, n = 10) {
|
|
43
|
-
|
|
65
|
+
// `n` is numeric — coerce/validate to keep the argv clean even if a caller
|
|
66
|
+
// hands us a string.
|
|
67
|
+
const count = Number.isFinite(n) && n > 0 ? Math.floor(n) : 10;
|
|
68
|
+
const raw = git(cwd, ["log", "--oneline", "--format=%H|%s|%an|%ci", `-${count}`], 10000);
|
|
44
69
|
if (!raw)
|
|
45
70
|
return [];
|
|
46
|
-
return raw
|
|
47
|
-
const [hash, message, author, date] = line.split("|");
|
|
48
|
-
return { hash: hash.slice(0, 8), message, author, date };
|
|
49
|
-
});
|
|
71
|
+
return parseGitLog(raw);
|
|
50
72
|
}
|
|
51
73
|
export function getRemoteUrl(cwd) {
|
|
52
74
|
try {
|
|
53
|
-
return
|
|
75
|
+
return git(cwd, ["remote", "get-url", "origin"], 5000);
|
|
54
76
|
}
|
|
55
77
|
catch {
|
|
56
78
|
return undefined;
|
|
57
79
|
}
|
|
58
80
|
}
|
|
59
81
|
export function gitAdd(cwd, files = ["."]) {
|
|
60
|
-
|
|
61
|
-
|
|
82
|
+
// `--` ensures a path starting with `-` cannot be parsed as a flag.
|
|
83
|
+
// Each file is its own argv token, so spaces / quotes / non-ASCII pass
|
|
84
|
+
// through verbatim with no shell parsing.
|
|
85
|
+
execFileSync(GIT_BIN, ["add", "--", ...files], { cwd, timeout: 10000 });
|
|
62
86
|
}
|
|
63
87
|
export function gitCommit(cwd, message) {
|
|
64
|
-
|
|
88
|
+
// Pre-fix this used `JSON.stringify(message)` which only happened to be
|
|
89
|
+
// safe because JSON.stringify covers most shell metacharacters — but it's
|
|
90
|
+
// not real escaping. The argv form is.
|
|
91
|
+
return execFileSync(GIT_BIN, ["commit", "-m", message], {
|
|
65
92
|
cwd,
|
|
66
93
|
encoding: "utf-8",
|
|
67
94
|
timeout: 30000,
|
|
68
95
|
}).trim();
|
|
69
96
|
}
|
|
70
97
|
export function gitListBranches(cwd) {
|
|
71
|
-
const raw =
|
|
98
|
+
const raw = git(cwd, ["branch", "--no-color"], 5000);
|
|
72
99
|
if (!raw)
|
|
73
100
|
return [];
|
|
74
101
|
return raw.split("\n").map((line) => ({
|
|
@@ -77,12 +104,22 @@ export function gitListBranches(cwd) {
|
|
|
77
104
|
}));
|
|
78
105
|
}
|
|
79
106
|
export function gitCheckout(cwd, branch, create = false) {
|
|
80
|
-
|
|
81
|
-
|
|
107
|
+
// argv form defeats shell injection. We additionally reject branch names
|
|
108
|
+
// that start with `-` so a value like `--orphan` can't slip through git's
|
|
109
|
+
// own option parser (the trailing `--` trick doesn't help on checkout:
|
|
110
|
+
// git interprets it as the option's value, not as an option terminator).
|
|
111
|
+
if (typeof branch !== "string" || branch.length === 0) {
|
|
112
|
+
throw new Error("branch must be a non-empty string");
|
|
113
|
+
}
|
|
114
|
+
if (branch.startsWith("-")) {
|
|
115
|
+
throw new Error(`refusing branch name that starts with '-': ${branch}`);
|
|
116
|
+
}
|
|
117
|
+
const args = create ? ["checkout", "-b", branch] : ["checkout", branch];
|
|
118
|
+
execFileSync(GIT_BIN, args, { cwd, timeout: 10000 });
|
|
82
119
|
}
|
|
83
120
|
export function ghAvailable() {
|
|
84
121
|
try {
|
|
85
|
-
|
|
122
|
+
execFileSync(GH_BIN, ["--version"], { encoding: "utf-8", timeout: 5000 });
|
|
86
123
|
return true;
|
|
87
124
|
}
|
|
88
125
|
catch {
|
|
@@ -90,9 +127,8 @@ export function ghAvailable() {
|
|
|
90
127
|
}
|
|
91
128
|
}
|
|
92
129
|
export function ghPrComments(cwd, prUrl) {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
}).trim();
|
|
130
|
+
// Pre-fix `gh pr view ${prUrl}` interpolated the URL directly. argv form
|
|
131
|
+
// means even a value like "$(rm -rf ~)" is sent to gh as a literal
|
|
132
|
+
// positional argument (which gh will then reject as a bad PR URL).
|
|
133
|
+
return gh(cwd, ["pr", "view", prUrl, "--comments", "--json", "comments", "-q", ".comments[].body"], 30000);
|
|
98
134
|
}
|
package/dist/git/worktree.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Git worktree management — create/remove isolated worktrees for agents.
|
|
3
3
|
*/
|
|
4
|
+
import type { SandboxBackend } from "../tool-system/sandbox/index.js";
|
|
4
5
|
export interface WorktreeSession {
|
|
5
6
|
originalCwd: string;
|
|
6
7
|
worktreePath: string;
|
|
@@ -10,6 +11,21 @@ export interface WorktreeSession {
|
|
|
10
11
|
sessionId: string;
|
|
11
12
|
createdAt: number;
|
|
12
13
|
}
|
|
14
|
+
/** Per-platform setup/cleanup scripts (a project's localEnvironment). */
|
|
15
|
+
export interface PlatformScripts {
|
|
16
|
+
default?: string;
|
|
17
|
+
macos?: string;
|
|
18
|
+
linux?: string;
|
|
19
|
+
windows?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Pick the setup/cleanup script for the running platform, falling back to
|
|
23
|
+
* `default`. Empty/whitespace-only scripts are treated as absent so a project
|
|
24
|
+
* can leave a platform key blank without spawning an empty shell. `platform`
|
|
25
|
+
* defaults to `process.platform` so callers usually omit it; tests pass a
|
|
26
|
+
* fixed value.
|
|
27
|
+
*/
|
|
28
|
+
export declare function selectPlatformScript(scripts: PlatformScripts | undefined, platform?: NodeJS.Platform): string | undefined;
|
|
13
29
|
/**
|
|
14
30
|
* Validate worktree slug to prevent path traversal attacks.
|
|
15
31
|
*/
|
|
@@ -22,6 +38,38 @@ export declare function findGitRoot(cwd: string): string;
|
|
|
22
38
|
* Create an isolated git worktree for an agent session.
|
|
23
39
|
*/
|
|
24
40
|
export declare function createWorktree(cwd: string, slug: string, sessionId: string): WorktreeSession;
|
|
41
|
+
export interface WorktreeSetupResult {
|
|
42
|
+
/** True if no setup script was configured for this platform (nothing ran). */
|
|
43
|
+
skipped: boolean;
|
|
44
|
+
/** True if a script ran and exited 0. */
|
|
45
|
+
ok: boolean;
|
|
46
|
+
/** Combined stdout/stderr, for surfacing to the user on failure. */
|
|
47
|
+
output: string;
|
|
48
|
+
/** Exit code when a script ran; undefined when skipped. */
|
|
49
|
+
exitCode?: number | null;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Run a project's `localEnvironment.setupScripts` once, in the freshly-created
|
|
53
|
+
* worktree's root, right after `git worktree add`. This mirrors Codex's
|
|
54
|
+
* local-environment semantics: setup belongs to the *worktree* lifecycle, not
|
|
55
|
+
* the conversation — it runs when the isolated copy is born so e.g. `bun
|
|
56
|
+
* install` or `cp .env.example .env` happens before the agent works there.
|
|
57
|
+
*
|
|
58
|
+
* Failure is non-fatal by design (Beta decision 2026-06-08, "警告但继续"): a
|
|
59
|
+
* broken setup script shouldn't strand the agent outside a worktree it already
|
|
60
|
+
* created. The caller surfaces `output` as a warning and proceeds. cleanup
|
|
61
|
+
* scripts are intentionally NOT auto-run on exit (same decision).
|
|
62
|
+
*
|
|
63
|
+
* Reuses the same sandbox + env primitives as the Bash tool so the setup
|
|
64
|
+
* command sees the project's `localEnvironment.env` and runs under the same
|
|
65
|
+
* isolation the agent's later commands will.
|
|
66
|
+
*/
|
|
67
|
+
export declare function runWorktreeSetup(worktreePath: string, script: string | undefined, opts?: {
|
|
68
|
+
sandbox?: SandboxBackend;
|
|
69
|
+
shellEnv?: Record<string, string>;
|
|
70
|
+
timeoutMs?: number;
|
|
71
|
+
signal?: AbortSignal;
|
|
72
|
+
}): Promise<WorktreeSetupResult>;
|
|
25
73
|
/**
|
|
26
74
|
* Remove a worktree and optionally its branch.
|
|
27
75
|
*/
|