dsh-context 0.50.0 → 0.51.0

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.
package/lib/client.js CHANGED
@@ -31,11 +31,15 @@ window.__ModuleLoader__.load({
31
31
  "stats.toolCalls": "工具调用",
32
32
  "stats.cacheHit": "缓存命中",
33
33
  "stats.cost": "预估费用",
34
- "stats.costTip": "按 DeepSeek 官方刊例价估算整个会话的累计费用:输入区分缓存命中/未命中,输出含思考;按请求时间区分高峰(北京时间工作日 9:00–12:00、14:00–18:00)与空闲时段(半价,周末全天均为空闲时段)。适用于 deepseek-flash / deepseek-v4-pro(旧 ID deepseek-v4-flash 等按 Flash 价格计费;按模型名匹配,不限 provider),价格仅供参考。",
35
- "stats.costPriceHead": "每百万 tokens 价格(高峰 | 空闲半价):",
34
+ "stats.costTip": "按 models.dev 刊例价估算整个会话的累计费用,人民币按 1 元 = 0.15 美元换算,仅供参考。",
35
+ "stats.costTipDeepseek": "DeepSeek 高峰时段(北京时间工作日 9:00–12:00、14:00–18:00)按挂牌价计费,其余时段半价。",
36
+ "stats.costPriceHead": "每百万 tokens 价格:",
37
+ "stats.costPriceHeadPair": "每百万 tokens 价格(高峰|空闲):",
36
38
  "stats.costHit": "命中",
37
39
  "stats.costMiss": "未命中",
40
+ "stats.costWrite": "写入",
38
41
  "stats.costOut": "输出",
42
+ "stats.costUnavailable": "模型价格暂不可用(自动重试中),费用暂无法估算。",
39
43
  "timing.title": "耗时统计",
40
44
  "timing.total": "活跃时长",
41
45
  "timing.ttft": "模型等待",
@@ -69,6 +73,7 @@ window.__ModuleLoader__.load({
69
73
  "placement.all": "全部",
70
74
  "settings.gran": "趋势图 · 默认粒度",
71
75
  "settings.mode": "趋势图 · 默认展示方式",
76
+ "settings.toolSort": "工具定义 · 默认排序",
72
77
  "settings.fileSort": "文件活动 · 默认排序",
73
78
  "settings.expand": "展开",
74
79
  "settings.collapse": "收起",
@@ -264,8 +269,10 @@ window.__ModuleLoader__.load({
264
269
  "tool.jsonHide": "收起",
265
270
  "tool.search": "按名称、描述或参数过滤…",
266
271
  "tool.sort.size": "按大小",
272
+ "tool.sort.count": "按次数",
267
273
  "tool.sort.name": "按名称",
268
- "tool.sortTip": "工具排序:按 token 大小(默认)或名称",
274
+ "tool.sortTip": "工具排序:按当前步骤中的调用次数(默认)、token 大小或名称",
275
+ "tool.hitsTip": "当前展示步骤的上下文中,该工具被调用并返回结果的次数",
269
276
  "tool.noMatch": "没有匹配当前过滤条件的工具",
270
277
  "rich.raw": "原文",
271
278
  "rich.md": "Markdown",
@@ -323,11 +330,15 @@ window.__ModuleLoader__.load({
323
330
  "stats.toolCalls": "Tool Calls",
324
331
  "stats.cacheHit": "Cache Hit",
325
332
  "stats.cost": "Cost",
326
- "stats.costTip": "Rough cumulative cost of the whole session at DeepSeek’s list prices: input split by cache hit/miss, output includes reasoning; each request is priced at the peak (Beijing Time weekdays 09:00–12:00, 14:00–18:00) or half-price off-peak rate by its time — weekends bill at off-peak all day. Applies to deepseek-flash / deepseek-v4-pro (legacy IDs such as deepseek-v4-flash bill at the Flash rates; matched by model name, any provider); prices are for reference only.",
327
- "stats.costPriceHead": "Per-1M-token rates (peak | off-peak at half price):",
333
+ "stats.costTip": "Rough cumulative cost of the whole session at the models.dev list prices; the CNY display converts at 1 CNY = 0.15 USD. Prices are for reference only.",
334
+ "stats.costTipDeepseek": "DeepSeek bills peak windows (Beijing Time weekdays 09:00–12:00, 14:00–18:00) at list price; all other hours are half price.",
335
+ "stats.costPriceHead": "Per-1M-token rates:",
336
+ "stats.costPriceHeadPair": "Per-1M-token rates (peak|off-peak):",
328
337
  "stats.costHit": "hit",
329
338
  "stats.costMiss": "miss",
339
+ "stats.costWrite": "write",
330
340
  "stats.costOut": "output",
341
+ "stats.costUnavailable": "Model prices are unavailable (retrying automatically) — the cost cannot be estimated yet.",
331
342
  "timing.title": "Timing Stats",
332
343
  "timing.total": "Active Time",
333
344
  "timing.ttft": "TTFT",
@@ -361,6 +372,7 @@ window.__ModuleLoader__.load({
361
372
  "placement.all": "All",
362
373
  "settings.gran": "Trend Chart · Default granularity",
363
374
  "settings.mode": "Trend Chart · Default display",
375
+ "settings.toolSort": "Tool Schemas · Default sort",
364
376
  "settings.fileSort": "File Activity · Default sort",
365
377
  "settings.expand": "Expand",
366
378
  "settings.collapse": "Collapse",
@@ -556,8 +568,10 @@ window.__ModuleLoader__.load({
556
568
  "tool.jsonHide": "Collapse",
557
569
  "tool.search": "Filter by name, description, or parameters…",
558
570
  "tool.sort.size": "By size",
571
+ "tool.sort.count": "By calls",
559
572
  "tool.sort.name": "By name",
560
- "tool.sortTip": "Sort tools by token size (default) or name",
573
+ "tool.sortTip": "Sort tools by call count in the shown step (default), token size, or name",
574
+ "tool.hitsTip": "Times this tool was called and answered within the shown step’s context",
561
575
  "tool.noMatch": "No tools match the current filter",
562
576
  "rich.raw": "Raw",
563
577
  "rich.md": "Markdown",
@@ -708,27 +722,27 @@ window.__ModuleLoader__.load({
708
722
  const CATS = [
709
723
  {
710
724
  key: "system",
711
- color: "#6366f1"
725
+ color: "var(--color-indigo-500)"
712
726
  },
713
727
  {
714
728
  key: "tools",
715
- color: "#f59e0b"
729
+ color: "var(--color-amber-500)"
716
730
  },
717
731
  {
718
732
  key: "user",
719
- color: "#22c55e"
733
+ color: "var(--color-green-500)"
720
734
  },
721
735
  {
722
736
  key: "inject",
723
- color: "#a855f7"
737
+ color: "var(--color-purple-500)"
724
738
  },
725
739
  {
726
740
  key: "assistant",
727
- color: "#3b82f6"
741
+ color: "var(--color-blue-500)"
728
742
  },
729
743
  {
730
744
  key: "tool",
731
- color: "#14b8a6"
745
+ color: "var(--color-teal-500)"
732
746
  }
733
747
  ];
734
748
  /** Category key → bar color, for per-item bands (the browser's DNA mode) that bypass the CATS-order part builders. */
@@ -833,7 +847,7 @@ window.__ModuleLoader__.load({
833
847
  value: 0
834
848
  })), {
835
849
  key: "output",
836
- color: "#ec4899",
850
+ color: "var(--color-pink-500)",
837
851
  value: Math.max(0, usage.outputTokens)
838
852
  }];
839
853
  }
@@ -966,6 +980,51 @@ window.__ModuleLoader__.load({
966
980
  };
967
981
  }
968
982
  /**
983
+ * The session-cost raw material, re-proved per provider/model/period/bucket
984
+ * (the shape the client's cost.ts prices): a branch, model, or period that
985
+ * is not a plain record drops whole — never a half-proved row — and bucket
986
+ * fields zero out via numOf, so garbage can only price as zero, never as
987
+ * NaN. Absent stays absent.
988
+ */
989
+ function costOf(value) {
990
+ const data = asRecord(value);
991
+ if (data === null || Array.isArray(data)) return void 0;
992
+ const out = {};
993
+ for (const provider of Object.keys(data)) {
994
+ const models = asRecord(data[provider]);
995
+ if (models === null || Array.isArray(models)) continue;
996
+ const branch = {};
997
+ for (const model of Object.keys(models)) {
998
+ const periods = asRecord(models[model]);
999
+ if (periods === null || Array.isArray(periods)) continue;
1000
+ const copy = {};
1001
+ for (const period of ["peak", "off"]) {
1002
+ const b = asRecord(periods[period]);
1003
+ if (b === null || Array.isArray(b)) continue;
1004
+ copy[period] = {
1005
+ uncached: numOf(b.uncached),
1006
+ cacheRead: numOf(b.cacheRead),
1007
+ cacheWrite: numOf(b.cacheWrite),
1008
+ output: numOf(b.output)
1009
+ };
1010
+ }
1011
+ branch[model] = copy;
1012
+ }
1013
+ out[provider] = branch;
1014
+ }
1015
+ return out;
1016
+ }
1017
+ /** The fast-path structural check for `cost`: every branch is a plain record (bucket fields re-prove in costOf/cost.ts). */
1018
+ function costFastOk(value) {
1019
+ if (value === void 0) return true;
1020
+ const data = asRecord(value);
1021
+ if (data === null || Array.isArray(data)) return false;
1022
+ return Object.keys(data).every((provider) => {
1023
+ const models = asRecord(data[provider]);
1024
+ return models !== null && !Array.isArray(models);
1025
+ });
1026
+ }
1027
+ /**
969
1028
  * Narrow a delivered projection value to a RENDER-SAFE context timeline —
970
1029
  * the client's no-white-screen guarantee against backend/parse failures.
971
1030
  *
@@ -990,9 +1049,9 @@ window.__ModuleLoader__.load({
990
1049
  "assistant",
991
1050
  "tool",
992
1051
  "total"
993
- ].every((k) => typeof current[k] === "number") && recordsOnly(data.requests) && recordsOnly(data.events) && recordsOnly(data.nodes) && recordsOnly(data.archive) && systemsFastOk(data.systems) && timingFastOk(data.timing)) return data;
1052
+ ].every((k) => typeof current[k] === "number") && recordsOnly(data.requests) && recordsOnly(data.events) && recordsOnly(data.nodes) && recordsOnly(data.archive) && systemsFastOk(data.systems) && timingFastOk(data.timing) && costFastOk(data.cost)) return data;
994
1053
  const safeCurrent = current !== null && typeof current === "object" ? current : {};
995
- const cost = typeof data.cost === "object" && data.cost !== null && !Array.isArray(data.cost) ? data.cost : void 0;
1054
+ const cost = costOf(data.cost);
996
1055
  const timing = timingOf(data.timing);
997
1056
  const unsupported = unsupportedOf(data.unsupported);
998
1057
  const counts = countsOf(data.counts);
@@ -2397,7 +2456,7 @@ window.__ModuleLoader__.load({
2397
2456
  className: cls,
2398
2457
  children: props.onRetry !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
2399
2458
  type: "button",
2400
- className: "lc-br-retry",
2459
+ className: "lc-br-retry hover:brightness-[1.15]",
2401
2460
  onClick: props.onRetry,
2402
2461
  children: t("detail.loadFailed")
2403
2462
  }) : t("detail.loadFailed")
@@ -2487,7 +2546,7 @@ window.__ModuleLoader__.load({
2487
2546
  if (state === "absent") return t("browser.notInLog");
2488
2547
  if (state === "failed") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
2489
2548
  type: "button",
2490
- className: "lc-br-retry",
2549
+ className: "lc-br-retry hover:brightness-[1.15]",
2491
2550
  onClick: onRetry,
2492
2551
  children: t("browser.loadFailed")
2493
2552
  });
@@ -2835,7 +2894,7 @@ window.__ModuleLoader__.load({
2835
2894
  };
2836
2895
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
2837
2896
  type: "button",
2838
- className: "lc-att-item",
2897
+ className: "lc-att-item hover:border-(--dsw-alias-label-dimmed) hover:bg-[var(--dsw-alias-interactive-bg-hover,var(--dsw-alias-bg-layer-2))]",
2839
2898
  title: error ? t("attach.loadFailed") : t("attach.open"),
2840
2899
  onClick: activate,
2841
2900
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
@@ -3112,7 +3171,7 @@ window.__ModuleLoader__.load({
3112
3171
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3113
3172
  className: "lc-br-toolctl",
3114
3173
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
3115
- className: "lc-br-tool-search",
3174
+ className: "lc-br-tool-search focus:border-(--dsw-alias-label-dimmed)",
3116
3175
  value: props.value,
3117
3176
  placeholder: props.placeholder,
3118
3177
  onChange: (ev) => {
@@ -3175,7 +3234,7 @@ window.__ModuleLoader__.load({
3175
3234
  className: "lc-ts-json",
3176
3235
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
3177
3236
  type: "button",
3178
- className: "lc-ts-json-toggle",
3237
+ className: "lc-ts-json-toggle hover:text-(--dsw-alias-label-primary) hover:underline",
3179
3238
  onClick: () => {
3180
3239
  setJsonOpen((o) => !o);
3181
3240
  },
@@ -3438,7 +3497,7 @@ window.__ModuleLoader__.load({
3438
3497
  * context) stays a hoverable/clickable filament instead of a sub-pixel sliver. Tooltips still report true shares.
3439
3498
  */
3440
3499
  const DNA_MIN_BAND = .35;
3441
- function makeContextBrowser(kit, StackedBar) {
3500
+ function makeContextBrowser(kit, StackedBar, settings) {
3442
3501
  const { t, fmt, fmtTime, catLabel } = kit;
3443
3502
  const DetailNote = makeDetailNote(kit);
3444
3503
  const nodeText = makeNodeText(kit);
@@ -3451,7 +3510,7 @@ window.__ModuleLoader__.load({
3451
3510
  const [openCat, setOpenCat] = (0, react.useState)(null);
3452
3511
  const [openElem, setOpenElem] = (0, react.useState)(null);
3453
3512
  const [rowQuery, setRowQuery] = (0, react.useState)("");
3454
- const [toolSort, setToolSort] = (0, react.useState)("size");
3513
+ const [toolSort, setToolSort] = (0, react.useState)(() => settings.defaultToolSort());
3455
3514
  const [dna, setDna] = (0, react.useState)(false);
3456
3515
  const [dnaKey, setDnaKey] = (0, react.useState)(null);
3457
3516
  const onOpenCat = props.onOpenCat;
@@ -3527,6 +3586,9 @@ window.__ModuleLoader__.load({
3527
3586
  const prevView = refReq !== null ? assemble(data, headers, refReq.seq) : null;
3528
3587
  const prevByCat = prevView !== null ? byCatOf(prevView) : null;
3529
3588
  const byCat = byCatOf(view);
3589
+ const toolHits = /* @__PURE__ */ new Map();
3590
+ for (const n of view.nodes) if (n.cat === "tool" && n.tool !== void 0) toolHits.set(n.tool, (toolHits.get(n.tool) ?? 0) + 1);
3591
+ const toolHitsOf = (tool) => toolHits.get(tool.name) ?? 0;
3530
3592
  const dnaLabel = (it) => {
3531
3593
  let base;
3532
3594
  if (!("node" in it)) base = it.cat === "system" ? catLabel("system") : it.key.slice(5);
@@ -3591,7 +3653,7 @@ window.__ModuleLoader__.load({
3591
3653
  className: "lc-br-elem" + (open ? " lc-br-elem-on" : ""),
3592
3654
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
3593
3655
  type: "button",
3594
- className: "lc-br-elem-row",
3656
+ className: "lc-br-elem-row hover:bg-(--dsw-alias-interactive-bg-hover)",
3595
3657
  onClick: () => {
3596
3658
  toggleElem(key);
3597
3659
  },
@@ -3670,13 +3732,17 @@ window.__ModuleLoader__.load({
3670
3732
  const row = contentByName.get(tool.name);
3671
3733
  if (row === void 0) return false;
3672
3734
  return (row.description ?? "").toLowerCase().includes(q) || schemaTextOf(row.schema).toLowerCase().includes(q);
3673
- }).sort((a, b) => toolSort === "size" ? b.tokens - a.tokens : a.name < b.name ? -1 : 1);
3735
+ }).sort((a, b) => toolSort === "count" ? toolHitsOf(b) - toolHitsOf(a) || (a.name < b.name ? -1 : 1) : toolSort === "size" ? b.tokens - a.tokens : a.name < b.name ? -1 : 1);
3674
3736
  const toolctl = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RowToolbar, {
3675
3737
  value: rowQuery,
3676
3738
  placeholder: t("tool.search"),
3677
3739
  tip: t("tool.sortTip"),
3678
3740
  onChange: setRowQuery,
3679
- children: ["size", "name"].map((k) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
3741
+ children: [
3742
+ "size",
3743
+ "count",
3744
+ "name"
3745
+ ].map((k) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
3680
3746
  type: "button",
3681
3747
  className: "lc-gran-btn" + (toolSort === k ? " lc-gran-on" : ""),
3682
3748
  onClick: () => {
@@ -3707,11 +3773,15 @@ window.__ModuleLoader__.load({
3707
3773
  });
3708
3774
  };
3709
3775
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [toolctl, shown.map((tool) => {
3710
- const trailing = tool.plugin !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
3776
+ const trailing = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [tool.plugin !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
3711
3777
  className: "lc-br-tag lc-br-tool-plugin",
3712
3778
  title: tool.plugin === "<unknown-plugin>" ? t("tool.unknownTitle") : t("tool.plugin"),
3713
3779
  children: tool.plugin === "<unknown-plugin>" ? t("tool.unknown") : tool.plugin
3714
- }) : null;
3780
+ }) : null, /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
3781
+ className: "lc-br-hits",
3782
+ title: t("tool.hitsTip"),
3783
+ children: "×" + fmt(toolHitsOf(tool))
3784
+ })] });
3715
3785
  return elemRow("tool:" + tool.name, null, tool.name, tool.tokens, void 0, toolBody(tool), false, trailing);
3716
3786
  })] });
3717
3787
  }
@@ -3884,7 +3954,7 @@ window.__ModuleLoader__.load({
3884
3954
  className: "lc-br-cat" + (openable ? "" : " lc-br-cat-empty"),
3885
3955
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
3886
3956
  type: "button",
3887
- className: "lc-br-cat-row" + (linked && props.hoverKey === c.key ? " lc-br-cat-on" : ""),
3957
+ className: "lc-br-cat-row hover:bg-(--dsw-alias-interactive-bg-hover)" + (linked && props.hoverKey === c.key ? " lc-br-cat-on" : ""),
3888
3958
  /* v8 ignore start -- the handlers exist only when linked,
3889
3959
  and linked already requires onHoverKey defined (above). */
3890
3960
  onMouseEnter: linked ? () => {
@@ -4038,7 +4108,7 @@ window.__ModuleLoader__.load({
4038
4108
  visible.map((p, i) => {
4039
4109
  const on = props.hoverKey !== void 0 && (props.hoverKey === p.key || p.group !== void 0 && props.hoverKey === p.group);
4040
4110
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
4041
- className: "lc-stacked-seg" + (on ? " lc-stacked-seg-on" : "") + (pickKey !== void 0 ? " lc-stacked-seg-pick" : ""),
4111
+ className: "lc-stacked-seg animate-lc-stacked-in motion-reduce:animate-none" + (on ? " lc-stacked-seg-on" : "") + (pickKey !== void 0 ? " lc-stacked-seg-pick" : ""),
4042
4112
  style: {
4043
4113
  width: `${widths[i]}%`,
4044
4114
  backgroundColor: p.color,
@@ -4053,7 +4123,7 @@ window.__ModuleLoader__.load({
4053
4123
  }, p.key);
4054
4124
  }),
4055
4125
  free > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
4056
- className: "lc-stacked-free" + (props.hoverKey === "free" ? " lc-stacked-free-on" : ""),
4126
+ className: "lc-stacked-free animate-lc-stacked-in motion-reduce:animate-none" + (props.hoverKey === "free" ? " lc-stacked-free-on" : ""),
4057
4127
  style: {
4058
4128
  width: `${free / scale * 100}%`,
4059
4129
  "--lc-i": Math.min(visible.length, 9)
@@ -4207,7 +4277,7 @@ window.__ModuleLoader__.load({
4207
4277
  }),
4208
4278
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
4209
4279
  type: "button",
4210
- className: "lc-error-retry",
4280
+ className: "lc-error-retry hover:border-(--dsw-alias-label-primary)",
4211
4281
  onClick: () => {
4212
4282
  this.setState({ error: null });
4213
4283
  },
@@ -4253,11 +4323,11 @@ window.__ModuleLoader__.load({
4253
4323
  * current-composition overview and the shared Context browser; rendered from the `conversation.input.overlay` slot and opened/closed
4254
4324
  * through the per-session modal store, so the trigger flips it and no message ever enters session history.
4255
4325
  */
4256
- function makeContextModal(ctx, kit) {
4326
+ function makeContextModal(ctx, kit, settings) {
4257
4327
  const { t } = kit;
4258
4328
  const StackedBar = makeStackedBar(kit);
4259
4329
  const CurrentComposition = makeCurrentComposition(kit, StackedBar, makeLegend(kit));
4260
- const ContextBrowser = makeContextBrowser(kit, StackedBar);
4330
+ const ContextBrowser = makeContextBrowser(kit, StackedBar, settings);
4261
4331
  const ErrorBoundary = makeErrorBoundary(t);
4262
4332
  function ContextModalBody(props) {
4263
4333
  const sessionId = typeof props.sessionId === "string" ? props.sessionId : "";
@@ -4320,7 +4390,7 @@ window.__ModuleLoader__.load({
4320
4390
  className: "lc-modal-title",
4321
4391
  children: t("tab")
4322
4392
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
4323
- className: "lc-modal-close",
4393
+ className: "lc-modal-close hover:text-(--dsw-alias-label-primary) hover:bg-(--dsw-alias-bg-layer-2)",
4324
4394
  "aria-label": t("cmd.close"),
4325
4395
  onClick: close,
4326
4396
  children: "×"
@@ -4442,7 +4512,7 @@ window.__ModuleLoader__.load({
4442
4512
  portal: true,
4443
4513
  anchor: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
4444
4514
  type: "button",
4445
- className: "lc-settings-select",
4515
+ className: "lc-settings-select hover:enabled:bg-(--dsw-alias-interactive-bg-hover) disabled:opacity-50 disabled:cursor-default",
4446
4516
  disabled: props.disabled,
4447
4517
  "aria-haspopup": "menu",
4448
4518
  "aria-expanded": open,
@@ -4550,6 +4620,28 @@ window.__ModuleLoader__.load({
4550
4620
  props.set?.("defaultTrendMode", id);
4551
4621
  }
4552
4622
  }),
4623
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PrefRow, {
4624
+ label: t("settings.toolSort"),
4625
+ value: state.toolSort,
4626
+ disabled,
4627
+ options: [
4628
+ {
4629
+ id: "size",
4630
+ label: t("tool.sort.size")
4631
+ },
4632
+ {
4633
+ id: "count",
4634
+ label: t("tool.sort.count")
4635
+ },
4636
+ {
4637
+ id: "name",
4638
+ label: t("tool.sort.name")
4639
+ }
4640
+ ],
4641
+ onPick: (id) => {
4642
+ props.set?.("defaultToolSort", id);
4643
+ }
4644
+ }),
4553
4645
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PrefRow, {
4554
4646
  label: t("settings.fileSort"),
4555
4647
  value: state.fileSort,
@@ -4586,6 +4678,7 @@ window.__ModuleLoader__.load({
4586
4678
  ...v.defaultPlacement === "all" || v.defaultPlacement === "tab" || v.defaultPlacement === "sidebar" ? { placement: v.defaultPlacement } : {},
4587
4679
  ...v.defaultGranularity === "step" || v.defaultGranularity === "turn" ? { granularity: v.defaultGranularity } : {},
4588
4680
  ...v.defaultTrendMode === "total" || v.defaultTrendMode === "delta" ? { mode: v.defaultTrendMode } : {},
4681
+ ...v.defaultToolSort === "size" || v.defaultToolSort === "count" || v.defaultToolSort === "name" ? { toolSort: v.defaultToolSort } : {},
4589
4682
  ...v.defaultFileSort === "count" || v.defaultFileSort === "latest" || v.defaultFileSort === "path" ? { fileSort: v.defaultFileSort } : {}
4590
4683
  };
4591
4684
  }
@@ -4595,13 +4688,14 @@ window.__ModuleLoader__.load({
4595
4688
  placement: "all",
4596
4689
  granularity: "step",
4597
4690
  mode: "total",
4691
+ toolSort: "count",
4598
4692
  fileSort: "count",
4599
4693
  writable: false
4600
4694
  };
4601
4695
  let scope;
4602
4696
  const listeners = /* @__PURE__ */ new Set();
4603
4697
  const publish = (next) => {
4604
- if (next.status === state.status && next.placement === state.placement && next.granularity === state.granularity && next.mode === state.mode && next.fileSort === state.fileSort && next.writable === state.writable) return;
4698
+ if (next.status === state.status && next.placement === state.placement && next.granularity === state.granularity && next.mode === state.mode && next.toolSort === state.toolSort && next.fileSort === state.fileSort && next.writable === state.writable) return;
4605
4699
  state = next;
4606
4700
  for (const listener of listeners) listener();
4607
4701
  };
@@ -4614,6 +4708,7 @@ window.__ModuleLoader__.load({
4614
4708
  placement: prefs.placement ?? (rawPlacement === void 0 ? state.placement : "all"),
4615
4709
  granularity: prefs.granularity ?? state.granularity,
4616
4710
  mode: prefs.mode ?? state.mode,
4711
+ toolSort: prefs.toolSort ?? state.toolSort,
4617
4712
  fileSort: prefs.fileSort ?? state.fileSort,
4618
4713
  writable: snap.writable
4619
4714
  });
@@ -4632,6 +4727,7 @@ window.__ModuleLoader__.load({
4632
4727
  defaultPlacement: () => state.placement,
4633
4728
  defaultGranularity: () => state.granularity,
4634
4729
  defaultTrendMode: () => state.mode,
4730
+ defaultToolSort: () => state.toolSort,
4635
4731
  defaultFileSort: () => state.fileSort,
4636
4732
  attach(bound) {
4637
4733
  scope = bound;
@@ -5925,9 +6021,9 @@ window.__ModuleLoader__.load({
5925
6021
  /** Fallback arc color for pressure-only nodes (no composition data), by fill ratio. */
5926
6022
  function ringColorOf(pct) {
5927
6023
  if (pct === null) return "var(--dsw-alias-border-l1)";
5928
- if (pct >= 90) return "#ef4444";
5929
- if (pct >= 70) return "#f59e0b";
5930
- return "#22c55e";
6024
+ if (pct >= 90) return "var(--color-red-500)";
6025
+ if (pct >= 70) return "var(--color-amber-500)";
6026
+ return "var(--color-green-500)";
5931
6027
  }
5932
6028
  function makeAgentGraph(ctx, kit) {
5933
6029
  const { t, fmt, catLabel } = kit;
@@ -6052,15 +6148,14 @@ window.__ModuleLoader__.load({
6052
6148
  children: [layout.links.map((link) => {
6053
6149
  const d = `M ${link.x1} ${link.y1} L ${link.x2} ${link.y2}`;
6054
6150
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("g", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
6055
- className: "lc-agents-link" + (link.running ? " lc-agents-link-live" : ""),
6151
+ className: "lc-agents-link stroke-[1.5px] stroke-opacity-45" + (link.running ? " lc-agents-link-live" : ""),
6056
6152
  d,
6057
6153
  stroke: link.color,
6058
6154
  fill: "none"
6059
6155
  }), link.running ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
6060
- className: "lc-agents-flow",
6156
+ className: "lc-agents-flow animate-lc-agent-flow fill-none stroke-2",
6061
6157
  d,
6062
- stroke: link.color,
6063
- fill: "none"
6158
+ stroke: link.color
6064
6159
  }) : null] }, link.to);
6065
6160
  }), forest.nodes.map((node) => {
6066
6161
  const point = layout.points.find((p) => p.id === node.id);
@@ -6118,7 +6213,7 @@ window.__ModuleLoader__.load({
6118
6213
  const pct = node.head !== null ? node.head.pct : null;
6119
6214
  const ring = 2 * Math.PI * 20;
6120
6215
  const segs = node.head !== null ? ringSegments(node.head.parts, pct, 20, ringColorOf(pct)) : [];
6121
- const cls = "lc-agent-node" + (node.isCurrent ? " lc-agent-self" : "") + (node.running ? " lc-agent-running" : "") + (node.completed && !node.running ? " lc-agent-done" : "") + (props.hovered ? " lc-agent-hover" : "") + (node.isCurrent ? "" : " lc-agent-clickable");
6216
+ const cls = "lc-agent-node" + (node.isCurrent ? " lc-agent-self" : "") + (node.running ? " lc-agent-running" : "") + (node.completed && !node.running ? " lc-agent-done" : "") + (props.hovered ? " lc-agent-hover" : "") + (node.isCurrent ? "" : " lc-agent-clickable") + " group/agent";
6122
6217
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("g", {
6123
6218
  className: cls,
6124
6219
  transform: `translate(${x}, ${y})`,
@@ -6137,23 +6232,23 @@ window.__ModuleLoader__.load({
6137
6232
  },
6138
6233
  children: [
6139
6234
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("circle", {
6140
- className: "lc-agent-halo",
6235
+ className: "lc-agent-halo fill-transparent group-hover/agent:fill-[var(--dsw-alias-interactive-bg-hover,var(--dsw-alias-bg-layer-2))] group-focus-visible/agent:fill-[var(--dsw-alias-interactive-bg-hover,var(--dsw-alias-bg-layer-2))]" + (node.running ? " animate-lc-agent-glow" : ""),
6141
6236
  r: 35
6142
6237
  }),
6143
6238
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("circle", {
6144
- className: "lc-agent-track",
6239
+ className: "lc-agent-track fill-(--dsw-alias-bg-layer-1) stroke-(--dsw-alias-border-l1) stroke-[1.5px]",
6145
6240
  r: 26
6146
6241
  }),
6147
6242
  segs.map((seg) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("circle", {
6148
- className: "lc-agent-seg" + (seg.free ? " lc-agent-free" : ""),
6243
+ className: "lc-agent-seg fill-none stroke-9" + (seg.free ? " lc-agent-free" : ""),
6149
6244
  r: 20,
6150
- stroke: seg.free ? void 0 : seg.color,
6151
6245
  strokeDasharray: `${seg.len} ${ring - seg.len}`,
6152
6246
  strokeDashoffset: -seg.offset,
6247
+ style: { stroke: seg.free ? void 0 : seg.color },
6153
6248
  transform: "rotate(-90)"
6154
6249
  }, seg.key)),
6155
6250
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("text", {
6156
- className: "lc-agent-pct",
6251
+ className: "lc-agent-pct fill-(--dsw-alias-label-primary)",
6157
6252
  textAnchor: "middle",
6158
6253
  dy: "0.32em",
6159
6254
  children: pct !== null ? `${pct}%` : node.head !== null ? props.fmt(node.head.tokens) : "—"
@@ -6268,7 +6363,7 @@ window.__ModuleLoader__.load({
6268
6363
  }
6269
6364
  const hovering = props.hoverKey !== null && props.hoverKey !== void 0 && arcs.some((a) => a.key === props.hoverKey);
6270
6365
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6271
- className: "lc-donut" + (hovering ? " lc-donut-dim" : ""),
6366
+ className: "lc-donut @max-[240px]/lc-card:mx-auto" + (hovering ? " lc-donut-dim" : ""),
6272
6367
  style: {
6273
6368
  width: size,
6274
6369
  height: size
@@ -6282,23 +6377,21 @@ window.__ModuleLoader__.load({
6282
6377
  height: size,
6283
6378
  "aria-hidden": "true",
6284
6379
  children: arcs.length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("circle", {
6285
- className: "lc-donut-track",
6380
+ className: "lc-donut-track fill-none stroke-4",
6286
6381
  cx: "21",
6287
6382
  cy: "21",
6288
- r: "15.9155",
6289
- fill: "none",
6290
- strokeWidth: "4"
6383
+ r: "15.9155"
6291
6384
  }) : arcs.map((a, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("circle", {
6292
- className: "lc-donut-seg" + (props.hoverKey === a.key ? " lc-donut-seg-on" : ""),
6385
+ className: "lc-donut-seg fill-none stroke-4 animate-lc-donut-in motion-reduce:animate-none" + (props.hoverKey === a.key ? " lc-donut-seg-on" : ""),
6293
6386
  cx: "21",
6294
6387
  cy: "21",
6295
6388
  r: "15.9155",
6296
- fill: "none",
6297
- stroke: a.color,
6298
- strokeWidth: "4",
6299
6389
  strokeDasharray: `${a.len} ${100 - a.len}`,
6300
6390
  strokeDashoffset: a.offset,
6301
- style: { "--lc-i": i },
6391
+ style: {
6392
+ "--lc-i": i,
6393
+ stroke: a.color
6394
+ },
6302
6395
  onMouseEnter: () => {
6303
6396
  if (props.onHoverKey !== void 0) props.onHoverKey(a.key);
6304
6397
  }
@@ -6430,7 +6523,7 @@ window.__ModuleLoader__.load({
6430
6523
  const at = eventAt(ev);
6431
6524
  const glyph = ev.kind === "inject" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconPlusOutline16, {}) : ev.kind === "model" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconBranchOutline16, {}) : EVENT_ICONS[ev.kind] || "•";
6432
6525
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6433
- className: "lc-event",
6526
+ className: "lc-event @max-[380px]/lc-card:flex-wrap",
6434
6527
  children: [
6435
6528
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6436
6529
  className: "lc-event-icon lc-event-" + ev.kind,
@@ -6441,7 +6534,7 @@ window.__ModuleLoader__.load({
6441
6534
  children: t("kind." + ev.kind)
6442
6535
  }),
6443
6536
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6444
- className: "lc-event-label",
6537
+ className: "lc-event-label flex-1 @max-[380px]/lc-card:basis-[calc(100%-92px)]",
6445
6538
  children: label
6446
6539
  }),
6447
6540
  at !== null ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
@@ -6599,7 +6692,7 @@ window.__ModuleLoader__.load({
6599
6692
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6600
6693
  className: "lc-fa-ctl",
6601
6694
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
6602
- className: "lc-gran",
6695
+ className: "lc-gran @max-[380px]/lc-card:flex-wrap",
6603
6696
  children: chips.map((c) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
6604
6697
  type: "button",
6605
6698
  className: "lc-gran-btn" + (filter === c.key ? " lc-gran-on" : "") + (c.key === "read" || c.key === "write" || c.key === "search" ? " lc-fa-chip-" + c.key : ""),
@@ -6616,7 +6709,7 @@ window.__ModuleLoader__.load({
6616
6709
  })]
6617
6710
  }, c.key))
6618
6711
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
6619
- className: "lc-fa-search",
6712
+ className: "lc-fa-search focus:border-(--dsw-alias-label-dimmed)",
6620
6713
  value: query,
6621
6714
  placeholder: t("files.search"),
6622
6715
  onChange: (ev) => {
@@ -6629,12 +6722,12 @@ window.__ModuleLoader__.load({
6629
6722
  children: [
6630
6723
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("files.files", { n: activity.entries.length }) }),
6631
6724
  activity.totals.added + activity.totals.removed > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
6632
- className: "lc-fa-meta-delta",
6725
+ className: "lc-fa-meta-delta group/tip",
6633
6726
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(DeltaPair, {
6634
6727
  added: activity.totals.added,
6635
6728
  removed: activity.totals.removed
6636
6729
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6637
- className: "lc-tip lc-fa-meta-tip",
6730
+ className: "lc-tip lc-fa-meta-tip group-hover/tip:opacity-100",
6638
6731
  role: "tooltip",
6639
6732
  children: t("files.deltaTip")
6640
6733
  })]
@@ -6678,7 +6771,7 @@ window.__ModuleLoader__.load({
6678
6771
  className: "lc-fa-item" + (open ? " lc-fa-item-on" : ""),
6679
6772
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
6680
6773
  type: "button",
6681
- className: "lc-fa-row",
6774
+ className: "lc-fa-row hover:bg-(--dsw-alias-interactive-bg-hover) @max-[380px]/lc-card:flex-wrap",
6682
6775
  title: e.path,
6683
6776
  onClick: () => {
6684
6777
  setOpenPath(open ? null : e.path);
@@ -6698,9 +6791,9 @@ window.__ModuleLoader__.load({
6698
6791
  }) : glyph.glyph
6699
6792
  }),
6700
6793
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
6701
- className: "lc-fa-path",
6794
+ className: "lc-fa-path flex-1 @max-[380px]/lc-card:basis-[calc(100%-46px)]",
6702
6795
  children: [dir !== "" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("em", { children: dir }) : null, openable ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("b", {
6703
- className: "lc-fa-file",
6796
+ className: "lc-fa-file hover:underline",
6704
6797
  title: t(previewable ? "files.preview" : "files.open"),
6705
6798
  onClick: (ev) => {
6706
6799
  ev.stopPropagation();
@@ -6745,7 +6838,7 @@ window.__ModuleLoader__.load({
6745
6838
  const key = `${op.seq}:${i}`;
6746
6839
  return onLocate !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
6747
6840
  type: "button",
6748
- className: "lc-fa-op lc-fa-op-link",
6841
+ className: "lc-fa-op lc-fa-op-link hover:bg-(--dsw-alias-interactive-bg-hover)",
6749
6842
  title: t("files.locate"),
6750
6843
  onClick: () => {
6751
6844
  onLocate(op);
@@ -6816,7 +6909,7 @@ window.__ModuleLoader__.load({
6816
6909
  function makePluginInfo(kit) {
6817
6910
  const { t } = kit;
6818
6911
  const row = (label, value, href, hint) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("a", {
6819
- className: "lc-pi-row",
6912
+ className: "lc-pi-row group/pi",
6820
6913
  href,
6821
6914
  target: "_blank",
6822
6915
  rel: "noreferrer",
@@ -6824,7 +6917,7 @@ window.__ModuleLoader__.load({
6824
6917
  className: "lc-pi-label",
6825
6918
  children: label
6826
6919
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
6827
- className: "lc-pi-value",
6920
+ className: "lc-pi-value group-hover/pi:underline",
6828
6921
  title: hint,
6829
6922
  children: value
6830
6923
  })]
@@ -6832,7 +6925,7 @@ window.__ModuleLoader__.load({
6832
6925
  return function PluginInfo() {
6833
6926
  const [latest, setLatest] = (0, react.useState)(null);
6834
6927
  (0, react.useEffect)(() => {
6835
- if ("0.50.0".includes("-dev")) return;
6928
+ if ("0.51.0".includes("-dev")) return;
6836
6929
  let on = true;
6837
6930
  fetchLatestVersion().then((v) => {
6838
6931
  if (on && v) setLatest(v);
@@ -6841,22 +6934,22 @@ window.__ModuleLoader__.load({
6841
6934
  on = false;
6842
6935
  };
6843
6936
  }, []);
6844
- const update = latest !== null && isNewerVersion(latest, "0.50.0") ? latest : null;
6845
- const nameText = "dsh-context (v0.50.0)";
6937
+ const update = latest !== null && isNewerVersion(latest, "0.51.0") ? latest : null;
6938
+ const nameText = "dsh-context (v0.51.0)";
6846
6939
  const nameValue = [nameText];
6847
6940
  if (update) nameValue.push(/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6848
6941
  className: "lc-pi-update",
6849
6942
  children: "↑ v" + update
6850
6943
  }, "update"));
6851
6944
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6852
- className: "lc-card",
6945
+ className: "lc-card flex-1 min-w-[min(360px,100%)]",
6853
6946
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6854
6947
  className: "lc-card-title",
6855
6948
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6856
6949
  className: "lc-card-title-text",
6857
6950
  children: t("plugin.title")
6858
6951
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("a", {
6859
- className: "lc-card-sub lc-pi-hint",
6952
+ className: "lc-card-sub lc-pi-hint hover:underline",
6860
6953
  href: PLUGIN_REPO,
6861
6954
  target: "_blank",
6862
6955
  rel: "noreferrer",
@@ -6865,11 +6958,11 @@ window.__ModuleLoader__.load({
6865
6958
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6866
6959
  className: "lc-pi-grid",
6867
6960
  children: [
6868
- row(t("plugin.name"), nameValue, PLUGIN_REPO + "/releases", update !== null ? nameText + " ↑ v" + update : nameText),
6961
+ row(t("plugin.name"), nameValue, PLUGIN_REPO, update !== null ? nameText + " ↑ v" + update : nameText),
6869
6962
  row(t("plugin.github"), PLUGIN_REPO_SHORT, PLUGIN_REPO, PLUGIN_REPO_SHORT),
6870
6963
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
6871
6964
  type: "button",
6872
- className: "lc-pi-row lc-pi-row-btn",
6965
+ className: "lc-pi-row lc-pi-row-btn group/pi",
6873
6966
  onClick: () => {
6874
6967
  openPluginSettings();
6875
6968
  },
@@ -6877,7 +6970,7 @@ window.__ModuleLoader__.load({
6877
6970
  className: "lc-pi-label",
6878
6971
  children: t("plugin.settings")
6879
6972
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
6880
- className: "lc-pi-value",
6973
+ className: "lc-pi-value group-hover/pi:underline",
6881
6974
  title: t("plugin.settingsOpen"),
6882
6975
  children: t("plugin.settingsOpen")
6883
6976
  })]
@@ -6929,7 +7022,7 @@ window.__ModuleLoader__.load({
6929
7022
  className: "lc-modal-title",
6930
7023
  children: t("gate.title")
6931
7024
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
6932
- className: "lc-modal-close",
7025
+ className: "lc-modal-close hover:text-(--dsw-alias-label-primary) hover:bg-(--dsw-alias-bg-layer-2)",
6933
7026
  "aria-label": t("cmd.close"),
6934
7027
  onClick: close,
6935
7028
  children: "×"
@@ -6972,7 +7065,7 @@ window.__ModuleLoader__.load({
6972
7065
  className: "lc-gate-actions",
6973
7066
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
6974
7067
  type: "button",
6975
- className: "lc-gate-ok",
7068
+ className: "lc-gate-ok hover:brightness-110",
6976
7069
  onClick: close,
6977
7070
  children: t("gate.ok")
6978
7071
  })
@@ -6993,9 +7086,9 @@ window.__ModuleLoader__.load({
6993
7086
  */
6994
7087
  function BriefRow(props) {
6995
7088
  const inner = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
6996
- className: "lc-brief-tag",
7089
+ className: "lc-brief-tag group/tip",
6997
7090
  children: [props.tag, /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6998
- className: "lc-tip lc-brief-tip",
7091
+ className: "lc-tip lc-brief-tip group-hover/tip:opacity-100",
6999
7092
  role: "tooltip",
7000
7093
  children: props.tagTip
7001
7094
  })]
@@ -7011,7 +7104,7 @@ window.__ModuleLoader__.load({
7011
7104
  };
7012
7105
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
7013
7106
  type: "button",
7014
- className: "lc-brief-row lc-brief-row-link",
7107
+ className: "lc-brief-row lc-brief-row-link hover:bg-(--dsw-alias-interactive-bg-hover)",
7015
7108
  onClick: locate,
7016
7109
  children: inner
7017
7110
  });
@@ -7107,7 +7200,7 @@ window.__ModuleLoader__.load({
7107
7200
  const nodeChip = (n, onClick, grow = false) => {
7108
7201
  const { tag, text } = chipParts(n, convOf(n.seq));
7109
7202
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
7110
- className: "lc-brief-chip" + (grow ? " lc-brief-chip-grow" : "") + (onClick !== void 0 ? " lc-brief-chip-link" : ""),
7203
+ className: "lc-brief-chip" + (grow ? " lc-brief-chip-grow" : "") + (onClick !== void 0 ? " lc-brief-chip-link hover:bg-(--dsw-alias-interactive-bg-hover)" : ""),
7111
7204
  title: factTitle(tag, text) + hint,
7112
7205
  onClick,
7113
7206
  children: [
@@ -7298,116 +7391,312 @@ window.__ModuleLoader__.load({
7298
7391
  });
7299
7392
  }
7300
7393
  //#endregion
7301
- //#region src/client/cost.ts
7302
- /** The Flash-series rates (peak = 2× off-peak), per currency. */
7303
- const FLASH_RATES = {
7304
- usd: {
7305
- peak: {
7306
- hit: .006,
7307
- miss: .3,
7308
- out: 1.2
7309
- },
7310
- off: {
7311
- hit: .003,
7312
- miss: .15,
7313
- out: .6
7314
- }
7315
- },
7316
- cny: {
7317
- peak: {
7318
- hit: .04,
7319
- miss: 2,
7320
- out: 8
7321
- },
7322
- off: {
7323
- hit: .02,
7324
- miss: 1,
7325
- out: 4
7326
- }
7327
- }
7394
+ //#region src/shared/providers.ts
7395
+ /**
7396
+ * The provider-id seam between dsh request envelopes and the models.dev
7397
+ * registry: client/cost.ts resolves price-book branches through it, and
7398
+ * host/fold.ts uses the DeepSeek resolution to split the session-cost totals
7399
+ * into peak/off-peak periods. Only the renames live here — an id absent
7400
+ * from the table passes through verbatim.
7401
+ */
7402
+ const MODELS_DEV_PROVIDER_IDS = {
7403
+ "deepseek-official": "deepseek",
7404
+ "kimi-coding": "moonshotai",
7405
+ "minimax-cn": "minimax",
7406
+ "zai-coding-cn": "zhipuai"
7328
7407
  };
7329
- /** The Pro-series rates (deepseek-v4-pro; peak = 2× off-peak), per currency. */
7330
- const PRO_RATES = {
7331
- usd: {
7332
- peak: {
7333
- hit: .044,
7334
- miss: 1.32,
7335
- out: 3.96
7336
- },
7337
- off: {
7338
- hit: .022,
7339
- miss: .66,
7340
- out: 1.98
7341
- }
7342
- },
7343
- cny: {
7344
- peak: {
7345
- hit: .3,
7346
- miss: 9,
7347
- out: 27
7348
- },
7349
- off: {
7350
- hit: .15,
7351
- miss: 4.5,
7352
- out: 13.5
7353
- }
7408
+ /** The models.dev provider id that prices a dsh provider (identity for unmapped ids). */
7409
+ function modelsDevProviderOf(dshProviderId) {
7410
+ return MODELS_DEV_PROVIDER_IDS[dshProviderId] ?? dshProviderId;
7411
+ }
7412
+ /** Whether a dsh provider prices through DeepSeek's period-based list (peak / half-price off-peak). */
7413
+ function isDeepSeekProvider(dshProviderId) {
7414
+ return modelsDevProviderOf(dshProviderId) === "deepseek";
7415
+ }
7416
+ //#endregion
7417
+ //#region src/client/cost.ts
7418
+ /** 1 CNY = 0.15 USD — the fixed CNY-display conversion rate. */
7419
+ const USD_PER_CNY = .15;
7420
+ /** Off-peak DeepSeek rates are half the peak rates (the official list). */
7421
+ const OFF_PEAK_FACTOR = .5;
7422
+ /** A USD amount in the display currency (CNY divides the fixed rate). */
7423
+ function toCurrency(usd, currency) {
7424
+ return currency === "cny" ? usd / USD_PER_CNY : usd;
7425
+ }
7426
+ /** One rate triple at the half-price off-peak rate (the tooltip's `peak | off` pair). */
7427
+ function offPeakOf(rate) {
7428
+ return {
7429
+ hit: rate.hit * OFF_PEAK_FACTOR,
7430
+ miss: rate.miss * OFF_PEAK_FACTOR,
7431
+ write: rate.write * OFF_PEAK_FACTOR,
7432
+ out: rate.out * OFF_PEAK_FACTOR
7433
+ };
7434
+ }
7435
+ /** One book branch (a provider's models), as far as runtime can prove it. */
7436
+ function branchOf(book, id) {
7437
+ const v = book[id];
7438
+ return v !== null && typeof v === "object" ? v : null;
7439
+ }
7440
+ /**
7441
+ * One branch's model id → rates, as far as runtime can prove it: exact own
7442
+ * key first (the book is untrusted wire data), then case-insensitively, then
7443
+ * by id SUFFIX — dsh spells some models short (`k3`) where the registry
7444
+ * namespaces them (`kimi-k3`). Several suffix candidates (e.g. `k3` vs a
7445
+ * hypothetical `other-k3`) are ambiguous and price nothing.
7446
+ */
7447
+ function lookup(models, model) {
7448
+ if (Object.hasOwn(models, model)) return models[model];
7449
+ const m = model.toLowerCase();
7450
+ let found = null;
7451
+ let seen = null;
7452
+ for (const id in models) {
7453
+ const lower = id.toLowerCase();
7454
+ if (lower !== m && !lower.endsWith("-" + m)) continue;
7455
+ if (seen !== null && seen !== lower) return null;
7456
+ seen = lower;
7457
+ found = models[id];
7354
7458
  }
7355
- };
7356
- const PRICES = {
7357
- usd: {
7358
- flash: FLASH_RATES.usd,
7359
- pro: PRO_RATES.usd
7360
- },
7361
- cny: {
7362
- flash: FLASH_RATES.cny,
7363
- pro: PRO_RATES.cny
7459
+ return found;
7460
+ }
7461
+ /**
7462
+ * The book's rates for one folded (provider, model) bucket, or null when
7463
+ * the book cannot price it: the dsh provider id resolves through
7464
+ * modelsDevProviderOf (unmapped ids pass through) and prices by model id —
7465
+ * exact, case-insensitive, or suffix; a provider the book does not carry
7466
+ * falls back to a cross-provider scan, priced only when exactly one branch
7467
+ * carries the model id.
7468
+ */
7469
+ function priceOf(prices, provider, model) {
7470
+ if (prices === null || prices === void 0) return null;
7471
+ const direct = branchOf(prices, modelsDevProviderOf(provider));
7472
+ if (direct !== null) return lookup(direct, model);
7473
+ let found = null;
7474
+ for (const models of Object.values(prices)) {
7475
+ const rate = lookup(models, model);
7476
+ if (rate === null) continue;
7477
+ if (found !== null) return null;
7478
+ found = rate;
7364
7479
  }
7365
- };
7480
+ return found;
7481
+ }
7366
7482
  /**
7367
7483
  * Price the session's cumulative billed-token totals. Cache reads bill at
7368
- * the hit rate; uncached input AND cache writes bill at the miss rate;
7369
- * output (reasoning included) bills at the out rate. Null when nothing was
7370
- * priced (no DeepSeek V4 usage folded yet), so the cell can show a dash.
7371
- */
7372
- function estimateSessionCost(usage, currency) {
7373
- if (usage === null || usage === void 0) return null;
7484
+ * the hit rate, uncached input at the miss rate, cache writes at the write
7485
+ * rate, output (reasoning included) at the out rate; `off` buckets (the
7486
+ * Host splits DeepSeek's period-based list at fold time) price at half.
7487
+ * Null when nothing was priced (no usage folded, no book yet, or no model
7488
+ * the book prices), so the cell can show a dash.
7489
+ */
7490
+ function estimateSessionCost(usage, prices, currency) {
7491
+ if (usage === null || usage === void 0 || prices === null || prices === void 0) return null;
7374
7492
  let total = 0;
7375
7493
  let any = false;
7376
- for (const family of ["flash", "pro"]) {
7377
- const fam = usage[family];
7378
- if (fam === void 0) continue;
7379
- for (const period of ["peak", "off"]) {
7380
- const b = fam[period];
7381
- if (b === void 0) continue;
7382
- const p = PRICES[currency][family][period];
7383
- total += (numOf(b.cacheRead) * p.hit + (numOf(b.uncached) + numOf(b.cacheWrite)) * p.miss + numOf(b.output) * p.out) / 1e6;
7384
- any = true;
7494
+ for (const provider of Object.keys(usage)) {
7495
+ const models = asRecord(usage[provider]);
7496
+ if (models === null) continue;
7497
+ const offPeak = isDeepSeekProvider(provider);
7498
+ for (const model of Object.keys(models)) {
7499
+ const rate = priceOf(prices, provider, model);
7500
+ const periods = asRecord(models[model]);
7501
+ if (rate === null || periods === null) continue;
7502
+ for (const period of ["peak", "off"]) {
7503
+ const bucket = asRecord(periods[period]);
7504
+ if (bucket === null) continue;
7505
+ const price = (numOf(bucket.cacheRead) * rate.hit + numOf(bucket.uncached) * rate.miss + numOf(bucket.cacheWrite) * rate.write + numOf(bucket.output) * rate.out) / 1e6;
7506
+ total += offPeak && period === "off" ? price * OFF_PEAK_FACTOR : price;
7507
+ any = true;
7508
+ }
7385
7509
  }
7386
7510
  }
7387
- return any ? total : null;
7511
+ return any ? toCurrency(total, currency) : null;
7388
7512
  }
7389
7513
  function formatCost(amount, currency) {
7390
7514
  return (currency === "cny" ? "¥" : "$") + (amount >= 1 ? amount.toFixed(2) : amount.toPrecision(2));
7391
7515
  }
7392
- /**
7393
- * All priced model families for one currency, in display order, with their
7394
- * peak/off-peak rate triples — the raw material of the stats-board tooltip's
7395
- * price list. The numbers stay hardcoded in PRICES above; this function only
7396
- * reshapes the table for display, so what the tooltip prints can never drift
7397
- * from the math that prices the session.
7398
- */
7399
- function sessionPrices(currency) {
7400
- return ["flash", "pro"].map((id) => ({
7401
- family: id === "flash" ? "deepseek-flash / deepseek-v4-flash" : "deepseek-v4-pro",
7402
- peak: PRICES[currency][id].peak,
7403
- off: PRICES[currency][id].off
7404
- }));
7405
- }
7406
7516
  /** Price-list figure: the same money format as formatCost, trailing zeros trimmed (¥3.00 → ¥3, $0.0070 → $0.007). */
7407
7517
  function formatPriceRate(amount, currency) {
7408
7518
  return formatCost(amount, currency).replace(/0+$/, "").replace(/\.$/, "");
7409
7519
  }
7410
7520
  //#endregion
7521
+ //#region node_modules/.pnpm/@opencode-ai+models@0.0.72/node_modules/@opencode-ai/models/dist/error.js
7522
+ /**
7523
+ * The only error thrown by the models.dev client.
7524
+ *
7525
+ * - `Transport` — the fetch itself failed (network, DNS, abort). `cause` is the underlying error.
7526
+ * - `UnexpectedStatus` — non-2xx response. `cause` is `{ status: number }`.
7527
+ * - `MalformedResponse` — the body was empty or not valid JSON. `cause` is the parse error, if any.
7528
+ */
7529
+ var ModelsDevError = class extends Error {
7530
+ reason;
7531
+ name = "ModelsDevError";
7532
+ constructor(reason, options) {
7533
+ super(reason, options);
7534
+ this.reason = reason;
7535
+ }
7536
+ };
7537
+ //#endregion
7538
+ //#region node_modules/.pnpm/@opencode-ai+models@0.0.72/node_modules/@opencode-ai/models/dist/client.js
7539
+ /**
7540
+ * Creates a stateless models.dev client. Every method performs exactly one
7541
+ * `GET` and nothing is ever cached — callers who want caching should wrap
7542
+ * calls with their own policy. For a no-network alternative, see the
7543
+ * `@opencode-ai/models/snapshot` entrypoint.
7544
+ */
7545
+ function make(options = {}) {
7546
+ const baseUrl = options.baseUrl ?? "https://models.dev";
7547
+ const base = baseUrl.endsWith("/") ? baseUrl : baseUrl + "/";
7548
+ const request = async (path, requestOptions) => {
7549
+ const fetch = options.fetch ?? globalThis.fetch;
7550
+ const headers = new Headers();
7551
+ for (const [key, value] of new Headers(options.headers)) headers.set(key, value);
7552
+ for (const [key, value] of new Headers(requestOptions?.headers)) headers.set(key, value);
7553
+ let response;
7554
+ try {
7555
+ response = await fetch(new URL(path, base), {
7556
+ method: "GET",
7557
+ headers,
7558
+ signal: requestOptions?.signal
7559
+ });
7560
+ } catch (cause) {
7561
+ throw new ModelsDevError("Transport", { cause });
7562
+ }
7563
+ if (!response.ok) {
7564
+ try {
7565
+ await response.body?.cancel();
7566
+ } catch {}
7567
+ throw new ModelsDevError("UnexpectedStatus", { cause: { status: response.status } });
7568
+ }
7569
+ let text;
7570
+ try {
7571
+ text = await response.text();
7572
+ } catch (cause) {
7573
+ throw new ModelsDevError("Transport", { cause });
7574
+ }
7575
+ if (text === "") throw new ModelsDevError("MalformedResponse");
7576
+ try {
7577
+ return JSON.parse(text);
7578
+ } catch (cause) {
7579
+ throw new ModelsDevError("MalformedResponse", { cause });
7580
+ }
7581
+ };
7582
+ return {
7583
+ /** All providers with their models, pricing, and limits (`/api.json`). */
7584
+ providers: (requestOptions) => request("api.json", requestOptions),
7585
+ /** Provider-agnostic model metadata (`/models.json`). */
7586
+ models: (requestOptions) => request("models.json", requestOptions),
7587
+ /** Providers and model metadata in a single request (`/catalog.json`). */
7588
+ catalog: (requestOptions) => request("catalog.json", requestOptions)
7589
+ };
7590
+ }
7591
+ //#endregion
7592
+ //#region src/client/modelPrices.ts
7593
+ /**
7594
+ * The client's model-price book (client/cost.ts prices from it): the
7595
+ * models.dev registry, fetched through the official @opencode-ai/models
7596
+ * SDK. The registry payload is untrusted wire input, so `pricesBookOf`
7597
+ * re-proves every field at the boundary — a non-conforming provider/model/
7598
+ * cost entry drops whole. The book keeps EVERY provider that prices (keyed
7599
+ * by the registry's own provider id), so a dsh provider id outside the
7600
+ * rename table still prices by direct passthrough. One fetch per page load,
7601
+ * kicked on first subscribe; a failure degrades to a visible state the cost
7602
+ * cell notes, with a backed-off automatic retry — never a spinner, and
7603
+ * never an unhandled rejection.
7604
+ */
7605
+ /** One finite non-negative registry figure, or null. */
7606
+ function rateOf(value) {
7607
+ return typeof value === "number" && Number.isFinite(value) && value >= 0 ? value : null;
7608
+ }
7609
+ /**
7610
+ * Extract the whole registry's per-model USD rates from a delivered
7611
+ * providers payload (`/api.json`), keyed by the registry's provider ids.
7612
+ * Any shape failure skips just that entry; a payload that is not a record
7613
+ * at all returns null (the store treats it as a failed fetch and retries).
7614
+ */
7615
+ function pricesBookOf(value) {
7616
+ const data = asRecord(value);
7617
+ if (data === null || Array.isArray(data)) return null;
7618
+ const book = {};
7619
+ for (const providerId of Object.keys(data)) {
7620
+ const provider = asRecord(data[providerId]);
7621
+ const modelList = provider !== null ? asRecord(provider.models) : null;
7622
+ if (modelList === null) continue;
7623
+ const models = {};
7624
+ for (const id of Object.keys(modelList)) {
7625
+ const model = asRecord(modelList[id]);
7626
+ const cost = model !== null ? asRecord(model.cost) : null;
7627
+ if (cost === null) continue;
7628
+ const miss = rateOf(cost.input);
7629
+ const out = rateOf(cost.output);
7630
+ if (miss === null || out === null) continue;
7631
+ models[id] = {
7632
+ hit: rateOf(cost.cache_read) ?? miss,
7633
+ miss,
7634
+ write: rateOf(cost.cache_write) ?? miss,
7635
+ out
7636
+ };
7637
+ }
7638
+ if (Object.keys(models).length > 0) book[providerId] = models;
7639
+ }
7640
+ return book;
7641
+ }
7642
+ const defaultLoader = () => make().providers();
7643
+ /** The retry backoff base; each consecutive failure doubles the wait, capped at 3 doublings. */
7644
+ const RETRY_BASE_MS = 3e4;
7645
+ let loader = defaultLoader;
7646
+ let snap = {
7647
+ prices: null,
7648
+ failed: false
7649
+ };
7650
+ let inFlight = false;
7651
+ let failures = 0;
7652
+ let timer = null;
7653
+ const listeners = /* @__PURE__ */ new Set();
7654
+ function fail() {
7655
+ snap = {
7656
+ ...snap,
7657
+ failed: true
7658
+ };
7659
+ failures++;
7660
+ timer = setTimeout(() => {
7661
+ timer = null;
7662
+ fire();
7663
+ }, RETRY_BASE_MS * 2 ** Math.min(failures - 1, 3));
7664
+ }
7665
+ async function fire() {
7666
+ inFlight = true;
7667
+ try {
7668
+ const book = pricesBookOf(await loader());
7669
+ if (book !== null) {
7670
+ snap = {
7671
+ prices: book,
7672
+ failed: false
7673
+ };
7674
+ failures = 0;
7675
+ } else fail();
7676
+ } catch {
7677
+ fail();
7678
+ }
7679
+ inFlight = false;
7680
+ for (const fn of listeners) fn();
7681
+ }
7682
+ function kick() {
7683
+ if (snap.prices !== null || inFlight || timer !== null) return;
7684
+ fire();
7685
+ }
7686
+ /** The useSyncExternalStore seam: subscribing also kicks the first fetch. */
7687
+ const subscribeModelPrices = (fn) => {
7688
+ listeners.add(fn);
7689
+ kick();
7690
+ return () => {
7691
+ listeners.delete(fn);
7692
+ };
7693
+ };
7694
+ const getModelPricesSnap = () => snap;
7695
+ /** The stats board's read of the price book (null until the fetch lands). */
7696
+ function useModelPrices() {
7697
+ return (0, react.useSyncExternalStore)(subscribeModelPrices, getModelPricesSnap);
7698
+ }
7699
+ //#endregion
7411
7700
  //#region src/client/components/statsContext.tsx
7412
7701
  /**
7413
7702
  * The Context card: what the session's context IS and how it evolved — a
@@ -7421,10 +7710,12 @@ window.__ModuleLoader__.load({
7421
7710
  * formula as the harness chat stats line under the composer, shown with one
7422
7711
  * decimal — and dashes until a provider reports usage. The cost cell prices
7423
7712
  * the host-folded cumulative billed totals (complete session log, never
7424
- * trimmed) at the hardcoded DeepSeek V4 list prices (cost.ts) in the locale's
7713
+ * trimmed) from the models.dev price book (modelPrices.ts) in the locale's
7425
7714
  * currency; its hover bubble (a '?' marker + styled DOM tip) explains the
7426
- * whole-session estimate and lists the per-1M-token table straight from
7427
- * cost.ts, so printed rates can never drift from the math.
7715
+ * whole-session estimate and lists the per-1M-token rates of the models this
7716
+ * session actually billed, straight from the same book (cost.ts), so printed
7717
+ * rates can never drift from the math. A book that has not loaded (or
7718
+ * failed) dashes the cell and notes the outage.
7428
7719
  *
7429
7720
  * The counts arrive precomputed: the split-generation wire head carries them
7430
7721
  * (shared/types.ts `TimelineCounts` — computed over the retained records),
@@ -7432,6 +7723,36 @@ window.__ModuleLoader__.load({
7432
7723
  * (`countsOfRecords`). The card itself never touches the collections.
7433
7724
  */
7434
7725
  /**
7726
+ * The rate rows for the models this session actually billed — the usage
7727
+ * keys priced against the book, in fold order. Hostile branches skip;
7728
+ * unpriced models drop (their buckets simply do not contribute). The label
7729
+ * carries the provider only when the session billed more than one; a model
7730
+ * with an off-peak bucket (DeepSeek's period-based list) shows the
7731
+ * peak | off-peak pair.
7732
+ */
7733
+ function priceRowsOf(usage, prices) {
7734
+ if (usage === void 0 || prices === null) return [];
7735
+ const rows = [];
7736
+ const multi = Object.keys(usage).length > 1;
7737
+ for (const provider of Object.keys(usage)) {
7738
+ const models = asRecord(usage[provider]);
7739
+ if (models === null) continue;
7740
+ for (const model of Object.keys(models)) {
7741
+ const rate = priceOf(prices, provider, model);
7742
+ if (rate === null) continue;
7743
+ const periods = asRecord(models[model]);
7744
+ const off = isDeepSeekProvider(provider) && periods !== null && periods.off !== void 0 ? offPeakOf(rate) : void 0;
7745
+ rows.push({
7746
+ key: provider + "/" + model,
7747
+ label: multi && provider !== "" ? `${model} · ${provider}` : model,
7748
+ rate,
7749
+ ...off !== void 0 ? { offRate: off } : {}
7750
+ });
7751
+ }
7752
+ }
7753
+ return rows;
7754
+ }
7755
+ /**
7435
7756
  * The inline generation's counter derivation — the exact tally the card ran
7436
7757
  * over the served collections before the split (distinct turn values, record
7437
7758
  * count, per-kind event tallies). The host's split-generation counts match
@@ -7458,49 +7779,67 @@ window.__ModuleLoader__.load({
7458
7779
  const { t, fmt } = kit;
7459
7780
  return function StatsContext(props) {
7460
7781
  const currency = props.locale === "zh" ? "cny" : "usd";
7461
- const cost = estimateSessionCost(props.cost, currency);
7462
- const fmtRate = (n) => formatPriceRate(n, currency);
7463
- const costTip = [t("stats.costTip"), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
7464
- className: "lc-stat-tip-prices",
7465
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
7466
- className: "lc-stat-tip-head",
7467
- children: t("stats.costPriceHead")
7468
- }), sessionPrices(currency).map((r) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
7469
- className: "lc-stat-tip-row",
7470
- children: [
7471
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("b", {
7472
- className: "lc-stat-tip-model",
7473
- children: r.family
7474
- }),
7475
- " ",
7476
- t("stats.costHit"),
7477
- " ",
7478
- fmtRate(r.peak.hit),
7479
- "/",
7480
- fmtRate(r.off.hit),
7481
- " · ",
7482
- t("stats.costMiss"),
7483
- " ",
7484
- fmtRate(r.peak.miss),
7485
- "/",
7486
- fmtRate(r.off.miss),
7487
- " · ",
7488
- t("stats.costOut"),
7489
- " ",
7490
- fmtRate(r.peak.out),
7491
- "/",
7492
- fmtRate(r.off.out)
7493
- ]
7494
- }, r.family))]
7495
- }, "prices")];
7782
+ const { prices, failed } = useModelPrices();
7783
+ const cost = estimateSessionCost(props.cost, prices, currency);
7784
+ const fmtRate = (usd) => formatPriceRate(toCurrency(usd, currency), currency);
7785
+ const rows = priceRowsOf(props.cost, prices);
7786
+ const deepseek = props.cost !== void 0 && Object.keys(props.cost).some((p) => isDeepSeekProvider(p));
7787
+ const anyPair = rows.some((r) => r.offRate !== void 0);
7788
+ const unpriced = rows.length === 0 && props.cost !== void 0 && Object.keys(props.cost).length > 0 && (failed || prices !== null);
7789
+ const costTip = [
7790
+ t("stats.costTip") + (deepseek ? " " + t("stats.costTipDeepseek") : ""),
7791
+ rows.length > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
7792
+ className: "lc-stat-tip-prices",
7793
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
7794
+ className: "lc-stat-tip-head",
7795
+ children: anyPair ? t("stats.costPriceHeadPair") : t("stats.costPriceHead")
7796
+ }), rows.map((r) => {
7797
+ const cells = [
7798
+ [
7799
+ t("stats.costHit"),
7800
+ r.rate.hit,
7801
+ r.offRate?.hit
7802
+ ],
7803
+ [
7804
+ t("stats.costMiss"),
7805
+ r.rate.miss,
7806
+ r.offRate?.miss
7807
+ ],
7808
+ [
7809
+ t("stats.costWrite"),
7810
+ r.rate.write,
7811
+ r.offRate?.write
7812
+ ],
7813
+ [
7814
+ t("stats.costOut"),
7815
+ r.rate.out,
7816
+ r.offRate?.out
7817
+ ]
7818
+ ];
7819
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
7820
+ className: "lc-stat-tip-row",
7821
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("b", {
7822
+ className: "lc-stat-tip-model",
7823
+ children: r.label
7824
+ }), cells.map(([name, peak, off]) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [
7825
+ " · ",
7826
+ name,
7827
+ " ",
7828
+ off === void 0 ? fmtRate(peak) : `${fmtRate(peak)}|${fmtRate(off)}`
7829
+ ] }, name))]
7830
+ }, r.key);
7831
+ })]
7832
+ }, "prices") : null,
7833
+ unpriced ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("stats.costUnavailable") }, "unavailable") : null
7834
+ ];
7496
7835
  const hit = props.usage === null ? null : cacheHitPercent(numOf(props.usage.cacheReadTokens), numOf(props.usage.uncachedInputTokens) + numOf(props.usage.cacheReadTokens) + numOf(props.usage.cacheWriteTokens), 1);
7497
7836
  const cell = (label, value, tip) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
7498
- className: "lc-stat" + (tip === void 0 ? "" : " lc-stat-tipped"),
7837
+ className: "lc-stat" + (tip === void 0 ? "" : " lc-stat-tipped group/tip"),
7499
7838
  children: [
7500
7839
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
7501
7840
  className: "lc-stat-label",
7502
7841
  children: [label, tip !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("i", {
7503
- className: "lc-stat-q",
7842
+ className: "lc-stat-q group-hover/tip:text-(--dsw-alias-label-primary) group-hover/tip:border-(--dsw-alias-label-primary)",
7504
7843
  "aria-hidden": "true",
7505
7844
  children: "?"
7506
7845
  })]
@@ -7510,14 +7849,14 @@ window.__ModuleLoader__.load({
7510
7849
  children: typeof value === "number" ? fmt(value) : value
7511
7850
  }),
7512
7851
  tip !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
7513
- className: "lc-tip lc-stat-tip",
7852
+ className: "lc-tip lc-stat-tip group-hover/tip:opacity-100",
7514
7853
  role: "tooltip",
7515
7854
  children: tip
7516
7855
  })
7517
7856
  ]
7518
7857
  });
7519
7858
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
7520
- className: "lc-card lc-col-stats",
7859
+ className: "lc-card lc-col-stats flex-1 min-w-[min(360px,100%)]",
7521
7860
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
7522
7861
  className: "lc-card-title",
7523
7862
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
@@ -7525,7 +7864,7 @@ window.__ModuleLoader__.load({
7525
7864
  children: t("stats.title")
7526
7865
  })
7527
7866
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
7528
- className: "lc-stats",
7867
+ className: "lc-stats grid grid-cols-[repeat(auto-fit,minmax(108px,1fr))] gap-1.5",
7529
7868
  children: [
7530
7869
  cell(t("stats.turns"), props.counts.turns),
7531
7870
  cell(t("stats.steps"), props.counts.steps),
@@ -7553,7 +7892,7 @@ window.__ModuleLoader__.load({
7553
7892
  function makeSliceList(kit) {
7554
7893
  return function SliceList(props) {
7555
7894
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
7556
- className: "lc-sl",
7895
+ className: "lc-sl flex-auto @max-[240px]/lc-card:basis-full",
7557
7896
  onMouseLeave: () => {
7558
7897
  if (props.onHoverKey !== void 0) props.onHoverKey(null);
7559
7898
  },
@@ -7610,12 +7949,12 @@ window.__ModuleLoader__.load({
7610
7949
  * row numbers stay true.
7611
7950
  */
7612
7951
  const COLOR = {
7613
- ttft: "#3b82f6",
7614
- reasoning: "#8b5cf6",
7615
- text: "#ec4899",
7616
- toolarg: "#f59e0b",
7617
- tools: "#14b8a6",
7618
- other: "#94a3b8"
7952
+ ttft: "var(--color-blue-500)",
7953
+ reasoning: "var(--color-violet-500)",
7954
+ text: "var(--color-pink-500)",
7955
+ toolarg: "var(--color-amber-500)",
7956
+ tools: "var(--color-teal-500)",
7957
+ other: "var(--color-slate-400)"
7619
7958
  };
7620
7959
  function makeStatsTiming(kit, Donut) {
7621
7960
  const { t, fmt, fmtDuration, fmtShare } = kit;
@@ -7731,7 +8070,7 @@ window.__ModuleLoader__.load({
7731
8070
  ].filter((row) => !row.dim);
7732
8071
  }
7733
8072
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
7734
- className: "lc-card lc-col-stats lc-col-donut",
8073
+ className: "lc-card lc-col-stats lc-col-donut flex-1 min-w-[min(360px,100%)]",
7735
8074
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
7736
8075
  className: "lc-card-title",
7737
8076
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
@@ -7742,7 +8081,7 @@ window.__ModuleLoader__.load({
7742
8081
  className: "lc-empty",
7743
8082
  children: t("timing.empty")
7744
8083
  }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
7745
- className: "lc-donut-row",
8084
+ className: "lc-donut-row flex items-center justify-start gap-3 min-w-0 @max-[320px]/lc-card:gap-2 @max-[240px]/lc-card:flex-wrap",
7746
8085
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Donut, {
7747
8086
  segments,
7748
8087
  size: 96,
@@ -7797,7 +8136,7 @@ window.__ModuleLoader__.load({
7797
8136
  count: p.key === "output" ? `${fmt(p.value)} · ${t("tokens.outputNote")}` : "≈" + fmt(p.value)
7798
8137
  }));
7799
8138
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
7800
- className: "lc-card lc-col-stats lc-col-donut",
8139
+ className: "lc-card lc-col-stats lc-col-donut flex-1 min-w-[min(360px,100%)]",
7801
8140
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
7802
8141
  className: "lc-card-title",
7803
8142
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
@@ -7805,7 +8144,7 @@ window.__ModuleLoader__.load({
7805
8144
  children: t("tokens.title")
7806
8145
  })
7807
8146
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
7808
- className: "lc-donut-row",
8147
+ className: "lc-donut-row flex items-center justify-start gap-3 min-w-0 @max-[320px]/lc-card:gap-2 @max-[240px]/lc-card:flex-wrap",
7809
8148
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Donut, {
7810
8149
  segments: shown,
7811
8150
  size: 96,
@@ -7885,7 +8224,7 @@ window.__ModuleLoader__.load({
7885
8224
  const BAR_W = 14;
7886
8225
  const BAR_GAP = 2;
7887
8226
  const STAGGER_CAP = 20;
7888
- const TURN_FILLS = ["rgba(128,128,128,0.12)", "rgba(128,128,128,0.26)"];
8227
+ const TURN_FILLS = ["color-mix(in srgb, var(--color-neutral-500) 12%, transparent)", "color-mix(in srgb, var(--color-neutral-500) 26%, transparent)"];
7889
8228
  const LABEL_OVERHANG = 48;
7890
8229
  const LABEL_GAP = 2;
7891
8230
  const LABEL_FONT = 10;
@@ -7932,7 +8271,7 @@ window.__ModuleLoader__.load({
7932
8271
  const diverge = props.upPx !== void 0 && props.downPx !== void 0 && props.deltaScale !== void 0;
7933
8272
  const enterStyle = { "--lc-i": Math.min(props.enterIndex, STAGGER_CAP) };
7934
8273
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
7935
- className: "lc-bar" + (props.selected ? " lc-bar-selected" : "") + (props.hovered ? " lc-bar-hovered" : "") + (props.inTurn ? " lc-bar-in-turn" : ""),
8274
+ className: "lc-bar hover:bg-(--dsw-alias-bg-layer-2)" + (props.selected ? " lc-bar-selected" : "") + (props.hovered ? " lc-bar-hovered" : "") + (props.inTurn ? " lc-bar-in-turn" : ""),
7936
8275
  "data-seq": req.seq,
7937
8276
  style: { width: `${BAR_W}px` },
7938
8277
  onClick: () => {
@@ -7946,7 +8285,7 @@ window.__ModuleLoader__.load({
7946
8285
  title: "✂ " + (markerAt !== null ? markerAt + " — " : "") + eventLabel(marker),
7947
8286
  children: "✂"
7948
8287
  }) : null, diverge ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
7949
- className: "lc-bar-up",
8288
+ className: "lc-bar-up animate-lc-bar-in motion-reduce:animate-none",
7950
8289
  style: {
7951
8290
  bottom: `${props.downPx}px`,
7952
8291
  ...enterStyle
@@ -7964,7 +8303,7 @@ window.__ModuleLoader__.load({
7964
8303
  }, c.key);
7965
8304
  })
7966
8305
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
7967
- className: "lc-bar-down",
8306
+ className: "lc-bar-down animate-lc-bar-in motion-reduce:animate-none",
7968
8307
  style: {
7969
8308
  top: `${props.upPx}px`,
7970
8309
  ...enterStyle
@@ -7982,7 +8321,7 @@ window.__ModuleLoader__.load({
7982
8321
  }, c.key);
7983
8322
  })
7984
8323
  })] }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
7985
- className: "lc-bar-stack",
8324
+ className: "lc-bar-stack animate-lc-bar-in motion-reduce:animate-none",
7986
8325
  style: enterStyle,
7987
8326
  children: CATS.map((c) => {
7988
8327
  const v = req[c.key] || 0;
@@ -8461,7 +8800,7 @@ window.__ModuleLoader__.load({
8461
8800
  const PluginInfo = makePluginInfo(kit);
8462
8801
  const UpgradeGate = makeUpgradeGate(kit);
8463
8802
  const DetailNote = makeDetailNote(kit);
8464
- const ContextBrowser = makeContextBrowser(kit, StackedBar);
8803
+ const ContextBrowser = makeContextBrowser(kit, StackedBar, settings);
8465
8804
  const AgentGraph = makeAgentGraph(ctx, kit);
8466
8805
  const ErrorBoundary = makeErrorBoundary(t);
8467
8806
  function ContextViewBody(props) {
@@ -8829,17 +9168,17 @@ window.__ModuleLoader__.load({
8829
9168
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
8830
9169
  className: "lc-cols lc-cols-main",
8831
9170
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
8832
- className: "lc-col",
9171
+ className: "lc-col flex-1 min-w-[min(360px,100%)]",
8833
9172
  children: [compositionCard, trendCard]
8834
9173
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
8835
- className: "lc-col lc-col-browser",
9174
+ className: "lc-col lc-col-browser flex-1 min-w-[min(360px,100%)]",
8836
9175
  children: browserCard
8837
9176
  })]
8838
9177
  }),
8839
9178
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
8840
9179
  className: "lc-cols",
8841
9180
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
8842
- className: "lc-card lc-col",
9181
+ className: "lc-card lc-col flex-1 min-w-[min(360px,100%)]",
8843
9182
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
8844
9183
  className: "lc-card-title",
8845
9184
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
@@ -8933,7 +9272,7 @@ window.__ModuleLoader__.load({
8933
9272
  width: "16",
8934
9273
  height: "16",
8935
9274
  viewBox: "0 0 16 16",
8936
- fill: "none",
9275
+ className: "fill-none",
8937
9276
  "aria-hidden": "true",
8938
9277
  children: [
8939
9278
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("rect", {
@@ -8942,7 +9281,7 @@ window.__ModuleLoader__.load({
8942
9281
  width: "12",
8943
9282
  height: "2",
8944
9283
  rx: "1",
8945
- fill: "currentColor"
9284
+ className: "fill-current"
8946
9285
  }),
8947
9286
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("rect", {
8948
9287
  x: "2",
@@ -8950,7 +9289,7 @@ window.__ModuleLoader__.load({
8950
9289
  width: "8.5",
8951
9290
  height: "2",
8952
9291
  rx: "1",
8953
- fill: "currentColor"
9292
+ className: "fill-current"
8954
9293
  }),
8955
9294
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("rect", {
8956
9295
  x: "2",
@@ -8958,7 +9297,7 @@ window.__ModuleLoader__.load({
8958
9297
  width: "5.5",
8959
9298
  height: "2",
8960
9299
  rx: "1",
8961
- fill: "currentColor"
9300
+ className: "fill-current"
8962
9301
  })
8963
9302
  ]
8964
9303
  });
@@ -8979,7 +9318,7 @@ window.__ModuleLoader__.load({
8979
9318
  side: "bottom",
8980
9319
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
8981
9320
  type: "button",
8982
- className: "lc-jump",
9321
+ className: "lc-jump hover:bg-(--dsw-alias-interactive-bg-hover) hover:text-(--dsw-alias-label-secondary)",
8983
9322
  "aria-label": t("jump.title"),
8984
9323
  onClick: jump,
8985
9324
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(JumpIcon, {})
@@ -9185,8 +9524,19 @@ window.__ModuleLoader__.load({
9185
9524
  };
9186
9525
  }
9187
9526
  //#endregion
9527
+ //#region \0dsh-global-css:/home/runner/work/dsh-context/dsh-context/src/client/styles/tailwind.css.mjs
9528
+ const css$14 = "/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}:root,:host{--spacing:4px;--color-red-500:oklch(63.7% .237 25.331);--color-amber-500:oklch(76.9% .188 70.08);--color-green-500:oklch(72.3% .219 149.579);--color-teal-500:oklch(70.4% .14 182.503);--color-blue-500:oklch(62.3% .214 259.815);--color-indigo-500:oklch(58.5% .233 277.117);--color-violet-500:oklch(60.6% .25 292.717);--color-purple-500:oklch(62.7% .265 303.9);--color-pink-500:oklch(65.6% .241 354.308);--color-slate-400:oklch(70.4% .04 256.788);--color-neutral-500:oklch(55.6% 0 none);--animate-lc-donut-in:lc-donut-in .45s cubic-bezier(.4, 0, .2, 1) calc(var(--lc-i,0) * 50ms) backwards;--animate-lc-stacked-in:lc-stacked-in .4s cubic-bezier(.4, 0, .2, 1) calc(var(--lc-i,0) * 40ms) backwards;--animate-lc-bar-in:lc-bar-in .35s cubic-bezier(.4, 0, .2, 1) calc(var(--lc-i,0) * 15ms) backwards;--animate-lc-agent-flow:lc-agent-flow .9s linear infinite;--animate-lc-agent-glow:lc-agent-glow 1.8s ease-in-out infinite}.collapse{visibility:collapse}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.container{width:100%}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.table{display:table}.min-w-0{min-width:0}.min-w-\\[min\\(360px\\,100\\%\\)\\]{min-width:min(360px,100%)}.flex-1{flex:1}.flex-auto{flex:auto}.shrink{flex-shrink:1}.grow{flex-grow:1}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-lc-agent-flow{animation:var(--animate-lc-agent-flow)}.animate-lc-agent-glow{animation:var(--animate-lc-agent-glow)}.animate-lc-bar-in{animation:var(--animate-lc-bar-in)}.animate-lc-donut-in{animation:var(--animate-lc-donut-in)}.animate-lc-stacked-in{animation:var(--animate-lc-stacked-in)}.resize{resize:both}.grid-cols-\\[repeat\\(auto-fit\\,minmax\\(108px\\,1fr\\)\\)\\]{grid-template-columns:repeat(auto-fit,minmax(108px,1fr))}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-start{justify-content:flex-start}.gap-1\\.5{gap:calc(var(--spacing) * 1.5)}.gap-3{gap:calc(var(--spacing) * 3)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.border{border-style:var(--tw-border-style);border-width:1px}.fill-\\(--dsw-alias-bg-layer-1\\){fill:var(--dsw-alias-bg-layer-1)}.fill-\\(--dsw-alias-label-primary\\){fill:var(--dsw-alias-label-primary)}.fill-current{fill:currentColor}.fill-none{fill:none}.fill-transparent{fill:#0000}.stroke-\\(--dsw-alias-border-l1\\){stroke:var(--dsw-alias-border-l1)}.stroke-2{stroke-width:2px}.stroke-4{stroke-width:4px}.stroke-9{stroke-width:9px}.stroke-\\[1\\.5px\\]{stroke-width:1.5px}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,ease);transition-duration:var(--tw-duration,0s)}@media (hover:hover){.group-hover\\/agent\\:fill-\\[var\\(--dsw-alias-interactive-bg-hover\\,var\\(--dsw-alias-bg-layer-2\\)\\)\\]:is(:where(.group\\/agent):hover *){fill:var(--dsw-alias-interactive-bg-hover,var(--dsw-alias-bg-layer-2))}.group-hover\\/pi\\:underline:is(:where(.group\\/pi):hover *){text-decoration-line:underline}.group-hover\\/tip\\:border-\\(--dsw-alias-label-primary\\):is(:where(.group\\/tip):hover *){border-color:var(--dsw-alias-label-primary)}.group-hover\\/tip\\:text-\\(--dsw-alias-label-primary\\):is(:where(.group\\/tip):hover *){color:var(--dsw-alias-label-primary)}.group-hover\\/tip\\:opacity-100:is(:where(.group\\/tip):hover *){opacity:1}}.group-focus-visible\\/agent\\:fill-\\[var\\(--dsw-alias-interactive-bg-hover\\,var\\(--dsw-alias-bg-layer-2\\)\\)\\]:is(:where(.group\\/agent):focus-visible *){fill:var(--dsw-alias-interactive-bg-hover,var(--dsw-alias-bg-layer-2))}@media (hover:hover){.hover\\:border-\\(--dsw-alias-label-dimmed\\):hover{border-color:var(--dsw-alias-label-dimmed)}.hover\\:border-\\(--dsw-alias-label-primary\\):hover{border-color:var(--dsw-alias-label-primary)}.hover\\:bg-\\(--dsw-alias-bg-layer-2\\):hover{background-color:var(--dsw-alias-bg-layer-2)}.hover\\:bg-\\(--dsw-alias-interactive-bg-hover\\):hover{background-color:var(--dsw-alias-interactive-bg-hover)}.hover\\:bg-\\[var\\(--dsw-alias-interactive-bg-hover\\,var\\(--dsw-alias-bg-layer-2\\)\\)\\]:hover{background-color:var(--dsw-alias-interactive-bg-hover,var(--dsw-alias-bg-layer-2))}.hover\\:text-\\(--dsw-alias-label-primary\\):hover{color:var(--dsw-alias-label-primary)}.hover\\:text-\\(--dsw-alias-label-secondary\\):hover{color:var(--dsw-alias-label-secondary)}.hover\\:underline:hover{text-decoration-line:underline}.hover\\:brightness-110:hover{--tw-brightness:brightness(110%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.hover\\:brightness-\\[1\\.15\\]:hover{--tw-brightness:brightness(1.15);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}}.focus\\:border-\\(--dsw-alias-label-dimmed\\):focus{border-color:var(--dsw-alias-label-dimmed)}@media (hover:hover){.hover\\:enabled\\:bg-\\(--dsw-alias-interactive-bg-hover\\):hover:enabled{background-color:var(--dsw-alias-interactive-bg-hover)}}.disabled\\:cursor-default:disabled{cursor:default}.disabled\\:opacity-50:disabled{opacity:.5}@media (prefers-reduced-motion:reduce){.motion-reduce\\:animate-none{animation:none}}@container lc-card (width<380px){.\\@max-\\[380px\\]\\/lc-card\\:basis-\\[calc\\(100\\%-46px\\)\\]{flex-basis:calc(100% - 46px)}.\\@max-\\[380px\\]\\/lc-card\\:basis-\\[calc\\(100\\%-92px\\)\\]{flex-basis:calc(100% - 92px)}.\\@max-\\[380px\\]\\/lc-card\\:flex-wrap{flex-wrap:wrap}}@container lc-card (width<320px){.\\@max-\\[320px\\]\\/lc-card\\:gap-2{gap:calc(var(--spacing) * 2)}}@container lc-card (width<240px){.\\@max-\\[240px\\]\\/lc-card\\:mx-auto{margin-inline:auto}.\\@max-\\[240px\\]\\/lc-card\\:basis-full{flex-basis:100%}.\\@max-\\[240px\\]\\/lc-card\\:flex-wrap{flex-wrap:wrap}}@property --tw-rotate-x{syntax:\"*\";inherits:false}@property --tw-rotate-y{syntax:\"*\";inherits:false}@property --tw-rotate-z{syntax:\"*\";inherits:false}@property --tw-skew-x{syntax:\"*\";inherits:false}@property --tw-skew-y{syntax:\"*\";inherits:false}@property --tw-border-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:\"*\";inherits:false}@property --tw-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:\"*\";inherits:false}@property --tw-inset-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:\"*\";inherits:false}@property --tw-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:\"*\";inherits:false}@property --tw-inset-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:\"*\";inherits:false}@property --tw-ring-offset-width{syntax:\"<length>\";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:\"*\";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-blur{syntax:\"*\";inherits:false}@property --tw-brightness{syntax:\"*\";inherits:false}@property --tw-contrast{syntax:\"*\";inherits:false}@property --tw-grayscale{syntax:\"*\";inherits:false}@property --tw-hue-rotate{syntax:\"*\";inherits:false}@property --tw-invert{syntax:\"*\";inherits:false}@property --tw-opacity{syntax:\"*\";inherits:false}@property --tw-saturate{syntax:\"*\";inherits:false}@property --tw-sepia{syntax:\"*\";inherits:false}@property --tw-drop-shadow{syntax:\"*\";inherits:false}@property --tw-drop-shadow-color{syntax:\"*\";inherits:false}@property --tw-drop-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:\"*\";inherits:false}@keyframes lc-donut-in{0%{stroke-dasharray:0 100}}@keyframes lc-stacked-in{0%{transform:scaleX(0)}}@keyframes lc-bar-in{0%{transform:scaleY(0)}}@keyframes lc-agent-flow{to{stroke-dashoffset:-9px}}@keyframes lc-agent-glow{0%,to{opacity:1}50%{opacity:.4}}";
9529
+ const tagId$14 = "dsh-context/tailwind.css";
9530
+ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$14) + "]") === null) {
9531
+ const tag = document.createElement("style");
9532
+ tag.dataset.plugin = "dsh-context";
9533
+ tag.dataset.pluginCss = tagId$14;
9534
+ tag.textContent = css$14;
9535
+ document.head.appendChild(tag);
9536
+ }
9537
+ //#endregion
9188
9538
  //#region \0dsh-global-css:/home/runner/work/dsh-context/dsh-context/src/client/styles/base.css.mjs
9189
- const css$13 = ".lc-root{box-sizing:border-box;height:100%;color:var(--dsw-alias-label-primary);padding:16px 20px 32px;font-size:13px;overflow-y:auto}[data-sidebar-right-open] .lc-root,[data-sidebar-right-float-host] .lc-root{height:auto;padding:12px;overflow:visible}.lc-title-icon{flex:none}.lc-title-label{padding-right:30px}.lc-card{background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l2);border-radius:10px;margin-bottom:14px;padding:14px 16px}.lc-root .lc-card{margin-bottom:7px;padding:7px 8px;container:lc-card/inline-size}.lc-root .lc-cols{gap:7px;margin-bottom:7px}.lc-card-title{flex-wrap:wrap;align-items:baseline;gap:8px;margin-bottom:10px;font-weight:600;display:flex}.lc-card-title-text{white-space:nowrap;flex:none}.lc-gran,.lc-kinds{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);border-radius:6px;gap:2px;margin-left:auto;padding:1px;display:flex}.lc-trend-ctl{align-items:center;gap:6px;margin-left:auto;display:flex}.lc-trend-ctl .lc-gran{margin-left:0}.lc-trend-adaptive{flex:none;margin-left:0}.lc-gran-btn{color:var(--dsw-alias-label-secondary);cursor:pointer;transition:color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);background:0 0;border:0;border-radius:5px;padding:3px 8px;font-family:inherit;font-size:11px;line-height:1}.lc-gran-btn:hover{color:var(--dsw-alias-label-primary)}.lc-gran-on,.lc-gran-on:hover{background:var(--dsw-alias-button-primary-fill);color:var(--dsw-alias-label-primary-foreground)}.lc-kind-n{font-variant-numeric:tabular-nums;opacity:.65;margin-left:4px}.lc-gran-on .lc-kind-n{opacity:.85}.lc-tip{z-index:6;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);width:max-content;color:var(--dsw-alias-label-primary);box-shadow:var(--dsw-shadow-lv3,0 2px 8px #0000002e);pointer-events:none;opacity:0;transition:opacity var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);border-radius:6px;padding:6px 10px;font-size:12px;position:absolute}.lc-events,.lc-fa-list{flex-direction:column;gap:2px;height:320px;display:flex;overflow-y:auto}.lc-cols{flex-wrap:wrap;gap:14px;margin-bottom:14px;display:flex}.lc-col{flex:1;min-width:min(360px,100%)}.lc-cols>.lc-card,.lc-col>.lc-card:last-child{margin-bottom:0}.lc-col-browser{flex-direction:column;display:flex}.lc-col-browser>.lc-card{flex:1}.lc-head{container:lc-head-row/inline-size}.lc-head>.lc-card{flex:1 1 0;min-width:0}@container lc-head-row (width<=720px){.lc-head>.lc-card{flex-basis:100%}}.lc-head>.lc-card:has(.lc-stats){flex-direction:column;display:flex}.lc-head .lc-stats{flex:1;align-content:stretch}.lc-head .lc-stat{justify-content:center}.lc-empty{color:var(--dsw-alias-label-secondary);text-align:center;padding:18px 0}.lc-error{flex-direction:column;align-items:center;gap:8px;padding:40px 16px;display:flex}.lc-error-msg{font-family:var(--ds-font-family-code,ui-monospace, SFMono-Regular, Menlo, monospace);color:var(--dsw-alias-state-error-primary);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);overflow-wrap:anywhere;border-radius:6px;max-width:100%;padding:4px 8px;font-size:12px}.lc-error-retry{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);font:inherit;cursor:pointer;transition:border-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);border-radius:6px;padding:4px 14px;font-size:12px}.lc-error-retry:hover{border-color:var(--dsw-alias-label-primary)}.lc-foot{color:var(--dsw-alias-label-secondary);margin-top:4px;font-size:12px}[data-conversation-scroll]:has(.lc-root)>[data-composer-seat]:not(:has([data-approval-key],[data-question-key],[data-plan-review-key])),[data-conversation-scroll]:has(.lc-root,.lc-modal-backdrop)~[data-width-handle]{display:none}";
9539
+ const css$13 = ".lc-root{box-sizing:border-box;height:100%;color:var(--dsw-alias-label-primary);padding:16px 20px 32px;font-size:13px;overflow-y:auto}[data-sidebar-right-open] .lc-root,[data-sidebar-right-float-host] .lc-root{height:auto;padding:12px;overflow:visible}.lc-title-icon{flex:none}.lc-title-label{padding-right:30px}.lc-card{background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l2);border-radius:10px;margin-bottom:14px;padding:14px 16px}.lc-root .lc-card{margin-bottom:7px;padding:7px 8px;container:lc-card/inline-size}.lc-root .lc-cols{gap:7px;margin-bottom:7px}.lc-card-title{flex-wrap:wrap;align-items:baseline;gap:8px;margin-bottom:10px;font-weight:600;display:flex}.lc-card-title-text{white-space:nowrap;flex:none}.lc-gran,.lc-kinds{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);border-radius:6px;gap:2px;margin-left:auto;padding:1px;display:flex}.lc-trend-ctl{align-items:center;gap:6px;margin-left:auto;display:flex}.lc-trend-ctl .lc-gran{margin-left:0}.lc-trend-adaptive{flex:none;margin-left:0}.lc-gran-btn{color:var(--dsw-alias-label-secondary);cursor:pointer;transition:color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);background:0 0;border:0;border-radius:5px;padding:3px 8px;font-family:inherit;font-size:11px;line-height:1}.lc-gran-btn:hover{color:var(--dsw-alias-label-primary)}.lc-gran-on,.lc-gran-on:hover{background:var(--dsw-alias-button-primary-fill);color:var(--dsw-alias-label-primary-foreground)}.lc-kind-n{font-variant-numeric:tabular-nums;opacity:.65;margin-left:4px}.lc-gran-on .lc-kind-n{opacity:.85}.lc-tip{z-index:6;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);width:max-content;color:var(--dsw-alias-label-primary);box-shadow:var(--dsw-shadow-lv3,0 2px 8px #0000002e);pointer-events:none;opacity:0;transition:opacity var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);border-radius:6px;padding:6px 10px;font-size:12px;position:absolute}.lc-events,.lc-fa-list{flex-direction:column;gap:2px;height:320px;display:flex;overflow-y:auto}.lc-cols{flex-wrap:wrap;gap:14px;margin-bottom:14px;display:flex}.lc-cols>.lc-card,.lc-col>.lc-card:last-child{margin-bottom:0}.lc-col-browser{flex-direction:column;display:flex}.lc-col-browser>.lc-card{flex:1}.lc-head>.lc-card:has(.lc-stats){flex-direction:column;display:flex}.lc-head .lc-stats{flex:1;align-content:stretch}.lc-head .lc-stat{justify-content:center}.lc-empty{color:var(--dsw-alias-label-secondary);text-align:center;padding:18px 0}.lc-error{flex-direction:column;align-items:center;gap:8px;padding:40px 16px;display:flex}.lc-error-msg{font-family:var(--ds-font-family-code,ui-monospace, SFMono-Regular, Menlo, monospace);color:var(--dsw-alias-state-error-primary);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);overflow-wrap:anywhere;border-radius:6px;max-width:100%;padding:4px 8px;font-size:12px}.lc-error-retry{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);font:inherit;cursor:pointer;transition:border-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);border-radius:6px;padding:4px 14px;font-size:12px}.lc-foot{color:var(--dsw-alias-label-secondary);margin-top:4px;font-size:12px}[data-conversation-scroll]:has(.lc-root)>[data-composer-seat]:not(:has([data-approval-key],[data-question-key],[data-plan-review-key])),[data-conversation-scroll]:has(.lc-root,.lc-modal-backdrop)~[data-width-handle]{display:none}";
9190
9540
  const tagId$13 = "dsh-context/base.css";
9191
9541
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$13) + "]") === null) {
9192
9542
  const tag = document.createElement("style");
@@ -9197,7 +9547,7 @@ window.__ModuleLoader__.load({
9197
9547
  }
9198
9548
  //#endregion
9199
9549
  //#region \0dsh-global-css:/home/runner/work/dsh-context/dsh-context/src/client/styles/stats.css.mjs
9200
- const css$12 = ".lc-stats{grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;display:grid}.lc-stat{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);border-radius:8px;flex-direction:column;gap:2px;min-width:0;padding:6px;display:flex}.lc-stats .lc-stat{padding:6px 3px}.lc-stats .lc-stat-q{margin:0;position:absolute;top:3px;right:4px}.lc-stat-label{color:var(--dsw-alias-label-secondary);white-space:nowrap;text-overflow:ellipsis;font-size:11px;font-weight:600;overflow:hidden}.lc-stat-value{color:var(--dsw-alias-label-primary);white-space:nowrap;text-overflow:ellipsis;text-align:center;font-size:14px;font-weight:600;overflow:hidden}.lc-stat-sub{color:var(--dsw-alias-label-secondary);white-space:nowrap;text-overflow:ellipsis;font-size:11px;overflow:hidden}.lc-stat-tipped{position:relative}.lc-stat-q{text-align:center;width:11px;height:11px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l2);cursor:help;transition:color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out), border-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);border-radius:50%;margin-left:4px;font-size:9px;font-style:normal;font-weight:700;line-height:11px;display:inline-block}.lc-stat-tipped:hover .lc-stat-q{color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-label-primary)}.lc-stat-tip{max-width:280px;font-weight:400;line-height:1.5;top:calc(100% + 6px);left:0}.lc-stat-tipped:hover .lc-stat-tip{opacity:1}.lc-stat-tip-prices{border-top:1px dashed var(--dsw-alias-border-l1);margin-top:5px;padding-top:5px;display:block}.lc-stat-tip-head{font-weight:600;display:block}.lc-stat-tip-row{margin-top:2px;display:block}.lc-stat-tip-model{color:var(--dsw-alias-label-primary)}.lc-card-sub{color:var(--dsw-alias-label-secondary);margin-left:auto;font-size:12px;font-weight:400}.lc-overview-num{align-items:baseline;gap:6px;margin-bottom:8px;display:flex}.lc-overview-num>b{font-size:20px}.lc-overview-num span{color:var(--dsw-alias-label-secondary)}.lc-overview-pct{margin-left:auto;font-size:11px}.lc-overview-pct b{color:var(--dsw-alias-label-primary);margin-right:4px;font-size:20px}.lc-stat-head{color:var(--dsw-alias-label-secondary);margin:12px 0 8px;font-size:11px;font-weight:600}.lc-donut-row{justify-content:flex-start;align-items:center;gap:12px;min-width:0;display:flex}.lc-col-donut{flex-direction:column;display:flex}.lc-col-donut .lc-donut-row{flex:1}.lc-donut-row .lc-sl{flex:auto}.lc-donut{flex:none;position:relative}.lc-donut svg{display:block}.lc-donut-track{stroke:#8080802e}.lc-donut-seg{transition:opacity var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);animation:.45s cubic-bezier(.4,0,.2,1) backwards lc-donut-in;animation-delay:calc(var(--lc-i,0) * 50ms)}@keyframes lc-donut-in{0%{stroke-dasharray:0 100}}.lc-donut-dim .lc-donut-seg{opacity:.35}.lc-donut-dim .lc-donut-seg-on{opacity:1}.lc-donut-center{pointer-events:none;text-align:center;box-sizing:border-box;flex-direction:column;justify-content:center;align-items:center;gap:1px;padding:0 7px;display:flex;position:absolute;inset:0}.lc-donut-center b{white-space:nowrap;text-overflow:ellipsis;max-width:100%;line-height:1.15;overflow:hidden}.lc-donut-center span{color:var(--dsw-alias-label-secondary);white-space:nowrap}.lc-sl{grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:4px 20px;min-width:0;display:grid;overflow:hidden}.lc-sl-row{min-width:0;transition:background-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);border-radius:6px;flex-direction:column;gap:1px;margin:0 -6px;padding:1px 6px;font-size:12px;display:flex}.lc-sl-row-on{background:var(--dsw-alias-interactive-bg-hover)}.lc-sl-row-dim{opacity:.55}.lc-sl-main{align-items:center;gap:6px;min-width:0;display:flex}.lc-sl-dot{border-radius:2px;flex:none;width:8px;height:8px}.lc-sl-label{white-space:nowrap;text-overflow:ellipsis;flex:auto;min-width:0;font-weight:600;line-height:1.25;overflow:hidden}.lc-sl-pct{text-align:right;font-variant-numeric:tabular-nums;flex:none;min-width:34px;font-weight:700}.lc-sl-sub{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;white-space:nowrap;text-overflow:ellipsis;margin-left:14px;font-size:11px;line-height:1.3;overflow:hidden}.lc-pi-grid{grid-template-columns:1fr;gap:8px;display:grid}.lc-pi-row-btn{appearance:none;font:inherit;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;width:100%;padding:0}.lc-pi-row{min-width:0;color:inherit;flex-direction:row;justify-content:space-between;align-items:baseline;gap:12px;text-decoration:none;display:flex}.lc-pi-row:hover .lc-pi-value{text-decoration:underline}.lc-pi-hint{text-decoration:none}.lc-pi-hint:hover{text-decoration:underline}.lc-pi-update{color:var(--dsw-alias-state-warn-primary);white-space:nowrap;margin-left:6px;font-size:11px}.lc-pi-label{color:var(--dsw-alias-label-secondary);white-space:nowrap;text-overflow:ellipsis;flex:none;font-size:11px;font-weight:600;overflow:hidden}.lc-pi-value{min-width:0;color:var(--dsw-alias-label-primary);white-space:nowrap;text-overflow:ellipsis;text-align:right;font-size:13px;font-weight:600;overflow:hidden}.lc-pi-row-btn .lc-pi-value{font-weight:400}@container lc-card (width>=700px){.lc-stats{grid-template-columns:repeat(6,minmax(0,1fr))}}@container lc-card (width<=320px){.lc-donut-row{gap:8px}.lc-stats{grid-template-columns:repeat(2,minmax(0,1fr))}}@container lc-card (width<=240px){.lc-donut-row{flex-wrap:wrap}.lc-donut{margin:0 auto}.lc-donut-row .lc-sl{flex-basis:100%}}@media (prefers-reduced-motion:reduce){.lc-donut-seg{animation:none}}";
9550
+ const css$12 = ".lc-stat{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);border-radius:8px;flex-direction:column;gap:2px;min-width:0;padding:6px;display:flex}.lc-stats .lc-stat{padding:6px 3px}.lc-stats .lc-stat-q{margin:0;position:absolute;top:3px;right:4px}.lc-stat-label{color:var(--dsw-alias-label-secondary);white-space:nowrap;text-overflow:ellipsis;font-size:11px;font-weight:600;overflow:hidden}.lc-stat-value{color:var(--dsw-alias-label-primary);white-space:nowrap;text-overflow:ellipsis;text-align:center;font-size:14px;font-weight:600;overflow:hidden}.lc-stat-sub{color:var(--dsw-alias-label-secondary);white-space:nowrap;text-overflow:ellipsis;font-size:11px;overflow:hidden}.lc-stat-tipped{position:relative}.lc-stat-q{text-align:center;width:11px;height:11px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l2);cursor:help;transition:color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out), border-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);border-radius:50%;margin-left:4px;font-size:9px;font-style:normal;font-weight:700;line-height:11px;display:inline-block}.lc-stat-tip{max-width:280px;font-weight:400;line-height:1.5;top:calc(100% + 6px);left:0}.lc-stat-tip-prices{border-top:1px dashed var(--dsw-alias-border-l1);margin-top:5px;padding-top:5px;display:block}.lc-stat-tip-head{font-weight:600;display:block}.lc-stat-tip-row{margin-top:2px;display:block}.lc-stat-tip-model{color:var(--dsw-alias-label-primary)}.lc-card-sub{color:var(--dsw-alias-label-secondary);margin-left:auto;font-size:12px;font-weight:400}.lc-overview-num{align-items:baseline;gap:6px;margin-bottom:8px;display:flex}.lc-overview-num>b{font-size:20px}.lc-overview-num span{color:var(--dsw-alias-label-secondary)}.lc-overview-pct{margin-left:auto;font-size:11px}.lc-overview-pct b{color:var(--dsw-alias-label-primary);margin-right:4px;font-size:20px}.lc-stat-head{color:var(--dsw-alias-label-secondary);margin:12px 0 8px;font-size:11px;font-weight:600}.lc-col-donut{flex-direction:column;display:flex}.lc-col-donut .lc-donut-row{flex:1}.lc-donut{flex:none;position:relative}.lc-donut svg{display:block}.lc-donut-track{stroke:color-mix(in srgb, var(--color-neutral-500) 18%, transparent)}.lc-donut-seg{transition:opacity var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out)}.lc-donut-dim .lc-donut-seg{opacity:.35}.lc-donut-dim .lc-donut-seg-on{opacity:1}.lc-donut-center{pointer-events:none;text-align:center;box-sizing:border-box;flex-direction:column;justify-content:center;align-items:center;gap:1px;padding:0 7px;display:flex;position:absolute;inset:0}.lc-donut-center b{white-space:nowrap;text-overflow:ellipsis;max-width:100%;line-height:1.15;overflow:hidden}.lc-donut-center span{color:var(--dsw-alias-label-secondary);white-space:nowrap}.lc-sl{grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:4px 20px;min-width:0;display:grid;overflow:hidden}.lc-sl-row{min-width:0;transition:background-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);border-radius:6px;flex-direction:column;gap:1px;margin:0 -6px;padding:1px 6px;font-size:12px;display:flex}.lc-sl-row-on{background:var(--dsw-alias-interactive-bg-hover)}.lc-sl-row-dim{opacity:.55}.lc-sl-main{align-items:center;gap:6px;min-width:0;display:flex}.lc-sl-dot{border-radius:2px;flex:none;width:8px;height:8px}.lc-sl-label{white-space:nowrap;text-overflow:ellipsis;flex:auto;min-width:0;font-weight:600;line-height:1.25;overflow:hidden}.lc-sl-pct{text-align:right;font-variant-numeric:tabular-nums;flex:none;min-width:34px;font-weight:700}.lc-sl-sub{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;white-space:nowrap;text-overflow:ellipsis;margin-left:14px;font-size:11px;line-height:1.3;overflow:hidden}.lc-pi-grid{grid-template-columns:1fr;gap:8px;display:grid}.lc-pi-row-btn{appearance:none;font:inherit;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;width:100%;padding:0}.lc-pi-row{min-width:0;color:inherit;flex-direction:row;justify-content:space-between;align-items:baseline;gap:12px;text-decoration:none;display:flex}.lc-pi-hint{text-decoration:none}.lc-pi-update{color:var(--dsw-alias-state-warn-primary);white-space:nowrap;margin-left:6px;font-size:11px}.lc-pi-label{color:var(--dsw-alias-label-secondary);white-space:nowrap;text-overflow:ellipsis;flex:none;font-size:11px;font-weight:600;overflow:hidden}.lc-pi-value{min-width:0;color:var(--dsw-alias-label-primary);white-space:nowrap;text-overflow:ellipsis;text-align:right;font-size:13px;font-weight:600;overflow:hidden}.lc-pi-row-btn .lc-pi-value{font-weight:400}";
9201
9551
  const tagId$12 = "dsh-context/stats.css";
9202
9552
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$12) + "]") === null) {
9203
9553
  const tag = document.createElement("style");
@@ -9208,7 +9558,7 @@ window.__ModuleLoader__.load({
9208
9558
  }
9209
9559
  //#endregion
9210
9560
  //#region \0dsh-global-css:/home/runner/work/dsh-context/dsh-context/src/client/styles/jump.css.mjs
9211
- const css$11 = ".lc-jump{width:calc(28px + var(--dsh-content-font-delta,0px));height:calc(28px + var(--dsh-content-font-delta,0px));color:var(--dsw-alias-label-tertiary);cursor:pointer;transition:background-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out), color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);background:0 0;border:0;border-radius:28px;justify-content:center;align-items:center;padding:6px;display:inline-flex}.lc-jump svg{width:calc(16px + var(--dsh-content-font-delta,0px));height:calc(16px + var(--dsh-content-font-delta,0px))}.lc-jump:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary)}";
9561
+ const css$11 = ".lc-jump{width:calc(28px + var(--dsh-content-font-delta,0px));height:calc(28px + var(--dsh-content-font-delta,0px));color:var(--dsw-alias-label-tertiary);cursor:pointer;transition:background-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out), color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);background:0 0;border:0;border-radius:28px;justify-content:center;align-items:center;padding:6px;display:inline-flex}.lc-jump svg{width:calc(16px + var(--dsh-content-font-delta,0px));height:calc(16px + var(--dsh-content-font-delta,0px))}";
9212
9562
  const tagId$11 = "dsh-context/jump.css";
9213
9563
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$11) + "]") === null) {
9214
9564
  const tag = document.createElement("style");
@@ -9219,7 +9569,7 @@ window.__ModuleLoader__.load({
9219
9569
  }
9220
9570
  //#endregion
9221
9571
  //#region \0dsh-global-css:/home/runner/work/dsh-context/dsh-context/src/client/styles/settings.css.mjs
9222
- const css$10 = ".lc-settings-card{background:var(--dsw-alias-bg-layer-3);border:1px solid var(--dsw-alias-border-l2);transition:border-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out), background-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);border-radius:12px}.lc-settings-card:hover{border-color:var(--dsw-alias-label-dimmed)}.lc-settings-open,.lc-settings-open:hover{background:var(--dsw-alias-bg-layer-2);border-color:var(--dsw-alias-label-dimmed)}.lc-settings-head{appearance:none;width:100%;font:inherit;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:12px;align-items:center;gap:12px;padding:14px 16px;display:flex}.lc-settings-headtext{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.lc-settings-name{color:var(--dsw-alias-label-primary);font-size:15px;font-weight:600;line-height:1.4}.lc-settings-desc{color:var(--dsw-alias-label-tertiary);font-size:13px;line-height:1.5}.lc-settings-chevron{color:var(--dsw-alias-label-tertiary);transition:transform var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);flex:none}.lc-settings-open .lc-settings-chevron{transform:rotate(180deg)}.lc-settings-body{border-top:1px solid var(--dsw-alias-border-l2);margin:0 16px;padding:4px 0 12px}.lc-settings-row{align-items:center;gap:8px;padding:8px 0;display:flex}.lc-settings-label{min-width:0;color:var(--dsw-alias-label-primary);flex:1;font-size:14px}.lc-settings-select{background:var(--dsw-alias-bg-module-platform);height:36px;font:inherit;color:var(--dsw-alias-label-primary);cursor:pointer;transition:background-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);border:none;border-radius:18px;align-items:center;gap:12px;padding:0 14px;font-size:14px;line-height:22px;display:inline-flex}.lc-settings-select:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.lc-settings-select:disabled{opacity:.5;cursor:default}.lc-settings-note{color:var(--dsw-alias-label-tertiary);margin:12px 0 4px;font-size:12px;line-height:1.5}";
9572
+ const css$10 = ".lc-settings-card{background:var(--dsw-alias-bg-layer-3);border:1px solid var(--dsw-alias-border-l2);transition:border-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out), background-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);border-radius:12px}.lc-settings-card:hover{border-color:var(--dsw-alias-label-dimmed)}.lc-settings-open,.lc-settings-open:hover{background:var(--dsw-alias-bg-layer-2);border-color:var(--dsw-alias-label-dimmed)}.lc-settings-head{appearance:none;width:100%;font:inherit;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:12px;align-items:center;gap:12px;padding:14px 16px;display:flex}.lc-settings-headtext{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.lc-settings-name{color:var(--dsw-alias-label-primary);font-size:15px;font-weight:600;line-height:1.4}.lc-settings-desc{color:var(--dsw-alias-label-tertiary);font-size:13px;line-height:1.5}.lc-settings-chevron{color:var(--dsw-alias-label-tertiary);transition:transform var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);flex:none}.lc-settings-open .lc-settings-chevron{transform:rotate(180deg)}.lc-settings-body{border-top:1px solid var(--dsw-alias-border-l2);margin:0 16px;padding:4px 0 12px}.lc-settings-row{align-items:center;gap:8px;padding:8px 0;display:flex}.lc-settings-label{min-width:0;color:var(--dsw-alias-label-primary);flex:1;font-size:14px}.lc-settings-select{background:var(--dsw-alias-bg-module-platform);height:36px;font:inherit;color:var(--dsw-alias-label-primary);cursor:pointer;transition:background-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);border:none;border-radius:18px;align-items:center;gap:12px;padding:0 14px;font-size:14px;line-height:22px;display:inline-flex}.lc-settings-note{color:var(--dsw-alias-label-tertiary);margin:12px 0 4px;font-size:12px;line-height:1.5}";
9223
9573
  const tagId$10 = "dsh-context/settings.css";
9224
9574
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$10) + "]") === null) {
9225
9575
  const tag = document.createElement("style");
@@ -9230,7 +9580,7 @@ window.__ModuleLoader__.load({
9230
9580
  }
9231
9581
  //#endregion
9232
9582
  //#region \0dsh-global-css:/home/runner/work/dsh-context/dsh-context/src/client/styles/stackedBar.css.mjs
9233
- const css$9 = ".lc-stacked-wrap{width:100%;position:relative}.lc-stacked{background:#8080802e;border-radius:5px;width:100%;display:flex;position:relative;overflow:hidden}.lc-occupied-box{border:2px solid var(--dsw-alias-label-tertiary);box-sizing:border-box;pointer-events:none;opacity:0;box-shadow:0 0 0 1px var(--dsw-alias-bg-layer-2);transition:opacity var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);border-radius:5px;position:absolute;top:0;bottom:0;left:0}.lc-occupied-box-on{opacity:1}.lc-bar-tip{z-index:5;white-space:nowrap;padding:3px 8px;bottom:calc(100% + 6px);transform:translate(-50%)}.lc-bar-tip-on{opacity:1}.lc-stacked>div{height:100%}.lc-stacked-seg-pick{cursor:pointer}.lc-stacked-seg{transition:filter var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out), opacity var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out)}.lc-stacked-free{box-sizing:border-box;transition:box-shadow var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out), opacity var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out)}.lc-stacked-seg,.lc-stacked-free{transform-origin:0;animation:.4s cubic-bezier(.4,0,.2,1) backwards lc-stacked-in;animation-delay:calc(var(--lc-i,0) * 40ms)}@keyframes lc-stacked-in{0%{transform:scaleX(0)}}.lc-stacked-seg-on{filter:brightness(1.18)}.lc-reserve{z-index:1;pointer-events:auto;cursor:help;background:repeating-linear-gradient(45deg, color-mix(in srgb, var(--dsw-alias-state-warn-primary) 24%, transparent) 0 5px, transparent 5px 10px);position:absolute;top:0;bottom:0}.lc-stacked-free-on{border:2px dashed var(--dsw-alias-label-secondary);border-radius:3px}.lc-stacked-dim .lc-stacked-seg{opacity:.35}.lc-stacked-dim .lc-stacked-seg-on{opacity:1}.lc-stacked-dim .lc-stacked-free{opacity:.35}.lc-stacked-dim .lc-stacked-free-on{opacity:1}.lc-legend{grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:6px 14px;margin-top:10px;display:grid}.lc-chip{min-width:0;color:var(--dsw-alias-label-primary);cursor:pointer;transition:background-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);border-radius:6px;align-items:center;gap:5px;padding:1px 6px;display:flex}.lc-chip-label{white-space:nowrap;text-overflow:ellipsis;min-width:0;font-weight:600;overflow:hidden}.lc-chip-nums{white-space:nowrap;flex:none;align-items:baseline;gap:6px;margin-left:auto;display:inline-flex}.lc-chip i,.lc-detail-row i{border-radius:2px;width:8px;height:8px;display:inline-block}.lc-chip i{transition:box-shadow var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out)}.lc-chip em{color:var(--dsw-alias-label-secondary);font-style:normal}.lc-chip-on{background:var(--dsw-alias-interactive-bg-hover);font-weight:600}.lc-chip-on i{box-shadow:0 0 0 1px var(--dsw-alias-brand-primary)}@media (prefers-reduced-motion:reduce){.lc-stacked-seg,.lc-stacked-free{animation:none}}";
9583
+ const css$9 = ".lc-stacked-wrap{width:100%;position:relative}.lc-stacked{background:color-mix(in srgb, var(--color-neutral-500) 18%, transparent);border-radius:5px;width:100%;display:flex;position:relative;overflow:hidden}.lc-occupied-box{border:2px solid var(--dsw-alias-label-tertiary);box-sizing:border-box;pointer-events:none;opacity:0;box-shadow:0 0 0 1px var(--dsw-alias-bg-layer-2);transition:opacity var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);border-radius:5px;position:absolute;top:0;bottom:0;left:0}.lc-occupied-box-on{opacity:1}.lc-bar-tip{z-index:5;white-space:nowrap;padding:3px 8px;bottom:calc(100% + 6px);transform:translate(-50%)}.lc-bar-tip-on{opacity:1}.lc-stacked>div{height:100%}.lc-stacked-seg-pick{cursor:pointer}.lc-stacked-seg{transition:filter var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out), opacity var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out)}.lc-stacked-free{box-sizing:border-box;transition:box-shadow var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out), opacity var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out)}.lc-stacked-seg,.lc-stacked-free{transform-origin:0}.lc-stacked-seg-on{filter:brightness(1.18)}.lc-reserve{z-index:1;pointer-events:auto;cursor:help;background:repeating-linear-gradient(45deg, color-mix(in srgb, var(--dsw-alias-state-warn-primary) 24%, transparent) 0 5px, transparent 5px 10px);position:absolute;top:0;bottom:0}.lc-stacked-free-on{border:2px dashed var(--dsw-alias-label-secondary);border-radius:3px}.lc-stacked-dim .lc-stacked-seg{opacity:.35}.lc-stacked-dim .lc-stacked-seg-on{opacity:1}.lc-stacked-dim .lc-stacked-free{opacity:.35}.lc-stacked-dim .lc-stacked-free-on{opacity:1}.lc-legend{grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:6px 14px;margin-top:10px;display:grid}.lc-chip{min-width:0;color:var(--dsw-alias-label-primary);cursor:pointer;transition:background-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);border-radius:6px;align-items:center;gap:5px;padding:1px 6px;display:flex}.lc-chip-label{white-space:nowrap;text-overflow:ellipsis;min-width:0;font-weight:600;overflow:hidden}.lc-chip-nums{white-space:nowrap;flex:none;align-items:baseline;gap:6px;margin-left:auto;display:inline-flex}.lc-chip i,.lc-detail-row i{border-radius:2px;width:8px;height:8px;display:inline-block}.lc-chip i{transition:box-shadow var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out)}.lc-chip em{color:var(--dsw-alias-label-secondary);font-style:normal}.lc-chip-on{background:var(--dsw-alias-interactive-bg-hover);font-weight:600}.lc-chip-on i{box-shadow:0 0 0 1px var(--dsw-alias-brand-primary)}";
9234
9584
  const tagId$9 = "dsh-context/stackedBar.css";
9235
9585
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$9) + "]") === null) {
9236
9586
  const tag = document.createElement("style");
@@ -9241,7 +9591,7 @@ window.__ModuleLoader__.load({
9241
9591
  }
9242
9592
  //#endregion
9243
9593
  //#region \0dsh-global-css:/home/runner/work/dsh-context/dsh-context/src/client/styles/trendChart.css.mjs
9244
- const css$8 = ".lc-chartrow{align-items:stretch;gap:6px;display:flex}.lc-axis{box-sizing:border-box;width:40px;height:150px;color:var(--dsw-alias-label-secondary);padding-top:18px;font-size:11px;position:relative}.lc-axis span{line-height:1;position:absolute;right:0}.lc-axis-top{top:13px}.lc-axis-q3{top:41px}.lc-axis-mid{top:69px}.lc-axis-q1{top:97px}.lc-axis-bot{top:125px}.lc-chart-wrap{flex:1;min-width:0;position:relative}.lc-chart-scroll{overscroll-behavior-x:contain;scrollbar-gutter:stable;padding-bottom:var(--dsh-scrollbar-width,8px);overflow:auto hidden}.lc-chart{box-sizing:border-box;align-items:flex-end;gap:2px;width:max-content;min-width:100%;height:130px;padding-top:18px;display:flex;position:relative}.lc-grid{border-top:1px dashed var(--dsw-alias-border-l2);pointer-events:none;position:absolute;left:0;right:0}.lc-grid-top{top:18px}.lc-grid-q3{top:46px}.lc-grid-mid{top:74px}.lc-grid-q1{top:102px}.lc-grid-zero{border-top-style:solid;border-top-color:#80808080;top:130px}.lc-bar{cursor:pointer;outline-offset:1px;width:14px;height:100%;transition:opacity var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out), background-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out), outline-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);border-radius:2px;outline:1px dashed #0000;flex:none;align-items:flex-end;display:flex;position:relative}.lc-chart-dim .lc-bar{opacity:.35}.lc-chart-dim .lc-bar-in-turn{opacity:1}.lc-chart-dim .lc-turn{opacity:.35}.lc-chart-dim .lc-turn-on{opacity:1}.lc-chart-tip{z-index:5;box-sizing:border-box;overflow-wrap:break-word;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);max-width:100%;color:var(--dsw-alias-label-primary);pointer-events:none;border-radius:6px;flex-direction:column;gap:2px;padding:3px 8px;font-size:12px;display:flex;position:absolute;bottom:calc(100% + 4px);left:0;box-shadow:0 2px 8px #0000002e}.lc-chart-tip span+span{color:var(--dsw-alias-label-secondary)}.lc-bar:hover{background:var(--dsw-alias-bg-layer-2)}.lc-bar-hovered{outline-color:var(--dsw-alias-brand-primary)}.lc-bar-selected{outline:2px solid var(--dsw-alias-label-primary);outline-offset:1px}.lc-bar-in-turn{background:#80808024}.lc-bar-stack{flex-direction:column-reverse;width:100%;display:flex}.lc-bar-stack>div{width:100%}.lc-bar-stack,.lc-bar-up,.lc-bar-down{transform-origin:50% 100%;animation:.35s cubic-bezier(.4,0,.2,1) backwards lc-bar-in;animation-delay:calc(var(--lc-i,0) * 15ms)}.lc-bar-down{transform-origin:50% 0}@keyframes lc-bar-in{0%{transform:scaleY(0)}}.lc-bar-stack>div:first-child{border-radius:0 0 2px 2px}.lc-bar-stack>div:last-child{border-radius:2px 2px 0 0}.lc-bar-stack>div:only-child{border-radius:2px}.lc-bar-up,.lc-bar-down{width:100%;display:flex;position:absolute;left:0}.lc-bar-up{flex-direction:column-reverse}.lc-bar-down{flex-direction:column}.lc-bar-up>div,.lc-bar-down>div{width:100%}.lc-bar-up>div:last-child{border-radius:2px 2px 0 0}.lc-bar-down>div:last-child{border-radius:0 0 2px 2px}.lc-cat-seg{transition:filter var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out), opacity var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out)}.lc-chart[data-catdim] .lc-cat-seg{opacity:.35}.lc-chart[data-catdim=system] .lc-cat-seg[data-cat=system],.lc-chart[data-catdim=tools] .lc-cat-seg[data-cat=tools],.lc-chart[data-catdim=user] .lc-cat-seg[data-cat=user],.lc-chart[data-catdim=inject] .lc-cat-seg[data-cat=inject],.lc-chart[data-catdim=assistant] .lc-cat-seg[data-cat=assistant],.lc-chart[data-catdim=tool] .lc-cat-seg[data-cat=tool]{opacity:1;filter:brightness(1.18)}.lc-bar-marker{color:var(--dsw-alias-state-warn-primary);font-size:11px;position:absolute;top:-16px;left:50%;transform:translate(-50%)}.lc-turns{gap:2px;width:max-content;min-width:100%;margin-top:4px;display:flex;overflow:hidden}.lc-turn{box-sizing:border-box;text-align:center;color:var(--dsw-alias-label-secondary);white-space:nowrap;cursor:pointer;height:14px;transition:filter var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out), opacity var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);border-radius:3px;flex:none;font-size:10px;font-weight:600;line-height:14px}.lc-turn-on{filter:brightness(1.35);color:var(--dsw-alias-label-primary)}.lc-turn-label{display:inline-block}@media (prefers-reduced-motion:reduce){.lc-bar-stack,.lc-bar-up,.lc-bar-down{animation:none}}";
9594
+ const css$8 = ".lc-chartrow{align-items:stretch;gap:6px;display:flex}.lc-axis{box-sizing:border-box;width:40px;height:150px;color:var(--dsw-alias-label-secondary);padding-top:18px;font-size:11px;position:relative}.lc-axis span{line-height:1;position:absolute;right:0}.lc-axis-top{top:13px}.lc-axis-q3{top:41px}.lc-axis-mid{top:69px}.lc-axis-q1{top:97px}.lc-axis-bot{top:125px}.lc-chart-wrap{flex:1;min-width:0;position:relative}.lc-chart-scroll{overscroll-behavior-x:contain;scrollbar-gutter:stable;padding-bottom:var(--dsh-scrollbar-width,8px);overflow:auto hidden}.lc-chart{box-sizing:border-box;align-items:flex-end;gap:2px;width:max-content;min-width:100%;height:130px;padding-top:18px;display:flex;position:relative}.lc-grid{border-top:1px dashed var(--dsw-alias-border-l2);pointer-events:none;position:absolute;left:0;right:0}.lc-grid-top{top:18px}.lc-grid-q3{top:46px}.lc-grid-mid{top:74px}.lc-grid-q1{top:102px}.lc-grid-zero{border-top-style:solid;border-top-color:color-mix(in srgb, var(--color-neutral-500) 50%, transparent);top:130px}.lc-bar{cursor:pointer;outline-offset:1px;width:14px;height:100%;transition:opacity var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out), background-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out), outline-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);border-radius:2px;outline:1px dashed #0000;flex:none;align-items:flex-end;display:flex;position:relative}.lc-chart-dim .lc-bar{opacity:.35}.lc-chart-dim .lc-bar-in-turn{opacity:1}.lc-chart-dim .lc-turn{opacity:.35}.lc-chart-dim .lc-turn-on{opacity:1}.lc-chart-tip{z-index:5;box-sizing:border-box;overflow-wrap:break-word;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);max-width:100%;color:var(--dsw-alias-label-primary);pointer-events:none;border-radius:6px;flex-direction:column;gap:2px;padding:3px 8px;font-size:12px;display:flex;position:absolute;bottom:calc(100% + 4px);left:0;box-shadow:0 2px 8px #0000002e}.lc-chart-tip span+span{color:var(--dsw-alias-label-secondary)}.lc-bar-hovered{outline-color:var(--dsw-alias-brand-primary)}.lc-bar-selected{outline:2px solid var(--dsw-alias-label-primary);outline-offset:1px}.lc-bar-in-turn{background:color-mix(in srgb, var(--color-neutral-500) 14%, transparent)}.lc-bar-stack{flex-direction:column-reverse;width:100%;display:flex}.lc-bar-stack>div{width:100%}.lc-bar-stack,.lc-bar-up,.lc-bar-down{transform-origin:50% 100%}.lc-bar-down{transform-origin:50% 0}.lc-bar-stack>div:first-child{border-radius:0 0 2px 2px}.lc-bar-stack>div:last-child{border-radius:2px 2px 0 0}.lc-bar-stack>div:only-child{border-radius:2px}.lc-bar-up,.lc-bar-down{width:100%;display:flex;position:absolute;left:0}.lc-bar-up{flex-direction:column-reverse}.lc-bar-down{flex-direction:column}.lc-bar-up>div,.lc-bar-down>div{width:100%}.lc-bar-up>div:last-child{border-radius:2px 2px 0 0}.lc-bar-down>div:last-child{border-radius:0 0 2px 2px}.lc-cat-seg{transition:filter var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out), opacity var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out)}.lc-chart[data-catdim] .lc-cat-seg{opacity:.35}.lc-chart[data-catdim=system] .lc-cat-seg[data-cat=system],.lc-chart[data-catdim=tools] .lc-cat-seg[data-cat=tools],.lc-chart[data-catdim=user] .lc-cat-seg[data-cat=user],.lc-chart[data-catdim=inject] .lc-cat-seg[data-cat=inject],.lc-chart[data-catdim=assistant] .lc-cat-seg[data-cat=assistant],.lc-chart[data-catdim=tool] .lc-cat-seg[data-cat=tool]{opacity:1;filter:brightness(1.18)}.lc-bar-marker{color:var(--dsw-alias-state-warn-primary);font-size:11px;position:absolute;top:-16px;left:50%;transform:translate(-50%)}.lc-turns{gap:2px;width:max-content;min-width:100%;margin-top:4px;display:flex;overflow:hidden}.lc-turn{box-sizing:border-box;text-align:center;color:var(--dsw-alias-label-secondary);white-space:nowrap;cursor:pointer;height:14px;transition:filter var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out), opacity var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);border-radius:3px;flex:none;font-size:10px;font-weight:600;line-height:14px}.lc-turn-on{filter:brightness(1.35);color:var(--dsw-alias-label-primary)}.lc-turn-label{display:inline-block}";
9245
9595
  const tagId$8 = "dsh-context/trendChart.css";
9246
9596
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$8) + "]") === null) {
9247
9597
  const tag = document.createElement("style");
@@ -9252,7 +9602,7 @@ window.__ModuleLoader__.load({
9252
9602
  }
9253
9603
  //#endregion
9254
9604
  //#region \0dsh-global-css:/home/runner/work/dsh-context/dsh-context/src/client/styles/requestDetail.css.mjs
9255
- const css$7 = ".lc-detail{border-top:1px solid var(--dsw-alias-border-l1);margin-top:12px;padding-top:12px}.lc-detail-head{color:var(--dsw-alias-label-secondary);flex-wrap:wrap;align-items:center;gap:6px 8px;margin-bottom:10px;display:flex}.lc-detail-head b{color:var(--dsw-alias-label-primary);font-size:13px}.lc-detail-time{font-variant-numeric:tabular-nums;white-space:nowrap;margin-left:auto;font-size:12px}.lc-detail-marker{color:var(--dsw-alias-state-warn-primary);background:color-mix(in srgb, var(--dsw-alias-state-warn-primary) 12%, transparent);border-radius:6px;padding:1px 7px;font-size:11px}.lc-detail-tag{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-secondary);border-radius:4px;padding:0 6px;font-size:11px}.lc-detail-metric{font-variant-numeric:tabular-nums;white-space:nowrap;color:var(--dsw-alias-label-primary);background:color-mix(in srgb, var(--dsw-alias-label-secondary) 14%, transparent);border-radius:6px;padding:2px 8px;font-size:12px;font-weight:600}.lc-detail-metric-up{color:var(--dsw-alias-state-success-primary);background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 15%, transparent)}.lc-detail-metric-down{color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 15%, transparent)}.lc-detail-rows{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:4px 24px;margin-top:10px;display:grid}.lc-brief{flex-direction:column;gap:2px;min-height:76px;margin:-4px 0 10px;display:flex}.lc-brief-row{min-width:0;color:var(--dsw-alias-label-primary);text-align:left;transition:background-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);background:0 0;border:0;border-radius:6px;align-items:center;gap:8px;margin-left:-6px;margin-right:-6px;padding:3px 6px;font-family:inherit;font-size:12px;line-height:1.5;display:flex}.lc-brief-row-link:hover{background:var(--dsw-alias-interactive-bg-hover)}button.lc-brief-row-link{cursor:pointer}.lc-brief-tag{box-sizing:border-box;text-align:center;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);min-width:56px;color:var(--dsw-alias-label-secondary);border-radius:4px;flex:none;padding:0 6px;font-size:11px;position:relative}.lc-brief-tip{white-space:normal;text-align:left;max-width:240px;font-weight:400;line-height:1.5;bottom:calc(100% + 6px);left:0}.lc-brief-tag:hover .lc-brief-tip{opacity:1}.lc-brief-text{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.lc-brief-empty{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--dsw-alias-label-tertiary);flex:1;overflow:hidden}.lc-brief-fact{box-sizing:border-box;text-overflow:ellipsis;white-space:nowrap;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);max-width:160px;color:var(--dsw-alias-label-secondary);border-radius:4px;flex:none;padding:0 6px;font-size:11px;overflow:hidden}.lc-brief-chip{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);min-width:0;max-width:260px;color:var(--dsw-alias-label-primary);transition:background-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);border-radius:5px;align-items:center;gap:5px;padding:0 7px;font-size:12px;display:inline-flex;overflow:hidden}.lc-brief-chip-grow{flex:1;max-width:none}.lc-brief-chip-tag{text-overflow:ellipsis;white-space:nowrap;background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);max-width:120px;color:var(--dsw-alias-label-secondary);border-radius:4px;flex:none;padding:0 6px;font-size:11px;overflow:hidden}.lc-brief-chip-text{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.lc-brief-chip-link{cursor:pointer}.lc-brief-chip-link:hover{background:var(--dsw-alias-interactive-bg-hover)}.lc-brief-more{color:var(--dsw-alias-label-secondary);flex:none;font-size:11px}.lc-detail-row{transition:background-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);border-radius:4px;align-items:center;gap:8px;margin:-1px -4px;padding:1px 4px;display:flex}.lc-detail-row i{transition:box-shadow var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out)}.lc-detail-row-on{background:var(--dsw-alias-interactive-bg-hover)}.lc-detail-row-on i{box-shadow:0 0 0 1px var(--dsw-alias-brand-primary)}.lc-detail-row-on .lc-detail-label{font-weight:600}.lc-detail-label{white-space:nowrap;min-width:70px;color:var(--dsw-alias-label-secondary)}.lc-bar-track{background:#8080802e;border-radius:3px;flex:1;height:5px;display:block;position:relative;overflow:hidden}.lc-bar-fill{border-radius:3px;height:100%;display:block}.lc-bar-zero{border-left:1px solid #80808073;position:absolute;top:0;bottom:0;left:50%}.lc-bar-fill-up,.lc-bar-fill-down{height:100%;display:block;position:absolute;top:0}.lc-bar-fill-up{border-radius:0 3px 3px 0;left:50%}.lc-bar-fill-down{border-radius:3px 0 0 3px;right:50%}.lc-detail-num{text-align:right;font-variant-numeric:tabular-nums;width:52px}.lc-detail-num-up{color:var(--dsw-alias-state-success-primary)}.lc-detail-num-down{color:var(--dsw-alias-state-error-primary)}.lc-detail-pct{text-align:right;width:34px;color:var(--dsw-alias-label-secondary)}";
9605
+ const css$7 = ".lc-detail{border-top:1px solid var(--dsw-alias-border-l1);margin-top:12px;padding-top:12px}.lc-detail-head{color:var(--dsw-alias-label-secondary);flex-wrap:wrap;align-items:center;gap:6px 8px;margin-bottom:10px;display:flex}.lc-detail-head b{color:var(--dsw-alias-label-primary);font-size:13px}.lc-detail-time{font-variant-numeric:tabular-nums;white-space:nowrap;margin-left:auto;font-size:12px}.lc-detail-marker{color:var(--dsw-alias-state-warn-primary);background:color-mix(in srgb, var(--dsw-alias-state-warn-primary) 12%, transparent);border-radius:6px;padding:1px 7px;font-size:11px}.lc-detail-tag{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-secondary);border-radius:4px;padding:0 6px;font-size:11px}.lc-detail-metric{font-variant-numeric:tabular-nums;white-space:nowrap;color:var(--dsw-alias-label-primary);background:color-mix(in srgb, var(--dsw-alias-label-secondary) 14%, transparent);border-radius:6px;padding:2px 8px;font-size:12px;font-weight:600}.lc-detail-metric-up{color:var(--dsw-alias-state-success-primary);background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 15%, transparent)}.lc-detail-metric-down{color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 15%, transparent)}.lc-detail-rows{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:4px 24px;margin-top:10px;display:grid}.lc-brief{flex-direction:column;gap:2px;min-height:76px;margin:-4px 0 10px;display:flex}.lc-brief-row{min-width:0;color:var(--dsw-alias-label-primary);text-align:left;transition:background-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);background:0 0;border:0;border-radius:6px;align-items:center;gap:8px;margin-left:-6px;margin-right:-6px;padding:3px 6px;font-family:inherit;font-size:12px;line-height:1.5;display:flex}button.lc-brief-row-link{cursor:pointer}.lc-brief-tag{box-sizing:border-box;text-align:center;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);min-width:56px;color:var(--dsw-alias-label-secondary);border-radius:4px;flex:none;padding:0 6px;font-size:11px;position:relative}.lc-brief-tip{white-space:normal;text-align:left;max-width:240px;font-weight:400;line-height:1.5;bottom:calc(100% + 6px);left:0}.lc-brief-text{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.lc-brief-empty{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--dsw-alias-label-tertiary);flex:1;overflow:hidden}.lc-brief-fact{box-sizing:border-box;text-overflow:ellipsis;white-space:nowrap;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);max-width:160px;color:var(--dsw-alias-label-secondary);border-radius:4px;flex:none;padding:0 6px;font-size:11px;overflow:hidden}.lc-brief-chip{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);min-width:0;max-width:260px;color:var(--dsw-alias-label-primary);transition:background-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);border-radius:5px;align-items:center;gap:5px;padding:0 7px;font-size:12px;display:inline-flex;overflow:hidden}.lc-brief-chip-grow{flex:1;max-width:none}.lc-brief-chip-tag{text-overflow:ellipsis;white-space:nowrap;background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);max-width:120px;color:var(--dsw-alias-label-secondary);border-radius:4px;flex:none;padding:0 6px;font-size:11px;overflow:hidden}.lc-brief-chip-text{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.lc-brief-chip-link{cursor:pointer}.lc-brief-more{color:var(--dsw-alias-label-secondary);flex:none;font-size:11px}.lc-detail-row{transition:background-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);border-radius:4px;align-items:center;gap:8px;margin:-1px -4px;padding:1px 4px;display:flex}.lc-detail-row i{transition:box-shadow var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out)}.lc-detail-row-on{background:var(--dsw-alias-interactive-bg-hover)}.lc-detail-row-on i{box-shadow:0 0 0 1px var(--dsw-alias-brand-primary)}.lc-detail-row-on .lc-detail-label{font-weight:600}.lc-detail-label{white-space:nowrap;min-width:70px;color:var(--dsw-alias-label-secondary)}.lc-bar-track{background:color-mix(in srgb, var(--color-neutral-500) 18%, transparent);border-radius:3px;flex:1;height:5px;display:block;position:relative;overflow:hidden}.lc-bar-fill{border-radius:3px;height:100%;display:block}.lc-bar-zero{border-left:1px solid color-mix(in srgb, var(--color-neutral-500) 45%, transparent);position:absolute;top:0;bottom:0;left:50%}.lc-bar-fill-up,.lc-bar-fill-down{height:100%;display:block;position:absolute;top:0}.lc-bar-fill-up{border-radius:0 3px 3px 0;left:50%}.lc-bar-fill-down{border-radius:3px 0 0 3px;right:50%}.lc-detail-num{text-align:right;font-variant-numeric:tabular-nums;width:52px}.lc-detail-num-up{color:var(--dsw-alias-state-success-primary)}.lc-detail-num-down{color:var(--dsw-alias-state-error-primary)}.lc-detail-pct{text-align:right;width:34px;color:var(--dsw-alias-label-secondary)}";
9256
9606
  const tagId$7 = "dsh-context/requestDetail.css";
9257
9607
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$7) + "]") === null) {
9258
9608
  const tag = document.createElement("style");
@@ -9263,7 +9613,7 @@ window.__ModuleLoader__.load({
9263
9613
  }
9264
9614
  //#endregion
9265
9615
  //#region \0dsh-global-css:/home/runner/work/dsh-context/dsh-context/src/client/styles/events.css.mjs
9266
- const css$6 = ".lc-event{align-items:center;gap:8px;padding:3px 0;display:flex}.lc-event-icon{text-align:center;width:18px;color:var(--dsw-alias-state-warn-primary)}.lc-event-icon.lc-event-inject{color:#a855f7}.lc-event-icon.lc-event-model{color:var(--dsw-alias-brand-primary)}.lc-event-icon.lc-event-mode{color:var(--dsw-alias-label-secondary)}.lc-kind{white-space:nowrap;border-radius:4px;flex:none;padding:1px 6px;font-size:10px;font-weight:600}.lc-kind-inject{background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 15%, transparent);color:var(--dsw-alias-state-success-primary)}.lc-kind-compaction{background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 15%, transparent);color:var(--dsw-alias-state-error-primary)}.lc-kind-prune{color:#8b5cf6;background:#8b5cf626}.lc-kind-model{background:color-mix(in srgb, var(--dsw-alias-brand-primary) 15%, transparent);color:var(--dsw-alias-brand-primary)}.lc-kind-mode{background:color-mix(in srgb, var(--dsw-alias-label-secondary) 15%, transparent);color:var(--dsw-alias-label-secondary)}.lc-event-label{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.lc-event-at{color:var(--dsw-alias-label-secondary);white-space:nowrap;flex:none;font-size:11px}.lc-event-tokens{color:var(--dsw-alias-state-success-primary);white-space:nowrap;font-weight:600}.lc-event-tokens.lc-up{color:var(--dsw-alias-state-warn-primary)}.lc-event-time{color:var(--dsw-alias-label-secondary);font-size:12px}@container lc-card (width<=380px){.lc-event{flex-wrap:wrap}.lc-event-label{flex-basis:calc(100% - 92px)}}";
9616
+ const css$6 = ".lc-event{align-items:center;gap:8px;padding:3px 0;display:flex}.lc-event-icon{text-align:center;width:18px;color:var(--dsw-alias-state-warn-primary)}.lc-event-icon.lc-event-inject{color:var(--color-purple-500)}.lc-event-icon.lc-event-model{color:var(--dsw-alias-brand-primary)}.lc-event-icon.lc-event-mode{color:var(--dsw-alias-label-secondary)}.lc-kind{white-space:nowrap;border-radius:4px;flex:none;padding:1px 6px;font-size:10px;font-weight:600}.lc-kind-inject{background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 15%, transparent);color:var(--dsw-alias-state-success-primary)}.lc-kind-compaction{background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 15%, transparent);color:var(--dsw-alias-state-error-primary)}.lc-kind-prune{background:color-mix(in srgb, var(--color-violet-500) 15%, transparent);color:var(--color-violet-500)}.lc-kind-model{background:color-mix(in srgb, var(--dsw-alias-brand-primary) 15%, transparent);color:var(--dsw-alias-brand-primary)}.lc-kind-mode{background:color-mix(in srgb, var(--dsw-alias-label-secondary) 15%, transparent);color:var(--dsw-alias-label-secondary)}.lc-event-label{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.lc-event-at{color:var(--dsw-alias-label-secondary);white-space:nowrap;flex:none;font-size:11px}.lc-event-tokens{color:var(--dsw-alias-state-success-primary);white-space:nowrap;font-weight:600}.lc-event-tokens.lc-up{color:var(--dsw-alias-state-warn-primary)}.lc-event-time{color:var(--dsw-alias-label-secondary);font-size:12px}";
9267
9617
  const tagId$6 = "dsh-context/events.css";
9268
9618
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$6) + "]") === null) {
9269
9619
  const tag = document.createElement("style");
@@ -9274,7 +9624,7 @@ window.__ModuleLoader__.load({
9274
9624
  }
9275
9625
  //#endregion
9276
9626
  //#region \0dsh-global-css:/home/runner/work/dsh-context/dsh-context/src/client/styles/fileCard.css.mjs
9277
- const css$5 = ".lc-fa-ctl,.lc-br-toolctl{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:8px;display:flex}.lc-fa-ctl .lc-gran{margin-left:0}.lc-fa-n{opacity:.75;margin-left:4px;font-weight:700}.lc-fa-search,.lc-br-tool-search{min-width:80px;font:inherit;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);border-radius:6px;outline:none;flex:1;padding:3px 8px;font-size:12px}.lc-fa-search:focus,.lc-br-tool-search:focus{border-color:var(--dsw-alias-label-dimmed)}.lc-fa-meta{color:var(--dsw-alias-label-secondary);flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:6px;font-size:12px;display:flex}.lc-fa-meta .lc-fa-sort{flex:none}.lc-fa-meta-delta{position:relative}.lc-fa-meta-tip{white-space:normal;max-width:260px;line-height:1.5;top:calc(100% + 6px);left:0}.lc-fa-meta-delta:hover .lc-fa-meta-tip{opacity:1}.lc-fa-item{transition:background-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out), border-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);border:1px solid #0000;border-radius:8px}.lc-fa-item-on{background:var(--dsw-alias-bg-layer-2);border-color:var(--dsw-alias-border-l2)}.lc-fa-row{width:100%;color:var(--dsw-alias-label-primary);font:inherit;cursor:pointer;text-align:left;transition:background-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);background:0 0;border:0;border-radius:7px;align-items:center;gap:7px;padding:6px 8px;font-size:12px;display:flex}.lc-fa-row:hover{background:var(--dsw-alias-interactive-bg-hover)}.lc-fa-form{opacity:.85;flex:none;justify-content:center;align-items:center;width:20px;height:14px;font-size:11px;display:flex}.lc-fa-lang{border-radius:4px;justify-content:center;align-items:center;min-width:16px;height:13px;padding:0 2px;font-size:8px;font-weight:700;line-height:1;display:inline-flex}.lc-fa-row .lc-br-chev{margin-right:-2px}.lc-fa-path{word-break:break-all;flex:1;min-width:0}@container lc-card (width<=380px){.lc-fa-row{flex-wrap:wrap}.lc-fa-path{flex-basis:calc(100% - 46px)}.lc-fa-ctl .lc-gran{flex-wrap:wrap}}.lc-fa-file{cursor:pointer}.lc-fa-file:hover{text-decoration:underline}.lc-fa-path em{color:var(--dsw-alias-label-secondary);font-style:normal}.lc-fa-badge{font-variant-numeric:tabular-nums;white-space:nowrap;border-radius:999px;flex:none;align-items:center;gap:4px;padding:1px 7px;font-size:11px;font-weight:600;display:inline-flex}.lc-fa-badge i{background:currentColor;border-radius:50%;width:5px;height:5px;display:inline-block}.lc-fa-b-read{color:var(--dsw-alias-brand-primary);background:color-mix(in srgb, var(--dsw-alias-brand-primary) 14%, transparent)}.lc-fa-b-write{color:var(--dsw-alias-state-success-primary);background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 14%, transparent)}.lc-fa-b-search{color:var(--dsw-alias-state-warn-primary);background:color-mix(in srgb, var(--dsw-alias-state-warn-primary) 14%, transparent)}.lc-fa-chip-read,.lc-fa-chip-read:hover{color:var(--dsw-alias-brand-primary)}.lc-fa-chip-write,.lc-fa-chip-write:hover{color:var(--dsw-alias-state-success-primary)}.lc-fa-chip-search,.lc-fa-chip-search:hover{color:var(--dsw-alias-state-warn-primary)}.lc-fa-chip-read.lc-gran-on,.lc-fa-chip-read.lc-gran-on:hover{background:color-mix(in srgb, var(--dsw-alias-brand-primary) 14%, transparent);color:var(--dsw-alias-brand-primary)}.lc-fa-chip-write.lc-gran-on,.lc-fa-chip-write.lc-gran-on:hover{background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 14%, transparent);color:var(--dsw-alias-state-success-primary)}.lc-fa-chip-search.lc-gran-on,.lc-fa-chip-search.lc-gran-on:hover{background:color-mix(in srgb, var(--dsw-alias-state-warn-primary) 14%, transparent);color:var(--dsw-alias-state-warn-primary)}.lc-fa-delta{font-variant-numeric:tabular-nums;white-space:nowrap;flex:none;gap:5px;font-size:11px;font-weight:600;display:inline-flex}.lc-fa-up{color:var(--dsw-alias-state-success-primary)}.lc-fa-down{color:var(--dsw-alias-state-error-primary)}.lc-fa-time{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;flex:none;font-size:11px}.lc-fa-ops{border-left:2px solid var(--dsw-alias-border-l1);flex-direction:column;gap:1px;margin:0 8px 8px 15px;padding:2px 0 2px 10px;display:flex}.lc-fa-op{min-width:0;color:var(--dsw-alias-label-primary);font:inherit;text-align:left;transition:background-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);background:0 0;border:0;border-radius:5px;align-items:center;gap:8px;padding:3px 6px;font-size:11px;display:flex}.lc-fa-op-link{cursor:pointer}.lc-fa-op-link:hover{background:var(--dsw-alias-interactive-bg-hover)}.lc-fa-op-time{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;flex:none;margin-left:auto}.lc-fa-op-tool{text-overflow:ellipsis;white-space:nowrap;background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);max-width:220px;color:var(--dsw-alias-label-secondary);border-radius:999px;flex:none;padding:0 6px;font-size:11px;overflow:hidden}.lc-fa-op-detail{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--dsw-alias-label-secondary);flex:1;overflow:hidden}.lc-fa-read{color:var(--dsw-alias-brand-primary);font-variant-numeric:tabular-nums;white-space:nowrap;flex:none;font-size:11px;font-weight:600}";
9627
+ const css$5 = ".lc-fa-ctl,.lc-br-toolctl{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:8px;display:flex}.lc-fa-ctl .lc-gran{margin-left:0}.lc-fa-n{opacity:.75;margin-left:4px;font-weight:700}.lc-fa-search,.lc-br-tool-search{min-width:80px;font:inherit;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);border-radius:6px;outline:none;flex:1;padding:3px 8px;font-size:12px}.lc-fa-meta{color:var(--dsw-alias-label-secondary);flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:6px;font-size:12px;display:flex}.lc-fa-meta .lc-fa-sort{flex:none}.lc-fa-meta-delta{position:relative}.lc-fa-meta-tip{white-space:normal;max-width:260px;line-height:1.5;top:calc(100% + 6px);left:0}.lc-fa-item{transition:background-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out), border-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);border:1px solid #0000;border-radius:8px}.lc-fa-item-on{background:var(--dsw-alias-bg-layer-2);border-color:var(--dsw-alias-border-l2)}.lc-fa-row{width:100%;color:var(--dsw-alias-label-primary);font:inherit;cursor:pointer;text-align:left;transition:background-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);background:0 0;border:0;border-radius:7px;align-items:center;gap:7px;padding:6px 8px;font-size:12px;display:flex}.lc-fa-form{opacity:.85;flex:none;justify-content:center;align-items:center;width:20px;height:14px;font-size:11px;display:flex}.lc-fa-lang{border-radius:4px;justify-content:center;align-items:center;min-width:16px;height:13px;padding:0 2px;font-size:8px;font-weight:700;line-height:1;display:inline-flex}.lc-fa-row .lc-br-chev{margin-right:-2px}.lc-fa-path{word-break:break-all;min-width:0}.lc-fa-file{cursor:pointer}.lc-fa-path em{color:var(--dsw-alias-label-secondary);font-style:normal}.lc-fa-badge{font-variant-numeric:tabular-nums;white-space:nowrap;border-radius:999px;flex:none;align-items:center;gap:4px;padding:1px 7px;font-size:11px;font-weight:600;display:inline-flex}.lc-fa-badge i{background:currentColor;border-radius:50%;width:5px;height:5px;display:inline-block}.lc-fa-b-read{color:var(--dsw-alias-brand-primary);background:color-mix(in srgb, var(--dsw-alias-brand-primary) 14%, transparent)}.lc-fa-b-write{color:var(--dsw-alias-state-success-primary);background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 14%, transparent)}.lc-fa-b-search{color:var(--dsw-alias-state-warn-primary);background:color-mix(in srgb, var(--dsw-alias-state-warn-primary) 14%, transparent)}.lc-fa-chip-read,.lc-fa-chip-read:hover{color:var(--dsw-alias-brand-primary)}.lc-fa-chip-write,.lc-fa-chip-write:hover{color:var(--dsw-alias-state-success-primary)}.lc-fa-chip-search,.lc-fa-chip-search:hover{color:var(--dsw-alias-state-warn-primary)}.lc-fa-chip-read.lc-gran-on,.lc-fa-chip-read.lc-gran-on:hover{background:color-mix(in srgb, var(--dsw-alias-brand-primary) 14%, transparent);color:var(--dsw-alias-brand-primary)}.lc-fa-chip-write.lc-gran-on,.lc-fa-chip-write.lc-gran-on:hover{background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 14%, transparent);color:var(--dsw-alias-state-success-primary)}.lc-fa-chip-search.lc-gran-on,.lc-fa-chip-search.lc-gran-on:hover{background:color-mix(in srgb, var(--dsw-alias-state-warn-primary) 14%, transparent);color:var(--dsw-alias-state-warn-primary)}.lc-fa-delta{font-variant-numeric:tabular-nums;white-space:nowrap;flex:none;gap:5px;font-size:11px;font-weight:600;display:inline-flex}.lc-fa-up{color:var(--dsw-alias-state-success-primary)}.lc-fa-down{color:var(--dsw-alias-state-error-primary)}.lc-fa-time{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;flex:none;font-size:11px}.lc-fa-ops{border-left:2px solid var(--dsw-alias-border-l1);flex-direction:column;gap:1px;margin:0 8px 8px 15px;padding:2px 0 2px 10px;display:flex}.lc-fa-op{min-width:0;color:var(--dsw-alias-label-primary);font:inherit;text-align:left;transition:background-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);background:0 0;border:0;border-radius:5px;align-items:center;gap:8px;padding:3px 6px;font-size:11px;display:flex}.lc-fa-op-link{cursor:pointer}.lc-fa-op-time{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;flex:none;margin-left:auto}.lc-fa-op-tool{text-overflow:ellipsis;white-space:nowrap;background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);max-width:220px;color:var(--dsw-alias-label-secondary);border-radius:999px;flex:none;padding:0 6px;font-size:11px;overflow:hidden}.lc-fa-op-detail{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--dsw-alias-label-secondary);flex:1;overflow:hidden}.lc-fa-read{color:var(--dsw-alias-brand-primary);font-variant-numeric:tabular-nums;white-space:nowrap;flex:none;font-size:11px;font-weight:600}";
9278
9628
  const tagId$5 = "dsh-context/fileCard.css";
9279
9629
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$5) + "]") === null) {
9280
9630
  const tag = document.createElement("style");
@@ -9285,7 +9635,7 @@ window.__ModuleLoader__.load({
9285
9635
  }
9286
9636
  //#endregion
9287
9637
  //#region \0dsh-global-css:/home/runner/work/dsh-context/dsh-context/src/client/styles/modal.css.mjs
9288
- const css$4 = ".lc-modal-backdrop{z-index:200;background:var(--dsw-alias-bg-mask-1,#00000073);justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.lc-modal-card{box-sizing:border-box;background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l2);width:min(720px,100vw - 48px);max-height:min(82vh,760px);box-shadow:var(--dsw-shadow-lv3,0 12px 32px #0006);color:var(--dsw-alias-label-primary);border-radius:12px;padding:16px 18px 18px;font-size:13px;overflow-y:auto}.lc-modal-head{align-items:baseline;gap:8px;margin-bottom:12px;display:flex}.lc-modal-title{font-size:14px;font-weight:600}.lc-modal-close{color:var(--dsw-alias-label-secondary);cursor:pointer;transition:color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out), background-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);background:0 0;border:0;border-radius:6px;margin-left:auto;padding:2px 6px;font-family:inherit;font-size:18px;line-height:1}.lc-modal-close:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2)}.lc-gate-card{width:min(440px,100vw - 48px)}.lc-gate-body{color:var(--dsw-alias-label-secondary);line-height:1.7}.lc-gate-versions{gap:24px;margin-top:14px;display:flex}.lc-gate-version{flex-direction:column;gap:2px;display:flex}.lc-gate-version-label{color:var(--dsw-alias-label-secondary);font-size:11px}.lc-gate-version-value{font-weight:600;font-family:var(--dsw-font-family-mono,monospace);color:var(--dsw-alias-label-primary)}.lc-gate-or-newer{color:var(--dsw-alias-label-secondary);margin-left:6px;font-family:inherit;font-size:11px;font-weight:400}.lc-gate-actions{justify-content:flex-end;margin-top:16px;display:flex}.lc-gate-ok{cursor:pointer;background:var(--dsw-alias-button-primary-fill);color:var(--dsw-alias-label-primary-foreground);transition:filter var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);border:0;border-radius:6px;padding:6px 16px;font-family:inherit;font-size:12px}.lc-gate-ok:hover{filter:brightness(1.1)}";
9638
+ const css$4 = ".lc-modal-backdrop{z-index:200;background:var(--dsw-alias-bg-mask-1,#00000073);justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.lc-modal-card{box-sizing:border-box;background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l2);width:min(720px,100vw - 48px);max-height:min(82vh,760px);box-shadow:var(--dsw-shadow-lv3,0 12px 32px #0006);color:var(--dsw-alias-label-primary);border-radius:12px;padding:16px 18px 18px;font-size:13px;overflow-y:auto}.lc-modal-head{align-items:baseline;gap:8px;margin-bottom:12px;display:flex}.lc-modal-title{font-size:14px;font-weight:600}.lc-modal-close{color:var(--dsw-alias-label-secondary);cursor:pointer;transition:color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out), background-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);background:0 0;border:0;border-radius:6px;margin-left:auto;padding:2px 6px;font-family:inherit;font-size:18px;line-height:1}.lc-gate-card{width:min(440px,100vw - 48px)}.lc-gate-body{color:var(--dsw-alias-label-secondary);line-height:1.7}.lc-gate-versions{gap:24px;margin-top:14px;display:flex}.lc-gate-version{flex-direction:column;gap:2px;display:flex}.lc-gate-version-label{color:var(--dsw-alias-label-secondary);font-size:11px}.lc-gate-version-value{font-weight:600;font-family:var(--dsw-font-family-mono,monospace);color:var(--dsw-alias-label-primary)}.lc-gate-or-newer{color:var(--dsw-alias-label-secondary);margin-left:6px;font-family:inherit;font-size:11px;font-weight:400}.lc-gate-actions{justify-content:flex-end;margin-top:16px;display:flex}.lc-gate-ok{cursor:pointer;background:var(--dsw-alias-button-primary-fill);color:var(--dsw-alias-label-primary-foreground);transition:filter var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);border:0;border-radius:6px;padding:6px 16px;font-family:inherit;font-size:12px}";
9289
9639
  const tagId$4 = "dsh-context/modal.css";
9290
9640
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$4) + "]") === null) {
9291
9641
  const tag = document.createElement("style");
@@ -9296,7 +9646,7 @@ window.__ModuleLoader__.load({
9296
9646
  }
9297
9647
  //#endregion
9298
9648
  //#region \0dsh-global-css:/home/runner/work/dsh-context/dsh-context/src/client/styles/browser.css.mjs
9299
- const css$3 = ".lc-br-dna-ctl{flex:none;margin-left:0}.lc-br-bar-dna .lc-stacked-seg{background-image:linear-gradient(to right, transparent calc(100% - min(.5px, 12.5%)), var(--dsw-alias-bg-layer-1) 0)}.lc-br-hint{color:var(--dsw-alias-label-secondary);white-space:nowrap;margin-left:auto;font-size:11px;font-weight:400}.lc-br-pick{font:inherit;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);border-radius:6px;max-width:240px;padding:3px 6px;font-size:12px}.lc-br-meta{color:var(--dsw-alias-label-secondary);flex-wrap:wrap;gap:6px 16px;margin-bottom:8px;display:flex}.lc-br-meta b{color:var(--dsw-alias-label-primary)}.lc-br-meta .lc-est{margin-left:auto}.lc-br-note{color:var(--dsw-alias-label-secondary);margin-top:8px;font-size:12px}.lc-br-retry{color:var(--dsw-alias-brand-primary);font:inherit;cursor:pointer;text-underline-offset:2px;transition:filter var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);background:0 0;border:0;padding:0;font-size:12px;text-decoration:underline}.lc-br-retry:hover{filter:brightness(1.15)}.lc-br-cats{flex-direction:column;gap:4px;margin-top:10px;display:flex}.lc-br-cat{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);border-radius:8px;overflow:hidden}.lc-br-cat-empty{opacity:.55}.lc-br-cat-row{width:100%;color:var(--dsw-alias-label-primary);font:inherit;cursor:pointer;text-align:left;transition:background-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);background:0 0;border:0;align-items:center;gap:8px;padding:7px 10px;display:flex}.lc-br-cat-row:hover,.lc-br-cat-on{background:var(--dsw-alias-interactive-bg-hover)}.lc-br-cat-on i{box-shadow:0 0 0 1px var(--dsw-alias-brand-primary)}.lc-br-cat-row i{width:8px;height:8px;transition:box-shadow var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);border-radius:2px;flex:none;display:inline-block}.lc-br-cat-label{font-weight:600}.lc-br-cat-count{color:var(--dsw-alias-label-secondary);white-space:nowrap;font-size:12px}.lc-br-count-grp{flex:1;align-items:center;gap:4px;min-width:0;display:inline-flex}.lc-br-chev{width:12px;height:14px;color:var(--dsw-alias-label-tertiary);flex:none;justify-content:center;align-items:center;display:flex}.lc-br-chev:before{content:\"\";width:5px;height:5px;transition:transform var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);border-bottom:1px solid;border-right:1px solid;transform:rotate(-45deg)}.lc-br-chev-on:before{transform:rotate(45deg)}.lc-br-tokens{color:var(--dsw-alias-label-secondary);flex:none;font-size:12px}.lc-br-delta,.lc-br-tdelta{white-space:nowrap;border-radius:4px;flex:none;padding:0 5px;font-size:11px;font-weight:600}.lc-br-delta-up,.lc-br-tdelta-up{color:var(--dsw-alias-state-success-primary);background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 15%, transparent)}.lc-br-delta-down,.lc-br-tdelta-down{color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 15%, transparent)}.lc-br-tokens-grp{flex:none;align-items:center;gap:4px;min-width:0;display:inline-flex}.lc-br-pct{text-align:right;width:36px;color:var(--dsw-alias-label-secondary);flex:none;font-size:12px}.lc-br-body{border-top:1px solid var(--dsw-alias-border-l1);flex-direction:column;gap:2px;padding:4px 6px;display:flex}.lc-br-elem{border-radius:6px}.lc-br-elem-on{background:var(--dsw-alias-interactive-bg-active)}.lc-br-elem-row{width:100%;color:var(--dsw-alias-label-primary);font:inherit;cursor:pointer;text-align:left;transition:background-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);background:0 0;border:0;border-radius:6px;align-items:center;gap:8px;padding:5px 6px;font-size:12px;display:flex}.lc-br-elem-row:hover{background:var(--dsw-alias-interactive-bg-hover)}.lc-br-err-dot{background:var(--dsw-alias-state-error-primary);width:6px;height:6px;box-shadow:0 0 0 2px color-mix(in srgb, var(--dsw-alias-state-error-primary) 10%, transparent);border-radius:50%;flex:none}.lc-br-tag{min-width:0;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);text-overflow:ellipsis;white-space:nowrap;border-radius:4px;max-width:220px;padding:0 6px;font-size:11px;overflow:hidden}.lc-br-tool-plugin{color:var(--dsw-alias-brand-primary);background:color-mix(in srgb, var(--dsw-alias-brand-primary) 14%, transparent);border-color:#0000;border-radius:6px;font-size:12px}.lc-br-preview{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.lc-br-time{color:var(--dsw-alias-label-secondary);flex:none;font-size:11px}.lc-br-content{flex-direction:column;gap:6px;padding:2px 6px 8px 26px;display:flex}.lc-br-dim{color:var(--dsw-alias-label-secondary)}";
9649
+ const css$3 = ".lc-br-dna-ctl{flex:none;margin-left:0}.lc-br-bar-dna .lc-stacked-seg{background-image:linear-gradient(to right, transparent calc(100% - min(.5px, 12.5%)), var(--dsw-alias-bg-layer-1) 0)}.lc-br-hint{color:var(--dsw-alias-label-secondary);white-space:nowrap;margin-left:auto;font-size:11px;font-weight:400}.lc-br-pick{font:inherit;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);border-radius:6px;max-width:240px;padding:3px 6px;font-size:12px}.lc-br-meta{color:var(--dsw-alias-label-secondary);flex-wrap:wrap;gap:6px 16px;margin-bottom:8px;display:flex}.lc-br-meta b{color:var(--dsw-alias-label-primary)}.lc-br-meta .lc-est{margin-left:auto}.lc-br-note{color:var(--dsw-alias-label-secondary);margin-top:8px;font-size:12px}.lc-br-retry{color:var(--dsw-alias-brand-primary);font:inherit;cursor:pointer;text-underline-offset:2px;transition:filter var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);background:0 0;border:0;padding:0;font-size:12px;text-decoration:underline}.lc-br-cats{flex-direction:column;gap:4px;margin-top:10px;display:flex}.lc-br-cat{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);border-radius:8px;overflow:hidden}.lc-br-cat-empty{opacity:.55}.lc-br-cat-row{width:100%;color:var(--dsw-alias-label-primary);font:inherit;cursor:pointer;text-align:left;transition:background-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);background:0 0;border:0;align-items:center;gap:8px;padding:7px 10px;display:flex}.lc-br-cat-on{background:var(--dsw-alias-interactive-bg-hover)}.lc-br-cat-on i{box-shadow:0 0 0 1px var(--dsw-alias-brand-primary)}.lc-br-cat-row i{width:8px;height:8px;transition:box-shadow var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);border-radius:2px;flex:none;display:inline-block}.lc-br-cat-label{font-weight:600}.lc-br-cat-count{color:var(--dsw-alias-label-secondary);white-space:nowrap;font-size:12px}.lc-br-count-grp{flex:1;align-items:center;gap:4px;min-width:0;display:inline-flex}.lc-br-chev{width:12px;height:14px;color:var(--dsw-alias-label-tertiary);flex:none;justify-content:center;align-items:center;display:flex}.lc-br-chev:before{content:\"\";width:5px;height:5px;transition:transform var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);border-bottom:1px solid;border-right:1px solid;transform:rotate(-45deg)}.lc-br-chev-on:before{transform:rotate(45deg)}.lc-br-tokens{color:var(--dsw-alias-label-secondary);flex:none;font-size:12px}.lc-br-delta,.lc-br-tdelta{white-space:nowrap;border-radius:4px;flex:none;padding:0 5px;font-size:11px;font-weight:600}.lc-br-delta-up,.lc-br-tdelta-up{color:var(--dsw-alias-state-success-primary);background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 15%, transparent)}.lc-br-delta-down,.lc-br-tdelta-down{color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 15%, transparent)}.lc-br-tokens-grp{flex:none;align-items:center;gap:4px;min-width:0;display:inline-flex}.lc-br-pct{text-align:right;width:36px;color:var(--dsw-alias-label-secondary);flex:none;font-size:12px}.lc-br-body{border-top:1px solid var(--dsw-alias-border-l1);flex-direction:column;gap:2px;padding:4px 6px;display:flex}.lc-br-elem{border-radius:6px}.lc-br-elem-on{background:var(--dsw-alias-interactive-bg-active)}.lc-br-elem-row{width:100%;color:var(--dsw-alias-label-primary);font:inherit;cursor:pointer;text-align:left;transition:background-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);background:0 0;border:0;border-radius:6px;align-items:center;gap:8px;padding:5px 6px;font-size:12px;display:flex}.lc-br-err-dot{background:var(--dsw-alias-state-error-primary);width:6px;height:6px;box-shadow:0 0 0 2px color-mix(in srgb, var(--dsw-alias-state-error-primary) 10%, transparent);border-radius:50%;flex:none}.lc-br-tag{min-width:0;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);text-overflow:ellipsis;white-space:nowrap;border-radius:4px;max-width:220px;padding:0 6px;font-size:11px;overflow:hidden}.lc-br-tool-plugin{color:var(--dsw-alias-brand-primary);background:color-mix(in srgb, var(--dsw-alias-brand-primary) 14%, transparent);border-color:#0000;border-radius:6px;font-size:12px}.lc-br-preview{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.lc-br-time,.lc-br-hits{color:var(--dsw-alias-label-secondary);flex:none;font-size:11px}.lc-br-content{flex-direction:column;gap:6px;padding:2px 6px 8px 26px;display:flex}.lc-br-dim{color:var(--dsw-alias-label-secondary)}";
9300
9650
  const tagId$3 = "dsh-context/browser.css";
9301
9651
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$3) + "]") === null) {
9302
9652
  const tag = document.createElement("style");
@@ -9307,7 +9657,7 @@ window.__ModuleLoader__.load({
9307
9657
  }
9308
9658
  //#endregion
9309
9659
  //#region \0dsh-global-css:/home/runner/work/dsh-context/dsh-context/src/client/styles/detailSections.css.mjs
9310
- const css$2 = ".lc-ts-card{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);border-radius:6px;min-width:0;overflow:hidden}.lc-ts-card-head{color:var(--dsw-alias-label-secondary);border-bottom:1px solid var(--dsw-alias-border-l1);align-items:center;gap:8px;padding:6px 10px;font-size:11px;font-weight:600;display:flex}.lc-ts-card-head-wrap{flex-wrap:wrap}.lc-ts-card-head b{color:var(--dsw-alias-label-primary)}.lc-ts-call-name{font-size:13px;font-family:var(--ds-font-family-code,ui-monospace, SFMono-Regular, Menlo, monospace);text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.lc-ts-card-count{margin-left:auto}.lc-ts-card-right{align-items:center;gap:8px;margin-left:auto;display:inline-flex}.lc-ts-card-meta{color:var(--dsw-alias-label-secondary);white-space:nowrap;font-variant-numeric:tabular-nums;font-size:11px;font-weight:400}.lc-ts-call-state{white-space:nowrap;font-size:11px;font-weight:600;line-height:1;font-family:var(--ds-font-family-code,ui-monospace, SFMono-Regular, Menlo, monospace);border-radius:999px;flex:none;align-items:center;gap:4px;padding:2px 7px;display:inline-flex}.lc-ts-call-state i{background:currentColor;border-radius:50%;flex:none;width:6px;height:6px}.lc-ts-call-ok{color:var(--dsw-alias-state-success-primary);background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 12%, transparent)}.lc-ts-call-err{color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent)}.lc-ts-desc-body{color:var(--dsw-alias-label-primary);white-space:pre-wrap;word-break:break-word;scrollbar-width:thin;max-height:320px;margin:0;padding:8px 10px;font-size:12px;line-height:1.55;overflow-y:auto}.lc-ts-lines{counter-reset:lc-line}.lc-ts-line{padding-left:26px;display:block;position:relative}.lc-ts-line:before{content:counter(lc-line);counter-increment:lc-line;text-align:right;width:20px;color:var(--dsw-alias-label-tertiary);user-select:none;padding-right:6px;font-size:11px;position:absolute;left:0}.lc-ts-line:empty:after{content:\"​\"}.lc-ts-param-row{border-top:1px solid var(--dsw-alias-border-l1);grid-template-columns:minmax(0,140px) minmax(0,90px) 56px minmax(0,1fr);align-items:baseline;gap:2px 10px;padding:6px 10px;font-size:12px;display:grid}.lc-ts-param-row:first-of-type{border-top:0}.lc-ts-param-name{color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.lc-ts-param-type{color:var(--dsw-alias-label-secondary);font-family:var(--ds-font-family-code,ui-monospace, SFMono-Regular, Menlo, monospace);text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.lc-ts-param-req{color:var(--dsw-alias-state-warn-primary);font-size:11px;font-weight:600}.lc-ts-param-req-off{color:var(--dsw-alias-label-secondary);font-size:11px}.lc-ts-param-desc{color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere;grid-column:1/-1;line-height:1.5}.lc-ts-params-empty{color:var(--dsw-alias-label-secondary);padding:8px 10px;font-size:12px}.lc-ts-arg-row{border-top:1px solid var(--dsw-alias-border-l1);grid-template-columns:minmax(0,96px) 1fr;align-items:start;column-gap:12px;padding:6px 10px;font-size:12px;display:grid}.lc-ts-arg-row:first-of-type{border-top:0}.lc-ts-arg-row .lc-ts-param-name{text-overflow:unset;white-space:normal;overflow-wrap:anywhere;overflow:visible}.lc-ts-arg-val{color:var(--dsw-alias-label-primary);font-family:var(--ds-font-family-code,ui-monospace, SFMono-Regular, Menlo, monospace);white-space:pre-wrap;word-break:break-word;scrollbar-width:thin;max-height:200px;font-size:12px;line-height:1.55;overflow-y:auto}.lc-ts-json{flex-direction:column;gap:4px;display:flex}.lc-ts-json-toggle{color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;transition:color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);background:0 0;border:0;align-self:flex-start;padding:0;font-size:11px}.lc-ts-json-toggle:hover{color:var(--dsw-alias-label-primary);text-decoration:underline}.lc-rich-seg{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);border-radius:6px;gap:2px;margin-left:auto;padding:1px;display:flex}.lc-rich-seg-btn{color:var(--dsw-alias-label-secondary);cursor:pointer;transition:color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);background:0 0;border:0;border-radius:5px;padding:3px 8px;font-family:inherit;font-size:11px;line-height:1}.lc-rich-seg-btn:hover{color:var(--dsw-alias-label-primary)}.lc-rich-seg-on,.lc-rich-seg-on:hover{background:var(--dsw-alias-button-primary-fill);color:var(--dsw-alias-label-primary-foreground)}.lc-rich-copy{color:var(--dsw-alias-label-secondary);cursor:pointer;transition:color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);background:0 0;border:0;border-radius:5px;align-items:center;padding:2px;display:inline-flex}.lc-rich-copy:hover{color:var(--dsw-alias-label-primary)}.lc-rich-copy-on,.lc-rich-copy-on:hover{color:var(--dsw-alias-state-success-primary)}.lc-ts-desc-md{color:var(--dsw-alias-label-primary);word-break:break-word;overflow-wrap:anywhere;scrollbar-width:thin;min-width:0;max-height:320px;padding:4px 10px;font-size:12px;line-height:1.55;overflow:hidden auto}.lc-ts-desc-md>div{font-size:13px;line-height:1.55}.lc-ts-desc-md div :is(h1,h2,h3,h4,h5,h6){margin:10px 0 4px;font-size:13px;font-weight:600}.lc-ts-desc-md div p{white-space:pre-line;margin:6px 0}.lc-ts-desc-md div p br{display:none}.lc-ts-desc-md div pre{white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word;margin:6px 0}.lc-ts-desc-md div :not(pre)>code{box-decoration-break:clone;padding:1px 5px;line-height:1.3;font-size:1em!important}.lc-ts-desc-md div table code{font-size:inherit}";
9660
+ const css$2 = ".lc-ts-card{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);border-radius:6px;min-width:0;overflow:hidden}.lc-ts-card-head{color:var(--dsw-alias-label-secondary);border-bottom:1px solid var(--dsw-alias-border-l1);align-items:center;gap:8px;padding:6px 10px;font-size:11px;font-weight:600;display:flex}.lc-ts-card-head-wrap{flex-wrap:wrap}.lc-ts-card-head b{color:var(--dsw-alias-label-primary)}.lc-ts-call-name{font-size:13px;font-family:var(--ds-font-family-code,ui-monospace, SFMono-Regular, Menlo, monospace);text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.lc-ts-card-count{margin-left:auto}.lc-ts-card-right{align-items:center;gap:8px;margin-left:auto;display:inline-flex}.lc-ts-card-meta{color:var(--dsw-alias-label-secondary);white-space:nowrap;font-variant-numeric:tabular-nums;font-size:11px;font-weight:400}.lc-ts-call-state{white-space:nowrap;font-size:11px;font-weight:600;line-height:1;font-family:var(--ds-font-family-code,ui-monospace, SFMono-Regular, Menlo, monospace);border-radius:999px;flex:none;align-items:center;gap:4px;padding:2px 7px;display:inline-flex}.lc-ts-call-state i{background:currentColor;border-radius:50%;flex:none;width:6px;height:6px}.lc-ts-call-ok{color:var(--dsw-alias-state-success-primary);background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 12%, transparent)}.lc-ts-call-err{color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent)}.lc-ts-desc-body{color:var(--dsw-alias-label-primary);white-space:pre-wrap;word-break:break-word;scrollbar-width:thin;max-height:320px;margin:0;padding:8px 10px;font-size:12px;line-height:1.55;overflow-y:auto}.lc-ts-lines{counter-reset:lc-line}.lc-ts-line{padding-left:26px;display:block;position:relative}.lc-ts-line:before{content:counter(lc-line);counter-increment:lc-line;text-align:right;width:20px;color:var(--dsw-alias-label-tertiary);user-select:none;padding-right:6px;font-size:11px;position:absolute;left:0}.lc-ts-line:empty:after{content:\"​\"}.lc-ts-param-row{border-top:1px solid var(--dsw-alias-border-l1);grid-template-columns:minmax(0,140px) minmax(0,90px) 56px minmax(0,1fr);align-items:baseline;gap:2px 10px;padding:6px 10px;font-size:12px;display:grid}.lc-ts-param-row:first-of-type{border-top:0}.lc-ts-param-name{color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.lc-ts-param-type{color:var(--dsw-alias-label-secondary);font-family:var(--ds-font-family-code,ui-monospace, SFMono-Regular, Menlo, monospace);text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.lc-ts-param-req{color:var(--dsw-alias-state-warn-primary);font-size:11px;font-weight:600}.lc-ts-param-req-off{color:var(--dsw-alias-label-secondary);font-size:11px}.lc-ts-param-desc{color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere;grid-column:1/-1;line-height:1.5}.lc-ts-params-empty{color:var(--dsw-alias-label-secondary);padding:8px 10px;font-size:12px}.lc-ts-arg-row{border-top:1px solid var(--dsw-alias-border-l1);grid-template-columns:minmax(0,96px) 1fr;align-items:start;column-gap:12px;padding:6px 10px;font-size:12px;display:grid}.lc-ts-arg-row:first-of-type{border-top:0}.lc-ts-arg-row .lc-ts-param-name{text-overflow:unset;white-space:normal;overflow-wrap:anywhere;overflow:visible}.lc-ts-arg-val{color:var(--dsw-alias-label-primary);font-family:var(--ds-font-family-code,ui-monospace, SFMono-Regular, Menlo, monospace);white-space:pre-wrap;word-break:break-word;scrollbar-width:thin;max-height:200px;font-size:12px;line-height:1.55;overflow-y:auto}.lc-ts-json{flex-direction:column;gap:4px;display:flex}.lc-ts-json-toggle{color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;transition:color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);background:0 0;border:0;align-self:flex-start;padding:0;font-size:11px}.lc-rich-seg{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);border-radius:6px;gap:2px;margin-left:auto;padding:1px;display:flex}.lc-rich-seg-btn{color:var(--dsw-alias-label-secondary);cursor:pointer;transition:color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);background:0 0;border:0;border-radius:5px;padding:3px 8px;font-family:inherit;font-size:11px;line-height:1}.lc-rich-seg-btn:hover{color:var(--dsw-alias-label-primary)}.lc-rich-seg-on,.lc-rich-seg-on:hover{background:var(--dsw-alias-button-primary-fill);color:var(--dsw-alias-label-primary-foreground)}.lc-rich-copy{color:var(--dsw-alias-label-secondary);cursor:pointer;transition:color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);background:0 0;border:0;border-radius:5px;align-items:center;padding:2px;display:inline-flex}.lc-rich-copy:hover{color:var(--dsw-alias-label-primary)}.lc-rich-copy-on,.lc-rich-copy-on:hover{color:var(--dsw-alias-state-success-primary)}.lc-ts-desc-md{color:var(--dsw-alias-label-primary);word-break:break-word;overflow-wrap:anywhere;scrollbar-width:thin;min-width:0;max-height:320px;padding:4px 10px;font-size:12px;line-height:1.55;overflow:hidden auto}.lc-ts-desc-md>div{font-size:13px;line-height:1.55}.lc-ts-desc-md div :is(h1,h2,h3,h4,h5,h6){margin:10px 0 4px;font-size:13px;font-weight:600}.lc-ts-desc-md div p{white-space:pre-line;margin:6px 0}.lc-ts-desc-md div p br{display:none}.lc-ts-desc-md div pre{white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word;margin:6px 0}.lc-ts-desc-md div :not(pre)>code{box-decoration-break:clone;padding:1px 5px;line-height:1.3;font-size:1em!important}.lc-ts-desc-md div table code{font-size:inherit}";
9311
9661
  const tagId$2 = "dsh-context/detailSections.css";
9312
9662
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$2) + "]") === null) {
9313
9663
  const tag = document.createElement("style");
@@ -9318,7 +9668,7 @@ window.__ModuleLoader__.load({
9318
9668
  }
9319
9669
  //#endregion
9320
9670
  //#region \0dsh-global-css:/home/runner/work/dsh-context/dsh-context/src/client/styles/attachments.css.mjs
9321
- const css$1 = ".lc-att-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;padding:8px 10px;display:grid}.lc-att-item{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);width:100%;min-width:0;font:inherit;text-align:left;cursor:pointer;transition:border-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out), background-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);background:0 0;border-radius:8px;align-items:center;gap:8px;padding:6px;display:flex}.lc-att-item:hover{border-color:var(--dsw-alias-label-dimmed);background:var(--dsw-alias-interactive-bg-hover,var(--dsw-alias-bg-layer-2))}.lc-att-thumb{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:6px;flex:none;justify-content:center;align-items:center;width:64px;height:64px;padding:0;display:flex;overflow:hidden}.lc-att-thumb img{object-fit:cover;width:100%;height:100%;display:block}.lc-att-ph,.lc-att-err{color:var(--dsw-alias-label-secondary);text-align:center;padding:2px;font-size:10px}.lc-att-meta{flex-direction:column;gap:2px;min-width:0;display:flex}.lc-att-name{color:var(--dsw-alias-label-primary);overflow-wrap:anywhere;word-break:break-word;font-size:12px;line-height:1.3}.lc-att-row{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;font-size:11px}.lc-att-row-label{min-width:3.2em;font-weight:400;display:inline-block}.lc-att-lightbox{z-index:1000;place-items:center;padding:40px;display:grid;position:fixed;inset:0}.lc-att-lightbox-mask{background:var(--dsw-alias-bg-mask-1,#00000073);backdrop-filter:var(--dsw-mask-blur,blur(2px));position:absolute;inset:0}.lc-att-lightbox-img{object-fit:contain;background:var(--dsw-specific-input-major,var(--dsw-alias-bg-layer-1));max-width:min(100%,1600px);max-height:calc(100vh - 80px);box-shadow:var(--dsw-shadow-lv3,0 12px 32px #0006);border-radius:12px;position:relative}.lc-att-lightbox-close{z-index:1;border:1px solid var(--dsw-alias-border-l2-darkmode-thin,var(--dsw-alias-border-l1));background:var(--dsw-specific-input-major,var(--dsw-alias-bg-layer-1));width:36px;height:36px;color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:999px;place-items:center;padding:0;display:grid;position:fixed;top:20px;right:20px}";
9671
+ const css$1 = ".lc-att-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;padding:8px 10px;display:grid}.lc-att-item{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);width:100%;min-width:0;font:inherit;text-align:left;cursor:pointer;transition:border-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out), background-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);background:0 0;border-radius:8px;align-items:center;gap:8px;padding:6px;display:flex}.lc-att-thumb{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:6px;flex:none;justify-content:center;align-items:center;width:64px;height:64px;padding:0;display:flex;overflow:hidden}.lc-att-thumb img{object-fit:cover;width:100%;height:100%;display:block}.lc-att-ph,.lc-att-err{color:var(--dsw-alias-label-secondary);text-align:center;padding:2px;font-size:10px}.lc-att-meta{flex-direction:column;gap:2px;min-width:0;display:flex}.lc-att-name{color:var(--dsw-alias-label-primary);overflow-wrap:anywhere;word-break:break-word;font-size:12px;line-height:1.3}.lc-att-row{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;font-size:11px}.lc-att-row-label{min-width:3.2em;font-weight:400;display:inline-block}.lc-att-lightbox{z-index:1000;place-items:center;padding:40px;display:grid;position:fixed;inset:0}.lc-att-lightbox-mask{background:var(--dsw-alias-bg-mask-1,#00000073);backdrop-filter:var(--dsw-mask-blur,blur(2px));position:absolute;inset:0}.lc-att-lightbox-img{object-fit:contain;background:var(--dsw-specific-input-major,var(--dsw-alias-bg-layer-1));max-width:min(100%,1600px);max-height:calc(100vh - 80px);box-shadow:var(--dsw-shadow-lv3,0 12px 32px #0006);border-radius:12px;position:relative}.lc-att-lightbox-close{z-index:1;border:1px solid var(--dsw-alias-border-l2-darkmode-thin,var(--dsw-alias-border-l1));background:var(--dsw-specific-input-major,var(--dsw-alias-bg-layer-1));width:36px;height:36px;color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:999px;place-items:center;padding:0;display:grid;position:fixed;top:20px;right:20px}";
9322
9672
  const tagId$1 = "dsh-context/attachments.css";
9323
9673
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$1) + "]") === null) {
9324
9674
  const tag = document.createElement("style");
@@ -9329,7 +9679,7 @@ window.__ModuleLoader__.load({
9329
9679
  }
9330
9680
  //#endregion
9331
9681
  //#region \0dsh-global-css:/home/runner/work/dsh-context/dsh-context/src/client/styles/agentGraph.css.mjs
9332
- const css = ".lc-agents-chips{flex-wrap:wrap;gap:6px;margin-bottom:10px;display:flex}.lc-agents-chip{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;border-radius:999px;padding:2px 8px;font-size:11px}.lc-agents-chip-on{color:var(--dsw-alias-state-success-primary);border-color:color-mix(in srgb, var(--dsw-alias-state-success-primary) 40%, transparent)}.lc-agents-stage{overscroll-behavior-x:contain;margin:0 -4px;padding:0 4px;overflow-x:auto}.lc-agents-svg{max-width:none;margin:0 auto;display:block}.lc-agents-link{stroke-width:1.5px;stroke-opacity:.45}.lc-agents-link-live{stroke-opacity:.85}.lc-agents-flow{stroke-width:2px;stroke-linecap:round;stroke-dasharray:2 7;animation:.9s linear infinite lc-agent-flow}@keyframes lc-agent-flow{to{stroke-dashoffset:-9px}}.lc-agent-node{outline:none}.lc-agent-clickable{cursor:pointer}.lc-agent-halo{fill:#0000;transition:fill var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out)}.lc-agent-hover .lc-agent-halo,.lc-agent-node:focus-visible .lc-agent-halo{fill:var(--dsw-alias-interactive-bg-hover,var(--dsw-alias-bg-layer-2))}.lc-agent-self .lc-agent-halo{fill:var(--dsw-alias-bg-layer-2)}.lc-agent-running .lc-agent-halo{fill:color-mix(in srgb, var(--dsw-alias-state-success-primary) 12%, transparent);animation:1.8s ease-in-out infinite lc-agent-glow}.lc-agent-done .lc-agent-halo{fill:color-mix(in srgb, var(--dsw-alias-state-success-primary) 7%, transparent)}@keyframes lc-agent-glow{0%,to{opacity:1}50%{opacity:.4}}.lc-agent-track{fill:var(--dsw-alias-bg-layer-1);stroke:var(--dsw-alias-border-l1);stroke-width:1.5px}.lc-agent-seg{fill:none;stroke-width:9px;transition:stroke-dasharray .3s,stroke-dashoffset .3s}.lc-agent-free{stroke:color-mix(in srgb, var(--dsw-alias-label-secondary) 18%, transparent)}.lc-agent-pct{fill:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;pointer-events:none;font-size:11px;font-weight:600}.lc-agent-caption{text-align:center;pointer-events:none;width:100%;line-height:1.25}.lc-agent-label{color:var(--dsw-alias-label-primary);overflow-wrap:break-word;-webkit-line-clamp:3;-webkit-box-orient:vertical;font-size:11px;display:-webkit-box;overflow:hidden}.lc-agent-tokens{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;font-size:10px}.lc-agents-solo{padding:4px 0 10px}.lc-agents-inspector{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);border-radius:8px;flex-wrap:wrap;align-items:baseline;gap:4px 8px;min-width:0;margin-top:10px;padding:7px 10px;font-size:12px;display:flex}.lc-agents-inspector-name{color:var(--dsw-alias-label-primary);overflow-wrap:anywhere}.lc-agents-badge{background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-secondary);border-radius:999px;flex:none;padding:1px 6px;font-size:10px}.lc-agent-self-badge{vertical-align:1px;margin-left:5px}.lc-agents-badge-on{color:var(--dsw-alias-state-success-primary);border-color:color-mix(in srgb, var(--dsw-alias-state-success-primary) 40%, transparent)}.lc-agents-inspector-stats{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.lc-agents-inspector-open{color:var(--dsw-alias-brand-primary,#3b82f6);flex:none;margin-left:auto}.lc-agents-legend{color:var(--dsw-alias-label-secondary);flex-wrap:wrap;gap:4px 14px;margin-top:8px;font-size:11px;display:flex}.lc-agents-legend-item{align-items:center;gap:5px;display:inline-flex}.lc-agents-legend-item i{border-radius:2px;width:8px;height:8px}.lc-agents-legend-free{background:color-mix(in srgb, var(--dsw-alias-label-secondary) 18%, transparent)}.lc-agents-legend-edge{border-top:2px dashed var(--dsw-alias-label-secondary);border-radius:0!important;width:14px!important;height:0!important}";
9682
+ const css = ".lc-agents-chips{flex-wrap:wrap;gap:6px;margin-bottom:10px;display:flex}.lc-agents-chip{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;border-radius:999px;padding:2px 8px;font-size:11px}.lc-agents-chip-on{color:var(--dsw-alias-state-success-primary);border-color:color-mix(in srgb, var(--dsw-alias-state-success-primary) 40%, transparent)}.lc-agents-stage{overscroll-behavior-x:contain;margin:0 -4px;padding:0 4px;overflow-x:auto}.lc-agents-svg{max-width:none;margin:0 auto;display:block}.lc-agents-link-live{stroke-opacity:.85}.lc-agents-flow{stroke-linecap:round;stroke-dasharray:2 7}.lc-agent-node{outline:none}.lc-agent-clickable{cursor:pointer}.lc-agent-halo{transition:fill var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out)}.lc-agent-self .lc-agent-halo{fill:var(--dsw-alias-bg-layer-2)}.lc-agent-running .lc-agent-halo{fill:color-mix(in srgb, var(--dsw-alias-state-success-primary) 12%, transparent)}.lc-agent-done .lc-agent-halo{fill:color-mix(in srgb, var(--dsw-alias-state-success-primary) 7%, transparent)}.lc-agent-seg{transition:stroke-dasharray .3s,stroke-dashoffset .3s}.lc-agent-free{stroke:color-mix(in srgb, var(--dsw-alias-label-secondary) 18%, transparent)}.lc-agent-pct{font-variant-numeric:tabular-nums;pointer-events:none;font-size:11px;font-weight:600}.lc-agent-caption{text-align:center;pointer-events:none;width:100%;line-height:1.25}.lc-agent-label{color:var(--dsw-alias-label-primary);overflow-wrap:break-word;-webkit-line-clamp:3;-webkit-box-orient:vertical;font-size:11px;display:-webkit-box;overflow:hidden}.lc-agent-tokens{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;font-size:10px}.lc-agents-solo{padding:4px 0 10px}.lc-agents-inspector{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);border-radius:8px;flex-wrap:wrap;align-items:baseline;gap:4px 8px;min-width:0;margin-top:10px;padding:7px 10px;font-size:12px;display:flex}.lc-agents-inspector-name{color:var(--dsw-alias-label-primary);overflow-wrap:anywhere}.lc-agents-badge{background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-secondary);border-radius:999px;flex:none;padding:1px 6px;font-size:10px}.lc-agent-self-badge{vertical-align:1px;margin-left:5px}.lc-agents-badge-on{color:var(--dsw-alias-state-success-primary);border-color:color-mix(in srgb, var(--dsw-alias-state-success-primary) 40%, transparent)}.lc-agents-inspector-stats{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.lc-agents-inspector-open{color:var(--dsw-alias-brand-primary,var(--color-blue-500));flex:none;margin-left:auto}.lc-agents-legend{color:var(--dsw-alias-label-secondary);flex-wrap:wrap;gap:4px 14px;margin-top:8px;font-size:11px;display:flex}.lc-agents-legend-item{align-items:center;gap:5px;display:inline-flex}.lc-agents-legend-item i{border-radius:2px;width:8px;height:8px}.lc-agents-legend-free{background:color-mix(in srgb, var(--dsw-alias-label-secondary) 18%, transparent)}.lc-agents-legend-edge{border-top:2px dashed var(--dsw-alias-label-secondary);border-radius:0!important;width:14px!important;height:0!important}";
9333
9683
  const tagId = "dsh-context/agentGraph.css";
9334
9684
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
9335
9685
  const tag = document.createElement("style");
@@ -9398,7 +9748,7 @@ window.__ModuleLoader__.load({
9398
9748
  }, (props) => (0, react.createElement)(ContextJump, props));
9399
9749
  });
9400
9750
  registerContextCommand(ctx, kit);
9401
- const ContextModal = makeContextModal(ctx, kit);
9751
+ const ContextModal = makeContextModal(ctx, kit, settings);
9402
9752
  ctx.slots.inject("conversation.input.overlay", () => {
9403
9753
  return ctx.slots.register({
9404
9754
  name: "conversation.input.overlay",