@tangle-network/sandbox-cli 0.21.26 → 0.21.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/dist/graph-viewer/{Analytics-DocMpB6T.js → Analytics-DFWW8Phh.js} +260 -275
  2. package/dist/graph-viewer/Checks-qgqV4xgV.js +155 -0
  3. package/dist/graph-viewer/{Conversations-CISiWrR9.js → Conversations-CGB45kpj.js} +112 -80
  4. package/dist/graph-viewer/{Files-Dh8p_Fpw.js → Files-DtZhf0ii.js} +121 -106
  5. package/dist/graph-viewer/LiveRun-C21wUKAY.js +210 -0
  6. package/dist/graph-viewer/Overview-BjeLsA2I.js +506 -0
  7. package/dist/graph-viewer/{RunPage-nJwCsArn.js → RunPage-CkkcBEUe.js} +22 -22
  8. package/dist/graph-viewer/{Timeline-bPjhV3il.js → Timeline-C2Xolk0t.js} +84 -84
  9. package/dist/graph-viewer/{Today-pebCsPJ1.js → Today-BVVDtSVN.js} +65 -58
  10. package/dist/graph-viewer/Topology-DO5XX8e4.js +545 -0
  11. package/dist/graph-viewer/{Traces-C5x2UvJh.js → Traces-BhMxjNgw.js} +79 -52
  12. package/dist/graph-viewer/{WallPages-DSmRm2v3.js → WallPages-4d9QUZDq.js} +3 -3
  13. package/dist/graph-viewer/index.js +103 -102
  14. package/dist/graph-viewer/{lazy-pages-CpmkG5o2.js → lazy-pages-DM0cZM10.js} +4 -4
  15. package/dist/graph-viewer/{record-part-Cx9GDQeo.js → record-part-CZal_IMH.js} +382 -352
  16. package/dist/graph-viewer/report-viewer.js +7 -7
  17. package/dist/graph-viewer/styles.css +596 -284
  18. package/dist/graph-viewer/{ui-CEhDqce8.js → ui-D8QZRsC3.js} +143 -111
  19. package/dist/graph-viewer/viewer/{AgentGraphCanvas-D7jjAE6i-DecKyUGA.js → AgentGraphCanvas-CMdOlSlh-4EervjeC.js} +54 -48
  20. package/dist/graph-viewer/viewer/{Analytics-CtKucZjs.js → Analytics-DD__nbLm.js} +203 -218
  21. package/dist/graph-viewer/viewer/{AnswerStrip-DsI9aF-i.js → AnswerStrip-CGUyXuYH.js} +2 -2
  22. package/dist/graph-viewer/viewer/Checks-Ds5M7eAW.js +156 -0
  23. package/dist/graph-viewer/viewer/{Conversations-DQBCyko6.js → Conversations-C1n0EBBd.js} +124 -92
  24. package/dist/graph-viewer/viewer/{Files-B-g25gSO.js → Files-Cjr7NMU_.js} +63 -48
  25. package/dist/graph-viewer/viewer/{LiveRun-BMQnTpTZ.js → LiveRun-uPTkPSjo.js} +1223 -1164
  26. package/dist/graph-viewer/viewer/{Outputs-DXnN1wEQ.js → Outputs-CumGyjQo.js} +6 -6
  27. package/dist/graph-viewer/viewer/Overview-4Umk14_2.js +507 -0
  28. package/dist/graph-viewer/viewer/{RunPage-ChipoSdO.js → RunPage-DZlBW7Va.js} +28 -28
  29. package/dist/graph-viewer/viewer/{Scores-CjriXjf_.js → Scores-ZS16yk0n.js} +3 -3
  30. package/dist/graph-viewer/viewer/{Timeline-DzEzobA0.js → Timeline-BnK6-yBR.js} +24 -24
  31. package/dist/graph-viewer/viewer/{Today-DLHe_wTA.js → Today-a_-oNigi.js} +69 -62
  32. package/dist/graph-viewer/viewer/Topology-CQPCLQT6.js +546 -0
  33. package/dist/graph-viewer/viewer/{Traces-BWBulSPE.js → Traces-C0IGk0L4.js} +75 -48
  34. package/dist/graph-viewer/viewer/{WallPages-Crj-qPoK.js → WallPages-CzWpyIfp.js} +8 -8
  35. package/dist/graph-viewer/viewer/{WorkflowGraph-DYsP_Kcg-C0O7M5iH.js → WorkflowGraph-DZ3xejKE-jRXKeSrg.js} +6 -6
  36. package/dist/graph-viewer/viewer/{agent-timeline-C-UIhXgu.js → agent-timeline-Cs9Qbpvo.js} +437 -425
  37. package/dist/graph-viewer/viewer/{bot-Bivadvxn.js → bot-D6Nrej7Z.js} +1 -1
  38. package/dist/graph-viewer/viewer/{chevron-right-WW7tFY6B.js → chevron-right-D_5IKLxu.js} +1 -1
  39. package/dist/graph-viewer/viewer/{createLucideIcon-Z6KTw8ff.js → createLucideIcon-yH0cxLMy.js} +1 -1
  40. package/dist/graph-viewer/viewer/{data-azhapQrS.js → data-CkWfWr7i.js} +1 -1
  41. package/dist/graph-viewer/viewer/{dist-CyOc-K4O.js → dist-C1-7EfoW.js} +3 -3
  42. package/dist/graph-viewer/viewer/{file-text-B34N7Soo.js → file-text-m7a3piQF.js} +1 -1
  43. package/dist/graph-viewer/viewer/{final-output-Db2D9cMT.js → final-output-kwY11u9X.js} +1 -1
  44. package/dist/graph-viewer/viewer/{highlights-Bgg6O5ub.js → highlights-Btsi5OXl.js} +2 -2
  45. package/dist/graph-viewer/viewer/{jsx-runtime-BSzbUOFc.js → jsx-runtime-DQWyJOhv.js} +1 -1
  46. package/dist/graph-viewer/viewer/{lazy-pages-fgtpXQ00.js → lazy-pages-BowaGsg-.js} +6 -6
  47. package/dist/graph-viewer/viewer/{markdown-BpJEJUTW.js → markdown-CX_sVrXB.js} +17 -17
  48. package/dist/graph-viewer/viewer/{model-brand-bTcMjQtB-C9bHPsPk.js → model-brand-bTcMjQtB-fagiBQam.js} +3 -3
  49. package/dist/graph-viewer/viewer/{page-header-C6YCPkzJ.js → page-header-Brq611fd.js} +3 -3
  50. package/dist/graph-viewer/viewer/{popover-DrLB9iar.js → popover-CvOAjlnk.js} +4 -4
  51. package/dist/graph-viewer/viewer/{react-CisnW4fB.js → react-CY3IbSNO.js} +24 -24
  52. package/dist/graph-viewer/viewer/{react-dom-C5NDYQCD.js → react-dom-t1L4_-il.js} +1 -1
  53. package/dist/graph-viewer/viewer/{record-part-d0gKKrMI.js → record-part-D3_Anfpe.js} +455 -425
  54. package/dist/graph-viewer/viewer/{segmented-control-ChhLMa6h.js → segmented-control-BaJmvTNd.js} +39 -39
  55. package/dist/graph-viewer/viewer/{shiki-BwlTRTY6.js → shiki-Qnby7Sh6.js} +2 -2
  56. package/dist/graph-viewer/viewer/{stream-tokenizer-CaVb21TO.js → stream-tokenizer-CWtnjmRd.js} +1 -1
  57. package/dist/graph-viewer/viewer/{terminal-BxRacTx0.js → terminal-83J_I4Ne.js} +1 -1
  58. package/dist/graph-viewer/viewer/{themes-BxrCCwH5.js → themes-1i1fzpRk.js} +1 -1
  59. package/dist/graph-viewer/viewer/{ui-DZiGjPwl.js → ui-C9b1rIUH.js} +222 -190
  60. package/dist/graph-viewer/viewer/{workspace-DalRxssx.js → workspace-CekmOBs3.js} +76 -76
  61. package/dist/graph-viewer/viewer/{x-B_F8B4lq.js → x-DOc2URqZ.js} +1 -1
  62. package/dist/graph-viewer/workspace-viewer.js +103 -102
  63. package/package.json +9 -9
  64. package/dist/graph-viewer/Checks-CbnY4tuh.js +0 -113
  65. package/dist/graph-viewer/LiveRun-C-yKwkKs.js +0 -190
  66. package/dist/graph-viewer/Overview-BaXPdCFC.js +0 -477
  67. package/dist/graph-viewer/Topology-CyhuK6XW.js +0 -550
  68. package/dist/graph-viewer/viewer/Checks-DZTgeYlV.js +0 -114
  69. package/dist/graph-viewer/viewer/Overview-u7-8-rGx.js +0 -478
  70. package/dist/graph-viewer/viewer/Topology-Dsmuu27J.js +0 -551
@@ -1,69 +1,69 @@
1
1
  import { i as e } from "./rolldown-runtime-DArdT4gl.js";
2
- import { i as t, t as n } from "./jsx-runtime-BSzbUOFc.js";
3
- import { d as r, f as i } from "./markdown-BpJEJUTW.js";
4
- import { a, i as o, n as s, r as c, t as l } from "./agent-timeline-C-UIhXgu.js";
5
- import { l as u, p as d } from "./data-azhapQrS.js";
2
+ import { i as t, t as n } from "./jsx-runtime-DQWyJOhv.js";
3
+ import { d as r, f as i } from "./markdown-CX_sVrXB.js";
4
+ import { a, i as o, n as s, o as c, r as l, s as u } from "./agent-timeline-Cs9Qbpvo.js";
5
+ import { l as d, p as f } from "./data-CkWfWr7i.js";
6
6
  //#region src/viewer/StructuredContent.tsx
7
- var f = /* @__PURE__ */ e(t(), 1), p = n();
8
- function m(e) {
7
+ var p = /* @__PURE__ */ e(t(), 1), m = n();
8
+ function h(e) {
9
9
  try {
10
10
  return JSON.parse(e);
11
11
  } catch {
12
12
  return e;
13
13
  }
14
14
  }
15
- function h({ text: e, resolveHref: t }) {
16
- return /* @__PURE__ */ (0, p.jsx)("div", {
15
+ function g({ text: e, resolveHref: t }) {
16
+ return /* @__PURE__ */ (0, m.jsx)("div", {
17
17
  className: "activity-prose",
18
- children: /* @__PURE__ */ (0, p.jsx)(i, {
18
+ children: /* @__PURE__ */ (0, m.jsx)(i, {
19
19
  skipHtml: !0,
20
20
  remarkPlugins: [r],
21
21
  components: {
22
22
  a: ({ href: e, children: n }) => {
23
23
  let r = /^https?:\/\//i.test(e ?? "") ? e : t?.(e ?? "");
24
- return r && (/^https?:\/\//i.test(r) || /^\/(?!\/)/.test(r)) ? /* @__PURE__ */ (0, p.jsx)("a", {
24
+ return r && (/^https?:\/\//i.test(r) || /^\/(?!\/)/.test(r)) ? /* @__PURE__ */ (0, m.jsx)("a", {
25
25
  href: r,
26
26
  target: "_blank",
27
27
  rel: "noreferrer",
28
28
  children: n
29
- }) : /* @__PURE__ */ (0, p.jsx)("span", { children: n });
29
+ }) : /* @__PURE__ */ (0, m.jsx)("span", { children: n });
30
30
  },
31
- img: ({ alt: e }) => /* @__PURE__ */ (0, p.jsx)("span", { children: e || "Image omitted" }),
32
- table: ({ children: e }) => /* @__PURE__ */ (0, p.jsx)("div", {
31
+ img: ({ alt: e }) => /* @__PURE__ */ (0, m.jsx)("span", { children: e || "Image omitted" }),
32
+ table: ({ children: e }) => /* @__PURE__ */ (0, m.jsx)("div", {
33
33
  className: "rr-table-scroll",
34
- children: /* @__PURE__ */ (0, p.jsx)("table", { children: e })
34
+ children: /* @__PURE__ */ (0, m.jsx)("table", { children: e })
35
35
  })
36
36
  },
37
37
  children: e
38
38
  })
39
39
  });
40
40
  }
41
- function g({ value: e, depth: t = 0, field: n }) {
42
- let [r, i] = (0, f.useState)(!1);
43
- if (e == null) return /* @__PURE__ */ (0, p.jsx)("span", {
41
+ function _({ value: e, depth: t = 0, field: n }) {
42
+ let [r, i] = (0, p.useState)(!1);
43
+ if (e == null) return /* @__PURE__ */ (0, m.jsx)("span", {
44
44
  className: "small",
45
45
  children: "Not supplied"
46
46
  });
47
47
  if (typeof e == "string") {
48
- if (n && /^(command|cmd|code|script|stdout|stderr)$/i.test(n)) return /* @__PURE__ */ (0, p.jsx)("pre", {
48
+ if (n && /^(command|cmd|code|script|stdout|stderr)$/i.test(n)) return /* @__PURE__ */ (0, m.jsx)("pre", {
49
49
  className: "activity-code",
50
- children: /* @__PURE__ */ (0, p.jsx)("code", { children: e })
50
+ children: /* @__PURE__ */ (0, m.jsx)("code", { children: e })
51
51
  });
52
- let r = t < 3 ? m(e) : e;
53
- return typeof r == "string" ? /* @__PURE__ */ (0, p.jsx)(h, { text: e }) : /* @__PURE__ */ (0, p.jsx)(g, {
52
+ let r = t < 3 ? h(e) : e;
53
+ return typeof r == "string" ? /* @__PURE__ */ (0, m.jsx)(g, { text: e }) : /* @__PURE__ */ (0, m.jsx)(_, {
54
54
  value: r,
55
55
  depth: t + 1
56
56
  });
57
57
  }
58
- if (typeof e != "object") return /* @__PURE__ */ (0, p.jsx)("span", { children: String(e) });
58
+ if (typeof e != "object") return /* @__PURE__ */ (0, m.jsx)("span", { children: String(e) });
59
59
  if (Array.isArray(e)) {
60
60
  let n = r ? e : e.slice(0, 12);
61
- return /* @__PURE__ */ (0, p.jsxs)("div", {
61
+ return /* @__PURE__ */ (0, m.jsxs)("div", {
62
62
  className: "structured-items",
63
- children: [n.map((e, n) => /* @__PURE__ */ (0, p.jsx)("div", { children: /* @__PURE__ */ (0, p.jsx)(g, {
63
+ children: [n.map((e, n) => /* @__PURE__ */ (0, m.jsx)("div", { children: /* @__PURE__ */ (0, m.jsx)(_, {
64
64
  value: e,
65
65
  depth: t + 1
66
- }) }, n)), e.length > n.length && /* @__PURE__ */ (0, p.jsxs)("button", {
66
+ }) }, n)), e.length > n.length && /* @__PURE__ */ (0, m.jsxs)("button", {
67
67
  className: "ui-button",
68
68
  onClick: () => i(!0),
69
69
  children: [
@@ -75,18 +75,18 @@ function g({ value: e, depth: t = 0, field: n }) {
75
75
  });
76
76
  }
77
77
  let a = e;
78
- if (a.type === "text" && typeof a.text == "string") return /* @__PURE__ */ (0, p.jsx)(g, {
78
+ if (a.type === "text" && typeof a.text == "string") return /* @__PURE__ */ (0, m.jsx)(_, {
79
79
  value: a.text,
80
80
  depth: t + 1
81
81
  });
82
82
  let o = Object.entries(a), s = r ? o : o.slice(0, 16);
83
- return t > 4 ? /* @__PURE__ */ (0, p.jsxs)("details", { children: [/* @__PURE__ */ (0, p.jsx)("summary", { children: "Nested data" }), /* @__PURE__ */ (0, p.jsx)("pre", { children: JSON.stringify(e, null, 2) })] }) : /* @__PURE__ */ (0, p.jsxs)("dl", {
83
+ return t > 4 ? /* @__PURE__ */ (0, m.jsxs)("details", { children: [/* @__PURE__ */ (0, m.jsx)("summary", { children: "Nested data" }), /* @__PURE__ */ (0, m.jsx)("pre", { children: JSON.stringify(e, null, 2) })] }) : /* @__PURE__ */ (0, m.jsxs)("dl", {
84
84
  className: "structured-fields",
85
- children: [s.map(([e, n]) => /* @__PURE__ */ (0, p.jsxs)("div", { children: [/* @__PURE__ */ (0, p.jsx)("dt", { children: e.replace(/([a-z])([A-Z])/g, "$1 $2").replaceAll("_", " ") }), /* @__PURE__ */ (0, p.jsx)("dd", { children: /* @__PURE__ */ (0, p.jsx)(g, {
85
+ children: [s.map(([e, n]) => /* @__PURE__ */ (0, m.jsxs)("div", { children: [/* @__PURE__ */ (0, m.jsx)("dt", { children: e.replace(/([a-z])([A-Z])/g, "$1 $2").replaceAll("_", " ") }), /* @__PURE__ */ (0, m.jsx)("dd", { children: /* @__PURE__ */ (0, m.jsx)(_, {
86
86
  value: n,
87
87
  depth: t + 1,
88
88
  field: e
89
- }) })] }, e)), o.length > s.length && /* @__PURE__ */ (0, p.jsxs)("button", {
89
+ }) })] }, e)), o.length > s.length && /* @__PURE__ */ (0, m.jsxs)("button", {
90
90
  className: "ui-button",
91
91
  onClick: () => i(!0),
92
92
  children: [
@@ -97,78 +97,78 @@ function g({ value: e, depth: t = 0, field: n }) {
97
97
  })]
98
98
  });
99
99
  }
100
- function _({ text: e, rawLabel: t = "Raw data" }) {
101
- let n = m(e);
102
- return /* @__PURE__ */ (0, p.jsxs)("div", {
100
+ function v({ text: e, rawLabel: t = "Raw data" }) {
101
+ let n = h(e);
102
+ return /* @__PURE__ */ (0, m.jsxs)("div", {
103
103
  className: "structured-content",
104
- children: [/* @__PURE__ */ (0, p.jsx)(g, { value: n }), typeof n != "string" && /* @__PURE__ */ (0, p.jsxs)("details", {
104
+ children: [/* @__PURE__ */ (0, m.jsx)(_, { value: n }), typeof n != "string" && /* @__PURE__ */ (0, m.jsxs)("details", {
105
105
  className: "raw-data",
106
- children: [/* @__PURE__ */ (0, p.jsx)("summary", { children: t }), /* @__PURE__ */ (0, p.jsx)("pre", { children: e })]
106
+ children: [/* @__PURE__ */ (0, m.jsx)("summary", { children: t }), /* @__PURE__ */ (0, m.jsx)("pre", { children: e })]
107
107
  })]
108
108
  });
109
109
  }
110
- var v = /^(command|cmd|code|script|content|new_string|old_string|patch|text|stdout|stderr|output|query|prompt)$/i;
111
- function y(e, t = [], n = []) {
110
+ var y = /^(command|cmd|code|script|content|new_string|old_string|patch|text|stdout|stderr|output|query|prompt)$/i;
111
+ function b(e, t = [], n = []) {
112
112
  if (n.length >= 24 || t.length > 8) return n;
113
- if (typeof e == "string") (e.includes("\n") || e.length > 120 || v.test(t.at(-1) ?? "")) && n.push({
113
+ if (typeof e == "string") (e.includes("\n") || e.length > 120 || y.test(t.at(-1) ?? "")) && n.push({
114
114
  path: t.join(" › ") || "text",
115
115
  text: e
116
116
  });
117
- else if (Array.isArray(e)) e.forEach((e, r) => y(e, [...t, String(r)], n));
118
- else if (e && typeof e == "object") for (let [r, i] of Object.entries(e)) y(i, [...t, r], n);
117
+ else if (Array.isArray(e)) e.forEach((e, r) => b(e, [...t, String(r)], n));
118
+ else if (e && typeof e == "object") for (let [r, i] of Object.entries(e)) b(i, [...t, r], n);
119
119
  return n;
120
120
  }
121
- function b({ text: e, rawLabel: t = "Raw data" }) {
122
- let n = m(e);
123
- if (typeof n != "object" || !n) return /* @__PURE__ */ (0, p.jsx)("pre", {
121
+ function x({ text: e, rawLabel: t = "Raw data" }) {
122
+ let n = h(e);
123
+ if (typeof n != "object" || !n) return /* @__PURE__ */ (0, m.jsx)("pre", {
124
124
  className: "activity-code verbatim",
125
125
  "data-verbatim": !0,
126
- children: /* @__PURE__ */ (0, p.jsx)("code", { children: e })
126
+ children: /* @__PURE__ */ (0, m.jsx)("code", { children: e })
127
127
  });
128
- let r = y(n);
129
- return /* @__PURE__ */ (0, p.jsxs)("div", {
128
+ let r = b(n);
129
+ return /* @__PURE__ */ (0, m.jsxs)("div", {
130
130
  className: "structured-content verbatim",
131
131
  "data-verbatim": !0,
132
- children: [r.map((e, t) => /* @__PURE__ */ (0, p.jsxs)("section", {
132
+ children: [r.map((e, t) => /* @__PURE__ */ (0, m.jsxs)("section", {
133
133
  className: "verbatim-block",
134
- children: [/* @__PURE__ */ (0, p.jsx)("span", {
134
+ children: [/* @__PURE__ */ (0, m.jsx)("span", {
135
135
  className: "verbatim-path mono",
136
136
  children: e.path
137
- }), /* @__PURE__ */ (0, p.jsx)("pre", {
137
+ }), /* @__PURE__ */ (0, m.jsx)("pre", {
138
138
  className: "activity-code",
139
- children: /* @__PURE__ */ (0, p.jsx)("code", { children: e.text })
139
+ children: /* @__PURE__ */ (0, m.jsx)("code", { children: e.text })
140
140
  })]
141
- }, t)), /* @__PURE__ */ (0, p.jsxs)("details", {
141
+ }, t)), /* @__PURE__ */ (0, m.jsxs)("details", {
142
142
  className: "raw-data",
143
143
  open: !r.length,
144
- children: [/* @__PURE__ */ (0, p.jsx)("summary", { children: t }), /* @__PURE__ */ (0, p.jsx)("pre", {
144
+ children: [/* @__PURE__ */ (0, m.jsx)("summary", { children: t }), /* @__PURE__ */ (0, m.jsx)("pre", {
145
145
  className: "activity-code",
146
- children: /* @__PURE__ */ (0, p.jsx)("code", { children: JSON.stringify(n, null, 2) })
146
+ children: /* @__PURE__ */ (0, m.jsx)("code", { children: JSON.stringify(n, null, 2) })
147
147
  })]
148
148
  })]
149
149
  });
150
150
  }
151
151
  //#endregion
152
152
  //#region src/viewer/model.ts
153
- var x = (e) => Date.parse(e);
154
- function S(e, t = !1) {
153
+ var S = (e) => Date.parse(e);
154
+ function C(e, t = !1) {
155
155
  let n = new Date(e);
156
156
  if (!Number.isFinite(n.valueOf())) return "Unknown time";
157
157
  let r = n.toISOString();
158
158
  return `${t ? r.slice(0, 19).replace("T", " ") : r.slice(11, 19)} UTC`;
159
159
  }
160
- var C = (e) => e.replace(/\s+/g, " ").trim(), w = /\/(?:home|Users)\/[^/\s"'`]+(?:\/\.cache\/disco\/host\/[^/\s"'`]+(?:\/sessions\/[^/\s"'`]+)?)?(\/?)/g;
161
- function T(e) {
162
- return !e || !(e.includes("/home/") || e.includes("/Users/")) ? e : e.replace(w, (e, t, n, r) => {
160
+ var w = (e) => e.replace(/\s+/g, " ").trim(), T = /\/(?:home|Users)\/[^/\s"'`]+(?:\/\.cache\/disco\/host\/[^/\s"'`]+(?:\/sessions\/[^/\s"'`]+)?)?(\/?)/g;
161
+ function E(e) {
162
+ return !e || !(e.includes("/home/") || e.includes("/Users/")) ? e : e.replace(T, (e, t, n, r) => {
163
163
  if (!e.includes("/.cache/disco/host/")) return t ? "~/" : "~";
164
164
  let i = r[n + e.length];
165
165
  return t && i !== void 0 && !/[\s"'`)]/.test(i) ? "" : "./";
166
166
  });
167
167
  }
168
- function E(e) {
169
- let t = e.detail, n = T(t.publicText), r = T(t.reasoning), i = t.publicToolCalls?.map((e) => e.input && T(e.input) !== e.input ? {
168
+ function D(e) {
169
+ let t = e.detail, n = E(t.publicText), r = E(t.reasoning), i = t.publicToolCalls?.map((e) => e.input && E(e.input) !== e.input ? {
170
170
  ...e,
171
- input: T(e.input)
171
+ input: E(e.input)
172
172
  } : e);
173
173
  return n === t.publicText && r === t.reasoning && i?.every((e, n) => e === t.publicToolCalls[n]) !== !1 ? e : {
174
174
  ...e,
@@ -180,16 +180,16 @@ function E(e) {
180
180
  }
181
181
  };
182
182
  }
183
- var D = (e) => e.detail.publicText ?? e.detail.recordedClaim ?? "", O = (e, t) => JSON.stringify([e, t]);
184
- function k(e) {
183
+ var O = (e) => e.detail.publicText ?? e.detail.recordedClaim ?? "", k = (e, t) => JSON.stringify([e, t]);
184
+ function A(e) {
185
185
  let t = e.detail.publicToolCalls ?? [], n = new Map(t.map((e) => [e.id, e]));
186
186
  return [.../* @__PURE__ */ new Set([...e.detail.toolCallIds ?? [], ...t.map((e) => e.id)])].map((t) => n.get(t) ?? {
187
187
  id: t,
188
188
  name: e.detail.toolNames?.length === 1 ? e.detail.toolNames[0] : "Tool call"
189
189
  });
190
190
  }
191
- var A = (e) => e.replace(/^[a-z0-9][\w.-]*-\d{8}[a-z]?:/i, "");
192
- function j(e) {
191
+ var j = (e) => e.replace(/^[a-z0-9][\w.-]*-\d{8}[a-z]?:/i, "");
192
+ function M(e) {
193
193
  if (e.input === void 0) return "args not captured";
194
194
  try {
195
195
  let t = JSON.parse(e.input);
@@ -210,35 +210,35 @@ function j(e) {
210
210
  "task",
211
211
  "prompt",
212
212
  "message"
213
- ]) if (typeof e[t] == "string" && e[t]) return C(A(e[t]));
213
+ ]) if (typeof e[t] == "string" && e[t]) return w(j(e[t]));
214
214
  let n = Object.values(e).filter((e) => [
215
215
  "string",
216
216
  "number",
217
217
  "boolean"
218
218
  ].includes(typeof e));
219
- if (n.length) return C(n.map((e) => A(String(e))).join(" · "));
219
+ if (n.length) return w(n.map((e) => j(String(e))).join(" · "));
220
220
  }
221
221
  } catch {}
222
- return C(e.input);
222
+ return w(e.input);
223
223
  }
224
- function M(e) {
225
- 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(E).sort((e, t) => x(e.at) - x(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();
224
+ function N(e) {
225
+ 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(D).sort((e, t) => S(e.at) - S(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();
226
226
  for (let e of i) {
227
227
  let t = n(e.node), r = s.get(t) ?? [];
228
228
  r.push(e), s.set(t, r);
229
- for (let t of k(e)) {
230
- let n = O(e.node, t.id), r = l.get(n) ?? [];
229
+ for (let t of A(e)) {
230
+ let n = k(e.node, t.id), r = l.get(n) ?? [];
231
231
  r.push({
232
232
  event: e,
233
233
  call: t
234
234
  }), l.set(n, r);
235
235
  }
236
236
  if (e.detail.toolCallId !== void 0) {
237
- let t = O(e.node, e.detail.toolCallId), n = c.get(t) ?? [];
237
+ let t = k(e.node, e.detail.toolCallId), n = c.get(t) ?? [];
238
238
  n.push(e), c.set(t, n);
239
239
  }
240
240
  }
241
- let u = i.map((e) => x(e.at)), d = u[0] ?? 0;
241
+ let u = i.map((e) => S(e.at)), d = u[0] ?? 0;
242
242
  return {
243
243
  nodes: t,
244
244
  canonical: n,
@@ -250,20 +250,20 @@ function M(e) {
250
250
  calls: l,
251
251
  results: c,
252
252
  start: d,
253
- end: i.reduce((e, t) => Math.max(e, t.end ? x(t.end) : x(t.at)), u.at(-1) ?? d)
253
+ end: i.reduce((e, t) => Math.max(e, t.end ? S(t.end) : S(t.at)), u.at(-1) ?? d)
254
254
  };
255
255
  }
256
- function N(e, t) {
256
+ function P(e, t) {
257
257
  return (e.byActor.get(t) ?? []).some((e) => typeof e.detail.costListUsd == "number" || Object.values(e.detail.usage ?? {}).some((e) => typeof e == "number" && e > 0));
258
258
  }
259
- function P(e, t, n) {
259
+ function F(e, t, n) {
260
260
  if (!e?.status && n) return n === "running" ? "working" : n.replaceAll("-", " ");
261
261
  let r = e?.status ?? "no terminal state recorded";
262
262
  if (t) return r;
263
263
  let i = e?.capture?.status;
264
264
  return `${r} · no usage recorded${i === "absent" ? "; capture missing" : i === "lossy" ? "; capture partial" : ""}`;
265
265
  }
266
- function F(e, t, n, r) {
266
+ function I(e, t, n, r) {
267
267
  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({
268
268
  label: e.label,
269
269
  node: t.nodes.get(t.canonical(e.node)),
@@ -272,12 +272,12 @@ function F(e, t, n, r) {
272
272
  }
273
273
  //#endregion
274
274
  //#region src/viewer/VirtualList.tsx
275
- function I({ items: e, keyOf: t, render: n, scroller: r, estimate: i = 96, overscan: a = 900, target: o }) {
276
- let s = (0, f.useRef)(/* @__PURE__ */ new Map()), [c, l] = (0, f.useState)(0), [u, d] = (0, f.useState)({
275
+ function ee({ items: e, keyOf: t, render: n, scroller: r, estimate: i = 96, overscan: a = 900, target: o }) {
276
+ let s = (0, p.useRef)(/* @__PURE__ */ new Map()), [c, l] = (0, p.useState)(0), [u, d] = (0, p.useState)({
277
277
  top: 0,
278
278
  height: 900
279
- }), m = (0, f.useRef)(null), h = (0, f.useRef)(/* @__PURE__ */ new Map()), g = (0, f.useRef)(0), _ = (e) => {
280
- !m.current && typeof ResizeObserver < "u" && (m.current = new ResizeObserver((e) => {
279
+ }), f = (0, p.useRef)(null), h = (0, p.useRef)(/* @__PURE__ */ new Map()), g = (0, p.useRef)(0), _ = (e) => {
280
+ !f.current && typeof ResizeObserver < "u" && (f.current = new ResizeObserver((e) => {
281
281
  let t = !1;
282
282
  for (let n of e) {
283
283
  let e = h.current.get(n.target);
@@ -288,11 +288,11 @@ function I({ items: e, keyOf: t, render: n, scroller: r, estimate: i = 96, overs
288
288
  t && !g.current && (g.current = requestAnimationFrame(() => {
289
289
  g.current = 0, l((e) => e + 1);
290
290
  }));
291
- })), m.current?.observe(e);
291
+ })), f.current?.observe(e);
292
292
  };
293
- (0, f.useEffect)(() => () => {
294
- cancelAnimationFrame(g.current), m.current?.disconnect(), m.current = null, h.current.clear();
295
- }, []), (0, f.useEffect)(() => {
293
+ (0, p.useEffect)(() => () => {
294
+ cancelAnimationFrame(g.current), f.current?.disconnect(), f.current = null, h.current.clear();
295
+ }, []), (0, p.useEffect)(() => {
296
296
  let e = r.current;
297
297
  if (!e) return;
298
298
  let t = 0, n = () => {
@@ -309,7 +309,7 @@ function I({ items: e, keyOf: t, render: n, scroller: r, estimate: i = 96, overs
309
309
  cancelAnimationFrame(t), e.removeEventListener("scroll", i), a.disconnect();
310
310
  };
311
311
  }, [r]);
312
- let v = (0, f.useMemo)(() => {
312
+ let v = (0, p.useMemo)(() => {
313
313
  let n = new Float64Array(e.length + 1), r = typeof i == "function" ? i : () => i;
314
314
  for (let i = 0; i < e.length; i++) n[i + 1] = n[i] + (s.current.get(t(e[i])) ?? r(e[i]));
315
315
  return n;
@@ -325,7 +325,7 @@ function I({ items: e, keyOf: t, render: n, scroller: r, estimate: i = 96, overs
325
325
  v[e + 1] <= t ? n = e + 1 : r = e;
326
326
  }
327
327
  return n;
328
- }, b = Math.max(0, y(u.top - a)), x = Math.min(e.length, y(u.top + u.height + a) + 1), S = (0, f.useCallback)((n, i) => {
328
+ }, b = Math.max(0, y(u.top - a)), x = Math.min(e.length, y(u.top + u.height + a) + 1), S = (0, p.useCallback)((n, i) => {
329
329
  let a = r.current, o = e.findIndex((e) => t(e) === n);
330
330
  if (!a || o < 0) return !1;
331
331
  let s = v[o], c = v[o + 1];
@@ -335,7 +335,7 @@ function I({ items: e, keyOf: t, render: n, scroller: r, estimate: i = 96, overs
335
335
  t,
336
336
  v,
337
337
  r
338
- ]), C = (0, f.useRef)(null), w = (0, f.useRef)(/* @__PURE__ */ new Map()), T = () => {
338
+ ]), C = (0, p.useRef)(null), w = (0, p.useRef)(/* @__PURE__ */ new Map()), T = () => {
339
339
  let e = C.current;
340
340
  if (!e) return;
341
341
  if (performance.now() > e.until) {
@@ -349,16 +349,16 @@ function I({ items: e, keyOf: t, render: n, scroller: r, estimate: i = 96, overs
349
349
  (e.top < 72 || e.top > window.innerHeight - 96) && window.scrollBy({ top: e.top - 120 });
350
350
  }
351
351
  };
352
- (0, f.useLayoutEffect)(() => {
352
+ (0, p.useLayoutEffect)(() => {
353
353
  C.current = o ? {
354
354
  key: o,
355
355
  until: performance.now() + 2e3
356
356
  } : null, T();
357
- }, [o]), (0, f.useLayoutEffect)(T, [
357
+ }, [o]), (0, p.useLayoutEffect)(T, [
358
358
  c,
359
359
  u,
360
360
  e
361
- ]), (0, f.useEffect)(() => {
361
+ ]), (0, p.useEffect)(() => {
362
362
  let e = r.current;
363
363
  if (!e) return;
364
364
  let t = () => {
@@ -374,25 +374,25 @@ function I({ items: e, keyOf: t, render: n, scroller: r, estimate: i = 96, overs
374
374
  return;
375
375
  }
376
376
  w.current.set(e, t);
377
- for (let [n, r] of h.current) r === e && n !== t && (m.current?.unobserve(n), h.current.delete(n));
377
+ for (let [n, r] of h.current) r === e && n !== t && (f.current?.unobserve(n), h.current.delete(n));
378
378
  h.current.has(t) || (h.current.set(t, e), _(t));
379
379
  };
380
- return (0, f.useEffect)(() => {
381
- for (let e of [...h.current.keys()]) e.isConnected || (m.current?.unobserve(e), h.current.delete(e));
382
- }), /* @__PURE__ */ (0, p.jsxs)(p.Fragment, { children: [
383
- /* @__PURE__ */ (0, p.jsx)("div", {
380
+ return (0, p.useEffect)(() => {
381
+ for (let e of [...h.current.keys()]) e.isConnected || (f.current?.unobserve(e), h.current.delete(e));
382
+ }), /* @__PURE__ */ (0, m.jsxs)(m.Fragment, { children: [
383
+ /* @__PURE__ */ (0, m.jsx)("div", {
384
384
  style: { height: v[b] },
385
385
  "aria-hidden": "true"
386
386
  }),
387
387
  e.slice(b, x).map((e, r) => {
388
388
  let i = t(e);
389
- return /* @__PURE__ */ (0, p.jsx)("div", {
389
+ return /* @__PURE__ */ (0, m.jsx)("div", {
390
390
  ref: E(i),
391
391
  className: "virtual-row",
392
392
  children: n(e, b + r)
393
393
  }, i);
394
394
  }),
395
- /* @__PURE__ */ (0, p.jsx)("div", {
395
+ /* @__PURE__ */ (0, m.jsx)("div", {
396
396
  style: { height: v[e.length] - v[x] },
397
397
  "aria-hidden": "true"
398
398
  })
@@ -441,7 +441,7 @@ function H(e) {
441
441
  let t = e.usage;
442
442
  return typeof t?.output == "number" && Number.isFinite(t.output) ? t.output : null;
443
443
  }
444
- function ee(e) {
444
+ function te(e) {
445
445
  let t = H(e);
446
446
  return t !== null && t < 2e3;
447
447
  }
@@ -449,8 +449,8 @@ function U(e) {
449
449
  let t = (e) => typeof e == "number" && Number.isFinite(e) && e > 0 ? Math.floor(e) : 0, n = t(e.reasoningOmitted), r = t(e.reasoningRedacted), i = [];
450
450
  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;
451
451
  }
452
- var te = /await|wait|poll|sleep|observe|status/i;
453
- function ne(e) {
452
+ var ne = /await|wait|poll|sleep|observe|status/i;
453
+ function re(e) {
454
454
  if (typeof e != "string" || !e.trimStart().startsWith("{")) return !1;
455
455
  try {
456
456
  let t = JSON.parse(e);
@@ -459,18 +459,18 @@ function ne(e) {
459
459
  return !1;
460
460
  }
461
461
  }
462
- var re = (e) => (e ?? []).some((e) => !ne(e.detail.publicText));
463
- function ie(e, t, n) {
462
+ var ie = (e) => (e ?? []).some((e) => !re(e.detail.publicText));
463
+ function ae(e, t, n) {
464
464
  let r = e.detail;
465
465
  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 || U(r).length || t.length !== 1) return null;
466
466
  let i = t[0];
467
- return i.clip || i.publicationNote || n(i.id) || !z(i.input) && !te.test(i.name) ? null : i;
467
+ return i.clip || i.publicationNote || n(i.id) || !z(i.input) && !ne.test(i.name) ? null : i;
468
468
  }
469
- function ae(e, t, n) {
469
+ function oe(e, t, n) {
470
470
  let r = e.detail;
471
471
  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 || U(r).length || !t.length || t.some((t) => t.input !== void 0 || t.clip || t.publicationNote || n(e, t.id)) ? null : t;
472
472
  }
473
- function oe(e, { callsOf: t, captured: n, keyOf: r, min: i = 2 }) {
473
+ function se(e, { callsOf: t, captured: n, keyOf: r, min: i = 2 }) {
474
474
  let a = [], o = null, s = () => {
475
475
  if (o) {
476
476
  if (o.events.length >= i) a.push({
@@ -496,7 +496,7 @@ function oe(e, { callsOf: t, captured: n, keyOf: r, min: i = 2 }) {
496
496
  s(), a.push(r);
497
497
  continue;
498
498
  }
499
- let e = ae(r.event, t(r.event), n);
499
+ let e = oe(r.event, t(r.event), n);
500
500
  if (!e) {
501
501
  s(), a.push(r);
502
502
  continue;
@@ -516,11 +516,11 @@ function oe(e, { callsOf: t, captured: n, keyOf: r, min: i = 2 }) {
516
516
  }
517
517
  return a;
518
518
  }
519
- function se(e) {
519
+ function ce(e) {
520
520
  let t = e.reduce((e, t) => e + t.count, 0), n = e.map((e) => e.count > 1 ? `${e.name} ×${e.count}` : e.name);
521
521
  return `${t} tool call${t === 1 ? "" : "s"} · ${n.join(" · ")}`;
522
522
  }
523
- function ce(e, { callsOf: t, answered: n, keyOf: r, min: i = 2 }) {
523
+ function W(e, { callsOf: t, answered: n, keyOf: r, min: i = 2 }) {
524
524
  let a = [], o = null, s = () => {
525
525
  if (o) {
526
526
  if (o.events.length >= i) a.push({
@@ -539,7 +539,7 @@ function ce(e, { callsOf: t, answered: n, keyOf: r, min: i = 2 }) {
539
539
  }
540
540
  };
541
541
  for (let i of e) {
542
- let e = ie(i, t(i), (e) => n(i, e));
542
+ let e = ae(i, t(i), (e) => n(i, e));
543
543
  if (!e) {
544
544
  s(), a.push({
545
545
  kind: "event",
@@ -558,13 +558,13 @@ function ce(e, { callsOf: t, answered: n, keyOf: r, min: i = 2 }) {
558
558
  }
559
559
  return s(), a;
560
560
  }
561
- function W(e) {
561
+ function le(e) {
562
562
  let t = Math.max(0, Math.round(e / 1e3));
563
563
  if (t < 60) return `${t}s`;
564
564
  let n = Math.floor(t / 60);
565
565
  return n < 60 ? `${n}m ${t % 60}s` : `${Math.floor(n / 60)}h ${n % 60}m`;
566
566
  }
567
- function le(e) {
567
+ function ue(e) {
568
568
  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;
569
569
  for (let t of e) {
570
570
  let e = t.detail.usage;
@@ -586,12 +586,12 @@ function le(e) {
586
586
  spanMs: n,
587
587
  tokens: i ? r : null,
588
588
  measured: i,
589
- label: `waited ${W(n)} · ${e.length} polls · ${o}`
589
+ label: `waited ${le(n)} · ${e.length} polls · ${o}`
590
590
  };
591
591
  }
592
592
  //#endregion
593
593
  //#region src/viewer/prompt-text.ts
594
- function ue(e) {
594
+ function G(e) {
595
595
  let t = e.indexOf("[user] "), n = e.startsWith("[system] ") && t >= 0 ? e.slice(t + 7).trim() : e.trim();
596
596
  if (!n.startsWith("{")) return n;
597
597
  try {
@@ -603,7 +603,7 @@ function ue(e) {
603
603
  }
604
604
  //#endregion
605
605
  //#region src/viewer/ConversationRowView.tsx
606
- var G = (e) => e.category === "lifecycle" || e.detail.lifecycle !== void 0, de = (e) => new Intl.NumberFormat("en-US", {
606
+ var K = (e) => e.category === "lifecycle" || e.detail.lifecycle !== void 0, de = (e) => new Intl.NumberFormat("en-US", {
607
607
  notation: "compact",
608
608
  maximumFractionDigits: 1
609
609
  }).format(e), fe = (e) => {
@@ -612,14 +612,14 @@ var G = (e) => e.category === "lifecycle" || e.detail.lifecycle !== void 0, de =
612
612
  let n = Math.floor(t / 60);
613
613
  return n < 60 ? `${n} m ${t % 60} s` : `${Math.floor(n / 60)} h ${n % 60} m`;
614
614
  };
615
- function K({ name: e }) {
615
+ function q({ name: e }) {
616
616
  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";
617
- return /* @__PURE__ */ (0, p.jsx)("svg", {
617
+ return /* @__PURE__ */ (0, m.jsx)("svg", {
618
618
  viewBox: "0 0 16 16",
619
619
  width: "14",
620
620
  height: "14",
621
621
  "aria-hidden": "true",
622
- children: /* @__PURE__ */ (0, p.jsx)("path", {
622
+ children: /* @__PURE__ */ (0, m.jsx)("path", {
623
623
  d: n,
624
624
  stroke: "currentColor",
625
625
  strokeWidth: "1.4",
@@ -673,7 +673,7 @@ var pe = /* @__PURE__ */ new Set([
673
673
  glob: "glob",
674
674
  find: "glob",
675
675
  ls: "list"
676
- }, q = (e) => (e.startsWith("mcp__") && e.slice(e.lastIndexOf("__") + 2) || e).replace(/^agent-runtime-/, ""), he = (e) => {
676
+ }, J = (e) => (e.startsWith("mcp__") && e.slice(e.lastIndexOf("__") + 2) || e).replace(/^agent-runtime-/, ""), he = (e) => {
677
677
  if (e !== void 0) try {
678
678
  let t = JSON.parse(e);
679
679
  return t && typeof t == "object" ? t : e;
@@ -686,34 +686,34 @@ var pe = /* @__PURE__ */ new Set([
686
686
  let n = JSON.parse(e), r = typeof n?.error == "string" ? n.error : typeof n?.message == "string" ? n.message : void 0;
687
687
  r && (t = r);
688
688
  } catch {}
689
- return C(t.split("\n").find((e) => e.trim()) ?? "").slice(0, 200);
689
+ return w(t.split("\n").find((e) => e.trim()) ?? "").slice(0, 200);
690
690
  };
691
- function J(e, t, n, r, i, a) {
692
- let s = q(t.name), c = n ? D(n) || n.detail.contentOmitted || "" : void 0, l = r === "error" ? "error" : r === "pending" || r === "missing" && a ? "running" : "completed", u = r === "ambiguous" || r === "missing" && !a ? V(r, a) : void 0, d = {
691
+ function Y(e, t, n, r, i, a) {
692
+ let o = J(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 ? V(r, a) : void 0, d = {
693
693
  type: "tool",
694
694
  id: e,
695
- tool: s,
695
+ tool: o,
696
696
  state: {
697
- status: l,
697
+ status: c,
698
698
  input: he(t.input),
699
- ...c === void 0 ? {} : { output: c },
700
- ...l === "error" ? { error: ge(c ?? "") || "The call failed." } : {},
699
+ ...s === void 0 ? {} : { output: s },
700
+ ...c === "error" ? { error: ge(s ?? "") || "The call failed." } : {},
701
701
  ...i !== null && i >= 0 ? { time: {
702
702
  start: 0,
703
703
  end: i
704
704
  } } : {},
705
- ...u ? { metadata: { note: u } } : {}
705
+ ...l ? { metadata: { note: l } } : {}
706
706
  }
707
- }, f = pe.has(s.toLowerCase()), p = o(d), m = B(t.input) ?? (p.description || (f ? void 0 : j(t)));
707
+ }, f = pe.has(o.toLowerCase()), p = u(d), m = B(t.input) ?? (p.description || (f ? void 0 : M(t)));
708
708
  return {
709
709
  id: e,
710
710
  kind: "tool",
711
711
  part: d,
712
712
  call: {
713
713
  id: e,
714
- type: me[s.toLowerCase()] ?? "unknown",
715
- label: f ? p.title : s.replaceAll("_", " "),
716
- status: l === "error" ? "error" : l === "running" ? "running" : "success",
714
+ type: me[o.toLowerCase()] ?? "unknown",
715
+ label: f ? p.title : o.replaceAll("_", " "),
716
+ status: c === "error" ? "error" : c === "running" ? "running" : "success",
717
717
  ...m ? { detail: m } : {},
718
718
  ...i !== null && i >= 0 ? { duration: i } : {}
719
719
  }
@@ -721,22 +721,15 @@ function J(e, t, n, r, i, a) {
721
721
  }
722
722
  var _e = (e) => {
723
723
  let t = e.state.metadata?.note;
724
- return t ? /* @__PURE__ */ (0, p.jsx)("span", {
724
+ return t ? /* @__PURE__ */ (0, m.jsx)("span", {
725
725
  className: "tool-note",
726
726
  children: t
727
727
  }) : null;
728
- }, Y = ({ id: e, children: t }) => /* @__PURE__ */ (0, p.jsx)(l, {
729
- className: "ar-tl",
730
- items: [{
731
- id: e,
732
- kind: "custom",
733
- content: t
734
- }]
735
- }), ve = (e) => e && typeof e == "object" && "bytes" in e ? e : void 0;
728
+ }, ve = (e) => e && typeof e == "object" && "bytes" in e ? e : void 0;
736
729
  function X({ clip: e, open: t }) {
737
- return e ? /* @__PURE__ */ (0, p.jsxs)("p", {
730
+ return e ? /* @__PURE__ */ (0, m.jsxs)("p", {
738
731
  className: "clip-note",
739
- children: [/* @__PURE__ */ (0, p.jsxs)("span", { children: [new Intl.NumberFormat("en-US").format(e.bytes), " bytes, middle omitted."] }), e.sha256 && t ? /* @__PURE__ */ (0, p.jsx)("button", {
732
+ children: [/* @__PURE__ */ (0, m.jsxs)("span", { children: [new Intl.NumberFormat("en-US").format(e.bytes), " bytes, middle omitted."] }), e.sha256 && t ? /* @__PURE__ */ (0, m.jsx)("button", {
740
733
  type: "button",
741
734
  className: "link-button",
742
735
  "data-load-full": e.sha256,
@@ -745,230 +738,230 @@ function X({ clip: e, open: t }) {
745
738
  }) : null]
746
739
  }) : null;
747
740
  }
748
- function ye({ row: e, context: t }) {
749
- let n = le(e.events), r = B(e.input) ?? C(e.input ?? "");
750
- return /* @__PURE__ */ (0, p.jsx)("div", {
751
- className: `chat-row poll-group${e.events.some((e) => e.id === t.selected) ? " selected" : ""}`,
752
- "data-poll-group": e.events.length,
753
- "data-entry": e.events[0].id,
754
- title: S(e.events[0].at),
755
- children: /* @__PURE__ */ (0, p.jsx)(Y, {
756
- id: e.key,
757
- children: /* @__PURE__ */ (0, p.jsx)(c, {
758
- icon: /* @__PURE__ */ (0, p.jsx)(K, { name: e.name }),
759
- title: q(e.name),
760
- description: [n.label, r].filter(Boolean).join(" · "),
761
- descriptionMono: !0,
762
- children: /* @__PURE__ */ (0, p.jsx)("ol", {
763
- className: "poll-calls",
764
- children: e.events.map((e) => /* @__PURE__ */ (0, p.jsxs)("li", {
765
- "data-message": e.id,
766
- children: [/* @__PURE__ */ (0, p.jsx)("time", {
767
- dateTime: e.at,
768
- children: S(e.at)
769
- }), /* @__PURE__ */ (0, p.jsx)("span", {
770
- className: "mono",
771
- children: B(k(e)[0]?.input) ?? C(k(e)[0]?.input ?? "")
772
- })]
773
- }, e.id))
774
- })
741
+ function ye(e) {
742
+ let t = ue(e.events), n = B(e.input) ?? w(e.input ?? "");
743
+ return {
744
+ id: e.key,
745
+ kind: "custom",
746
+ content: /* @__PURE__ */ (0, m.jsx)(c, {
747
+ icon: /* @__PURE__ */ (0, m.jsx)(q, { name: e.name }),
748
+ title: J(e.name),
749
+ description: [t.label, n].filter(Boolean).join(" · "),
750
+ descriptionMono: !0,
751
+ children: /* @__PURE__ */ (0, m.jsx)("ol", {
752
+ className: "poll-calls",
753
+ children: e.events.map((e) => /* @__PURE__ */ (0, m.jsxs)("li", {
754
+ "data-message": e.id,
755
+ children: [/* @__PURE__ */ (0, m.jsx)("time", {
756
+ dateTime: e.at,
757
+ children: C(e.at)
758
+ }), /* @__PURE__ */ (0, m.jsx)("span", {
759
+ className: "mono",
760
+ children: B(A(e)[0]?.input) ?? w(A(e)[0]?.input ?? "")
761
+ })]
762
+ }, e.id))
775
763
  })
776
764
  })
777
- });
765
+ };
778
766
  }
779
- function be({ row: e, context: t }) {
780
- return /* @__PURE__ */ (0, p.jsx)("div", {
781
- className: `chat-row hollow-group${e.events.some((e) => e.id === t.selected) ? " selected" : ""}`,
782
- "data-hollow-group": e.events.length,
783
- "data-entry": e.events[0].id,
784
- title: S(e.events[0].at),
785
- children: /* @__PURE__ */ (0, p.jsx)(Y, {
786
- id: e.key,
787
- children: /* @__PURE__ */ (0, p.jsx)(c, {
788
- icon: /* @__PURE__ */ (0, p.jsx)(K, { name: e.calls[0]?.name ?? "tool" }),
789
- title: se(e.calls),
790
- description: "args not captured",
791
- durationMs: e.spanMs || void 0
767
+ var be = (e) => ({
768
+ id: e.key,
769
+ kind: "custom",
770
+ content: /* @__PURE__ */ (0, m.jsx)(c, {
771
+ icon: /* @__PURE__ */ (0, m.jsx)(q, { name: e.calls[0]?.name ?? "tool" }),
772
+ title: ce(e.calls),
773
+ description: "args not captured",
774
+ durationMs: e.spanMs || void 0
775
+ })
776
+ });
777
+ function xe(e, t) {
778
+ if (e.kind === "polls") return [ye(e)];
779
+ if (e.kind === "hollow") return [be(e)];
780
+ let { index: n, cutoff: r, anchor: i, thinkingSpan: o, opened: s, paired: l, live: u } = t, d = e.event;
781
+ if (K(d)) {
782
+ let e = O(d);
783
+ return [{
784
+ id: d.id,
785
+ kind: "custom",
786
+ content: /* @__PURE__ */ (0, m.jsxs)("p", {
787
+ className: `lifecycle-note${d.detail.isError ? " lifecycle-error" : ""}`,
788
+ children: [/* @__PURE__ */ (0, m.jsx)("b", { children: d.label }), e && /* @__PURE__ */ (0, m.jsx)("span", { children: w(e).slice(0, 280) })]
792
789
  })
793
- })
794
- });
795
- }
796
- function xe({ row: e, context: t }) {
797
- if (e.kind === "polls") return /* @__PURE__ */ (0, p.jsx)(ye, {
798
- row: e,
799
- context: t
800
- });
801
- if (e.kind === "hollow") return /* @__PURE__ */ (0, p.jsx)(be, {
802
- row: e,
803
- context: t
804
- });
805
- let { index: n, cutoff: r, selected: i, anchor: o, thinkingSpan: u, opened: d, setOpen: f, flagMarks: m, opener: h, flags: g, paired: _, live: v } = t, y = e.event, b = {
806
- className: [
807
- "chat-row",
808
- i === y.id && "selected",
809
- g?.has(y.id) && "flagged"
810
- ].filter(Boolean).join(" "),
811
- "data-entry": y.id,
812
- "data-message": y.id,
813
- "data-message-node": y.node,
814
- title: S(y.at)
815
- };
816
- if (G(y)) {
817
- let e = D(y);
818
- return /* @__PURE__ */ (0, p.jsxs)("p", {
819
- ...b,
820
- className: `${b.className} lifecycle-note${y.detail.isError ? " lifecycle-error" : ""}`,
821
- children: [
822
- /* @__PURE__ */ (0, p.jsx)("b", { children: y.label }),
823
- e && /* @__PURE__ */ (0, p.jsx)("span", { children: C(e).slice(0, 280) }),
824
- m(y)
825
- ]
826
- });
790
+ }];
827
791
  }
828
- let w = D(y), T = k(y), E = typeof y.detail.reasoning == "string" ? y.detail.reasoning : "", A = U(y.detail), j = y.detail.role === "user", M = y.detail.responseStatus === "error", N = y.detail.recordedClaim !== void 0, P = y.detail.toolCallId !== void 0 || y.detail.role === "toolResult", F = ve(y.detail.clip);
829
- if (j && w && !P) {
830
- let e = ue(w), t = `prompt:${o(y)}`, n = e.length > 280, r = n && !d.has(t);
831
- return /* @__PURE__ */ (0, p.jsxs)("article", {
832
- ...b,
833
- children: [
834
- /* @__PURE__ */ (0, p.jsx)("div", {
835
- className: "ar-user",
836
- children: /* @__PURE__ */ (0, p.jsx)(a, {
837
- content: r ? `${e.slice(0, 280).trimEnd()}…` : e,
838
- timestamp: new Date(y.at),
839
- actions: n ? /* @__PURE__ */ (0, p.jsx)("button", {
840
- type: "button",
841
- className: "link-button",
842
- "data-open-key": t,
843
- "aria-expanded": !r,
844
- onClick: () => f(t, r),
845
- children: r ? "Full prompt" : "Shorter"
846
- }) : void 0
847
- })
848
- }),
849
- !r && /* @__PURE__ */ (0, p.jsx)(X, {
850
- clip: F,
851
- open: h(y)
852
- }),
853
- m(y)
854
- ]
855
- });
792
+ let f = O(d), p = A(d), h = typeof d.detail.reasoning == "string" ? d.detail.reasoning : "", g = U(d.detail), _ = d.detail.responseStatus === "error", v = d.detail.recordedClaim !== void 0, y = d.detail.toolCallId !== void 0 || d.detail.role === "toolResult";
793
+ if (d.detail.role === "user" && f && !y) {
794
+ let e = G(f), t = e.length > 280 && !s.has(`prompt:${i(d)}`);
795
+ return [{
796
+ id: d.id,
797
+ kind: "message",
798
+ role: "user",
799
+ content: t ? `${e.slice(0, 280).trimEnd()}…` : e,
800
+ timestamp: new Date(d.at)
801
+ }];
856
802
  }
857
- let I = [];
858
- if (E && I.push({
859
- id: `${y.id}:reasoning`,
803
+ let b = [];
804
+ if (h && b.push({
805
+ id: `${d.id}:reasoning`,
860
806
  kind: "custom",
861
- content: /* @__PURE__ */ (0, p.jsx)(s, {
807
+ content: /* @__PURE__ */ (0, m.jsx)(a, {
862
808
  part: {
863
809
  type: "reasoning",
864
- text: E
810
+ text: h
865
811
  },
866
812
  autoCollapse: !1
867
813
  })
868
- }), A.length) {
869
- let e = H(y.detail), t = u.get(y.id), n = e === null ? A.join(" · ") : `${t !== void 0 && t >= 1e3 ? `for ${fe(t)} · ` : ""}${de(e)} output tokens · ${A.join(" · ")}`;
870
- I.push({
871
- id: `${y.id}:thinking`,
814
+ }), g.length) {
815
+ let e = H(d.detail), t = o.get(d.id), n = e === null ? g.join(" · ") : `${t !== void 0 && t >= 1e3 ? `for ${fe(t)} · ` : ""}${de(e)} output tokens · ${g.join(" · ")}`;
816
+ b.push({
817
+ id: `${d.id}:thinking`,
872
818
  kind: "custom",
873
- content: /* @__PURE__ */ (0, p.jsx)("span", {
819
+ content: /* @__PURE__ */ (0, m.jsx)("span", {
874
820
  "data-thinking-withheld": !0,
875
- children: /* @__PURE__ */ (0, p.jsx)(c, {
876
- icon: /* @__PURE__ */ (0, p.jsx)(K, { name: "think" }),
821
+ children: /* @__PURE__ */ (0, m.jsx)(c, {
822
+ icon: /* @__PURE__ */ (0, m.jsx)(q, { name: "think" }),
877
823
  title: "Thought",
878
824
  description: n
879
825
  })
880
826
  })
881
827
  });
882
828
  }
883
- if (M) I.push({
884
- id: y.id,
829
+ if (_) b.push({
830
+ id: d.id,
885
831
  kind: "status",
886
832
  tone: "error",
887
833
  label: "The request failed",
888
- detail: w ? C(w).slice(0, 400) : "No assistant response is present in this record."
834
+ detail: f ? w(f).slice(0, 400) : "No assistant response is present in this record."
889
835
  });
890
- else if (N) I.push({
891
- id: y.id,
836
+ else if (v) b.push({
837
+ id: d.id,
892
838
  kind: "status",
893
839
  tone: "info",
894
840
  label: "Recorded finding",
895
- detail: C(w).slice(0, 600)
841
+ detail: w(f).slice(0, 600)
896
842
  });
897
- else if (P) {
898
- let e = y.detail.toolCallId !== void 0 && (n.calls.get(O(y.node, y.detail.toolCallId))?.length ?? 0) > 1;
899
- I.push(J(y.id, {
900
- id: y.id,
901
- name: y.label || "Tool result"
902
- }, y, e ? "ambiguous" : y.detail.isError ? "error" : "returned", null, v));
903
- } else w ? I.push({
904
- id: y.id,
843
+ else if (y) {
844
+ let e = d.detail.toolCallId !== void 0 && (n.calls.get(k(d.node, d.detail.toolCallId))?.length ?? 0) > 1;
845
+ b.push(Y(d.id, {
846
+ id: d.id,
847
+ name: d.label || "Tool result"
848
+ }, d, e ? "ambiguous" : d.detail.isError ? "error" : "returned", null, u));
849
+ } else f ? b.push({
850
+ id: d.id,
905
851
  kind: "message",
906
852
  role: "assistant",
907
- content: w
908
- }) : !T.length && !E && !A.length && I.push({
909
- id: y.id,
853
+ content: f
854
+ }) : !p.length && !h && !g.length && b.push({
855
+ id: d.id,
910
856
  kind: "status",
911
- label: y.detail.contentOmitted ?? "No text body is present in this record."
857
+ label: d.detail.contentOmitted ?? "No text body is present in this record."
912
858
  });
913
- let L = o(y);
914
- for (let e of T) {
915
- let t = _(y, e), i = t.filter((e) => x(e.at) <= r).at(-1), a = (n.calls.get(O(y.node, e.id))?.length ?? 0) > 1 ? "ambiguous" : i ? i.detail.isError ? "error" : "returned" : t.some((e) => x(e.at) > r) ? "pending" : "missing", o = (typeof i?.detail.durationMs == "number" ? i.detail.durationMs : null) ?? (i && i.detail.atBasis !== "carried" ? x(i.at) - x(y.at) : null);
916
- I.push(J(`tool:${L}:${e.id}`, e, i, a, o, v));
859
+ let x = i(d);
860
+ for (let e of p) {
861
+ let t = l(d, e), i = t.filter((e) => S(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) => S(e.at) > r) ? "pending" : "missing", o = (typeof i?.detail.durationMs == "number" ? i.detail.durationMs : null) ?? (i && i.detail.atBasis !== "carried" ? S(i.at) - S(d.at) : null);
862
+ b.push(Y(`tool:${x}:${e.id}`, e, i, a, o, u));
917
863
  }
918
- let R = [y.detail.publicationNote, N ? y.detail.assessment : void 0].filter((e) => !!e);
919
- return /* @__PURE__ */ (0, p.jsxs)("article", {
920
- ...b,
864
+ return b;
865
+ }
866
+ var Se = (e) => e.length ? o(e[e.length - 1]) : void 0;
867
+ function Z({ row: e, items: t, previous: n, context: r }) {
868
+ let { selected: i, opened: a, anchor: s, setOpen: c, flagMarks: u, opener: d, flags: f } = r, p = e.kind === "event" ? [e.event] : e.events, h = p[0], g = t.map((e, r) => /* @__PURE__ */ (0, m.jsx)(l, {
869
+ item: e,
870
+ previous: r ? o(t[r - 1]) : n,
871
+ renderToolActions: _e
872
+ }, e.id)), _ = {
873
+ className: [
874
+ "chat-row",
875
+ p.some((e) => e.id === i) && "selected",
876
+ e.kind === "event" && f?.has(h.id) && "flagged"
877
+ ].filter(Boolean).join(" "),
878
+ "data-entry": h.id,
879
+ title: C(h.at),
880
+ ...e.kind === "polls" ? { "data-poll-group": e.events.length } : e.kind === "hollow" ? { "data-hollow-group": e.events.length } : {
881
+ "data-message": h.id,
882
+ "data-message-node": h.node
883
+ }
884
+ };
885
+ if (e.kind !== "event" || K(h)) return /* @__PURE__ */ (0, m.jsxs)("div", {
886
+ ..._,
887
+ children: [g, e.kind === "event" && u(h)]
888
+ });
889
+ let v = O(h), y = h.detail.toolCallId !== void 0 || h.detail.role === "toolResult", b = ve(h.detail.clip);
890
+ if (h.detail.role === "user" && v && !y) {
891
+ let e = `prompt:${s(h)}`, t = G(v).length > 280, n = t && !a.has(e);
892
+ return /* @__PURE__ */ (0, m.jsxs)("article", {
893
+ ..._,
894
+ children: [
895
+ g,
896
+ t && /* @__PURE__ */ (0, m.jsx)("p", {
897
+ className: "ar-prompt-more",
898
+ children: /* @__PURE__ */ (0, m.jsx)("button", {
899
+ type: "button",
900
+ className: "link-button",
901
+ "data-open-key": e,
902
+ "aria-expanded": !n,
903
+ onClick: () => c(e, n),
904
+ children: n ? "Full prompt" : "Shorter"
905
+ })
906
+ }),
907
+ !n && /* @__PURE__ */ (0, m.jsx)(X, {
908
+ clip: b,
909
+ open: d(h)
910
+ }),
911
+ u(h)
912
+ ]
913
+ });
914
+ }
915
+ let x = h.detail.recordedClaim !== void 0, S = [h.detail.publicationNote, x ? h.detail.assessment : void 0].filter((e) => !!e);
916
+ return /* @__PURE__ */ (0, m.jsxs)("article", {
917
+ ..._,
921
918
  children: [
922
- /* @__PURE__ */ (0, p.jsx)(l, {
923
- className: "ar-tl",
924
- items: I,
925
- renderToolActions: _e
919
+ g,
920
+ v && !y && /* @__PURE__ */ (0, m.jsx)(X, {
921
+ clip: A(h).length ? void 0 : b,
922
+ open: d(h)
926
923
  }),
927
- w && !P && /* @__PURE__ */ (0, p.jsx)(X, {
928
- clip: T.length ? void 0 : F,
929
- open: h(y)
930
- }),
931
- R.map((e) => /* @__PURE__ */ (0, p.jsx)("p", {
924
+ S.map((e) => /* @__PURE__ */ (0, m.jsx)("p", {
932
925
  className: "publication-note",
933
926
  children: e
934
927
  }, e)),
935
- m(y)
928
+ u(h)
936
929
  ]
937
930
  });
938
931
  }
939
932
  //#endregion
940
933
  //#region src/viewer/Conversation.tsx
941
- function Z({ index: e, actor: t, cutoff: n, query: r, category: i, selected: a, openSource: o, flags: s, onFlag: c, lifecycle: l = !1, live: u = !1 }) {
942
- let [d, m] = (0, f.useState)(() => {
934
+ function Q({ index: e, actor: t, cutoff: n, query: r, category: i, selected: a, openSource: o, flags: c, onFlag: l, lifecycle: u = !1, live: d = !1, opening: f }) {
935
+ let [h, g] = (0, p.useState)(() => {
943
936
  let t = R(e.events);
944
937
  return new Set(e.events.filter((e) => e.detail.promptKind === "initial").map((e) => `prompt:${t.get(e.id) ?? e.id}`));
945
- }), h = (0, f.useRef)(null), g = (0, f.useMemo)(() => R(e.events), [e]), _ = (0, f.useCallback)((e) => g.get(e.id) ?? e.id, [g]), v = (e) => o ? (t) => o(t, e) : void 0, y = (e, t) => m((n) => {
938
+ }), _ = (0, p.useRef)(null), v = (0, p.useMemo)(() => R(e.events), [e]), y = (0, p.useCallback)((e) => v.get(e.id) ?? e.id, [v]), b = (e) => o ? (t) => o(t, e) : void 0, x = (e, t) => g((n) => {
946
939
  if (n.has(e) === t) return n;
947
940
  let r = new Set(n);
948
941
  return t ? r.add(e) : r.delete(e), r;
949
- }), b = (t, n) => {
950
- let r = O(t.node, n.id);
942
+ }), C = (t, n) => {
943
+ let r = k(t.node, n.id);
951
944
  return e.calls.get(r)?.length === 1 ? e.results.get(r) ?? [] : [];
952
- }, S = (0, f.useMemo)(() => {
945
+ }, w = (0, p.useMemo)(() => {
953
946
  if (!a) return;
954
947
  let t = e.byEvent.get(a);
955
948
  if (t?.detail.toolCallId !== void 0) {
956
- let n = e.calls.get(O(t.node, t.detail.toolCallId));
949
+ let n = e.calls.get(k(t.node, t.detail.toolCallId));
957
950
  if (n?.length === 1) return n[0].event.id;
958
951
  }
959
952
  return a;
960
- }, [a, e]), C = (0, f.useMemo)(() => (e.byActor.get(t) ?? []).filter((t) => {
961
- if (x(t.at) > n) return !1;
962
- if (t.id === S) return !0;
963
- if (G(t)) return l && F(t, e, r, i);
953
+ }, [a, e]), T = (0, p.useMemo)(() => (e.byActor.get(t) ?? []).filter((t) => {
954
+ if (S(t.at) > n) return !1;
955
+ if (t.id === w) return !0;
956
+ if (K(t)) return u && I(t, e, r, i);
964
957
  if (t.detail.toolCallId !== void 0) {
965
- let r = e.calls.get(O(t.node, t.detail.toolCallId));
966
- if (r?.length === 1 && x(r[0].event.at) <= n) return !1;
958
+ let r = e.calls.get(k(t.node, t.detail.toolCallId));
959
+ if (r?.length === 1 && S(r[0].event.at) <= n) return !1;
967
960
  }
968
- let a = k(t);
969
- return !(t.detail.role || D(t) || t.detail.reasoning || t.detail.responseStatus === "error" || a.length) || t.detail.role === "assistant" && !D(t) && !t.detail.reasoning && !a.length && t.detail.responseStatus !== "error" && !t.detail.contentOmitted && (!U(t.detail).length || ee(t.detail)) ? !1 : F(t, e, r, i) ? !0 : a.some((a) => {
970
- let o = O(t.node, a.id);
971
- return e.calls.get(o)?.length === 1 && (e.results.get(o) ?? []).some((t) => x(t.at) <= n && F(t, e, r, i));
961
+ let a = A(t);
962
+ return !(t.detail.role || O(t) || t.detail.reasoning || t.detail.responseStatus === "error" || a.length) || t.detail.role === "assistant" && !O(t) && !t.detail.reasoning && !a.length && t.detail.responseStatus !== "error" && !t.detail.contentOmitted && (!U(t.detail).length || te(t.detail)) ? !1 : I(t, e, r, i) ? !0 : a.some((a) => {
963
+ let o = k(t.node, a.id);
964
+ return e.calls.get(o)?.length === 1 && (e.results.get(o) ?? []).some((t) => S(t.at) <= n && I(t, e, r, i));
972
965
  });
973
966
  }), [
974
967
  e,
@@ -976,115 +969,150 @@ function Z({ index: e, actor: t, cutoff: n, query: r, category: i, selected: a,
976
969
  n,
977
970
  r,
978
971
  i,
979
- l,
980
- S
981
- ]), w = (0, f.useMemo)(() => oe(ce(C, {
982
- callsOf: k,
983
- answered: (t, n) => re(e.results.get(O(t.node, n))),
984
- keyOf: _
972
+ u,
973
+ w
974
+ ]), E = (0, p.useMemo)(() => {
975
+ if (!f?.text || r || i !== "all" || T.some((e) => e.detail.role === "user")) return T;
976
+ let e = T[0]?.at ?? f.at;
977
+ return [{
978
+ id: `${t}:opening`,
979
+ node: t,
980
+ at: e < f.at ? e : f.at,
981
+ kind: "message",
982
+ category: "other",
983
+ label: "prompt",
984
+ detail: {
985
+ role: "user",
986
+ publicText: f.text,
987
+ promptKind: "initial"
988
+ }
989
+ }, ...T];
990
+ }, [
991
+ T,
992
+ f,
993
+ t,
994
+ r,
995
+ i
996
+ ]), D = (0, p.useMemo)(() => se(W(E, {
997
+ callsOf: A,
998
+ answered: (t, n) => ie(e.results.get(k(t.node, n))),
999
+ keyOf: y
985
1000
  }), {
986
- callsOf: k,
987
- captured: (t, n) => (e.results.get(O(t.node, n)) ?? []).some((e) => D(e)),
988
- keyOf: _
1001
+ callsOf: A,
1002
+ captured: (t, n) => (e.results.get(k(t.node, n)) ?? []).some((e) => O(e)),
1003
+ keyOf: y
989
1004
  }), [
990
- C,
1005
+ E,
991
1006
  e,
992
- _
993
- ]), T = (0, f.useMemo)(() => {
1007
+ y
1008
+ ]), j = (0, p.useMemo)(() => {
994
1009
  let n = /* @__PURE__ */ new Map(), r = null;
995
1010
  for (let i of e.byActor.get(t) ?? []) {
996
- let e = x(i.at);
1011
+ let e = S(i.at);
997
1012
  r !== null && Number.isFinite(e) && U(i.detail).length && n.set(i.id, Math.max(0, e - r)), Number.isFinite(e) && (r = e);
998
1013
  }
999
1014
  return n;
1000
- }, [e, t]), E = (0, f.useMemo)(() => {
1015
+ }, [e, t]), M = (0, p.useMemo)(() => {
1001
1016
  let e = /* @__PURE__ */ new Map();
1002
- for (let t of w) if (t.kind === "polls") for (let n of t.events) e.set(n.id, t.key);
1017
+ for (let t of D) if (t.kind === "polls") for (let n of t.events) e.set(n.id, t.key);
1003
1018
  else if (t.kind === "hollow") for (let n of t.events) e.set(n.id, t.key);
1004
1019
  else e.set(t.event.id, t.key);
1005
1020
  return e;
1006
- }, [w]), A = (e.byActor.get(t) ?? []).some((e) => !G(e) && (e.detail.role || D(e) || k(e).length)), j = (0, f.useRef)(S);
1007
- j.current = S;
1008
- let M = (0, f.useRef)(!1);
1009
- (0, f.useLayoutEffect)(() => {
1010
- M.current = u && !j.current, h.current && !j.current && (h.current.scrollTop = u ? h.current.scrollHeight : 0);
1011
- }, [t]), (0, f.useEffect)(() => {
1012
- let e = h.current;
1021
+ }, [D]), N = (e.byActor.get(t) ?? []).some((e) => !K(e) && (e.detail.role || O(e) || A(e).length)), P = (0, p.useRef)(w);
1022
+ P.current = w;
1023
+ let F = (0, p.useRef)(!1);
1024
+ (0, p.useLayoutEffect)(() => {
1025
+ F.current = d && !P.current, _.current && !P.current && (_.current.scrollTop = d ? _.current.scrollHeight : 0);
1026
+ }, [t]), (0, p.useEffect)(() => {
1027
+ let e = _.current;
1013
1028
  if (!e) return;
1014
1029
  let t = () => {
1015
- M.current = e.scrollHeight - e.scrollTop - e.clientHeight < 24;
1030
+ F.current = e.scrollHeight - e.scrollTop - e.clientHeight < 24;
1016
1031
  };
1017
1032
  return e.addEventListener("scroll", t, { passive: !0 }), () => e.removeEventListener("scroll", t);
1018
- }, []), (0, f.useLayoutEffect)(() => {
1019
- let e = h.current;
1020
- if (!e || !M.current) return;
1033
+ }, []), (0, p.useLayoutEffect)(() => {
1034
+ let e = _.current;
1035
+ if (!e || !F.current) return;
1021
1036
  e.scrollTop = e.scrollHeight;
1022
1037
  let t = 0, n = requestAnimationFrame(function r() {
1023
- M.current && (e.scrollTop = e.scrollHeight, ++t < 20 && (n = requestAnimationFrame(r)));
1038
+ F.current && (e.scrollTop = e.scrollHeight, ++t < 20 && (n = requestAnimationFrame(r)));
1024
1039
  });
1025
1040
  return () => cancelAnimationFrame(n);
1026
- }, [w]), (0, f.useEffect)(() => {
1041
+ }, [D]), (0, p.useEffect)(() => {
1027
1042
  if (!a) return;
1028
1043
  let t = e.byEvent.get(a);
1029
1044
  if (!t) return;
1030
- let n = [`prompt:${_(t)}`, `reasoning:${_(t)}`];
1031
- if (t.detail.toolCallId !== void 0) for (let r of e.calls.get(O(t.node, t.detail.toolCallId)) ?? []) n.push(`tool:${_(r.event)}:${r.call.id}`, E.get(r.event.id) ?? "");
1032
- for (let e of k(t)) n.push(`tool:${_(t)}:${e.id}`);
1033
- let r = E.get(a);
1034
- r?.startsWith("polls:") && n.push(r), m((e) => /* @__PURE__ */ new Set([...e, ...n.filter(Boolean)]));
1045
+ let n = [`prompt:${y(t)}`, `reasoning:${y(t)}`];
1046
+ if (t.detail.toolCallId !== void 0) for (let r of e.calls.get(k(t.node, t.detail.toolCallId)) ?? []) n.push(`tool:${y(r.event)}:${r.call.id}`, M.get(r.event.id) ?? "");
1047
+ for (let e of A(t)) n.push(`tool:${y(t)}:${e.id}`);
1048
+ let r = M.get(a);
1049
+ r?.startsWith("polls:") && n.push(r), g((e) => /* @__PURE__ */ new Set([...e, ...n.filter(Boolean)]));
1035
1050
  }, [a, e]);
1036
- let N = (e) => {
1037
- let t = s?.get(e.id);
1038
- return t?.length ? /* @__PURE__ */ (0, p.jsx)("span", {
1051
+ let L = (e) => {
1052
+ let t = c?.get(e.id);
1053
+ return t?.length ? /* @__PURE__ */ (0, m.jsx)("span", {
1039
1054
  className: "event-flags",
1040
- children: t.map((t) => /* @__PURE__ */ (0, p.jsx)("button", {
1055
+ children: t.map((t) => /* @__PURE__ */ (0, m.jsx)("button", {
1041
1056
  type: "button",
1042
1057
  className: `event-flag polarity-${t.polarity}`,
1043
1058
  title: t.title,
1044
1059
  "data-flag": t.dimension,
1045
- onClick: () => c?.(t, e),
1060
+ onClick: () => l?.(t, e),
1046
1061
  children: t.dimension
1047
1062
  }, `${t.dimension}:${t.label}`))
1048
1063
  }) : null;
1049
- }, P = (0, f.useCallback)((e) => e.key, []), L = (0, f.useCallback)((e) => e.kind === "polls" ? 36 : e.kind === "hollow" || G(e.event) ? 26 : !D(e.event) && k(e.event).length ? 16 + 36 * k(e.event).length : 96, []);
1050
- return /* @__PURE__ */ (0, p.jsx)(p.Fragment, { children: /* @__PURE__ */ (0, p.jsxs)("div", {
1064
+ }, z = (0, p.useCallback)((e) => e.key, []), B = (0, p.useCallback)((e) => e.kind === "polls" ? 36 : e.kind === "hollow" || K(e.event) ? 26 : !O(e.event) && A(e.event).length ? 16 + 36 * A(e.event).length : 96, []), V = {
1065
+ index: e,
1066
+ cutoff: n,
1067
+ selected: a,
1068
+ opened: h,
1069
+ anchor: y,
1070
+ opener: b,
1071
+ setOpen: x,
1072
+ flagMarks: L,
1073
+ paired: C,
1074
+ thinkingSpan: j,
1075
+ flags: c,
1076
+ live: d
1077
+ }, H = (0, p.useMemo)(() => D.map((e) => xe(e, V)), [
1078
+ D,
1079
+ h,
1080
+ n,
1081
+ a,
1082
+ d,
1083
+ e,
1084
+ j
1085
+ ]);
1086
+ return /* @__PURE__ */ (0, m.jsx)(m.Fragment, { children: /* @__PURE__ */ (0, m.jsxs)("div", {
1051
1087
  className: "conversation-scroll",
1052
1088
  "data-chat": !0,
1053
- ref: h,
1089
+ ref: _,
1054
1090
  tabIndex: 0,
1055
1091
  "aria-label": "Scrollable retained conversation",
1056
- children: [!w.length && /* @__PURE__ */ (0, p.jsx)("p", {
1092
+ children: [!D.length && /* @__PURE__ */ (0, m.jsx)("p", {
1057
1093
  className: "chat-empty",
1058
- children: r || i !== "all" ? "No messages match this filter." : A ? "No messages at the selected time." : "Conversation not retained. Its absence does not mean the agent did no work."
1059
- }), /* @__PURE__ */ (0, p.jsx)(I, {
1060
- items: w,
1061
- keyOf: P,
1062
- render: (t) => /* @__PURE__ */ (0, p.jsx)(xe, {
1063
- row: t,
1064
- context: {
1065
- index: e,
1066
- cutoff: n,
1067
- selected: a,
1068
- opened: d,
1069
- anchor: _,
1070
- opener: v,
1071
- setOpen: y,
1072
- flagMarks: N,
1073
- paired: b,
1074
- thinkingSpan: T,
1075
- flags: s,
1076
- live: u
1077
- }
1078
- }),
1079
- scroller: h,
1080
- target: S ? E.get(S) : void 0,
1081
- estimate: L
1094
+ children: r || i !== "all" ? "No messages match this filter." : N ? "No messages at the selected time." : "Conversation not retained. Its absence does not mean the agent did no work."
1095
+ }), /* @__PURE__ */ (0, m.jsx)(s, {
1096
+ className: "ar-chat",
1097
+ children: /* @__PURE__ */ (0, m.jsx)(ee, {
1098
+ items: D,
1099
+ keyOf: z,
1100
+ render: (e, t) => /* @__PURE__ */ (0, m.jsx)(Z, {
1101
+ row: e,
1102
+ items: H[t] ?? [],
1103
+ previous: t ? Se(H[t - 1] ?? []) : void 0,
1104
+ context: V
1105
+ }),
1106
+ scroller: _,
1107
+ target: w ? M.get(w) : void 0,
1108
+ estimate: B
1109
+ })
1082
1110
  })]
1083
1111
  }) });
1084
1112
  }
1085
1113
  //#endregion
1086
1114
  //#region src/viewer/prompts.ts
1087
- function Se(e) {
1115
+ function Ce(e) {
1088
1116
  let t = e.events.map((e) => ({
1089
1117
  ...e,
1090
1118
  detail: { ...e.detail }
@@ -1120,75 +1148,75 @@ function Se(e) {
1120
1148
  }
1121
1149
  //#endregion
1122
1150
  //#region src/workspace/EventDetail.tsx
1123
- function Q({ event: e, full: t, index: n, onClose: r, load: i }) {
1124
- let [a, o] = (0, f.useState)({}), [s, c] = (0, f.useState)({}), l = e.source;
1125
- (0, f.useEffect)(() => {
1151
+ function we({ event: e, full: t, index: n, onClose: r, load: i }) {
1152
+ let [a, o] = (0, p.useState)({}), [s, c] = (0, p.useState)({}), l = e.source;
1153
+ (0, p.useEffect)(() => {
1126
1154
  t && i(t).then((e) => c({ text: e })).catch((e) => c({ error: e instanceof Error ? e.message : "Unavailable" }));
1127
1155
  }, [t, i]);
1128
1156
  let u = (e, t) => i(`${e}${t ? `?line=${t}` : ""}`);
1129
- return (0, f.useEffect)(() => {
1157
+ return (0, p.useEffect)(() => {
1130
1158
  let e = (e) => {
1131
1159
  e.key === "Escape" && r();
1132
1160
  };
1133
1161
  return window.addEventListener("keydown", e), () => window.removeEventListener("keydown", e);
1134
- }, [r]), /* @__PURE__ */ (0, p.jsxs)("aside", {
1162
+ }, [r]), /* @__PURE__ */ (0, m.jsxs)("aside", {
1135
1163
  className: "event-detail",
1136
1164
  role: "dialog",
1137
1165
  "aria-label": "Event details",
1138
1166
  "data-event-detail": e.id,
1139
1167
  children: [
1140
- /* @__PURE__ */ (0, p.jsxs)("header", { children: [/* @__PURE__ */ (0, p.jsxs)("div", { children: [/* @__PURE__ */ (0, p.jsx)("h3", { children: e.label }), /* @__PURE__ */ (0, p.jsxs)("p", {
1168
+ /* @__PURE__ */ (0, m.jsxs)("header", { children: [/* @__PURE__ */ (0, m.jsxs)("div", { children: [/* @__PURE__ */ (0, m.jsx)("h3", { children: e.label }), /* @__PURE__ */ (0, m.jsxs)("p", {
1141
1169
  className: "faint mono",
1142
1170
  children: [
1143
- S(e.at, !0),
1171
+ C(e.at, !0),
1144
1172
  " · ",
1145
1173
  n.nodes.get(n.canonical(e.node))?.label ?? e.node,
1146
1174
  " · ",
1147
1175
  e.category
1148
1176
  ]
1149
- })] }), /* @__PURE__ */ (0, p.jsx)("button", {
1177
+ })] }), /* @__PURE__ */ (0, m.jsx)("button", {
1150
1178
  type: "button",
1151
1179
  className: "ui-button",
1152
1180
  onClick: r,
1153
1181
  children: "Close"
1154
1182
  })] }),
1155
- /* @__PURE__ */ (0, p.jsx)("p", {
1183
+ /* @__PURE__ */ (0, m.jsx)("p", {
1156
1184
  className: "mono faint event-id",
1157
1185
  children: e.id
1158
1186
  }),
1159
- t ? /* @__PURE__ */ (0, p.jsxs)("section", {
1187
+ t ? /* @__PURE__ */ (0, m.jsxs)("section", {
1160
1188
  className: "event-full",
1161
1189
  "data-full-output": s.text === void 0 ? void 0 : t,
1162
1190
  children: [
1163
- /* @__PURE__ */ (0, p.jsx)("h4", { children: "Full output" }),
1164
- /* @__PURE__ */ (0, p.jsxs)("p", {
1191
+ /* @__PURE__ */ (0, m.jsx)("h4", { children: "Full output" }),
1192
+ /* @__PURE__ */ (0, m.jsxs)("p", {
1165
1193
  className: "mono faint",
1166
1194
  children: ["sha256 ", t]
1167
1195
  }),
1168
- s.error && /* @__PURE__ */ (0, p.jsx)("p", {
1196
+ s.error && /* @__PURE__ */ (0, m.jsx)("p", {
1169
1197
  role: "alert",
1170
1198
  children: s.error
1171
1199
  }),
1172
- s.text === void 0 && !s.error && /* @__PURE__ */ (0, p.jsx)("p", {
1200
+ s.text === void 0 && !s.error && /* @__PURE__ */ (0, m.jsx)("p", {
1173
1201
  className: "faint",
1174
1202
  children: "Loading…"
1175
1203
  }),
1176
- s.text !== void 0 && /* @__PURE__ */ (0, p.jsx)(b, {
1204
+ s.text !== void 0 && /* @__PURE__ */ (0, m.jsx)(x, {
1177
1205
  text: s.text,
1178
1206
  rawLabel: "Original bytes"
1179
1207
  })
1180
1208
  ]
1181
- }) : D(e) && (e.detail.toolCallId !== void 0 || e.category === "lifecycle" ? /* @__PURE__ */ (0, p.jsx)(b, { text: D(e) }) : /* @__PURE__ */ (0, p.jsx)(_, { text: D(e) })),
1182
- /* @__PURE__ */ (0, p.jsxs)("details", {
1209
+ }) : O(e) && (e.detail.toolCallId !== void 0 || e.category === "lifecycle" ? /* @__PURE__ */ (0, m.jsx)(x, { text: O(e) }) : /* @__PURE__ */ (0, m.jsx)(v, { text: O(e) })),
1210
+ /* @__PURE__ */ (0, m.jsxs)("details", {
1183
1211
  className: "raw-data",
1184
1212
  open: !t,
1185
- children: [/* @__PURE__ */ (0, p.jsx)("summary", { children: "Recorded detail" }), /* @__PURE__ */ (0, p.jsx)("pre", { children: JSON.stringify(e.detail, null, 2) })]
1213
+ children: [/* @__PURE__ */ (0, m.jsx)("summary", { children: "Recorded detail" }), /* @__PURE__ */ (0, m.jsx)("pre", { children: JSON.stringify(e.detail, null, 2) })]
1186
1214
  }),
1187
- l?.path && /* @__PURE__ */ (0, p.jsxs)("section", {
1215
+ l?.path && /* @__PURE__ */ (0, m.jsxs)("section", {
1188
1216
  className: "event-source",
1189
1217
  children: [
1190
- /* @__PURE__ */ (0, p.jsx)("h4", { children: "Source" }),
1191
- /* @__PURE__ */ (0, p.jsxs)("p", {
1218
+ /* @__PURE__ */ (0, m.jsx)("h4", { children: "Source" }),
1219
+ /* @__PURE__ */ (0, m.jsxs)("p", {
1192
1220
  className: "mono",
1193
1221
  children: [
1194
1222
  l.path,
@@ -1196,21 +1224,21 @@ function Q({ event: e, full: t, index: n, onClose: r, load: i }) {
1196
1224
  l.pointer ? `#${l.pointer}` : ""
1197
1225
  ]
1198
1226
  }),
1199
- l.sha256 && /* @__PURE__ */ (0, p.jsxs)("p", {
1227
+ l.sha256 && /* @__PURE__ */ (0, m.jsxs)("p", {
1200
1228
  className: "mono faint",
1201
1229
  children: ["sha256 ", l.sha256]
1202
1230
  }),
1203
- l.sha256 && l.line && a.text === void 0 && /* @__PURE__ */ (0, p.jsx)("button", {
1231
+ l.sha256 && l.line && a.text === void 0 && /* @__PURE__ */ (0, m.jsx)("button", {
1204
1232
  type: "button",
1205
1233
  className: "ui-button",
1206
1234
  onClick: () => u(l.sha256, l.line).then((e) => o({ text: e })).catch((e) => o({ error: e instanceof Error ? e.message : "Unavailable" })),
1207
1235
  children: "Original line"
1208
1236
  }),
1209
- a.error && /* @__PURE__ */ (0, p.jsx)("p", {
1237
+ a.error && /* @__PURE__ */ (0, m.jsx)("p", {
1210
1238
  role: "alert",
1211
1239
  children: a.error
1212
1240
  }),
1213
- a.text !== void 0 && /* @__PURE__ */ (0, p.jsx)(b, {
1241
+ a.text !== void 0 && /* @__PURE__ */ (0, m.jsx)(x, {
1214
1242
  text: a.text,
1215
1243
  rawLabel: "Original bytes"
1216
1244
  })
@@ -1221,7 +1249,7 @@ function Q({ event: e, full: t, index: n, onClose: r, load: i }) {
1221
1249
  }
1222
1250
  //#endregion
1223
1251
  //#region src/workspace/source-reader.ts
1224
- function Ce(e) {
1252
+ function Te(e) {
1225
1253
  return async (t) => {
1226
1254
  let n = await fetch(`${e}/source/${t}`, { credentials: "same-origin" });
1227
1255
  if (!n.ok) throw Error(n.status === 409 ? "The source no longer matches its recorded hash." : `Source unavailable (HTTP ${n.status})`);
@@ -1231,9 +1259,9 @@ function Ce(e) {
1231
1259
  //#endregion
1232
1260
  //#region src/workspace/record-part.tsx
1233
1261
  function $(e) {
1234
- let t = d(e, void 0, !0);
1262
+ let t = f(e, void 0, !0);
1235
1263
  return {
1236
- ...(0, f.useMemo)(() => {
1264
+ ...(0, p.useMemo)(() => {
1237
1265
  if (!t.data) return {
1238
1266
  record: null,
1239
1267
  index: null,
@@ -1241,10 +1269,10 @@ function $(e) {
1241
1269
  error: void 0
1242
1270
  };
1243
1271
  try {
1244
- let e = Se(u(t.data)), n = t.data.nodeStats ?? {};
1272
+ let e = Ce(d(t.data)), n = t.data.nodeStats ?? {};
1245
1273
  return {
1246
1274
  record: e,
1247
- index: M(e),
1275
+ index: N(e),
1248
1276
  stats: n,
1249
1277
  error: void 0
1250
1278
  };
@@ -1262,38 +1290,40 @@ function $(e) {
1262
1290
  pending: !!e && t.data === void 0 && !t.error
1263
1291
  };
1264
1292
  }
1265
- function we({ runUrl: e, version: t, index: n, actor: r }) {
1266
- let i = $(`${e}/record?node=${encodeURIComponent(r)}${t}`);
1267
- return i.index ? /* @__PURE__ */ (0, p.jsx)(Te, {
1293
+ function Ee({ runUrl: e, version: t, index: n, actor: r, opening: i }) {
1294
+ let a = $(`${e}/record?node=${encodeURIComponent(r)}${t}`);
1295
+ return a.index ? /* @__PURE__ */ (0, m.jsx)(De, {
1268
1296
  runUrl: e,
1269
- index: i.index,
1270
- actor: r
1271
- }) : /* @__PURE__ */ (0, p.jsx)("p", {
1297
+ index: a.index,
1298
+ actor: r,
1299
+ opening: i
1300
+ }) : /* @__PURE__ */ (0, m.jsx)("p", {
1272
1301
  className: "ws-status",
1273
- role: i.fetchError || i.error ? "alert" : "status",
1274
- children: i.fetchError || i.error ? `This agent's record is unavailable: ${i.fetchError ?? i.error}` : `Loading ${n.nodes.get(r)?.label ?? "the agent"}'s conversation…`
1302
+ role: a.fetchError || a.error ? "alert" : "status",
1303
+ 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…`
1275
1304
  });
1276
1305
  }
1277
- function Te({ runUrl: e, index: t, actor: n }) {
1278
- let [r, i] = (0, f.useState)(null), a = (0, f.useMemo)(() => Ce(e), [e]);
1279
- return /* @__PURE__ */ (0, p.jsxs)(p.Fragment, { children: [/* @__PURE__ */ (0, p.jsx)(Z, {
1306
+ function De({ runUrl: e, index: t, actor: n, opening: r }) {
1307
+ let [i, a] = (0, p.useState)(null), o = (0, p.useMemo)(() => Te(e), [e]);
1308
+ return /* @__PURE__ */ (0, m.jsxs)(m.Fragment, { children: [/* @__PURE__ */ (0, m.jsx)(Q, {
1280
1309
  index: t,
1281
1310
  actor: n,
1282
1311
  cutoff: t.end,
1283
1312
  query: "",
1284
1313
  category: "all",
1285
1314
  lifecycle: !1,
1286
- openSource: (e, t) => i({
1315
+ opening: r,
1316
+ openSource: (e, t) => a({
1287
1317
  event: t,
1288
1318
  sha: e
1289
1319
  })
1290
- }), r && /* @__PURE__ */ (0, p.jsx)(Q, {
1291
- event: r.event,
1292
- full: r.sha,
1320
+ }), i && /* @__PURE__ */ (0, m.jsx)(we, {
1321
+ event: i.event,
1322
+ full: i.sha,
1293
1323
  index: t,
1294
- onClose: () => i(null),
1295
- load: a
1296
- }, `${r.event.id}:${r.sha ?? ""}`)] });
1324
+ onClose: () => a(null),
1325
+ load: o
1326
+ }, `${i.event.id}:${i.sha ?? ""}`)] });
1297
1327
  }
1298
1328
  //#endregion
1299
- export { M as a, h as c, P as i, _ as l, $ as n, N as o, Z as r, S as s, we as t };
1329
+ export { N as a, g as c, F as i, v as l, $ as n, P as o, Q as r, C as s, Ee as t };