@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
package/src/command-proofs.js
CHANGED
|
@@ -1,169 +1,138 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
const repoSettingsAccess = require("./repo-settings-access");
|
|
3
|
+
const { propertyValue, readRepoSettingsValue, selectOwnProperty } = repoSettingsAccess;
|
|
3
4
|
const PROOF_BLOCK_PATTERN = /^```zeroshot-command-proofs\s*\n([\s\S]*?)^```/m;
|
|
4
|
-
|
|
5
|
-
function hasOwn(value, key) {
|
|
6
|
-
return Object.prototype.hasOwnProperty.call(value || {}, key);
|
|
7
|
-
}
|
|
8
|
-
|
|
9
5
|
function trimString(value) {
|
|
10
|
-
|
|
6
|
+
return typeof value === 'string' && value.trim() ? value.trim() : null;
|
|
11
7
|
}
|
|
12
|
-
|
|
13
8
|
function setOptionalString(target, source, key) {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
9
|
+
const value = trimString(propertyValue(source, key));
|
|
10
|
+
if (value) {
|
|
11
|
+
target[key] = value;
|
|
12
|
+
}
|
|
18
13
|
}
|
|
19
|
-
|
|
20
14
|
function normalizeCommandProof(proof) {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
15
|
+
if (!proof || typeof proof !== 'object') {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
const id = trimString(propertyValue(proof, 'id') || propertyValue(proof, 'name'));
|
|
19
|
+
const profile = trimString(propertyValue(proof, 'profile') || propertyValue(proof, 'proofProfile'));
|
|
20
|
+
const command = trimString(propertyValue(proof, 'command'));
|
|
21
|
+
if (!id || !profile || !command) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
const normalized = { id, profile, command };
|
|
25
|
+
setOptionalString(normalized, proof, 'scope');
|
|
26
|
+
setOptionalString(normalized, proof, 'description');
|
|
27
|
+
return normalized;
|
|
28
|
+
}
|
|
29
|
+
function isCommandProof(proof) {
|
|
30
|
+
return proof !== null;
|
|
36
31
|
}
|
|
37
|
-
|
|
38
32
|
function normalizeCommandProofs(value) {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
33
|
+
if (!Array.isArray(value)) {
|
|
34
|
+
return [];
|
|
35
|
+
}
|
|
36
|
+
return value.map(normalizeCommandProof).filter(isCommandProof);
|
|
37
|
+
}
|
|
38
|
+
function errorMessage(error) {
|
|
39
|
+
return error instanceof Error ? error.message : String(error);
|
|
43
40
|
}
|
|
44
|
-
|
|
45
41
|
function parseCommandProofsFromText(text) {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
return normalizeCommandProofs(parsed);
|
|
42
|
+
if (typeof text !== 'string' || text.trim() === '') {
|
|
43
|
+
return [];
|
|
44
|
+
}
|
|
45
|
+
const match = PROOF_BLOCK_PATTERN.exec(text);
|
|
46
|
+
const payload = match?.[1];
|
|
47
|
+
if (payload === undefined) {
|
|
48
|
+
return [];
|
|
49
|
+
}
|
|
50
|
+
let parsed;
|
|
51
|
+
try {
|
|
52
|
+
parsed = JSON.parse(payload);
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
throw new Error(`Invalid zeroshot-command-proofs JSON: ${errorMessage(error)}`);
|
|
56
|
+
}
|
|
57
|
+
return normalizeCommandProofs(parsed);
|
|
63
58
|
}
|
|
64
|
-
|
|
65
59
|
function mergeCommandProofs(...sources) {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
60
|
+
const byId = new Map();
|
|
61
|
+
const order = [];
|
|
62
|
+
for (const source of sources) {
|
|
63
|
+
for (const proof of normalizeCommandProofs(source)) {
|
|
64
|
+
if (!byId.has(proof.id)) {
|
|
65
|
+
order.push(proof.id);
|
|
66
|
+
}
|
|
67
|
+
byId.set(proof.id, proof);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
const merged = [];
|
|
71
|
+
for (const id of order) {
|
|
72
|
+
const proof = byId.get(id);
|
|
73
|
+
if (proof) {
|
|
74
|
+
merged.push(proof);
|
|
75
|
+
}
|
|
75
76
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
return order.map((id) => byId.get(id));
|
|
77
|
+
return merged;
|
|
79
78
|
}
|
|
80
|
-
|
|
81
79
|
function commandProofToQualityGate(proof) {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
return gate;
|
|
80
|
+
const normalized = normalizeCommandProof(proof);
|
|
81
|
+
if (!normalized) {
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
const gate = {
|
|
85
|
+
id: normalized.id,
|
|
86
|
+
profile: normalized.profile,
|
|
87
|
+
command: normalized.command,
|
|
88
|
+
commandProof: true,
|
|
89
|
+
};
|
|
90
|
+
setOptionalString(gate, normalized, 'scope');
|
|
91
|
+
setOptionalString(gate, normalized, 'description');
|
|
92
|
+
return gate;
|
|
96
93
|
}
|
|
97
|
-
|
|
98
94
|
function getCommandProofSource(options, repoSettings) {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
const settingsShip = repoSettings?.ship;
|
|
108
|
-
if (settingsShip && typeof settingsShip === 'object' && hasOwn(settingsShip, 'commandProofs')) {
|
|
109
|
-
return settingsShip.commandProofs;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
if (hasOwn(repoSettings, 'commandProofs')) {
|
|
113
|
-
return repoSettings.commandProofs;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
return [];
|
|
95
|
+
const source = selectOwnProperty('commandProofs', [
|
|
96
|
+
options,
|
|
97
|
+
propertyValue(options, 'ship'),
|
|
98
|
+
propertyValue(repoSettings, 'ship'),
|
|
99
|
+
repoSettings,
|
|
100
|
+
]);
|
|
101
|
+
return source === undefined ? [] : source;
|
|
117
102
|
}
|
|
118
|
-
|
|
119
103
|
function getClusterCommandProofSource(config, options) {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
if (config?.ship && typeof config.ship === 'object' && hasOwn(config.ship, 'commandProofs')) {
|
|
129
|
-
return config.ship.commandProofs;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
if (hasOwn(config, 'commandProofs')) {
|
|
133
|
-
return config.commandProofs;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
return undefined;
|
|
104
|
+
return selectOwnProperty('commandProofs', [
|
|
105
|
+
options,
|
|
106
|
+
propertyValue(options, 'ship'),
|
|
107
|
+
propertyValue(config, 'ship'),
|
|
108
|
+
config,
|
|
109
|
+
]);
|
|
137
110
|
}
|
|
138
|
-
|
|
139
111
|
function resolveConfiguredCommandProofs(config = {}, options = {}) {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
const repoSettings = repoSettingsResult.settings || {};
|
|
147
|
-
return normalizeCommandProofs(getCommandProofSource(options, repoSettings));
|
|
112
|
+
const configuredSource = getClusterCommandProofSource(config, options);
|
|
113
|
+
if (configuredSource !== undefined) {
|
|
114
|
+
return normalizeCommandProofs(configuredSource);
|
|
115
|
+
}
|
|
116
|
+
const repoSettings = readRepoSettingsValue(options.cwd || process.cwd());
|
|
117
|
+
return normalizeCommandProofs(getCommandProofSource(options, repoSettings));
|
|
148
118
|
}
|
|
149
|
-
|
|
150
119
|
function resolveClusterCommandProofs(config = {}, options = {}, inputText = '') {
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
120
|
+
return mergeCommandProofs(resolveConfiguredCommandProofs(config, options), parseCommandProofsFromText(inputText));
|
|
121
|
+
}
|
|
122
|
+
function isCommandProofQualityGate(gate) {
|
|
123
|
+
return gate !== null;
|
|
155
124
|
}
|
|
156
|
-
|
|
157
125
|
function commandProofsToQualityGates(commandProofs) {
|
|
158
|
-
|
|
126
|
+
return normalizeCommandProofs(commandProofs)
|
|
127
|
+
.map(commandProofToQualityGate)
|
|
128
|
+
.filter(isCommandProofQualityGate);
|
|
159
129
|
}
|
|
160
|
-
|
|
161
130
|
module.exports = {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
131
|
+
commandProofToQualityGate,
|
|
132
|
+
commandProofsToQualityGates,
|
|
133
|
+
mergeCommandProofs,
|
|
134
|
+
normalizeCommandProofs,
|
|
135
|
+
parseCommandProofsFromText,
|
|
136
|
+
resolveClusterCommandProofs,
|
|
137
|
+
resolveConfiguredCommandProofs,
|
|
169
138
|
};
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import repoSettingsAccess = require('./repo-settings-access');
|
|
2
|
+
|
|
3
|
+
type ProofStringField = 'scope' | 'description';
|
|
4
|
+
|
|
5
|
+
interface CommandProof {
|
|
6
|
+
id: string;
|
|
7
|
+
profile: string;
|
|
8
|
+
command: string;
|
|
9
|
+
scope?: string;
|
|
10
|
+
description?: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
interface CommandProofQualityGate {
|
|
14
|
+
id: string;
|
|
15
|
+
profile: string;
|
|
16
|
+
command: string;
|
|
17
|
+
commandProof: true;
|
|
18
|
+
scope?: string;
|
|
19
|
+
description?: string;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
interface CommandProofOptions {
|
|
23
|
+
cwd?: string;
|
|
24
|
+
commandProofs?: unknown;
|
|
25
|
+
ship?: unknown;
|
|
26
|
+
[key: string]: unknown;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
interface CommandProofConfig {
|
|
30
|
+
commandProofs?: unknown;
|
|
31
|
+
ship?: unknown;
|
|
32
|
+
[key: string]: unknown;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const { propertyValue, readRepoSettingsValue, selectOwnProperty } = repoSettingsAccess;
|
|
36
|
+
|
|
37
|
+
const PROOF_BLOCK_PATTERN = /^```zeroshot-command-proofs\s*\n([\s\S]*?)^```/m;
|
|
38
|
+
|
|
39
|
+
function trimString(value: unknown): string | null {
|
|
40
|
+
return typeof value === 'string' && value.trim() ? value.trim() : null;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function setOptionalString(
|
|
44
|
+
target: CommandProof | CommandProofQualityGate,
|
|
45
|
+
source: unknown,
|
|
46
|
+
key: ProofStringField
|
|
47
|
+
): void {
|
|
48
|
+
const value = trimString(propertyValue(source, key));
|
|
49
|
+
if (value) {
|
|
50
|
+
target[key] = value;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function normalizeCommandProof(proof: unknown): CommandProof | null {
|
|
55
|
+
if (!proof || typeof proof !== 'object') {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const id = trimString(propertyValue(proof, 'id') || propertyValue(proof, 'name'));
|
|
60
|
+
const profile = trimString(
|
|
61
|
+
propertyValue(proof, 'profile') || propertyValue(proof, 'proofProfile')
|
|
62
|
+
);
|
|
63
|
+
const command = trimString(propertyValue(proof, 'command'));
|
|
64
|
+
if (!id || !profile || !command) {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const normalized: CommandProof = { id, profile, command };
|
|
69
|
+
setOptionalString(normalized, proof, 'scope');
|
|
70
|
+
setOptionalString(normalized, proof, 'description');
|
|
71
|
+
return normalized;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function isCommandProof(proof: CommandProof | null): proof is CommandProof {
|
|
75
|
+
return proof !== null;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function normalizeCommandProofs(value: unknown): CommandProof[] {
|
|
79
|
+
if (!Array.isArray(value)) {
|
|
80
|
+
return [];
|
|
81
|
+
}
|
|
82
|
+
return value.map(normalizeCommandProof).filter(isCommandProof);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function errorMessage(error: unknown): string {
|
|
86
|
+
return error instanceof Error ? error.message : String(error);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function parseCommandProofsFromText(text: unknown): CommandProof[] {
|
|
90
|
+
if (typeof text !== 'string' || text.trim() === '') {
|
|
91
|
+
return [];
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const match = PROOF_BLOCK_PATTERN.exec(text);
|
|
95
|
+
const payload = match?.[1];
|
|
96
|
+
if (payload === undefined) {
|
|
97
|
+
return [];
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
let parsed: unknown;
|
|
101
|
+
try {
|
|
102
|
+
parsed = JSON.parse(payload);
|
|
103
|
+
} catch (error) {
|
|
104
|
+
throw new Error(`Invalid zeroshot-command-proofs JSON: ${errorMessage(error)}`);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
return normalizeCommandProofs(parsed);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
function mergeCommandProofs(...sources: unknown[]): CommandProof[] {
|
|
111
|
+
const byId = new Map<string, CommandProof>();
|
|
112
|
+
const order: string[] = [];
|
|
113
|
+
|
|
114
|
+
for (const source of sources) {
|
|
115
|
+
for (const proof of normalizeCommandProofs(source)) {
|
|
116
|
+
if (!byId.has(proof.id)) {
|
|
117
|
+
order.push(proof.id);
|
|
118
|
+
}
|
|
119
|
+
byId.set(proof.id, proof);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
const merged: CommandProof[] = [];
|
|
124
|
+
for (const id of order) {
|
|
125
|
+
const proof = byId.get(id);
|
|
126
|
+
if (proof) {
|
|
127
|
+
merged.push(proof);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return merged;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
function commandProofToQualityGate(proof: unknown): CommandProofQualityGate | null {
|
|
134
|
+
const normalized = normalizeCommandProof(proof);
|
|
135
|
+
if (!normalized) {
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
const gate: CommandProofQualityGate = {
|
|
140
|
+
id: normalized.id,
|
|
141
|
+
profile: normalized.profile,
|
|
142
|
+
command: normalized.command,
|
|
143
|
+
commandProof: true,
|
|
144
|
+
};
|
|
145
|
+
setOptionalString(gate, normalized, 'scope');
|
|
146
|
+
setOptionalString(gate, normalized, 'description');
|
|
147
|
+
return gate;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
function getCommandProofSource(options: CommandProofOptions, repoSettings: unknown): unknown {
|
|
151
|
+
const source = selectOwnProperty('commandProofs', [
|
|
152
|
+
options,
|
|
153
|
+
propertyValue(options, 'ship'),
|
|
154
|
+
propertyValue(repoSettings, 'ship'),
|
|
155
|
+
repoSettings,
|
|
156
|
+
]);
|
|
157
|
+
return source === undefined ? [] : source;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
function getClusterCommandProofSource(
|
|
161
|
+
config: CommandProofConfig,
|
|
162
|
+
options: CommandProofOptions
|
|
163
|
+
): unknown {
|
|
164
|
+
return selectOwnProperty('commandProofs', [
|
|
165
|
+
options,
|
|
166
|
+
propertyValue(options, 'ship'),
|
|
167
|
+
propertyValue(config, 'ship'),
|
|
168
|
+
config,
|
|
169
|
+
]);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
function resolveConfiguredCommandProofs(
|
|
173
|
+
config: CommandProofConfig = {},
|
|
174
|
+
options: CommandProofOptions = {}
|
|
175
|
+
): CommandProof[] {
|
|
176
|
+
const configuredSource = getClusterCommandProofSource(config, options);
|
|
177
|
+
if (configuredSource !== undefined) {
|
|
178
|
+
return normalizeCommandProofs(configuredSource);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
const repoSettings = readRepoSettingsValue(options.cwd || process.cwd());
|
|
182
|
+
return normalizeCommandProofs(getCommandProofSource(options, repoSettings));
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
function resolveClusterCommandProofs(
|
|
186
|
+
config: CommandProofConfig = {},
|
|
187
|
+
options: CommandProofOptions = {},
|
|
188
|
+
inputText: unknown = ''
|
|
189
|
+
): CommandProof[] {
|
|
190
|
+
return mergeCommandProofs(
|
|
191
|
+
resolveConfiguredCommandProofs(config, options),
|
|
192
|
+
parseCommandProofsFromText(inputText)
|
|
193
|
+
);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
function isCommandProofQualityGate(
|
|
197
|
+
gate: CommandProofQualityGate | null
|
|
198
|
+
): gate is CommandProofQualityGate {
|
|
199
|
+
return gate !== null;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
function commandProofsToQualityGates(commandProofs: unknown): CommandProofQualityGate[] {
|
|
203
|
+
return normalizeCommandProofs(commandProofs)
|
|
204
|
+
.map(commandProofToQualityGate)
|
|
205
|
+
.filter(isCommandProofQualityGate);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
export = {
|
|
209
|
+
commandProofToQualityGate,
|
|
210
|
+
commandProofsToQualityGates,
|
|
211
|
+
mergeCommandProofs,
|
|
212
|
+
normalizeCommandProofs,
|
|
213
|
+
parseCommandProofsFromText,
|
|
214
|
+
resolveClusterCommandProofs,
|
|
215
|
+
resolveConfiguredCommandProofs,
|
|
216
|
+
};
|
package/src/config-router.js
CHANGED
|
@@ -1,89 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* Config Router - Maps 2D classification to parameterized templates
|
|
3
4
|
*
|
|
4
5
|
* Single source of truth for: Complexity × TaskType → { base, params }
|
|
5
6
|
* Used by both logic-engine.js (trigger evaluation) and agent-wrapper.js (transform scripts)
|
|
6
7
|
*/
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
function isAgentConfigModule(value) {
|
|
9
|
+
return (typeof value === 'object' &&
|
|
10
|
+
value !== null &&
|
|
11
|
+
'DEFAULT_MAX_ITERATIONS' in value &&
|
|
12
|
+
typeof value.DEFAULT_MAX_ITERATIONS === 'number');
|
|
13
|
+
}
|
|
14
|
+
const agentConfig = require('./agent/agent-config');
|
|
15
|
+
if (!isAgentConfigModule(agentConfig)) {
|
|
16
|
+
throw new TypeError('agent-config must export a numeric DEFAULT_MAX_ITERATIONS');
|
|
17
|
+
}
|
|
18
|
+
const { DEFAULT_MAX_ITERATIONS } = agentConfig;
|
|
10
19
|
/**
|
|
11
20
|
* Get cluster config based on complexity and task type
|
|
12
|
-
* @param {string} complexity - TRIVIAL, SIMPLE, STANDARD, CRITICAL
|
|
13
|
-
* @param {string} taskType - INQUIRY, TASK, DEBUG
|
|
14
|
-
* @param {object} [options]
|
|
15
|
-
* @param {boolean} [options.autoPr] - Whether the cluster will inject git-pusher/PR flow
|
|
16
|
-
* @returns {{ base: string, params: object }}
|
|
17
21
|
*/
|
|
18
22
|
function getConfig(complexity, taskType, options = {}) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
23
|
+
const isPrMode = options.autoPr === true || process.env.ZEROSHOT_PR === '1';
|
|
24
|
+
const getBase = () => {
|
|
25
|
+
if (taskType === 'DEBUG' && complexity !== 'TRIVIAL') {
|
|
26
|
+
return 'debug-workflow';
|
|
27
|
+
}
|
|
28
|
+
if (complexity === 'TRIVIAL' && isPrMode && taskType !== 'INQUIRY') {
|
|
29
|
+
return 'worker-validator';
|
|
30
|
+
}
|
|
31
|
+
if (complexity === 'TRIVIAL') {
|
|
32
|
+
return 'single-worker';
|
|
33
|
+
}
|
|
34
|
+
if (complexity === 'SIMPLE') {
|
|
35
|
+
return 'worker-validator';
|
|
36
|
+
}
|
|
37
|
+
return 'full-workflow';
|
|
38
|
+
};
|
|
39
|
+
const getLevel = (role) => {
|
|
40
|
+
if (complexity === 'CRITICAL' && role === 'planner')
|
|
41
|
+
return 'level3';
|
|
42
|
+
if (complexity === 'TRIVIAL')
|
|
43
|
+
return 'level1';
|
|
44
|
+
return 'level2';
|
|
45
|
+
};
|
|
46
|
+
const getValidatorCount = () => {
|
|
47
|
+
if (complexity === 'TRIVIAL')
|
|
48
|
+
return 0;
|
|
49
|
+
if (complexity === 'SIMPLE')
|
|
50
|
+
return 1;
|
|
51
|
+
if (complexity === 'STANDARD')
|
|
52
|
+
return 2;
|
|
53
|
+
// CRITICAL uses two-stage validation pipeline (validators loaded dynamically via meta-coordinator)
|
|
54
|
+
// Setting validator_count=0 signals that inline validators should be skipped
|
|
55
|
+
if (complexity === 'CRITICAL')
|
|
56
|
+
return 0;
|
|
57
|
+
return 1;
|
|
58
|
+
};
|
|
59
|
+
const getMaxTokens = () => {
|
|
60
|
+
if (complexity === 'TRIVIAL')
|
|
61
|
+
return 50000;
|
|
62
|
+
if (complexity === 'SIMPLE')
|
|
63
|
+
return 100000;
|
|
64
|
+
if (complexity === 'STANDARD')
|
|
65
|
+
return 100000;
|
|
66
|
+
if (complexity === 'CRITICAL')
|
|
67
|
+
return 150000;
|
|
68
|
+
return 100000;
|
|
69
|
+
};
|
|
70
|
+
const base = getBase();
|
|
71
|
+
const params = {
|
|
72
|
+
task_type: taskType,
|
|
73
|
+
complexity,
|
|
74
|
+
max_tokens: getMaxTokens(),
|
|
75
|
+
max_iterations: DEFAULT_MAX_ITERATIONS,
|
|
76
|
+
};
|
|
77
|
+
if (base === 'single-worker') {
|
|
78
|
+
params.worker_level = getLevel('worker');
|
|
24
79
|
}
|
|
25
|
-
if (
|
|
26
|
-
|
|
80
|
+
else if (base === 'worker-validator') {
|
|
81
|
+
params.worker_level = getLevel('worker');
|
|
82
|
+
params.validator_level = getLevel('validator');
|
|
27
83
|
}
|
|
28
|
-
if (
|
|
29
|
-
|
|
84
|
+
else if (base === 'debug-workflow') {
|
|
85
|
+
params.investigator_level = getLevel('planner');
|
|
86
|
+
params.fixer_level = getLevel('worker');
|
|
87
|
+
params.tester_level = getLevel('validator');
|
|
30
88
|
}
|
|
31
|
-
if (
|
|
32
|
-
|
|
89
|
+
else if (base === 'full-workflow') {
|
|
90
|
+
params.planner_level = getLevel('planner');
|
|
91
|
+
params.worker_level = getLevel('worker');
|
|
92
|
+
params.validator_level = getLevel('validator');
|
|
93
|
+
params.validator_count = getValidatorCount();
|
|
33
94
|
}
|
|
34
|
-
return
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
const getLevel = (role) => {
|
|
38
|
-
if (complexity === 'CRITICAL' && role === 'planner') return 'level3';
|
|
39
|
-
if (complexity === 'TRIVIAL') return 'level1';
|
|
40
|
-
return 'level2';
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
const getValidatorCount = () => {
|
|
44
|
-
if (complexity === 'TRIVIAL') return 0;
|
|
45
|
-
if (complexity === 'SIMPLE') return 1;
|
|
46
|
-
if (complexity === 'STANDARD') return 2;
|
|
47
|
-
// CRITICAL uses two-stage validation pipeline (validators loaded dynamically via meta-coordinator)
|
|
48
|
-
// Setting validator_count=0 signals that inline validators should be skipped
|
|
49
|
-
if (complexity === 'CRITICAL') return 0;
|
|
50
|
-
return 1;
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
const getMaxTokens = () => {
|
|
54
|
-
if (complexity === 'TRIVIAL') return 50000;
|
|
55
|
-
if (complexity === 'SIMPLE') return 100000;
|
|
56
|
-
if (complexity === 'STANDARD') return 100000;
|
|
57
|
-
if (complexity === 'CRITICAL') return 150000;
|
|
58
|
-
return 100000;
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
const base = getBase();
|
|
62
|
-
|
|
63
|
-
const params = {
|
|
64
|
-
task_type: taskType,
|
|
65
|
-
complexity,
|
|
66
|
-
max_tokens: getMaxTokens(),
|
|
67
|
-
max_iterations: DEFAULT_MAX_ITERATIONS,
|
|
68
|
-
};
|
|
69
|
-
|
|
70
|
-
if (base === 'single-worker') {
|
|
71
|
-
params.worker_level = getLevel('worker');
|
|
72
|
-
} else if (base === 'worker-validator') {
|
|
73
|
-
params.worker_level = getLevel('worker');
|
|
74
|
-
params.validator_level = getLevel('validator');
|
|
75
|
-
} else if (base === 'debug-workflow') {
|
|
76
|
-
params.investigator_level = getLevel('planner');
|
|
77
|
-
params.fixer_level = getLevel('worker');
|
|
78
|
-
params.tester_level = getLevel('validator');
|
|
79
|
-
} else if (base === 'full-workflow') {
|
|
80
|
-
params.planner_level = getLevel('planner');
|
|
81
|
-
params.worker_level = getLevel('worker');
|
|
82
|
-
params.validator_level = getLevel('validator');
|
|
83
|
-
params.validator_count = getValidatorCount();
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
return { base, params };
|
|
95
|
+
return { base, params };
|
|
87
96
|
}
|
|
88
|
-
|
|
89
97
|
module.exports = { getConfig };
|