@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,210 @@
1
+ import { useEffect as e, useMemo as t, useState as n } from "react";
2
+ import { jsx as r, jsxs as i } from "react/jsx-runtime";
3
+ import { TraceWorkspace as a } from "@tangle-network/sandbox-ui/run";
4
+ import { AgentGraph as o } from "@tangle-network/sandbox-ui/workflows";
5
+ //#region src/workspace/LiveRun.tsx
6
+ var s = (e) => {
7
+ let t = e ? Date.parse(e) : NaN;
8
+ return Number.isFinite(t) ? t : void 0;
9
+ }, c = (e) => e !== void 0 && Number.isFinite(e) ? new Date(e).toISOString() : void 0, l = (e, t) => [...e.workers.map((e) => {
10
+ let n = t.find((t) => t.id === e.id);
11
+ return {
12
+ ...e,
13
+ startedAt: e.startedAt ?? c(n?.timing?.startedAt),
14
+ endedAt: e.endedAt ?? c(n?.timing?.settledAt ?? n?.settledAt)
15
+ };
16
+ }), ...t.filter((t) => t.id !== e.id && !e.workers.some((e) => e.id === t.id)).map((e) => ({
17
+ id: e.id,
18
+ parent: e.parentId,
19
+ label: e.label ?? e.id,
20
+ runtime: e.runtime,
21
+ status: e.status ?? "running",
22
+ startedAt: c(e.timing?.startedAt),
23
+ endedAt: c(e.timing?.settledAt ?? e.settledAt)
24
+ }))], u = (...e) => e.every((e) => e && e.usdKnown !== !1) ? e.reduce((e, t) => e + (t?.usd ?? 0), 0) : void 0, d = (e) => e === "running" ? "running" : e === "done" ? "succeeded" : e === "down" ? "failed" : e === "cancelled" ? "stopped" : "unknown";
25
+ function f({ api: c }) {
26
+ let [f, p] = n([]), [m, h] = n(null), [g, _] = n(!1), [v, y] = n(!1), [b, x] = n(""), [S, C] = n(0), [w, T] = n(), [E, D] = n("tree");
27
+ e(() => {
28
+ let e = new EventSource(`${c}/events`);
29
+ return e.addEventListener("snapshot", (e) => {
30
+ try {
31
+ let t = JSON.parse(e.data);
32
+ if (!Array.isArray(t.snapshots)) throw Error("Invalid snapshot stream");
33
+ p((e) => {
34
+ let n = new Map((t.reset ? [] : e).map((e) => [e.root, e]));
35
+ for (let e of t.snapshots) n.set(e.root, e);
36
+ return [...n.values()];
37
+ }), C(t.sequence), h(null), _(!0);
38
+ } catch (e) {
39
+ h(String(e));
40
+ }
41
+ }), e.addEventListener("unavailable", () => h("The run snapshot is unavailable")), e.addEventListener("end", () => {
42
+ e.close(), y(!0);
43
+ }), e.onerror = () => _(!1), () => e.close();
44
+ }, [c]);
45
+ let O = f.flatMap((e, t) => e.supervisors.map((n) => ({
46
+ snapshot: e,
47
+ root: t,
48
+ run: n,
49
+ key: JSON.stringify([e.root, n.id])
50
+ }))), k = O.find((e) => e.key === b) ?? O[0], A = k?.snapshot.pursuit?.nodes.filter((e) => e.runId === k.run.id) ?? [], j = (e) => {
51
+ let t = A.find((t) => t.id === e);
52
+ return [t?.model, t?.backend].filter(Boolean).join(" · ") || void 0;
53
+ }, M = k && {
54
+ ...k.run,
55
+ workers: l(k.run, A)
56
+ }, N = M ? Math.min(...[M.startedAt, ...M.workers.map((e) => e.startedAt)].flatMap((e) => e && Number.isFinite(Date.parse(e)) ? [Date.parse(e)] : [])) : void 0, P = t(() => {
57
+ let e = k?.snapshot.generatedAt ?? Date.now(), t = N !== void 0 && Number.isFinite(N) ? N : e, n = (M?.workers ?? []).flatMap((n) => {
58
+ if (!n.startedAt || !Number.isFinite(Date.parse(n.startedAt))) return [];
59
+ let r = Math.max(0, Date.parse(n.startedAt) - t), i = s(n.endedAt) ?? (n.status === "running" ? e : Date.parse(n.startedAt)), a = u(n.spend, n.metered);
60
+ return [{
61
+ id: n.id,
62
+ ...n.parent ? { parentId: n.parent } : {},
63
+ name: n.label,
64
+ kind: "pipeline",
65
+ startMs: r,
66
+ endMs: Math.max(r, i - t),
67
+ status: n.status === "running" ? "running" : n.status === "down" ? "failed" : "done",
68
+ ...a === void 0 ? {} : { costUsd: a },
69
+ ...j(n.id) ? { detail: j(n.id) } : {},
70
+ ...n.status === "cancelled" ? { outcome: {
71
+ tone: "neutral",
72
+ label: "Cancelled"
73
+ } } : {}
74
+ }];
75
+ });
76
+ return M?.startedAt && M.status !== "unobserved" && !n.some((e) => e.id === M.id) && n.unshift({
77
+ id: M.id,
78
+ name: "root",
79
+ kind: "pipeline",
80
+ detail: j(M.id),
81
+ startMs: Math.max(0, Date.parse(M.startedAt) - t),
82
+ endMs: Math.max(0, Date.parse(M.completedAt ?? new Date(e).toISOString()) - t),
83
+ status: M.status === "running" ? "running" : M.status === "down" ? "failed" : "done",
84
+ ...u(M.driverSpend) === void 0 ? {} : { costUsd: u(M.driverSpend) },
85
+ ...M.status === "cancelled" ? { outcome: {
86
+ tone: "neutral",
87
+ label: "Cancelled"
88
+ } } : {}
89
+ }), {
90
+ spans: n,
91
+ totalMs: Math.max(0, ...n.map((e) => e.endMs)),
92
+ promptTokens: 0,
93
+ completionTokens: 0,
94
+ modelCalls: 0,
95
+ toolCalls: 0,
96
+ errors: n.filter((e) => e.status === "failed").length
97
+ };
98
+ }, [
99
+ k?.snapshot,
100
+ k?.run,
101
+ N
102
+ ]), F = M?.workers.filter((e) => e.id !== M.id) ?? [], I = M ? [{
103
+ id: M.id,
104
+ label: "root",
105
+ status: d(M.status),
106
+ model: j(M.id),
107
+ costUsd: u(M.driverSpend),
108
+ startedAt: s(M.startedAt),
109
+ result: M.status === "cancelled" ? "Cancelled" : void 0
110
+ }, ...F.map((e) => ({
111
+ id: e.id,
112
+ label: e.label,
113
+ harness: e.runtime,
114
+ model: j(e.id),
115
+ status: d(e.status),
116
+ costUsd: u(e.spend, e.metered),
117
+ startedAt: s(e.startedAt),
118
+ turn: e.liveTail?.at(-1),
119
+ events: e.liveTail?.slice(-3).map((t, n) => ({
120
+ id: `${e.id}:${n}:${t}`,
121
+ label: t
122
+ })),
123
+ result: e.status === "cancelled" ? "Cancelled" : e.verdict
124
+ }))] : [], L = new Set(I.map((e) => e.id)), R = F.map((e) => ({
125
+ from: e.parent && e.parent !== e.id && L.has(e.parent) ? e.parent : M.id,
126
+ to: e.id,
127
+ kind: "spawn"
128
+ })), z = Object.fromEntries([...(M?.workers ?? []).filter((e) => e.status === "cancelled").map((e) => [e.id, {
129
+ status: "stopped",
130
+ result: "Cancelled"
131
+ }]), ...k?.run.status === "cancelled" ? [[k.run.id, {
132
+ status: "stopped",
133
+ result: "Cancelled"
134
+ }]] : []]);
135
+ return /* @__PURE__ */ i("main", {
136
+ className: "ws-live",
137
+ "data-top-sequence": S,
138
+ children: [
139
+ /* @__PURE__ */ i("header", { children: [
140
+ /* @__PURE__ */ r("h1", { children: "Live agents" }),
141
+ /* @__PURE__ */ i("label", { children: ["Run", /* @__PURE__ */ r("select", {
142
+ "aria-label": "Run",
143
+ value: k?.key ?? "",
144
+ onChange: (e) => {
145
+ x(e.target.value), T(void 0);
146
+ },
147
+ children: O.map((e) => /* @__PURE__ */ r("option", {
148
+ value: e.key,
149
+ children: e.run.id
150
+ }, e.key))
151
+ })] }),
152
+ /* @__PURE__ */ r("span", {
153
+ role: "status",
154
+ children: v ? "Finished · viewer closed" : g ? "● Connected" : f.length ? "○ Reconnecting" : "Connecting…"
155
+ })
156
+ ] }),
157
+ k?.run.task && k.run.task !== k.run.id && /* @__PURE__ */ r("p", { children: k.run.task }),
158
+ m && /* @__PURE__ */ r("p", {
159
+ role: "alert",
160
+ children: m
161
+ }),
162
+ (k ? [k.snapshot] : f).filter((e) => e.completeness === "partial").map((e) => /* @__PURE__ */ i("p", {
163
+ role: "alert",
164
+ children: ["Partial capture: ", e.diagnostics.map((e) => `${e.source}: ${e.reason}`).join(" · ")]
165
+ }, e.root)),
166
+ k ? /* @__PURE__ */ i("div", {
167
+ className: "ws-live-split",
168
+ children: [/* @__PURE__ */ i("section", {
169
+ "aria-label": "Agent graph",
170
+ children: [/* @__PURE__ */ r("div", {
171
+ role: "group",
172
+ "aria-label": "Graph layout",
173
+ children: ["tree", "hub"].map((e) => /* @__PURE__ */ r("button", {
174
+ type: "button",
175
+ "aria-pressed": E === e,
176
+ onClick: () => D(e),
177
+ children: e
178
+ }, e))
179
+ }), /* @__PURE__ */ r(o, {
180
+ nodes: I,
181
+ edges: R,
182
+ layout: E,
183
+ live: I.some((e) => e.status === "running"),
184
+ selectedId: w ?? null,
185
+ onSelect: T,
186
+ title: k.run.id,
187
+ className: "ws-live-graph"
188
+ }, k.key)]
189
+ }), /* @__PURE__ */ r(a, {
190
+ trace: P,
191
+ label: k.run.id,
192
+ selectedAgentId: w,
193
+ onSelectAgent: T,
194
+ live: k.run.status === "running" || M.workers.some((e) => e.status === "running"),
195
+ startedAt: Number.isFinite(N) ? N : void 0,
196
+ agentCards: z,
197
+ summary: !1,
198
+ defaultView: "agents",
199
+ maxHeight: 650,
200
+ streamUrl: (e) => `${c}/agents/${k.root}/${encodeURIComponent(k.run.id)}/${encodeURIComponent(e)}/stream`
201
+ }, k.key)]
202
+ }) : g && !f.some((e) => e.completeness === "partial") && /* @__PURE__ */ r("p", {
203
+ role: "status",
204
+ children: "No recorded agents in these roots."
205
+ })
206
+ ]
207
+ });
208
+ }
209
+ //#endregion
210
+ export { f as LiveRun };