@the-open-engine/zeroshot 6.38.0 → 6.39.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/cli/event-copy.js +8 -7
- package/cli/event-copy.ts +12 -0
- package/cli/index.js +7 -31
- package/cli/json-export.js +61 -64
- package/cli/json-export.ts +112 -0
- package/cli/message-formatter-utils.js +68 -56
- package/cli/message-formatter-utils.ts +121 -0
- package/cli/message-formatters-normal.js +124 -259
- package/cli/message-formatters-normal.ts +250 -0
- package/cli/message-formatters-watch.js +81 -84
- package/cli/message-formatters-watch.ts +189 -0
- package/lib/agent-cli-provider/adapters/codex.d.ts.map +1 -1
- package/lib/agent-cli-provider/adapters/codex.js +3 -1
- package/lib/agent-cli-provider/adapters/codex.js.map +1 -1
- package/lib/cluster/generated/protocol-schema.cjs +1 -1
- package/lib/cluster/generated/protocol-schema.mjs +1 -1
- package/lib/cluster/generated/protocol.d.cts +8 -0
- package/lib/cluster/generated/protocol.d.mts +8 -0
- package/lib/cluster/generated/protocol.d.ts +8 -0
- package/lib/clusters-registry.d.ts +23 -0
- package/lib/clusters-registry.js +17 -29
- package/lib/completion.d.ts +12 -0
- package/lib/completion.js +84 -94
- package/lib/compose-utils.d.ts +32 -0
- package/lib/compose-utils.js +57 -72
- package/lib/detached-startup.d.ts +83 -0
- package/lib/detached-startup.js +231 -302
- package/lib/docker-config.d.ts +43 -0
- package/lib/docker-config.js +150 -325
- package/lib/docker-env-auth.d.ts +17 -0
- package/lib/docker-env-auth.js +75 -0
- package/lib/git-remote-utils.d.ts +48 -0
- package/lib/git-remote-utils.js +147 -213
- package/lib/id-detector.d.ts +15 -0
- package/lib/id-detector.js +37 -41
- package/lib/path-check.d.ts +30 -0
- package/lib/path-check.js +42 -45
- package/lib/process-liveness.d.ts +16 -0
- package/lib/process-liveness.js +19 -12
- package/lib/provider-credential-path.d.ts +16 -0
- package/lib/provider-credential-path.js +31 -29
- package/lib/provider-defaults.d.ts +30 -0
- package/lib/provider-defaults.js +47 -42
- package/lib/provider-detection.d.ts +11 -0
- package/lib/provider-detection.js +91 -54
- package/lib/provider-names.d.ts +38 -0
- package/lib/provider-names.js +56 -64
- package/lib/repo-settings.d.ts +28 -0
- package/lib/repo-settings.js +83 -59
- package/lib/run-mode.d.ts +21 -0
- package/lib/run-mode.js +21 -20
- package/lib/run-plan.d.ts +28 -0
- package/lib/run-plan.js +17 -16
- package/lib/settings/claude-auth.d.ts +35 -0
- package/lib/settings/claude-auth.js +30 -47
- package/lib/settings-defaults.d.ts +20 -0
- package/lib/settings-defaults.js +149 -0
- package/lib/settings-error.d.ts +7 -0
- package/lib/settings-error.js +8 -0
- package/lib/settings-issue-providers.d.ts +10 -0
- package/lib/settings-issue-providers.js +12 -0
- package/lib/settings-models.d.ts +22 -0
- package/lib/settings-models.js +93 -0
- package/lib/settings-storage.d.ts +23 -0
- package/lib/settings-storage.js +205 -0
- package/lib/settings-validation.d.ts +7 -0
- package/lib/settings-validation.js +182 -0
- package/lib/settings.d.ts +29 -0
- package/lib/settings.js +41 -736
- package/lib/setup-apply-types.d.ts +66 -0
- package/lib/setup-apply-types.js +2 -0
- package/lib/setup-apply.d.ts +39 -0
- package/lib/setup-apply.js +267 -264
- package/lib/setup-journal.d.ts +41 -0
- package/lib/setup-journal.js +119 -76
- package/lib/setup-plan-types.d.ts +102 -0
- package/lib/setup-plan-types.js +2 -0
- package/lib/setup-plan.d.ts +30 -0
- package/lib/setup-plan.js +300 -324
- package/lib/setup-undo.d.ts +44 -0
- package/lib/setup-undo.js +61 -74
- package/lib/start-cluster-config.d.ts +26 -0
- package/lib/start-cluster-config.js +56 -0
- package/lib/start-cluster-environment.d.ts +40 -0
- package/lib/start-cluster-environment.js +134 -0
- package/lib/start-cluster-run-options.d.ts +53 -0
- package/lib/start-cluster-run-options.js +147 -0
- package/lib/start-cluster.d.ts +64 -0
- package/lib/start-cluster.js +98 -454
- package/lib/stream-json-parser.d.ts +17 -0
- package/lib/stream-json-parser.js +51 -52
- package/npm-shrinkwrap.json +2 -2
- package/package.json +12 -6
- package/scripts/postinstall.js +27 -0
- package/scripts/rust-distribution.js +23 -14
- package/src/agent/agent-command-proofs-context.js +35 -45
- package/src/agent/agent-command-proofs-context.ts +87 -0
- package/src/agent/agent-config-settings.js +19 -0
- package/src/agent/agent-config-settings.ts +41 -0
- package/src/agent/agent-config.js +122 -231
- package/src/agent/agent-config.ts +285 -0
- package/src/agent/agent-context-builder.js +38 -273
- package/src/agent/agent-context-builder.ts +51 -0
- package/src/agent/agent-context-environment-sections.js +105 -0
- package/src/agent/agent-context-environment-sections.ts +134 -0
- package/src/agent/agent-context-packs.js +165 -0
- package/src/agent/agent-context-packs.ts +296 -0
- package/src/agent/agent-context-prompt-sections.js +100 -0
- package/src/agent/agent-context-prompt-sections.ts +148 -0
- package/src/agent/agent-context-sections.js +25 -334
- package/src/agent/agent-context-sections.ts +36 -0
- package/src/agent/agent-context-sources.js +96 -149
- package/src/agent/agent-context-sources.ts +253 -0
- package/src/agent/agent-context-types.js +2 -0
- package/src/agent/agent-context-types.ts +132 -0
- package/src/agent/agent-context-validation-sections.js +73 -0
- package/src/agent/agent-context-validation-sections.ts +129 -0
- package/src/agent/agent-input-injector.js +99 -118
- package/src/agent/agent-input-injector.ts +195 -0
- package/src/agent/agent-liveness-poll.js +74 -78
- package/src/agent/agent-liveness-poll.ts +163 -0
- package/src/agent/agent-quality-gate-schema.js +77 -86
- package/src/agent/agent-quality-gate-schema.ts +135 -0
- package/src/agent/agent-quality-gates-context.js +44 -50
- package/src/agent/agent-quality-gates-context.ts +91 -0
- package/src/agent/agent-stuck-detector.js +171 -239
- package/src/agent/agent-stuck-detector.ts +288 -0
- package/src/agent/agent-trigger-evaluator.js +29 -46
- package/src/agent/agent-trigger-evaluator.ts +98 -0
- package/src/agent/context-metrics.js +110 -141
- package/src/agent/context-metrics.ts +261 -0
- package/src/agent/context-pack-builder.js +72 -358
- package/src/agent/context-pack-builder.ts +105 -0
- package/src/agent/context-pack-core.js +70 -0
- package/src/agent/context-pack-core.ts +96 -0
- package/src/agent/context-pack-selection.js +119 -0
- package/src/agent/context-pack-selection.ts +187 -0
- package/src/agent/context-pack-truncation.js +139 -0
- package/src/agent/context-pack-truncation.ts +208 -0
- package/src/agent/context-pack-types.js +2 -0
- package/src/agent/context-pack-types.ts +98 -0
- package/src/agent/context-replay-policy.js +30 -39
- package/src/agent/context-replay-policy.ts +71 -0
- package/src/agent/critical-agent-policy.js +6 -10
- package/src/agent/critical-agent-policy.ts +20 -0
- package/src/agent/guidance-queue.js +74 -87
- package/src/agent/guidance-queue.ts +166 -0
- package/src/agent/output-extraction-error-detail.js +45 -0
- package/src/agent/output-extraction-error-detail.ts +49 -0
- package/src/agent/output-extraction-failures.js +125 -0
- package/src/agent/output-extraction-failures.ts +149 -0
- package/src/agent/output-extraction-json.js +234 -0
- package/src/agent/output-extraction-json.ts +235 -0
- package/src/agent/output-extraction-pi.js +124 -0
- package/src/agent/output-extraction-pi.ts +137 -0
- package/src/agent/output-extraction-types.js +2 -0
- package/src/agent/output-extraction-types.ts +49 -0
- package/src/agent/output-extraction.js +17 -617
- package/src/agent/output-extraction.ts +30 -0
- package/src/agent/output-reformatter-errors.js +83 -0
- package/src/agent/output-reformatter-errors.ts +106 -0
- package/src/agent/output-reformatter-types.js +2 -0
- package/src/agent/output-reformatter-types.ts +86 -0
- package/src/agent/output-reformatter.js +140 -185
- package/src/agent/output-reformatter.ts +238 -0
- package/src/agent/pi-terminal-lifecycle-types.js +2 -0
- package/src/agent/pi-terminal-lifecycle-types.ts +41 -0
- package/src/agent/pi-terminal-lifecycle.js +186 -206
- package/src/agent/pi-terminal-lifecycle.ts +297 -0
- package/src/agent/provider-control-plane.js +22 -21
- package/src/agent/provider-control-plane.ts +52 -0
- package/src/agent/provider-terminal-failure-types.js +2 -0
- package/src/agent/provider-terminal-failure-types.ts +60 -0
- package/src/agent/provider-terminal-failure.js +194 -191
- package/src/agent/provider-terminal-failure.ts +262 -0
- package/src/agent/rate-limit-backoff.js +31 -74
- package/src/agent/rate-limit-backoff.ts +71 -0
- package/src/agent/schema-utils.js +85 -125
- package/src/agent/schema-utils.ts +148 -0
- package/src/agent/structured-output-error.js +34 -33
- package/src/agent/structured-output-error.ts +105 -0
- package/src/agent/validation-platform.js +27 -27
- package/src/agent/validation-platform.ts +49 -0
- package/src/agent-cli-provider/adapters/codex.ts +3 -1
- package/src/attach/attach-client.js +232 -405
- package/src/attach/attach-client.ts +300 -0
- package/src/attach/attach-server-cleanup.js +43 -0
- package/src/attach/attach-server-cleanup.ts +39 -0
- package/src/attach/attach-server-clients.js +117 -0
- package/src/attach/attach-server-clients.ts +122 -0
- package/src/attach/attach-server-events.js +38 -0
- package/src/attach/attach-server-events.ts +36 -0
- package/src/attach/attach-server-pty.js +45 -0
- package/src/attach/attach-server-pty.ts +64 -0
- package/src/attach/attach-server-runtime.js +73 -0
- package/src/attach/attach-server-runtime.ts +62 -0
- package/src/attach/attach-server-socket.js +28 -0
- package/src/attach/attach-server-socket.ts +23 -0
- package/src/attach/attach-server-types.js +2 -0
- package/src/attach/attach-server-types.ts +82 -0
- package/src/attach/attach-server.js +106 -523
- package/src/attach/attach-server.ts +158 -0
- package/src/attach/index.js +18 -35
- package/src/attach/index.ts +18 -0
- package/src/attach/protocol.js +95 -184
- package/src/attach/protocol.ts +181 -0
- package/src/attach/ring-buffer.js +76 -102
- package/src/attach/ring-buffer.ts +109 -0
- package/src/attach/send-input.js +64 -75
- package/src/attach/send-input.ts +94 -0
- package/src/attach/socket-discovery.js +164 -218
- package/src/attach/socket-discovery.ts +230 -0
- package/src/attach/socket-paths.js +42 -61
- package/src/attach/socket-paths.ts +81 -0
- package/src/claude-credentials.js +51 -54
- package/src/claude-credentials.ts +89 -0
- package/src/cluster/generated/protocol-schema.ts +1 -1
- package/src/cluster/generated/protocol.ts +2 -1
- package/src/command-proofs.js +110 -141
- package/src/command-proofs.ts +216 -0
- package/src/config-router.js +81 -73
- package/src/config-router.ts +131 -0
- package/src/copy-worker.js +53 -29
- package/src/copy-worker.ts +75 -0
- package/src/darwin-keychain-boundary.js +80 -111
- package/src/darwin-keychain-boundary.ts +148 -0
- package/src/guidance-topics.js +4 -5
- package/src/guidance-topics.ts +10 -0
- package/src/input-helpers.js +33 -54
- package/src/input-helpers.ts +58 -0
- package/src/ledger-sequence.js +45 -48
- package/src/ledger-sequence.ts +63 -0
- package/src/legacy-lib/clusters-registry.ts +40 -0
- package/src/legacy-lib/completion.ts +148 -0
- package/src/legacy-lib/compose-utils.ts +102 -0
- package/src/legacy-lib/detached-startup.ts +449 -0
- package/src/legacy-lib/docker-config.ts +282 -0
- package/src/legacy-lib/docker-env-auth.ts +116 -0
- package/src/legacy-lib/git-remote-utils.ts +244 -0
- package/src/legacy-lib/id-detector.ts +57 -0
- package/src/legacy-lib/js-yaml.d.ts +3 -0
- package/src/legacy-lib/omelette.d.ts +15 -0
- package/src/legacy-lib/path-check.ts +89 -0
- package/src/legacy-lib/process-liveness.ts +36 -0
- package/src/legacy-lib/provider-credential-path.ts +57 -0
- package/src/legacy-lib/provider-defaults.ts +114 -0
- package/src/legacy-lib/provider-detection.ts +67 -0
- package/src/legacy-lib/provider-names.ts +126 -0
- package/src/legacy-lib/repo-settings.ts +88 -0
- package/src/legacy-lib/run-mode.ts +58 -0
- package/src/legacy-lib/run-plan.ts +49 -0
- package/src/legacy-lib/settings/claude-auth.ts +80 -0
- package/src/legacy-lib/settings-defaults.ts +212 -0
- package/src/legacy-lib/settings-error.ts +8 -0
- package/src/legacy-lib/settings-issue-providers.ts +18 -0
- package/src/legacy-lib/settings-models.ts +124 -0
- package/src/legacy-lib/settings-storage.ts +277 -0
- package/src/legacy-lib/settings-validation.ts +220 -0
- package/src/legacy-lib/settings.ts +87 -0
- package/src/legacy-lib/setup-apply-types.ts +70 -0
- package/src/legacy-lib/setup-apply.ts +456 -0
- package/src/legacy-lib/setup-journal.ts +185 -0
- package/src/legacy-lib/setup-plan-types.ts +96 -0
- package/src/legacy-lib/setup-plan.ts +500 -0
- package/src/legacy-lib/setup-undo.ts +142 -0
- package/src/legacy-lib/start-cluster-config.ts +124 -0
- package/src/legacy-lib/start-cluster-environment.ts +165 -0
- package/src/legacy-lib/start-cluster-run-options.ts +279 -0
- package/src/legacy-lib/start-cluster.ts +237 -0
- package/src/legacy-lib/stream-json-parser.ts +88 -0
- package/src/message-buffer.js +55 -71
- package/src/message-buffer.ts +107 -0
- package/src/message-bus-bridge.js +92 -133
- package/src/message-bus-bridge.ts +149 -0
- package/src/name-generator-shared.js +220 -0
- package/src/name-generator-shared.ts +231 -0
- package/src/name-generator.js +8 -217
- package/src/name-generator.ts +27 -0
- package/src/omp-blob-root.js +83 -64
- package/src/omp-blob-root.ts +116 -0
- package/src/omp-config-overlay.js +65 -38
- package/src/omp-config-overlay.ts +110 -0
- package/src/omp-execution-fingerprint.js +38 -43
- package/src/omp-execution-fingerprint.ts +92 -0
- package/src/omp-session-limits.js +10 -15
- package/src/omp-session-limits.ts +53 -0
- package/src/omp-session-partition.js +2 -2
- package/src/omp-session-verifier.js +1 -1
- package/src/orchestrator.js +19 -4
- package/src/providers/anthropic/index.js +3 -1
- package/src/providers/anthropic/index.ts +13 -0
- package/src/providers/capabilities.js +19 -27
- package/src/providers/capabilities.ts +44 -0
- package/src/providers/google/index.js +3 -1
- package/src/providers/google/index.ts +13 -0
- package/src/providers/openai/index.js +3 -1
- package/src/providers/openai/index.ts +13 -0
- package/src/providers/opencode/index.js +3 -1
- package/src/providers/opencode/index.ts +13 -0
- package/src/quality-gates.js +67 -127
- package/src/quality-gates.ts +149 -0
- package/src/repo-settings-access.js +40 -0
- package/src/repo-settings-access.ts +64 -0
- package/src/schemas/sub-cluster.js +127 -183
- package/src/schemas/sub-cluster.ts +238 -0
- package/src/state-snapshot-normalization.js +224 -0
- package/src/state-snapshot-normalization.ts +222 -0
- package/src/state-snapshot.js +192 -359
- package/src/state-snapshot.ts +291 -0
- package/src/state-snapshotter.js +118 -130
- package/src/state-snapshotter.ts +167 -0
- package/src/sub-cluster-wrapper.js +4 -13
- package/src/task-run-model-args.js +87 -124
- package/src/task-run-model-args.ts +204 -0
- package/src/task-runner.js +5 -25
- package/src/task-runner.ts +28 -0
- package/src/task-startup-error.js +73 -58
- package/src/task-startup-error.ts +126 -0
- package/src/template-validation/consensus-gate-contracts.js +2 -0
- package/src/template-validation/consensus-gate-contracts.ts +70 -0
- package/src/template-validation/consensus-gate-scenarios.js +76 -0
- package/src/template-validation/consensus-gate-scenarios.ts +130 -0
- package/src/template-validation/consensus-gate-stage.js +34 -0
- package/src/template-validation/consensus-gate-stage.ts +56 -0
- package/src/template-validation/random-topology-contracts.js +2 -0
- package/src/template-validation/random-topology-contracts.ts +54 -0
- package/src/template-validation/random-topology-dispatch.js +25 -0
- package/src/template-validation/random-topology-dispatch.ts +33 -0
- package/src/template-validation/random-topology-message-loop.js +53 -0
- package/src/template-validation/random-topology-message-loop.ts +73 -0
- package/src/template-validation/random-topology-operations.js +79 -0
- package/src/template-validation/random-topology-operations.ts +101 -0
- package/src/template-validation/random-topology-runtime.js +25 -0
- package/src/template-validation/random-topology-runtime.ts +43 -0
- package/src/template-validation/random-topology-scenario.js +52 -0
- package/src/template-validation/random-topology-scenario.ts +57 -0
- package/src/template-validation/random-topology-schema.js +159 -0
- package/src/template-validation/random-topology-schema.ts +190 -0
- package/src/template-validation/random-topology-state.js +28 -0
- package/src/template-validation/random-topology-state.ts +30 -0
- package/src/template-validation/random-topology-trigger-evaluation.js +45 -0
- package/src/template-validation/random-topology-trigger-evaluation.ts +65 -0
- package/src/template-validation/random-topology-trigger.js +75 -0
- package/src/template-validation/random-topology-trigger.ts +88 -0
- package/src/template-validation/report-formatter.js +40 -46
- package/src/template-validation/report-formatter.ts +101 -0
- package/src/template-validation/simulate-consensus-gates.js +111 -302
- package/src/template-validation/simulate-consensus-gates.ts +196 -0
- package/src/template-validation/simulate-random-topology.js +26 -519
- package/src/template-validation/simulate-random-topology.ts +57 -0
- package/src/template-validation/simulate-two-stage-validation.js +41 -265
- package/src/template-validation/simulate-two-stage-validation.ts +55 -0
- package/src/template-validation/simulation-agent-runtime.js +25 -0
- package/src/template-validation/simulation-agent-runtime.ts +40 -0
- package/src/template-validation/simulation-agent.js +29 -0
- package/src/template-validation/simulation-agent.ts +73 -0
- package/src/template-validation/simulation-runtime.js +34 -0
- package/src/template-validation/simulation-runtime.ts +72 -0
- package/src/template-validation/two-stage-contracts.js +2 -0
- package/src/template-validation/two-stage-contracts.ts +41 -0
- package/src/template-validation/two-stage-inputs.js +21 -0
- package/src/template-validation/two-stage-inputs.ts +29 -0
- package/src/template-validation/two-stage-results.js +30 -0
- package/src/template-validation/two-stage-results.ts +40 -0
- package/src/template-validation/two-stage-scenario.js +86 -0
- package/src/template-validation/two-stage-scenario.ts +120 -0
- package/src/worktree-claude-config.js +182 -220
- package/src/worktree-claude-config.ts +272 -0
- package/src/worktree-tooling-env.js +103 -125
- package/src/worktree-tooling-env.ts +142 -0
- package/task-lib/completion.js +2 -3
- package/task-lib/completion.ts +9 -0
- package/task-lib/config.js +1 -4
- package/task-lib/config.ts +11 -0
- package/task-lib/name-generator.js +4 -226
- package/task-lib/name-generator.ts +11 -0
- package/task-lib/omp-session-cleanup.js +1 -1
- package/task-lib/omp-storage-root.js +8 -12
- package/task-lib/omp-storage-root.ts +62 -0
- package/task-lib/process-termination.js +143 -166
- package/task-lib/process-termination.ts +268 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
interface Settings extends Record<string, unknown> {
|
|
2
|
+
}
|
|
3
|
+
interface ClusterConfig extends Record<string, unknown> {
|
|
4
|
+
}
|
|
5
|
+
interface ClusterInput extends Record<string, string> {
|
|
6
|
+
}
|
|
7
|
+
interface OrchestratorFacade {
|
|
8
|
+
loadConfig(configPath: string): ClusterConfig;
|
|
9
|
+
start(config: ClusterConfig, input: ClusterInput, options: unknown): unknown;
|
|
10
|
+
}
|
|
11
|
+
interface ProviderOverrideOptions {
|
|
12
|
+
provider?: string | null;
|
|
13
|
+
envProvider?: string | null;
|
|
14
|
+
validateProvider?: unknown;
|
|
15
|
+
}
|
|
16
|
+
interface StartClusterArgs extends Record<string, unknown> {
|
|
17
|
+
orchestrator?: OrchestratorFacade;
|
|
18
|
+
config?: ClusterConfig | null;
|
|
19
|
+
configPath?: string | null;
|
|
20
|
+
configName?: string | null;
|
|
21
|
+
settings?: Settings;
|
|
22
|
+
providerOverride?: string | null;
|
|
23
|
+
modelOverride?: unknown;
|
|
24
|
+
forceProvider?: unknown;
|
|
25
|
+
clusterId?: unknown;
|
|
26
|
+
options?: Record<string, unknown>;
|
|
27
|
+
text: string;
|
|
28
|
+
issue: string;
|
|
29
|
+
file: string;
|
|
30
|
+
}
|
|
31
|
+
declare function buildTextInput(text: string): ClusterInput;
|
|
32
|
+
declare function buildIssueInput(issue: string): ClusterInput;
|
|
33
|
+
declare function buildFileInput(file: string): ClusterInput;
|
|
34
|
+
declare function detectRunInput(inputArg: string, settings?: Settings, forceProvider?: string | null): ClusterInput;
|
|
35
|
+
declare function isStdinInput(inputArg: string): boolean;
|
|
36
|
+
declare function readStdinText(stream?: AsyncIterable<string | Uint8Array>): Promise<string>;
|
|
37
|
+
declare function encodeStdinEnv(text: string): string;
|
|
38
|
+
declare function decodeStdinEnv(value: string): string;
|
|
39
|
+
declare function resolveProviderOverride(options?: ProviderOverrideOptions): string | null;
|
|
40
|
+
declare function startClusterFromText(args: StartClusterArgs): unknown;
|
|
41
|
+
declare function startClusterFromIssue(args: StartClusterArgs): unknown;
|
|
42
|
+
declare function startClusterFromFile(args: StartClusterArgs): unknown;
|
|
43
|
+
declare const _default: {
|
|
44
|
+
buildTextInput: typeof buildTextInput;
|
|
45
|
+
buildIssueInput: typeof buildIssueInput;
|
|
46
|
+
buildFileInput: typeof buildFileInput;
|
|
47
|
+
detectRunInput: typeof detectRunInput;
|
|
48
|
+
isStdinInput: typeof isStdinInput;
|
|
49
|
+
readStdinText: typeof readStdinText;
|
|
50
|
+
encodeStdinEnv: typeof encodeStdinEnv;
|
|
51
|
+
decodeStdinEnv: typeof decodeStdinEnv;
|
|
52
|
+
resolveProviderOverride: typeof resolveProviderOverride;
|
|
53
|
+
resolveConfigPath: (configName: string) => string;
|
|
54
|
+
prepareClusterConfig: (config: ClusterConfig, settings?: Settings, providerOverride?: string | null) => ClusterConfig;
|
|
55
|
+
loadClusterConfig: (orchestrator: OrchestratorFacade, configPath: string, settings?: Settings, providerOverride?: string | null) => ClusterConfig;
|
|
56
|
+
buildStartOptions: (args: Record<string, unknown>) => unknown;
|
|
57
|
+
buildTrustedStartOptions: (args: Record<string, unknown>) => unknown;
|
|
58
|
+
resolveEffectiveRunPlan: (options?: Record<string, unknown>, settings?: Settings) => unknown;
|
|
59
|
+
startClusterFromText: typeof startClusterFromText;
|
|
60
|
+
startClusterFromIssue: typeof startClusterFromIssue;
|
|
61
|
+
startClusterFromFile: typeof startClusterFromFile;
|
|
62
|
+
detectGitRepoRoot: () => string;
|
|
63
|
+
};
|
|
64
|
+
export = _default;
|
package/lib/start-cluster.js
CHANGED
|
@@ -1,485 +1,129 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
return values.some(Boolean);
|
|
18
|
-
}
|
|
19
|
-
function optionalValue(value) {
|
|
20
|
-
return value || undefined;
|
|
21
|
-
}
|
|
22
|
-
function resolveTargetCwd() {
|
|
23
|
-
return firstTruthy(process.env.ZEROSHOT_CWD, detectGitRepoRoot());
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
function detectGitRepoRoot() {
|
|
27
|
-
try {
|
|
28
|
-
const result = spawnSync('git', ['rev-parse', '--show-toplevel'], {
|
|
29
|
-
encoding: 'utf8',
|
|
30
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
31
|
-
});
|
|
32
|
-
if (result.status !== 0) {
|
|
33
|
-
return process.cwd();
|
|
34
|
-
}
|
|
35
|
-
return result.stdout.trim();
|
|
36
|
-
} catch {
|
|
37
|
-
return process.cwd();
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
function resolveOptionalString(value) {
|
|
42
|
-
if (typeof value !== 'string') return undefined;
|
|
43
|
-
const trimmed = value.trim();
|
|
44
|
-
return trimmed.length > 0 ? trimmed : undefined;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
function resolveEnvBool(value) {
|
|
48
|
-
if (typeof value !== 'string') return undefined;
|
|
49
|
-
const trimmed = value.trim().toLowerCase();
|
|
50
|
-
if (trimmed === '1' || trimmed === 'true' || trimmed === 'yes') return true;
|
|
51
|
-
if (trimmed === '0' || trimmed === 'false' || trimmed === 'no') return false;
|
|
52
|
-
return undefined;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
function resolveCloseIssueMode(value) {
|
|
56
|
-
const trimmed = resolveOptionalString(value);
|
|
57
|
-
if (!trimmed) return undefined;
|
|
58
|
-
const normalized = trimmed.toLowerCase();
|
|
59
|
-
if (normalized === 'auto' || normalized === 'always' || normalized === 'never') {
|
|
60
|
-
return normalized;
|
|
61
|
-
}
|
|
62
|
-
return undefined;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
function parseRunOptionsEnv() {
|
|
66
|
-
const raw = resolveOptionalString(process.env.ZEROSHOT_RUN_OPTIONS);
|
|
67
|
-
if (!raw) return null;
|
|
68
|
-
try {
|
|
69
|
-
const parsed = JSON.parse(raw);
|
|
70
|
-
if (!parsed || typeof parsed !== 'object') {
|
|
71
|
-
return null;
|
|
72
|
-
}
|
|
73
|
-
return parsed;
|
|
74
|
-
} catch {
|
|
75
|
-
return null;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
function parseMountSpecs(specs) {
|
|
80
|
-
return specs.map((spec) => {
|
|
81
|
-
const parts = spec.split(':');
|
|
82
|
-
if (parts.length < 2) {
|
|
83
|
-
throw new Error(`Invalid mount spec: "${spec}". Format: host:container[:ro]`);
|
|
84
|
-
}
|
|
85
|
-
const host = parts[0];
|
|
86
|
-
const container = parts[1];
|
|
87
|
-
const readonly = parts[2] === 'ro';
|
|
88
|
-
return { host, container, readonly };
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
3
|
+
const providerNames = require('./provider-names');
|
|
4
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
5
|
+
const providers = require('../src/providers');
|
|
6
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
7
|
+
const issueProviders = require('../src/issue-providers');
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
9
|
+
const configHelpers = require('./start-cluster-config');
|
|
10
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
11
|
+
const runOptionsHelpers = require('./start-cluster-run-options');
|
|
12
|
+
const { normalizeProviderName } = providerNames;
|
|
13
|
+
const { getProvider } = providers;
|
|
14
|
+
const { detectProvider } = issueProviders;
|
|
15
|
+
const { resolveConfigPath, prepareClusterConfig, loadClusterConfig } = configHelpers;
|
|
16
|
+
const { buildStartOptions, buildTrustedStartOptions, resolveEffectiveRunPlan, detectGitRepoRoot } = runOptionsHelpers;
|
|
92
17
|
function buildTextInput(text) {
|
|
93
|
-
|
|
18
|
+
return { text };
|
|
94
19
|
}
|
|
95
20
|
function buildIssueInput(issue) {
|
|
96
|
-
|
|
21
|
+
return { issue };
|
|
97
22
|
}
|
|
98
23
|
function buildFileInput(file) {
|
|
99
|
-
|
|
24
|
+
return { file };
|
|
100
25
|
}
|
|
101
|
-
|
|
102
26
|
function detectRunInput(inputArg, settings = {}, forceProvider = null) {
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
return buildTextInput(inputArg);
|
|
27
|
+
const isMarkdownFile = /\.(md|markdown)$/i.test(inputArg);
|
|
28
|
+
if (isMarkdownFile) {
|
|
29
|
+
return buildFileInput(inputArg);
|
|
30
|
+
}
|
|
31
|
+
const ProviderClass = detectProvider(inputArg, settings, forceProvider);
|
|
32
|
+
if (ProviderClass) {
|
|
33
|
+
return buildIssueInput(inputArg);
|
|
34
|
+
}
|
|
35
|
+
return buildTextInput(inputArg);
|
|
114
36
|
}
|
|
115
|
-
|
|
116
37
|
const STDIN_MARKER = '-';
|
|
117
|
-
|
|
118
38
|
function isStdinInput(inputArg) {
|
|
119
|
-
|
|
39
|
+
return inputArg === STDIN_MARKER;
|
|
120
40
|
}
|
|
121
|
-
|
|
122
41
|
async function readStdinText(stream = process.stdin) {
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
42
|
+
const chunks = [];
|
|
43
|
+
for await (const chunk of stream) {
|
|
44
|
+
chunks.push(chunk);
|
|
45
|
+
}
|
|
46
|
+
return Buffer.concat(chunks.map((chunk) => (Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk))))
|
|
47
|
+
.toString('utf8')
|
|
48
|
+
.trim();
|
|
130
49
|
}
|
|
131
|
-
|
|
132
50
|
function encodeStdinEnv(text) {
|
|
133
|
-
|
|
51
|
+
return Buffer.from(text, 'utf8').toString('base64');
|
|
134
52
|
}
|
|
135
|
-
|
|
136
53
|
function decodeStdinEnv(value) {
|
|
137
|
-
|
|
54
|
+
return Buffer.from(value, 'base64').toString('utf8');
|
|
138
55
|
}
|
|
139
|
-
|
|
140
56
|
function resolveProviderOverride(options = {}) {
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
}
|
|
145
|
-
const normalized = normalizeProviderName(override);
|
|
146
|
-
if (options.validateProvider) {
|
|
147
|
-
getProvider(normalized);
|
|
148
|
-
}
|
|
149
|
-
return normalized;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
function resolveConfigPath(configName) {
|
|
153
|
-
if (path.isAbsolute(configName) || configName.startsWith('./') || configName.startsWith('../')) {
|
|
154
|
-
return path.resolve(process.cwd(), configName);
|
|
155
|
-
}
|
|
156
|
-
if (configName.endsWith('.json')) {
|
|
157
|
-
return path.join(PACKAGE_ROOT, 'cluster-templates', configName);
|
|
158
|
-
}
|
|
159
|
-
return path.join(PACKAGE_ROOT, 'cluster-templates', `${configName}.json`);
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
function ensureConfigProviderDefaults(config, settings) {
|
|
163
|
-
if (!config.defaultProvider) {
|
|
164
|
-
config.defaultProvider = settings.defaultProvider || getDefaultProviderId();
|
|
165
|
-
}
|
|
166
|
-
config.defaultProvider = normalizeProviderName(config.defaultProvider) || getDefaultProviderId();
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
function applyProviderOverrideToConfig(config, providerOverride, settings) {
|
|
170
|
-
const provider = getProvider(providerOverride);
|
|
171
|
-
const providerSettings = settings.providerSettings?.[providerOverride] || {};
|
|
172
|
-
config.forceProvider = providerOverride;
|
|
173
|
-
config.defaultProvider = providerOverride;
|
|
174
|
-
config.forceLevel = providerSettings.defaultLevel || provider.getDefaultLevel();
|
|
175
|
-
config.defaultLevel = config.forceLevel;
|
|
176
|
-
console.log(chalk.dim(`Provider override: ${providerOverride} (all agents)`));
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
function resolveParameterizedConfigFile(config) {
|
|
180
|
-
if (!config?.params || Object.keys(config.params).length === 0) {
|
|
181
|
-
return config;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
const resolver = new TemplateResolver(path.join(PACKAGE_ROOT, 'cluster-templates'));
|
|
185
|
-
return resolver.resolveTemplate(config, {});
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
function prepareClusterConfig(config, settings = {}, providerOverride) {
|
|
189
|
-
const prepared = resolveParameterizedConfigFile(config);
|
|
190
|
-
ensureConfigProviderDefaults(prepared, settings);
|
|
191
|
-
if (providerOverride) {
|
|
192
|
-
applyProviderOverrideToConfig(prepared, providerOverride, settings);
|
|
193
|
-
}
|
|
194
|
-
return prepared;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
function loadClusterConfig(orchestrator, configPath, settings = {}, providerOverride) {
|
|
198
|
-
return prepareClusterConfig(orchestrator.loadConfig(configPath), settings, providerOverride);
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
const RUN_MODE_KEYS = ['docker', 'worktree', 'pr', 'ship', 'noIsolation', 'isolation'];
|
|
202
|
-
|
|
203
|
-
function hasExplicitRunMode(options) {
|
|
204
|
-
return RUN_MODE_KEYS.some(
|
|
205
|
-
(key) => options[key] === true || (key === 'isolation' && options[key] === false)
|
|
206
|
-
);
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
function mergeRunOptions(options) {
|
|
210
|
-
const envRunOptions = parseRunOptionsEnv();
|
|
211
|
-
if (!envRunOptions) return options;
|
|
212
|
-
if (!hasExplicitRunMode(options)) return { ...envRunOptions, ...options };
|
|
213
|
-
const withoutEnvMode = { ...envRunOptions };
|
|
214
|
-
for (const key of RUN_MODE_KEYS) delete withoutEnvMode[key];
|
|
215
|
-
return { ...withoutEnvMode, ...options };
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
function validateSavedRunModes(settings) {
|
|
219
|
-
const isolation = settings.defaultIsolation || 'none';
|
|
220
|
-
const delivery = settings.defaultDelivery || 'none';
|
|
221
|
-
if (!['none', 'worktree', 'docker'].includes(isolation)) {
|
|
222
|
-
throw new Error(`Invalid saved isolation mode: ${isolation}`);
|
|
223
|
-
}
|
|
224
|
-
if (!['none', 'pr', 'ship'].includes(delivery)) {
|
|
225
|
-
throw new Error(`Invalid saved delivery mode: ${delivery}`);
|
|
226
|
-
}
|
|
227
|
-
return { isolation, delivery };
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
function resolveEffectiveIsolation(options, savedIsolation) {
|
|
231
|
-
if (options.noIsolation === true || options.isolation === false) return 'none';
|
|
232
|
-
if (options.docker === true) return 'docker';
|
|
233
|
-
if (options.worktree === true || options.pr === true || options.ship === true) return 'worktree';
|
|
234
|
-
if (resolveEnvBool(process.env.ZEROSHOT_DOCKER) === true) return 'docker';
|
|
235
|
-
if (resolveEnvBool(process.env.ZEROSHOT_WORKTREE) === true) return 'worktree';
|
|
236
|
-
return savedIsolation;
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
function resolveEffectiveDelivery(options, savedDelivery) {
|
|
240
|
-
if (options.ship === true || options.autoMerge === true) return 'ship';
|
|
241
|
-
if (options.pr === true || resolveEnvBool(process.env.ZEROSHOT_PR) === true) return 'pr';
|
|
242
|
-
return savedDelivery;
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
function resolveEffectiveRunPlan(options = {}, settings = {}) {
|
|
246
|
-
const mergedOptions = mergeRunOptions(options);
|
|
247
|
-
const noIsolation = mergedOptions.noIsolation === true || mergedOptions.isolation === false;
|
|
248
|
-
const conflicts = ['docker', 'worktree', 'pr', 'ship'].filter(
|
|
249
|
-
(key) => mergedOptions[key] === true
|
|
250
|
-
);
|
|
251
|
-
if (noIsolation && conflicts.length > 0) {
|
|
252
|
-
throw new Error(`--no-isolation conflicts with --${conflicts.join(', --')}`);
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
const saved = validateSavedRunModes(settings);
|
|
256
|
-
let isolation = resolveEffectiveIsolation(mergedOptions, saved.isolation);
|
|
257
|
-
const delivery = resolveEffectiveDelivery(mergedOptions, saved.delivery);
|
|
258
|
-
if (delivery !== 'none' && isolation === 'none') {
|
|
259
|
-
if (noIsolation) {
|
|
260
|
-
throw new Error(`--no-isolation conflicts with saved delivery mode "${delivery}"`);
|
|
57
|
+
const override = options.provider || options.envProvider || process.env.ZEROSHOT_PROVIDER;
|
|
58
|
+
if (!override || !override.trim()) {
|
|
59
|
+
return null;
|
|
261
60
|
}
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
pr: delivery === 'pr',
|
|
268
|
-
ship: delivery === 'ship',
|
|
269
|
-
});
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
function resolveMergeQueue(mergedOptions) {
|
|
273
|
-
if (typeof mergedOptions.mergeQueue === 'boolean') {
|
|
274
|
-
return mergedOptions.mergeQueue;
|
|
275
|
-
}
|
|
276
|
-
return resolveEnvBool(process.env.ZEROSHOT_MERGE_QUEUE);
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
function resolvePrBase(mergedOptions) {
|
|
280
|
-
return (
|
|
281
|
-
resolveOptionalString(mergedOptions.prBase) ||
|
|
282
|
-
resolveOptionalString(process.env.ZEROSHOT_PR_BASE) ||
|
|
283
|
-
undefined
|
|
284
|
-
);
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
function resolveCloseIssue(mergedOptions) {
|
|
288
|
-
return (
|
|
289
|
-
resolveCloseIssueMode(mergedOptions.closeIssue) ||
|
|
290
|
-
resolveCloseIssueMode(process.env.ZEROSHOT_CLOSE_ISSUE) ||
|
|
291
|
-
undefined
|
|
292
|
-
);
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
function resolveMounts(mergedOptions) {
|
|
296
|
-
return mergedOptions.mount ? parseMountSpecs(mergedOptions.mount) : undefined;
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
function buildStartOptions({
|
|
300
|
-
clusterId,
|
|
301
|
-
options = {},
|
|
302
|
-
settings = {},
|
|
303
|
-
providerOverride,
|
|
304
|
-
modelOverride,
|
|
305
|
-
forceProvider,
|
|
306
|
-
}) {
|
|
307
|
-
const mergedOptions = mergeRunOptions(options);
|
|
308
|
-
const plan = resolveEffectiveRunPlan(options, settings);
|
|
309
|
-
return buildStartOptionsFromPlan({
|
|
310
|
-
clusterId,
|
|
311
|
-
plan,
|
|
312
|
-
options: mergedOptions,
|
|
313
|
-
settings,
|
|
314
|
-
providerOverride,
|
|
315
|
-
modelOverride,
|
|
316
|
-
forceProvider,
|
|
317
|
-
environment: true,
|
|
318
|
-
});
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
function buildStartOptionsFromPlan({
|
|
322
|
-
clusterId,
|
|
323
|
-
plan,
|
|
324
|
-
options,
|
|
325
|
-
settings,
|
|
326
|
-
providerOverride,
|
|
327
|
-
modelOverride,
|
|
328
|
-
forceProvider,
|
|
329
|
-
preparedWorktree,
|
|
330
|
-
environment,
|
|
331
|
-
}) {
|
|
332
|
-
const targetCwd = environment ? resolveTargetCwd() : options.cwd;
|
|
333
|
-
return Object.freeze({
|
|
334
|
-
clusterId,
|
|
335
|
-
cwd: targetCwd,
|
|
336
|
-
isolation: plan.isolation === 'docker',
|
|
337
|
-
isolationImage: environment
|
|
338
|
-
? firstTruthy(options.dockerImage, process.env.ZEROSHOT_DOCKER_IMAGE)
|
|
339
|
-
: optionalValue(options.dockerImage),
|
|
340
|
-
worktree: plan.isolation === 'worktree',
|
|
341
|
-
preparedWorktree: preparedWorktree || undefined,
|
|
342
|
-
autoPr: plan.delivery !== 'none',
|
|
343
|
-
autoMerge: plan.autoMerge,
|
|
344
|
-
autoPush: environment ? process.env.ZEROSHOT_PUSH === '1' : options.autoPush === true,
|
|
345
|
-
modelOverride: optionalValue(modelOverride),
|
|
346
|
-
providerOverride: optionalValue(providerOverride),
|
|
347
|
-
noMounts: anyTruthy(options.mounts === false, options.noMounts === true),
|
|
348
|
-
mounts: resolveMounts(options),
|
|
349
|
-
containerHome: optionalValue(options.containerHome),
|
|
350
|
-
forceProvider: optionalValue(forceProvider),
|
|
351
|
-
prBase: environment ? resolvePrBase(options) : optionalValue(options.prBase),
|
|
352
|
-
mergeQueue: environment ? resolveMergeQueue(options) : optionalValue(options.mergeQueue),
|
|
353
|
-
closeIssue: environment ? resolveCloseIssue(options) : optionalValue(options.closeIssue),
|
|
354
|
-
ship: plan.delivery === 'ship',
|
|
355
|
-
runMode: runModeFromPlan(plan),
|
|
356
|
-
requiredQualityGates: options.requiredQualityGates,
|
|
357
|
-
settings,
|
|
358
|
-
});
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
/**
|
|
362
|
-
* Build start options from a registry-owned canonical plan. Unlike the CLI
|
|
363
|
-
* builder, this function never reads ZEROSHOT_RUN_OPTIONS or mode-related
|
|
364
|
-
* environment variables. The caller must resolve and validate the deployment
|
|
365
|
-
* profile before invoking it.
|
|
366
|
-
*/
|
|
367
|
-
function buildTrustedStartOptions({
|
|
368
|
-
clusterId,
|
|
369
|
-
plan,
|
|
370
|
-
options = {},
|
|
371
|
-
settings = {},
|
|
372
|
-
providerOverride,
|
|
373
|
-
modelOverride,
|
|
374
|
-
forceProvider,
|
|
375
|
-
}) {
|
|
376
|
-
if (!plan || !Object.isFrozen(plan)) {
|
|
377
|
-
throw new Error('Trusted start requires a frozen canonical run plan');
|
|
378
|
-
}
|
|
379
|
-
const canonical = resolveRunPlan({
|
|
380
|
-
docker: plan.isolation === 'docker',
|
|
381
|
-
worktree: plan.isolation === 'worktree',
|
|
382
|
-
pr: plan.delivery === 'pr',
|
|
383
|
-
ship: plan.delivery === 'ship',
|
|
384
|
-
});
|
|
385
|
-
if (
|
|
386
|
-
canonical.isolation !== plan.isolation ||
|
|
387
|
-
canonical.delivery !== plan.delivery ||
|
|
388
|
-
canonical.autoMerge !== plan.autoMerge
|
|
389
|
-
) {
|
|
390
|
-
throw new Error('Trusted start plan is not canonical');
|
|
391
|
-
}
|
|
392
|
-
if (canonical.isolation === 'none') {
|
|
393
|
-
throw new Error('Trusted worker start requires worktree or docker isolation');
|
|
394
|
-
}
|
|
395
|
-
if (options.preparedWorktree && canonical.isolation !== 'worktree') {
|
|
396
|
-
throw new Error('Prepared worktree requires canonical worktree isolation');
|
|
397
|
-
}
|
|
398
|
-
return buildStartOptionsFromPlan({
|
|
399
|
-
clusterId,
|
|
400
|
-
plan: canonical,
|
|
401
|
-
options,
|
|
402
|
-
settings,
|
|
403
|
-
providerOverride,
|
|
404
|
-
modelOverride,
|
|
405
|
-
forceProvider,
|
|
406
|
-
preparedWorktree: options.preparedWorktree,
|
|
407
|
-
environment: false,
|
|
408
|
-
});
|
|
61
|
+
const normalized = normalizeProviderName(override);
|
|
62
|
+
if (options.validateProvider) {
|
|
63
|
+
getProvider(normalized);
|
|
64
|
+
}
|
|
65
|
+
return normalized;
|
|
409
66
|
}
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
if (config) {
|
|
420
|
-
return config;
|
|
421
|
-
}
|
|
422
|
-
const resolvedPath = configPath || (configName ? resolveConfigPath(configName) : null);
|
|
423
|
-
if (!resolvedPath) {
|
|
424
|
-
throw new Error('configPath or configName is required when config is not provided');
|
|
425
|
-
}
|
|
426
|
-
return loadClusterConfig(orchestrator, resolvedPath, settings, providerOverride);
|
|
67
|
+
function resolveConfigOrThrow({ orchestrator, config, configPath, configName, settings, providerOverride, }) {
|
|
68
|
+
if (config) {
|
|
69
|
+
return config;
|
|
70
|
+
}
|
|
71
|
+
const resolvedPath = configPath || (configName ? resolveConfigPath(configName) : null);
|
|
72
|
+
if (!resolvedPath) {
|
|
73
|
+
throw new Error('configPath or configName is required when config is not provided');
|
|
74
|
+
}
|
|
75
|
+
return loadClusterConfig(orchestrator, resolvedPath, settings, providerOverride);
|
|
427
76
|
}
|
|
428
|
-
|
|
429
77
|
function startClusterWithInput(args, input) {
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
78
|
+
const { orchestrator, config, configPath, configName, settings, providerOverride } = args;
|
|
79
|
+
if (!orchestrator) {
|
|
80
|
+
throw new Error('orchestrator is required');
|
|
81
|
+
}
|
|
82
|
+
const resolvedConfig = resolveConfigOrThrow({
|
|
83
|
+
orchestrator,
|
|
84
|
+
config,
|
|
85
|
+
configPath,
|
|
86
|
+
configName,
|
|
87
|
+
settings,
|
|
88
|
+
providerOverride,
|
|
89
|
+
});
|
|
90
|
+
const startOptions = buildStartOptions({
|
|
91
|
+
clusterId: args.clusterId,
|
|
92
|
+
options: args.options || {},
|
|
93
|
+
settings,
|
|
94
|
+
providerOverride,
|
|
95
|
+
modelOverride: args.modelOverride,
|
|
96
|
+
forceProvider: args.forceProvider,
|
|
97
|
+
});
|
|
98
|
+
return orchestrator.start(resolvedConfig, input, startOptions);
|
|
451
99
|
}
|
|
452
|
-
|
|
453
100
|
function startClusterFromText(args) {
|
|
454
|
-
|
|
101
|
+
return startClusterWithInput(args, buildTextInput(args.text));
|
|
455
102
|
}
|
|
456
|
-
|
|
457
103
|
function startClusterFromIssue(args) {
|
|
458
|
-
|
|
104
|
+
return startClusterWithInput(args, buildIssueInput(args.issue));
|
|
459
105
|
}
|
|
460
|
-
|
|
461
106
|
function startClusterFromFile(args) {
|
|
462
|
-
|
|
107
|
+
return startClusterWithInput(args, buildFileInput(args.file));
|
|
463
108
|
}
|
|
464
|
-
|
|
465
109
|
module.exports = {
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
110
|
+
buildTextInput,
|
|
111
|
+
buildIssueInput,
|
|
112
|
+
buildFileInput,
|
|
113
|
+
detectRunInput,
|
|
114
|
+
isStdinInput,
|
|
115
|
+
readStdinText,
|
|
116
|
+
encodeStdinEnv,
|
|
117
|
+
decodeStdinEnv,
|
|
118
|
+
resolveProviderOverride,
|
|
119
|
+
resolveConfigPath,
|
|
120
|
+
prepareClusterConfig,
|
|
121
|
+
loadClusterConfig,
|
|
122
|
+
buildStartOptions,
|
|
123
|
+
buildTrustedStartOptions,
|
|
124
|
+
resolveEffectiveRunPlan,
|
|
125
|
+
startClusterFromText,
|
|
126
|
+
startClusterFromIssue,
|
|
127
|
+
startClusterFromFile,
|
|
128
|
+
detectGitRepoRoot,
|
|
485
129
|
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider-agnostic stream-json parser for `zeroshot logs`.
|
|
3
|
+
*
|
|
4
|
+
* Provider parsing is delegated to the helper-backed runtime provider facade.
|
|
5
|
+
*/
|
|
6
|
+
type ParsedEvent = Readonly<Record<string, unknown>>;
|
|
7
|
+
type ProviderEvent = ParsedEvent | ParsedEvent[] | null;
|
|
8
|
+
interface ProviderParser {
|
|
9
|
+
parseEvent(line: string): ProviderEvent;
|
|
10
|
+
}
|
|
11
|
+
declare function parseEvent(line: unknown, providerParsers?: readonly ProviderParser[]): ProviderEvent;
|
|
12
|
+
declare function parseChunk(chunk: unknown): ParsedEvent[];
|
|
13
|
+
declare const _default: {
|
|
14
|
+
parseEvent: typeof parseEvent;
|
|
15
|
+
parseChunk: typeof parseChunk;
|
|
16
|
+
};
|
|
17
|
+
export = _default;
|