@peasant-labs/fairtrade 0.0.39 → 0.0.41

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 (48) hide show
  1. package/THIRD_PARTY_NOTICES.md +14 -0
  2. package/dist/lib/{GraphLegend-DwLFq2JU.js → GraphLegend-CBKZsRta.js} +1401 -1488
  3. package/dist/lib/adapter-Dulh38C2.js +1214 -0
  4. package/dist/lib/analytics.css +1 -1
  5. package/dist/lib/analytics.js +289 -292
  6. package/dist/lib/commons.js +807 -805
  7. package/dist/lib/components.css +1 -1
  8. package/dist/lib/format-B3uT2wzU.js +41 -0
  9. package/dist/lib/graph.js +383 -381
  10. package/dist/lib/share-fonts/AtkinsonHyperlegible-Bold.ttf +0 -0
  11. package/dist/lib/share-fonts/AtkinsonHyperlegible-Regular.ttf +0 -0
  12. package/dist/lib/share-fonts/AtkinsonHyperlegibleMono-Bold.ttf +0 -0
  13. package/dist/lib/share-fonts/AtkinsonHyperlegibleMono-Regular.ttf +0 -0
  14. package/dist/lib/share-fonts/OFL-AtkinsonHyperlegible.txt +92 -0
  15. package/dist/lib/share-fonts/OFL-AtkinsonHyperlegibleMono.txt +93 -0
  16. package/dist/lib/share.js +1311 -0
  17. package/dist/lib/time-CpVBzcqQ.js +157 -0
  18. package/dist/lib/types/BrandMark.d.ts +2 -6
  19. package/dist/lib/types/CliOnboard.d.ts +11 -0
  20. package/dist/lib/types/DiffView.d.ts +5 -3
  21. package/dist/lib/types/Publish.d.ts +29 -7
  22. package/dist/lib/types/Switch.d.ts +8 -1
  23. package/dist/lib/types/analytics/format.d.ts +2 -1
  24. package/dist/lib/types/brand-geometry.d.ts +22 -0
  25. package/dist/lib/types/commons/providers.d.ts +1 -1
  26. package/dist/lib/types/format.d.ts +35 -4
  27. package/dist/lib/types/index.d.ts +1 -0
  28. package/dist/lib/types/share/ShareCard.d.ts +40 -0
  29. package/dist/lib/types/share/data.d.ts +54 -0
  30. package/dist/lib/types/share/fonts.d.ts +16 -0
  31. package/dist/lib/types/share/index.d.ts +5 -0
  32. package/dist/lib/types/share/marks.d.ts +23 -0
  33. package/dist/lib/types/share/metrics.d.ts +10 -0
  34. package/dist/lib/types/transcript/title.d.ts +21 -0
  35. package/dist/lib/types/ui/brand-geometry.d.ts +22 -0
  36. package/dist/lib/types/ui/format.d.ts +35 -0
  37. package/dist/lib/types/ui/provider-policy.d.ts +27 -0
  38. package/dist/lib/types/ui/transcript/adapter.d.ts +66 -0
  39. package/dist/lib/types/ui/transcript/adapter.parse.d.ts +103 -0
  40. package/dist/lib/types/ui/transcript/analytics.d.ts +213 -0
  41. package/dist/lib/types/ui/transcript/time.d.ts +47 -0
  42. package/dist/lib/types/ui/transcript/title.d.ts +84 -0
  43. package/dist/lib/types/ui/transcript/usage.d.ts +19 -0
  44. package/dist/lib/types/ui/transcript/view-model.d.ts +700 -0
  45. package/dist/lib/types/ui/transcript/wire-types.d.ts +63 -0
  46. package/dist/lib/{ui-CBsfaQMA.js → ui-Bhk29YuW.js} +4198 -5412
  47. package/dist/lib/ui.js +7 -4
  48. package/package.json +20 -6
package/dist/lib/graph.js CHANGED
@@ -1,18 +1,20 @@
1
- import { $ as e, A as t, B as n, C as r, D as i, Dt as a, E as o, F as s, G as c, H as l, I as u, J as d, K as f, L as p, M as m, N as h, O as g, P as _, Q as v, R as y, S as b, T as x, Tt as S, U as C, V as w, W as T, X as E, Y as D, Z as O, _ as k, _t as A, a as j, at as M, b as N, c as P, ct as F, et as I, f as ee, g as te, i as L, it as ne, j as re, k as ie, l as ae, lt as oe, m as se, mt as ce, n as le, nt as ue, o as de, ot as fe, q as pe, r as me, rt as he, s as ge, st as _e, t as ve, tt as ye, v as be, w as xe, x as Se, y as Ce, yt as we, z as Te } from "./GraphLegend-DwLFq2JU.js";
2
- import { memo as Ee, useCallback as R, useEffect as z, useMemo as B, useRef as V, useState as H } from "react";
3
- import { Fragment as De, jsx as U, jsxs as W } from "react/jsx-runtime";
4
- import { Box as Oe, Check as ke, ChevronDown as Ae, ChevronRight as G, Coins as je, CornerDownRight as Me, FileCode as Ne, FileDiff as Pe, FileText as Fe, Folder as Ie, GitMerge as Le, Hash as Re, Map as ze, Maximize2 as Be, MessageSquare as Ve, Minus as He, Plus as Ue, RotateCcw as We, RotateCw as Ge, Search as Ke, Share2 as qe, Star as Je, Tag as Ye, TriangleAlert as Xe, X as Ze } from "lucide-react";
5
- import { AllChangeBindings as Qe, AllDiffLineKinds as $e, AllEdgeViolationKinds as et, AllFileChangeStatuses as tt, AllInsightKinds as nt, AllInsightProvenances as rt, AllMapNodeKinds as it, AllReadAttributionStates as at, AllReadStateGrades as ot, ChangeBinding as st, DiffLineKind as ct, EdgeViolationKind as lt, FileChangeStatus as ut, InsightKind as dt, InsightProvenance as ft, MapNodeKind as pt, ReadAttributionState as mt, ReadStateGrade as ht, isChangeBinding as gt, isDiffLineKind as _t, isEdgeViolationKind as vt, isFileChangeStatus as yt, isInsightKind as bt, isInsightProvenance as xt, isMapNodeKind as St, isReadAttributionState as Ct, isReadStateGrade as wt } from "@peasant-labs/schema";
6
- import { Background as Tt, BackgroundVariant as Et, Handle as K, MiniMap as Dt, Position as q, ReactFlow as Ot, ReactFlowProvider as kt, useEdgesState as At, useNodesState as jt, useReactFlow as Mt } from "@xyflow/react";
1
+ import { $ as e, A as t, B as n, C as r, D as i, E as a, F as o, G as s, H as c, I as l, J as u, K as d, L as f, M as p, N as m, O as h, P as g, Q as _, R as v, S as y, T as b, U as x, V as S, W as C, X as w, Y as T, Z as E, _ as D, a as O, at as k, b as A, c as j, ct as M, et as N, f as P, g as F, gt as I, i as ee, it as te, j as ne, k as re, l as ie, lt as ae, m as oe, n as se, o as ce, ot as le, pt as ue, q as de, r as fe, rt as pe, s as me, st as he, t as ge, tt as _e, v as ve, vt as ye, w as be, wt as xe, x as Se, y as Ce, z as we } from "./GraphLegend-CBKZsRta.js";
2
+ import { p as Te } from "./time-CpVBzcqQ.js";
3
+ import { a as Ee, n as De, r as Oe } from "./format-B3uT2wzU.js";
4
+ import { memo as ke, useCallback as L, useEffect as R, useMemo as z, useRef as B, useState as V } from "react";
5
+ import { Fragment as Ae, jsx as H, jsxs as U } from "react/jsx-runtime";
6
+ import { Box as je, Check as Me, ChevronDown as Ne, ChevronRight as W, Coins as Pe, CornerDownRight as Fe, FileCode as Ie, FileDiff as Le, FileText as Re, Folder as ze, GitMerge as Be, Hash as Ve, Map as He, Maximize2 as Ue, MessageSquare as We, Minus as Ge, Plus as Ke, RotateCcw as qe, RotateCw as Je, Search as Ye, Share2 as Xe, Star as Ze, Tag as Qe, TriangleAlert as $e, X as et } from "lucide-react";
7
+ import { AllChangeBindings as tt, AllDiffLineKinds as nt, AllEdgeViolationKinds as rt, AllFileChangeStatuses as it, AllInsightKinds as at, AllInsightProvenances as ot, AllMapNodeKinds as st, AllReadAttributionStates as ct, AllReadStateGrades as lt, ChangeBinding as ut, DiffLineKind as dt, EdgeViolationKind as ft, FileChangeStatus as pt, InsightKind as mt, InsightProvenance as ht, MapNodeKind as gt, ReadAttributionState as _t, ReadStateGrade as vt, isChangeBinding as yt, isDiffLineKind as bt, isEdgeViolationKind as xt, isFileChangeStatus as St, isInsightKind as Ct, isInsightProvenance as wt, isMapNodeKind as Tt, isReadAttributionState as Et, isReadStateGrade as Dt } from "@peasant-labs/schema";
8
+ import { Background as Ot, BackgroundVariant as kt, Handle as G, MiniMap as At, Position as K, ReactFlow as jt, ReactFlowProvider as Mt, useEdgesState as Nt, useNodesState as Pt, useReactFlow as Ft } from "@xyflow/react";
7
9
  //#region src/ui/graph/changeGraph.js
8
- var Nt = 6e4, Pt = 60 * Nt, Ft = 24 * Pt, It = 7 * Ft;
9
- function J(e, t) {
10
+ var It = 6e4, Lt = 60 * It, Rt = 24 * Lt, zt = 7 * Rt;
11
+ function q(e, t) {
10
12
  if (e == null) return "";
11
13
  let n = Math.max(0, t - e);
12
- return n < Pt ? `${Math.max(1, Math.floor(n / Nt))}m ago` : n < Ft ? `${Math.floor(n / Pt)}h ago` : n < It ? `${Math.floor(n / Ft)}d ago` : `${Math.floor(n / It)}wk ago`;
14
+ return n < Lt ? `${Math.max(1, Math.floor(n / It))}m ago` : n < Rt ? `${Math.floor(n / Lt)}h ago` : n < zt ? `${Math.floor(n / Rt)}d ago` : `${Math.floor(n / zt)}wk ago`;
13
15
  }
14
- function Lt(e, { nowMs: t }) {
15
- let n = e.recentCommits ?? [], r = e.changes ?? [], i = e.defaultBranch, a = e.sessions ?? [], o = new Map(a.map((e) => [e.sessionId, e])), s = new Set(n.flatMap((e) => e.sessionIds ?? [])), c = r.filter((e) => !e.merged).slice().sort((e, t) => Rt(t) - Rt(e) || e.branch.localeCompare(t.branch)), l = r.filter((e) => e.merged && !e.reverted), u = r.filter((e) => e.merged && e.reverted), d = new Map(l.filter((e) => e.mergeCommitHash).map((e) => [e.mergeCommitHash, e])), f = c.map((e, t) => ({
16
+ function Bt(e, { nowMs: t }) {
17
+ let n = e.recentCommits ?? [], r = e.changes ?? [], i = e.defaultBranch, a = e.sessions ?? [], o = new Map(a.map((e) => [e.sessionId, e])), s = new Set(n.flatMap((e) => e.sessionIds ?? [])), c = r.filter((e) => !e.merged).slice().sort((e, t) => Vt(t) - Vt(e) || e.branch.localeCompare(t.branch)), l = r.filter((e) => e.merged && !e.reverted), u = r.filter((e) => e.merged && e.reverted), d = new Map(l.filter((e) => e.mergeCommitHash).map((e) => [e.mergeCommitHash, e])), f = c.map((e, t) => ({
16
18
  change: e,
17
19
  lane: t + 1,
18
20
  baseHash: e.baseHash,
@@ -32,7 +34,7 @@ function Lt(e, { nowMs: t }) {
32
34
  branch: i.branch,
33
35
  session: (i.sessionCount ?? 0) > 0,
34
36
  tip: !0,
35
- time: J(n.tipMs, t)
37
+ time: q(n.tipMs, t)
36
38
  });
37
39
  }
38
40
  };
@@ -51,13 +53,13 @@ function Lt(e, { nowMs: t }) {
51
53
  return t ? [t] : [];
52
54
  }),
53
55
  merged: c ? !0 : void 0,
54
- time: J(e.timeMs, t)
56
+ time: q(e.timeMs, t)
55
57
  });
56
58
  }), h(-Infinity);
57
59
  let g = u.map((e) => ({
58
60
  branch: e.branch,
59
61
  mergedAtMs: e.mergedAtMs ?? null,
60
- when: J(e.mergedAtMs, t)
62
+ when: q(e.mergedAtMs, t)
61
63
  })), _ = a.filter((e) => e.hasCommitBinding === !0 && !s.has(e.sessionId));
62
64
  return {
63
65
  commits: p,
@@ -68,33 +70,33 @@ function Lt(e, { nowMs: t }) {
68
70
  outsideWindowSessions: _
69
71
  };
70
72
  }
71
- function Rt(e) {
73
+ function Vt(e) {
72
74
  return e.tipCommitMs ?? Infinity;
73
75
  }
74
76
  //#endregion
75
77
  //#region src/ui/graph/Changes.jsx
76
- function zt({ payload: e, projectLabel: t, selectedId: n, onNavigate: r, onSelectChange: i, onOpenMap: a, hasMore: o = !1, onShowOlder: s, onOpenSession: c, nowMs: l, headerActions: u }) {
77
- let d = l ?? Date.now(), { commits: f, reverted: p, unlinkedSessions: m, outsideWindowSessions: h, openCount: g, mergedCount: _ } = B(() => Lt(e, { nowMs: d }), [e, d]), v = e.defaultBranch, y = B(() => new Set(f.filter((e) => (e.sessionRefs?.length ?? 0) > 2).map((e) => e.id)), [f]), [b, x] = H([]);
78
- z(() => {
78
+ function Ht({ payload: e, projectLabel: t, selectedId: n, onNavigate: r, onSelectChange: i, onOpenMap: a, hasMore: o = !1, onShowOlder: s, onOpenSession: c, nowMs: l, headerActions: u }) {
79
+ let d = l ?? Date.now(), { commits: f, reverted: p, unlinkedSessions: m, outsideWindowSessions: h, openCount: g, mergedCount: _ } = z(() => Bt(e, { nowMs: d }), [e, d]), v = e.defaultBranch, y = z(() => new Set(f.filter((e) => (e.sessionRefs?.length ?? 0) > 2).map((e) => e.id)), [f]), [b, x] = V([]);
80
+ R(() => {
79
81
  x((e) => {
80
82
  let t = e.filter((e) => y.has(e));
81
83
  return t.length === e.length ? e : t;
82
84
  });
83
85
  }, [y]);
84
- let S = R((e) => {
86
+ let S = L((e) => {
85
87
  y.has(e) && x((t) => {
86
88
  let n = new Set(t);
87
89
  return n.has(e) ? n.delete(e) : n.add(e), [...n];
88
90
  });
89
91
  }, [y]);
90
- return /* @__PURE__ */ W("div", {
92
+ return /* @__PURE__ */ U("div", {
91
93
  className: "gmp-root gmp-changes-root",
92
- children: [/* @__PURE__ */ W("div", {
94
+ children: [/* @__PURE__ */ U("div", {
93
95
  className: "gmp-changes-head",
94
- children: [/* @__PURE__ */ W("div", { children: [t && /* @__PURE__ */ W("span", {
96
+ children: [/* @__PURE__ */ U("div", { children: [t && /* @__PURE__ */ U("span", {
95
97
  className: "label",
96
98
  children: ["lines of work, ", t]
97
- }), /* @__PURE__ */ W("div", {
99
+ }), /* @__PURE__ */ U("div", {
98
100
  className: "gmp-changes-sub mono",
99
101
  children: [
100
102
  v ? `default branch ${v}, ` : "",
@@ -103,24 +105,24 @@ function zt({ payload: e, projectLabel: t, selectedId: n, onNavigate: r, onSelec
103
105
  _,
104
106
  " merged"
105
107
  ]
106
- })] }), /* @__PURE__ */ W("div", {
108
+ })] }), /* @__PURE__ */ U("div", {
107
109
  className: "gmp-head-actions",
108
- children: [u, /* @__PURE__ */ W("button", {
110
+ children: [u, /* @__PURE__ */ U("button", {
109
111
  type: "button",
110
112
  className: "btn btn-secondary btn-sm",
111
113
  onClick: () => {
112
114
  r ? r({ type: "open-map" }) : a?.();
113
115
  },
114
- children: [/* @__PURE__ */ U(Oe, {
116
+ children: [/* @__PURE__ */ H(je, {
115
117
  size: 14,
116
118
  "aria-hidden": "true"
117
119
  }), " open the map"]
118
120
  })]
119
121
  })]
120
- }), /* @__PURE__ */ W("div", {
122
+ }), /* @__PURE__ */ U("div", {
121
123
  className: "gmp-changes-body",
122
124
  children: [
123
- /* @__PURE__ */ U(ue, {
125
+ /* @__PURE__ */ H(pe, {
124
126
  className: "gmp-cg",
125
127
  commits: f,
126
128
  selectedId: n,
@@ -133,16 +135,16 @@ function zt({ payload: e, projectLabel: t, selectedId: n, onNavigate: r, onSelec
133
135
  expandedCommitSessions: b,
134
136
  onToggleCommitSessions: S
135
137
  }),
136
- m.length > 0 && /* @__PURE__ */ W("section", {
138
+ m.length > 0 && /* @__PURE__ */ U("section", {
137
139
  className: "gmp-unlinked-sessions",
138
140
  "aria-labelledby": "gmp-unlinked-sessions-heading",
139
- children: [/* @__PURE__ */ U("h2", {
141
+ children: [/* @__PURE__ */ H("h2", {
140
142
  id: "gmp-unlinked-sessions-heading",
141
143
  className: "sb-head gmp-unlinked-sessions-head",
142
144
  children: "sessions not linked to a commit"
143
- }), /* @__PURE__ */ U("div", {
145
+ }), /* @__PURE__ */ H("div", {
144
146
  className: "gmp-unlinked-sessions-list",
145
- children: m.map((e) => /* @__PURE__ */ W("button", {
147
+ children: m.map((e) => /* @__PURE__ */ U("button", {
146
148
  type: "button",
147
149
  className: "gmp-unlinked-session",
148
150
  onClick: () => {
@@ -152,20 +154,20 @@ function zt({ payload: e, projectLabel: t, selectedId: n, onNavigate: r, onSelec
152
154
  source: { kind: "unlinked" }
153
155
  }) : c?.(e.sessionId);
154
156
  },
155
- children: [/* @__PURE__ */ U(ce, { harness: e.harness }), /* @__PURE__ */ U("span", { children: e.title || e.sessionId })]
157
+ children: [/* @__PURE__ */ H(ue, { harness: e.harness }), /* @__PURE__ */ H("span", { children: e.title || e.sessionId })]
156
158
  }, e.sessionId))
157
159
  })]
158
160
  }),
159
- h.length > 0 && /* @__PURE__ */ W("section", {
161
+ h.length > 0 && /* @__PURE__ */ U("section", {
160
162
  className: "gmp-unlinked-sessions",
161
163
  "aria-labelledby": "gmp-outside-window-sessions-heading",
162
- children: [/* @__PURE__ */ U("h2", {
164
+ children: [/* @__PURE__ */ H("h2", {
163
165
  id: "gmp-outside-window-sessions-heading",
164
166
  className: "sb-head gmp-unlinked-sessions-head",
165
167
  children: "sessions linked outside this visible commit window"
166
- }), /* @__PURE__ */ U("div", {
168
+ }), /* @__PURE__ */ H("div", {
167
169
  className: "gmp-unlinked-sessions-list",
168
- children: h.map((e) => /* @__PURE__ */ W("button", {
170
+ children: h.map((e) => /* @__PURE__ */ U("button", {
169
171
  type: "button",
170
172
  className: "gmp-unlinked-session",
171
173
  onClick: () => {
@@ -175,18 +177,18 @@ function zt({ payload: e, projectLabel: t, selectedId: n, onNavigate: r, onSelec
175
177
  source: { kind: "outside-window" }
176
178
  }) : c?.(e.sessionId);
177
179
  },
178
- children: [/* @__PURE__ */ U(ce, { harness: e.harness }), /* @__PURE__ */ U("span", { children: e.title || e.sessionId })]
180
+ children: [/* @__PURE__ */ H(ue, { harness: e.harness }), /* @__PURE__ */ H("span", { children: e.title || e.sessionId })]
179
181
  }, e.sessionId))
180
182
  })]
181
183
  }),
182
- p.length > 0 && /* @__PURE__ */ W("div", {
184
+ p.length > 0 && /* @__PURE__ */ U("div", {
183
185
  className: "gmp-merged-sec",
184
- children: [/* @__PURE__ */ U("div", {
186
+ children: [/* @__PURE__ */ H("div", {
185
187
  className: "sb-head gmp-merged-head",
186
188
  children: "already merged in"
187
- }), /* @__PURE__ */ U("div", {
189
+ }), /* @__PURE__ */ H("div", {
188
190
  className: "gmp-merged-list",
189
- children: p.map((e) => /* @__PURE__ */ W("button", {
191
+ children: p.map((e) => /* @__PURE__ */ U("button", {
190
192
  type: "button",
191
193
  className: "gmp-merged-chip gmp-merged-revert",
192
194
  onClick: () => {
@@ -203,7 +205,7 @@ function zt({ payload: e, projectLabel: t, selectedId: n, onNavigate: r, onSelec
203
205
  }) : i?.(t);
204
206
  },
205
207
  children: [
206
- /* @__PURE__ */ U(Le, {
208
+ /* @__PURE__ */ H(Be, {
207
209
  size: 14,
208
210
  "aria-hidden": "true"
209
211
  }),
@@ -215,23 +217,23 @@ function zt({ payload: e, projectLabel: t, selectedId: n, onNavigate: r, onSelec
215
217
  }, e.branch))
216
218
  })]
217
219
  }),
218
- /* @__PURE__ */ W("div", {
220
+ /* @__PURE__ */ U("div", {
219
221
  className: "gmp-changes-legend",
220
222
  children: [
221
- /* @__PURE__ */ W("span", {
223
+ /* @__PURE__ */ U("span", {
222
224
  className: "gmp-legend-item",
223
- children: [/* @__PURE__ */ U("span", {
225
+ children: [/* @__PURE__ */ H("span", {
224
226
  className: "cg-dot cg-dot-filled",
225
227
  "aria-hidden": "true",
226
- children: /* @__PURE__ */ U(Je, {
228
+ children: /* @__PURE__ */ H(Ze, {
227
229
  className: "cg-spark",
228
230
  "aria-hidden": "true"
229
231
  })
230
232
  }), " commit with a recorded session"]
231
233
  }),
232
- /* @__PURE__ */ W("span", {
234
+ /* @__PURE__ */ U("span", {
233
235
  className: "gmp-legend-item",
234
- children: [/* @__PURE__ */ U("span", {
236
+ children: [/* @__PURE__ */ H("span", {
235
237
  className: "cg-dot cg-dot-hollow",
236
238
  style: {
237
239
  width: 9,
@@ -240,7 +242,7 @@ function zt({ payload: e, projectLabel: t, selectedId: n, onNavigate: r, onSelec
240
242
  "aria-hidden": "true"
241
243
  }), " no session captured"]
242
244
  }),
243
- /* @__PURE__ */ U("span", {
245
+ /* @__PURE__ */ H("span", {
244
246
  className: "gmp-legend-item gmp-legend-dim",
245
247
  children: "a star marks a recorded session, select a commit to open it"
246
248
  })
@@ -252,29 +254,29 @@ function zt({ payload: e, projectLabel: t, selectedId: n, onNavigate: r, onSelec
252
254
  }
253
255
  //#endregion
254
256
  //#region src/ui/graph/ChangeDetail.jsx
255
- var Bt = {
257
+ var Ut = {
256
258
  M: "changed",
257
259
  A: "added",
258
260
  D: "deleted",
259
261
  R: "renamed"
260
- }, Vt = {
262
+ }, Wt = {
261
263
  A: "chip-ok",
262
264
  M: "",
263
265
  D: "chip-err",
264
266
  R: "chip-warn"
265
- }, Ht = {
267
+ }, Gt = {
266
268
  context: "ctx",
267
269
  add: "add",
268
270
  del: "del"
269
271
  };
270
- function Ut(e) {
272
+ function Kt(e) {
271
273
  let t = (e.split("/").pop() ?? e).replace(/[-_]+/g, " ").trim();
272
274
  return t.charAt(0).toUpperCase() + t.slice(1);
273
275
  }
274
- var Wt = (e) => e >= 1e3 ? `≈${(e / 1e3).toFixed(1)}k` : String(e);
275
- function Gt(e) {
276
+ var qt = (e) => e >= 1e3 ? `≈${Oe(e)}` : Oe(e);
277
+ function Jt(e) {
276
278
  let t = e.oldStart, n = e.newStart, r = e.lines.map((e) => {
277
- let r = Ht[e.kind] ?? "ctx";
279
+ let r = Gt[e.kind] ?? "ctx";
278
280
  return r === "add" ? {
279
281
  type: r,
280
282
  newNo: n++,
@@ -295,99 +297,99 @@ function Gt(e) {
295
297
  lines: r
296
298
  };
297
299
  }
298
- function Kt({ file: t, diff: n, open: r, onToggle: i }) {
300
+ function Yt({ file: t, diff: n, open: r, onToggle: i }) {
299
301
  n && e(n);
300
302
  let a = t.status, o = n ? new Set(n.hunks.map((e) => e.sessionId).filter(Boolean)).size : null;
301
- return /* @__PURE__ */ W("div", {
303
+ return /* @__PURE__ */ U("div", {
302
304
  className: "gmp-file",
303
- children: [/* @__PURE__ */ W("button", {
305
+ children: [/* @__PURE__ */ U("button", {
304
306
  type: "button",
305
307
  className: "gmp-file-head",
306
308
  "aria-expanded": r,
307
309
  onClick: i,
308
310
  children: [
309
- U(r ? Ae : G, {
311
+ H(r ? Ne : W, {
310
312
  size: 14,
311
313
  "aria-hidden": "true"
312
314
  }),
313
- /* @__PURE__ */ U("span", {
315
+ /* @__PURE__ */ H("span", {
314
316
  className: "mono gmp-file-path",
315
317
  children: t.path
316
318
  }),
317
- /* @__PURE__ */ U("span", {
318
- className: "chip gmp-file-status " + (Vt[a] ?? ""),
319
- children: Bt[a] ?? a
319
+ /* @__PURE__ */ H("span", {
320
+ className: "chip gmp-file-status " + (Wt[a] ?? ""),
321
+ children: Ut[a] ?? a
320
322
  }),
321
- o != null && o > 0 && /* @__PURE__ */ W("span", {
323
+ o != null && o > 0 && /* @__PURE__ */ U("span", {
322
324
  className: "gmp-file-convos metaitem",
323
325
  children: [
324
- /* @__PURE__ */ U(Ve, {
326
+ /* @__PURE__ */ H(We, {
325
327
  size: 14,
326
328
  "aria-hidden": "true"
327
329
  }),
328
330
  " ",
329
- /* @__PURE__ */ U("span", {
331
+ /* @__PURE__ */ H("span", {
330
332
  className: "tnum",
331
333
  children: o
332
334
  })
333
335
  ]
334
336
  })
335
337
  ]
336
- }), r && /* @__PURE__ */ U("div", {
338
+ }), r && /* @__PURE__ */ H("div", {
337
339
  className: "gmp-file-body",
338
- children: n ? n.error ? /* @__PURE__ */ U("p", {
340
+ children: n ? n.error ? /* @__PURE__ */ H("p", {
339
341
  className: "gmp-diff-state gmp-diff-error mono",
340
342
  children: n.error
341
- }) : n.binary ? /* @__PURE__ */ U("p", {
343
+ }) : n.binary ? /* @__PURE__ */ H("p", {
342
344
  className: "gmp-diff-state mono",
343
345
  children: "binary file — no textual diff."
344
- }) : n.hunks.length === 0 ? /* @__PURE__ */ U("p", {
346
+ }) : n.hunks.length === 0 ? /* @__PURE__ */ H("p", {
345
347
  className: "gmp-diff-state mono",
346
348
  children: "no line changes."
347
- }) : n.hunks.map((e, t) => /* @__PURE__ */ W("div", {
349
+ }) : n.hunks.map((e, t) => /* @__PURE__ */ U("div", {
348
350
  className: "gmp-hunk",
349
351
  children: [
350
- e.sessionTitle && /* @__PURE__ */ W("div", {
352
+ e.sessionTitle && /* @__PURE__ */ U("div", {
351
353
  className: "gmp-hunk-attrib",
352
354
  children: [
353
- /* @__PURE__ */ U(Me, {
355
+ /* @__PURE__ */ H(Fe, {
354
356
  size: 14,
355
357
  "aria-hidden": "true"
356
358
  }),
357
- /* @__PURE__ */ U("span", {
359
+ /* @__PURE__ */ H("span", {
358
360
  className: "gmp-hunk-from",
359
361
  children: "from"
360
362
  }),
361
- /* @__PURE__ */ U("span", {
363
+ /* @__PURE__ */ H("span", {
362
364
  className: "gmp-hunk-link",
363
365
  children: e.sessionTitle
364
366
  }),
365
- e.sessionId && /* @__PURE__ */ U("span", {
367
+ e.sessionId && /* @__PURE__ */ H("span", {
366
368
  className: "mono gmp-hunk-hash",
367
369
  children: e.sessionId.slice(0, 7)
368
370
  })
369
371
  ]
370
372
  }),
371
- /* @__PURE__ */ U(ye, {
373
+ /* @__PURE__ */ H(_e, {
372
374
  file: "",
373
- hunks: [Gt(e)],
375
+ hunks: [Jt(e)],
374
376
  className: "gmp-hunk-diff"
375
377
  }),
376
- n.truncated && t === n.hunks.length - 1 && /* @__PURE__ */ U("p", {
378
+ n.truncated && t === n.hunks.length - 1 && /* @__PURE__ */ H("p", {
377
379
  className: "gmp-diff-state mono",
378
380
  children: "diff truncated (file exceeds the size cap)."
379
381
  })
380
382
  ]
381
- }, t)) : /* @__PURE__ */ U("p", {
383
+ }, t)) : /* @__PURE__ */ H("p", {
382
384
  className: "gmp-diff-state mono",
383
385
  children: "loading diff…"
384
386
  })
385
387
  })]
386
388
  });
387
389
  }
388
- function qt({ payload: e, getDiff: t, title: n, annotation: r = "", onSaveAnnotation: i, onRemoveAnnotation: a, onOpenMap: o, onShare: s, onCopyRecap: c, initialOpenFiles: l = {}, headerActions: u }) {
389
- v(e);
390
- let [d, f] = H(l), [p, m] = H(null), [h, g] = H(!1), [_, y] = H(""), b = V({}), x = V(null), S = n ?? Ut(e.branch), C = e.work.length, w = e.newEdges.length, T = e.removedEdges.length, E = (e) => f((t) => ({
390
+ function Xt({ payload: e, getDiff: t, title: n, annotation: r = "", onSaveAnnotation: i, onRemoveAnnotation: a, onOpenMap: o, onShare: s, onCopyRecap: c, initialOpenFiles: l = {}, headerActions: u }) {
391
+ _(e);
392
+ let [d, f] = V(l), [p, m] = V(null), [h, g] = V(!1), [v, y] = V(""), b = B({}), x = B(null), S = n ?? Kt(e.branch), C = e.work.length, w = e.newEdges.length, T = e.removedEdges.length, E = (e) => f((t) => ({
391
393
  ...t,
392
394
  [e]: !t[e]
393
395
  }));
@@ -409,55 +411,55 @@ function qt({ payload: e, getDiff: t, title: n, annotation: r = "", onSaveAnnota
409
411
  }
410
412
  function O(e) {
411
413
  e.preventDefault();
412
- let t = _.trim();
414
+ let t = v.trim();
413
415
  t && i?.(t), g(!1), y("");
414
416
  }
415
417
  let k = e.files[0]?.path;
416
- return /* @__PURE__ */ W("div", {
418
+ return /* @__PURE__ */ U("div", {
417
419
  className: "gmp-root gmp-detail-root",
418
420
  ref: x,
419
421
  children: [
420
- /* @__PURE__ */ W("div", {
422
+ /* @__PURE__ */ U("div", {
421
423
  className: "gmp-detail-head",
422
424
  children: [
423
- /* @__PURE__ */ W("div", {
425
+ /* @__PURE__ */ U("div", {
424
426
  className: "gmp-head-row",
425
- children: [/* @__PURE__ */ W("div", {
427
+ children: [/* @__PURE__ */ U("div", {
426
428
  className: "crumb",
427
429
  children: [
428
430
  "review ",
429
- /* @__PURE__ */ U(G, {
431
+ /* @__PURE__ */ H(W, {
430
432
  size: 14,
431
433
  "aria-hidden": "true"
432
434
  }),
433
435
  " ",
434
436
  e.defaultBranch,
435
437
  " ",
436
- /* @__PURE__ */ U(G, {
438
+ /* @__PURE__ */ H(W, {
437
439
  size: 14,
438
440
  "aria-hidden": "true"
439
441
  }),
440
442
  " ",
441
- /* @__PURE__ */ U("span", {
443
+ /* @__PURE__ */ H("span", {
442
444
  className: "cur",
443
445
  children: e.branch
444
446
  })
445
447
  ]
446
- }), u ? /* @__PURE__ */ U("div", {
448
+ }), u ? /* @__PURE__ */ H("div", {
447
449
  className: "gmp-head-actions",
448
450
  children: u
449
451
  }) : null]
450
452
  }),
451
- /* @__PURE__ */ U("div", {
453
+ /* @__PURE__ */ H("div", {
452
454
  className: "gmp-detail-title",
453
455
  children: S
454
456
  }),
455
- /* @__PURE__ */ W("p", {
457
+ /* @__PURE__ */ U("p", {
456
458
  className: "gmp-caption",
457
459
  children: [
458
460
  "this line of work touched",
459
461
  " ",
460
- /* @__PURE__ */ W("button", {
462
+ /* @__PURE__ */ U("button", {
461
463
  type: "button",
462
464
  className: "gmp-frag" + (p === "files" ? " gmp-frag-on" : ""),
463
465
  onClick: () => D("files", k),
@@ -466,7 +468,7 @@ function qt({ payload: e, getDiff: t, title: n, annotation: r = "", onSaveAnnota
466
468
  " ",
467
469
  "across",
468
470
  " ",
469
- /* @__PURE__ */ W("button", {
471
+ /* @__PURE__ */ U("button", {
470
472
  type: "button",
471
473
  className: "gmp-frag" + (p === "conversations" ? " gmp-frag-on" : ""),
472
474
  onClick: () => D("conversations"),
@@ -474,7 +476,7 @@ function qt({ payload: e, getDiff: t, title: n, annotation: r = "", onSaveAnnota
474
476
  }),
475
477
  ", reshaping",
476
478
  " ",
477
- /* @__PURE__ */ W("button", {
479
+ /* @__PURE__ */ U("button", {
478
480
  type: "button",
479
481
  className: "gmp-frag" + (p === "conn" ? " gmp-frag-on" : ""),
480
482
  onClick: () => D("conn"),
@@ -489,30 +491,30 @@ function qt({ payload: e, getDiff: t, title: n, annotation: r = "", onSaveAnnota
489
491
  "."
490
492
  ]
491
493
  }),
492
- /* @__PURE__ */ U("span", {
494
+ /* @__PURE__ */ H("span", {
493
495
  className: "gmp-caption-hint mono",
494
496
  children: "click any number to jump to its proof"
495
497
  })
496
498
  ]
497
499
  }),
498
- (e.frictions.length > 0 || e.violations.length > 0) && /* @__PURE__ */ W("div", {
500
+ (e.frictions.length > 0 || e.violations.length > 0) && /* @__PURE__ */ U("div", {
499
501
  className: "gmp-signals",
500
- children: [e.frictions.map((e, t) => /* @__PURE__ */ W("span", {
502
+ children: [e.frictions.map((e, t) => /* @__PURE__ */ U("span", {
501
503
  className: "gmp-signal",
502
504
  children: [
503
- /* @__PURE__ */ U(Ge, {
505
+ /* @__PURE__ */ H(Je, {
504
506
  size: 14,
505
507
  "aria-hidden": "true"
506
508
  }),
507
509
  " ",
508
510
  e.label,
509
511
  ", ",
510
- /* @__PURE__ */ U("span", {
512
+ /* @__PURE__ */ H("span", {
511
513
  className: "mono",
512
514
  children: e.file
513
515
  }),
514
516
  " ",
515
- /* @__PURE__ */ W("b", {
517
+ /* @__PURE__ */ U("b", {
516
518
  className: "tnum",
517
519
  children: [e.count, "×"]
518
520
  }),
@@ -520,15 +522,15 @@ function qt({ payload: e, getDiff: t, title: n, annotation: r = "", onSaveAnnota
520
522
  e.sessions,
521
523
  " conversations"
522
524
  ]
523
- }, t)), e.violations.length > 0 && /* @__PURE__ */ W("span", {
525
+ }, t)), e.violations.length > 0 && /* @__PURE__ */ U("span", {
524
526
  className: "gmp-signal gmp-signal-warn",
525
527
  children: [
526
- /* @__PURE__ */ U(Xe, {
528
+ /* @__PURE__ */ H($e, {
527
529
  size: 14,
528
530
  "aria-hidden": "true"
529
531
  }),
530
532
  " ",
531
- /* @__PURE__ */ U("b", {
533
+ /* @__PURE__ */ H("b", {
532
534
  className: "tnum",
533
535
  children: e.violations.length
534
536
  }),
@@ -536,13 +538,13 @@ function qt({ payload: e, getDiff: t, title: n, annotation: r = "", onSaveAnnota
536
538
  ]
537
539
  })]
538
540
  }),
539
- /* @__PURE__ */ W("div", {
541
+ /* @__PURE__ */ U("div", {
540
542
  className: "gmp-totals",
541
543
  children: [
542
- /* @__PURE__ */ W("span", {
544
+ /* @__PURE__ */ U("span", {
543
545
  className: "metaitem tnum",
544
546
  children: [
545
- /* @__PURE__ */ U(Pe, {
547
+ /* @__PURE__ */ H(Le, {
546
548
  size: 14,
547
549
  "aria-hidden": "true"
548
550
  }),
@@ -551,58 +553,58 @@ function qt({ payload: e, getDiff: t, title: n, annotation: r = "", onSaveAnnota
551
553
  " files touched"
552
554
  ]
553
555
  }),
554
- /* @__PURE__ */ W("span", {
556
+ /* @__PURE__ */ U("span", {
555
557
  className: "metaitem tnum",
556
558
  children: [
557
- /* @__PURE__ */ W("span", {
559
+ /* @__PURE__ */ U("span", {
558
560
  className: "gmp-add",
559
561
  children: ["+", w]
560
562
  }),
561
563
  "/",
562
- /* @__PURE__ */ W("span", {
564
+ /* @__PURE__ */ U("span", {
563
565
  className: "gmp-del",
564
566
  children: ["−", T]
565
567
  }),
566
568
  " connections"
567
569
  ]
568
570
  }),
569
- /* @__PURE__ */ W("span", {
571
+ /* @__PURE__ */ U("span", {
570
572
  className: "metaitem tnum",
571
573
  children: [
572
- /* @__PURE__ */ U(Re, {
574
+ /* @__PURE__ */ H(Ve, {
573
575
  size: 14,
574
576
  "aria-hidden": "true"
575
577
  }),
576
578
  " ai wrote ",
577
- Wt(Number(e.outputTokens)),
579
+ qt(Number(e.outputTokens)),
578
580
  " tokens"
579
581
  ]
580
582
  }),
581
- e.costUsd != null && /* @__PURE__ */ W("span", {
583
+ e.costUsd != null && /* @__PURE__ */ U("span", {
582
584
  className: "metaitem tnum",
583
585
  children: [
584
- /* @__PURE__ */ U(je, {
586
+ /* @__PURE__ */ H(Pe, {
585
587
  size: 14,
586
588
  "aria-hidden": "true"
587
589
  }),
588
- " est. spend $",
589
- e.costUsd.toFixed(2)
590
+ " est. spend ",
591
+ De(e.costUsd)
590
592
  ]
591
593
  })
592
594
  ]
593
595
  }),
594
- /* @__PURE__ */ W("div", {
596
+ /* @__PURE__ */ U("div", {
595
597
  className: "gmp-detail-sec",
596
- children: [/* @__PURE__ */ U("div", {
598
+ children: [/* @__PURE__ */ H("div", {
597
599
  className: "sb-head gmp-detail-sechead",
598
600
  children: "files changed, click a path to open its diff"
599
- }), /* @__PURE__ */ U("div", {
601
+ }), /* @__PURE__ */ H("div", {
600
602
  className: "gmp-files",
601
- children: e.files.map((e) => /* @__PURE__ */ U("div", {
603
+ children: e.files.map((e) => /* @__PURE__ */ H("div", {
602
604
  ref: (t) => {
603
605
  b.current[e.path] = t;
604
606
  },
605
- children: /* @__PURE__ */ U(Kt, {
607
+ children: /* @__PURE__ */ H(Yt, {
606
608
  file: e,
607
609
  diff: d[e.path] ? t?.(e) : void 0,
608
610
  open: !!d[e.path],
@@ -611,42 +613,42 @@ function qt({ payload: e, getDiff: t, title: n, annotation: r = "", onSaveAnnota
611
613
  }, e.path))
612
614
  })]
613
615
  }),
614
- /* @__PURE__ */ W("div", {
616
+ /* @__PURE__ */ U("div", {
615
617
  className: "gmp-detail-sec",
616
- children: [/* @__PURE__ */ U("div", {
618
+ children: [/* @__PURE__ */ H("div", {
617
619
  className: "sb-head gmp-detail-sechead",
618
620
  children: "your annotation"
619
- }), /* @__PURE__ */ W("div", {
621
+ }), /* @__PURE__ */ U("div", {
620
622
  className: "gmp-annot",
621
623
  children: [
622
- r && /* @__PURE__ */ W("span", {
624
+ r && /* @__PURE__ */ U("span", {
623
625
  className: "gmp-label-chip gmp-annot-chip",
624
626
  children: [
625
- /* @__PURE__ */ U(Ye, {
627
+ /* @__PURE__ */ H(Qe, {
626
628
  size: 14,
627
629
  "aria-hidden": "true"
628
630
  }),
629
631
  " ",
630
632
  r,
631
- /* @__PURE__ */ U("button", {
633
+ /* @__PURE__ */ H("button", {
632
634
  type: "button",
633
635
  className: "gmp-annot-x",
634
636
  "aria-label": "remove annotation",
635
637
  onClick: () => a?.(),
636
- children: /* @__PURE__ */ U(Ze, {
638
+ children: /* @__PURE__ */ H(et, {
637
639
  size: 14,
638
640
  "aria-hidden": "true"
639
641
  })
640
642
  })
641
643
  ]
642
644
  }),
643
- /* @__PURE__ */ W("button", {
645
+ /* @__PURE__ */ U("button", {
644
646
  type: "button",
645
647
  className: "gmp-annot-add",
646
648
  "aria-expanded": h,
647
649
  onClick: () => g((e) => !e),
648
650
  children: [
649
- /* @__PURE__ */ U(Ye, {
651
+ /* @__PURE__ */ H(Qe, {
650
652
  size: 14,
651
653
  "aria-hidden": "true"
652
654
  }),
@@ -654,34 +656,34 @@ function qt({ payload: e, getDiff: t, title: n, annotation: r = "", onSaveAnnota
654
656
  r ? "change label" : "add a label"
655
657
  ]
656
658
  }),
657
- h && /* @__PURE__ */ W("form", {
659
+ h && /* @__PURE__ */ U("form", {
658
660
  className: "gmp-annot-pop",
659
661
  onSubmit: O,
660
662
  children: [
661
- /* @__PURE__ */ U("span", {
663
+ /* @__PURE__ */ H("span", {
662
664
  className: "label",
663
665
  children: "user.custom_label"
664
666
  }),
665
- /* @__PURE__ */ U("input", {
667
+ /* @__PURE__ */ H("input", {
666
668
  className: "input",
667
669
  type: "text",
668
670
  autoFocus: !0,
669
- value: _,
671
+ value: v,
670
672
  onChange: (e) => y(e.target.value),
671
673
  placeholder: "e.g. good handoff",
672
674
  "aria-label": "annotation value"
673
675
  }),
674
- /* @__PURE__ */ W("div", {
676
+ /* @__PURE__ */ U("div", {
675
677
  className: "gmp-annot-pop-foot",
676
- children: [/* @__PURE__ */ U("button", {
678
+ children: [/* @__PURE__ */ H("button", {
677
679
  type: "button",
678
680
  className: "btn btn-ghost btn-sm",
679
681
  onClick: () => g(!1),
680
682
  children: "cancel"
681
- }), /* @__PURE__ */ W("button", {
683
+ }), /* @__PURE__ */ U("button", {
682
684
  type: "submit",
683
685
  className: "btn btn-primary btn-sm",
684
- children: [/* @__PURE__ */ U(ke, {
686
+ children: [/* @__PURE__ */ H(Me, {
685
687
  size: 14,
686
688
  "aria-hidden": "true"
687
689
  }), " save"]
@@ -692,24 +694,24 @@ function qt({ payload: e, getDiff: t, title: n, annotation: r = "", onSaveAnnota
692
694
  ]
693
695
  })]
694
696
  }),
695
- /* @__PURE__ */ W("div", {
697
+ /* @__PURE__ */ U("div", {
696
698
  className: "gmp-exits",
697
699
  children: [
698
- /* @__PURE__ */ W("button", {
700
+ /* @__PURE__ */ U("button", {
699
701
  type: "button",
700
702
  className: "btn btn-secondary btn-sm",
701
703
  onClick: () => o?.(),
702
- children: [/* @__PURE__ */ U(Oe, {
704
+ children: [/* @__PURE__ */ H(je, {
703
705
  size: 14,
704
706
  "aria-hidden": "true"
705
707
  }), " see this work on the code map"]
706
708
  }),
707
- /* @__PURE__ */ W("button", {
709
+ /* @__PURE__ */ U("button", {
708
710
  type: "button",
709
711
  className: "btn btn-secondary btn-sm",
710
712
  onClick: () => s?.(),
711
713
  children: [
712
- /* @__PURE__ */ U(qe, {
714
+ /* @__PURE__ */ H(Xe, {
713
715
  size: 14,
714
716
  "aria-hidden": "true"
715
717
  }),
@@ -718,16 +720,16 @@ function qt({ payload: e, getDiff: t, title: n, annotation: r = "", onSaveAnnota
718
720
  " conversations…"
719
721
  ]
720
722
  }),
721
- /* @__PURE__ */ W("button", {
723
+ /* @__PURE__ */ U("button", {
722
724
  type: "button",
723
725
  className: "btn btn-secondary btn-sm",
724
726
  onClick: () => c?.(),
725
- children: [/* @__PURE__ */ U(Fe, {
727
+ children: [/* @__PURE__ */ H(Re, {
726
728
  size: 14,
727
729
  "aria-hidden": "true"
728
730
  }), " copy recap"]
729
731
  }),
730
- /* @__PURE__ */ W("code", {
732
+ /* @__PURE__ */ U("code", {
731
733
  className: "gmp-gitdiff mono",
732
734
  children: [
733
735
  "git diff ",
@@ -738,7 +740,7 @@ function qt({ payload: e, getDiff: t, title: n, annotation: r = "", onSaveAnnota
738
740
  })
739
741
  ]
740
742
  }),
741
- /* @__PURE__ */ U("p", {
743
+ /* @__PURE__ */ H("p", {
742
744
  className: "gmp-boundary mono",
743
745
  children: "shows what changed and the recorded work behind it, not whether the change is correct or secure."
744
746
  })
@@ -747,31 +749,31 @@ function qt({ payload: e, getDiff: t, title: n, annotation: r = "", onSaveAnnota
747
749
  }
748
750
  //#endregion
749
751
  //#region src/ui/graph/CodeMap.jsx
750
- var Jt = Object.freeze({
752
+ var Zt = Object.freeze({
751
753
  project: "overview",
752
754
  package: "folders",
753
755
  file: "files"
754
- }), Yt = Object.freeze({
756
+ }), Qt = Object.freeze({
755
757
  overview: "project",
756
758
  folders: "package",
757
759
  files: "file"
758
760
  });
759
- function Xt({ payload: e, zoom: t, onZoomChange: n, selectedId: r, onSelect: i, onExpand: a, highlightedIds: o, nodeDeltas: s, structureEdgeDeltas: c, height: l = 520, ariaLabel: u = "code map", className: d = "", viewport: f, onViewportChange: p, state: m, onStateChange: h }) {
760
- let g = B(() => {
761
+ function $t({ payload: e, zoom: t, onZoomChange: n, selectedId: r, onSelect: i, onExpand: a, highlightedIds: o, nodeDeltas: s, structureEdgeDeltas: c, height: l = 520, ariaLabel: u = "code map", className: d = "", viewport: f, onViewportChange: p, state: m, onStateChange: h }) {
762
+ let g = z(() => {
761
763
  let t = /* @__PURE__ */ new Map();
762
764
  for (let n of e?.nodes ?? []) t.set(n.id, n);
763
765
  return t;
764
- }, [e?.nodes]), _ = B(() => m === void 0 ? null : N(m), [m]), v = B(() => _ ? Se(e, _) : null, [e, _]), y = B(() => Zt(e && {
766
+ }, [e?.nodes]), _ = z(() => m === void 0 ? null : A(m), [m]), v = z(() => _ ? Se(e, _) : null, [e, _]), y = z(() => en(e && {
765
767
  ...e,
766
768
  nodes: v?.canvas.allNodes ?? e.nodes
767
- }), [e, v?.canvas.allNodes]), b = v ? Jt[v.canvas.grain] ?? "folders" : Jt[t?.level ?? "package"], x = v?.canvas.expandedIds ?? t?.expanded, S = V(b);
769
+ }), [e, v?.canvas.allNodes]), b = v ? Zt[v.canvas.grain] ?? "folders" : Zt[t?.level ?? "package"], x = v?.canvas.expandedIds ?? t?.expanded, S = B(b);
768
770
  S.current = b;
769
771
  function C(e) {
770
772
  if (!_) return;
771
- let t = xe(_, e);
773
+ let t = be(_, e);
772
774
  Ce(_, t) || h?.(t);
773
775
  }
774
- return /* @__PURE__ */ U(te, {
776
+ return /* @__PURE__ */ H(F, {
775
777
  data: y,
776
778
  grain: b,
777
779
  expandedIds: x,
@@ -787,13 +789,13 @@ function Xt({ payload: e, zoom: t, onZoomChange: n, selectedId: r, onSelect: i,
787
789
  onExpand: a,
788
790
  onGrainChange: (e) => {
789
791
  S.current = e, n?.({
790
- level: Yt[e] ?? "package",
792
+ level: Qt[e] ?? "package",
791
793
  expanded: []
792
794
  });
793
795
  },
794
796
  onExpandedIdsChange: (e) => {
795
797
  n?.({
796
- level: Yt[S.current] ?? "package",
798
+ level: Qt[S.current] ?? "package",
797
799
  expanded: e
798
800
  });
799
801
  },
@@ -808,16 +810,16 @@ function Xt({ payload: e, zoom: t, onZoomChange: n, selectedId: r, onSelect: i,
808
810
  canonicalControlled: _ !== null
809
811
  });
810
812
  }
811
- function Zt(e) {
812
- e && I(e);
813
- let t = e?.nodes ?? [], n = $t(e?.violations ?? []);
813
+ function en(e) {
814
+ e && N(e);
815
+ let t = e?.nodes ?? [], n = nn(e?.violations ?? []);
814
816
  return {
815
817
  nodes: t.map((e) => ({
816
818
  id: e.id,
817
819
  label: e.name || e.id,
818
820
  kind: e.kind === "file" ? "file" : "folder",
819
821
  loc: e.loc ?? 0,
820
- coverage: Qt(e.recordedFiles, e.totalFiles),
822
+ coverage: tn(e.recordedFiles, e.totalFiles),
821
823
  parent: e.parent || void 0,
822
824
  violations: n.get(e.id) ?? 0,
823
825
  layer: e.layer,
@@ -831,24 +833,24 @@ function Zt(e) {
831
833
  }))
832
834
  };
833
835
  }
834
- function Qt(e, t) {
836
+ function tn(e, t) {
835
837
  let n = Number(t) || 0;
836
838
  if (n <= 0) return 0;
837
839
  let r = Math.max(0, Math.min(1, (Number(e) || 0) / n));
838
840
  return Math.max(0, Math.min(4, Math.round(r * 4)));
839
841
  }
840
- function $t(e) {
842
+ function nn(e) {
841
843
  let t = /* @__PURE__ */ new Map();
842
- for (let n of e) en(t, n.from), en(t, n.to);
844
+ for (let n of e) rn(t, n.from), rn(t, n.to);
843
845
  return t;
844
846
  }
845
- function en(e, t) {
847
+ function rn(e, t) {
846
848
  t && e.set(t, (e.get(t) ?? 0) + 1);
847
849
  }
848
850
  //#endregion
849
851
  //#region src/ui/graph/CodeMapNavigator.jsx
850
- function tn({ payload: e, grain: t = "package", expandedIds: n, onExpandedIdsChange: r, selectedId: i = null, onSelect: a, focusedId: o, onFocusChange: s, filter: c = "", onFilterChange: l, onOpenMap: u, onStateAction: d, ariaLabel: f = "code map navigator" }) {
851
- let [p, m] = H(() => /* @__PURE__ */ new Set()), [h, g] = H(null), _ = n === void 0 ? p : new Set(n), v = o === void 0 ? h : o, y = V(/* @__PURE__ */ new Map()), b = B(() => Se(e, N({
852
+ function an({ payload: e, grain: t = "package", expandedIds: n, onExpandedIdsChange: r, selectedId: i = null, onSelect: a, focusedId: o, onFocusChange: s, filter: c = "", onFilterChange: l, onOpenMap: u, onStateAction: d, ariaLabel: f = "code map navigator" }) {
853
+ let [p, m] = V(() => /* @__PURE__ */ new Set()), [h, g] = V(null), _ = n === void 0 ? p : new Set(n), v = o === void 0 ? h : o, y = B(/* @__PURE__ */ new Map()), b = z(() => Se(e, A({
852
854
  grain: t,
853
855
  expandedIds: Array.from(_),
854
856
  selectedId: i,
@@ -857,7 +859,7 @@ function tn({ payload: e, grain: t = "package", expandedIds: n, onExpandedIdsCha
857
859
  })), [
858
860
  e,
859
861
  t,
860
- rn(_),
862
+ sn(_),
861
863
  i,
862
864
  v,
863
865
  c
@@ -884,7 +886,7 @@ function tn({ payload: e, grain: t = "package", expandedIds: n, onExpandedIdsCha
884
886
  id: e.id
885
887
  }), s?.(e.id), a?.(e.id, e);
886
888
  }
887
- function A(e, t) {
889
+ function j(e, t) {
888
890
  let n = x[t];
889
891
  if (!n) return;
890
892
  let { node: r } = n, i = null;
@@ -900,21 +902,21 @@ function tn({ payload: e, grain: t = "package", expandedIds: n, onExpandedIdsCha
900
902
  } else return;
901
903
  e.preventDefault(), i && O(i);
902
904
  }
903
- return /* @__PURE__ */ W("section", {
905
+ return /* @__PURE__ */ U("section", {
904
906
  className: "gmp-navigator",
905
907
  "aria-label": f,
906
908
  children: [
907
- /* @__PURE__ */ U("header", {
909
+ /* @__PURE__ */ H("header", {
908
910
  className: "gmp-navigator-head",
909
- children: /* @__PURE__ */ W("label", {
911
+ children: /* @__PURE__ */ U("label", {
910
912
  className: "gmp-navigator-search",
911
913
  children: [
912
- /* @__PURE__ */ U(Ke, { "aria-hidden": "true" }),
913
- /* @__PURE__ */ U("span", {
914
+ /* @__PURE__ */ H(Ye, { "aria-hidden": "true" }),
915
+ /* @__PURE__ */ H("span", {
914
916
  className: "gmp-sr",
915
917
  children: "filter code areas"
916
918
  }),
917
- /* @__PURE__ */ U("input", {
919
+ /* @__PURE__ */ H("input", {
918
920
  value: c,
919
921
  onChange: (e) => {
920
922
  d?.({
@@ -927,13 +929,13 @@ function tn({ payload: e, grain: t = "package", expandedIds: n, onExpandedIdsCha
927
929
  ]
928
930
  })
929
931
  }),
930
- b.staleSelectedId ? /* @__PURE__ */ W("p", {
932
+ b.staleSelectedId ? /* @__PURE__ */ U("p", {
931
933
  className: "gmp-navigator-missing",
932
934
  role: "status",
933
935
  children: [
934
936
  "the selected code area is not present in this map.",
935
937
  " ",
936
- /* @__PURE__ */ U("button", {
938
+ /* @__PURE__ */ H("button", {
937
939
  type: "button",
938
940
  onClick: () => {
939
941
  d?.({ type: "clear-selection" }), a?.(null, null);
@@ -942,20 +944,20 @@ function tn({ payload: e, grain: t = "package", expandedIds: n, onExpandedIdsCha
942
944
  })
943
945
  ]
944
946
  }) : null,
945
- /* @__PURE__ */ W("div", {
947
+ /* @__PURE__ */ U("div", {
946
948
  className: "gmp-navigator-body",
947
- children: [/* @__PURE__ */ U("div", {
949
+ children: [/* @__PURE__ */ H("div", {
948
950
  role: x.length ? "tree" : void 0,
949
951
  "aria-label": "code areas",
950
952
  className: "gmp-navigator-tree",
951
953
  "data-grain": t,
952
- children: x.length === 0 ? /* @__PURE__ */ U("p", {
954
+ children: x.length === 0 ? /* @__PURE__ */ H("p", {
953
955
  className: "gmp-navigator-empty",
954
956
  role: "status",
955
957
  children: "no code areas match this filter"
956
958
  }) : x.map((e, t) => {
957
959
  let n = e.canExpand || e.forcedOpen, r = e.expanded, a = S === e.node.id;
958
- return /* @__PURE__ */ U(nn, {
960
+ return /* @__PURE__ */ H(on, {
959
961
  row: e,
960
962
  hasChildren: n,
961
963
  isExpanded: r,
@@ -971,28 +973,28 @@ function tn({ payload: e, grain: t = "package", expandedIds: n, onExpandedIdsCha
971
973
  onToggle: () => {
972
974
  e.forcedOpen || D(e.node.id);
973
975
  },
974
- onKeyDown: (e) => A(e, t)
976
+ onKeyDown: (e) => j(e, t)
975
977
  }, e.node.id);
976
978
  })
977
- }), /* @__PURE__ */ U("aside", {
979
+ }), /* @__PURE__ */ H("aside", {
978
980
  className: "gmp-navigator-actions",
979
981
  "aria-label": "selected code area",
980
- children: C ? /* @__PURE__ */ W(De, { children: [
981
- /* @__PURE__ */ U("p", {
982
+ children: C ? /* @__PURE__ */ U(Ae, { children: [
983
+ /* @__PURE__ */ H("p", {
982
984
  className: "gmp-navigator-selected",
983
985
  children: C.name || C.id
984
986
  }),
985
- /* @__PURE__ */ U("p", {
987
+ /* @__PURE__ */ H("p", {
986
988
  className: "gmp-navigator-selected-path",
987
989
  children: C.id
988
990
  }),
989
- T ? /* @__PURE__ */ W("button", {
991
+ T ? /* @__PURE__ */ U("button", {
990
992
  type: "button",
991
993
  className: "gmp-navigator-action",
992
994
  onClick: () => D(C.id),
993
- children: [/* @__PURE__ */ U(G, { "aria-hidden": "true" }), _.has(C.id) ? "hide children" : "show children"]
995
+ children: [/* @__PURE__ */ H(W, { "aria-hidden": "true" }), _.has(C.id) ? "hide children" : "show children"]
994
996
  }) : null,
995
- /* @__PURE__ */ W("button", {
997
+ /* @__PURE__ */ U("button", {
996
998
  type: "button",
997
999
  className: "gmp-navigator-action gmp-navigator-action--primary",
998
1000
  onClick: () => {
@@ -1001,9 +1003,9 @@ function tn({ payload: e, grain: t = "package", expandedIds: n, onExpandedIdsCha
1001
1003
  id: C.id
1002
1004
  }), u?.(C.id);
1003
1005
  },
1004
- children: [/* @__PURE__ */ U(ze, { "aria-hidden": "true" }), " open in map"]
1006
+ children: [/* @__PURE__ */ H(He, { "aria-hidden": "true" }), " open in map"]
1005
1007
  })
1006
- ] }) : /* @__PURE__ */ U("p", {
1008
+ ] }) : /* @__PURE__ */ H("p", {
1007
1009
  className: "gmp-navigator-empty",
1008
1010
  children: "select an area to see its recorded work and map context"
1009
1011
  })
@@ -1012,13 +1014,13 @@ function tn({ payload: e, grain: t = "package", expandedIds: n, onExpandedIdsCha
1012
1014
  ]
1013
1015
  });
1014
1016
  }
1015
- function nn({ row: e, hasChildren: t, isExpanded: n, selected: r, tabbable: i, setRef: a, onFocus: o, onSelect: s, onToggle: c, onKeyDown: l }) {
1016
- return /* @__PURE__ */ W("div", {
1017
+ function on({ row: e, hasChildren: t, isExpanded: n, selected: r, tabbable: i, setRef: a, onFocus: o, onSelect: s, onToggle: c, onKeyDown: l }) {
1018
+ return /* @__PURE__ */ U("div", {
1017
1019
  role: "none",
1018
1020
  className: "gmp-navigator-row-wrap",
1019
1021
  "data-selected": r,
1020
1022
  style: { "--gmp-tree-depth": e.depth },
1021
- children: [t ? /* @__PURE__ */ U("button", {
1023
+ children: [t ? /* @__PURE__ */ H("button", {
1022
1024
  type: "button",
1023
1025
  className: "gmp-navigator-disclosure",
1024
1026
  tabIndex: -1,
@@ -1030,14 +1032,14 @@ function nn({ row: e, hasChildren: t, isExpanded: n, selected: r, tabbable: i, s
1030
1032
  onClick: (t) => {
1031
1033
  t.stopPropagation(), e.forcedOpen || c();
1032
1034
  },
1033
- children: /* @__PURE__ */ U(G, {
1035
+ children: /* @__PURE__ */ H(W, {
1034
1036
  className: "gmp-navigator-chevron",
1035
1037
  "aria-hidden": "true"
1036
1038
  })
1037
- }) : /* @__PURE__ */ U("span", {
1039
+ }) : /* @__PURE__ */ H("span", {
1038
1040
  className: "gmp-navigator-disclosure-placeholder",
1039
1041
  "aria-hidden": "true"
1040
- }), /* @__PURE__ */ W("div", {
1042
+ }), /* @__PURE__ */ U("div", {
1041
1043
  ref: a,
1042
1044
  role: "treeitem",
1043
1045
  "aria-level": e.depth + 1,
@@ -1052,50 +1054,50 @@ function nn({ row: e, hasChildren: t, isExpanded: n, selected: r, tabbable: i, s
1052
1054
  },
1053
1055
  onKeyDown: l,
1054
1056
  children: [
1055
- e.node.kind === "file" ? /* @__PURE__ */ U(Ne, { "aria-hidden": "true" }) : /* @__PURE__ */ U(Ie, { "aria-hidden": "true" }),
1056
- /* @__PURE__ */ U("span", {
1057
+ e.node.kind === "file" ? /* @__PURE__ */ H(Ie, { "aria-hidden": "true" }) : /* @__PURE__ */ H(ze, { "aria-hidden": "true" }),
1058
+ /* @__PURE__ */ H("span", {
1057
1059
  className: "gmp-navigator-path",
1058
1060
  children: e.node.name || e.node.id
1059
1061
  }),
1060
- /* @__PURE__ */ W("span", {
1062
+ /* @__PURE__ */ U("span", {
1061
1063
  className: "gmp-navigator-meta",
1062
- children: [/* @__PURE__ */ W("span", { children: [an(e.node.loc ?? 0), " lines"] }), /* @__PURE__ */ U("span", { children: on(e.node.recordedFiles, e.node.totalFiles) })]
1064
+ children: [/* @__PURE__ */ U("span", { children: [cn(e.node.loc ?? 0), " lines"] }), /* @__PURE__ */ H("span", { children: ln(e.node.recordedFiles, e.node.totalFiles) })]
1063
1065
  })
1064
1066
  ]
1065
1067
  })]
1066
1068
  });
1067
1069
  }
1068
- function rn(e) {
1070
+ function sn(e) {
1069
1071
  return Array.from(e).sort().join("\0");
1070
1072
  }
1071
- function an(e) {
1072
- return oe(Number(e) || 0);
1073
+ function cn(e) {
1074
+ return Oe(Number(e) || 0);
1073
1075
  }
1074
- function on(e, t) {
1076
+ function ln(e, t) {
1075
1077
  let n = Number(t) || 0;
1076
1078
  return n <= 0 ? "no coverage data" : `${Math.round((Number(e) || 0) / n * 100)}% recorded`;
1077
1079
  }
1078
1080
  //#endregion
1079
1081
  //#region src/ui/graph/CodeMapComposition.jsx
1080
- function sn({ payload: e, zoom: t, onZoomChange: n, selectedId: r, onSelect: i, onExpand: a, highlightedIds: o, nodeDeltas: s, structureEdgeDeltas: c, height: l = 480, ariaLabel: u = "code map", canvasSlot: d, rail: f, toolbar: p, sheetTitle: m = "code area", sheetMeta: h, railSide: g = "right", legend: _, canvasWrapperClassName: v = "", canvasWrapperStyle: y, className: b = "", presentation: x = "canvas", navigatorSlot: S, onPresentationChange: C, viewport: w, onViewportChange: T, state: E, defaultState: D, onStateChange: O }) {
1081
- let k = E !== void 0 || D !== void 0, [A, j] = H(() => N(D)), M = B(() => k ? N(E ?? A) : null, [
1082
+ function un({ payload: e, zoom: t, onZoomChange: n, selectedId: r, onSelect: i, onExpand: a, highlightedIds: o, nodeDeltas: s, structureEdgeDeltas: c, height: l = 480, ariaLabel: u = "code map", canvasSlot: d, rail: f, toolbar: p, sheetTitle: m = "code area", sheetMeta: h, railSide: g = "right", legend: _, canvasWrapperClassName: v = "", canvasWrapperStyle: y, className: b = "", presentation: x = "canvas", navigatorSlot: S, onPresentationChange: C, viewport: w, onViewportChange: T, state: E, defaultState: D, onStateChange: O }) {
1083
+ let k = E !== void 0 || D !== void 0, [j, M] = V(() => A(D)), N = z(() => k ? A(E ?? j) : null, [
1082
1084
  k,
1083
1085
  E,
1084
- A
1085
- ]), P = M?.presentation ?? x;
1086
+ j
1087
+ ]), P = N?.presentation ?? x;
1086
1088
  function F(e, t) {
1087
- E === void 0 && j(e), O?.(e), t?.(e);
1089
+ E === void 0 && M(e), O?.(e), t?.(e);
1088
1090
  }
1089
1091
  function I(e, t) {
1090
- if (!M) return;
1091
- let n = xe(M, e);
1092
- Ce(M, n) || F(n, t);
1092
+ if (!N) return;
1093
+ let n = be(N, e);
1094
+ Ce(N, n) || F(n, t);
1093
1095
  }
1094
- let ee = k || C ? /* @__PURE__ */ W(De, { children: [/* @__PURE__ */ W("div", {
1096
+ let ee = k || C ? /* @__PURE__ */ U(Ae, { children: [/* @__PURE__ */ U("div", {
1095
1097
  className: "gmp-presentation-switch",
1096
1098
  role: "group",
1097
1099
  "aria-label": "code map view",
1098
- children: [/* @__PURE__ */ U("button", {
1100
+ children: [/* @__PURE__ */ H("button", {
1099
1101
  type: "button",
1100
1102
  "aria-pressed": P === "navigator",
1101
1103
  onClick: () => k ? I({
@@ -1103,7 +1105,7 @@ function sn({ payload: e, zoom: t, onZoomChange: n, selectedId: r, onSelect: i,
1103
1105
  presentation: "navigator"
1104
1106
  }, () => C?.("navigator")) : C?.("navigator"),
1105
1107
  children: P === "canvas" ? "back to browse" : "browse"
1106
- }), /* @__PURE__ */ U("button", {
1108
+ }), /* @__PURE__ */ H("button", {
1107
1109
  type: "button",
1108
1110
  "aria-pressed": P === "canvas",
1109
1111
  onClick: () => k ? I({
@@ -1112,14 +1114,14 @@ function sn({ payload: e, zoom: t, onZoomChange: n, selectedId: r, onSelect: i,
1112
1114
  }, () => C?.("canvas")) : C?.("canvas"),
1113
1115
  children: "spatial map"
1114
1116
  })]
1115
- }), p] }) : p, te = d ?? /* @__PURE__ */ U(Xt, {
1117
+ }), p] }) : p, te = d ?? /* @__PURE__ */ H($t, {
1116
1118
  payload: e,
1117
- zoom: M ? {
1118
- level: M.grain,
1119
- expanded: M.expandedIds
1119
+ zoom: N ? {
1120
+ level: N.grain,
1121
+ expanded: N.expandedIds
1120
1122
  } : t,
1121
1123
  onZoomChange: n,
1122
- selectedId: M ? M.selectedId : r,
1124
+ selectedId: N ? N.selectedId : r,
1123
1125
  onSelect: i,
1124
1126
  onExpand: a,
1125
1127
  highlightedIds: o,
@@ -1127,76 +1129,76 @@ function sn({ payload: e, zoom: t, onZoomChange: n, selectedId: r, onSelect: i,
1127
1129
  structureEdgeDeltas: c,
1128
1130
  height: l,
1129
1131
  ariaLabel: u,
1130
- viewport: M ? M.viewport ?? void 0 : w,
1132
+ viewport: N ? N.viewport ?? void 0 : w,
1131
1133
  onViewportChange: T,
1132
- state: M ?? void 0,
1133
- onStateChange: M ? (e) => F(e) : void 0
1134
- }), L = S ?? (M && e ? /* @__PURE__ */ U(tn, {
1134
+ state: N ?? void 0,
1135
+ onStateChange: N ? (e) => F(e) : void 0
1136
+ }), ne = S ?? (N && e ? /* @__PURE__ */ H(an, {
1135
1137
  payload: e,
1136
- grain: M.grain,
1137
- expandedIds: M.expandedIds,
1138
- selectedId: M.selectedId,
1139
- focusedId: M.navigatorFocusedId,
1140
- filter: M.navigatorFilter,
1138
+ grain: N.grain,
1139
+ expandedIds: N.expandedIds,
1140
+ selectedId: N.selectedId,
1141
+ focusedId: N.navigatorFocusedId,
1142
+ filter: N.navigatorFilter,
1141
1143
  onStateAction: (t) => I(t, () => {
1142
1144
  t.type === "select" ? i?.(t.id, e.nodes.find((e) => e.id === t.id) ?? null) : t.type === "clear-selection" ? i?.(null, null) : t.type === "set-expanded" ? n?.({
1143
- level: M.grain,
1145
+ level: N.grain,
1144
1146
  expanded: Array.from(t.ids)
1145
1147
  }) : t.type === "open-in-map" && (i?.(t.id, e.nodes.find((e) => e.id === t.id) ?? null), C?.("canvas"));
1146
1148
  }),
1147
1149
  ariaLabel: `browse ${u}`
1148
- }) : null), ne = P === "navigator" && L !== null;
1149
- return /* @__PURE__ */ U("div", {
1150
+ }) : null), re = P === "navigator" && ne !== null;
1151
+ return /* @__PURE__ */ H("div", {
1150
1152
  className: ["gmp-root", b].filter(Boolean).join(" "),
1151
- children: /* @__PURE__ */ W(se, {
1153
+ children: /* @__PURE__ */ U(oe, {
1152
1154
  toolbar: ee,
1153
1155
  rail: f,
1154
1156
  sheetTitle: m,
1155
1157
  sheetMeta: h,
1156
1158
  railSide: g,
1157
- children: [/* @__PURE__ */ U("div", {
1159
+ children: [/* @__PURE__ */ H("div", {
1158
1160
  className: ["gmp-map-canvas-region", v].filter(Boolean).join(" "),
1159
1161
  style: y,
1160
1162
  "data-testid": "gmp-map-canvas-region",
1161
- children: ne ? L : te
1162
- }), !ne && _ !== !1 && (_ ?? /* @__PURE__ */ U(cn, {}))]
1163
+ children: re ? ne : te
1164
+ }), !re && _ !== !1 && (_ ?? /* @__PURE__ */ H(dn, {}))]
1163
1165
  })
1164
1166
  });
1165
1167
  }
1166
- function cn() {
1167
- return /* @__PURE__ */ W("p", {
1168
+ function dn() {
1169
+ return /* @__PURE__ */ U("p", {
1168
1170
  className: "gmp-map-legend",
1169
1171
  children: [
1170
- /* @__PURE__ */ W("span", {
1172
+ /* @__PURE__ */ U("span", {
1171
1173
  className: "gmp-legend-item",
1172
- children: [/* @__PURE__ */ U("span", {
1174
+ children: [/* @__PURE__ */ H("span", {
1173
1175
  className: "gmp-map-swatch",
1174
1176
  "aria-hidden": "true"
1175
1177
  }), " code area (folder or file)"]
1176
1178
  }),
1177
- /* @__PURE__ */ W("span", {
1179
+ /* @__PURE__ */ U("span", {
1178
1180
  className: "gmp-legend-item gmp-legend-dim",
1179
- children: [/* @__PURE__ */ U("span", {
1181
+ children: [/* @__PURE__ */ H("span", {
1180
1182
  className: "gmp-map-swatch gmp-map-swatch--empty",
1181
1183
  "aria-hidden": "true"
1182
1184
  }), " no saved conversation behind it"]
1183
1185
  }),
1184
- /* @__PURE__ */ U("span", {
1186
+ /* @__PURE__ */ H("span", {
1185
1187
  className: "gmp-legend-item gmp-legend-dim",
1186
1188
  children: "brighter = more of it built with AI on record"
1187
1189
  }),
1188
- /* @__PURE__ */ W("span", {
1190
+ /* @__PURE__ */ U("span", {
1189
1191
  className: "gmp-legend-item gmp-legend-dim",
1190
- children: [/* @__PURE__ */ U("span", {
1192
+ children: [/* @__PURE__ */ H("span", {
1191
1193
  className: "gmp-map-swatch gmp-map-swatch--edge",
1192
1194
  "aria-hidden": "true"
1193
1195
  }), " one area uses another"]
1194
1196
  }),
1195
- /* @__PURE__ */ U("span", {
1197
+ /* @__PURE__ */ H("span", {
1196
1198
  className: "gmp-legend-item gmp-map-legend-danger",
1197
1199
  children: "⚠ tangle — two areas that depend on each other"
1198
1200
  }),
1199
- /* @__PURE__ */ U("span", {
1201
+ /* @__PURE__ */ H("span", {
1200
1202
  className: "gmp-legend-item gmp-legend-dim",
1201
1203
  children: "double-click a folder to open its files"
1202
1204
  })
@@ -1205,26 +1207,26 @@ function cn() {
1205
1207
  }
1206
1208
  //#endregion
1207
1209
  //#region src/ui/graph/timelineNavigation.js
1208
- function Y(e) {
1210
+ function J(e) {
1209
1211
  return typeof e == "object" && !!e && !Array.isArray(e);
1210
1212
  }
1211
- function X(e, t) {
1213
+ function Y(e, t) {
1212
1214
  let n = Object.keys(e).sort();
1213
1215
  return n.length === t.length && t.slice().sort().every((e, t) => e === n[t]);
1214
1216
  }
1215
- function ln(e) {
1217
+ function X(e) {
1216
1218
  return typeof e == "string" && e.length > 0;
1217
1219
  }
1218
- function un(e) {
1219
- return e === null || ln(e);
1220
+ function fn(e) {
1221
+ return e === null || X(e);
1220
1222
  }
1221
- function dn(e) {
1223
+ function pn(e) {
1222
1224
  let t = !1;
1223
- if (Y(e) && typeof e.type == "string" && (e.type === "open-change" && X(e, ["type", "change"]) && Y(e.change) ? t = X(e.change, ["id", "branch"]) && ln(e.change.id) && un(e.change.branch) : e.type === "open-session" && X(e, [
1225
+ if (J(e) && typeof e.type == "string" && (e.type === "open-change" && Y(e, ["type", "change"]) && J(e.change) ? t = Y(e.change, ["id", "branch"]) && X(e.change.id) && fn(e.change.branch) : e.type === "open-session" && Y(e, [
1224
1226
  "type",
1225
1227
  "sessionId",
1226
1228
  "source"
1227
- ]) && ln(e.sessionId) && Y(e.source) ? e.source.kind === "commit" && X(e.source, ["kind", "commit"]) && Y(e.source.commit) ? t = X(e.source.commit, ["id", "branch"]) && ln(e.source.commit.id) && un(e.source.commit.branch) : (e.source.kind === "unlinked" || e.source.kind === "outside-window") && X(e.source, ["kind"]) && (t = !0) : (e.type === "open-map" || e.type === "show-older") && X(e, ["type"]) && (t = !0)), !t) throw TypeError([
1229
+ ]) && X(e.sessionId) && J(e.source) ? e.source.kind === "commit" && Y(e.source, ["kind", "commit"]) && J(e.source.commit) ? t = Y(e.source.commit, ["id", "branch"]) && X(e.source.commit.id) && fn(e.source.commit.branch) : (e.source.kind === "unlinked" || e.source.kind === "outside-window") && Y(e.source, ["kind"]) && (t = !0) : (e.type === "open-map" || e.type === "show-older") && Y(e, ["type"]) && (t = !0)), !t) throw TypeError([
1228
1230
  "Timeline navigation action rejected.",
1229
1231
  "What went wrong: the value is not an exact supported TimelineNavigationAction.",
1230
1232
  "Why it happened: an untyped caller supplied an unknown action, missing context, or extra fields.",
@@ -1236,37 +1238,37 @@ function dn(e) {
1236
1238
  }
1237
1239
  //#endregion
1238
1240
  //#region src/ui/graph/ScentTag.jsx
1239
- function fn({ tag: e, hoverText: t, active: n = !1, onToggle: r, className: i = "", ...o }) {
1240
- if (!m.includes(e)) throw Error(`ScentTag render failed: what went wrong: unknown scent tag ${JSON.stringify(e)}; why: the value is not a member of the closed SCENT_TAGS set; where: src/ui/graph/ScentTag.jsx; when: rendering a ranked-list row; what it means: an upstream ranking derivation produced a value outside the frozen vocabulary; how to fix: only pass one of ${m.join(", ")}.`);
1241
+ function mn({ tag: e, hoverText: t, active: n = !1, onToggle: r, className: i = "", ...a }) {
1242
+ if (!p.includes(e)) throw Error(`ScentTag render failed: what went wrong: unknown scent tag ${JSON.stringify(e)}; why: the value is not a member of the closed SCENT_TAGS set; where: src/ui/graph/ScentTag.jsx; when: rendering a ranked-list row; what it means: an upstream ranking derivation produced a value outside the frozen vocabulary; how to fix: only pass one of ${p.join(", ")}.`);
1241
1243
  if (!r) {
1242
- let n = /* @__PURE__ */ U("span", {
1244
+ let n = /* @__PURE__ */ H("span", {
1243
1245
  className: `tlp-scent${i ? ` ${i}` : ""}`,
1244
1246
  tabIndex: t ? 0 : void 0,
1245
- ...o,
1247
+ ...a,
1246
1248
  children: e
1247
1249
  });
1248
- return t ? /* @__PURE__ */ U(a, {
1250
+ return t ? /* @__PURE__ */ H(xe, {
1249
1251
  content: t,
1250
1252
  children: n
1251
1253
  }) : n;
1252
1254
  }
1253
- let s = /* @__PURE__ */ U("button", {
1255
+ let o = /* @__PURE__ */ H("button", {
1254
1256
  type: "button",
1255
1257
  className: `tlp-scent tlp-scent-filter${n ? " tlp-scent-filter-active" : ""}${i ? ` ${i}` : ""}`,
1256
1258
  "aria-pressed": n,
1257
1259
  onClick: () => r(n ? null : e),
1258
- ...o,
1260
+ ...a,
1259
1261
  children: e
1260
1262
  });
1261
- return t ? /* @__PURE__ */ U(a, {
1263
+ return t ? /* @__PURE__ */ H(xe, {
1262
1264
  content: t,
1263
- children: s
1264
- }) : s;
1265
+ children: o
1266
+ }) : o;
1265
1267
  }
1266
1268
  //#endregion
1267
1269
  //#region src/ui/graph/RankedRow.jsx
1268
- function pn({ row: e, loc: t = 0, selected: n = !1, onSelect: r, className: i = "", ...a }) {
1269
- return /* @__PURE__ */ W("button", {
1270
+ function hn({ row: e, loc: t = 0, selected: n = !1, onSelect: r, className: i = "", ...a }) {
1271
+ return /* @__PURE__ */ U("button", {
1270
1272
  type: "button",
1271
1273
  className: [
1272
1274
  "tlp-ranked-row",
@@ -1277,35 +1279,35 @@ function pn({ row: e, loc: t = 0, selected: n = !1, onSelect: r, className: i =
1277
1279
  onClick: () => r?.(e.id),
1278
1280
  ...a,
1279
1281
  children: [
1280
- /* @__PURE__ */ U(A, {
1282
+ /* @__PURE__ */ H(I, {
1281
1283
  className: "tlp-ranked-doi-scope",
1282
- children: /* @__PURE__ */ U(we, {
1284
+ children: /* @__PURE__ */ H(ye, {
1283
1285
  label: e.name,
1284
1286
  loc: t,
1285
- recorded: Number(e.doi.toFixed(2)),
1287
+ recorded: Math.round(e.doi * 100) / 100,
1286
1288
  total: 1,
1287
1289
  selected: n,
1288
1290
  as: "span",
1289
1291
  className: "tlp-ranked-doi"
1290
1292
  })
1291
1293
  }),
1292
- /* @__PURE__ */ U("span", {
1294
+ /* @__PURE__ */ H("span", {
1293
1295
  className: "tlp-ranked-name",
1294
1296
  title: e.name,
1295
1297
  children: e.name
1296
1298
  }),
1297
- /* @__PURE__ */ U("span", {
1299
+ /* @__PURE__ */ H("span", {
1298
1300
  className: "tlp-ranked-tags",
1299
1301
  "aria-label": "comprehension signals",
1300
- children: e.scentTags.map((t) => /* @__PURE__ */ U(fn, {
1302
+ children: e.scentTags.map((t) => /* @__PURE__ */ H(mn, {
1301
1303
  tag: t,
1302
1304
  hoverText: t.startsWith("agent wrote:") ? e.hoverText ?? void 0 : void 0
1303
1305
  }, t))
1304
1306
  }),
1305
- /* @__PURE__ */ U("span", {
1307
+ /* @__PURE__ */ H("span", {
1306
1308
  className: "tlp-ranked-doi-val tnum",
1307
1309
  "aria-hidden": "true",
1308
- children: e.doi.toFixed(2)
1310
+ children: Ee(e.doi, 2)
1309
1311
  })
1310
1312
  ]
1311
1313
  });
@@ -1317,8 +1319,8 @@ var Z = [
1317
1319
  "debt",
1318
1320
  "churn"
1319
1321
  ];
1320
- function mn({ rankMode: e, onChange: t, className: n = "", ...r }) {
1321
- let i = V([]), a = (e) => {
1322
+ function gn({ rankMode: e, onChange: t, className: n = "", ...r }) {
1323
+ let i = B([]), a = (e) => {
1322
1324
  let n = Z[e];
1323
1325
  n && (t(n), i.current[e]?.focus());
1324
1326
  }, o = (e, t) => {
@@ -1342,12 +1344,12 @@ function mn({ rankMode: e, onChange: t, className: n = "", ...r }) {
1342
1344
  }
1343
1345
  e.preventDefault(), a(n);
1344
1346
  };
1345
- return /* @__PURE__ */ U("span", {
1347
+ return /* @__PURE__ */ H("span", {
1346
1348
  className: `tlp-rank-mode${n ? ` ${n}` : ""}`,
1347
1349
  role: "radiogroup",
1348
1350
  "aria-label": "rank mode",
1349
1351
  ...r,
1350
- children: Z.map((n, r) => /* @__PURE__ */ U("button", {
1352
+ children: Z.map((n, r) => /* @__PURE__ */ H("button", {
1351
1353
  type: "button",
1352
1354
  role: "radio",
1353
1355
  "aria-checked": e === n,
@@ -1364,8 +1366,8 @@ function mn({ rankMode: e, onChange: t, className: n = "", ...r }) {
1364
1366
  }
1365
1367
  //#endregion
1366
1368
  //#region src/ui/graph/InsightPanel.jsx
1367
- function hn({ insights: e, onOpenEvidence: t, className: n = "", ...r }) {
1368
- if (f(e), e.length === 0) return /* @__PURE__ */ U("p", {
1369
+ function _n({ insights: e, onOpenEvidence: t, className: n = "", ...r }) {
1370
+ if (d(e), e.length === 0) return /* @__PURE__ */ H("p", {
1369
1371
  className: `tlp-insight-empty${n ? ` ${n}` : ""}`,
1370
1372
  ...r,
1371
1373
  children: "no insights recorded for this node yet."
@@ -1375,35 +1377,35 @@ function hn({ insights: e, onOpenEvidence: t, className: n = "", ...r }) {
1375
1377
  let e = i.get(t.kind) ?? [];
1376
1378
  e.push(t), i.set(t.kind, e);
1377
1379
  }
1378
- return /* @__PURE__ */ U("div", {
1380
+ return /* @__PURE__ */ H("div", {
1379
1381
  className: `tlp-insight-panel${n ? ` ${n}` : ""}`,
1380
1382
  ...r,
1381
- children: [...i.entries()].map(([e, n]) => /* @__PURE__ */ W("section", {
1383
+ children: [...i.entries()].map(([e, n]) => /* @__PURE__ */ U("section", {
1382
1384
  className: "tlp-insight-group",
1383
- "aria-label": T[e],
1384
- children: [/* @__PURE__ */ U("p", {
1385
+ "aria-label": C[e],
1386
+ children: [/* @__PURE__ */ H("p", {
1385
1387
  className: "tlp-insight-group-title",
1386
- children: T[e]
1387
- }), /* @__PURE__ */ U("ul", {
1388
+ children: C[e]
1389
+ }), /* @__PURE__ */ H("ul", {
1388
1390
  className: "tlp-insight-list",
1389
- children: n.map((e, n) => /* @__PURE__ */ W("li", {
1391
+ children: n.map((e, n) => /* @__PURE__ */ U("li", {
1390
1392
  className: "tlp-insight-item",
1391
1393
  children: [
1392
- /* @__PURE__ */ U("span", {
1393
- className: `tlp-insight-provenance ${c[e.provenance].markerClass}`,
1394
+ /* @__PURE__ */ H("span", {
1395
+ className: `tlp-insight-provenance ${s[e.provenance].markerClass}`,
1394
1396
  "aria-hidden": "true"
1395
1397
  }),
1396
- /* @__PURE__ */ U("span", {
1398
+ /* @__PURE__ */ H("span", {
1397
1399
  className: "tlp-insight-title",
1398
1400
  children: e.title
1399
1401
  }),
1400
- e.summary && /* @__PURE__ */ U("span", {
1402
+ e.summary && /* @__PURE__ */ H("span", {
1401
1403
  className: "tlp-insight-summary",
1402
1404
  children: e.summary
1403
1405
  }),
1404
- /* @__PURE__ */ U("span", {
1406
+ /* @__PURE__ */ H("span", {
1405
1407
  className: "tlp-insight-evidence",
1406
- children: e.evidence.map((e, n) => /* @__PURE__ */ U("button", {
1408
+ children: e.evidence.map((e, n) => /* @__PURE__ */ H("button", {
1407
1409
  type: "button",
1408
1410
  className: "tlp-insight-evidence-link",
1409
1411
  onClick: () => t?.(e.sessionId),
@@ -1436,7 +1438,7 @@ var Q = Object.freeze({
1436
1438
  subagentSpawnColor: "var(--edge)",
1437
1439
  subagentReturnColor: "var(--edge)",
1438
1440
  errorColor: "var(--edge-error)"
1439
- }), gn = {
1441
+ }), vn = {
1440
1442
  planning: "var(--edge)",
1441
1443
  exploration: "var(--edge)",
1442
1444
  implementation: "var(--edge)",
@@ -1448,7 +1450,7 @@ var Q = Object.freeze({
1448
1450
  recovery: "var(--edge)",
1449
1451
  abandonment: "var(--edge)"
1450
1452
  };
1451
- function _n(e) {
1453
+ function yn(e) {
1452
1454
  let t = /* @__PURE__ */ new Map();
1453
1455
  for (let n of e) {
1454
1456
  let e = t.get(n.turnIndex) ?? [];
@@ -1456,13 +1458,13 @@ function _n(e) {
1456
1458
  }
1457
1459
  return t;
1458
1460
  }
1459
- function vn(e) {
1461
+ function bn(e) {
1460
1462
  let t = /* @__PURE__ */ new Map();
1461
1463
  for (let n of e) for (let e = n.startTurn; e <= n.endTurn; e++) t.set(e, n.type);
1462
1464
  return t;
1463
1465
  }
1464
- function yn({ turns: e, toolVMsByTurn: t, phases: n, annotations: r, searchMatches: i, filteredIndices: a, searchQuery: o, selectedTurns: s }) {
1465
- let c = _n(r), l = vn(n), u = new Set(i), d = [], f = [], p = 0, m = 0, h = null, g, _ = 0, v = !1;
1466
+ function xn({ turns: e, toolVMsByTurn: t, phases: n, annotations: r, searchMatches: i, filteredIndices: a, searchQuery: o, selectedTurns: s }) {
1467
+ let c = yn(r), l = bn(n), u = new Set(i), d = [], f = [], p = 0, m = 0, h = null, g, _ = 0, v = !1;
1466
1468
  for (let n = 0; n < e.length; n++) {
1467
1469
  let r = e[n], i = !!r.content?.trim(), y = (r.toolCalls?.length ?? 0) > 0;
1468
1470
  if (!i && !y || r.role === "system" && !y && (!r.content || r.content.trim().length < 8)) continue;
@@ -1529,7 +1531,7 @@ function yn({ turns: e, toolVMsByTurn: t, phases: n, annotations: r, searchMatch
1529
1531
  }
1530
1532
  if (h) {
1531
1533
  let e = x !== g && x !== void 0, t = b !== _, n = "sequential", r = $.sequentialColor, i = $.sequentialWidth, a;
1532
- t && b > _ ? (n = "spawn", r = $.subagentSpawnColor, i = 2, a = "6 4") : t && b < _ ? (n = "return", r = $.subagentReturnColor, i = 1.5, a = "2 3") : e && x && (n = "phase-transition", r = gn[x] ?? $.sequentialColor, i = $.phaseTransitionWidth), S.some((e) => e.type === "error") && (n = "error", r = $.errorColor, i = 2);
1534
+ t && b > _ ? (n = "spawn", r = $.subagentSpawnColor, i = 2, a = "6 4") : t && b < _ ? (n = "return", r = $.subagentReturnColor, i = 1.5, a = "2 3") : e && x && (n = "phase-transition", r = vn[x] ?? $.sequentialColor, i = $.phaseTransitionWidth), S.some((e) => e.type === "error") && (n = "error", r = $.errorColor, i = 2);
1533
1535
  let o = w || v;
1534
1536
  f.push({
1535
1537
  id: `e-${h}-${D}`,
@@ -1545,7 +1547,7 @@ function yn({ turns: e, toolVMsByTurn: t, phases: n, annotations: r, searchMatch
1545
1547
  },
1546
1548
  data: {
1547
1549
  edgeType: n,
1548
- phaseColor: x ? gn[x] : void 0
1550
+ phaseColor: x ? vn[x] : void 0
1549
1551
  }
1550
1552
  });
1551
1553
  }
@@ -1556,7 +1558,7 @@ function yn({ turns: e, toolVMsByTurn: t, phases: n, annotations: r, searchMatch
1556
1558
  edges: f
1557
1559
  };
1558
1560
  }
1559
- function bn(e) {
1561
+ function Sn(e) {
1560
1562
  let t = /* @__PURE__ */ new Map();
1561
1563
  for (let n of e) {
1562
1564
  if (n.type !== "turn") continue;
@@ -1588,10 +1590,10 @@ function bn(e) {
1588
1590
  }
1589
1591
  //#endregion
1590
1592
  //#region src/ui/transcript/graph/engine/useCanvasSync.js
1591
- function xn(e, t, n) {
1592
- let r = Mt();
1593
+ function Cn(e, t, n) {
1594
+ let r = Ft();
1593
1595
  return {
1594
- focusPhase: R((i) => {
1596
+ focusPhase: L((i) => {
1595
1597
  let a = e[i];
1596
1598
  if (!a) return;
1597
1599
  let o = /* @__PURE__ */ new Set();
@@ -1619,7 +1621,7 @@ function xn(e, t, n) {
1619
1621
  r,
1620
1622
  n
1621
1623
  ]),
1622
- focusTurn: R((e) => {
1624
+ focusTurn: L((e) => {
1623
1625
  let n = t[e]?.index ?? e, i = r.getNodes().find((e) => e.type === "turn" && e.data.turn.index === n);
1624
1626
  i && r.setCenter(i.position.x + Q.turnWidth / 2, i.position.y + Q.turnBaseHeight / 2, {
1625
1627
  zoom: 1,
@@ -1630,28 +1632,28 @@ function xn(e, t, n) {
1630
1632
  }
1631
1633
  //#endregion
1632
1634
  //#region src/ui/transcript/graph/engine/nodes/TurnCardNode.jsx
1633
- function Sn(e, t) {
1635
+ function wn(e, t) {
1634
1636
  if (!e) return "";
1635
1637
  let n = e.replace(/\s+/g, " ").trim();
1636
1638
  return n.length > t ? `${n.slice(0, t - 1)}…` : n;
1637
1639
  }
1638
- function Cn({ data: e, selected: t }) {
1640
+ function Tn({ data: e, selected: t }) {
1639
1641
  let { turn: n, annotations: r, isSearchMatch: i, isFilteredOut: a, isSelected: o, turnNumber: s, provider: c } = e, l = n.depth ?? 0, u = n.role === "assistant" && l > 0, d = r.some((e) => e.type === "error"), f = r.some((e) => e.type === "retry"), p = r.some((e) => e.type === "revert");
1640
- return /* @__PURE__ */ W("div", {
1642
+ return /* @__PURE__ */ U("div", {
1641
1643
  "data-turn-index": n.index,
1642
1644
  "data-harness": u ? void 0 : n.role === "assistant" ? c : void 0,
1643
1645
  style: { width: Q.turnWidth },
1644
1646
  children: [
1645
- /* @__PURE__ */ U(K, {
1647
+ /* @__PURE__ */ H(G, {
1646
1648
  type: "target",
1647
- position: q.Top,
1649
+ position: K.Top,
1648
1650
  className: "tb-gnode-handle tb-gnode-handle-top"
1649
1651
  }),
1650
- /* @__PURE__ */ U(j, {
1652
+ /* @__PURE__ */ H(O, {
1651
1653
  role: n.role,
1652
1654
  agentName: u ? n.agentName : void 0,
1653
1655
  turnNumber: s,
1654
- contentPreview: Sn(n.content, 160),
1656
+ contentPreview: wn(n.content, 160),
1655
1657
  toolCount: n.toolCalls?.length ?? 0,
1656
1658
  totalTokens: (n.tokensIn ?? 0) + (n.tokensOut ?? 0),
1657
1659
  tokensIn: n.tokensIn ?? void 0,
@@ -1664,24 +1666,24 @@ function Cn({ data: e, selected: t }) {
1664
1666
  isSelected: t || o,
1665
1667
  provider: c
1666
1668
  }),
1667
- /* @__PURE__ */ U(K, {
1669
+ /* @__PURE__ */ H(G, {
1668
1670
  type: "source",
1669
- position: q.Bottom,
1671
+ position: K.Bottom,
1670
1672
  className: "tb-gnode-handle tb-gnode-handle-bottom"
1671
1673
  }),
1672
- /* @__PURE__ */ U(K, {
1674
+ /* @__PURE__ */ H(G, {
1673
1675
  type: "source",
1674
1676
  id: "tool-source",
1675
- position: q.Right,
1677
+ position: K.Right,
1676
1678
  className: "tb-gnode-handle tb-gnode-handle-right"
1677
1679
  })
1678
1680
  ]
1679
1681
  });
1680
1682
  }
1681
- var wn = Ee(Cn);
1683
+ var En = ke(Tn);
1682
1684
  //#endregion
1683
1685
  //#region src/ui/transcript/graph/engine/nodes/ToolPillNode.jsx
1684
- function Tn({ data: e }) {
1686
+ function Dn({ data: e }) {
1685
1687
  let { toolCalls: t, previewById: n, totalDurationMs: r, hasError: i, isFilteredOut: a } = e, o = t.map((e) => ({
1686
1688
  id: e.id,
1687
1689
  name: e.name,
@@ -1691,14 +1693,14 @@ function Tn({ data: e }) {
1691
1693
  exitCode: e.exitCode ?? void 0,
1692
1694
  preview: n[e.id] ?? ""
1693
1695
  }));
1694
- return /* @__PURE__ */ W("div", {
1696
+ return /* @__PURE__ */ U("div", {
1695
1697
  style: { width: Q.toolCallWidth },
1696
- children: [/* @__PURE__ */ U(K, {
1698
+ children: [/* @__PURE__ */ H(G, {
1697
1699
  type: "target",
1698
1700
  id: "tool-target",
1699
- position: q.Left,
1701
+ position: K.Left,
1700
1702
  className: "tb-gnode-handle tb-gnode-handle-left"
1701
- }), /* @__PURE__ */ U(L, {
1703
+ }), /* @__PURE__ */ H(ee, {
1702
1704
  tools: o,
1703
1705
  totalDurationMs: r,
1704
1706
  hasError: i,
@@ -1706,59 +1708,59 @@ function Tn({ data: e }) {
1706
1708
  })]
1707
1709
  });
1708
1710
  }
1709
- var En = Ee(Tn);
1711
+ var On = ke(Dn);
1710
1712
  //#endregion
1711
1713
  //#region src/ui/transcript/graph/engine/nodes/SubagentBranchNode.jsx
1712
- function Dn({ data: e }) {
1714
+ function kn({ data: e }) {
1713
1715
  let { agentName: t, depth: n } = e;
1714
- return /* @__PURE__ */ U(me, {
1716
+ return /* @__PURE__ */ H(fe, {
1715
1717
  agentName: t,
1716
1718
  depth: n
1717
1719
  });
1718
1720
  }
1719
- var On = Ee(Dn);
1721
+ var An = ke(kn);
1720
1722
  //#endregion
1721
1723
  //#region src/ui/transcript/graph/engine/GraphControls.jsx
1722
- function kn({ className: e = "" }) {
1723
- let t = Mt();
1724
- return /* @__PURE__ */ W("div", {
1724
+ function jn({ className: e = "" }) {
1725
+ let t = Ft();
1726
+ return /* @__PURE__ */ U("div", {
1725
1727
  className: ["tb-graph-controls", e].filter(Boolean).join(" "),
1726
1728
  children: [
1727
- /* @__PURE__ */ U(An, {
1729
+ /* @__PURE__ */ H(Mn, {
1728
1730
  label: "zoom in",
1729
1731
  onClick: () => t.zoomIn({ duration: 150 }),
1730
- children: /* @__PURE__ */ U(Ue, {
1732
+ children: /* @__PURE__ */ H(Ke, {
1731
1733
  size: 14,
1732
1734
  strokeWidth: 2
1733
1735
  })
1734
1736
  }),
1735
- /* @__PURE__ */ U(An, {
1737
+ /* @__PURE__ */ H(Mn, {
1736
1738
  label: "zoom out",
1737
1739
  onClick: () => t.zoomOut({ duration: 150 }),
1738
- children: /* @__PURE__ */ U(He, {
1740
+ children: /* @__PURE__ */ H(Ge, {
1739
1741
  size: 14,
1740
1742
  strokeWidth: 2
1741
1743
  })
1742
1744
  }),
1743
- /* @__PURE__ */ U(An, {
1745
+ /* @__PURE__ */ H(Mn, {
1744
1746
  label: "fit view",
1745
1747
  onClick: () => t.fitView({
1746
1748
  padding: .1,
1747
1749
  duration: 250
1748
1750
  }),
1749
- children: /* @__PURE__ */ U(Be, {
1751
+ children: /* @__PURE__ */ H(Ue, {
1750
1752
  size: 14,
1751
1753
  strokeWidth: 1.75
1752
1754
  })
1753
1755
  }),
1754
- /* @__PURE__ */ U(An, {
1756
+ /* @__PURE__ */ H(Mn, {
1755
1757
  label: "reset",
1756
1758
  onClick: () => t.setViewport({
1757
1759
  x: 0,
1758
1760
  y: 0,
1759
1761
  zoom: 1
1760
1762
  }, { duration: 200 }),
1761
- children: /* @__PURE__ */ U(We, {
1763
+ children: /* @__PURE__ */ H(qe, {
1762
1764
  size: 14,
1763
1765
  strokeWidth: 1.75
1764
1766
  })
@@ -1766,8 +1768,8 @@ function kn({ className: e = "" }) {
1766
1768
  ]
1767
1769
  });
1768
1770
  }
1769
- function An({ label: e, onClick: t, children: n }) {
1770
- return /* @__PURE__ */ U("button", {
1771
+ function Mn({ label: e, onClick: t, children: n }) {
1772
+ return /* @__PURE__ */ H("button", {
1771
1773
  type: "button",
1772
1774
  onClick: t,
1773
1775
  "aria-label": e,
@@ -1778,9 +1780,9 @@ function An({ label: e, onClick: t, children: n }) {
1778
1780
  }
1779
1781
  //#endregion
1780
1782
  //#region src/ui/transcript/graph/engine/TrajectoryGraphLegend.jsx
1781
- function jn({ provider: e, className: t = "" }) {
1782
- let n = e && S(e).toLocaleLowerCase("en-US") || "agent";
1783
- return /* @__PURE__ */ U(le, {
1783
+ function Nn({ provider: e, className: t = "" }) {
1784
+ let n = e && Te(e).toLocaleLowerCase("en-US") || "agent";
1785
+ return /* @__PURE__ */ H(se, {
1784
1786
  className: ["tb-graph-legend", t].filter(Boolean).join(" "),
1785
1787
  items: [
1786
1788
  {
@@ -1809,21 +1811,21 @@ function jn({ provider: e, className: t = "" }) {
1809
1811
  }
1810
1812
  //#endregion
1811
1813
  //#region src/ui/transcript/graph/engine/TrajectoryGraph.jsx
1812
- var Mn = {
1813
- turn: wn,
1814
- toolCall: En,
1815
- subagentLane: On
1814
+ var Pn = {
1815
+ turn: En,
1816
+ toolCall: On,
1817
+ subagentLane: An
1816
1818
  };
1817
- function Nn(e) {
1818
- return /* @__PURE__ */ U(kt, { children: /* @__PURE__ */ U(Pn, { ...e }) });
1819
+ function Fn(e) {
1820
+ return /* @__PURE__ */ H(Mt, { children: /* @__PURE__ */ H(In, { ...e }) });
1819
1821
  }
1820
- function Pn({ turns: e, toolVMsByTurn: t, filteredTurns: n, phases: r, annotations: i, searchMatches: a, searchQuery: o, activeMatchIndex: s, focusTurn: c, focusPhase: l, onPhaseActivate: u, onViewportChange: d, selectedTurns: f, provider: p, className: m = "" }) {
1821
- let h = Mt(), { focusTurn: g, focusPhase: _ } = xn(r, e, u), v = B(() => {
1822
+ function In({ turns: e, toolVMsByTurn: t, filteredTurns: n, phases: r, annotations: i, searchMatches: a, searchQuery: o, activeMatchIndex: s, focusTurn: c, focusPhase: l, onPhaseActivate: u, onViewportChange: d, selectedTurns: f, provider: p, className: m = "" }) {
1823
+ let h = Ft(), { focusTurn: g, focusPhase: _ } = Cn(r, e, u), v = z(() => {
1822
1824
  if (n.length === e.length) return /* @__PURE__ */ new Set();
1823
1825
  let t = new Set(n), r = /* @__PURE__ */ new Set();
1824
1826
  for (let n = 0; n < e.length; n++) t.has(e[n]) && r.add(n);
1825
1827
  return r;
1826
- }, [e, n]), y = B(() => yn({
1828
+ }, [e, n]), y = z(() => xn({
1827
1829
  turns: e,
1828
1830
  toolVMsByTurn: t,
1829
1831
  phases: r,
@@ -1841,13 +1843,13 @@ function Pn({ turns: e, toolVMsByTurn: t, filteredTurns: n, phases: r, annotatio
1841
1843
  v,
1842
1844
  o,
1843
1845
  f
1844
- ]), b = B(() => y.nodes.map((e) => e.type === "turn" ? {
1846
+ ]), b = z(() => y.nodes.map((e) => e.type === "turn" ? {
1845
1847
  ...e,
1846
1848
  data: {
1847
1849
  ...e.data,
1848
1850
  provider: p
1849
1851
  }
1850
- } : e), [y.nodes, p]), x = B(() => bn(b), [b]), S = B(() => y.edges.map((e) => {
1852
+ } : e), [y.nodes, p]), x = z(() => Sn(b), [b]), S = z(() => y.edges.map((e) => {
1851
1853
  let t = e.sourceHandle === "tool-source";
1852
1854
  return {
1853
1855
  ...e,
@@ -1860,8 +1862,8 @@ function Pn({ turns: e, toolVMsByTurn: t, filteredTurns: n, phases: r, annotatio
1860
1862
  },
1861
1863
  animated: t ? !1 : e.animated
1862
1864
  };
1863
- }), [y.edges]), C = B(() => [...x, ...b], [x, b]), [w, T, E] = jt(C), [D, O, k] = At(S), A = V(e.length), j = V(o), M = V(n.length);
1864
- z(() => {
1865
+ }), [y.edges]), C = z(() => [...x, ...b], [x, b]), [w, T, E] = Pt(C), [D, O, k] = Nt(S), A = B(e.length), j = B(o), M = B(n.length);
1866
+ R(() => {
1865
1867
  (e.length !== A.current || o !== j.current || n.length !== M.current) && (T(C), O(S), A.current = e.length, j.current = o, M.current = n.length);
1866
1868
  }, [
1867
1869
  C,
@@ -1871,7 +1873,7 @@ function Pn({ turns: e, toolVMsByTurn: t, filteredTurns: n, phases: r, annotatio
1871
1873
  n.length,
1872
1874
  T,
1873
1875
  O
1874
- ]), z(() => {
1876
+ ]), R(() => {
1875
1877
  if (s === void 0) return;
1876
1878
  let t = e[s]?.index;
1877
1879
  if (t === void 0) return;
@@ -1886,16 +1888,16 @@ function Pn({ turns: e, toolVMsByTurn: t, filteredTurns: n, phases: r, annotatio
1886
1888
  h,
1887
1889
  e
1888
1890
  ]);
1889
- let N = V(-1);
1890
- z(() => {
1891
+ let N = B(-1);
1892
+ R(() => {
1891
1893
  !c || c.seq === N.current || (N.current = c.seq, g(c.target));
1892
1894
  }, [c, g]);
1893
- let P = V(-1);
1894
- z(() => {
1895
+ let P = B(-1);
1896
+ R(() => {
1895
1897
  !l || l.seq === P.current || (P.current = l.seq, _(l.target));
1896
1898
  }, [l, _]);
1897
- let F = V(!1);
1898
- z(() => {
1899
+ let F = B(!1);
1900
+ R(() => {
1899
1901
  w.length > 0 && !F.current && (F.current = !0, setTimeout(() => {
1900
1902
  let e = w.find((e) => e.type === "turn");
1901
1903
  e ? h.setCenter(e.position.x + Q.turnWidth / 2, e.position.y + Q.turnBaseHeight, {
@@ -1911,13 +1913,13 @@ function Pn({ turns: e, toolVMsByTurn: t, filteredTurns: n, phases: r, annotatio
1911
1913
  h,
1912
1914
  w
1913
1915
  ]);
1914
- let I = R((e) => {
1916
+ let I = L((e) => {
1915
1917
  if (e.type === "turn") {
1916
1918
  let t = e.data;
1917
1919
  return t.annotations?.some?.((e) => e.type === "error") ? "var(--danger)" : t.isFilteredOut ? "var(--rule)" : t.turn.role === "user" ? "var(--teal)" : t.turn.role === "assistant" ? "var(--amber)" : "var(--ink-2)";
1918
1920
  }
1919
1921
  return e.type === "toolCall" ? "var(--ink-3)" : "var(--rule)";
1920
- }, []), ee = R((e, t) => {
1922
+ }, []), ee = L((e, t) => {
1921
1923
  if (t.type !== "turn") return;
1922
1924
  let n = t.data;
1923
1925
  d?.({
@@ -1925,22 +1927,22 @@ function Pn({ turns: e, toolVMsByTurn: t, filteredTurns: n, phases: r, annotatio
1925
1927
  end: n.turn.index
1926
1928
  });
1927
1929
  }, [d]);
1928
- return /* @__PURE__ */ U("div", {
1930
+ return /* @__PURE__ */ H("div", {
1929
1931
  className: [
1930
1932
  "tb-root",
1931
1933
  "tb-graph",
1932
1934
  m
1933
1935
  ].filter(Boolean).join(" "),
1934
- children: /* @__PURE__ */ W("div", {
1936
+ children: /* @__PURE__ */ U("div", {
1935
1937
  className: "tb-graph-flow",
1936
1938
  children: [
1937
- /* @__PURE__ */ W(Ot, {
1939
+ /* @__PURE__ */ U(jt, {
1938
1940
  nodes: w,
1939
1941
  edges: D,
1940
1942
  onNodesChange: E,
1941
1943
  onEdgesChange: k,
1942
1944
  onNodeClick: ee,
1943
- nodeTypes: Mn,
1945
+ nodeTypes: Pn,
1944
1946
  fitView: !1,
1945
1947
  minZoom: .2,
1946
1948
  maxZoom: 2,
@@ -1956,12 +1958,12 @@ function Pn({ turns: e, toolVMsByTurn: t, filteredTurns: n, phases: r, annotatio
1956
1958
  panOnDrag: !0,
1957
1959
  panOnScroll: !0,
1958
1960
  zoomOnScroll: !0,
1959
- children: [/* @__PURE__ */ U(Tt, {
1960
- variant: Et.Dots,
1961
+ children: [/* @__PURE__ */ H(Ot, {
1962
+ variant: kt.Dots,
1961
1963
  gap: 20,
1962
1964
  size: 1,
1963
1965
  color: "var(--rule)"
1964
- }), /* @__PURE__ */ U(Dt, {
1966
+ }), /* @__PURE__ */ H(At, {
1965
1967
  zoomable: !0,
1966
1968
  pannable: !0,
1967
1969
  nodeColor: I,
@@ -1971,11 +1973,11 @@ function Pn({ turns: e, toolVMsByTurn: t, filteredTurns: n, phases: r, annotatio
1971
1973
  className: "tb-graph-minimap"
1972
1974
  })]
1973
1975
  }),
1974
- /* @__PURE__ */ U(kn, {}),
1975
- /* @__PURE__ */ U(jn, { provider: p })
1976
+ /* @__PURE__ */ H(jn, {}),
1977
+ /* @__PURE__ */ H(Nn, { provider: p })
1976
1978
  ]
1977
1979
  })
1978
1980
  });
1979
1981
  }
1980
1982
  //#endregion
1981
- export { Qe as AllChangeBindings, $e as AllDiffLineKinds, et as AllEdgeViolationKinds, tt as AllFileChangeStatuses, nt as AllInsightKinds, rt as AllInsightProvenances, it as AllMapNodeKinds, at as AllReadAttributionStates, ot as AllReadStateGrades, pe as CHANGE_BINDINGS, k as CODE_MAP_STATE_VERSION, be as CODE_MAP_VIEWPORT_SCALE, o as COVERAGE_CAP, st as ChangeBinding, qt as ChangeDetail, zt as Changes, Xt as CodeMap, sn as CodeMapComposition, tn as CodeMapNavigator, i as DEBT_VIEWED, d as DIFF_LINE_KINDS, g as DOI_WEIGHTS, cn as DefaultMapLegend, ct as DiffLineKind, $ as EDGE_DEFAULTS, D as EDGE_VIOLATION_KINDS, lt as EdgeViolationKind, E as FILE_CHANGE_STATUSES, ut as FileChangeStatus, ge as GRAPH_APP_SECTIONS, ve as GRAPH_LEGEND_ITEMS, F as GhostCommitNode, fe as GhostGroup, P as GraphAppShell, kn as GraphControls, le as GraphLegend, ae as GraphSectionNav, me as GraphSubagentBranch, L as GraphToolNode, j as GraphTurnNode, ne as HighlightEdge, dt as InsightKind, hn as InsightPanel, ft as InsightProvenance, ee as LOCAL_APP_SECTIONS, O as MAP_NODE_KINDS, pt as MapNodeKind, Q as NODE_DIMENSIONS, ie as RANK_CAP, t as RANK_FLOOR, re as RECENCY_HALF_LIFE_DAYS, mn as RankModeControl, pn as RankedRow, mt as ReadAttributionState, ht as ReadStateGrade, m as SCENT_TAGS, fn as ScentTag, _e as SessionLane, M as SessionOverflowDisclosure, On as SubagentBranchNode, En as ToolPillNode, he as TouchedFileCluster, Nn as TrajectoryGraph, jn as TrajectoryGraphLegend, wn as TurnCardNode, de as VillageObservations, v as assertChangeDetailPayloadEnums, e as assertChangeDiffPayloadEnums, I as assertCodeMapPayloadEnums, dn as assertTimelineNavigationAction, Lt as buildChangesGraph, Zt as codeMapPayloadToMapData, Ce as codeMapStatesEqual, bn as computeLaneHeaders, h as coverage, N as createCodeMapState, _ as debt, s as debtHoverText, u as debtState, Se as deriveCodeMapView, p as deriveRankedRows, b as deriveTimelineHighlight, y as gateRankedRows, J as humanizeAge, Te as hunkClears, gt as isChangeBinding, r as isCodeMapViewportScale, _t as isDiffLineKind, vt as isEdgeViolationKind, yt as isFileChangeStatus, bt as isInsightKind, xt as isInsightProvenance, St as isMapNodeKind, Ct as isReadAttributionState, wt as isReadStateGrade, n as partialReadHoverText, w as rankMapNodes, l as rankMapNodesIntrinsic, xe as reduceCodeMapState, x as resolveEscapeAction, C as scentTagsFor, yn as turnsToFlow, xn as useCanvasSync };
1983
+ export { tt as AllChangeBindings, nt as AllDiffLineKinds, rt as AllEdgeViolationKinds, it as AllFileChangeStatuses, at as AllInsightKinds, ot as AllInsightProvenances, st as AllMapNodeKinds, ct as AllReadAttributionStates, lt as AllReadStateGrades, de as CHANGE_BINDINGS, D as CODE_MAP_STATE_VERSION, ve as CODE_MAP_VIEWPORT_SCALE, a as COVERAGE_CAP, ut as ChangeBinding, Xt as ChangeDetail, Ht as Changes, $t as CodeMap, un as CodeMapComposition, an as CodeMapNavigator, i as DEBT_VIEWED, u as DIFF_LINE_KINDS, h as DOI_WEIGHTS, dn as DefaultMapLegend, dt as DiffLineKind, $ as EDGE_DEFAULTS, T as EDGE_VIOLATION_KINDS, ft as EdgeViolationKind, w as FILE_CHANGE_STATUSES, pt as FileChangeStatus, me as GRAPH_APP_SECTIONS, ge as GRAPH_LEGEND_ITEMS, ae as GhostCommitNode, he as GhostGroup, j as GraphAppShell, jn as GraphControls, se as GraphLegend, ie as GraphSectionNav, fe as GraphSubagentBranch, ee as GraphToolNode, O as GraphTurnNode, k as HighlightEdge, mt as InsightKind, _n as InsightPanel, ht as InsightProvenance, P as LOCAL_APP_SECTIONS, E as MAP_NODE_KINDS, gt as MapNodeKind, Q as NODE_DIMENSIONS, re as RANK_CAP, t as RANK_FLOOR, ne as RECENCY_HALF_LIFE_DAYS, gn as RankModeControl, hn as RankedRow, _t as ReadAttributionState, vt as ReadStateGrade, p as SCENT_TAGS, mn as ScentTag, M as SessionLane, le as SessionOverflowDisclosure, An as SubagentBranchNode, On as ToolPillNode, te as TouchedFileCluster, Fn as TrajectoryGraph, Nn as TrajectoryGraphLegend, En as TurnCardNode, ce as VillageObservations, _ as assertChangeDetailPayloadEnums, e as assertChangeDiffPayloadEnums, N as assertCodeMapPayloadEnums, pn as assertTimelineNavigationAction, Bt as buildChangesGraph, en as codeMapPayloadToMapData, Ce as codeMapStatesEqual, Sn as computeLaneHeaders, m as coverage, A as createCodeMapState, g as debt, o as debtHoverText, l as debtState, Se as deriveCodeMapView, f as deriveRankedRows, y as deriveTimelineHighlight, v as gateRankedRows, q as humanizeAge, we as hunkClears, yt as isChangeBinding, r as isCodeMapViewportScale, bt as isDiffLineKind, xt as isEdgeViolationKind, St as isFileChangeStatus, Ct as isInsightKind, wt as isInsightProvenance, Tt as isMapNodeKind, Et as isReadAttributionState, Dt as isReadStateGrade, n as partialReadHoverText, S as rankMapNodes, c as rankMapNodesIntrinsic, be as reduceCodeMapState, b as resolveEscapeAction, x as scentTagsFor, xn as turnsToFlow, Cn as useCanvasSync };