@tangle-network/sandbox-cli 0.21.26 → 0.21.28

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 (70) hide show
  1. package/dist/graph-viewer/{Analytics-DocMpB6T.js → Analytics-DFWW8Phh.js} +260 -275
  2. package/dist/graph-viewer/Checks-qgqV4xgV.js +155 -0
  3. package/dist/graph-viewer/{Conversations-CISiWrR9.js → Conversations-CGB45kpj.js} +112 -80
  4. package/dist/graph-viewer/{Files-Dh8p_Fpw.js → Files-DtZhf0ii.js} +121 -106
  5. package/dist/graph-viewer/LiveRun-C21wUKAY.js +210 -0
  6. package/dist/graph-viewer/Overview-BjeLsA2I.js +506 -0
  7. package/dist/graph-viewer/{RunPage-nJwCsArn.js → RunPage-CkkcBEUe.js} +22 -22
  8. package/dist/graph-viewer/{Timeline-bPjhV3il.js → Timeline-C2Xolk0t.js} +84 -84
  9. package/dist/graph-viewer/{Today-pebCsPJ1.js → Today-BVVDtSVN.js} +65 -58
  10. package/dist/graph-viewer/Topology-DO5XX8e4.js +545 -0
  11. package/dist/graph-viewer/{Traces-C5x2UvJh.js → Traces-BhMxjNgw.js} +79 -52
  12. package/dist/graph-viewer/{WallPages-DSmRm2v3.js → WallPages-4d9QUZDq.js} +3 -3
  13. package/dist/graph-viewer/index.js +103 -102
  14. package/dist/graph-viewer/{lazy-pages-CpmkG5o2.js → lazy-pages-DM0cZM10.js} +4 -4
  15. package/dist/graph-viewer/{record-part-Cx9GDQeo.js → record-part-CZal_IMH.js} +382 -352
  16. package/dist/graph-viewer/report-viewer.js +7 -7
  17. package/dist/graph-viewer/styles.css +596 -284
  18. package/dist/graph-viewer/{ui-CEhDqce8.js → ui-D8QZRsC3.js} +143 -111
  19. package/dist/graph-viewer/viewer/{AgentGraphCanvas-D7jjAE6i-DecKyUGA.js → AgentGraphCanvas-CMdOlSlh-4EervjeC.js} +54 -48
  20. package/dist/graph-viewer/viewer/{Analytics-CtKucZjs.js → Analytics-DD__nbLm.js} +203 -218
  21. package/dist/graph-viewer/viewer/{AnswerStrip-DsI9aF-i.js → AnswerStrip-CGUyXuYH.js} +2 -2
  22. package/dist/graph-viewer/viewer/Checks-Ds5M7eAW.js +156 -0
  23. package/dist/graph-viewer/viewer/{Conversations-DQBCyko6.js → Conversations-C1n0EBBd.js} +124 -92
  24. package/dist/graph-viewer/viewer/{Files-B-g25gSO.js → Files-Cjr7NMU_.js} +63 -48
  25. package/dist/graph-viewer/viewer/{LiveRun-BMQnTpTZ.js → LiveRun-uPTkPSjo.js} +1223 -1164
  26. package/dist/graph-viewer/viewer/{Outputs-DXnN1wEQ.js → Outputs-CumGyjQo.js} +6 -6
  27. package/dist/graph-viewer/viewer/Overview-4Umk14_2.js +507 -0
  28. package/dist/graph-viewer/viewer/{RunPage-ChipoSdO.js → RunPage-DZlBW7Va.js} +28 -28
  29. package/dist/graph-viewer/viewer/{Scores-CjriXjf_.js → Scores-ZS16yk0n.js} +3 -3
  30. package/dist/graph-viewer/viewer/{Timeline-DzEzobA0.js → Timeline-BnK6-yBR.js} +24 -24
  31. package/dist/graph-viewer/viewer/{Today-DLHe_wTA.js → Today-a_-oNigi.js} +69 -62
  32. package/dist/graph-viewer/viewer/Topology-CQPCLQT6.js +546 -0
  33. package/dist/graph-viewer/viewer/{Traces-BWBulSPE.js → Traces-C0IGk0L4.js} +75 -48
  34. package/dist/graph-viewer/viewer/{WallPages-Crj-qPoK.js → WallPages-CzWpyIfp.js} +8 -8
  35. package/dist/graph-viewer/viewer/{WorkflowGraph-DYsP_Kcg-C0O7M5iH.js → WorkflowGraph-DZ3xejKE-jRXKeSrg.js} +6 -6
  36. package/dist/graph-viewer/viewer/{agent-timeline-C-UIhXgu.js → agent-timeline-Cs9Qbpvo.js} +437 -425
  37. package/dist/graph-viewer/viewer/{bot-Bivadvxn.js → bot-D6Nrej7Z.js} +1 -1
  38. package/dist/graph-viewer/viewer/{chevron-right-WW7tFY6B.js → chevron-right-D_5IKLxu.js} +1 -1
  39. package/dist/graph-viewer/viewer/{createLucideIcon-Z6KTw8ff.js → createLucideIcon-yH0cxLMy.js} +1 -1
  40. package/dist/graph-viewer/viewer/{data-azhapQrS.js → data-CkWfWr7i.js} +1 -1
  41. package/dist/graph-viewer/viewer/{dist-CyOc-K4O.js → dist-C1-7EfoW.js} +3 -3
  42. package/dist/graph-viewer/viewer/{file-text-B34N7Soo.js → file-text-m7a3piQF.js} +1 -1
  43. package/dist/graph-viewer/viewer/{final-output-Db2D9cMT.js → final-output-kwY11u9X.js} +1 -1
  44. package/dist/graph-viewer/viewer/{highlights-Bgg6O5ub.js → highlights-Btsi5OXl.js} +2 -2
  45. package/dist/graph-viewer/viewer/{jsx-runtime-BSzbUOFc.js → jsx-runtime-DQWyJOhv.js} +1 -1
  46. package/dist/graph-viewer/viewer/{lazy-pages-fgtpXQ00.js → lazy-pages-BowaGsg-.js} +6 -6
  47. package/dist/graph-viewer/viewer/{markdown-BpJEJUTW.js → markdown-CX_sVrXB.js} +17 -17
  48. package/dist/graph-viewer/viewer/{model-brand-bTcMjQtB-C9bHPsPk.js → model-brand-bTcMjQtB-fagiBQam.js} +3 -3
  49. package/dist/graph-viewer/viewer/{page-header-C6YCPkzJ.js → page-header-Brq611fd.js} +3 -3
  50. package/dist/graph-viewer/viewer/{popover-DrLB9iar.js → popover-CvOAjlnk.js} +4 -4
  51. package/dist/graph-viewer/viewer/{react-CisnW4fB.js → react-CY3IbSNO.js} +24 -24
  52. package/dist/graph-viewer/viewer/{react-dom-C5NDYQCD.js → react-dom-t1L4_-il.js} +1 -1
  53. package/dist/graph-viewer/viewer/{record-part-d0gKKrMI.js → record-part-D3_Anfpe.js} +455 -425
  54. package/dist/graph-viewer/viewer/{segmented-control-ChhLMa6h.js → segmented-control-BaJmvTNd.js} +39 -39
  55. package/dist/graph-viewer/viewer/{shiki-BwlTRTY6.js → shiki-Qnby7Sh6.js} +2 -2
  56. package/dist/graph-viewer/viewer/{stream-tokenizer-CaVb21TO.js → stream-tokenizer-CWtnjmRd.js} +1 -1
  57. package/dist/graph-viewer/viewer/{terminal-BxRacTx0.js → terminal-83J_I4Ne.js} +1 -1
  58. package/dist/graph-viewer/viewer/{themes-BxrCCwH5.js → themes-1i1fzpRk.js} +1 -1
  59. package/dist/graph-viewer/viewer/{ui-DZiGjPwl.js → ui-C9b1rIUH.js} +222 -190
  60. package/dist/graph-viewer/viewer/{workspace-DalRxssx.js → workspace-CekmOBs3.js} +76 -76
  61. package/dist/graph-viewer/viewer/{x-B_F8B4lq.js → x-DOc2URqZ.js} +1 -1
  62. package/dist/graph-viewer/workspace-viewer.js +103 -102
  63. package/package.json +9 -9
  64. package/dist/graph-viewer/Checks-CbnY4tuh.js +0 -113
  65. package/dist/graph-viewer/LiveRun-C-yKwkKs.js +0 -190
  66. package/dist/graph-viewer/Overview-BaXPdCFC.js +0 -477
  67. package/dist/graph-viewer/Topology-CyhuK6XW.js +0 -550
  68. package/dist/graph-viewer/viewer/Checks-DZTgeYlV.js +0 -114
  69. package/dist/graph-viewer/viewer/Overview-u7-8-rGx.js +0 -478
  70. package/dist/graph-viewer/viewer/Topology-Dsmuu27J.js +0 -551
@@ -0,0 +1,506 @@
1
+ import { y as e } from "./run-receipt-Bvi4-KVM.js";
2
+ import { C as t, T as n, _ as r, a as i, b as a, h as o, j as s, s as c, t as l, v as u, w as d, x as f } from "./ui-D8QZRsC3.js";
3
+ import { t as p } from "./plain-words-CgvxtEOa.js";
4
+ import { agentParam as m } from "./RunPage-CkkcBEUe.js";
5
+ import { useMemo as h, useRef as g } from "react";
6
+ import { Fragment as _, jsx as v, jsxs as y } from "react/jsx-runtime";
7
+ import { Popover as b, PopoverContent as x, PopoverTrigger as S } from "@tangle-network/ui/primitives";
8
+ //#region src/workspace/run/Overview.tsx
9
+ function C(e, t = Infinity) {
10
+ if (!e) return "";
11
+ let n = e.replace(/\/(home|mnt|Users|tmp|private)\/\S+/g, "").replace(/:?\s*\b[0-9a-f]{10,40}\b/g, "").replace(/\s+/g, " ").trim();
12
+ n = n.replace(/^(?:[\w-]+(?: [\w-]+){0,3}: )+(?=\S)/, (e) => e.split(": ").length > 2 ? "" : e), n = n.split(/(?<=[.;])\s|;\s|, the |, starting /)[0] ?? n;
13
+ let r = n.split(" ");
14
+ return r.length > t ? `${r.slice(0, t).join(" ").replace(/[.;,:]+$/, "")}…` : n.replace(/[.;,:]$/, "");
15
+ }
16
+ function w(e) {
17
+ let t = e.steps.filter(({ step: e }) => e.kind !== "waiting").map(({ step: e }) => [e.t, e.t + e.d]).sort((e, t) => e[0] - t[0]), n = [];
18
+ for (let [e, r] of t) {
19
+ let t = n[n.length - 1];
20
+ t && e <= t[1] + 3e4 ? t[1] = Math.max(t[1], r) : n.push([e, r]);
21
+ }
22
+ return n;
23
+ }
24
+ function T(e, t) {
25
+ let n = Math.max(1, e.duration) / t, r = Array.from({ length: t }, () => /* @__PURE__ */ new Set());
26
+ for (let { agent: i, step: a } of e.steps) if (a.kind !== "waiting") for (let e = Math.max(0, Math.floor(a.t / n)); e <= Math.min(t - 1, Math.floor((a.t + a.d) / n)); e++) r[e].add(i.id);
27
+ return r.map((e) => e.size);
28
+ }
29
+ function E(t) {
30
+ let { m: n, doc: r, play: a, route: o } = t, c = r.view, l = r.run, u = r.execution, f = (a?.runs ?? []).filter((e) => e.id !== r.run.id && e.startedAt && r.run.startedAt && e.startedAt > r.run.startedAt).sort((e, t) => e.startedAt < t.startedAt ? -1 : 1)[0], p = h(() => w(n), [n]), m = new Date(n.t0).toISOString().slice(0, 10) !== new Date(n.t0 + n.duration).toISOString().slice(0, 10), g = p.reduce((e, [t, n]) => e + (n - t), 0), _ = n.best, b = _ && _.passed !== null && _.passed !== void 0 && _.total && _.passed === _.total, x = c?.status.label ?? r.run.state, S = n.live ? `Running for ${d(n.duration)}${_ ? `; best release ${_.release} passed ${_.passed}/${_.total} steps` : ", no release checked yet"}.` : b ? `Solved in ${d(n.duration)}: ${_.release} passed every step.` : `${x} after ${d(n.duration)}${_ ? `; best release ${_.release} passed ${_.passed ?? 0}/${_.total ?? "?"} steps` : " with no release checked"}.`, T = C(l.ending?.reason ?? c?.blocker?.why ?? c?.blocker?.sentence, 26), E = u?.failedAttempts ?? 0, O = [T && `${T}.`, E && n.totals.lastStep !== null ? `Agents worked for ${d(g)}; ${E} later tries failed${u?.lastAttempt?.error ? `, the last on “${C(u.lastAttempt.error, 8)}”` : ""}.` : ""].filter(Boolean).join(" "), A = n.live ? "clock" : b ? "check" : "stop", M = [
31
+ {
32
+ at: r.run.startedAt,
33
+ title: "Run started",
34
+ sub: `${n.agents.length} agents${n.root?.model ? ` on ${n.root.model}` : ""}`,
35
+ tone: ""
36
+ },
37
+ ...n.totals.lastStep === null ? [] : [{
38
+ at: new Date(n.t0 + n.totals.lastStep).toISOString(),
39
+ title: n.live ? "Latest agent step" : "Last agent step",
40
+ sub: `+${d(n.totals.lastStep)} into the run`,
41
+ tone: n.duration - n.totals.lastStep > 18e5 ? "warn" : ""
42
+ }],
43
+ ...u?.lastAttempt?.error ? [{
44
+ at: u.lastAttempt.at ?? null,
45
+ title: "Last try failed",
46
+ sub: C(u.lastAttempt.error, 10),
47
+ tone: "fail"
48
+ }] : [],
49
+ n.live ? {
50
+ at: (/* @__PURE__ */ new Date()).toISOString(),
51
+ title: "Running now",
52
+ sub: `${n.agents.filter((e) => e.state.tone === "live").length} agents live`,
53
+ tone: "next"
54
+ } : {
55
+ at: l.ending?.at ?? r.run.settledAt,
56
+ title: x,
57
+ sub: f ? `continued in run ${e(r.run.play, f.id)}` : C(l.ending?.sentence, 8),
58
+ tone: "next"
59
+ }
60
+ ];
61
+ return /* @__PURE__ */ y("div", {
62
+ className: "rp-ov",
63
+ children: [
64
+ /* @__PURE__ */ y("section", {
65
+ className: "rp-card rp-vd",
66
+ "aria-label": "Verdict",
67
+ children: [/* @__PURE__ */ y("div", {
68
+ className: "rp-vd-top",
69
+ children: [
70
+ /* @__PURE__ */ v("div", {
71
+ className: "rp-vd-ic",
72
+ children: /* @__PURE__ */ v(i, {
73
+ name: A,
74
+ size: 22
75
+ })
76
+ }),
77
+ /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("h2", {
78
+ className: "rp-verdict",
79
+ children: S
80
+ }), O && /* @__PURE__ */ v("p", {
81
+ className: "rp-lede",
82
+ children: O
83
+ })] }),
84
+ /* @__PURE__ */ y("div", {
85
+ className: "rp-vd-act",
86
+ children: [n.live ? /* @__PURE__ */ y("a", {
87
+ className: "rp-btn primary",
88
+ href: o.href("timeline"),
89
+ children: ["Watch the timeline", /* @__PURE__ */ v(i, { name: "arrow" })]
90
+ }) : f ? /* @__PURE__ */ y("a", {
91
+ className: "rp-btn primary",
92
+ href: `/run/${encodeURIComponent(f.id)}`,
93
+ children: [
94
+ "Open run ",
95
+ e(r.run.play, f.id),
96
+ /* @__PURE__ */ v(i, { name: "arrow" })
97
+ ]
98
+ }) : _ ? /* @__PURE__ */ y("a", {
99
+ className: "rp-btn primary",
100
+ href: o.href("checks"),
101
+ children: [
102
+ "Review ",
103
+ _.release,
104
+ /* @__PURE__ */ v(i, { name: "arrow" })
105
+ ]
106
+ }) : /* @__PURE__ */ y("a", {
107
+ className: "rp-btn primary",
108
+ href: o.href("files"),
109
+ children: ["Open the files", /* @__PURE__ */ v(i, { name: "arrow" })]
110
+ }), (n.live || f || _) && /* @__PURE__ */ v("a", {
111
+ className: "rp-btn framed",
112
+ href: o.href("files"),
113
+ children: "Files"
114
+ })]
115
+ })
116
+ ]
117
+ }), /* @__PURE__ */ v("ol", {
118
+ className: "rp-story",
119
+ children: M.map((e, t) => /* @__PURE__ */ y("li", { children: [
120
+ /* @__PURE__ */ v("span", { className: `sd ${e.tone}` }),
121
+ /* @__PURE__ */ v("time", { children: e.at ? s(e.at, m) : "—" }),
122
+ /* @__PURE__ */ v("b", { children: e.title }),
123
+ /* @__PURE__ */ v("span", {
124
+ title: e.sub,
125
+ children: e.sub
126
+ })
127
+ ] }, t))
128
+ })]
129
+ }),
130
+ /* @__PURE__ */ v(D, { ...t }),
131
+ /* @__PURE__ */ y("div", {
132
+ className: "rp-ov-b",
133
+ children: [/* @__PURE__ */ v(k, {
134
+ m: n,
135
+ working: g,
136
+ failed: E
137
+ }), /* @__PURE__ */ v(j, { ...t })]
138
+ })
139
+ ]
140
+ });
141
+ }
142
+ function D({ m: e, doc: n, route: r }) {
143
+ let o = n.run.check, s = o?.checkerNames?.find((e) => e.current) ?? o?.checkerNames?.[0], l = p(n.input?.objective), u = (n.findings?.items ?? []).filter((e) => e.path), d = e.agents.filter((e) => e.node.hasCode).length, f = e.agents.reduce((e, t) => e + (t.commits ?? 0), 0), m = e.best, h = a(o), g = o?.counts?.checks ? `${s ? `Checker ${s.label}` : "The checker"} ran ${t(o.counts.checks)} times` : "No check has run";
144
+ return /* @__PURE__ */ y("section", {
145
+ className: "rp-card rp-sum",
146
+ "aria-label": "Summary",
147
+ children: [
148
+ /* @__PURE__ */ y("div", { children: [
149
+ /* @__PURE__ */ v("h3", { children: "Goal" }),
150
+ /* @__PURE__ */ v("div", {
151
+ className: "goal",
152
+ children: C(l) || "Not recorded"
153
+ }),
154
+ l && /* @__PURE__ */ y(b, { children: [/* @__PURE__ */ v(S, {
155
+ asChild: !0,
156
+ children: /* @__PURE__ */ v("button", {
157
+ type: "button",
158
+ className: "rp-link",
159
+ children: "Read the goal"
160
+ })
161
+ }), /* @__PURE__ */ y(x, {
162
+ className: "rp-pop wide",
163
+ align: "start",
164
+ children: [/* @__PURE__ */ y("div", {
165
+ className: "ph",
166
+ children: [/* @__PURE__ */ v("b", { children: "Goal" }), /* @__PURE__ */ v("span", { children: "as pressed" })]
167
+ }), /* @__PURE__ */ v("div", {
168
+ className: "rp-pop-goal",
169
+ children: l
170
+ })]
171
+ })] })
172
+ ] }),
173
+ /* @__PURE__ */ y("div", { children: [
174
+ /* @__PURE__ */ v("h3", { children: "Check" }),
175
+ /* @__PURE__ */ y("div", {
176
+ className: "v",
177
+ children: [/* @__PURE__ */ v(c, { tone: h.tone }), h.word]
178
+ }),
179
+ /* @__PURE__ */ v("div", {
180
+ className: "sub",
181
+ children: h.note ? `${h.note}.` : `${g}.`
182
+ }),
183
+ /* @__PURE__ */ v("a", {
184
+ className: "rp-link",
185
+ href: r.href("checks"),
186
+ children: "See the checks"
187
+ })
188
+ ] }),
189
+ /* @__PURE__ */ y("div", { children: [
190
+ /* @__PURE__ */ v("h3", { children: "Best release" }),
191
+ /* @__PURE__ */ v("div", {
192
+ className: "v",
193
+ children: m ? `${m.release}${m.total ? ` · ${m.passed ?? 0}/${m.total}` : ""}` : "None"
194
+ }),
195
+ /* @__PURE__ */ v("div", {
196
+ className: "sub",
197
+ children: m ? m.sentence ? C(m.sentence, 14) : `${e.releases.length} releases checked` : e.releases.length ? `${e.releases.length} releases, none scored` : `${t(f)} commits, none tagged`
198
+ })
199
+ ] }),
200
+ /* @__PURE__ */ y("div", { children: [
201
+ /* @__PURE__ */ v("h3", { children: "Work kept" }),
202
+ /* @__PURE__ */ y("div", {
203
+ className: "v",
204
+ children: [
205
+ t(u.length),
206
+ " pages · ",
207
+ t(d),
208
+ " branches"
209
+ ]
210
+ }),
211
+ /* @__PURE__ */ y("div", {
212
+ className: "files",
213
+ children: [u.slice(0, 3).map((e, t, n) => /* @__PURE__ */ y("a", {
214
+ href: r.href("files", { file: `page:${e.path}` }),
215
+ title: e.path,
216
+ children: [/* @__PURE__ */ v(i, {
217
+ name: "file",
218
+ size: 14
219
+ }), /* @__PURE__ */ v("span", { children: O(e.path, n.map((e) => e.path)) })]
220
+ }, e.path)), u.length > 3 && /* @__PURE__ */ v("a", {
221
+ href: r.href("files"),
222
+ children: /* @__PURE__ */ y("span", { children: [u.length - 3, " more"] })
223
+ })]
224
+ })
225
+ ] })
226
+ ]
227
+ });
228
+ }
229
+ function O(e, t) {
230
+ let n = e.split("/"), r = (e, t) => e.split("/").slice(-t).join("/"), i = 1;
231
+ for (; i < n.length && t.some((t) => t !== e && r(t, i) === r(e, i));) i++;
232
+ return r(e, i);
233
+ }
234
+ function k({ m: e, working: t, failed: n }) {
235
+ let r = h(() => T(e, 96), [e]), i = Math.max(1, ...r), a = (t) => `${Math.max(0, Math.min(100, t / Math.max(1, e.duration) * 100))}%`, o = e.duration > 36e5 ? Math.floor(e.duration / 36e5) : 0, c = new Date(e.t0).toISOString().slice(0, 10) !== new Date(e.t0 + e.duration).toISOString().slice(0, 10), l = e.duration * (c ? .16 : .08), u = o <= 10 ? 1 : Math.ceil(o / 8), p = o ? Array.from({ length: o }, (e, t) => t + 1).filter((t) => t % u === 0 && t * 36e5 >= l && (t + u) * 36e5 <= e.duration && t * 36e5 <= e.duration - l) : [], m = e.tree.filter((e) => e.restarts.length).sort((e, t) => t.restarts.length - e.restarts.length).slice(0, 14), g = (t) => c ? s(new Date(e.t0 + t).toISOString(), !0).replace(" UTC", "") : f(e.t0)(t);
236
+ return /* @__PURE__ */ y("section", {
237
+ className: "rp-card",
238
+ "aria-label": "Where the time went",
239
+ children: [/* @__PURE__ */ y("div", {
240
+ className: "rp-hd sm",
241
+ children: [/* @__PURE__ */ y("h2", { children: [
242
+ "Where the ",
243
+ d(e.duration),
244
+ " went"
245
+ ] }), /* @__PURE__ */ y("span", {
246
+ className: "end rp-keys",
247
+ children: [
248
+ /* @__PURE__ */ y("span", {
249
+ className: "rp-key",
250
+ children: [
251
+ /* @__PURE__ */ v("i", { className: "work" }),
252
+ /* @__PURE__ */ v("b", { children: d(t) }),
253
+ " agents working"
254
+ ]
255
+ }),
256
+ /* @__PURE__ */ y("span", {
257
+ className: "rp-key",
258
+ children: [
259
+ /* @__PURE__ */ v("i", { className: "hatch" }),
260
+ /* @__PURE__ */ v("b", { children: d(Math.max(0, e.duration - t)) }),
261
+ " idle"
262
+ ]
263
+ }),
264
+ n > 0 && /* @__PURE__ */ y("span", {
265
+ className: "rp-key",
266
+ children: [
267
+ /* @__PURE__ */ v("span", {
268
+ className: "x",
269
+ children: "✕"
270
+ }),
271
+ /* @__PURE__ */ v("b", { children: n }),
272
+ " tries failed"
273
+ ]
274
+ })
275
+ ]
276
+ })]
277
+ }), /* @__PURE__ */ v("div", {
278
+ className: "rp-twrap",
279
+ children: /* @__PURE__ */ y("div", {
280
+ className: "rp-tg",
281
+ children: [
282
+ /* @__PURE__ */ v("span", {
283
+ className: "nm h",
284
+ children: "Agents at once"
285
+ }),
286
+ /* @__PURE__ */ v("div", {
287
+ className: "rp-strip",
288
+ role: "img",
289
+ "aria-label": `Agents working at once over the run, peak ${i}; they worked ${d(t)} of ${d(e.duration)}`,
290
+ children: r.map((t, n) => /* @__PURE__ */ v("i", {
291
+ className: t ? void 0 : "idle",
292
+ title: `${g(n * e.duration / r.length)}: ${t} working`,
293
+ style: {
294
+ left: `${n * 100 / r.length}%`,
295
+ width: `${100 / r.length}%`,
296
+ height: t ? `${Math.max(10, t / i * 100)}%` : void 0
297
+ }
298
+ }, n))
299
+ }),
300
+ /* @__PURE__ */ y("span", {
301
+ className: "ct",
302
+ children: ["peak ", i]
303
+ }),
304
+ /* @__PURE__ */ v("span", {}),
305
+ /* @__PURE__ */ y("div", {
306
+ className: "rp-strip-ax",
307
+ children: [
308
+ /* @__PURE__ */ v("span", {
309
+ className: "first",
310
+ style: { left: 0 },
311
+ children: g(0)
312
+ }),
313
+ p.map((e) => /* @__PURE__ */ y("span", {
314
+ className: e % 4 ? "ph-hide" : void 0,
315
+ style: { left: a(e * 36e5) },
316
+ children: [e, "h"]
317
+ }, e)),
318
+ /* @__PURE__ */ v("span", {
319
+ className: "last",
320
+ style: { left: "100%" },
321
+ children: g(e.duration)
322
+ })
323
+ ]
324
+ }),
325
+ /* @__PURE__ */ v("span", {}),
326
+ m.length > 0 && /* @__PURE__ */ y(_, { children: [/* @__PURE__ */ y("div", {
327
+ className: "rp-tries-h",
328
+ children: [/* @__PURE__ */ v("b", { children: "Restarts by agent" }), /* @__PURE__ */ y("span", {
329
+ className: "end rp-keys",
330
+ children: [/* @__PURE__ */ y("span", {
331
+ className: "rp-key",
332
+ children: [/* @__PURE__ */ v("span", {
333
+ className: "x",
334
+ children: "✕"
335
+ }), "Restart"]
336
+ }), /* @__PURE__ */ y("span", {
337
+ className: "rp-key",
338
+ children: [/* @__PURE__ */ v("span", { className: "rp-dot ok" }), "Finished"]
339
+ })]
340
+ })]
341
+ }), m.map((t) => /* @__PURE__ */ v(A, {
342
+ m: e,
343
+ a: t,
344
+ X: a
345
+ }, t.id))] })
346
+ ]
347
+ })
348
+ })]
349
+ });
350
+ }
351
+ function A({ m: e, a: t, X: r }) {
352
+ let i = o(() => /* @__PURE__ */ v(l, {
353
+ m: e,
354
+ a: t
355
+ }), { wide: t.tools.length > 0 });
356
+ return /* @__PURE__ */ y(_, { children: [
357
+ /* @__PURE__ */ v("span", {
358
+ className: "nm",
359
+ title: t.name,
360
+ children: t.name
361
+ }),
362
+ /* @__PURE__ */ y("div", {
363
+ className: "rp-tr-row",
364
+ tabIndex: 0,
365
+ "aria-label": `${t.name}: ${t.restarts.length} restarts`,
366
+ ...i,
367
+ children: [
368
+ /* @__PURE__ */ v("span", {
369
+ className: "life",
370
+ style: {
371
+ left: r(Math.max(0, t.start ?? 0)),
372
+ right: `calc(100% - ${r(t.end ?? e.duration)})`
373
+ }
374
+ }),
375
+ t.restarts.map((e, t) => /* @__PURE__ */ v("span", {
376
+ className: "mk",
377
+ style: { left: r(e) },
378
+ children: "✕"
379
+ }, t)),
380
+ n(t.state.tone) && t.end !== null && /* @__PURE__ */ v("span", {
381
+ className: "mk ok",
382
+ style: { left: r(t.end) }
383
+ })
384
+ ]
385
+ }),
386
+ /* @__PURE__ */ v("span", {
387
+ className: "ct",
388
+ children: t.restarts.length || "—"
389
+ })
390
+ ] });
391
+ }
392
+ function j({ m: e, route: t, doc: n }) {
393
+ let a = h(() => [...e.agents].sort((e, t) => (t.tokens ?? -1) - (e.tokens ?? -1)), [e]), o = g(null), s = r(o, a.length, 32), c = e.totals.lastStep ?? e.duration, l = h(() => {
394
+ let t = 1;
395
+ for (let n of e.agents) {
396
+ let e = Array(28).fill(0);
397
+ for (let t of n.steps) t.t <= c && e[Math.min(27, Math.floor(t.t / Math.max(1, c) * 28))]++;
398
+ t = Math.max(t, ...e);
399
+ }
400
+ return t;
401
+ }, [e, c]);
402
+ return /* @__PURE__ */ y("section", {
403
+ className: "rp-card",
404
+ "aria-label": "Agents",
405
+ children: [
406
+ /* @__PURE__ */ y("div", {
407
+ className: "rp-hd sm",
408
+ children: [/* @__PURE__ */ y("h2", { children: ["Agents", /* @__PURE__ */ v("span", {
409
+ className: "ct",
410
+ children: e.agents.length
411
+ })] }), /* @__PURE__ */ v("span", {
412
+ className: "end",
413
+ children: /* @__PURE__ */ y("a", {
414
+ className: "rp-btn sm",
415
+ href: t.href("topology"),
416
+ children: ["Topology", /* @__PURE__ */ v(i, {
417
+ name: "arrow",
418
+ size: 14
419
+ })]
420
+ })
421
+ })]
422
+ }),
423
+ /* @__PURE__ */ y("div", {
424
+ className: "rp-agt-h",
425
+ children: [
426
+ /* @__PURE__ */ v("span", {}),
427
+ /* @__PURE__ */ v("span", { children: "Agent" }),
428
+ /* @__PURE__ */ y("span", {
429
+ className: "ph-hide",
430
+ title: `When each agent worked, over the run's ${d(c)}`,
431
+ children: ["Activity · ", d(c).split(" ")[0]]
432
+ }),
433
+ /* @__PURE__ */ v("span", { children: "Steps" }),
434
+ /* @__PURE__ */ v("span", { children: "Tokens" })
435
+ ]
436
+ }),
437
+ /* @__PURE__ */ y("div", {
438
+ className: "rp-scroll",
439
+ ref: o,
440
+ children: [
441
+ /* @__PURE__ */ v("div", { style: { height: s.before } }),
442
+ a.slice(s.first, s.last).map((r) => /* @__PURE__ */ v(M, {
443
+ m: e,
444
+ a: r,
445
+ bins: 28,
446
+ end: c,
447
+ peak: l,
448
+ href: t.href("timeline", { agent: m(n.run.id, r.id) })
449
+ }, r.id)),
450
+ /* @__PURE__ */ v("div", { style: { height: s.after } })
451
+ ]
452
+ })
453
+ ]
454
+ });
455
+ }
456
+ function M({ m: e, a: n, bins: r, end: i, peak: a, href: s }) {
457
+ let d = o(() => /* @__PURE__ */ v(l, {
458
+ m: e,
459
+ a: n
460
+ }), { wide: n.tools.length > 0 }), f = Array(r).fill(0);
461
+ for (let e of n.steps) e.t <= i && f[Math.min(r - 1, Math.floor(e.t / Math.max(1, i) * r))]++;
462
+ let p = 120 / r;
463
+ return /* @__PURE__ */ y("a", {
464
+ className: "rp-agt",
465
+ href: s,
466
+ ...d,
467
+ children: [
468
+ /* @__PURE__ */ v(c, { tone: n.state.tone }),
469
+ /* @__PURE__ */ v("span", {
470
+ className: "nm",
471
+ children: n.name
472
+ }),
473
+ /* @__PURE__ */ y("svg", {
474
+ className: "ph-hide",
475
+ viewBox: "0 0 120 16",
476
+ "aria-hidden": "true",
477
+ children: [/* @__PURE__ */ v("line", {
478
+ x1: "0",
479
+ x2: "120",
480
+ y1: "15.5",
481
+ y2: "15.5",
482
+ className: "base"
483
+ }), f.map((e, t) => {
484
+ let n = e ? 6 + Math.sqrt(e / a) * 10 : 0;
485
+ return n ? /* @__PURE__ */ v("rect", {
486
+ x: t * p + .5,
487
+ width: p - 1.2,
488
+ y: 16 - n,
489
+ height: n,
490
+ rx: "1"
491
+ }, t) : null;
492
+ })]
493
+ }),
494
+ /* @__PURE__ */ v("span", {
495
+ className: "v",
496
+ children: n.steps.length ? t(n.steps.length) : "—"
497
+ }),
498
+ /* @__PURE__ */ v("span", {
499
+ className: "v",
500
+ children: n.tokens === null ? "—" : u(n.tokens)
501
+ })
502
+ ]
503
+ });
504
+ }
505
+ //#endregion
506
+ export { E as Overview, C as clause };
@@ -1,7 +1,7 @@
1
1
  import { A as e, y as t } from "./run-receipt-Bvi4-KVM.js";
2
2
  import { n, p as r } from "./data-BJmP7F1M.js";
3
- import { C as i, S as a, j as o, o as s, r as c, v as l, y as u } from "./ui-CEhDqce8.js";
4
- import { o as d } from "./lazy-pages-CpmkG5o2.js";
3
+ import { C as i, M as a, o, r as s, v as c, w as l, y as u } from "./ui-D8QZRsC3.js";
4
+ import { o as d } from "./lazy-pages-DM0cZM10.js";
5
5
  import { Suspense as f, lazy as p, useCallback as m, useEffect as h, useMemo as g, useRef as _, useState as v } from "react";
6
6
  import { Fragment as y, jsx as b, jsxs as x } from "react/jsx-runtime";
7
7
  import { PageHeader as S } from "@tangle-network/ui/primitives";
@@ -24,7 +24,7 @@ var C = [
24
24
  traces: "Traces",
25
25
  analytics: "Analytics",
26
26
  checks: "Checks"
27
- }, T = p(() => import("./Overview-BaXPdCFC.js").catch(d).then((e) => ({ default: e.Overview }))), E = p(() => import("./Timeline-bPjhV3il.js").catch(d).then((e) => ({ default: e.TimelineTab }))), D = p(() => import("./Files-Dh8p_Fpw.js").catch(d).then((e) => ({ default: e.Files }))), O = p(() => import("./Topology-CyhuK6XW.js").catch(d).then((e) => ({ default: e.Topology }))), k = p(() => import("./Conversations-CISiWrR9.js").catch(d).then((e) => ({ default: e.Conversations }))), A = p(() => import("./Traces-C5x2UvJh.js").catch(d).then((e) => ({ default: e.Traces }))), j = p(() => import("./Analytics-DocMpB6T.js").catch(d).then((e) => ({ default: e.Analytics }))), M = p(() => import("./Checks-CbnY4tuh.js").catch(d).then((e) => ({ default: e.Checks }))), N = {
27
+ }, T = p(() => import("./Overview-BjeLsA2I.js").catch(d).then((e) => ({ default: e.Overview }))), E = p(() => import("./Timeline-C2Xolk0t.js").catch(d).then((e) => ({ default: e.TimelineTab }))), D = p(() => import("./Files-DtZhf0ii.js").catch(d).then((e) => ({ default: e.Files }))), O = p(() => import("./Topology-DO5XX8e4.js").catch(d).then((e) => ({ default: e.Topology }))), k = p(() => import("./Conversations-CGB45kpj.js").catch(d).then((e) => ({ default: e.Conversations }))), A = p(() => import("./Traces-BhMxjNgw.js").catch(d).then((e) => ({ default: e.Traces }))), j = p(() => import("./Analytics-DFWW8Phh.js").catch(d).then((e) => ({ default: e.Analytics }))), M = p(() => import("./Checks-qgqV4xgV.js").catch(d).then((e) => ({ default: e.Checks }))), N = {
28
28
  agents: "conversations",
29
29
  spend: "analytics",
30
30
  progress: "overview"
@@ -81,20 +81,20 @@ var I = (e, t) => t === e ? "root" : t.startsWith(`${e}:`) ? t.slice(e.length +
81
81
  let r = n === "root" ? e.root?.id ?? t : e.byId.has(n) ? n : `${t}:${n}`;
82
82
  return e.byId.has(r) ? r : null;
83
83
  };
84
- function R({ api: i, id: o, legacy: l }) {
85
- let d = F(o), p = `${i}/runs/${encodeURIComponent(o)}`, v = r(p, void 0, !0), R = !!v.data?.execution?.alive, B = r(`${p}/workspace`, R ? 15e3 : void 0, !0), V = r(v.data ? `${i}/plays/${encodeURIComponent(v.data.run.play)}` : null), H = g(() => B.data && v.data ? u(B.data, v.data.run) : null, [B.data, v.data]), U = d.params.get("section"), W = U ? N[U] : void 0;
84
+ function R({ api: a, id: c, legacy: l }) {
85
+ let d = F(c), p = `${a}/runs/${encodeURIComponent(c)}`, v = r(p, void 0, !0), R = !!v.data?.execution?.alive, B = r(`${p}/workspace`, R ? 15e3 : void 0, !0), V = r(v.data ? `${a}/plays/${encodeURIComponent(v.data.run.play)}` : null), H = g(() => B.data && v.data ? u(B.data, v.data.run) : null, [B.data, v.data]), U = d.params.get("section"), W = U ? N[U] : void 0;
86
86
  h(() => {
87
87
  if (!W) return;
88
88
  let e = d.params.get("node");
89
89
  d.go(W, {
90
- agent: e ? I(o, e) : void 0,
90
+ agent: e ? I(c, e) : void 0,
91
91
  file: d.params.get("file") ?? void 0
92
92
  }, !0);
93
93
  }, [W]);
94
- let G = d.tab ?? "overview", K = H ? L(H, o, d.params.get("agent")) ?? H.root?.id ?? null : null, q = m((e, t) => d.go(t ?? G, { agent: e ? I(o, e) : null }), [
94
+ let G = d.tab ?? "overview", K = H ? L(H, c, d.params.get("agent")) ?? H.root?.id ?? null : null, q = m((e, t) => d.go(t ?? G, { agent: e ? I(c, e) : null }), [
95
95
  d,
96
96
  G,
97
- o
97
+ c
98
98
  ]), J = _(null);
99
99
  if (v.error && !v.data) return /* @__PURE__ */ x("p", {
100
100
  className: "ws-status",
@@ -107,9 +107,9 @@ function R({ api: i, id: o, legacy: l }) {
107
107
  children: "Loading…"
108
108
  });
109
109
  let Y = v.data, X = H ? {
110
- conversations: a(H.agents.filter((e) => e.steps.length || e.turns).length),
111
- traces: a(H.totals.steps),
112
- checks: a(Y.run.check?.counts?.checks ?? H.releases.length)
110
+ conversations: i(H.agents.filter((e) => e.steps.length || e.turns).length),
111
+ traces: i(H.totals.steps),
112
+ checks: i(Y.run.check?.counts?.checks ?? H.releases.length)
113
113
  } : {}, Z = (e) => {
114
114
  let t = C.indexOf(G), n = {
115
115
  ArrowRight: t + 1,
@@ -122,7 +122,7 @@ function R({ api: i, id: o, legacy: l }) {
122
122
  let r = C[(n + C.length) % C.length];
123
123
  d.go(r), requestAnimationFrame(() => J.current?.querySelector(`[data-tab="${r}"]`)?.focus());
124
124
  }, Q = U && !W && l ? l(U) : null, $ = H ? {
125
- api: i,
125
+ api: a,
126
126
  runUrl: p,
127
127
  doc: Y,
128
128
  play: V.data ?? null,
@@ -134,9 +134,9 @@ function R({ api: i, id: o, legacy: l }) {
134
134
  agent: K,
135
135
  selectAgent: q
136
136
  } : null;
137
- return /* @__PURE__ */ b(c, { children: /* @__PURE__ */ x("div", {
137
+ return /* @__PURE__ */ b(s, { children: /* @__PURE__ */ x("div", {
138
138
  className: "rp rp-run",
139
- "data-run": o,
139
+ "data-run": c,
140
140
  "data-tab": Q ? void 0 : G,
141
141
  children: [
142
142
  /* @__PURE__ */ b(S, {
@@ -184,7 +184,7 @@ function R({ api: i, id: o, legacy: l }) {
184
184
  }) : null]
185
185
  }, e)), /* @__PURE__ */ b("span", {
186
186
  className: "rp-more",
187
- children: /* @__PURE__ */ b(s, {
187
+ children: /* @__PURE__ */ b(o, {
188
188
  label: "More run sections",
189
189
  options: P.map(([e, t]) => ({
190
190
  id: e,
@@ -194,7 +194,7 @@ function R({ api: i, id: o, legacy: l }) {
194
194
  width: 260,
195
195
  placeholder: "Find a section",
196
196
  onChange: (e) => {
197
- e && (window.history.pushState(null, "", `/run/${encodeURIComponent(o)}?section=${e}`), window.dispatchEvent(new PopStateEvent("popstate")));
197
+ e && (window.history.pushState(null, "", `/run/${encodeURIComponent(c)}?section=${e}`), window.dispatchEvent(new PopStateEvent("popstate")));
198
198
  },
199
199
  children: Q ? P.find(([e]) => e === U)?.[1] ?? "More" : "More"
200
200
  })
@@ -232,15 +232,15 @@ function R({ api: i, id: o, legacy: l }) {
232
232
  }
233
233
  function z({ m: e, doc: t }) {
234
234
  let n = e.totals.billedUsd, r = [
235
- [i(e.duration), e.live ? "running" : "run"],
236
- [a(e.agents.length), e.agents.length === 1 ? "agent" : "agents"],
237
- [a(e.totals.steps), "steps"],
235
+ [l(e.duration), e.live ? "running" : "run"],
236
+ [i(e.agents.length), e.agents.length === 1 ? "agent" : "agents"],
237
+ [i(e.totals.steps), "steps"],
238
238
  [
239
- l(e.totals.tokens),
239
+ c(e.totals.tokens),
240
240
  "tokens",
241
- e.totals.byClass ? `${l(e.totals.byClass.input)} in · ${l(e.totals.byClass.output)} out · ${l(e.totals.byClass.cacheRead)} cached` : void 0
241
+ e.totals.byClass ? `${c(e.totals.byClass.input)} in · ${c(e.totals.byClass.output)} out · ${c(e.totals.byClass.cacheRead)} cached` : void 0
242
242
  ],
243
- e.totals.listUsd === null ? [o(n ?? t.spend.paidUsd ?? null), "billed"] : [o(e.totals.listUsd), "list"]
243
+ e.totals.listUsd === null ? [a(n ?? t.spend.paidUsd ?? null), "billed"] : [a(e.totals.listUsd), "list"]
244
244
  ];
245
245
  return /* @__PURE__ */ b("ul", {
246
246
  className: "rp-stats",