@the-open-engine/zeroshot 6.38.0 → 6.39.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cli/event-copy.js +8 -7
- package/cli/event-copy.ts +12 -0
- package/cli/index.js +7 -31
- package/cli/json-export.js +61 -64
- package/cli/json-export.ts +112 -0
- package/cli/message-formatter-utils.js +68 -56
- package/cli/message-formatter-utils.ts +121 -0
- package/cli/message-formatters-normal.js +124 -259
- package/cli/message-formatters-normal.ts +250 -0
- package/cli/message-formatters-watch.js +81 -84
- package/cli/message-formatters-watch.ts +189 -0
- package/lib/agent-cli-provider/adapters/codex.d.ts.map +1 -1
- package/lib/agent-cli-provider/adapters/codex.js +3 -1
- package/lib/agent-cli-provider/adapters/codex.js.map +1 -1
- package/lib/cluster/generated/protocol-schema.cjs +1 -1
- package/lib/cluster/generated/protocol-schema.mjs +1 -1
- package/lib/cluster/generated/protocol.d.cts +8 -0
- package/lib/cluster/generated/protocol.d.mts +8 -0
- package/lib/cluster/generated/protocol.d.ts +8 -0
- package/lib/clusters-registry.d.ts +23 -0
- package/lib/clusters-registry.js +17 -29
- package/lib/completion.d.ts +12 -0
- package/lib/completion.js +84 -94
- package/lib/compose-utils.d.ts +32 -0
- package/lib/compose-utils.js +57 -72
- package/lib/detached-startup.d.ts +83 -0
- package/lib/detached-startup.js +231 -302
- package/lib/docker-config.d.ts +43 -0
- package/lib/docker-config.js +150 -325
- package/lib/docker-env-auth.d.ts +17 -0
- package/lib/docker-env-auth.js +75 -0
- package/lib/git-remote-utils.d.ts +48 -0
- package/lib/git-remote-utils.js +147 -213
- package/lib/id-detector.d.ts +15 -0
- package/lib/id-detector.js +37 -41
- package/lib/path-check.d.ts +30 -0
- package/lib/path-check.js +42 -45
- package/lib/process-liveness.d.ts +16 -0
- package/lib/process-liveness.js +19 -12
- package/lib/provider-credential-path.d.ts +16 -0
- package/lib/provider-credential-path.js +31 -29
- package/lib/provider-defaults.d.ts +30 -0
- package/lib/provider-defaults.js +47 -42
- package/lib/provider-detection.d.ts +11 -0
- package/lib/provider-detection.js +91 -54
- package/lib/provider-names.d.ts +38 -0
- package/lib/provider-names.js +56 -64
- package/lib/repo-settings.d.ts +28 -0
- package/lib/repo-settings.js +83 -59
- package/lib/run-mode.d.ts +21 -0
- package/lib/run-mode.js +21 -20
- package/lib/run-plan.d.ts +28 -0
- package/lib/run-plan.js +17 -16
- package/lib/settings/claude-auth.d.ts +35 -0
- package/lib/settings/claude-auth.js +30 -47
- package/lib/settings-defaults.d.ts +20 -0
- package/lib/settings-defaults.js +149 -0
- package/lib/settings-error.d.ts +7 -0
- package/lib/settings-error.js +8 -0
- package/lib/settings-issue-providers.d.ts +10 -0
- package/lib/settings-issue-providers.js +12 -0
- package/lib/settings-models.d.ts +22 -0
- package/lib/settings-models.js +93 -0
- package/lib/settings-storage.d.ts +23 -0
- package/lib/settings-storage.js +205 -0
- package/lib/settings-validation.d.ts +7 -0
- package/lib/settings-validation.js +182 -0
- package/lib/settings.d.ts +29 -0
- package/lib/settings.js +41 -736
- package/lib/setup-apply-types.d.ts +66 -0
- package/lib/setup-apply-types.js +2 -0
- package/lib/setup-apply.d.ts +39 -0
- package/lib/setup-apply.js +267 -264
- package/lib/setup-journal.d.ts +41 -0
- package/lib/setup-journal.js +119 -76
- package/lib/setup-plan-types.d.ts +102 -0
- package/lib/setup-plan-types.js +2 -0
- package/lib/setup-plan.d.ts +30 -0
- package/lib/setup-plan.js +300 -324
- package/lib/setup-undo.d.ts +44 -0
- package/lib/setup-undo.js +61 -74
- package/lib/start-cluster-config.d.ts +26 -0
- package/lib/start-cluster-config.js +56 -0
- package/lib/start-cluster-environment.d.ts +40 -0
- package/lib/start-cluster-environment.js +134 -0
- package/lib/start-cluster-run-options.d.ts +53 -0
- package/lib/start-cluster-run-options.js +147 -0
- package/lib/start-cluster.d.ts +64 -0
- package/lib/start-cluster.js +98 -454
- package/lib/stream-json-parser.d.ts +17 -0
- package/lib/stream-json-parser.js +51 -52
- package/npm-shrinkwrap.json +2 -2
- package/package.json +12 -6
- package/scripts/postinstall.js +27 -0
- package/scripts/rust-distribution.js +23 -14
- package/src/agent/agent-command-proofs-context.js +35 -45
- package/src/agent/agent-command-proofs-context.ts +87 -0
- package/src/agent/agent-config-settings.js +19 -0
- package/src/agent/agent-config-settings.ts +41 -0
- package/src/agent/agent-config.js +122 -231
- package/src/agent/agent-config.ts +285 -0
- package/src/agent/agent-context-builder.js +38 -273
- package/src/agent/agent-context-builder.ts +51 -0
- package/src/agent/agent-context-environment-sections.js +105 -0
- package/src/agent/agent-context-environment-sections.ts +134 -0
- package/src/agent/agent-context-packs.js +165 -0
- package/src/agent/agent-context-packs.ts +296 -0
- package/src/agent/agent-context-prompt-sections.js +100 -0
- package/src/agent/agent-context-prompt-sections.ts +148 -0
- package/src/agent/agent-context-sections.js +25 -334
- package/src/agent/agent-context-sections.ts +36 -0
- package/src/agent/agent-context-sources.js +96 -149
- package/src/agent/agent-context-sources.ts +253 -0
- package/src/agent/agent-context-types.js +2 -0
- package/src/agent/agent-context-types.ts +132 -0
- package/src/agent/agent-context-validation-sections.js +73 -0
- package/src/agent/agent-context-validation-sections.ts +129 -0
- package/src/agent/agent-input-injector.js +99 -118
- package/src/agent/agent-input-injector.ts +195 -0
- package/src/agent/agent-liveness-poll.js +74 -78
- package/src/agent/agent-liveness-poll.ts +163 -0
- package/src/agent/agent-quality-gate-schema.js +77 -86
- package/src/agent/agent-quality-gate-schema.ts +135 -0
- package/src/agent/agent-quality-gates-context.js +44 -50
- package/src/agent/agent-quality-gates-context.ts +91 -0
- package/src/agent/agent-stuck-detector.js +171 -239
- package/src/agent/agent-stuck-detector.ts +288 -0
- package/src/agent/agent-trigger-evaluator.js +29 -46
- package/src/agent/agent-trigger-evaluator.ts +98 -0
- package/src/agent/context-metrics.js +110 -141
- package/src/agent/context-metrics.ts +261 -0
- package/src/agent/context-pack-builder.js +72 -358
- package/src/agent/context-pack-builder.ts +105 -0
- package/src/agent/context-pack-core.js +70 -0
- package/src/agent/context-pack-core.ts +96 -0
- package/src/agent/context-pack-selection.js +119 -0
- package/src/agent/context-pack-selection.ts +187 -0
- package/src/agent/context-pack-truncation.js +139 -0
- package/src/agent/context-pack-truncation.ts +208 -0
- package/src/agent/context-pack-types.js +2 -0
- package/src/agent/context-pack-types.ts +98 -0
- package/src/agent/context-replay-policy.js +30 -39
- package/src/agent/context-replay-policy.ts +71 -0
- package/src/agent/critical-agent-policy.js +6 -10
- package/src/agent/critical-agent-policy.ts +20 -0
- package/src/agent/guidance-queue.js +74 -87
- package/src/agent/guidance-queue.ts +166 -0
- package/src/agent/output-extraction-error-detail.js +45 -0
- package/src/agent/output-extraction-error-detail.ts +49 -0
- package/src/agent/output-extraction-failures.js +125 -0
- package/src/agent/output-extraction-failures.ts +149 -0
- package/src/agent/output-extraction-json.js +234 -0
- package/src/agent/output-extraction-json.ts +235 -0
- package/src/agent/output-extraction-pi.js +124 -0
- package/src/agent/output-extraction-pi.ts +137 -0
- package/src/agent/output-extraction-types.js +2 -0
- package/src/agent/output-extraction-types.ts +49 -0
- package/src/agent/output-extraction.js +17 -617
- package/src/agent/output-extraction.ts +30 -0
- package/src/agent/output-reformatter-errors.js +83 -0
- package/src/agent/output-reformatter-errors.ts +106 -0
- package/src/agent/output-reformatter-types.js +2 -0
- package/src/agent/output-reformatter-types.ts +86 -0
- package/src/agent/output-reformatter.js +140 -185
- package/src/agent/output-reformatter.ts +238 -0
- package/src/agent/pi-terminal-lifecycle-types.js +2 -0
- package/src/agent/pi-terminal-lifecycle-types.ts +41 -0
- package/src/agent/pi-terminal-lifecycle.js +186 -206
- package/src/agent/pi-terminal-lifecycle.ts +297 -0
- package/src/agent/provider-control-plane.js +22 -21
- package/src/agent/provider-control-plane.ts +52 -0
- package/src/agent/provider-terminal-failure-types.js +2 -0
- package/src/agent/provider-terminal-failure-types.ts +60 -0
- package/src/agent/provider-terminal-failure.js +194 -191
- package/src/agent/provider-terminal-failure.ts +262 -0
- package/src/agent/rate-limit-backoff.js +31 -74
- package/src/agent/rate-limit-backoff.ts +71 -0
- package/src/agent/schema-utils.js +85 -125
- package/src/agent/schema-utils.ts +148 -0
- package/src/agent/structured-output-error.js +34 -33
- package/src/agent/structured-output-error.ts +105 -0
- package/src/agent/validation-platform.js +27 -27
- package/src/agent/validation-platform.ts +49 -0
- package/src/agent-cli-provider/adapters/codex.ts +3 -1
- package/src/attach/attach-client.js +232 -405
- package/src/attach/attach-client.ts +300 -0
- package/src/attach/attach-server-cleanup.js +43 -0
- package/src/attach/attach-server-cleanup.ts +39 -0
- package/src/attach/attach-server-clients.js +117 -0
- package/src/attach/attach-server-clients.ts +122 -0
- package/src/attach/attach-server-events.js +38 -0
- package/src/attach/attach-server-events.ts +36 -0
- package/src/attach/attach-server-pty.js +45 -0
- package/src/attach/attach-server-pty.ts +64 -0
- package/src/attach/attach-server-runtime.js +73 -0
- package/src/attach/attach-server-runtime.ts +62 -0
- package/src/attach/attach-server-socket.js +28 -0
- package/src/attach/attach-server-socket.ts +23 -0
- package/src/attach/attach-server-types.js +2 -0
- package/src/attach/attach-server-types.ts +82 -0
- package/src/attach/attach-server.js +106 -523
- package/src/attach/attach-server.ts +158 -0
- package/src/attach/index.js +18 -35
- package/src/attach/index.ts +18 -0
- package/src/attach/protocol.js +95 -184
- package/src/attach/protocol.ts +181 -0
- package/src/attach/ring-buffer.js +76 -102
- package/src/attach/ring-buffer.ts +109 -0
- package/src/attach/send-input.js +64 -75
- package/src/attach/send-input.ts +94 -0
- package/src/attach/socket-discovery.js +164 -218
- package/src/attach/socket-discovery.ts +230 -0
- package/src/attach/socket-paths.js +42 -61
- package/src/attach/socket-paths.ts +81 -0
- package/src/claude-credentials.js +51 -54
- package/src/claude-credentials.ts +89 -0
- package/src/cluster/generated/protocol-schema.ts +1 -1
- package/src/cluster/generated/protocol.ts +2 -1
- package/src/command-proofs.js +110 -141
- package/src/command-proofs.ts +216 -0
- package/src/config-router.js +81 -73
- package/src/config-router.ts +131 -0
- package/src/copy-worker.js +53 -29
- package/src/copy-worker.ts +75 -0
- package/src/darwin-keychain-boundary.js +80 -111
- package/src/darwin-keychain-boundary.ts +148 -0
- package/src/guidance-topics.js +4 -5
- package/src/guidance-topics.ts +10 -0
- package/src/input-helpers.js +33 -54
- package/src/input-helpers.ts +58 -0
- package/src/ledger-sequence.js +45 -48
- package/src/ledger-sequence.ts +63 -0
- package/src/legacy-lib/clusters-registry.ts +40 -0
- package/src/legacy-lib/completion.ts +148 -0
- package/src/legacy-lib/compose-utils.ts +102 -0
- package/src/legacy-lib/detached-startup.ts +449 -0
- package/src/legacy-lib/docker-config.ts +282 -0
- package/src/legacy-lib/docker-env-auth.ts +116 -0
- package/src/legacy-lib/git-remote-utils.ts +244 -0
- package/src/legacy-lib/id-detector.ts +57 -0
- package/src/legacy-lib/js-yaml.d.ts +3 -0
- package/src/legacy-lib/omelette.d.ts +15 -0
- package/src/legacy-lib/path-check.ts +89 -0
- package/src/legacy-lib/process-liveness.ts +36 -0
- package/src/legacy-lib/provider-credential-path.ts +57 -0
- package/src/legacy-lib/provider-defaults.ts +114 -0
- package/src/legacy-lib/provider-detection.ts +67 -0
- package/src/legacy-lib/provider-names.ts +126 -0
- package/src/legacy-lib/repo-settings.ts +88 -0
- package/src/legacy-lib/run-mode.ts +58 -0
- package/src/legacy-lib/run-plan.ts +49 -0
- package/src/legacy-lib/settings/claude-auth.ts +80 -0
- package/src/legacy-lib/settings-defaults.ts +212 -0
- package/src/legacy-lib/settings-error.ts +8 -0
- package/src/legacy-lib/settings-issue-providers.ts +18 -0
- package/src/legacy-lib/settings-models.ts +124 -0
- package/src/legacy-lib/settings-storage.ts +277 -0
- package/src/legacy-lib/settings-validation.ts +220 -0
- package/src/legacy-lib/settings.ts +87 -0
- package/src/legacy-lib/setup-apply-types.ts +70 -0
- package/src/legacy-lib/setup-apply.ts +456 -0
- package/src/legacy-lib/setup-journal.ts +185 -0
- package/src/legacy-lib/setup-plan-types.ts +96 -0
- package/src/legacy-lib/setup-plan.ts +500 -0
- package/src/legacy-lib/setup-undo.ts +142 -0
- package/src/legacy-lib/start-cluster-config.ts +124 -0
- package/src/legacy-lib/start-cluster-environment.ts +165 -0
- package/src/legacy-lib/start-cluster-run-options.ts +279 -0
- package/src/legacy-lib/start-cluster.ts +237 -0
- package/src/legacy-lib/stream-json-parser.ts +88 -0
- package/src/message-buffer.js +55 -71
- package/src/message-buffer.ts +107 -0
- package/src/message-bus-bridge.js +92 -133
- package/src/message-bus-bridge.ts +149 -0
- package/src/name-generator-shared.js +220 -0
- package/src/name-generator-shared.ts +231 -0
- package/src/name-generator.js +8 -217
- package/src/name-generator.ts +27 -0
- package/src/omp-blob-root.js +83 -64
- package/src/omp-blob-root.ts +116 -0
- package/src/omp-config-overlay.js +65 -38
- package/src/omp-config-overlay.ts +110 -0
- package/src/omp-execution-fingerprint.js +38 -43
- package/src/omp-execution-fingerprint.ts +92 -0
- package/src/omp-session-limits.js +10 -15
- package/src/omp-session-limits.ts +53 -0
- package/src/omp-session-partition.js +2 -2
- package/src/omp-session-verifier.js +1 -1
- package/src/orchestrator.js +19 -4
- package/src/providers/anthropic/index.js +3 -1
- package/src/providers/anthropic/index.ts +13 -0
- package/src/providers/capabilities.js +19 -27
- package/src/providers/capabilities.ts +44 -0
- package/src/providers/google/index.js +3 -1
- package/src/providers/google/index.ts +13 -0
- package/src/providers/openai/index.js +3 -1
- package/src/providers/openai/index.ts +13 -0
- package/src/providers/opencode/index.js +3 -1
- package/src/providers/opencode/index.ts +13 -0
- package/src/quality-gates.js +67 -127
- package/src/quality-gates.ts +149 -0
- package/src/repo-settings-access.js +40 -0
- package/src/repo-settings-access.ts +64 -0
- package/src/schemas/sub-cluster.js +127 -183
- package/src/schemas/sub-cluster.ts +238 -0
- package/src/state-snapshot-normalization.js +224 -0
- package/src/state-snapshot-normalization.ts +222 -0
- package/src/state-snapshot.js +192 -359
- package/src/state-snapshot.ts +291 -0
- package/src/state-snapshotter.js +118 -130
- package/src/state-snapshotter.ts +167 -0
- package/src/sub-cluster-wrapper.js +4 -13
- package/src/task-run-model-args.js +87 -124
- package/src/task-run-model-args.ts +204 -0
- package/src/task-runner.js +5 -25
- package/src/task-runner.ts +28 -0
- package/src/task-startup-error.js +73 -58
- package/src/task-startup-error.ts +126 -0
- package/src/template-validation/consensus-gate-contracts.js +2 -0
- package/src/template-validation/consensus-gate-contracts.ts +70 -0
- package/src/template-validation/consensus-gate-scenarios.js +76 -0
- package/src/template-validation/consensus-gate-scenarios.ts +130 -0
- package/src/template-validation/consensus-gate-stage.js +34 -0
- package/src/template-validation/consensus-gate-stage.ts +56 -0
- package/src/template-validation/random-topology-contracts.js +2 -0
- package/src/template-validation/random-topology-contracts.ts +54 -0
- package/src/template-validation/random-topology-dispatch.js +25 -0
- package/src/template-validation/random-topology-dispatch.ts +33 -0
- package/src/template-validation/random-topology-message-loop.js +53 -0
- package/src/template-validation/random-topology-message-loop.ts +73 -0
- package/src/template-validation/random-topology-operations.js +79 -0
- package/src/template-validation/random-topology-operations.ts +101 -0
- package/src/template-validation/random-topology-runtime.js +25 -0
- package/src/template-validation/random-topology-runtime.ts +43 -0
- package/src/template-validation/random-topology-scenario.js +52 -0
- package/src/template-validation/random-topology-scenario.ts +57 -0
- package/src/template-validation/random-topology-schema.js +159 -0
- package/src/template-validation/random-topology-schema.ts +190 -0
- package/src/template-validation/random-topology-state.js +28 -0
- package/src/template-validation/random-topology-state.ts +30 -0
- package/src/template-validation/random-topology-trigger-evaluation.js +45 -0
- package/src/template-validation/random-topology-trigger-evaluation.ts +65 -0
- package/src/template-validation/random-topology-trigger.js +75 -0
- package/src/template-validation/random-topology-trigger.ts +88 -0
- package/src/template-validation/report-formatter.js +40 -46
- package/src/template-validation/report-formatter.ts +101 -0
- package/src/template-validation/simulate-consensus-gates.js +111 -302
- package/src/template-validation/simulate-consensus-gates.ts +196 -0
- package/src/template-validation/simulate-random-topology.js +26 -519
- package/src/template-validation/simulate-random-topology.ts +57 -0
- package/src/template-validation/simulate-two-stage-validation.js +41 -265
- package/src/template-validation/simulate-two-stage-validation.ts +55 -0
- package/src/template-validation/simulation-agent-runtime.js +25 -0
- package/src/template-validation/simulation-agent-runtime.ts +40 -0
- package/src/template-validation/simulation-agent.js +29 -0
- package/src/template-validation/simulation-agent.ts +73 -0
- package/src/template-validation/simulation-runtime.js +34 -0
- package/src/template-validation/simulation-runtime.ts +72 -0
- package/src/template-validation/two-stage-contracts.js +2 -0
- package/src/template-validation/two-stage-contracts.ts +41 -0
- package/src/template-validation/two-stage-inputs.js +21 -0
- package/src/template-validation/two-stage-inputs.ts +29 -0
- package/src/template-validation/two-stage-results.js +30 -0
- package/src/template-validation/two-stage-results.ts +40 -0
- package/src/template-validation/two-stage-scenario.js +86 -0
- package/src/template-validation/two-stage-scenario.ts +120 -0
- package/src/worktree-claude-config.js +182 -220
- package/src/worktree-claude-config.ts +272 -0
- package/src/worktree-tooling-env.js +103 -125
- package/src/worktree-tooling-env.ts +142 -0
- package/task-lib/completion.js +2 -3
- package/task-lib/completion.ts +9 -0
- package/task-lib/config.js +1 -4
- package/task-lib/config.ts +11 -0
- package/task-lib/name-generator.js +4 -226
- package/task-lib/name-generator.ts +11 -0
- package/task-lib/omp-session-cleanup.js +1 -1
- package/task-lib/omp-storage-root.js +8 -12
- package/task-lib/omp-storage-root.ts +62 -0
- package/task-lib/process-termination.js +143 -166
- package/task-lib/process-termination.ts +268 -0
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
import replayPolicy = require('./context-replay-policy');
|
|
2
|
+
|
|
3
|
+
type MessageTimestamp = string | number;
|
|
4
|
+
|
|
5
|
+
interface ReplayFields {
|
|
6
|
+
readonly contextSafe?: unknown;
|
|
7
|
+
readonly replayPolicy?: unknown;
|
|
8
|
+
readonly [key: string]: unknown;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
interface ContextMessage {
|
|
12
|
+
readonly id?: unknown;
|
|
13
|
+
readonly topic?: unknown;
|
|
14
|
+
readonly timestamp: MessageTimestamp;
|
|
15
|
+
readonly sender: string;
|
|
16
|
+
readonly metadata?: ReplayFields | null;
|
|
17
|
+
readonly content?: {
|
|
18
|
+
readonly text?: string | null;
|
|
19
|
+
readonly data?: ReplayFields | null;
|
|
20
|
+
} | null;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
interface ContextSource {
|
|
24
|
+
topic: string;
|
|
25
|
+
sender?: unknown;
|
|
26
|
+
since?: unknown;
|
|
27
|
+
amount?: number;
|
|
28
|
+
limit?: number;
|
|
29
|
+
strategy?: string;
|
|
30
|
+
compactAmount?: number;
|
|
31
|
+
compactStrategy?: string;
|
|
32
|
+
priority?: string;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
interface SourceCluster {
|
|
36
|
+
id: string;
|
|
37
|
+
createdAt: number;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
interface MessageQuery {
|
|
41
|
+
cluster_id: string;
|
|
42
|
+
topic: string;
|
|
43
|
+
sender?: unknown;
|
|
44
|
+
since?: unknown;
|
|
45
|
+
afterId?: unknown;
|
|
46
|
+
throughId?: unknown;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
interface SourceMessageBus {
|
|
50
|
+
query(criteria: MessageQuery): ContextMessage[];
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
interface SourceSelectionOptions {
|
|
54
|
+
compact?: boolean;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
interface SourceSelection {
|
|
58
|
+
amount: number | undefined;
|
|
59
|
+
strategy: string;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
interface SourceMessageParams {
|
|
63
|
+
source: ContextSource;
|
|
64
|
+
messageBus: SourceMessageBus;
|
|
65
|
+
cluster: SourceCluster;
|
|
66
|
+
lastTaskEndTime?: number | null | undefined;
|
|
67
|
+
lastAgentStartTime?: number | null | undefined;
|
|
68
|
+
afterId?: unknown;
|
|
69
|
+
throughId?: unknown;
|
|
70
|
+
triggeringMessageId?: unknown;
|
|
71
|
+
compact?: boolean;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
interface SourcePackParams extends Omit<SourceMessageParams, 'compact'> {
|
|
75
|
+
index: number;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
interface SourcePack {
|
|
79
|
+
id: string;
|
|
80
|
+
section: 'sources';
|
|
81
|
+
priority: string;
|
|
82
|
+
render(): string;
|
|
83
|
+
compact(): string;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const { isReplayableMessage } = replayPolicy;
|
|
87
|
+
|
|
88
|
+
function resolveSourceSince(
|
|
89
|
+
source: ContextSource,
|
|
90
|
+
cluster: SourceCluster,
|
|
91
|
+
lastTaskEndTime: number | null | undefined,
|
|
92
|
+
lastAgentStartTime: number | null | undefined
|
|
93
|
+
): unknown {
|
|
94
|
+
const sinceValue = source.since;
|
|
95
|
+
|
|
96
|
+
if (sinceValue === 'cluster_start') {
|
|
97
|
+
return cluster.createdAt;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
if (sinceValue === 'last_task_end') {
|
|
101
|
+
return lastTaskEndTime || cluster.createdAt;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
if (sinceValue === 'last_agent_start') {
|
|
105
|
+
return lastAgentStartTime ? lastAgentStartTime + 1 : cluster.createdAt;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
if (typeof sinceValue === 'string') {
|
|
109
|
+
const parsed = Date.parse(sinceValue);
|
|
110
|
+
if (Number.isNaN(parsed)) {
|
|
111
|
+
throw new Error(
|
|
112
|
+
`Unknown context source "since" value "${sinceValue}" for topic ${source.topic}. ` +
|
|
113
|
+
'Use cluster_start, last_task_end, last_agent_start, or an ISO timestamp.'
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
return parsed;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
return sinceValue;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
function formatSourceMessagesSection(source: ContextSource, messages: ContextMessage[]): string {
|
|
123
|
+
let context = `\n## Messages from topic: ${source.topic}\n\n`;
|
|
124
|
+
|
|
125
|
+
for (const msg of messages) {
|
|
126
|
+
context += `[${new Date(msg.timestamp).toISOString()}] ${msg.sender}:\n`;
|
|
127
|
+
if (msg.content?.text) {
|
|
128
|
+
context += `${msg.content.text}\n`;
|
|
129
|
+
}
|
|
130
|
+
if (msg.content?.data) {
|
|
131
|
+
context += `Data: ${JSON.stringify(msg.content.data, null, 2)}\n`;
|
|
132
|
+
}
|
|
133
|
+
context += '\n';
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
return context;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
function resolveSourceSelection(
|
|
140
|
+
source: ContextSource,
|
|
141
|
+
{ compact = false }: SourceSelectionOptions = {}
|
|
142
|
+
): SourceSelection {
|
|
143
|
+
const baseAmount = source.amount ?? source.limit;
|
|
144
|
+
const baseStrategy = source.strategy ?? (baseAmount !== undefined ? 'latest' : 'all');
|
|
145
|
+
|
|
146
|
+
if (!compact) {
|
|
147
|
+
return { amount: baseAmount, strategy: baseStrategy };
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
return {
|
|
151
|
+
amount: source.compactAmount ?? 1,
|
|
152
|
+
strategy: source.compactStrategy ?? (baseStrategy === 'all' ? 'latest' : baseStrategy),
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
function resolveSourceMessages({
|
|
157
|
+
source,
|
|
158
|
+
messageBus,
|
|
159
|
+
cluster,
|
|
160
|
+
lastTaskEndTime,
|
|
161
|
+
lastAgentStartTime,
|
|
162
|
+
afterId,
|
|
163
|
+
throughId,
|
|
164
|
+
triggeringMessageId,
|
|
165
|
+
compact = false,
|
|
166
|
+
}: SourceMessageParams): ContextMessage[] {
|
|
167
|
+
const sinceTimestamp = resolveSourceSince(source, cluster, lastTaskEndTime, lastAgentStartTime);
|
|
168
|
+
const { amount, strategy } = resolveSourceSelection(source, { compact });
|
|
169
|
+
const messages = messageBus.query({
|
|
170
|
+
cluster_id: cluster.id,
|
|
171
|
+
topic: source.topic,
|
|
172
|
+
sender: source.sender,
|
|
173
|
+
since: sinceTimestamp,
|
|
174
|
+
afterId,
|
|
175
|
+
throughId,
|
|
176
|
+
});
|
|
177
|
+
const replayableMessages = messages.filter(
|
|
178
|
+
(message) => isReplayableMessage(message) && message.id !== triggeringMessageId
|
|
179
|
+
);
|
|
180
|
+
|
|
181
|
+
if (amount === undefined) {
|
|
182
|
+
return replayableMessages;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
if (strategy === 'latest') {
|
|
186
|
+
return replayableMessages.slice(-amount);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
return replayableMessages.slice(0, amount);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
const REQUIRED_TOPICS = new Set(['STATE_SNAPSHOT', 'ISSUE_OPENED', 'PLAN_READY']);
|
|
193
|
+
const HIGH_PRIORITY_TOPICS = new Set(['VALIDATION_RESULT', 'IMPLEMENTATION_READY']);
|
|
194
|
+
|
|
195
|
+
function resolveSourcePriority(source: ContextSource): string {
|
|
196
|
+
if (source.priority) {
|
|
197
|
+
return source.priority;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
if (REQUIRED_TOPICS.has(source.topic)) {
|
|
201
|
+
return 'required';
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
if (HIGH_PRIORITY_TOPICS.has(source.topic)) {
|
|
205
|
+
return 'high';
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
return 'medium';
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
function buildSourcePack({
|
|
212
|
+
source,
|
|
213
|
+
index,
|
|
214
|
+
messageBus,
|
|
215
|
+
cluster,
|
|
216
|
+
lastTaskEndTime,
|
|
217
|
+
lastAgentStartTime,
|
|
218
|
+
afterId,
|
|
219
|
+
throughId,
|
|
220
|
+
triggeringMessageId,
|
|
221
|
+
}: SourcePackParams): SourcePack {
|
|
222
|
+
const render = (compact: boolean): string => {
|
|
223
|
+
const messages = resolveSourceMessages({
|
|
224
|
+
source,
|
|
225
|
+
messageBus,
|
|
226
|
+
cluster,
|
|
227
|
+
lastTaskEndTime,
|
|
228
|
+
lastAgentStartTime,
|
|
229
|
+
afterId,
|
|
230
|
+
throughId,
|
|
231
|
+
triggeringMessageId,
|
|
232
|
+
compact,
|
|
233
|
+
});
|
|
234
|
+
|
|
235
|
+
if (messages.length === 0) {
|
|
236
|
+
return '';
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
return formatSourceMessagesSection(source, messages);
|
|
240
|
+
};
|
|
241
|
+
|
|
242
|
+
return {
|
|
243
|
+
id: `source:${source.topic}:${index}`,
|
|
244
|
+
section: 'sources',
|
|
245
|
+
priority: resolveSourcePriority(source),
|
|
246
|
+
render: () => render(false),
|
|
247
|
+
compact: () => render(true),
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
export = {
|
|
252
|
+
buildSourcePack,
|
|
253
|
+
};
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
export interface JsonSchema {
|
|
2
|
+
readonly type?: string;
|
|
3
|
+
readonly description?: string;
|
|
4
|
+
readonly enum?: readonly unknown[];
|
|
5
|
+
readonly properties?: Readonly<Record<string, JsonSchema | null | undefined>>;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export interface LegacyOutputFormat {
|
|
9
|
+
readonly rules?: readonly string[];
|
|
10
|
+
readonly example?: unknown;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface PromptObject {
|
|
14
|
+
readonly system?: string | null;
|
|
15
|
+
readonly outputFormat?: LegacyOutputFormat | null;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface ContextSource {
|
|
19
|
+
topic: string;
|
|
20
|
+
sender?: unknown;
|
|
21
|
+
since?: unknown;
|
|
22
|
+
amount?: number;
|
|
23
|
+
limit?: number;
|
|
24
|
+
strategy?: string;
|
|
25
|
+
compactAmount?: number;
|
|
26
|
+
compactStrategy?: string;
|
|
27
|
+
priority?: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface ContextStrategy {
|
|
31
|
+
maxTokens?: number;
|
|
32
|
+
sources?: ContextSource[];
|
|
33
|
+
readonly [key: string]: unknown;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface AgentContextConfig {
|
|
37
|
+
readonly prompt?: string | PromptObject | null;
|
|
38
|
+
readonly promptConfig?: {
|
|
39
|
+
readonly type?: string | null;
|
|
40
|
+
} | null;
|
|
41
|
+
readonly cwd?: string | null;
|
|
42
|
+
readonly jsonSchema?: JsonSchema | null;
|
|
43
|
+
readonly outputFormat?: string | null;
|
|
44
|
+
readonly role?: string;
|
|
45
|
+
readonly requiredQualityGates?: unknown;
|
|
46
|
+
readonly commandProofs?: unknown;
|
|
47
|
+
readonly contextStrategy?: ContextStrategy | null;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export interface WorktreeContext {
|
|
51
|
+
readonly enabled?: boolean;
|
|
52
|
+
readonly path?: string | null;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export interface IsolationContext {
|
|
56
|
+
readonly enabled?: boolean;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export interface ValidationCriterion {
|
|
60
|
+
readonly status?: string;
|
|
61
|
+
readonly id?: string;
|
|
62
|
+
readonly reason?: string;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export interface ContextMessageData {
|
|
66
|
+
readonly criteriaResults?: readonly ValidationCriterion[] | null;
|
|
67
|
+
readonly contextSafe?: unknown;
|
|
68
|
+
readonly replayPolicy?: unknown;
|
|
69
|
+
readonly [key: string]: unknown;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export interface ContextMessage {
|
|
73
|
+
readonly id?: unknown;
|
|
74
|
+
readonly topic?: unknown;
|
|
75
|
+
readonly timestamp: string | number;
|
|
76
|
+
readonly sender: string;
|
|
77
|
+
readonly metadata?: ContextMessageData | null;
|
|
78
|
+
readonly content?: {
|
|
79
|
+
readonly text?: string | null;
|
|
80
|
+
readonly data?: ContextMessageData | null;
|
|
81
|
+
} | null;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export interface ContextQuery {
|
|
85
|
+
cluster_id: string;
|
|
86
|
+
topic: string;
|
|
87
|
+
sender?: unknown;
|
|
88
|
+
since?: unknown;
|
|
89
|
+
afterId?: unknown;
|
|
90
|
+
throughId?: unknown;
|
|
91
|
+
limit?: number;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export interface ContextMessageBus {
|
|
95
|
+
query(criteria: ContextQuery): ContextMessage[];
|
|
96
|
+
publish(message: unknown): unknown;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export interface ContextCluster {
|
|
100
|
+
id: string;
|
|
101
|
+
createdAt: number;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export interface TriggeringMessage {
|
|
105
|
+
id?: unknown;
|
|
106
|
+
topic: string;
|
|
107
|
+
sender: string;
|
|
108
|
+
content?: {
|
|
109
|
+
text?: string | null;
|
|
110
|
+
} | null;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
export interface BuildContextParams {
|
|
114
|
+
id: string;
|
|
115
|
+
role: string;
|
|
116
|
+
iteration: number;
|
|
117
|
+
config: AgentContextConfig;
|
|
118
|
+
messageBus: ContextMessageBus;
|
|
119
|
+
cluster: ContextCluster;
|
|
120
|
+
triggeringMessage: TriggeringMessage;
|
|
121
|
+
lastTaskEndTime?: number | null | undefined;
|
|
122
|
+
lastAgentStartTime?: number | null | undefined;
|
|
123
|
+
selectedPrompt?: string | null | undefined;
|
|
124
|
+
queuedGuidance?: string | null | undefined;
|
|
125
|
+
worktree?: WorktreeContext | null | undefined;
|
|
126
|
+
isolation?: IsolationContext | null | undefined;
|
|
127
|
+
mode?: string | undefined;
|
|
128
|
+
continuationSequence?: unknown;
|
|
129
|
+
contextThroughId?: unknown;
|
|
130
|
+
previousPromptIdentity?: unknown;
|
|
131
|
+
currentPromptIdentity?: unknown;
|
|
132
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const validationPlatform = require("./validation-platform");
|
|
3
|
+
const { isPlatformMismatchReason } = validationPlatform;
|
|
4
|
+
function shouldKeepCannotValidate(criteria, ignoreReason, seenIds) {
|
|
5
|
+
if (criteria.status !== 'CANNOT_VALIDATE' || !criteria.id) {
|
|
6
|
+
return false;
|
|
7
|
+
}
|
|
8
|
+
if (ignoreReason && ignoreReason(criteria.reason)) {
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
if (seenIds.has(criteria.id)) {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
function isValidationCriteria(value) {
|
|
17
|
+
return Array.isArray(value);
|
|
18
|
+
}
|
|
19
|
+
function collectCannotValidateCriteria(prevValidations, options = {}) {
|
|
20
|
+
const cannotValidateCriteria = [];
|
|
21
|
+
const seenIds = new Set();
|
|
22
|
+
const ignoreReason = options.ignoreReason;
|
|
23
|
+
for (const msg of prevValidations) {
|
|
24
|
+
const criteriaResults = msg.content?.data?.criteriaResults;
|
|
25
|
+
if (!isValidationCriteria(criteriaResults)) {
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
for (const criteria of criteriaResults) {
|
|
29
|
+
if (!shouldKeepCannotValidate(criteria, ignoreReason, seenIds)) {
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
seenIds.add(criteria.id);
|
|
33
|
+
cannotValidateCriteria.push({
|
|
34
|
+
id: criteria.id,
|
|
35
|
+
reason: criteria.reason || 'No reason provided',
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return cannotValidateCriteria;
|
|
40
|
+
}
|
|
41
|
+
function buildCannotValidateSection(cannotValidateCriteria) {
|
|
42
|
+
if (cannotValidateCriteria.length === 0) {
|
|
43
|
+
return '';
|
|
44
|
+
}
|
|
45
|
+
return [
|
|
46
|
+
'',
|
|
47
|
+
'## ⚠️ Permanently Unverifiable Criteria (SKIP THESE)',
|
|
48
|
+
'',
|
|
49
|
+
'The following criteria have PERMANENT environmental limitations (missing tools, no access).',
|
|
50
|
+
'These limitations have not changed. Do NOT re-attempt verification.',
|
|
51
|
+
'Mark these as CANNOT_VALIDATE again with the same reason.',
|
|
52
|
+
'',
|
|
53
|
+
...cannotValidateCriteria.map((criteria) => `- **${criteria.id}**: ${criteria.reason}`),
|
|
54
|
+
'',
|
|
55
|
+
].join('\n');
|
|
56
|
+
}
|
|
57
|
+
function buildValidatorSkipSection({ role, messageBus, cluster, isolation, }) {
|
|
58
|
+
if (role !== 'validator') {
|
|
59
|
+
return '';
|
|
60
|
+
}
|
|
61
|
+
const prevValidations = messageBus.query({
|
|
62
|
+
cluster_id: cluster.id,
|
|
63
|
+
topic: 'VALIDATION_RESULT',
|
|
64
|
+
since: cluster.createdAt,
|
|
65
|
+
limit: 50,
|
|
66
|
+
});
|
|
67
|
+
const ignoreReason = isolation?.enabled ? isPlatformMismatchReason : null;
|
|
68
|
+
const cannotValidateCriteria = collectCannotValidateCriteria(prevValidations, { ignoreReason });
|
|
69
|
+
return buildCannotValidateSection(cannotValidateCriteria);
|
|
70
|
+
}
|
|
71
|
+
module.exports = {
|
|
72
|
+
buildValidatorSkipSection,
|
|
73
|
+
};
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import validationPlatform = require('./validation-platform');
|
|
2
|
+
|
|
3
|
+
import type {
|
|
4
|
+
ContextCluster,
|
|
5
|
+
ContextMessage,
|
|
6
|
+
ContextMessageBus,
|
|
7
|
+
IsolationContext,
|
|
8
|
+
ValidationCriterion,
|
|
9
|
+
} from './agent-context-types';
|
|
10
|
+
|
|
11
|
+
interface CannotValidateCriterion {
|
|
12
|
+
id: string;
|
|
13
|
+
reason: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
interface CannotValidateOptions {
|
|
17
|
+
ignoreReason?: ((reason: string | undefined) => boolean) | null;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
interface ValidatorSkipParams {
|
|
21
|
+
role: string;
|
|
22
|
+
messageBus: ContextMessageBus;
|
|
23
|
+
cluster: ContextCluster;
|
|
24
|
+
isolation?: IsolationContext | null | undefined;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const { isPlatformMismatchReason } = validationPlatform;
|
|
28
|
+
|
|
29
|
+
function shouldKeepCannotValidate(
|
|
30
|
+
criteria: ValidationCriterion,
|
|
31
|
+
ignoreReason: CannotValidateOptions['ignoreReason'],
|
|
32
|
+
seenIds: ReadonlySet<string>
|
|
33
|
+
): criteria is ValidationCriterion & { id: string } {
|
|
34
|
+
if (criteria.status !== 'CANNOT_VALIDATE' || !criteria.id) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
if (ignoreReason && ignoreReason(criteria.reason)) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if (seenIds.has(criteria.id)) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function isValidationCriteria(
|
|
50
|
+
value: readonly ValidationCriterion[] | null | undefined
|
|
51
|
+
): value is readonly ValidationCriterion[] {
|
|
52
|
+
return Array.isArray(value);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function collectCannotValidateCriteria(
|
|
56
|
+
prevValidations: readonly ContextMessage[],
|
|
57
|
+
options: CannotValidateOptions = {}
|
|
58
|
+
): CannotValidateCriterion[] {
|
|
59
|
+
const cannotValidateCriteria: CannotValidateCriterion[] = [];
|
|
60
|
+
const seenIds = new Set<string>();
|
|
61
|
+
const ignoreReason = options.ignoreReason;
|
|
62
|
+
|
|
63
|
+
for (const msg of prevValidations) {
|
|
64
|
+
const criteriaResults = msg.content?.data?.criteriaResults;
|
|
65
|
+
if (!isValidationCriteria(criteriaResults)) {
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
for (const criteria of criteriaResults) {
|
|
70
|
+
if (!shouldKeepCannotValidate(criteria, ignoreReason, seenIds)) {
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
seenIds.add(criteria.id);
|
|
75
|
+
cannotValidateCriteria.push({
|
|
76
|
+
id: criteria.id,
|
|
77
|
+
reason: criteria.reason || 'No reason provided',
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return cannotValidateCriteria;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function buildCannotValidateSection(
|
|
86
|
+
cannotValidateCriteria: readonly CannotValidateCriterion[]
|
|
87
|
+
): string {
|
|
88
|
+
if (cannotValidateCriteria.length === 0) {
|
|
89
|
+
return '';
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
return [
|
|
93
|
+
'',
|
|
94
|
+
'## ⚠️ Permanently Unverifiable Criteria (SKIP THESE)',
|
|
95
|
+
'',
|
|
96
|
+
'The following criteria have PERMANENT environmental limitations (missing tools, no access).',
|
|
97
|
+
'These limitations have not changed. Do NOT re-attempt verification.',
|
|
98
|
+
'Mark these as CANNOT_VALIDATE again with the same reason.',
|
|
99
|
+
'',
|
|
100
|
+
...cannotValidateCriteria.map((criteria) => `- **${criteria.id}**: ${criteria.reason}`),
|
|
101
|
+
'',
|
|
102
|
+
].join('\n');
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
function buildValidatorSkipSection({
|
|
106
|
+
role,
|
|
107
|
+
messageBus,
|
|
108
|
+
cluster,
|
|
109
|
+
isolation,
|
|
110
|
+
}: ValidatorSkipParams): string {
|
|
111
|
+
if (role !== 'validator') {
|
|
112
|
+
return '';
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
const prevValidations = messageBus.query({
|
|
116
|
+
cluster_id: cluster.id,
|
|
117
|
+
topic: 'VALIDATION_RESULT',
|
|
118
|
+
since: cluster.createdAt,
|
|
119
|
+
limit: 50,
|
|
120
|
+
});
|
|
121
|
+
const ignoreReason = isolation?.enabled ? isPlatformMismatchReason : null;
|
|
122
|
+
const cannotValidateCriteria = collectCannotValidateCriteria(prevValidations, { ignoreReason });
|
|
123
|
+
|
|
124
|
+
return buildCannotValidateSection(cannotValidateCriteria);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
export = {
|
|
128
|
+
buildValidatorSkipSection,
|
|
129
|
+
};
|