@tangle-network/sandbox-cli 0.21.63 → 0.21.65
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +31 -3
- package/SKILL.md +29 -1
- package/dist/graph-native-CS_TmaCK.mjs +1 -0
- package/dist/graph-viewer/Analytics-bWsqhurt.js +1001 -0
- package/dist/graph-viewer/{AnswerStrip-DhwqOyxI.js → AnswerStrip-COxV7gLW.js} +2 -2
- package/dist/graph-viewer/Checks-CQGmKcQ0.js +164 -0
- package/dist/graph-viewer/Conversations-DgCshBAf.js +627 -0
- package/dist/graph-viewer/{Files-DtZhf0ii.js → Files-CvIOGrAs.js} +81 -90
- package/dist/graph-viewer/LiveRun-DHmsr6F7.js +311 -0
- package/dist/graph-viewer/{Outputs-QET3nPPp.js → Outputs-rwBg_x36.js} +4 -4
- package/dist/graph-viewer/Overview-C150tkVa.js +194 -0
- package/dist/graph-viewer/{RunOverview-DJQDAMIx.js → RunOverview-CSqsunqf.js} +2 -2
- package/dist/graph-viewer/RunPage-F_prVwiV.js +286 -0
- package/dist/graph-viewer/Timeline-BFDywlmz.js +335 -0
- package/dist/graph-viewer/Today-BdDuqZGF.js +623 -0
- package/dist/graph-viewer/Topology-SAfGtd5u.js +238 -0
- package/dist/graph-viewer/Traces-BYqXaS_s.js +254 -0
- package/dist/graph-viewer/{WallPages-4d9QUZDq.js → WallPages-MM70VZrC.js} +48 -30
- package/dist/graph-viewer/agent-runtime.js +55 -55
- package/dist/graph-viewer/{data-BJmP7F1M.js → data-DTGmre1W.js} +31 -27
- package/dist/graph-viewer/harness-sessions.js +1 -1
- package/dist/graph-viewer/index.js +1357 -1392
- package/dist/graph-viewer/{lazy-pages-DM0cZM10.js → lazy-pages-BYuq_L_n.js} +9 -5
- package/dist/graph-viewer/{outputs-model-CGdvjkQh.js → outputs-model-CHTx8rMz.js} +2 -2
- package/dist/graph-viewer/{viewer/plain-words-CgvxtEOa.js → plain-words-BrMHl0On.js} +9 -4
- package/dist/graph-viewer/receipt.js +2 -2
- package/dist/graph-viewer/record-CsP_3NJS.js +612 -0
- package/dist/graph-viewer/record-part-CuT9Xw37.js +334 -0
- package/dist/graph-viewer/record.js +2 -336
- package/dist/graph-viewer/report-viewer.js +65 -65
- package/dist/graph-viewer/report.js +1 -1
- package/dist/graph-viewer/research-publication.js +1 -1
- package/dist/graph-viewer/{run-files-C1NgzM0l.js → run-files-BckQDdTD.js} +1 -1
- package/dist/graph-viewer/{run-receipt-Bvi4-KVM.js → run-receipt-Bt2iXJUy.js} +1 -0
- package/dist/graph-viewer/schemas/agent-workspace.play.v1.json +3 -0
- package/dist/graph-viewer/schemas/agent-workspace.plays.v1.json +2 -0
- package/dist/graph-viewer/schemas/agent-workspace.run.v1.json +1 -0
- package/dist/graph-viewer/styles.css +4559 -2385
- package/dist/graph-viewer/trace-spans.js +1 -1
- package/dist/graph-viewer/ui-xa5w5bEN.js +889 -0
- package/dist/graph-viewer/viewer/{AgentGraphCanvas-CMdOlSlh-4EervjeC.js → AgentGraphCanvas-B74GN1o6-BZEumF7-.js} +2610 -2707
- package/dist/graph-viewer/viewer/Analytics-E3XS570U.js +1002 -0
- package/dist/graph-viewer/viewer/{AnswerStrip-CGUyXuYH.js → AnswerStrip-B7xMU57A.js} +2 -2
- package/dist/graph-viewer/viewer/Checks-CJ5XSHbv.js +165 -0
- package/dist/graph-viewer/viewer/Conversations-AX8G7Qyl.js +904 -0
- package/dist/graph-viewer/viewer/Files-DxL1576V.js +630 -0
- package/dist/graph-viewer/viewer/LiveRun-B-BckyEj.js +820 -0
- package/dist/graph-viewer/viewer/{Outputs-CumGyjQo.js → Outputs-BoIpgfMv.js} +24 -23
- package/dist/graph-viewer/viewer/Overview-Dzg5XJgy.js +436 -0
- package/dist/graph-viewer/viewer/RunPage-NtevWXBs.js +285 -0
- package/dist/graph-viewer/viewer/{Scores-ZS16yk0n.js → Scores-Dgv4WePL.js} +3 -3
- package/dist/graph-viewer/viewer/Timeline-CzY3LVDu.js +335 -0
- package/dist/graph-viewer/viewer/Today-Bi9IIwuh.js +623 -0
- package/dist/graph-viewer/viewer/Topology-CzjqSFXH.js +239 -0
- package/dist/graph-viewer/viewer/Traces-CMX0H1VU.js +254 -0
- package/dist/graph-viewer/viewer/{WallPages-CzWpyIfp.js → WallPages-Clj4bORg.js} +50 -32
- package/dist/graph-viewer/viewer/addon-webgl-BSCscllv.js +4027 -0
- package/dist/graph-viewer/viewer/agent-record-BrP-ENHg.css +2 -0
- package/dist/graph-viewer/viewer/{bot-D6Nrej7Z.js → bot-BaQU59LG.js} +1 -1
- package/dist/graph-viewer/viewer/{chevron-right-D_5IKLxu.js → chevron-right-Xn05jYLT.js} +1 -1
- package/dist/graph-viewer/viewer/{createLucideIcon-yH0cxLMy.js → createLucideIcon-BSphcoOJ.js} +1 -1
- package/dist/graph-viewer/viewer/dashboard-D3JhmRhe-DSl0zhkw.js +371 -0
- package/dist/graph-viewer/viewer/{data-CkWfWr7i.js → data-CVHeKhrh.js} +144 -139
- package/dist/graph-viewer/viewer/dist-4_KJz8ZM.js +349 -0
- package/dist/graph-viewer/viewer/dist-Dy-wrdTt.js +1615 -0
- package/dist/graph-viewer/viewer/es2015-utW4DTOJ.js +3506 -0
- package/dist/graph-viewer/viewer/{final-output-kwY11u9X.js → final-output-BYT-g-9j.js} +1 -1
- package/dist/graph-viewer/viewer/flow-waterfall-model-DvrgPLGS-BdThSFH-.js +2696 -0
- package/dist/graph-viewer/viewer/git-branch-BzTbIcYL.js +28 -0
- package/dist/graph-viewer/viewer/{highlights-Btsi5OXl.js → highlights-DWeSCtiR.js} +4 -4
- package/dist/graph-viewer/viewer/jsx-runtime-DPT6sCLq.js +319 -0
- package/dist/graph-viewer/viewer/lazy-pages-ChiMJ8r_.js +803 -0
- package/dist/graph-viewer/viewer/{markdown-CX_sVrXB.js → markdown-lADwhD7y.js} +2324 -2608
- package/dist/graph-viewer/viewer/model-brand-bTcMjQtB-RSb7EbGB.js +476 -0
- package/dist/graph-viewer/viewer/{page-header-Brq611fd.js → page-header-QbUg8F8i.js} +12 -11
- package/dist/graph-viewer/{plain-words-CgvxtEOa.js → viewer/plain-words-BrMHl0On.js} +9 -4
- package/dist/graph-viewer/viewer/primitives-znfPK9NP-B6UO7uDr.js +346 -0
- package/dist/graph-viewer/viewer/react-DQ7E2Epi.js +4254 -0
- package/dist/graph-viewer/viewer/{react-dom-t1L4_-il.js → react-dom-BEusmvQH.js} +1 -1
- package/dist/graph-viewer/viewer/record-DZnT6SWN-H-ul3U3a.js +3523 -0
- package/dist/graph-viewer/viewer/record-W39D5MO-.js +1 -0
- package/dist/graph-viewer/viewer/record-part-CbweyYoV.js +335 -0
- package/dist/graph-viewer/viewer/{segmented-control-BaJmvTNd.js → segmented-control-Di1mbQlP.js} +27 -26
- package/dist/graph-viewer/viewer/{shiki-Qnby7Sh6.js → shiki-BfNNlmfZ.js} +15 -15
- package/dist/graph-viewer/viewer/status-meta-S0kV_RDp.js +273 -0
- package/dist/graph-viewer/viewer/{stream-tokenizer-CWtnjmRd.js → stream-tokenizer-B5wWaM3U.js} +12 -12
- package/dist/graph-viewer/viewer/{themes-1i1fzpRk.js → themes-DuRxHiga.js} +1 -1
- package/dist/graph-viewer/viewer/ui-Co03nZUX.js +889 -0
- package/dist/graph-viewer/viewer/utils-BuObIC0n.js +1815 -0
- package/dist/graph-viewer/viewer/workbench-E6_5q_oL.js +28351 -0
- package/dist/graph-viewer/viewer/workflows--mZpHYqo.js +3298 -0
- package/dist/graph-viewer/viewer/workspace-cKs9sGEO.js +2468 -0
- package/dist/graph-viewer/{workspace-model-Ewf17pTW.js → workspace-model-BkPl_J8E.js} +1 -1
- package/dist/graph-viewer/workspace-viewer.js +7452 -7489
- package/dist/graph-viewer/workspace.js +1 -1
- package/dist/index.mjs +27 -22
- package/package.json +10 -9
- package/dist/graph-viewer/Analytics-DFWW8Phh.js +0 -938
- package/dist/graph-viewer/Checks-qgqV4xgV.js +0 -155
- package/dist/graph-viewer/Conversations-CGB45kpj.js +0 -545
- package/dist/graph-viewer/LiveRun-C21wUKAY.js +0 -210
- package/dist/graph-viewer/Overview-BjeLsA2I.js +0 -506
- package/dist/graph-viewer/RunPage-CkkcBEUe.js +0 -258
- package/dist/graph-viewer/Timeline-C2Xolk0t.js +0 -293
- package/dist/graph-viewer/Today-BVVDtSVN.js +0 -660
- package/dist/graph-viewer/Topology-DO5XX8e4.js +0 -545
- package/dist/graph-viewer/Traces-BhMxjNgw.js +0 -259
- package/dist/graph-viewer/part-events-BrLrg_EV.js +0 -276
- package/dist/graph-viewer/record-part-CZal_IMH.js +0 -1408
- package/dist/graph-viewer/ui-D8QZRsC3.js +0 -938
- package/dist/graph-viewer/viewer/Analytics-DD__nbLm.js +0 -939
- package/dist/graph-viewer/viewer/Checks-Ds5M7eAW.js +0 -156
- package/dist/graph-viewer/viewer/Conversations-C1n0EBBd.js +0 -819
- package/dist/graph-viewer/viewer/Files-Cjr7NMU_.js +0 -448
- package/dist/graph-viewer/viewer/LiveRun-uPTkPSjo.js +0 -6772
- package/dist/graph-viewer/viewer/Overview-4Umk14_2.js +0 -507
- package/dist/graph-viewer/viewer/RunPage-DZlBW7Va.js +0 -257
- package/dist/graph-viewer/viewer/Timeline-BnK6-yBR.js +0 -294
- package/dist/graph-viewer/viewer/Today-a_-oNigi.js +0 -660
- package/dist/graph-viewer/viewer/Topology-CQPCLQT6.js +0 -546
- package/dist/graph-viewer/viewer/Traces-C0IGk0L4.js +0 -259
- package/dist/graph-viewer/viewer/WorkflowGraph-DZ3xejKE-jRXKeSrg.js +0 -1559
- package/dist/graph-viewer/viewer/agent-record-Dw772ROs.css +0 -2
- package/dist/graph-viewer/viewer/agent-timeline-Cs9Qbpvo.js +0 -1798
- package/dist/graph-viewer/viewer/dist-C1-7EfoW.js +0 -488
- package/dist/graph-viewer/viewer/file-text-m7a3piQF.js +0 -47
- package/dist/graph-viewer/viewer/jsx-runtime-DQWyJOhv.js +0 -2136
- package/dist/graph-viewer/viewer/lazy-pages-BowaGsg-.js +0 -20
- package/dist/graph-viewer/viewer/model-brand-bTcMjQtB-fagiBQam.js +0 -723
- package/dist/graph-viewer/viewer/popover-CvOAjlnk.js +0 -5329
- package/dist/graph-viewer/viewer/react-CY3IbSNO.js +0 -4262
- package/dist/graph-viewer/viewer/record-part-D3_Anfpe.js +0 -1329
- package/dist/graph-viewer/viewer/terminal-83J_I4Ne.js +0 -52
- package/dist/graph-viewer/viewer/ui-C9b1rIUH.js +0 -938
- package/dist/graph-viewer/viewer/workspace-CekmOBs3.js +0 -25100
- package/dist/graph-viewer/viewer/x-DOc2URqZ.js +0 -56
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t } from "./part-events-BrLrg_EV.js";
|
|
1
|
+
import { n as e, r as t } from "./record-CsP_3NJS.js";
|
|
3
2
|
import { n, t as r } from "./anchor-C4i5SrB9.js";
|
|
4
3
|
import { createHash as i } from "node:crypto";
|
|
5
4
|
import { closeSync as a, copyFileSync as o, existsSync as s, mkdtempSync as c, openSync as l, readFileSync as u, readSync as d, readdirSync as f, rmSync as p, statSync as m } from "node:fs";
|
|
6
5
|
import { tmpdir as h } from "node:os";
|
|
7
6
|
import { basename as g, dirname as _, join as v } from "node:path";
|
|
7
|
+
import { pathToFileURL as y } from "node:url";
|
|
8
8
|
//#region src/adapters/agent-runtime.ts
|
|
9
|
-
var
|
|
10
|
-
function
|
|
9
|
+
var b = "2.7.0", x = 134217728;
|
|
10
|
+
function S({ maxBytes: e = 1073741824 } = {}) {
|
|
11
11
|
let t = /* @__PURE__ */ new Map(), n = 0;
|
|
12
12
|
return {
|
|
13
13
|
read(r) {
|
|
@@ -16,7 +16,7 @@ function x({ maxBytes: e = 1073741824 } = {}) {
|
|
|
16
16
|
let s = u(r), c = {
|
|
17
17
|
key: a,
|
|
18
18
|
bytes: s,
|
|
19
|
-
sha256:
|
|
19
|
+
sha256: E(s)
|
|
20
20
|
};
|
|
21
21
|
s.length <= e / 4 && (t.set(r, c), n += s.length);
|
|
22
22
|
for (let [r, i] of t) {
|
|
@@ -28,17 +28,17 @@ function x({ maxBytes: e = 1073741824 } = {}) {
|
|
|
28
28
|
heldBytes: () => n
|
|
29
29
|
};
|
|
30
30
|
}
|
|
31
|
-
var
|
|
31
|
+
var C = class extends Error {
|
|
32
32
|
exitCode = 2;
|
|
33
|
-
},
|
|
33
|
+
}, w = class extends Error {
|
|
34
34
|
exitCode = 3;
|
|
35
35
|
code = "record-too-large";
|
|
36
|
-
},
|
|
36
|
+
}, T = class extends Error {
|
|
37
37
|
exitCode = 4;
|
|
38
|
-
},
|
|
38
|
+
}, E = (e) => i("sha256").update(e).digest("hex"), D = (e) => typeof e == "string" && /^(sha256[:-])?[0-9a-f]{64}$/.test(e) ? e.slice(-64) : null, O = /(^|\/)\.claude\/projects\/[^/]+\/[^/]+\.jsonl$/, k = (e) => O.test(e) ? e.slice(e.lastIndexOf(".claude/projects/")) : null, A = /(^|\/)\.local\/share\/opencode\/opencode\.db$/, j = "evidence/native-index.jsonl", M = "evidence/live-stream", N = Date.UTC(2001, 0, 1), ee = Date.UTC(2100, 0, 1), P = (e) => {
|
|
39
39
|
if (typeof e != "string" && typeof e != "number") return null;
|
|
40
40
|
let t = new Date(typeof e == "number" && e < 1e11 ? e * 1e3 : e), n = t.valueOf();
|
|
41
|
-
return Number.isFinite(n) && n >=
|
|
41
|
+
return Number.isFinite(n) && n >= N && n < ee ? t.toISOString() : null;
|
|
42
42
|
};
|
|
43
43
|
function F(e) {
|
|
44
44
|
if (e == null) return "null";
|
|
@@ -67,7 +67,7 @@ function I(e) {
|
|
|
67
67
|
t += [...typeof e == "string" ? e : e === null ? "None" : String(e)].length;
|
|
68
68
|
}
|
|
69
69
|
return {
|
|
70
|
-
contentSha256:
|
|
70
|
+
contentSha256: E(F(e)),
|
|
71
71
|
contentCharacters: t
|
|
72
72
|
};
|
|
73
73
|
}
|
|
@@ -191,18 +191,18 @@ var J = class {
|
|
|
191
191
|
if (n) return n;
|
|
192
192
|
let r = this.options.files?.read(t), i = r?.bytes ?? u(t), a, o = {
|
|
193
193
|
bytes: i,
|
|
194
|
-
sha256: r?.sha256 ??
|
|
194
|
+
sha256: r?.sha256 ?? E(i),
|
|
195
195
|
get text() {
|
|
196
196
|
return a ??= i.toString("utf8");
|
|
197
197
|
}
|
|
198
198
|
}, s = this.manifestFiles.get(this.sourcePath(e));
|
|
199
|
-
if (s &&
|
|
199
|
+
if (s && D(s.sha256) !== o.sha256) throw new T(`${e} does not match its snapshot manifest`);
|
|
200
200
|
return this.fileCache.set(t, o), o;
|
|
201
201
|
}
|
|
202
202
|
digestOnly(e, t = v(this.runDir, e)) {
|
|
203
203
|
let n = this.manifestFiles.get(this.sourcePath(e));
|
|
204
204
|
if (n) return {
|
|
205
|
-
sha256:
|
|
205
|
+
sha256: D(n.sha256),
|
|
206
206
|
bytes: n.bytes
|
|
207
207
|
};
|
|
208
208
|
if (this.options.files) try {
|
|
@@ -259,7 +259,7 @@ var J = class {
|
|
|
259
259
|
return this.addSource({
|
|
260
260
|
path: e,
|
|
261
261
|
line: t,
|
|
262
|
-
sha256:
|
|
262
|
+
sha256: E(r),
|
|
263
263
|
bytes: r.length
|
|
264
264
|
});
|
|
265
265
|
}
|
|
@@ -268,7 +268,7 @@ var J = class {
|
|
|
268
268
|
return this.addSource({
|
|
269
269
|
path: e,
|
|
270
270
|
pointer: t,
|
|
271
|
-
sha256:
|
|
271
|
+
sha256: E(i),
|
|
272
272
|
bytes: i.length,
|
|
273
273
|
...r ? { label: r } : {}
|
|
274
274
|
});
|
|
@@ -341,7 +341,7 @@ var J = class {
|
|
|
341
341
|
e && typeof t == "string" && /^sandbox-/.test(t) && !e.sandboxes.includes(t) && e.sandboxes.push(t);
|
|
342
342
|
}
|
|
343
343
|
blob(e) {
|
|
344
|
-
let t =
|
|
344
|
+
let t = D(e);
|
|
345
345
|
if (!t) return null;
|
|
346
346
|
let n = `blobs/sha256-${t}.json`, r = v(this.runDir, n);
|
|
347
347
|
if (!s(r)) return null;
|
|
@@ -513,9 +513,9 @@ var J = class {
|
|
|
513
513
|
if (n?.value?.kind !== "retained-harness-transcript") continue;
|
|
514
514
|
let o = n.value;
|
|
515
515
|
this.fileSource(n.rel);
|
|
516
|
-
let c =
|
|
516
|
+
let c = D(o.snapshot?.archive?.sha256 ?? o.snapshot?.archive?.locator?.digest), l = typeof o.source?.nativeSessionId == "string" ? o.source.nativeSessionId : null;
|
|
517
517
|
e.nativeSessionId ??= l ?? void 0, typeof o.harness == "string" && (e.harness ??= o.harness), this.addSandbox(e, o.source?.environmentId);
|
|
518
|
-
let u = (Array.isArray(o.files) ? o.files : []).filter((e) => typeof e?.path == "string" &&
|
|
518
|
+
let u = (Array.isArray(o.files) ? o.files : []).filter((e) => typeof e?.path == "string" && O.test(e.path)).filter((e) => !l || e.path.endsWith(`/${l}.jsonl`));
|
|
519
519
|
if (!c || !u.length) continue;
|
|
520
520
|
let d = a(c);
|
|
521
521
|
if (!d) {
|
|
@@ -537,7 +537,7 @@ var J = class {
|
|
|
537
537
|
});
|
|
538
538
|
continue;
|
|
539
539
|
}
|
|
540
|
-
let a = v(d, r), o = `native:${c}/${r}`, u = this.file(o, a), f =
|
|
540
|
+
let a = v(d, r), o = `native:${c}/${r}`, u = this.file(o, a), f = D(t.sha256);
|
|
541
541
|
if (f && f !== u.sha256) {
|
|
542
542
|
this.gaps.push({
|
|
543
543
|
nodeId: e.id,
|
|
@@ -546,17 +546,17 @@ var J = class {
|
|
|
546
546
|
});
|
|
547
547
|
continue;
|
|
548
548
|
}
|
|
549
|
-
i(
|
|
549
|
+
i(k(t.path), o, a, c, l);
|
|
550
550
|
}
|
|
551
551
|
}
|
|
552
552
|
let o = this.nativeIndex().get(e.id);
|
|
553
553
|
if (o) {
|
|
554
|
-
let t =
|
|
554
|
+
let t = D(o.snapshot?.archive);
|
|
555
555
|
this.addSandbox(e, o.environmentId), typeof o.harness == "string" && (e.harness ??= o.harness);
|
|
556
556
|
let n = t ? a(t) : void 0;
|
|
557
557
|
t && !n && (r = !0);
|
|
558
558
|
for (let e of n && Array.isArray(o.native?.sessions) ? o.native.sessions : []) {
|
|
559
|
-
let r = typeof e?.path == "string" ?
|
|
559
|
+
let r = typeof e?.path == "string" ? k(e.path) : null;
|
|
560
560
|
if (!r || typeof e.sandboxSessionId != "string" || typeof e.rootScope != "string") continue;
|
|
561
561
|
let a = [
|
|
562
562
|
"workspace/__retention__/sessions",
|
|
@@ -584,7 +584,7 @@ var J = class {
|
|
|
584
584
|
].map((e) => v(this.nativeRoot, e)).find((e) => s(e)) : void 0;
|
|
585
585
|
}
|
|
586
586
|
nativeStore(e) {
|
|
587
|
-
let t = this.nativeIndex().get(e.id), n =
|
|
587
|
+
let t = this.nativeIndex().get(e.id), n = D(t?.snapshot?.archive), r = n ? this.nativeCacheDir(n) : void 0, i = (Array.isArray(t?.native?.sessions) ? t.native.sessions : []).filter((e) => typeof e?.path == "string" && A.test(e.path) && typeof e.sandboxSessionId == "string" && typeof e.rootScope == "string");
|
|
588
588
|
if (!r || !i.length) return null;
|
|
589
589
|
let a = (e) => [
|
|
590
590
|
"workspace/__retention__/sessions",
|
|
@@ -608,9 +608,9 @@ var J = class {
|
|
|
608
608
|
}
|
|
609
609
|
nativeIndex() {
|
|
610
610
|
if (this.nativeIndexCache) return this.nativeIndexCache;
|
|
611
|
-
let e = /* @__PURE__ */ new Map(), t = v(this.runDir,
|
|
611
|
+
let e = /* @__PURE__ */ new Map(), t = v(this.runDir, j);
|
|
612
612
|
if (s(t)) {
|
|
613
|
-
this.listSource(
|
|
613
|
+
this.listSource(j);
|
|
614
614
|
for (let n of H(this.options.files?.read(t).bytes ?? u(t))) {
|
|
615
615
|
let t = n.value;
|
|
616
616
|
if (t?.schema !== "disco.native-capture.v1" || typeof t.nodeId != "string") continue;
|
|
@@ -808,7 +808,7 @@ var J = class {
|
|
|
808
808
|
});
|
|
809
809
|
}
|
|
810
810
|
readLiveStream(e) {
|
|
811
|
-
let t = `${
|
|
811
|
+
let t = `${M}/${encodeURIComponent(e.id)}`, n = G(v(this.runDir, t)).filter((e) => e.endsWith(".jsonl")), r = 0;
|
|
812
812
|
for (let i of n) {
|
|
813
813
|
let n = `${t}/${i}`, a = this.file(n);
|
|
814
814
|
if (!this.claim(a.sha256, e.id, n)) continue;
|
|
@@ -843,14 +843,14 @@ var J = class {
|
|
|
843
843
|
code: "no-transcript:opencode-store-unreadable",
|
|
844
844
|
detail: "this Node has no node:sqlite"
|
|
845
845
|
}), !1;
|
|
846
|
-
let i = c(v(h(), "agent-record-opencode-")), a;
|
|
846
|
+
let i = s(`${t.abs}-wal`) ? c(v(h(), "agent-record-opencode-")) : null, a;
|
|
847
847
|
try {
|
|
848
|
-
for (let e of [
|
|
848
|
+
if (i) for (let e of [
|
|
849
849
|
"",
|
|
850
850
|
"-wal",
|
|
851
851
|
"-shm"
|
|
852
852
|
]) s(t.abs + e) && o(t.abs + e, v(i, `opencode.db${e}`));
|
|
853
|
-
let e = new r.DatabaseSync(v(i, "opencode.db")
|
|
853
|
+
let e = new r.DatabaseSync(i ? v(i, "opencode.db") : `${y(t.abs).href}?immutable=1`, { readOnly: !0 });
|
|
854
854
|
try {
|
|
855
855
|
let n = JSON.stringify(t.sessionIds), r = "session_id IN (SELECT value FROM json_each(?))";
|
|
856
856
|
a = {
|
|
@@ -868,7 +868,7 @@ var J = class {
|
|
|
868
868
|
detail: `${this.sourcePath(t.rel)}: ${String(n?.message ?? n).slice(0, 200)}`
|
|
869
869
|
}), !1;
|
|
870
870
|
} finally {
|
|
871
|
-
p(i, {
|
|
871
|
+
i && p(i, {
|
|
872
872
|
recursive: !0,
|
|
873
873
|
force: !0
|
|
874
874
|
});
|
|
@@ -1008,7 +1008,7 @@ var J = class {
|
|
|
1008
1008
|
return {
|
|
1009
1009
|
rel: t,
|
|
1010
1010
|
sessionId: L(i?.id) || g(e, ".jsonl"),
|
|
1011
|
-
digest: o === null ? null : `sha256:${
|
|
1011
|
+
digest: o === null ? null : `sha256:${E(JSON.stringify(o))}`,
|
|
1012
1012
|
rows: r,
|
|
1013
1013
|
sha256: n.sha256
|
|
1014
1014
|
};
|
|
@@ -1414,7 +1414,7 @@ var J = class {
|
|
|
1414
1414
|
this.fileSource(t);
|
|
1415
1415
|
let a = (e) => {
|
|
1416
1416
|
let t = e.value.event;
|
|
1417
|
-
return `${t.kind}\0${t.toolCallId ?? ""}\0${
|
|
1417
|
+
return `${t.kind}\0${t.toolCallId ?? ""}\0${E(JSON.stringify(t.text ?? t.args ?? t.result ?? ""))}`;
|
|
1418
1418
|
}, o = /* @__PURE__ */ new Map();
|
|
1419
1419
|
for (let e of i) {
|
|
1420
1420
|
let t = Number(e.value.attempt ?? 1), n = o.get(t) ?? [];
|
|
@@ -1582,7 +1582,7 @@ var J = class {
|
|
|
1582
1582
|
...c ? { atBasis: "snapshot-mtime" } : {},
|
|
1583
1583
|
...a("kind") ? { pageKind: a("kind") } : {},
|
|
1584
1584
|
bodyLine: p,
|
|
1585
|
-
contentSha256:
|
|
1585
|
+
contentSha256: E(f),
|
|
1586
1586
|
recordedClaim: m.text,
|
|
1587
1587
|
...m.clip ? { clip: m.clip } : {}
|
|
1588
1588
|
}
|
|
@@ -1595,9 +1595,9 @@ var J = class {
|
|
|
1595
1595
|
try {
|
|
1596
1596
|
t = m(e);
|
|
1597
1597
|
} catch {
|
|
1598
|
-
throw new
|
|
1598
|
+
throw new C(`Run directory is unreadable: ${e}`);
|
|
1599
1599
|
}
|
|
1600
|
-
if (!t.isDirectory()) throw new
|
|
1600
|
+
if (!t.isDirectory()) throw new C(`Not a directory: ${e}`);
|
|
1601
1601
|
this.readRunInput(), this.readJournal();
|
|
1602
1602
|
let n = this.result = this.resultJson(), r = this.nodes.size > 0, i = G(v(e, "kb/pages")).filter((e) => e.endsWith(".md"));
|
|
1603
1603
|
if (!r) {
|
|
@@ -1656,7 +1656,7 @@ var J = class {
|
|
|
1656
1656
|
let u = this.piSessions(), d = /* @__PURE__ */ new Map(), f = /* @__PURE__ */ new Map();
|
|
1657
1657
|
for (let e of this.nodes.values()) e.taskDigest && f.set(e.taskDigest, e.id);
|
|
1658
1658
|
let p = /* @__PURE__ */ new Map();
|
|
1659
|
-
for (let [e, t] of this.executionOf) p.set(
|
|
1659
|
+
for (let [e, t] of this.executionOf) p.set(E(`cli-bridge/pi-session\0${e}`), {
|
|
1660
1660
|
...t,
|
|
1661
1661
|
sessionId: e
|
|
1662
1662
|
});
|
|
@@ -1880,14 +1880,14 @@ var J = class {
|
|
|
1880
1880
|
t && n && !t.status && typeof n.kind == "string" && (t.status = n.kind, t.end ??= s.get(t.id)?.[1]), this.events.sort((e, t) => e.at < t.at ? -1 : e.at > t.at ? 1 : o.get(e.node) - o.get(t.node) || e.order - t.order);
|
|
1881
1881
|
let c = /* @__PURE__ */ new Set();
|
|
1882
1882
|
for (let e of this.events) {
|
|
1883
|
-
if (c.has(e.id)) throw new
|
|
1883
|
+
if (c.has(e.id)) throw new T(`duplicate anchor ${e.id} (${e.source.path}${e.source.line ? `:${e.source.line}` : e.source.pointer ?? ""})`);
|
|
1884
1884
|
c.add(e.id);
|
|
1885
1885
|
}
|
|
1886
1886
|
let l = /* @__PURE__ */ new Map();
|
|
1887
1887
|
for (let e of this.sources.values()) {
|
|
1888
1888
|
if (!e.sha256 || e.line !== void 0 || e.pointer !== void 0) continue;
|
|
1889
1889
|
let t = e.sha256.slice(0, 12), n = l.get(t);
|
|
1890
|
-
if (n && n !== e.sha256) throw new
|
|
1890
|
+
if (n && n !== e.sha256) throw new T(`object prefix ${t} names two objects`);
|
|
1891
1891
|
l.set(t, e.sha256);
|
|
1892
1892
|
}
|
|
1893
1893
|
let u = [...this.nodes.values()].map((e) => ({
|
|
@@ -1907,7 +1907,7 @@ var J = class {
|
|
|
1907
1907
|
title: e.title ?? this.runId,
|
|
1908
1908
|
producer: {
|
|
1909
1909
|
name: "@drewstone/agent-record/adapters/agent-runtime",
|
|
1910
|
-
version:
|
|
1910
|
+
version: b
|
|
1911
1911
|
},
|
|
1912
1912
|
idScheme: r,
|
|
1913
1913
|
input: {
|
|
@@ -1996,21 +1996,21 @@ function Y(e, t, n = "") {
|
|
|
1996
1996
|
} finally {
|
|
1997
1997
|
a(p);
|
|
1998
1998
|
}
|
|
1999
|
-
(c.digest("hex") !==
|
|
1999
|
+
(c.digest("hex") !== D(o.sha256) || f !== o.bytes) && u.push(`${n}${t} does not match its sha256 or length`);
|
|
2000
2000
|
}
|
|
2001
|
-
if (u.length) throw new
|
|
2001
|
+
if (u.length) throw new T(`${u.length} files differ from the snapshot: ${u.slice(0, 5).join("; ")}`);
|
|
2002
2002
|
}
|
|
2003
2003
|
function X(t, n) {
|
|
2004
2004
|
let r = e.safeParse(t);
|
|
2005
2005
|
if (!r.success) throw Error(`Produced record is invalid: ${r.error.message.slice(0, 2e3)}`);
|
|
2006
2006
|
let i = JSON.stringify(t), a = Buffer.byteLength(i);
|
|
2007
|
-
if (a > 134217728) throw new
|
|
2007
|
+
if (a > 134217728) throw new w(`record-too-large: ${a} bytes`);
|
|
2008
2008
|
return {
|
|
2009
2009
|
record: t,
|
|
2010
2010
|
json: i,
|
|
2011
2011
|
summary: {
|
|
2012
2012
|
runId: t.runId,
|
|
2013
|
-
recordDigest:
|
|
2013
|
+
recordDigest: E(i),
|
|
2014
2014
|
bytes: a,
|
|
2015
2015
|
nodes: t.nodes.length,
|
|
2016
2016
|
events: t.events.length,
|
|
@@ -2047,22 +2047,22 @@ var Q = "agent-record.bundle.v1", $ = (e, t) => ({
|
|
|
2047
2047
|
transcriptRefs: [],
|
|
2048
2048
|
...t
|
|
2049
2049
|
});
|
|
2050
|
-
function
|
|
2051
|
-
if (e?.schema !== "agent-record.bundle.v1") throw new
|
|
2052
|
-
if (typeof e.recordId != "string" || !e.recordId) throw new
|
|
2053
|
-
if (!Array.isArray(e.sessions)) throw new
|
|
2050
|
+
function te(e) {
|
|
2051
|
+
if (e?.schema !== "agent-record.bundle.v1") throw new C(`bundle.json is not ${Q}`);
|
|
2052
|
+
if (typeof e.recordId != "string" || !e.recordId) throw new C("bundle.json names no recordId");
|
|
2053
|
+
if (!Array.isArray(e.sessions)) throw new C("bundle.json lists no sessions");
|
|
2054
2054
|
let t = (e) => typeof e == "string" && e !== "" && !e.startsWith("/") && !e.split("/").includes("..");
|
|
2055
2055
|
for (let n of [
|
|
2056
2056
|
...e.sessions,
|
|
2057
2057
|
...e.journals ?? [],
|
|
2058
2058
|
...e.runs ?? [],
|
|
2059
2059
|
...e.findings ?? []
|
|
2060
|
-
]) if (!t(n?.path)) throw new
|
|
2060
|
+
]) if (!t(n?.path)) throw new C(`bundle.json path ${JSON.stringify(n?.path)} leaves the bundle`);
|
|
2061
2061
|
return e;
|
|
2062
2062
|
}
|
|
2063
|
-
function
|
|
2063
|
+
function ne(e, t = {}) {
|
|
2064
2064
|
t.manifest && Y(e, t.manifest);
|
|
2065
|
-
let n = u(v(e, "bundle.json"), "utf8"), r =
|
|
2065
|
+
let n = u(v(e, "bundle.json"), "utf8"), r = te(JSON.parse(n)), i = Math.max(1024, t.maxText ?? 16384), a = new J(e, t.native, i, {
|
|
2066
2066
|
runId: r.recordId,
|
|
2067
2067
|
manifest: t.manifest,
|
|
2068
2068
|
manifestSha256: t.manifestSha256
|
|
@@ -2076,7 +2076,7 @@ function te(e, t = {}) {
|
|
|
2076
2076
|
});
|
|
2077
2077
|
r.convert();
|
|
2078
2078
|
for (let [e, t] of r.nodes) {
|
|
2079
|
-
if (a.nodes.has(e)) throw new
|
|
2079
|
+
if (a.nodes.has(e)) throw new T(`node ${e} appears twice in the bundle`);
|
|
2080
2080
|
a.nodes.set(e, t);
|
|
2081
2081
|
}
|
|
2082
2082
|
for (let e of r.events) a.events.push({
|
|
@@ -2188,7 +2188,7 @@ function te(e, t = {}) {
|
|
|
2188
2188
|
rows: r,
|
|
2189
2189
|
sha256: e.sha256
|
|
2190
2190
|
}]);
|
|
2191
|
-
} else throw new
|
|
2191
|
+
} else throw new C(`bundle.json session ${t.path} has an unknown harness`);
|
|
2192
2192
|
l.set(t.path, n.id), d.push({
|
|
2193
2193
|
session: t,
|
|
2194
2194
|
node: n
|
|
@@ -2285,9 +2285,9 @@ function te(e, t = {}) {
|
|
|
2285
2285
|
constraints: "",
|
|
2286
2286
|
source: null
|
|
2287
2287
|
},
|
|
2288
|
-
input: { bundle: `sha256:${
|
|
2288
|
+
input: { bundle: `sha256:${E(n)}` }
|
|
2289
2289
|
});
|
|
2290
2290
|
return X(h, y);
|
|
2291
2291
|
}
|
|
2292
2292
|
//#endregion
|
|
2293
|
-
export {
|
|
2293
|
+
export { b as ADAPTER_VERSION, Q as BUNDLE_SCHEMA, r as ID_SCHEME, J as Ingest, x as MAX_RECORD_BYTES, w as RecordTooLargeError, C as RunUnreadableError, T as SnapshotMismatchError, V as categoryOf, S as createFileCache, X as finishRecord, ne as ingestBundle, Z as ingestRun, Y as verifySnapshot };
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { a as e, l as t } from "./run-receipt-
|
|
1
|
+
import { a as e, l as t } from "./run-receipt-Bt2iXJUy.js";
|
|
2
2
|
import { Fragment as n, createElement as r, useEffect as i, useRef as a, useState as o } from "react";
|
|
3
3
|
//#region src/workspace/data.ts
|
|
4
4
|
var s = 2500, c = 6, l = 4;
|
|
5
|
-
function u(e, t, n = !1) {
|
|
6
|
-
let [
|
|
5
|
+
function u(e, t, n = !1, r = globalThis.fetch) {
|
|
6
|
+
let [u, d] = o({
|
|
7
7
|
url: e,
|
|
8
8
|
loading: !!e
|
|
9
|
-
}),
|
|
9
|
+
}), f = a(null), p = a(void 0);
|
|
10
10
|
return i(() => {
|
|
11
|
-
if (
|
|
11
|
+
if (p.current !== e && (p.current = e, f.current = null, d((t) => n && e && t.data !== void 0 ? {
|
|
12
12
|
...t,
|
|
13
13
|
url: e,
|
|
14
14
|
loading: !0,
|
|
@@ -17,21 +17,21 @@ function u(e, t, n = !1) {
|
|
|
17
17
|
url: e,
|
|
18
18
|
loading: !!e
|
|
19
19
|
})), !e) return;
|
|
20
|
-
let
|
|
21
|
-
|
|
20
|
+
let i = !0, a = 0, o = !1, u = 0, m = 0, h = !1, g = new AbortController(), _ = async () => {
|
|
21
|
+
h = !1;
|
|
22
22
|
try {
|
|
23
|
-
let t = await
|
|
23
|
+
let t = await r(e, {
|
|
24
24
|
credentials: "same-origin",
|
|
25
|
-
signal:
|
|
26
|
-
headers:
|
|
25
|
+
signal: g.signal,
|
|
26
|
+
headers: f.current ? { "If-None-Match": f.current } : {}
|
|
27
27
|
});
|
|
28
|
-
if (!
|
|
29
|
-
|
|
28
|
+
if (!i) return;
|
|
29
|
+
m = 0, o = t.headers.get("X-Workspace-Stale") === "1";
|
|
30
30
|
let n = t.headers.get("X-Workspace-Compose-Error") ?? void 0;
|
|
31
|
-
if (!
|
|
32
|
-
|
|
31
|
+
if (!o && (t.ok || t.status === 304) && (u = 0), t.status === 304) {
|
|
32
|
+
d((e) => e.stale === o && e.failing === n ? e : {
|
|
33
33
|
...e,
|
|
34
|
-
stale:
|
|
34
|
+
stale: o,
|
|
35
35
|
failing: n
|
|
36
36
|
});
|
|
37
37
|
return;
|
|
@@ -42,7 +42,7 @@ function u(e, t, n = !1) {
|
|
|
42
42
|
let n = await t.json();
|
|
43
43
|
n && typeof n == "object" && typeof n.reason == "string" && (e = n.reason);
|
|
44
44
|
} catch {}
|
|
45
|
-
|
|
45
|
+
d((n) => ({
|
|
46
46
|
...n,
|
|
47
47
|
loading: !1,
|
|
48
48
|
error: e,
|
|
@@ -50,30 +50,34 @@ function u(e, t, n = !1) {
|
|
|
50
50
|
}));
|
|
51
51
|
return;
|
|
52
52
|
}
|
|
53
|
-
|
|
54
|
-
let
|
|
55
|
-
|
|
53
|
+
f.current = t.headers.get("ETag");
|
|
54
|
+
let a = await t.json();
|
|
55
|
+
i && d({
|
|
56
56
|
url: e,
|
|
57
|
-
data:
|
|
57
|
+
data: a,
|
|
58
58
|
loading: !1,
|
|
59
59
|
status: t.status,
|
|
60
|
-
stale:
|
|
60
|
+
stale: o,
|
|
61
61
|
failing: n
|
|
62
62
|
});
|
|
63
63
|
} catch (e) {
|
|
64
|
-
|
|
64
|
+
i && !g.signal.aborted && m < l ? h = !0 : i && !g.signal.aborted && d((t) => ({
|
|
65
65
|
...t,
|
|
66
66
|
loading: !1,
|
|
67
67
|
error: e instanceof Error ? e.message : "Request failed"
|
|
68
68
|
}));
|
|
69
69
|
} finally {
|
|
70
|
-
|
|
70
|
+
i && h ? (a = window.setTimeout(_, 1e3 * 2 ** m), m += 1) : i && o && u < c ? (a = window.setTimeout(_, s * 1.5 ** u), u += 1) : i && t && (a = window.setTimeout(_, t));
|
|
71
71
|
}
|
|
72
72
|
};
|
|
73
|
-
return
|
|
74
|
-
|
|
73
|
+
return _(), () => {
|
|
74
|
+
i = !1, g.abort(), window.clearTimeout(a);
|
|
75
75
|
};
|
|
76
|
-
}, [
|
|
76
|
+
}, [
|
|
77
|
+
e,
|
|
78
|
+
t,
|
|
79
|
+
r
|
|
80
|
+
]), n || u.url === e ? u : {
|
|
77
81
|
url: e,
|
|
78
82
|
loading: !!e
|
|
79
83
|
};
|
|
@@ -113,7 +117,7 @@ function S(t) {
|
|
|
113
117
|
switch (n) {
|
|
114
118
|
case "running":
|
|
115
119
|
case "building":
|
|
116
|
-
case "live": return g("run", `Running${a != null && a > 0 ? ` ${m(a)}` : ""}`, "
|
|
120
|
+
case "live": return g("run", `Running${a != null && a > 0 ? ` ${m(a)}` : ""}`, "live", e.live);
|
|
117
121
|
case "winner":
|
|
118
122
|
case "solved": return g("result", "Passed", "pass", e.solved);
|
|
119
123
|
case "stalled": return g("run", "Stopped by Lab (stall)", "neutral", e.stalled);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { t as e } from "./record-CsP_3NJS.js";
|
|
2
2
|
//#region src/adapters/harness-sessions.ts
|
|
3
3
|
var t = (e, t) => `session:${encodeURIComponent(e)}:${encodeURIComponent(t)}`, n = (e, t, n) => `${e}:${t}:${encodeURIComponent(n)}`, r = (e) => {
|
|
4
4
|
if (!e) return null;
|