@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
@@ -0,0 +1,889 @@
1
+ import { i as e } from "./rolldown-runtime-DArdT4gl.js";
2
+ import { n as t, t as n } from "./jsx-runtime-DPT6sCLq.js";
3
+ import { t as r } from "./react-dom-BEusmvQH.js";
4
+ import { r as i, t as a } from "./status-meta-S0kV_RDp.js";
5
+ //#region src/workspace/use-phone.ts
6
+ var o = /* @__PURE__ */ e(r(), 1), s = /* @__PURE__ */ e(t(), 1), c = "(max-width: 1023px)";
7
+ function l(e = c) {
8
+ return (0, s.useSyncExternalStore)((t) => {
9
+ let n = window.matchMedia(e);
10
+ return n.addEventListener("change", t), () => n.removeEventListener("change", t);
11
+ }, () => window.matchMedia(e).matches, () => !1);
12
+ }
13
+ //#endregion
14
+ //#region src/workspace/run/model.ts
15
+ var u = (e) => e ? Date.parse(e) : NaN;
16
+ function d(e, t) {
17
+ if (!e.length) return null;
18
+ let n = [...e].sort((e, t) => e - t);
19
+ return n[Math.min(n.length - 1, Math.max(0, Math.ceil(t / 100 * n.length) - 1))];
20
+ }
21
+ function f(e, t, n, r) {
22
+ return {
23
+ name: e,
24
+ calls: t.length,
25
+ failures: n,
26
+ ms: r,
27
+ durations: t,
28
+ p50: d(t, 50),
29
+ p90: d(t, 90),
30
+ p99: d(t, 99)
31
+ };
32
+ }
33
+ var p = (e) => e ? e.split("/").pop() ?? e : null, m = (e) => {
34
+ let t = e.name ?? "", n = t.indexOf(" · ");
35
+ return n >= 0 ? t.slice(n + 3) : null;
36
+ }, h = (e) => typeof e == "number" && Number.isFinite(e) && e >= 0 ? e : null, g = (e) => e?.tools && Object.values(e.tools).every((e) => h(e.calls) !== null) ? Object.values(e.tools).reduce((e, t) => e + t.calls, 0) : null;
37
+ function _(e) {
38
+ return e.status === "failed" ? {
39
+ label: i(e.status).label,
40
+ tone: "fail"
41
+ } : e.status === "needs-you" || e.status === "waiting" ? {
42
+ label: i(e.status).label,
43
+ tone: e.status
44
+ } : e.status === "running" ? {
45
+ label: i(e.status).label,
46
+ tone: "live"
47
+ } : e.status === "succeeded" ? {
48
+ label: `${i(e.status).label}${e.shipped ? " · Shipped" : ""}`,
49
+ tone: e.shipped ? "ok" : "done"
50
+ } : {
51
+ label: i(e.status).label,
52
+ tone: e.status === "idle" ? "none" : ""
53
+ };
54
+ }
55
+ function v(e, t) {
56
+ let n = e.nodes, r = new Map(e.edges.filter((e) => e.kind === "spawn").map((e) => [e.to, e.from])), i = new Set(n.map((e) => e.id)), a = n.map((e) => u(e.start)).filter(Number.isFinite), o = Number.isFinite(u(t.startedAt)) ? u(t.startedAt) : a.length ? Math.min(...a) : Date.now(), s = n.map((e) => u(e.end ?? e.lastAt)).filter(Number.isFinite), c = e.live ? Math.max(0, Date.now() - o) : t.durationMs ?? Math.max(0, (s.length ? Math.max(...s) : o) - o), l = (e) => {
57
+ let t = r.get(e.id);
58
+ return t && i.has(t) ? t : null;
59
+ }, v = n.map((e) => {
60
+ let t = e.usage ?? null, n = (t?.steps ?? []).map((e) => ({
61
+ t: e.startMs - o,
62
+ d: Math.max(0, e.endMs - e.startMs),
63
+ kind: e.kind,
64
+ failed: !!e.failed,
65
+ tool: e.kind === "tool" ? e.tool ?? e.name?.split(" · ")[0] ?? "tool" : null,
66
+ target: e.kind === "tool" ? m(e) : null,
67
+ model: e.model ?? null,
68
+ latency: e.kind === "model" ? e.latencyMs ?? Math.max(0, e.endMs - e.startMs) : null,
69
+ tokens: e.byClass ? {
70
+ input: e.byClass.input ?? 0,
71
+ output: e.byClass.output ?? 0,
72
+ cacheRead: e.byClass.cacheRead ?? 0
73
+ } : null,
74
+ usd: e.billedUsd ?? null
75
+ }));
76
+ n.sort((e, t) => e.t - t.t);
77
+ let r = n.filter((e) => e.kind === "model"), i = Object.entries(t?.tools ?? {}).filter(([, e]) => h(e.calls) !== null).map(([e, t]) => {
78
+ let r = n.filter((t) => t.kind === "tool" && t.tool === e).map((e) => e.d);
79
+ return {
80
+ ...f(e, r.length === t.calls ? r : [], t.failures, t.ms),
81
+ calls: t.calls
82
+ };
83
+ });
84
+ i.sort((e, t) => t.calls - e.calls || e.name.localeCompare(t.name));
85
+ let a = r.map((e) => e.latency).filter((e) => Number.isFinite(e)), s = n.map((e) => e.t + e.d), c = Number.isFinite(u(e.start)) ? u(e.start) - o : n[0]?.t ?? null, v = Number.isFinite(u(e.end)) ? u(e.end) - o : s.length ? Math.max(...s) : null;
86
+ return {
87
+ id: e.id,
88
+ name: e.role ?? e.label,
89
+ node: e,
90
+ parent: l(e),
91
+ children: [],
92
+ depth: 0,
93
+ team: null,
94
+ status: e.status,
95
+ state: _(e),
96
+ model: p(e.model ?? Object.keys(t?.models ?? {})[0]),
97
+ harness: e.harness,
98
+ start: c,
99
+ end: v,
100
+ tokens: t?.tokens ?? null,
101
+ byClass: t?.byClass ?? null,
102
+ billedUsd: t?.billedUsd ?? null,
103
+ listUsd: t?.listUsd ?? null,
104
+ steps: n,
105
+ lastActivityAt: t?.lastActivityAt ?? e.lastActivityAt ?? void 0,
106
+ medianEventGapMs: t?.medianEventGapMs ?? e.medianEventGapMs ?? void 0,
107
+ events: t?.activityEvents ?? e.activityEvents ?? [],
108
+ modelCalls: h(t?.calls),
109
+ toolCalls: g(t),
110
+ failedSteps: t?.failures ? t.failures.model + t.failures.tool : n.filter((e) => e.failed).length,
111
+ toolFailures: t?.failures?.tool ?? i.reduce((e, t) => e + t.failures, 0),
112
+ retries: (t?.retries?.model ?? 0) + (t?.retries?.tool ?? 0),
113
+ latency: {
114
+ p50: t?.latencyMs?.p50 ?? (t?.calls === a.length ? d(a, 50) : null),
115
+ p90: t?.latencyMs?.p90 ?? (t?.calls === a.length ? d(a, 90) : null),
116
+ p99: t?.calls === a.length ? d(a, 99) : null
117
+ },
118
+ tools: i,
119
+ busy: n.filter((e) => e.kind !== "waiting").reduce((e, t) => e + t.d, 0),
120
+ first: n.length ? n[0].t : null,
121
+ last: s.length ? Math.max(...s) : null,
122
+ restarts: (e.restarts ?? []).map((e) => u(e) - o).filter(Number.isFinite),
123
+ turns: e.turns ?? null,
124
+ commits: typeof e.shipped == "number" ? e.shipped : null
125
+ };
126
+ }), b = new Map(v.map((e) => [e.id, e]));
127
+ for (let e of v) e.parent && b.get(e.parent)?.children.push(e.id);
128
+ let x = (e) => b.get(e)?.start ?? 2 ** 53 - 1;
129
+ for (let e of v) e.children.sort((e, t) => x(e) - x(t));
130
+ let S = v.find((e) => !e.parent) ?? null, C = [], w = /* @__PURE__ */ new Set(), T = (e, t) => {
131
+ if (!w.has(e.id)) {
132
+ w.add(e.id), e.depth = t, C.push(e);
133
+ for (let n of e.children) T(b.get(n), t + 1);
134
+ }
135
+ };
136
+ for (let e of v.filter((e) => !e.parent).sort((e, t) => (e.start ?? 0) - (t.start ?? 0))) T(e, 0);
137
+ for (let e of v) w.has(e.id) || T(e, 0);
138
+ let E = v.filter((e) => e.children.length > 8).map((e) => ({
139
+ id: e.id,
140
+ label: `${e.name} team`,
141
+ members: e.children
142
+ }));
143
+ for (let e of E) for (let t of e.members) b.get(t).team = e.id;
144
+ for (let e of E) b.get(e.id).team ??= e.id;
145
+ let D = v.flatMap((e) => e.steps.map((t) => ({
146
+ agent: e,
147
+ step: t
148
+ }))).sort((e, t) => e.step.t - t.step.t), O = y(v), k = e.runUsage ?? null, A = (e) => v.length && v.every((t) => e(t) !== null) ? v.reduce((t, n) => t + (e(n) ?? 0), 0) : null, j = D.map(({ step: e }) => e.t + e.d), M = e.releases.map((e) => ({
149
+ ...e,
150
+ tagged: !!e.taggedAt,
151
+ taggedAt: e.taggedAt ?? e.at ?? null
152
+ }));
153
+ return {
154
+ t0: o,
155
+ duration: c,
156
+ live: e.live,
157
+ agents: v,
158
+ byId: b,
159
+ root: S,
160
+ tree: C,
161
+ teams: E,
162
+ tools: O,
163
+ steps: D,
164
+ totals: {
165
+ steps: D.length,
166
+ model: h(k?.calls) ?? A((e) => e.modelCalls),
167
+ tool: g(k) ?? A((e) => e.toolCalls),
168
+ failed: D.filter((e) => e.step.failed).length,
169
+ toolFailures: D.filter((e) => e.step.kind === "tool" && e.step.failed).length,
170
+ retries: (k?.retries?.model ?? 0) + (k?.retries?.tool ?? 0),
171
+ tokens: k?.tokens ?? A((e) => e.tokens),
172
+ byClass: k?.byClass ?? null,
173
+ billedUsd: k?.billedUsd ?? A((e) => e.billedUsd),
174
+ listUsd: k?.listUsd ?? null,
175
+ busy: v.reduce((e, t) => e + t.busy, 0),
176
+ lastStep: j.length ? Math.max(...j) : null
177
+ },
178
+ pauses: (e.pauses ?? []).map((e) => ({
179
+ from: u(e.from) - o,
180
+ to: u(e.to) - o,
181
+ reason: e.reason
182
+ })).filter((e) => Number.isFinite(e.from) && Number.isFinite(e.to)),
183
+ releases: M,
184
+ best: M.find((t) => t.release === e.best) ?? null,
185
+ ws: e
186
+ };
187
+ }
188
+ function y(e) {
189
+ let t = /* @__PURE__ */ new Map();
190
+ for (let n of e) for (let e of n.tools) {
191
+ let n = t.get(e.name) ?? {
192
+ d: [],
193
+ f: 0,
194
+ ms: 0,
195
+ calls: 0
196
+ };
197
+ n.d.push(...e.durations), n.f += e.failures, n.ms += e.ms, n.calls += e.calls, t.set(e.name, n);
198
+ }
199
+ return [...t].map(([e, t]) => ({
200
+ ...f(e, t.d.length === t.calls ? t.d : [], t.f, t.ms),
201
+ calls: t.calls
202
+ })).sort((e, t) => t.calls - e.calls);
203
+ }
204
+ var b = (e) => String(e).padStart(2, "0"), x = (e) => (t) => {
205
+ let n = new Date(e + t);
206
+ return `${b(n.getUTCHours())}:${b(n.getUTCMinutes())}`;
207
+ }, S = (e) => (t) => {
208
+ let n = new Date(e + t);
209
+ return `${b(n.getUTCHours())}:${b(n.getUTCMinutes())}:${b(n.getUTCSeconds())}`;
210
+ }, C = (e, t, n = `${t}s`) => `${e.toLocaleString("en-US")} ${e === 1 ? t : n}`, w = (e, t, n) => {
211
+ let r = x(e);
212
+ return n === "now" ? `${r(t)}–now` : new Date(e + t).toISOString().slice(0, 10) === new Date(e + n).toISOString().slice(0, 10) ? `${r(t)}–${r(n)}` : `${r(t)}, ${E(n - t)}`;
213
+ }, T = (e, t) => `${t ? `${new Date(e).toLocaleDateString("en-US", {
214
+ month: "short",
215
+ day: "numeric",
216
+ timeZone: "UTC"
217
+ })} ` : ""}${e.slice(11, 16)} UTC`;
218
+ function E(e) {
219
+ if (e == null || !Number.isFinite(e)) return "—";
220
+ if (e < 1e3) return `${Math.round(e)} ms`;
221
+ if (e < 59500) return `${(e / 1e3).toFixed(+(e < 9950))} s`;
222
+ if (e < 36e5) {
223
+ let t = Math.round(e / 1e3);
224
+ if (t < 3600) return t % 60 ? `${Math.floor(t / 60)}m ${b(t % 60)}s` : `${t / 60} min`;
225
+ }
226
+ let t = Math.round(e / 6e4);
227
+ return `${Math.floor(t / 60)}h ${b(t % 60)}m`;
228
+ }
229
+ function D(e) {
230
+ if (e == null || !Number.isFinite(e)) return "—";
231
+ if (e < 1e3) return `${Math.round(e)}ms`;
232
+ if (e < 59500) return `${(e / 1e3).toFixed(+(e < 9950))}s`;
233
+ let t = Math.round(e / 1e3);
234
+ return t < 3600 ? `${Math.floor(t / 60)}m${b(t % 60)}s` : E(e);
235
+ }
236
+ var O = new Intl.NumberFormat("en-US"), k = [
237
+ 0,
238
+ 1,
239
+ 2
240
+ ].map((e) => new Intl.NumberFormat("en-US", {
241
+ notation: "compact",
242
+ maximumFractionDigits: e
243
+ })), A = (e) => e == null ? "—" : O.format(e), j = (e) => e == null ? "—" : k[e >= 1e8 ? 0 : e >= 1e6 ? 2 : 1].format(e), M = (e) => e == null ? "—" : e >= 100 ? `$${e.toFixed(0)}` : `$${e.toFixed(2)}`, N = (e) => e.length < 2 ? e.join("") : `${e.slice(0, -1).join(", ")} and ${e.at(-1)}`;
244
+ function P(e) {
245
+ let t = e?.latest;
246
+ if (!t) return {
247
+ word: "Not checked",
248
+ tone: "none",
249
+ note: null
250
+ };
251
+ if (t.solved) return {
252
+ word: "Passed",
253
+ tone: "ok",
254
+ note: t.tag ? `${t.tag} passed the check` : null
255
+ };
256
+ if (e?.held && (!e.held.tag || e.held.tag === t.tag)) {
257
+ let n = e.calibration?.uncalibrated ?? e.calibration?.stages?.filter((e) => e.state !== "calibrated").map((e) => e.name) ?? [];
258
+ return {
259
+ word: "Held",
260
+ tone: "held",
261
+ note: `${t.tag ? `${t.tag} passed; it` : "It"} counts once ${n.length ? `${N(n)} ${n.length === 1 ? "has" : "have"} a known-good fixture` : "its checker is calibrated"}`
262
+ };
263
+ }
264
+ return t.known ? {
265
+ word: "Not solved",
266
+ tone: "fail",
267
+ note: null
268
+ } : {
269
+ word: "No verdict",
270
+ tone: "none",
271
+ note: null
272
+ };
273
+ }
274
+ function F(e, t) {
275
+ return [
276
+ {
277
+ label: "Tokens",
278
+ value: t.byClass ? `${A(t.byClass.input)} in / ${A(t.byClass.output)} out / ${A(t.byClass.cacheRead)} cached` : t.tokens === null ? "Not recorded" : `${A(t.tokens)} total · split not recorded`
279
+ },
280
+ {
281
+ label: "Cost",
282
+ value: t.listUsd === null ? t.billedUsd === null ? "Not recorded" : `${t.node.usage?.billedComplete === !1 ? "≥" : ""}${M(t.billedUsd)} billed` : `${t.node.usage?.listComplete === !1 ? "≥" : ""}${M(t.listUsd)} catalog`
283
+ },
284
+ {
285
+ label: "Billed cost",
286
+ value: t.billedUsd === null ? "Not recorded" : `${t.node.usage?.billedComplete === !1 ? "≥" : ""}${M(t.billedUsd)}`
287
+ },
288
+ {
289
+ label: "Model calls",
290
+ value: A(t.modelCalls)
291
+ },
292
+ {
293
+ label: "Model latency",
294
+ value: `${D(t.latency.p50)} p50 / ${D(t.latency.p90)} p90 / ${D(t.latency.p99)} p99`
295
+ },
296
+ {
297
+ label: "Tool calls",
298
+ value: A(t.toolCalls)
299
+ },
300
+ {
301
+ label: "Tool failures",
302
+ value: t.node.usage?.tools || t.node.usage?.failures ? A(t.toolFailures) : "Not recorded"
303
+ },
304
+ {
305
+ label: "Failures",
306
+ value: t.node.usage?.failures ? `${A(t.failedSteps)} failed steps` : "Not recorded"
307
+ },
308
+ {
309
+ label: "Retries",
310
+ value: `${t.node.usage?.retries ? A(t.retries) : "—"} retried steps · ${t.node.restarts ? A(t.restarts.length) : "—"} restarts`
311
+ },
312
+ {
313
+ label: "Observed work / run duration",
314
+ value: `${E(t.busy)} / ${E(e.duration)}`
315
+ },
316
+ {
317
+ label: "Spawned / commits",
318
+ value: `${t.children.length} / ${A(t.commits)}`
319
+ },
320
+ ...t.turns === null ? [] : [{
321
+ label: "Turns",
322
+ value: A(t.turns)
323
+ }],
324
+ ...t.tools.map((e) => ({
325
+ label: e.name,
326
+ value: `${A(e.calls)} calls · ${A(e.failures)} failures · ${D(e.p50)} / ${D(e.p90)} / ${D(e.p99)} p50/p90/p99`
327
+ }))
328
+ ];
329
+ }
330
+ //#endregion
331
+ //#region src/workspace/run/ui.tsx
332
+ var I = n(), L = {
333
+ search: "M11 11l3.5 3.5M7 12.5a5.5 5.5 0 1 0 0-11 5.5 5.5 0 0 0 0 11z",
334
+ chevron: "M4 6l4 4 4-4",
335
+ arrow: "M3 8h10M9 4l4 4-4 4",
336
+ x: "M4 4l8 8M12 4l-8 8",
337
+ stop: "M8 14.5a6.5 6.5 0 1 0 0-13 6.5 6.5 0 0 0 0 13zM3.5 12.5l9-9",
338
+ download: "M8 2v8M4.5 6.5L8 10l3.5-3.5M2.5 13.5h11",
339
+ link: "M6.5 9.5l3-3M7 4.5l1-1a2.8 2.8 0 0 1 4 4l-1 1M9 11.5l-1 1a2.8 2.8 0 0 1-4-4l1-1",
340
+ info: "M8 14.5a6.5 6.5 0 1 0 0-13 6.5 6.5 0 0 0 0 13zM8 7.2v4M8 4.8v.2",
341
+ max: "M9.5 2.5h4v4M6.5 13.5h-4v-4M13.5 2.5L9 7M2.5 13.5L7 9",
342
+ min: "M13.5 6.5h-4v-4M2.5 9.5h4v4M9.5 6.5l4-4M6.5 9.5l-4 4",
343
+ more: "M3.5 8h.01M8 8h.01M12.5 8h.01",
344
+ users: "M6 7a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5zM1.5 14c0-2.5 2-4.5 4.5-4.5s4.5 2 4.5 4.5M11 2.2a2.5 2.5 0 0 1 0 4.6M12.5 9.7c1.2.6 2 1.9 2 3.3",
345
+ alert: "M8 1.8l6.5 11.5h-13zM8 6v3.5M8 11.4v.2",
346
+ check: "M3 8.5l3 3 7-7",
347
+ clock: "M8 14.5a6.5 6.5 0 1 0 0-13 6.5 6.5 0 0 0 0 13zM8 4.5V8l2.5 1.5",
348
+ flag: "M3 14.5V2M3 2.5h8l-1.5 3 1.5 3H3",
349
+ down: "M8 2.5v11M3.5 9L8 13.5 12.5 9",
350
+ file: "M9.5 1.8h-5a1.5 1.5 0 0 0-1.5 1.5v9.4a1.5 1.5 0 0 0 1.5 1.5h7a1.5 1.5 0 0 0 1.5-1.5V5.3zM9.5 1.8v3.5H13M5.5 8.5h5M5.5 11h3.5"
351
+ };
352
+ function R({ name: e, size: t = 16, className: n }) {
353
+ return /* @__PURE__ */ (0, I.jsx)("svg", {
354
+ className: `rp-i${n ? ` ${n}` : ""}`,
355
+ width: t,
356
+ height: t,
357
+ viewBox: "0 0 16 16",
358
+ "aria-hidden": "true",
359
+ children: /* @__PURE__ */ (0, I.jsx)("path", { d: L[e] })
360
+ });
361
+ }
362
+ var z = ({ tone: e }) => e === "waiting" || e === "needs-you" ? /* @__PURE__ */ (0, I.jsx)(a, {
363
+ status: e,
364
+ "aria-hidden": !0
365
+ }) : /* @__PURE__ */ (0, I.jsx)("span", {
366
+ className: `rp-dot${e ? ` ${e}` : ""}`,
367
+ "aria-hidden": "true"
368
+ });
369
+ function B({ text: e, query: t }) {
370
+ let n = t.trim().toLowerCase(), r = n ? e.toLowerCase().indexOf(n) : -1;
371
+ return r < 0 ? /* @__PURE__ */ (0, I.jsx)(I.Fragment, { children: e }) : /* @__PURE__ */ (0, I.jsxs)(I.Fragment, { children: [
372
+ e.slice(0, r),
373
+ /* @__PURE__ */ (0, I.jsx)("mark", { children: e.slice(r, r + n.length) }),
374
+ e.slice(r + n.length)
375
+ ] });
376
+ }
377
+ var V = (0, s.createContext)(null), H = () => (0, s.useContext)(V);
378
+ function U({ children: e }) {
379
+ let [t, n] = (0, s.useState)(null), r = (0, s.useRef)(!1), i = (0, s.useRef)(0), a = (0, s.useRef)(null), c = (0, s.useMemo)(() => ({
380
+ show: (e) => {
381
+ r.current || (window.clearTimeout(i.current), n(e));
382
+ },
383
+ hide: () => {
384
+ r.current || (window.clearTimeout(i.current), i.current = window.setTimeout(() => {
385
+ !a.current?.matches(":hover") && !a.current?.contains(document.activeElement) && n(null);
386
+ }, 160));
387
+ },
388
+ hideNow: () => {
389
+ window.clearTimeout(i.current), r.current = !1, n(null);
390
+ },
391
+ pin: () => {
392
+ r.current = !0, n((e) => e && {
393
+ ...e,
394
+ follow: !1,
395
+ pinned: !0
396
+ });
397
+ },
398
+ pinned: () => r.current
399
+ }), []);
400
+ return (0, s.useEffect)(() => {
401
+ let e = (e) => {
402
+ e.key === "Escape" && c.hideNow();
403
+ }, t = (e) => {
404
+ r.current && a.current && !a.current.contains(e.target) && c.hideNow();
405
+ };
406
+ return window.addEventListener("keydown", e), window.addEventListener("pointerdown", t), () => {
407
+ window.removeEventListener("keydown", e), window.removeEventListener("pointerdown", t);
408
+ };
409
+ }, [c]), (0, s.useLayoutEffect)(() => {
410
+ let e = a.current;
411
+ if (!e || !t) return;
412
+ let n = e.offsetWidth, r = e.offsetHeight, i = window.innerWidth, o = window.innerHeight, { rect: s, bounds: c } = t, l, u;
413
+ if (i <= 720 || t.vertical && c) l = Math.max((c?.left ?? 0) + 8, Math.min(s.left, (c?.right ?? i) - 8 - n)), i <= 720 && (l = Math.max(12, (i - n) / 2)), u = s.bottom + 8, u + r > Math.min(o, c?.bottom ?? o) - 8 && (u = s.top - 8 - r);
414
+ else {
415
+ let e = c ? {
416
+ l: Math.max(12, c.left + 8),
417
+ r: Math.min(i - 12, c.right - 8),
418
+ t: Math.max(12, c.top + 8),
419
+ b: Math.min(o - 12, c.bottom - 8)
420
+ } : {
421
+ l: 12,
422
+ r: i - 12,
423
+ t: 12,
424
+ b: o - 12
425
+ }, a = t.x ?? s.right, d = t.x ?? s.left;
426
+ l = a + 14, l + n > e.r && (l = d - 14 - n), l < e.l && (l = Math.max(12, Math.min(i - n - 12, a + 14))), u = s.top + (s.bottom - s.top) / 2 - r / 2, u = r <= e.b - e.t ? Math.max(e.t, Math.min(u, e.b - r)) : Math.max(12, Math.min(u, o - r - 12));
427
+ }
428
+ e.style.left = `${Math.round(Math.max(12, l))}px`, e.style.top = `${Math.round(Math.max(12, Math.min(u, o - r - 12)))}px`;
429
+ }, [t]), /* @__PURE__ */ (0, I.jsxs)(V.Provider, {
430
+ value: c,
431
+ children: [e, t && typeof document < "u" && (0, o.createPortal)(/* @__PURE__ */ (0, I.jsxs)("div", {
432
+ ref: a,
433
+ className: `rp-hc${t.wide ? " wide" : ""}${t.follow ? " follow" : ""}`,
434
+ role: t.pinned ? "dialog" : "tooltip",
435
+ "data-pinned": t.pinned || void 0,
436
+ onPointerLeave: () => {
437
+ r.current || n(null);
438
+ },
439
+ children: [t.pinned && /* @__PURE__ */ (0, I.jsx)("button", {
440
+ type: "button",
441
+ className: "rp-card-x",
442
+ "aria-label": "Close",
443
+ onClick: c.hideNow,
444
+ children: /* @__PURE__ */ (0, I.jsx)(R, {
445
+ name: "x",
446
+ size: 14
447
+ })
448
+ }), t.content]
449
+ }), document.querySelector(".agent-record") ?? document.body)]
450
+ });
451
+ }
452
+ function W({ tools: e, rows: t = 9 }) {
453
+ let n = Math.max(1, ...e.map((e) => e.calls));
454
+ return /* @__PURE__ */ (0, I.jsxs)("div", {
455
+ className: "rp-tt",
456
+ children: [
457
+ /* @__PURE__ */ (0, I.jsx)("span", {
458
+ className: "h",
459
+ children: "Tool"
460
+ }),
461
+ /* @__PURE__ */ (0, I.jsx)("span", { className: "h" }),
462
+ /* @__PURE__ */ (0, I.jsx)("span", {
463
+ className: "h r",
464
+ children: "calls"
465
+ }),
466
+ /* @__PURE__ */ (0, I.jsx)("span", {
467
+ className: "h r",
468
+ children: "✕ · p50"
469
+ }),
470
+ e.slice(0, t).map((e) => /* @__PURE__ */ (0, I.jsx)(G, {
471
+ t: e,
472
+ max: n
473
+ }, e.name)),
474
+ e.length > t && /* @__PURE__ */ (0, I.jsxs)(I.Fragment, { children: [
475
+ /* @__PURE__ */ (0, I.jsxs)("span", {
476
+ className: "l",
477
+ children: [e.length - t, " more tools"]
478
+ }),
479
+ /* @__PURE__ */ (0, I.jsx)("span", {}),
480
+ /* @__PURE__ */ (0, I.jsx)("span", {
481
+ className: "r",
482
+ children: A(e.slice(t).reduce((e, t) => e + t.calls, 0))
483
+ }),
484
+ /* @__PURE__ */ (0, I.jsx)("span", {})
485
+ ] })
486
+ ]
487
+ });
488
+ }
489
+ function G({ t: e, max: t }) {
490
+ return /* @__PURE__ */ (0, I.jsxs)(I.Fragment, { children: [
491
+ /* @__PURE__ */ (0, I.jsx)("span", {
492
+ className: "l",
493
+ title: e.name,
494
+ children: e.name
495
+ }),
496
+ /* @__PURE__ */ (0, I.jsx)(K, {
497
+ ok: e.calls - e.failures,
498
+ failed: e.failures,
499
+ max: t
500
+ }),
501
+ /* @__PURE__ */ (0, I.jsx)("span", {
502
+ className: "r",
503
+ children: A(e.calls)
504
+ }),
505
+ /* @__PURE__ */ (0, I.jsx)("span", {
506
+ className: e.failures ? "f" : "r",
507
+ children: e.failures ? `${e.failures} ✕` : D(e.p50)
508
+ })
509
+ ] });
510
+ }
511
+ function K({ ok: e, failed: t = 0, max: n }) {
512
+ return /* @__PURE__ */ (0, I.jsxs)("span", {
513
+ className: "rp-bar",
514
+ "aria-hidden": "true",
515
+ children: [/* @__PURE__ */ (0, I.jsx)("b", { style: { width: `${Math.max(0, e) / n * 100}%` } }), t > 0 && /* @__PURE__ */ (0, I.jsx)("b", {
516
+ className: "f",
517
+ style: { width: `${t / n * 100}%` }
518
+ })]
519
+ });
520
+ }
521
+ var q = (e) => e.listUsd === null ? e.billedUsd === null ? "not recorded" : `${e.node.usage?.billedComplete === !1 ? "≥" : ""}${M(e.billedUsd)} billed` : `${e.node.usage?.listComplete === !1 ? "≥" : ""}${M(e.listUsd)} list · ${e.billedUsd !== null && e.node.usage?.billedComplete === !1 ? "≥" : ""}${M(e.billedUsd)} billed`;
522
+ function J({ m: e, a: t, head: n }) {
523
+ let r = (t) => new Date(e.t0 + t).toISOString().slice(11, 16), i = t.parent ? e.byId.get(t.parent) : null;
524
+ return /* @__PURE__ */ (0, I.jsxs)(I.Fragment, { children: [n ?? /* @__PURE__ */ (0, I.jsxs)("div", {
525
+ className: "rp-card-h",
526
+ children: [/* @__PURE__ */ (0, I.jsxs)("div", {
527
+ className: "t",
528
+ children: [
529
+ /* @__PURE__ */ (0, I.jsx)(z, { tone: t.state.tone }),
530
+ /* @__PURE__ */ (0, I.jsx)("span", {
531
+ className: "nm",
532
+ children: t.name
533
+ }),
534
+ /* @__PURE__ */ (0, I.jsx)("span", {
535
+ className: "v",
536
+ children: t.state.label
537
+ })
538
+ ]
539
+ }), /* @__PURE__ */ (0, I.jsx)("div", {
540
+ className: "s",
541
+ children: i ? `spawned by ${i.name}${t.start === null ? "" : ` at ${r(Math.max(0, t.start))} UTC`}` : `run root · ${r(0)} UTC`
542
+ })]
543
+ }), /* @__PURE__ */ (0, I.jsxs)("div", {
544
+ className: `rp-card-cols${t.tools.length ? " two" : ""}`,
545
+ children: [/* @__PURE__ */ (0, I.jsxs)("section", { children: [/* @__PURE__ */ (0, I.jsxs)("h6", { children: ["Whole run", t.model ? ` · ${t.model}` : ""] }), /* @__PURE__ */ (0, I.jsxs)("dl", { children: [
546
+ /* @__PURE__ */ (0, I.jsx)("dt", { children: "Tokens" }),
547
+ /* @__PURE__ */ (0, I.jsx)("dd", { children: t.tokens === null ? "not recorded" : j(t.tokens) }),
548
+ t.tokens !== null && /* @__PURE__ */ (0, I.jsxs)(I.Fragment, { children: [/* @__PURE__ */ (0, I.jsx)("dt", { children: "In · out · cached" }), /* @__PURE__ */ (0, I.jsx)("dd", { children: t.byClass ? `${j(t.byClass.input)} · ${j(t.byClass.output)} · ${j(t.byClass.cacheRead)}` : /* @__PURE__ */ (0, I.jsx)("small", { children: "not recorded" }) })] }),
549
+ /* @__PURE__ */ (0, I.jsx)("dt", { children: "Cost" }),
550
+ /* @__PURE__ */ (0, I.jsx)("dd", { children: q(t) }),
551
+ /* @__PURE__ */ (0, I.jsx)("dt", { children: "Model calls" }),
552
+ /* @__PURE__ */ (0, I.jsx)("dd", { children: A(t.modelCalls) }),
553
+ t.latency.p50 !== null && /* @__PURE__ */ (0, I.jsxs)(I.Fragment, { children: [/* @__PURE__ */ (0, I.jsx)("dt", { children: "Model p50 · p90 · p99" }), /* @__PURE__ */ (0, I.jsxs)("dd", { children: [
554
+ D(t.latency.p50),
555
+ " · ",
556
+ D(t.latency.p90),
557
+ " · ",
558
+ D(t.latency.p99)
559
+ ] })] }),
560
+ /* @__PURE__ */ (0, I.jsx)("dt", { children: "Tool calls" }),
561
+ /* @__PURE__ */ (0, I.jsxs)("dd", { children: [A(t.toolCalls), t.toolFailures ? /* @__PURE__ */ (0, I.jsxs)("span", {
562
+ className: "f",
563
+ children: [
564
+ " · ",
565
+ t.toolFailures,
566
+ " failed"
567
+ ]
568
+ }) : null] }),
569
+ t.retries > 0 && /* @__PURE__ */ (0, I.jsxs)(I.Fragment, { children: [/* @__PURE__ */ (0, I.jsx)("dt", { children: "Retried steps" }), /* @__PURE__ */ (0, I.jsx)("dd", { children: t.retries })] }),
570
+ /* @__PURE__ */ (0, I.jsx)("dt", { children: "Restarts" }),
571
+ /* @__PURE__ */ (0, I.jsx)("dd", { children: t.restarts.length }),
572
+ /* @__PURE__ */ (0, I.jsx)("dt", { children: "Spawned · commits" }),
573
+ /* @__PURE__ */ (0, I.jsxs)("dd", { children: [
574
+ t.children.length,
575
+ " · ",
576
+ t.commits ?? "—"
577
+ ] }),
578
+ /* @__PURE__ */ (0, I.jsx)("dt", { children: "Active" }),
579
+ /* @__PURE__ */ (0, I.jsx)("dd", { children: t.first === null ? "never" : `${r(t.first)}–${t.state.tone === "live" ? "now" : r(t.last ?? t.first)} UTC` }),
580
+ t.first !== null && /* @__PURE__ */ (0, I.jsxs)(I.Fragment, { children: [/* @__PURE__ */ (0, I.jsx)("dt", { children: "Busy" }), /* @__PURE__ */ (0, I.jsx)("dd", { children: E(t.busy) })] })
581
+ ] })] }), t.tools.length > 0 && /* @__PURE__ */ (0, I.jsxs)("section", { children: [/* @__PURE__ */ (0, I.jsx)("h6", { children: "Tool calls by tool" }), /* @__PURE__ */ (0, I.jsx)(W, { tools: t.tools })] })]
582
+ })] });
583
+ }
584
+ var Y = 36;
585
+ function X(e) {
586
+ let [t, n] = (0, s.useState)(!1), r = (0, s.useRef)(null);
587
+ return /* @__PURE__ */ (0, I.jsxs)(I.Fragment, { children: [/* @__PURE__ */ (0, I.jsxs)("button", {
588
+ ref: r,
589
+ type: "button",
590
+ className: `rp-cbx${e.className ? ` ${e.className}` : ""}`,
591
+ style: e.style,
592
+ "aria-haspopup": "listbox",
593
+ "aria-expanded": t,
594
+ "aria-label": e.label,
595
+ onClick: () => n(!t),
596
+ children: [/* @__PURE__ */ (0, I.jsx)("span", {
597
+ className: "lbl",
598
+ children: e.children
599
+ }), /* @__PURE__ */ (0, I.jsx)("span", {
600
+ className: "cv",
601
+ children: /* @__PURE__ */ (0, I.jsx)(R, {
602
+ name: "chevron",
603
+ size: 14
604
+ })
605
+ })]
606
+ }), t && /* @__PURE__ */ (0, I.jsx)(Z, {
607
+ ...e,
608
+ anchor: r.current,
609
+ onClose: (e) => {
610
+ n(!1), e && r.current?.focus();
611
+ }
612
+ })] });
613
+ }
614
+ function Z(e) {
615
+ let { options: t, groups: n, all: r, multi: i, anchor: a, onClose: c } = e, [l, u] = (0, s.useState)(""), [d, f] = (0, s.useState)(0), [p, m] = (0, s.useState)(0), h = (0, s.useRef)(null), g = (0, s.useRef)(null), _ = (0, s.useMemo)(() => `pk-${Math.random().toString(36).slice(2, 8)}`, []), v = (t) => i ? e.value.size === 0 || e.value.has(t) : e.value === t, y = (0, s.useMemo)(() => {
616
+ let e = l.trim().toLowerCase(), i = (t) => !e || `${t.label} ${t.find ?? ""}`.toLowerCase().includes(e), a = [];
617
+ r && !e && a.push({ kind: "all" });
618
+ let o = new Set((n ?? []).map((e) => e.id));
619
+ for (let e of t) (!e.group || !o.has(e.group)) && i(e) && a.push({
620
+ kind: "option",
621
+ option: e
622
+ });
623
+ for (let e of n ?? []) {
624
+ let n = t.filter((t) => t.group === e.id), r = n.filter(i);
625
+ if (r.length) {
626
+ a.push({
627
+ kind: "group",
628
+ id: e.id,
629
+ label: e.label,
630
+ members: n.map((e) => e.id)
631
+ });
632
+ for (let e of r) a.push({
633
+ kind: "option",
634
+ option: e
635
+ });
636
+ }
637
+ }
638
+ return a;
639
+ }, [
640
+ t,
641
+ n,
642
+ r,
643
+ l
644
+ ]);
645
+ (0, s.useLayoutEffect)(() => {
646
+ let t = h.current;
647
+ if (!t) return;
648
+ let n = a.getBoundingClientRect(), r = Math.max(n.width, e.width ?? 280);
649
+ t.style.width = `${Math.min(r, window.innerWidth - 24)}px`, t.style.left = `${Math.max(12, Math.min(n.left, window.innerWidth - t.offsetWidth - 12))}px`;
650
+ let i = window.innerHeight - n.bottom;
651
+ t.style.top = i > t.offsetHeight + 16 || i > n.top ? `${n.bottom + 6}px` : `${Math.max(12, n.top - 6 - t.offsetHeight)}px`;
652
+ }, [
653
+ a,
654
+ y.length,
655
+ e.width
656
+ ]), (0, s.useEffect)(() => {
657
+ let e = (e) => {
658
+ !h.current?.contains(e.target) && !a.contains(e.target) && c(!1);
659
+ };
660
+ return window.addEventListener("pointerdown", e), () => window.removeEventListener("pointerdown", e);
661
+ }, [a, c]), (0, s.useEffect)(() => f(0), [l]);
662
+ let b = (n) => {
663
+ if (!n) return;
664
+ if (!i) {
665
+ let t = e.onChange;
666
+ t(n.kind === "option" ? n.option.id : n.kind === "group" ? n.id : null), c(!0);
667
+ return;
668
+ }
669
+ let r = e.onChange;
670
+ if (n.kind === "all") return r(/* @__PURE__ */ new Set());
671
+ let a = new Set(e.value.size ? e.value : t.map((e) => e.id));
672
+ if (n.kind === "group") {
673
+ let e = n.members.every((e) => a.has(e));
674
+ for (let t of n.members) e ? a.delete(t) : a.add(t);
675
+ } else a.has(n.option.id) ? a.delete(n.option.id) : a.add(n.option.id);
676
+ r(a.size === t.length ? /* @__PURE__ */ new Set() : a);
677
+ }, x = (e) => {
678
+ let t = g.current;
679
+ if (!t) return;
680
+ let n = e * Y;
681
+ n < t.scrollTop ? t.scrollTop = n : n + Y > t.scrollTop + t.clientHeight && (t.scrollTop = n + Y - t.clientHeight);
682
+ }, S = (e) => {
683
+ let t = Math.max(0, Math.min(y.length - 1, e));
684
+ f(t), x(t);
685
+ }, C = (e) => {
686
+ let t = Math.max(1, Math.floor((g.current?.clientHeight ?? 360) / Y) - 1), n = {
687
+ ArrowDown: () => S(d + 1),
688
+ ArrowUp: () => S(d - 1),
689
+ PageDown: () => S(d + t),
690
+ PageUp: () => S(d - t),
691
+ Home: () => S(0),
692
+ End: () => S(y.length - 1),
693
+ Enter: () => b(y[d]),
694
+ Escape: () => c(!0),
695
+ Tab: () => c(!1)
696
+ }[e.key];
697
+ n && (e.key !== "Tab" && e.preventDefault(), n());
698
+ }, w = Math.min(y.length * Y + 8, 296), T = Math.max(0, Math.floor(p / Y) - 4), E = Math.min(y.length, Math.ceil((p + w) / Y) + 4), D = i ? e.value.size === 0 : e.value === null;
699
+ return (0, o.createPortal)(/* @__PURE__ */ (0, I.jsxs)("div", {
700
+ ref: h,
701
+ className: "rp-lb",
702
+ role: "presentation",
703
+ children: [
704
+ /* @__PURE__ */ (0, I.jsxs)("div", {
705
+ className: "rp-lb-s",
706
+ children: [
707
+ /* @__PURE__ */ (0, I.jsx)(R, { name: "search" }),
708
+ /* @__PURE__ */ (0, I.jsx)("input", {
709
+ autoFocus: !0,
710
+ value: l,
711
+ onChange: (e) => u(e.target.value),
712
+ onKeyDown: C,
713
+ placeholder: e.placeholder ?? "Search",
714
+ "aria-label": e.placeholder ?? e.label,
715
+ role: "combobox",
716
+ "aria-expanded": "true",
717
+ "aria-controls": _,
718
+ "aria-activedescendant": y[d] ? `${_}-${d}` : void 0,
719
+ "aria-autocomplete": "list"
720
+ }),
721
+ /* @__PURE__ */ (0, I.jsx)("kbd", { children: "Esc" })
722
+ ]
723
+ }),
724
+ y.length ? /* @__PURE__ */ (0, I.jsx)("div", {
725
+ ref: g,
726
+ id: _,
727
+ className: "rp-lb-l",
728
+ role: "listbox",
729
+ "aria-multiselectable": i || void 0,
730
+ "aria-label": e.label,
731
+ style: { height: w },
732
+ onScroll: (e) => m(e.currentTarget.scrollTop),
733
+ children: /* @__PURE__ */ (0, I.jsx)("div", {
734
+ style: {
735
+ height: y.length * Y,
736
+ position: "relative"
737
+ },
738
+ children: y.slice(T, E).map((e, t) => {
739
+ let n = T + t, a = { top: n * Y + 4 }, o = `rp-lb-r${n === d ? " active" : ""}`;
740
+ if (e.kind === "group") {
741
+ let t = e.members.filter((e) => v(e)).length;
742
+ return /* @__PURE__ */ (0, I.jsxs)("div", {
743
+ id: `${_}-${n}`,
744
+ role: "option",
745
+ "aria-selected": i ? t === e.members.length : v(e.id),
746
+ className: `${o} grp`,
747
+ style: a,
748
+ onPointerEnter: () => f(n),
749
+ onClick: () => b(e),
750
+ children: [
751
+ i ? /* @__PURE__ */ (0, I.jsx)("span", {
752
+ className: `box${t && t < e.members.length ? " part" : ""}`,
753
+ children: t === e.members.length ? /* @__PURE__ */ (0, I.jsx)(R, {
754
+ name: "check",
755
+ size: 12
756
+ }) : t ? "–" : null
757
+ }) : /* @__PURE__ */ (0, I.jsx)("span", { className: "ck" }),
758
+ /* @__PURE__ */ (0, I.jsx)(R, {
759
+ name: "users",
760
+ size: 14
761
+ }),
762
+ /* @__PURE__ */ (0, I.jsx)("span", {
763
+ className: "nm",
764
+ children: e.label
765
+ }),
766
+ /* @__PURE__ */ (0, I.jsx)("span", {
767
+ className: "mt",
768
+ children: e.members.length
769
+ })
770
+ ]
771
+ }, `g:${e.id}`);
772
+ }
773
+ let s = e.kind === "all" ? D : v(e.option.id), c = e.kind === "all" ? r.label : e.option.label, u = e.kind === "all" ? r.meta : e.option.meta;
774
+ return /* @__PURE__ */ (0, I.jsxs)("div", {
775
+ id: `${_}-${n}`,
776
+ role: "option",
777
+ "aria-selected": s,
778
+ className: `${o} opt`,
779
+ style: a,
780
+ onPointerEnter: () => f(n),
781
+ onClick: () => b(e),
782
+ children: [
783
+ i ? /* @__PURE__ */ (0, I.jsx)("span", {
784
+ className: "box",
785
+ children: s ? /* @__PURE__ */ (0, I.jsx)(R, {
786
+ name: "check",
787
+ size: 12
788
+ }) : null
789
+ }) : /* @__PURE__ */ (0, I.jsx)("span", {
790
+ className: "ck",
791
+ children: s ? /* @__PURE__ */ (0, I.jsx)(R, {
792
+ name: "check",
793
+ size: 14
794
+ }) : null
795
+ }),
796
+ e.kind === "option" && e.option.tone !== void 0 && /* @__PURE__ */ (0, I.jsx)(z, { tone: e.option.tone }),
797
+ /* @__PURE__ */ (0, I.jsx)("span", {
798
+ className: "nm",
799
+ children: /* @__PURE__ */ (0, I.jsx)(B, {
800
+ text: c,
801
+ query: l
802
+ })
803
+ }),
804
+ u && /* @__PURE__ */ (0, I.jsx)("span", {
805
+ className: "mt",
806
+ children: u
807
+ })
808
+ ]
809
+ }, e.kind === "all" ? "all" : e.option.id);
810
+ })
811
+ })
812
+ }) : /* @__PURE__ */ (0, I.jsxs)("div", {
813
+ className: "rp-lb-e",
814
+ children: [
815
+ "Nothing matches “",
816
+ l,
817
+ "”"
818
+ ]
819
+ }),
820
+ i && /* @__PURE__ */ (0, I.jsxs)("div", {
821
+ className: "rp-lb-f",
822
+ children: [/* @__PURE__ */ (0, I.jsx)("span", { children: e.value.size ? `${e.value.size} of ${t.length} selected` : `All ${t.length} selected` }), /* @__PURE__ */ (0, I.jsxs)("span", {
823
+ className: "end",
824
+ children: [/* @__PURE__ */ (0, I.jsx)("button", {
825
+ type: "button",
826
+ className: "rp-btn sm",
827
+ onClick: () => e.onChange(/* @__PURE__ */ new Set()),
828
+ children: "Clear"
829
+ }), /* @__PURE__ */ (0, I.jsx)("button", {
830
+ type: "button",
831
+ className: "rp-btn sm framed",
832
+ onClick: () => c(!0),
833
+ children: "Done"
834
+ })]
835
+ })]
836
+ })
837
+ ]
838
+ }), a.closest(".agent-record") ?? document.body);
839
+ }
840
+ function Q(e, t = () => !0, n = (e) => e.tokens === null ? "—" : j(e.tokens)) {
841
+ return e.tree.filter(t).map((t) => ({
842
+ id: t.id,
843
+ label: t.name,
844
+ find: t.node.label,
845
+ tone: t.state.tone,
846
+ meta: n(t),
847
+ group: e.teams.length && t.team && t.team !== t.id ? t.team : null
848
+ }));
849
+ }
850
+ var $ = (e) => e.teams.length ? e.teams.map((e) => ({
851
+ id: e.id,
852
+ label: e.label
853
+ })) : void 0;
854
+ function ee(e, t, n, r = 6) {
855
+ let [i, a] = (0, s.useState)({
856
+ top: 0,
857
+ height: 800,
858
+ width: 0
859
+ });
860
+ (0, s.useEffect)(() => {
861
+ let t = e.current;
862
+ if (!t) return;
863
+ let n = 0, r = () => {
864
+ n = 0, a({
865
+ top: t.scrollTop,
866
+ height: t.clientHeight || 800,
867
+ width: t.clientWidth
868
+ });
869
+ }, i = () => {
870
+ n ||= requestAnimationFrame(r);
871
+ };
872
+ r(), t.addEventListener("scroll", i, { passive: !0 });
873
+ let o = new ResizeObserver(i);
874
+ return o.observe(t), () => {
875
+ cancelAnimationFrame(n), t.removeEventListener("scroll", i), o.disconnect();
876
+ };
877
+ }, [e]);
878
+ let o = Math.max(0, Math.floor(i.top / n) - r), c = Math.min(t, Math.ceil((i.top + i.height) / n) + r);
879
+ return {
880
+ first: o,
881
+ last: c,
882
+ before: o * n,
883
+ after: Math.max(0, (t - c) * n),
884
+ width: i.width
885
+ };
886
+ }
887
+ var te = () => l("(max-width: 720px)");
888
+ //#endregion
889
+ export { y as C, T as D, w as E, M as O, D as S, C as T, P as _, R as a, A as b, q as c, H as d, te as f, v as g, F as h, B as i, l as k, $ as l, j as m, K as n, X as o, ee as p, U as r, z as s, J as t, Q as u, x as v, d as w, E as x, S as y };