@claudexor/control-api 3.20.1 → 3.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/dist/artifact-serve-routes.d.ts.map +1 -1
- package/dist/artifact-serve-routes.js +12 -1
- package/dist/artifact-serve-routes.js.map +1 -1
- package/dist/daemon-server.d.ts.map +1 -1
- package/dist/daemon-server.js +32 -53
- package/dist/daemon-server.js.map +1 -1
- package/dist/retention.d.ts.map +1 -1
- package/dist/retention.js +4 -1
- package/dist/retention.js.map +1 -1
- package/dist/run-apply-routes.d.ts.map +1 -1
- package/dist/run-apply-routes.js +6 -10
- package/dist/run-apply-routes.js.map +1 -1
- package/dist/run-audit.d.ts +5 -0
- package/dist/run-audit.d.ts.map +1 -0
- package/dist/run-audit.js +18 -0
- package/dist/run-audit.js.map +1 -0
- package/dist/run-continuation-projection.d.ts +7 -0
- package/dist/run-continuation-projection.d.ts.map +1 -0
- package/dist/run-continuation-projection.js +135 -0
- package/dist/run-continuation-projection.js.map +1 -0
- package/dist/run-continuation-start.d.ts +13 -0
- package/dist/run-continuation-start.d.ts.map +1 -0
- package/dist/run-continuation-start.js +61 -0
- package/dist/run-continuation-start.js.map +1 -0
- package/dist/run-delivery-state.d.ts.map +1 -1
- package/dist/run-delivery-state.js +6 -0
- package/dist/run-delivery-state.js.map +1 -1
- package/dist/run-discard.d.ts +10 -0
- package/dist/run-discard.d.ts.map +1 -0
- package/dist/run-discard.js +47 -0
- package/dist/run-discard.js.map +1 -0
- package/dist/run-exact-patch.d.ts +25 -0
- package/dist/run-exact-patch.d.ts.map +1 -0
- package/dist/run-exact-patch.js +55 -0
- package/dist/run-exact-patch.js.map +1 -0
- package/dist/run-list-fingerprint.d.ts.map +1 -1
- package/dist/run-list-fingerprint.js +7 -0
- package/dist/run-list-fingerprint.js.map +1 -1
- package/dist/run-retry-routes.js +10 -1
- package/dist/run-retry-routes.js.map +1 -1
- package/dist/run-start.d.ts.map +1 -1
- package/dist/run-start.js +14 -3
- package/dist/run-start.js.map +1 -1
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-apply-routes.js","sourceRoot":"","sources":["../src/run-apply-routes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACtF,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,mBAAmB,EACnB,uBAAuB,GAIxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,0BAA0B,EAAE,
|
|
1
|
+
{"version":3,"file":"run-apply-routes.js","sourceRoot":"","sources":["../src/run-apply-routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { RunEventType } from "@claudexor/schema";
|
|
2
|
+
import type { DaemonRunRecord } from "./run-record.js";
|
|
3
|
+
/** Append a control-verb audit event to a run's own event log (best-effort). */
|
|
4
|
+
export declare function appendRunAuditEvent(rec: DaemonRunRecord, type: RunEventType, payload: Record<string, unknown>): void;
|
|
5
|
+
//# sourceMappingURL=run-audit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-audit.d.ts","sourceRoot":"","sources":["../src/run-audit.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,gFAAgF;AAChF,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,IAAI,CAiBN"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { appendRunEvent } from "@claudexor/event-log";
|
|
3
|
+
/** Append a control-verb audit event to a run's own event log (best-effort). */
|
|
4
|
+
export function appendRunAuditEvent(rec, type, payload) {
|
|
5
|
+
if (!rec.runDir)
|
|
6
|
+
return;
|
|
7
|
+
try {
|
|
8
|
+
// Single-counter invariant: while the run is active its EventLog owns the
|
|
9
|
+
// seq space, so audit records MUST route through it (appendRunEvent does;
|
|
10
|
+
// file-tail stamping only applies once the run is terminal). A tail-read
|
|
11
|
+
// here would duplicate ids and break SSE Last-Event-ID resume.
|
|
12
|
+
appendRunEvent(join(rec.runDir, "events.jsonl"), rec.runId ?? rec.id, rec.taskId ?? "unknown", type, payload);
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
/* audit append must not change control behavior */
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=run-audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-audit.js","sourceRoot":"","sources":["../src/run-audit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAItD,gFAAgF;AAChF,MAAM,UAAU,mBAAmB,CACjC,GAAoB,EACpB,IAAkB,EAClB,OAAgC;IAEhC,IAAI,CAAC,GAAG,CAAC,MAAM;QAAE,OAAO;IACxB,IAAI,CAAC;QACH,0EAA0E;QAC1E,0EAA0E;QAC1E,yEAAyE;QACzE,+DAA+D;QAC/D,cAAc,CACZ,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,EAChC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,EAAE,EACnB,GAAG,CAAC,MAAM,IAAI,SAAS,EACvB,IAAI,EACJ,OAAO,CACR,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,mDAAmD;IACrD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type ControlRunSummary } from "@claudexor/schema";
|
|
2
|
+
import { type DaemonRunRecord } from "./run-record.js";
|
|
3
|
+
type Continuation = Pick<ControlRunSummary, "continueFrom" | "resumable" | "retainedEnvelope" | "continuity">;
|
|
4
|
+
/** The chain facts of one run; `events` (run detail) adds the per-try receipts. */
|
|
5
|
+
export declare function continuationSummary(rec: DaemonRunRecord, events?: readonly Record<string, unknown>[]): Continuation;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=run-continuation-projection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-continuation-projection.d.ts","sourceRoot":"","sources":["../src/run-continuation-projection.ts"],"names":[],"mappings":"AAgBA,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,mBAAmB,CAAC;AAO3B,OAAO,EAAgB,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAgCrE,KAAK,YAAY,GAAG,IAAI,CACtB,iBAAiB,EACjB,cAAc,GAAG,WAAW,GAAG,kBAAkB,GAAG,YAAY,CACjE,CAAC;AAEF,mFAAmF;AACnF,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,eAAe,EACpB,MAAM,CAAC,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAC1C,YAAY,CA0Fd"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run-status projection of the `continueFrom` chain: the terminal `resumable`
|
|
3
|
+
* block (INTERFACES §2), the per-try `continuity` receipts (§3), the
|
|
4
|
+
* predecessor link and a kept envelope's disk use. Projected verbatim from
|
|
5
|
+
* engine artifacts; surfaces never re-derive these facts.
|
|
6
|
+
*
|
|
7
|
+
* `resumable` comes from `final/resumable.yaml` (written by the engine at its
|
|
8
|
+
* terminal) with the CURRENT workspace overlaid: the envelope a run keeps
|
|
9
|
+
* (custody `retained`) or, once a successor adopted it or the run was
|
|
10
|
+
* discarded, none. A run the daemon found running at its restart never reached
|
|
11
|
+
* an engine terminal: its block is derived here from the durable session
|
|
12
|
+
* capsule and custody record (cause `host_restart`), so it can be continued.
|
|
13
|
+
*/
|
|
14
|
+
import { existsSync, readFileSync, readdirSync } from "node:fs";
|
|
15
|
+
import { join } from "node:path";
|
|
16
|
+
import { readRunEvents } from "@claudexor/event-log";
|
|
17
|
+
import { RunContinuityReceipt, RunResumable, SessionCapsule, } from "@claudexor/schema";
|
|
18
|
+
import { readContinuationSources, retainedEnvelopeInChain, retainedEnvelopeOfRun, } from "@claudexor/workspace";
|
|
19
|
+
import { safeReadStructuredArtifact } from "./run-artifact-read.js";
|
|
20
|
+
import { paramsRecord } from "./run-record.js";
|
|
21
|
+
import { TERMINAL_STATES } from "./sse-shared.js";
|
|
22
|
+
/** Per-attempt capsule file the engine writes when a native session starts (orchestrator `session-capsule.ts`). */
|
|
23
|
+
const SESSION_CAPSULE_FILE = "session-capsule.json";
|
|
24
|
+
function newestCapsule(runDir) {
|
|
25
|
+
const attemptsDir = join(runDir, "attempts");
|
|
26
|
+
if (!existsSync(attemptsDir))
|
|
27
|
+
return null;
|
|
28
|
+
let newest = null;
|
|
29
|
+
for (const attempt of readdirSync(attemptsDir)) {
|
|
30
|
+
try {
|
|
31
|
+
const parsed = SessionCapsule.safeParse(JSON.parse(readFileSync(join(attemptsDir, attempt, SESSION_CAPSULE_FILE), "utf8")));
|
|
32
|
+
if (parsed.success && (parsed.data.mtimeMs ?? 0) >= (newest?.mtimeMs ?? 0))
|
|
33
|
+
newest = parsed.data;
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
// No capsule in this attempt (or a torn one): nothing to resume there.
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return newest;
|
|
40
|
+
}
|
|
41
|
+
function inPlaceRoot(params) {
|
|
42
|
+
const execution = params["execution"];
|
|
43
|
+
if (execution?.["isolation"] !== "live")
|
|
44
|
+
return null;
|
|
45
|
+
const scope = params["scope"];
|
|
46
|
+
const root = execution["workspaceRoot"] ?? scope?.["root"];
|
|
47
|
+
return typeof root === "string" ? root : null;
|
|
48
|
+
}
|
|
49
|
+
/** The chain facts of one run; `events` (run detail) adds the per-try receipts. */
|
|
50
|
+
export function continuationSummary(rec, events) {
|
|
51
|
+
const params = paramsRecord(rec);
|
|
52
|
+
const continueFrom = typeof params["continueFrom"] === "string" ? params["continueFrom"] : null;
|
|
53
|
+
const continuity = events?.flatMap((event) => {
|
|
54
|
+
if (event["type"] !== "run.continuity")
|
|
55
|
+
return [];
|
|
56
|
+
const payload = event["payload"];
|
|
57
|
+
const receipt = RunContinuityReceipt.safeParse(payload?.["receipt"]);
|
|
58
|
+
return receipt.success ? [receipt.data] : [];
|
|
59
|
+
});
|
|
60
|
+
const base = { continueFrom, ...(continuity ? { continuity } : {}) };
|
|
61
|
+
if (!rec.runDir || !TERMINAL_STATES.has(rec.state)) {
|
|
62
|
+
return { ...base, resumable: null, retainedEnvelope: null };
|
|
63
|
+
}
|
|
64
|
+
const kept = retainedEnvelopeOfRun(rec.runDir, rec.runId ?? rec.id);
|
|
65
|
+
const retainedEnvelope = kept
|
|
66
|
+
? {
|
|
67
|
+
root: kept.envelope.worktree_path,
|
|
68
|
+
bytes: kept.bytes,
|
|
69
|
+
retainedAt: kept.retained_at ?? "",
|
|
70
|
+
cause: kept.cause,
|
|
71
|
+
}
|
|
72
|
+
: null;
|
|
73
|
+
const sources = readContinuationSources(rec.runDir);
|
|
74
|
+
const available = kept ?? retainedEnvelopeInChain(sources);
|
|
75
|
+
const keptWorkspace = available
|
|
76
|
+
? { kind: "retained_envelope", root: available.envelope.worktree_path }
|
|
77
|
+
: null;
|
|
78
|
+
let written = safeReadStructuredArtifact(rec, "final/resumable.yaml", RunResumable);
|
|
79
|
+
let capsule = newestCapsule(rec.runDir);
|
|
80
|
+
let inherited = false;
|
|
81
|
+
let inheritedState = null;
|
|
82
|
+
if (!written && !capsule && rec.state !== "succeeded") {
|
|
83
|
+
for (const source of sources) {
|
|
84
|
+
const ancestor = { ...source, id: source.runId };
|
|
85
|
+
written = safeReadStructuredArtifact(ancestor, "final/resumable.yaml", RunResumable);
|
|
86
|
+
capsule = newestCapsule(source.runDir);
|
|
87
|
+
inherited =
|
|
88
|
+
!!written ||
|
|
89
|
+
!!capsule ||
|
|
90
|
+
["answer.md", "retained-output.md", "patch.diff"].some((file) => existsSync(join(source.runDir, "final", file))) ||
|
|
91
|
+
readRunEvents(join(source.runDir, "events.jsonl")).events.some((event) => event.type === "harness.event" &&
|
|
92
|
+
["tool_call", "file_change", "message"].includes(String(event.payload["type"])));
|
|
93
|
+
if (inherited) {
|
|
94
|
+
inheritedState = source.state;
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
if (written) {
|
|
100
|
+
const workspace = keptWorkspace ??
|
|
101
|
+
(written.workspace.kind === "retained_envelope"
|
|
102
|
+
? { kind: "none", root: null }
|
|
103
|
+
: written.workspace);
|
|
104
|
+
return { ...base, resumable: { ...written, workspace }, retainedEnvelope };
|
|
105
|
+
}
|
|
106
|
+
const restarted = rec.state === "interrupted" && !existsSync(join(rec.runDir, "final", "run_facts.yaml"));
|
|
107
|
+
if (!restarted && !kept && !inherited)
|
|
108
|
+
return { ...base, resumable: null, retainedEnvelope };
|
|
109
|
+
const root = inPlaceRoot(params);
|
|
110
|
+
return {
|
|
111
|
+
...base,
|
|
112
|
+
retainedEnvelope,
|
|
113
|
+
resumable: {
|
|
114
|
+
cause: restarted
|
|
115
|
+
? "host_restart"
|
|
116
|
+
: (available?.cause ?? (inheritedState === "interrupted" ? "host_restart" : "other")),
|
|
117
|
+
resetsAt: null,
|
|
118
|
+
limitWindow: null,
|
|
119
|
+
limitEvidence: null,
|
|
120
|
+
// A fresh session briefed by the evidence index is always available; the
|
|
121
|
+
// native session when its capsule survived.
|
|
122
|
+
carriers: capsule ? ["native", "packet"] : ["packet"],
|
|
123
|
+
limitCode: null,
|
|
124
|
+
session: capsule
|
|
125
|
+
? {
|
|
126
|
+
harness: capsule.harness,
|
|
127
|
+
nativeSessionId: capsule.nativeSessionId,
|
|
128
|
+
holderProfileId: capsule.holderProfileId,
|
|
129
|
+
}
|
|
130
|
+
: null,
|
|
131
|
+
workspace: keptWorkspace ?? (root ? { kind: "in_place", root } : { kind: "none", root: null }),
|
|
132
|
+
},
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=run-continuation-projection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-continuation-projection.js","sourceRoot":"","sources":["../src/run-continuation-projection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type DaemonFacadeClient } from "./run-record.js";
|
|
2
|
+
/**
|
|
3
|
+
* Fill the omitted inheritable keys of a raw `continueFrom` body from the
|
|
4
|
+
* predecessor's accepted request, and name the predecessor by its run id
|
|
5
|
+
* (a job id is accepted too). Runs on the RAW body, before the request schema
|
|
6
|
+
* injects defaults — an omitted scope must not become "no project". An
|
|
7
|
+
* unknown predecessor is left untouched: admission refuses it typed.
|
|
8
|
+
*/
|
|
9
|
+
export declare function resolveContinuationBody(daemon: Pick<DaemonFacadeClient, "list">, body: unknown): Promise<unknown>;
|
|
10
|
+
/** Throw the typed admission refusal (with its context) for a continuation
|
|
11
|
+
* that may not start now; ordinary requests pass untouched. */
|
|
12
|
+
export declare function assertContinuationAdmissible(daemon: Pick<DaemonFacadeClient, "list">, request: unknown): Promise<void>;
|
|
13
|
+
//# sourceMappingURL=run-continuation-start.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-continuation-start.d.ts","sourceRoot":"","sources":["../src/run-continuation-start.ts"],"names":[],"mappings":"AAaA,OAAO,EAAgB,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAaxE;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,EACxC,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,OAAO,CAAC,CAoBlB;AAED;+DAC+D;AAC/D,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,EACxC,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,IAAI,CAAC,CAIf"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `continueFrom` on POST /v2/runs (INTERFACES §1): the HTTP half of the run
|
|
3
|
+
* chain. The daemon's enqueue RPC owns the atomic one-successor claim; this
|
|
4
|
+
* module resolves what a continuation inherits BEFORE ordinary request
|
|
5
|
+
* defaults fill it, and answers the same admission verdict with its typed
|
|
6
|
+
* context (the chain `head`), which the daemon socket does not carry.
|
|
7
|
+
*/
|
|
8
|
+
import { continuationPredecessor, continuationRefusal, continuationRefusalError, continuedRunOf, } from "@claudexor/schema";
|
|
9
|
+
import { paramsRecord } from "./run-record.js";
|
|
10
|
+
/** What a continuation needs to find its carrier and workspace: the work's
|
|
11
|
+
* kind, project and execution tree, harness and model. Nothing else is
|
|
12
|
+
* inherited implicitly. Either explicit key replaces its whole related group. */
|
|
13
|
+
const INHERITED_GROUPS = [
|
|
14
|
+
["mode"],
|
|
15
|
+
["scope"],
|
|
16
|
+
["execution"],
|
|
17
|
+
["harnesses", "primaryHarness"],
|
|
18
|
+
["model", "models"],
|
|
19
|
+
];
|
|
20
|
+
/**
|
|
21
|
+
* Fill the omitted inheritable keys of a raw `continueFrom` body from the
|
|
22
|
+
* predecessor's accepted request, and name the predecessor by its run id
|
|
23
|
+
* (a job id is accepted too). Runs on the RAW body, before the request schema
|
|
24
|
+
* injects defaults — an omitted scope must not become "no project". An
|
|
25
|
+
* unknown predecessor is left untouched: admission refuses it typed.
|
|
26
|
+
*/
|
|
27
|
+
export async function resolveContinuationBody(daemon, body) {
|
|
28
|
+
if (body && typeof body === "object" && "continueModelInherited" in body) {
|
|
29
|
+
throw Object.assign(new Error("continueModelInherited is server-owned"), { status: 400 });
|
|
30
|
+
}
|
|
31
|
+
const from = continuedRunOf(body);
|
|
32
|
+
if (from === null || !body || typeof body !== "object" || Array.isArray(body))
|
|
33
|
+
return body;
|
|
34
|
+
const predecessor = continuationPredecessor(from, await daemon.list({ id: from }));
|
|
35
|
+
if (!predecessor?.runId)
|
|
36
|
+
return body;
|
|
37
|
+
const raw = body;
|
|
38
|
+
const inherited = paramsRecord(predecessor);
|
|
39
|
+
const resolved = { ...raw, continueFrom: predecessor.runId };
|
|
40
|
+
for (const group of INHERITED_GROUPS) {
|
|
41
|
+
if (group.some((key) => key in raw))
|
|
42
|
+
continue;
|
|
43
|
+
for (const key of group) {
|
|
44
|
+
if (inherited[key] !== undefined)
|
|
45
|
+
resolved[key] = inherited[key];
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
// Preserve caller intent through durable request normalization and settings defaults.
|
|
49
|
+
resolved["continueModelInherited"] = !("model" in raw || "models" in raw);
|
|
50
|
+
return resolved;
|
|
51
|
+
}
|
|
52
|
+
/** Throw the typed admission refusal (with its context) for a continuation
|
|
53
|
+
* that may not start now; ordinary requests pass untouched. */
|
|
54
|
+
export async function assertContinuationAdmissible(daemon, request) {
|
|
55
|
+
if (continuedRunOf(request) === null)
|
|
56
|
+
return;
|
|
57
|
+
const refusal = continuationRefusal(request, await daemon.list());
|
|
58
|
+
if (refusal)
|
|
59
|
+
throw continuationRefusalError(refusal);
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=run-continuation-start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-continuation-start.js","sourceRoot":"","sources":["../src/run-continuation-start.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,wBAAwB,EACxB,cAAc,GACf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,YAAY,EAA2B,MAAM,iBAAiB,CAAC;AAExE;;iFAEiF;AACjF,MAAM,gBAAgB,GAAG;IACvB,CAAC,MAAM,CAAC;IACR,CAAC,OAAO,CAAC;IACT,CAAC,WAAW,CAAC;IACb,CAAC,WAAW,EAAE,gBAAgB,CAAC;IAC/B,CAAC,OAAO,EAAE,QAAQ,CAAC;CACX,CAAC;AAEX;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,MAAwC,EACxC,IAAa;IAEb,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,wBAAwB,IAAI,IAAI,EAAE,CAAC;QACzE,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,wCAAwC,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5F,CAAC;IACD,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3F,MAAM,WAAW,GAAG,uBAAuB,CAAC,IAAI,EAAE,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACnF,IAAI,CAAC,WAAW,EAAE,KAAK;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,GAAG,GAAG,IAA+B,CAAC;IAC5C,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAA4B,EAAE,GAAG,GAAG,EAAE,YAAY,EAAE,WAAW,CAAC,KAAK,EAAE,CAAC;IACtF,KAAK,MAAM,KAAK,IAAI,gBAAgB,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC;YAAE,SAAS;QAC9C,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,SAAS;gBAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IACD,sFAAsF;IACtF,QAAQ,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,GAAG,IAAI,QAAQ,IAAI,GAAG,CAAC,CAAC;IAC1E,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;+DAC+D;AAC/D,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,MAAwC,EACxC,OAAgB;IAEhB,IAAI,cAAc,CAAC,OAAO,CAAC,KAAK,IAAI;QAAE,OAAO;IAC7C,MAAM,OAAO,GAAG,mBAAmB,CAAC,OAAO,EAAE,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAClE,IAAI,OAAO;QAAE,MAAM,wBAAwB,CAAC,OAAO,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-delivery-state.d.ts","sourceRoot":"","sources":["../src/run-delivery-state.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAe,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"run-delivery-state.d.ts","sourceRoot":"","sources":["../src/run-delivery-state.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAe,MAAM,mBAAmB,CAAC;AAKpF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,qFAAqF;AACrF,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,CAGzE;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,eAAe,GAAG,gBAAgB,CAwDvE;AAED;;6BAE6B;AAC7B,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,eAAe,GAAG,gBAAgB,GAAG,IAAI,CAE/E;AAED;;;;;;2EAM2E;AAC3E,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,eAAe,EACpB,KAAK,EAAE,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,aAAa,EAC3D,YAAY,CAAC,EAAE,MAAM,EAAE,EACvB,QAAQ,UAAQ,GACf,IAAI,CAqCN"}
|
|
@@ -3,6 +3,7 @@ import { join } from "node:path";
|
|
|
3
3
|
import { parse as parseYaml, stringify as stringifyYaml } from "yaml";
|
|
4
4
|
import { ControlRunResult, RunDeliveryState, WorkProduct } from "@claudexor/schema";
|
|
5
5
|
import { nowIso } from "@claudexor/util";
|
|
6
|
+
import { releaseRetainedEnvelope, retainedEnvelopeOfRun } from "@claudexor/workspace";
|
|
6
7
|
import { safeArtifactRoot } from "./artifact-paths.js";
|
|
7
8
|
import { safeReadStructuredArtifact } from "./run-artifact-read.js";
|
|
8
9
|
/** Revert targets the tree recorded at execution, even if its thread moved later. */
|
|
@@ -102,6 +103,11 @@ export function markRunApplyState(rec, state, appliedPaths, required = false) {
|
|
|
102
103
|
const tmp = `${dsPath}.tmp-${process.pid}`;
|
|
103
104
|
writeFileSync(tmp, stringifyYaml(next), "utf8");
|
|
104
105
|
renameSync(tmp, dsPath);
|
|
106
|
+
// Applying a kept stopped run's result is its disposition (A9): the
|
|
107
|
+
// envelope retained for continueFrom is released, never kept twice.
|
|
108
|
+
const kept = state === "applied" && rec.runId ? retainedEnvelopeOfRun(root, rec.runId) : null;
|
|
109
|
+
if (kept)
|
|
110
|
+
void releaseRetainedEnvelope(kept).catch(() => { });
|
|
105
111
|
}
|
|
106
112
|
catch (error) {
|
|
107
113
|
if (required)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-delivery-state.js","sourceRoot":"","sources":["../src/run-delivery-state.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"run-delivery-state.js","sourceRoot":"","sources":["../src/run-delivery-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC9E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,MAAM,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAGpE,qFAAqF;AACrF,MAAM,UAAU,qBAAqB,CAAC,GAAoB;IACxD,MAAM,EAAE,GAAG,0BAA0B,CAAC,GAAG,EAAE,yBAAyB,EAAE,WAAW,CAAC,CAAC;IACnF,OAAO,OAAO,EAAE,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3F,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAoB;IACnD,MAAM,EAAE,GAAG,0BAA0B,CAAC,GAAG,EAAE,yBAAyB,EAAE,WAAW,CAAC,CAAC;IACnF,MAAM,IAAI,GAAG,CAAC,EAAE,EAAE,IAAI,IAAI,EAAE,CAA4B,CAAC;IACzD,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;IACpC,MAAM,IAAI,GACR,OAAO,KAAK,OAAO;QACnB,OAAO,KAAK,OAAO;QACnB,OAAO,KAAK,QAAQ;QACpB,OAAO,KAAK,MAAM;QAClB,OAAO,KAAK,QAAQ;QAClB,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,MAAM,CAAC;IACb,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CACiD,CAAC;IAC5E,MAAM,QAAQ,GACZ,EAAE,IAAI,OAAO,EAAE,CAAC,KAAK,KAAK,QAAQ;QAChC,CAAC,CAAC;YACE,KAAK,EAAE,EAAE,CAAC,KAAK;YACf,SAAS,EAAE,OAAO,EAAE,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC9D,SAAS,EAAE,OAAO,EAAE,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;SAC/D;QACH,CAAC,CAAC,IAAI,CAAC;IACX,gEAAgE;IAChE,4EAA4E;IAC5E,0EAA0E;IAC1E,mEAAmE;IACnE,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,aAAa,GAAG,QAAQ,EAAE,UAAU,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC;IAClE,MAAM,UAAU,GACd,aAAa,KAAK,SAAS;QAC3B,aAAa,KAAK,wBAAwB;QAC1C,aAAa,KAAK,UAAU;QAC5B,aAAa,KAAK,WAAW;QAC3B,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,aAAa,CAAC;IACpB,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1F,MAAM,WAAW,GACf,QAAQ,EAAE,WAAW;QACrB,CAAC,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC7E,MAAM,cAAc,GAClB,QAAQ,EAAE,cAAc;QACxB,CAAC,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACnF,MAAM,UAAU,GACd,CAAC,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,wBAAwB,CAAC;QACrE,cAAc,KAAK,IAAI,CAAC;IAC1B,OAAO,gBAAgB,CAAC,KAAK,CAAC;QAC5B,IAAI;QACJ,QAAQ;QACR,QAAQ,EAAE,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,OAAO,EAAE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI;QACtE,UAAU;QACV,UAAU;QACV,WAAW;QACX,cAAc;QACd,UAAU;KACX,CAAC,CAAC;AACL,CAAC;AAED;;6BAE6B;AAC7B,MAAM,UAAU,iBAAiB,CAAC,GAAoB;IACpD,OAAO,0BAA0B,CAAC,GAAG,EAAE,2BAA2B,EAAE,gBAAgB,CAAC,CAAC;AACxF,CAAC;AAED;;;;;;2EAM2E;AAC3E,MAAM,UAAU,iBAAiB,CAC/B,GAAoB,EACpB,KAA2D,EAC3D,YAAuB,EACvB,QAAQ,GAAG,KAAK;IAEhB,IAAI,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,MAAM;YAAE,OAAO;QACxB,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,qBAAqB,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC;YAC7B,CAAC,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC;YACpF,CAAC,CAAC,IAAI,CAAC;QACT,yEAAyE;QACzE,+CAA+C;QAC/C,MAAM,EAAE,GAAG,0BAA0B,CAAC,GAAG,EAAE,yBAAyB,EAAE,WAAW,CAAC,CAAC;QACnF,MAAM,IAAI,GAAG,CAAC,EAAE,EAAE,IAAI,IAAI,EAAE,CAA4B,CAAC;QACzD,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC;YAClC,YAAY,EAAE,YAAY,IAAI,IAAI,EAAE,YAAY;YAChD,WAAW,EAAE,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,WAAW;YACjE,UAAU,EAAE,KAAK;YACjB,WAAW,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,WAAW,IAAI,IAAI,CAAC;YACzE,cAAc,EACZ,IAAI,EAAE,cAAc;gBACpB,CAAC,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAClF,WAAW,EACT,IAAI,EAAE,WAAW;gBACjB,CAAC,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;SAC7E,CAAC,CAAC;QACH,+EAA+E;QAC/E,MAAM,GAAG,GAAG,GAAG,MAAM,QAAQ,OAAO,CAAC,GAAG,EAAE,CAAC;QAC3C,aAAa,CAAC,GAAG,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;QAChD,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACxB,oEAAoE;QACpE,oEAAoE;QACpE,MAAM,IAAI,GAAG,KAAK,KAAK,SAAS,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9F,IAAI,IAAI;YAAE,KAAK,uBAAuB,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC/D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,QAAQ;YAAE,MAAM,KAAK,CAAC;QAC1B,wEAAwE;IAC1E,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `discard` decision (POST /v2/runs/:id/decision): explicitly give up a
|
|
3
|
+
* terminal run's result that is still held for the operator — a pending
|
|
4
|
+
* copied-files result (INV-111) or a stopped run's isolated envelope retained
|
|
5
|
+
* for `continueFrom` (A9). Direct effects already in place are never undone.
|
|
6
|
+
*/
|
|
7
|
+
import { ControlRunDecisionResponse } from "@claudexor/schema";
|
|
8
|
+
import type { DaemonRunRecord } from "./run-record.js";
|
|
9
|
+
export declare function discardRunResult(rec: DaemonRunRecord): Promise<ControlRunDecisionResponse>;
|
|
10
|
+
//# sourceMappingURL=run-discard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-discard.d.ts","sourceRoot":"","sources":["../src/run-discard.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAK/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGvD,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,0BAA0B,CAAC,CA0ChG"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `discard` decision (POST /v2/runs/:id/decision): explicitly give up a
|
|
3
|
+
* terminal run's result that is still held for the operator — a pending
|
|
4
|
+
* copied-files result (INV-111) or a stopped run's isolated envelope retained
|
|
5
|
+
* for `continueFrom` (A9). Direct effects already in place are never undone.
|
|
6
|
+
*/
|
|
7
|
+
import { ControlRunDecisionResponse } from "@claudexor/schema";
|
|
8
|
+
import { releaseRetainedEnvelope, retainedEnvelopeOfRun } from "@claudexor/workspace";
|
|
9
|
+
import { readFilesWorkProduct } from "./files-work-product.js";
|
|
10
|
+
import { appendRunAuditEvent } from "./run-audit.js";
|
|
11
|
+
import { controlRunResult, markRunApplyState } from "./run-delivery-state.js";
|
|
12
|
+
import { TERMINAL_STATES } from "./sse-shared.js";
|
|
13
|
+
export async function discardRunResult(rec) {
|
|
14
|
+
const retained = TERMINAL_STATES.has(rec.state) && rec.runDir && rec.runId
|
|
15
|
+
? retainedEnvelopeOfRun(rec.runDir, rec.runId)
|
|
16
|
+
: null;
|
|
17
|
+
if (retained) {
|
|
18
|
+
await releaseRetainedEnvelope(retained);
|
|
19
|
+
appendRunAuditEvent(rec, "control.applied", {
|
|
20
|
+
decision: "discard",
|
|
21
|
+
retained_envelope: retained.envelope.worktree_path,
|
|
22
|
+
});
|
|
23
|
+
return ControlRunDecisionResponse.parse({
|
|
24
|
+
accepted: true,
|
|
25
|
+
status: "discarded",
|
|
26
|
+
message: "Stopped work discarded; its kept envelope was removed. A continuation starts from the project base.",
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
const files = readFilesWorkProduct(rec);
|
|
30
|
+
const state = controlRunResult(rec).applyState;
|
|
31
|
+
if (!TERMINAL_STATES.has(rec.state) ||
|
|
32
|
+
!files ||
|
|
33
|
+
files.manifest.isolation !== "envelope" ||
|
|
34
|
+
(state !== "not_applied" && state !== "discarded"))
|
|
35
|
+
throw Object.assign(new Error("Only an unapplied copied files result or a kept stopped run can be discarded; direct effects remain in place"), { status: 409 });
|
|
36
|
+
markRunApplyState(rec, "discarded", undefined, true);
|
|
37
|
+
appendRunAuditEvent(rec, "control.applied", {
|
|
38
|
+
decision: "discard",
|
|
39
|
+
manifest_sha256: files.manifestSha256,
|
|
40
|
+
});
|
|
41
|
+
return ControlRunDecisionResponse.parse({
|
|
42
|
+
accepted: true,
|
|
43
|
+
status: "discarded",
|
|
44
|
+
message: "Pending file application discarded; retained result follows normal retention.",
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=run-discard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-discard.js","sourceRoot":"","sources":["../src/run-discard.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AACtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE9E,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAoB;IACzD,MAAM,QAAQ,GACZ,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK;QACvD,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC;QAC9C,CAAC,CAAC,IAAI,CAAC;IACX,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QACxC,mBAAmB,CAAC,GAAG,EAAE,iBAAiB,EAAE;YAC1C,QAAQ,EAAE,SAAS;YACnB,iBAAiB,EAAE,QAAQ,CAAC,QAAQ,CAAC,aAAa;SACnD,CAAC,CAAC;QACH,OAAO,0BAA0B,CAAC,KAAK,CAAC;YACtC,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,WAAW;YACnB,OAAO,EACL,qGAAqG;SACxG,CAAC,CAAC;IACL,CAAC;IACD,MAAM,KAAK,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC;IAC/C,IACE,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;QAC/B,CAAC,KAAK;QACN,KAAK,CAAC,QAAQ,CAAC,SAAS,KAAK,UAAU;QACvC,CAAC,KAAK,KAAK,aAAa,IAAI,KAAK,KAAK,WAAW,CAAC;QAElD,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,KAAK,CACP,8GAA8G,CAC/G,EACD,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;IACJ,iBAAiB,CAAC,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IACrD,mBAAmB,CAAC,GAAG,EAAE,iBAAiB,EAAE;QAC1C,QAAQ,EAAE,SAAS;QACnB,eAAe,EAAE,KAAK,CAAC,cAAc;KACtC,CAAC,CAAC;IACH,OAAO,0BAA0B,CAAC,KAAK,CAAC;QACtC,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,+EAA+E;KACzF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { DaemonRunRecord } from "./run-record.js";
|
|
2
|
+
/**
|
|
3
|
+
* The ONE interpretation point for a run's saved patch (INV-062).
|
|
4
|
+
*
|
|
5
|
+
* `final/patch.diff` is byte-exact unless the work product says
|
|
6
|
+
* `persisted_patch: redacted`; then it is a display-only copy with secret-like
|
|
7
|
+
* strings hidden and every consumer that applies, checks, hashes or binds a
|
|
8
|
+
* decision to "the patch" must read the private exact patch object instead.
|
|
9
|
+
* `unavailable` means that object is missing or corrupt: `patch` then still
|
|
10
|
+
* holds the saved copy for display, and nothing may be applied from it.
|
|
11
|
+
*/
|
|
12
|
+
export declare function resolveRunPatch(rec: DaemonRunRecord, projectRoot: string | null): {
|
|
13
|
+
patch: string | null;
|
|
14
|
+
unavailable: boolean;
|
|
15
|
+
};
|
|
16
|
+
/** Exact patch for a mutating or digest-binding route. An unavailable exact
|
|
17
|
+
* object is a typed 409 raised before any tree is touched. */
|
|
18
|
+
export declare function readExactRunPatch(rec: DaemonRunRecord, projectRoot: string | null): string | null;
|
|
19
|
+
/** Digest a recorded operator decision must equal; null when there is no exact
|
|
20
|
+
* patch to bind to (no artifact, or its exact bytes are unavailable). */
|
|
21
|
+
export declare function runPatchDigest(rec: DaemonRunRecord, projectRoot: string | null): string | null;
|
|
22
|
+
/** A blob-only finding is invisible to a text scan of the patch, so the `pr`
|
|
23
|
+
* publishing refusal reads the run's own disclosure for it. */
|
|
24
|
+
export declare function runPatchHasSecretLikeBinary(rec: DaemonRunRecord): boolean;
|
|
25
|
+
//# sourceMappingURL=run-exact-patch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-exact-patch.d.ts","sourceRoot":"","sources":["../src/run-exact-patch.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,eAAe,EACpB,WAAW,EAAE,MAAM,GAAG,IAAI,GACzB;IAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAWhD;AAED;8DAC8D;AAC9D,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CASjG;AAED;yEACyE;AACzE,wBAAgB,cAAc,CAAC,GAAG,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAG9F;AAED;+DAC+D;AAC/D,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAIzE"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { EXACT_PATCH_UNAVAILABLE_MESSAGE } from "@claudexor/delivery";
|
|
2
|
+
import { WorkProduct } from "@claudexor/schema";
|
|
3
|
+
import { sha256 } from "@claudexor/util";
|
|
4
|
+
import { PATCH_EXACT_BYTES_UNAVAILABLE, resolveExactPatch } from "@claudexor/workspace";
|
|
5
|
+
import { readRawTextArtifact, safeReadStructuredArtifact } from "./run-artifact-read.js";
|
|
6
|
+
import { recordedExecutionRoot } from "./run-delivery-state.js";
|
|
7
|
+
/**
|
|
8
|
+
* The ONE interpretation point for a run's saved patch (INV-062).
|
|
9
|
+
*
|
|
10
|
+
* `final/patch.diff` is byte-exact unless the work product says
|
|
11
|
+
* `persisted_patch: redacted`; then it is a display-only copy with secret-like
|
|
12
|
+
* strings hidden and every consumer that applies, checks, hashes or binds a
|
|
13
|
+
* decision to "the patch" must read the private exact patch object instead.
|
|
14
|
+
* `unavailable` means that object is missing or corrupt: `patch` then still
|
|
15
|
+
* holds the saved copy for display, and nothing may be applied from it.
|
|
16
|
+
*/
|
|
17
|
+
export function resolveRunPatch(rec, projectRoot) {
|
|
18
|
+
const saved = readRawTextArtifact(rec, "final/patch.diff");
|
|
19
|
+
if (saved === null)
|
|
20
|
+
return { patch: null, unavailable: false };
|
|
21
|
+
const exact = resolveExactPatch({
|
|
22
|
+
savedCopy: saved,
|
|
23
|
+
meta: safeReadStructuredArtifact(rec, "final/work_product.yaml", WorkProduct)?.meta,
|
|
24
|
+
roots: [projectRoot, recordedExecutionRoot(rec)],
|
|
25
|
+
});
|
|
26
|
+
return exact.ok
|
|
27
|
+
? { patch: exact.patch, unavailable: false }
|
|
28
|
+
: { patch: saved, unavailable: true };
|
|
29
|
+
}
|
|
30
|
+
/** Exact patch for a mutating or digest-binding route. An unavailable exact
|
|
31
|
+
* object is a typed 409 raised before any tree is touched. */
|
|
32
|
+
export function readExactRunPatch(rec, projectRoot) {
|
|
33
|
+
const resolved = resolveRunPatch(rec, projectRoot);
|
|
34
|
+
if (resolved.unavailable) {
|
|
35
|
+
throw Object.assign(new Error(EXACT_PATCH_UNAVAILABLE_MESSAGE), {
|
|
36
|
+
status: 409,
|
|
37
|
+
code: PATCH_EXACT_BYTES_UNAVAILABLE,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
return resolved.patch;
|
|
41
|
+
}
|
|
42
|
+
/** Digest a recorded operator decision must equal; null when there is no exact
|
|
43
|
+
* patch to bind to (no artifact, or its exact bytes are unavailable). */
|
|
44
|
+
export function runPatchDigest(rec, projectRoot) {
|
|
45
|
+
const resolved = resolveRunPatch(rec, projectRoot);
|
|
46
|
+
return resolved.patch !== null && !resolved.unavailable ? sha256(resolved.patch) : null;
|
|
47
|
+
}
|
|
48
|
+
/** A blob-only finding is invisible to a text scan of the patch, so the `pr`
|
|
49
|
+
* publishing refusal reads the run's own disclosure for it. */
|
|
50
|
+
export function runPatchHasSecretLikeBinary(rec) {
|
|
51
|
+
const meta = safeReadStructuredArtifact(rec, "final/work_product.yaml", WorkProduct)?.meta;
|
|
52
|
+
const finding = meta?.["secret_like"];
|
|
53
|
+
return Array.isArray(finding?.binary_paths) && finding.binary_paths.length > 0;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=run-exact-patch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-exact-patch.js","sourceRoot":"","sources":["../src/run-exact-patch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,6BAA6B,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACzF,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAGhE;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAC7B,GAAoB,EACpB,WAA0B;IAE1B,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;IAC3D,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IAC/D,MAAM,KAAK,GAAG,iBAAiB,CAAC;QAC9B,SAAS,EAAE,KAAK;QAChB,IAAI,EAAE,0BAA0B,CAAC,GAAG,EAAE,yBAAyB,EAAE,WAAW,CAAC,EAAE,IAAI;QACnF,KAAK,EAAE,CAAC,WAAW,EAAE,qBAAqB,CAAC,GAAG,CAAC,CAAC;KACjD,CAAC,CAAC;IACH,OAAO,KAAK,CAAC,EAAE;QACb,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE;QAC5C,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AAC1C,CAAC;AAED;8DAC8D;AAC9D,MAAM,UAAU,iBAAiB,CAAC,GAAoB,EAAE,WAA0B;IAChF,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IACnD,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;QACzB,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,CAAC,EAAE;YAC9D,MAAM,EAAE,GAAG;YACX,IAAI,EAAE,6BAA6B;SACpC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,QAAQ,CAAC,KAAK,CAAC;AACxB,CAAC;AAED;yEACyE;AACzE,MAAM,UAAU,cAAc,CAAC,GAAoB,EAAE,WAA0B;IAC7E,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IACnD,OAAO,QAAQ,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1F,CAAC;AAED;+DAC+D;AAC/D,MAAM,UAAU,2BAA2B,CAAC,GAAoB;IAC9D,MAAM,IAAI,GAAG,0BAA0B,CAAC,GAAG,EAAE,yBAAyB,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC;IAC3F,MAAM,OAAO,GAAG,IAAI,EAAE,CAAC,aAAa,CAA2C,CAAC;IAChF,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;AACjF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-list-fingerprint.d.ts","sourceRoot":"","sources":["../src/run-list-fingerprint.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"run-list-fingerprint.d.ts","sourceRoot":"","sources":["../src/run-list-fingerprint.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAMvD,wBAAgB,oCAAoC,IAAI,MAAM,CAE7D;AAED,wBAAgB,yCAAyC,IAAI,IAAI,CAEhE;AAED;4EAC4E;AAC5E,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CA+C/D"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { statSync } from "node:fs";
|
|
2
2
|
import { sha256 } from "@claudexor/util";
|
|
3
|
+
import { RETAINED_ENVELOPE_POINTER, readContinuationSources, retainedEnvelopeInChain, } from "@claudexor/workspace";
|
|
3
4
|
import { safeArtifactPath } from "./artifact-paths.js";
|
|
4
5
|
import { TERMINAL_STATES } from "./sse-shared.js";
|
|
5
6
|
/** Number of artifact-path probes performed by the run-list fingerprinter. */
|
|
@@ -38,6 +39,12 @@ export function summaryFingerprint(rec) {
|
|
|
38
39
|
...identity,
|
|
39
40
|
fileIdentity("final/delivery_state.yaml"),
|
|
40
41
|
fileIdentity("tombstone.yaml"),
|
|
42
|
+
// A9 custody: retention, adoption and release move this pointer.
|
|
43
|
+
fileIdentity(RETAINED_ENVELOPE_POINTER),
|
|
44
|
+
// An unadopted ancestor can be released after this head reached terminal.
|
|
45
|
+
rec.runDir
|
|
46
|
+
? (retainedEnvelopeInChain(readContinuationSources(rec.runDir))?.envelope.id ?? "")
|
|
47
|
+
: "",
|
|
41
48
|
].join("|");
|
|
42
49
|
}
|
|
43
50
|
return [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-list-fingerprint.js","sourceRoot":"","sources":["../src/run-list-fingerprint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,8EAA8E;AAC9E,IAAI,qBAAqB,GAAG,CAAC,CAAC;AAE9B,MAAM,UAAU,oCAAoC;IAClD,OAAO,qBAAqB,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,yCAAyC;IACvD,qBAAqB,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED;4EAC4E;AAC5E,MAAM,UAAU,kBAAkB,CAAC,GAAoB;IACrD,MAAM,YAAY,GAAG,CAAC,GAAW,EAAU,EAAE;QAC3C,qBAAqB,EAAE,CAAC;QACxB,IAAI,CAAC,GAAG,CAAC,MAAM;YAAE,OAAO,GAAG,CAAC;QAC5B,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI;YAAE,OAAO,GAAG,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/E,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,CAAC;QACb,CAAC;IACH,CAAC,CAAC;IACF,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,iBAAiB,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,UAAU,IAAI,EAAE,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC5F,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACnC,2EAA2E;QAC3E,yEAAyE;QACzE,0EAA0E;QAC1E,uEAAuE;QACvE,OAAO;YACL,GAAG,QAAQ;YACX,YAAY,CAAC,2BAA2B,CAAC;YACzC,YAAY,CAAC,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"run-list-fingerprint.js","sourceRoot":"","sources":["../src/run-list-fingerprint.ts"],"names":[],"mappings":"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"}
|
package/dist/run-retry-routes.js
CHANGED
|
@@ -212,8 +212,17 @@ async function runAgain(ctx, id, res) {
|
|
|
212
212
|
// belong to the turn pipeline) — surviving here would make the draft
|
|
213
213
|
// unpostable, and a replayed planRef would smuggle the frozen-plan
|
|
214
214
|
// reference past the boundary (INV-081). Same set as decision-rerun.
|
|
215
|
-
const { turnId, retryOf, planRunId, planRef, threadId, parentRunId, delegatedFromRunId, ...request } = parsed;
|
|
215
|
+
const { turnId, retryOf, planRunId, planRef, threadId, parentRunId, delegatedFromRunId, continueModelInherited, ...request } = parsed;
|
|
216
216
|
const differences = [
|
|
217
|
+
...(continueModelInherited !== undefined
|
|
218
|
+
? [
|
|
219
|
+
{
|
|
220
|
+
field: "continueModelInherited",
|
|
221
|
+
change: "omitted",
|
|
222
|
+
reason: "model intent is resolved from the edited request",
|
|
223
|
+
},
|
|
224
|
+
]
|
|
225
|
+
: []),
|
|
217
226
|
...(turnId
|
|
218
227
|
? [{ field: "turnId", change: "omitted", reason: "server-owned turn binding" }]
|
|
219
228
|
: []),
|