@tangle-network/sandbox-cli 0.21.64 → 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 +9 -8
  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
@@ -0,0 +1,194 @@
1
+ import { c as e, k as t, x as n } from "./ui-xa5w5bEN.js";
2
+ import { n as r, r as i, t as a } from "./plain-words-BrMHl0On.js";
3
+ import { agentParam as o } from "./RunPage-F_prVwiV.js";
4
+ import { useRef as s } from "react";
5
+ import { VirtualList as c } from "@tangle-network/sandbox-ui/run/record";
6
+ import { Fragment as l, jsx as u, jsxs as d } from "react/jsx-runtime";
7
+ import { Gantt as f, Meter as p } from "@tangle-network/charts/react";
8
+ import { ENDING_COLORS as m } from "@tangle-network/charts";
9
+ import { Sheet as h, SheetContent as g, SheetHeader as _, SheetTitle as v } from "@tangle-network/sandbox-ui/primitives";
10
+ import { detectFileFormat as y } from "@tangle-network/sandbox-ui/files";
11
+ //#region src/workspace/run/Overview.tsx
12
+ function b(e, t = Infinity) {
13
+ if (!e) return "";
14
+ 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();
15
+ n = n.replace(/^(?:[\w-]+(?: [\w-]+){0,3}: )+(?=\S)/, (e) => e.split(": ").length > 2 ? "" : e), n = n.split(/(?<=[.;])\s|;\s|, the |, starting /)[0] ?? n;
16
+ let r = n.split(" ");
17
+ return r.length > t ? `${r.slice(0, t).join(" ").replace(/[.;,:]+$/, "")}…` : n.replace(/[.;,:]$/, "");
18
+ }
19
+ var x = (e) => e.checked && typeof e.total == "number" && e.total > 0 && e.passed === e.total;
20
+ function S({ m: b, doc: S, route: C, agent: w, selectAgent: T }) {
21
+ let E = t(), D = s(null), O = b.best, k = b.releases.filter((e) => e.taggedAt), A = O ? k.find((e) => e.passed === O.passed) ?? O : null, j = O?.steps?.find((e) => e.state !== "pass"), M = A?.taggedAt ? n(Math.max(0, b.t0 + b.duration - Date.parse(A.taggedAt))) : null, N = [];
22
+ for (let e of k) {
23
+ let t = N.at(-1), n = t?.at(-1);
24
+ n && n.passed === e.passed && n.total === e.total && n.checker === e.checker ? t.push(e) : N.push([e]);
25
+ }
26
+ let P = S.view?.blocker, F = C.params.has("agent") && w ? b.byId.get(w) : null, I = [...new Set(k.flatMap((e) => F ? e.files?.[F.id] ?? [] : []))].sort((e, t) => Number(y(t) === "code") - Number(y(e) === "code") || e.localeCompare(t)), L = b.tree.filter((e) => e.start !== null).map((t) => ({
27
+ id: t.id,
28
+ label: t.name,
29
+ count: t.commits ?? (t.modelCalls !== null && t.toolCalls !== null ? t.modelCalls + t.toolCalls : void 0),
30
+ countLabel: t.commits === null ? "calls" : "commits",
31
+ spans: [{
32
+ start: b.t0 + Math.max(0, t.start),
33
+ end: b.live && [
34
+ "running",
35
+ "waiting",
36
+ "needs-you"
37
+ ].includes(t.status) ? null : b.t0 + Math.max(t.start, t.end ?? t.last ?? t.start),
38
+ state: t.id === b.root?.id ? "lead" : t.state.tone || "none",
39
+ note: t.state.label,
40
+ endLabel: `${n(Math.max(0, (b.live && [
41
+ "running",
42
+ "waiting",
43
+ "needs-you"
44
+ ].includes(t.status) ? b.duration : t.end ?? t.last ?? t.start) - t.start))} · ${e(t)}`
45
+ }]
46
+ })), R = k.map((e) => ({
47
+ at: Date.parse(e.taggedAt),
48
+ kind: "release",
49
+ label: e.release,
50
+ verdict: x(e) ? "pass" : "unknown"
51
+ })), z = (e) => new Date(e).toISOString().slice(5, 16).replace("T", " "), B = F ? /* @__PURE__ */ u("section", {
52
+ ref: D,
53
+ tabIndex: 0,
54
+ role: "list",
55
+ className: "rp-card rj-drill rj-files",
56
+ "aria-label": `${F.name}: what it did`,
57
+ children: /* @__PURE__ */ u(c, {
58
+ items: [null, ...I],
59
+ keyOf: (e) => e === null ? "summary" : `file:${e}`,
60
+ scroller: D,
61
+ estimate: 28,
62
+ overscan: 280,
63
+ render: (e) => /* @__PURE__ */ u("div", {
64
+ role: "listitem",
65
+ children: e === null ? /* @__PURE__ */ d(l, { children: [/* @__PURE__ */ d("div", {
66
+ className: "rp-hd",
67
+ children: [/* @__PURE__ */ u("h2", { children: F.name }), /* @__PURE__ */ u("a", {
68
+ className: "rp-btn end",
69
+ href: C.href("conversations", { agent: o(S.run.id, F.id) }),
70
+ children: "Conversation →"
71
+ })]
72
+ }), /* @__PURE__ */ d("dl", { children: [
73
+ /* @__PURE__ */ u("dt", { children: "Task" }),
74
+ /* @__PURE__ */ u("dd", { children: r(F.node.assignment) || F.id === S.run.id && r(a(S.input?.objective)) || "Not recorded" }),
75
+ /* @__PURE__ */ u("dt", { children: "Result" }),
76
+ /* @__PURE__ */ u("dd", { children: r(F.node.turn) || "No result recorded yet" }),
77
+ /* @__PURE__ */ u("dt", { children: "Changed" }),
78
+ /* @__PURE__ */ u("dd", { children: I.length ? `${I.length} files in released work` : "No files in released work" })
79
+ ] })] }) : /* @__PURE__ */ u("code", { children: e })
80
+ })
81
+ })
82
+ }, F.id) : null;
83
+ return /* @__PURE__ */ d("section", {
84
+ className: "rp-journey",
85
+ "aria-label": "Run overview",
86
+ children: [/* @__PURE__ */ d("section", {
87
+ className: "rj-hero",
88
+ "aria-label": "How close the best release is",
89
+ children: [
90
+ O?.steps?.length ? /* @__PURE__ */ u(p, {
91
+ total: O.total,
92
+ used: O.passed,
93
+ steps: O.steps,
94
+ text: "How close the best release is"
95
+ }) : /* @__PURE__ */ u("p", { children: "No release was checked." }),
96
+ O && /* @__PURE__ */ d("p", { children: [
97
+ /* @__PURE__ */ u("b", { children: O.release }),
98
+ " · ",
99
+ j ? `stuck at ${j.label}${M ? ` for ${M}, since ${A?.release}` : ""}` : "every step passes"
100
+ ] }),
101
+ /* @__PURE__ */ u("p", {
102
+ className: "rj-next",
103
+ children: S.view?.paused ? /* @__PURE__ */ d(l, { children: [
104
+ /* @__PURE__ */ u("b", { children: "Next:" }),
105
+ " Decide whether to resume research. ",
106
+ /* @__PURE__ */ u("a", {
107
+ href: "/today",
108
+ children: "Today →"
109
+ })
110
+ ] }) : P?.owner === "Drew" ? /* @__PURE__ */ d(l, { children: [
111
+ /* @__PURE__ */ u("b", { children: "Next:" }),
112
+ " ",
113
+ P.action
114
+ ] }) : /* @__PURE__ */ d(l, { children: [
115
+ /* @__PURE__ */ u("b", { children: "Nothing for you." }),
116
+ " ",
117
+ P?.owner ?? "Discovery operator",
118
+ " is on it",
119
+ P?.since ? ` since ${i(P.since)}` : "",
120
+ P?.action ? `: ${P.action}` : "."
121
+ ] })
122
+ }),
123
+ /* @__PURE__ */ u("p", {
124
+ className: "rj-releases",
125
+ children: N.map((e) => {
126
+ let t = e[0], n = e.at(-1);
127
+ return /* @__PURE__ */ d("a", {
128
+ "data-pass": x(n) || void 0,
129
+ href: C.href("checks", { release: n.release }),
130
+ children: [
131
+ t.release,
132
+ e.length > 1 ? `–${n.release}: all` : "",
133
+ " ",
134
+ n.passed ?? "?",
135
+ "/",
136
+ n.total ?? "?"
137
+ ]
138
+ }, t.release);
139
+ })
140
+ })
141
+ ]
142
+ }), /* @__PURE__ */ d("div", {
143
+ className: "rj-main",
144
+ "data-picked": F && !E || void 0,
145
+ children: [/* @__PURE__ */ d("section", {
146
+ className: "rp-card rj-work",
147
+ "aria-label": "What the agents did",
148
+ children: [/* @__PURE__ */ d("div", {
149
+ className: "rp-hd",
150
+ children: [/* @__PURE__ */ u("h2", { children: "What the agents did" }), /* @__PURE__ */ d("span", {
151
+ className: "muted",
152
+ children: [b.agents.length, " agents"]
153
+ })]
154
+ }), /* @__PURE__ */ u(f, {
155
+ lanes: L,
156
+ marks: R,
157
+ bestMark: O?.release,
158
+ selectedId: F?.id,
159
+ onSelect: (e) => T(e),
160
+ maxHeight: 420,
161
+ now: b.live ? b.t0 + b.duration : void 0,
162
+ colors: {
163
+ ok: m.solved,
164
+ done: m.cancelled,
165
+ live: m.live,
166
+ lead: m.cancelled,
167
+ fail: m.died,
168
+ waiting: m.stalled,
169
+ "needs-you": m.stalled,
170
+ none: m.cancelled
171
+ },
172
+ axis: z,
173
+ span: (e, t) => n(t - e)
174
+ })]
175
+ }), E ? /* @__PURE__ */ u(h, {
176
+ open: !!F,
177
+ onOpenChange: (e) => {
178
+ e || T(null);
179
+ },
180
+ children: /* @__PURE__ */ d(g, {
181
+ side: "bottom",
182
+ className: "rj-agent-sheet agent-record rp",
183
+ children: [/* @__PURE__ */ d(_, { children: [/* @__PURE__ */ u(v, { children: F?.name }), F && /* @__PURE__ */ u("a", {
184
+ className: "rp-btn",
185
+ href: C.href("conversations", { agent: o(S.run.id, F.id) }),
186
+ children: "Conversation →"
187
+ })] }), B]
188
+ })
189
+ }) : B]
190
+ })]
191
+ });
192
+ }
193
+ //#endregion
194
+ export { S as Overview, b as clause };
@@ -1,5 +1,5 @@
1
- import { O as e, a as t, b as n, d as r, i, l as a, r as o, t as s, y as c } from "./run-receipt-Bvi4-KVM.js";
2
- import { d as l, n as u, r as d } from "./data-BJmP7F1M.js";
1
+ import { O as e, a as t, b as n, d as r, i, l as a, r as o, t as s, y as c } from "./run-receipt-Bt2iXJUy.js";
2
+ import { d as l, n as u, r as d } from "./data-DTGmre1W.js";
3
3
  import { useState as f } from "react";
4
4
  import { Fragment as p, jsx as m, jsxs as h } from "react/jsx-runtime";
5
5
  import g from "react-markdown";
@@ -0,0 +1,286 @@
1
+ import { A as e, y as t } from "./run-receipt-Bt2iXJUy.js";
2
+ import { d as n, n as r, p as i } from "./data-DTGmre1W.js";
3
+ import { a, b as o, g as s, o as c, r as ee, x as te } from "./ui-xa5w5bEN.js";
4
+ import { o as l } from "./lazy-pages-BYuq_L_n.js";
5
+ import { Suspense as u, lazy as d, useCallback as f, useEffect as p, useMemo as m, useRef as h, useState as g } from "react";
6
+ import { Fragment as _, jsx as v, jsxs as y } from "react/jsx-runtime";
7
+ import { PageHeader as ne, Tabs as re, TabsContent as b, TabsList as ie, TabsTrigger as ae } from "@tangle-network/sandbox-ui/primitives";
8
+ //#region src/workspace/run/RunPage.tsx
9
+ var x = [
10
+ "overview",
11
+ "timeline",
12
+ "files",
13
+ "topology",
14
+ "conversations",
15
+ "traces",
16
+ "analytics",
17
+ "checks"
18
+ ], S = {
19
+ overview: "Overview",
20
+ timeline: "Waterfall",
21
+ files: "Files",
22
+ topology: "Topology",
23
+ conversations: "Conversations",
24
+ traces: "Traces",
25
+ analytics: "Analytics",
26
+ checks: "Checks"
27
+ }, oe = d(() => import("./Overview-C150tkVa.js").catch(l).then((e) => ({ default: e.Overview }))), se = d(() => import("./Timeline-BFDywlmz.js").catch(l).then((e) => ({ default: e.TimelineTab }))), C = d(() => import("./Files-CvIOGrAs.js").catch(l).then((e) => ({ default: e.Files }))), w = d(() => import("./Topology-SAfGtd5u.js").catch(l).then((e) => ({ default: e.Topology }))), ce = d(() => import("./Conversations-DgCshBAf.js").catch(l).then((e) => ({ default: e.Conversations }))), le = d(() => import("./Traces-BYqXaS_s.js").catch(l).then((e) => ({ default: e.Traces }))), T = d(() => import("./Analytics-bWsqhurt.js").catch(l).then((e) => ({ default: e.Analytics }))), E = d(() => import("./Checks-CQGmKcQ0.js").catch(l).then((e) => ({ default: e.Checks }))), D = {
28
+ agents: "conversations",
29
+ spend: "analytics",
30
+ progress: "overview"
31
+ }, O = [
32
+ ["findings", "Findings"],
33
+ ["outputs", "Outputs and grades"],
34
+ ["readout", "Readout"],
35
+ ["versions", "Versions"],
36
+ ["graph", "Knowledge graph"],
37
+ ["profiles", "Profiles"],
38
+ ["assessments", "Assessments"],
39
+ ["coverage", "Capture"],
40
+ ["input", "Input"]
41
+ ];
42
+ function k(e) {
43
+ let t = () => {
44
+ let e = window.location.pathname.split("/").filter(Boolean), t = e[0] === "run" ? decodeURIComponent(e[2] ?? "") : "";
45
+ return {
46
+ tab: x.includes(t) ? t : null,
47
+ search: window.location.search
48
+ };
49
+ }, [n, r] = g(t);
50
+ p(() => {
51
+ let e = () => r(t());
52
+ return window.addEventListener("popstate", e), () => window.removeEventListener("popstate", e);
53
+ }, []);
54
+ let i = m(() => new URLSearchParams(n.search), [n.search]), a = f((t, n = {}, r = !0) => {
55
+ let i = r ? new URLSearchParams(window.location.search) : new URLSearchParams();
56
+ for (let e of [
57
+ "section",
58
+ "node",
59
+ "view",
60
+ "details",
61
+ "tab"
62
+ ]) i.delete(e);
63
+ let a = new URLSearchParams(window.location.search).get("theme");
64
+ a && i.set("theme", a);
65
+ for (let [e, t] of Object.entries(n)) t == null || t === "" ? i.delete(e) : i.set(e, t);
66
+ let o = i.toString();
67
+ return `/run/${encodeURIComponent(e)}/${t}${o ? `?${o}` : ""}`;
68
+ }, [e]), o = f((e, t = {}, n = !1) => {
69
+ let r = a(e, t);
70
+ r !== window.location.pathname + window.location.search && (n ? window.history.replaceState(null, "", r) : window.history.pushState(null, "", r), window.dispatchEvent(new PopStateEvent("popstate")));
71
+ }, [a]);
72
+ return {
73
+ tab: n.tab,
74
+ params: i,
75
+ href: a,
76
+ go: o
77
+ };
78
+ }
79
+ var A = (e, t) => t === e ? "root" : t.startsWith(`${e}:`) ? t.slice(e.length + 1) : t, j = (e, t, n) => {
80
+ if (!n) return null;
81
+ let r = n === "root" ? e.root?.id ?? t : e.byId.has(n) ? n : `${t}:${n}`;
82
+ return e.byId.has(r) ? r : null;
83
+ };
84
+ function M({ api: l, id: d, legacy: M }) {
85
+ let N = k(d), P = `${l}/runs/${encodeURIComponent(d)}`, F = i(P, void 0, !0), I = i(`${P}/workspace`, void 0, !0), [L, R] = g(null), [z, B] = g(Date.now), V = L?.url === P ? L : null, H = V?.run ?? F.data, U = {
86
+ ...I,
87
+ data: V?.workspace ?? I.data
88
+ }, W = !!(H?.execution?.alive || U.data?.live);
89
+ p(() => {
90
+ if (!W) return;
91
+ let e = new EventSource(`${P}/agents/${encodeURIComponent(d)}/stream?workspace=1`);
92
+ e.addEventListener("workspace", (e) => {
93
+ try {
94
+ let t = JSON.parse(e.data);
95
+ t.workspace?.runId === d && t.run?.run?.id === d && R({
96
+ ...t,
97
+ url: P
98
+ });
99
+ } catch {}
100
+ }), e.addEventListener("end", () => e.close());
101
+ let t = window.setInterval(() => B(Date.now()), 1e3);
102
+ return () => {
103
+ e.close(), window.clearInterval(t);
104
+ };
105
+ }, [
106
+ W,
107
+ P,
108
+ d
109
+ ]);
110
+ let ue = i(H ? `${l}/plays/${encodeURIComponent(H.run.play)}` : null), G = m(() => U.data && H ? s(U.data, H.run) : null, [
111
+ U.data,
112
+ H,
113
+ z
114
+ ]), K = N.params.get("section"), q = K ? D[K] : void 0;
115
+ p(() => {
116
+ if (!q) return;
117
+ let e = N.params.get("node");
118
+ N.go(q, {
119
+ agent: e ? A(d, e) : void 0,
120
+ file: N.params.get("file") ?? void 0
121
+ }, !0);
122
+ }, [q]);
123
+ let J = N.tab ?? "overview", de = G ? j(G, d, N.params.get("agent")) ?? G.root?.id ?? null : null, fe = f((e, t) => N.go(t ?? J, { agent: e ? A(d, e) : null }), [
124
+ N,
125
+ J,
126
+ d
127
+ ]), Y = h(null), [X, pe] = g(!1);
128
+ if (p(() => {
129
+ let e = Y.current;
130
+ if (!e) return;
131
+ let t = () => pe(e.scrollLeft + e.clientWidth < e.scrollWidth - 4);
132
+ e.querySelector("[aria-selected=\"true\"]")?.scrollIntoView({
133
+ block: "nearest",
134
+ inline: "nearest"
135
+ }), t(), e.addEventListener("scroll", t, { passive: !0 });
136
+ let n = new ResizeObserver(t);
137
+ return n.observe(e), () => {
138
+ e.removeEventListener("scroll", t), n.disconnect();
139
+ };
140
+ }, [J, F.data]), F.error && !F.data) return /* @__PURE__ */ y("p", {
141
+ className: "ws-status",
142
+ role: "alert",
143
+ children: ["This run is unavailable: ", F.error]
144
+ });
145
+ if (!H) return /* @__PURE__ */ v("p", {
146
+ className: "ws-status",
147
+ role: "status",
148
+ children: "Loading…"
149
+ });
150
+ let Z = G ? {
151
+ conversations: o(G.agents.length),
152
+ traces: o(G.totals.steps),
153
+ checks: o(H.run.check?.counts?.checks ?? G.releases.length)
154
+ } : {}, Q = K && !q && M ? M(K) : null, $ = G ? {
155
+ api: l,
156
+ runUrl: P,
157
+ doc: H,
158
+ play: ue.data ?? null,
159
+ m: G,
160
+ route: {
161
+ ...N,
162
+ tab: J
163
+ },
164
+ agent: de,
165
+ selectAgent: fe
166
+ } : null;
167
+ return /* @__PURE__ */ v(ee, { children: /* @__PURE__ */ y(re, {
168
+ value: J,
169
+ onValueChange: (e) => N.go(e),
170
+ className: "rp rp-run",
171
+ "data-run": d,
172
+ "data-tab": Q ? void 0 : J,
173
+ children: [
174
+ /* @__PURE__ */ v(ne, {
175
+ className: "rp-head",
176
+ title: /* @__PURE__ */ y(_, { children: [
177
+ /* @__PURE__ */ v("a", {
178
+ href: `/play/${encodeURIComponent(H.run.play)}`,
179
+ children: H.run.play
180
+ }),
181
+ /* @__PURE__ */ v("span", {
182
+ className: "sep",
183
+ "aria-hidden": "true",
184
+ children: "/"
185
+ }),
186
+ /* @__PURE__ */ y("span", { children: ["Run ", t(H.run.play, H.run.id)] })
187
+ ] }),
188
+ description: /* @__PURE__ */ v(r, {
189
+ status: H.view ? e(H.view.status) : n({
190
+ axis: "run",
191
+ state: H.run.state
192
+ }),
193
+ title: H.view?.status.reason ?? void 0
194
+ }),
195
+ actions: G ? /* @__PURE__ */ v("time", {
196
+ className: "rp-elapsed",
197
+ "aria-label": "Elapsed",
198
+ children: te(G.duration)
199
+ }) : void 0
200
+ }),
201
+ /* @__PURE__ */ y("div", {
202
+ className: "rp-tabs-wrap",
203
+ "data-more": X || void 0,
204
+ children: [/* @__PURE__ */ y(ie, {
205
+ ref: Y,
206
+ variant: "underline",
207
+ className: "rp-tabs",
208
+ "aria-label": "Run",
209
+ children: [x.map((e) => /* @__PURE__ */ v(ae, {
210
+ value: e,
211
+ variant: "underline",
212
+ asChild: !0,
213
+ children: /* @__PURE__ */ y("a", {
214
+ "data-tab": e,
215
+ href: N.href(e),
216
+ onClick: (t) => {
217
+ t.metaKey || t.ctrlKey || t.shiftKey || t.button !== 0 || (t.preventDefault(), N.go(e));
218
+ },
219
+ children: [S[e], Z[e] ? /* @__PURE__ */ v("span", {
220
+ className: "ct",
221
+ children: Z[e]
222
+ }) : null]
223
+ })
224
+ }, e)), /* @__PURE__ */ v("span", {
225
+ className: "rp-more",
226
+ children: /* @__PURE__ */ v(c, {
227
+ label: "More run sections",
228
+ options: O.map(([e, t]) => ({
229
+ id: e,
230
+ label: t
231
+ })),
232
+ value: Q ? K : null,
233
+ width: 260,
234
+ placeholder: "Find a section",
235
+ onChange: (e) => {
236
+ e && (window.history.pushState(null, "", `/run/${encodeURIComponent(d)}?section=${e}`), window.dispatchEvent(new PopStateEvent("popstate")));
237
+ },
238
+ children: Q ? O.find(([e]) => e === K)?.[1] ?? "More" : "More"
239
+ })
240
+ })]
241
+ }), X && /* @__PURE__ */ v("button", {
242
+ type: "button",
243
+ className: "rp-tabs-next",
244
+ "aria-label": "More tabs",
245
+ onClick: () => Y.current?.scrollBy({
246
+ left: 160,
247
+ behavior: "smooth"
248
+ }),
249
+ children: /* @__PURE__ */ v(a, { name: "chevron" })
250
+ })]
251
+ }),
252
+ /* @__PURE__ */ v(b, {
253
+ value: J,
254
+ forceMount: !0,
255
+ asChild: !0,
256
+ children: /* @__PURE__ */ v("main", {
257
+ className: "rp-work",
258
+ "aria-label": Q ? K ?? void 0 : S[J],
259
+ children: Q ?? ($ ? /* @__PURE__ */ y(u, {
260
+ fallback: /* @__PURE__ */ v("p", {
261
+ className: "ws-status",
262
+ role: "status",
263
+ children: "Loading…"
264
+ }),
265
+ children: [
266
+ J === "overview" && /* @__PURE__ */ v(oe, { ...$ }),
267
+ J === "timeline" && /* @__PURE__ */ v(se, { ...$ }),
268
+ J === "files" && /* @__PURE__ */ v(C, { ...$ }),
269
+ J === "topology" && /* @__PURE__ */ v(w, { ...$ }),
270
+ J === "conversations" && /* @__PURE__ */ v(ce, { ...$ }),
271
+ J === "traces" && /* @__PURE__ */ v(le, { ...$ }),
272
+ J === "analytics" && /* @__PURE__ */ v(T, { ...$ }),
273
+ J === "checks" && /* @__PURE__ */ v(E, { ...$ })
274
+ ]
275
+ }) : /* @__PURE__ */ v("p", {
276
+ className: "ws-status",
277
+ role: U.error ? "alert" : "status",
278
+ children: U.error ? `The run's agents are unavailable: ${U.error}` : "Reading the run…"
279
+ }))
280
+ })
281
+ })
282
+ ]
283
+ }) });
284
+ }
285
+ //#endregion
286
+ export { x as RUN_PAGE_TABS, M as RunPage, j as agentFromParam, A as agentParam, k as useRunRoute };