harnery 0.20.0 → 0.22.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/README.md +1 -1
- package/dist/core/work/index.d.ts +1 -1
- package/dist/core/work/index.d.ts.map +1 -1
- package/dist/core/work/read.d.ts +1 -1
- package/dist/core/work/read.d.ts.map +1 -1
- package/dist/core/work/runner.d.ts +1 -1
- package/dist/core/work/runner.d.ts.map +1 -1
- package/dist/core/work/runner.js +61 -0
- package/dist/core/work/state.d.ts +3 -0
- package/dist/core/work/state.d.ts.map +1 -1
- package/dist/core/work/state.js +40 -6
- package/dist/core/workflow/attempt-context.d.ts +5 -0
- package/dist/core/workflow/attempt-context.d.ts.map +1 -0
- package/dist/core/workflow/attempt-context.js +189 -0
- package/dist/core/workflow/engine.d.ts.map +1 -1
- package/dist/core/workflow/engine.js +47 -3
- package/dist/core/workflow/index.d.ts +3 -2
- package/dist/core/workflow/index.d.ts.map +1 -1
- package/dist/core/workflow/index.js +2 -1
- package/dist/core/workflow/proof.d.ts +3 -1
- package/dist/core/workflow/proof.d.ts.map +1 -1
- package/dist/core/workflow/proof.js +14 -1
- package/dist/core/workflow/run-state.d.ts +3 -1
- package/dist/core/workflow/run-state.d.ts.map +1 -1
- package/dist/core/workflow/run-state.js +10 -0
- package/dist/core/workflow/types.d.ts +43 -0
- package/dist/core/workflow/types.d.ts.map +1 -1
- package/dist/core/workflow/types.js +2 -0
- package/dist/core/workflow/work-context.d.ts +5 -0
- package/dist/core/workflow/work-context.d.ts.map +1 -0
- package/dist/core/workflow/work-context.js +58 -0
- package/package.json +1 -1
- package/src/core/work/index.ts +1 -0
- package/src/core/work/read.ts +1 -0
- package/src/core/work/runner.ts +76 -2
- package/src/core/work/state.ts +68 -6
- package/src/core/workflow/attempt-context.ts +215 -0
- package/src/core/workflow/engine.ts +61 -2
- package/src/core/workflow/index.ts +15 -1
- package/src/core/workflow/proof.ts +20 -1
- package/src/core/workflow/run-state.ts +17 -1
- package/src/core/workflow/types.ts +52 -0
- package/src/core/workflow/work-context.ts +66 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,2BAA2B,EAC3B,4BAA4B,EAC5B,gBAAgB,EAChB,wBAAwB,EACxB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,gCAAgC,EAChC,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACjF,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,YAAY,EACZ,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,6BAA6B,EAC7B,uBAAuB,EACvB,oCAAoC,EACpC,uBAAuB,EACvB,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,EACT,UAAU,EACV,YAAY,EACZ,cAAc,EACd,cAAc,EACd,yBAAyB,EACzB,uBAAuB,EACvB,WAAW,EACX,YAAY,EACZ,SAAS,EACT,OAAO,EACP,YAAY,EACZ,WAAW,EACX,WAAW,EACX,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,qBAAqB,EACrB,sBAAsB,EACtB,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,yBAAyB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,2BAA2B,EAC3B,4BAA4B,EAC5B,gBAAgB,EAChB,wBAAwB,EACxB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,gCAAgC,EAChC,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,4BAA4B,EAC5B,iCAAiC,EACjC,+BAA+B,GAChC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACjF,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,YAAY,EACZ,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,6BAA6B,EAC7B,uBAAuB,EACvB,oCAAoC,EACpC,uBAAuB,EACvB,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,EACT,UAAU,EACV,YAAY,EACZ,cAAc,EACd,cAAc,EACd,yBAAyB,EACzB,uBAAuB,EACvB,WAAW,EACX,YAAY,EACZ,SAAS,EACT,OAAO,EACP,YAAY,EACZ,WAAW,EACX,WAAW,EACX,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,EAC3B,2BAA2B,EAC3B,kCAAkC,EAClC,eAAe,EACf,qBAAqB,EACrB,sBAAsB,EACtB,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,uCAAuC,EACvC,6BAA6B,EAC7B,oCAAoC,GACrC,MAAM,YAAY,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { assertWorkflowRunId, createWorkflowApproval, listWorkflowApprovals, readWorkflowApproval, renderWorkflowApproval, resolveWorkflowApproval, WORKFLOW_APPROVAL_SCHEMA_VERSION, workflowApprovalId, } from "./approvals.js";
|
|
2
|
+
export { freezeWorkflowAttemptContext, isCanonicalWorkflowAttemptContext, normalizeWorkflowAttemptContext, } from "./attempt-context.js";
|
|
2
3
|
export { runWorkflow, WorkflowParkedError, WorkflowRunError } from "./engine.js";
|
|
3
4
|
export { buildWorkflowProof, createEvidenceRecord, digestResult, normalizeWorkflowMeta, readWorkflowProof, renderWorkflowProof, rollupAcceptance, writeWorkflowProof, } from "./proof.js";
|
|
4
5
|
export { acquireWorkflowResumeLease, assertWorkflowRunResumable, assertWorkflowScriptUnchanged, readWorkflowRunManifest, WORKFLOW_RUN_MANIFEST_SCHEMA_VERSION, workflowRunManifestPath, workflowScriptDigest, writeWorkflowRunManifest, } from "./run-state.js";
|
|
5
|
-
export { WORKFLOW_PROOF_SCHEMA_VERSION } from "./types.js";
|
|
6
|
+
export { WORKFLOW_ATTEMPT_CONTEXT_SCHEMA_VERSION, WORKFLOW_PROOF_SCHEMA_VERSION, WORKFLOW_WORK_CONTEXT_SCHEMA_VERSION, } from "./types.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { RepoSnapshot } from "../context/index.js";
|
|
2
2
|
import type { NormalizedPolicy, PolicyDecision, PolicyIsolation, PolicyNetworkAccess } from "../policy/index.js";
|
|
3
|
-
import type { AcceptanceCriterion, AcceptanceResult, AcceptanceSummary, HarnessEvidenceCapability, ResultDigest, WorkflowAgentProof, WorkflowEvidenceInput, WorkflowEvidenceRecord, WorkflowMeta, WorkflowProof } from "./types.js";
|
|
3
|
+
import type { AcceptanceCriterion, AcceptanceResult, AcceptanceSummary, HarnessEvidenceCapability, ResultDigest, WorkflowAgentProof, WorkflowAttemptContext, WorkflowEvidenceInput, WorkflowEvidenceRecord, WorkflowMeta, WorkflowProof, WorkflowWorkContext } from "./types.js";
|
|
4
4
|
export interface NormalizedWorkflowMeta {
|
|
5
5
|
name: string;
|
|
6
6
|
description?: string;
|
|
@@ -10,6 +10,8 @@ export interface NormalizedWorkflowMeta {
|
|
|
10
10
|
export interface BuildWorkflowProofInput {
|
|
11
11
|
runId: string;
|
|
12
12
|
workItemId?: string;
|
|
13
|
+
workContext?: Readonly<WorkflowWorkContext>;
|
|
14
|
+
attemptContext?: Readonly<WorkflowAttemptContext>;
|
|
13
15
|
meta: NormalizedWorkflowMeta;
|
|
14
16
|
status: "succeeded" | "failed";
|
|
15
17
|
startedAt: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proof.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/proof.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EACV,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,mBAAmB,EACpB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"proof.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/proof.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EACV,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,mBAAmB,EACpB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,KAAK,EACV,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,yBAAyB,EAEzB,YAAY,EACZ,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,YAAY,EAEZ,aAAa,EAIb,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAgBpB,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,mBAAmB,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IAC5C,cAAc,CAAC,EAAE,QAAQ,CAAC,sBAAsB,CAAC,CAAC;IAClD,IAAI,EAAE,sBAAsB,CAAC;IAC7B,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7B,QAAQ,EAAE,sBAAsB,EAAE,CAAC;IACnC,eAAe,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,yBAAyB,GAAG,SAAS,CAAC,CAAC,CAAC;IAClF,MAAM,CAAC,EAAE;QACP,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC;QACnC,SAAS,EAAE,SAAS,cAAc,EAAE,CAAC;QACrC,SAAS,EAAE,eAAe,CAAC;QAC3B,aAAa,EAAE,mBAAmB,CAAC;KACpC,CAAC;IACF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,YAAY,GAAG,SAAS,EAC9B,YAAY,EAAE,MAAM,GACnB,sBAAsB,CAqCxB;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,KAAK,EAAE,qBAAqB,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,sBAAsB,CA6BzB;AAED,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,mBAAmB,EAAE,EAC/B,QAAQ,EAAE,sBAAsB,EAAE,GACjC;IAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAA;CAAE,CAuB9D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,YAAY,CAQjF;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,GAAG,aAAa,CA6ChF;AAgCD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI,CAe3E;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,CA6BjF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAoChE"}
|
|
@@ -2,7 +2,9 @@ import { createHash, randomUUID } from "node:crypto";
|
|
|
2
2
|
import { chmodSync, existsSync, mkdirSync, readFileSync, renameSync, statSync, unlinkSync, writeFileSync, } from "node:fs";
|
|
3
3
|
import { dirname, join } from "node:path";
|
|
4
4
|
import { policyDigest } from "../policy/index.js";
|
|
5
|
+
import { isCanonicalWorkflowAttemptContext } from "./attempt-context.js";
|
|
5
6
|
import { WORKFLOW_PROOF_SCHEMA_VERSION } from "./types.js";
|
|
7
|
+
import { isCanonicalWorkflowWorkContext } from "./work-context.js";
|
|
6
8
|
const MAX_ACCEPTANCE_CRITERIA = 50;
|
|
7
9
|
const MAX_EVIDENCE_RECORDS = 200;
|
|
8
10
|
const MAX_PACKET_BYTES = 512 * 1024;
|
|
@@ -127,6 +129,8 @@ export function buildWorkflowProof(input) {
|
|
|
127
129
|
started_at: input.startedAt,
|
|
128
130
|
ended_at: input.endedAt,
|
|
129
131
|
duration_ms: input.durationMs,
|
|
132
|
+
work_context: input.workContext,
|
|
133
|
+
attempt_context: input.attemptContext,
|
|
130
134
|
objective: input.meta.objective,
|
|
131
135
|
error: clippedOptional(input.error, MAX_SUMMARY_CHARS),
|
|
132
136
|
result: input.result === undefined ? undefined : digestResult(input.result),
|
|
@@ -209,7 +213,16 @@ export function readWorkflowProof(coordRoot, runId) {
|
|
|
209
213
|
catch (error) {
|
|
210
214
|
throw new Error(`cannot parse workflow proof at ${path}: ${error.message}`);
|
|
211
215
|
}
|
|
212
|
-
if (proof.schema_version !== WORKFLOW_PROOF_SCHEMA_VERSION ||
|
|
216
|
+
if (proof.schema_version !== WORKFLOW_PROOF_SCHEMA_VERSION ||
|
|
217
|
+
proof.run?.id !== runId ||
|
|
218
|
+
(proof.run.work_context !== undefined &&
|
|
219
|
+
(!proof.run.work_item_id ||
|
|
220
|
+
proof.run.work_context.id !== proof.run.work_item_id ||
|
|
221
|
+
!isCanonicalWorkflowWorkContext(proof.run.work_context))) ||
|
|
222
|
+
(proof.run.attempt_context !== undefined &&
|
|
223
|
+
(!proof.run.work_item_id ||
|
|
224
|
+
!proof.run.work_context ||
|
|
225
|
+
!isCanonicalWorkflowAttemptContext(proof.run.attempt_context)))) {
|
|
213
226
|
throw new Error(`workflow proof at ${path} has an unsupported or mismatched schema`);
|
|
214
227
|
}
|
|
215
228
|
return proof;
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import type { RepoSnapshot } from "../context/index.js";
|
|
2
2
|
import { type NormalizedPolicy, type PolicyIsolation, type PolicyNetworkAccess } from "../policy/index.js";
|
|
3
|
-
import type { WorkflowSpecialistProfile } from "./types.js";
|
|
3
|
+
import type { WorkflowAttemptContext, WorkflowSpecialistProfile, WorkflowWorkContext } from "./types.js";
|
|
4
4
|
export declare const WORKFLOW_RUN_MANIFEST_SCHEMA_VERSION: 1;
|
|
5
5
|
export interface WorkflowRunManifest {
|
|
6
6
|
schema_version: typeof WORKFLOW_RUN_MANIFEST_SCHEMA_VERSION;
|
|
7
7
|
run_id: string;
|
|
8
8
|
work_item_id?: string;
|
|
9
|
+
work_context?: WorkflowWorkContext;
|
|
10
|
+
attempt_context?: WorkflowAttemptContext;
|
|
9
11
|
name: string;
|
|
10
12
|
started_at: string;
|
|
11
13
|
script: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-state.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/run-state.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EACL,KAAK,gBAAgB,EAErB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EAEzB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"run-state.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/run-state.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EACL,KAAK,gBAAgB,EAErB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EAEzB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,KAAK,EACV,sBAAsB,EACtB,yBAAyB,EACzB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAGpB,eAAO,MAAM,oCAAoC,EAAG,CAAU,CAAC;AAK/D,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,OAAO,oCAAoC,CAAC;IAC5D,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC,eAAe,CAAC,EAAE,sBAAsB,CAAC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACzC,iBAAiB,EAAE,YAAY,CAAC;IAChC,SAAS,EAAE;QACT,GAAG,EAAE,MAAM,CAAC;QACZ,eAAe,EAAE,MAAM,CAAC;QACxB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,iBAAiB,EAAE,OAAO,CAAC;QAC3B,iBAAiB,EAAE,OAAO,CAAC;QAC3B,aAAa,EAAE,MAAM,GAAG,MAAM,CAAC;QAC/B,kBAAkB,EAAE,MAAM,CAAC;QAC3B,SAAS,EAAE,eAAe,CAAC;QAC3B,cAAc,EAAE,mBAAmB,CAAC;QACpC,MAAM,CAAC,EAAE,gBAAgB,CAAC;QAC1B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;KACzD,CAAC;CACH;AAED,MAAM,WAAW,6BAA6B;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,mBAAmB,CAAC;CAC/B;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,6BAA6B,GAAG,MAAM,CAmBrF;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,mBAAmB,CAwC7F;AAED,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ;IAAE,QAAQ,EAAE,mBAAmB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CA4BvD;AAED,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CASjF;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAGhF;AAED,4EAA4E;AAC5E,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,IAAI,CA0CvF"}
|
|
@@ -4,7 +4,9 @@ import { hostname } from "node:os";
|
|
|
4
4
|
import { dirname, isAbsolute, join, resolve } from "node:path";
|
|
5
5
|
import { normalizePolicy, policyDigest, } from "../policy/index.js";
|
|
6
6
|
import { assertWorkflowRunId, readWorkflowApproval } from "./approvals.js";
|
|
7
|
+
import { isCanonicalWorkflowAttemptContext } from "./attempt-context.js";
|
|
7
8
|
import { normalizeWorkflowSpecialists } from "./specialists.js";
|
|
9
|
+
import { isCanonicalWorkflowWorkContext } from "./work-context.js";
|
|
8
10
|
export const WORKFLOW_RUN_MANIFEST_SCHEMA_VERSION = 1;
|
|
9
11
|
const MANIFEST_LIMIT_BYTES = 256 * 1024;
|
|
10
12
|
const FOREIGN_LEASE_STALE_MS = 24 * 60 * 60 * 1_000;
|
|
@@ -53,6 +55,14 @@ export function readWorkflowRunManifest(coordRoot, runId) {
|
|
|
53
55
|
manifest.run_id !== runId ||
|
|
54
56
|
(manifest.work_item_id !== undefined &&
|
|
55
57
|
!/^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$/.test(manifest.work_item_id)) ||
|
|
58
|
+
(manifest.work_context !== undefined &&
|
|
59
|
+
(!manifest.work_item_id ||
|
|
60
|
+
manifest.work_context.id !== manifest.work_item_id ||
|
|
61
|
+
!isCanonicalWorkflowWorkContext(manifest.work_context))) ||
|
|
62
|
+
(manifest.attempt_context !== undefined &&
|
|
63
|
+
(!manifest.work_item_id ||
|
|
64
|
+
!manifest.work_context ||
|
|
65
|
+
!isCanonicalWorkflowAttemptContext(manifest.attempt_context))) ||
|
|
56
66
|
typeof manifest.name !== "string" ||
|
|
57
67
|
manifest.name.length === 0 ||
|
|
58
68
|
manifest.name.length > 200 ||
|
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
import type { DispatchCostEstimator, ExternalMutationRequest, NormalizedPolicy, PolicyAskResolver, PolicyDecision, PolicyIsolation, PolicyNetworkAccess, PolicySpec } from "../policy/index.js";
|
|
10
10
|
import type { BillingMode, BillingProber } from "./billing.js";
|
|
11
11
|
export declare const WORKFLOW_PROOF_SCHEMA_VERSION: 1;
|
|
12
|
+
export declare const WORKFLOW_WORK_CONTEXT_SCHEMA_VERSION: 1;
|
|
13
|
+
export declare const WORKFLOW_ATTEMPT_CONTEXT_SCHEMA_VERSION: 1;
|
|
12
14
|
export type EvidenceKind = "test" | "command" | "artifact" | "change" | "review" | "observation";
|
|
13
15
|
export type EvidenceStatus = "passed" | "failed" | "observed" | "unknown";
|
|
14
16
|
export type EvidenceSource = "workflow" | "engine";
|
|
@@ -126,6 +128,8 @@ export interface WorkflowProof {
|
|
|
126
128
|
started_at: string;
|
|
127
129
|
ended_at: string;
|
|
128
130
|
duration_ms: number;
|
|
131
|
+
work_context?: WorkflowWorkContext;
|
|
132
|
+
attempt_context?: WorkflowAttemptContext;
|
|
129
133
|
objective?: string;
|
|
130
134
|
error?: string;
|
|
131
135
|
result?: ResultDigest;
|
|
@@ -260,6 +264,12 @@ export type Spawner = (req: SpawnRequest) => Promise<SpawnResult>;
|
|
|
260
264
|
/** The API surface injected into a workflow script's default export. Explicit
|
|
261
265
|
* injection (no ambient globals): keeps scripts portable and unit-testable. */
|
|
262
266
|
export interface WorkflowContext {
|
|
267
|
+
/** Frozen durable-work assignment for work-linked runs. Standalone and
|
|
268
|
+
* legacy-resumed workflows have no work context. */
|
|
269
|
+
work?: Readonly<WorkflowWorkContext>;
|
|
270
|
+
/** Frozen attempt identity and, on retry, a bounded synopsis of prior
|
|
271
|
+
* terminal evidence. Absent for standalone and legacy-resumed workflows. */
|
|
272
|
+
attempt?: Readonly<WorkflowAttemptContext>;
|
|
263
273
|
/** Spawn one subagent; resolves to validated JSON (schema) or reply text. */
|
|
264
274
|
agent: (prompt: string, opts?: AgentOpts) => Promise<unknown>;
|
|
265
275
|
/** Run thunks with bounded concurrency; a rejected thunk resolves to null. */
|
|
@@ -284,6 +294,33 @@ export interface WorkflowModule {
|
|
|
284
294
|
meta?: WorkflowMeta;
|
|
285
295
|
default: (ctx: WorkflowContext) => Promise<unknown>;
|
|
286
296
|
}
|
|
297
|
+
/** Minimal immutable durable-work input exposed to reusable workflow code. */
|
|
298
|
+
export interface WorkflowWorkContext {
|
|
299
|
+
readonly schema_version: typeof WORKFLOW_WORK_CONTEXT_SCHEMA_VERSION;
|
|
300
|
+
readonly id: string;
|
|
301
|
+
readonly title: string;
|
|
302
|
+
readonly objective: string;
|
|
303
|
+
readonly acceptance: readonly string[];
|
|
304
|
+
}
|
|
305
|
+
export type WorkflowAttemptFailureCause = "workflow_error" | "acceptance_unsatisfied" | "acceptance_unknown" | "lost";
|
|
306
|
+
export interface WorkflowAttemptUnresolvedCriterion {
|
|
307
|
+
readonly id: string;
|
|
308
|
+
readonly statement: string;
|
|
309
|
+
readonly status: "unsatisfied" | "unknown";
|
|
310
|
+
}
|
|
311
|
+
export interface WorkflowAttemptPriorContext {
|
|
312
|
+
readonly run_id: string;
|
|
313
|
+
readonly causes: readonly WorkflowAttemptFailureCause[];
|
|
314
|
+
readonly error?: string;
|
|
315
|
+
readonly acceptance?: Readonly<AcceptanceSummary>;
|
|
316
|
+
readonly unresolved: readonly WorkflowAttemptUnresolvedCriterion[];
|
|
317
|
+
}
|
|
318
|
+
export interface WorkflowAttemptContext {
|
|
319
|
+
readonly schema_version: typeof WORKFLOW_ATTEMPT_CONTEXT_SCHEMA_VERSION;
|
|
320
|
+
readonly number: number;
|
|
321
|
+
readonly trigger: "initial" | "retry";
|
|
322
|
+
readonly prior?: Readonly<WorkflowAttemptPriorContext>;
|
|
323
|
+
}
|
|
287
324
|
export interface EngineOpts {
|
|
288
325
|
/** Repo root whose .harnery/ receives the run journal. */
|
|
289
326
|
coordRoot: string;
|
|
@@ -306,6 +343,12 @@ export interface EngineOpts {
|
|
|
306
343
|
runId?: string;
|
|
307
344
|
/** Durable objective this execution attempt belongs to. */
|
|
308
345
|
workItemId?: string;
|
|
346
|
+
/** Frozen assignment data supplied by a durable-work host. Requires the
|
|
347
|
+
* matching `workItemId`; parked resume always uses the manifest copy. */
|
|
348
|
+
workContext?: WorkflowWorkContext;
|
|
349
|
+
/** Frozen attempt data supplied by a durable-work host. Requires matching
|
|
350
|
+
* work item and work contexts; parked resume uses the manifest copy. */
|
|
351
|
+
attemptContext?: WorkflowAttemptContext;
|
|
309
352
|
/** Total-agent ceiling for the run (default 50): the runaway backstop. */
|
|
310
353
|
maxAgents?: number;
|
|
311
354
|
/** Concurrent-subagent cap for parallel() (default 4). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,qBAAqB,EACrB,uBAAuB,EACvB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,UAAU,EACX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE/D,eAAO,MAAM,6BAA6B,EAAG,CAAU,CAAC;AACxD,eAAO,MAAM,oCAAoC,EAAG,CAAU,CAAC;AAC/D,eAAO,MAAM,uCAAuC,EAAG,CAAU,CAAC;AAElE,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,aAAa,CAAC;AACjG,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;AAC1E,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,QAAQ,CAAC;AACnD,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,aAAa,GAAG,SAAS,CAAC;AACvE,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG,QAAQ,CAAC;AACvD,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,MAAM,CAAC;AAEnD,MAAM,WAAW,mBAAmB;IAClC,0EAA0E;IAC1E,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,cAAc,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAiB,SAAQ,mBAAmB;IAC3D,MAAM,EAAE,gBAAgB,CAAC;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,0EAA0E;IAC1E,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,WAAW,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,QAAQ,CAAC;IACjB,MAAM,EAAE,oBAAoB,CAAC;IAC7B,KAAK,EAAE,oBAAoB,CAAC;IAC5B,KAAK,EAAE;QACL,cAAc,EAAE,OAAO,CAAC;QACxB,YAAY,EAAE,OAAO,CAAC;QACtB,iBAAiB,EAAE,MAAM,EAAE,CAAC;QAC5B,mBAAmB,EAAE,MAAM,EAAE,CAAC;QAC9B,oBAAoB,EAAE,MAAM,EAAE,CAAC;QAC/B,kFAAkF;QAClF,UAAU,EAAE,OAAO,CAAC;QACpB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,WAAW,CAAC;IACrB,aAAa,EAAE;QACb,OAAO,EAAE,WAAW,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,CAAC;QAC7D,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,QAAQ,EAAE;QACR,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EACA,2BAA2B,GAC3B,iCAAiC,GACjC,uBAAuB,GACvB,0BAA0B,GAC1B,6BAA6B,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,OAAO,6BAA6B,CAAC;IACrD,GAAG,EAAE;QACH,EAAE,EAAE,MAAM,CAAC;QACX,wEAAwE;QACxE,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,iBAAiB,CAAC;QAC1B,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,mBAAmB,CAAC;QACnC,eAAe,CAAC,EAAE,sBAAsB,CAAC;QACzC,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,YAAY,CAAC;KACvB,CAAC;IACF,UAAU,EAAE;QACV,QAAQ,EAAE,gBAAgB,EAAE,CAAC;QAC7B,OAAO,EAAE,iBAAiB,CAAC;KAC5B,CAAC;IACF,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7B,QAAQ,EAAE,sBAAsB,EAAE,CAAC;IACnC,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,UAAU,EAAE,oBAAoB,CAAC;IACjC,SAAS,EAAE,uBAAuB,EAAE,CAAC;IACrC,QAAQ,EAAE,oBAAoB,EAAE,CAAC;IACjC,SAAS,EAAE;QACT,OAAO,EAAE;YACP,IAAI,EAAE,eAAe,CAAC;YACtB,MAAM,EAAE,MAAM,CAAC;YACf,KAAK,EAAE,MAAM,CAAC;SACf,CAAC;KACH,CAAC;CACH;AAED,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,CAAC,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,eAAe,CAAC;IAC3B,cAAc,EAAE,mBAAmB,CAAC;IACpC,MAAM,EAAE,gBAAgB,CAAC;IACzB,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED,MAAM,WAAW,yBAAyB;IACxC,YAAY,EAAE,uBAAuB,CAAC,eAAe,CAAC,CAAC;CACxD;AAED,sEAAsE;AACtE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC3D,oEAAoE;IACpE,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;IACtB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACzC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,iBAAiB;IACjB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,SAAS;IACxB;gFAC4E;IAC5E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;8EAE0E;IAC1E,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,iFAAiF;IACjF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;uDACmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;sDACkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;kBAEc;IACd,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAED;;kCAEkC;AAClC,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AAEjC;8EAC8E;AAC9E,MAAM,WAAW,yBAAyB;IACxC,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,yDAAyD;AACzD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ;2EACuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;8DAC0D;IAC1D,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;8EAC8E;AAC9E,MAAM,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,YAAY,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;AAElE;+EAC+E;AAC/E,MAAM,WAAW,eAAe;IAC9B;wDACoD;IACpD,IAAI,CAAC,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IACrC;gFAC4E;IAC5E,OAAO,CAAC,EAAE,QAAQ,CAAC,sBAAsB,CAAC,CAAC;IAC3C,6EAA6E;IAC7E,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9D,8EAA8E;IAC9E,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAC3E,+DAA+D;IAC/D,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,2CAA2C;IAC3C,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,qFAAqF;IACrF,QAAQ,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,MAAM,CAAC;IACnD,0EAA0E;IAC1E,SAAS,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;CACxE;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,mBAAmB,EAAE,CAAC;CACpC;AAED,oFAAoF;AACpF,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACrD;AAED,8EAA8E;AAC9E,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,cAAc,EAAE,OAAO,oCAAoC,CAAC;IACrE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;CACxC;AAED,MAAM,MAAM,2BAA2B,GACnC,gBAAgB,GAChB,wBAAwB,GACxB,oBAAoB,GACpB,MAAM,CAAC;AAEX,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,SAAS,CAAC;CAC5C;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,2BAA2B,EAAE,CAAC;IACxD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAClD,QAAQ,CAAC,UAAU,EAAE,SAAS,kCAAkC,EAAE,CAAC;CACpE;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,cAAc,EAAE,OAAO,uCAAuC,CAAC;IACxE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC;IACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,2BAA2B,CAAC,CAAC;CACxD;AAED,MAAM,WAAW,UAAU;IACzB,0DAA0D;IAC1D,SAAS,EAAE,MAAM,CAAC;IAClB;iDAC6C;IAC7C,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC;IAC7D,kFAAkF;IAClF,cAAc,CAAC,EAAE,WAAW,CAAC;IAC7B,sEAAsE;IACtE,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC,CAAC;IAClE;;6EAEyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;8DAE0D;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;6EACyE;IACzE,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAClC;4EACwE;IACxE,cAAc,CAAC,EAAE,sBAAsB,CAAC;IACxC,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gEAAgE;IAChE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B;;+BAE2B;IAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;iCAG6B;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,yEAAyE;IACzE,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B;mDAC+C;IAC/C,eAAe,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,yBAAyB,GAAG,SAAS,CAAC,CAAC,CAAC;IACvF,mFAAmF;IACnF,MAAM,CAAC,EAAE,UAAU,GAAG,gBAAgB,CAAC;IACvC,yFAAyF;IACzF,gBAAgB,CAAC,EAAE,iBAAiB,CAAC;IACrC,4FAA4F;IAC5F,oBAAoB,CAAC,EAAE,qBAAqB,CAAC;IAC7C,6DAA6D;IAC7D,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,4EAA4E;IAC5E,YAAY,CAAC,EAAE,oBAAoB,CAAC;IACpC,kEAAkE;IAClE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,+DAA+D;IAC/D,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,uEAAuE;IACvE,aAAa,CAAC,EAAE,mBAAmB,CAAC;CACrC;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,4EAA4E;IAC5E,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,iBAAiB,CAAC;IAC9B;;gFAE4E;IAC5E,6BAA6B,EAAE,MAAM,CAAC;IACtC,6EAA6E;IAC7E,OAAO,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,WAAW,CAAC;QAAC,IAAI,EAAE,WAAW,CAAA;KAAE,CAAC,CAAC;IAC5D,6DAA6D;IAC7D,MAAM,CAAC,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAC;CACzC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { WorkflowWorkContext } from "./types.js";
|
|
2
|
+
export declare function normalizeWorkflowWorkContext(value: unknown): WorkflowWorkContext;
|
|
3
|
+
export declare function freezeWorkflowWorkContext(value: unknown): Readonly<WorkflowWorkContext>;
|
|
4
|
+
export declare function isCanonicalWorkflowWorkContext(value: unknown): value is WorkflowWorkContext;
|
|
5
|
+
//# sourceMappingURL=work-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"work-context.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/work-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAUtD,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,CA+BhF;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CAAC,mBAAmB,CAAC,CAIvF;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,mBAAmB,CAO3F"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { WORKFLOW_WORK_CONTEXT_SCHEMA_VERSION } from "./types.js";
|
|
2
|
+
const WORK_ID = /^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$/;
|
|
3
|
+
const MAX_TITLE = 200;
|
|
4
|
+
const MAX_OBJECTIVE = 4_000;
|
|
5
|
+
const MAX_ACCEPTANCE = 50;
|
|
6
|
+
const MAX_ACCEPTANCE_ITEM = 500;
|
|
7
|
+
const FIELDS = new Set(["schema_version", "id", "title", "objective", "acceptance"]);
|
|
8
|
+
export function normalizeWorkflowWorkContext(value) {
|
|
9
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
10
|
+
throw new Error("workflow work context must be an object");
|
|
11
|
+
}
|
|
12
|
+
const input = value;
|
|
13
|
+
const extra = Object.keys(input).filter((key) => !FIELDS.has(key));
|
|
14
|
+
if (extra.length > 0) {
|
|
15
|
+
throw new Error(`workflow work context has unknown field ${JSON.stringify(extra[0])}`);
|
|
16
|
+
}
|
|
17
|
+
if (input.schema_version !== WORKFLOW_WORK_CONTEXT_SCHEMA_VERSION) {
|
|
18
|
+
throw new Error("workflow work context has an unsupported schema");
|
|
19
|
+
}
|
|
20
|
+
const id = requiredString(input.id, "workflow work context id", 100);
|
|
21
|
+
if (!WORK_ID.test(id)) {
|
|
22
|
+
throw new Error(`invalid workflow work context id ${JSON.stringify(id)}`);
|
|
23
|
+
}
|
|
24
|
+
if (!Array.isArray(input.acceptance) || input.acceptance.length > MAX_ACCEPTANCE) {
|
|
25
|
+
throw new Error(`workflow work context acceptance must contain at most ${MAX_ACCEPTANCE} criteria`);
|
|
26
|
+
}
|
|
27
|
+
const acceptance = input.acceptance.map((criterion, index) => requiredString(criterion, `workflow work context acceptance[${index}]`, MAX_ACCEPTANCE_ITEM));
|
|
28
|
+
return {
|
|
29
|
+
schema_version: WORKFLOW_WORK_CONTEXT_SCHEMA_VERSION,
|
|
30
|
+
id,
|
|
31
|
+
title: requiredString(input.title, "workflow work context title", MAX_TITLE),
|
|
32
|
+
objective: requiredString(input.objective, "workflow work context objective", MAX_OBJECTIVE),
|
|
33
|
+
acceptance,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export function freezeWorkflowWorkContext(value) {
|
|
37
|
+
const normalized = normalizeWorkflowWorkContext(value);
|
|
38
|
+
Object.freeze(normalized.acceptance);
|
|
39
|
+
return Object.freeze(normalized);
|
|
40
|
+
}
|
|
41
|
+
export function isCanonicalWorkflowWorkContext(value) {
|
|
42
|
+
try {
|
|
43
|
+
const normalized = normalizeWorkflowWorkContext(value);
|
|
44
|
+
return JSON.stringify(normalized) === JSON.stringify(value);
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function requiredString(value, field, max) {
|
|
51
|
+
if (typeof value !== "string" || value.trim() === "") {
|
|
52
|
+
throw new Error(`${field} is required`);
|
|
53
|
+
}
|
|
54
|
+
const normalized = value.trim();
|
|
55
|
+
if (normalized.length > max)
|
|
56
|
+
throw new Error(`${field} exceeds ${max} characters`);
|
|
57
|
+
return normalized;
|
|
58
|
+
}
|
package/package.json
CHANGED
package/src/core/work/index.ts
CHANGED
package/src/core/work/read.ts
CHANGED
package/src/core/work/runner.ts
CHANGED
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
import { resolve } from "node:path";
|
|
2
2
|
import { runWorkflow } from "../workflow/engine.ts";
|
|
3
|
-
import
|
|
3
|
+
import { readWorkflowProof } from "../workflow/proof.ts";
|
|
4
|
+
import type {
|
|
5
|
+
EngineOpts,
|
|
6
|
+
RunReport,
|
|
7
|
+
WorkflowAttemptContext,
|
|
8
|
+
WorkflowAttemptFailureCause,
|
|
9
|
+
} from "../workflow/types.ts";
|
|
10
|
+
import {
|
|
11
|
+
WORKFLOW_ATTEMPT_CONTEXT_SCHEMA_VERSION,
|
|
12
|
+
WORKFLOW_WORK_CONTEXT_SCHEMA_VERSION,
|
|
13
|
+
} from "../workflow/types.ts";
|
|
4
14
|
import {
|
|
5
15
|
acquireWorkLease,
|
|
6
16
|
appendReconcileIfChanged,
|
|
@@ -9,12 +19,16 @@ import {
|
|
|
9
19
|
boundedActor,
|
|
10
20
|
newWorkflowRunId,
|
|
11
21
|
readWorkItemIgnoringLease,
|
|
22
|
+
type WorkAttempt,
|
|
12
23
|
} from "./state.ts";
|
|
13
24
|
|
|
14
25
|
export interface RunWorkItemInput {
|
|
15
26
|
coordRoot: string;
|
|
16
27
|
workId: string;
|
|
17
|
-
engine: Omit<
|
|
28
|
+
engine: Omit<
|
|
29
|
+
EngineOpts,
|
|
30
|
+
"coordRoot" | "runId" | "resumeRunId" | "workItemId" | "workContext" | "attemptContext"
|
|
31
|
+
>;
|
|
18
32
|
retry?: boolean;
|
|
19
33
|
actor?: string;
|
|
20
34
|
}
|
|
@@ -47,6 +61,9 @@ export async function runWorkItem(input: RunWorkItemInput): Promise<RunReport> {
|
|
|
47
61
|
if (record.projection.state === "blocked" && !input.retry) {
|
|
48
62
|
throw new Error(`work item ${input.workId} is blocked; use an explicit retry`);
|
|
49
63
|
}
|
|
64
|
+
if (record.projection.state === "ready" && input.retry) {
|
|
65
|
+
throw new Error(`work item ${input.workId} is ready; retry requires a blocked prior attempt`);
|
|
66
|
+
}
|
|
50
67
|
if (!(record.projection.state === "ready" || record.projection.state === "blocked")) {
|
|
51
68
|
throw new Error(`work item ${input.workId} cannot run from state ${record.projection.state}`);
|
|
52
69
|
}
|
|
@@ -56,6 +73,20 @@ export async function runWorkItem(input: RunWorkItemInput): Promise<RunReport> {
|
|
|
56
73
|
);
|
|
57
74
|
}
|
|
58
75
|
const attempt = record.projection.attempts_used + 1;
|
|
76
|
+
const trigger = input.retry ? "retry" : "initial";
|
|
77
|
+
let prior: WorkflowAttemptContext["prior"];
|
|
78
|
+
if (trigger === "retry") {
|
|
79
|
+
if (!latest) {
|
|
80
|
+
throw new Error(`work item ${input.workId} has no prior attempt to retry`);
|
|
81
|
+
}
|
|
82
|
+
prior = priorContext(coordRoot, latest);
|
|
83
|
+
}
|
|
84
|
+
const attemptContext: WorkflowAttemptContext = {
|
|
85
|
+
schema_version: WORKFLOW_ATTEMPT_CONTEXT_SCHEMA_VERSION,
|
|
86
|
+
number: attempt,
|
|
87
|
+
trigger,
|
|
88
|
+
...(prior ? { prior } : {}),
|
|
89
|
+
};
|
|
59
90
|
const runId = newWorkflowRunId();
|
|
60
91
|
appendWorkEvent(coordRoot, input.workId, {
|
|
61
92
|
event: "attempt.started",
|
|
@@ -63,12 +94,21 @@ export async function runWorkItem(input: RunWorkItemInput): Promise<RunReport> {
|
|
|
63
94
|
reason: input.retry ? "explicit retry started" : "workflow attempt started",
|
|
64
95
|
run_id: runId,
|
|
65
96
|
attempt,
|
|
97
|
+
trigger,
|
|
66
98
|
});
|
|
67
99
|
return await runWorkflow(record.intent.workflow.path, {
|
|
68
100
|
...input.engine,
|
|
69
101
|
coordRoot,
|
|
70
102
|
runId,
|
|
71
103
|
workItemId: input.workId,
|
|
104
|
+
workContext: {
|
|
105
|
+
schema_version: WORKFLOW_WORK_CONTEXT_SCHEMA_VERSION,
|
|
106
|
+
id: record.intent.id,
|
|
107
|
+
title: record.intent.title,
|
|
108
|
+
objective: record.intent.objective,
|
|
109
|
+
acceptance: [...record.intent.acceptance],
|
|
110
|
+
},
|
|
111
|
+
attemptContext,
|
|
72
112
|
});
|
|
73
113
|
} finally {
|
|
74
114
|
try {
|
|
@@ -79,3 +119,37 @@ export async function runWorkItem(input: RunWorkItemInput): Promise<RunReport> {
|
|
|
79
119
|
}
|
|
80
120
|
}
|
|
81
121
|
}
|
|
122
|
+
|
|
123
|
+
function priorContext(
|
|
124
|
+
coordRoot: string,
|
|
125
|
+
prior: WorkAttempt,
|
|
126
|
+
): NonNullable<WorkflowAttemptContext["prior"]> {
|
|
127
|
+
if (!prior.proof_path) {
|
|
128
|
+
return {
|
|
129
|
+
run_id: prior.run_id,
|
|
130
|
+
causes: ["lost"],
|
|
131
|
+
unresolved: [],
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
const proof = readWorkflowProof(coordRoot, prior.run_id);
|
|
135
|
+
const causes: WorkflowAttemptFailureCause[] = [];
|
|
136
|
+
if (proof.run.status === "failed") causes.push("workflow_error");
|
|
137
|
+
if (proof.acceptance.summary.unsatisfied > 0) causes.push("acceptance_unsatisfied");
|
|
138
|
+
if (proof.acceptance.summary.unknown > 0) causes.push("acceptance_unknown");
|
|
139
|
+
if (causes.length === 0) {
|
|
140
|
+
throw new Error(`workflow proof ${prior.run_id} does not describe a retryable failure`);
|
|
141
|
+
}
|
|
142
|
+
return {
|
|
143
|
+
run_id: prior.run_id,
|
|
144
|
+
causes,
|
|
145
|
+
error: proof.run.error,
|
|
146
|
+
acceptance: { ...proof.acceptance.summary },
|
|
147
|
+
unresolved: proof.acceptance.criteria
|
|
148
|
+
.filter((criterion) => criterion.status !== "satisfied")
|
|
149
|
+
.map((criterion) => ({
|
|
150
|
+
id: criterion.id,
|
|
151
|
+
statement: criterion.statement,
|
|
152
|
+
status: criterion.status as "unsatisfied" | "unknown",
|
|
153
|
+
})),
|
|
154
|
+
};
|
|
155
|
+
}
|
package/src/core/work/state.ts
CHANGED
|
@@ -57,6 +57,8 @@ export type WorkNextAction =
|
|
|
57
57
|
| "review"
|
|
58
58
|
| "none";
|
|
59
59
|
|
|
60
|
+
export type WorkAttemptTrigger = "initial" | "retry";
|
|
61
|
+
|
|
60
62
|
export interface WorkIntent {
|
|
61
63
|
schema_version: typeof WORK_INTENT_SCHEMA_VERSION;
|
|
62
64
|
id: string;
|
|
@@ -89,6 +91,7 @@ export interface WorkEvent {
|
|
|
89
91
|
reason?: string;
|
|
90
92
|
run_id?: string;
|
|
91
93
|
attempt?: number;
|
|
94
|
+
trigger?: WorkAttemptTrigger;
|
|
92
95
|
state?: WorkState;
|
|
93
96
|
next_action?: WorkNextAction;
|
|
94
97
|
}
|
|
@@ -97,6 +100,7 @@ export interface WorkAttempt {
|
|
|
97
100
|
number: number;
|
|
98
101
|
run_id: string;
|
|
99
102
|
started_at: string;
|
|
103
|
+
trigger?: WorkAttemptTrigger;
|
|
100
104
|
status: "running" | "parked" | "succeeded" | "failed" | "lost";
|
|
101
105
|
approval_id?: string;
|
|
102
106
|
proof_path?: string;
|
|
@@ -317,7 +321,9 @@ function deriveWorkProjection(
|
|
|
317
321
|
const terminal =
|
|
318
322
|
latestGovernance?.event === "work.accepted" || latestGovernance?.event === "work.cancelled";
|
|
319
323
|
const attemptEvents = events.filter((event) => event.event === "attempt.started");
|
|
320
|
-
const attempts = attemptEvents.map((event) =>
|
|
324
|
+
const attempts = attemptEvents.map((event, index) =>
|
|
325
|
+
inspectAttempt(coordRoot, event, intent, attemptEvents[index - 1]?.run_id),
|
|
326
|
+
);
|
|
321
327
|
const base = {
|
|
322
328
|
id: intent.id,
|
|
323
329
|
title: intent.title,
|
|
@@ -340,9 +346,7 @@ function deriveWorkProjection(
|
|
|
340
346
|
};
|
|
341
347
|
}
|
|
342
348
|
const reopenSeq = latestGovernance?.event === "work.reopened" ? latestGovernance.seq : 0;
|
|
343
|
-
const currentAttempts = attemptEvents
|
|
344
|
-
.filter((event) => event.seq > reopenSeq)
|
|
345
|
-
.map((event) => inspectAttempt(coordRoot, event));
|
|
349
|
+
const currentAttempts = attempts.filter((_, index) => attemptEvents[index]!.seq > reopenSeq);
|
|
346
350
|
const unresolved = intent.dependencies.filter((dependency) => {
|
|
347
351
|
try {
|
|
348
352
|
return readWorkItem(coordRoot, dependency).projection.state !== "succeeded";
|
|
@@ -419,27 +423,62 @@ function deriveWorkProjection(
|
|
|
419
423
|
};
|
|
420
424
|
}
|
|
421
425
|
|
|
422
|
-
function inspectAttempt(
|
|
426
|
+
function inspectAttempt(
|
|
427
|
+
coordRoot: string,
|
|
428
|
+
event: WorkEvent,
|
|
429
|
+
intent: WorkIntent,
|
|
430
|
+
priorRunId?: string,
|
|
431
|
+
): WorkAttempt {
|
|
423
432
|
const runId = event.run_id as string;
|
|
424
433
|
const attempt: WorkAttempt = {
|
|
425
434
|
number: event.attempt as number,
|
|
426
435
|
run_id: runId,
|
|
427
436
|
started_at: event.ts,
|
|
437
|
+
trigger: event.trigger,
|
|
428
438
|
status: "lost",
|
|
429
439
|
};
|
|
430
440
|
const proofPath = join(coordRoot, ".harnery", "workflows", runId, "proof.json");
|
|
431
441
|
const manifestPath = join(coordRoot, ".harnery", "workflows", runId, "run.json");
|
|
442
|
+
let manifest: ReturnType<typeof readWorkflowRunManifest> | undefined;
|
|
432
443
|
if (existsSync(manifestPath)) {
|
|
433
|
-
|
|
444
|
+
manifest = readWorkflowRunManifest(coordRoot, runId);
|
|
434
445
|
if (manifest.work_item_id !== event.work_id) {
|
|
435
446
|
throw new Error(`workflow run ${runId} does not belong to work item ${event.work_id}`);
|
|
436
447
|
}
|
|
448
|
+
if (
|
|
449
|
+
manifest.work_context !== undefined &&
|
|
450
|
+
JSON.stringify(manifest.work_context) !== JSON.stringify(workContextForIntent(intent))
|
|
451
|
+
) {
|
|
452
|
+
throw new Error(
|
|
453
|
+
`workflow run ${runId} work context does not match work item ${event.work_id}`,
|
|
454
|
+
);
|
|
455
|
+
}
|
|
456
|
+
if (
|
|
457
|
+
manifest.attempt_context !== undefined &&
|
|
458
|
+
(manifest.attempt_context.number !== event.attempt ||
|
|
459
|
+
manifest.attempt_context.trigger !== event.trigger ||
|
|
460
|
+
(manifest.attempt_context.trigger === "retry" &&
|
|
461
|
+
manifest.attempt_context.prior?.run_id !== priorRunId))
|
|
462
|
+
) {
|
|
463
|
+
throw new Error(
|
|
464
|
+
`workflow run ${runId} attempt context does not match work item ${event.work_id}`,
|
|
465
|
+
);
|
|
466
|
+
}
|
|
437
467
|
}
|
|
438
468
|
if (existsSync(proofPath)) {
|
|
439
469
|
if (!existsSync(manifestPath)) {
|
|
440
470
|
throw new Error(`workflow run ${runId} has proof without a work-linked manifest`);
|
|
441
471
|
}
|
|
442
472
|
const proof = readWorkflowProof(coordRoot, runId);
|
|
473
|
+
if (proof.run.work_item_id !== event.work_id) {
|
|
474
|
+
throw new Error(`workflow proof ${runId} does not belong to work item ${event.work_id}`);
|
|
475
|
+
}
|
|
476
|
+
if (JSON.stringify(proof.run.work_context) !== JSON.stringify(manifest?.work_context)) {
|
|
477
|
+
throw new Error(`workflow proof ${runId} work context does not match its run manifest`);
|
|
478
|
+
}
|
|
479
|
+
if (JSON.stringify(proof.run.attempt_context) !== JSON.stringify(manifest?.attempt_context)) {
|
|
480
|
+
throw new Error(`workflow proof ${runId} attempt context does not match its run manifest`);
|
|
481
|
+
}
|
|
443
482
|
attempt.proof_path = proofPath;
|
|
444
483
|
attempt.status =
|
|
445
484
|
proof.run.status === "succeeded" &&
|
|
@@ -471,6 +510,22 @@ function inspectAttempt(coordRoot: string, event: WorkEvent): WorkAttempt {
|
|
|
471
510
|
return attempt;
|
|
472
511
|
}
|
|
473
512
|
|
|
513
|
+
function workContextForIntent(intent: WorkIntent): {
|
|
514
|
+
schema_version: 1;
|
|
515
|
+
id: string;
|
|
516
|
+
title: string;
|
|
517
|
+
objective: string;
|
|
518
|
+
acceptance: string[];
|
|
519
|
+
} {
|
|
520
|
+
return {
|
|
521
|
+
schema_version: 1,
|
|
522
|
+
id: intent.id,
|
|
523
|
+
title: intent.title,
|
|
524
|
+
objective: intent.objective,
|
|
525
|
+
acceptance: [...intent.acceptance],
|
|
526
|
+
};
|
|
527
|
+
}
|
|
528
|
+
|
|
474
529
|
function appendGovernanceEvent(
|
|
475
530
|
coordRoot: string,
|
|
476
531
|
workId: string,
|
|
@@ -654,6 +709,13 @@ function validateWorkEvent(event: WorkEvent, workId: string, seq: number): void
|
|
|
654
709
|
throw new Error(`work item ${workId} event ${seq} has invalid attempt data`);
|
|
655
710
|
}
|
|
656
711
|
}
|
|
712
|
+
if (
|
|
713
|
+
event.trigger !== undefined &&
|
|
714
|
+
(event.event !== "attempt.started" ||
|
|
715
|
+
(event.trigger !== "initial" && event.trigger !== "retry"))
|
|
716
|
+
) {
|
|
717
|
+
throw new Error(`work item ${workId} event ${seq} has invalid attempt trigger`);
|
|
718
|
+
}
|
|
657
719
|
if (event.event === "work.reconciled") {
|
|
658
720
|
const states: WorkState[] = [
|
|
659
721
|
"waiting",
|