@kontourai/flow-agents 3.11.0 → 3.12.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/CHANGELOG.md +14 -0
- package/build/src/builder-flow-run-adapter.d.ts +1 -0
- package/build/src/builder-flow-run-adapter.js +2 -0
- package/build/src/builder-flow-runtime.d.ts +5 -0
- package/build/src/builder-flow-runtime.js +90 -68
- package/build/src/builder-gate-action-envelope.d.ts +152 -0
- package/build/src/builder-gate-action-envelope.js +368 -0
- package/build/src/cli/public-contracts.d.ts +139 -0
- package/build/src/cli/public-contracts.js +37 -0
- package/build/src/cli/workflow-sidecar.js +9 -13
- package/build/src/cli/workflow.d.ts +1 -0
- package/build/src/cli/workflow.js +49 -12
- package/build/src/continuation-driver.d.ts +40 -3
- package/build/src/continuation-driver.js +361 -412
- package/build/src/continuation-persistence.d.ts +4 -0
- package/build/src/continuation-persistence.js +296 -0
- package/build/src/continuation-validation.d.ts +9 -0
- package/build/src/continuation-validation.js +169 -0
- package/build/src/flow-kit/action-metadata.d.ts +28 -0
- package/build/src/flow-kit/action-metadata.js +162 -0
- package/build/src/flow-kit/action-repository-validation.d.ts +16 -0
- package/build/src/flow-kit/action-repository-validation.js +237 -0
- package/build/src/flow-kit/validate.d.ts +2 -14
- package/build/src/flow-kit/validate.js +18 -345
- package/build/src/index.d.ts +4 -2
- package/build/src/index.js +2 -1
- package/dist/base/build/package.json +1 -1
- package/dist/base/build/src/builder-flow-run-adapter.d.ts +1 -0
- package/dist/base/build/src/builder-flow-run-adapter.js +2 -0
- package/dist/base/build/src/builder-flow-runtime.d.ts +5 -0
- package/dist/base/build/src/builder-flow-runtime.js +90 -68
- package/dist/base/build/src/builder-gate-action-envelope.d.ts +152 -0
- package/dist/base/build/src/builder-gate-action-envelope.js +368 -0
- package/dist/base/build/src/cli/public-contracts.d.ts +139 -0
- package/dist/base/build/src/cli/public-contracts.js +37 -0
- package/dist/base/build/src/cli/workflow-sidecar.js +9 -13
- package/dist/base/build/src/cli/workflow.d.ts +1 -0
- package/dist/base/build/src/cli/workflow.js +49 -12
- package/dist/base/build/src/continuation-driver.d.ts +40 -3
- package/dist/base/build/src/continuation-driver.js +361 -412
- package/dist/base/build/src/continuation-persistence.d.ts +4 -0
- package/dist/base/build/src/continuation-persistence.js +296 -0
- package/dist/base/build/src/continuation-validation.d.ts +9 -0
- package/dist/base/build/src/continuation-validation.js +169 -0
- package/dist/base/build/src/flow-kit/action-metadata.d.ts +28 -0
- package/dist/base/build/src/flow-kit/action-metadata.js +162 -0
- package/dist/base/build/src/flow-kit/action-repository-validation.d.ts +16 -0
- package/dist/base/build/src/flow-kit/action-repository-validation.js +237 -0
- package/dist/base/build/src/flow-kit/validate.d.ts +2 -14
- package/dist/base/build/src/flow-kit/validate.js +18 -345
- package/dist/base/build/src/index.d.ts +4 -2
- package/dist/base/build/src/index.js +2 -1
- package/dist/base/docs/migrations.md +5 -0
- package/dist/base/docs/public-workflow-cli.md +41 -5
- package/dist/base/docs/spec/builder-flow-runtime.md +117 -0
- package/dist/base/evals/integration/test_builder_step_producers.sh +60 -21
- package/dist/base/evals/integration/test_bundle_install.sh +15 -15
- package/dist/base/evals/integration/test_phase_map_and_gate_claim.sh +9 -22
- package/dist/base/install.sh +1 -1
- package/dist/base/kits/builder/kit.json +88 -14
- package/dist/claude-code/build/package.json +1 -1
- package/dist/claude-code/build/src/builder-flow-run-adapter.d.ts +1 -0
- package/dist/claude-code/build/src/builder-flow-run-adapter.js +2 -0
- package/dist/claude-code/build/src/builder-flow-runtime.d.ts +5 -0
- package/dist/claude-code/build/src/builder-flow-runtime.js +90 -68
- package/dist/claude-code/build/src/builder-gate-action-envelope.d.ts +152 -0
- package/dist/claude-code/build/src/builder-gate-action-envelope.js +368 -0
- package/dist/claude-code/build/src/cli/public-contracts.d.ts +139 -0
- package/dist/claude-code/build/src/cli/public-contracts.js +37 -0
- package/dist/claude-code/build/src/cli/workflow-sidecar.js +9 -13
- package/dist/claude-code/build/src/cli/workflow.d.ts +1 -0
- package/dist/claude-code/build/src/cli/workflow.js +49 -12
- package/dist/claude-code/build/src/continuation-driver.d.ts +40 -3
- package/dist/claude-code/build/src/continuation-driver.js +361 -412
- package/dist/claude-code/build/src/continuation-persistence.d.ts +4 -0
- package/dist/claude-code/build/src/continuation-persistence.js +296 -0
- package/dist/claude-code/build/src/continuation-validation.d.ts +9 -0
- package/dist/claude-code/build/src/continuation-validation.js +169 -0
- package/dist/claude-code/build/src/flow-kit/action-metadata.d.ts +28 -0
- package/dist/claude-code/build/src/flow-kit/action-metadata.js +162 -0
- package/dist/claude-code/build/src/flow-kit/action-repository-validation.d.ts +16 -0
- package/dist/claude-code/build/src/flow-kit/action-repository-validation.js +237 -0
- package/dist/claude-code/build/src/flow-kit/validate.d.ts +2 -14
- package/dist/claude-code/build/src/flow-kit/validate.js +18 -345
- package/dist/claude-code/build/src/index.d.ts +4 -2
- package/dist/claude-code/build/src/index.js +2 -1
- package/dist/claude-code/docs/migrations.md +5 -0
- package/dist/claude-code/docs/public-workflow-cli.md +41 -5
- package/dist/claude-code/docs/spec/builder-flow-runtime.md +117 -0
- package/dist/claude-code/evals/integration/test_builder_step_producers.sh +60 -21
- package/dist/claude-code/evals/integration/test_bundle_install.sh +15 -15
- package/dist/claude-code/evals/integration/test_phase_map_and_gate_claim.sh +9 -22
- package/dist/claude-code/install.sh +1 -1
- package/dist/claude-code/kits/builder/kit.json +88 -14
- package/dist/codex/build/package.json +1 -1
- package/dist/codex/build/src/builder-flow-run-adapter.d.ts +1 -0
- package/dist/codex/build/src/builder-flow-run-adapter.js +2 -0
- package/dist/codex/build/src/builder-flow-runtime.d.ts +5 -0
- package/dist/codex/build/src/builder-flow-runtime.js +90 -68
- package/dist/codex/build/src/builder-gate-action-envelope.d.ts +152 -0
- package/dist/codex/build/src/builder-gate-action-envelope.js +368 -0
- package/dist/codex/build/src/cli/public-contracts.d.ts +139 -0
- package/dist/codex/build/src/cli/public-contracts.js +37 -0
- package/dist/codex/build/src/cli/workflow-sidecar.js +9 -13
- package/dist/codex/build/src/cli/workflow.d.ts +1 -0
- package/dist/codex/build/src/cli/workflow.js +49 -12
- package/dist/codex/build/src/continuation-driver.d.ts +40 -3
- package/dist/codex/build/src/continuation-driver.js +361 -412
- package/dist/codex/build/src/continuation-persistence.d.ts +4 -0
- package/dist/codex/build/src/continuation-persistence.js +296 -0
- package/dist/codex/build/src/continuation-validation.d.ts +9 -0
- package/dist/codex/build/src/continuation-validation.js +169 -0
- package/dist/codex/build/src/flow-kit/action-metadata.d.ts +28 -0
- package/dist/codex/build/src/flow-kit/action-metadata.js +162 -0
- package/dist/codex/build/src/flow-kit/action-repository-validation.d.ts +16 -0
- package/dist/codex/build/src/flow-kit/action-repository-validation.js +237 -0
- package/dist/codex/build/src/flow-kit/validate.d.ts +2 -14
- package/dist/codex/build/src/flow-kit/validate.js +18 -345
- package/dist/codex/build/src/index.d.ts +4 -2
- package/dist/codex/build/src/index.js +2 -1
- package/dist/codex/docs/migrations.md +5 -0
- package/dist/codex/docs/public-workflow-cli.md +41 -5
- package/dist/codex/docs/spec/builder-flow-runtime.md +117 -0
- package/dist/codex/evals/integration/test_builder_step_producers.sh +60 -21
- package/dist/codex/evals/integration/test_bundle_install.sh +15 -15
- package/dist/codex/evals/integration/test_phase_map_and_gate_claim.sh +9 -22
- package/dist/codex/install.sh +1 -1
- package/dist/codex/kits/builder/kit.json +88 -14
- package/dist/kiro/build/package.json +1 -1
- package/dist/kiro/build/src/builder-flow-run-adapter.d.ts +1 -0
- package/dist/kiro/build/src/builder-flow-run-adapter.js +2 -0
- package/dist/kiro/build/src/builder-flow-runtime.d.ts +5 -0
- package/dist/kiro/build/src/builder-flow-runtime.js +90 -68
- package/dist/kiro/build/src/builder-gate-action-envelope.d.ts +152 -0
- package/dist/kiro/build/src/builder-gate-action-envelope.js +368 -0
- package/dist/kiro/build/src/cli/public-contracts.d.ts +139 -0
- package/dist/kiro/build/src/cli/public-contracts.js +37 -0
- package/dist/kiro/build/src/cli/workflow-sidecar.js +9 -13
- package/dist/kiro/build/src/cli/workflow.d.ts +1 -0
- package/dist/kiro/build/src/cli/workflow.js +49 -12
- package/dist/kiro/build/src/continuation-driver.d.ts +40 -3
- package/dist/kiro/build/src/continuation-driver.js +361 -412
- package/dist/kiro/build/src/continuation-persistence.d.ts +4 -0
- package/dist/kiro/build/src/continuation-persistence.js +296 -0
- package/dist/kiro/build/src/continuation-validation.d.ts +9 -0
- package/dist/kiro/build/src/continuation-validation.js +169 -0
- package/dist/kiro/build/src/flow-kit/action-metadata.d.ts +28 -0
- package/dist/kiro/build/src/flow-kit/action-metadata.js +162 -0
- package/dist/kiro/build/src/flow-kit/action-repository-validation.d.ts +16 -0
- package/dist/kiro/build/src/flow-kit/action-repository-validation.js +237 -0
- package/dist/kiro/build/src/flow-kit/validate.d.ts +2 -14
- package/dist/kiro/build/src/flow-kit/validate.js +18 -345
- package/dist/kiro/build/src/index.d.ts +4 -2
- package/dist/kiro/build/src/index.js +2 -1
- package/dist/kiro/docs/migrations.md +5 -0
- package/dist/kiro/docs/public-workflow-cli.md +41 -5
- package/dist/kiro/docs/spec/builder-flow-runtime.md +117 -0
- package/dist/kiro/evals/integration/test_builder_step_producers.sh +60 -21
- package/dist/kiro/evals/integration/test_bundle_install.sh +15 -15
- package/dist/kiro/evals/integration/test_phase_map_and_gate_claim.sh +9 -22
- package/dist/kiro/install.sh +1 -1
- package/dist/kiro/kits/builder/kit.json +88 -14
- package/dist/opencode/build/package.json +1 -1
- package/dist/opencode/build/src/builder-flow-run-adapter.d.ts +1 -0
- package/dist/opencode/build/src/builder-flow-run-adapter.js +2 -0
- package/dist/opencode/build/src/builder-flow-runtime.d.ts +5 -0
- package/dist/opencode/build/src/builder-flow-runtime.js +90 -68
- package/dist/opencode/build/src/builder-gate-action-envelope.d.ts +152 -0
- package/dist/opencode/build/src/builder-gate-action-envelope.js +368 -0
- package/dist/opencode/build/src/cli/public-contracts.d.ts +139 -0
- package/dist/opencode/build/src/cli/public-contracts.js +37 -0
- package/dist/opencode/build/src/cli/workflow-sidecar.js +9 -13
- package/dist/opencode/build/src/cli/workflow.d.ts +1 -0
- package/dist/opencode/build/src/cli/workflow.js +49 -12
- package/dist/opencode/build/src/continuation-driver.d.ts +40 -3
- package/dist/opencode/build/src/continuation-driver.js +361 -412
- package/dist/opencode/build/src/continuation-persistence.d.ts +4 -0
- package/dist/opencode/build/src/continuation-persistence.js +296 -0
- package/dist/opencode/build/src/continuation-validation.d.ts +9 -0
- package/dist/opencode/build/src/continuation-validation.js +169 -0
- package/dist/opencode/build/src/flow-kit/action-metadata.d.ts +28 -0
- package/dist/opencode/build/src/flow-kit/action-metadata.js +162 -0
- package/dist/opencode/build/src/flow-kit/action-repository-validation.d.ts +16 -0
- package/dist/opencode/build/src/flow-kit/action-repository-validation.js +237 -0
- package/dist/opencode/build/src/flow-kit/validate.d.ts +2 -14
- package/dist/opencode/build/src/flow-kit/validate.js +18 -345
- package/dist/opencode/build/src/index.d.ts +4 -2
- package/dist/opencode/build/src/index.js +2 -1
- package/dist/opencode/docs/migrations.md +5 -0
- package/dist/opencode/docs/public-workflow-cli.md +41 -5
- package/dist/opencode/docs/spec/builder-flow-runtime.md +117 -0
- package/dist/opencode/evals/integration/test_builder_step_producers.sh +60 -21
- package/dist/opencode/evals/integration/test_bundle_install.sh +15 -15
- package/dist/opencode/evals/integration/test_phase_map_and_gate_claim.sh +9 -22
- package/dist/opencode/install.sh +1 -1
- package/dist/opencode/kits/builder/kit.json +88 -14
- package/dist/pi/build/package.json +1 -1
- package/dist/pi/build/src/builder-flow-run-adapter.d.ts +1 -0
- package/dist/pi/build/src/builder-flow-run-adapter.js +2 -0
- package/dist/pi/build/src/builder-flow-runtime.d.ts +5 -0
- package/dist/pi/build/src/builder-flow-runtime.js +90 -68
- package/dist/pi/build/src/builder-gate-action-envelope.d.ts +152 -0
- package/dist/pi/build/src/builder-gate-action-envelope.js +368 -0
- package/dist/pi/build/src/cli/public-contracts.d.ts +139 -0
- package/dist/pi/build/src/cli/public-contracts.js +37 -0
- package/dist/pi/build/src/cli/workflow-sidecar.js +9 -13
- package/dist/pi/build/src/cli/workflow.d.ts +1 -0
- package/dist/pi/build/src/cli/workflow.js +49 -12
- package/dist/pi/build/src/continuation-driver.d.ts +40 -3
- package/dist/pi/build/src/continuation-driver.js +361 -412
- package/dist/pi/build/src/continuation-persistence.d.ts +4 -0
- package/dist/pi/build/src/continuation-persistence.js +296 -0
- package/dist/pi/build/src/continuation-validation.d.ts +9 -0
- package/dist/pi/build/src/continuation-validation.js +169 -0
- package/dist/pi/build/src/flow-kit/action-metadata.d.ts +28 -0
- package/dist/pi/build/src/flow-kit/action-metadata.js +162 -0
- package/dist/pi/build/src/flow-kit/action-repository-validation.d.ts +16 -0
- package/dist/pi/build/src/flow-kit/action-repository-validation.js +237 -0
- package/dist/pi/build/src/flow-kit/validate.d.ts +2 -14
- package/dist/pi/build/src/flow-kit/validate.js +18 -345
- package/dist/pi/build/src/index.d.ts +4 -2
- package/dist/pi/build/src/index.js +2 -1
- package/dist/pi/docs/migrations.md +5 -0
- package/dist/pi/docs/public-workflow-cli.md +41 -5
- package/dist/pi/docs/spec/builder-flow-runtime.md +117 -0
- package/dist/pi/evals/integration/test_builder_step_producers.sh +60 -21
- package/dist/pi/evals/integration/test_bundle_install.sh +15 -15
- package/dist/pi/evals/integration/test_phase_map_and_gate_claim.sh +9 -22
- package/dist/pi/install.sh +1 -1
- package/dist/pi/kits/builder/kit.json +88 -14
- package/docs/migrations.md +5 -0
- package/docs/public-workflow-cli.md +41 -5
- package/docs/spec/builder-flow-runtime.md +117 -0
- package/evals/integration/test_builder_step_producers.sh +60 -21
- package/evals/integration/test_bundle_install.sh +15 -15
- package/evals/integration/test_phase_map_and_gate_claim.sh +9 -22
- package/kits/builder/kit.json +88 -14
- package/package.json +1 -1
- package/src/builder-flow-run-adapter.ts +3 -0
- package/src/builder-flow-runtime.ts +73 -46
- package/src/builder-gate-action-envelope.ts +531 -0
- package/src/cli/builder-flow-runtime.test.mjs +289 -58
- package/src/cli/continuation-driver.test.mjs +542 -24
- package/src/cli/kit-metadata-security.test.mjs +161 -8
- package/src/cli/public-contracts.ts +41 -0
- package/src/cli/workflow-sidecar.ts +9 -13
- package/src/cli/workflow.ts +48 -12
- package/src/continuation-driver.ts +466 -378
- package/src/continuation-persistence.ts +228 -0
- package/src/continuation-validation.ts +137 -0
- package/src/flow-kit/action-metadata.ts +155 -0
- package/src/flow-kit/action-repository-validation.ts +192 -0
- package/src/flow-kit/validate.ts +19 -326
- package/src/index.ts +17 -0
|
@@ -6,7 +6,8 @@ import { isDeepStrictEqual } from "node:util";
|
|
|
6
6
|
import { fileURLToPath } from "node:url";
|
|
7
7
|
import { validateDefinition } from "@kontourai/flow";
|
|
8
8
|
import { loadBuilderFlowRun } from "../builder-flow-run-adapter.js";
|
|
9
|
-
import {
|
|
9
|
+
import { parseKitFlowStepActions } from "../flow-kit/validate.js";
|
|
10
|
+
import { MAX_CONTINUATION_TURN_RESULT_BYTES, createFileContinuationStore, driveBuilderFlowSession, withContinuationDriverLock } from "../continuation-driver.js";
|
|
10
11
|
import { inspectBuilderFlowSession, recoverBuilderFlowSession, syncBuilderFlowSession } from "../builder-flow-runtime.js";
|
|
11
12
|
import { flowAgentsPackageRoot, flowAgentsPackageVersion } from "../lib/package-version.js";
|
|
12
13
|
import { pinnedFlowAgentsCommand } from "../lib/pinned-cli-command.js";
|
|
@@ -87,12 +88,14 @@ async function drive(sessionDir, argv, json) {
|
|
|
87
88
|
assertOrdinaryMatchingAssignmentActor(sessionDir, slug);
|
|
88
89
|
const adapterCommand = loadContinuationAdapterCommand(adapterCommandFile);
|
|
89
90
|
let evidenceSigner = null;
|
|
90
|
-
|
|
91
|
+
let observedAdapterTurns = [];
|
|
91
92
|
const result = await withContinuationDriverLock(sessionDir, async (lock) => {
|
|
92
93
|
assertOrdinaryMatchingAssignmentActor(sessionDir, slug);
|
|
93
94
|
evidenceSigner = evidenceSigningKeyFile ? consumeEvidenceSigningKey(evidenceSigningKeyFile) : null;
|
|
94
|
-
|
|
95
|
+
const continuationStore = createFileContinuationStore(sessionDir);
|
|
96
|
+
const outcome = await driveBuilderFlowSession({
|
|
95
97
|
sessionDir,
|
|
98
|
+
store: continuationStore,
|
|
96
99
|
maxTurns,
|
|
97
100
|
adapterCommandIdentity: adapterCommand.identity,
|
|
98
101
|
authorizeTurn: async () => { assertOrdinaryMatchingAssignmentActor(sessionDir, slug); },
|
|
@@ -120,18 +123,14 @@ async function drive(sessionDir, argv, json) {
|
|
|
120
123
|
continuationTurnSecret: context?.continuationTurnSecret,
|
|
121
124
|
continuationRunId: context?.continuationRunId,
|
|
122
125
|
}),
|
|
123
|
-
...(evidenceSigningKeyFile ? {
|
|
124
|
-
|
|
125
|
-
request: structuredClone(request),
|
|
126
|
-
result: structuredClone(adapterResult),
|
|
127
|
-
}];
|
|
128
|
-
if (Buffer.byteLength(JSON.stringify(next), "utf8") > 1_048_576) {
|
|
129
|
-
throw new Error("continuation accepted-turn evidence must not exceed 1048576 aggregate bytes");
|
|
130
|
-
}
|
|
131
|
-
observedAdapterTurns.push(next.at(-1));
|
|
126
|
+
...(evidenceSigningKeyFile ? { preflightTurn: async (request) => {
|
|
127
|
+
assertAcceptedTurnEvidenceCapacity(attestationTurns(continuationStore.acceptedTurns()), request);
|
|
132
128
|
} } : {}),
|
|
133
129
|
waitForBarrier: async (barrier) => waitForContinuationBarrier(barrier, { maxWaitMs: barrierWaitMs, pollMs: barrierPollMs }),
|
|
134
130
|
});
|
|
131
|
+
if (evidenceSigningKeyFile)
|
|
132
|
+
observedAdapterTurns = attestationTurns(continuationStore.acceptedTurns());
|
|
133
|
+
return outcome;
|
|
135
134
|
});
|
|
136
135
|
const output = evidenceSigner
|
|
137
136
|
? { ...result, evidence_attestation: signDriveEvidence(evidenceSigner, adapterCommand.identity, maxTurns, result, observedAdapterTurns) }
|
|
@@ -142,6 +141,21 @@ async function drive(sessionDir, argv, json) {
|
|
|
142
141
|
console.log(`Continuation driver ${result.outcome} after ${result.turns_started} turn(s); canonical Flow is ${result.snapshot.status} at ${result.snapshot.current_step}.`);
|
|
143
142
|
return 0;
|
|
144
143
|
}
|
|
144
|
+
function attestationTurns(turns) {
|
|
145
|
+
const covered = turns.map((turn) => ({ request: structuredClone(turn.request), result: structuredClone(turn.result) }));
|
|
146
|
+
if (Buffer.byteLength(JSON.stringify(covered), "utf8") > 1_048_576) {
|
|
147
|
+
throw new Error("continuation accepted-turn evidence must not exceed 1048576 aggregate bytes");
|
|
148
|
+
}
|
|
149
|
+
return covered;
|
|
150
|
+
}
|
|
151
|
+
export function assertAcceptedTurnEvidenceCapacity(observedTurns, request) {
|
|
152
|
+
const base = [...observedTurns, { request: structuredClone(request), result: null }];
|
|
153
|
+
const bytesWithPlaceholder = Buffer.byteLength(JSON.stringify(base), "utf8");
|
|
154
|
+
const exactReservedBytes = bytesWithPlaceholder - Buffer.byteLength("null", "utf8") + MAX_CONTINUATION_TURN_RESULT_BYTES;
|
|
155
|
+
if (exactReservedBytes > 1_048_576) {
|
|
156
|
+
throw new Error("continuation accepted-turn evidence lacks capacity for another bounded result");
|
|
157
|
+
}
|
|
158
|
+
}
|
|
145
159
|
function consumeEvidenceSigningKey(fileInput) {
|
|
146
160
|
if (!path.isAbsolute(fileInput) || fileInput !== path.normalize(fileInput)) {
|
|
147
161
|
throw new Error("workflow drive evidence signing key file must be an absolute canonical path");
|
|
@@ -326,6 +340,15 @@ async function evidence(sessionDir, argv, json) {
|
|
|
326
340
|
if (Object.hasOwn(parsed.flags, "command") && commands.length === 0) {
|
|
327
341
|
throw new Error("workflow evidence --command requires a shell command value");
|
|
328
342
|
}
|
|
343
|
+
const expectation = flagString(parsed.flags, "expectation");
|
|
344
|
+
// Operation-bound expectations deliberately have no generic evidence writer.
|
|
345
|
+
// Check before recovery, locking, or actor resolution so a locally authored
|
|
346
|
+
// operation result cannot cause any canonical or projection mutation.
|
|
347
|
+
const inspected = await inspectBuilderFlowSession({ sessionDir });
|
|
348
|
+
const operation = builderOperationForExpectation(inspected.run.definitionId, expectation);
|
|
349
|
+
if (operation) {
|
|
350
|
+
throw new Error(`workflow evidence cannot satisfy operation-bound expectation ${expectation}; ${operation} requires authenticated external ChangeProvider completion`);
|
|
351
|
+
}
|
|
329
352
|
const requiresTestEvidence = flagString(parsed.flags, "expectation") === "tests-evidence" && flagString(parsed.flags, "status") === "pass";
|
|
330
353
|
// Argument and command-shape rejection must be read-only. Recovery below may
|
|
331
354
|
// repair stale projections, so it runs only after every command is accepted.
|
|
@@ -374,6 +397,20 @@ async function evidence(sessionDir, argv, json) {
|
|
|
374
397
|
: `Recorded evidence; canonical run is awaiting the remaining gate expectations at ${report.current_step}.`);
|
|
375
398
|
return 0;
|
|
376
399
|
}
|
|
400
|
+
function builderOperationForExpectation(flowId, expectationId) {
|
|
401
|
+
const kit = readJsonFile(path.join(PACKAGE_ROOT, "kits", "builder", "kit.json"), "Builder kit metadata");
|
|
402
|
+
const parsed = parseKitFlowStepActions(kit, "kits/builder/kit.json");
|
|
403
|
+
if (parsed.errors.length)
|
|
404
|
+
throw new Error(`Builder kit metadata is invalid: ${parsed.errors.join("; ")}`);
|
|
405
|
+
for (const action of parsed.entries) {
|
|
406
|
+
if (action.flow_id !== flowId)
|
|
407
|
+
continue;
|
|
408
|
+
const binding = action.expectation_bindings.find((candidate) => candidate.expectation_id === expectationId);
|
|
409
|
+
if (binding?.interface === "operation")
|
|
410
|
+
return binding.operation ?? "the declared external operation";
|
|
411
|
+
}
|
|
412
|
+
return null;
|
|
413
|
+
}
|
|
377
414
|
async function critique(sessionDir, argv, json) {
|
|
378
415
|
const parsed = parseArgs(argv);
|
|
379
416
|
assertOnlyFlags(parsed.flags, new Set(["artifact-root", "session-dir", "json", "id", "verdict", "summary", "artifact-ref", "finding-json", "lane-json", "timestamp"]), "workflow critique");
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { type GateActionEnvelope, type GateActionPriorProgress, type GateActionProgressSnapshot } from "./builder-gate-action-envelope.js";
|
|
2
|
+
export { MAX_CONTINUATION_TURNS, createFileContinuationStore, withContinuationDriverLock } from "./continuation-persistence.js";
|
|
3
|
+
export { MAX_CONTINUATION_ADAPTER_EVIDENCE_BYTES, MAX_CONTINUATION_TURN_RESULT_BYTES } from "./continuation-validation.js";
|
|
1
4
|
export type ContinuationBarrier = {
|
|
2
5
|
kind: "pid";
|
|
3
6
|
pid: number;
|
|
@@ -12,6 +15,10 @@ export type ContinuationSnapshot = {
|
|
|
12
15
|
disposition: "continue" | "waiting" | "done" | "failed";
|
|
13
16
|
current_step: string;
|
|
14
17
|
next_action: Record<string, unknown> | null;
|
|
18
|
+
/** Additive Builder-specific execution context. Generic adapters may ignore it. */
|
|
19
|
+
gate_action_envelope?: GateActionEnvelope;
|
|
20
|
+
/** Canonical progress observation, available even when no action envelope is emitted. */
|
|
21
|
+
progress_snapshot?: GateActionProgressSnapshot;
|
|
15
22
|
};
|
|
16
23
|
export type ContinuationTurnRequest = {
|
|
17
24
|
schema_version: "1.0";
|
|
@@ -21,6 +28,8 @@ export type ContinuationTurnRequest = {
|
|
|
21
28
|
iteration: number;
|
|
22
29
|
max_turns: number;
|
|
23
30
|
next_action: Record<string, unknown> | null;
|
|
31
|
+
/** Additive schema-1.0 field; older external adapters remain valid. */
|
|
32
|
+
gate_action_envelope?: GateActionEnvelope;
|
|
24
33
|
};
|
|
25
34
|
export type ContinuationTurnResult = {
|
|
26
35
|
status: "completed";
|
|
@@ -45,12 +54,20 @@ export type ContinuationDriverState = {
|
|
|
45
54
|
turns_started: number;
|
|
46
55
|
active_turn_step?: string | null;
|
|
47
56
|
active_turn_public_key_digest?: string | null;
|
|
57
|
+
/** Durable recovery marker for an adapter turn without a post-turn measurement. */
|
|
58
|
+
active_turn_phase?: "prepared" | "started" | "measured" | null;
|
|
59
|
+
active_turn_progress?: GateActionProgressSnapshot | null;
|
|
60
|
+
/** Crash-recovery journal entry retained until capture and audit are durable. */
|
|
61
|
+
active_turn_capture?: ContinuationAcceptedTurn | null;
|
|
62
|
+
/** Last canonical progress observed after an adapter turn. Additive to state schema 1.0. */
|
|
63
|
+
last_progress?: GateActionProgressSnapshot | null;
|
|
64
|
+
prior_progress?: GateActionPriorProgress | null;
|
|
48
65
|
pending_barrier: ContinuationBarrier | null;
|
|
49
66
|
updated_at: string;
|
|
50
67
|
};
|
|
51
68
|
export type ContinuationDriverEvent = {
|
|
52
69
|
schema_version: "1.0";
|
|
53
|
-
type: "started" | "turn_started" | "turn_completed" | "gate_not_advanced" | "turn_failed" | "authority_cleanup_failed" | "parked" | "resumed" | "done" | "budget_exhausted";
|
|
70
|
+
type: "started" | "turn_started" | "turn_completed" | "turn_recovered" | "gate_not_advanced" | "turn_failed" | "authority_cleanup_failed" | "parked" | "resumed" | "done" | "budget_exhausted";
|
|
54
71
|
run_id: string;
|
|
55
72
|
definition_id: string;
|
|
56
73
|
current_step: string;
|
|
@@ -59,12 +76,31 @@ export type ContinuationDriverEvent = {
|
|
|
59
76
|
barrier?: ContinuationBarrier;
|
|
60
77
|
summary?: string;
|
|
61
78
|
failure_kind?: "adapter_error" | "timeout";
|
|
79
|
+
progress?: GateActionPriorProgress;
|
|
80
|
+
turn_id?: string;
|
|
81
|
+
};
|
|
82
|
+
export type ContinuationAcceptedTurn = {
|
|
83
|
+
schema_version: "1.0";
|
|
84
|
+
turn_id: string;
|
|
85
|
+
iteration: number;
|
|
86
|
+
request: ContinuationTurnRequest;
|
|
87
|
+
result: ContinuationTurnResult;
|
|
88
|
+
progress: GateActionPriorProgress | null;
|
|
89
|
+
captured_at: string;
|
|
62
90
|
};
|
|
63
91
|
export interface ContinuationStateStore {
|
|
64
92
|
load(): ContinuationDriverState | null;
|
|
65
93
|
save(state: ContinuationDriverState): void;
|
|
66
94
|
append(event: ContinuationDriverEvent): void;
|
|
67
95
|
}
|
|
96
|
+
/**
|
|
97
|
+
* Optional durable accepted-turn journal. Kept separate so existing stores that
|
|
98
|
+
* only implement load/save/append remain valid continuation drivers.
|
|
99
|
+
*/
|
|
100
|
+
export interface ContinuationAcceptedTurnJournal {
|
|
101
|
+
captureAcceptedTurn(turn: ContinuationAcceptedTurn): void;
|
|
102
|
+
acceptedTurns(): ContinuationAcceptedTurn[];
|
|
103
|
+
}
|
|
68
104
|
export interface ContinuationRuntimePort {
|
|
69
105
|
inspect(): Promise<ContinuationSnapshot>;
|
|
70
106
|
synchronize(): Promise<ContinuationSnapshot>;
|
|
@@ -99,6 +135,7 @@ export interface RunContinuationDriverInput {
|
|
|
99
135
|
waitForBarrier?: (barrier: ContinuationBarrier) => Promise<"ready" | "pending">;
|
|
100
136
|
authorizeTurn?: () => Promise<void>;
|
|
101
137
|
issueTurnAuthority?: (request: ContinuationTurnRequest) => Promise<ContinuationTurnAuthority>;
|
|
138
|
+
preflightTurn?: (request: ContinuationTurnRequest) => void | Promise<void>;
|
|
102
139
|
onTurnAccepted?: (request: ContinuationTurnRequest, result: ContinuationTurnResult) => void | Promise<void>;
|
|
103
140
|
now?: () => Date;
|
|
104
141
|
}
|
|
@@ -110,10 +147,10 @@ export interface DriveBuilderFlowSessionInput {
|
|
|
110
147
|
waitForBarrier?: RunContinuationDriverInput["waitForBarrier"];
|
|
111
148
|
authorizeTurn?: RunContinuationDriverInput["authorizeTurn"];
|
|
112
149
|
issueTurnAuthority?: RunContinuationDriverInput["issueTurnAuthority"];
|
|
150
|
+
preflightTurn?: RunContinuationDriverInput["preflightTurn"];
|
|
113
151
|
onTurnAccepted?: RunContinuationDriverInput["onTurnAccepted"];
|
|
114
152
|
now?: () => Date;
|
|
153
|
+
store?: ContinuationStateStore;
|
|
115
154
|
}
|
|
116
155
|
export declare function runContinuationDriver(input: RunContinuationDriverInput): Promise<ContinuationDriverOutcome>;
|
|
117
156
|
export declare function driveBuilderFlowSession(input: DriveBuilderFlowSessionInput): Promise<ContinuationDriverOutcome>;
|
|
118
|
-
export declare function withContinuationDriverLock<T>(sessionDirInput: string, body: (lease: ContinuationDriverLockLease) => Promise<T>): Promise<T>;
|
|
119
|
-
export declare function createFileContinuationStore(sessionDirInput: string): ContinuationStateStore;
|