harnery 0.22.1 → 0.23.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 -0
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +91 -2
- package/dist/core/work/state.d.ts +7 -0
- package/dist/core/work/state.d.ts.map +1 -1
- package/dist/core/work/state.js +112 -23
- package/dist/core/workflow/child-env.d.ts +10 -6
- package/dist/core/workflow/child-env.d.ts.map +1 -1
- package/dist/core/workflow/child-env.js +15 -7
- package/dist/core/workflow/durable-record.d.ts +7 -0
- package/dist/core/workflow/durable-record.d.ts.map +1 -0
- package/dist/core/workflow/durable-record.js +83 -0
- package/dist/core/workflow/engine.d.ts.map +1 -1
- package/dist/core/workflow/engine.js +208 -29
- package/dist/core/workflow/index.d.ts +2 -0
- package/dist/core/workflow/index.d.ts.map +1 -1
- package/dist/core/workflow/index.js +1 -0
- package/dist/core/workflow/proof.d.ts +4 -0
- package/dist/core/workflow/proof.d.ts.map +1 -1
- package/dist/core/workflow/proof.js +50 -15
- package/dist/core/workflow/run-state.d.ts +3 -0
- package/dist/core/workflow/run-state.d.ts.map +1 -1
- package/dist/core/workflow/run-state.js +25 -13
- package/dist/core/workflow/types.d.ts +10 -0
- package/dist/core/workflow/types.d.ts.map +1 -1
- package/dist/core/workflow/workspaces/attestation-error.d.ts +7 -0
- package/dist/core/workflow/workspaces/attestation-error.d.ts.map +1 -0
- package/dist/core/workflow/workspaces/attestation-error.js +25 -0
- package/dist/core/workflow/workspaces/cancellation.d.ts +8 -0
- package/dist/core/workflow/workspaces/cancellation.d.ts.map +1 -0
- package/dist/core/workflow/workspaces/cancellation.js +95 -0
- package/dist/core/workflow/workspaces/cleanup.d.ts +9 -0
- package/dist/core/workflow/workspaces/cleanup.d.ts.map +1 -0
- package/dist/core/workflow/workspaces/cleanup.js +223 -0
- package/dist/core/workflow/workspaces/execution.d.ts +25 -0
- package/dist/core/workflow/workspaces/execution.d.ts.map +1 -0
- package/dist/core/workflow/workspaces/execution.js +316 -0
- package/dist/core/workflow/workspaces/git.d.ts +25 -0
- package/dist/core/workflow/workspaces/git.d.ts.map +1 -0
- package/dist/core/workflow/workspaces/git.js +102 -0
- package/dist/core/workflow/workspaces/index.d.ts +15 -0
- package/dist/core/workflow/workspaces/index.d.ts.map +1 -0
- package/dist/core/workflow/workspaces/index.js +7 -0
- package/dist/core/workflow/workspaces/inspect.d.ts +85 -0
- package/dist/core/workflow/workspaces/inspect.d.ts.map +1 -0
- package/dist/core/workflow/workspaces/inspect.js +255 -0
- package/dist/core/workflow/workspaces/integration.d.ts +24 -0
- package/dist/core/workflow/workspaces/integration.d.ts.map +1 -0
- package/dist/core/workflow/workspaces/integration.js +617 -0
- package/dist/core/workflow/workspaces/leases.d.ts +37 -0
- package/dist/core/workflow/workspaces/leases.d.ts.map +1 -0
- package/dist/core/workflow/workspaces/leases.js +380 -0
- package/dist/core/workflow/workspaces/lifecycle.d.ts +43 -0
- package/dist/core/workflow/workspaces/lifecycle.d.ts.map +1 -0
- package/dist/core/workflow/workspaces/lifecycle.js +622 -0
- package/dist/core/workflow/workspaces/local-git.d.ts +8 -0
- package/dist/core/workflow/workspaces/local-git.d.ts.map +1 -0
- package/dist/core/workflow/workspaces/local-git.js +1474 -0
- package/dist/core/workflow/workspaces/paths.d.ts +23 -0
- package/dist/core/workflow/workspaces/paths.d.ts.map +1 -0
- package/dist/core/workflow/workspaces/paths.js +191 -0
- package/dist/core/workflow/workspaces/recovery.d.ts +3 -0
- package/dist/core/workflow/workspaces/recovery.d.ts.map +1 -0
- package/dist/core/workflow/workspaces/recovery.js +50 -0
- package/dist/core/workflow/workspaces/state.d.ts +60 -0
- package/dist/core/workflow/workspaces/state.d.ts.map +1 -0
- package/dist/core/workflow/workspaces/state.js +296 -0
- package/dist/core/workflow/workspaces/types.d.ts +445 -0
- package/dist/core/workflow/workspaces/types.d.ts.map +1 -0
- package/dist/core/workflow/workspaces/types.js +2 -0
- package/dist/core/workflow/workspaces/validate.d.ts +14 -0
- package/dist/core/workflow/workspaces/validate.d.ts.map +1 -0
- package/dist/core/workflow/workspaces/validate.js +476 -0
- package/package.json +5 -3
- package/src/commands/workflow.ts +110 -4
- package/src/core/work/state.ts +156 -28
- package/src/core/workflow/child-env.ts +18 -7
- package/src/core/workflow/durable-record.ts +94 -0
- package/src/core/workflow/engine.ts +230 -30
- package/src/core/workflow/index.ts +73 -0
- package/src/core/workflow/proof.ts +70 -22
- package/src/core/workflow/run-state.ts +46 -11
- package/src/core/workflow/types.ts +14 -0
- package/src/core/workflow/workspaces/attestation-error.ts +30 -0
- package/src/core/workflow/workspaces/cancellation.ts +137 -0
- package/src/core/workflow/workspaces/cleanup.ts +308 -0
- package/src/core/workflow/workspaces/execution.ts +412 -0
- package/src/core/workflow/workspaces/git.ts +125 -0
- package/src/core/workflow/workspaces/index.ts +85 -0
- package/src/core/workflow/workspaces/inspect.ts +421 -0
- package/src/core/workflow/workspaces/integration.ts +829 -0
- package/src/core/workflow/workspaces/leases.ts +495 -0
- package/src/core/workflow/workspaces/lifecycle.ts +792 -0
- package/src/core/workflow/workspaces/local-git.ts +1892 -0
- package/src/core/workflow/workspaces/paths.ts +247 -0
- package/src/core/workflow/workspaces/recovery.ts +56 -0
- package/src/core/workflow/workspaces/state.ts +481 -0
- package/src/core/workflow/workspaces/types.ts +517 -0
- package/src/core/workflow/workspaces/validate.ts +595 -0
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
import { createHash
|
|
2
|
-
import { chmodSync, closeSync, existsSync, mkdirSync, openSync, readFileSync,
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { chmodSync, closeSync, existsSync, mkdirSync, openSync, readFileSync, statSync, unlinkSync, writeFileSync, } from "node:fs";
|
|
3
3
|
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
7
|
import { isCanonicalWorkflowAttemptContext } from "./attempt-context.js";
|
|
8
|
+
import { readJsonRecord, writeImmutableJson } from "./durable-record.js";
|
|
8
9
|
import { normalizeWorkflowSpecialists } from "./specialists.js";
|
|
9
10
|
import { isCanonicalWorkflowWorkContext } from "./work-context.js";
|
|
11
|
+
import { assertWorkspaceManifestAuthority, isWorkspaceBinding, isWorkspaceUnsupportedExecutionEvidence, } from "./workspaces/validate.js";
|
|
10
12
|
export const WORKFLOW_RUN_MANIFEST_SCHEMA_VERSION = 1;
|
|
11
13
|
const MANIFEST_LIMIT_BYTES = 256 * 1024;
|
|
12
14
|
const FOREIGN_LEASE_STALE_MS = 24 * 60 * 60 * 1_000;
|
|
@@ -15,6 +17,7 @@ export function workflowScriptDigest(scriptPath) {
|
|
|
15
17
|
}
|
|
16
18
|
export function writeWorkflowRunManifest(input) {
|
|
17
19
|
assertWorkflowRunId(input.manifest.run_id);
|
|
20
|
+
assertWorkspaceManifestAuthority(input.manifest, readManifestWorkspaceRequest(input.coordRoot, input.manifest.run_id));
|
|
18
21
|
const path = workflowRunManifestPath(input.coordRoot, input.manifest.run_id);
|
|
19
22
|
if (existsSync(path))
|
|
20
23
|
throw new Error(`workflow run ${input.manifest.run_id} already has a manifest`);
|
|
@@ -23,16 +26,7 @@ export function writeWorkflowRunManifest(input) {
|
|
|
23
26
|
throw new Error(`workflow run manifest exceeds ${MANIFEST_LIMIT_BYTES} bytes`);
|
|
24
27
|
}
|
|
25
28
|
mkdirSync(dirname(path), { recursive: true });
|
|
26
|
-
|
|
27
|
-
try {
|
|
28
|
-
writeFileSync(temporary, body, { encoding: "utf8", flag: "wx", mode: 0o600 });
|
|
29
|
-
renameSync(temporary, path);
|
|
30
|
-
chmodSync(path, 0o600);
|
|
31
|
-
}
|
|
32
|
-
finally {
|
|
33
|
-
if (existsSync(temporary))
|
|
34
|
-
unlinkSync(temporary);
|
|
35
|
-
}
|
|
29
|
+
writeImmutableJson(path, input.manifest);
|
|
36
30
|
return path;
|
|
37
31
|
}
|
|
38
32
|
export function readWorkflowRunManifest(coordRoot, runId) {
|
|
@@ -74,6 +68,7 @@ export function readWorkflowRunManifest(coordRoot, runId) {
|
|
|
74
68
|
!validExecution(manifest.execution)) {
|
|
75
69
|
throw new Error(`workflow run manifest at ${path} has an unsupported or mismatched schema`);
|
|
76
70
|
}
|
|
71
|
+
assertWorkspaceManifestAuthority(manifest, readManifestWorkspaceRequest(coordRoot, runId));
|
|
77
72
|
return manifest;
|
|
78
73
|
}
|
|
79
74
|
export function assertWorkflowRunResumable(coordRoot, runId) {
|
|
@@ -213,7 +208,24 @@ function validExecution(value) {
|
|
|
213
208
|
["shared", "worktree", "sandbox", "remote"].includes(value.isolation) &&
|
|
214
209
|
["enabled", "disabled", "unknown"].includes(value.network_access) &&
|
|
215
210
|
validSpecialists(value.specialists) &&
|
|
216
|
-
validFrozenPolicy(value.policy, value.cwd)
|
|
211
|
+
validFrozenPolicy(value.policy, value.workspace_binding?.integration_root ?? value.cwd) &&
|
|
212
|
+
validWorkspaceBinding(value.workspace_binding) &&
|
|
213
|
+
validWorkspaceFallback(value.workspace_fallback) &&
|
|
214
|
+
!(value.workspace_binding && value.workspace_fallback) &&
|
|
215
|
+
(value.workspace_fallback === undefined ||
|
|
216
|
+
value.workspace_fallback.requested_isolation === value.isolation));
|
|
217
|
+
}
|
|
218
|
+
function readManifestWorkspaceRequest(coordRoot, runId) {
|
|
219
|
+
const path = join(coordRoot, ".harnery", "workflows", runId, "workspace-request.json");
|
|
220
|
+
return existsSync(path)
|
|
221
|
+
? readJsonRecord(path, "workspace request")
|
|
222
|
+
: undefined;
|
|
223
|
+
}
|
|
224
|
+
function validWorkspaceBinding(binding) {
|
|
225
|
+
return binding === undefined || isWorkspaceBinding(binding);
|
|
226
|
+
}
|
|
227
|
+
function validWorkspaceFallback(fallback) {
|
|
228
|
+
return fallback === undefined || isWorkspaceUnsupportedExecutionEvidence(fallback);
|
|
217
229
|
}
|
|
218
230
|
function validSpecialists(specialists) {
|
|
219
231
|
if (specialists === undefined)
|
|
@@ -8,6 +8,7 @@
|
|
|
8
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
|
+
import type { WorkspaceBinding, WorkspaceExecutionEvidence, WorkspaceProvider } from "./workspaces/index.js";
|
|
11
12
|
export declare const WORKFLOW_PROOF_SCHEMA_VERSION: 1;
|
|
12
13
|
export declare const WORKFLOW_WORK_CONTEXT_SCHEMA_VERSION: 1;
|
|
13
14
|
export declare const WORKFLOW_ATTEMPT_CONTEXT_SCHEMA_VERSION: 1;
|
|
@@ -141,6 +142,8 @@ export interface WorkflowProof {
|
|
|
141
142
|
agents: WorkflowAgentProof[];
|
|
142
143
|
evidence: WorkflowEvidenceRecord[];
|
|
143
144
|
policy?: WorkflowPolicyProof;
|
|
145
|
+
/** Immutable terminal provider evidence for isolated execution. */
|
|
146
|
+
execution?: WorkspaceExecutionEvidence;
|
|
144
147
|
repository: WorkflowRepoEvidence;
|
|
145
148
|
harnesses: HarnessEvidenceCoverage[];
|
|
146
149
|
unknowns: WorkflowProofUnknown[];
|
|
@@ -387,6 +390,11 @@ export interface EngineOpts {
|
|
|
387
390
|
isolation?: PolicyIsolation;
|
|
388
391
|
/** Network state of spawned harness subprocesses (default unknown). */
|
|
389
392
|
networkAccess?: PolicyNetworkAccess;
|
|
393
|
+
/** Explicit provider and host-owned roots. Omit for shared or declaration-only execution. */
|
|
394
|
+
workspace?: {
|
|
395
|
+
provider: WorkspaceProvider;
|
|
396
|
+
writableRoots: readonly string[];
|
|
397
|
+
};
|
|
390
398
|
}
|
|
391
399
|
export interface RunReport {
|
|
392
400
|
runId: string;
|
|
@@ -413,5 +421,7 @@ export interface RunReport {
|
|
|
413
421
|
}>;
|
|
414
422
|
/** Policy verdict totals when the host supplied a policy. */
|
|
415
423
|
policy?: WorkflowPolicyProof["summary"];
|
|
424
|
+
/** Isolated workspace binding when this run requested a provider capability. */
|
|
425
|
+
workspaceBinding?: WorkspaceBinding;
|
|
416
426
|
}
|
|
417
427
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -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":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { WorkspaceAttestation, WorkspaceBinding } from "./types.js";
|
|
2
|
+
export declare class WorkspaceAttestationError extends Error {
|
|
3
|
+
readonly attestation: WorkspaceAttestation;
|
|
4
|
+
constructor(message: string, attestation: WorkspaceAttestation);
|
|
5
|
+
}
|
|
6
|
+
export declare function workspaceAttestationFromError(error: unknown, binding: WorkspaceBinding): WorkspaceAttestation | undefined;
|
|
7
|
+
//# sourceMappingURL=attestation-error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attestation-error.d.ts","sourceRoot":"","sources":["../../../../src/core/workflow/workspaces/attestation-error.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGzE,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,QAAQ,CAAC,WAAW,EAAE,oBAAoB,CAAC;gBAE/B,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,oBAAoB;CAK/D;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,gBAAgB,GACxB,oBAAoB,GAAG,SAAS,CAalC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { isWorkspaceAttestation } from "./validate.js";
|
|
2
|
+
export class WorkspaceAttestationError extends Error {
|
|
3
|
+
attestation;
|
|
4
|
+
constructor(message, attestation) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.name = "WorkspaceAttestationError";
|
|
7
|
+
this.attestation = attestation;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export function workspaceAttestationFromError(error, binding) {
|
|
11
|
+
const seen = new Set();
|
|
12
|
+
let current = error;
|
|
13
|
+
while (current !== undefined && current !== null && !seen.has(current)) {
|
|
14
|
+
seen.add(current);
|
|
15
|
+
if (isWorkspaceAttestation(current, binding))
|
|
16
|
+
return current;
|
|
17
|
+
if (typeof current !== "object")
|
|
18
|
+
return undefined;
|
|
19
|
+
if ("attestation" in current && isWorkspaceAttestation(current.attestation, binding)) {
|
|
20
|
+
return current.attestation;
|
|
21
|
+
}
|
|
22
|
+
current = "cause" in current ? current.cause : undefined;
|
|
23
|
+
}
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { WorkspaceCancellationReceipt, WorkspaceProvider } from "./types.js";
|
|
2
|
+
export interface CancelWorkspaceInput {
|
|
3
|
+
coordRoot: string;
|
|
4
|
+
runId: string;
|
|
5
|
+
provider: WorkspaceProvider;
|
|
6
|
+
}
|
|
7
|
+
export declare function cancelWorkspace(input: CancelWorkspaceInput): Promise<WorkspaceCancellationReceipt>;
|
|
8
|
+
//# sourceMappingURL=cancellation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cancellation.d.ts","sourceRoot":"","sources":["../../../../src/core/workflow/workspaces/cancellation.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAEV,4BAA4B,EAE5B,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAGpB,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,iBAAiB,CAAC;CAC7B;AAED,wBAAsB,eAAe,CACnC,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,4BAA4B,CAAC,CA0DvC"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { acquireWorkEventLease, readWorkItemIgnoringLease, } from "../../work/state.js";
|
|
2
|
+
import { readWorkflowRunManifest } from "../run-state.js";
|
|
3
|
+
import { appendWorkflowJournalEvent, readWorkflowSupplement, stableDigest, writeWorkflowSupplement, } from "./state.js";
|
|
4
|
+
import { isWorkspaceAttestation } from "./validate.js";
|
|
5
|
+
export async function cancelWorkspace(input) {
|
|
6
|
+
const manifest = readWorkflowRunManifest(input.coordRoot, input.runId);
|
|
7
|
+
const binding = manifest.execution.workspace_binding;
|
|
8
|
+
if (binding?.owner.kind !== "work_attempt") {
|
|
9
|
+
throw new Error("workspace cancellation requires a work-linked isolated binding");
|
|
10
|
+
}
|
|
11
|
+
const release = acquireWorkEventLease(input.coordRoot, binding.owner.work_item_id);
|
|
12
|
+
try {
|
|
13
|
+
const cancellation = currentWorkCancellation(input.coordRoot, binding);
|
|
14
|
+
const bindingSha256 = stableDigest(binding);
|
|
15
|
+
const eventSha256 = stableDigest(cancellation);
|
|
16
|
+
const prior = readWorkflowSupplement(input.coordRoot, input.runId, "cancellation/outcome.json");
|
|
17
|
+
if (prior) {
|
|
18
|
+
validateCancellationReceipt(prior, binding, cancellation);
|
|
19
|
+
return prior;
|
|
20
|
+
}
|
|
21
|
+
const providerBinding = await input.provider.readBinding(binding);
|
|
22
|
+
if (stableDigest(providerBinding) !== bindingSha256) {
|
|
23
|
+
throw new Error("workspace cancellation provider binding differs from the frozen manifest");
|
|
24
|
+
}
|
|
25
|
+
const result = await input.provider.cancel(binding);
|
|
26
|
+
validateCancellationResult(result, binding);
|
|
27
|
+
const receipt = {
|
|
28
|
+
schema_version: 1,
|
|
29
|
+
receipt_id: `cancellation-${stableDigest({
|
|
30
|
+
binding: bindingSha256,
|
|
31
|
+
event: eventSha256,
|
|
32
|
+
result,
|
|
33
|
+
}).slice(0, 24)}`,
|
|
34
|
+
run_id: input.runId,
|
|
35
|
+
binding_id: binding.binding_id,
|
|
36
|
+
binding_sha256: bindingSha256,
|
|
37
|
+
work_item_id: binding.owner.work_item_id,
|
|
38
|
+
work_event_seq: cancellation.seq,
|
|
39
|
+
work_event_sha256: eventSha256,
|
|
40
|
+
status: result.status,
|
|
41
|
+
recorded_at: result.recorded_at,
|
|
42
|
+
attestation: result.attestation,
|
|
43
|
+
reason: result.reason,
|
|
44
|
+
};
|
|
45
|
+
writeWorkflowSupplement(input.coordRoot, input.runId, "cancellation/outcome.json", receipt);
|
|
46
|
+
appendWorkflowJournalEvent(input.coordRoot, input.runId, "workspace.cancel", {
|
|
47
|
+
binding_id: binding.binding_id,
|
|
48
|
+
provider_id: binding.provider.id,
|
|
49
|
+
receipt_id: receipt.receipt_id,
|
|
50
|
+
work_event_seq: cancellation.seq,
|
|
51
|
+
work_event_sha256: eventSha256,
|
|
52
|
+
status: receipt.status,
|
|
53
|
+
});
|
|
54
|
+
return receipt;
|
|
55
|
+
}
|
|
56
|
+
finally {
|
|
57
|
+
release();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function currentWorkCancellation(coordRoot, binding) {
|
|
61
|
+
if (binding.owner.kind !== "work_attempt") {
|
|
62
|
+
throw new Error("workspace cancellation requires a work attempt owner");
|
|
63
|
+
}
|
|
64
|
+
const work = readWorkItemIgnoringLease(coordRoot, binding.owner.work_item_id);
|
|
65
|
+
const governance = [...work.events]
|
|
66
|
+
.reverse()
|
|
67
|
+
.find((event) => ["work.accepted", "work.cancelled", "work.reopened"].includes(event.event));
|
|
68
|
+
if (work.projection.state !== "cancelled" || governance?.event !== "work.cancelled") {
|
|
69
|
+
throw new Error("workspace cancellation requires the current host work cancellation");
|
|
70
|
+
}
|
|
71
|
+
return governance;
|
|
72
|
+
}
|
|
73
|
+
function validateCancellationResult(result, binding) {
|
|
74
|
+
if (result.schema_version !== 1 ||
|
|
75
|
+
result.binding_id !== binding.binding_id ||
|
|
76
|
+
!["cancelled", "unsupported", "preserved_dirty", "blocked"].includes(result.status) ||
|
|
77
|
+
!Number.isFinite(Date.parse(result.recorded_at)) ||
|
|
78
|
+
!isWorkspaceAttestation(result.attestation, binding)) {
|
|
79
|
+
throw new Error("workspace cancellation provider returned an invalid result");
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
function validateCancellationReceipt(receipt, binding, cancellation) {
|
|
83
|
+
if (receipt.schema_version !== 1 ||
|
|
84
|
+
receipt.run_id !== binding.run_id ||
|
|
85
|
+
receipt.binding_id !== binding.binding_id ||
|
|
86
|
+
receipt.binding_sha256 !== stableDigest(binding) ||
|
|
87
|
+
receipt.work_item_id !== binding.owner.work_item_id ||
|
|
88
|
+
receipt.work_event_seq !== cancellation.seq ||
|
|
89
|
+
receipt.work_event_sha256 !== stableDigest(cancellation) ||
|
|
90
|
+
!["cancelled", "unsupported", "preserved_dirty", "blocked"].includes(receipt.status) ||
|
|
91
|
+
!Number.isFinite(Date.parse(receipt.recorded_at)) ||
|
|
92
|
+
!isWorkspaceAttestation(receipt.attestation, binding)) {
|
|
93
|
+
throw new Error("workspace cancellation outcome does not match current host authority");
|
|
94
|
+
}
|
|
95
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { WorkspaceCleanupAttempt, WorkspaceCleanupMode, WorkspaceCleanupReceipt, WorkspaceProvider } from "./types.js";
|
|
2
|
+
export interface CleanupWorkspaceInput {
|
|
3
|
+
coordRoot: string;
|
|
4
|
+
runId: string;
|
|
5
|
+
provider: WorkspaceProvider;
|
|
6
|
+
mode?: WorkspaceCleanupMode;
|
|
7
|
+
}
|
|
8
|
+
export declare function cleanupWorkspace(input: CleanupWorkspaceInput): Promise<WorkspaceCleanupAttempt | WorkspaceCleanupReceipt>;
|
|
9
|
+
//# sourceMappingURL=cleanup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cleanup.d.ts","sourceRoot":"","sources":["../../../../src/core/workflow/workspaces/cleanup.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAEV,uBAAuB,EAEvB,oBAAoB,EACpB,uBAAuB,EAEvB,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAKpB,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,IAAI,CAAC,EAAE,oBAAoB,CAAC;CAC7B;AAED,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,uBAAuB,GAAG,uBAAuB,CAAC,CAO5D"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { readWorkflowProof } from "../proof.js";
|
|
3
|
+
import { readWorkflowRunManifest } from "../run-state.js";
|
|
4
|
+
import { acquireNoClobberLease } from "./leases.js";
|
|
5
|
+
import { containsPath } from "./paths.js";
|
|
6
|
+
import { appendCleanupAttempt, appendWorkflowJournalEvent, readCleanupAttempts, readWorkflowSupplement, stableDigest, workflowRunDir, writeWorkflowSupplement, } from "./state.js";
|
|
7
|
+
import { isWorkspaceAttestation, isWorkspaceBoundExecutionEvidence } from "./validate.js";
|
|
8
|
+
const CLEANUP_LEASE_STALE_MS = 5 * 60 * 1_000;
|
|
9
|
+
export async function cleanupWorkspace(input) {
|
|
10
|
+
const release = acquireCleanupLease(input.coordRoot, input.runId);
|
|
11
|
+
try {
|
|
12
|
+
return await cleanupWorkspaceUnderLease(input);
|
|
13
|
+
}
|
|
14
|
+
finally {
|
|
15
|
+
release();
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
async function cleanupWorkspaceUnderLease(input) {
|
|
19
|
+
const manifest = readWorkflowRunManifest(input.coordRoot, input.runId);
|
|
20
|
+
const proof = readWorkflowProof(input.coordRoot, input.runId);
|
|
21
|
+
const binding = manifest.execution.workspace_binding;
|
|
22
|
+
if (!binding ||
|
|
23
|
+
!isWorkspaceBoundExecutionEvidence(proof.execution, input.runId) ||
|
|
24
|
+
stableDigest(binding) !== stableDigest(proof.execution.binding)) {
|
|
25
|
+
throw new Error("workspace cleanup requires matching terminal execution evidence");
|
|
26
|
+
}
|
|
27
|
+
assertCleanupPathAuthority(binding, manifest.execution.policy?.allowed_paths ?? []);
|
|
28
|
+
const mode = input.mode ?? "normal";
|
|
29
|
+
const current = await input.provider.attest(binding);
|
|
30
|
+
if (!isWorkspaceAttestation(current, binding)) {
|
|
31
|
+
throw new Error("workspace cleanup provider returned an invalid current attestation");
|
|
32
|
+
}
|
|
33
|
+
const intent = resolveCleanupIntent(input, binding, current, mode);
|
|
34
|
+
for (const attempt of readCleanupAttempts(input.coordRoot, input.runId)) {
|
|
35
|
+
if (attempt.operation_id !== intent.operation_id ||
|
|
36
|
+
attempt.binding_id !== binding.binding_id ||
|
|
37
|
+
attempt.binding_sha256 !== intent.binding_sha256 ||
|
|
38
|
+
attempt.mode !== intent.mode ||
|
|
39
|
+
(attempt.attestation !== undefined && !isWorkspaceAttestation(attempt.attestation, binding))) {
|
|
40
|
+
throw new Error("workspace cleanup attempt does not match the immutable intent");
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
const receipt = readWorkflowSupplement(input.coordRoot, input.runId, "cleanup/receipt.json");
|
|
44
|
+
if (receipt) {
|
|
45
|
+
validateCleanupReceipt(receipt, binding, intent);
|
|
46
|
+
if (!isReleasedAttestation(current)) {
|
|
47
|
+
throw new Error("existing cleanup receipt no longer reattests exact resource absence");
|
|
48
|
+
}
|
|
49
|
+
return receipt;
|
|
50
|
+
}
|
|
51
|
+
appendCleanupAttempt(input.coordRoot, input.runId, {
|
|
52
|
+
schema_version: 1,
|
|
53
|
+
operation_id: intent.operation_id,
|
|
54
|
+
binding_id: binding.binding_id,
|
|
55
|
+
binding_sha256: intent.binding_sha256,
|
|
56
|
+
mode,
|
|
57
|
+
status: "started",
|
|
58
|
+
recorded_at: new Date().toISOString(),
|
|
59
|
+
});
|
|
60
|
+
const result = await input.provider.cleanup(binding, intent);
|
|
61
|
+
validateCleanupResult(result, binding);
|
|
62
|
+
const attempt = appendCleanupAttempt(input.coordRoot, input.runId, {
|
|
63
|
+
schema_version: 1,
|
|
64
|
+
operation_id: intent.operation_id,
|
|
65
|
+
binding_id: binding.binding_id,
|
|
66
|
+
binding_sha256: intent.binding_sha256,
|
|
67
|
+
mode,
|
|
68
|
+
status: result.status,
|
|
69
|
+
branch_deleted: result.branch_deleted,
|
|
70
|
+
attestation: result.attestation,
|
|
71
|
+
reason: result.reason,
|
|
72
|
+
recorded_at: result.recorded_at,
|
|
73
|
+
});
|
|
74
|
+
appendWorkflowJournalEvent(input.coordRoot, input.runId, "workspace.cleanup", {
|
|
75
|
+
binding_id: binding.binding_id,
|
|
76
|
+
provider_id: binding.provider.id,
|
|
77
|
+
operation_id: intent.operation_id,
|
|
78
|
+
attempt: attempt.seq,
|
|
79
|
+
status: attempt.status,
|
|
80
|
+
});
|
|
81
|
+
if (result.status !== "released" && result.status !== "already_released") {
|
|
82
|
+
return attempt;
|
|
83
|
+
}
|
|
84
|
+
if (!result.branch_deleted || !isReleasedAttestation(result.attestation)) {
|
|
85
|
+
throw new Error("workspace cleanup cannot receipt an incomplete resource release");
|
|
86
|
+
}
|
|
87
|
+
const terminal = {
|
|
88
|
+
schema_version: 1,
|
|
89
|
+
receipt_id: `cleanup-${stableDigest({
|
|
90
|
+
operation: intent.operation_id,
|
|
91
|
+
binding: intent.binding_sha256,
|
|
92
|
+
}).slice(0, 24)}`,
|
|
93
|
+
operation_id: intent.operation_id,
|
|
94
|
+
binding_id: binding.binding_id,
|
|
95
|
+
binding_sha256: intent.binding_sha256,
|
|
96
|
+
mode,
|
|
97
|
+
status: result.status,
|
|
98
|
+
branch_deleted: true,
|
|
99
|
+
attestation: result.attestation,
|
|
100
|
+
recorded_at: result.recorded_at,
|
|
101
|
+
};
|
|
102
|
+
writeWorkflowSupplement(input.coordRoot, input.runId, "cleanup/receipt.json", terminal);
|
|
103
|
+
return terminal;
|
|
104
|
+
}
|
|
105
|
+
function assertCleanupPathAuthority(binding, allowedPaths) {
|
|
106
|
+
if (allowedPaths.length > 0 &&
|
|
107
|
+
(!allowedPaths.some((root) => containsPath(root, binding.workspace_root)) ||
|
|
108
|
+
!allowedPaths.some((root) => containsPath(root, binding.active_root)) ||
|
|
109
|
+
(binding.repository !== undefined &&
|
|
110
|
+
(!allowedPaths.some((root) => containsPath(root, binding.repository.source_root.realpath)) ||
|
|
111
|
+
!allowedPaths.some((root) => containsPath(root, binding.repository.common_dir.realpath)))))) {
|
|
112
|
+
throw new Error("workspace cleanup path is outside frozen policy path authority");
|
|
113
|
+
}
|
|
114
|
+
if (!containsPath(binding.writable_root.realpath, binding.workspace_root) ||
|
|
115
|
+
!containsPath(binding.writable_root.realpath, binding.active_root)) {
|
|
116
|
+
throw new Error("workspace cleanup path is outside frozen writable-root authority");
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
function acquireCleanupLease(coordRoot, runId) {
|
|
120
|
+
const authoritySha256 = stableDigest({ run_id: runId, operation: "cleanup" });
|
|
121
|
+
const lease = acquireNoClobberLease({
|
|
122
|
+
path: join(workflowRunDir(coordRoot, runId), "cleanup", "operation.lease"),
|
|
123
|
+
scope: "cleanup",
|
|
124
|
+
authoritySha256,
|
|
125
|
+
staleAfterMs: CLEANUP_LEASE_STALE_MS,
|
|
126
|
+
metadata: { run_id: runId },
|
|
127
|
+
validateStaleOwner: (owner) => owner.authority_sha256 === authoritySha256 && owner.metadata?.run_id === runId,
|
|
128
|
+
});
|
|
129
|
+
return () => lease.release();
|
|
130
|
+
}
|
|
131
|
+
function resolveCleanupIntent(input, binding, attestation, mode) {
|
|
132
|
+
if (!binding.repository)
|
|
133
|
+
throw new Error("workspace cleanup requires repository identity");
|
|
134
|
+
const bindingSha256 = stableDigest(binding);
|
|
135
|
+
const operationId = `cleanup-${stableDigest({ binding: bindingSha256, mode }).slice(0, 24)}`;
|
|
136
|
+
const prior = readWorkflowSupplement(input.coordRoot, input.runId, "cleanup/intent.json");
|
|
137
|
+
if (prior) {
|
|
138
|
+
if (prior.schema_version !== 1 ||
|
|
139
|
+
prior.run_id !== input.runId ||
|
|
140
|
+
prior.binding_id !== binding.binding_id ||
|
|
141
|
+
prior.binding_sha256 !== bindingSha256 ||
|
|
142
|
+
prior.mode !== mode ||
|
|
143
|
+
prior.operation_id !== operationId) {
|
|
144
|
+
throw new Error("existing cleanup intent does not match current workspace authority");
|
|
145
|
+
}
|
|
146
|
+
validateCleanupIntentExpected(prior, binding);
|
|
147
|
+
return prior;
|
|
148
|
+
}
|
|
149
|
+
const workspaceRefOid = attestation.repository?.workspace_ref_oid;
|
|
150
|
+
const targetRefOid = attestation.repository?.target_ref_oid;
|
|
151
|
+
if (!workspaceRefOid || !targetRefOid) {
|
|
152
|
+
throw new Error("workspace cleanup cannot freeze exact source and target ref identities");
|
|
153
|
+
}
|
|
154
|
+
const proposed = {
|
|
155
|
+
schema_version: 1,
|
|
156
|
+
run_id: input.runId,
|
|
157
|
+
operation_id: operationId,
|
|
158
|
+
binding_id: binding.binding_id,
|
|
159
|
+
binding_sha256: bindingSha256,
|
|
160
|
+
mode,
|
|
161
|
+
expected: {
|
|
162
|
+
worktree_path: binding.workspace_root,
|
|
163
|
+
gitdir: binding.repository.gitdir,
|
|
164
|
+
workspace_ref: binding.repository.workspace_ref,
|
|
165
|
+
workspace_ref_oid: workspaceRefOid,
|
|
166
|
+
target_ref: binding.repository.target_ref,
|
|
167
|
+
target_ref_oid: targetRefOid,
|
|
168
|
+
},
|
|
169
|
+
created_at: new Date().toISOString(),
|
|
170
|
+
};
|
|
171
|
+
writeWorkflowSupplement(input.coordRoot, input.runId, "cleanup/intent.json", proposed);
|
|
172
|
+
return proposed;
|
|
173
|
+
}
|
|
174
|
+
function validateCleanupIntentExpected(intent, binding) {
|
|
175
|
+
const repository = binding.repository;
|
|
176
|
+
if (!repository ||
|
|
177
|
+
intent.expected.worktree_path !== binding.workspace_root ||
|
|
178
|
+
stableDigest(intent.expected.gitdir) !== stableDigest(repository.gitdir) ||
|
|
179
|
+
intent.expected.workspace_ref !== repository.workspace_ref ||
|
|
180
|
+
intent.expected.target_ref !== repository.target_ref ||
|
|
181
|
+
!/^[0-9a-f]{40,64}$/.test(intent.expected.workspace_ref_oid) ||
|
|
182
|
+
!/^[0-9a-f]{40,64}$/.test(intent.expected.target_ref_oid)) {
|
|
183
|
+
throw new Error("cleanup intent expected identities do not match the workspace binding");
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
function validateCleanupResult(result, binding) {
|
|
187
|
+
if (result.schema_version !== 1 ||
|
|
188
|
+
result.binding_id !== binding.binding_id ||
|
|
189
|
+
![
|
|
190
|
+
"released",
|
|
191
|
+
"already_released",
|
|
192
|
+
"preserved_dirty",
|
|
193
|
+
"blocked",
|
|
194
|
+
"unsupported",
|
|
195
|
+
"partial",
|
|
196
|
+
].includes(result.status) ||
|
|
197
|
+
!Number.isFinite(Date.parse(result.recorded_at)) ||
|
|
198
|
+
typeof result.branch_deleted !== "boolean" ||
|
|
199
|
+
!isWorkspaceAttestation(result.attestation, binding) ||
|
|
200
|
+
((result.status === "released" || result.status === "already_released") &&
|
|
201
|
+
!isReleasedAttestation(result.attestation))) {
|
|
202
|
+
throw new Error("workspace cleanup provider returned an invalid result");
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
function validateCleanupReceipt(receipt, binding, intent) {
|
|
206
|
+
if (receipt.schema_version !== 1 ||
|
|
207
|
+
receipt.operation_id !== intent.operation_id ||
|
|
208
|
+
receipt.binding_id !== binding.binding_id ||
|
|
209
|
+
receipt.binding_sha256 !== intent.binding_sha256 ||
|
|
210
|
+
receipt.mode !== intent.mode ||
|
|
211
|
+
(receipt.status !== "released" && receipt.status !== "already_released") ||
|
|
212
|
+
receipt.branch_deleted !== true ||
|
|
213
|
+
!isWorkspaceAttestation(receipt.attestation, binding) ||
|
|
214
|
+
!isReleasedAttestation(receipt.attestation)) {
|
|
215
|
+
throw new Error("workspace cleanup receipt is invalid or mismatched");
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
function isReleasedAttestation(attestation) {
|
|
219
|
+
return (attestation.status === "ok" &&
|
|
220
|
+
attestation.provider_drift.length === 0 &&
|
|
221
|
+
attestation.resource_state === "released" &&
|
|
222
|
+
!attestation.workspace_exists);
|
|
223
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type NormalizedPolicy } from "../../policy/index.js";
|
|
2
|
+
import type { WorkflowRunManifest } from "../run-state.js";
|
|
3
|
+
import type { EngineOpts, WorkflowAttemptContext, WorkflowWorkContext } from "../types.js";
|
|
4
|
+
import type { WorkspaceAttestation, WorkspaceBinding, WorkspaceProvider, WorkspaceUnsupportedExecutionEvidence } from "./types.js";
|
|
5
|
+
interface WorkspaceResumeState {
|
|
6
|
+
manifest: WorkflowRunManifest;
|
|
7
|
+
}
|
|
8
|
+
export declare function resolveWorkspaceBinding(input: {
|
|
9
|
+
opts: EngineOpts;
|
|
10
|
+
resumeState: WorkspaceResumeState | undefined;
|
|
11
|
+
runId: string;
|
|
12
|
+
cwd: string;
|
|
13
|
+
isolation: string;
|
|
14
|
+
absScript: string;
|
|
15
|
+
scriptSha256: string;
|
|
16
|
+
provider: WorkspaceProvider | undefined;
|
|
17
|
+
workContext: Readonly<WorkflowWorkContext> | undefined;
|
|
18
|
+
attemptContext: Readonly<WorkflowAttemptContext> | undefined;
|
|
19
|
+
policy: NormalizedPolicy | undefined;
|
|
20
|
+
onUnsupportedFallback?: (evidence: WorkspaceUnsupportedExecutionEvidence) => void;
|
|
21
|
+
}): Promise<WorkspaceBinding | undefined>;
|
|
22
|
+
export declare function attestTerminal(provider: WorkspaceProvider | undefined, binding: WorkspaceBinding): Promise<WorkspaceAttestation>;
|
|
23
|
+
export declare function attestWorkspaceFailure(provider: WorkspaceProvider | undefined, binding: WorkspaceBinding, error: unknown): Promise<WorkspaceAttestation>;
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=execution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../../../src/core/workflow/workspaces/execution.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,gBAAgB,EAAgB,MAAM,uBAAuB,CAAC;AAC5E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAU3F,OAAO,KAAK,EACV,oBAAoB,EACpB,gBAAgB,EAEhB,iBAAiB,EACjB,qCAAqC,EACtC,MAAM,YAAY,CAAC;AAGpB,UAAU,oBAAoB;IAC5B,QAAQ,EAAE,mBAAmB,CAAC;CAC/B;AAED,wBAAsB,uBAAuB,CAAC,KAAK,EAAE;IACnD,IAAI,EAAE,UAAU,CAAC;IACjB,WAAW,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACxC,WAAW,EAAE,QAAQ,CAAC,mBAAmB,CAAC,GAAG,SAAS,CAAC;IACvD,cAAc,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GAAG,SAAS,CAAC;IAC7D,MAAM,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACrC,qBAAqB,CAAC,EAAE,CAAC,QAAQ,EAAE,qCAAqC,KAAK,IAAI,CAAC;CACnF,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAuOxC;AAgDD,wBAAsB,cAAc,CAClC,QAAQ,EAAE,iBAAiB,GAAG,SAAS,EACvC,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,oBAAoB,CAAC,CAa/B;AAED,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,iBAAiB,GAAG,SAAS,EACvC,OAAO,EAAE,gBAAgB,EACzB,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,oBAAoB,CAAC,CAW/B"}
|