@tangle-network/sandbox-cli 0.21.64 → 0.21.66

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 +32 -4
  2. package/SKILL.md +37 -5
  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 +14 -13
  98. package/dist/graph-viewer/Analytics-DFWW8Phh.js +0 -938
  99. package/dist/graph-viewer/Checks-qgqV4xgV.js +0 -155
  100. package/dist/graph-viewer/Conversations-CGB45kpj.js +0 -545
  101. package/dist/graph-viewer/LiveRun-C21wUKAY.js +0 -210
  102. package/dist/graph-viewer/Overview-BjeLsA2I.js +0 -506
  103. package/dist/graph-viewer/RunPage-CkkcBEUe.js +0 -258
  104. package/dist/graph-viewer/Timeline-C2Xolk0t.js +0 -293
  105. package/dist/graph-viewer/Today-BVVDtSVN.js +0 -660
  106. package/dist/graph-viewer/Topology-DO5XX8e4.js +0 -545
  107. package/dist/graph-viewer/Traces-BhMxjNgw.js +0 -259
  108. package/dist/graph-viewer/part-events-BrLrg_EV.js +0 -276
  109. package/dist/graph-viewer/record-part-CZal_IMH.js +0 -1408
  110. package/dist/graph-viewer/ui-D8QZRsC3.js +0 -938
  111. package/dist/graph-viewer/viewer/Analytics-DD__nbLm.js +0 -939
  112. package/dist/graph-viewer/viewer/Checks-Ds5M7eAW.js +0 -156
  113. package/dist/graph-viewer/viewer/Conversations-C1n0EBBd.js +0 -819
  114. package/dist/graph-viewer/viewer/Files-Cjr7NMU_.js +0 -448
  115. package/dist/graph-viewer/viewer/LiveRun-uPTkPSjo.js +0 -6772
  116. package/dist/graph-viewer/viewer/Overview-4Umk14_2.js +0 -507
  117. package/dist/graph-viewer/viewer/RunPage-DZlBW7Va.js +0 -257
  118. package/dist/graph-viewer/viewer/Timeline-BnK6-yBR.js +0 -294
  119. package/dist/graph-viewer/viewer/Today-a_-oNigi.js +0 -660
  120. package/dist/graph-viewer/viewer/Topology-CQPCLQT6.js +0 -546
  121. package/dist/graph-viewer/viewer/Traces-C0IGk0L4.js +0 -259
  122. package/dist/graph-viewer/viewer/WorkflowGraph-DZ3xejKE-jRXKeSrg.js +0 -1559
  123. package/dist/graph-viewer/viewer/agent-record-Dw772ROs.css +0 -2
  124. package/dist/graph-viewer/viewer/agent-timeline-Cs9Qbpvo.js +0 -1798
  125. package/dist/graph-viewer/viewer/dist-C1-7EfoW.js +0 -488
  126. package/dist/graph-viewer/viewer/file-text-m7a3piQF.js +0 -47
  127. package/dist/graph-viewer/viewer/jsx-runtime-DQWyJOhv.js +0 -2136
  128. package/dist/graph-viewer/viewer/lazy-pages-BowaGsg-.js +0 -20
  129. package/dist/graph-viewer/viewer/model-brand-bTcMjQtB-fagiBQam.js +0 -723
  130. package/dist/graph-viewer/viewer/popover-CvOAjlnk.js +0 -5329
  131. package/dist/graph-viewer/viewer/react-CY3IbSNO.js +0 -4262
  132. package/dist/graph-viewer/viewer/record-part-D3_Anfpe.js +0 -1329
  133. package/dist/graph-viewer/viewer/terminal-83J_I4Ne.js +0 -52
  134. package/dist/graph-viewer/viewer/ui-C9b1rIUH.js +0 -938
  135. package/dist/graph-viewer/viewer/workspace-CekmOBs3.js +0 -25100
  136. package/dist/graph-viewer/viewer/x-DOc2URqZ.js +0 -56
@@ -1,1408 +0,0 @@
1
- import { l as e, p as t } from "./data-BJmP7F1M.js";
2
- import { useCallback as n, useEffect as r, useLayoutEffect as i, useMemo as a, useRef as o, useState as s } from "react";
3
- import { Fragment as c, jsx as l, jsxs as u } from "react/jsx-runtime";
4
- import d from "react-markdown";
5
- import f from "remark-gfm";
6
- import { AgentTimelineColumn as p, AgentTimelineStep as m, agentTimelineStepKind as h } from "@tangle-network/ui/chat";
7
- import { InlineThinkingItem as g, RunRowShell as _ } from "@tangle-network/ui/run";
8
- import { getToolDisplayMetadata as v } from "@tangle-network/ui/utils";
9
- //#region src/viewer/model.ts
10
- var y = (e) => Date.parse(e);
11
- function b(e, t = !1) {
12
- let n = new Date(e);
13
- if (!Number.isFinite(n.valueOf())) return "Unknown time";
14
- let r = n.toISOString();
15
- return `${t ? r.slice(0, 19).replace("T", " ") : r.slice(11, 19)} UTC`;
16
- }
17
- var x = (e) => e.replace(/\s+/g, " ").trim(), S = /\/(?:home|Users)\/[^/\s"'`]+(?:\/\.cache\/disco\/host\/[^/\s"'`]+(?:\/sessions\/[^/\s"'`]+)?)?(\/?)/g;
18
- function C(e) {
19
- return !e || !(e.includes("/home/") || e.includes("/Users/")) ? e : e.replace(S, (e, t, n, r) => {
20
- if (!e.includes("/.cache/disco/host/")) return t ? "~/" : "~";
21
- let i = r[n + e.length];
22
- return t && i !== void 0 && !/[\s"'`)]/.test(i) ? "" : "./";
23
- });
24
- }
25
- function w(e) {
26
- let t = e.detail, n = C(t.publicText), r = C(t.reasoning), i = t.publicToolCalls?.map((e) => e.input && C(e.input) !== e.input ? {
27
- ...e,
28
- input: C(e.input)
29
- } : e);
30
- return n === t.publicText && r === t.reasoning && i?.every((e, n) => e === t.publicToolCalls[n]) !== !1 ? e : {
31
- ...e,
32
- detail: {
33
- ...t,
34
- ...n === void 0 ? {} : { publicText: n },
35
- ...r === void 0 ? {} : { reasoning: r },
36
- ...i ? { publicToolCalls: i } : {}
37
- }
38
- };
39
- }
40
- var T = (e) => new Intl.NumberFormat("en-US", {
41
- notation: "compact",
42
- maximumFractionDigits: 1
43
- }).format(e), E = (e) => e < 1e3 ? `${Math.round(e)} ms` : e < 6e4 ? `${(e / 1e3).toFixed(1)} s` : `${(e / 6e4).toFixed(1)} min`, D = (e) => e?.role ?? (e?.kind === "session" ? "Session" : e?.kind === "finding" ? "Finding" : "Agent"), O = (e) => e.detail.publicText ?? e.detail.recordedClaim ?? "", k = (e, t) => JSON.stringify([e, t]);
44
- function A(e) {
45
- let t = e.detail.publicToolCalls ?? [], n = new Map(t.map((e) => [e.id, e]));
46
- return [.../* @__PURE__ */ new Set([...e.detail.toolCallIds ?? [], ...t.map((e) => e.id)])].map((t) => n.get(t) ?? {
47
- id: t,
48
- name: e.detail.toolNames?.length === 1 ? e.detail.toolNames[0] : "Tool call"
49
- });
50
- }
51
- var j = (e) => e.replace(/^[a-z0-9][\w.-]*-\d{8}[a-z]?:/i, "");
52
- function M(e) {
53
- if (e.input === void 0) return "args not captured";
54
- try {
55
- let t = JSON.parse(e.input);
56
- if (t && typeof t == "object" && !Array.isArray(t)) {
57
- let e = t;
58
- for (let t of [
59
- "command",
60
- "cmd",
61
- "filePath",
62
- "file_path",
63
- "path",
64
- "query",
65
- "question",
66
- "pattern",
67
- "url",
68
- "pageId",
69
- "title",
70
- "task",
71
- "prompt",
72
- "message"
73
- ]) if (typeof e[t] == "string" && e[t]) return x(j(e[t]));
74
- let n = Object.values(e).filter((e) => [
75
- "string",
76
- "number",
77
- "boolean"
78
- ].includes(typeof e));
79
- if (n.length) return x(n.map((e) => j(String(e))).join(" · "));
80
- }
81
- } catch {}
82
- return x(e.input);
83
- }
84
- function N(e) {
85
- let t = new Map(e.nodes.map((e) => [e.id, e])), n = (e) => t.get(e)?.agentId ?? e, r = e.nodes.filter((e) => e.kind !== "session" || !e.agentId), i = e.events.map(w).sort((e, t) => y(e.at) - y(t.at)), a = new Map(i.map((e) => [e.id, e])), o = new Map(e.events.map((e, t) => [e.id, t])), s = /* @__PURE__ */ new Map(), c = /* @__PURE__ */ new Map(), l = /* @__PURE__ */ new Map();
86
- for (let e of i) {
87
- let t = n(e.node), r = s.get(t) ?? [];
88
- r.push(e), s.set(t, r);
89
- for (let t of A(e)) {
90
- let n = k(e.node, t.id), r = l.get(n) ?? [];
91
- r.push({
92
- event: e,
93
- call: t
94
- }), l.set(n, r);
95
- }
96
- if (e.detail.toolCallId !== void 0) {
97
- let t = k(e.node, e.detail.toolCallId), n = c.get(t) ?? [];
98
- n.push(e), c.set(t, n);
99
- }
100
- }
101
- let u = i.map((e) => y(e.at)), d = u[0] ?? 0;
102
- return {
103
- nodes: t,
104
- canonical: n,
105
- actors: r,
106
- events: i,
107
- byEvent: a,
108
- recordedOrder: o,
109
- byActor: s,
110
- calls: l,
111
- results: c,
112
- start: d,
113
- end: i.reduce((e, t) => Math.max(e, t.end ? y(t.end) : y(t.at)), u.at(-1) ?? d)
114
- };
115
- }
116
- function P(e, t) {
117
- return (e.byActor.get(t) ?? []).some((e) => typeof e.detail.costListUsd == "number" || Object.values(e.detail.usage ?? {}).some((e) => typeof e == "number" && e > 0));
118
- }
119
- function F(e, t, n) {
120
- if (!e?.status && n) return n === "running" ? "working" : n.replaceAll("-", " ");
121
- let r = e?.status ?? "no terminal state recorded";
122
- if (t) return r;
123
- let i = e?.capture?.status;
124
- return `${r} · no usage recorded${i === "absent" ? "; capture missing" : i === "lossy" ? "; capture partial" : ""}`;
125
- }
126
- function I(e, t, n, r) {
127
- return (r === "all" || r === "prompts" && (e.detail.promptKind === "initial" || e.detail.promptKind === "steering") || e.category === r || r === "findings" && (e.kind === "finding-record" || e.detail.recordedClaim !== void 0)) && (!n || JSON.stringify({
128
- label: e.label,
129
- node: t.nodes.get(t.canonical(e.node)),
130
- detail: e.detail
131
- }).toLowerCase().includes(n));
132
- }
133
- function L(e, t, n) {
134
- let r = n.nodes.get(e.node);
135
- return {
136
- ...e.source,
137
- runId: t.runId,
138
- at: e.at,
139
- observedNodeId: e.node,
140
- agentId: r?.kind === "agent" ? r.id : r?.agentId ?? null,
141
- nativeSessionId: r?.nativeSessionId ?? null,
142
- joinBasis: r?.joinBasis ?? null,
143
- joinProof: r?.joinProof ?? null
144
- };
145
- }
146
- function R(e, t) {
147
- if (!e) return null;
148
- let n = [...new Set(t.nodes.filter((t) => t.agentId === e.id || t.id === e.id).map((e) => e.servedModel).filter((e) => !!e))];
149
- return n.length ? `${n.join(", ")} (served)` : e.model ? `${e.model} (declared; served model unknown)` : null;
150
- }
151
- function z(e, t, n) {
152
- let r = t.nodes.get(t.canonical(e.node)), i = e.detail.isError === !0 || e.detail.responseStatus === "error", a = e.detail.role ?? e.kind, o = e.label || a, s = [{
153
- kind: "header",
154
- value: `${r?.label ?? e.node} · ${b(e.at)}`,
155
- tone: "muted"
156
- }];
157
- if (y(e.at) > n) return s.push({
158
- kind: "note",
159
- value: "After the selected time. Select this event to advance."
160
- }), {
161
- title: o,
162
- category: a,
163
- tone: i ? "error" : "default",
164
- sections: s
165
- };
166
- e.detail.isError && s.push({
167
- kind: "status",
168
- value: "Tool error",
169
- tone: "error"
170
- }), e.detail.responseStatus === "error" && s.push({
171
- kind: "status",
172
- value: "Request failed",
173
- tone: "error"
174
- });
175
- let c = O(e);
176
- c && s.push({
177
- kind: "body",
178
- value: c.slice(0, 200) + (c.length > 200 ? "…" : "")
179
- });
180
- let l = A(e);
181
- for (let e of l.slice(0, 2)) s.push({
182
- kind: "body",
183
- label: e.name,
184
- value: M(e).slice(0, 160)
185
- });
186
- let u = e.detail.usage;
187
- if (u && !e.detail.usageScope) {
188
- let e = [];
189
- u.input !== void 0 && e.push(`↑ ${T(u.input)}`), u.output !== void 0 && e.push(`↓ ${T(u.output)}`), u.cacheRead !== void 0 && e.push(`⟳ ${T(u.cacheRead)}`), u.cacheWrite !== void 0 && e.push(`→ ${T(u.cacheWrite)}`), e.length && s.push({
190
- kind: "usage",
191
- value: e.join(" "),
192
- tone: "accent"
193
- });
194
- }
195
- let d = e.detail.durationMs;
196
- return typeof d == "number" && s.push({
197
- kind: "status",
198
- value: `⏱ ${d < 1e3 ? `${d}ms` : `${(d / 1e3).toFixed(1)}s`}`,
199
- tone: "muted"
200
- }), {
201
- title: o,
202
- category: a,
203
- tone: i ? "error" : "default",
204
- sections: s
205
- };
206
- }
207
- //#endregion
208
- //#region src/viewer/StructuredContent.tsx
209
- function B(e) {
210
- try {
211
- return JSON.parse(e);
212
- } catch {
213
- return e;
214
- }
215
- }
216
- function V({ text: e, resolveHref: t }) {
217
- return /* @__PURE__ */ l("div", {
218
- className: "activity-prose",
219
- children: /* @__PURE__ */ l(d, {
220
- skipHtml: !0,
221
- remarkPlugins: [f],
222
- components: {
223
- a: ({ href: e, children: n }) => {
224
- let r = /^https?:\/\//i.test(e ?? "") ? e : t?.(e ?? "");
225
- return r && (/^https?:\/\//i.test(r) || /^\/(?!\/)/.test(r)) ? /* @__PURE__ */ l("a", {
226
- href: r,
227
- target: "_blank",
228
- rel: "noreferrer",
229
- children: n
230
- }) : /* @__PURE__ */ l("span", { children: n });
231
- },
232
- img: ({ alt: e }) => /* @__PURE__ */ l("span", { children: e || "Image omitted" }),
233
- table: ({ children: e }) => /* @__PURE__ */ l("div", {
234
- className: "rr-table-scroll",
235
- children: /* @__PURE__ */ l("table", { children: e })
236
- })
237
- },
238
- children: e
239
- })
240
- });
241
- }
242
- function H({ value: e, depth: t = 0, field: n }) {
243
- let [r, i] = s(!1);
244
- if (e == null) return /* @__PURE__ */ l("span", {
245
- className: "small",
246
- children: "Not supplied"
247
- });
248
- if (typeof e == "string") {
249
- if (n && /^(command|cmd|code|script|stdout|stderr)$/i.test(n)) return /* @__PURE__ */ l("pre", {
250
- className: "activity-code",
251
- children: /* @__PURE__ */ l("code", { children: e })
252
- });
253
- let r = t < 3 ? B(e) : e;
254
- return typeof r == "string" ? /* @__PURE__ */ l(V, { text: e }) : /* @__PURE__ */ l(H, {
255
- value: r,
256
- depth: t + 1
257
- });
258
- }
259
- if (typeof e != "object") return /* @__PURE__ */ l("span", { children: String(e) });
260
- if (Array.isArray(e)) {
261
- let n = r ? e : e.slice(0, 12);
262
- return /* @__PURE__ */ u("div", {
263
- className: "structured-items",
264
- children: [n.map((e, n) => /* @__PURE__ */ l("div", { children: /* @__PURE__ */ l(H, {
265
- value: e,
266
- depth: t + 1
267
- }) }, n)), e.length > n.length && /* @__PURE__ */ u("button", {
268
- className: "ui-button",
269
- onClick: () => i(!0),
270
- children: [
271
- "Show all ",
272
- e.length,
273
- " items"
274
- ]
275
- })]
276
- });
277
- }
278
- let a = e;
279
- if (a.type === "text" && typeof a.text == "string") return /* @__PURE__ */ l(H, {
280
- value: a.text,
281
- depth: t + 1
282
- });
283
- let o = Object.entries(a), c = r ? o : o.slice(0, 16);
284
- return t > 4 ? /* @__PURE__ */ u("details", { children: [/* @__PURE__ */ l("summary", { children: "Nested data" }), /* @__PURE__ */ l("pre", { children: JSON.stringify(e, null, 2) })] }) : /* @__PURE__ */ u("dl", {
285
- className: "structured-fields",
286
- children: [c.map(([e, n]) => /* @__PURE__ */ u("div", { children: [/* @__PURE__ */ l("dt", { children: e.replace(/([a-z])([A-Z])/g, "$1 $2").replaceAll("_", " ") }), /* @__PURE__ */ l("dd", { children: /* @__PURE__ */ l(H, {
287
- value: n,
288
- depth: t + 1,
289
- field: e
290
- }) })] }, e)), o.length > c.length && /* @__PURE__ */ u("button", {
291
- className: "ui-button",
292
- onClick: () => i(!0),
293
- children: [
294
- "Show all ",
295
- o.length,
296
- " fields"
297
- ]
298
- })]
299
- });
300
- }
301
- function U({ text: e, rawLabel: t = "Raw data" }) {
302
- let n = B(e);
303
- return /* @__PURE__ */ u("div", {
304
- className: "structured-content",
305
- children: [/* @__PURE__ */ l(H, { value: n }), typeof n != "string" && /* @__PURE__ */ u("details", {
306
- className: "raw-data",
307
- children: [/* @__PURE__ */ l("summary", { children: t }), /* @__PURE__ */ l("pre", { children: e })]
308
- })]
309
- });
310
- }
311
- var W = /^(command|cmd|code|script|content|new_string|old_string|patch|text|stdout|stderr|output|query|prompt)$/i;
312
- function G(e, t = [], n = []) {
313
- if (n.length >= 24 || t.length > 8) return n;
314
- if (typeof e == "string") (e.includes("\n") || e.length > 120 || W.test(t.at(-1) ?? "")) && n.push({
315
- path: t.join(" › ") || "text",
316
- text: e
317
- });
318
- else if (Array.isArray(e)) e.forEach((e, r) => G(e, [...t, String(r)], n));
319
- else if (e && typeof e == "object") for (let [r, i] of Object.entries(e)) G(i, [...t, r], n);
320
- return n;
321
- }
322
- function K({ text: e, rawLabel: t = "Raw data" }) {
323
- let n = B(e);
324
- if (typeof n != "object" || !n) return /* @__PURE__ */ l("pre", {
325
- className: "activity-code verbatim",
326
- "data-verbatim": !0,
327
- children: /* @__PURE__ */ l("code", { children: e })
328
- });
329
- let r = G(n);
330
- return /* @__PURE__ */ u("div", {
331
- className: "structured-content verbatim",
332
- "data-verbatim": !0,
333
- children: [r.map((e, t) => /* @__PURE__ */ u("section", {
334
- className: "verbatim-block",
335
- children: [/* @__PURE__ */ l("span", {
336
- className: "verbatim-path mono",
337
- children: e.path
338
- }), /* @__PURE__ */ l("pre", {
339
- className: "activity-code",
340
- children: /* @__PURE__ */ l("code", { children: e.text })
341
- })]
342
- }, t)), /* @__PURE__ */ u("details", {
343
- className: "raw-data",
344
- open: !r.length,
345
- children: [/* @__PURE__ */ l("summary", { children: t }), /* @__PURE__ */ l("pre", {
346
- className: "activity-code",
347
- children: /* @__PURE__ */ l("code", { children: JSON.stringify(n, null, 2) })
348
- })]
349
- })]
350
- });
351
- }
352
- //#endregion
353
- //#region src/viewer/VirtualList.tsx
354
- function ee({ items: e, keyOf: t, render: d, scroller: f, estimate: p = 96, overscan: m = 900, target: h }) {
355
- let g = o(/* @__PURE__ */ new Map()), [_, v] = s(0), [y, b] = s({
356
- top: 0,
357
- height: 900
358
- }), x = o(null), S = o(/* @__PURE__ */ new Map()), C = o(0), w = (e) => {
359
- !x.current && typeof ResizeObserver < "u" && (x.current = new ResizeObserver((e) => {
360
- let t = !1;
361
- for (let n of e) {
362
- let e = S.current.get(n.target);
363
- if (!e) continue;
364
- let r = Math.ceil(n.borderBoxSize?.[0]?.blockSize ?? n.target.offsetHeight);
365
- r > 0 && g.current.get(e) !== r && (g.current.set(e, r), t = !0);
366
- }
367
- t && !C.current && (C.current = requestAnimationFrame(() => {
368
- C.current = 0, v((e) => e + 1);
369
- }));
370
- })), x.current?.observe(e);
371
- };
372
- r(() => () => {
373
- cancelAnimationFrame(C.current), x.current?.disconnect(), x.current = null, S.current.clear();
374
- }, []), r(() => {
375
- let e = f.current;
376
- if (!e) return;
377
- let t = 0, n = () => {
378
- t = 0, b((t) => t.top === e.scrollTop && t.height === e.clientHeight ? t : {
379
- top: e.scrollTop,
380
- height: e.clientHeight
381
- });
382
- }, r = () => {
383
- t ||= requestAnimationFrame(n);
384
- };
385
- n(), e.addEventListener("scroll", r, { passive: !0 });
386
- let i = new ResizeObserver(r);
387
- return i.observe(e), () => {
388
- cancelAnimationFrame(t), e.removeEventListener("scroll", r), i.disconnect();
389
- };
390
- }, [f]);
391
- let T = a(() => {
392
- let n = new Float64Array(e.length + 1), r = typeof p == "function" ? p : () => p;
393
- for (let i = 0; i < e.length; i++) n[i + 1] = n[i] + (g.current.get(t(e[i])) ?? r(e[i]));
394
- return n;
395
- }, [
396
- e,
397
- t,
398
- p,
399
- _
400
- ]), E = (t) => {
401
- let n = 0, r = e.length;
402
- for (; n < r;) {
403
- let e = n + r >> 1;
404
- T[e + 1] <= t ? n = e + 1 : r = e;
405
- }
406
- return n;
407
- }, D = Math.max(0, E(y.top - m)), O = Math.min(e.length, E(y.top + y.height + m) + 1), k = n((n, r) => {
408
- let i = f.current, a = e.findIndex((e) => t(e) === n);
409
- if (!i || a < 0) return !1;
410
- let o = T[a], s = T[a + 1];
411
- return (r || o < i.scrollTop || s > i.scrollTop + i.clientHeight) && (i.scrollTop = Math.max(0, o - 8)), !0;
412
- }, [
413
- e,
414
- t,
415
- T,
416
- f
417
- ]), A = o(null), j = o(/* @__PURE__ */ new Map()), M = () => {
418
- let e = A.current;
419
- if (!e) return;
420
- if (performance.now() > e.until) {
421
- A.current = null;
422
- return;
423
- }
424
- if (!k(e.key, !0)) return;
425
- let t = j.current.get(e.key);
426
- if (t?.isConnected) {
427
- let e = t.getBoundingClientRect();
428
- (e.top < 72 || e.top > window.innerHeight - 96) && window.scrollBy({ top: e.top - 120 });
429
- }
430
- };
431
- i(() => {
432
- A.current = h ? {
433
- key: h,
434
- until: performance.now() + 2e3
435
- } : null, M();
436
- }, [h]), i(M, [
437
- _,
438
- y,
439
- e
440
- ]), r(() => {
441
- let e = f.current;
442
- if (!e) return;
443
- let t = () => {
444
- A.current = null;
445
- };
446
- return e.addEventListener("wheel", t, { passive: !0 }), e.addEventListener("touchstart", t, { passive: !0 }), e.addEventListener("pointerdown", t), e.addEventListener("keydown", t), () => {
447
- e.removeEventListener("wheel", t), e.removeEventListener("touchstart", t), e.removeEventListener("pointerdown", t), e.removeEventListener("keydown", t);
448
- };
449
- }, [f]);
450
- let N = (e) => (t) => {
451
- if (!t) {
452
- j.current.delete(e);
453
- return;
454
- }
455
- j.current.set(e, t);
456
- for (let [n, r] of S.current) r === e && n !== t && (x.current?.unobserve(n), S.current.delete(n));
457
- S.current.has(t) || (S.current.set(t, e), w(t));
458
- };
459
- return r(() => {
460
- for (let e of [...S.current.keys()]) e.isConnected || (x.current?.unobserve(e), S.current.delete(e));
461
- }), /* @__PURE__ */ u(c, { children: [
462
- /* @__PURE__ */ l("div", {
463
- style: { height: T[D] },
464
- "aria-hidden": "true"
465
- }),
466
- e.slice(D, O).map((e, n) => {
467
- let r = t(e);
468
- return /* @__PURE__ */ l("div", {
469
- ref: N(r),
470
- className: "virtual-row",
471
- children: d(e, D + n)
472
- }, r);
473
- }),
474
- /* @__PURE__ */ l("div", {
475
- style: { height: T[e.length] - T[O] },
476
- "aria-hidden": "true"
477
- })
478
- ] });
479
- }
480
- //#endregion
481
- //#region src/viewer/conversation-rows.ts
482
- function q(e) {
483
- let t = e.source, n = e.detail.nativeRecordId;
484
- return typeof n == "string" && n ? JSON.stringify([
485
- e.node,
486
- "native",
487
- n,
488
- e.kind,
489
- t?.item ?? null
490
- ]) : t?.path ? JSON.stringify([
491
- e.node,
492
- t.path,
493
- t.line ?? null,
494
- t.pointer ?? null,
495
- t.item ?? null
496
- ]) : e.id;
497
- }
498
- function J(e) {
499
- let t = /* @__PURE__ */ new Map(), n = /* @__PURE__ */ new Map();
500
- for (let r of e) {
501
- let e = q(r), i = t.get(e) ?? 0;
502
- t.set(e, i + 1), n.set(r.id, i ? `${e}#${i}` : e);
503
- }
504
- return n;
505
- }
506
- var Y = (e) => e === void 0 || /^\s*(\{\s*\}|null)?\s*$/.test(e);
507
- function X(e) {
508
- return e === void 0 ? "args not captured" : Y(e) ? "empty args" : null;
509
- }
510
- function te(e, t) {
511
- switch (e) {
512
- case "error": return "Error";
513
- case "returned": return "Returned";
514
- case "pending": return "Not returned";
515
- case "ambiguous": return "Ambiguous";
516
- default: return t ? "Pending" : "Result not captured";
517
- }
518
- }
519
- function ne(e) {
520
- let t = e.usage;
521
- return typeof t?.output == "number" && Number.isFinite(t.output) ? t.output : null;
522
- }
523
- function re(e) {
524
- let t = ne(e);
525
- return t !== null && t < 2e3;
526
- }
527
- function Z(e) {
528
- let t = (e) => typeof e == "number" && Number.isFinite(e) && e > 0 ? Math.floor(e) : 0, n = t(e.reasoningOmitted), r = t(e.reasoningRedacted), i = [];
529
- return n && i.push(n === 1 ? "thinking not returned by provider" : `${n} thinking blocks not returned by provider`), r && i.push(r === 1 ? "thinking redacted (encrypted)" : `${r} thinking blocks redacted (encrypted)`), i;
530
- }
531
- var ie = /await|wait|poll|sleep|observe|status/i;
532
- function ae(e) {
533
- if (typeof e != "string" || !e.trimStart().startsWith("{")) return !1;
534
- try {
535
- let t = JSON.parse(e);
536
- return !!t && typeof t == "object" && !Array.isArray(t) && t.pending === !0;
537
- } catch {
538
- return !1;
539
- }
540
- }
541
- var oe = (e) => (e ?? []).some((e) => !ae(e.detail.publicText));
542
- function se(e, t, n) {
543
- let r = e.detail;
544
- if (r.role !== "assistant" || e.category === "lifecycle" || r.lifecycle !== void 0 || r.publicText || r.recordedClaim || r.reasoning || r.responseStatus === "error" || r.contentOmitted || r.publicationNote || r.clip || Z(r).length || t.length !== 1) return null;
545
- let i = t[0];
546
- return i.clip || i.publicationNote || n(i.id) || !Y(i.input) && !ie.test(i.name) ? null : i;
547
- }
548
- function ce(e, t, n) {
549
- let r = e.detail;
550
- return r.role !== "assistant" || e.category === "lifecycle" || r.lifecycle !== void 0 || r.publicText || r.recordedClaim || r.reasoning || r.responseStatus === "error" || r.contentOmitted || r.publicationNote || r.clip || Z(r).length || !t.length || t.some((t) => t.input !== void 0 || t.clip || t.publicationNote || n(e, t.id)) ? null : t;
551
- }
552
- function le(e, { callsOf: t, captured: n, keyOf: r, min: i = 2 }) {
553
- let a = [], o = null, s = () => {
554
- if (o) {
555
- if (o.events.length >= i) a.push({
556
- kind: "hollow",
557
- key: `hollow:${r(o.events[0])}`,
558
- events: o.events,
559
- calls: [...o.calls.entries()].map(([e, t]) => ({
560
- name: e,
561
- count: t
562
- })),
563
- spanMs: o.spanMs
564
- });
565
- else for (let e of o.events) a.push({
566
- kind: "event",
567
- key: r(e),
568
- event: e
569
- });
570
- o = null;
571
- }
572
- };
573
- for (let r of e) {
574
- if (r.kind !== "event") {
575
- s(), a.push(r);
576
- continue;
577
- }
578
- let e = ce(r.event, t(r.event), n);
579
- if (!e) {
580
- s(), a.push(r);
581
- continue;
582
- }
583
- o ??= {
584
- events: [],
585
- calls: /* @__PURE__ */ new Map(),
586
- spanMs: 0
587
- }, o.events.push(r.event);
588
- for (let t of e) o.calls.set(t.name, (o.calls.get(t.name) ?? 0) + 1);
589
- }
590
- s();
591
- for (let e of a) {
592
- if (e.kind !== "hollow") continue;
593
- let t = e.events.map((e) => Date.parse(e.at)).filter(Number.isFinite);
594
- e.spanMs = t.length > 1 ? Math.max(...t) - Math.min(...t) : 0;
595
- }
596
- return a;
597
- }
598
- function ue(e) {
599
- let t = e.reduce((e, t) => e + t.count, 0), n = e.map((e) => e.count > 1 ? `${e.name} ×${e.count}` : e.name);
600
- return `${t} tool call${t === 1 ? "" : "s"} · ${n.join(" · ")}`;
601
- }
602
- function de(e, { callsOf: t, answered: n, keyOf: r, min: i = 2 }) {
603
- let a = [], o = null, s = () => {
604
- if (o) {
605
- if (o.events.length >= i) a.push({
606
- kind: "polls",
607
- key: `polls:${r(o.events[0])}`,
608
- name: o.name,
609
- input: o.input,
610
- events: o.events
611
- });
612
- else for (let e of o.events) a.push({
613
- kind: "event",
614
- key: r(e),
615
- event: e
616
- });
617
- o = null;
618
- }
619
- };
620
- for (let i of e) {
621
- let e = se(i, t(i), (e) => n(i, e));
622
- if (!e) {
623
- s(), a.push({
624
- kind: "event",
625
- key: r(i),
626
- event: i
627
- });
628
- continue;
629
- }
630
- let c = Y(e.input) ? "" : e.input.trim();
631
- o && (o.name !== e.name || o.args !== c) && s(), o ??= {
632
- name: e.name,
633
- args: c,
634
- input: e.input,
635
- events: []
636
- }, o.events.push(i);
637
- }
638
- return s(), a;
639
- }
640
- function fe(e) {
641
- let t = Math.max(0, Math.round(e / 1e3));
642
- if (t < 60) return `${t}s`;
643
- let n = Math.floor(t / 60);
644
- return n < 60 ? `${n}m ${t % 60}s` : `${Math.floor(n / 60)}h ${n % 60}m`;
645
- }
646
- function pe(e) {
647
- let t = e.map((e) => Date.parse(e.at)).filter(Number.isFinite), n = t.length ? Math.max(...t) - Math.min(...t) : 0, r = 0, i = 0;
648
- for (let t of e) {
649
- let e = t.detail.usage;
650
- if (!e || t.detail.usageScope !== void 0) continue;
651
- let n = [
652
- e.input,
653
- e.output,
654
- e.cacheRead,
655
- e.cacheWrite
656
- ].filter((e) => typeof e == "number");
657
- n.length && (i++, r += n.reduce((e, t) => e + t, 0));
658
- }
659
- let a = new Intl.NumberFormat("en-US", {
660
- notation: "compact",
661
- maximumFractionDigits: 1
662
- }), o = i ? i < e.length ? `~${a.format(r)} tokens (${i} of ${e.length} measured)` : `~${a.format(r)} tokens` : "tokens unknown";
663
- return {
664
- polls: e.length,
665
- spanMs: n,
666
- tokens: i ? r : null,
667
- measured: i,
668
- label: `waited ${fe(n)} · ${e.length} polls · ${o}`
669
- };
670
- }
671
- //#endregion
672
- //#region src/viewer/prompt-text.ts
673
- function me(e) {
674
- let t = e.indexOf("[user] "), n = e.startsWith("[system] ") && t >= 0 ? e.slice(t + 7).trim() : e.trim();
675
- if (!n.startsWith("{")) return n;
676
- try {
677
- let e = JSON.parse(n), t = ["objective", "instruction"].map((t) => e[t]).filter((e) => typeof e == "string" && e.trim().length > 0);
678
- return t.length ? t.join("\n\n") : n;
679
- } catch {
680
- return n;
681
- }
682
- }
683
- //#endregion
684
- //#region src/viewer/ConversationRowView.tsx
685
- var Q = (e) => e.category === "lifecycle" || e.detail.lifecycle !== void 0, he = (e) => new Intl.NumberFormat("en-US", {
686
- notation: "compact",
687
- maximumFractionDigits: 1
688
- }).format(e), ge = (e) => {
689
- let t = Math.round(e / 1e3);
690
- if (t < 60) return `${t} s`;
691
- let n = Math.floor(t / 60);
692
- return n < 60 ? `${n} m ${t % 60} s` : `${Math.floor(n / 60)} h ${n % 60} m`;
693
- };
694
- function $({ name: e }) {
695
- let t = e.toLowerCase(), n = /think|reason/.test(t) ? "M8 2.5a4 4 0 0 0-2.5 7.1V11h5V9.6A4 4 0 0 0 8 2.5M6 13.5h4" : /search|grep|find/.test(t) ? "M10 10l3.5 3.5M11 7a4 4 0 1 0-8 0 4 4 0 0 0 8 0" : /bash|shell|exec|run|command/.test(t) ? "M2 3h12v10H2zM4 6l2 2-2 2M8 10h4" : /await|wait|sleep|poll/.test(t) ? "M8 2.5a5.5 5.5 0 1 0 0 11 5.5 5.5 0 0 0 0-11M8 5v3l2 1.5" : "M10 8a2 2 0 1 0-4 0 2 2 0 0 0 4 0";
696
- return /* @__PURE__ */ l("svg", {
697
- viewBox: "0 0 16 16",
698
- width: "14",
699
- height: "14",
700
- "aria-hidden": "true",
701
- children: /* @__PURE__ */ l("path", {
702
- d: n,
703
- stroke: "currentColor",
704
- strokeWidth: "1.4",
705
- fill: "none",
706
- strokeLinecap: "round",
707
- strokeLinejoin: "round"
708
- })
709
- });
710
- }
711
- var _e = /* @__PURE__ */ new Set([
712
- "bash",
713
- "shell",
714
- "command",
715
- "execute",
716
- "write",
717
- "write_file",
718
- "create_file",
719
- "edit",
720
- "patch",
721
- "read",
722
- "read_file",
723
- "cat",
724
- "grep",
725
- "search",
726
- "rg",
727
- "glob",
728
- "find",
729
- "ls",
730
- "web_search",
731
- "web_fetch",
732
- "fetch",
733
- "task",
734
- "agent",
735
- "spawn"
736
- ]), ve = {
737
- bash: "bash",
738
- shell: "bash",
739
- command: "bash",
740
- execute: "bash",
741
- read: "read",
742
- read_file: "read",
743
- cat: "read",
744
- write: "write",
745
- write_file: "write",
746
- create_file: "write",
747
- edit: "edit",
748
- patch: "edit",
749
- grep: "grep",
750
- search: "grep",
751
- rg: "grep",
752
- glob: "glob",
753
- find: "glob",
754
- ls: "list"
755
- }, ye = (e) => (e.startsWith("mcp__") && e.slice(e.lastIndexOf("__") + 2) || e).replace(/^agent-runtime-/, ""), be = (e) => {
756
- if (e !== void 0) try {
757
- let t = JSON.parse(e);
758
- return t && typeof t == "object" ? t : e;
759
- } catch {
760
- return e;
761
- }
762
- }, xe = (e) => {
763
- let t = e;
764
- try {
765
- let n = JSON.parse(e), r = typeof n?.error == "string" ? n.error : typeof n?.message == "string" ? n.message : void 0;
766
- r && (t = r);
767
- } catch {}
768
- return x(t.split("\n").find((e) => e.trim()) ?? "").slice(0, 200);
769
- };
770
- function Se(e, t, n, r, i, a) {
771
- let o = ye(t.name), s = n ? O(n) || n.detail.contentOmitted || "" : void 0, c = r === "error" ? "error" : r === "pending" || r === "missing" && a ? "running" : "completed", l = r === "ambiguous" || r === "missing" && !a ? te(r, a) : void 0, u = {
772
- type: "tool",
773
- id: e,
774
- tool: o,
775
- state: {
776
- status: c,
777
- input: be(t.input),
778
- ...s === void 0 ? {} : { output: s },
779
- ...c === "error" ? { error: xe(s ?? "") || "The call failed." } : {},
780
- ...i !== null && i >= 0 ? { time: {
781
- start: 0,
782
- end: i
783
- } } : {},
784
- ...l ? { metadata: { note: l } } : {}
785
- }
786
- }, d = _e.has(o.toLowerCase()), f = v(u), p = X(t.input) ?? (f.description || (d ? void 0 : M(t)));
787
- return {
788
- id: e,
789
- kind: "tool",
790
- part: u,
791
- call: {
792
- id: e,
793
- type: ve[o.toLowerCase()] ?? "unknown",
794
- label: d ? f.title : o.replaceAll("_", " "),
795
- status: c === "error" ? "error" : c === "running" ? "running" : "success",
796
- ...p ? { detail: p } : {},
797
- ...i !== null && i >= 0 ? { duration: i } : {}
798
- }
799
- };
800
- }
801
- var Ce = (e) => {
802
- let t = e.state.metadata?.note;
803
- return t ? /* @__PURE__ */ l("span", {
804
- className: "tool-note",
805
- children: t
806
- }) : null;
807
- }, we = (e) => e && typeof e == "object" && "bytes" in e ? e : void 0;
808
- function Te({ clip: e, open: t }) {
809
- return e ? /* @__PURE__ */ u("p", {
810
- className: "clip-note",
811
- children: [/* @__PURE__ */ u("span", { children: [new Intl.NumberFormat("en-US").format(e.bytes), " bytes, middle omitted."] }), e.sha256 && t ? /* @__PURE__ */ l("button", {
812
- type: "button",
813
- className: "link-button",
814
- "data-load-full": e.sha256,
815
- onClick: () => t(e.sha256),
816
- children: "Full output"
817
- }) : null]
818
- }) : null;
819
- }
820
- function Ee(e) {
821
- let t = pe(e.events), n = X(e.input) ?? x(e.input ?? "");
822
- return {
823
- id: e.key,
824
- kind: "custom",
825
- content: /* @__PURE__ */ l(_, {
826
- icon: /* @__PURE__ */ l($, { name: e.name }),
827
- title: ye(e.name),
828
- description: [t.label, n].filter(Boolean).join(" · "),
829
- descriptionMono: !0,
830
- children: /* @__PURE__ */ l("ol", {
831
- className: "poll-calls",
832
- children: e.events.map((e) => /* @__PURE__ */ u("li", {
833
- "data-message": e.id,
834
- children: [/* @__PURE__ */ l("time", {
835
- dateTime: e.at,
836
- children: b(e.at)
837
- }), /* @__PURE__ */ l("span", {
838
- className: "mono",
839
- children: X(A(e)[0]?.input) ?? x(A(e)[0]?.input ?? "")
840
- })]
841
- }, e.id))
842
- })
843
- })
844
- };
845
- }
846
- var De = (e) => ({
847
- id: e.key,
848
- kind: "custom",
849
- content: /* @__PURE__ */ l(_, {
850
- icon: /* @__PURE__ */ l($, { name: e.calls[0]?.name ?? "tool" }),
851
- title: ue(e.calls),
852
- description: "args not captured",
853
- durationMs: e.spanMs || void 0
854
- })
855
- });
856
- function Oe(e, t) {
857
- if (e.kind === "polls") return [Ee(e)];
858
- if (e.kind === "hollow") return [De(e)];
859
- let { index: n, cutoff: r, anchor: i, thinkingSpan: a, opened: o, paired: s, live: c } = t, d = e.event;
860
- if (Q(d)) {
861
- let e = O(d);
862
- return [{
863
- id: d.id,
864
- kind: "custom",
865
- content: /* @__PURE__ */ u("p", {
866
- className: `lifecycle-note${d.detail.isError ? " lifecycle-error" : ""}`,
867
- children: [/* @__PURE__ */ l("b", { children: d.label }), e && /* @__PURE__ */ l("span", { children: x(e).slice(0, 280) })]
868
- })
869
- }];
870
- }
871
- let f = O(d), p = A(d), m = typeof d.detail.reasoning == "string" ? d.detail.reasoning : "", h = Z(d.detail), v = d.detail.responseStatus === "error", b = d.detail.recordedClaim !== void 0, S = d.detail.toolCallId !== void 0 || d.detail.role === "toolResult";
872
- if (d.detail.role === "user" && f && !S) {
873
- let e = me(f), t = e.length > 280 && !o.has(`prompt:${i(d)}`);
874
- return [{
875
- id: d.id,
876
- kind: "message",
877
- role: "user",
878
- content: t ? `${e.slice(0, 280).trimEnd()}…` : e,
879
- timestamp: new Date(d.at)
880
- }];
881
- }
882
- let C = [];
883
- if (m && C.push({
884
- id: `${d.id}:reasoning`,
885
- kind: "custom",
886
- content: /* @__PURE__ */ l(g, {
887
- part: {
888
- type: "reasoning",
889
- text: m
890
- },
891
- autoCollapse: !1
892
- })
893
- }), h.length) {
894
- let e = ne(d.detail), t = a.get(d.id), n = e === null ? h.join(" · ") : `${t !== void 0 && t >= 1e3 ? `for ${ge(t)} · ` : ""}${he(e)} output tokens · ${h.join(" · ")}`;
895
- C.push({
896
- id: `${d.id}:thinking`,
897
- kind: "custom",
898
- content: /* @__PURE__ */ l("span", {
899
- "data-thinking-withheld": !0,
900
- children: /* @__PURE__ */ l(_, {
901
- icon: /* @__PURE__ */ l($, { name: "think" }),
902
- title: "Thought",
903
- description: n
904
- })
905
- })
906
- });
907
- }
908
- if (v) C.push({
909
- id: d.id,
910
- kind: "status",
911
- tone: "error",
912
- label: "The request failed",
913
- detail: f ? x(f).slice(0, 400) : "No assistant response is present in this record."
914
- });
915
- else if (b) C.push({
916
- id: d.id,
917
- kind: "status",
918
- tone: "info",
919
- label: "Recorded finding",
920
- detail: x(f).slice(0, 600)
921
- });
922
- else if (S) {
923
- let e = d.detail.toolCallId !== void 0 && (n.calls.get(k(d.node, d.detail.toolCallId))?.length ?? 0) > 1;
924
- C.push(Se(d.id, {
925
- id: d.id,
926
- name: d.label || "Tool result"
927
- }, d, e ? "ambiguous" : d.detail.isError ? "error" : "returned", null, c));
928
- } else f ? C.push({
929
- id: d.id,
930
- kind: "message",
931
- role: "assistant",
932
- content: f
933
- }) : !p.length && !m && !h.length && C.push({
934
- id: d.id,
935
- kind: "status",
936
- label: d.detail.contentOmitted ?? "No text body is present in this record."
937
- });
938
- let w = i(d);
939
- for (let e of p) {
940
- let t = s(d, e), i = t.filter((e) => y(e.at) <= r).at(-1), a = (n.calls.get(k(d.node, e.id))?.length ?? 0) > 1 ? "ambiguous" : i ? i.detail.isError ? "error" : "returned" : t.some((e) => y(e.at) > r) ? "pending" : "missing", o = (typeof i?.detail.durationMs == "number" ? i.detail.durationMs : null) ?? (i && i.detail.atBasis !== "carried" ? y(i.at) - y(d.at) : null);
941
- C.push(Se(`tool:${w}:${e.id}`, e, i, a, o, c));
942
- }
943
- return C;
944
- }
945
- var ke = (e) => e.length ? h(e[e.length - 1]) : void 0;
946
- function Ae({ row: e, items: t, previous: n, context: r }) {
947
- let { selected: i, opened: a, anchor: o, setOpen: s, flagMarks: c, opener: d, flags: f } = r, p = e.kind === "event" ? [e.event] : e.events, g = p[0], _ = t.map((e, r) => /* @__PURE__ */ l(m, {
948
- item: e,
949
- previous: r ? h(t[r - 1]) : n,
950
- renderToolActions: Ce
951
- }, e.id)), v = {
952
- className: [
953
- "chat-row",
954
- p.some((e) => e.id === i) && "selected",
955
- e.kind === "event" && f?.has(g.id) && "flagged"
956
- ].filter(Boolean).join(" "),
957
- "data-entry": g.id,
958
- title: b(g.at),
959
- ...e.kind === "polls" ? { "data-poll-group": e.events.length } : e.kind === "hollow" ? { "data-hollow-group": e.events.length } : {
960
- "data-message": g.id,
961
- "data-message-node": g.node
962
- }
963
- };
964
- if (e.kind !== "event" || Q(g)) return /* @__PURE__ */ u("div", {
965
- ...v,
966
- children: [_, e.kind === "event" && c(g)]
967
- });
968
- let y = O(g), x = g.detail.toolCallId !== void 0 || g.detail.role === "toolResult", S = we(g.detail.clip);
969
- if (g.detail.role === "user" && y && !x) {
970
- let e = `prompt:${o(g)}`, t = me(y).length > 280, n = t && !a.has(e);
971
- return /* @__PURE__ */ u("article", {
972
- ...v,
973
- children: [
974
- _,
975
- t && /* @__PURE__ */ l("p", {
976
- className: "ar-prompt-more",
977
- children: /* @__PURE__ */ l("button", {
978
- type: "button",
979
- className: "link-button",
980
- "data-open-key": e,
981
- "aria-expanded": !n,
982
- onClick: () => s(e, n),
983
- children: n ? "Full prompt" : "Shorter"
984
- })
985
- }),
986
- !n && /* @__PURE__ */ l(Te, {
987
- clip: S,
988
- open: d(g)
989
- }),
990
- c(g)
991
- ]
992
- });
993
- }
994
- let C = g.detail.recordedClaim !== void 0, w = [g.detail.publicationNote, C ? g.detail.assessment : void 0].filter((e) => !!e);
995
- return /* @__PURE__ */ u("article", {
996
- ...v,
997
- children: [
998
- _,
999
- y && !x && /* @__PURE__ */ l(Te, {
1000
- clip: A(g).length ? void 0 : S,
1001
- open: d(g)
1002
- }),
1003
- w.map((e) => /* @__PURE__ */ l("p", {
1004
- className: "publication-note",
1005
- children: e
1006
- }, e)),
1007
- c(g)
1008
- ]
1009
- });
1010
- }
1011
- //#endregion
1012
- //#region src/viewer/Conversation.tsx
1013
- function je({ index: e, actor: t, cutoff: d, query: f, category: m, selected: h, openSource: g, flags: _, onFlag: v, lifecycle: b = !1, live: x = !1, opening: S }) {
1014
- let [C, w] = s(() => {
1015
- let t = J(e.events);
1016
- return new Set(e.events.filter((e) => e.detail.promptKind === "initial").map((e) => `prompt:${t.get(e.id) ?? e.id}`));
1017
- }), T = o(null), E = a(() => J(e.events), [e]), D = n((e) => E.get(e.id) ?? e.id, [E]), j = (e) => g ? (t) => g(t, e) : void 0, M = (e, t) => w((n) => {
1018
- if (n.has(e) === t) return n;
1019
- let r = new Set(n);
1020
- return t ? r.add(e) : r.delete(e), r;
1021
- }), N = (t, n) => {
1022
- let r = k(t.node, n.id);
1023
- return e.calls.get(r)?.length === 1 ? e.results.get(r) ?? [] : [];
1024
- }, P = a(() => {
1025
- if (!h) return;
1026
- let t = e.byEvent.get(h);
1027
- if (t?.detail.toolCallId !== void 0) {
1028
- let n = e.calls.get(k(t.node, t.detail.toolCallId));
1029
- if (n?.length === 1) return n[0].event.id;
1030
- }
1031
- return h;
1032
- }, [h, e]), F = a(() => (e.byActor.get(t) ?? []).filter((t) => {
1033
- if (y(t.at) > d) return !1;
1034
- if (t.id === P) return !0;
1035
- if (Q(t)) return b && I(t, e, f, m);
1036
- if (t.detail.toolCallId !== void 0) {
1037
- let n = e.calls.get(k(t.node, t.detail.toolCallId));
1038
- if (n?.length === 1 && y(n[0].event.at) <= d) return !1;
1039
- }
1040
- let n = A(t);
1041
- return !(t.detail.role || O(t) || t.detail.reasoning || t.detail.responseStatus === "error" || n.length) || t.detail.role === "assistant" && !O(t) && !t.detail.reasoning && !n.length && t.detail.responseStatus !== "error" && !t.detail.contentOmitted && (!Z(t.detail).length || re(t.detail)) ? !1 : I(t, e, f, m) ? !0 : n.some((n) => {
1042
- let r = k(t.node, n.id);
1043
- return e.calls.get(r)?.length === 1 && (e.results.get(r) ?? []).some((t) => y(t.at) <= d && I(t, e, f, m));
1044
- });
1045
- }), [
1046
- e,
1047
- t,
1048
- d,
1049
- f,
1050
- m,
1051
- b,
1052
- P
1053
- ]), L = a(() => {
1054
- if (!S?.text || f || m !== "all" || F.some((e) => e.detail.role === "user")) return F;
1055
- let e = F[0]?.at ?? S.at;
1056
- return [{
1057
- id: `${t}:opening`,
1058
- node: t,
1059
- at: e < S.at ? e : S.at,
1060
- kind: "message",
1061
- category: "other",
1062
- label: "prompt",
1063
- detail: {
1064
- role: "user",
1065
- publicText: S.text,
1066
- promptKind: "initial"
1067
- }
1068
- }, ...F];
1069
- }, [
1070
- F,
1071
- S,
1072
- t,
1073
- f,
1074
- m
1075
- ]), R = a(() => le(de(L, {
1076
- callsOf: A,
1077
- answered: (t, n) => oe(e.results.get(k(t.node, n))),
1078
- keyOf: D
1079
- }), {
1080
- callsOf: A,
1081
- captured: (t, n) => (e.results.get(k(t.node, n)) ?? []).some((e) => O(e)),
1082
- keyOf: D
1083
- }), [
1084
- L,
1085
- e,
1086
- D
1087
- ]), z = a(() => {
1088
- let n = /* @__PURE__ */ new Map(), r = null;
1089
- for (let i of e.byActor.get(t) ?? []) {
1090
- let e = y(i.at);
1091
- r !== null && Number.isFinite(e) && Z(i.detail).length && n.set(i.id, Math.max(0, e - r)), Number.isFinite(e) && (r = e);
1092
- }
1093
- return n;
1094
- }, [e, t]), B = a(() => {
1095
- let e = /* @__PURE__ */ new Map();
1096
- for (let t of R) if (t.kind === "polls") for (let n of t.events) e.set(n.id, t.key);
1097
- else if (t.kind === "hollow") for (let n of t.events) e.set(n.id, t.key);
1098
- else e.set(t.event.id, t.key);
1099
- return e;
1100
- }, [R]), V = (e.byActor.get(t) ?? []).some((e) => !Q(e) && (e.detail.role || O(e) || A(e).length)), H = o(P);
1101
- H.current = P;
1102
- let U = o(!1);
1103
- i(() => {
1104
- U.current = x && !H.current, T.current && !H.current && (T.current.scrollTop = x ? T.current.scrollHeight : 0);
1105
- }, [t]), r(() => {
1106
- let e = T.current;
1107
- if (!e) return;
1108
- let t = () => {
1109
- U.current = e.scrollHeight - e.scrollTop - e.clientHeight < 24;
1110
- };
1111
- return e.addEventListener("scroll", t, { passive: !0 }), () => e.removeEventListener("scroll", t);
1112
- }, []), i(() => {
1113
- let e = T.current;
1114
- if (!e || !U.current) return;
1115
- e.scrollTop = e.scrollHeight;
1116
- let t = 0, n = requestAnimationFrame(function r() {
1117
- U.current && (e.scrollTop = e.scrollHeight, ++t < 20 && (n = requestAnimationFrame(r)));
1118
- });
1119
- return () => cancelAnimationFrame(n);
1120
- }, [R]), r(() => {
1121
- if (!h) return;
1122
- let t = e.byEvent.get(h);
1123
- if (!t) return;
1124
- let n = [`prompt:${D(t)}`, `reasoning:${D(t)}`];
1125
- if (t.detail.toolCallId !== void 0) for (let r of e.calls.get(k(t.node, t.detail.toolCallId)) ?? []) n.push(`tool:${D(r.event)}:${r.call.id}`, B.get(r.event.id) ?? "");
1126
- for (let e of A(t)) n.push(`tool:${D(t)}:${e.id}`);
1127
- let r = B.get(h);
1128
- r?.startsWith("polls:") && n.push(r), w((e) => /* @__PURE__ */ new Set([...e, ...n.filter(Boolean)]));
1129
- }, [h, e]);
1130
- let W = (e) => {
1131
- let t = _?.get(e.id);
1132
- return t?.length ? /* @__PURE__ */ l("span", {
1133
- className: "event-flags",
1134
- children: t.map((t) => /* @__PURE__ */ l("button", {
1135
- type: "button",
1136
- className: `event-flag polarity-${t.polarity}`,
1137
- title: t.title,
1138
- "data-flag": t.dimension,
1139
- onClick: () => v?.(t, e),
1140
- children: t.dimension
1141
- }, `${t.dimension}:${t.label}`))
1142
- }) : null;
1143
- }, G = n((e) => e.key, []), K = n((e) => e.kind === "polls" ? 36 : e.kind === "hollow" || Q(e.event) ? 26 : !O(e.event) && A(e.event).length ? 16 + 36 * A(e.event).length : 96, []), q = {
1144
- index: e,
1145
- cutoff: d,
1146
- selected: h,
1147
- opened: C,
1148
- anchor: D,
1149
- opener: j,
1150
- setOpen: M,
1151
- flagMarks: W,
1152
- paired: N,
1153
- thinkingSpan: z,
1154
- flags: _,
1155
- live: x
1156
- }, Y = a(() => R.map((e) => Oe(e, q)), [
1157
- R,
1158
- C,
1159
- d,
1160
- h,
1161
- x,
1162
- e,
1163
- z
1164
- ]);
1165
- return /* @__PURE__ */ l(c, { children: /* @__PURE__ */ u("div", {
1166
- className: "conversation-scroll",
1167
- "data-chat": !0,
1168
- ref: T,
1169
- tabIndex: 0,
1170
- "aria-label": "Scrollable retained conversation",
1171
- children: [!R.length && /* @__PURE__ */ l("p", {
1172
- className: "chat-empty",
1173
- children: f || m !== "all" ? "No messages match this filter." : V ? "No messages at the selected time." : "Conversation not retained. Its absence does not mean the agent did no work."
1174
- }), /* @__PURE__ */ l(p, {
1175
- className: "ar-chat",
1176
- children: /* @__PURE__ */ l(ee, {
1177
- items: R,
1178
- keyOf: G,
1179
- render: (e, t) => /* @__PURE__ */ l(Ae, {
1180
- row: e,
1181
- items: Y[t] ?? [],
1182
- previous: t ? ke(Y[t - 1] ?? []) : void 0,
1183
- context: q
1184
- }),
1185
- scroller: T,
1186
- target: P ? B.get(P) : void 0,
1187
- estimate: K
1188
- })
1189
- })]
1190
- }) });
1191
- }
1192
- //#endregion
1193
- //#region src/viewer/prompts.ts
1194
- function Me(e) {
1195
- let t = e.events.map((e) => ({
1196
- ...e,
1197
- detail: { ...e.detail }
1198
- }));
1199
- for (let n of e.nodes.filter((e) => e.kind === "agent")) {
1200
- let e = t.filter((e) => e.node === n.id), r = e.find((e) => e.detail.role === "assistant")?.at, i = e.filter((e) => e.detail.role === "user" && typeof e.detail.publicText == "string" && !e.detail.publicText.trimStart().startsWith("<task-notification>")), a = i.find((e) => e.detail.promptKind !== "steering" && (!r || e.at <= r));
1201
- if (a) a.detail.promptKind = "initial";
1202
- else if (n.assignment?.trim()) {
1203
- let r = n.start ?? e[0]?.at;
1204
- r && t.push({
1205
- id: `prompt:${n.id}`,
1206
- node: n.id,
1207
- at: r,
1208
- kind: "message",
1209
- category: "other",
1210
- label: "Prompt",
1211
- source: null,
1212
- detail: {
1213
- role: "user",
1214
- publicText: n.assignment,
1215
- promptKind: "initial",
1216
- promptReconstructed: !0,
1217
- promptSource: "node.assignment"
1218
- }
1219
- });
1220
- }
1221
- for (let e of i) e !== a && e.detail.promptKind !== "initial" && (e.detail.promptKind ??= "steering");
1222
- }
1223
- return t.sort((e, t) => e.at.localeCompare(t.at) || Number(t.detail.promptKind === "initial") - Number(e.detail.promptKind === "initial")), {
1224
- ...e,
1225
- events: t
1226
- };
1227
- }
1228
- //#endregion
1229
- //#region src/workspace/EventDetail.tsx
1230
- function Ne({ event: e, full: t, index: n, onClose: i, load: a }) {
1231
- let [o, c] = s({}), [d, f] = s({}), p = e.source;
1232
- r(() => {
1233
- t && a(t).then((e) => f({ text: e })).catch((e) => f({ error: e instanceof Error ? e.message : "Unavailable" }));
1234
- }, [t, a]);
1235
- let m = (e, t) => a(`${e}${t ? `?line=${t}` : ""}`);
1236
- return r(() => {
1237
- let e = (e) => {
1238
- e.key === "Escape" && i();
1239
- };
1240
- return window.addEventListener("keydown", e), () => window.removeEventListener("keydown", e);
1241
- }, [i]), /* @__PURE__ */ u("aside", {
1242
- className: "event-detail",
1243
- role: "dialog",
1244
- "aria-label": "Event details",
1245
- "data-event-detail": e.id,
1246
- children: [
1247
- /* @__PURE__ */ u("header", { children: [/* @__PURE__ */ u("div", { children: [/* @__PURE__ */ l("h3", { children: e.label }), /* @__PURE__ */ u("p", {
1248
- className: "faint mono",
1249
- children: [
1250
- b(e.at, !0),
1251
- " · ",
1252
- n.nodes.get(n.canonical(e.node))?.label ?? e.node,
1253
- " · ",
1254
- e.category
1255
- ]
1256
- })] }), /* @__PURE__ */ l("button", {
1257
- type: "button",
1258
- className: "ui-button",
1259
- onClick: i,
1260
- children: "Close"
1261
- })] }),
1262
- /* @__PURE__ */ l("p", {
1263
- className: "mono faint event-id",
1264
- children: e.id
1265
- }),
1266
- t ? /* @__PURE__ */ u("section", {
1267
- className: "event-full",
1268
- "data-full-output": d.text === void 0 ? void 0 : t,
1269
- children: [
1270
- /* @__PURE__ */ l("h4", { children: "Full output" }),
1271
- /* @__PURE__ */ u("p", {
1272
- className: "mono faint",
1273
- children: ["sha256 ", t]
1274
- }),
1275
- d.error && /* @__PURE__ */ l("p", {
1276
- role: "alert",
1277
- children: d.error
1278
- }),
1279
- d.text === void 0 && !d.error && /* @__PURE__ */ l("p", {
1280
- className: "faint",
1281
- children: "Loading…"
1282
- }),
1283
- d.text !== void 0 && /* @__PURE__ */ l(K, {
1284
- text: d.text,
1285
- rawLabel: "Original bytes"
1286
- })
1287
- ]
1288
- }) : O(e) && (e.detail.toolCallId !== void 0 || e.category === "lifecycle" ? /* @__PURE__ */ l(K, { text: O(e) }) : /* @__PURE__ */ l(U, { text: O(e) })),
1289
- /* @__PURE__ */ u("details", {
1290
- className: "raw-data",
1291
- open: !t,
1292
- children: [/* @__PURE__ */ l("summary", { children: "Recorded detail" }), /* @__PURE__ */ l("pre", { children: JSON.stringify(e.detail, null, 2) })]
1293
- }),
1294
- p?.path && /* @__PURE__ */ u("section", {
1295
- className: "event-source",
1296
- children: [
1297
- /* @__PURE__ */ l("h4", { children: "Source" }),
1298
- /* @__PURE__ */ u("p", {
1299
- className: "mono",
1300
- children: [
1301
- p.path,
1302
- p.line ? `:${p.line}` : "",
1303
- p.pointer ? `#${p.pointer}` : ""
1304
- ]
1305
- }),
1306
- p.sha256 && /* @__PURE__ */ u("p", {
1307
- className: "mono faint",
1308
- children: ["sha256 ", p.sha256]
1309
- }),
1310
- p.sha256 && p.line && o.text === void 0 && /* @__PURE__ */ l("button", {
1311
- type: "button",
1312
- className: "ui-button",
1313
- onClick: () => m(p.sha256, p.line).then((e) => c({ text: e })).catch((e) => c({ error: e instanceof Error ? e.message : "Unavailable" })),
1314
- children: "Original line"
1315
- }),
1316
- o.error && /* @__PURE__ */ l("p", {
1317
- role: "alert",
1318
- children: o.error
1319
- }),
1320
- o.text !== void 0 && /* @__PURE__ */ l(K, {
1321
- text: o.text,
1322
- rawLabel: "Original bytes"
1323
- })
1324
- ]
1325
- })
1326
- ]
1327
- });
1328
- }
1329
- //#endregion
1330
- //#region src/workspace/source-reader.ts
1331
- function Pe(e) {
1332
- return async (t) => {
1333
- let n = await fetch(`${e}/source/${t}`, { credentials: "same-origin" });
1334
- if (!n.ok) throw Error(n.status === 409 ? "The source no longer matches its recorded hash." : `Source unavailable (HTTP ${n.status})`);
1335
- return n.text();
1336
- };
1337
- }
1338
- //#endregion
1339
- //#region src/workspace/record-part.tsx
1340
- function Fe(n) {
1341
- let r = t(n, void 0, !0);
1342
- return {
1343
- ...a(() => {
1344
- if (!r.data) return {
1345
- record: null,
1346
- index: null,
1347
- stats: {},
1348
- error: void 0
1349
- };
1350
- try {
1351
- let t = Me(e(r.data)), n = r.data.nodeStats ?? {};
1352
- return {
1353
- record: t,
1354
- index: N(t),
1355
- stats: n,
1356
- error: void 0
1357
- };
1358
- } catch (e) {
1359
- return {
1360
- record: null,
1361
- index: null,
1362
- stats: {},
1363
- error: e instanceof Error ? e.message : "Invalid record"
1364
- };
1365
- }
1366
- }, [r.data]),
1367
- loading: r.loading,
1368
- fetchError: r.error,
1369
- pending: !!n && r.data === void 0 && !r.error
1370
- };
1371
- }
1372
- function Ie({ runUrl: e, version: t, index: n, actor: r, opening: i }) {
1373
- let a = Fe(`${e}/record?node=${encodeURIComponent(r)}${t}`);
1374
- return a.index ? /* @__PURE__ */ l(Le, {
1375
- runUrl: e,
1376
- index: a.index,
1377
- actor: r,
1378
- opening: i
1379
- }) : /* @__PURE__ */ l("p", {
1380
- className: "ws-status",
1381
- role: a.fetchError || a.error ? "alert" : "status",
1382
- children: a.fetchError || a.error ? `This agent's record is unavailable: ${a.fetchError ?? a.error}` : `Loading ${n.nodes.get(r)?.label ?? "the agent"}'s conversation…`
1383
- });
1384
- }
1385
- function Le({ runUrl: e, index: t, actor: n, opening: r }) {
1386
- let [i, o] = s(null), d = a(() => Pe(e), [e]);
1387
- return /* @__PURE__ */ u(c, { children: [/* @__PURE__ */ l(je, {
1388
- index: t,
1389
- actor: n,
1390
- cutoff: t.end,
1391
- query: "",
1392
- category: "all",
1393
- lifecycle: !1,
1394
- opening: r,
1395
- openSource: (e, t) => o({
1396
- event: t,
1397
- sha: e
1398
- })
1399
- }), i && /* @__PURE__ */ l(Ne, {
1400
- event: i.event,
1401
- full: i.sha,
1402
- index: t,
1403
- onClose: () => o(null),
1404
- load: d
1405
- }, `${i.event.id}:${i.sha ?? ""}`)] });
1406
- }
1407
- //#endregion
1408
- export { O as _, U as a, b, I as c, N as d, E as f, D as g, y as h, V as i, L as l, R as m, Fe as n, F as o, P as p, je as r, x as s, Ie as t, T as u, k as v, z as y };