dsh-context 0.59.2 → 0.61.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/README.md +5 -1
- package/lib/client.js +615 -86
- package/lib/index.d.ts +2 -0
- package/lib/index.js +2 -0
- package/package.json +3 -2
package/lib/client.js
CHANGED
|
@@ -107,6 +107,7 @@ window.__ModuleLoader__.load({
|
|
|
107
107
|
"insightsEntry.hide": "隐藏",
|
|
108
108
|
"settings.gran": "趋势图 · 默认粒度",
|
|
109
109
|
"settings.mode": "趋势图 · 默认展示方式",
|
|
110
|
+
"settings.deltaBase": "上下文浏览器 · 对比基线",
|
|
110
111
|
"settings.toolSort": "工具定义 · 默认排序",
|
|
111
112
|
"settings.fileSort": "文件活动 · 默认排序",
|
|
112
113
|
"settings.expand": "展开",
|
|
@@ -118,6 +119,9 @@ window.__ModuleLoader__.load({
|
|
|
118
119
|
"trend.focus": "仅展示 {cat}",
|
|
119
120
|
"trend.adaptive": "自适应",
|
|
120
121
|
"trend.adaptiveHint": "按当前可视范围内的柱子重新缩放高度,滚动时随之变化",
|
|
122
|
+
"trend.dna": "DNA 模式",
|
|
123
|
+
"trend.dnaTip": "把每根柱子画成该次请求的上下文指纹:按模型读取顺序逐条铺色,配合增量模式逐条展示每次请求的增减;悬停查看条目,点击让上下文浏览器定位到该条目,同一条目在所有柱子中亮出其存续变化",
|
|
124
|
+
"trend.dnaItem": "{label}:{n}",
|
|
121
125
|
"trend.empty": "发起一轮对话后,这里会展示每次模型请求的上下文构成",
|
|
122
126
|
"detail.step": "第 {t} 轮 · 第 {s} 步 (共 {n} 步)",
|
|
123
127
|
"detail.turn": "第 {t} 轮 · 共 {n} 步",
|
|
@@ -279,7 +283,9 @@ window.__ModuleLoader__.load({
|
|
|
279
283
|
"browser.items": "{n} 项",
|
|
280
284
|
"browser.missingLive": "… 另有 {n} 条更早的消息也在上下文中(超出展示窗口)",
|
|
281
285
|
"browser.approx": "该步骤涉及的部分已移除消息超出保留范围,以下为近似构成",
|
|
282
|
-
"browser.
|
|
286
|
+
"browser.base.step": "比前步",
|
|
287
|
+
"browser.base.turn": "比前轮",
|
|
288
|
+
"browser.base.tip": "变动对比的基线:比前步=与上一步对比;比前轮=与上一轮最后一步对比(首轮无基线,全部计为变动)",
|
|
283
289
|
"browser.dna": "DNA 模式",
|
|
284
290
|
"browser.dnaTip": "按模型读取上下文的次序逐条展示每一项:系统提示词、工具定义,然后是按时间排列的消息;悬停查看条目,点击定位到下方列表",
|
|
285
291
|
"browser.noHeader": "此数据来自旧版插件:仅提供 token 估算,无实际内容",
|
|
@@ -290,8 +296,12 @@ window.__ModuleLoader__.load({
|
|
|
290
296
|
"browser.search.user": "按消息内容过滤…",
|
|
291
297
|
"browser.search.inject": "按注入内容过滤…",
|
|
292
298
|
"browser.search.skill": "按技能过滤…",
|
|
293
|
-
"browser.search.assistant": "
|
|
299
|
+
"browser.search.assistant": "按回复、调用或思考过滤…",
|
|
294
300
|
"browser.search.tool": "按工具或参数过滤…",
|
|
301
|
+
"browser.kind.think": "思考",
|
|
302
|
+
"browser.kind.tool": "工具",
|
|
303
|
+
"browser.kind.answer": "回答",
|
|
304
|
+
"browser.kindTip": "按内容种类过滤回复:思考、工具调用、回答文本",
|
|
295
305
|
"browser.rowNoMatch": "没有匹配当前过滤条件的行",
|
|
296
306
|
"browser.loading": "正在从更早的会话历史加载完整内容…",
|
|
297
307
|
"browser.notInLog": "会话日志中未找到该条目的完整内容(可能已被压缩或清理)",
|
|
@@ -494,6 +504,7 @@ window.__ModuleLoader__.load({
|
|
|
494
504
|
"insightsEntry.hide": "Hide",
|
|
495
505
|
"settings.gran": "Trend Chart · Default granularity",
|
|
496
506
|
"settings.mode": "Trend Chart · Default display",
|
|
507
|
+
"settings.deltaBase": "Context Browser · Diff baseline",
|
|
497
508
|
"settings.toolSort": "Tool Schemas · Default sort",
|
|
498
509
|
"settings.fileSort": "File Activity · Default sort",
|
|
499
510
|
"settings.expand": "Expand",
|
|
@@ -505,6 +516,9 @@ window.__ModuleLoader__.load({
|
|
|
505
516
|
"trend.focus": "Showing {cat} only",
|
|
506
517
|
"trend.adaptive": "Adaptive",
|
|
507
518
|
"trend.adaptiveHint": "Rescale bar heights to the visible range, following the scroll",
|
|
519
|
+
"trend.dna": "DNA Mode",
|
|
520
|
+
"trend.dnaTip": "Draw each bar as that request’s context fingerprint — one band per item in the order the model reads it; with Delta, each band shows that item’s change against the previous bar. Hover for the item, click to reveal it in the Context browser, and every bar lights the same item’s lifetime",
|
|
521
|
+
"trend.dnaItem": "{label}: {n}",
|
|
508
522
|
"trend.empty": "Send a message and each model request’s context makeup shows up here",
|
|
509
523
|
"detail.step": "Turn {t} · Step {s} of {n}",
|
|
510
524
|
"detail.turn": "Turn {t} · {n} steps",
|
|
@@ -666,7 +680,9 @@ window.__ModuleLoader__.load({
|
|
|
666
680
|
"browser.items": "{n} Items",
|
|
667
681
|
"browser.missingLive": "… {n} earlier messages are also part of the context (outside the served window)",
|
|
668
682
|
"browser.approx": "Some removed messages of this step exceed retention — the makeup below is approximate",
|
|
669
|
-
"browser.
|
|
683
|
+
"browser.base.step": "prev step",
|
|
684
|
+
"browser.base.turn": "prev turn",
|
|
685
|
+
"browser.base.tip": "Diff baseline: the previous step, or the previous turn’s last step — with no predecessor, everything counts as change",
|
|
670
686
|
"browser.dna": "DNA Mode",
|
|
671
687
|
"browser.dnaTip": "One band per item in the order the model reads the context — system prompt, tool schemas, then messages chronologically; hover for details, click to open its row below",
|
|
672
688
|
"browser.noHeader": "Served by an older plugin build: token estimates only, no content",
|
|
@@ -677,8 +693,12 @@ window.__ModuleLoader__.load({
|
|
|
677
693
|
"browser.search.user": "Filter by message text…",
|
|
678
694
|
"browser.search.inject": "Filter injected context…",
|
|
679
695
|
"browser.search.skill": "Filter skills…",
|
|
680
|
-
"browser.search.assistant": "Filter by reply or
|
|
696
|
+
"browser.search.assistant": "Filter by reply, calls, or thinking…",
|
|
681
697
|
"browser.search.tool": "Filter by tool or arguments…",
|
|
698
|
+
"browser.kind.think": "Thinking",
|
|
699
|
+
"browser.kind.tool": "Tools",
|
|
700
|
+
"browser.kind.answer": "Answer",
|
|
701
|
+
"browser.kindTip": "Filter replies by content kind: thinking, tool calls, or answer text",
|
|
682
702
|
"browser.rowNoMatch": "No rows match the current filter",
|
|
683
703
|
"browser.loading": "Loading full content from older session history…",
|
|
684
704
|
"browser.notInLog": "This item is not in the session log anymore (it may have been compacted away or cleared)",
|
|
@@ -708,7 +728,7 @@ window.__ModuleLoader__.load({
|
|
|
708
728
|
"rich.md.copied": "Copied",
|
|
709
729
|
"rich.md.footnotes": "Footnotes",
|
|
710
730
|
"block.thinking": "Reasoning",
|
|
711
|
-
"block.answer": "
|
|
731
|
+
"block.answer": "Answer",
|
|
712
732
|
"block.content": "Content",
|
|
713
733
|
"block.result": "Result",
|
|
714
734
|
"block.summary": "Summary",
|
|
@@ -818,13 +838,19 @@ window.__ModuleLoader__.load({
|
|
|
818
838
|
* package.json `icon` hands to the Host's package-meta reader, which serves
|
|
819
839
|
* it to the Plugins page's package cards. The client bundle inlines the
|
|
820
840
|
* file's markup at build time (the `?raw` channel in tsdown.config.ts) and
|
|
821
|
-
* re-renders it at every requested size.
|
|
822
|
-
*
|
|
841
|
+
* re-renders it at every requested size. The identity seats (tab chip,
|
|
842
|
+
* command, sidebar registration, panel head) keep the sheet's fixed fills —
|
|
843
|
+
* deliberately polychrome on both light and dark chrome — while the
|
|
844
|
+
* sidebar-foot entry seat (overviewButton.tsx) opts into `mono`, trading
|
|
845
|
+
* every fill for `currentColor` so the glyph sits quietly beside the
|
|
846
|
+
* harness's own footer rows (Settings and friends).
|
|
823
847
|
*/
|
|
824
848
|
/** Everything between the file's `<svg>` tags: the sheet's strokes in paint order, whitespace-folded. */
|
|
825
849
|
const SHEET_MARKUP = icon_default.slice(icon_default.indexOf(">") + 1, icon_default.lastIndexOf("</svg>")).trim().replace(/>\s+</g, "><");
|
|
826
|
-
/** The
|
|
827
|
-
|
|
850
|
+
/** The mono seat's strokes: same geometry, every palette fill traded for the surrounding text colour. */
|
|
851
|
+
const SHEET_MARKUP_MONO = SHEET_MARKUP.replace(/fill="#[0-9A-Fa-f]{6}"/g, "fill=\"currentColor\"");
|
|
852
|
+
/** The document sheet at the requested square edge — polychrome by default, text-coloured in `mono`. */
|
|
853
|
+
function ContextIcon({ size = 20, className, mono = false }) {
|
|
828
854
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
|
|
829
855
|
width: size,
|
|
830
856
|
height: size,
|
|
@@ -832,7 +858,7 @@ window.__ModuleLoader__.load({
|
|
|
832
858
|
className,
|
|
833
859
|
"aria-hidden": "true",
|
|
834
860
|
xmlns: "http://www.w3.org/2000/svg",
|
|
835
|
-
dangerouslySetInnerHTML: { __html: SHEET_MARKUP }
|
|
861
|
+
dangerouslySetInnerHTML: { __html: mono ? SHEET_MARKUP_MONO : SHEET_MARKUP }
|
|
836
862
|
});
|
|
837
863
|
}
|
|
838
864
|
/**
|
|
@@ -2179,6 +2205,15 @@ window.__ModuleLoader__.load({
|
|
|
2179
2205
|
* stops the trailing until the head moves again. With no detail at all,
|
|
2180
2206
|
* failure surfaces as a retryable note on the detail cards instead of an
|
|
2181
2207
|
* empty chart.
|
|
2208
|
+
*
|
|
2209
|
+
* The cold start: a session can sit with NO pushed `contextTimeline` value
|
|
2210
|
+
* at all — the enable recomposition raced its open baseline (and the
|
|
2211
|
+
* projection store clears a key its baseline omits), or its checkpoint row
|
|
2212
|
+
* is missing or version-stale on a cold-observed session. Waiting for a
|
|
2213
|
+
* push that never comes would stall the view on "loading" forever, so the
|
|
2214
|
+
* source opens the detail channel on its own (rev 0): the route folds the
|
|
2215
|
+
* durable log on demand and serves the slim head beside the collections,
|
|
2216
|
+
* and the next pushed head takes the channel back per its own revision.
|
|
2182
2217
|
*/
|
|
2183
2218
|
const DETAIL_ROUTE = "/api/dsh-context/detail";
|
|
2184
2219
|
/**
|
|
@@ -2370,30 +2405,39 @@ window.__ModuleLoader__.load({
|
|
|
2370
2405
|
const sessionId = typeof props.sessionId === "string" ? props.sessionId : "";
|
|
2371
2406
|
const headRev = head !== null && typeof head.detailRev === "number" ? head.detailRev : null;
|
|
2372
2407
|
const slim = headRev !== null;
|
|
2373
|
-
const
|
|
2408
|
+
const cold = head === null;
|
|
2409
|
+
const store = (0, react.useMemo)(() => slim || cold ? detailStoreOf(ctx, sessionId) : null, [
|
|
2374
2410
|
ctx,
|
|
2375
2411
|
sessionId,
|
|
2376
|
-
slim
|
|
2412
|
+
slim,
|
|
2413
|
+
cold
|
|
2377
2414
|
]);
|
|
2378
2415
|
const snap = (0, react.useSyncExternalStore)(store !== null ? store.subscribe : noopSubscribe, store !== null ? store.getSnapshot : () => EMPTY_SNAP);
|
|
2379
2416
|
(0, react.useEffect)(() => {
|
|
2380
|
-
if (store !== null
|
|
2417
|
+
if (store !== null) store.request(headRev ?? 0);
|
|
2381
2418
|
}, [store, headRev]);
|
|
2382
2419
|
return (0, react.useMemo)(() => {
|
|
2383
|
-
|
|
2384
|
-
|
|
2385
|
-
|
|
2386
|
-
retryDetail: noopRetry
|
|
2387
|
-
};
|
|
2388
|
-
if (!slim || store === null) return {
|
|
2420
|
+
const detail = snap.detail;
|
|
2421
|
+
const retry = store !== null ? store.retry : noopRetry;
|
|
2422
|
+
if (head !== null && !slim) return {
|
|
2389
2423
|
data: head,
|
|
2390
2424
|
detailState: "legacy",
|
|
2391
2425
|
retryDetail: noopRetry
|
|
2392
2426
|
};
|
|
2393
|
-
const
|
|
2427
|
+
const base = head !== null ? head : detail !== null ? detail.head ?? null : null;
|
|
2428
|
+
if (base === null) return {
|
|
2429
|
+
data: null,
|
|
2430
|
+
detailState: store !== null && (snap.failed || detail !== null) ? "failed" : "loading",
|
|
2431
|
+
retryDetail: retry
|
|
2432
|
+
};
|
|
2433
|
+
if (detail === null) return {
|
|
2434
|
+
data: base,
|
|
2435
|
+
detailState: snap.failed ? "failed" : "loading",
|
|
2436
|
+
retryDetail: retry
|
|
2437
|
+
};
|
|
2394
2438
|
return {
|
|
2395
|
-
data:
|
|
2396
|
-
...
|
|
2439
|
+
data: {
|
|
2440
|
+
...base,
|
|
2397
2441
|
requests: detail.requests,
|
|
2398
2442
|
events: detail.events,
|
|
2399
2443
|
nodes: detail.nodes,
|
|
@@ -2404,8 +2448,8 @@ window.__ModuleLoader__.load({
|
|
|
2404
2448
|
...detail.fileOps !== void 0 ? { fileOps: detail.fileOps } : {},
|
|
2405
2449
|
...detail.fileOpsFloor !== void 0 ? { fileOpsFloor: detail.fileOpsFloor } : {}
|
|
2406
2450
|
},
|
|
2407
|
-
detailState:
|
|
2408
|
-
retryDetail:
|
|
2451
|
+
detailState: "ready",
|
|
2452
|
+
retryDetail: retry
|
|
2409
2453
|
};
|
|
2410
2454
|
}, [
|
|
2411
2455
|
head,
|
|
@@ -2498,6 +2542,102 @@ window.__ModuleLoader__.load({
|
|
|
2498
2542
|
});
|
|
2499
2543
|
return items;
|
|
2500
2544
|
}
|
|
2545
|
+
/** The per-bar bands behind a trend chart bar: read order, category colors, cumulative offsets. */
|
|
2546
|
+
function trendBandsOf(view) {
|
|
2547
|
+
const bands = [];
|
|
2548
|
+
let off = 0;
|
|
2549
|
+
for (const it of dnaOf(view)) {
|
|
2550
|
+
if ("node" in it) bands.push({
|
|
2551
|
+
key: it.key,
|
|
2552
|
+
cat: it.cat,
|
|
2553
|
+
tokens: it.tokens,
|
|
2554
|
+
off,
|
|
2555
|
+
color: CAT_COLOR[it.cat],
|
|
2556
|
+
node: it.node
|
|
2557
|
+
});
|
|
2558
|
+
else bands.push({
|
|
2559
|
+
key: it.key,
|
|
2560
|
+
cat: it.cat,
|
|
2561
|
+
tokens: it.tokens,
|
|
2562
|
+
off,
|
|
2563
|
+
color: CAT_COLOR[it.cat]
|
|
2564
|
+
});
|
|
2565
|
+
off += it.tokens;
|
|
2566
|
+
}
|
|
2567
|
+
return bands;
|
|
2568
|
+
}
|
|
2569
|
+
function deltaBandsOf(bands, prev) {
|
|
2570
|
+
if (prev === null) return {
|
|
2571
|
+
up: [],
|
|
2572
|
+
down: []
|
|
2573
|
+
};
|
|
2574
|
+
const before = new Map(prev.map((b) => [b.key, b.tokens]));
|
|
2575
|
+
const after = new Map(bands.map((b) => [b.key, b.tokens]));
|
|
2576
|
+
const up = [];
|
|
2577
|
+
const down = [];
|
|
2578
|
+
for (const b of bands) {
|
|
2579
|
+
const d = b.tokens - (before.get(b.key) ?? 0);
|
|
2580
|
+
if (d <= 0) continue;
|
|
2581
|
+
up.push("node" in b ? {
|
|
2582
|
+
key: b.key,
|
|
2583
|
+
cat: b.cat,
|
|
2584
|
+
tokens: d,
|
|
2585
|
+
off: 0,
|
|
2586
|
+
color: b.color,
|
|
2587
|
+
node: b.node
|
|
2588
|
+
} : {
|
|
2589
|
+
key: b.key,
|
|
2590
|
+
cat: b.cat,
|
|
2591
|
+
tokens: d,
|
|
2592
|
+
off: 0,
|
|
2593
|
+
color: b.color
|
|
2594
|
+
});
|
|
2595
|
+
}
|
|
2596
|
+
for (const b of prev) {
|
|
2597
|
+
const d = (after.get(b.key) ?? 0) - b.tokens;
|
|
2598
|
+
if (d >= 0) continue;
|
|
2599
|
+
down.push("node" in b ? {
|
|
2600
|
+
key: b.key,
|
|
2601
|
+
cat: b.cat,
|
|
2602
|
+
tokens: d,
|
|
2603
|
+
off: 0,
|
|
2604
|
+
color: b.color,
|
|
2605
|
+
node: b.node
|
|
2606
|
+
} : {
|
|
2607
|
+
key: b.key,
|
|
2608
|
+
cat: b.cat,
|
|
2609
|
+
tokens: d,
|
|
2610
|
+
off: 0,
|
|
2611
|
+
color: b.color
|
|
2612
|
+
});
|
|
2613
|
+
}
|
|
2614
|
+
let u = 0;
|
|
2615
|
+
for (const x of up) {
|
|
2616
|
+
x.off = u;
|
|
2617
|
+
u += x.tokens;
|
|
2618
|
+
}
|
|
2619
|
+
let dn = 0;
|
|
2620
|
+
for (const x of down) {
|
|
2621
|
+
x.off = dn;
|
|
2622
|
+
dn -= x.tokens;
|
|
2623
|
+
}
|
|
2624
|
+
return {
|
|
2625
|
+
up,
|
|
2626
|
+
down
|
|
2627
|
+
};
|
|
2628
|
+
}
|
|
2629
|
+
/**
|
|
2630
|
+
* The compact item name both DNA surfaces share — the browser appends the
|
|
2631
|
+
* item's time on top of it for its own tooltip, the trend chart does not.
|
|
2632
|
+
* Header bands name the system prompt / the tool schema; message bands name
|
|
2633
|
+
* the item the way its browser row would (skill name, tool name, injection
|
|
2634
|
+
* form, else the category label).
|
|
2635
|
+
*/
|
|
2636
|
+
function dnaBaseLabel(b, t, catLabel) {
|
|
2637
|
+
if (!("node" in b)) return b.cat === "system" ? catLabel("system") : b.key.slice(5);
|
|
2638
|
+
const n = b.node;
|
|
2639
|
+
return n.skill !== void 0 ? t("node.skillTag", { name: n.skill }) : n.cat === "tool" ? n.tool ?? "?" : n.cat === "inject" ? t("form." + (n.form || "context")) : catLabel(n.cat);
|
|
2640
|
+
}
|
|
2501
2641
|
//#endregion
|
|
2502
2642
|
//#region src/shared/fileOps.ts
|
|
2503
2643
|
/** Parse a call's raw JSON arguments; non-string/malformed/non-record inputs yield null. */
|
|
@@ -2967,6 +3107,124 @@ window.__ModuleLoader__.load({
|
|
|
2967
3107
|
out.net = net;
|
|
2968
3108
|
return out;
|
|
2969
3109
|
};
|
|
3110
|
+
const DnaBar = function DnaBar(props) {
|
|
3111
|
+
const visible = [];
|
|
3112
|
+
for (const b of props.bands) if (b.tokens > 0) visible.push(b);
|
|
3113
|
+
if (visible.length === 0) return null;
|
|
3114
|
+
const runs = [];
|
|
3115
|
+
for (const b of visible) {
|
|
3116
|
+
const from = Math.round(b.off / props.total * 1e4) / 100;
|
|
3117
|
+
const to = Math.round((b.off + b.tokens) / props.total * 1e4) / 100;
|
|
3118
|
+
const last = runs.length > 0 ? runs[runs.length - 1] : null;
|
|
3119
|
+
if (last !== null && last.color === b.color && last.to === from) last.to = to;
|
|
3120
|
+
else runs.push({
|
|
3121
|
+
color: b.color,
|
|
3122
|
+
from,
|
|
3123
|
+
to
|
|
3124
|
+
});
|
|
3125
|
+
}
|
|
3126
|
+
const hitAt = (e) => {
|
|
3127
|
+
const rect = e.currentTarget.getBoundingClientRect();
|
|
3128
|
+
const pos = (rect.height > 0 ? Math.min(1, Math.max(0, 1 - (e.clientY - rect.top) / rect.height)) : 0) * props.total;
|
|
3129
|
+
let hit = visible[0];
|
|
3130
|
+
for (const b of props.bands) {
|
|
3131
|
+
if (b.off > pos) break;
|
|
3132
|
+
if (b.tokens > 0) hit = b;
|
|
3133
|
+
}
|
|
3134
|
+
return hit;
|
|
3135
|
+
};
|
|
3136
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
3137
|
+
className: "lc-bar-dna animate-lc-bar-in motion-reduce:animate-none",
|
|
3138
|
+
style: {
|
|
3139
|
+
height: `${Math.max(1, Math.round(props.total / props.maxTotal * CHART_H))}px`,
|
|
3140
|
+
background: "linear-gradient(to top, " + runs.map((r) => `${r.color} ${r.from}%, ${r.color} ${r.to}%`).join(", ") + ")",
|
|
3141
|
+
"--lc-i": Math.min(props.enterIndex, STAGGER_CAP)
|
|
3142
|
+
},
|
|
3143
|
+
onMouseMove: (e) => {
|
|
3144
|
+
props.onHit(hitAt(e).key);
|
|
3145
|
+
},
|
|
3146
|
+
onMouseLeave: () => {
|
|
3147
|
+
props.onHit(null);
|
|
3148
|
+
},
|
|
3149
|
+
onClick: (e) => {
|
|
3150
|
+
if (props.onPick !== void 0) props.onPick(props.seq, hitAt(e));
|
|
3151
|
+
}
|
|
3152
|
+
});
|
|
3153
|
+
};
|
|
3154
|
+
const DnaDeltaBar = function DnaDeltaBar(props) {
|
|
3155
|
+
let upSum = 0;
|
|
3156
|
+
for (const b of props.d.up) upSum += b.tokens;
|
|
3157
|
+
let downSum = 0;
|
|
3158
|
+
for (const b of props.d.down) downSum -= b.tokens;
|
|
3159
|
+
const gradSpan = upSum + downSum;
|
|
3160
|
+
if (gradSpan === 0) return null;
|
|
3161
|
+
const runs = [];
|
|
3162
|
+
const pushRun = (color, mag, at) => {
|
|
3163
|
+
const from = Math.round(at / gradSpan * 1e4) / 100;
|
|
3164
|
+
const to = Math.round((at + mag) / gradSpan * 1e4) / 100;
|
|
3165
|
+
const last = runs.length > 0 ? runs[runs.length - 1] : null;
|
|
3166
|
+
if (last !== null && last.color === color && last.to === from) last.to = to;
|
|
3167
|
+
else runs.push({
|
|
3168
|
+
color,
|
|
3169
|
+
from,
|
|
3170
|
+
to
|
|
3171
|
+
});
|
|
3172
|
+
return at + mag;
|
|
3173
|
+
};
|
|
3174
|
+
let acc = 0;
|
|
3175
|
+
for (let i = props.d.down.length - 1; i >= 0; i--) acc = pushRun(props.d.down[i].color, -props.d.down[i].tokens, acc);
|
|
3176
|
+
for (const b of props.d.up) acc = pushRun(b.color, b.tokens, acc);
|
|
3177
|
+
const height = Math.max(1, Math.round(gradSpan * props.scale));
|
|
3178
|
+
const hitAt = (e) => {
|
|
3179
|
+
const rect = e.currentTarget.getBoundingClientRect();
|
|
3180
|
+
const pos = (rect.height > 0 ? Math.min(1, Math.max(0, 1 - (e.clientY - rect.top) / rect.height)) : 0) * gradSpan - downSum;
|
|
3181
|
+
const useUp = pos >= 0 && props.d.up.length > 0;
|
|
3182
|
+
const arm = useUp ? props.d.up : props.d.down;
|
|
3183
|
+
const p = useUp ? pos : -pos;
|
|
3184
|
+
let hit = arm[0];
|
|
3185
|
+
for (const b of arm) {
|
|
3186
|
+
if (b.off > p) break;
|
|
3187
|
+
hit = b;
|
|
3188
|
+
}
|
|
3189
|
+
return hit;
|
|
3190
|
+
};
|
|
3191
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
3192
|
+
className: "lc-bar-dna animate-lc-bar-in motion-reduce:animate-none",
|
|
3193
|
+
style: {
|
|
3194
|
+
position: "absolute",
|
|
3195
|
+
bottom: `${Math.round(props.zeroBottom - downSum * props.scale)}px`,
|
|
3196
|
+
height: `${height}px`,
|
|
3197
|
+
background: "linear-gradient(to top, " + runs.map((r) => `${r.color} ${r.from}%, ${r.color} ${r.to}%`).join(", ") + ")",
|
|
3198
|
+
transformOrigin: `50% ${Math.round(downSum / gradSpan * 1e4) / 100}%`,
|
|
3199
|
+
"--lc-i": Math.min(props.enterIndex, STAGGER_CAP)
|
|
3200
|
+
},
|
|
3201
|
+
onMouseMove: (e) => {
|
|
3202
|
+
props.onHit(hitAt(e).key);
|
|
3203
|
+
},
|
|
3204
|
+
onMouseLeave: () => {
|
|
3205
|
+
props.onHit(null);
|
|
3206
|
+
},
|
|
3207
|
+
onClick: (e) => {
|
|
3208
|
+
if (props.onPick !== void 0) props.onPick(props.seq, hitAt(e));
|
|
3209
|
+
}
|
|
3210
|
+
});
|
|
3211
|
+
};
|
|
3212
|
+
const DnaHighlights = (0, react.memo)(function DnaHighlights(props) {
|
|
3213
|
+
if (props.slices === null) return null;
|
|
3214
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
3215
|
+
className: "lc-dna-hl",
|
|
3216
|
+
children: props.slices.map((s, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
3217
|
+
className: "lc-dna-cell",
|
|
3218
|
+
children: s !== null ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
3219
|
+
className: "lc-dna-slice",
|
|
3220
|
+
style: {
|
|
3221
|
+
bottom: `${s.bottom}px`,
|
|
3222
|
+
height: `${s.height}px`
|
|
3223
|
+
}
|
|
3224
|
+
}) : null
|
|
3225
|
+
}, i))
|
|
3226
|
+
});
|
|
3227
|
+
});
|
|
2970
3228
|
const ChartBar = (0, react.memo)(function ChartBar(props) {
|
|
2971
3229
|
const { req, marker } = props;
|
|
2972
3230
|
const markerAt = marker !== void 0 ? eventAt(marker) : null;
|
|
@@ -2996,7 +3254,23 @@ window.__ModuleLoader__.load({
|
|
|
2996
3254
|
title: "✂ " + (markerAt !== null ? markerAt + " — " : "") + eventLabel(marker),
|
|
2997
3255
|
children: "✂"
|
|
2998
3256
|
}) : null,
|
|
2999
|
-
|
|
3257
|
+
props.dna !== null ? props.dnaDelta !== null && props.dnaScale !== void 0 && props.zeroBottom !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DnaDeltaBar, {
|
|
3258
|
+
d: props.dnaDelta,
|
|
3259
|
+
scale: props.dnaScale,
|
|
3260
|
+
zeroBottom: props.zeroBottom,
|
|
3261
|
+
enterIndex: props.enterIndex,
|
|
3262
|
+
seq: req.seq,
|
|
3263
|
+
onHit: props.onDnaHit,
|
|
3264
|
+
onPick: props.onPickBand
|
|
3265
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DnaBar, {
|
|
3266
|
+
bands: props.dna,
|
|
3267
|
+
total: req.total,
|
|
3268
|
+
maxTotal: props.maxTotal,
|
|
3269
|
+
enterIndex: props.enterIndex,
|
|
3270
|
+
seq: req.seq,
|
|
3271
|
+
onHit: props.onDnaHit,
|
|
3272
|
+
onPick: props.onPickBand
|
|
3273
|
+
}) : diverge ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
3000
3274
|
className: "lc-bar-up animate-lc-bar-in motion-reduce:animate-none",
|
|
3001
3275
|
style: {
|
|
3002
3276
|
bottom: `${props.downPx}px`,
|
|
@@ -3052,8 +3326,13 @@ window.__ModuleLoader__.load({
|
|
|
3052
3326
|
});
|
|
3053
3327
|
});
|
|
3054
3328
|
return function TrendChart(props) {
|
|
3329
|
+
const dnaBands = props.dna ?? null;
|
|
3330
|
+
const dnaOn = dnaBands !== null;
|
|
3055
3331
|
const delta = props.mode === "delta";
|
|
3056
|
-
const
|
|
3332
|
+
const dnaDeltaOn = dnaOn && delta;
|
|
3333
|
+
const focus = !dnaOn && props.focusCat !== null && props.focusCat !== void 0 && CATS.some((c) => c.key === props.focusCat) ? props.focusCat : null;
|
|
3334
|
+
const [dnaHit, setDnaHit] = (0, react.useState)(null);
|
|
3335
|
+
const dnaDeltas = (0, react.useMemo)(() => dnaDeltaOn ? dnaBands.map((bands, i) => deltaBandsOf(bands, i > 0 ? dnaBands[i - 1] : null)) : null, [dnaDeltaOn, dnaBands]);
|
|
3057
3336
|
const requests = (0, react.useMemo)(() => {
|
|
3058
3337
|
const base = focus !== null ? props.requests.map((req) => focusOf(req, focus)) : props.requests;
|
|
3059
3338
|
return delta ? base.map((req, i) => deltaOf(req, i > 0 ? base[i - 1] : null)) : base;
|
|
@@ -3081,7 +3360,14 @@ window.__ModuleLoader__.load({
|
|
|
3081
3360
|
const col = i * pitch;
|
|
3082
3361
|
if (col >= vr || col + BAR_W <= sl) continue;
|
|
3083
3362
|
const req = requests[i];
|
|
3084
|
-
if (
|
|
3363
|
+
if (dnaDeltaOn && dnaDeltas !== null) {
|
|
3364
|
+
let bu = 0;
|
|
3365
|
+
let bd = 0;
|
|
3366
|
+
for (const b of dnaDeltas[i].up) bu += b.tokens;
|
|
3367
|
+
for (const b of dnaDeltas[i].down) bd -= b.tokens;
|
|
3368
|
+
if (bu > up) up = bu;
|
|
3369
|
+
if (bd > down) down = bd;
|
|
3370
|
+
} else if (delta) {
|
|
3085
3371
|
let bu = 0;
|
|
3086
3372
|
let bd = 0;
|
|
3087
3373
|
for (const c of CATS) {
|
|
@@ -3102,7 +3388,15 @@ window.__ModuleLoader__.load({
|
|
|
3102
3388
|
let maxTotal = 1;
|
|
3103
3389
|
let maxUp = 0;
|
|
3104
3390
|
let maxDown = 0;
|
|
3105
|
-
if (
|
|
3391
|
+
if (dnaDeltaOn && dnaDeltas !== null) for (const d of dnaDeltas) {
|
|
3392
|
+
let up = 0;
|
|
3393
|
+
let down = 0;
|
|
3394
|
+
for (const b of d.up) up += b.tokens;
|
|
3395
|
+
for (const b of d.down) down -= b.tokens;
|
|
3396
|
+
if (up > maxUp) maxUp = up;
|
|
3397
|
+
if (down > maxDown) maxDown = down;
|
|
3398
|
+
}
|
|
3399
|
+
else if (delta) for (const req of requests) {
|
|
3106
3400
|
let up = 0;
|
|
3107
3401
|
let down = 0;
|
|
3108
3402
|
for (const c of CATS) {
|
|
@@ -3246,7 +3540,8 @@ window.__ModuleLoader__.load({
|
|
|
3246
3540
|
props.granularity,
|
|
3247
3541
|
props.focusTurn,
|
|
3248
3542
|
requests,
|
|
3249
|
-
adaptive
|
|
3543
|
+
adaptive,
|
|
3544
|
+
dnaDeltaOn
|
|
3250
3545
|
]);
|
|
3251
3546
|
const measureRef = (0, react.useRef)(measureVisible);
|
|
3252
3547
|
(0, react.useLayoutEffect)(() => {
|
|
@@ -3274,6 +3569,45 @@ window.__ModuleLoader__.load({
|
|
|
3274
3569
|
return containHorizontalOverscroll(el);
|
|
3275
3570
|
}, []);
|
|
3276
3571
|
const stepsOf = (0, react.useMemo)(() => turnStepsOf(props.requests), [props.requests]);
|
|
3572
|
+
const hoveredIdx = props.hoveredSeq !== null ? requests.findIndex((r) => r.seq === props.hoveredSeq) : -1;
|
|
3573
|
+
const hoveredReq = hoveredIdx >= 0 ? requests[hoveredIdx] : null;
|
|
3574
|
+
const hoveredBands = dnaOn && !dnaDeltaOn && hoveredIdx >= 0 ? dnaBands[hoveredIdx] : null;
|
|
3575
|
+
const hitBand = hoveredBands !== null && dnaHit !== null ? hoveredBands.find((b) => b.key === dnaHit && b.tokens > 0) ?? null : null;
|
|
3576
|
+
const hoveredDelta = dnaDeltaOn && hoveredIdx >= 0 && dnaDeltas !== null ? dnaDeltas[hoveredIdx].up.find((b) => b.key === dnaHit) ?? dnaDeltas[hoveredIdx].down.find((b) => b.key === dnaHit) ?? null : null;
|
|
3577
|
+
const dnaSlices = (0, react.useMemo)(() => {
|
|
3578
|
+
if (!dnaOn || dnaHit === null) return null;
|
|
3579
|
+
const slices = [];
|
|
3580
|
+
if (dnaDeltaOn && dnaDeltas !== null) for (const d of dnaDeltas) {
|
|
3581
|
+
const hit = d.up.find((b) => b.key === dnaHit) ?? d.down.find((b) => b.key === dnaHit) ?? null;
|
|
3582
|
+
if (hit === null) {
|
|
3583
|
+
slices.push(null);
|
|
3584
|
+
continue;
|
|
3585
|
+
}
|
|
3586
|
+
const mag = Math.abs(hit.tokens);
|
|
3587
|
+
const edge = hit.tokens > 0 ? downPx + hit.off * deltaScale : downPx - (hit.off + mag) * deltaScale;
|
|
3588
|
+
slices.push({
|
|
3589
|
+
bottom: Math.round(edge),
|
|
3590
|
+
height: Math.max(1, Math.round(mag * deltaScale))
|
|
3591
|
+
});
|
|
3592
|
+
}
|
|
3593
|
+
else for (const bands of dnaBands) {
|
|
3594
|
+
const hit = bands.find((b) => b.key === dnaHit && b.tokens > 0) ?? null;
|
|
3595
|
+
slices.push(hit === null ? null : {
|
|
3596
|
+
bottom: Math.round(hit.off / maxTotal * CHART_H),
|
|
3597
|
+
height: Math.max(1, Math.round(hit.tokens / maxTotal * CHART_H))
|
|
3598
|
+
});
|
|
3599
|
+
}
|
|
3600
|
+
return slices;
|
|
3601
|
+
}, [
|
|
3602
|
+
dnaOn,
|
|
3603
|
+
dnaHit,
|
|
3604
|
+
dnaDeltaOn,
|
|
3605
|
+
dnaDeltas,
|
|
3606
|
+
dnaBands,
|
|
3607
|
+
downPx,
|
|
3608
|
+
deltaScale,
|
|
3609
|
+
maxTotal
|
|
3610
|
+
]);
|
|
3277
3611
|
const tipRowsOf = (req) => {
|
|
3278
3612
|
const n = req.stepCount ?? 1;
|
|
3279
3613
|
const head = props.granularity === "turn" ? n > 1 ? t("tip.turn", {
|
|
@@ -3284,19 +3618,20 @@ window.__ModuleLoader__.load({
|
|
|
3284
3618
|
s: req.step ?? 0,
|
|
3285
3619
|
n: stepsOf(req.turn)
|
|
3286
3620
|
});
|
|
3287
|
-
|
|
3288
|
-
|
|
3289
|
-
|
|
3290
|
-
|
|
3291
|
-
|
|
3292
|
-
|
|
3621
|
+
const band = hitBand ?? hoveredDelta;
|
|
3622
|
+
if (band !== null) return [head, t("trend.dnaItem", {
|
|
3623
|
+
label: dnaBaseLabel(band, t, catLabel),
|
|
3624
|
+
n: dnaDeltaOn ? fmtSigned(band.tokens) : fmt(band.tokens)
|
|
3625
|
+
})];
|
|
3626
|
+
if (delta)
|
|
3627
|
+
/* v8 ignore next 1 -- delta mode only receives records from
|
|
3628
|
+
deltaOf, which always assigns net; the fallback is defensive. */
|
|
3629
|
+
return [head, t("tip.delta", { n: fmtSigned(req.net ?? 0) })];
|
|
3293
3630
|
return [head, focus !== null ? t("tip.cat", {
|
|
3294
3631
|
cat: catLabel(focus),
|
|
3295
3632
|
n: fmt(req.total)
|
|
3296
3633
|
}) : t("tip.total", { n: fmt(req.total) })];
|
|
3297
3634
|
};
|
|
3298
|
-
const hoveredIdx = props.hoveredSeq !== null ? requests.findIndex((r) => r.seq === props.hoveredSeq) : -1;
|
|
3299
|
-
const hoveredReq = hoveredIdx >= 0 ? requests[hoveredIdx] : null;
|
|
3300
3635
|
const tipColRef = (0, react.useRef)(0);
|
|
3301
3636
|
/**
|
|
3302
3637
|
* Glue the hover tip to its bar's VISIBLE slice. The tip deliberately does NOT live inside the scrolling
|
|
@@ -3386,6 +3721,7 @@ window.__ModuleLoader__.load({
|
|
|
3386
3721
|
"data-catdim": props.hoverCat ?? void 0,
|
|
3387
3722
|
onMouseLeave: () => {
|
|
3388
3723
|
props.onHover(null);
|
|
3724
|
+
setDnaHit(null);
|
|
3389
3725
|
},
|
|
3390
3726
|
children: [
|
|
3391
3727
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { className: "lc-grid lc-grid-top" }),
|
|
@@ -3408,9 +3744,16 @@ window.__ModuleLoader__.load({
|
|
|
3408
3744
|
downPx: delta ? downPx : void 0,
|
|
3409
3745
|
deltaScale: delta ? deltaScale : void 0,
|
|
3410
3746
|
enterIndex: i,
|
|
3747
|
+
dna: dnaOn ? dnaBands[i] : null,
|
|
3748
|
+
dnaDelta: dnaDeltaOn && dnaDeltas !== null ? dnaDeltas[i] : null,
|
|
3749
|
+
dnaScale: dnaDeltaOn ? deltaScale : void 0,
|
|
3750
|
+
zeroBottom: dnaDeltaOn ? downPx : void 0,
|
|
3751
|
+
onDnaHit: setDnaHit,
|
|
3752
|
+
onPickBand: props.onPickBand,
|
|
3411
3753
|
onSelect: props.onSelect,
|
|
3412
3754
|
onHover: props.onHover
|
|
3413
|
-
}, `${req.seq}:${props.granularity}`))
|
|
3755
|
+
}, `${req.seq}:${props.granularity}`)),
|
|
3756
|
+
dnaOn ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DnaHighlights, { slices: dnaSlices }) : null
|
|
3414
3757
|
]
|
|
3415
3758
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
3416
3759
|
className: "lc-turns",
|
|
@@ -4496,6 +4839,58 @@ window.__ModuleLoader__.load({
|
|
|
4496
4839
|
function nodeNameOf(n) {
|
|
4497
4840
|
return typeof n.name === "string" ? n.name : "";
|
|
4498
4841
|
}
|
|
4842
|
+
/**
|
|
4843
|
+
* The content kinds one assistant message proves, as the assistant category's
|
|
4844
|
+
* kind chips count and filter them: thinking (a reasoning block — only the
|
|
4845
|
+
* conversation join can prove it), tool calls (join blocks, else the fold's
|
|
4846
|
+
* text-less-reply `calls` stamp), and answer text (join blocks, else the
|
|
4847
|
+
* node's `text`). Legacy `content` joins classify the same way the body
|
|
4848
|
+
* renders them. The flags are independent, so a combined reply lights
|
|
4849
|
+
* several chips.
|
|
4850
|
+
*/
|
|
4851
|
+
function msgKindsOf(n, conv) {
|
|
4852
|
+
let think = false;
|
|
4853
|
+
let tool = false;
|
|
4854
|
+
let answer = false;
|
|
4855
|
+
for (const blocks of [conv?.blocks, conv?.content]) {
|
|
4856
|
+
if (!Array.isArray(blocks)) continue;
|
|
4857
|
+
for (const b of blocks) {
|
|
4858
|
+
const blk = b !== null && typeof b === "object" ? b : null;
|
|
4859
|
+
const k = blk !== null ? typeof blk.kind === "string" ? blk.kind : typeof blk.type === "string" ? blk.type : "" : "";
|
|
4860
|
+
if (k === "reasoning") think = true;
|
|
4861
|
+
else if (k === "tool-call") tool = true;
|
|
4862
|
+
else if (k === "text") answer = true;
|
|
4863
|
+
}
|
|
4864
|
+
}
|
|
4865
|
+
return {
|
|
4866
|
+
think,
|
|
4867
|
+
tool: tool || Array.isArray(n.calls) && n.calls.length > 0,
|
|
4868
|
+
answer: answer || typeof n.text === "string" && n.text !== ""
|
|
4869
|
+
};
|
|
4870
|
+
}
|
|
4871
|
+
/**
|
|
4872
|
+
* The reasoning texts one assistant row's conversation join proves, concatenated for the row filter's scan —
|
|
4873
|
+
* the fold stamps no reasoning on the node, so this is the only scan face the thinking blocks expose. Both block
|
|
4874
|
+
* vocabularies classify here (the body renders the same blocks as the Reasoning sections); malformed blocks drop.
|
|
4875
|
+
*/
|
|
4876
|
+
function reasoningTextOf(conv) {
|
|
4877
|
+
if (conv === void 0) return "";
|
|
4878
|
+
let out = "";
|
|
4879
|
+
for (const blocks of [conv.blocks, conv.content]) {
|
|
4880
|
+
if (!Array.isArray(blocks)) continue;
|
|
4881
|
+
for (const b of blocks) {
|
|
4882
|
+
const blk = b !== null && typeof b === "object" ? b : null;
|
|
4883
|
+
if ((blk !== null ? typeof blk.kind === "string" ? blk.kind : typeof blk.type === "string" ? blk.type : "" : "") === "reasoning" && typeof blk?.text === "string") out += blk.text + "\n";
|
|
4884
|
+
}
|
|
4885
|
+
}
|
|
4886
|
+
return out;
|
|
4887
|
+
}
|
|
4888
|
+
/** The assistant rows' kind chips, in display order. */
|
|
4889
|
+
const ROW_KINDS = [
|
|
4890
|
+
"think",
|
|
4891
|
+
"tool",
|
|
4892
|
+
"answer"
|
|
4893
|
+
];
|
|
4499
4894
|
function countOf(asm, byCat, c) {
|
|
4500
4895
|
if (c === "system") return asm.system !== null ? 1 : 0;
|
|
4501
4896
|
if (c === "tools") return asm.header !== null ? asm.header.tools.length : 0;
|
|
@@ -4523,9 +4918,19 @@ window.__ModuleLoader__.load({
|
|
|
4523
4918
|
const [openCat, setOpenCat] = (0, react.useState)(null);
|
|
4524
4919
|
const [openElem, setOpenElem] = (0, react.useState)(null);
|
|
4525
4920
|
const [rowQuery, setRowQuery] = (0, react.useState)("");
|
|
4921
|
+
const [rowKind, setRowKind] = (0, react.useState)(null);
|
|
4526
4922
|
const [toolSort, setToolSort] = (0, react.useState)(() => settings.defaultToolSort());
|
|
4527
|
-
const [
|
|
4923
|
+
const [dnaLocal, setDnaLocal] = (0, react.useState)(false);
|
|
4924
|
+
const dnaLinked = props.dna !== void 0 && props.onDnaChange !== void 0;
|
|
4925
|
+
const dna = dnaLinked ? props.dna === true : dnaLocal;
|
|
4926
|
+
const setDna = (on) => {
|
|
4927
|
+
if (dnaLinked)
|
|
4928
|
+
/* v8 ignore next 1 -- `dnaLinked` requires both props, so the handler is always present. */
|
|
4929
|
+
props.onDnaChange?.(on);
|
|
4930
|
+
else setDnaLocal(on);
|
|
4931
|
+
};
|
|
4528
4932
|
const [dnaKey, setDnaKey] = (0, react.useState)(null);
|
|
4933
|
+
const [deltaBase, setDeltaBase] = (0, react.useState)(() => settings.defaultDeltaBase());
|
|
4529
4934
|
const onOpenCat = props.onOpenCat;
|
|
4530
4935
|
const setCat = (c) => {
|
|
4531
4936
|
setOpenCat(c);
|
|
@@ -4559,7 +4964,9 @@ window.__ModuleLoader__.load({
|
|
|
4559
4964
|
if (nodeFocus === null || nodeFocus === void 0) return;
|
|
4560
4965
|
setSel(nodeFocus.step);
|
|
4561
4966
|
setCat(nodeFocus.cat);
|
|
4562
|
-
setOpenElem(
|
|
4967
|
+
setOpenElem(nodeFocus.key);
|
|
4968
|
+
setRowQuery("");
|
|
4969
|
+
setRowKind(null);
|
|
4563
4970
|
focusScrollRef.current = true;
|
|
4564
4971
|
if (props.onNodeFocusHandled !== void 0) props.onNodeFocusHandled();
|
|
4565
4972
|
}, [
|
|
@@ -4596,7 +5003,14 @@ window.__ModuleLoader__.load({
|
|
|
4596
5003
|
setCat(null);
|
|
4597
5004
|
setOpenElem(null);
|
|
4598
5005
|
};
|
|
4599
|
-
const
|
|
5006
|
+
const prevRecordOf = (r) => {
|
|
5007
|
+
const i = requests.findIndex((x) => x.seq === r.seq);
|
|
5008
|
+
return i > 0 ? requests[i - 1] : null;
|
|
5009
|
+
};
|
|
5010
|
+
const lastReq = requests.length > 0 ? requests[requests.length - 1] : null;
|
|
5011
|
+
const turnBaseOf = (r) => lastOfTurn(requests, (r.turn ?? 0) - 1);
|
|
5012
|
+
const refReq = req === null ? deltaBase === "step" ? lastReq : lastReq === null ? null : turnBaseOf(lastReq) : deltaBase === "turn" ? turnBaseOf(req) : prevRecordOf(req);
|
|
5013
|
+
const zeroBase = refReq === null && lastReq !== null;
|
|
4600
5014
|
const prevView = refReq !== null ? assemble(data, headers, refReq.seq) : null;
|
|
4601
5015
|
const prevByCat = prevView !== null ? byCatOf(prevView) : null;
|
|
4602
5016
|
const byCat = byCatOf(view);
|
|
@@ -4604,12 +5018,7 @@ window.__ModuleLoader__.load({
|
|
|
4604
5018
|
for (const n of view.nodes) if ((n.cat === "tool" || n.cat === "skill") && n.tool !== void 0) toolHits.set(n.tool, (toolHits.get(n.tool) ?? 0) + 1);
|
|
4605
5019
|
const toolHitsOf = (tool) => toolHits.get(tool.name) ?? 0;
|
|
4606
5020
|
const dnaLabel = (it) => {
|
|
4607
|
-
|
|
4608
|
-
if (!("node" in it)) base = it.cat === "system" ? catLabel("system") : it.key.slice(5);
|
|
4609
|
-
else {
|
|
4610
|
-
const n = it.node;
|
|
4611
|
-
base = n.skill !== void 0 ? t("node.skillTag", { name: n.skill }) : n.cat === "tool" ? n.tool ?? "?" : n.cat === "inject" ? t("form." + (n.form || "context")) : catLabel(n.cat);
|
|
4612
|
-
}
|
|
5021
|
+
const base = dnaBaseLabel(it, t, catLabel);
|
|
4613
5022
|
return it.time !== void 0 ? base + " · " + fmtTime(it.time) : base;
|
|
4614
5023
|
};
|
|
4615
5024
|
const dnaItems = dna ? dnaOf(view) : null;
|
|
@@ -4628,6 +5037,7 @@ window.__ModuleLoader__.load({
|
|
|
4628
5037
|
if (it === void 0) return;
|
|
4629
5038
|
setCat(it.cat);
|
|
4630
5039
|
setRowQuery("");
|
|
5040
|
+
setRowKind(null);
|
|
4631
5041
|
setOpenElem(key);
|
|
4632
5042
|
focusScrollRef.current = true;
|
|
4633
5043
|
};
|
|
@@ -4652,6 +5062,7 @@ window.__ModuleLoader__.load({
|
|
|
4652
5062
|
}
|
|
4653
5063
|
setCat(c);
|
|
4654
5064
|
setRowQuery("");
|
|
5065
|
+
setRowKind(null);
|
|
4655
5066
|
setOpenElem(singleKeyOf(c));
|
|
4656
5067
|
};
|
|
4657
5068
|
const toggleElem = (key) => {
|
|
@@ -4678,7 +5089,7 @@ window.__ModuleLoader__.load({
|
|
|
4678
5089
|
title: t("node.failed")
|
|
4679
5090
|
}) : null,
|
|
4680
5091
|
tag !== null ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
4681
|
-
className: "lc-br-
|
|
5092
|
+
className: "lc-br-tags",
|
|
4682
5093
|
children: tag
|
|
4683
5094
|
}) : null,
|
|
4684
5095
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
@@ -4701,6 +5112,19 @@ window.__ModuleLoader__.load({
|
|
|
4701
5112
|
}) : null]
|
|
4702
5113
|
}, key);
|
|
4703
5114
|
};
|
|
5115
|
+
const rowTagNode = (tag, names) => {
|
|
5116
|
+
if (tag === null) return null;
|
|
5117
|
+
if (names === null) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
5118
|
+
className: "lc-br-tag",
|
|
5119
|
+
children: tag
|
|
5120
|
+
});
|
|
5121
|
+
const counts = /* @__PURE__ */ new Map();
|
|
5122
|
+
for (const name of names) counts.set(name, (counts.get(name) ?? 0) + 1);
|
|
5123
|
+
return [...counts.entries()].map(([name, count]) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
5124
|
+
className: "lc-br-tag",
|
|
5125
|
+
children: count > 1 ? name + " ×" + String(count) : name
|
|
5126
|
+
}, name));
|
|
5127
|
+
};
|
|
4704
5128
|
const catBody = (c) => {
|
|
4705
5129
|
if (c === "system") {
|
|
4706
5130
|
const sys = view.system;
|
|
@@ -4803,22 +5227,27 @@ window.__ModuleLoader__.load({
|
|
|
4803
5227
|
const conv = bySeq.get(n.seq);
|
|
4804
5228
|
const rowErr = (n.cat === "tool" || n.cat === "skill") && toolErrOf(n, conv).err;
|
|
4805
5229
|
let tag = null;
|
|
5230
|
+
let tagNames = null;
|
|
4806
5231
|
let preview = nodeText(n);
|
|
4807
5232
|
const id = nodeNameOf(n);
|
|
4808
5233
|
if (n.cat === "tool") {
|
|
4809
5234
|
tag = n.tool ?? "?";
|
|
5235
|
+
tagNames = n.tool !== void 0 ? [n.tool] : null;
|
|
4810
5236
|
preview = callSummaryOf(conv) ?? t("node.toolResult");
|
|
4811
5237
|
} else if (n.cat === "skill") {
|
|
4812
5238
|
tag = n.skill !== void 0 ? t("node.skillTag", { name: n.skill }) : t("form." + (n.form || "context"));
|
|
4813
5239
|
preview = (n.skill === void 0 && id !== "" ? id : null) ?? (n.text !== void 0 && n.text !== "" ? n.text : null) ?? callSummaryOf(conv) ?? preview;
|
|
4814
|
-
} else if (n.cat === "assistant"
|
|
4815
|
-
|
|
4816
|
-
|
|
4817
|
-
|
|
4818
|
-
|
|
5240
|
+
} else if (n.cat === "assistant") {
|
|
5241
|
+
const names = Array.isArray(n.calls) && n.calls.length > 0 ? n.calls : callNamesOf(conv);
|
|
5242
|
+
if (names.length > 0) {
|
|
5243
|
+
tag = names.join(" › ");
|
|
5244
|
+
tagNames = names;
|
|
5245
|
+
preview = (n.text !== void 0 && n.text !== "" ? n.text : null) ?? blockSummaryOf(conv) ?? t("node.empty");
|
|
5246
|
+
} else if (n.text === void 0 || n.text === "") preview = blockSummaryOf(conv) ?? preview;
|
|
5247
|
+
} else if (n.cat === "user") {
|
|
4819
5248
|
const imgCount = conv !== void 0 && Array.isArray(conv.content) ? conv.content.filter((b) => imageRefOf(b) !== null).length : 0;
|
|
4820
5249
|
if (imgCount > 0 && openElem !== `n${n.seq}`) tag = t("attach.image") + (imgCount > 1 ? " ×" + String(imgCount) : "");
|
|
4821
|
-
} else
|
|
5250
|
+
} else {
|
|
4822
5251
|
tag = t("form." + (n.form || "context"));
|
|
4823
5252
|
if (id !== "") preview = id;
|
|
4824
5253
|
else if (n.text !== void 0 && n.text !== "") preview = n.form === "snapshot" ? t("node.snapshot") + n.text : n.text;
|
|
@@ -4828,21 +5257,44 @@ window.__ModuleLoader__.load({
|
|
|
4828
5257
|
conv,
|
|
4829
5258
|
rowErr,
|
|
4830
5259
|
tag,
|
|
4831
|
-
|
|
5260
|
+
tagNames,
|
|
5261
|
+
preview,
|
|
5262
|
+
reasoning: n.cat === "assistant" ? reasoningTextOf(conv) : "",
|
|
5263
|
+
kinds: msgKindsOf(n, conv)
|
|
4832
5264
|
};
|
|
4833
5265
|
});
|
|
4834
5266
|
const q = rowQuery.trim().toLowerCase();
|
|
4835
|
-
const
|
|
4836
|
-
|
|
5267
|
+
const kindCounts = c === "assistant" ? ROW_KINDS.map((k) => ({
|
|
5268
|
+
k,
|
|
5269
|
+
n: rows.reduce((acc, r) => acc + (r.kinds[k] ? 1 : 0), 0)
|
|
5270
|
+
})) : null;
|
|
5271
|
+
const shown = q === "" && rowKind === null ? rows : rows.filter((r) => (rowKind === null || r.kinds[rowKind]) && (q === "" || (r.tag ?? "").toLowerCase().includes(q) || r.preview.toLowerCase().includes(q) || typeof r.n.text === "string" && r.n.text.toLowerCase().includes(q) || r.reasoning.toLowerCase().includes(q)));
|
|
5272
|
+
const rowctl = kindCounts === null ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RowToolbar, {
|
|
4837
5273
|
value: rowQuery,
|
|
4838
5274
|
placeholder: t("browser.search." + c),
|
|
4839
5275
|
onChange: setRowQuery
|
|
5276
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RowToolbar, {
|
|
5277
|
+
value: rowQuery,
|
|
5278
|
+
placeholder: t("browser.search." + c),
|
|
5279
|
+
tip: t("browser.kindTip"),
|
|
5280
|
+
onChange: setRowQuery,
|
|
5281
|
+
children: kindCounts.map(({ k, n }) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
5282
|
+
type: "button",
|
|
5283
|
+
className: "lc-gran-btn" + (rowKind === k ? " lc-gran-on" : ""),
|
|
5284
|
+
onClick: () => {
|
|
5285
|
+
setRowKind(rowKind === k ? null : k);
|
|
5286
|
+
},
|
|
5287
|
+
children: [t("browser.kind." + k), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
5288
|
+
className: "lc-kind-n",
|
|
5289
|
+
children: fmt(n)
|
|
5290
|
+
})]
|
|
5291
|
+
}, k))
|
|
4840
5292
|
});
|
|
4841
5293
|
if (shown.length === 0) return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [rowctl, /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
4842
5294
|
className: "lc-br-note",
|
|
4843
5295
|
children: t("browser.rowNoMatch")
|
|
4844
5296
|
})] });
|
|
4845
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [rowctl, shown.map(({ n, conv, rowErr, tag, preview }) => elemRow(`n${n.seq}`, tag, preview, n.tokens, n.time, /* @__PURE__ */ (0, react_jsx_runtime.jsx)(NodeContent, {
|
|
5297
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [rowctl, shown.map(({ n, conv, rowErr, tag, tagNames, preview }) => elemRow(`n${n.seq}`, rowTagNode(tag, tagNames), preview, n.tokens, n.time, /* @__PURE__ */ (0, react_jsx_runtime.jsx)(NodeContent, {
|
|
4846
5298
|
node: n,
|
|
4847
5299
|
conv,
|
|
4848
5300
|
rich,
|
|
@@ -4886,14 +5338,30 @@ window.__ModuleLoader__.load({
|
|
|
4886
5338
|
type: "button",
|
|
4887
5339
|
className: "lc-gran-btn" + (dna ? " lc-gran-on" : ""),
|
|
4888
5340
|
onClick: () => {
|
|
4889
|
-
setDna(
|
|
5341
|
+
setDna(!dna);
|
|
4890
5342
|
},
|
|
4891
5343
|
children: t("browser.dna")
|
|
4892
5344
|
})
|
|
4893
5345
|
}),
|
|
4894
|
-
/* @__PURE__ */ (0, react_jsx_runtime.
|
|
4895
|
-
className: "lc-
|
|
4896
|
-
|
|
5346
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
5347
|
+
className: "lc-gran",
|
|
5348
|
+
role: "group",
|
|
5349
|
+
title: t("browser.base.tip"),
|
|
5350
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
5351
|
+
type: "button",
|
|
5352
|
+
className: "lc-gran-btn" + (deltaBase === "step" ? " lc-gran-on" : ""),
|
|
5353
|
+
onClick: () => {
|
|
5354
|
+
setDeltaBase("step");
|
|
5355
|
+
},
|
|
5356
|
+
children: t("browser.base.step")
|
|
5357
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
5358
|
+
type: "button",
|
|
5359
|
+
className: "lc-gran-btn" + (deltaBase === "turn" ? " lc-gran-on" : ""),
|
|
5360
|
+
onClick: () => {
|
|
5361
|
+
setDeltaBase("turn");
|
|
5362
|
+
},
|
|
5363
|
+
children: t("browser.base.turn")
|
|
5364
|
+
})]
|
|
4897
5365
|
}),
|
|
4898
5366
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("select", {
|
|
4899
5367
|
className: "lc-br-pick",
|
|
@@ -4910,7 +5378,7 @@ window.__ModuleLoader__.load({
|
|
|
4910
5378
|
t: r.turn ?? 0,
|
|
4911
5379
|
s: r.step ?? 0,
|
|
4912
5380
|
n: stepsOf(r.turn)
|
|
4913
|
-
})
|
|
5381
|
+
})
|
|
4914
5382
|
}, r.seq))]
|
|
4915
5383
|
})
|
|
4916
5384
|
]
|
|
@@ -4965,9 +5433,9 @@ window.__ModuleLoader__.load({
|
|
|
4965
5433
|
children: CATS.map((c) => {
|
|
4966
5434
|
const count = toolCount(c.key);
|
|
4967
5435
|
const v = breakdown[c.key] || 0;
|
|
4968
|
-
const prevCount = prevView !== null && prevByCat !== null ? countOf(prevView, prevByCat, c.key) : null;
|
|
5436
|
+
const prevCount = zeroBase ? 0 : prevView !== null && prevByCat !== null ? countOf(prevView, prevByCat, c.key) : null;
|
|
4969
5437
|
const countDelta = prevCount !== null ? count - prevCount : null;
|
|
4970
|
-
const prevTokens = refReq !== null ? refReq[c.key] || 0 : null;
|
|
5438
|
+
const prevTokens = zeroBase ? 0 : refReq !== null ? refReq[c.key] || 0 : null;
|
|
4971
5439
|
const tokenDelta = prevTokens !== null ? v - prevTokens : null;
|
|
4972
5440
|
const openable = count > 0 || (c.key === "system" || c.key === "tools") && view.header === null;
|
|
4973
5441
|
const open = openCat === c.key && openable;
|
|
@@ -5358,6 +5826,7 @@ window.__ModuleLoader__.load({
|
|
|
5358
5826
|
const StackedBar = makeStackedBar(kit);
|
|
5359
5827
|
const CurrentComposition = makeCurrentComposition(kit, StackedBar, makeLegend(kit));
|
|
5360
5828
|
const ContextBrowser = makeContextBrowser(kit, StackedBar, settings);
|
|
5829
|
+
const DetailNote = makeDetailNote(kit);
|
|
5361
5830
|
const ErrorBoundary = makeErrorBoundary(t);
|
|
5362
5831
|
function ContextModalBody(props) {
|
|
5363
5832
|
const sessionId = typeof props.sessionId === "string" ? props.sessionId : "";
|
|
@@ -5425,7 +5894,10 @@ window.__ModuleLoader__.load({
|
|
|
5425
5894
|
onClick: close,
|
|
5426
5895
|
children: "×"
|
|
5427
5896
|
})]
|
|
5428
|
-
}), data === null || head === null ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
5897
|
+
}), data === null || head === null ? source.detailState === "failed" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DetailNote, {
|
|
5898
|
+
state: "failed",
|
|
5899
|
+
onRetry: source.retryDetail
|
|
5900
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
5429
5901
|
className: "lc-empty",
|
|
5430
5902
|
children: t("loading")
|
|
5431
5903
|
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(CurrentComposition, {
|
|
@@ -5479,9 +5951,10 @@ window.__ModuleLoader__.load({
|
|
|
5479
5951
|
* The Context Dashboard's sidebar entry: a footer action stacked directly
|
|
5480
5952
|
* above Settings (the harness's own foot layout: footer actions, then the
|
|
5481
5953
|
* settings row), mirroring the Settings trigger's geometry in both column
|
|
5482
|
-
* widths. The button carries the plugin emblem
|
|
5483
|
-
*
|
|
5484
|
-
*
|
|
5954
|
+
* widths. The button carries the plugin emblem — in the mono seat, so the
|
|
5955
|
+
* glyph matches the harness's own footer rows rather than shouting over
|
|
5956
|
+
* them — and, on the wide column, its label. Clicking opens the overview
|
|
5957
|
+
* overlay through the shared module store (overviewStore.ts).
|
|
5485
5958
|
*
|
|
5486
5959
|
* The per-user `insightsEntry` preference takes the entry down (renders
|
|
5487
5960
|
* null) without unregistering the seat. The subscription fails open: an
|
|
@@ -5507,7 +5980,8 @@ window.__ModuleLoader__.load({
|
|
|
5507
5980
|
},
|
|
5508
5981
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ContextIcon, {
|
|
5509
5982
|
size: props.wide === true ? 16 : 18,
|
|
5510
|
-
className: "lc-ov-entry-icon"
|
|
5983
|
+
className: "lc-ov-entry-icon",
|
|
5984
|
+
mono: true
|
|
5511
5985
|
}), props.wide === true && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
5512
5986
|
className: "lc-ov-entry-label",
|
|
5513
5987
|
children: t("ov.entry")
|
|
@@ -8314,7 +8788,7 @@ window.__ModuleLoader__.load({
|
|
|
8314
8788
|
//#endregion
|
|
8315
8789
|
//#region src/client/components/settingsCard.tsx
|
|
8316
8790
|
/**
|
|
8317
|
-
* The dsh-context preference cards — two seats over the same
|
|
8791
|
+
* The dsh-context preference cards — two seats over the same seven rows. The
|
|
8318
8792
|
* settings-section card (`settings.plugin.item`, the older harness lines)
|
|
8319
8793
|
* renders a collapsible list item in Settings → Plugins → Plugin
|
|
8320
8794
|
* configuration; the Plugins-page card (`plugins.bundle.config`, the
|
|
@@ -8361,7 +8835,7 @@ window.__ModuleLoader__.load({
|
|
|
8361
8835
|
})]
|
|
8362
8836
|
});
|
|
8363
8837
|
}
|
|
8364
|
-
/** The
|
|
8838
|
+
/** The seven preference rows shared by both seats. */
|
|
8365
8839
|
function PreferenceRows(props) {
|
|
8366
8840
|
const { t, state, set } = props;
|
|
8367
8841
|
const disabled = state.status !== "ready" || !state.writable;
|
|
@@ -8433,6 +8907,21 @@ window.__ModuleLoader__.load({
|
|
|
8433
8907
|
set?.("defaultTrendMode", id);
|
|
8434
8908
|
}
|
|
8435
8909
|
}),
|
|
8910
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(PrefRow, {
|
|
8911
|
+
label: t("settings.deltaBase"),
|
|
8912
|
+
value: state.deltaBase,
|
|
8913
|
+
disabled,
|
|
8914
|
+
options: [{
|
|
8915
|
+
id: "step",
|
|
8916
|
+
label: t("browser.base.step")
|
|
8917
|
+
}, {
|
|
8918
|
+
id: "turn",
|
|
8919
|
+
label: t("browser.base.turn")
|
|
8920
|
+
}],
|
|
8921
|
+
onPick: (id) => {
|
|
8922
|
+
set?.("defaultDeltaBase", id);
|
|
8923
|
+
}
|
|
8924
|
+
}),
|
|
8436
8925
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(PrefRow, {
|
|
8437
8926
|
label: t("settings.toolSort"),
|
|
8438
8927
|
value: state.toolSort,
|
|
@@ -8563,6 +9052,7 @@ window.__ModuleLoader__.load({
|
|
|
8563
9052
|
...v.defaultPlacement === "all" || v.defaultPlacement === "tab" || v.defaultPlacement === "sidebar" ? { placement: v.defaultPlacement } : {},
|
|
8564
9053
|
...v.defaultGranularity === "step" || v.defaultGranularity === "turn" ? { granularity: v.defaultGranularity } : {},
|
|
8565
9054
|
...v.defaultTrendMode === "total" || v.defaultTrendMode === "delta" ? { mode: v.defaultTrendMode } : {},
|
|
9055
|
+
...v.defaultDeltaBase === "step" || v.defaultDeltaBase === "turn" ? { deltaBase: v.defaultDeltaBase } : {},
|
|
8566
9056
|
...v.defaultToolSort === "size" || v.defaultToolSort === "count" || v.defaultToolSort === "name" ? { toolSort: v.defaultToolSort } : {},
|
|
8567
9057
|
...v.defaultFileSort === "count" || v.defaultFileSort === "latest" || v.defaultFileSort === "path" ? { fileSort: v.defaultFileSort } : {},
|
|
8568
9058
|
...v.insightsEntry === "show" || v.insightsEntry === "hide" ? { insightsEntry: v.insightsEntry } : {}
|
|
@@ -8574,6 +9064,7 @@ window.__ModuleLoader__.load({
|
|
|
8574
9064
|
placement: "all",
|
|
8575
9065
|
granularity: "step",
|
|
8576
9066
|
mode: "total",
|
|
9067
|
+
deltaBase: "step",
|
|
8577
9068
|
toolSort: "count",
|
|
8578
9069
|
fileSort: "count",
|
|
8579
9070
|
insightsEntry: "show",
|
|
@@ -8582,7 +9073,7 @@ window.__ModuleLoader__.load({
|
|
|
8582
9073
|
let scope;
|
|
8583
9074
|
const listeners = /* @__PURE__ */ new Set();
|
|
8584
9075
|
const publish = (next) => {
|
|
8585
|
-
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.insightsEntry === state.insightsEntry && next.writable === state.writable) return;
|
|
9076
|
+
if (next.status === state.status && next.placement === state.placement && next.granularity === state.granularity && next.mode === state.mode && next.deltaBase === state.deltaBase && next.toolSort === state.toolSort && next.fileSort === state.fileSort && next.insightsEntry === state.insightsEntry && next.writable === state.writable) return;
|
|
8586
9077
|
state = next;
|
|
8587
9078
|
for (const listener of listeners) listener();
|
|
8588
9079
|
};
|
|
@@ -8595,6 +9086,7 @@ window.__ModuleLoader__.load({
|
|
|
8595
9086
|
placement: prefs.placement ?? (raw?.defaultPlacement === void 0 ? state.placement : "all"),
|
|
8596
9087
|
granularity: prefs.granularity ?? state.granularity,
|
|
8597
9088
|
mode: prefs.mode ?? state.mode,
|
|
9089
|
+
deltaBase: prefs.deltaBase ?? state.deltaBase,
|
|
8598
9090
|
toolSort: prefs.toolSort ?? state.toolSort,
|
|
8599
9091
|
fileSort: prefs.fileSort ?? state.fileSort,
|
|
8600
9092
|
insightsEntry: prefs.insightsEntry ?? (raw?.insightsEntry === void 0 ? state.insightsEntry : "show"),
|
|
@@ -8618,6 +9110,7 @@ window.__ModuleLoader__.load({
|
|
|
8618
9110
|
defaultPlacement: () => state.placement,
|
|
8619
9111
|
defaultGranularity: () => state.granularity,
|
|
8620
9112
|
defaultTrendMode: () => state.mode,
|
|
9113
|
+
defaultDeltaBase: () => state.deltaBase,
|
|
8621
9114
|
defaultToolSort: () => state.toolSort,
|
|
8622
9115
|
defaultFileSort: () => state.fileSort,
|
|
8623
9116
|
insightsEntry: () => state.insightsEntry,
|
|
@@ -10784,7 +11277,7 @@ window.__ModuleLoader__.load({
|
|
|
10784
11277
|
return function PluginInfo() {
|
|
10785
11278
|
const [latest, setLatest] = (0, react.useState)(null);
|
|
10786
11279
|
(0, react.useEffect)(() => {
|
|
10787
|
-
if ("0.
|
|
11280
|
+
if ("0.61.0".includes("-dev")) return;
|
|
10788
11281
|
let on = true;
|
|
10789
11282
|
fetchLatestVersion().then((v) => {
|
|
10790
11283
|
if (on && v) setLatest(v);
|
|
@@ -10793,8 +11286,8 @@ window.__ModuleLoader__.load({
|
|
|
10793
11286
|
on = false;
|
|
10794
11287
|
};
|
|
10795
11288
|
}, []);
|
|
10796
|
-
const update = latest !== null && isNewerVersion(latest, "0.
|
|
10797
|
-
const nameText = "dsh-context (v0.
|
|
11289
|
+
const update = latest !== null && isNewerVersion(latest, "0.61.0") ? latest : null;
|
|
11290
|
+
const nameText = "dsh-context (v0.61.0)";
|
|
10798
11291
|
const nameValue = [nameText];
|
|
10799
11292
|
if (update) nameValue.push(/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
10800
11293
|
className: "lc-pi-update",
|
|
@@ -11757,6 +12250,7 @@ window.__ModuleLoader__.load({
|
|
|
11757
12250
|
const [hoverTurn, setHoverTurn] = (0, react.useState)(null);
|
|
11758
12251
|
const [granularity, setGranularity] = (0, react.useState)(() => settings.defaultGranularity());
|
|
11759
12252
|
const [trendMode, setTrendMode] = (0, react.useState)(() => settings.defaultTrendMode());
|
|
12253
|
+
const [dna, setDna] = (0, react.useState)(false);
|
|
11760
12254
|
const [adaptive, setAdaptive] = (0, react.useState)(false);
|
|
11761
12255
|
const [focusTurn, setFocusTurn] = (0, react.useState)(null);
|
|
11762
12256
|
const [jumpSeq, setJumpSeq] = (0, react.useState)(null);
|
|
@@ -11812,6 +12306,21 @@ window.__ModuleLoader__.load({
|
|
|
11812
12306
|
const displayRequests = (0, react.useMemo)(() => granularity === "turn" ? aggregateByTurn(requests) : requests, [requests, granularity]);
|
|
11813
12307
|
const stepsOf = (0, react.useMemo)(() => turnStepsOf(requests), [requests]);
|
|
11814
12308
|
const markers = (0, react.useMemo)(() => attachMarkers(displayRequests, events), [displayRequests, events]);
|
|
12309
|
+
/* v8 ignore next 1 -- a missing projection returns the loading screen before the trend card
|
|
12310
|
+
(and its DNA toggle) renders, so `dna && data === null` cannot occur. */
|
|
12311
|
+
const dnaBands = (0, react.useMemo)(() => dna && data !== null ? displayRequests.map((req) => trendBandsOf(assemble(data, headers, req.seq))) : null, [
|
|
12312
|
+
dna,
|
|
12313
|
+
data,
|
|
12314
|
+
headers,
|
|
12315
|
+
displayRequests
|
|
12316
|
+
]);
|
|
12317
|
+
const revealBand = (0, react.useCallback)((seq, band) => {
|
|
12318
|
+
setNodeFocus({
|
|
12319
|
+
step: seq,
|
|
12320
|
+
key: band.key,
|
|
12321
|
+
cat: band.cat
|
|
12322
|
+
});
|
|
12323
|
+
}, []);
|
|
11815
12324
|
(0, react.useEffect)(() => {
|
|
11816
12325
|
if (typeof sessionId !== "string" || sessionId === "") return;
|
|
11817
12326
|
const take = () => {
|
|
@@ -11909,7 +12418,7 @@ window.__ModuleLoader__.load({
|
|
|
11909
12418
|
if (step === null) return;
|
|
11910
12419
|
setNodeFocus({
|
|
11911
12420
|
step,
|
|
11912
|
-
seq,
|
|
12421
|
+
key: "n" + String(seq),
|
|
11913
12422
|
cat: "tool"
|
|
11914
12423
|
});
|
|
11915
12424
|
}, [requests]);
|
|
@@ -11921,7 +12430,7 @@ window.__ModuleLoader__.load({
|
|
|
11921
12430
|
const step = isResponse ? next !== null ? next.seq : "live" : activeReq.seq;
|
|
11922
12431
|
setNodeFocus({
|
|
11923
12432
|
step,
|
|
11924
|
-
|
|
12433
|
+
key: "n" + String(node.seq),
|
|
11925
12434
|
cat: node.cat
|
|
11926
12435
|
});
|
|
11927
12436
|
}, [
|
|
@@ -11932,7 +12441,10 @@ window.__ModuleLoader__.load({
|
|
|
11932
12441
|
if (!data) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
11933
12442
|
className: "lc-root",
|
|
11934
12443
|
ref: rootRef,
|
|
11935
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
12444
|
+
children: source.detailState === "failed" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DetailNote, {
|
|
12445
|
+
state: "failed",
|
|
12446
|
+
onRetry: source.retryDetail
|
|
12447
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
11936
12448
|
className: "lc-empty",
|
|
11937
12449
|
children: t("loading")
|
|
11938
12450
|
})
|
|
@@ -11980,6 +12492,19 @@ window.__ModuleLoader__.load({
|
|
|
11980
12492
|
className: "lc-card-title-text",
|
|
11981
12493
|
children: t("trend.title")
|
|
11982
12494
|
}),
|
|
12495
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
12496
|
+
className: "lc-gran lc-trend-dna",
|
|
12497
|
+
role: "group",
|
|
12498
|
+
title: t("trend.dnaTip"),
|
|
12499
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
12500
|
+
type: "button",
|
|
12501
|
+
className: "lc-gran-btn" + (dna ? " lc-gran-on" : ""),
|
|
12502
|
+
onClick: () => {
|
|
12503
|
+
setDna((v) => !v);
|
|
12504
|
+
},
|
|
12505
|
+
children: t("trend.dna")
|
|
12506
|
+
})
|
|
12507
|
+
}),
|
|
11983
12508
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
11984
12509
|
className: "lc-gran lc-trend-adaptive",
|
|
11985
12510
|
role: "group",
|
|
@@ -12051,6 +12576,8 @@ window.__ModuleLoader__.load({
|
|
|
12051
12576
|
hoverCat: trendHoverCat,
|
|
12052
12577
|
focusCat,
|
|
12053
12578
|
adaptive,
|
|
12579
|
+
dna: dnaBands,
|
|
12580
|
+
onPickBand: revealBand,
|
|
12054
12581
|
onSelect: setSelectedSeq,
|
|
12055
12582
|
onHover: setHoveredSeq,
|
|
12056
12583
|
onHoverTurn: setHoverTurn,
|
|
@@ -12090,7 +12617,9 @@ window.__ModuleLoader__.load({
|
|
|
12090
12617
|
onNodeFocusHandled: clearNodeFocus,
|
|
12091
12618
|
loadImage,
|
|
12092
12619
|
detailState: source.detailState,
|
|
12093
|
-
onDetailRetry: source.retryDetail
|
|
12620
|
+
onDetailRetry: source.retryDetail,
|
|
12621
|
+
dna,
|
|
12622
|
+
onDnaChange: setDna
|
|
12094
12623
|
});
|
|
12095
12624
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
12096
12625
|
className: "lc-root",
|
|
@@ -12335,7 +12864,7 @@ window.__ModuleLoader__.load({
|
|
|
12335
12864
|
}
|
|
12336
12865
|
//#endregion
|
|
12337
12866
|
//#region \0dsh-global-css:/home/runner/work/dsh-context/dsh-context/src/client/styles/tailwind.css.mjs
|
|
12338
|
-
const css$15 = "/*! 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-orange-500:oklch(70.5% .213 47.604);--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\\(240px\\,100\\%\\)\\]{min-width:min(240px,100%)}.min-w-\\[min\\(360px\\,100\\%\\)\\]{min-width:min(360px,100%)}.flex-1{flex:1}.flex-\\[3\\]{flex:3}.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}}";
|
|
12867
|
+
const css$15 = "/*! 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-orange-500:oklch(70.5% .213 47.604);--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}.invisible{visibility:hidden}.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\\(240px\\,100\\%\\)\\]{min-width:min(240px,100%)}.min-w-\\[min\\(360px\\,100\\%\\)\\]{min-width:min(360px,100%)}.flex-1{flex:1}.flex-\\[3\\]{flex:3}.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}}";
|
|
12339
12868
|
const tagId$15 = "dsh-context/tailwind.css";
|
|
12340
12869
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$15) + "]") === null) {
|
|
12341
12870
|
const tag = document.createElement("style");
|
|
@@ -12346,7 +12875,7 @@ window.__ModuleLoader__.load({
|
|
|
12346
12875
|
}
|
|
12347
12876
|
//#endregion
|
|
12348
12877
|
//#region \0dsh-global-css:/home/runner/work/dsh-context/dsh-context/src/client/styles/base.css.mjs
|
|
12349
|
-
const css$14 = ".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{padding:12px}.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{box-sizing:border-box;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,.lc-heat-ctl{align-items:center;gap:6px;margin-left:auto;display:flex}.lc-trend-ctl .lc-gran,.lc-heat-ctl .lc-gran,.lc-heat-ctl .lc-card-sub{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}";
|
|
12878
|
+
const css$14 = ".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{padding:12px}.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{box-sizing:border-box;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,.lc-heat-ctl{align-items:center;gap:6px;margin-left:auto;display:flex}.lc-trend-ctl .lc-gran,.lc-heat-ctl .lc-gran,.lc-heat-ctl .lc-card-sub{margin-left:0}.lc-trend-dna,.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-btn:disabled{opacity:.4;cursor:not-allowed}.lc-gran-btn:disabled:hover{color:var(--dsw-alias-label-secondary)}.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}";
|
|
12350
12879
|
const tagId$14 = "dsh-context/base.css";
|
|
12351
12880
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$14) + "]") === null) {
|
|
12352
12881
|
const tag = document.createElement("style");
|
|
@@ -12401,7 +12930,7 @@ window.__ModuleLoader__.load({
|
|
|
12401
12930
|
}
|
|
12402
12931
|
//#endregion
|
|
12403
12932
|
//#region \0dsh-global-css:/home/runner/work/dsh-context/dsh-context/src/client/styles/trendChart.css.mjs
|
|
12404
|
-
const css$9 = ".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:18px 2px 0;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=skill] .lc-cat-seg[data-cat=skill],.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-step-flag{background:color-mix(in srgb, var(--color-neutral-500) 45%, transparent);pointer-events:none;width:1px;position:absolute;top:-17px;bottom:0;right:-1px}.lc-step-flag-label{box-sizing:border-box;border:1px solid color-mix(in srgb, var(--color-neutral-500) 45%, transparent);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-secondary);white-space:nowrap;border-radius:3px;padding:1px 3px;font-size:9px;font-weight:600;line-height:1;position:absolute;top:0;right:0}.lc-turns{box-sizing:border-box;gap:2px;width:max-content;min-width:100%;margin-top:4px;padding:0 2px;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}";
|
|
12933
|
+
const css$9 = ".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:18px 2px 0;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-dna{border-radius:2px;width:100%}.lc-bar-stack,.lc-bar-up,.lc-bar-down,.lc-bar-dna{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=skill] .lc-cat-seg[data-cat=skill],.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-dna-hl{z-index:1;pointer-events:none;align-items:stretch;gap:2px;display:flex;position:absolute;inset:18px 2px 0}.lc-dna-cell{flex:none;width:14px;position:relative}.lc-dna-slice{box-sizing:border-box;border:1px solid var(--dsw-alias-brand-primary);background:color-mix(in srgb, var(--dsw-alias-brand-primary) 26%, transparent);border-radius:1px;width:100%;position:absolute;left:0}.lc-bar-marker{z-index:2;color:var(--dsw-alias-state-warn-primary);font-size:11px;position:absolute;top:-16px;left:50%;transform:translate(-50%)}.lc-step-flag{z-index:2;background:color-mix(in srgb, var(--color-neutral-500) 45%, transparent);pointer-events:none;width:1px;position:absolute;top:-17px;bottom:0;right:-1px}.lc-step-flag-label{box-sizing:border-box;border:1px solid color-mix(in srgb, var(--color-neutral-500) 45%, transparent);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-secondary);white-space:nowrap;border-radius:3px;padding:1px 3px;font-size:9px;font-weight:600;line-height:1;position:absolute;top:0;right:0}.lc-turns{box-sizing:border-box;gap:2px;width:max-content;min-width:100%;margin-top:4px;padding:0 2px;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}";
|
|
12405
12934
|
const tagId$9 = "dsh-context/trendChart.css";
|
|
12406
12935
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$9) + "]") === null) {
|
|
12407
12936
|
const tag = document.createElement("style");
|
|
@@ -12412,7 +12941,7 @@ window.__ModuleLoader__.load({
|
|
|
12412
12941
|
}
|
|
12413
12942
|
//#endregion
|
|
12414
12943
|
//#region \0dsh-global-css:/home/runner/work/dsh-context/dsh-context/src/client/styles/requestDetail.css.mjs
|
|
12415
|
-
const css$8 = ".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-
|
|
12944
|
+
const css$8 = ".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-l2);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-l2);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-l2);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)}";
|
|
12416
12945
|
const tagId$8 = "dsh-context/requestDetail.css";
|
|
12417
12946
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$8) + "]") === null) {
|
|
12418
12947
|
const tag = document.createElement("style");
|
|
@@ -12434,7 +12963,7 @@ window.__ModuleLoader__.load({
|
|
|
12434
12963
|
}
|
|
12435
12964
|
//#endregion
|
|
12436
12965
|
//#region \0dsh-global-css:/home/runner/work/dsh-context/dsh-context/src/client/styles/fileCard.css.mjs
|
|
12437
|
-
const css$6 = ".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-
|
|
12966
|
+
const css$6 = ".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-l2);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}";
|
|
12438
12967
|
const tagId$6 = "dsh-context/fileCard.css";
|
|
12439
12968
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$6) + "]") === null) {
|
|
12440
12969
|
const tag = document.createElement("style");
|
|
@@ -12456,7 +12985,7 @@ window.__ModuleLoader__.load({
|
|
|
12456
12985
|
}
|
|
12457
12986
|
//#endregion
|
|
12458
12987
|
//#region \0dsh-global-css:/home/runner/work/dsh-context/dsh-context/src/client/styles/browser.css.mjs
|
|
12459
|
-
const css$4 = ".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-
|
|
12988
|
+
const css$4 = ".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-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-open{background:var(--dsw-alias-interactive-bg-hover)}.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-l2);text-overflow:ellipsis;white-space:nowrap;border-radius:4px;max-width:220px;padding:0 6px;font-size:11px;overflow:hidden}.lc-br-tags{align-items:center;gap:4px;min-width:0;display:inline-flex}.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)}";
|
|
12460
12989
|
const tagId$4 = "dsh-context/browser.css";
|
|
12461
12990
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$4) + "]") === null) {
|
|
12462
12991
|
const tag = document.createElement("style");
|