@tangle-network/sandbox-cli 0.21.27 → 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 +5 -5
  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,8 +1,8 @@
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 { C as r, S as i, a, b as o, l as s, n as c, s as l, v as u, w as d } from "./ui-DZiGjPwl.js";
4
- import { a as f } from "./react-CisnW4fB.js";
5
- import { agentParam as p } from "./RunPage-ChipoSdO.js";
2
+ import { i as t, t as n } from "./jsx-runtime-DQWyJOhv.js";
3
+ import { C as r, E as i, a, l as o, n as s, s as c, v as l, w as u, x as d } from "./ui-C9b1rIUH.js";
4
+ import { a as f } from "./react-CY3IbSNO.js";
5
+ import { agentParam as p } from "./RunPage-DZlBW7Va.js";
6
6
  //#region src/workspace/run/Timeline.tsx
7
7
  var m = /* @__PURE__ */ e(t(), 1), h = n();
8
8
  function g(e) {
@@ -41,7 +41,7 @@ function g(e) {
41
41
  marks: r.restarts.map((t) => ({
42
42
  at: t,
43
43
  kind: "restart",
44
- label: `Restarted ${o(e.t0)(t)} UTC`
44
+ label: `Restarted ${d(e.t0)(t)} UTC`
45
45
  })),
46
46
  facts: [
47
47
  {
@@ -80,12 +80,12 @@ function g(e) {
80
80
  });
81
81
  });
82
82
  }
83
- let i = e.totals.byClass;
83
+ let r = e.totals.byClass;
84
84
  return {
85
85
  spans: n,
86
86
  totalMs: e.duration,
87
- promptTokens: i ? i.input + i.cacheRead : e.totals.tokens ?? 0,
88
- completionTokens: i?.output ?? 0,
87
+ promptTokens: r ? r.input + r.cacheRead : e.totals.tokens ?? 0,
88
+ completionTokens: r?.output ?? 0,
89
89
  ...e.totals.listUsd === null ? {} : {
90
90
  costUsd: e.totals.listUsd,
91
91
  costBasis: "list"
@@ -97,7 +97,7 @@ function g(e) {
97
97
  pauses: e.pauses.map((e) => ({
98
98
  startMs: e.from,
99
99
  endMs: e.to,
100
- label: `No agent turn ${r(e.to - e.from)}`,
100
+ label: `No agent turn ${u(e.to - e.from)}`,
101
101
  detail: e.reason
102
102
  }))
103
103
  };
@@ -145,14 +145,14 @@ function _({ m: e, agent: t, selectAgent: n, route: r, doc: i }) {
145
145
  });
146
146
  }
147
147
  function v({ m: e, a: t, href: n }) {
148
- let f = o(e.t0), p = Math.max(1, ...t.tools.map((e) => e.calls));
148
+ let f = d(e.t0), p = Math.max(1, ...t.tools.map((e) => e.calls));
149
149
  return /* @__PURE__ */ (0, h.jsxs)("section", {
150
150
  className: "rp-card rp-insp",
151
151
  "aria-label": `${t.name}: whole run`,
152
152
  children: [/* @__PURE__ */ (0, h.jsxs)("div", {
153
153
  className: "rp-hd sm",
154
154
  children: [
155
- /* @__PURE__ */ (0, h.jsxs)("h2", { children: [/* @__PURE__ */ (0, h.jsx)(l, { tone: t.state.tone }), t.name] }),
155
+ /* @__PURE__ */ (0, h.jsxs)("h2", { children: [/* @__PURE__ */ (0, h.jsx)(c, { tone: t.state.tone }), t.name] }),
156
156
  /* @__PURE__ */ (0, h.jsx)("span", {
157
157
  className: `rp-pill ${t.state.tone}`,
158
158
  children: t.state.label
@@ -187,46 +187,46 @@ function v({ m: e, a: t, href: n }) {
187
187
  /* @__PURE__ */ (0, h.jsx)("h4", { children: "Tokens" }),
188
188
  /* @__PURE__ */ (0, h.jsx)("div", {
189
189
  className: "big",
190
- children: t.tokens === null ? "—" : u(t.tokens)
190
+ children: t.tokens === null ? "—" : l(t.tokens)
191
191
  }),
192
192
  /* @__PURE__ */ (0, h.jsxs)("dl", { children: [
193
193
  t.byClass ? /* @__PURE__ */ (0, h.jsxs)(h.Fragment, { children: [
194
194
  /* @__PURE__ */ (0, h.jsx)("dt", { children: "In" }),
195
- /* @__PURE__ */ (0, h.jsx)("dd", { children: u(t.byClass.input) }),
195
+ /* @__PURE__ */ (0, h.jsx)("dd", { children: l(t.byClass.input) }),
196
196
  /* @__PURE__ */ (0, h.jsx)("dt", { children: "Out" }),
197
- /* @__PURE__ */ (0, h.jsx)("dd", { children: u(t.byClass.output) }),
197
+ /* @__PURE__ */ (0, h.jsx)("dd", { children: l(t.byClass.output) }),
198
198
  /* @__PURE__ */ (0, h.jsx)("dt", { children: "Cached" }),
199
- /* @__PURE__ */ (0, h.jsx)("dd", { children: u(t.byClass.cacheRead) })
199
+ /* @__PURE__ */ (0, h.jsx)("dd", { children: l(t.byClass.cacheRead) })
200
200
  ] }) : /* @__PURE__ */ (0, h.jsxs)(h.Fragment, { children: [/* @__PURE__ */ (0, h.jsx)("dt", { children: "In · out split" }), /* @__PURE__ */ (0, h.jsx)("dd", {
201
201
  className: "dim",
202
202
  children: "not recorded"
203
203
  })] }),
204
204
  /* @__PURE__ */ (0, h.jsx)("dt", { children: "Cost" }),
205
- /* @__PURE__ */ (0, h.jsx)("dd", { children: s(t) })
205
+ /* @__PURE__ */ (0, h.jsx)("dd", { children: o(t) })
206
206
  ] })
207
207
  ] }),
208
208
  /* @__PURE__ */ (0, h.jsxs)("div", { children: [
209
209
  /* @__PURE__ */ (0, h.jsx)("h4", { children: "Model calls" }),
210
210
  /* @__PURE__ */ (0, h.jsx)("div", {
211
211
  className: "big",
212
- children: i(t.modelCalls)
212
+ children: r(t.modelCalls)
213
213
  }),
214
214
  /* @__PURE__ */ (0, h.jsxs)("dl", { children: [
215
215
  /* @__PURE__ */ (0, h.jsx)("dt", { children: "p50" }),
216
- /* @__PURE__ */ (0, h.jsx)("dd", { children: d(t.latency.p50) }),
216
+ /* @__PURE__ */ (0, h.jsx)("dd", { children: i(t.latency.p50) }),
217
217
  /* @__PURE__ */ (0, h.jsx)("dt", { children: "p90" }),
218
- /* @__PURE__ */ (0, h.jsx)("dd", { children: d(t.latency.p90) }),
218
+ /* @__PURE__ */ (0, h.jsx)("dd", { children: i(t.latency.p90) }),
219
219
  /* @__PURE__ */ (0, h.jsx)("dt", { children: "p99" }),
220
- /* @__PURE__ */ (0, h.jsx)("dd", { children: d(t.latency.p99) }),
220
+ /* @__PURE__ */ (0, h.jsx)("dd", { children: i(t.latency.p99) }),
221
221
  /* @__PURE__ */ (0, h.jsx)("dt", { children: "Busy" }),
222
- /* @__PURE__ */ (0, h.jsx)("dd", { children: r(t.busy) })
222
+ /* @__PURE__ */ (0, h.jsx)("dd", { children: u(t.busy) })
223
223
  ] })
224
224
  ] }),
225
225
  /* @__PURE__ */ (0, h.jsxs)("div", { children: [
226
226
  /* @__PURE__ */ (0, h.jsx)("h4", { children: "Tool calls" }),
227
227
  /* @__PURE__ */ (0, h.jsxs)("div", {
228
228
  className: "big",
229
- children: [i(t.toolCalls), t.toolFailures ? /* @__PURE__ */ (0, h.jsxs)("small", {
229
+ children: [r(t.toolCalls), t.toolFailures ? /* @__PURE__ */ (0, h.jsxs)("small", {
230
230
  className: "f",
231
231
  children: [
232
232
  " ",
@@ -245,14 +245,14 @@ function v({ m: e, a: t, href: n }) {
245
245
  title: e.name,
246
246
  children: e.name
247
247
  }),
248
- /* @__PURE__ */ (0, h.jsx)(c, {
248
+ /* @__PURE__ */ (0, h.jsx)(s, {
249
249
  ok: e.calls - e.failures,
250
250
  failed: e.failures,
251
251
  max: p
252
252
  }),
253
253
  /* @__PURE__ */ (0, h.jsx)("span", {
254
254
  className: "n",
255
- children: i(e.calls)
255
+ children: r(e.calls)
256
256
  })
257
257
  ]
258
258
  }, e.name))
@@ -1,9 +1,9 @@
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 { t as r } from "./page-header-C6YCPkzJ.js";
4
- import { t as i } from "./segmented-control-ChhLMa6h.js";
5
- import { a, o } from "./ui-DZiGjPwl.js";
6
- import { O as s, R as c, n as l, p as u } from "./data-azhapQrS.js";
2
+ import { i as t, t as n } from "./jsx-runtime-DQWyJOhv.js";
3
+ import { t as r } from "./page-header-Brq611fd.js";
4
+ import { t as i } from "./segmented-control-BaJmvTNd.js";
5
+ import { a, o } from "./ui-C9b1rIUH.js";
6
+ import { O as s, R as c, n as l, p as u } from "./data-CkWfWr7i.js";
7
7
  //#region src/workspace/Today.tsx
8
8
  var d = /* @__PURE__ */ e(t(), 1), f = n(), p = (e, t) => e.view.status.key === "solved" ? "solved" : t || e.view.status.key === "live" ? "running" : "stopped", m = (e) => `/play/${encodeURIComponent(e)}`, h = (e) => `/run/${encodeURIComponent(e)}`, g = (e) => e ? e.slice(11, 16) : "—", _ = (e, t) => {
9
9
  if (!e) return "";
@@ -107,12 +107,8 @@ function w(e, t, n) {
107
107
  text: /* @__PURE__ */ (0, f.jsxs)(f.Fragment, { children: [
108
108
  e.view.blocker.kind === "stopped" ? "Stopped" : "Held",
109
109
  ": ",
110
- /* @__PURE__ */ (0, f.jsx)("b", { children: E(e.view.blocker.sentence ?? e.view.blocker.text) })
111
- ] }),
112
- badge: {
113
- text: e.view.blocker.kind === "stopped" ? "stopped" : "held",
114
- tone: "neutral"
115
- }
110
+ D((e.view.blocker.sentence ?? e.view.blocker.text).replace(/^(?:Stopped|Held) by [\w ]+: /, ""), 12)
111
+ ] })
116
112
  });
117
113
  }
118
114
  for (let t of e.now ?? []) i(t.startedAt) && r.push({
@@ -135,23 +131,35 @@ function w(e, t, n) {
135
131
  });
136
132
  return r.sort((e, t) => e.at < t.at ? 1 : -1);
137
133
  }
138
- var T = (e) => e.replace(/\/(home|mnt|Users)\/\S+/g, "").replace(/\bkey_[A-Za-z0-9]+\b\s*·?\s*/g, "").replace(/\s{2,}/g, " ").trim(), E = (e, t = 14) => {
139
- let n = T(e).split(/\s+/);
134
+ function T(e) {
135
+ let t = /* @__PURE__ */ new Map();
136
+ for (let n of e) {
137
+ let e = t.get(n.play) ?? {
138
+ play: n.play,
139
+ title: n.title,
140
+ moves: []
141
+ };
142
+ e.moves.push(n), t.set(n.play, e);
143
+ }
144
+ return [...t.values()];
145
+ }
146
+ var E = (e) => e.replace(/\/(home|mnt|Users)\/\S+/g, "").replace(/\bkey_[A-Za-z0-9]+\b\s*·?\s*/g, "").replace(/\s{2,}/g, " ").trim(), D = (e, t = 14) => {
147
+ let n = E(e).split(/\s+/);
140
148
  return n.length > t ? `${n.slice(0, t).join(" ")}…` : n.join(" ");
141
149
  };
142
- function D({ api: e }) {
150
+ function O({ api: e }) {
143
151
  let t = u(`${e}/overview`, 6e4, !0);
144
152
  return t.error && !t.data ? /* @__PURE__ */ (0, f.jsxs)("p", {
145
153
  className: "ws-status",
146
154
  role: "alert",
147
155
  children: ["Today is unavailable: ", t.error]
148
- }) : t.data ? /* @__PURE__ */ (0, f.jsx)(O, { doc: t.data }) : /* @__PURE__ */ (0, f.jsx)("p", {
156
+ }) : t.data ? /* @__PURE__ */ (0, f.jsx)(k, { doc: t.data }) : /* @__PURE__ */ (0, f.jsx)("p", {
149
157
  className: "ws-status",
150
158
  role: "status",
151
159
  children: "Reading what needs you…"
152
160
  });
153
161
  }
154
- function O({ doc: e }) {
162
+ function k({ doc: e }) {
155
163
  let t = Date.parse(e.composedAt) || Date.now(), n = y(t), i = e.plays ?? [], s = (0, d.useMemo)(() => new Map(i.map((t) => [t.play, (e.now ?? []).filter((e) => e.play === t.play)])), [e, i]), c = (0, d.useMemo)(() => new Map((e.week ?? []).map((e) => [e.play, e])), [e]), l = (e.attention ?? []).filter((e) => e.needsYou || e.tone === "crit" || e.tone === "warn"), u = l.filter((e) => e.needsYou || !e.owner || e.owner === "The operator"), h = l.length - u.length, _ = (0, d.useMemo)(() => w(e, i, n.at), [
156
164
  e,
157
165
  i,
@@ -192,22 +200,17 @@ function O({ doc: e }) {
192
200
  }),
193
201
  actions: /* @__PURE__ */ (0, f.jsxs)("ul", {
194
202
  className: "rp-stats",
195
- children: [
196
- /* @__PURE__ */ (0, f.jsxs)("li", { children: [/* @__PURE__ */ (0, f.jsx)("b", { children: u.length }), " need you"] }),
197
- /* @__PURE__ */ (0, f.jsxs)("li", { children: [/* @__PURE__ */ (0, f.jsx)("b", { children: _.length }), " changes"] }),
198
- /* @__PURE__ */ (0, f.jsxs)("li", { children: [
199
- /* @__PURE__ */ (0, f.jsx)("b", { children: b }),
200
- " ",
201
- b === 1 ? "play" : "plays",
202
- " running"
203
- ] }),
204
- /* @__PURE__ */ (0, f.jsxs)("li", { children: [
205
- /* @__PURE__ */ (0, f.jsx)("b", { children: (e.now ?? []).length }),
206
- " runs · ",
207
- /* @__PURE__ */ (0, f.jsx)("b", { children: v }),
208
- " agents live"
209
- ] })
210
- ]
203
+ children: [/* @__PURE__ */ (0, f.jsxs)("li", { children: [
204
+ /* @__PURE__ */ (0, f.jsx)("b", { children: b }),
205
+ " ",
206
+ b === 1 ? "play" : "plays",
207
+ " running"
208
+ ] }), /* @__PURE__ */ (0, f.jsxs)("li", { children: [
209
+ /* @__PURE__ */ (0, f.jsx)("b", { children: v }),
210
+ " ",
211
+ v === 1 ? "agent" : "agents",
212
+ " live"
213
+ ] })]
211
214
  })
212
215
  }),
213
216
  /* @__PURE__ */ (0, f.jsxs)("div", {
@@ -225,7 +228,7 @@ function O({ doc: e }) {
225
228
  }),
226
229
  /* @__PURE__ */ (0, f.jsx)("ul", {
227
230
  className: "td2-needs rp-scroll",
228
- children: u.length ? u.map((e, t) => /* @__PURE__ */ (0, f.jsx)(k, { item: e }, t)) : /* @__PURE__ */ (0, f.jsxs)("li", {
231
+ children: u.length ? u.map((e, t) => /* @__PURE__ */ (0, f.jsx)(A, { item: e }, t)) : /* @__PURE__ */ (0, f.jsxs)("li", {
229
232
  className: "td2-none",
230
233
  children: [/* @__PURE__ */ (0, f.jsx)(a, { name: "check" }), "Nothing needs you."]
231
234
  })
@@ -255,24 +258,25 @@ function O({ doc: e }) {
255
258
  children: _.length
256
259
  })
257
260
  ] })
258
- }), /* @__PURE__ */ (0, f.jsx)("ol", {
261
+ }), /* @__PURE__ */ (0, f.jsx)("div", {
259
262
  className: "td2-moves rp-scroll",
260
- children: _.length ? _.slice(0, 60).map((e, t) => /* @__PURE__ */ (0, f.jsxs)("li", { children: [
263
+ children: _.length ? T(_.slice(0, 60)).map((e) => /* @__PURE__ */ (0, f.jsxs)("section", { children: [/* @__PURE__ */ (0, f.jsxs)("h3", { children: [/* @__PURE__ */ (0, f.jsx)("a", {
264
+ href: m(e.play),
265
+ children: e.title
266
+ }), /* @__PURE__ */ (0, f.jsx)("span", {
267
+ className: "ct",
268
+ children: e.moves.length
269
+ })] }), /* @__PURE__ */ (0, f.jsx)("ol", { children: e.moves.map((e, t) => /* @__PURE__ */ (0, f.jsxs)("li", { children: [
261
270
  /* @__PURE__ */ (0, f.jsx)("time", { children: g(e.at) }),
262
- /* @__PURE__ */ (0, f.jsx)("a", {
263
- className: "pl",
264
- href: m(e.play),
265
- children: e.title
266
- }),
267
271
  /* @__PURE__ */ (0, f.jsx)("span", {
268
272
  className: "tx",
269
273
  children: e.text
270
274
  }),
271
- e.badge && /* @__PURE__ */ (0, f.jsx)("span", {
275
+ /* @__PURE__ */ (0, f.jsx)("span", { children: e.badge && /* @__PURE__ */ (0, f.jsx)("span", {
272
276
  className: `td2-badge ${e.badge.tone}`,
273
277
  children: e.badge.text
274
- })
275
- ] }, t)) : /* @__PURE__ */ (0, f.jsxs)("li", {
278
+ }) })
279
+ ] }, t)) })] }, e.play)) : /* @__PURE__ */ (0, f.jsxs)("p", {
276
280
  className: "td2-none",
277
281
  children: [
278
282
  "Nothing moved since ",
@@ -283,7 +287,7 @@ function O({ doc: e }) {
283
287
  })]
284
288
  })]
285
289
  }),
286
- /* @__PURE__ */ (0, f.jsx)(j, {
290
+ /* @__PURE__ */ (0, f.jsx)(M, {
287
291
  plays: i,
288
292
  live: s,
289
293
  week: c,
@@ -292,7 +296,7 @@ function O({ doc: e }) {
292
296
  ]
293
297
  });
294
298
  }
295
- function k({ item: e }) {
299
+ function A({ item: e }) {
296
300
  let t = /* @__PURE__ */ (0, f.jsxs)(f.Fragment, { children: [
297
301
  /* @__PURE__ */ (0, f.jsx)(a, {
298
302
  name: "alert",
@@ -300,7 +304,7 @@ function k({ item: e }) {
300
304
  }),
301
305
  /* @__PURE__ */ (0, f.jsxs)("span", { children: [/* @__PURE__ */ (0, f.jsx)("b", { children: e.text }), (e.next || e.detail) && /* @__PURE__ */ (0, f.jsx)("span", {
302
306
  className: "sub",
303
- children: T([e.next, e.detail].filter(Boolean).join(" · "))
307
+ children: E([e.next, e.detail].filter(Boolean).join(" · "))
304
308
  })] }),
305
309
  e.href && /* @__PURE__ */ (0, f.jsx)(a, {
306
310
  name: "chevron",
@@ -312,8 +316,8 @@ function k({ item: e }) {
312
316
  children: t
313
317
  }) : /* @__PURE__ */ (0, f.jsx)("div", { children: t }) });
314
318
  }
315
- var A = 6;
316
- function j({ plays: e, live: t, week: n, now: r }) {
319
+ var j = 6;
320
+ function M({ plays: e, live: t, week: n, now: r }) {
317
321
  let [o, s] = (0, d.useState)("all"), [c, l] = (0, d.useState)(""), [u, m] = (0, d.useState)({
318
322
  running: !0,
319
323
  stopped: !0,
@@ -416,7 +420,7 @@ function j({ plays: e, live: t, week: n, now: r }) {
416
420
  "stopped",
417
421
  "solved"
418
422
  ].filter((e) => (o === "all" || o === e) && _[e].length).map((e) => {
419
- let i = _[e], o = h[e] || c ? i : i.slice(0, A);
423
+ let i = _[e], o = h[e] || c ? i : i.slice(0, j);
420
424
  return /* @__PURE__ */ (0, f.jsxs)("div", {
421
425
  className: "td2-group",
422
426
  children: [
@@ -437,7 +441,7 @@ function j({ plays: e, live: t, week: n, now: r }) {
437
441
  })
438
442
  ]
439
443
  }),
440
- u[e] && o.map((i) => /* @__PURE__ */ (0, f.jsx)(M, {
444
+ u[e] && o.map((i) => /* @__PURE__ */ (0, f.jsx)(N, {
441
445
  p: i,
442
446
  group: e,
443
447
  runs: t.get(i.play) ?? [],
@@ -464,7 +468,7 @@ function j({ plays: e, live: t, week: n, now: r }) {
464
468
  ]
465
469
  });
466
470
  }
467
- function M({ p: e, group: t, runs: n, week: r, now: i }) {
471
+ function N({ p: e, group: t, runs: n, week: r, now: i }) {
468
472
  let a = e.view.trend, o = a?.newest, u = a && o ? o.passed - a.best : 0, d = n.reduce((e, t) => e + (t.agents ?? 0), 0), p = (e.view.bars ?? []).filter((e) => e.latest);
469
473
  return /* @__PURE__ */ (0, f.jsxs)("div", {
470
474
  className: `td2-row ${t}`,
@@ -476,7 +480,10 @@ function M({ p: e, group: t, runs: n, week: r, now: i }) {
476
480
  children: e.title
477
481
  }), /* @__PURE__ */ (0, f.jsx)("span", {
478
482
  className: "sub",
479
- children: r ? `${r.runCount ?? r.runs.length} runs this week${r.lostHours >= .1 ? ` · ${r.lostHours.toFixed(+(r.lostHours < 10))} h lost` : ""}` : /* @__PURE__ */ (0, f.jsx)(l, { status: c(e.view.status) })
483
+ children: t === "stopped" && e.view.blocker && p.length ? /* @__PURE__ */ (0, f.jsxs)("span", {
484
+ title: E(e.view.blocker.sentence ?? e.view.blocker.text),
485
+ children: ["Stopped ", g(e.view.blocker.since)]
486
+ }) : r ? `${r.runCount ?? r.runs.length} ${(r.runCount ?? r.runs.length) === 1 ? "run" : "runs"} this week${r.lostHours >= .1 ? ` · ${r.lostHours.toFixed(+(r.lostHours < 10))} h lost` : ""}` : /* @__PURE__ */ (0, f.jsx)(l, { status: c(e.view.status) })
480
487
  })]
481
488
  }),
482
489
  /* @__PURE__ */ (0, f.jsx)("div", {
@@ -489,7 +496,7 @@ function M({ p: e, group: t, runs: n, week: r, now: i }) {
489
496
  "/",
490
497
  a.total
491
498
  ] }),
492
- /* @__PURE__ */ (0, f.jsx)(N, {
499
+ /* @__PURE__ */ (0, f.jsx)(P, {
493
500
  passed: o.passed,
494
501
  total: a.total
495
502
  }),
@@ -514,7 +521,7 @@ function M({ p: e, group: t, runs: n, week: r, now: i }) {
514
521
  }),
515
522
  /* @__PURE__ */ (0, f.jsx)("div", {
516
523
  className: "metrics",
517
- children: t === "stopped" && e.view.blocker ? /* @__PURE__ */ (0, f.jsxs)("p", {
524
+ children: t === "stopped" && e.view.blocker && !p.length ? /* @__PURE__ */ (0, f.jsxs)("p", {
518
525
  className: "hold",
519
526
  children: [
520
527
  /* @__PURE__ */ (0, f.jsxs)("b", { children: [
@@ -523,20 +530,20 @@ function M({ p: e, group: t, runs: n, week: r, now: i }) {
523
530
  ":"
524
531
  ] }),
525
532
  " ",
526
- E((e.view.blocker.sentence ?? e.view.blocker.text).replace(/^Stopped by [\w ]+: /, ""), 22)
533
+ D((e.view.blocker.sentence ?? e.view.blocker.text).replace(/^Stopped by [\w ]+: /, ""), 22)
527
534
  ]
528
- }) : p.length ? p.map((e) => /* @__PURE__ */ (0, f.jsx)(P, { bar: e }, e.metric)) : t === "running" && e.view.blocker ? /* @__PURE__ */ (0, f.jsxs)("p", {
535
+ }) : p.length ? p.map((e) => /* @__PURE__ */ (0, f.jsx)(F, { bar: e }, e.metric)) : t === "running" && e.view.blocker ? /* @__PURE__ */ (0, f.jsxs)("p", {
529
536
  className: "hold",
530
537
  children: [
531
538
  /* @__PURE__ */ (0, f.jsx)("b", { children: "Held:" }),
532
539
  " ",
533
- E(e.view.blocker.sentence ?? e.view.blocker.text, 18)
540
+ D(e.view.blocker.sentence ?? e.view.blocker.text, 18)
534
541
  ]
535
542
  }) : null
536
543
  }),
537
544
  /* @__PURE__ */ (0, f.jsx)("div", {
538
545
  className: "trend",
539
- children: a && /* @__PURE__ */ (0, f.jsx)(F, { trend: a })
546
+ children: a && /* @__PURE__ */ (0, f.jsx)(I, { trend: a })
540
547
  }),
541
548
  /* @__PURE__ */ (0, f.jsx)("div", {
542
549
  className: "live",
@@ -567,14 +574,14 @@ function M({ p: e, group: t, runs: n, week: r, now: i }) {
567
574
  ]
568
575
  });
569
576
  }
570
- function N({ passed: e, total: t }) {
577
+ function P({ passed: e, total: t }) {
571
578
  return /* @__PURE__ */ (0, f.jsx)("span", {
572
579
  className: "td2-meter",
573
580
  "aria-hidden": "true",
574
581
  children: Array.from({ length: Math.min(t, 12) }, (t, n) => /* @__PURE__ */ (0, f.jsx)("i", { className: n < e ? "on" : "" }, n))
575
582
  });
576
583
  }
577
- function P({ bar: e }) {
584
+ function F({ bar: e }) {
578
585
  let t = !e.ratio || e.ratio.side === "met", n = t ? 0 : Math.min(C, Math.log10(Math.max(1, e.ratio.x)));
579
586
  return /* @__PURE__ */ (0, f.jsxs)("div", {
580
587
  className: "td2-metric",
@@ -617,7 +624,7 @@ function P({ bar: e }) {
617
624
  ]
618
625
  });
619
626
  }
620
- function F({ trend: e }) {
627
+ function I({ trend: e }) {
621
628
  let t = e.passed.length, n = (e) => t <= 1 ? 168 : e / (t - 1) * 162 + 3, r = (t) => 27 - t / Math.max(1, e.total) * 22, i = "";
622
629
  e.passed.forEach((e, t) => {
623
630
  e !== null && (i += `${i ? "L" : "M"}${n(t).toFixed(1)} ${r(e).toFixed(1)}`);
@@ -650,4 +657,4 @@ function F({ trend: e }) {
650
657
  });
651
658
  }
652
659
  //#endregion
653
- export { D as TodayPage, b as measure };
660
+ export { O as TodayPage, b as measure };