@tangle-network/sandbox-cli 0.21.63 → 0.21.65

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/README.md +31 -3
  2. package/SKILL.md +29 -1
  3. package/dist/graph-native-CS_TmaCK.mjs +1 -0
  4. package/dist/graph-viewer/Analytics-bWsqhurt.js +1001 -0
  5. package/dist/graph-viewer/{AnswerStrip-DhwqOyxI.js → AnswerStrip-COxV7gLW.js} +2 -2
  6. package/dist/graph-viewer/Checks-CQGmKcQ0.js +164 -0
  7. package/dist/graph-viewer/Conversations-DgCshBAf.js +627 -0
  8. package/dist/graph-viewer/{Files-DtZhf0ii.js → Files-CvIOGrAs.js} +81 -90
  9. package/dist/graph-viewer/LiveRun-DHmsr6F7.js +311 -0
  10. package/dist/graph-viewer/{Outputs-QET3nPPp.js → Outputs-rwBg_x36.js} +4 -4
  11. package/dist/graph-viewer/Overview-C150tkVa.js +194 -0
  12. package/dist/graph-viewer/{RunOverview-DJQDAMIx.js → RunOverview-CSqsunqf.js} +2 -2
  13. package/dist/graph-viewer/RunPage-F_prVwiV.js +286 -0
  14. package/dist/graph-viewer/Timeline-BFDywlmz.js +335 -0
  15. package/dist/graph-viewer/Today-BdDuqZGF.js +623 -0
  16. package/dist/graph-viewer/Topology-SAfGtd5u.js +238 -0
  17. package/dist/graph-viewer/Traces-BYqXaS_s.js +254 -0
  18. package/dist/graph-viewer/{WallPages-4d9QUZDq.js → WallPages-MM70VZrC.js} +48 -30
  19. package/dist/graph-viewer/agent-runtime.js +55 -55
  20. package/dist/graph-viewer/{data-BJmP7F1M.js → data-DTGmre1W.js} +31 -27
  21. package/dist/graph-viewer/harness-sessions.js +1 -1
  22. package/dist/graph-viewer/index.js +1357 -1392
  23. package/dist/graph-viewer/{lazy-pages-DM0cZM10.js → lazy-pages-BYuq_L_n.js} +9 -5
  24. package/dist/graph-viewer/{outputs-model-CGdvjkQh.js → outputs-model-CHTx8rMz.js} +2 -2
  25. package/dist/graph-viewer/{viewer/plain-words-CgvxtEOa.js → plain-words-BrMHl0On.js} +9 -4
  26. package/dist/graph-viewer/receipt.js +2 -2
  27. package/dist/graph-viewer/record-CsP_3NJS.js +612 -0
  28. package/dist/graph-viewer/record-part-CuT9Xw37.js +334 -0
  29. package/dist/graph-viewer/record.js +2 -336
  30. package/dist/graph-viewer/report-viewer.js +65 -65
  31. package/dist/graph-viewer/report.js +1 -1
  32. package/dist/graph-viewer/research-publication.js +1 -1
  33. package/dist/graph-viewer/{run-files-C1NgzM0l.js → run-files-BckQDdTD.js} +1 -1
  34. package/dist/graph-viewer/{run-receipt-Bvi4-KVM.js → run-receipt-Bt2iXJUy.js} +1 -0
  35. package/dist/graph-viewer/schemas/agent-workspace.play.v1.json +3 -0
  36. package/dist/graph-viewer/schemas/agent-workspace.plays.v1.json +2 -0
  37. package/dist/graph-viewer/schemas/agent-workspace.run.v1.json +1 -0
  38. package/dist/graph-viewer/styles.css +4559 -2385
  39. package/dist/graph-viewer/trace-spans.js +1 -1
  40. package/dist/graph-viewer/ui-xa5w5bEN.js +889 -0
  41. package/dist/graph-viewer/viewer/{AgentGraphCanvas-CMdOlSlh-4EervjeC.js → AgentGraphCanvas-B74GN1o6-BZEumF7-.js} +2610 -2707
  42. package/dist/graph-viewer/viewer/Analytics-E3XS570U.js +1002 -0
  43. package/dist/graph-viewer/viewer/{AnswerStrip-CGUyXuYH.js → AnswerStrip-B7xMU57A.js} +2 -2
  44. package/dist/graph-viewer/viewer/Checks-CJ5XSHbv.js +165 -0
  45. package/dist/graph-viewer/viewer/Conversations-AX8G7Qyl.js +904 -0
  46. package/dist/graph-viewer/viewer/Files-DxL1576V.js +630 -0
  47. package/dist/graph-viewer/viewer/LiveRun-B-BckyEj.js +820 -0
  48. package/dist/graph-viewer/viewer/{Outputs-CumGyjQo.js → Outputs-BoIpgfMv.js} +24 -23
  49. package/dist/graph-viewer/viewer/Overview-Dzg5XJgy.js +436 -0
  50. package/dist/graph-viewer/viewer/RunPage-NtevWXBs.js +285 -0
  51. package/dist/graph-viewer/viewer/{Scores-ZS16yk0n.js → Scores-Dgv4WePL.js} +3 -3
  52. package/dist/graph-viewer/viewer/Timeline-CzY3LVDu.js +335 -0
  53. package/dist/graph-viewer/viewer/Today-Bi9IIwuh.js +623 -0
  54. package/dist/graph-viewer/viewer/Topology-CzjqSFXH.js +239 -0
  55. package/dist/graph-viewer/viewer/Traces-CMX0H1VU.js +254 -0
  56. package/dist/graph-viewer/viewer/{WallPages-CzWpyIfp.js → WallPages-Clj4bORg.js} +50 -32
  57. package/dist/graph-viewer/viewer/addon-webgl-BSCscllv.js +4027 -0
  58. package/dist/graph-viewer/viewer/agent-record-BrP-ENHg.css +2 -0
  59. package/dist/graph-viewer/viewer/{bot-D6Nrej7Z.js → bot-BaQU59LG.js} +1 -1
  60. package/dist/graph-viewer/viewer/{chevron-right-D_5IKLxu.js → chevron-right-Xn05jYLT.js} +1 -1
  61. package/dist/graph-viewer/viewer/{createLucideIcon-yH0cxLMy.js → createLucideIcon-BSphcoOJ.js} +1 -1
  62. package/dist/graph-viewer/viewer/dashboard-D3JhmRhe-DSl0zhkw.js +371 -0
  63. package/dist/graph-viewer/viewer/{data-CkWfWr7i.js → data-CVHeKhrh.js} +144 -139
  64. package/dist/graph-viewer/viewer/dist-4_KJz8ZM.js +349 -0
  65. package/dist/graph-viewer/viewer/dist-Dy-wrdTt.js +1615 -0
  66. package/dist/graph-viewer/viewer/es2015-utW4DTOJ.js +3506 -0
  67. package/dist/graph-viewer/viewer/{final-output-kwY11u9X.js → final-output-BYT-g-9j.js} +1 -1
  68. package/dist/graph-viewer/viewer/flow-waterfall-model-DvrgPLGS-BdThSFH-.js +2696 -0
  69. package/dist/graph-viewer/viewer/git-branch-BzTbIcYL.js +28 -0
  70. package/dist/graph-viewer/viewer/{highlights-Btsi5OXl.js → highlights-DWeSCtiR.js} +4 -4
  71. package/dist/graph-viewer/viewer/jsx-runtime-DPT6sCLq.js +319 -0
  72. package/dist/graph-viewer/viewer/lazy-pages-ChiMJ8r_.js +803 -0
  73. package/dist/graph-viewer/viewer/{markdown-CX_sVrXB.js → markdown-lADwhD7y.js} +2324 -2608
  74. package/dist/graph-viewer/viewer/model-brand-bTcMjQtB-RSb7EbGB.js +476 -0
  75. package/dist/graph-viewer/viewer/{page-header-Brq611fd.js → page-header-QbUg8F8i.js} +12 -11
  76. package/dist/graph-viewer/{plain-words-CgvxtEOa.js → viewer/plain-words-BrMHl0On.js} +9 -4
  77. package/dist/graph-viewer/viewer/primitives-znfPK9NP-B6UO7uDr.js +346 -0
  78. package/dist/graph-viewer/viewer/react-DQ7E2Epi.js +4254 -0
  79. package/dist/graph-viewer/viewer/{react-dom-t1L4_-il.js → react-dom-BEusmvQH.js} +1 -1
  80. package/dist/graph-viewer/viewer/record-DZnT6SWN-H-ul3U3a.js +3523 -0
  81. package/dist/graph-viewer/viewer/record-W39D5MO-.js +1 -0
  82. package/dist/graph-viewer/viewer/record-part-CbweyYoV.js +335 -0
  83. package/dist/graph-viewer/viewer/{segmented-control-BaJmvTNd.js → segmented-control-Di1mbQlP.js} +27 -26
  84. package/dist/graph-viewer/viewer/{shiki-Qnby7Sh6.js → shiki-BfNNlmfZ.js} +15 -15
  85. package/dist/graph-viewer/viewer/status-meta-S0kV_RDp.js +273 -0
  86. package/dist/graph-viewer/viewer/{stream-tokenizer-CWtnjmRd.js → stream-tokenizer-B5wWaM3U.js} +12 -12
  87. package/dist/graph-viewer/viewer/{themes-1i1fzpRk.js → themes-DuRxHiga.js} +1 -1
  88. package/dist/graph-viewer/viewer/ui-Co03nZUX.js +889 -0
  89. package/dist/graph-viewer/viewer/utils-BuObIC0n.js +1815 -0
  90. package/dist/graph-viewer/viewer/workbench-E6_5q_oL.js +28351 -0
  91. package/dist/graph-viewer/viewer/workflows--mZpHYqo.js +3298 -0
  92. package/dist/graph-viewer/viewer/workspace-cKs9sGEO.js +2468 -0
  93. package/dist/graph-viewer/{workspace-model-Ewf17pTW.js → workspace-model-BkPl_J8E.js} +1 -1
  94. package/dist/graph-viewer/workspace-viewer.js +7452 -7489
  95. package/dist/graph-viewer/workspace.js +1 -1
  96. package/dist/index.mjs +27 -22
  97. package/package.json +10 -9
  98. package/dist/graph-viewer/Analytics-DFWW8Phh.js +0 -938
  99. package/dist/graph-viewer/Checks-qgqV4xgV.js +0 -155
  100. package/dist/graph-viewer/Conversations-CGB45kpj.js +0 -545
  101. package/dist/graph-viewer/LiveRun-C21wUKAY.js +0 -210
  102. package/dist/graph-viewer/Overview-BjeLsA2I.js +0 -506
  103. package/dist/graph-viewer/RunPage-CkkcBEUe.js +0 -258
  104. package/dist/graph-viewer/Timeline-C2Xolk0t.js +0 -293
  105. package/dist/graph-viewer/Today-BVVDtSVN.js +0 -660
  106. package/dist/graph-viewer/Topology-DO5XX8e4.js +0 -545
  107. package/dist/graph-viewer/Traces-BhMxjNgw.js +0 -259
  108. package/dist/graph-viewer/part-events-BrLrg_EV.js +0 -276
  109. package/dist/graph-viewer/record-part-CZal_IMH.js +0 -1408
  110. package/dist/graph-viewer/ui-D8QZRsC3.js +0 -938
  111. package/dist/graph-viewer/viewer/Analytics-DD__nbLm.js +0 -939
  112. package/dist/graph-viewer/viewer/Checks-Ds5M7eAW.js +0 -156
  113. package/dist/graph-viewer/viewer/Conversations-C1n0EBBd.js +0 -819
  114. package/dist/graph-viewer/viewer/Files-Cjr7NMU_.js +0 -448
  115. package/dist/graph-viewer/viewer/LiveRun-uPTkPSjo.js +0 -6772
  116. package/dist/graph-viewer/viewer/Overview-4Umk14_2.js +0 -507
  117. package/dist/graph-viewer/viewer/RunPage-DZlBW7Va.js +0 -257
  118. package/dist/graph-viewer/viewer/Timeline-BnK6-yBR.js +0 -294
  119. package/dist/graph-viewer/viewer/Today-a_-oNigi.js +0 -660
  120. package/dist/graph-viewer/viewer/Topology-CQPCLQT6.js +0 -546
  121. package/dist/graph-viewer/viewer/Traces-C0IGk0L4.js +0 -259
  122. package/dist/graph-viewer/viewer/WorkflowGraph-DZ3xejKE-jRXKeSrg.js +0 -1559
  123. package/dist/graph-viewer/viewer/agent-record-Dw772ROs.css +0 -2
  124. package/dist/graph-viewer/viewer/agent-timeline-Cs9Qbpvo.js +0 -1798
  125. package/dist/graph-viewer/viewer/dist-C1-7EfoW.js +0 -488
  126. package/dist/graph-viewer/viewer/file-text-m7a3piQF.js +0 -47
  127. package/dist/graph-viewer/viewer/jsx-runtime-DQWyJOhv.js +0 -2136
  128. package/dist/graph-viewer/viewer/lazy-pages-BowaGsg-.js +0 -20
  129. package/dist/graph-viewer/viewer/model-brand-bTcMjQtB-fagiBQam.js +0 -723
  130. package/dist/graph-viewer/viewer/popover-CvOAjlnk.js +0 -5329
  131. package/dist/graph-viewer/viewer/react-CY3IbSNO.js +0 -4262
  132. package/dist/graph-viewer/viewer/record-part-D3_Anfpe.js +0 -1329
  133. package/dist/graph-viewer/viewer/terminal-83J_I4Ne.js +0 -52
  134. package/dist/graph-viewer/viewer/ui-C9b1rIUH.js +0 -938
  135. package/dist/graph-viewer/viewer/workspace-CekmOBs3.js +0 -25100
  136. package/dist/graph-viewer/viewer/x-DOc2URqZ.js +0 -56
@@ -0,0 +1,623 @@
1
+ import { i as e } from "./rolldown-runtime-DArdT4gl.js";
2
+ import { n as t, t as n } from "./jsx-runtime-DPT6sCLq.js";
3
+ import { t as r } from "./page-header-QbUg8F8i.js";
4
+ import { t as i } from "./segmented-control-Di1mbQlP.js";
5
+ import { a, o } from "./ui-Co03nZUX.js";
6
+ import { O as s, p as c } from "./data-CVHeKhrh.js";
7
+ //#region src/workspace/Today.tsx
8
+ var l = /* @__PURE__ */ e(t(), 1), u = n(), d = (e, t) => e.view.status.key === "solved" ? "solved" : t || e.view.status.key === "live" ? "running" : "stopped", f = (e) => `/play/${encodeURIComponent(e)}`, p = (e) => `/run/${encodeURIComponent(e)}`, m = (e) => e ? e.slice(11, 16) : "—", h = (e, t) => {
9
+ if (!e) return "";
10
+ let n = Math.max(0, (t - Date.parse(e)) / 6e4);
11
+ return n < 60 ? `${Math.max(1, Math.round(n))} min ago` : n < 2880 ? `${Math.round(n / 60)} h ago` : `${Math.round(n / 1440)} days ago`;
12
+ }, g = "discovery.today.visit";
13
+ function _(e) {
14
+ let [t] = (0, l.useState)(() => {
15
+ try {
16
+ return window.localStorage.getItem(g);
17
+ } catch {
18
+ return null;
19
+ }
20
+ });
21
+ (0, l.useEffect)(() => {
22
+ try {
23
+ window.localStorage.setItem(g, (/* @__PURE__ */ new Date()).toISOString());
24
+ } catch {}
25
+ }, []);
26
+ let n = t && e - Date.parse(t) < 6048e5 && e - Date.parse(t) > 6e4 ? t : null, [r, i] = (0, l.useState)(n ? "visit" : "day");
27
+ return {
28
+ at: r === "visit" && n ? Date.parse(n) : e - (r === "week" ? 7 : 1) * 864e5,
29
+ choice: r,
30
+ setChoice: i,
31
+ last: n
32
+ };
33
+ }
34
+ function v(e, t) {
35
+ if (e == null) return "—";
36
+ let n = (e, t = e < 10 ? 2 : +(e < 100)) => e.toLocaleString("en-US", { maximumFractionDigits: t });
37
+ if (t === "B" || t === "KiB") {
38
+ let r = t === "KiB" ? e * 1024 : e, i = [
39
+ "B",
40
+ "KiB",
41
+ "MiB",
42
+ "GiB",
43
+ "TiB"
44
+ ], a = Math.min(i.length - 1, Math.max(0, Math.floor(Math.log(Math.max(1, r)) / Math.log(1024))));
45
+ return `${n(r / 1024 ** a, 1)} ${i[a]}`;
46
+ }
47
+ return t === "cycles/s" ? `${n(e, 0)}/s` : t === "ms" ? `${n(e, 1)} ms` : `${n(e)} ${t}`;
48
+ }
49
+ var y = (e) => {
50
+ let t = e.target;
51
+ return t ? t.approx ? `≈ ${v(t.approx, e.unit)}` : t.min && t.max ? `${v(t.min, e.unit)}–${v(t.max, e.unit)}` : t.min ? `≥ ${v(t.min, e.unit)}` : t.max ? `≤ ${v(t.max, e.unit)}` : "" : "";
52
+ }, b = (e) => !e.ratio || e.ratio.side === "met" ? "on target" : `${e.ratio.x >= 100 ? Math.round(e.ratio.x).toLocaleString("en-US") : e.ratio.x.toFixed(1)}× ${e.direction === "down" ? "over" : "below"}`, x = 4;
53
+ function S(e) {
54
+ let t = e.change && e.change.from ? (e.change.to - e.change.from) / e.change.from * 100 : null;
55
+ if (t === null || Math.abs(t) < 1) return null;
56
+ let n = e.direction === "down" ? t < 0 : t > 0;
57
+ return {
58
+ text: `${t > 0 ? "↑" : "↓"} ${Math.abs(t).toFixed(0)}% ${n ? "better" : "worse"}`,
59
+ tone: n ? "ok" : "neutral"
60
+ };
61
+ }
62
+ function C(e, t) {
63
+ if (t) {
64
+ let e = S(t);
65
+ if (e) return e;
66
+ }
67
+ let n = e.view.trend?.passed.filter((e) => e !== null) ?? [], r = n.length > 1 ? n[n.length - 1] - n[0] : 0;
68
+ return r ? {
69
+ text: `${r > 0 ? "↑" : "↓"} ${Math.abs(r)} step${Math.abs(r) === 1 ? "" : "s"}`,
70
+ tone: r > 0 ? "ok" : "neutral"
71
+ } : null;
72
+ }
73
+ function w(e, t, n) {
74
+ let r = [], i = (e) => !!(e && Date.parse(e) > n);
75
+ for (let e of t) {
76
+ let t = e.view.trend?.series ?? [];
77
+ t.forEach((n, a) => {
78
+ if (!i(n.at)) return;
79
+ let o = t[a - 1], c = o ? n.passed - o.passed : 0;
80
+ r.push({
81
+ at: n.at,
82
+ play: e.play,
83
+ title: e.title,
84
+ text: /* @__PURE__ */ (0, u.jsxs)(u.Fragment, { children: [
85
+ /* @__PURE__ */ (0, u.jsx)("b", { children: n.release }),
86
+ n.runId ? ` of run ${s(e.play, n.runId)}` : "",
87
+ " checked: ",
88
+ /* @__PURE__ */ (0, u.jsxs)("b", { children: [
89
+ n.passed,
90
+ "/",
91
+ e.view.trend.total
92
+ ] }),
93
+ " steps"
94
+ ] }),
95
+ ...c ? { badge: {
96
+ text: `${c > 0 ? "↑" : "↓"} ${Math.abs(c)} step${Math.abs(c) === 1 ? "" : "s"}`,
97
+ tone: c > 0 ? "ok" : "neutral"
98
+ } } : {}
99
+ });
100
+ });
101
+ for (let t of e.view.bars ?? []) {
102
+ if (!t.latest || !i(t.latest.at)) continue;
103
+ let n = S(t);
104
+ r.push({
105
+ at: t.latest.at,
106
+ play: e.play,
107
+ title: e.title,
108
+ text: /* @__PURE__ */ (0, u.jsxs)(u.Fragment, { children: [
109
+ /* @__PURE__ */ (0, u.jsx)("b", { children: t.label }),
110
+ " ",
111
+ v(t.latest.value, t.unit),
112
+ t.latest.release ? ` at ${t.latest.release}` : "",
113
+ " · ",
114
+ b(t)
115
+ ] }),
116
+ ...n ? { badge: n } : {}
117
+ });
118
+ }
119
+ let n = e.view.blocker?.since;
120
+ e.view.blocker && i(n) && r.push({
121
+ at: n,
122
+ play: e.play,
123
+ title: e.title,
124
+ text: /* @__PURE__ */ (0, u.jsxs)(u.Fragment, { children: [
125
+ e.view.blocker.kind === "stopped" ? "Stopped" : "Held",
126
+ ": ",
127
+ D((e.view.blocker.sentence ?? e.view.blocker.text).replace(/^(?:Stopped|Held) by [\w ]+: /, ""), 12)
128
+ ] })
129
+ });
130
+ }
131
+ for (let t of e.now ?? []) i(t.startedAt) && r.push({
132
+ at: t.startedAt,
133
+ play: t.play,
134
+ title: t.title,
135
+ text: /* @__PURE__ */ (0, u.jsxs)(u.Fragment, { children: [
136
+ "Run ",
137
+ /* @__PURE__ */ (0, u.jsx)("a", {
138
+ href: p(t.runId),
139
+ children: /* @__PURE__ */ (0, u.jsx)("b", { children: s(t.play, t.runId) })
140
+ }),
141
+ " started",
142
+ t.agents ? ` · ${t.agents} agents` : ""
143
+ ] })
144
+ });
145
+ return r.sort((e, t) => e.at < t.at ? 1 : -1);
146
+ }
147
+ function T(e) {
148
+ let t = /* @__PURE__ */ new Map();
149
+ for (let n of e) {
150
+ let e = t.get(n.play) ?? {
151
+ play: n.play,
152
+ title: n.title,
153
+ moves: []
154
+ };
155
+ e.moves.push(n), t.set(n.play, e);
156
+ }
157
+ return [...t.values()];
158
+ }
159
+ 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) => {
160
+ let n = E(e).split(/\s+/);
161
+ return n.length > t ? `${n.slice(0, t).join(" ")}…` : n.join(" ");
162
+ };
163
+ function O({ api: e }) {
164
+ let t = c(`${e}/overview`, 6e4, !0);
165
+ return t.error && !t.data ? /* @__PURE__ */ (0, u.jsxs)("p", {
166
+ className: "ws-status",
167
+ role: "alert",
168
+ children: ["Today is unavailable: ", t.error]
169
+ }) : t.data ? /* @__PURE__ */ (0, u.jsx)(k, { doc: t.data }) : /* @__PURE__ */ (0, u.jsx)("p", {
170
+ className: "ws-status",
171
+ role: "status",
172
+ children: "Reading what needs you…"
173
+ });
174
+ }
175
+ function k({ doc: e }) {
176
+ let t = Date.parse(e.composedAt) || Date.now(), n = _(t), i = e.plays ?? [], s = (0, l.useMemo)(() => new Map(i.map((t) => [t.play, (e.now ?? []).filter((e) => e.play === t.play)])), [e, i]), c = (0, l.useMemo)(() => new Map((e.week ?? []).map((e) => [e.play, e])), [e]), p = (e.attention ?? []).filter((e) => e.needsYou || e.tone === "crit" || e.tone === "warn"), h = p.filter((e) => e.needsYou || !e.owner || e.owner === "The operator"), g = p.length - h.length, v = (0, l.useMemo)(() => w(e, i, n.at), [
177
+ e,
178
+ i,
179
+ n.at
180
+ ]), y = (e.now ?? []).reduce((e, t) => e + (t.agents ?? 0), 0), b = i.filter((e) => d(e, (s.get(e.play)?.length ?? 0) > 0) === "running").length, x = n.choice === "visit" ? `your last visit, ${m(new Date(n.at).toISOString())} UTC` : n.choice === "week" ? "7 days ago" : "24 hours ago";
181
+ return /* @__PURE__ */ (0, u.jsxs)("div", {
182
+ className: "rp td2",
183
+ "data-mode": "today",
184
+ children: [
185
+ /* @__PURE__ */ (0, u.jsx)(r, {
186
+ className: "rp-head",
187
+ title: "Today",
188
+ description: /* @__PURE__ */ (0, u.jsxs)(o, {
189
+ label: "Since",
190
+ value: n.choice,
191
+ onChange: (e) => e && n.setChoice(e),
192
+ width: 260,
193
+ placeholder: "Show changes since",
194
+ options: [
195
+ ...n.last ? [{
196
+ id: "visit",
197
+ label: "Your last visit",
198
+ meta: `${m(n.last)} UTC`
199
+ }] : [],
200
+ {
201
+ id: "day",
202
+ label: "The last 24 hours"
203
+ },
204
+ {
205
+ id: "week",
206
+ label: "The last 7 days"
207
+ }
208
+ ],
209
+ children: [/* @__PURE__ */ (0, u.jsx)("span", {
210
+ className: "dim",
211
+ children: "Since "
212
+ }), x]
213
+ }),
214
+ actions: /* @__PURE__ */ (0, u.jsxs)("ul", {
215
+ className: "rp-stats",
216
+ children: [/* @__PURE__ */ (0, u.jsxs)("li", { children: [
217
+ /* @__PURE__ */ (0, u.jsx)("b", { children: b }),
218
+ " ",
219
+ b === 1 ? "play" : "plays",
220
+ " running"
221
+ ] }), /* @__PURE__ */ (0, u.jsxs)("li", { children: [
222
+ /* @__PURE__ */ (0, u.jsx)("b", { children: y }),
223
+ " ",
224
+ y === 1 ? "agent" : "agents",
225
+ " live"
226
+ ] })]
227
+ })
228
+ }),
229
+ /* @__PURE__ */ (0, u.jsxs)("div", {
230
+ className: "td2-top",
231
+ children: [/* @__PURE__ */ (0, u.jsxs)("section", {
232
+ className: "rp-card",
233
+ "aria-label": "Needs you",
234
+ children: [
235
+ /* @__PURE__ */ (0, u.jsx)("div", {
236
+ className: "rp-hd",
237
+ children: /* @__PURE__ */ (0, u.jsxs)("h2", { children: ["Needs you", /* @__PURE__ */ (0, u.jsx)("span", {
238
+ className: "ct",
239
+ children: h.length
240
+ })] })
241
+ }),
242
+ /* @__PURE__ */ (0, u.jsx)("ul", {
243
+ className: "td2-needs rp-scroll",
244
+ children: h.length ? h.map((e, t) => /* @__PURE__ */ (0, u.jsx)(A, { item: e }, t)) : /* @__PURE__ */ (0, u.jsxs)("li", {
245
+ className: "td2-none",
246
+ children: [/* @__PURE__ */ (0, u.jsx)(a, { name: "check" }), "Nothing needs you."]
247
+ })
248
+ }),
249
+ g > 0 && /* @__PURE__ */ (0, u.jsxs)("div", {
250
+ className: "td2-foot",
251
+ children: [/* @__PURE__ */ (0, u.jsxs)("span", { children: [g, " more for other owners"] }), /* @__PURE__ */ (0, u.jsxs)("a", {
252
+ className: "rp-link",
253
+ href: "/fleet",
254
+ children: ["Fleet ", /* @__PURE__ */ (0, u.jsx)(a, {
255
+ name: "arrow",
256
+ size: 14
257
+ })]
258
+ })]
259
+ })
260
+ ]
261
+ }), /* @__PURE__ */ (0, u.jsxs)("section", {
262
+ className: "rp-card",
263
+ "aria-label": `Moved since ${x}`,
264
+ children: [/* @__PURE__ */ (0, u.jsx)("div", {
265
+ className: "rp-hd",
266
+ children: /* @__PURE__ */ (0, u.jsxs)("h2", { children: [
267
+ "Moved since ",
268
+ n.choice === "visit" ? `${m(new Date(n.at).toISOString())} UTC` : x,
269
+ /* @__PURE__ */ (0, u.jsx)("span", {
270
+ className: "ct",
271
+ children: v.length
272
+ })
273
+ ] })
274
+ }), /* @__PURE__ */ (0, u.jsx)("div", {
275
+ className: "td2-moves rp-scroll",
276
+ children: v.length ? T(v.slice(0, 60)).map((e) => /* @__PURE__ */ (0, u.jsxs)("section", { children: [/* @__PURE__ */ (0, u.jsxs)("h3", { children: [/* @__PURE__ */ (0, u.jsx)("a", {
277
+ href: f(e.play),
278
+ children: e.title
279
+ }), /* @__PURE__ */ (0, u.jsx)("span", {
280
+ className: "ct",
281
+ children: e.moves.length
282
+ })] }), /* @__PURE__ */ (0, u.jsx)("ol", { children: e.moves.map((e, t) => /* @__PURE__ */ (0, u.jsxs)("li", { children: [
283
+ /* @__PURE__ */ (0, u.jsx)("time", { children: m(e.at) }),
284
+ /* @__PURE__ */ (0, u.jsx)("span", {
285
+ className: "tx",
286
+ children: e.text
287
+ }),
288
+ e.badge && /* @__PURE__ */ (0, u.jsx)("span", {
289
+ className: "bd",
290
+ children: /* @__PURE__ */ (0, u.jsx)("span", {
291
+ className: `td2-badge ${e.badge.tone}`,
292
+ children: e.badge.text
293
+ })
294
+ })
295
+ ] }, t)) })] }, e.play)) : /* @__PURE__ */ (0, u.jsxs)("p", {
296
+ className: "td2-none",
297
+ children: [
298
+ "Nothing moved since ",
299
+ x,
300
+ "."
301
+ ]
302
+ })
303
+ })]
304
+ })]
305
+ }),
306
+ /* @__PURE__ */ (0, u.jsx)(M, {
307
+ plays: i,
308
+ live: s,
309
+ week: c,
310
+ now: t
311
+ })
312
+ ]
313
+ });
314
+ }
315
+ function A({ item: e }) {
316
+ let t = /* @__PURE__ */ (0, u.jsxs)(u.Fragment, { children: [
317
+ /* @__PURE__ */ (0, u.jsx)(a, {
318
+ name: "alert",
319
+ className: e.tone === "crit" ? "f" : "warn"
320
+ }),
321
+ /* @__PURE__ */ (0, u.jsxs)("span", { children: [/* @__PURE__ */ (0, u.jsx)("b", { children: e.text }), (e.next || e.detail) && /* @__PURE__ */ (0, u.jsx)("span", {
322
+ className: "sub",
323
+ children: E([e.next, e.detail].filter(Boolean).join(" · "))
324
+ })] }),
325
+ e.href && /* @__PURE__ */ (0, u.jsx)(a, {
326
+ name: "chevron",
327
+ className: "go"
328
+ })
329
+ ] });
330
+ return /* @__PURE__ */ (0, u.jsx)("li", { children: e.href ? /* @__PURE__ */ (0, u.jsx)("a", {
331
+ href: e.href.startsWith("#") ? `/${e.href}` : e.href,
332
+ children: t
333
+ }) : /* @__PURE__ */ (0, u.jsx)("div", { children: t }) });
334
+ }
335
+ var j = 8;
336
+ function M({ plays: e, live: t, week: n, now: r }) {
337
+ let [o, s] = (0, l.useState)("all"), [c, f] = (0, l.useState)(""), [p, m] = (0, l.useState)({
338
+ running: !0,
339
+ stopped: !0,
340
+ solved: !0
341
+ }), [h, g] = (0, l.useState)({
342
+ running: !1,
343
+ stopped: !1,
344
+ solved: !1
345
+ }), _ = (0, l.useMemo)(() => {
346
+ let r = c.trim().toLowerCase(), i = {
347
+ running: [],
348
+ stopped: [],
349
+ solved: []
350
+ };
351
+ for (let n of e) (!r || `${n.title} ${n.play}`.toLowerCase().includes(r)) && i[d(n, (t.get(n.play)?.length ?? 0) > 0)].push(n);
352
+ for (let e of Object.values(i)) e.sort((e, t) => (n.get(t.play)?.lastActiveAt ?? "").localeCompare(n.get(e.play)?.lastActiveAt ?? ""));
353
+ return i;
354
+ }, [
355
+ e,
356
+ t,
357
+ n,
358
+ c
359
+ ]), v = {
360
+ all: e.length,
361
+ running: _.running.length,
362
+ stopped: _.stopped.length,
363
+ solved: _.solved.length
364
+ };
365
+ return /* @__PURE__ */ (0, u.jsxs)("section", {
366
+ className: "rp-card td2-board",
367
+ "aria-label": "Plays",
368
+ children: [/* @__PURE__ */ (0, u.jsxs)("div", {
369
+ className: "rp-hd",
370
+ children: [
371
+ /* @__PURE__ */ (0, u.jsxs)("h2", { children: ["Plays", /* @__PURE__ */ (0, u.jsx)("span", {
372
+ className: "ct",
373
+ children: e.length
374
+ })] }),
375
+ /* @__PURE__ */ (0, u.jsx)(i, {
376
+ "aria-label": "Show",
377
+ value: o,
378
+ onValueChange: s,
379
+ options: [
380
+ "all",
381
+ "running",
382
+ "stopped",
383
+ "solved"
384
+ ].map((e) => ({
385
+ value: e,
386
+ label: e === "all" ? "All" : e[0].toUpperCase() + e.slice(1),
387
+ adornment: /* @__PURE__ */ (0, u.jsx)("span", {
388
+ className: "ct",
389
+ children: v[e]
390
+ })
391
+ }))
392
+ }),
393
+ /* @__PURE__ */ (0, u.jsx)("span", {
394
+ className: "end",
395
+ children: /* @__PURE__ */ (0, u.jsxs)("label", {
396
+ className: "rp-field td2-find",
397
+ children: [/* @__PURE__ */ (0, u.jsx)(a, { name: "search" }), /* @__PURE__ */ (0, u.jsx)("input", {
398
+ value: c,
399
+ onChange: (e) => f(e.target.value),
400
+ placeholder: "Find a play",
401
+ "aria-label": "Find a play"
402
+ })]
403
+ })
404
+ })
405
+ ]
406
+ }), /* @__PURE__ */ (0, u.jsxs)("div", {
407
+ className: "td2-grid",
408
+ children: [/* @__PURE__ */ (0, u.jsxs)("div", {
409
+ className: "td2-cols",
410
+ "aria-hidden": "true",
411
+ children: [
412
+ /* @__PURE__ */ (0, u.jsx)("span", { children: "Play" }),
413
+ /* @__PURE__ */ (0, u.jsx)("span", { children: "Steps" }),
414
+ /* @__PURE__ */ (0, u.jsx)("span", { children: "Metric" }),
415
+ /* @__PURE__ */ (0, u.jsxs)("span", {
416
+ className: "axis",
417
+ children: [Array.from({ length: x }, (e, t) => /* @__PURE__ */ (0, u.jsxs)("i", {
418
+ style: { left: `${t / x * 100}%` },
419
+ children: [(10 ** (x - t)).toLocaleString("en-US"), "×"]
420
+ }, t)), /* @__PURE__ */ (0, u.jsx)("i", {
421
+ style: { left: "100%" },
422
+ className: "t",
423
+ children: "target"
424
+ })]
425
+ }),
426
+ /* @__PURE__ */ (0, u.jsx)("span", { children: "Now" }),
427
+ /* @__PURE__ */ (0, u.jsx)("span", { children: "7 days" }),
428
+ /* @__PURE__ */ (0, u.jsx)("span", {
429
+ className: "r",
430
+ children: "Live"
431
+ })
432
+ ]
433
+ }), [
434
+ "running",
435
+ "stopped",
436
+ "solved"
437
+ ].filter((e) => (o === "all" || o === e) && _[e].length).map((e) => {
438
+ let i = _[e], o = h[e] || c ? i : i.slice(0, j);
439
+ return /* @__PURE__ */ (0, u.jsxs)("div", {
440
+ className: "td2-group",
441
+ children: [
442
+ /* @__PURE__ */ (0, u.jsxs)("button", {
443
+ type: "button",
444
+ className: "td2-gh",
445
+ "aria-expanded": p[e],
446
+ onClick: () => m({
447
+ ...p,
448
+ [e]: !p[e]
449
+ }),
450
+ children: [
451
+ /* @__PURE__ */ (0, u.jsx)(a, { name: "chevron" }),
452
+ e[0].toUpperCase() + e.slice(1),
453
+ /* @__PURE__ */ (0, u.jsx)("span", {
454
+ className: "ct",
455
+ children: i.length
456
+ })
457
+ ]
458
+ }),
459
+ p[e] && o.map((i) => /* @__PURE__ */ (0, u.jsx)(N, {
460
+ p: i,
461
+ group: e,
462
+ runs: t.get(i.play) ?? [],
463
+ week: n.get(i.play),
464
+ now: r
465
+ }, i.play)),
466
+ p[e] && o.length < i.length && /* @__PURE__ */ (0, u.jsxs)("button", {
467
+ type: "button",
468
+ className: "rp-more-row",
469
+ onClick: () => g({
470
+ ...h,
471
+ [e]: !0
472
+ }),
473
+ children: [
474
+ "Show ",
475
+ i.length - o.length,
476
+ " more"
477
+ ]
478
+ })
479
+ ]
480
+ }, e);
481
+ })]
482
+ })]
483
+ });
484
+ }
485
+ function N({ p: e, group: t, runs: n, week: r, now: i }) {
486
+ let [a, o] = (0, l.useState)(!1), c = e.view.trend, d = c?.newest, g = n.reduce((e, t) => e + (t.agents ?? 0), 0), [_, ...v] = (e.view.bars ?? []).filter((e) => e.latest), y = C(e, _), b = e.view.blocker ? E(e.view.blocker.sentence ?? e.view.blocker.text) : void 0, x = t === "stopped" && e.view.blocker ? `${e.view.blocker.kind === "stopped" ? "Stopped" : "Held"} ${m(e.view.blocker.since)}` : t === "running" && e.view.blocker ? "Held" : 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` : ""}` : e.view.status.label;
487
+ return /* @__PURE__ */ (0, u.jsxs)("div", {
488
+ className: `td2-row ${t}`,
489
+ children: [
490
+ /* @__PURE__ */ (0, u.jsxs)("div", {
491
+ className: "nm",
492
+ children: [/* @__PURE__ */ (0, u.jsx)("a", {
493
+ href: f(e.play),
494
+ children: e.title
495
+ }), /* @__PURE__ */ (0, u.jsx)("span", {
496
+ className: "sub",
497
+ title: b,
498
+ children: x
499
+ })]
500
+ }),
501
+ /* @__PURE__ */ (0, u.jsx)("div", {
502
+ className: "steps",
503
+ children: c && d ? /* @__PURE__ */ (0, u.jsxs)("span", {
504
+ className: "st",
505
+ title: `${d.release}, ${h(d.at, i)}${d.passed < c.best ? `; best ${c.best}/${c.total}` : ""}`,
506
+ children: [/* @__PURE__ */ (0, u.jsxs)("b", { children: [
507
+ d.passed,
508
+ "/",
509
+ c.total
510
+ ] }), /* @__PURE__ */ (0, u.jsx)(P, {
511
+ passed: d.passed,
512
+ total: c.total
513
+ })]
514
+ }) : /* @__PURE__ */ (0, u.jsx)("span", {
515
+ className: "dim",
516
+ children: "—"
517
+ })
518
+ }),
519
+ _ ? /* @__PURE__ */ (0, u.jsx)(F, {
520
+ bar: _,
521
+ more: v.length ? /* @__PURE__ */ (0, u.jsx)("button", {
522
+ type: "button",
523
+ className: "td2-mx",
524
+ "aria-expanded": a,
525
+ "aria-label": `${a ? "Hide" : "Show"} ${v.length} more ${v.length === 1 ? "metric" : "metrics"}`,
526
+ onClick: () => o(!a),
527
+ children: a ? "−" : `+${v.length}`
528
+ }) : null
529
+ }) : /* @__PURE__ */ (0, u.jsxs)(u.Fragment, { children: [
530
+ /* @__PURE__ */ (0, u.jsx)("span", {
531
+ className: "ml dim",
532
+ children: b ? /* @__PURE__ */ (0, u.jsx)("span", {
533
+ title: b,
534
+ children: D(b, 8)
535
+ }) : "No metric"
536
+ }),
537
+ /* @__PURE__ */ (0, u.jsx)("span", {}),
538
+ /* @__PURE__ */ (0, u.jsx)("span", {})
539
+ ] }),
540
+ /* @__PURE__ */ (0, u.jsx)("div", {
541
+ className: "wk",
542
+ children: y ? /* @__PURE__ */ (0, u.jsx)("span", {
543
+ className: `td2-badge ${y.tone}`,
544
+ children: y.text
545
+ }) : /* @__PURE__ */ (0, u.jsx)("span", {
546
+ className: "dim",
547
+ children: "—"
548
+ })
549
+ }),
550
+ /* @__PURE__ */ (0, u.jsx)("div", {
551
+ className: "live",
552
+ children: n.length ? /* @__PURE__ */ (0, u.jsxs)("span", {
553
+ className: "lv",
554
+ title: n.map((t) => s(e.play, t.runId)).join(", "),
555
+ children: [/* @__PURE__ */ (0, u.jsx)("span", { className: "rp-dot live" }), /* @__PURE__ */ (0, u.jsxs)("a", {
556
+ href: p(n[0].runId),
557
+ children: [
558
+ /* @__PURE__ */ (0, u.jsx)("b", { children: g || n.length }),
559
+ " ",
560
+ g ? g === 1 ? "agent" : "agents" : n.length === 1 ? "run" : "runs"
561
+ ]
562
+ })]
563
+ }) : /* @__PURE__ */ (0, u.jsx)("span", {
564
+ className: "sub",
565
+ children: r?.lastActiveAt ? h(r.lastActiveAt, i) : ""
566
+ })
567
+ }),
568
+ a && v.map((e) => /* @__PURE__ */ (0, u.jsx)("div", {
569
+ className: "td2-extra",
570
+ children: /* @__PURE__ */ (0, u.jsx)(F, { bar: e })
571
+ }, e.metric))
572
+ ]
573
+ });
574
+ }
575
+ function P({ passed: e, total: t }) {
576
+ return /* @__PURE__ */ (0, u.jsx)("span", {
577
+ className: "td2-meter",
578
+ "aria-hidden": "true",
579
+ children: Array.from({ length: Math.min(t, 12) }, (t, n) => /* @__PURE__ */ (0, u.jsx)("i", { className: n < e ? "on" : "" }, n))
580
+ });
581
+ }
582
+ function F({ bar: e, more: t }) {
583
+ let n = !e.ratio || e.ratio.side === "met", r = n ? 0 : Math.min(x, Math.log10(Math.max(1, e.ratio.x))), i = `${e.label}: ${v(e.latest?.value, e.unit)}${e.latest?.release ? ` at ${e.latest.release}` : ""}; target ${y(e)}`;
584
+ return /* @__PURE__ */ (0, u.jsxs)(u.Fragment, { children: [
585
+ /* @__PURE__ */ (0, u.jsxs)("span", {
586
+ className: "ml",
587
+ children: [/* @__PURE__ */ (0, u.jsxs)("span", {
588
+ title: i,
589
+ children: [
590
+ e.label,
591
+ " ",
592
+ e.direction === "down" ? "↓" : "↑"
593
+ ]
594
+ }), t]
595
+ }),
596
+ /* @__PURE__ */ (0, u.jsxs)("span", {
597
+ className: "ax",
598
+ title: i,
599
+ children: [
600
+ /* @__PURE__ */ (0, u.jsx)("i", { className: "track" }),
601
+ !n && /* @__PURE__ */ (0, u.jsx)("i", {
602
+ className: "dist",
603
+ style: { left: `${(1 - r / x) * 100}%` }
604
+ }),
605
+ /* @__PURE__ */ (0, u.jsx)("i", { className: "tick" })
606
+ ]
607
+ }),
608
+ /* @__PURE__ */ (0, u.jsxs)("span", {
609
+ className: "mv",
610
+ title: `target ${y(e)}`,
611
+ children: [
612
+ /* @__PURE__ */ (0, u.jsx)("b", { children: v(e.latest?.value, e.unit) }),
613
+ " ",
614
+ /* @__PURE__ */ (0, u.jsx)("span", {
615
+ className: n ? "ok" : "dim",
616
+ children: b(e)
617
+ })
618
+ ]
619
+ })
620
+ ] });
621
+ }
622
+ //#endregion
623
+ export { O as TodayPage, v as measure };