dsh-deepseek-web-login 0.2.2 → 0.3.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/CHANGELOG.md CHANGED
@@ -2,6 +2,24 @@
2
2
 
3
3
  本项目遵循大致语义化版本;日期为本地时间。
4
4
 
5
+ ## 0.3.0 — 2026-09-26
6
+
7
+ > 上下文范围可调。原来硬编码 1M,现在能按需调小。
8
+
9
+ ### 新增
10
+
11
+ - **「上下文范围」滑块**(设置页 → 请求节流,紧邻「图片上限」)。档位:32K / 64K / 128K / 256K / 512K / 1M。
12
+ 它声明的是**模型能装多少**(`contextWindow`)—— DSH 据此决定何时压缩或截断历史。
13
+ 声明 1M 时,DSH 长期认为"还装得下"而迟迟不压,于是每轮都把整段转写重发;
14
+ 对只跑短任务的人,这部分体量是白烧的。调小后 DSH 会更早动手。
15
+ ⚠️ 它与「prompt 上限」是**两道独立阀门**:前者管"插件一次发多少字符",后者管"DSH 认为能装多少"。
16
+ 两个都调小,请求体量才真的降下来。
17
+ 改动**即时生效**,不需要重启 DSH。
18
+
19
+ ### 说明
20
+
21
+ - 默认值仍是 1Mi(DeepSeek 网页端标称值)—— 不动这个开关的人,行为与之前完全一致。
22
+
5
23
  ## 0.2.2 — 2026-09-24
6
24
 
7
25
  > 面板视觉重构。功能没变,但设置页整个翻新了一遍。
package/lib/client.js CHANGED
@@ -1527,6 +1527,53 @@ background:var(--bg2);white-space:pre-wrap;font-size:12px}
1527
1527
  paintImageCap();
1528
1528
  saveGate({ maxRefImages: Number(imgRange.value) });
1529
1529
  });
1530
+ const ctxRow = el("div", "dsw-gate-row");
1531
+ ctxRow.append(el("span", "dsw-gate-label", "上下文"));
1532
+ const ctxRange = el("input", "dsw-range");
1533
+ ctxRange.type = "range";
1534
+ ctxRange.min = "0";
1535
+ ctxRange.step = "1";
1536
+ ctxRange.setAttribute("aria-label", "对外声明的上下文窗口大小");
1537
+ ctxRange.title = "告诉 DSH 这个模型能装多少上下文;调小会让它更早压缩历史";
1538
+ const ctxValue = el("span", "dsw-gate-value", "—");
1539
+ ctxRow.append(ctxRange, ctxValue);
1540
+ gateCard.append(ctxRow);
1541
+ const ctxHint = el("p", "dsw-hint", "");
1542
+ gateCard.append(ctxHint);
1543
+ let ctxOptions = [
1544
+ 32768,
1545
+ 65536,
1546
+ 131072,
1547
+ 262144,
1548
+ 524288,
1549
+ 1048576
1550
+ ];
1551
+ /** token 数转人话:1M / 512K / 128K …… 与「模型」页的写法保持一致。 */
1552
+ const formatCtxWindow = (tokens) => tokens >= 1048576 ? `${(tokens / 1048576).toFixed(0)}M` : `${Math.round(tokens / 1024)}K`;
1553
+ /** 把任意值吸附到最近的档位(配置里可能是旧值或手改过的值)。 */
1554
+ const nearestCtxIndex = (value) => {
1555
+ let best = 0;
1556
+ let bestDiff = Number.POSITIVE_INFINITY;
1557
+ ctxOptions.forEach((option, index) => {
1558
+ const diff = Math.abs(option - value);
1559
+ if (diff < bestDiff) {
1560
+ bestDiff = diff;
1561
+ best = index;
1562
+ }
1563
+ });
1564
+ return best;
1565
+ };
1566
+ const currentCtxTokens = () => ctxOptions[Number(ctxRange.value)] ?? ctxOptions[ctxOptions.length - 1];
1567
+ const paintContextWindow = () => {
1568
+ const tokens = currentCtxTokens();
1569
+ ctxValue.textContent = formatCtxWindow(tokens);
1570
+ ctxHint.textContent = tokens >= 1048576 ? "当前按 DeepSeek 标称的 1M 声明 —— DSH 会认为「还装得下」,尽量不压缩历史。如果你的任务都很短,可以调小以省下每轮重发的体量。" : `声明 ${formatCtxWindow(tokens)}:DSH 会更早压缩/截断历史,每轮重发的转写因此更短。这只是「声明值」,不改模型真实能力;调小只是让 DSH 早点动手。想彻底压住单次体量,上面的「prompt 上限」也要一起调。`;
1571
+ };
1572
+ ctxRange.addEventListener("input", paintContextWindow);
1573
+ ctxRange.addEventListener("change", () => {
1574
+ paintContextWindow();
1575
+ saveGate({ contextWindow: currentCtxTokens() });
1576
+ });
1530
1577
  const cleanupRow = el("div", "dsw-gate-row");
1531
1578
  cleanupRow.append(el("span", "dsw-gate-label", "会话清理"));
1532
1579
  const cleanupBtns = {};
@@ -1964,6 +2011,14 @@ background:var(--bg2);white-space:pre-wrap;font-size:12px}
1964
2011
  imgRange.step = "1";
1965
2012
  imgRange.value = String(g.maxRefImages ?? g.maxRefImagesDefault ?? 24);
1966
2013
  paintImageCap();
2014
+ if (Array.isArray(g.contextWindowOptions) && g.contextWindowOptions.length > 0) {
2015
+ const parsedOptions = g.contextWindowOptions.map((value) => Number(value)).filter((value) => Number.isFinite(value) && value > 0);
2016
+ if (parsedOptions.length > 0) ctxOptions = parsedOptions;
2017
+ }
2018
+ ctxRange.min = "0";
2019
+ ctxRange.max = String(Math.max(0, ctxOptions.length - 1));
2020
+ ctxRange.value = String(nearestCtxIndex(Number(g.contextWindow ?? g.contextWindowDefault ?? ctxOptions[ctxOptions.length - 1])));
2021
+ paintContextWindow();
1967
2022
  const mode = g.cleanup?.mode ?? "deferred";
1968
2023
  for (const key of Object.keys(cleanupBtns)) cleanupBtns[key].classList.toggle("active", key === mode);
1969
2024
  const showRanges = mode === "deferred";