@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
|
@@ -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.0",
|
|
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.0",
|
|
10
10
|
"hasInstallScript": true,
|
|
11
11
|
"license": "MIT",
|
|
12
12
|
"dependencies": {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@the-open-engine/zeroshot",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.39.0",
|
|
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": [
|
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
|
};
|
|
@@ -849,13 +849,7 @@ function run() {
|
|
|
849
849
|
}
|
|
850
850
|
if (command === 'smoke') {
|
|
851
851
|
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
|
-
}
|
|
852
|
+
smokeExecutable(binaryPath, 'RUST_BINARY_SMOKE_FAILED');
|
|
859
853
|
process.stdout.write(`Rust release executable exited 0: ${binaryPath}\n`);
|
|
860
854
|
return;
|
|
861
855
|
}
|
|
@@ -871,13 +865,7 @@ function run() {
|
|
|
871
865
|
declaration.executable
|
|
872
866
|
);
|
|
873
867
|
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
|
-
}
|
|
868
|
+
smokeExecutable(binaryPath, 'RUST_ARCHIVE_SMOKE_FAILED');
|
|
881
869
|
} finally {
|
|
882
870
|
fs.rmSync(directory, { recursive: true, force: true });
|
|
883
871
|
}
|
|
@@ -903,6 +891,26 @@ function run() {
|
|
|
903
891
|
);
|
|
904
892
|
}
|
|
905
893
|
|
|
894
|
+
const SMOKE_GREETING = Buffer.from('zeroshot release smoke\n');
|
|
895
|
+
|
|
896
|
+
function smokeExecutable(binaryPath, failureCode) {
|
|
897
|
+
const directory = fs.mkdtempSync(path.join(os.tmpdir(), 'zeroshot-rust-executable-smoke-'));
|
|
898
|
+
try {
|
|
899
|
+
fs.writeFileSync(path.join(directory, 'greeting.txt'), SMOKE_GREETING);
|
|
900
|
+
const result = childProcess.spawnSync(binaryPath, ['--native-validate-greeting'], {
|
|
901
|
+
cwd: directory,
|
|
902
|
+
input: SMOKE_GREETING,
|
|
903
|
+
stdio: ['pipe', 'inherit', 'inherit'],
|
|
904
|
+
});
|
|
905
|
+
if (result.error) throw result.error;
|
|
906
|
+
if (result.signal || result.status !== 0) {
|
|
907
|
+
throw new Error(`${failureCode}: status=${result.status} signal=${result.signal || 'none'}`);
|
|
908
|
+
}
|
|
909
|
+
} finally {
|
|
910
|
+
fs.rmSync(directory, { recursive: true, force: true });
|
|
911
|
+
}
|
|
912
|
+
}
|
|
913
|
+
|
|
906
914
|
if (require.main === module) {
|
|
907
915
|
try {
|
|
908
916
|
run();
|
|
@@ -926,6 +934,7 @@ module.exports = {
|
|
|
926
934
|
packageTarget,
|
|
927
935
|
parseChecksumManifest,
|
|
928
936
|
sha256,
|
|
937
|
+
smokeExecutable,
|
|
929
938
|
targetForHost,
|
|
930
939
|
stageVersion,
|
|
931
940
|
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
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
function isRecord(value) {
|
|
3
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
4
|
+
}
|
|
5
|
+
function isStringArray(value) {
|
|
6
|
+
return Array.isArray(value) && value.every((entry) => typeof entry === 'string');
|
|
7
|
+
}
|
|
8
|
+
function isSettingsFacade(value) {
|
|
9
|
+
return (isRecord(value) &&
|
|
10
|
+
typeof value.loadSettings === 'function' &&
|
|
11
|
+
typeof value.validateModelAgainstMax === 'function' &&
|
|
12
|
+
isStringArray(value.VALID_MODELS));
|
|
13
|
+
}
|
|
14
|
+
const rawSettings = require('../../lib/settings');
|
|
15
|
+
if (!isSettingsFacade(rawSettings)) {
|
|
16
|
+
throw new TypeError('settings module must expose model validation');
|
|
17
|
+
}
|
|
18
|
+
const verifiedSettings = rawSettings;
|
|
19
|
+
module.exports = verifiedSettings;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
interface SettingsRecord extends Record<string, unknown> {
|
|
2
|
+
maxModel: string;
|
|
3
|
+
minModel?: string | null;
|
|
4
|
+
strictSchema?: boolean;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
interface SettingsFacade {
|
|
8
|
+
loadSettings(): SettingsRecord;
|
|
9
|
+
validateModelAgainstMax(
|
|
10
|
+
requestedModel: string | null | undefined,
|
|
11
|
+
maxModel: string,
|
|
12
|
+
minModel?: string | null
|
|
13
|
+
): string;
|
|
14
|
+
VALID_MODELS: readonly string[];
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
18
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function isStringArray(value: unknown): value is readonly string[] {
|
|
22
|
+
return Array.isArray(value) && value.every((entry) => typeof entry === 'string');
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function isSettingsFacade(value: unknown): value is SettingsFacade {
|
|
26
|
+
return (
|
|
27
|
+
isRecord(value) &&
|
|
28
|
+
typeof value.loadSettings === 'function' &&
|
|
29
|
+
typeof value.validateModelAgainstMax === 'function' &&
|
|
30
|
+
isStringArray(value.VALID_MODELS)
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const rawSettings: unknown = require('../../lib/settings');
|
|
35
|
+
if (!isSettingsFacade(rawSettings)) {
|
|
36
|
+
throw new TypeError('settings module must expose model validation');
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const verifiedSettings: SettingsFacade = rawSettings;
|
|
40
|
+
|
|
41
|
+
export = verifiedSettings;
|