dsh-context 0.38.2 → 0.38.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/client.js +50 -47
- package/package.json +1 -1
package/lib/client.js
CHANGED
|
@@ -189,8 +189,8 @@ window.__ModuleLoader__.load({
|
|
|
189
189
|
"footer": "估算口径:与 dsh 内置 tokenMeter 相同的固定密度启发式(约 4 字符 ≈ 1 token);「实际」为供应商上报用量。",
|
|
190
190
|
"tip.step": "第 {t} 轮 · 第{s}步",
|
|
191
191
|
"tip.turn": "第 {t} 轮 · 共 {n} 步",
|
|
192
|
+
"tip.turn1": "第 {t} 轮 · 共 1 步",
|
|
192
193
|
"tip.total": "合计 ≈ {n}",
|
|
193
|
-
"tip.actual": "(实际 {n})",
|
|
194
194
|
"tip.delta": "Δ {n}",
|
|
195
195
|
"ev.compaction": "压缩上下文(摘要替换 {n} 条消息)",
|
|
196
196
|
"ev.prune": "剪枝工具输出",
|
|
@@ -457,8 +457,8 @@ window.__ModuleLoader__.load({
|
|
|
457
457
|
"footer": "Estimate: same fixed-density heuristic as dsh’s built-in tokenMeter (~4 chars ≈ 1 token); “actual” is provider-reported usage.",
|
|
458
458
|
"tip.step": "Turn {t} · Step {s}",
|
|
459
459
|
"tip.turn": "Turn {t} · {n} steps",
|
|
460
|
+
"tip.turn1": "Turn {t} · 1 step",
|
|
460
461
|
"tip.total": "Total ≈ {n}",
|
|
461
|
-
"tip.actual": " (actual {n})",
|
|
462
462
|
"tip.delta": "Δ {n}",
|
|
463
463
|
"ev.compaction": "Context compacted (summary replaced {n} messages)",
|
|
464
464
|
"ev.prune": "Tool output pruned",
|
|
@@ -2977,20 +2977,6 @@ window.__ModuleLoader__.load({
|
|
|
2977
2977
|
response
|
|
2978
2978
|
};
|
|
2979
2979
|
}
|
|
2980
|
-
/**
|
|
2981
|
-
* seq → one-line reply preview for the chart tooltip: the response node's
|
|
2982
|
-
* text, else its tool-call breadcrumb. Absent for usage-only replies and
|
|
2983
|
-
* steps outside retention.
|
|
2984
|
-
*/
|
|
2985
|
-
function replyTipsOf(nodes) {
|
|
2986
|
-
const m = /* @__PURE__ */ new Map();
|
|
2987
|
-
for (const n of nodes) {
|
|
2988
|
-
if (n.cat !== "assistant") continue;
|
|
2989
|
-
const s = n.text ?? (n.calls !== void 0 ? n.calls.join(" › ") : "");
|
|
2990
|
-
if (s !== "") m.set(n.seq, s);
|
|
2991
|
-
}
|
|
2992
|
-
return m;
|
|
2993
|
-
}
|
|
2994
2980
|
//#endregion
|
|
2995
2981
|
//#region src/client/fileActivity.ts
|
|
2996
2982
|
const KIND_BY_TOOL = {
|
|
@@ -4830,7 +4816,7 @@ window.__ModuleLoader__.load({
|
|
|
4830
4816
|
return function PluginInfo() {
|
|
4831
4817
|
const [latest, setLatest] = React.useState(null);
|
|
4832
4818
|
React.useEffect(() => {
|
|
4833
|
-
if ("0.38.
|
|
4819
|
+
if ("0.38.3".includes("-dev")) return;
|
|
4834
4820
|
let on = true;
|
|
4835
4821
|
fetchLatestVersion().then((v) => {
|
|
4836
4822
|
if (on && v) setLatest(v);
|
|
@@ -4839,8 +4825,8 @@ window.__ModuleLoader__.load({
|
|
|
4839
4825
|
on = false;
|
|
4840
4826
|
};
|
|
4841
4827
|
}, []);
|
|
4842
|
-
const update = latest !== null && isNewerVersion(latest, "0.38.
|
|
4843
|
-
const nameText = "dsh-context (v0.38.
|
|
4828
|
+
const update = latest !== null && isNewerVersion(latest, "0.38.3") ? latest : null;
|
|
4829
|
+
const nameText = "dsh-context (v0.38.3)";
|
|
4844
4830
|
const nameValue = [nameText];
|
|
4845
4831
|
if (update) nameValue.push(/* @__PURE__ */ React.createElement("span", {
|
|
4846
4832
|
key: "update",
|
|
@@ -5399,11 +5385,14 @@ window.__ModuleLoader__.load({
|
|
|
5399
5385
|
return requests.length > 0 ? requests[0] : null;
|
|
5400
5386
|
}
|
|
5401
5387
|
function makeTrendChart(kit) {
|
|
5402
|
-
const { t, fmt,
|
|
5388
|
+
const { t, fmt, eventLabel, eventAt } = kit;
|
|
5403
5389
|
const CHART_H = 112;
|
|
5390
|
+
const fmtSigned = (v) => (v > 0 ? "+" : "") + fmt(v);
|
|
5404
5391
|
const BAR_W = 14;
|
|
5405
5392
|
const BAR_GAP = 2;
|
|
5406
5393
|
const TURN_FILLS = ["rgba(128,128,128,0.12)", "rgba(128,128,128,0.26)"];
|
|
5394
|
+
const LABEL_OVERHANG = 48;
|
|
5395
|
+
const LABEL_GAP = 4;
|
|
5407
5396
|
const anchorOf = (req) => typeof req.prompt === "number" && req.prompt > 0 && req.total > 0 ? req.prompt / req.total : 1;
|
|
5408
5397
|
const barTotalOf = (req) => typeof req.prompt === "number" && req.prompt > 0 ? req.prompt : req.total;
|
|
5409
5398
|
/**
|
|
@@ -5513,6 +5502,8 @@ window.__ModuleLoader__.load({
|
|
|
5513
5502
|
const deltaScale = CHART_H / span;
|
|
5514
5503
|
const upPx = Math.round(maxUp * deltaScale);
|
|
5515
5504
|
const downPx = CHART_H - upPx;
|
|
5505
|
+
const q3Clear = Math.abs(28 - upPx) >= 11;
|
|
5506
|
+
const q1Clear = Math.abs(84 - upPx) >= 11;
|
|
5516
5507
|
const groups = [];
|
|
5517
5508
|
for (const req of requests) {
|
|
5518
5509
|
let grp = groups.length > 0 ? groups[groups.length - 1] : null;
|
|
@@ -5545,9 +5536,12 @@ window.__ModuleLoader__.load({
|
|
|
5545
5536
|
const lastSeqRef = React.useRef(0);
|
|
5546
5537
|
const prevScrollWidthRef = React.useRef(0);
|
|
5547
5538
|
/**
|
|
5548
|
-
* Keep each turn label centered within its block's VISIBLE slice
|
|
5549
|
-
*
|
|
5550
|
-
*
|
|
5539
|
+
* Keep each turn label centered within its block's VISIBLE slice, then thin colliding labels: a label wider
|
|
5540
|
+
* than its block overflows it, so consecutive narrow turns (14px bars, 2-digit "T12"s) would smear into each
|
|
5541
|
+
* other — walking left→right in content coordinates, a label whose box reaches the previous KEPT one drops to
|
|
5542
|
+
* visibility:hidden. Blocks that cannot reach the viewport even overhung by a label skip their reads/writes
|
|
5543
|
+
* entirely (their transform/visibility just reset); reads (offsetWidth) batch before the writes to avoid layout
|
|
5544
|
+
* thrash, and unchanged styles write nothing.
|
|
5551
5545
|
*/
|
|
5552
5546
|
const updateTurnLabels = (el) => {
|
|
5553
5547
|
const labels = el.querySelectorAll(".lc-turn-label");
|
|
@@ -5555,23 +5549,35 @@ window.__ModuleLoader__.load({
|
|
|
5555
5549
|
const sl = el.scrollLeft;
|
|
5556
5550
|
const vr = sl + el.clientWidth;
|
|
5557
5551
|
const writes = [];
|
|
5552
|
+
let chainR = -Infinity;
|
|
5558
5553
|
for (let i = 0; i < n; i++) {
|
|
5559
5554
|
const off = turnOffsets[i];
|
|
5560
5555
|
const w = turnWidths[i];
|
|
5561
|
-
const visL = Math.max(off, sl);
|
|
5562
|
-
const visR = Math.min(off + w, vr);
|
|
5563
5556
|
let dx = 0;
|
|
5564
|
-
|
|
5557
|
+
let vis = "";
|
|
5558
|
+
if (off + w + LABEL_OVERHANG > sl && off - LABEL_OVERHANG < vr) {
|
|
5565
5559
|
const lw = labels[i].offsetWidth;
|
|
5566
|
-
|
|
5560
|
+
const visL = Math.max(off, sl);
|
|
5561
|
+
const visR = Math.min(off + w, vr);
|
|
5562
|
+
if (visR > visL && lw < w) {
|
|
5567
5563
|
const center = (visL + visR) / 2 - off;
|
|
5568
5564
|
dx = Math.min(Math.max(center, lw / 2), w - lw / 2) - w / 2;
|
|
5569
5565
|
}
|
|
5566
|
+
const left = off + w / 2 + dx - lw / 2;
|
|
5567
|
+
if (left < chainR) vis = "hidden";
|
|
5568
|
+
else chainR = left + lw + LABEL_GAP;
|
|
5570
5569
|
}
|
|
5571
5570
|
const next = dx !== 0 ? `translateX(${dx}px)` : "";
|
|
5572
|
-
if (labels[i].style.transform !== next) writes.push([
|
|
5571
|
+
if (labels[i].style.transform !== next || labels[i].style.visibility !== vis) writes.push([
|
|
5572
|
+
labels[i],
|
|
5573
|
+
next,
|
|
5574
|
+
vis
|
|
5575
|
+
]);
|
|
5576
|
+
}
|
|
5577
|
+
for (const [label, next, vis] of writes) {
|
|
5578
|
+
label.style.transform = next;
|
|
5579
|
+
label.style.visibility = vis;
|
|
5573
5580
|
}
|
|
5574
|
-
for (const [label, next] of writes) label.style.transform = next;
|
|
5575
5581
|
};
|
|
5576
5582
|
React.useLayoutEffect(() => {
|
|
5577
5583
|
const el = scrollRef.current;
|
|
@@ -5605,23 +5611,22 @@ window.__ModuleLoader__.load({
|
|
|
5605
5611
|
props.focusTurn,
|
|
5606
5612
|
requests
|
|
5607
5613
|
]);
|
|
5608
|
-
const
|
|
5609
|
-
const
|
|
5614
|
+
const tipRowsOf = (req) => {
|
|
5615
|
+
const n = req.stepCount ?? 1;
|
|
5616
|
+
const head = props.granularity === "turn" ? n > 1 ? t("tip.turn", {
|
|
5610
5617
|
t: req.turn ?? 0,
|
|
5611
|
-
n
|
|
5612
|
-
}) : t("tip.step", {
|
|
5618
|
+
n
|
|
5619
|
+
}) : t("tip.turn1", { t: req.turn ?? 0 }) : t("tip.step", {
|
|
5613
5620
|
t: req.turn ?? 0,
|
|
5614
5621
|
s: req.step ?? 0
|
|
5615
5622
|
});
|
|
5616
|
-
const reply = props.replyTips?.get(req.seq);
|
|
5617
|
-
const tail = reply !== void 0 ? " · “" + (reply.length > 48 ? reply.slice(0, 48) + "…" : reply) + "”" : "";
|
|
5618
5623
|
if (delta) {
|
|
5619
5624
|
/* v8 ignore next 1 -- delta mode only receives records from
|
|
5620
5625
|
deltaOf, which always assigns net; the fallback is defensive. */
|
|
5621
5626
|
const n = req.net ?? 0;
|
|
5622
|
-
return head
|
|
5627
|
+
return [head, t("tip.delta", { n: (n > 0 ? "+" : "") + fmt(n) })];
|
|
5623
5628
|
}
|
|
5624
|
-
return head
|
|
5629
|
+
return [head, t("tip.total", { n: fmt(barTotalOf(req)) })];
|
|
5625
5630
|
};
|
|
5626
5631
|
const hoveredIdx = props.hoveredSeq !== null ? requests.findIndex((r) => r.seq === props.hoveredSeq) : -1;
|
|
5627
5632
|
const hoveredReq = hoveredIdx >= 0 ? requests[hoveredIdx] : null;
|
|
@@ -5651,10 +5656,10 @@ window.__ModuleLoader__.load({
|
|
|
5651
5656
|
tipColRef.current = hoveredIdx >= 0 ? hoveredIdx * 16 + BAR_W / 2 : 0;
|
|
5652
5657
|
syncTip(scrollRef.current);
|
|
5653
5658
|
});
|
|
5654
|
-
return /* @__PURE__ */ React.createElement("div", { className: "lc-chartrow" }, /* @__PURE__ */ React.createElement("div", { className: "lc-axis" }, delta ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("span", { className: "lc-axis-top" }, (maxUp
|
|
5659
|
+
return /* @__PURE__ */ React.createElement("div", { className: "lc-chartrow" }, /* @__PURE__ */ React.createElement("div", { className: "lc-axis" }, delta ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("span", { className: "lc-axis-top" }, fmtSigned(maxUp)), q3Clear ? /* @__PURE__ */ React.createElement("span", { className: "lc-axis-q3" }, fmtSigned(Math.round(maxUp - span / 4))) : null, /* @__PURE__ */ React.createElement("span", {
|
|
5655
5660
|
className: "lc-axis-mid",
|
|
5656
5661
|
style: { top: `${13 + upPx}px` }
|
|
5657
|
-
}, "0"), /* @__PURE__ */ React.createElement("span", { className: "lc-axis-
|
|
5662
|
+
}, "0"), q1Clear ? /* @__PURE__ */ React.createElement("span", { className: "lc-axis-q1" }, fmtSigned(Math.round(maxUp - 3 * span / 4))) : null, /* @__PURE__ */ React.createElement("span", { className: "lc-axis-bot" }, fmtSigned(-maxDown))) : /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("span", { className: "lc-axis-top" }, fmt(maxTotal)), /* @__PURE__ */ React.createElement("span", { className: "lc-axis-q3" }, fmt(Math.round(maxTotal * 3 / 4))), /* @__PURE__ */ React.createElement("span", { className: "lc-axis-mid" }, fmt(Math.round(maxTotal / 2))), /* @__PURE__ */ React.createElement("span", { className: "lc-axis-q1" }, fmt(Math.round(maxTotal / 4))), /* @__PURE__ */ React.createElement("span", { className: "lc-axis-bot" }, "0"))), /* @__PURE__ */ React.createElement("div", { className: "lc-chart-wrap" }, /* @__PURE__ */ React.createElement("div", {
|
|
5658
5663
|
className: "lc-chart-scroll" + (props.activeTurn !== null ? " lc-chart-dim" : ""),
|
|
5659
5664
|
ref: scrollRef,
|
|
5660
5665
|
onScroll: (e) => {
|
|
@@ -5667,10 +5672,10 @@ window.__ModuleLoader__.load({
|
|
|
5667
5672
|
onMouseLeave: () => {
|
|
5668
5673
|
props.onHover(null);
|
|
5669
5674
|
}
|
|
5670
|
-
}, /* @__PURE__ */ React.createElement("div", { className: "lc-grid lc-grid-top" }), delta ? /* @__PURE__ */ React.createElement("div", {
|
|
5675
|
+
}, /* @__PURE__ */ React.createElement("div", { className: "lc-grid lc-grid-top" }), !delta || q3Clear ? /* @__PURE__ */ React.createElement("div", { className: "lc-grid lc-grid-q3" }) : null, !delta || q1Clear ? /* @__PURE__ */ React.createElement("div", { className: "lc-grid lc-grid-q1" }) : null, !delta ? /* @__PURE__ */ React.createElement("div", { className: "lc-grid lc-grid-mid" }) : null, /* @__PURE__ */ React.createElement("div", {
|
|
5671
5676
|
className: "lc-grid lc-grid-zero",
|
|
5672
|
-
style: { top: `${18 + upPx}px` }
|
|
5673
|
-
})
|
|
5677
|
+
style: delta ? { top: `${18 + upPx}px` } : void 0
|
|
5678
|
+
}), requests.map((req, i) => /* @__PURE__ */ React.createElement(ChartBar, {
|
|
5674
5679
|
key: req.seq,
|
|
5675
5680
|
req,
|
|
5676
5681
|
marker: markers[i],
|
|
@@ -5705,7 +5710,7 @@ window.__ModuleLoader__.load({
|
|
|
5705
5710
|
props.onPickTurn(grp.turn);
|
|
5706
5711
|
}
|
|
5707
5712
|
}, /* @__PURE__ */ React.createElement("span", { className: "lc-turn-label" }, `T${grp.turn}`));
|
|
5708
|
-
}))), hoveredReq !== null ? /* @__PURE__ */ React.createElement("div", { className: "lc-chart-tip" },
|
|
5713
|
+
}))), hoveredReq !== null ? /* @__PURE__ */ React.createElement("div", { className: "lc-chart-tip" }, tipRowsOf(hoveredReq).map((row, i) => /* @__PURE__ */ React.createElement("span", { key: i }, row))) : null));
|
|
5709
5714
|
};
|
|
5710
5715
|
}
|
|
5711
5716
|
//#endregion
|
|
@@ -5847,7 +5852,6 @@ window.__ModuleLoader__.load({
|
|
|
5847
5852
|
requests
|
|
5848
5853
|
]);
|
|
5849
5854
|
const briefList = React.useMemo(() => data ? briefNodes(data) : [], [data]);
|
|
5850
|
-
const replyTips = React.useMemo(() => replyTipsOf(briefList), [briefList]);
|
|
5851
5855
|
const convNodes = conversationNodesOf(props);
|
|
5852
5856
|
const bySeq = React.useMemo(() => {
|
|
5853
5857
|
const m = /* @__PURE__ */ new Map();
|
|
@@ -6003,8 +6007,7 @@ window.__ModuleLoader__.load({
|
|
|
6003
6007
|
},
|
|
6004
6008
|
onFocusTurnHandled: () => {
|
|
6005
6009
|
setFocusTurn(null);
|
|
6006
|
-
}
|
|
6007
|
-
replyTips
|
|
6010
|
+
}
|
|
6008
6011
|
}), /* @__PURE__ */ React.createElement(RequestDetail, {
|
|
6009
6012
|
request: activeReq,
|
|
6010
6013
|
prev: trendMode === "delta" && activeIdx >= 0 ? activeIdx > 0 ? displayRequests[activeIdx - 1] : null : void 0,
|
|
@@ -6204,7 +6207,7 @@ window.__ModuleLoader__.load({
|
|
|
6204
6207
|
}
|
|
6205
6208
|
//#endregion
|
|
6206
6209
|
//#region \0dsh-global-css:/home/runner/work/dsh-context/dsh-context/src/client/styles/trendChart.css.mjs
|
|
6207
|
-
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-mid{top:69px}.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-
|
|
6210
|
+
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;border-radius:2px;flex:none;align-items:flex-end;width:14px;height:100%;transition:opacity .12s,background-color .12s;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:1px dashed var(--dsw-alias-brand-primary);outline-offset:1px}.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 .12s,opacity .12s}.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;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;border-radius:3px;flex:none;height:14px;font-size:10px;font-weight:600;line-height:14px;transition:filter .12s,opacity .12s}.lc-turn-on{filter:brightness(1.35);color:var(--dsw-alias-label-primary)}.lc-turn-label{display:inline-block}";
|
|
6208
6211
|
const tagId$8 = "dsh-context/trendChart.css";
|
|
6209
6212
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$8) + "]") === null) {
|
|
6210
6213
|
const tag = document.createElement("style");
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-context",
|
|
3
|
-
"version": "0.38.
|
|
3
|
+
"version": "0.38.3",
|
|
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": {
|