dsh-context 0.46.0 → 0.46.1
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 +3 -3
- package/lib/client.js +139 -142
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -8,19 +8,19 @@
|
|
|
8
8
|
|
|
9
9
|
**The best [DeepSeek Harness plugin](https://www.deepseek.com/harness/) for Agent's context insights and management.**
|
|
10
10
|
|
|
11
|
-
`dsh-context` provides full context lifecycle management features.
|
|
11
|
+
[`dsh-context`](https://www.npmjs.com/package/dsh-context) provides full context lifecycle management features.
|
|
12
12
|
- **Context tab** — an UI context dashboard for DeepSeek Harness's context stats, composition, trend, events, and messages.
|
|
13
13
|
- **`/context` command** — the slash command shows the context model for current context composition and recent context evolution.
|
|
14
14
|
|
|
15
15
|
## Install / Update
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
Install [`dsh-context`](https://www.npmjs.com/package/dsh-context) plugin from [DeepSeek Harness](https://www.npmjs.com/package/@deepseek-ai/dsh):
|
|
18
18
|
|
|
19
19
|
```sh
|
|
20
20
|
dsh plugin --profile web add dsh-context
|
|
21
21
|
```
|
|
22
22
|
|
|
23
|
-
Or
|
|
23
|
+
Or update the `dsh-context` plugin:
|
|
24
24
|
|
|
25
25
|
```sh
|
|
26
26
|
dsh plugin --profile web update dsh-context@latest
|
package/lib/client.js
CHANGED
|
@@ -72,8 +72,9 @@ window.__ModuleLoader__.load({
|
|
|
72
72
|
"gran.total": "全量",
|
|
73
73
|
"gran.delta": "增量",
|
|
74
74
|
"gran.modeHint": "全量:累计构成;增量:相对上一条请求的变化量",
|
|
75
|
-
"trend.hint": "✂ 表示压缩/剪枝,步骤/轮次 切换粒度",
|
|
76
75
|
"trend.focus": "仅展示 {cat}",
|
|
76
|
+
"trend.adaptive": "自适应",
|
|
77
|
+
"trend.adaptiveHint": "按当前可视范围内的柱子重新缩放高度,滚动时随之变化",
|
|
77
78
|
"trend.empty": "发起一轮对话后,这里会展示每次模型请求的上下文构成",
|
|
78
79
|
"detail.step": "第 {t} 轮 · 第 {s} 步",
|
|
79
80
|
"detail.turn": "第 {t} 轮 · 共 {n} 步",
|
|
@@ -89,7 +90,6 @@ window.__ModuleLoader__.load({
|
|
|
89
90
|
"brief.noInputs": "(无新增)",
|
|
90
91
|
"brief.locate": "在上下文浏览器中查看",
|
|
91
92
|
"jump.title": "在上下文标签页中查看此轮",
|
|
92
|
-
"jump.statsLine": "在上下文标签页中查看上下文构成",
|
|
93
93
|
"brief.turnTip": "这一轮开场时用户发送的消息;回合内的每一步都会回显同一条",
|
|
94
94
|
"brief.inputTip": "上一步回复之后、本次请求发出前新进入上下文的内容——通常是上一步所调工具的结果;每轮的第一步无新增",
|
|
95
95
|
"brief.replyTip": "这一步模型返回的内容(文本回复或工具调用);此步发起的调用,其结果会出现在下一柱的「输入」行",
|
|
@@ -358,8 +358,9 @@ window.__ModuleLoader__.load({
|
|
|
358
358
|
"gran.total": "Total",
|
|
359
359
|
"gran.delta": "Delta",
|
|
360
360
|
"gran.modeHint": "Total: cumulative makeup; Delta: change vs the previous request",
|
|
361
|
-
"trend.hint": "✂ marks compaction/prune, Step/Turn switches granularity",
|
|
362
361
|
"trend.focus": "Showing {cat} only",
|
|
362
|
+
"trend.adaptive": "Adaptive",
|
|
363
|
+
"trend.adaptiveHint": "Rescale bar heights to the visible range, following the scroll",
|
|
363
364
|
"trend.empty": "Send a message and each model request’s context makeup shows up here",
|
|
364
365
|
"detail.step": "Turn {t} · Step {s}",
|
|
365
366
|
"detail.turn": "Turn {t} · {n} steps",
|
|
@@ -375,7 +376,6 @@ window.__ModuleLoader__.load({
|
|
|
375
376
|
"brief.noInputs": "(nothing new)",
|
|
376
377
|
"brief.locate": "Reveal in Context Browser",
|
|
377
378
|
"jump.title": "View this turn in the Context tab",
|
|
378
|
-
"jump.statsLine": "View the context composition in the Context tab",
|
|
379
379
|
"brief.turnTip": "The user message that opened this turn — every step of the turn recalls it",
|
|
380
380
|
"brief.inputTip": "What entered after the previous reply and before this request went out — usually the previous tool-call results; a turn opener has nothing new",
|
|
381
381
|
"brief.replyTip": "What the model returned on this step (a text reply or tool calls) — results of calls made here appear in the In row of the next bar",
|
|
@@ -3336,6 +3336,7 @@ window.__ModuleLoader__.load({
|
|
|
3336
3336
|
label: dnaLabel(it),
|
|
3337
3337
|
group: it.cat
|
|
3338
3338
|
})) ?? null;
|
|
3339
|
+
const liveDnaKey = dnaKey !== null && dnaByKey.has(dnaKey) ? dnaKey : null;
|
|
3339
3340
|
const pickDna = (key) => {
|
|
3340
3341
|
const it = dnaByKey.get(key);
|
|
3341
3342
|
/* v8 ignore next 1 -- the bar only reports keys of the parts it was handed; defensive. */
|
|
@@ -3638,7 +3639,7 @@ window.__ModuleLoader__.load({
|
|
|
3638
3639
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(StackedBar, {
|
|
3639
3640
|
parts: dnaParts ?? parts,
|
|
3640
3641
|
height: 10,
|
|
3641
|
-
hoverKey: dna ?
|
|
3642
|
+
hoverKey: dna ? liveDnaKey ?? linkKey ?? pinKey : linkKey ?? pinKey,
|
|
3642
3643
|
onHoverKey: dna ? setDnaKey : linked ? props.onHoverKey : void 0,
|
|
3643
3644
|
tip: dna,
|
|
3644
3645
|
onPickKey: dna ? pickDna : void 0,
|
|
@@ -5158,6 +5159,35 @@ window.__ModuleLoader__.load({
|
|
|
5158
5159
|
for (const r of requests) if (r.seq > seq && (gone === void 0 || gone > r.seq)) return r.seq;
|
|
5159
5160
|
return gone === void 0 ? "live" : null;
|
|
5160
5161
|
}
|
|
5162
|
+
//#endregion
|
|
5163
|
+
//#region src/client/overscroll.ts
|
|
5164
|
+
/**
|
|
5165
|
+
* Stop a horizontal scroller's overscroll from reaching the browser's history navigation — the trackpad
|
|
5166
|
+
* swipe-back (left edge) and swipe-forward (right edge) gestures. The spec answer is `overscroll-behavior-x:
|
|
5167
|
+
* contain`, the harness's own idiom for its horizontal scrollers and what the sheets beside this module's
|
|
5168
|
+
* callers already set; it covers Chromium and Firefox, but WebKit still navigates on horizontal overscroll with
|
|
5169
|
+
* the property set (bug 240183), where a canceled wheel is the only lever. Without either, one swipe past the
|
|
5170
|
+
* edge of the trend chart or the agent graph leaves the whole app for another page in the tab's history.
|
|
5171
|
+
*/
|
|
5172
|
+
/**
|
|
5173
|
+
* Cancel the horizontal-dominant wheel gestures a scroller cannot consume — the ones the browser would
|
|
5174
|
+
* otherwise read as a history swipe. Vertical-dominant gestures are left alone: they belong to the page's own
|
|
5175
|
+
* scrolling, and the scrollers this guards only overflow horizontally.
|
|
5176
|
+
* @param el - the horizontal scroll container (the listener must be non-passive, so it cannot ride React's passive wheel seat).
|
|
5177
|
+
* @returns the disposer removing the listener.
|
|
5178
|
+
*/
|
|
5179
|
+
function containHorizontalOverscroll(el) {
|
|
5180
|
+
const onWheel = (e) => {
|
|
5181
|
+
if (Math.abs(e.deltaX) <= Math.abs(e.deltaY)) return;
|
|
5182
|
+
const atStart = e.deltaX < 0 && el.scrollLeft <= 0;
|
|
5183
|
+
const atEnd = e.deltaX > 0 && el.scrollLeft + el.clientWidth >= el.scrollWidth - 1;
|
|
5184
|
+
if (atStart || atEnd) e.preventDefault();
|
|
5185
|
+
};
|
|
5186
|
+
el.addEventListener("wheel", onWheel, { passive: false });
|
|
5187
|
+
return () => {
|
|
5188
|
+
el.removeEventListener("wheel", onWheel);
|
|
5189
|
+
};
|
|
5190
|
+
}
|
|
5161
5191
|
const SLOT_MAX = 184;
|
|
5162
5192
|
const SLOT_MIN = 112;
|
|
5163
5193
|
const CAPTION_GUTTER = 8;
|
|
@@ -5605,6 +5635,13 @@ window.__ModuleLoader__.load({
|
|
|
5605
5635
|
};
|
|
5606
5636
|
/* v8 ignore stop */
|
|
5607
5637
|
}, []);
|
|
5638
|
+
(0, react.useEffect)(() => {
|
|
5639
|
+
const el = stageRef.current;
|
|
5640
|
+
/* v8 ignore next 1 -- the stage renders whenever the card does, and React
|
|
5641
|
+
attaches refs before effects run; el is never null here. */
|
|
5642
|
+
if (el === null) return;
|
|
5643
|
+
return containHorizontalOverscroll(el);
|
|
5644
|
+
}, []);
|
|
5608
5645
|
(0, react.useEffect)(() => {
|
|
5609
5646
|
if (face === null || typeof sessionId !== "string" || sessionId === "") return;
|
|
5610
5647
|
if (typeof face.refreshSubagents !== "function") return;
|
|
@@ -6445,7 +6482,7 @@ window.__ModuleLoader__.load({
|
|
|
6445
6482
|
return function PluginInfo() {
|
|
6446
6483
|
const [latest, setLatest] = (0, react.useState)(null);
|
|
6447
6484
|
(0, react.useEffect)(() => {
|
|
6448
|
-
if ("0.46.
|
|
6485
|
+
if ("0.46.1".includes("-dev")) return;
|
|
6449
6486
|
let on = true;
|
|
6450
6487
|
fetchLatestVersion().then((v) => {
|
|
6451
6488
|
if (on && v) setLatest(v);
|
|
@@ -6454,8 +6491,8 @@ window.__ModuleLoader__.load({
|
|
|
6454
6491
|
on = false;
|
|
6455
6492
|
};
|
|
6456
6493
|
}, []);
|
|
6457
|
-
const update = latest !== null && isNewerVersion(latest, "0.46.
|
|
6458
|
-
const nameText = "dsh-context (v0.46.
|
|
6494
|
+
const update = latest !== null && isNewerVersion(latest, "0.46.1") ? latest : null;
|
|
6495
|
+
const nameText = "dsh-context (v0.46.1)";
|
|
6459
6496
|
const nameValue = [nameText];
|
|
6460
6497
|
if (update) nameValue.push(/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
6461
6498
|
className: "lc-pi-update",
|
|
@@ -7576,6 +7613,42 @@ window.__ModuleLoader__.load({
|
|
|
7576
7613
|
focus
|
|
7577
7614
|
]);
|
|
7578
7615
|
const markers = props.markers;
|
|
7616
|
+
const adaptive = props.adaptive === true;
|
|
7617
|
+
const [visMax, setVisMax] = (0, react.useState)(null);
|
|
7618
|
+
const measureVisible = (el) => {
|
|
7619
|
+
if (!adaptive) return;
|
|
7620
|
+
const n = requests.length;
|
|
7621
|
+
if (n === 0 || el.clientWidth <= 0) return;
|
|
7622
|
+
const pitch = 16;
|
|
7623
|
+
const sl = el.scrollLeft;
|
|
7624
|
+
const vr = sl + el.clientWidth;
|
|
7625
|
+
let total = 0;
|
|
7626
|
+
let up = 0;
|
|
7627
|
+
let down = 0;
|
|
7628
|
+
const from = Math.max(0, Math.floor(sl / pitch));
|
|
7629
|
+
const to = Math.min(n - 1, Math.max(from, Math.floor((vr - 1) / pitch)));
|
|
7630
|
+
for (let i = from; i <= to; i++) {
|
|
7631
|
+
const col = i * pitch;
|
|
7632
|
+
if (col >= vr || col + BAR_W <= sl) continue;
|
|
7633
|
+
const req = requests[i];
|
|
7634
|
+
if (delta) {
|
|
7635
|
+
let bu = 0;
|
|
7636
|
+
let bd = 0;
|
|
7637
|
+
for (const c of CATS) {
|
|
7638
|
+
const d = req[c.key] || 0;
|
|
7639
|
+
if (d > 0) bu += d;
|
|
7640
|
+
else bd -= d;
|
|
7641
|
+
}
|
|
7642
|
+
if (bu > up) up = bu;
|
|
7643
|
+
if (bd > down) down = bd;
|
|
7644
|
+
} else if (req.total > total) total = req.total;
|
|
7645
|
+
}
|
|
7646
|
+
setVisMax((prev) => prev !== null && prev.total === total && prev.up === up && prev.down === down ? prev : {
|
|
7647
|
+
total,
|
|
7648
|
+
up,
|
|
7649
|
+
down
|
|
7650
|
+
});
|
|
7651
|
+
};
|
|
7579
7652
|
let maxTotal = 1;
|
|
7580
7653
|
let maxUp = 0;
|
|
7581
7654
|
let maxDown = 0;
|
|
@@ -7591,6 +7664,14 @@ window.__ModuleLoader__.load({
|
|
|
7591
7664
|
if (down > maxDown) maxDown = down;
|
|
7592
7665
|
}
|
|
7593
7666
|
else for (const req of requests) if (req.total > maxTotal) maxTotal = req.total;
|
|
7667
|
+
if (adaptive && visMax !== null) {
|
|
7668
|
+
if (delta) {
|
|
7669
|
+
if (visMax.up + visMax.down > 0) {
|
|
7670
|
+
maxUp = visMax.up;
|
|
7671
|
+
maxDown = visMax.down;
|
|
7672
|
+
}
|
|
7673
|
+
} else maxTotal = Math.max(1, visMax.total);
|
|
7674
|
+
}
|
|
7594
7675
|
const span = Math.max(1, maxUp + maxDown);
|
|
7595
7676
|
const deltaScale = CHART_H / span;
|
|
7596
7677
|
const upPx = Math.round(maxUp * deltaScale);
|
|
@@ -7710,11 +7791,38 @@ window.__ModuleLoader__.load({
|
|
|
7710
7791
|
prevScrollWidthRef.current = el.scrollWidth;
|
|
7711
7792
|
updateTurnLabels(el);
|
|
7712
7793
|
syncTip(el);
|
|
7794
|
+
measureVisible(el);
|
|
7713
7795
|
}, [
|
|
7714
7796
|
props.granularity,
|
|
7715
7797
|
props.focusTurn,
|
|
7716
|
-
requests
|
|
7798
|
+
requests,
|
|
7799
|
+
adaptive
|
|
7717
7800
|
]);
|
|
7801
|
+
const measureRef = (0, react.useRef)(measureVisible);
|
|
7802
|
+
(0, react.useLayoutEffect)(() => {
|
|
7803
|
+
measureRef.current = measureVisible;
|
|
7804
|
+
});
|
|
7805
|
+
(0, react.useLayoutEffect)(() => {
|
|
7806
|
+
const el = scrollRef.current;
|
|
7807
|
+
/* v8 ignore next 1 -- the scroll div renders unconditionally and React
|
|
7808
|
+
attaches refs before layout effects run; el is never null here. */
|
|
7809
|
+
if (el === null) return;
|
|
7810
|
+
if (typeof ResizeObserver !== "function") return;
|
|
7811
|
+
const observer = new ResizeObserver(() => {
|
|
7812
|
+
measureRef.current(el);
|
|
7813
|
+
});
|
|
7814
|
+
observer.observe(el);
|
|
7815
|
+
return () => {
|
|
7816
|
+
observer.disconnect();
|
|
7817
|
+
};
|
|
7818
|
+
}, []);
|
|
7819
|
+
(0, react.useLayoutEffect)(() => {
|
|
7820
|
+
const el = scrollRef.current;
|
|
7821
|
+
/* v8 ignore next 1 -- the scroll div renders unconditionally and React
|
|
7822
|
+
attaches refs before layout effects run; el is never null here. */
|
|
7823
|
+
if (el === null) return;
|
|
7824
|
+
return containHorizontalOverscroll(el);
|
|
7825
|
+
}, []);
|
|
7718
7826
|
const tipRowsOf = (req) => {
|
|
7719
7827
|
const n = req.stepCount ?? 1;
|
|
7720
7828
|
const head = props.granularity === "turn" ? n > 1 ? t("tip.turn", {
|
|
@@ -7819,6 +7927,7 @@ window.__ModuleLoader__.load({
|
|
|
7819
7927
|
onScroll: (e) => {
|
|
7820
7928
|
updateTurnLabels(e.currentTarget);
|
|
7821
7929
|
syncTip(e.currentTarget);
|
|
7930
|
+
measureVisible(e.currentTarget);
|
|
7822
7931
|
},
|
|
7823
7932
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7824
7933
|
className: "lc-chart",
|
|
@@ -7969,6 +8078,7 @@ window.__ModuleLoader__.load({
|
|
|
7969
8078
|
const [hoverTurn, setHoverTurn] = (0, react.useState)(null);
|
|
7970
8079
|
const [granularity, setGranularity] = (0, react.useState)(() => settings.defaultGranularity());
|
|
7971
8080
|
const [trendMode, setTrendMode] = (0, react.useState)(() => settings.defaultTrendMode());
|
|
8081
|
+
const [adaptive, setAdaptive] = (0, react.useState)(false);
|
|
7972
8082
|
const [focusTurn, setFocusTurn] = (0, react.useState)(null);
|
|
7973
8083
|
const [jumpSeq, setJumpSeq] = (0, react.useState)(null);
|
|
7974
8084
|
const [hoverCat, setHoverCat] = (0, react.useState)(null);
|
|
@@ -8192,9 +8302,22 @@ window.__ModuleLoader__.load({
|
|
|
8192
8302
|
children: t("trend.title")
|
|
8193
8303
|
}),
|
|
8194
8304
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
8195
|
-
className: "lc-
|
|
8196
|
-
|
|
8305
|
+
className: "lc-gran lc-trend-adaptive",
|
|
8306
|
+
role: "group",
|
|
8307
|
+
title: t("trend.adaptiveHint"),
|
|
8308
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
8309
|
+
type: "button",
|
|
8310
|
+
className: "lc-gran-btn" + (adaptive ? " lc-gran-on" : ""),
|
|
8311
|
+
onClick: () => {
|
|
8312
|
+
setAdaptive((on) => !on);
|
|
8313
|
+
},
|
|
8314
|
+
children: t("trend.adaptive")
|
|
8315
|
+
})
|
|
8197
8316
|
}),
|
|
8317
|
+
focusCat !== null ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
8318
|
+
className: "lc-card-sub",
|
|
8319
|
+
children: t("trend.focus", { cat: kit.catLabel(focusCat) })
|
|
8320
|
+
}) : null,
|
|
8198
8321
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
8199
8322
|
className: "lc-trend-ctl",
|
|
8200
8323
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
@@ -8248,6 +8371,7 @@ window.__ModuleLoader__.load({
|
|
|
8248
8371
|
focusTurn,
|
|
8249
8372
|
hoverCat: trendHoverCat,
|
|
8250
8373
|
focusCat,
|
|
8374
|
+
adaptive,
|
|
8251
8375
|
onSelect: setSelectedSeq,
|
|
8252
8376
|
onHover: setHoveredSeq,
|
|
8253
8377
|
onHoverTurn: setHoverTurn,
|
|
@@ -8436,124 +8560,6 @@ window.__ModuleLoader__.load({
|
|
|
8436
8560
|
};
|
|
8437
8561
|
}
|
|
8438
8562
|
//#endregion
|
|
8439
|
-
//#region src/client/components/statsJump.tsx
|
|
8440
|
-
/**
|
|
8441
|
-
* The chat page's stats line — the harness's own StatsLine entry on the
|
|
8442
|
-
* `conversation.composer.dock` seat — becomes a jump affordance: hovering
|
|
8443
|
-
* underlines it, a click (or Enter/Space) opens the Context tab. The plugin
|
|
8444
|
-
* wires this from a sibling dock entry that renders no UI of its own: an
|
|
8445
|
-
* invisible anchor mounts inside the slot's `[data-slot]` wrapper and spots
|
|
8446
|
-
* the stats row beside it, and a MutationObserver re-spots it on dock churn
|
|
8447
|
-
* (the row mounts only once the first stats exist, tooltip bubbles come and
|
|
8448
|
-
* go beside it, and switching conversations remounts the pair together).
|
|
8449
|
-
*
|
|
8450
|
-
* EVERY step degrades silently: a host without the dock seat never mounts
|
|
8451
|
-
* the entry; a dock without exactly one spotless candidate row (another
|
|
8452
|
-
* plugin's entry, a crash face, an unexpected layout) decorates nothing; a
|
|
8453
|
-
* row that throws mid-wiring stays unwired; a drag-selection click is
|
|
8454
|
-
* ignored. The affordance is simply absent — nothing here can take the chat
|
|
8455
|
-
* page down.
|
|
8456
|
-
*/
|
|
8457
|
-
/** The plugin's invisible dock anchor, and the class it brands the stats row with. */
|
|
8458
|
-
const ANCHOR_CLASS = "lc-stats-jump";
|
|
8459
|
-
const ROW_CLASS = "lc-stats-jump-row";
|
|
8460
|
-
/**
|
|
8461
|
-
* The stats row beside `anchor`: the single element child that is neither
|
|
8462
|
-
* the anchor nor a tooltip bubble. Children are untrusted input — one that
|
|
8463
|
-
* throws on attribute access is skipped whole, and two live candidates at
|
|
8464
|
-
* once (another plugin's dock entry, a crash face) answer null so nothing
|
|
8465
|
-
* is ever decorated on a guess.
|
|
8466
|
-
*/
|
|
8467
|
-
function statsRowOf(anchor) {
|
|
8468
|
-
const parent = anchor.parentElement;
|
|
8469
|
-
if (parent === null) return null;
|
|
8470
|
-
let row = null;
|
|
8471
|
-
for (const child of parent.children) {
|
|
8472
|
-
try {
|
|
8473
|
-
if (child === anchor || child.getAttribute("role") === "tooltip") continue;
|
|
8474
|
-
} catch {
|
|
8475
|
-
continue;
|
|
8476
|
-
}
|
|
8477
|
-
if (row !== null) return null;
|
|
8478
|
-
row = child;
|
|
8479
|
-
}
|
|
8480
|
-
return row;
|
|
8481
|
-
}
|
|
8482
|
-
/**
|
|
8483
|
-
* Wire the dock beside `anchor`: decorate today's stats row and re-spot it
|
|
8484
|
-
* on dock churn. Returns the teardown that disconnects the observer and
|
|
8485
|
-
* strips every mark the wiring left on the row.
|
|
8486
|
-
*/
|
|
8487
|
-
function wireDock(anchor, label, activate) {
|
|
8488
|
-
if (anchor === null) return () => {};
|
|
8489
|
-
let wired = null;
|
|
8490
|
-
const unwire = () => {
|
|
8491
|
-
wired?.off();
|
|
8492
|
-
wired = null;
|
|
8493
|
-
};
|
|
8494
|
-
const scan = () => {
|
|
8495
|
-
try {
|
|
8496
|
-
const row = statsRowOf(anchor);
|
|
8497
|
-
if (wired?.row === row) return;
|
|
8498
|
-
unwire();
|
|
8499
|
-
if (row === null || !(row instanceof HTMLElement)) return;
|
|
8500
|
-
row.classList.add(ROW_CLASS);
|
|
8501
|
-
row.setAttribute("role", "button");
|
|
8502
|
-
row.setAttribute("tabindex", "0");
|
|
8503
|
-
row.setAttribute("aria-label", label);
|
|
8504
|
-
const onKey = (e) => {
|
|
8505
|
-
if (e.key !== "Enter" && e.key !== " ") return;
|
|
8506
|
-
e.preventDefault();
|
|
8507
|
-
activate();
|
|
8508
|
-
};
|
|
8509
|
-
const onClick = () => {
|
|
8510
|
-
const selection = anchor.ownerDocument.getSelection();
|
|
8511
|
-
if (selection !== null && !selection.isCollapsed) return;
|
|
8512
|
-
activate();
|
|
8513
|
-
};
|
|
8514
|
-
row.addEventListener("click", onClick);
|
|
8515
|
-
row.addEventListener("keydown", onKey);
|
|
8516
|
-
wired = {
|
|
8517
|
-
row,
|
|
8518
|
-
off() {
|
|
8519
|
-
row.removeEventListener("click", onClick);
|
|
8520
|
-
row.removeEventListener("keydown", onKey);
|
|
8521
|
-
row.classList.remove(ROW_CLASS);
|
|
8522
|
-
row.removeAttribute("role");
|
|
8523
|
-
row.removeAttribute("tabindex");
|
|
8524
|
-
row.removeAttribute("aria-label");
|
|
8525
|
-
}
|
|
8526
|
-
};
|
|
8527
|
-
} catch {}
|
|
8528
|
-
};
|
|
8529
|
-
scan();
|
|
8530
|
-
const parent = anchor.parentElement;
|
|
8531
|
-
if (parent === null) return unwire;
|
|
8532
|
-
const observer = new MutationObserver(scan);
|
|
8533
|
-
observer.observe(parent, { childList: true });
|
|
8534
|
-
return () => {
|
|
8535
|
-
observer.disconnect();
|
|
8536
|
-
unwire();
|
|
8537
|
-
};
|
|
8538
|
-
}
|
|
8539
|
-
/** The dock entry component: the invisible anchor plus the wiring around it. */
|
|
8540
|
-
function makeStatsJump(kit) {
|
|
8541
|
-
const { t } = kit;
|
|
8542
|
-
return function StatsJump() {
|
|
8543
|
-
const anchorRef = (0, react.useRef)(null);
|
|
8544
|
-
const label = t("jump.statsLine");
|
|
8545
|
-
(0, react.useEffect)(() => wireDock(anchorRef.current, label, () => {
|
|
8546
|
-
activateContextTab(t("tab"));
|
|
8547
|
-
}), [label]);
|
|
8548
|
-
return (0, react.createElement)("span", {
|
|
8549
|
-
ref: anchorRef,
|
|
8550
|
-
className: ANCHOR_CLASS,
|
|
8551
|
-
hidden: true,
|
|
8552
|
-
"aria-hidden": "true"
|
|
8553
|
-
});
|
|
8554
|
-
};
|
|
8555
|
-
}
|
|
8556
|
-
//#endregion
|
|
8557
8563
|
//#region src/client/viewkit.ts
|
|
8558
8564
|
function makeViewKit(t) {
|
|
8559
8565
|
const { eventLabel, eventAt } = makeEventText(t);
|
|
@@ -8570,7 +8576,7 @@ window.__ModuleLoader__.load({
|
|
|
8570
8576
|
}
|
|
8571
8577
|
//#endregion
|
|
8572
8578
|
//#region \0dsh-global-css:/home/runner/work/dsh-context/dsh-context/src/client/styles/base.css.mjs
|
|
8573
|
-
const css$13 = ".lc-root{box-sizing:border-box;height:100%;color:var(--dsw-alias-label-primary);padding:16px 20px 32px;font-size:13px;overflow-y:auto}.lc-card{background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l2);border-radius:10px;margin-bottom:14px;padding:14px 16px}.lc-root .lc-card{margin-bottom:7px;padding:7px 8px;container:lc-card/inline-size}.lc-root .lc-cols{gap:7px;margin-bottom:7px}.lc-card-title{flex-wrap:wrap;align-items:baseline;gap:8px;margin-bottom:10px;font-weight:600;display:flex}.lc-card-title-text{white-space:nowrap;flex:none}.lc-gran,.lc-kinds{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);border-radius:6px;gap:2px;margin-left:auto;padding:1px;display:flex}.lc-trend-ctl{align-items:center;gap:6px;margin-left:auto;display:flex}.lc-trend-ctl .lc-gran{margin-left:0}.lc-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-tip{z-index:6;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);width:max-content;color:var(--dsw-alias-label-primary);box-shadow:var(--dsw-shadow-lv3,0 2px 8px #0000002e);pointer-events:none;opacity:0;transition:opacity var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);border-radius:6px;padding:6px 10px;font-size:12px;position:absolute}.lc-events,.lc-fa-list{flex-direction:column;gap:2px;height:320px;display:flex;overflow-y:auto}.lc-cols{flex-wrap:wrap;gap:14px;margin-bottom:14px;display:flex}.lc-col{flex:1;min-width:min(280px,100%)}.lc-cols>.lc-card,.lc-col>.lc-card:last-child{margin-bottom:0}.lc-col-browser{flex-direction:column;display:flex}.lc-col-browser>.lc-card{flex:1}.lc-head{container:lc-head-row/inline-size}.lc-head>.lc-card{flex:1 1 0;min-width:0}@container lc-head-row (width<=1045px){.lc-head>.lc-card{flex-basis:40%}}@container lc-head-row (width<=480px){.lc-head>.lc-card{flex-basis:100%}}.lc-head>.lc-card:first-child{flex-direction:column;display:flex}.lc-head>.lc-card:first-child .lc-stats{flex:1;align-content:stretch}.lc-head>.lc-card:first-child .lc-stat{justify-content:center}.lc-empty{color:var(--dsw-alias-label-secondary);text-align:center;padding:18px 0}.lc-error{flex-direction:column;align-items:center;gap:8px;padding:40px 16px;display:flex}.lc-error-msg{font-family:var(--ds-font-family-code,ui-monospace, SFMono-Regular, Menlo, monospace);color:var(--dsw-alias-state-error-primary);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);overflow-wrap:anywhere;border-radius:6px;max-width:100%;padding:4px 8px;font-size:12px}.lc-error-retry{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);font:inherit;cursor:pointer;transition:border-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);border-radius:6px;padding:4px 14px;font-size:12px}.lc-error-retry:hover{border-color:var(--dsw-alias-label-primary)}.lc-foot{color:var(--dsw-alias-label-secondary);margin-top:4px;font-size:12px}[data-conversation-scroll]:has(.lc-root)>[data-composer-seat]:not(:has([data-approval-key],[data-question-key],[data-plan-review-key])),[data-conversation-scroll]:has(.lc-root,.lc-modal-backdrop)~[data-width-handle]{display:none}";
|
|
8579
|
+
const css$13 = ".lc-root{box-sizing:border-box;height:100%;color:var(--dsw-alias-label-primary);padding:16px 20px 32px;font-size:13px;overflow-y:auto}.lc-card{background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l2);border-radius:10px;margin-bottom:14px;padding:14px 16px}.lc-root .lc-card{margin-bottom:7px;padding:7px 8px;container:lc-card/inline-size}.lc-root .lc-cols{gap:7px;margin-bottom:7px}.lc-card-title{flex-wrap:wrap;align-items:baseline;gap:8px;margin-bottom:10px;font-weight:600;display:flex}.lc-card-title-text{white-space:nowrap;flex:none}.lc-gran,.lc-kinds{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);border-radius:6px;gap:2px;margin-left:auto;padding:1px;display:flex}.lc-trend-ctl{align-items:center;gap:6px;margin-left:auto;display:flex}.lc-trend-ctl .lc-gran{margin-left:0}.lc-trend-adaptive{flex:none;margin-left:0}.lc-gran-btn{color:var(--dsw-alias-label-secondary);cursor:pointer;transition:color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);background:0 0;border:0;border-radius:5px;padding:3px 8px;font-family:inherit;font-size:11px;line-height:1}.lc-gran-btn:hover{color:var(--dsw-alias-label-primary)}.lc-gran-on,.lc-gran-on:hover{background:var(--dsw-alias-button-primary-fill);color:var(--dsw-alias-label-primary-foreground)}.lc-tip{z-index:6;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);width:max-content;color:var(--dsw-alias-label-primary);box-shadow:var(--dsw-shadow-lv3,0 2px 8px #0000002e);pointer-events:none;opacity:0;transition:opacity var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);border-radius:6px;padding:6px 10px;font-size:12px;position:absolute}.lc-events,.lc-fa-list{flex-direction:column;gap:2px;height:320px;display:flex;overflow-y:auto}.lc-cols{flex-wrap:wrap;gap:14px;margin-bottom:14px;display:flex}.lc-col{flex:1;min-width:min(280px,100%)}.lc-cols>.lc-card,.lc-col>.lc-card:last-child{margin-bottom:0}.lc-col-browser{flex-direction:column;display:flex}.lc-col-browser>.lc-card{flex:1}.lc-head{container:lc-head-row/inline-size}.lc-head>.lc-card{flex:1 1 0;min-width:0}@container lc-head-row (width<=1045px){.lc-head>.lc-card{flex-basis:40%}}@container lc-head-row (width<=480px){.lc-head>.lc-card{flex-basis:100%}}.lc-head>.lc-card:first-child{flex-direction:column;display:flex}.lc-head>.lc-card:first-child .lc-stats{flex:1;align-content:stretch}.lc-head>.lc-card:first-child .lc-stat{justify-content:center}.lc-empty{color:var(--dsw-alias-label-secondary);text-align:center;padding:18px 0}.lc-error{flex-direction:column;align-items:center;gap:8px;padding:40px 16px;display:flex}.lc-error-msg{font-family:var(--ds-font-family-code,ui-monospace, SFMono-Regular, Menlo, monospace);color:var(--dsw-alias-state-error-primary);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);overflow-wrap:anywhere;border-radius:6px;max-width:100%;padding:4px 8px;font-size:12px}.lc-error-retry{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);font:inherit;cursor:pointer;transition:border-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);border-radius:6px;padding:4px 14px;font-size:12px}.lc-error-retry:hover{border-color:var(--dsw-alias-label-primary)}.lc-foot{color:var(--dsw-alias-label-secondary);margin-top:4px;font-size:12px}[data-conversation-scroll]:has(.lc-root)>[data-composer-seat]:not(:has([data-approval-key],[data-question-key],[data-plan-review-key])),[data-conversation-scroll]:has(.lc-root,.lc-modal-backdrop)~[data-width-handle]{display:none}";
|
|
8574
8580
|
const tagId$13 = "dsh-context/base.css";
|
|
8575
8581
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$13) + "]") === null) {
|
|
8576
8582
|
const tag = document.createElement("style");
|
|
@@ -8592,7 +8598,7 @@ window.__ModuleLoader__.load({
|
|
|
8592
8598
|
}
|
|
8593
8599
|
//#endregion
|
|
8594
8600
|
//#region \0dsh-global-css:/home/runner/work/dsh-context/dsh-context/src/client/styles/jump.css.mjs
|
|
8595
|
-
const css$11 = ".lc-jump{width:calc(28px + var(--dsh-content-font-delta,0px));height:calc(28px + var(--dsh-content-font-delta,0px));color:var(--dsw-alias-label-tertiary);cursor:pointer;transition:background-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out), color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);background:0 0;border:0;border-radius:28px;justify-content:center;align-items:center;padding:6px;display:inline-flex}.lc-jump svg{width:calc(16px + var(--dsh-content-font-delta,0px));height:calc(16px + var(--dsh-content-font-delta,0px))}.lc-jump:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary)}
|
|
8601
|
+
const css$11 = ".lc-jump{width:calc(28px + var(--dsh-content-font-delta,0px));height:calc(28px + var(--dsh-content-font-delta,0px));color:var(--dsw-alias-label-tertiary);cursor:pointer;transition:background-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out), color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);background:0 0;border:0;border-radius:28px;justify-content:center;align-items:center;padding:6px;display:inline-flex}.lc-jump svg{width:calc(16px + var(--dsh-content-font-delta,0px));height:calc(16px + var(--dsh-content-font-delta,0px))}.lc-jump:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary)}";
|
|
8596
8602
|
const tagId$11 = "dsh-context/jump.css";
|
|
8597
8603
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$11) + "]") === null) {
|
|
8598
8604
|
const tag = document.createElement("style");
|
|
@@ -8625,7 +8631,7 @@ window.__ModuleLoader__.load({
|
|
|
8625
8631
|
}
|
|
8626
8632
|
//#endregion
|
|
8627
8633
|
//#region \0dsh-global-css:/home/runner/work/dsh-context/dsh-context/src/client/styles/trendChart.css.mjs
|
|
8628
|
-
const css$8 = ".lc-chartrow{align-items:stretch;gap:6px;display:flex}.lc-axis{box-sizing:border-box;width:40px;height:150px;color:var(--dsw-alias-label-secondary);padding-top:18px;font-size:11px;position:relative}.lc-axis span{line-height:1;position:absolute;right:0}.lc-axis-top{top:13px}.lc-axis-q3{top:41px}.lc-axis-mid{top:69px}.lc-axis-q1{top:97px}.lc-axis-bot{top:125px}.lc-chart-wrap{flex:1;min-width:0;position:relative}.lc-chart-scroll{scrollbar-gutter:stable;padding-bottom:var(--dsh-scrollbar-width,8px);overflow:auto hidden}.lc-chart{box-sizing:border-box;align-items:flex-end;gap:2px;width:max-content;min-width:100%;height:130px;padding-top:18px;display:flex;position:relative}.lc-grid{border-top:1px dashed var(--dsw-alias-border-l2);pointer-events:none;position:absolute;left:0;right:0}.lc-grid-top{top:18px}.lc-grid-q3{top:46px}.lc-grid-mid{top:74px}.lc-grid-q1{top:102px}.lc-grid-zero{border-top-style:solid;border-top-color:#80808080;top:130px}.lc-bar{cursor:pointer;outline-offset:1px;width:14px;height:100%;transition:opacity var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out), background-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out), outline-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);border-radius:2px;outline:1px dashed #0000;flex:none;align-items:flex-end;display:flex;position:relative}.lc-chart-dim .lc-bar{opacity:.35}.lc-chart-dim .lc-bar-in-turn{opacity:1}.lc-chart-dim .lc-turn{opacity:.35}.lc-chart-dim .lc-turn-on{opacity:1}.lc-chart-tip{z-index:5;box-sizing:border-box;overflow-wrap:break-word;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);max-width:100%;color:var(--dsw-alias-label-primary);pointer-events:none;border-radius:6px;flex-direction:column;gap:2px;padding:3px 8px;font-size:12px;display:flex;position:absolute;bottom:calc(100% + 4px);left:0;box-shadow:0 2px 8px #0000002e}.lc-bar:hover{background:var(--dsw-alias-bg-layer-2)}.lc-bar-hovered{outline-color:var(--dsw-alias-brand-primary)}.lc-bar-selected{outline:2px solid var(--dsw-alias-label-primary);outline-offset:1px}.lc-bar-in-turn{background:#80808024}.lc-bar-stack{flex-direction:column-reverse;width:100%;display:flex}.lc-bar-stack>div{width:100%}.lc-bar-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-cat-seg{transition:filter var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out), opacity var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out)}.lc-chart[data-catdim] .lc-cat-seg{opacity:.35}.lc-chart[data-catdim=system] .lc-cat-seg[data-cat=system],.lc-chart[data-catdim=tools] .lc-cat-seg[data-cat=tools],.lc-chart[data-catdim=user] .lc-cat-seg[data-cat=user],.lc-chart[data-catdim=inject] .lc-cat-seg[data-cat=inject],.lc-chart[data-catdim=assistant] .lc-cat-seg[data-cat=assistant],.lc-chart[data-catdim=tool] .lc-cat-seg[data-cat=tool]{opacity:1;filter:brightness(1.18)}.lc-bar-marker{color:var(--dsw-alias-state-warn-primary);font-size:11px;position:absolute;top:-16px;left:50%;transform:translate(-50%)}.lc-turns{gap:2px;width:max-content;min-width:100%;margin-top:4px;display:flex;overflow:hidden}.lc-turn{box-sizing:border-box;text-align:center;color:var(--dsw-alias-label-secondary);white-space:nowrap;cursor:pointer;height:14px;transition:filter var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out), opacity var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);border-radius:3px;flex:none;font-size:10px;font-weight:600;line-height:14px}.lc-turn-on{filter:brightness(1.35);color:var(--dsw-alias-label-primary)}.lc-turn-label{display:inline-block}";
|
|
8634
|
+
const css$8 = ".lc-chartrow{align-items:stretch;gap:6px;display:flex}.lc-axis{box-sizing:border-box;width:40px;height:150px;color:var(--dsw-alias-label-secondary);padding-top:18px;font-size:11px;position:relative}.lc-axis span{line-height:1;position:absolute;right:0}.lc-axis-top{top:13px}.lc-axis-q3{top:41px}.lc-axis-mid{top:69px}.lc-axis-q1{top:97px}.lc-axis-bot{top:125px}.lc-chart-wrap{flex:1;min-width:0;position:relative}.lc-chart-scroll{overscroll-behavior-x:contain;scrollbar-gutter:stable;padding-bottom:var(--dsh-scrollbar-width,8px);overflow:auto hidden}.lc-chart{box-sizing:border-box;align-items:flex-end;gap:2px;width:max-content;min-width:100%;height:130px;padding-top:18px;display:flex;position:relative}.lc-grid{border-top:1px dashed var(--dsw-alias-border-l2);pointer-events:none;position:absolute;left:0;right:0}.lc-grid-top{top:18px}.lc-grid-q3{top:46px}.lc-grid-mid{top:74px}.lc-grid-q1{top:102px}.lc-grid-zero{border-top-style:solid;border-top-color:#80808080;top:130px}.lc-bar{cursor:pointer;outline-offset:1px;width:14px;height:100%;transition:opacity var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out), background-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out), outline-color var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);border-radius:2px;outline:1px dashed #0000;flex:none;align-items:flex-end;display:flex;position:relative}.lc-chart-dim .lc-bar{opacity:.35}.lc-chart-dim .lc-bar-in-turn{opacity:1}.lc-chart-dim .lc-turn{opacity:.35}.lc-chart-dim .lc-turn-on{opacity:1}.lc-chart-tip{z-index:5;box-sizing:border-box;overflow-wrap:break-word;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);max-width:100%;color:var(--dsw-alias-label-primary);pointer-events:none;border-radius:6px;flex-direction:column;gap:2px;padding:3px 8px;font-size:12px;display:flex;position:absolute;bottom:calc(100% + 4px);left:0;box-shadow:0 2px 8px #0000002e}.lc-bar:hover{background:var(--dsw-alias-bg-layer-2)}.lc-bar-hovered{outline-color:var(--dsw-alias-brand-primary)}.lc-bar-selected{outline:2px solid var(--dsw-alias-label-primary);outline-offset:1px}.lc-bar-in-turn{background:#80808024}.lc-bar-stack{flex-direction:column-reverse;width:100%;display:flex}.lc-bar-stack>div{width:100%}.lc-bar-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-cat-seg{transition:filter var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out), opacity var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out)}.lc-chart[data-catdim] .lc-cat-seg{opacity:.35}.lc-chart[data-catdim=system] .lc-cat-seg[data-cat=system],.lc-chart[data-catdim=tools] .lc-cat-seg[data-cat=tools],.lc-chart[data-catdim=user] .lc-cat-seg[data-cat=user],.lc-chart[data-catdim=inject] .lc-cat-seg[data-cat=inject],.lc-chart[data-catdim=assistant] .lc-cat-seg[data-cat=assistant],.lc-chart[data-catdim=tool] .lc-cat-seg[data-cat=tool]{opacity:1;filter:brightness(1.18)}.lc-bar-marker{color:var(--dsw-alias-state-warn-primary);font-size:11px;position:absolute;top:-16px;left:50%;transform:translate(-50%)}.lc-turns{gap:2px;width:max-content;min-width:100%;margin-top:4px;display:flex;overflow:hidden}.lc-turn{box-sizing:border-box;text-align:center;color:var(--dsw-alias-label-secondary);white-space:nowrap;cursor:pointer;height:14px;transition:filter var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out), opacity var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out);border-radius:3px;flex:none;font-size:10px;font-weight:600;line-height:14px}.lc-turn-on{filter:brightness(1.35);color:var(--dsw-alias-label-primary)}.lc-turn-label{display:inline-block}";
|
|
8629
8635
|
const tagId$8 = "dsh-context/trendChart.css";
|
|
8630
8636
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$8) + "]") === null) {
|
|
8631
8637
|
const tag = document.createElement("style");
|
|
@@ -8713,7 +8719,7 @@ window.__ModuleLoader__.load({
|
|
|
8713
8719
|
}
|
|
8714
8720
|
//#endregion
|
|
8715
8721
|
//#region \0dsh-global-css:/home/runner/work/dsh-context/dsh-context/src/client/styles/agentGraph.css.mjs
|
|
8716
|
-
const css = ".lc-agents-chips{flex-wrap:wrap;gap:6px;margin-bottom:10px;display:flex}.lc-agents-chip{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;border-radius:999px;padding:2px 8px;font-size:11px}.lc-agents-chip-on{color:var(--dsw-alias-state-success-primary);border-color:color-mix(in srgb, var(--dsw-alias-state-success-primary) 40%, transparent)}.lc-agents-stage{margin:0 -4px;padding:0 4px;overflow-x:auto}.lc-agents-svg{max-width:none;margin:0 auto;display:block}.lc-agents-link{stroke-width:1.5px;stroke-opacity:.45}.lc-agents-link-live{stroke-opacity:.85}.lc-agents-flow{stroke-width:2px;stroke-linecap:round;stroke-dasharray:2 7;animation:.9s linear infinite lc-agent-flow}@keyframes lc-agent-flow{to{stroke-dashoffset:-9px}}.lc-agent-node{outline:none}.lc-agent-clickable{cursor:pointer}.lc-agent-halo{fill:#0000;transition:fill var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out)}.lc-agent-hover .lc-agent-halo,.lc-agent-node:focus-visible .lc-agent-halo{fill:var(--dsw-alias-interactive-bg-hover,var(--dsw-alias-bg-layer-2))}.lc-agent-self .lc-agent-halo{fill:var(--dsw-alias-bg-layer-2)}.lc-agent-running .lc-agent-halo{fill:color-mix(in srgb, var(--dsw-alias-state-success-primary) 12%, transparent);animation:1.8s ease-in-out infinite lc-agent-glow}.lc-agent-done .lc-agent-halo{fill:color-mix(in srgb, var(--dsw-alias-state-success-primary) 7%, transparent)}@keyframes lc-agent-glow{0%,to{opacity:1}50%{opacity:.4}}.lc-agent-track{fill:var(--dsw-alias-bg-layer-1);stroke:var(--dsw-alias-border-l1);stroke-width:1.5px}.lc-agent-seg{fill:none;stroke-width:9px;transition:stroke-dasharray .3s,stroke-dashoffset .3s}.lc-agent-free{stroke:color-mix(in srgb, var(--dsw-alias-label-secondary) 18%, transparent)}.lc-agent-pct{fill:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;pointer-events:none;font-size:11px;font-weight:600}.lc-agent-caption{text-align:center;pointer-events:none;width:100%;line-height:1.25}.lc-agent-label{color:var(--dsw-alias-label-primary);overflow-wrap:break-word;-webkit-line-clamp:3;-webkit-box-orient:vertical;font-size:11px;display:-webkit-box;overflow:hidden}.lc-agent-tokens{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;font-size:10px}.lc-agents-solo{padding:4px 0 10px}.lc-agents-inspector{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);border-radius:8px;flex-wrap:wrap;align-items:baseline;gap:4px 8px;min-width:0;margin-top:10px;padding:7px 10px;font-size:12px;display:flex}.lc-agents-inspector-name{color:var(--dsw-alias-label-primary);overflow-wrap:anywhere}.lc-agents-badge{background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-secondary);border-radius:999px;flex:none;padding:1px 6px;font-size:10px}.lc-agent-self-badge{vertical-align:1px;margin-left:5px}.lc-agents-badge-on{color:var(--dsw-alias-state-success-primary);border-color:color-mix(in srgb, var(--dsw-alias-state-success-primary) 40%, transparent)}.lc-agents-inspector-stats{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.lc-agents-inspector-open{color:var(--dsw-alias-brand-primary,#3b82f6);flex:none;margin-left:auto}.lc-agents-legend{color:var(--dsw-alias-label-secondary);flex-wrap:wrap;gap:4px 14px;margin-top:8px;font-size:11px;display:flex}.lc-agents-legend-item{align-items:center;gap:5px;display:inline-flex}.lc-agents-legend-item i{border-radius:2px;width:8px;height:8px}.lc-agents-legend-free{background:color-mix(in srgb, var(--dsw-alias-label-secondary) 18%, transparent)}.lc-agents-legend-edge{border-top:2px dashed var(--dsw-alias-label-secondary);border-radius:0!important;width:14px!important;height:0!important}";
|
|
8722
|
+
const css = ".lc-agents-chips{flex-wrap:wrap;gap:6px;margin-bottom:10px;display:flex}.lc-agents-chip{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;border-radius:999px;padding:2px 8px;font-size:11px}.lc-agents-chip-on{color:var(--dsw-alias-state-success-primary);border-color:color-mix(in srgb, var(--dsw-alias-state-success-primary) 40%, transparent)}.lc-agents-stage{overscroll-behavior-x:contain;margin:0 -4px;padding:0 4px;overflow-x:auto}.lc-agents-svg{max-width:none;margin:0 auto;display:block}.lc-agents-link{stroke-width:1.5px;stroke-opacity:.45}.lc-agents-link-live{stroke-opacity:.85}.lc-agents-flow{stroke-width:2px;stroke-linecap:round;stroke-dasharray:2 7;animation:.9s linear infinite lc-agent-flow}@keyframes lc-agent-flow{to{stroke-dashoffset:-9px}}.lc-agent-node{outline:none}.lc-agent-clickable{cursor:pointer}.lc-agent-halo{fill:#0000;transition:fill var(--ds-transition-duration,.2s) var(--ds-ease-in-out,ease-in-out)}.lc-agent-hover .lc-agent-halo,.lc-agent-node:focus-visible .lc-agent-halo{fill:var(--dsw-alias-interactive-bg-hover,var(--dsw-alias-bg-layer-2))}.lc-agent-self .lc-agent-halo{fill:var(--dsw-alias-bg-layer-2)}.lc-agent-running .lc-agent-halo{fill:color-mix(in srgb, var(--dsw-alias-state-success-primary) 12%, transparent);animation:1.8s ease-in-out infinite lc-agent-glow}.lc-agent-done .lc-agent-halo{fill:color-mix(in srgb, var(--dsw-alias-state-success-primary) 7%, transparent)}@keyframes lc-agent-glow{0%,to{opacity:1}50%{opacity:.4}}.lc-agent-track{fill:var(--dsw-alias-bg-layer-1);stroke:var(--dsw-alias-border-l1);stroke-width:1.5px}.lc-agent-seg{fill:none;stroke-width:9px;transition:stroke-dasharray .3s,stroke-dashoffset .3s}.lc-agent-free{stroke:color-mix(in srgb, var(--dsw-alias-label-secondary) 18%, transparent)}.lc-agent-pct{fill:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;pointer-events:none;font-size:11px;font-weight:600}.lc-agent-caption{text-align:center;pointer-events:none;width:100%;line-height:1.25}.lc-agent-label{color:var(--dsw-alias-label-primary);overflow-wrap:break-word;-webkit-line-clamp:3;-webkit-box-orient:vertical;font-size:11px;display:-webkit-box;overflow:hidden}.lc-agent-tokens{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;font-size:10px}.lc-agents-solo{padding:4px 0 10px}.lc-agents-inspector{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);border-radius:8px;flex-wrap:wrap;align-items:baseline;gap:4px 8px;min-width:0;margin-top:10px;padding:7px 10px;font-size:12px;display:flex}.lc-agents-inspector-name{color:var(--dsw-alias-label-primary);overflow-wrap:anywhere}.lc-agents-badge{background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-secondary);border-radius:999px;flex:none;padding:1px 6px;font-size:10px}.lc-agent-self-badge{vertical-align:1px;margin-left:5px}.lc-agents-badge-on{color:var(--dsw-alias-state-success-primary);border-color:color-mix(in srgb, var(--dsw-alias-state-success-primary) 40%, transparent)}.lc-agents-inspector-stats{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.lc-agents-inspector-open{color:var(--dsw-alias-brand-primary,#3b82f6);flex:none;margin-left:auto}.lc-agents-legend{color:var(--dsw-alias-label-secondary);flex-wrap:wrap;gap:4px 14px;margin-top:8px;font-size:11px;display:flex}.lc-agents-legend-item{align-items:center;gap:5px;display:inline-flex}.lc-agents-legend-item i{border-radius:2px;width:8px;height:8px}.lc-agents-legend-free{background:color-mix(in srgb, var(--dsw-alias-label-secondary) 18%, transparent)}.lc-agents-legend-edge{border-top:2px dashed var(--dsw-alias-label-secondary);border-radius:0!important;width:14px!important;height:0!important}";
|
|
8717
8723
|
const tagId = "dsh-context/agentGraph.css";
|
|
8718
8724
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
|
|
8719
8725
|
const tag = document.createElement("style");
|
|
@@ -8778,15 +8784,6 @@ window.__ModuleLoader__.load({
|
|
|
8778
8784
|
locale: NS
|
|
8779
8785
|
}, (props) => (0, react.createElement)(ContextJump, props));
|
|
8780
8786
|
});
|
|
8781
|
-
const StatsJump = makeStatsJump(kit);
|
|
8782
|
-
ctx.slots.inject("conversation.composer.dock", () => {
|
|
8783
|
-
return ctx.slots.register({
|
|
8784
|
-
name: "conversation.composer.dock",
|
|
8785
|
-
id: "stats-jump",
|
|
8786
|
-
order: 10,
|
|
8787
|
-
locale: NS
|
|
8788
|
-
}, (props) => (0, react.createElement)(StatsJump, props));
|
|
8789
|
-
});
|
|
8790
8787
|
registerContextCommand(ctx, kit);
|
|
8791
8788
|
const ContextModal = makeContextModal(ctx, kit);
|
|
8792
8789
|
ctx.slots.inject("conversation.input.overlay", () => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-context",
|
|
3
|
-
"version": "0.46.
|
|
3
|
+
"version": "0.46.1",
|
|
4
4
|
"description": "A DeepSeek Harness plugin for context insight and management, with context dashboard and context command, for understanding how the context is made of, and how it evolves.",
|
|
5
5
|
"author": "bowenliang123",
|
|
6
6
|
"repository": {
|