@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.
Files changed (136) hide show
  1. package/README.md +31 -3
  2. package/SKILL.md +29 -1
  3. package/dist/graph-native-CS_TmaCK.mjs +1 -0
  4. package/dist/graph-viewer/Analytics-bWsqhurt.js +1001 -0
  5. package/dist/graph-viewer/{AnswerStrip-DhwqOyxI.js → AnswerStrip-COxV7gLW.js} +2 -2
  6. package/dist/graph-viewer/Checks-CQGmKcQ0.js +164 -0
  7. package/dist/graph-viewer/Conversations-DgCshBAf.js +627 -0
  8. package/dist/graph-viewer/{Files-DtZhf0ii.js → Files-CvIOGrAs.js} +81 -90
  9. package/dist/graph-viewer/LiveRun-DHmsr6F7.js +311 -0
  10. package/dist/graph-viewer/{Outputs-QET3nPPp.js → Outputs-rwBg_x36.js} +4 -4
  11. package/dist/graph-viewer/Overview-C150tkVa.js +194 -0
  12. package/dist/graph-viewer/{RunOverview-DJQDAMIx.js → RunOverview-CSqsunqf.js} +2 -2
  13. package/dist/graph-viewer/RunPage-F_prVwiV.js +286 -0
  14. package/dist/graph-viewer/Timeline-BFDywlmz.js +335 -0
  15. package/dist/graph-viewer/Today-BdDuqZGF.js +623 -0
  16. package/dist/graph-viewer/Topology-SAfGtd5u.js +238 -0
  17. package/dist/graph-viewer/Traces-BYqXaS_s.js +254 -0
  18. package/dist/graph-viewer/{WallPages-4d9QUZDq.js → WallPages-MM70VZrC.js} +48 -30
  19. package/dist/graph-viewer/agent-runtime.js +55 -55
  20. package/dist/graph-viewer/{data-BJmP7F1M.js → data-DTGmre1W.js} +31 -27
  21. package/dist/graph-viewer/harness-sessions.js +1 -1
  22. package/dist/graph-viewer/index.js +1357 -1392
  23. package/dist/graph-viewer/{lazy-pages-DM0cZM10.js → lazy-pages-BYuq_L_n.js} +9 -5
  24. package/dist/graph-viewer/{outputs-model-CGdvjkQh.js → outputs-model-CHTx8rMz.js} +2 -2
  25. package/dist/graph-viewer/{viewer/plain-words-CgvxtEOa.js → plain-words-BrMHl0On.js} +9 -4
  26. package/dist/graph-viewer/receipt.js +2 -2
  27. package/dist/graph-viewer/record-CsP_3NJS.js +612 -0
  28. package/dist/graph-viewer/record-part-CuT9Xw37.js +334 -0
  29. package/dist/graph-viewer/record.js +2 -336
  30. package/dist/graph-viewer/report-viewer.js +65 -65
  31. package/dist/graph-viewer/report.js +1 -1
  32. package/dist/graph-viewer/research-publication.js +1 -1
  33. package/dist/graph-viewer/{run-files-C1NgzM0l.js → run-files-BckQDdTD.js} +1 -1
  34. package/dist/graph-viewer/{run-receipt-Bvi4-KVM.js → run-receipt-Bt2iXJUy.js} +1 -0
  35. package/dist/graph-viewer/schemas/agent-workspace.play.v1.json +3 -0
  36. package/dist/graph-viewer/schemas/agent-workspace.plays.v1.json +2 -0
  37. package/dist/graph-viewer/schemas/agent-workspace.run.v1.json +1 -0
  38. package/dist/graph-viewer/styles.css +4559 -2385
  39. package/dist/graph-viewer/trace-spans.js +1 -1
  40. package/dist/graph-viewer/ui-xa5w5bEN.js +889 -0
  41. package/dist/graph-viewer/viewer/{AgentGraphCanvas-CMdOlSlh-4EervjeC.js → AgentGraphCanvas-B74GN1o6-BZEumF7-.js} +2610 -2707
  42. package/dist/graph-viewer/viewer/Analytics-E3XS570U.js +1002 -0
  43. package/dist/graph-viewer/viewer/{AnswerStrip-CGUyXuYH.js → AnswerStrip-B7xMU57A.js} +2 -2
  44. package/dist/graph-viewer/viewer/Checks-CJ5XSHbv.js +165 -0
  45. package/dist/graph-viewer/viewer/Conversations-AX8G7Qyl.js +904 -0
  46. package/dist/graph-viewer/viewer/Files-DxL1576V.js +630 -0
  47. package/dist/graph-viewer/viewer/LiveRun-B-BckyEj.js +820 -0
  48. package/dist/graph-viewer/viewer/{Outputs-CumGyjQo.js → Outputs-BoIpgfMv.js} +24 -23
  49. package/dist/graph-viewer/viewer/Overview-Dzg5XJgy.js +436 -0
  50. package/dist/graph-viewer/viewer/RunPage-NtevWXBs.js +285 -0
  51. package/dist/graph-viewer/viewer/{Scores-ZS16yk0n.js → Scores-Dgv4WePL.js} +3 -3
  52. package/dist/graph-viewer/viewer/Timeline-CzY3LVDu.js +335 -0
  53. package/dist/graph-viewer/viewer/Today-Bi9IIwuh.js +623 -0
  54. package/dist/graph-viewer/viewer/Topology-CzjqSFXH.js +239 -0
  55. package/dist/graph-viewer/viewer/Traces-CMX0H1VU.js +254 -0
  56. package/dist/graph-viewer/viewer/{WallPages-CzWpyIfp.js → WallPages-Clj4bORg.js} +50 -32
  57. package/dist/graph-viewer/viewer/addon-webgl-BSCscllv.js +4027 -0
  58. package/dist/graph-viewer/viewer/agent-record-BrP-ENHg.css +2 -0
  59. package/dist/graph-viewer/viewer/{bot-D6Nrej7Z.js → bot-BaQU59LG.js} +1 -1
  60. package/dist/graph-viewer/viewer/{chevron-right-D_5IKLxu.js → chevron-right-Xn05jYLT.js} +1 -1
  61. package/dist/graph-viewer/viewer/{createLucideIcon-yH0cxLMy.js → createLucideIcon-BSphcoOJ.js} +1 -1
  62. package/dist/graph-viewer/viewer/dashboard-D3JhmRhe-DSl0zhkw.js +371 -0
  63. package/dist/graph-viewer/viewer/{data-CkWfWr7i.js → data-CVHeKhrh.js} +144 -139
  64. package/dist/graph-viewer/viewer/dist-4_KJz8ZM.js +349 -0
  65. package/dist/graph-viewer/viewer/dist-Dy-wrdTt.js +1615 -0
  66. package/dist/graph-viewer/viewer/es2015-utW4DTOJ.js +3506 -0
  67. package/dist/graph-viewer/viewer/{final-output-kwY11u9X.js → final-output-BYT-g-9j.js} +1 -1
  68. package/dist/graph-viewer/viewer/flow-waterfall-model-DvrgPLGS-BdThSFH-.js +2696 -0
  69. package/dist/graph-viewer/viewer/git-branch-BzTbIcYL.js +28 -0
  70. package/dist/graph-viewer/viewer/{highlights-Btsi5OXl.js → highlights-DWeSCtiR.js} +4 -4
  71. package/dist/graph-viewer/viewer/jsx-runtime-DPT6sCLq.js +319 -0
  72. package/dist/graph-viewer/viewer/lazy-pages-ChiMJ8r_.js +803 -0
  73. package/dist/graph-viewer/viewer/{markdown-CX_sVrXB.js → markdown-lADwhD7y.js} +2324 -2608
  74. package/dist/graph-viewer/viewer/model-brand-bTcMjQtB-RSb7EbGB.js +476 -0
  75. package/dist/graph-viewer/viewer/{page-header-Brq611fd.js → page-header-QbUg8F8i.js} +12 -11
  76. package/dist/graph-viewer/{plain-words-CgvxtEOa.js → viewer/plain-words-BrMHl0On.js} +9 -4
  77. package/dist/graph-viewer/viewer/primitives-znfPK9NP-B6UO7uDr.js +346 -0
  78. package/dist/graph-viewer/viewer/react-DQ7E2Epi.js +4254 -0
  79. package/dist/graph-viewer/viewer/{react-dom-t1L4_-il.js → react-dom-BEusmvQH.js} +1 -1
  80. package/dist/graph-viewer/viewer/record-DZnT6SWN-H-ul3U3a.js +3523 -0
  81. package/dist/graph-viewer/viewer/record-W39D5MO-.js +1 -0
  82. package/dist/graph-viewer/viewer/record-part-CbweyYoV.js +335 -0
  83. package/dist/graph-viewer/viewer/{segmented-control-BaJmvTNd.js → segmented-control-Di1mbQlP.js} +27 -26
  84. package/dist/graph-viewer/viewer/{shiki-Qnby7Sh6.js → shiki-BfNNlmfZ.js} +15 -15
  85. package/dist/graph-viewer/viewer/status-meta-S0kV_RDp.js +273 -0
  86. package/dist/graph-viewer/viewer/{stream-tokenizer-CWtnjmRd.js → stream-tokenizer-B5wWaM3U.js} +12 -12
  87. package/dist/graph-viewer/viewer/{themes-1i1fzpRk.js → themes-DuRxHiga.js} +1 -1
  88. package/dist/graph-viewer/viewer/ui-Co03nZUX.js +889 -0
  89. package/dist/graph-viewer/viewer/utils-BuObIC0n.js +1815 -0
  90. package/dist/graph-viewer/viewer/workbench-E6_5q_oL.js +28351 -0
  91. package/dist/graph-viewer/viewer/workflows--mZpHYqo.js +3298 -0
  92. package/dist/graph-viewer/viewer/workspace-cKs9sGEO.js +2468 -0
  93. package/dist/graph-viewer/{workspace-model-Ewf17pTW.js → workspace-model-BkPl_J8E.js} +1 -1
  94. package/dist/graph-viewer/workspace-viewer.js +7452 -7489
  95. package/dist/graph-viewer/workspace.js +1 -1
  96. package/dist/index.mjs +27 -22
  97. package/package.json +10 -9
  98. package/dist/graph-viewer/Analytics-DFWW8Phh.js +0 -938
  99. package/dist/graph-viewer/Checks-qgqV4xgV.js +0 -155
  100. package/dist/graph-viewer/Conversations-CGB45kpj.js +0 -545
  101. package/dist/graph-viewer/LiveRun-C21wUKAY.js +0 -210
  102. package/dist/graph-viewer/Overview-BjeLsA2I.js +0 -506
  103. package/dist/graph-viewer/RunPage-CkkcBEUe.js +0 -258
  104. package/dist/graph-viewer/Timeline-C2Xolk0t.js +0 -293
  105. package/dist/graph-viewer/Today-BVVDtSVN.js +0 -660
  106. package/dist/graph-viewer/Topology-DO5XX8e4.js +0 -545
  107. package/dist/graph-viewer/Traces-BhMxjNgw.js +0 -259
  108. package/dist/graph-viewer/part-events-BrLrg_EV.js +0 -276
  109. package/dist/graph-viewer/record-part-CZal_IMH.js +0 -1408
  110. package/dist/graph-viewer/ui-D8QZRsC3.js +0 -938
  111. package/dist/graph-viewer/viewer/Analytics-DD__nbLm.js +0 -939
  112. package/dist/graph-viewer/viewer/Checks-Ds5M7eAW.js +0 -156
  113. package/dist/graph-viewer/viewer/Conversations-C1n0EBBd.js +0 -819
  114. package/dist/graph-viewer/viewer/Files-Cjr7NMU_.js +0 -448
  115. package/dist/graph-viewer/viewer/LiveRun-uPTkPSjo.js +0 -6772
  116. package/dist/graph-viewer/viewer/Overview-4Umk14_2.js +0 -507
  117. package/dist/graph-viewer/viewer/RunPage-DZlBW7Va.js +0 -257
  118. package/dist/graph-viewer/viewer/Timeline-BnK6-yBR.js +0 -294
  119. package/dist/graph-viewer/viewer/Today-a_-oNigi.js +0 -660
  120. package/dist/graph-viewer/viewer/Topology-CQPCLQT6.js +0 -546
  121. package/dist/graph-viewer/viewer/Traces-C0IGk0L4.js +0 -259
  122. package/dist/graph-viewer/viewer/WorkflowGraph-DZ3xejKE-jRXKeSrg.js +0 -1559
  123. package/dist/graph-viewer/viewer/agent-record-Dw772ROs.css +0 -2
  124. package/dist/graph-viewer/viewer/agent-timeline-Cs9Qbpvo.js +0 -1798
  125. package/dist/graph-viewer/viewer/dist-C1-7EfoW.js +0 -488
  126. package/dist/graph-viewer/viewer/file-text-m7a3piQF.js +0 -47
  127. package/dist/graph-viewer/viewer/jsx-runtime-DQWyJOhv.js +0 -2136
  128. package/dist/graph-viewer/viewer/lazy-pages-BowaGsg-.js +0 -20
  129. package/dist/graph-viewer/viewer/model-brand-bTcMjQtB-fagiBQam.js +0 -723
  130. package/dist/graph-viewer/viewer/popover-CvOAjlnk.js +0 -5329
  131. package/dist/graph-viewer/viewer/react-CY3IbSNO.js +0 -4262
  132. package/dist/graph-viewer/viewer/record-part-D3_Anfpe.js +0 -1329
  133. package/dist/graph-viewer/viewer/terminal-83J_I4Ne.js +0 -52
  134. package/dist/graph-viewer/viewer/ui-C9b1rIUH.js +0 -938
  135. package/dist/graph-viewer/viewer/workspace-CekmOBs3.js +0 -25100
  136. package/dist/graph-viewer/viewer/x-DOc2URqZ.js +0 -56
@@ -1,155 +0,0 @@
1
- import { C as e, b as t, k as n, n as r, s as i } from "./ui-D8QZRsC3.js";
2
- import { clause as a } from "./Overview-BjeLsA2I.js";
3
- import { Fragment as o, jsx as s, jsxs as c } from "react/jsx-runtime";
4
- //#region src/workspace/run/Checks.tsx
5
- function l(e) {
6
- let t = [];
7
- for (let n of [...e].reverse()) {
8
- let e = t[t.length - 1];
9
- n.total ? t.push({
10
- kind: "release",
11
- r: n
12
- }) : e?.kind === "unscored" ? (e.to = n.release, e.n++) : t.push({
13
- kind: "unscored",
14
- from: n.release,
15
- to: n.release,
16
- n: 1
17
- });
18
- }
19
- return t;
20
- }
21
- function u({ m: u, doc: d }) {
22
- let f = d.run.check, p = f?.latest, m = t(f), h = f?.checkerNames?.find((e) => e.current) ?? f?.checkerNames?.[0], g = f?.calibration?.stages ?? [], _ = u.best, v = u.tree.filter((e) => (e.commits ?? 0) > 0).sort((e, t) => (t.commits ?? 0) - (e.commits ?? 0)), y = Math.max(1, ...v.map((e) => e.commits ?? 0));
23
- return /* @__PURE__ */ c("div", {
24
- className: "rp-ck",
25
- children: [/* @__PURE__ */ s("section", {
26
- className: "rp-card",
27
- "aria-label": "Checks",
28
- children: /* @__PURE__ */ c("div", {
29
- className: "rp-scroll rp-ck-in",
30
- children: [
31
- /* @__PURE__ */ c("h2", {
32
- className: "rp-ck-h",
33
- children: [/* @__PURE__ */ s(i, { tone: m.tone }), m.word]
34
- }),
35
- m.note && /* @__PURE__ */ c("p", {
36
- className: "rp-ck-note",
37
- children: [m.note, "."]
38
- }),
39
- /* @__PURE__ */ c("div", {
40
- className: "rp-ck-stats",
41
- children: [
42
- /* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("b", { children: e(f?.counts?.checks ?? 0) }), /* @__PURE__ */ c("span", { children: [
43
- "checks run, ",
44
- e(f?.counts?.known ?? 0),
45
- " with a verdict"
46
- ] })] }),
47
- /* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("b", { children: h?.label ?? "—" }), /* @__PURE__ */ s("span", { children: h ? `checker, ${h.ruling ?? "as pressed"}` : "no checker recorded" })] }),
48
- /* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("b", { children: _ ? `${_.release}${_.total ? ` · ${_.passed ?? 0}/${_.total}` : ""}` : "None" }), /* @__PURE__ */ s("span", { children: u.releases.length ? `best of ${n(u.releases.length, "release")}` : "no release tagged" })] })
49
- ]
50
- }),
51
- p?.line && /* @__PURE__ */ c("p", {
52
- className: "rp-ck-line",
53
- children: [
54
- /* @__PURE__ */ s("span", {
55
- className: "lbl",
56
- children: "Latest"
57
- }),
58
- /* @__PURE__ */ s("span", { children: a(p.line, 28) }),
59
- /* @__PURE__ */ c("time", { children: [p.at ? `${p.at.slice(5, 10)} ${p.at.slice(11, 16)} UTC` : "", p.tag ? ` · ${p.tag}` : ""] })
60
- ]
61
- }),
62
- g.some((e) => e.state !== "calibrated") && /* @__PURE__ */ c("p", {
63
- className: "rp-ck-line",
64
- children: [/* @__PURE__ */ s("span", {
65
- className: "lbl",
66
- children: "Calibrated"
67
- }), /* @__PURE__ */ s("span", {
68
- className: "rp-ck-cal",
69
- children: g.map((e) => /* @__PURE__ */ c("span", {
70
- className: e.state === "calibrated" ? "ok" : "",
71
- children: [
72
- e.state === "calibrated" ? "✓" : "○",
73
- " ",
74
- e.name
75
- ]
76
- }, e.name))
77
- })]
78
- }),
79
- u.releases.length > 0 && /* @__PURE__ */ c(o, { children: [/* @__PURE__ */ s("h3", {
80
- className: "rp-subh",
81
- children: "Releases"
82
- }), /* @__PURE__ */ s("ol", {
83
- className: "rp-rel",
84
- children: l(u.releases).map((e) => e.kind === "unscored" ? /* @__PURE__ */ c("li", {
85
- className: "gap",
86
- children: [/* @__PURE__ */ s("b", { children: e.n > 1 ? `${e.from}–${e.to}` : e.from }), /* @__PURE__ */ s("span", {
87
- className: "sub",
88
- children: e.n > 1 ? `${e.n} releases the checker did not score` : "not scored"
89
- })]
90
- }, e.from) : /* @__PURE__ */ c("li", { children: [
91
- /* @__PURE__ */ s("b", { children: e.r.release }),
92
- /* @__PURE__ */ c("span", {
93
- className: "score",
94
- children: [
95
- e.r.passed ?? 0,
96
- "/",
97
- e.r.total
98
- ]
99
- }),
100
- /* @__PURE__ */ s("span", {
101
- className: "steps",
102
- children: (e.r.steps ?? []).map((e, t) => /* @__PURE__ */ s("i", {
103
- className: e.state,
104
- title: `${e.label}: ${e.state}`
105
- }, t))
106
- }),
107
- /* @__PURE__ */ s("span", {
108
- className: "when",
109
- children: e.r.taggedAt ? `${e.r.taggedAt.slice(5, 10)} ${e.r.taggedAt.slice(11, 16)}` : "—"
110
- }),
111
- e.r.sentence && /* @__PURE__ */ s("span", {
112
- className: "sub",
113
- children: a(e.r.sentence, 20)
114
- })
115
- ] }, e.r.release))
116
- })] })
117
- ]
118
- })
119
- }), /* @__PURE__ */ c("section", {
120
- className: "rp-card",
121
- "aria-label": "Commits by agent",
122
- children: [/* @__PURE__ */ s("div", {
123
- className: "rp-hd sm",
124
- children: /* @__PURE__ */ c("h2", { children: ["Commits by agent", /* @__PURE__ */ s("span", {
125
- className: "ct",
126
- children: e(v.reduce((e, t) => e + (t.commits ?? 0), 0))
127
- })] })
128
- }), /* @__PURE__ */ s("div", {
129
- className: "rp-scroll rp-commits",
130
- children: v.length ? v.map((e) => /* @__PURE__ */ c("div", {
131
- className: "row",
132
- children: [
133
- /* @__PURE__ */ c("span", {
134
- className: "l",
135
- children: [/* @__PURE__ */ s(i, { tone: e.state.tone }), e.name]
136
- }),
137
- /* @__PURE__ */ s(r, {
138
- ok: e.commits ?? 0,
139
- max: y
140
- }),
141
- /* @__PURE__ */ s("span", {
142
- className: "n",
143
- children: e.commits
144
- })
145
- ]
146
- }, e.id)) : /* @__PURE__ */ s("p", {
147
- className: "ws-status",
148
- children: "No agent's commits reached the run's deliverables."
149
- })
150
- })]
151
- })]
152
- });
153
- }
154
- //#endregion
155
- export { u as Checks };
@@ -1,545 +0,0 @@
1
- import { d as e, n as t, r as n, t as r } from "./record-part-CZal_IMH.js";
2
- import { A as i, _ as a, a as o, i as s, k as c, p as l, s as u, v as d, w as f, x as p } from "./ui-D8QZRsC3.js";
3
- import { t as m } from "./part-events-BrLrg_EV.js";
4
- import { useEffect as h, useMemo as g, useRef as _, useState as v } from "react";
5
- import { Fragment as y, jsx as b, jsxs as x } from "react/jsx-runtime";
6
- //#region src/workspace/LiveTranscript.tsx
7
- var S = 200, C = 2e3;
8
- function w(e, t, n, r) {
9
- let i = [], a = /* @__PURE__ */ new Map();
10
- for (let e of r) {
11
- if (!e.at || !Number.isFinite(Date.parse(e.at))) continue;
12
- if (!e.event) {
13
- let n = e.stream ?? t, r = a.get(n) ?? [];
14
- r.push(e), a.set(n, r);
15
- continue;
16
- }
17
- let n = e.event, r = `${t}:${e.attempt ?? 1}:${e.seq}`, o = `${e.stream ?? t}:${e.attempt ?? 1}:${n.toolCallId ?? e.seq}`, s = {
18
- id: r,
19
- node: t,
20
- at: e.at,
21
- kind: "message",
22
- category: "other",
23
- label: "assistant"
24
- };
25
- if (n.kind === "text_delta" || n.kind === "reasoning_delta") {
26
- let t = n.kind === "text_delta" ? "publicText" : "reasoning", r = i.at(-1);
27
- r?.detail.streamKind === n.kind && r.detail.attempt === (e.attempt ?? 1) ? r.detail[t] = `${r.detail[t] ?? ""}${n.text ?? ""}` : i.push({
28
- ...s,
29
- detail: {
30
- role: "assistant",
31
- [t]: n.text ?? "",
32
- streamKind: n.kind,
33
- attempt: e.attempt ?? 1
34
- }
35
- });
36
- } else if (n.kind === "tool_call") i.push({
37
- ...s,
38
- label: n.toolName ?? "Tool call",
39
- detail: {
40
- role: "assistant",
41
- publicToolCalls: [{
42
- id: o,
43
- name: n.toolName ?? "Tool call",
44
- ...n.args == null ? {} : { input: typeof n.args == "string" ? n.args : JSON.stringify(n.args) }
45
- }]
46
- }
47
- });
48
- else if (n.kind === "tool_result") {
49
- let e = n.result;
50
- i.push({
51
- ...s,
52
- kind: "tool-result",
53
- detail: {
54
- role: "toolResult",
55
- toolCallId: o,
56
- publicText: typeof e == "string" ? e : JSON.stringify(e ?? null),
57
- isError: !!e && typeof e == "object" && ("error" in e || "isError" in e && e.isError === !0)
58
- }
59
- });
60
- } else i.push({
61
- ...s,
62
- kind: n.kind,
63
- category: "lifecycle",
64
- label: n.kind.replaceAll("_", " "),
65
- detail: {
66
- lifecycle: n.kind,
67
- ...n.text ? { publicText: n.text } : {}
68
- }
69
- });
70
- }
71
- for (let [e, n] of a) m({
72
- events: i,
73
- clip: (e) => ({ text: e }),
74
- compactValue: (e) => e,
75
- sourcePath: (e) => e,
76
- emit: (t) => {
77
- let n = t.detail.nativeRecordId ?? t.source?.line, r = { ...t.detail };
78
- r.publicToolCalls &&= r.publicToolCalls.map((t) => ({
79
- ...t,
80
- id: `${e}:${t.id}`
81
- })), r.toolCallId &&= `${e}:${r.toolCallId}`, i.push({
82
- ...t,
83
- detail: r,
84
- id: `${e}:${n}:${t.kind}:${t.source?.item ?? 0}`
85
- });
86
- }
87
- }, {
88
- id: t,
89
- start: n[0].at
90
- }, e, { sha256: "" }, n, {
91
- where: (e) => ({ line: n[e].seq + 1 }),
92
- full: () => null
93
- }, () => "other");
94
- return {
95
- schema: "agent-record.v1",
96
- runId: e,
97
- title: e,
98
- nodes: n.map((e) => ({
99
- ...e,
100
- kind: "agent"
101
- })),
102
- events: i,
103
- sources: [],
104
- assignment: {
105
- objective: "",
106
- suppliedKnowledge: "",
107
- deliverables: "",
108
- constraints: "",
109
- source: null
110
- },
111
- terminal: null,
112
- coverage: {
113
- completeOriginalCapture: !1,
114
- publicContent: "Live stream window",
115
- categoryMethod: "Runtime event kind",
116
- cost: "Unknown"
117
- }
118
- };
119
- }
120
- function T({ runUrl: t, runId: r, alive: i, selected: a, onSelect: o, onRecorded: s, onEmpty: c, chooser: l = !0, opening: u }) {
121
- let d = a ?? r, [f, p] = v({
122
- rows: [],
123
- nodes: [],
124
- earlier: !1,
125
- more: !1,
126
- loading: !0,
127
- error: null,
128
- trimmed: !1,
129
- history: !1,
130
- emptyTail: !1
131
- }), [m, y] = v(0), T = _(null), E = _(null), D = _(i), O = _({
132
- node: d,
133
- rows: [],
134
- earlier: !1,
135
- generation: void 0,
136
- first: null,
137
- last: null
138
- });
139
- h(() => {
140
- let e = !1, n = 0, r = new AbortController(), a = O.current.node === d && D.current && !i;
141
- D.current = i;
142
- let o = a ? O.current.rows : [], s = a ? O.current.earlier : !1, c = a ? O.current.generation : void 0, l = a ? O.current.first : null, u = a ? O.current.last : null, f = !1, m = !1, h = !1, g = !i && !a;
143
- p((e) => ({
144
- ...e,
145
- rows: o,
146
- earlier: s,
147
- more: !1,
148
- loading: !0,
149
- error: null,
150
- trimmed: a && e.trimmed,
151
- history: !1,
152
- emptyTail: !1
153
- }));
154
- let _ = async (a) => {
155
- if (e || (a === "before" ? h : m)) return;
156
- a === "before" ? h = !0 : m = !0;
157
- let v = a === "after" ? u : a === "before" ? l : a === "head" ? S : null;
158
- try {
159
- let m = new URLSearchParams({
160
- node: d,
161
- limit: String(S)
162
- });
163
- v !== null && m.set(a === "head" ? "before" : a, String(v)), c && v !== null && m.set("generation", c);
164
- let h = await fetch(`${t}/transcript?${m}`, {
165
- signal: r.signal,
166
- credentials: "same-origin"
167
- });
168
- if (!h.ok) throw Error(`Transcript unavailable (HTTP ${h.status})`);
169
- let y = await h.json();
170
- if (e) return;
171
- if (a === "head" && !y.events.length) {
172
- n = window.setTimeout(() => void _("tail"), 0);
173
- return;
174
- }
175
- let b = a === "tail" || a === "head" || y.reset, x = b ? y.events : a === "before" ? [...y.events, ...o] : [...o, ...y.events];
176
- c = y.generation, b ? (l = y.firstSeq, u = y.lastSeq) : a === "before" ? l = y.firstSeq ?? l : u = y.lastSeq ?? u, o = [...new Map(x.map((e) => [e.seq, e])).values()].sort((e, t) => e.seq - t.seq);
177
- let w = o.length > C;
178
- w && (o = f ? o.slice(0, C) : o.slice(-2e3)), w && !f && (l = o[0]?.seq ?? l), (a !== "after" || y.reset) && (s = y.hasEarlier), w && a !== "before" && (s = !0), O.current = {
179
- node: d,
180
- rows: o,
181
- earlier: s,
182
- generation: c,
183
- first: l,
184
- last: u
185
- };
186
- let T = g && a !== "before" ? y.hasMore : !1;
187
- p((e) => ({
188
- rows: o,
189
- nodes: y.nodes,
190
- earlier: s,
191
- more: a === "before" ? e.more : T,
192
- loading: !1,
193
- error: null,
194
- trimmed: w || e.trimmed,
195
- history: f,
196
- emptyTail: !y.alive && o.length === 0 && l === null && u === null
197
- })), !g && a !== "before" && y.hasMore && u !== v ? n = window.setTimeout(() => void _("after"), 0) : a !== "before" && y.alive && i && (n = window.setTimeout(() => void _("after"), 3e3));
198
- } catch (t) {
199
- !e && !r.signal.aborted && (p((e) => ({
200
- ...e,
201
- loading: !1,
202
- error: t instanceof Error ? t.message : "Transcript unavailable"
203
- })), i && a !== "before" && (n = window.setTimeout(() => void _("after"), 3e3)));
204
- } finally {
205
- a === "before" ? h = !1 : m = !1;
206
- }
207
- };
208
- return T.current = () => {
209
- f = !0, p((e) => ({
210
- ...e,
211
- history: !g
212
- })), _("before");
213
- }, E.current = () => void _("after"), _(a && u !== null ? "after" : g ? "head" : "tail"), () => {
214
- e = !0, r.abort(), window.clearTimeout(n), T.current = null, E.current = null;
215
- };
216
- }, [
217
- t,
218
- d,
219
- i,
220
- m
221
- ]), h(() => {
222
- f.emptyTail && c && c();
223
- }, [f.emptyTail, c]);
224
- let k = f.nodes.some((e) => e.id === d) ? f.nodes : [...f.nodes, {
225
- id: d,
226
- label: d === r ? "Root" : d,
227
- parent: null
228
- }], A = g(() => e(w(r, d, k, f.rows)), [
229
- r,
230
- d,
231
- f.nodes,
232
- f.rows
233
- ]);
234
- return /* @__PURE__ */ x("section", {
235
- className: "run-panel live-transcript",
236
- "aria-label": "Conversations",
237
- children: [
238
- (l || s) && /* @__PURE__ */ x("div", {
239
- className: "message-filters",
240
- children: [l && /* @__PURE__ */ x("label", { children: ["Agent ", /* @__PURE__ */ b("select", {
241
- "aria-label": "Agent conversation",
242
- value: d,
243
- onChange: (e) => o(e.target.value),
244
- children: k.map((e) => /* @__PURE__ */ x("option", {
245
- value: e.id,
246
- children: [e.label, e.parent ? " (child)" : " (root)"]
247
- }, e.id))
248
- })] }), s && /* @__PURE__ */ b("button", {
249
- type: "button",
250
- className: "ui-button",
251
- onClick: s,
252
- children: "Timeline and usage"
253
- })]
254
- }),
255
- (f.earlier || f.history) && /* @__PURE__ */ x("p", {
256
- className: "transcript-edge",
257
- children: [f.earlier && /* @__PURE__ */ b("button", {
258
- type: "button",
259
- className: "link-button",
260
- disabled: f.loading,
261
- onClick: () => T.current?.(),
262
- children: "Load older"
263
- }), f.history && /* @__PURE__ */ b("button", {
264
- type: "button",
265
- className: "link-button",
266
- onClick: () => y((e) => e + 1),
267
- children: "Latest"
268
- })]
269
- }),
270
- f.loading && /* @__PURE__ */ b("p", {
271
- role: "status",
272
- children: "Loading transcript…"
273
- }),
274
- f.error && /* @__PURE__ */ b("p", {
275
- role: "alert",
276
- children: f.error
277
- }),
278
- f.rows.filter((e) => e.event?.kind === "capture_gap" && (!e.at || !Number.isFinite(Date.parse(e.at)))).map((e) => /* @__PURE__ */ b("p", {
279
- className: "faint",
280
- children: e.event?.text ?? "A stream record could not be displayed."
281
- }, e.seq)),
282
- !f.loading && !f.rows.length && !f.error && /* @__PURE__ */ b("p", { children: "No stream events have been retained for this agent." }),
283
- (!f.loading || f.rows.length > 0) && /* @__PURE__ */ b(n, {
284
- index: A,
285
- actor: d,
286
- cutoff: Infinity,
287
- query: "",
288
- category: "all",
289
- lifecycle: !0,
290
- live: i,
291
- opening: f.earlier ? void 0 : u
292
- }),
293
- f.more && /* @__PURE__ */ b("p", {
294
- className: "transcript-edge",
295
- children: /* @__PURE__ */ b("button", {
296
- type: "button",
297
- className: "link-button",
298
- disabled: f.loading,
299
- onClick: () => E.current?.(),
300
- children: "Load more"
301
- })
302
- })
303
- ]
304
- });
305
- }
306
- //#endregion
307
- //#region src/workspace/run/Conversations.tsx
308
- function E(e, t) {
309
- let n = t.trim().toLowerCase(), r = e.tree.filter((e) => (e.steps.length || e.turns) && (!n || `${e.name} ${e.node.label}`.toLowerCase().includes(n)));
310
- if (!e.teams.length) return r.map((e) => ({
311
- kind: "agent",
312
- a: e
313
- }));
314
- let i = r.filter((e) => !e.team || e.team === e.id).map((e) => ({
315
- kind: "agent",
316
- a: e
317
- }));
318
- for (let t of e.teams) {
319
- let e = r.filter((e) => e.team === t.id && e.id !== t.id);
320
- if (e.length) {
321
- i.push({
322
- kind: "team",
323
- id: t.id,
324
- label: t.label,
325
- n: e.length
326
- });
327
- for (let t of e) i.push({
328
- kind: "agent",
329
- a: t
330
- });
331
- }
332
- }
333
- return i;
334
- }
335
- function D({ m: e, doc: n, runUrl: f, agent: p, selectAgent: m, route: y }) {
336
- let [S, C] = v(""), w = g(() => E(e, S), [e, S]), D = _(null), k = a(D, w.length, 52), A = (p ? e.byId.get(p) : null) ?? e.root, j = n.run.record.digest ?? null, M = n.run.record.status === "ready" || !!j, N = j ? `&digest=${j}` : "", P = t(M ? `${f}/record?part=nodes${N}` : null), F = P.index, I = !!n.execution?.alive, L = g(() => e.tree.filter((e) => e.steps.length || e.turns).length, [e]), R = !!y.params.get("agent"), z = A && F && F.nodes.has(F.canonical(A.id)), [B, V] = v(/* @__PURE__ */ new Set()), H = g(() => {
337
- let t = [n.input?.objective, n.input?.instruction].filter((e) => typeof e == "string" && e.trim().length > 0).join("\n\n");
338
- return A && A.id === e.root?.id && t ? {
339
- text: t,
340
- at: n.run.startedAt ?? new Date(e.t0).toISOString()
341
- } : void 0;
342
- }, [
343
- n,
344
- A,
345
- e
346
- ]);
347
- return h(() => V(/* @__PURE__ */ new Set()), [n.run.id]), /* @__PURE__ */ x("div", {
348
- className: "rp-conv",
349
- "data-picked": R ? "" : void 0,
350
- children: [/* @__PURE__ */ x("aside", {
351
- className: "rp-card",
352
- "aria-label": "Agents",
353
- children: [
354
- /* @__PURE__ */ b("div", {
355
- className: "rp-hd",
356
- children: /* @__PURE__ */ x("h2", { children: ["Agents", /* @__PURE__ */ b("span", {
357
- className: "ct",
358
- children: L
359
- })] })
360
- }),
361
- /* @__PURE__ */ b("div", {
362
- className: "rp-fbar",
363
- children: /* @__PURE__ */ x("label", {
364
- className: "rp-field",
365
- children: [/* @__PURE__ */ b(o, { name: "search" }), /* @__PURE__ */ b("input", {
366
- value: S,
367
- onChange: (e) => C(e.target.value),
368
- placeholder: `Search ${L} agents`,
369
- "aria-label": "Search agents"
370
- })]
371
- })
372
- }),
373
- /* @__PURE__ */ x("div", {
374
- className: "rp-alist",
375
- ref: D,
376
- role: "list",
377
- children: [
378
- /* @__PURE__ */ b("div", { style: { height: k.before } }),
379
- w.slice(k.first, k.last).map((t) => t.kind === "team" ? /* @__PURE__ */ x("div", {
380
- className: "ag",
381
- style: { height: 52 },
382
- children: [
383
- /* @__PURE__ */ b(o, {
384
- name: "users",
385
- size: 14
386
- }),
387
- t.label,
388
- /* @__PURE__ */ b("span", {
389
- className: "ct",
390
- children: t.n
391
- })
392
- ]
393
- }, `t:${t.id}`) : /* @__PURE__ */ x("button", {
394
- type: "button",
395
- role: "listitem",
396
- "aria-current": t.a.id === A?.id,
397
- style: { height: 52 },
398
- onClick: () => m(t.a.id),
399
- children: [
400
- /* @__PURE__ */ b(u, { tone: t.a.state.tone }),
401
- /* @__PURE__ */ b("span", {
402
- className: "nm",
403
- title: t.a.name,
404
- children: /* @__PURE__ */ b(s, {
405
- text: S.trim() ? t.a.name : l(t.a, 30),
406
- query: S
407
- })
408
- }),
409
- /* @__PURE__ */ x("span", {
410
- className: "sb",
411
- children: [c(t.a.steps.length, "step"), t.a.first === null ? "" : ` · ${i(e.t0, t.a.first, t.a.state.tone === "live" ? "now" : t.a.last ?? t.a.first)}`]
412
- }),
413
- /* @__PURE__ */ b("span", {
414
- className: "n",
415
- children: d(t.a.tokens)
416
- })
417
- ]
418
- }, t.a.id)),
419
- /* @__PURE__ */ b("div", { style: { height: k.after } }),
420
- !w.length && /* @__PURE__ */ x("p", {
421
- className: "rp-empty",
422
- children: [
423
- "No agent matches “",
424
- S,
425
- "”."
426
- ]
427
- })
428
- ]
429
- })
430
- ]
431
- }), A && /* @__PURE__ */ x("article", {
432
- className: "rp-card",
433
- "aria-label": `${A.name}: conversation`,
434
- children: [/* @__PURE__ */ x("div", {
435
- className: "rp-hd",
436
- children: [
437
- /* @__PURE__ */ b("button", {
438
- type: "button",
439
- className: "rp-back",
440
- onClick: () => m(null),
441
- "aria-label": "All agents",
442
- children: /* @__PURE__ */ b(o, {
443
- name: "arrow",
444
- size: 16
445
- })
446
- }),
447
- /* @__PURE__ */ x("h2", { children: [/* @__PURE__ */ b(u, { tone: A.state.tone }), A.name] }),
448
- /* @__PURE__ */ b("span", {
449
- className: "muted ph-hide",
450
- children: [A.model, A.harness].filter(Boolean).join(" · ")
451
- }),
452
- A.toolFailures > 0 && /* @__PURE__ */ x("span", {
453
- className: "rp-pill danger",
454
- children: [A.toolFailures, " tool errors"]
455
- })
456
- ]
457
- }), /* @__PURE__ */ b("div", {
458
- className: "rp-scroll rp-tx",
459
- children: !I && z ? /* @__PURE__ */ b(r, {
460
- runUrl: f,
461
- version: N,
462
- index: F,
463
- actor: F.canonical(A.id),
464
- opening: H
465
- }, A.id) : !I && (P.loading || P.pending) ? /* @__PURE__ */ b("p", {
466
- className: "ws-status",
467
- role: "status",
468
- children: "Loading the conversation…"
469
- }) : B.has(A.id) ? /* @__PURE__ */ b(O, {
470
- m: e,
471
- a: A
472
- }) : /* @__PURE__ */ b(T, {
473
- runUrl: f,
474
- runId: n.run.id,
475
- alive: I,
476
- selected: A.id,
477
- onSelect: (e) => m(e),
478
- chooser: !1,
479
- opening: H,
480
- onEmpty: () => V((e) => /* @__PURE__ */ new Set([...e, A.id]))
481
- }, A.id)
482
- })]
483
- })]
484
- });
485
- }
486
- function O({ m: e, a: t }) {
487
- let n = p(e.t0), r = [];
488
- for (let e of t.steps) {
489
- if (e.kind === "waiting") continue;
490
- let t = e.kind === "model" ? "model call" : e.tool ?? "tool", n = r[r.length - 1];
491
- n && n.name === t && e.t - n.end < 6e4 ? (n.n++, n.end = e.t + e.d, n.failed += +!!e.failed, e.target && n.targets.add(e.target)) : r.push({
492
- name: t,
493
- model: e.kind === "model",
494
- n: 1,
495
- at: e.t,
496
- end: e.t + e.d,
497
- failed: +!!e.failed,
498
- targets: new Set(e.target ? [e.target] : [])
499
- });
500
- }
501
- return r.length ? /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ x("p", {
502
- className: "rp-note",
503
- children: [
504
- "No conversation was recorded for this agent; these are its ",
505
- c(t.steps.length, "recorded step"),
506
- "."
507
- ]
508
- }), r.map((e, t) => /* @__PURE__ */ x("div", {
509
- className: "rp-msg",
510
- children: [/* @__PURE__ */ b("time", { children: n(e.at) }), /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ x("span", {
511
- className: `rp-tchip${e.failed ? " fail" : ""}`,
512
- children: [
513
- /* @__PURE__ */ b("i", { className: e.model ? "model" : "" }),
514
- /* @__PURE__ */ x("span", {
515
- className: "t",
516
- children: [e.name, e.n > 1 ? ` ×${e.n}` : ""]
517
- }),
518
- e.targets.size > 0 && /* @__PURE__ */ x("span", {
519
- className: "a",
520
- children: [[...e.targets].slice(0, 2).join(", "), e.targets.size > 2 ? ` +${e.targets.size - 2}` : ""]
521
- }),
522
- /* @__PURE__ */ b("span", {
523
- className: "dim",
524
- children: f(e.end - e.at)
525
- })
526
- ]
527
- }), e.failed > 0 && /* @__PURE__ */ x("span", {
528
- className: "rp-errline",
529
- children: [
530
- "✕ ",
531
- e.failed,
532
- " failed"
533
- ]
534
- })] })]
535
- }, t))] }) : /* @__PURE__ */ x("p", {
536
- className: "ws-status",
537
- children: [
538
- "No conversation or step was recorded for ",
539
- t.name,
540
- "."
541
- ]
542
- });
543
- }
544
- //#endregion
545
- export { D as Conversations };