@the-open-engine/zeroshot 6.38.1 → 6.39.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 +6 -0
- package/cli/event-copy.js +8 -7
- package/cli/event-copy.ts +12 -0
- package/cli/index.js +67 -48
- 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/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 +84 -0
- package/lib/detached-startup.js +232 -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 +41 -0
- package/lib/start-cluster-environment.js +134 -0
- package/lib/start-cluster-run-options.d.ts +54 -0
- package/lib/start-cluster-run-options.js +148 -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 +6 -8
- package/package.json +14 -8
- package/scripts/postinstall.js +27 -0
- package/scripts/rust-distribution.js +36 -45
- 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/agents/git-pusher-template.js +17 -34
- 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-containment.js +191 -0
- package/src/copy-containment.ts +259 -0
- package/src/copy-worker.js +53 -30
- package/src/copy-worker.ts +88 -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/isolation-manager.js +59 -20
- 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 +451 -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 +166 -0
- package/src/legacy-lib/start-cluster-run-options.ts +281 -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 +32 -7
- package/src/pr-body-template.js +71 -0
- 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
|
@@ -1,69 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* Provider-agnostic stream-json parser for `zeroshot logs`.
|
|
3
4
|
*
|
|
4
5
|
* Provider parsing is delegated to the helper-backed runtime provider facade.
|
|
5
6
|
*/
|
|
6
|
-
|
|
7
|
+
// The runtime facade is maintained JavaScript; keep its original emitted require path.
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
7
9
|
const { getProvider, listProviders } = require('../src/providers');
|
|
8
|
-
|
|
9
10
|
function createProviderParsers() {
|
|
10
|
-
|
|
11
|
+
return listProviders().map((name) => getProvider(name));
|
|
11
12
|
}
|
|
12
|
-
|
|
13
13
|
function stripTimestampPrefix(line) {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
14
|
+
if (!line || typeof line !== 'string')
|
|
15
|
+
return '';
|
|
16
|
+
let trimmed = line.trim().replace(/\r$/, '');
|
|
17
|
+
if (!trimmed)
|
|
18
|
+
return '';
|
|
19
|
+
const tsMatch = /^\[(\d{13})\](.*)$/.exec(trimmed);
|
|
20
|
+
if (tsMatch)
|
|
21
|
+
trimmed = (tsMatch[2] || '').trimStart();
|
|
22
|
+
if (!trimmed.startsWith('{') && !trimmed.startsWith('[')) {
|
|
23
|
+
const pipeMatch = /^[^|]{1,40}\|\s*(.*)$/.exec(trimmed);
|
|
24
|
+
if (pipeMatch) {
|
|
25
|
+
const afterPipe = (pipeMatch[1] || '').trimStart();
|
|
26
|
+
if (afterPipe.startsWith('{') || afterPipe.startsWith('['))
|
|
27
|
+
return afterPipe;
|
|
28
|
+
}
|
|
26
29
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
return trimmed;
|
|
30
|
+
return trimmed;
|
|
30
31
|
}
|
|
31
|
-
|
|
32
|
+
// The provider protocol intentionally permits one event, an event batch, or no event.
|
|
33
|
+
// eslint-disable-next-line sonarjs/function-return-type
|
|
32
34
|
function parseEvent(line, providerParsers = createProviderParsers()) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
35
|
+
const content = stripTimestampPrefix(line);
|
|
36
|
+
let result = null;
|
|
37
|
+
if (content) {
|
|
38
|
+
for (const provider of providerParsers) {
|
|
39
|
+
const event = provider.parseEvent(content);
|
|
40
|
+
if (event) {
|
|
41
|
+
result = event;
|
|
42
|
+
break;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return result;
|
|
42
47
|
}
|
|
43
|
-
|
|
44
48
|
function collectEvent(events, event) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
49
|
+
if (!event)
|
|
50
|
+
return;
|
|
51
|
+
if (Array.isArray(event)) {
|
|
52
|
+
events.push(...event);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
events.push(event);
|
|
51
56
|
}
|
|
52
|
-
|
|
53
57
|
function parseChunk(chunk) {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
return events;
|
|
58
|
+
const events = [];
|
|
59
|
+
const lines = String(chunk || '').split('\n');
|
|
60
|
+
const providerParsers = createProviderParsers();
|
|
61
|
+
for (const line of lines) {
|
|
62
|
+
if (!line.trim())
|
|
63
|
+
continue;
|
|
64
|
+
collectEvent(events, parseEvent(line, providerParsers));
|
|
65
|
+
}
|
|
66
|
+
return events;
|
|
64
67
|
}
|
|
65
|
-
|
|
66
|
-
module.exports = {
|
|
67
|
-
parseEvent,
|
|
68
|
-
parseChunk,
|
|
69
|
-
};
|
|
68
|
+
module.exports = { parseEvent, parseChunk };
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@the-open-engine/zeroshot",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.39.1",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@the-open-engine/zeroshot",
|
|
9
|
-
"version": "6.
|
|
9
|
+
"version": "6.39.1",
|
|
10
10
|
"hasInstallScript": true,
|
|
11
11
|
"license": "MIT",
|
|
12
12
|
"dependencies": {
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
"bun": "1.3.14",
|
|
18
18
|
"chalk": "^4.1.2",
|
|
19
19
|
"commander": "^14.0.2",
|
|
20
|
+
"js-yaml": "^4.3.1",
|
|
20
21
|
"node-pty": "^1.1.0",
|
|
21
22
|
"omelette": "^0.4.17",
|
|
22
23
|
"open": "^10.1.0",
|
|
@@ -43,7 +44,6 @@
|
|
|
43
44
|
"eslint-plugin-sonarjs": "^3.0.5",
|
|
44
45
|
"eslint-plugin-unused-imports": "^4.3.0",
|
|
45
46
|
"husky": "^9.1.7",
|
|
46
|
-
"js-yaml": "^4.2.0",
|
|
47
47
|
"jscpd": "^3.5.10",
|
|
48
48
|
"lint-staged": "^16.2.7",
|
|
49
49
|
"mocha": "^11.7.5",
|
|
@@ -5155,7 +5155,6 @@
|
|
|
5155
5155
|
"version": "2.0.1",
|
|
5156
5156
|
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
|
|
5157
5157
|
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
|
|
5158
|
-
"dev": true,
|
|
5159
5158
|
"license": "Python-2.0"
|
|
5160
5159
|
},
|
|
5161
5160
|
"node_modules/argv-formatter": {
|
|
@@ -9177,10 +9176,9 @@
|
|
|
9177
9176
|
"license": "MIT"
|
|
9178
9177
|
},
|
|
9179
9178
|
"node_modules/js-yaml": {
|
|
9180
|
-
"version": "4.
|
|
9181
|
-
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.
|
|
9182
|
-
"integrity": "sha512-
|
|
9183
|
-
"dev": true,
|
|
9179
|
+
"version": "4.3.1",
|
|
9180
|
+
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz",
|
|
9181
|
+
"integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==",
|
|
9184
9182
|
"funding": [
|
|
9185
9183
|
{
|
|
9186
9184
|
"type": "github",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@the-open-engine/zeroshot",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.39.1",
|
|
4
4
|
"description": "Independent executor–verifier orchestration for software changes.",
|
|
5
5
|
"main": "src/orchestrator.js",
|
|
6
6
|
"bin": {
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
]
|
|
30
30
|
},
|
|
31
31
|
"scripts": {
|
|
32
|
-
"pretest": "npm run build:agent-cli-provider && npm run build:target",
|
|
32
|
+
"pretest": "npm run build:agent-cli-provider && npm run build:target && npm run build:legacy-lib && npm run build:legacy-runtime && npm run build:task-lib",
|
|
33
33
|
"test": "node tests/run-tests.js",
|
|
34
34
|
"test:unit": "node tests/run-tests.js",
|
|
35
35
|
"test:e2e": "mocha 'tests/e2e/**/*.test.js' --timeout 120000",
|
|
@@ -40,8 +40,11 @@
|
|
|
40
40
|
"test:coverage:report": "c8 --reporter=html npm run test:unit && echo 'Coverage report generated at coverage/index.html'",
|
|
41
41
|
"postinstall": "node scripts/postinstall.js",
|
|
42
42
|
"start": "node cli/index.js",
|
|
43
|
-
"typecheck": "tsc --noEmit && npm run typecheck:cluster && npm run typecheck:hosted-target && npm run typecheck:hosted-session && npm run typecheck:target",
|
|
43
|
+
"typecheck": "tsc --noEmit && npm run typecheck:legacy-lib && npm run typecheck:legacy-runtime && npm run typecheck:task-lib && npm run typecheck:cluster && npm run typecheck:hosted-target && npm run typecheck:hosted-session && npm run typecheck:target",
|
|
44
44
|
"typecheck:agent-cli-provider": "tsc --project tsconfig.agent-cli-provider.json",
|
|
45
|
+
"typecheck:legacy-lib": "tsc --project tsconfig.legacy-lib.json",
|
|
46
|
+
"typecheck:legacy-runtime": "tsc --project tsconfig.legacy-runtime.json",
|
|
47
|
+
"typecheck:task-lib": "tsc --project tsconfig.task-lib.json",
|
|
45
48
|
"typecheck:hosted-target": "tsc --project tsconfig.hosted-target.json",
|
|
46
49
|
"typecheck:hosted-session": "tsc --project tsconfig.hosted-session.json",
|
|
47
50
|
"test:hosted": "npm run build:cluster && node --test tests/private-hosted-cli/*.test.js && npm run test:hosted-target",
|
|
@@ -51,10 +54,13 @@
|
|
|
51
54
|
"typecheck:cluster": "tsc --project tsconfig.cluster.json",
|
|
52
55
|
"lint:agent-cli-provider": "eslint \"src/agent-cli-provider/**/*.ts\" \"tests/agent-cli-provider/**/*.ts\"",
|
|
53
56
|
"build:agent-cli-provider": "tsc --project tsconfig.agent-cli-provider.build.json",
|
|
57
|
+
"build:legacy-lib": "tsc --project tsconfig.legacy-lib.build.json",
|
|
58
|
+
"build:legacy-runtime": "tsc --project tsconfig.legacy-runtime.build.json",
|
|
59
|
+
"build:task-lib": "tsc --project tsconfig.task-lib.build.json",
|
|
54
60
|
"build:target": "tsc --project tsconfig.target.build.json",
|
|
55
61
|
"build:cluster": "npm run protocol:generate && tsc --project tsconfig.cluster.cjs.json && tsc --project tsconfig.cluster.esm.json && tsc --project tsconfig.hosted-target.cjs.json && tsc --project tsconfig.hosted-target.esm.json && tsc --project tsconfig.hosted-session.cjs.json && tsc --project tsconfig.hosted-session.esm.json && node scripts/build-cluster.js",
|
|
56
62
|
"test:agent-cli-provider": "node --test tests/agent-cli-provider/*.test.js",
|
|
57
|
-
"test:omp": "npm run build:agent-cli-provider && node --test tests/agent-cli-provider/omp-*.test.js && node tests/run-tests.js 'tests/omp-rpc-watcher*.test.js' tests/omp-isolation-capability.test.js tests/omp-docker-auth.test.js tests/omp-docker-fresh-only.test.js",
|
|
63
|
+
"test:omp": "npm run build:agent-cli-provider && npm run build:task-lib && node --test tests/agent-cli-provider/omp-*.test.js && node tests/run-tests.js 'tests/omp-rpc-watcher*.test.js' tests/omp-isolation-capability.test.js tests/omp-docker-auth.test.js tests/omp-docker-fresh-only.test.js",
|
|
58
64
|
"test:providers:live": "npm run build:agent-cli-provider && node scripts/live-provider-smoke.js",
|
|
59
65
|
"check:agent-cli-provider": "npm run check:agent-cli-provider:ci",
|
|
60
66
|
"check:agent-cli-provider:ci": "npm run typecheck:agent-cli-provider && npm run lint:agent-cli-provider && npm run build:agent-cli-provider && npm run test:agent-cli-provider",
|
|
@@ -90,9 +96,9 @@
|
|
|
90
96
|
"release:preflight": "node scripts/release-preflight.js",
|
|
91
97
|
"release:recover": "node scripts/release-recovery.js",
|
|
92
98
|
"release:assert-published": "node scripts/assert-release-published.js",
|
|
93
|
-
"prepack": "npm run build:cluster && npm run build:target",
|
|
99
|
+
"prepack": "npm run build:cluster && npm run build:target && npm run build:legacy-lib && npm run build:legacy-runtime && npm run build:task-lib",
|
|
94
100
|
"prepublishOnly": "npm run lint && npm run typecheck && npm run check:agent-cli-provider:ci",
|
|
95
|
-
"prepare": "npm run build:agent-cli-provider && npm run build:target && husky"
|
|
101
|
+
"prepare": "npm run build:agent-cli-provider && npm run build:target && npm run build:legacy-lib && npm run build:legacy-runtime && npm run build:task-lib && husky"
|
|
96
102
|
},
|
|
97
103
|
"c8": {
|
|
98
104
|
"reporter": [
|
|
@@ -198,6 +204,7 @@
|
|
|
198
204
|
"bun": "1.3.14",
|
|
199
205
|
"chalk": "^4.1.2",
|
|
200
206
|
"commander": "^14.0.2",
|
|
207
|
+
"js-yaml": "^4.3.1",
|
|
201
208
|
"node-pty": "^1.1.0",
|
|
202
209
|
"omelette": "^0.4.17",
|
|
203
210
|
"open": "^10.1.0",
|
|
@@ -223,7 +230,6 @@
|
|
|
223
230
|
"eslint-plugin-sonarjs": "^3.0.5",
|
|
224
231
|
"eslint-plugin-unused-imports": "^4.3.0",
|
|
225
232
|
"husky": "^9.1.7",
|
|
226
|
-
"js-yaml": "^4.2.0",
|
|
227
233
|
"jscpd": "^3.5.10",
|
|
228
234
|
"lint-staged": "^16.2.7",
|
|
229
235
|
"mocha": "^11.7.5",
|
|
@@ -238,7 +244,7 @@
|
|
|
238
244
|
},
|
|
239
245
|
"overrides": {
|
|
240
246
|
"cosmiconfig": {
|
|
241
|
-
"js-yaml": "4.
|
|
247
|
+
"js-yaml": "4.3.1"
|
|
242
248
|
},
|
|
243
249
|
"adm-zip": "0.6.0",
|
|
244
250
|
"sharp": "0.35.3",
|
package/scripts/postinstall.js
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
+
const fs = require('fs');
|
|
3
4
|
const path = require('path');
|
|
4
5
|
const { spawnSync } = require('child_process');
|
|
5
6
|
|
|
7
|
+
const REPOSITORY_ROOT = path.join(__dirname, '..');
|
|
8
|
+
const LEGACY_LIB_OUTPUT = path.join(REPOSITORY_ROOT, 'lib', 'path-check.js');
|
|
9
|
+
const LEGACY_LIB_PROJECT = path.join(REPOSITORY_ROOT, 'tsconfig.legacy-lib.build.json');
|
|
6
10
|
const LIFECYCLE_SCRIPTS = ['fix-node-pty-permissions.js', 'check-path.js'];
|
|
7
11
|
const SETUP_INVITATION = 'Run zeroshot to finish setup.\n';
|
|
8
12
|
|
|
@@ -16,6 +20,22 @@ function shouldPrintSetupInvitation(env) {
|
|
|
16
20
|
return globalInstall && !isTruthyEnvironmentFlag(env.CI);
|
|
17
21
|
}
|
|
18
22
|
|
|
23
|
+
function ensureLegacyLibBuild({
|
|
24
|
+
outputExists = fs.existsSync,
|
|
25
|
+
resolveCompiler = () => require.resolve('typescript/bin/tsc'),
|
|
26
|
+
runCompiler = spawnSync,
|
|
27
|
+
} = {}) {
|
|
28
|
+
if (outputExists(LEGACY_LIB_OUTPUT)) return 0;
|
|
29
|
+
|
|
30
|
+
const result = runCompiler(
|
|
31
|
+
process.execPath,
|
|
32
|
+
[resolveCompiler(), '--project', LEGACY_LIB_PROJECT],
|
|
33
|
+
{ stdio: 'inherit' }
|
|
34
|
+
);
|
|
35
|
+
if (result.error) throw result.error;
|
|
36
|
+
return result.status ?? 1;
|
|
37
|
+
}
|
|
38
|
+
|
|
19
39
|
function runLifecycleScript(scriptName) {
|
|
20
40
|
const result = spawnSync(process.execPath, [path.join(__dirname, scriptName)], {
|
|
21
41
|
stdio: 'inherit',
|
|
@@ -27,8 +47,12 @@ function runLifecycleScript(scriptName) {
|
|
|
27
47
|
function runPostinstall({
|
|
28
48
|
env = process.env,
|
|
29
49
|
stdout = process.stdout,
|
|
50
|
+
ensureBuild = ensureLegacyLibBuild,
|
|
30
51
|
runScript = runLifecycleScript,
|
|
31
52
|
} = {}) {
|
|
53
|
+
const buildStatus = ensureBuild();
|
|
54
|
+
if (buildStatus !== 0) return buildStatus;
|
|
55
|
+
|
|
32
56
|
for (const scriptName of LIFECYCLE_SCRIPTS) {
|
|
33
57
|
const status = runScript(scriptName);
|
|
34
58
|
if (status !== 0) return status;
|
|
@@ -47,8 +71,11 @@ if (require.main === module) {
|
|
|
47
71
|
}
|
|
48
72
|
|
|
49
73
|
module.exports = {
|
|
74
|
+
LEGACY_LIB_OUTPUT,
|
|
75
|
+
LEGACY_LIB_PROJECT,
|
|
50
76
|
LIFECYCLE_SCRIPTS,
|
|
51
77
|
SETUP_INVITATION,
|
|
78
|
+
ensureLegacyLibBuild,
|
|
52
79
|
runPostinstall,
|
|
53
80
|
shouldPrintSetupInvitation,
|
|
54
81
|
};
|
|
@@ -325,10 +325,7 @@ function stagedLockDependencies(cargoLock, workspaceCargoToml) {
|
|
|
325
325
|
|
|
326
326
|
function stageCargoLock(cargoLock, version, workspaceCargoToml) {
|
|
327
327
|
const targetPackage = workspaceLockPackage(cargoLock);
|
|
328
|
-
let stagedPackage = targetPackage.text.replace(
|
|
329
|
-
/^(version = ")[^"]+(")$/m,
|
|
330
|
-
`$1${version}$2`
|
|
331
|
-
);
|
|
328
|
+
let stagedPackage = targetPackage.text.replace(/^(version = ")[^"]+(")$/m, `$1${version}$2`);
|
|
332
329
|
for (const dependency of stagedLockDependencies(cargoLock, workspaceCargoToml)) {
|
|
333
330
|
const dependencyPattern = new RegExp(
|
|
334
331
|
`^(\\s*")${escapeRegExp(dependency.name)}(?: [^"]+)?(",\\r?)$`,
|
|
@@ -339,10 +336,7 @@ function stageCargoLock(cargoLock, version, workspaceCargoToml) {
|
|
|
339
336
|
`RUST_VERSION_STAGE_FAILED: Cargo.lock zeroshot-rust entry has no ${dependency.name} dependency`
|
|
340
337
|
);
|
|
341
338
|
}
|
|
342
|
-
stagedPackage = stagedPackage.replace(
|
|
343
|
-
dependencyPattern,
|
|
344
|
-
`$1${dependency.reference}$2`
|
|
345
|
-
);
|
|
339
|
+
stagedPackage = stagedPackage.replace(dependencyPattern, `$1${dependency.reference}$2`);
|
|
346
340
|
}
|
|
347
341
|
return (
|
|
348
342
|
cargoLock.slice(0, targetPackage.start) +
|
|
@@ -359,10 +353,7 @@ function verifyStagedCargoLock(cargoLock, version, workspaceCargoToml) {
|
|
|
359
353
|
);
|
|
360
354
|
}
|
|
361
355
|
for (const dependency of stagedLockDependencies(cargoLock, workspaceCargoToml)) {
|
|
362
|
-
const dependencyPattern = new RegExp(
|
|
363
|
-
`^\\s*"${escapeRegExp(dependency.reference)}",\\r?$`,
|
|
364
|
-
'm'
|
|
365
|
-
);
|
|
356
|
+
const dependencyPattern = new RegExp(`^\\s*"${escapeRegExp(dependency.reference)}",\\r?$`, 'm');
|
|
366
357
|
if (!dependencyPattern.test(targetPackage.text)) {
|
|
367
358
|
throw new Error(
|
|
368
359
|
`${VERSION_ERROR}: Cargo.lock zeroshot-rust dependency ${dependency.name} is not coupled to ${dependency.version}`
|
|
@@ -400,8 +391,7 @@ function stageVersion(
|
|
|
400
391
|
function checkVersionCoupling(tag, cargoToml, cargoLock, workspaceCargoToml) {
|
|
401
392
|
const useRepositoryFiles = cargoToml === undefined;
|
|
402
393
|
const manifest =
|
|
403
|
-
cargoToml ??
|
|
404
|
-
fs.readFileSync(path.join(repositoryRoot, 'zeroshot-rust', 'Cargo.toml'), 'utf8');
|
|
394
|
+
cargoToml ?? fs.readFileSync(path.join(repositoryRoot, 'zeroshot-rust', 'Cargo.toml'), 'utf8');
|
|
405
395
|
const releaseVersion = normalizeVersion(tag);
|
|
406
396
|
const manifestVersion = cargoVersion(manifest);
|
|
407
397
|
if (releaseVersion !== manifestVersion) {
|
|
@@ -416,8 +406,7 @@ function checkVersionCoupling(tag, cargoToml, cargoLock, workspaceCargoToml) {
|
|
|
416
406
|
: undefined);
|
|
417
407
|
if (lock !== undefined) {
|
|
418
408
|
const workspace =
|
|
419
|
-
workspaceCargoToml ??
|
|
420
|
-
fs.readFileSync(path.join(repositoryRoot, 'Cargo.toml'), 'utf8');
|
|
409
|
+
workspaceCargoToml ?? fs.readFileSync(path.join(repositoryRoot, 'Cargo.toml'), 'utf8');
|
|
421
410
|
verifyStagedCargoLock(lock, releaseVersion, workspace);
|
|
422
411
|
}
|
|
423
412
|
return releaseVersion;
|
|
@@ -483,9 +472,7 @@ const SCRIPT_INSTALL_CONTRACTS = Object.freeze([
|
|
|
483
472
|
]);
|
|
484
473
|
|
|
485
474
|
function invokesRustDistribution(step) {
|
|
486
|
-
return (
|
|
487
|
-
typeof step.run === 'string' && RUST_DISTRIBUTION_INVOCATION.test(step.run)
|
|
488
|
-
);
|
|
475
|
+
return typeof step.run === 'string' && RUST_DISTRIBUTION_INVOCATION.test(step.run);
|
|
489
476
|
}
|
|
490
477
|
|
|
491
478
|
function checkScriptInstall(job, { jobName, installName, command, checkoutRef }) {
|
|
@@ -507,9 +494,7 @@ function checkScriptInstall(job, { jobName, installName, command, checkoutRef })
|
|
|
507
494
|
checkout.with.repository !== '${{ github.repository }}') ||
|
|
508
495
|
checkout.with?.ref !== checkoutRef
|
|
509
496
|
) {
|
|
510
|
-
failIntegrity(
|
|
511
|
-
`${jobName} must checkout expected current repository source at workspace root`
|
|
512
|
-
);
|
|
497
|
+
failIntegrity(`${jobName} must checkout expected current repository source at workspace root`);
|
|
513
498
|
}
|
|
514
499
|
const installIndex = job.steps.indexOf(install);
|
|
515
500
|
const checkoutIndex = job.steps.indexOf(checkout);
|
|
@@ -745,11 +730,12 @@ function hasValidSri(integrity) {
|
|
|
745
730
|
}
|
|
746
731
|
|
|
747
732
|
function checkScriptDependencies(packageManifest, packageLock) {
|
|
748
|
-
|
|
733
|
+
// js-yaml is a runtime dependency: lib/compose-utils.js requires it from the published package.
|
|
734
|
+
const directSpec = packageManifest.dependencies?.['js-yaml'];
|
|
749
735
|
if (typeof directSpec !== 'string' || directSpec.length === 0) {
|
|
750
|
-
failIntegrity('rust-distribution.js requires a direct js-yaml
|
|
736
|
+
failIntegrity('rust-distribution.js requires a direct js-yaml dependency');
|
|
751
737
|
}
|
|
752
|
-
const lockSpec = packageLock.packages?.['']?.
|
|
738
|
+
const lockSpec = packageLock.packages?.['']?.dependencies?.['js-yaml'];
|
|
753
739
|
if (lockSpec !== directSpec) {
|
|
754
740
|
failIntegrity('package-lock root js-yaml spec must match package.json');
|
|
755
741
|
}
|
|
@@ -773,12 +759,8 @@ function checkRepository(
|
|
|
773
759
|
shimTargets = JSON.parse(
|
|
774
760
|
fs.readFileSync(path.join(repositoryRoot, 'npm', 'zeroshot-rust', 'targets.json'), 'utf8')
|
|
775
761
|
),
|
|
776
|
-
packageManifest = JSON.parse(
|
|
777
|
-
|
|
778
|
-
),
|
|
779
|
-
packageLock = JSON.parse(
|
|
780
|
-
fs.readFileSync(path.join(repositoryRoot, 'package-lock.json'), 'utf8')
|
|
781
|
-
)
|
|
762
|
+
packageManifest = JSON.parse(fs.readFileSync(path.join(repositoryRoot, 'package.json'), 'utf8')),
|
|
763
|
+
packageLock = JSON.parse(fs.readFileSync(path.join(repositoryRoot, 'package-lock.json'), 'utf8'))
|
|
782
764
|
) {
|
|
783
765
|
let document;
|
|
784
766
|
try {
|
|
@@ -849,13 +831,7 @@ function run() {
|
|
|
849
831
|
}
|
|
850
832
|
if (command === 'smoke') {
|
|
851
833
|
const binaryPath = path.resolve(argument('binary'));
|
|
852
|
-
|
|
853
|
-
if (result.error) throw result.error;
|
|
854
|
-
if (result.signal || result.status !== 0) {
|
|
855
|
-
throw new Error(
|
|
856
|
-
`RUST_BINARY_SMOKE_FAILED: status=${result.status} signal=${result.signal || 'none'}`
|
|
857
|
-
);
|
|
858
|
-
}
|
|
834
|
+
smokeExecutable(binaryPath, 'RUST_BINARY_SMOKE_FAILED');
|
|
859
835
|
process.stdout.write(`Rust release executable exited 0: ${binaryPath}\n`);
|
|
860
836
|
return;
|
|
861
837
|
}
|
|
@@ -871,13 +847,7 @@ function run() {
|
|
|
871
847
|
declaration.executable
|
|
872
848
|
);
|
|
873
849
|
fs.writeFileSync(binaryPath, executable, { mode: 0o755 });
|
|
874
|
-
|
|
875
|
-
if (result.error) throw result.error;
|
|
876
|
-
if (result.signal || result.status !== 0) {
|
|
877
|
-
throw new Error(
|
|
878
|
-
`RUST_ARCHIVE_SMOKE_FAILED: status=${result.status} signal=${result.signal || 'none'}`
|
|
879
|
-
);
|
|
880
|
-
}
|
|
850
|
+
smokeExecutable(binaryPath, 'RUST_ARCHIVE_SMOKE_FAILED');
|
|
881
851
|
} finally {
|
|
882
852
|
fs.rmSync(directory, { recursive: true, force: true });
|
|
883
853
|
}
|
|
@@ -903,6 +873,26 @@ function run() {
|
|
|
903
873
|
);
|
|
904
874
|
}
|
|
905
875
|
|
|
876
|
+
const SMOKE_GREETING = Buffer.from('zeroshot release smoke\n');
|
|
877
|
+
|
|
878
|
+
function smokeExecutable(binaryPath, failureCode) {
|
|
879
|
+
const directory = fs.mkdtempSync(path.join(os.tmpdir(), 'zeroshot-rust-executable-smoke-'));
|
|
880
|
+
try {
|
|
881
|
+
fs.writeFileSync(path.join(directory, 'greeting.txt'), SMOKE_GREETING);
|
|
882
|
+
const result = childProcess.spawnSync(binaryPath, ['--native-validate-greeting'], {
|
|
883
|
+
cwd: directory,
|
|
884
|
+
input: SMOKE_GREETING,
|
|
885
|
+
stdio: ['pipe', 'inherit', 'inherit'],
|
|
886
|
+
});
|
|
887
|
+
if (result.error) throw result.error;
|
|
888
|
+
if (result.signal || result.status !== 0) {
|
|
889
|
+
throw new Error(`${failureCode}: status=${result.status} signal=${result.signal || 'none'}`);
|
|
890
|
+
}
|
|
891
|
+
} finally {
|
|
892
|
+
fs.rmSync(directory, { recursive: true, force: true });
|
|
893
|
+
}
|
|
894
|
+
}
|
|
895
|
+
|
|
906
896
|
if (require.main === module) {
|
|
907
897
|
try {
|
|
908
898
|
run();
|
|
@@ -926,6 +916,7 @@ module.exports = {
|
|
|
926
916
|
packageTarget,
|
|
927
917
|
parseChecksumManifest,
|
|
928
918
|
sha256,
|
|
919
|
+
smokeExecutable,
|
|
929
920
|
targetForHost,
|
|
930
921
|
stageVersion,
|
|
931
922
|
targets,
|
|
@@ -1,55 +1,45 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
function isCommandProofsModule(value) {
|
|
3
|
+
return (typeof value === 'object' &&
|
|
4
|
+
value !== null &&
|
|
5
|
+
'normalizeCommandProofs' in value &&
|
|
6
|
+
typeof value.normalizeCommandProofs === 'function');
|
|
7
|
+
}
|
|
8
|
+
const commandProofsModule = require('../command-proofs');
|
|
9
|
+
if (!isCommandProofsModule(commandProofsModule)) {
|
|
10
|
+
throw new TypeError('command-proofs must export normalizeCommandProofs');
|
|
11
|
+
}
|
|
12
|
+
const normalizeCommandProofs = commandProofsModule.normalizeCommandProofs;
|
|
3
13
|
function appendProofDetails(lines, proof, index) {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
14
|
+
const scope = proof.scope ? `, scope: ${proof.scope}` : '';
|
|
15
|
+
lines.push(`${index + 1}. id: ${proof.id}, profile: ${proof.profile}${scope}`);
|
|
16
|
+
if (proof.description) {
|
|
17
|
+
lines.push(` description: ${proof.description}`);
|
|
18
|
+
}
|
|
19
|
+
lines.push(` command: ${proof.command}`);
|
|
20
|
+
lines.push(` helper: zeroshot cmdproof check ${proof.id}`);
|
|
11
21
|
}
|
|
12
|
-
|
|
13
22
|
function buildWorkerInstructions(lines) {
|
|
14
|
-
|
|
15
|
-
'',
|
|
16
|
-
'For these exact commands:',
|
|
17
|
-
'- Run `zeroshot cmdproof check <id>` instead of the raw command.',
|
|
18
|
-
'- Treat the helper exit code as the command exit code.',
|
|
19
|
-
'- If you need to mention evidence, include the helper output and the configured command id.',
|
|
20
|
-
''
|
|
21
|
-
);
|
|
23
|
+
lines.push('', 'For these exact commands:', '- Run `zeroshot cmdproof check <id>` instead of the raw command.', '- Treat the helper exit code as the command exit code.', '- If you need to mention evidence, include the helper output and the configured command id.', '');
|
|
22
24
|
}
|
|
23
|
-
|
|
24
25
|
function buildValidatorInstructions(lines) {
|
|
25
|
-
|
|
26
|
-
'',
|
|
27
|
-
'For proof-backed validation:',
|
|
28
|
-
'- Run `zeroshot cmdproof check <id>` before considering the raw command.',
|
|
29
|
-
'- Use the helper output as quality-gate evidence.',
|
|
30
|
-
'- Only run the raw command directly if the helper itself is unavailable.',
|
|
31
|
-
''
|
|
32
|
-
);
|
|
26
|
+
lines.push('', 'For proof-backed validation:', '- Run `zeroshot cmdproof check <id>` before considering the raw command.', '- Use the helper output as quality-gate evidence.', '- Only run the raw command directly if the helper itself is unavailable.', '');
|
|
33
27
|
}
|
|
34
|
-
|
|
35
28
|
function buildCommandProofsSection(config) {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
return lines.join('\n');
|
|
29
|
+
const proofs = normalizeCommandProofs(config.commandProofs);
|
|
30
|
+
if (proofs.length === 0) {
|
|
31
|
+
return '';
|
|
32
|
+
}
|
|
33
|
+
const lines = ['## Reusable Command Proofs', '', 'Configured proof-backed commands:'];
|
|
34
|
+
proofs.forEach((proof, index) => appendProofDetails(lines, proof, index));
|
|
35
|
+
if (config.role === 'validator') {
|
|
36
|
+
buildValidatorInstructions(lines);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
buildWorkerInstructions(lines);
|
|
40
|
+
}
|
|
41
|
+
return lines.join('\n');
|
|
51
42
|
}
|
|
52
|
-
|
|
53
43
|
module.exports = {
|
|
54
|
-
|
|
44
|
+
buildCommandProofsSection,
|
|
55
45
|
};
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
type StringList = string[];
|
|
2
|
+
|
|
3
|
+
interface CommandProof {
|
|
4
|
+
id: string;
|
|
5
|
+
profile: string;
|
|
6
|
+
command: string;
|
|
7
|
+
scope?: string;
|
|
8
|
+
description?: string;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
interface AgentCommandProofConfig {
|
|
12
|
+
role?: string;
|
|
13
|
+
commandProofs?: unknown;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
interface CommandProofsModule {
|
|
17
|
+
normalizeCommandProofs(value: unknown): CommandProof[];
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function isCommandProofsModule(value: unknown): value is CommandProofsModule {
|
|
21
|
+
return (
|
|
22
|
+
typeof value === 'object' &&
|
|
23
|
+
value !== null &&
|
|
24
|
+
'normalizeCommandProofs' in value &&
|
|
25
|
+
typeof value.normalizeCommandProofs === 'function'
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const commandProofsModule: unknown = require('../command-proofs');
|
|
30
|
+
if (!isCommandProofsModule(commandProofsModule)) {
|
|
31
|
+
throw new TypeError('command-proofs must export normalizeCommandProofs');
|
|
32
|
+
}
|
|
33
|
+
const normalizeCommandProofs = commandProofsModule.normalizeCommandProofs;
|
|
34
|
+
|
|
35
|
+
function appendProofDetails(lines: StringList, proof: CommandProof, index: number): void {
|
|
36
|
+
const scope = proof.scope ? `, scope: ${proof.scope}` : '';
|
|
37
|
+
lines.push(`${index + 1}. id: ${proof.id}, profile: ${proof.profile}${scope}`);
|
|
38
|
+
if (proof.description) {
|
|
39
|
+
lines.push(` description: ${proof.description}`);
|
|
40
|
+
}
|
|
41
|
+
lines.push(` command: ${proof.command}`);
|
|
42
|
+
lines.push(` helper: zeroshot cmdproof check ${proof.id}`);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function buildWorkerInstructions(lines: StringList): void {
|
|
46
|
+
lines.push(
|
|
47
|
+
'',
|
|
48
|
+
'For these exact commands:',
|
|
49
|
+
'- Run `zeroshot cmdproof check <id>` instead of the raw command.',
|
|
50
|
+
'- Treat the helper exit code as the command exit code.',
|
|
51
|
+
'- If you need to mention evidence, include the helper output and the configured command id.',
|
|
52
|
+
''
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function buildValidatorInstructions(lines: StringList): void {
|
|
57
|
+
lines.push(
|
|
58
|
+
'',
|
|
59
|
+
'For proof-backed validation:',
|
|
60
|
+
'- Run `zeroshot cmdproof check <id>` before considering the raw command.',
|
|
61
|
+
'- Use the helper output as quality-gate evidence.',
|
|
62
|
+
'- Only run the raw command directly if the helper itself is unavailable.',
|
|
63
|
+
''
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function buildCommandProofsSection(config: AgentCommandProofConfig): string {
|
|
68
|
+
const proofs = normalizeCommandProofs(config.commandProofs);
|
|
69
|
+
if (proofs.length === 0) {
|
|
70
|
+
return '';
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const lines = ['## Reusable Command Proofs', '', 'Configured proof-backed commands:'];
|
|
74
|
+
proofs.forEach((proof, index) => appendProofDetails(lines, proof, index));
|
|
75
|
+
|
|
76
|
+
if (config.role === 'validator') {
|
|
77
|
+
buildValidatorInstructions(lines);
|
|
78
|
+
} else {
|
|
79
|
+
buildWorkerInstructions(lines);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return lines.join('\n');
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export = {
|
|
86
|
+
buildCommandProofsSection,
|
|
87
|
+
};
|