@claudexor/control-api 3.20.1 → 3.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/dist/artifact-serve-routes.d.ts +7 -4
- package/dist/artifact-serve-routes.d.ts.map +1 -1
- package/dist/artifact-serve-routes.js +35 -7
- package/dist/artifact-serve-routes.js.map +1 -1
- package/dist/command-reads.d.ts +5 -0
- package/dist/command-reads.d.ts.map +1 -0
- package/dist/command-reads.js +18 -0
- package/dist/command-reads.js.map +1 -0
- package/dist/control-protocol.d.ts.map +1 -1
- package/dist/control-protocol.js +3 -1
- package/dist/control-protocol.js.map +1 -1
- package/dist/daemon-server.d.ts +1 -0
- package/dist/daemon-server.d.ts.map +1 -1
- package/dist/daemon-server.js +75 -109
- package/dist/daemon-server.js.map +1 -1
- package/dist/daemon-status-routes.d.ts +7 -0
- package/dist/daemon-status-routes.d.ts.map +1 -0
- package/dist/daemon-status-routes.js +16 -0
- package/dist/daemon-status-routes.js.map +1 -0
- package/dist/decision-rerun.js +1 -1
- package/dist/decision-rerun.js.map +1 -1
- package/dist/operation-catalog.d.ts.map +1 -1
- package/dist/operation-catalog.js +1 -0
- package/dist/operation-catalog.js.map +1 -1
- package/dist/operation-summaries.d.ts.map +1 -1
- package/dist/operation-summaries.js +1 -0
- package/dist/operation-summaries.js.map +1 -1
- package/dist/project-routes.d.ts +6 -1
- package/dist/project-routes.d.ts.map +1 -1
- package/dist/project-routes.js +18 -3
- package/dist/project-routes.js.map +1 -1
- package/dist/remote-operation-descriptors.d.ts +8 -0
- package/dist/remote-operation-descriptors.d.ts.map +1 -1
- package/dist/remote-operation-descriptors.js +4 -0
- package/dist/remote-operation-descriptors.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 +62 -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-execution-root.d.ts +22 -0
- package/dist/run-execution-root.d.ts.map +1 -0
- package/dist/run-execution-root.js +23 -0
- package/dist/run-execution-root.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-list.d.ts +3 -57
- package/dist/run-list.d.ts.map +1 -1
- package/dist/run-list.js +2 -67
- package/dist/run-list.js.map +1 -1
- package/dist/run-record.d.ts +4 -3
- package/dist/run-record.d.ts.map +1 -1
- package/dist/run-record.js.map +1 -1
- package/dist/run-retry-routes.js +11 -2
- package/dist/run-retry-routes.js.map +1 -1
- package/dist/run-start.d.ts +12 -3
- package/dist/run-start.d.ts.map +1 -1
- package/dist/run-start.js +25 -25
- package/dist/run-start.js.map +1 -1
- package/dist/thread-create-route.d.ts +16 -0
- package/dist/thread-create-route.d.ts.map +1 -0
- package/dist/thread-create-route.js +83 -0
- package/dist/thread-create-route.js.map +1 -0
- package/dist/thread-delegated-execution.d.ts +19 -0
- package/dist/thread-delegated-execution.d.ts.map +1 -0
- package/dist/thread-delegated-execution.js +27 -0
- package/dist/thread-delegated-execution.js.map +1 -0
- package/dist/thread-lifecycle-routes.d.ts +2 -1
- package/dist/thread-lifecycle-routes.d.ts.map +1 -1
- package/dist/thread-lifecycle-routes.js +12 -3
- package/dist/thread-lifecycle-routes.js.map +1 -1
- package/dist/thread-mutation.d.ts +2 -4
- package/dist/thread-mutation.d.ts.map +1 -1
- package/dist/thread-mutation.js +1 -1
- package/dist/thread-mutation.js.map +1 -1
- package/dist/thread-projection.d.ts.map +1 -1
- package/dist/thread-projection.js +1 -0
- package/dist/thread-projection.js.map +1 -1
- package/dist/thread-recovery.js +1 -1
- package/dist/thread-recovery.js.map +1 -1
- package/dist/thread-turn-problems.d.ts +39 -0
- package/dist/thread-turn-problems.d.ts.map +1 -0
- package/dist/thread-turn-problems.js +86 -0
- package/dist/thread-turn-problems.js.map +1 -0
- package/dist/thread-turn-routes.d.ts +2 -25
- package/dist/thread-turn-routes.d.ts.map +1 -1
- package/dist/thread-turn-routes.js +19 -90
- package/dist/thread-turn-routes.js.map +1 -1
- package/package.json +7 -7
|
@@ -0,0 +1,62 @@
|
|
|
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`), preserved by the daemon socket as well.
|
|
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
|
+
const from = continuedRunOf(request);
|
|
56
|
+
if (from === null)
|
|
57
|
+
return;
|
|
58
|
+
const refusal = continuationRefusal(request, await daemon.list({ continuationChainOf: from }));
|
|
59
|
+
if (refusal)
|
|
60
|
+
throw continuationRefusalError(refusal);
|
|
61
|
+
}
|
|
62
|
+
//# 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,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO;IAC1B,MAAM,OAAO,GAAG,mBAAmB,CAAC,OAAO,EAAE,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC/F,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":"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"}
|
|
@@ -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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where a run's files live, kept apart from the stable project it is
|
|
3
|
+
* identified by (INV-072/INV-073). A delegated run records its caller-owned
|
|
4
|
+
* `execution.workspaceRoot`; every reader of that run's files resolves there
|
|
5
|
+
* and never substitutes the project's same-named files.
|
|
6
|
+
*/
|
|
7
|
+
import type { DaemonRunRecord } from "./daemon-server.js";
|
|
8
|
+
/** The caller-owned execution address a delegated run recorded in its params. */
|
|
9
|
+
export declare function runExecutionWorkspaceRoot(rec: DaemonRunRecord): string | null;
|
|
10
|
+
/** The tree a run's file references resolve in: its recorded caller-owned
|
|
11
|
+
* workspace, otherwise its project root; null without a project. */
|
|
12
|
+
export declare function runExecutionRoot(rec: DaemonRunRecord, projectRoot: string | null): string | null;
|
|
13
|
+
/** A run's stable project identity (null without project scope) and optional
|
|
14
|
+
* caller-owned workspace override. Run identity remains bound without an override. */
|
|
15
|
+
export interface RunWorkspaceBinding {
|
|
16
|
+
projectRoot: string | null;
|
|
17
|
+
workspaceRoot: string | null;
|
|
18
|
+
}
|
|
19
|
+
/** Every run-addressed project file read verifies the run's project identity,
|
|
20
|
+
* including ordinary runs whose files live in their project. */
|
|
21
|
+
export declare function runWorkspaceBinding(rec: DaemonRunRecord): RunWorkspaceBinding;
|
|
22
|
+
//# sourceMappingURL=run-execution-root.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-execution-root.d.ts","sourceRoot":"","sources":["../src/run-execution-root.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,iFAAiF;AACjF,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,CAK7E;AAED;qEACqE;AACrE,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAEhG;AAED;uFACuF;AACvF,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;iEACiE;AACjE,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,eAAe,GAAG,mBAAmB,CAQ7E"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** The caller-owned execution address a delegated run recorded in its params. */
|
|
2
|
+
export function runExecutionWorkspaceRoot(rec) {
|
|
3
|
+
const execution = rec.params
|
|
4
|
+
?.execution;
|
|
5
|
+
const root = execution?.workspaceRoot;
|
|
6
|
+
return typeof root === "string" && root.trim() ? root : null;
|
|
7
|
+
}
|
|
8
|
+
/** The tree a run's file references resolve in: its recorded caller-owned
|
|
9
|
+
* workspace, otherwise its project root; null without a project. */
|
|
10
|
+
export function runExecutionRoot(rec, projectRoot) {
|
|
11
|
+
return projectRoot === null ? null : (runExecutionWorkspaceRoot(rec) ?? projectRoot);
|
|
12
|
+
}
|
|
13
|
+
/** Every run-addressed project file read verifies the run's project identity,
|
|
14
|
+
* including ordinary runs whose files live in their project. */
|
|
15
|
+
export function runWorkspaceBinding(rec) {
|
|
16
|
+
const workspaceRoot = runExecutionWorkspaceRoot(rec);
|
|
17
|
+
const scope = rec.params?.scope;
|
|
18
|
+
const projectRoot = scope?.kind === "project" && typeof scope.root === "string" && scope.root.trim()
|
|
19
|
+
? scope.root
|
|
20
|
+
: null;
|
|
21
|
+
return { projectRoot, workspaceRoot };
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=run-execution-root.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-execution-root.js","sourceRoot":"","sources":["../src/run-execution-root.ts"],"names":[],"mappings":"AAQA,iFAAiF;AACjF,MAAM,UAAU,yBAAyB,CAAC,GAAoB;IAC5D,MAAM,SAAS,GAAI,GAAG,CAAC,MAAkE;QACvF,EAAE,SAAS,CAAC;IACd,MAAM,IAAI,GAAG,SAAS,EAAE,aAAa,CAAC;IACtC,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/D,CAAC;AAED;qEACqE;AACrE,MAAM,UAAU,gBAAgB,CAAC,GAAoB,EAAE,WAA0B;IAC/E,OAAO,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,CAAC;AACvF,CAAC;AASD;iEACiE;AACjE,MAAM,UAAU,mBAAmB,CAAC,GAAoB;IACtD,MAAM,aAAa,GAAG,yBAAyB,CAAC,GAAG,CAAC,CAAC;IACrD,MAAM,KAAK,GAAI,GAAG,CAAC,MAAqE,EAAE,KAAK,CAAC;IAChG,MAAM,WAAW,GACf,KAAK,EAAE,IAAI,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE;QAC9E,CAAC,CAAC,KAAK,CAAC,IAAI;QACZ,CAAC,CAAC,IAAI,CAAC;IACX,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC;AACxC,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-list.d.ts
CHANGED
|
@@ -1,33 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
* The route used to map EVERY retained daemon record on every call, silently
|
|
5
|
-
* ignore `limit`/`state`/`cursor`, and clear its whole summary cache past a
|
|
6
|
-
* guard. This module owns the honest, bounded server half:
|
|
7
|
-
* - a strict typed query (limit / state / opaque keyset cursor);
|
|
8
|
-
* - deterministic newest-first `(createdAt desc, id desc)` ordering;
|
|
9
|
-
* - keyset paging that survives concurrent inserts/prunes (walks the set once,
|
|
10
|
-
* no duplicates or omissions), so projection work is bounded by page size
|
|
11
|
-
* rather than total retained records;
|
|
12
|
-
* - an LRU-bounded map primitive so the summary cache evicts its oldest entry
|
|
13
|
-
* instead of a wholesale clear-and-rehydrate thrash.
|
|
14
|
-
*/
|
|
15
|
-
import { ControlRunState } from "@claudexor/schema";
|
|
16
|
-
/** Only the record fields keyset ordering + cursors depend on (structural). */
|
|
17
|
-
export interface RunListRecord {
|
|
18
|
-
id: string;
|
|
19
|
-
state: string;
|
|
20
|
-
createdAt?: string;
|
|
21
|
-
}
|
|
22
|
-
export interface RunListCursor {
|
|
23
|
-
createdAt: string;
|
|
24
|
-
id: string;
|
|
25
|
-
}
|
|
26
|
-
export interface RunListQuery {
|
|
27
|
-
limit: number;
|
|
28
|
-
state: ControlRunState | null;
|
|
29
|
-
cursor: RunListCursor | null;
|
|
30
|
-
}
|
|
1
|
+
import { type RunListQuery } from "@claudexor/schema";
|
|
2
|
+
export { selectRunListPage } from "@claudexor/schema";
|
|
3
|
+
export type { RunListQuery } from "@claudexor/schema";
|
|
31
4
|
/**
|
|
32
5
|
* Parse + validate the GET /v2/runs query. Unknown params are refused (strict
|
|
33
6
|
* doctrine, matching sibling routes that call `assertOnlyQueryParams`); a typoed
|
|
@@ -35,33 +8,6 @@ export interface RunListQuery {
|
|
|
35
8
|
* 400 instead of being silently ignored.
|
|
36
9
|
*/
|
|
37
10
|
export declare function parseRunListQuery(url: URL): RunListQuery;
|
|
38
|
-
/** Newest-first deterministic order: `(createdAt desc, id desc)`. Records with
|
|
39
|
-
* no `createdAt` sort last (empty string) with `id` as the stable tiebreak, so
|
|
40
|
-
* the traversal is total and duplicate-free even across foreign record shapes. */
|
|
41
|
-
export declare function orderRunRecords<T extends RunListRecord>(records: readonly T[]): T[];
|
|
42
|
-
/**
|
|
43
|
-
* Index of the first record strictly after `cursor` within an already-ordered
|
|
44
|
-
* list. Comparison-based (not id-equality) so a cursor whose record was pruned
|
|
45
|
-
* between pages still resumes at the correct neighbor — no duplicate, no gap.
|
|
46
|
-
*/
|
|
47
|
-
export declare function indexAfterCursor(ordered: readonly RunListRecord[], cursor: RunListCursor): number;
|
|
48
|
-
export declare function encodeRunCursor(rec: RunListRecord): string;
|
|
49
|
-
/** Strict opaque-cursor decode: base64url alphabet only, exactly one separator,
|
|
50
|
-
* non-empty id. Anything else is a typed 400 (never a silent full-list fall
|
|
51
|
-
* back), mirroring the QA-061 run-event cursor contract. */
|
|
52
|
-
export declare function decodeRunCursor(raw: string): RunListCursor;
|
|
53
|
-
/**
|
|
54
|
-
* Select one bounded page from the raw daemon records: order newest-first,
|
|
55
|
-
* apply the optional `state` filter, then keyset-slice by cursor + limit. All of
|
|
56
|
-
* it happens on the raw records BEFORE any summary is materialized, so the
|
|
57
|
-
* caller only fingerprints/projects the returned page — work bounded by page
|
|
58
|
-
* size, not total retained records (QA-052).
|
|
59
|
-
*/
|
|
60
|
-
export declare function selectRunListPage<T extends RunListRecord>(records: readonly T[], query: RunListQuery): {
|
|
61
|
-
page: T[];
|
|
62
|
-
hasMore: boolean;
|
|
63
|
-
nextCursor: string | null;
|
|
64
|
-
};
|
|
65
11
|
/** Move an existing key to the most-recently-used position and read it. */
|
|
66
12
|
export declare function lruGet<K, V>(map: Map<K, V>, key: K): V | undefined;
|
|
67
13
|
/**
|
package/dist/run-list.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-list.d.ts","sourceRoot":"","sources":["../src/run-list.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"run-list.d.ts","sourceRoot":"","sources":["../src/run-list.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAsBtD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,GAAG,GAAG,YAAY,CAoCxD;AAED,2EAA2E;AAC3E,wBAAgB,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS,CAOlE;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAQhF"}
|
package/dist/run-list.js
CHANGED
|
@@ -14,6 +14,8 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import { ControlRunState } from "@claudexor/schema";
|
|
16
16
|
import { assertOnlyQueryParams, singleQuery } from "./query.js";
|
|
17
|
+
import { decodeRunCursor } from "@claudexor/schema";
|
|
18
|
+
export { selectRunListPage } from "@claudexor/schema";
|
|
17
19
|
/** Default page size when the caller sends no `limit` — newest-first, so the
|
|
18
20
|
* default page always contains every active (queued/running) run a thread-first
|
|
19
21
|
* client needs to discover without downloading all terminal history. */
|
|
@@ -61,73 +63,6 @@ export function parseRunListQuery(url) {
|
|
|
61
63
|
const cursor = cursorRaw === undefined ? null : decodeRunCursor(cursorRaw);
|
|
62
64
|
return { limit, state, cursor };
|
|
63
65
|
}
|
|
64
|
-
/** Newest-first deterministic order: `(createdAt desc, id desc)`. Records with
|
|
65
|
-
* no `createdAt` sort last (empty string) with `id` as the stable tiebreak, so
|
|
66
|
-
* the traversal is total and duplicate-free even across foreign record shapes. */
|
|
67
|
-
export function orderRunRecords(records) {
|
|
68
|
-
return [...records].sort((a, b) => {
|
|
69
|
-
const ac = a.createdAt ?? "";
|
|
70
|
-
const bc = b.createdAt ?? "";
|
|
71
|
-
if (ac !== bc)
|
|
72
|
-
return ac < bc ? 1 : -1;
|
|
73
|
-
if (a.id !== b.id)
|
|
74
|
-
return a.id < b.id ? 1 : -1;
|
|
75
|
-
return 0;
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
/** True when `rec` sorts strictly AFTER the cursor key in newest-first order
|
|
79
|
-
* (i.e. is older, or same instant with a smaller id). */
|
|
80
|
-
function recordSortsAfterCursor(rec, cursor) {
|
|
81
|
-
const rc = rec.createdAt ?? "";
|
|
82
|
-
if (rc !== cursor.createdAt)
|
|
83
|
-
return rc < cursor.createdAt;
|
|
84
|
-
return rec.id < cursor.id;
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Index of the first record strictly after `cursor` within an already-ordered
|
|
88
|
-
* list. Comparison-based (not id-equality) so a cursor whose record was pruned
|
|
89
|
-
* between pages still resumes at the correct neighbor — no duplicate, no gap.
|
|
90
|
-
*/
|
|
91
|
-
export function indexAfterCursor(ordered, cursor) {
|
|
92
|
-
let i = 0;
|
|
93
|
-
while (i < ordered.length && !recordSortsAfterCursor(ordered[i], cursor))
|
|
94
|
-
i++;
|
|
95
|
-
return i;
|
|
96
|
-
}
|
|
97
|
-
export function encodeRunCursor(rec) {
|
|
98
|
-
return Buffer.from(`${rec.createdAt ?? ""}\0${rec.id}`, "utf8").toString("base64url");
|
|
99
|
-
}
|
|
100
|
-
/** Strict opaque-cursor decode: base64url alphabet only, exactly one separator,
|
|
101
|
-
* non-empty id. Anything else is a typed 400 (never a silent full-list fall
|
|
102
|
-
* back), mirroring the QA-061 run-event cursor contract. */
|
|
103
|
-
export function decodeRunCursor(raw) {
|
|
104
|
-
if (!/^[A-Za-z0-9_-]+$/.test(raw)) {
|
|
105
|
-
throw invalidRunListQuery("cursor is malformed; refetch the run list and resume from its nextCursor", "invalid_run_list_cursor");
|
|
106
|
-
}
|
|
107
|
-
const decoded = Buffer.from(raw, "base64url").toString("utf8");
|
|
108
|
-
const sep = decoded.indexOf("\0");
|
|
109
|
-
const id = sep < 0 ? "" : decoded.slice(sep + 1);
|
|
110
|
-
if (sep < 0 || id.length === 0 || id.includes("\0")) {
|
|
111
|
-
throw invalidRunListQuery("cursor is malformed; refetch the run list and resume from its nextCursor", "invalid_run_list_cursor");
|
|
112
|
-
}
|
|
113
|
-
return { createdAt: decoded.slice(0, sep), id };
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Select one bounded page from the raw daemon records: order newest-first,
|
|
117
|
-
* apply the optional `state` filter, then keyset-slice by cursor + limit. All of
|
|
118
|
-
* it happens on the raw records BEFORE any summary is materialized, so the
|
|
119
|
-
* caller only fingerprints/projects the returned page — work bounded by page
|
|
120
|
-
* size, not total retained records (QA-052).
|
|
121
|
-
*/
|
|
122
|
-
export function selectRunListPage(records, query) {
|
|
123
|
-
const ordered = orderRunRecords(records);
|
|
124
|
-
const filtered = query.state ? ordered.filter((r) => r.state === query.state) : ordered;
|
|
125
|
-
const start = query.cursor ? indexAfterCursor(filtered, query.cursor) : 0;
|
|
126
|
-
const page = filtered.slice(start, start + query.limit);
|
|
127
|
-
const hasMore = start + page.length < filtered.length;
|
|
128
|
-
const tail = page[page.length - 1];
|
|
129
|
-
return { page, hasMore, nextCursor: hasMore && tail ? encodeRunCursor(tail) : null };
|
|
130
|
-
}
|
|
131
66
|
/** Move an existing key to the most-recently-used position and read it. */
|
|
132
67
|
export function lruGet(map, key) {
|
|
133
68
|
const value = map.get(key);
|
package/dist/run-list.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-list.js","sourceRoot":"","sources":["../src/run-list.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"run-list.js","sourceRoot":"","sources":["../src/run-list.ts"],"names":[],"mappings":"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"}
|
package/dist/run-record.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { CancelReasonCode, CommandListQuery } from "@claudexor/schema";
|
|
2
2
|
export interface DaemonRunRecord {
|
|
3
|
+
promptPreview?: string;
|
|
3
4
|
id: string;
|
|
4
5
|
state: string;
|
|
5
6
|
runId?: string;
|
|
@@ -17,6 +18,7 @@ export interface DaemonRunRecord {
|
|
|
17
18
|
finishedAt?: string;
|
|
18
19
|
}
|
|
19
20
|
export interface DaemonFacadeClient {
|
|
21
|
+
health?(): Promise<unknown>;
|
|
20
22
|
enqueue(params: unknown, options?: {
|
|
21
23
|
idempotencyKey?: string;
|
|
22
24
|
clientId?: string;
|
|
@@ -34,9 +36,8 @@ export interface DaemonFacadeClient {
|
|
|
34
36
|
idempotencyRequest?: unknown;
|
|
35
37
|
}): Promise<DaemonRunRecord | null>;
|
|
36
38
|
status(id: string): Promise<DaemonRunRecord>;
|
|
37
|
-
/**
|
|
38
|
-
|
|
39
|
-
list(query?: CommandListQuery): Promise<DaemonRunRecord[]>;
|
|
39
|
+
/** Required addressed selection before projection. */
|
|
40
|
+
list(query: CommandListQuery): Promise<DaemonRunRecord[]>;
|
|
40
41
|
cancel(id: string, reasonCode?: CancelReasonCode): Promise<unknown>;
|
|
41
42
|
fenceDelegationParent?(runId: string): Promise<unknown>;
|
|
42
43
|
}
|
package/dist/run-record.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-record.d.ts","sourceRoot":"","sources":["../src/run-record.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAG5E,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,CACL,MAAM,EAAE,OAAO,EACf,OAAO,CAAC,EAAE;QACR,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GACA,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC5D,YAAY,CAAC,CACX,MAAM,EAAE,OAAO,EACf,OAAO,EAAE;QACP,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,kBAAkB,CAAC,EAAE,OAAO,CAAC;KAC9B,GACA,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;IACnC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC7C;
|
|
1
|
+
{"version":3,"file":"run-record.d.ts","sourceRoot":"","sources":["../src/run-record.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAG5E,MAAM,WAAW,eAAe;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5B,OAAO,CACL,MAAM,EAAE,OAAO,EACf,OAAO,CAAC,EAAE;QACR,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GACA,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC5D,YAAY,CAAC,CACX,MAAM,EAAE,OAAO,EACf,OAAO,EAAE;QACP,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,kBAAkB,CAAC,EAAE,OAAO,CAAC;KAC9B,GACA,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;IACnC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC7C,sDAAsD;IACtD,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAC1D,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACpE,qBAAqB,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACzD;AAED,MAAM,WAAW,6BAA6B;IAC5C,MAAM,EAAE,aAAa,GAAG,sBAAsB,CAAC;IAC/C,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAI7E;AAED;;wEAEwE;AACxE,wBAAgB,+BAA+B,CAC7C,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,SAAS,eAAe,EAAE,GAC/B,eAAe,EAAE,CAuBnB"}
|
package/dist/run-record.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-record.js","sourceRoot":"","sources":["../src/run-record.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"run-record.js","sourceRoot":"","sources":["../src/run-record.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAwDtD,MAAM,UAAU,YAAY,CAAC,MAAuB;IAClD,OAAO,MAAM,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;QACxF,CAAC,CAAE,MAAM,CAAC,MAAkC;QAC5C,CAAC,CAAC,EAAE,CAAC;AACT,CAAC;AAED;;wEAEwE;AACxE,MAAM,UAAU,+BAA+B,CAC7C,WAAmB,EACnB,IAAgC;IAEhC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA6B,CAAC;IACtD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,MAAM,KAAK,IAAI;YAAE,SAAS;QAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACf,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;IACD,MAAM,GAAG,GAAsB,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAS,CAAC,WAAW,CAAC,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,CAAC,WAAW,CAAC,CAAC;IAC5B,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;QAC9B,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YAC/C,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,CAAC;YAC3C,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;gBAAE,SAAS;YACnC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACrB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChB,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|