@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
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
const STRUCTURED_OUTPUT_INVALID_CODE = 'STRUCTURED_OUTPUT_INVALID';
|
|
2
|
+
|
|
3
|
+
interface ValidationFailure {
|
|
4
|
+
readonly error?: unknown;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
interface RecoveryResult {
|
|
8
|
+
readonly status?: string;
|
|
9
|
+
readonly attempts?: number;
|
|
10
|
+
readonly lastError?: unknown;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
interface StructuredOutputAgent {
|
|
14
|
+
readonly id: string;
|
|
15
|
+
readonly role: string;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
interface StructuredOutputFailure {
|
|
19
|
+
readonly message: string;
|
|
20
|
+
readonly code: unknown;
|
|
21
|
+
readonly details?: unknown;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function createStructuredOutputInvalidError(
|
|
25
|
+
message: string,
|
|
26
|
+
kind: unknown,
|
|
27
|
+
validation: ValidationFailure | null = null,
|
|
28
|
+
recovery: RecoveryResult | null = null
|
|
29
|
+
): Error & {
|
|
30
|
+
code: typeof STRUCTURED_OUTPUT_INVALID_CODE;
|
|
31
|
+
details: {
|
|
32
|
+
kind: unknown;
|
|
33
|
+
validationError: unknown;
|
|
34
|
+
recoveryAttempts: number | undefined;
|
|
35
|
+
recoveryError: unknown;
|
|
36
|
+
};
|
|
37
|
+
} {
|
|
38
|
+
const properties: {
|
|
39
|
+
code: typeof STRUCTURED_OUTPUT_INVALID_CODE;
|
|
40
|
+
details: {
|
|
41
|
+
kind: unknown;
|
|
42
|
+
validationError: unknown;
|
|
43
|
+
recoveryAttempts: number | undefined;
|
|
44
|
+
recoveryError: unknown;
|
|
45
|
+
};
|
|
46
|
+
} = {
|
|
47
|
+
code: STRUCTURED_OUTPUT_INVALID_CODE,
|
|
48
|
+
details: {
|
|
49
|
+
kind,
|
|
50
|
+
validationError: validation?.error ?? null,
|
|
51
|
+
recoveryAttempts: recovery?.status === 'exhausted' ? recovery.attempts : 0,
|
|
52
|
+
recoveryError: recovery?.status === 'exhausted' ? recovery.lastError : null,
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
return Object.assign(new Error(message), properties);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function isStructuredOutputInvalidError(error: unknown): boolean {
|
|
59
|
+
if ((typeof error !== 'object' || error === null) && typeof error !== 'function') {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
return 'code' in error && error.code === STRUCTURED_OUTPUT_INVALID_CODE;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function buildStructuredOutputClusterFailure(
|
|
66
|
+
agent: StructuredOutputAgent,
|
|
67
|
+
error: StructuredOutputFailure
|
|
68
|
+
): {
|
|
69
|
+
topic: 'CLUSTER_FAILED';
|
|
70
|
+
receiver: 'broadcast';
|
|
71
|
+
content: {
|
|
72
|
+
text: string;
|
|
73
|
+
data: {
|
|
74
|
+
reason: 'structured_output_invalid';
|
|
75
|
+
agentId: string;
|
|
76
|
+
role: string;
|
|
77
|
+
code: unknown;
|
|
78
|
+
details: unknown;
|
|
79
|
+
error: string;
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
} {
|
|
83
|
+
return {
|
|
84
|
+
topic: 'CLUSTER_FAILED',
|
|
85
|
+
receiver: 'broadcast',
|
|
86
|
+
content: {
|
|
87
|
+
text: `Cluster failed: structured output is invalid for ${agent.id} - ${error.message}`,
|
|
88
|
+
data: {
|
|
89
|
+
reason: 'structured_output_invalid',
|
|
90
|
+
agentId: agent.id,
|
|
91
|
+
role: agent.role,
|
|
92
|
+
code: error.code,
|
|
93
|
+
details: error.details ?? null,
|
|
94
|
+
error: error.message,
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export = {
|
|
101
|
+
STRUCTURED_OUTPUT_INVALID_CODE,
|
|
102
|
+
createStructuredOutputInvalidError,
|
|
103
|
+
isStructuredOutputInvalidError,
|
|
104
|
+
buildStructuredOutputClusterFailure,
|
|
105
|
+
};
|
|
@@ -1,35 +1,35 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
const PLATFORM_MISMATCH_REGEX = /EBADPLATFORM|Unsupported platform|darwin-arm64|linux-x64|@esbuild\/linux-x64/i;
|
|
3
|
+
function isValidationCriterion(value) {
|
|
4
|
+
return (typeof value === 'object' && value !== null) || typeof value === 'function';
|
|
5
|
+
}
|
|
4
6
|
function isPlatformMismatchReason(reason) {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
+
if (!reason)
|
|
8
|
+
return false;
|
|
9
|
+
return PLATFORM_MISMATCH_REGEX.test(String(reason));
|
|
7
10
|
}
|
|
8
|
-
|
|
9
11
|
function findPlatformMismatchReason(result = {}) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
12
|
+
const criteriaResults = result.criteriaResults;
|
|
13
|
+
if (Array.isArray(criteriaResults)) {
|
|
14
|
+
for (const criteria of criteriaResults) {
|
|
15
|
+
if (!isValidationCriterion(criteria) || criteria.status !== 'CANNOT_VALIDATE')
|
|
16
|
+
continue;
|
|
17
|
+
if (isPlatformMismatchReason(criteria.reason)) {
|
|
18
|
+
return String(criteria.reason);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
17
21
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
22
|
+
const errors = result.errors;
|
|
23
|
+
if (Array.isArray(errors)) {
|
|
24
|
+
for (const error of errors) {
|
|
25
|
+
if (isPlatformMismatchReason(error)) {
|
|
26
|
+
return String(error);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
26
29
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
return null;
|
|
30
|
+
return null;
|
|
30
31
|
}
|
|
31
|
-
|
|
32
32
|
module.exports = {
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
isPlatformMismatchReason,
|
|
34
|
+
findPlatformMismatchReason,
|
|
35
35
|
};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
const PLATFORM_MISMATCH_REGEX =
|
|
2
|
+
/EBADPLATFORM|Unsupported platform|darwin-arm64|linux-x64|@esbuild\/linux-x64/i;
|
|
3
|
+
|
|
4
|
+
interface ValidationCriterion {
|
|
5
|
+
readonly status?: unknown;
|
|
6
|
+
readonly reason?: unknown;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
interface ValidationResult {
|
|
10
|
+
readonly criteriaResults?: unknown;
|
|
11
|
+
readonly errors?: unknown;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function isValidationCriterion(value: unknown): value is ValidationCriterion {
|
|
15
|
+
return (typeof value === 'object' && value !== null) || typeof value === 'function';
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function isPlatformMismatchReason(reason: unknown): boolean {
|
|
19
|
+
if (!reason) return false;
|
|
20
|
+
return PLATFORM_MISMATCH_REGEX.test(String(reason));
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function findPlatformMismatchReason(result: ValidationResult = {}): string | null {
|
|
24
|
+
const criteriaResults = result.criteriaResults;
|
|
25
|
+
if (Array.isArray(criteriaResults)) {
|
|
26
|
+
for (const criteria of criteriaResults) {
|
|
27
|
+
if (!isValidationCriterion(criteria) || criteria.status !== 'CANNOT_VALIDATE') continue;
|
|
28
|
+
if (isPlatformMismatchReason(criteria.reason)) {
|
|
29
|
+
return String(criteria.reason);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const errors = result.errors;
|
|
35
|
+
if (Array.isArray(errors)) {
|
|
36
|
+
for (const error of errors) {
|
|
37
|
+
if (isPlatformMismatchReason(error)) {
|
|
38
|
+
return String(error);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export = {
|
|
47
|
+
isPlatformMismatchReason,
|
|
48
|
+
findPlatformMismatchReason,
|
|
49
|
+
};
|
|
@@ -277,6 +277,7 @@ return hasSufficientEvidence;`;
|
|
|
277
277
|
const { readRepoSettings } = require('../../lib/repo-settings');
|
|
278
278
|
const { normalizeGitRemoteName, quoteShellArgument } = require('../../lib/git-remote-utils');
|
|
279
279
|
const { resolveRequiredQualityGates } = require('../quality-gates');
|
|
280
|
+
const { renderPullRequestBody, resolveIssueContext } = require('../pr-body-template');
|
|
280
281
|
|
|
281
282
|
function getSafeBranchName(value) {
|
|
282
283
|
if (typeof value !== 'string') {
|
|
@@ -314,35 +315,6 @@ function normalizeCloseIssueMode(value) {
|
|
|
314
315
|
return null;
|
|
315
316
|
}
|
|
316
317
|
|
|
317
|
-
function normalizeIssueNumber(value) {
|
|
318
|
-
const candidate = typeof value === 'number' ? String(value) : value;
|
|
319
|
-
if (typeof candidate !== 'string') return 'unknown';
|
|
320
|
-
const trimmed = candidate.trim();
|
|
321
|
-
return /^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(trimmed) ? trimmed : 'unknown';
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
function normalizeIssueTitle(value) {
|
|
325
|
-
if (typeof value !== 'string' || value.trim() === '') return 'Implementation';
|
|
326
|
-
const normalized = [...value]
|
|
327
|
-
.map((character) => {
|
|
328
|
-
const codePoint = character.codePointAt(0);
|
|
329
|
-
return codePoint < 0x20 || codePoint === 0x7f ? ' ' : character;
|
|
330
|
-
})
|
|
331
|
-
.join('')
|
|
332
|
-
.trim();
|
|
333
|
-
return normalized || 'Implementation';
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
function resolveIssueContext(options) {
|
|
337
|
-
const issueNumber = normalizeIssueNumber(options.issueNumber);
|
|
338
|
-
const issueTitle = normalizeIssueTitle(options.issueTitle);
|
|
339
|
-
const issueReference =
|
|
340
|
-
options.includeIssueReference === false || issueNumber === 'unknown'
|
|
341
|
-
? ''
|
|
342
|
-
: `Closes #${issueNumber}`;
|
|
343
|
-
return { issueNumber, issueTitle, issueReference };
|
|
344
|
-
}
|
|
345
|
-
|
|
346
318
|
/**
|
|
347
319
|
* Resolve GitHub configuration from CLI options and repo settings.
|
|
348
320
|
* Priority: CLI options > repo settings (.zeroshot/settings.json) > defaults
|
|
@@ -355,6 +327,7 @@ function resolveIssueContext(options) {
|
|
|
355
327
|
* @param {string|number} [options.issueNumber] - Typed issue identifier for prompt commands
|
|
356
328
|
* @param {string} [options.issueTitle] - Typed issue title for prompt commands
|
|
357
329
|
* @param {boolean} [options.includeIssueReference] - Include the closing reference in PR text
|
|
330
|
+
* @param {string} [options.prBody] - Literal PR body template with supported issue tokens
|
|
358
331
|
* @returns {Object} Resolved configuration
|
|
359
332
|
*/
|
|
360
333
|
function resolveGitHubConfig(options = {}) {
|
|
@@ -385,16 +358,23 @@ function resolveGitHubConfig(options = {}) {
|
|
|
385
358
|
options.autoMerge === true ||
|
|
386
359
|
(options.autoMerge !== false && parseBool(repoGithub.autoMerge) === true);
|
|
387
360
|
|
|
361
|
+
const issueContext = resolveIssueContext(options);
|
|
362
|
+
|
|
388
363
|
return {
|
|
389
364
|
prBase,
|
|
390
365
|
useMergeQueue,
|
|
391
366
|
closeIssueMode,
|
|
392
367
|
autoMerge,
|
|
393
368
|
gitRemote,
|
|
394
|
-
issueContext
|
|
369
|
+
issueContext,
|
|
370
|
+
prBody: renderPullRequestBody(options.prBody, options),
|
|
395
371
|
};
|
|
396
372
|
}
|
|
397
373
|
|
|
374
|
+
function resolvedPrBody(config, issueContext) {
|
|
375
|
+
return typeof config.prBody === 'string' ? config.prBody : issueContext.issueReference;
|
|
376
|
+
}
|
|
377
|
+
|
|
398
378
|
/**
|
|
399
379
|
* Generate platform-specific configuration based on resolved GitHub config.
|
|
400
380
|
*
|
|
@@ -406,13 +386,15 @@ function getPlatformConfig(platform, config = {}) {
|
|
|
406
386
|
const { prBase, useMergeQueue, closeIssueMode, autoMerge, gitRemote } = config;
|
|
407
387
|
const issueContext = config.issueContext || resolveIssueContext({});
|
|
408
388
|
const issueTitleArgument = quoteShellArgument(`feat: ${issueContext.issueTitle}`);
|
|
409
|
-
const
|
|
389
|
+
const prBodyArgument = quoteShellArgument(resolvedPrBody(config, issueContext));
|
|
410
390
|
|
|
411
391
|
const PLATFORM_CONFIGS = {
|
|
412
392
|
github: {
|
|
413
393
|
prName: 'PR',
|
|
414
394
|
prNameLower: 'pull request',
|
|
415
|
-
createCmd:
|
|
395
|
+
createCmd:
|
|
396
|
+
`gh pr create${prBase ? ` --base ${prBase}` : ''} ` +
|
|
397
|
+
`--title ${issueTitleArgument} --body ${prBodyArgument}`,
|
|
416
398
|
mergeCmd: useMergeQueue
|
|
417
399
|
? `PR_ID="$(timeout 30 gh pr view --json id --jq .id)"
|
|
418
400
|
gh api graphql -f query='mutation($id:ID!){enqueuePullRequest(input:{pullRequestId:$id}){mergeQueueEntry{state}}}' -f id="$PR_ID"
|
|
@@ -434,7 +416,7 @@ for i in $(seq 1 90); do if timeout 30 gh pr view --json mergedAt --jq .mergedAt
|
|
|
434
416
|
gitlab: {
|
|
435
417
|
prName: 'MR',
|
|
436
418
|
prNameLower: 'merge request',
|
|
437
|
-
createCmd: `glab mr create --title ${issueTitleArgument} --description ${
|
|
419
|
+
createCmd: `glab mr create --title ${issueTitleArgument} --description ${prBodyArgument}`,
|
|
438
420
|
mergeCmd: 'glab mr merge --auto-merge',
|
|
439
421
|
mergeFallbackCmd: 'glab mr merge',
|
|
440
422
|
prUrlExample: 'https://gitlab.com/owner/repo/-/merge_requests/123',
|
|
@@ -447,7 +429,7 @@ for i in $(seq 1 90); do if timeout 30 gh pr view --json mergedAt --jq .mergedAt
|
|
|
447
429
|
'azure-devops': {
|
|
448
430
|
prName: 'PR',
|
|
449
431
|
prNameLower: 'pull request',
|
|
450
|
-
createCmd: `az repos pr create --title ${issueTitleArgument} --description ${
|
|
432
|
+
createCmd: `az repos pr create --title ${issueTitleArgument} --description ${prBodyArgument}`,
|
|
451
433
|
mergeCmd: 'az repos pr update --id <PR_ID> --auto-complete true',
|
|
452
434
|
mergeFallbackCmd: 'az repos pr update --id <PR_ID> --status completed',
|
|
453
435
|
prUrlExample: 'https://dev.azure.com/org/project/_git/repo/pullrequest/123',
|
|
@@ -803,6 +785,7 @@ If blocked before creating a ${prName}, output:
|
|
|
803
785
|
* @param {string|number} [options.issueNumber] - Typed issue identifier for prompt commands
|
|
804
786
|
* @param {string} [options.issueTitle] - Typed issue title for prompt commands
|
|
805
787
|
* @param {boolean} [options.includeIssueReference] - Include the closing reference in PR text
|
|
788
|
+
* @param {string} [options.prBody] - Literal PR body template with supported issue tokens
|
|
806
789
|
* @param {Array} [options.requiredQualityGates] - Required handoff quality gates
|
|
807
790
|
* @param {boolean} [options.autoMerge] - Merge the PR (--ship). False stops after PR creation (--pr).
|
|
808
791
|
* @returns {Object} Agent configuration object
|