@tangle-network/sandbox-cli 0.21.63 → 0.21.65

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/README.md +31 -3
  2. package/SKILL.md +29 -1
  3. package/dist/graph-native-CS_TmaCK.mjs +1 -0
  4. package/dist/graph-viewer/Analytics-bWsqhurt.js +1001 -0
  5. package/dist/graph-viewer/{AnswerStrip-DhwqOyxI.js → AnswerStrip-COxV7gLW.js} +2 -2
  6. package/dist/graph-viewer/Checks-CQGmKcQ0.js +164 -0
  7. package/dist/graph-viewer/Conversations-DgCshBAf.js +627 -0
  8. package/dist/graph-viewer/{Files-DtZhf0ii.js → Files-CvIOGrAs.js} +81 -90
  9. package/dist/graph-viewer/LiveRun-DHmsr6F7.js +311 -0
  10. package/dist/graph-viewer/{Outputs-QET3nPPp.js → Outputs-rwBg_x36.js} +4 -4
  11. package/dist/graph-viewer/Overview-C150tkVa.js +194 -0
  12. package/dist/graph-viewer/{RunOverview-DJQDAMIx.js → RunOverview-CSqsunqf.js} +2 -2
  13. package/dist/graph-viewer/RunPage-F_prVwiV.js +286 -0
  14. package/dist/graph-viewer/Timeline-BFDywlmz.js +335 -0
  15. package/dist/graph-viewer/Today-BdDuqZGF.js +623 -0
  16. package/dist/graph-viewer/Topology-SAfGtd5u.js +238 -0
  17. package/dist/graph-viewer/Traces-BYqXaS_s.js +254 -0
  18. package/dist/graph-viewer/{WallPages-4d9QUZDq.js → WallPages-MM70VZrC.js} +48 -30
  19. package/dist/graph-viewer/agent-runtime.js +55 -55
  20. package/dist/graph-viewer/{data-BJmP7F1M.js → data-DTGmre1W.js} +31 -27
  21. package/dist/graph-viewer/harness-sessions.js +1 -1
  22. package/dist/graph-viewer/index.js +1357 -1392
  23. package/dist/graph-viewer/{lazy-pages-DM0cZM10.js → lazy-pages-BYuq_L_n.js} +9 -5
  24. package/dist/graph-viewer/{outputs-model-CGdvjkQh.js → outputs-model-CHTx8rMz.js} +2 -2
  25. package/dist/graph-viewer/{viewer/plain-words-CgvxtEOa.js → plain-words-BrMHl0On.js} +9 -4
  26. package/dist/graph-viewer/receipt.js +2 -2
  27. package/dist/graph-viewer/record-CsP_3NJS.js +612 -0
  28. package/dist/graph-viewer/record-part-CuT9Xw37.js +334 -0
  29. package/dist/graph-viewer/record.js +2 -336
  30. package/dist/graph-viewer/report-viewer.js +65 -65
  31. package/dist/graph-viewer/report.js +1 -1
  32. package/dist/graph-viewer/research-publication.js +1 -1
  33. package/dist/graph-viewer/{run-files-C1NgzM0l.js → run-files-BckQDdTD.js} +1 -1
  34. package/dist/graph-viewer/{run-receipt-Bvi4-KVM.js → run-receipt-Bt2iXJUy.js} +1 -0
  35. package/dist/graph-viewer/schemas/agent-workspace.play.v1.json +3 -0
  36. package/dist/graph-viewer/schemas/agent-workspace.plays.v1.json +2 -0
  37. package/dist/graph-viewer/schemas/agent-workspace.run.v1.json +1 -0
  38. package/dist/graph-viewer/styles.css +4559 -2385
  39. package/dist/graph-viewer/trace-spans.js +1 -1
  40. package/dist/graph-viewer/ui-xa5w5bEN.js +889 -0
  41. package/dist/graph-viewer/viewer/{AgentGraphCanvas-CMdOlSlh-4EervjeC.js → AgentGraphCanvas-B74GN1o6-BZEumF7-.js} +2610 -2707
  42. package/dist/graph-viewer/viewer/Analytics-E3XS570U.js +1002 -0
  43. package/dist/graph-viewer/viewer/{AnswerStrip-CGUyXuYH.js → AnswerStrip-B7xMU57A.js} +2 -2
  44. package/dist/graph-viewer/viewer/Checks-CJ5XSHbv.js +165 -0
  45. package/dist/graph-viewer/viewer/Conversations-AX8G7Qyl.js +904 -0
  46. package/dist/graph-viewer/viewer/Files-DxL1576V.js +630 -0
  47. package/dist/graph-viewer/viewer/LiveRun-B-BckyEj.js +820 -0
  48. package/dist/graph-viewer/viewer/{Outputs-CumGyjQo.js → Outputs-BoIpgfMv.js} +24 -23
  49. package/dist/graph-viewer/viewer/Overview-Dzg5XJgy.js +436 -0
  50. package/dist/graph-viewer/viewer/RunPage-NtevWXBs.js +285 -0
  51. package/dist/graph-viewer/viewer/{Scores-ZS16yk0n.js → Scores-Dgv4WePL.js} +3 -3
  52. package/dist/graph-viewer/viewer/Timeline-CzY3LVDu.js +335 -0
  53. package/dist/graph-viewer/viewer/Today-Bi9IIwuh.js +623 -0
  54. package/dist/graph-viewer/viewer/Topology-CzjqSFXH.js +239 -0
  55. package/dist/graph-viewer/viewer/Traces-CMX0H1VU.js +254 -0
  56. package/dist/graph-viewer/viewer/{WallPages-CzWpyIfp.js → WallPages-Clj4bORg.js} +50 -32
  57. package/dist/graph-viewer/viewer/addon-webgl-BSCscllv.js +4027 -0
  58. package/dist/graph-viewer/viewer/agent-record-BrP-ENHg.css +2 -0
  59. package/dist/graph-viewer/viewer/{bot-D6Nrej7Z.js → bot-BaQU59LG.js} +1 -1
  60. package/dist/graph-viewer/viewer/{chevron-right-D_5IKLxu.js → chevron-right-Xn05jYLT.js} +1 -1
  61. package/dist/graph-viewer/viewer/{createLucideIcon-yH0cxLMy.js → createLucideIcon-BSphcoOJ.js} +1 -1
  62. package/dist/graph-viewer/viewer/dashboard-D3JhmRhe-DSl0zhkw.js +371 -0
  63. package/dist/graph-viewer/viewer/{data-CkWfWr7i.js → data-CVHeKhrh.js} +144 -139
  64. package/dist/graph-viewer/viewer/dist-4_KJz8ZM.js +349 -0
  65. package/dist/graph-viewer/viewer/dist-Dy-wrdTt.js +1615 -0
  66. package/dist/graph-viewer/viewer/es2015-utW4DTOJ.js +3506 -0
  67. package/dist/graph-viewer/viewer/{final-output-kwY11u9X.js → final-output-BYT-g-9j.js} +1 -1
  68. package/dist/graph-viewer/viewer/flow-waterfall-model-DvrgPLGS-BdThSFH-.js +2696 -0
  69. package/dist/graph-viewer/viewer/git-branch-BzTbIcYL.js +28 -0
  70. package/dist/graph-viewer/viewer/{highlights-Btsi5OXl.js → highlights-DWeSCtiR.js} +4 -4
  71. package/dist/graph-viewer/viewer/jsx-runtime-DPT6sCLq.js +319 -0
  72. package/dist/graph-viewer/viewer/lazy-pages-ChiMJ8r_.js +803 -0
  73. package/dist/graph-viewer/viewer/{markdown-CX_sVrXB.js → markdown-lADwhD7y.js} +2324 -2608
  74. package/dist/graph-viewer/viewer/model-brand-bTcMjQtB-RSb7EbGB.js +476 -0
  75. package/dist/graph-viewer/viewer/{page-header-Brq611fd.js → page-header-QbUg8F8i.js} +12 -11
  76. package/dist/graph-viewer/{plain-words-CgvxtEOa.js → viewer/plain-words-BrMHl0On.js} +9 -4
  77. package/dist/graph-viewer/viewer/primitives-znfPK9NP-B6UO7uDr.js +346 -0
  78. package/dist/graph-viewer/viewer/react-DQ7E2Epi.js +4254 -0
  79. package/dist/graph-viewer/viewer/{react-dom-t1L4_-il.js → react-dom-BEusmvQH.js} +1 -1
  80. package/dist/graph-viewer/viewer/record-DZnT6SWN-H-ul3U3a.js +3523 -0
  81. package/dist/graph-viewer/viewer/record-W39D5MO-.js +1 -0
  82. package/dist/graph-viewer/viewer/record-part-CbweyYoV.js +335 -0
  83. package/dist/graph-viewer/viewer/{segmented-control-BaJmvTNd.js → segmented-control-Di1mbQlP.js} +27 -26
  84. package/dist/graph-viewer/viewer/{shiki-Qnby7Sh6.js → shiki-BfNNlmfZ.js} +15 -15
  85. package/dist/graph-viewer/viewer/status-meta-S0kV_RDp.js +273 -0
  86. package/dist/graph-viewer/viewer/{stream-tokenizer-CWtnjmRd.js → stream-tokenizer-B5wWaM3U.js} +12 -12
  87. package/dist/graph-viewer/viewer/{themes-1i1fzpRk.js → themes-DuRxHiga.js} +1 -1
  88. package/dist/graph-viewer/viewer/ui-Co03nZUX.js +889 -0
  89. package/dist/graph-viewer/viewer/utils-BuObIC0n.js +1815 -0
  90. package/dist/graph-viewer/viewer/workbench-E6_5q_oL.js +28351 -0
  91. package/dist/graph-viewer/viewer/workflows--mZpHYqo.js +3298 -0
  92. package/dist/graph-viewer/viewer/workspace-cKs9sGEO.js +2468 -0
  93. package/dist/graph-viewer/{workspace-model-Ewf17pTW.js → workspace-model-BkPl_J8E.js} +1 -1
  94. package/dist/graph-viewer/workspace-viewer.js +7452 -7489
  95. package/dist/graph-viewer/workspace.js +1 -1
  96. package/dist/index.mjs +27 -22
  97. package/package.json +10 -9
  98. package/dist/graph-viewer/Analytics-DFWW8Phh.js +0 -938
  99. package/dist/graph-viewer/Checks-qgqV4xgV.js +0 -155
  100. package/dist/graph-viewer/Conversations-CGB45kpj.js +0 -545
  101. package/dist/graph-viewer/LiveRun-C21wUKAY.js +0 -210
  102. package/dist/graph-viewer/Overview-BjeLsA2I.js +0 -506
  103. package/dist/graph-viewer/RunPage-CkkcBEUe.js +0 -258
  104. package/dist/graph-viewer/Timeline-C2Xolk0t.js +0 -293
  105. package/dist/graph-viewer/Today-BVVDtSVN.js +0 -660
  106. package/dist/graph-viewer/Topology-DO5XX8e4.js +0 -545
  107. package/dist/graph-viewer/Traces-BhMxjNgw.js +0 -259
  108. package/dist/graph-viewer/part-events-BrLrg_EV.js +0 -276
  109. package/dist/graph-viewer/record-part-CZal_IMH.js +0 -1408
  110. package/dist/graph-viewer/ui-D8QZRsC3.js +0 -938
  111. package/dist/graph-viewer/viewer/Analytics-DD__nbLm.js +0 -939
  112. package/dist/graph-viewer/viewer/Checks-Ds5M7eAW.js +0 -156
  113. package/dist/graph-viewer/viewer/Conversations-C1n0EBBd.js +0 -819
  114. package/dist/graph-viewer/viewer/Files-Cjr7NMU_.js +0 -448
  115. package/dist/graph-viewer/viewer/LiveRun-uPTkPSjo.js +0 -6772
  116. package/dist/graph-viewer/viewer/Overview-4Umk14_2.js +0 -507
  117. package/dist/graph-viewer/viewer/RunPage-DZlBW7Va.js +0 -257
  118. package/dist/graph-viewer/viewer/Timeline-BnK6-yBR.js +0 -294
  119. package/dist/graph-viewer/viewer/Today-a_-oNigi.js +0 -660
  120. package/dist/graph-viewer/viewer/Topology-CQPCLQT6.js +0 -546
  121. package/dist/graph-viewer/viewer/Traces-C0IGk0L4.js +0 -259
  122. package/dist/graph-viewer/viewer/WorkflowGraph-DZ3xejKE-jRXKeSrg.js +0 -1559
  123. package/dist/graph-viewer/viewer/agent-record-Dw772ROs.css +0 -2
  124. package/dist/graph-viewer/viewer/agent-timeline-Cs9Qbpvo.js +0 -1798
  125. package/dist/graph-viewer/viewer/dist-C1-7EfoW.js +0 -488
  126. package/dist/graph-viewer/viewer/file-text-m7a3piQF.js +0 -47
  127. package/dist/graph-viewer/viewer/jsx-runtime-DQWyJOhv.js +0 -2136
  128. package/dist/graph-viewer/viewer/lazy-pages-BowaGsg-.js +0 -20
  129. package/dist/graph-viewer/viewer/model-brand-bTcMjQtB-fagiBQam.js +0 -723
  130. package/dist/graph-viewer/viewer/popover-CvOAjlnk.js +0 -5329
  131. package/dist/graph-viewer/viewer/react-CY3IbSNO.js +0 -4262
  132. package/dist/graph-viewer/viewer/record-part-D3_Anfpe.js +0 -1329
  133. package/dist/graph-viewer/viewer/terminal-83J_I4Ne.js +0 -52
  134. package/dist/graph-viewer/viewer/ui-C9b1rIUH.js +0 -938
  135. package/dist/graph-viewer/viewer/workspace-CekmOBs3.js +0 -25100
  136. package/dist/graph-viewer/viewer/x-DOc2URqZ.js +0 -56
@@ -1,819 +0,0 @@
1
- import { i as e } from "./rolldown-runtime-DArdT4gl.js";
2
- import { i as t, t as n } from "./jsx-runtime-DQWyJOhv.js";
3
- import { A as r, _ as i, a, i as o, k as s, p as c, s as l, v as u, w as d, x as f } from "./ui-C9b1rIUH.js";
4
- import { a as p, n as m, r as h, t as g } from "./record-part-D3_Anfpe.js";
5
- //#region src/adapters/part-events.ts
6
- var _ = /* @__PURE__ */ e(t(), 1), v = (e) => typeof e == "string" ? e : e == null ? "" : JSON.stringify(e), y = (e) => typeof e == "number" && Number.isFinite(e) ? e : void 0, b = (e) => {
7
- if (typeof e != "string" && typeof e != "number") return null;
8
- let t = new Date(typeof e == "number" && e < 1e11 ? e * 1e3 : e);
9
- return Number.isFinite(t.valueOf()) && t.valueOf() >= Date.UTC(2001, 0, 1) && t.valueOf() < Date.UTC(2100, 0, 1) ? t.toISOString() : null;
10
- };
11
- function x(e, t, n, r, i, a, o) {
12
- let s = 0, c = [], l = /* @__PURE__ */ new Map(), u = /* @__PURE__ */ new Map(), d = [], f = t.start ? Date.parse(t.start) : null, p, m = null, h = [];
13
- i.forEach((e, t) => {
14
- let n = e?.data ?? {};
15
- if (e?.type === "message.part.updated" && n.part?.id) {
16
- let e = n.part, r = y(e.state?.time?.start) ?? y(e.time?.start);
17
- r !== void 0 && (f = Math.max(f ?? 0, r)), l.has(e.id) || c.push(e.id);
18
- let i = l.get(e.id);
19
- l.set(e.id, {
20
- part: e,
21
- index: t,
22
- firstMs: i?.firstMs ?? f
23
- });
24
- let a = y(e.state?.time?.end) ?? y(e.time?.end);
25
- a !== void 0 && (f = Math.max(f ?? 0, a));
26
- } else if (e?.type === "raw" && n.event?.type === "item.completed" && n.event.item?.id) {
27
- let e = n.event.item;
28
- u.has(e.id) || d.push(e.id), u.set(e.id, {
29
- item: e,
30
- index: t,
31
- firstMs: f
32
- });
33
- } else e?.type === "raw" && n.event?.role === "tool" && typeof n.event.tool_call_id == "string" ? h.push({
34
- index: t,
35
- at: f,
36
- kind: "tool-result",
37
- data: n.event
38
- }) : e?.type === "raw" && n.event?.type === "rate_limit_event" ? h.push({
39
- index: t,
40
- at: f,
41
- kind: "rate-limit",
42
- data: n.event.rate_limit_info ?? {}
43
- }) : e?.type === "done" ? m = {
44
- data: n,
45
- usage: e.usage,
46
- index: t
47
- } : e?.type === "result" && n.outcome && n.outcome.type !== "completed" && h.push({
48
- index: t,
49
- at: f,
50
- kind: "execution-error",
51
- data: n.outcome
52
- });
53
- });
54
- let g = (e) => b(e ?? void 0) ?? t.start ?? null;
55
- for (let i of c) {
56
- let { part: c, index: u } = l.get(i), d = l.get(i).firstMs;
57
- if (c.type === "text" || c.type === "reasoning") {
58
- let o = v(c.text);
59
- if (!o) continue;
60
- let l = e.clip(o, () => a.full(u, [
61
- "data",
62
- "part",
63
- "text"
64
- ], o)), f = g(y(c.time?.start) ?? d);
65
- if (!f) continue;
66
- e.emit({
67
- node: t.id,
68
- at: f,
69
- kind: "message",
70
- category: "reasoning",
71
- label: "assistant",
72
- source: {
73
- path: n,
74
- sha256: r.sha256,
75
- ...a.where(u)
76
- },
77
- detail: {
78
- role: "assistant",
79
- nativeRecordId: i,
80
- ...c.type === "text" ? { publicText: l.text } : { reasoning: l.text },
81
- ...l.clip ? { clip: l.clip } : {},
82
- ...c.time?.start ? {} : { atBasis: "carried" }
83
- }
84
- }), s++, p = e.events.at(-1);
85
- } else if (c.type === "tool") {
86
- let l = c.state ?? {}, f = v(c.tool), p = v(c.callID || i), m = o(f, l.input), h = e.clip(JSON.stringify(l.input ?? {}), () => a.full(u, [
87
- "data",
88
- "part",
89
- "state",
90
- "input"
91
- ], l.input ?? {})), _ = y(l.time?.start) ?? d, b = g(_);
92
- if (!b) continue;
93
- let x = l.status === "completed" || l.status === "error";
94
- if (e.emit({
95
- node: t.id,
96
- at: b,
97
- kind: "message",
98
- category: m,
99
- label: `assistant · ${f}`,
100
- source: {
101
- path: n,
102
- sha256: r.sha256,
103
- ...a.where(u),
104
- ...x ? { item: 0 } : {}
105
- },
106
- detail: {
107
- role: "assistant",
108
- nativeRecordId: i,
109
- publicToolCalls: [{
110
- id: p,
111
- name: f,
112
- input: h.text,
113
- ...h.clip ? { clip: h.clip } : {}
114
- }]
115
- }
116
- }), s++, x) {
117
- let o = l.status === "error" ? "error" : "output", s = v(l[o]), c = e.clip(s, () => a.full(u, [
118
- "data",
119
- "part",
120
- "state",
121
- o
122
- ], l[o])), d = y(l.time?.end);
123
- e.emit({
124
- node: t.id,
125
- at: g(d ?? _),
126
- kind: "tool-result",
127
- category: m,
128
- label: `tool result · ${f}`,
129
- source: {
130
- path: n,
131
- sha256: r.sha256,
132
- ...a.where(u),
133
- item: 1
134
- },
135
- detail: {
136
- role: "toolResult",
137
- nativeRecordId: i,
138
- toolCallId: p,
139
- isError: l.status === "error",
140
- publicText: c.text,
141
- ...c.clip ? { clip: c.clip } : {},
142
- ...d !== void 0 && _ != null ? { durationMs: Math.max(0, d - _) } : {}
143
- }
144
- });
145
- }
146
- }
147
- }
148
- for (let i of d) {
149
- let { item: c, index: l, firstMs: d } = u.get(i);
150
- if (c.type !== "command_execution" && c.type !== "mcp_tool_call" && c.type !== "web_search" && c.type !== "file_change") continue;
151
- let f = g(d);
152
- if (!f) continue;
153
- let p = c.type === "mcp_tool_call" ? v(c.tool ?? c.name) : c.type, m = c.type === "command_execution" ? { command: c.command } : c.type === "web_search" ? { query: c.query } : c.type === "file_change" ? { changes: c.changes } : c.arguments ?? {}, h = e.clip(JSON.stringify(m), () => a.full(l, [
154
- "data",
155
- "event",
156
- "item"
157
- ], c)), _ = o(p, m);
158
- e.emit({
159
- node: t.id,
160
- at: f,
161
- kind: "message",
162
- category: _,
163
- label: `assistant · ${p}`,
164
- source: {
165
- path: n,
166
- sha256: r.sha256,
167
- ...a.where(l),
168
- item: 0
169
- },
170
- detail: {
171
- role: "assistant",
172
- nativeRecordId: v(i),
173
- publicToolCalls: [{
174
- id: v(i),
175
- name: p,
176
- input: h.text,
177
- ...h.clip ? { clip: h.clip } : {}
178
- }]
179
- }
180
- });
181
- let y = v(c.aggregated_output ?? c.result ?? c.output ?? c.status), b = e.clip(y, () => a.full(l, [
182
- "data",
183
- "event",
184
- "item"
185
- ], c));
186
- e.emit({
187
- node: t.id,
188
- at: f,
189
- kind: "tool-result",
190
- category: _,
191
- label: `tool result · ${p}`,
192
- source: {
193
- path: n,
194
- sha256: r.sha256,
195
- ...a.where(l),
196
- item: 1
197
- },
198
- detail: {
199
- role: "toolResult",
200
- nativeRecordId: v(i),
201
- toolCallId: v(i),
202
- isError: typeof c.exit_code == "number" && c.exit_code !== 0 || c.status === "failed",
203
- publicText: b.text,
204
- ...b.clip ? { clip: b.clip } : {},
205
- atBasis: "carried"
206
- }
207
- }), s += 2;
208
- }
209
- for (let i of h) {
210
- let o = g(i.at);
211
- if (!o) continue;
212
- if (i.kind === "tool-result") {
213
- let c = i.data.content, l = typeof c == "string" ? c : Array.isArray(c) ? c.map((e) => v(e?.text ?? e)).join("\n") : v(c), u = e.clip(l, () => a.full(i.index, [
214
- "data",
215
- "event",
216
- "content"
217
- ], c));
218
- e.emit({
219
- node: t.id,
220
- at: o,
221
- kind: "tool-result",
222
- category: "other",
223
- label: "tool result",
224
- source: {
225
- path: n,
226
- sha256: r.sha256,
227
- ...a.where(i.index)
228
- },
229
- detail: {
230
- role: "toolResult",
231
- toolCallId: v(i.data.tool_call_id),
232
- isError: /<system>ERROR/.test(l),
233
- publicText: u.text,
234
- ...u.clip ? { clip: u.clip } : {},
235
- atBasis: "carried"
236
- }
237
- }), s++;
238
- continue;
239
- }
240
- let c = i.data.rateLimitType ?? null, l = c ? y(i.data.unifiedWindows?.[c]?.utilization) ?? null : null;
241
- e.emit({
242
- node: t.id,
243
- at: o,
244
- kind: i.kind,
245
- category: "lifecycle",
246
- label: i.kind === "rate-limit" ? `rate limit · ${c ?? "window unknown"}` : "execution error",
247
- source: {
248
- path: n,
249
- sha256: r.sha256,
250
- ...a.where(i.index)
251
- },
252
- detail: i.kind === "rate-limit" ? {
253
- rateLimit: {
254
- window: c,
255
- utilization: l,
256
- status: i.data.status ?? null
257
- },
258
- data: e.compactValue(i.data)
259
- } : {
260
- responseStatus: "error",
261
- isError: !0,
262
- publicText: e.clip(v(i.data.error ?? i.data), null).text
263
- }
264
- });
265
- }
266
- if (m) {
267
- let r = m.data?.effectiveBackend;
268
- typeof r?.model == "string" && (t.servedModel ??= r.model, t.modelSource ??= "effective backend");
269
- let i = m.usage ?? m.data?.tokenUsage, a = y(i?.cost) ?? y(m.data?.totalCostUsd), o = p ?? [...e.events].reverse().find((r) => r.node === t.id && r.source?.path === e.sourcePath(n)), s = (m.data?.tokensKnown === !1 || m.tokensKnown === !1) && !y(i?.inputTokens) && !y(i?.outputTokens) && !y(i?.cacheReadInputTokens) && !y(i?.cacheCreationInputTokens) && !a;
270
- o && i && !s && (o.detail.usage = {
271
- input: y(i.inputTokens),
272
- output: y(i.outputTokens),
273
- cacheRead: y(i.cacheReadInputTokens),
274
- cacheWrite: y(i.cacheCreationInputTokens)
275
- }, o.detail.usageScope = "execution-total", a !== void 0 && (o.detail.costListUsd = a, o.detail.usdKnown = !1));
276
- }
277
- return s;
278
- }
279
- //#endregion
280
- //#region src/workspace/LiveTranscript.tsx
281
- var S = n(), C = 200, w = 2e3;
282
- function T(e, t, n, r) {
283
- let i = [], a = /* @__PURE__ */ new Map();
284
- for (let e of r) {
285
- if (!e.at || !Number.isFinite(Date.parse(e.at))) continue;
286
- if (!e.event) {
287
- let n = e.stream ?? t, r = a.get(n) ?? [];
288
- r.push(e), a.set(n, r);
289
- continue;
290
- }
291
- let n = e.event, r = `${t}:${e.attempt ?? 1}:${e.seq}`, o = `${e.stream ?? t}:${e.attempt ?? 1}:${n.toolCallId ?? e.seq}`, s = {
292
- id: r,
293
- node: t,
294
- at: e.at,
295
- kind: "message",
296
- category: "other",
297
- label: "assistant"
298
- };
299
- if (n.kind === "text_delta" || n.kind === "reasoning_delta") {
300
- let t = n.kind === "text_delta" ? "publicText" : "reasoning", r = i.at(-1);
301
- r?.detail.streamKind === n.kind && r.detail.attempt === (e.attempt ?? 1) ? r.detail[t] = `${r.detail[t] ?? ""}${n.text ?? ""}` : i.push({
302
- ...s,
303
- detail: {
304
- role: "assistant",
305
- [t]: n.text ?? "",
306
- streamKind: n.kind,
307
- attempt: e.attempt ?? 1
308
- }
309
- });
310
- } else if (n.kind === "tool_call") i.push({
311
- ...s,
312
- label: n.toolName ?? "Tool call",
313
- detail: {
314
- role: "assistant",
315
- publicToolCalls: [{
316
- id: o,
317
- name: n.toolName ?? "Tool call",
318
- ...n.args == null ? {} : { input: typeof n.args == "string" ? n.args : JSON.stringify(n.args) }
319
- }]
320
- }
321
- });
322
- else if (n.kind === "tool_result") {
323
- let e = n.result;
324
- i.push({
325
- ...s,
326
- kind: "tool-result",
327
- detail: {
328
- role: "toolResult",
329
- toolCallId: o,
330
- publicText: typeof e == "string" ? e : JSON.stringify(e ?? null),
331
- isError: !!e && typeof e == "object" && ("error" in e || "isError" in e && e.isError === !0)
332
- }
333
- });
334
- } else i.push({
335
- ...s,
336
- kind: n.kind,
337
- category: "lifecycle",
338
- label: n.kind.replaceAll("_", " "),
339
- detail: {
340
- lifecycle: n.kind,
341
- ...n.text ? { publicText: n.text } : {}
342
- }
343
- });
344
- }
345
- for (let [e, n] of a) x({
346
- events: i,
347
- clip: (e) => ({ text: e }),
348
- compactValue: (e) => e,
349
- sourcePath: (e) => e,
350
- emit: (t) => {
351
- let n = t.detail.nativeRecordId ?? t.source?.line, r = { ...t.detail };
352
- r.publicToolCalls &&= r.publicToolCalls.map((t) => ({
353
- ...t,
354
- id: `${e}:${t.id}`
355
- })), r.toolCallId &&= `${e}:${r.toolCallId}`, i.push({
356
- ...t,
357
- detail: r,
358
- id: `${e}:${n}:${t.kind}:${t.source?.item ?? 0}`
359
- });
360
- }
361
- }, {
362
- id: t,
363
- start: n[0].at
364
- }, e, { sha256: "" }, n, {
365
- where: (e) => ({ line: n[e].seq + 1 }),
366
- full: () => null
367
- }, () => "other");
368
- return {
369
- schema: "agent-record.v1",
370
- runId: e,
371
- title: e,
372
- nodes: n.map((e) => ({
373
- ...e,
374
- kind: "agent"
375
- })),
376
- events: i,
377
- sources: [],
378
- assignment: {
379
- objective: "",
380
- suppliedKnowledge: "",
381
- deliverables: "",
382
- constraints: "",
383
- source: null
384
- },
385
- terminal: null,
386
- coverage: {
387
- completeOriginalCapture: !1,
388
- publicContent: "Live stream window",
389
- categoryMethod: "Runtime event kind",
390
- cost: "Unknown"
391
- }
392
- };
393
- }
394
- function E({ runUrl: e, runId: t, alive: n, selected: r, onSelect: i, onRecorded: a, onEmpty: o, chooser: s = !0, opening: c }) {
395
- let l = r ?? t, [u, d] = (0, _.useState)({
396
- rows: [],
397
- nodes: [],
398
- earlier: !1,
399
- more: !1,
400
- loading: !0,
401
- error: null,
402
- trimmed: !1,
403
- history: !1,
404
- emptyTail: !1
405
- }), [f, m] = (0, _.useState)(0), g = (0, _.useRef)(null), v = (0, _.useRef)(null), y = (0, _.useRef)(n), b = (0, _.useRef)({
406
- node: l,
407
- rows: [],
408
- earlier: !1,
409
- generation: void 0,
410
- first: null,
411
- last: null
412
- });
413
- (0, _.useEffect)(() => {
414
- let t = !1, r = 0, i = new AbortController(), a = b.current.node === l && y.current && !n;
415
- y.current = n;
416
- let o = a ? b.current.rows : [], s = a ? b.current.earlier : !1, c = a ? b.current.generation : void 0, u = a ? b.current.first : null, f = a ? b.current.last : null, p = !1, m = !1, h = !1, _ = !n && !a;
417
- d((e) => ({
418
- ...e,
419
- rows: o,
420
- earlier: s,
421
- more: !1,
422
- loading: !0,
423
- error: null,
424
- trimmed: a && e.trimmed,
425
- history: !1,
426
- emptyTail: !1
427
- }));
428
- let x = async (a) => {
429
- if (t || (a === "before" ? h : m)) return;
430
- a === "before" ? h = !0 : m = !0;
431
- let g = a === "after" ? f : a === "before" ? u : a === "head" ? C : null;
432
- try {
433
- let m = new URLSearchParams({
434
- node: l,
435
- limit: String(C)
436
- });
437
- g !== null && m.set(a === "head" ? "before" : a, String(g)), c && g !== null && m.set("generation", c);
438
- let h = await fetch(`${e}/transcript?${m}`, {
439
- signal: i.signal,
440
- credentials: "same-origin"
441
- });
442
- if (!h.ok) throw Error(`Transcript unavailable (HTTP ${h.status})`);
443
- let v = await h.json();
444
- if (t) return;
445
- if (a === "head" && !v.events.length) {
446
- r = window.setTimeout(() => void x("tail"), 0);
447
- return;
448
- }
449
- let y = a === "tail" || a === "head" || v.reset, S = y ? v.events : a === "before" ? [...v.events, ...o] : [...o, ...v.events];
450
- c = v.generation, y ? (u = v.firstSeq, f = v.lastSeq) : a === "before" ? u = v.firstSeq ?? u : f = v.lastSeq ?? f, o = [...new Map(S.map((e) => [e.seq, e])).values()].sort((e, t) => e.seq - t.seq);
451
- let T = o.length > w;
452
- T && (o = p ? o.slice(0, w) : o.slice(-2e3)), T && !p && (u = o[0]?.seq ?? u), (a !== "after" || v.reset) && (s = v.hasEarlier), T && a !== "before" && (s = !0), b.current = {
453
- node: l,
454
- rows: o,
455
- earlier: s,
456
- generation: c,
457
- first: u,
458
- last: f
459
- };
460
- let E = _ && a !== "before" ? v.hasMore : !1;
461
- d((e) => ({
462
- rows: o,
463
- nodes: v.nodes,
464
- earlier: s,
465
- more: a === "before" ? e.more : E,
466
- loading: !1,
467
- error: null,
468
- trimmed: T || e.trimmed,
469
- history: p,
470
- emptyTail: !v.alive && o.length === 0 && u === null && f === null
471
- })), !_ && a !== "before" && v.hasMore && f !== g ? r = window.setTimeout(() => void x("after"), 0) : a !== "before" && v.alive && n && (r = window.setTimeout(() => void x("after"), 3e3));
472
- } catch (e) {
473
- !t && !i.signal.aborted && (d((t) => ({
474
- ...t,
475
- loading: !1,
476
- error: e instanceof Error ? e.message : "Transcript unavailable"
477
- })), n && a !== "before" && (r = window.setTimeout(() => void x("after"), 3e3)));
478
- } finally {
479
- a === "before" ? h = !1 : m = !1;
480
- }
481
- };
482
- return g.current = () => {
483
- p = !0, d((e) => ({
484
- ...e,
485
- history: !_
486
- })), x("before");
487
- }, v.current = () => void x("after"), x(a && f !== null ? "after" : _ ? "head" : "tail"), () => {
488
- t = !0, i.abort(), window.clearTimeout(r), g.current = null, v.current = null;
489
- };
490
- }, [
491
- e,
492
- l,
493
- n,
494
- f
495
- ]), (0, _.useEffect)(() => {
496
- u.emptyTail && o && o();
497
- }, [u.emptyTail, o]);
498
- let x = u.nodes.some((e) => e.id === l) ? u.nodes : [...u.nodes, {
499
- id: l,
500
- label: l === t ? "Root" : l,
501
- parent: null
502
- }], E = (0, _.useMemo)(() => p(T(t, l, x, u.rows)), [
503
- t,
504
- l,
505
- u.nodes,
506
- u.rows
507
- ]);
508
- return /* @__PURE__ */ (0, S.jsxs)("section", {
509
- className: "run-panel live-transcript",
510
- "aria-label": "Conversations",
511
- children: [
512
- (s || a) && /* @__PURE__ */ (0, S.jsxs)("div", {
513
- className: "message-filters",
514
- children: [s && /* @__PURE__ */ (0, S.jsxs)("label", { children: ["Agent ", /* @__PURE__ */ (0, S.jsx)("select", {
515
- "aria-label": "Agent conversation",
516
- value: l,
517
- onChange: (e) => i(e.target.value),
518
- children: x.map((e) => /* @__PURE__ */ (0, S.jsxs)("option", {
519
- value: e.id,
520
- children: [e.label, e.parent ? " (child)" : " (root)"]
521
- }, e.id))
522
- })] }), a && /* @__PURE__ */ (0, S.jsx)("button", {
523
- type: "button",
524
- className: "ui-button",
525
- onClick: a,
526
- children: "Timeline and usage"
527
- })]
528
- }),
529
- (u.earlier || u.history) && /* @__PURE__ */ (0, S.jsxs)("p", {
530
- className: "transcript-edge",
531
- children: [u.earlier && /* @__PURE__ */ (0, S.jsx)("button", {
532
- type: "button",
533
- className: "link-button",
534
- disabled: u.loading,
535
- onClick: () => g.current?.(),
536
- children: "Load older"
537
- }), u.history && /* @__PURE__ */ (0, S.jsx)("button", {
538
- type: "button",
539
- className: "link-button",
540
- onClick: () => m((e) => e + 1),
541
- children: "Latest"
542
- })]
543
- }),
544
- u.loading && /* @__PURE__ */ (0, S.jsx)("p", {
545
- role: "status",
546
- children: "Loading transcript…"
547
- }),
548
- u.error && /* @__PURE__ */ (0, S.jsx)("p", {
549
- role: "alert",
550
- children: u.error
551
- }),
552
- u.rows.filter((e) => e.event?.kind === "capture_gap" && (!e.at || !Number.isFinite(Date.parse(e.at)))).map((e) => /* @__PURE__ */ (0, S.jsx)("p", {
553
- className: "faint",
554
- children: e.event?.text ?? "A stream record could not be displayed."
555
- }, e.seq)),
556
- !u.loading && !u.rows.length && !u.error && /* @__PURE__ */ (0, S.jsx)("p", { children: "No stream events have been retained for this agent." }),
557
- (!u.loading || u.rows.length > 0) && /* @__PURE__ */ (0, S.jsx)(h, {
558
- index: E,
559
- actor: l,
560
- cutoff: Infinity,
561
- query: "",
562
- category: "all",
563
- lifecycle: !0,
564
- live: n,
565
- opening: u.earlier ? void 0 : c
566
- }),
567
- u.more && /* @__PURE__ */ (0, S.jsx)("p", {
568
- className: "transcript-edge",
569
- children: /* @__PURE__ */ (0, S.jsx)("button", {
570
- type: "button",
571
- className: "link-button",
572
- disabled: u.loading,
573
- onClick: () => v.current?.(),
574
- children: "Load more"
575
- })
576
- })
577
- ]
578
- });
579
- }
580
- //#endregion
581
- //#region src/workspace/run/Conversations.tsx
582
- function D(e, t) {
583
- let n = t.trim().toLowerCase(), r = e.tree.filter((e) => (e.steps.length || e.turns) && (!n || `${e.name} ${e.node.label}`.toLowerCase().includes(n)));
584
- if (!e.teams.length) return r.map((e) => ({
585
- kind: "agent",
586
- a: e
587
- }));
588
- let i = r.filter((e) => !e.team || e.team === e.id).map((e) => ({
589
- kind: "agent",
590
- a: e
591
- }));
592
- for (let t of e.teams) {
593
- let e = r.filter((e) => e.team === t.id && e.id !== t.id);
594
- if (e.length) {
595
- i.push({
596
- kind: "team",
597
- id: t.id,
598
- label: t.label,
599
- n: e.length
600
- });
601
- for (let t of e) i.push({
602
- kind: "agent",
603
- a: t
604
- });
605
- }
606
- }
607
- return i;
608
- }
609
- function O({ m: e, doc: t, runUrl: n, agent: d, selectAgent: f, route: p }) {
610
- let [h, v] = (0, _.useState)(""), y = (0, _.useMemo)(() => D(e, h), [e, h]), b = (0, _.useRef)(null), x = i(b, y.length, 52), C = (d ? e.byId.get(d) : null) ?? e.root, w = t.run.record.digest ?? null, T = t.run.record.status === "ready" || !!w, O = w ? `&digest=${w}` : "", A = m(T ? `${n}/record?part=nodes${O}` : null), j = A.index, M = !!t.execution?.alive, N = (0, _.useMemo)(() => e.tree.filter((e) => e.steps.length || e.turns).length, [e]), P = !!p.params.get("agent"), F = C && j && j.nodes.has(j.canonical(C.id)), [I, L] = (0, _.useState)(/* @__PURE__ */ new Set()), R = (0, _.useMemo)(() => {
611
- let n = [t.input?.objective, t.input?.instruction].filter((e) => typeof e == "string" && e.trim().length > 0).join("\n\n");
612
- return C && C.id === e.root?.id && n ? {
613
- text: n,
614
- at: t.run.startedAt ?? new Date(e.t0).toISOString()
615
- } : void 0;
616
- }, [
617
- t,
618
- C,
619
- e
620
- ]);
621
- return (0, _.useEffect)(() => L(/* @__PURE__ */ new Set()), [t.run.id]), /* @__PURE__ */ (0, S.jsxs)("div", {
622
- className: "rp-conv",
623
- "data-picked": P ? "" : void 0,
624
- children: [/* @__PURE__ */ (0, S.jsxs)("aside", {
625
- className: "rp-card",
626
- "aria-label": "Agents",
627
- children: [
628
- /* @__PURE__ */ (0, S.jsx)("div", {
629
- className: "rp-hd",
630
- children: /* @__PURE__ */ (0, S.jsxs)("h2", { children: ["Agents", /* @__PURE__ */ (0, S.jsx)("span", {
631
- className: "ct",
632
- children: N
633
- })] })
634
- }),
635
- /* @__PURE__ */ (0, S.jsx)("div", {
636
- className: "rp-fbar",
637
- children: /* @__PURE__ */ (0, S.jsxs)("label", {
638
- className: "rp-field",
639
- children: [/* @__PURE__ */ (0, S.jsx)(a, { name: "search" }), /* @__PURE__ */ (0, S.jsx)("input", {
640
- value: h,
641
- onChange: (e) => v(e.target.value),
642
- placeholder: `Search ${N} agents`,
643
- "aria-label": "Search agents"
644
- })]
645
- })
646
- }),
647
- /* @__PURE__ */ (0, S.jsxs)("div", {
648
- className: "rp-alist",
649
- ref: b,
650
- role: "list",
651
- children: [
652
- /* @__PURE__ */ (0, S.jsx)("div", { style: { height: x.before } }),
653
- y.slice(x.first, x.last).map((t) => t.kind === "team" ? /* @__PURE__ */ (0, S.jsxs)("div", {
654
- className: "ag",
655
- style: { height: 52 },
656
- children: [
657
- /* @__PURE__ */ (0, S.jsx)(a, {
658
- name: "users",
659
- size: 14
660
- }),
661
- t.label,
662
- /* @__PURE__ */ (0, S.jsx)("span", {
663
- className: "ct",
664
- children: t.n
665
- })
666
- ]
667
- }, `t:${t.id}`) : /* @__PURE__ */ (0, S.jsxs)("button", {
668
- type: "button",
669
- role: "listitem",
670
- "aria-current": t.a.id === C?.id,
671
- style: { height: 52 },
672
- onClick: () => f(t.a.id),
673
- children: [
674
- /* @__PURE__ */ (0, S.jsx)(l, { tone: t.a.state.tone }),
675
- /* @__PURE__ */ (0, S.jsx)("span", {
676
- className: "nm",
677
- title: t.a.name,
678
- children: /* @__PURE__ */ (0, S.jsx)(o, {
679
- text: h.trim() ? t.a.name : c(t.a, 30),
680
- query: h
681
- })
682
- }),
683
- /* @__PURE__ */ (0, S.jsxs)("span", {
684
- className: "sb",
685
- children: [s(t.a.steps.length, "step"), t.a.first === null ? "" : ` · ${r(e.t0, t.a.first, t.a.state.tone === "live" ? "now" : t.a.last ?? t.a.first)}`]
686
- }),
687
- /* @__PURE__ */ (0, S.jsx)("span", {
688
- className: "n",
689
- children: u(t.a.tokens)
690
- })
691
- ]
692
- }, t.a.id)),
693
- /* @__PURE__ */ (0, S.jsx)("div", { style: { height: x.after } }),
694
- !y.length && /* @__PURE__ */ (0, S.jsxs)("p", {
695
- className: "rp-empty",
696
- children: [
697
- "No agent matches “",
698
- h,
699
- "”."
700
- ]
701
- })
702
- ]
703
- })
704
- ]
705
- }), C && /* @__PURE__ */ (0, S.jsxs)("article", {
706
- className: "rp-card",
707
- "aria-label": `${C.name}: conversation`,
708
- children: [/* @__PURE__ */ (0, S.jsxs)("div", {
709
- className: "rp-hd",
710
- children: [
711
- /* @__PURE__ */ (0, S.jsx)("button", {
712
- type: "button",
713
- className: "rp-back",
714
- onClick: () => f(null),
715
- "aria-label": "All agents",
716
- children: /* @__PURE__ */ (0, S.jsx)(a, {
717
- name: "arrow",
718
- size: 16
719
- })
720
- }),
721
- /* @__PURE__ */ (0, S.jsxs)("h2", { children: [/* @__PURE__ */ (0, S.jsx)(l, { tone: C.state.tone }), C.name] }),
722
- /* @__PURE__ */ (0, S.jsx)("span", {
723
- className: "muted ph-hide",
724
- children: [C.model, C.harness].filter(Boolean).join(" · ")
725
- }),
726
- C.toolFailures > 0 && /* @__PURE__ */ (0, S.jsxs)("span", {
727
- className: "rp-pill danger",
728
- children: [C.toolFailures, " tool errors"]
729
- })
730
- ]
731
- }), /* @__PURE__ */ (0, S.jsx)("div", {
732
- className: "rp-scroll rp-tx",
733
- children: !M && F ? /* @__PURE__ */ (0, S.jsx)(g, {
734
- runUrl: n,
735
- version: O,
736
- index: j,
737
- actor: j.canonical(C.id),
738
- opening: R
739
- }, C.id) : !M && (A.loading || A.pending) ? /* @__PURE__ */ (0, S.jsx)("p", {
740
- className: "ws-status",
741
- role: "status",
742
- children: "Loading the conversation…"
743
- }) : I.has(C.id) ? /* @__PURE__ */ (0, S.jsx)(k, {
744
- m: e,
745
- a: C
746
- }) : /* @__PURE__ */ (0, S.jsx)(E, {
747
- runUrl: n,
748
- runId: t.run.id,
749
- alive: M,
750
- selected: C.id,
751
- onSelect: (e) => f(e),
752
- chooser: !1,
753
- opening: R,
754
- onEmpty: () => L((e) => /* @__PURE__ */ new Set([...e, C.id]))
755
- }, C.id)
756
- })]
757
- })]
758
- });
759
- }
760
- function k({ m: e, a: t }) {
761
- let n = f(e.t0), r = [];
762
- for (let e of t.steps) {
763
- if (e.kind === "waiting") continue;
764
- let t = e.kind === "model" ? "model call" : e.tool ?? "tool", n = r[r.length - 1];
765
- n && n.name === t && e.t - n.end < 6e4 ? (n.n++, n.end = e.t + e.d, n.failed += +!!e.failed, e.target && n.targets.add(e.target)) : r.push({
766
- name: t,
767
- model: e.kind === "model",
768
- n: 1,
769
- at: e.t,
770
- end: e.t + e.d,
771
- failed: +!!e.failed,
772
- targets: new Set(e.target ? [e.target] : [])
773
- });
774
- }
775
- return r.length ? /* @__PURE__ */ (0, S.jsxs)(S.Fragment, { children: [/* @__PURE__ */ (0, S.jsxs)("p", {
776
- className: "rp-note",
777
- children: [
778
- "No conversation was recorded for this agent; these are its ",
779
- s(t.steps.length, "recorded step"),
780
- "."
781
- ]
782
- }), r.map((e, t) => /* @__PURE__ */ (0, S.jsxs)("div", {
783
- className: "rp-msg",
784
- children: [/* @__PURE__ */ (0, S.jsx)("time", { children: n(e.at) }), /* @__PURE__ */ (0, S.jsxs)("div", { children: [/* @__PURE__ */ (0, S.jsxs)("span", {
785
- className: `rp-tchip${e.failed ? " fail" : ""}`,
786
- children: [
787
- /* @__PURE__ */ (0, S.jsx)("i", { className: e.model ? "model" : "" }),
788
- /* @__PURE__ */ (0, S.jsxs)("span", {
789
- className: "t",
790
- children: [e.name, e.n > 1 ? ` ×${e.n}` : ""]
791
- }),
792
- e.targets.size > 0 && /* @__PURE__ */ (0, S.jsxs)("span", {
793
- className: "a",
794
- children: [[...e.targets].slice(0, 2).join(", "), e.targets.size > 2 ? ` +${e.targets.size - 2}` : ""]
795
- }),
796
- /* @__PURE__ */ (0, S.jsx)("span", {
797
- className: "dim",
798
- children: d(e.end - e.at)
799
- })
800
- ]
801
- }), e.failed > 0 && /* @__PURE__ */ (0, S.jsxs)("span", {
802
- className: "rp-errline",
803
- children: [
804
- "✕ ",
805
- e.failed,
806
- " failed"
807
- ]
808
- })] })]
809
- }, t))] }) : /* @__PURE__ */ (0, S.jsxs)("p", {
810
- className: "ws-status",
811
- children: [
812
- "No conversation or step was recorded for ",
813
- t.name,
814
- "."
815
- ]
816
- });
817
- }
818
- //#endregion
819
- export { O as Conversations };