dsh-reasoning-distill 0.1.5 → 0.1.7

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,16 @@
2
2
 
3
3
  本插件的版本变更记录。
4
4
 
5
+ ## 0.1.7
6
+
7
+ - **调整内置蒸馏提示词**:明确要求保留原思考中正确且有效的推理过程,而不是直接跳到结论。可以压缩措辞、合并重复、删除噪音,但不能省略有效的推导步骤;只保留结论的短版本视为错误。自我纠正时保留纠正后的整条推理线(结论、证据与有效步骤),只丢弃被放弃的尝试。
8
+
9
+ ## 0.1.6
10
+
11
+ - **新增:按上下文占用限制触发**。默认规则和逐模型规则各多一个开关 + 「最高生效时上下文占用(%)」(默认开、60%)。上下文占用超过该比例时,即使单步思考达到阈值也不再压缩——否则压缩刚生效、没几轮就被宿主内置的整体压缩收走,白花一次蒸馏的钱。占用值直接读宿主 token-meter 的度量与模型上下文窗口,与内置上下文压缩触发读的是同一个值,整体压缩后会同步变短;宿主读不到该值时功能不生效(不拦)。关闭开关时与旧行为一致,输入框变灰。
12
+ - **修复:压缩会话不再落盘**。压缩用的旁路会话改为纯内存:运行期间可以点开,重启后过期(报告显示「会话已随上次运行结束」),不再在重启后依旧可以打开。顺带移除了只为持久写句柄存在的账本与提示。
13
+ - README 补充上述两项说明。
14
+
5
15
  ## 0.1.5
6
16
 
7
17
  - **适配 DSH `0.2.0-rc.1` ~ `0.2.1-rc.1`**:in-place 补丁在每个版本上 `--apply` → `--check` → `--revert` 全部通过(回退后工作树逐字节干净),打过补丁的包 `tsc -b` 通过,持久化探针(none / zstd)通过;兼容范围写进 `dsh.compatibility.dshReleases`。
package/README.md CHANGED
@@ -15,7 +15,7 @@
15
15
  ## 一、它做什么
16
16
 
17
17
  - 监视每次模型输出里的思考内容(reasoning),并估算其 token 数。
18
- - 某一步的思考超过该模型的**触发阈值**(默认 4000 token)时,把这一步的思考(可选附上工具调用与结果)交给**蒸馏模型**(默认 `deepseek-official/deepseek-flash`,思考强度 off)改写成更短的版本。
18
+ - 某一步的思考超过该模型的**触发阈值**(默认 4000 token)时,把这一步的思考(可选附上工具调用与结果)交给**蒸馏模型**(默认 `deepseek-official/deepseek-flash`,思考强度 off)改写成更短的版本。压缩的是措辞和冗余,**不是推导过程**:有效、正确的思考步骤必须保留,不能直接跳到结论。
19
19
  - 压缩发生在下一步请求之前,下一步会等它。等待上限由该模型的**超时**决定:到点就放弃这一次压缩(原始思考不动、不记账);填 0 表示不设限、一直等到出结果。
20
20
  - 只有压缩结果至少能省下**最低节省**(默认 600 token)时才真正采用,否则只花钱、不替换。
21
21
  - 被采用的压缩版会替换"模型看到的思考内容",因此之后每个请求都少带这些 token;会话日志里的思考原文保持不动,本插件的账本存放在会话日志旁边的 sidecar 文件里。
@@ -158,6 +158,7 @@ node scripts/dsh-inplace-patch.mjs --check # 打全了输出 PATCHED
158
158
  | 对一次性子代理启用(`oneShotSubagents`) | 是否压缩跑完即结束的一次性委派。默认关,因为它的最终回答之后没有任何请求会重放这次压缩。 |
159
159
  | 最大生效深度(`continuableMaxDepth` / `oneShotMaxDepth`) | 两个子代理开关各自带一个深度上限:比该深度更深的子孙代理不再压缩,0 表示不限制。 |
160
160
  | 触发阈值(`thresholdTokens`) | 一步思考估算超过多少 token 才触发,默认 4000。 |
161
+ | 按上下文占用限制触发(`contextCap` / `maxContextPercent`) | 默认开、60%。该模型的上下文占用超过这个比例时,即使单步思考达到阈值也不再压缩——否则压缩刚生效、没几轮就被宿主内置的上下文整体压缩收走,白花一次蒸馏的钱。占用比例用宿主自己的 token 计量与上下文窗口计算,和内置上下文压缩触发读的是同一个值,整段压缩后会自动变短。关闭时不看占用比例(与旧行为一致),比例输入框会变灰。 |
161
162
  | 最低节省(`minSavedTokens`) | 压缩结果至少要比原文省这么多 token 才采用,默认 600;未达到时原文保持不变,但这次蒸馏的开销照样计入。 |
162
163
  | 附带工具调用结果(`includeToolResults`) | 交给蒸馏模型的上下文里是否附上该步工具调用的结果;工具调用本身始终附带。 |
163
164
  | 压缩最终回答轮(`includeFinalTurns`) | 是否压缩没有工具调用的收尾步(最终回答)。 |
@@ -185,7 +186,7 @@ node scripts/dsh-inplace-patch.mjs --check # 打全了输出 PATCHED
185
186
 
186
187
  | 选项 | 含义 |
187
188
  | --- | --- |
188
- | 蒸馏提示词(`prompt`) | 替换内置的压缩指令;留空 = 使用内置提示词(可点"预览内置提示词"查看)。 |
189
+ | 蒸馏提示词(`prompt`) | 替换内置的压缩指令;留空 = 使用内置提示词(可点"预览内置提示词"查看)。内置提示词明确要求保留原思考中正确且有效的推理过程:可以压缩措辞、合并重复,但不能省掉推导步骤直接给结论,重放后的思考要能沿着同一条路径推出同样的结论。 |
189
190
 
190
191
  ### 模型价格与峰谷时段
191
192
 
@@ -202,4 +203,5 @@ node scripts/dsh-inplace-patch.mjs --check # 打全了输出 PATCHED
202
203
  - **当前单次请求减量**:当前生效的改写让**这一次**请求少带的估算 token,是存量而不是累计;改写被整段压缩淘汰后相应减少,全部淘汰归零。
203
204
  - **历史累计节省**:永不重置。
204
205
  - **净收益** = 历史累计节省 − 蒸馏开销 − 缓存断裂开销。
205
- - **最近一步未触发的原因**:面板会直接给出(总开关关、未选择后端、规则关、未到阈值、这一步没有思考、有多个思考块、有后台工作在跑等)。
206
+ - **最近一步未触发的原因**:面板会直接给出(总开关关、未选择后端、规则关、未到阈值、上下文占用超过上限、这一步没有思考、有多个思考块、有后台工作在跑等)。
207
+ - **压缩会话**:每次蒸馏都会开一个旁路会话,用来查看这次压缩的提示词与回答。它**只存在于内存里、不写盘**:本次运行期间可以点开,重启后自动过期,报告里会显示"会话已随上次运行结束(内容见下方明细)"——完整内容本来就在明细里。
@@ -242,7 +242,6 @@ window.__ModuleLoader__.load({
242
242
  //#region src/client/locales.ts
243
243
  const NS = "reasoningDistill";
244
244
  const zh = {
245
- "view.auditUndurable": "未写入持久日志(当前可打开,重启后消失)",
246
245
  "view.notTriggered": "最近一步未触发",
247
246
  "view.why.master-switch-off": "总开关是关的",
248
247
  "view.why.no-backend": "没有选择改写后端",
@@ -260,6 +259,7 @@ window.__ModuleLoader__.load({
260
259
  "view.why.abandoned-or-record-unreadable": "记录不可读或这一步已被放弃",
261
260
  "view.why.message-unreadable": "消息内容读不出来",
262
261
  "view.why.model-unknown": "回答的模型未知",
262
+ "view.why.context-cap": "上下文占用已超过该规则的上限,这一步不再压缩",
263
263
  "view.sessions": "压缩会话",
264
264
  "view.sessionExpired": "会话已随上次运行结束(内容见下方明细)",
265
265
  "settings.maxInput": "背景块长度上限(字符)",
@@ -350,6 +350,9 @@ window.__ModuleLoader__.load({
350
350
  "settings.prompt": "蒸馏提示词",
351
351
  "settings.enabled": "对主对话启用",
352
352
  "settings.threshold": "触发阈值(token)",
353
+ "settings.contextCap": "按上下文占用限制触发",
354
+ "settings.maxContextPercent": "最高生效时上下文占用(%)",
355
+ "settings.contextCapHint": "开启后:当这个模型的上下文占用超过下面的比例时,即使思考长度达到阈值也不触发压缩——免得压缩完没几轮就被宿主内置的上下文整体压缩收走,白花钱。占用比例用宿主自己的 token 计量与上下文窗口计算,与内置上下文压缩触发读的是同一个值;整体压缩后占用会随之变短。关闭时不看占用比例(和原来一样),比例输入框变灰。默认开启,60%。",
353
356
  "settings.minimum": "最低节省(token)",
354
357
  "settings.tools": "附带工具调用结果",
355
358
  "settings.final": "压缩最终回答轮",
@@ -457,7 +460,6 @@ window.__ModuleLoader__.load({
457
460
  "view.historical": "(历史累计,含已被前文压缩淘汰的)"
458
461
  };
459
462
  const en = {
460
- "view.auditUndurable": "not written to a persistent log (openable now, gone after a restart)",
461
463
  "view.notTriggered": "the last step did not trigger",
462
464
  "view.why.master-switch-off": "the master switch is off",
463
465
  "view.why.no-backend": "no rewrite backend is selected",
@@ -475,6 +477,7 @@ window.__ModuleLoader__.load({
475
477
  "view.why.abandoned-or-record-unreadable": "the record is unreadable or the step was abandoned",
476
478
  "view.why.message-unreadable": "the message content could not be read",
477
479
  "view.why.model-unknown": "the answering model is unknown",
480
+ "view.why.context-cap": "context occupancy is above this rule’s cap, so this step is left alone",
478
481
  "view.sessions": "Distillation sessions",
479
482
  "view.sessionExpired": "session ended with the previous run (full text below)",
480
483
  "settings.maxInput": "Context block limit (chars)",
@@ -565,6 +568,9 @@ window.__ModuleLoader__.load({
565
568
  "settings.prompt": "Distillation prompt",
566
569
  "settings.enabled": "Enable for main conversations",
567
570
  "settings.threshold": "Trigger threshold (tokens)",
571
+ "settings.contextCap": "Cap triggers by context occupancy",
572
+ "settings.maxContextPercent": "Highest occupancy for compression (%)",
573
+ "settings.contextCapHint": "On: once this model’s context occupancy is above the percentage below, a step is left alone even when its reasoning reaches the threshold — so the rewrite is not folded away by the host’s own compaction a few turns later. Occupancy uses the host’s token meter over the routed model’s context window, the same measurement its compaction trigger reads, so a compaction lowers it immediately. Off: occupancy is ignored (the old behavior) and the box is greyed out. On by default, 60%.",
568
574
  "settings.minimum": "Minimum savings (tokens)",
569
575
  "settings.tools": "Include tool results",
570
576
  "settings.final": "Distill final-answer turns",
@@ -758,6 +764,8 @@ window.__ModuleLoader__.load({
758
764
  oneShotSubagents: false,
759
765
  oneShotMaxDepth: 0,
760
766
  thresholdTokens: 4e3,
767
+ contextCap: true,
768
+ maxContextPercent: 60,
761
769
  minSavedTokens: 600,
762
770
  includeToolResults: true,
763
771
  includeFinalTurns: true,
@@ -1325,7 +1333,7 @@ window.__ModuleLoader__.load({
1325
1333
  }
1326
1334
  //#endregion
1327
1335
  //#region \0rd-css:/home/huhu233/otherProject/dsh-local-items/dsh-reasoning-distill/src/client/Settings.module.css.mjs
1328
- const css$1 = ".jP3NOa_page{max-width:1020px;color:var(--dsw-alias-label-primary,#252b2d);margin:0 auto;padding:22px 24px 56px;font-size:13px;line-height:1.5}.jP3NOa_header,.jP3NOa_sectionHeading,.jP3NOa_actions{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;display:flex}.jP3NOa_header{border-bottom:1px solid var(--dsw-alias-border-l1,#dde2e1);padding-bottom:18px}.jP3NOa_header h2{margin:0;font-size:18px}.jP3NOa_section{border-bottom:1px solid var(--dsw-alias-border-l1,#dde2e1);padding:20px 0}.jP3NOa_section h3{margin:0 0 14px;font-size:15px}.jP3NOa_sectionHeading h3{margin:0 0 12px}.jP3NOa_toggle{cursor:pointer;align-items:center;gap:9px;min-height:32px;display:inline-flex}.jP3NOa_toggle input{accent-color:#218a77;width:16px;height:16px;margin:0}.jP3NOa_checks{flex-wrap:wrap;gap:8px 22px;display:flex}.jP3NOa_rule{gap:12px;display:grid}.jP3NOa_route{grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;display:grid}.jP3NOa_field{gap:5px;min-width:0;display:grid}.jP3NOa_field span{color:var(--dsw-alias-label-secondary,#586366);font-size:12px}.jP3NOa_field input,.jP3NOa_field select,.jP3NOa_prompt{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l1,#cbd5d3);background:var(--dsw-alias-bg-layer-1,#fff);width:100%;min-height:34px;color:var(--dsw-alias-label-primary,#252b2d);font:inherit;border-radius:5px;padding:6px 9px}.jP3NOa_field input:focus,.jP3NOa_field select:focus,.jP3NOa_prompt:focus{outline-offset:1px;outline:2px solid #218a77}.jP3NOa_item{border-top:1px solid var(--dsw-alias-border-l1,#dde2e1)}.jP3NOa_item:last-child{border-bottom:1px solid var(--dsw-alias-border-l1,#dde2e1)}.jP3NOa_item summary{cursor:pointer;align-items:center;gap:12px;min-height:44px;list-style:none;display:flex}.jP3NOa_item summary::-webkit-details-marker{display:none}.jP3NOa_item summary:before{content:\"›\";color:var(--dsw-alias-label-tertiary,#667477);font-size:18px;transition:transform .15s}.jP3NOa_item[open] summary:before{transform:rotate(90deg)}.jP3NOa_item summary strong{overflow-wrap:anywhere;min-width:0;font-weight:600}.jP3NOa_itemBody{gap:12px;padding:8px 0 18px 22px;display:grid}.jP3NOa_muted,.jP3NOa_note{color:var(--dsw-alias-label-secondary,#667477)}.jP3NOa_note{margin:0;font-size:12px}.jP3NOa_badge{color:#16816f;white-space:nowrap;margin-left:auto;font-size:11px}.jP3NOa_primary,.jP3NOa_secondary,.jP3NOa_iconButton{font:inherit;cursor:pointer;border:1px solid var(--dsw-alias-border-l1,#cbd5d3);background:var(--dsw-alias-bg-layer-1,#fff);min-height:32px;color:inherit;border-radius:5px;padding:5px 11px}.jP3NOa_primary{color:#fff;background:#187866;border-color:#187866}.jP3NOa_primary:disabled,.jP3NOa_secondary:disabled{opacity:.5;cursor:not-allowed}.jP3NOa_iconButton{place-items:center;width:32px;padding:0;display:inline-grid}.jP3NOa_priceGrid{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;display:grid}.jP3NOa_priceGrid fieldset{border:1px solid var(--dsw-alias-border-l1,#dde2e1);border-radius:5px;min-width:0;padding:10px 12px 12px}.jP3NOa_priceGrid legend{padding:0 5px;font-weight:600}.jP3NOa_priceGrid .jP3NOa_route{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.jP3NOa_prompt{resize:vertical;height:180px;font-family:ui-monospace,SFMono-Regular,Consolas,monospace}.jP3NOa_preview{border-top:1px solid var(--dsw-alias-border-l1,#dde2e1);padding-top:10px}.jP3NOa_preview summary{cursor:pointer}.jP3NOa_preview pre{white-space:pre-wrap;overflow-wrap:anywhere;background:var(--dsw-alias-bg-layer-2,#f5f7f6);border-radius:5px;max-height:320px;padding:12px;font-size:12px;overflow:auto}.jP3NOa_error{color:#b23636}@media (width<=700px){.jP3NOa_page{padding:16px}.jP3NOa_route,.jP3NOa_priceGrid,.jP3NOa_priceGrid .jP3NOa_route{grid-template-columns:1fr}.jP3NOa_item summary{flex-wrap:wrap;gap:4px 10px}.jP3NOa_muted{overflow-wrap:anywhere}}.jP3NOa_picker{margin:10px 0 16px;position:relative}.jP3NOa_pickerPanel{border:1px solid var(--dsw-alias-border-l1,#dde2e1);background:var(--dsw-alias-bg-layer-1,#fff);border-radius:10px;margin-top:10px;padding:10px}.jP3NOa_search{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l1,#dde2e1);width:100%;font:inherit;color:inherit;background:0 0;border-radius:8px;padding:7px 10px}.jP3NOa_pickerList{flex-direction:column;gap:2px;max-height:260px;margin-top:8px;display:flex;overflow:auto}.jP3NOa_pickerItem{text-align:left;width:100%;color:inherit;font:inherit;cursor:pointer;background:0 0;border:0;border-radius:7px;justify-content:space-between;align-items:baseline;gap:10px;padding:7px 9px;display:flex}.jP3NOa_pickerItem:hover{background:var(--dsw-alias-interactive-bg-hover,#7f7f7f1f)}.jP3NOa_pickerItem strong{font-weight:600}.jP3NOa_peakBox{border:1px solid var(--dsw-alias-border-l1,#dde2e1);border-radius:10px;flex-direction:column;gap:8px;margin:0 0 16px;padding:12px 14px;display:flex}.jP3NOa_holidayBox{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l1,#dde2e1);width:100%;min-height:120px;font:inherit;color:inherit;resize:vertical;background:0 0;border-radius:8px;padding:8px 10px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.jP3NOa_backendOptions{border:1px solid var(--dsw-alias-border-l1,#dde2e1);border-radius:10px;flex-direction:column;gap:8px;margin:14px 0 0;padding:12px 14px;display:flex}.jP3NOa_backendOptions h4{color:var(--dsw-alias-label-secondary,#667477);margin:0;font-size:13px;font-weight:600}.jP3NOa_installEntry{flex-wrap:wrap;align-items:center;gap:10px;margin-top:14px;display:flex}.jP3NOa_modalBackdrop{z-index:60;background:#0000006b;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.jP3NOa_modal{background:var(--dsw-alias-bg-layer-1,#fff);width:min(720px,100%);max-height:86vh;color:var(--dsw-alias-label-primary,#252b2d);border:1px solid var(--dsw-alias-border-l1,#dde2e1);border-radius:12px;overflow:auto;box-shadow:0 18px 48px #00000047}.jP3NOa_modalHead{border-bottom:1px solid var(--dsw-alias-border-l1,#dde2e1);justify-content:space-between;align-items:center;gap:12px;padding:14px 16px;display:flex}.jP3NOa_modalHead h3{margin:0;font-size:15px}.jP3NOa_modalBody{flex-direction:column;gap:10px;padding:14px 16px 18px;display:flex}.jP3NOa_modalBody h4{color:var(--dsw-alias-label-secondary,#586366);margin:6px 0 0;font-size:13px;font-weight:600}.jP3NOa_modeCards{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;display:grid}.jP3NOa_modeCard{border:1px solid var(--dsw-alias-border-l1,#dde2e1);border-radius:10px;align-content:start;gap:6px;padding:10px 12px;display:grid}.jP3NOa_modeCard strong{font-weight:600}.jP3NOa_installBlock{border:1px solid var(--dsw-alias-border-l1,#dde2e1);border-radius:10px;flex-direction:column;gap:8px;padding:10px 12px;display:flex}.jP3NOa_installProgress{flex-direction:column;gap:6px;display:flex}.jP3NOa_steps{flex-direction:column;gap:4px;margin:0;padding:0;list-style:none;display:flex}.jP3NOa_steps li{align-items:baseline;gap:8px;font-size:12px;display:flex}.jP3NOa_logBox summary{cursor:pointer;color:var(--dsw-alias-label-secondary,#667477);font-size:12px}.jP3NOa_log{white-space:pre-wrap;overflow-wrap:anywhere;background:var(--dsw-alias-bg-layer-2,#f5f7f6);border-radius:6px;max-height:220px;margin:6px 0 0;padding:10px;font-size:12px;overflow:auto}@media (width<=700px){.jP3NOa_modeCards{grid-template-columns:1fr}}";
1336
+ const css$1 = ".jP3NOa_page{max-width:1020px;color:var(--dsw-alias-label-primary,#252b2d);margin:0 auto;padding:22px 24px 56px;font-size:13px;line-height:1.5}.jP3NOa_header,.jP3NOa_sectionHeading,.jP3NOa_actions{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;display:flex}.jP3NOa_header{border-bottom:1px solid var(--dsw-alias-border-l1,#dde2e1);padding-bottom:18px}.jP3NOa_header h2{margin:0;font-size:18px}.jP3NOa_section{border-bottom:1px solid var(--dsw-alias-border-l1,#dde2e1);padding:20px 0}.jP3NOa_section h3{margin:0 0 14px;font-size:15px}.jP3NOa_sectionHeading h3{margin:0 0 12px}.jP3NOa_toggle{cursor:pointer;align-items:center;gap:9px;min-height:32px;display:inline-flex}.jP3NOa_toggle input{accent-color:#218a77;width:16px;height:16px;margin:0}.jP3NOa_checks{flex-wrap:wrap;gap:8px 22px;display:flex}.jP3NOa_rule{gap:12px;display:grid}.jP3NOa_route{grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;display:grid}.jP3NOa_field{gap:5px;min-width:0;display:grid}.jP3NOa_field span{color:var(--dsw-alias-label-secondary,#586366);font-size:12px}.jP3NOa_field input,.jP3NOa_field select,.jP3NOa_prompt{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l1,#cbd5d3);background:var(--dsw-alias-bg-layer-1,#fff);width:100%;min-height:34px;color:var(--dsw-alias-label-primary,#252b2d);font:inherit;border-radius:5px;padding:6px 9px}.jP3NOa_field input:focus,.jP3NOa_field select:focus,.jP3NOa_prompt:focus{outline-offset:1px;outline:2px solid #218a77}.jP3NOa_item{border-top:1px solid var(--dsw-alias-border-l1,#dde2e1)}.jP3NOa_item:last-child{border-bottom:1px solid var(--dsw-alias-border-l1,#dde2e1)}.jP3NOa_item summary{cursor:pointer;align-items:center;gap:12px;min-height:44px;list-style:none;display:flex}.jP3NOa_item summary::-webkit-details-marker{display:none}.jP3NOa_item summary:before{content:\"›\";color:var(--dsw-alias-label-tertiary,#667477);font-size:18px;transition:transform .15s}.jP3NOa_item[open] summary:before{transform:rotate(90deg)}.jP3NOa_item summary strong{overflow-wrap:anywhere;min-width:0;font-weight:600}.jP3NOa_itemBody{gap:12px;padding:8px 0 18px 22px;display:grid}.jP3NOa_muted,.jP3NOa_note{color:var(--dsw-alias-label-secondary,#667477)}.jP3NOa_note{margin:0;font-size:12px}.jP3NOa_badge{color:#16816f;white-space:nowrap;margin-left:auto;font-size:11px}.jP3NOa_primary,.jP3NOa_secondary,.jP3NOa_iconButton{font:inherit;cursor:pointer;border:1px solid var(--dsw-alias-border-l1,#cbd5d3);background:var(--dsw-alias-bg-layer-1,#fff);min-height:32px;color:inherit;border-radius:5px;padding:5px 11px}.jP3NOa_primary{color:#fff;background:#187866;border-color:#187866}.jP3NOa_primary:disabled,.jP3NOa_secondary:disabled{opacity:.5;cursor:not-allowed}.jP3NOa_iconButton{place-items:center;width:32px;padding:0;display:inline-grid}.jP3NOa_priceGrid{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;display:grid}.jP3NOa_priceGrid fieldset{border:1px solid var(--dsw-alias-border-l1,#dde2e1);border-radius:5px;min-width:0;padding:10px 12px 12px}.jP3NOa_priceGrid legend{padding:0 5px;font-weight:600}.jP3NOa_priceGrid .jP3NOa_route{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.jP3NOa_prompt{resize:vertical;height:180px;font-family:ui-monospace,SFMono-Regular,Consolas,monospace}.jP3NOa_preview{border-top:1px solid var(--dsw-alias-border-l1,#dde2e1);padding-top:10px}.jP3NOa_preview summary{cursor:pointer}.jP3NOa_preview pre{white-space:pre-wrap;overflow-wrap:anywhere;background:var(--dsw-alias-bg-layer-2,#f5f7f6);border-radius:5px;max-height:320px;padding:12px;font-size:12px;overflow:auto}.jP3NOa_error{color:#b23636}@media (width<=700px){.jP3NOa_page{padding:16px}.jP3NOa_route,.jP3NOa_priceGrid,.jP3NOa_priceGrid .jP3NOa_route{grid-template-columns:1fr}.jP3NOa_item summary{flex-wrap:wrap;gap:4px 10px}.jP3NOa_muted{overflow-wrap:anywhere}}.jP3NOa_picker{margin:10px 0 16px;position:relative}.jP3NOa_pickerPanel{border:1px solid var(--dsw-alias-border-l1,#dde2e1);background:var(--dsw-alias-bg-layer-1,#fff);border-radius:10px;margin-top:10px;padding:10px}.jP3NOa_search{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l1,#dde2e1);width:100%;font:inherit;color:inherit;background:0 0;border-radius:8px;padding:7px 10px}.jP3NOa_pickerList{flex-direction:column;gap:2px;max-height:260px;margin-top:8px;display:flex;overflow:auto}.jP3NOa_pickerItem{text-align:left;width:100%;color:inherit;font:inherit;cursor:pointer;background:0 0;border:0;border-radius:7px;justify-content:space-between;align-items:baseline;gap:10px;padding:7px 9px;display:flex}.jP3NOa_pickerItem:hover{background:var(--dsw-alias-interactive-bg-hover,#7f7f7f1f)}.jP3NOa_pickerItem strong{font-weight:600}.jP3NOa_peakBox{border:1px solid var(--dsw-alias-border-l1,#dde2e1);border-radius:10px;flex-direction:column;gap:8px;margin:0 0 16px;padding:12px 14px;display:flex}.jP3NOa_capBox{border:1px solid var(--dsw-alias-border-l1,#dde2e1);border-radius:10px;align-content:start;gap:10px;margin:0;padding:12px 14px;display:grid}.jP3NOa_capBox .jP3NOa_field{max-width:240px}.jP3NOa_holidayBox{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l1,#dde2e1);width:100%;min-height:120px;font:inherit;color:inherit;resize:vertical;background:0 0;border-radius:8px;padding:8px 10px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.jP3NOa_backendOptions{border:1px solid var(--dsw-alias-border-l1,#dde2e1);border-radius:10px;flex-direction:column;gap:8px;margin:14px 0 0;padding:12px 14px;display:flex}.jP3NOa_backendOptions h4{color:var(--dsw-alias-label-secondary,#667477);margin:0;font-size:13px;font-weight:600}.jP3NOa_installEntry{flex-wrap:wrap;align-items:center;gap:10px;margin-top:14px;display:flex}.jP3NOa_modalBackdrop{z-index:60;background:#0000006b;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.jP3NOa_modal{background:var(--dsw-alias-bg-layer-1,#fff);width:min(720px,100%);max-height:86vh;color:var(--dsw-alias-label-primary,#252b2d);border:1px solid var(--dsw-alias-border-l1,#dde2e1);border-radius:12px;overflow:auto;box-shadow:0 18px 48px #00000047}.jP3NOa_modalHead{border-bottom:1px solid var(--dsw-alias-border-l1,#dde2e1);justify-content:space-between;align-items:center;gap:12px;padding:14px 16px;display:flex}.jP3NOa_modalHead h3{margin:0;font-size:15px}.jP3NOa_modalBody{flex-direction:column;gap:10px;padding:14px 16px 18px;display:flex}.jP3NOa_modalBody h4{color:var(--dsw-alias-label-secondary,#586366);margin:6px 0 0;font-size:13px;font-weight:600}.jP3NOa_modeCards{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;display:grid}.jP3NOa_modeCard{border:1px solid var(--dsw-alias-border-l1,#dde2e1);border-radius:10px;align-content:start;gap:6px;padding:10px 12px;display:grid}.jP3NOa_modeCard strong{font-weight:600}.jP3NOa_installBlock{border:1px solid var(--dsw-alias-border-l1,#dde2e1);border-radius:10px;flex-direction:column;gap:8px;padding:10px 12px;display:flex}.jP3NOa_installProgress{flex-direction:column;gap:6px;display:flex}.jP3NOa_steps{flex-direction:column;gap:4px;margin:0;padding:0;list-style:none;display:flex}.jP3NOa_steps li{align-items:baseline;gap:8px;font-size:12px;display:flex}.jP3NOa_logBox summary{cursor:pointer;color:var(--dsw-alias-label-secondary,#667477);font-size:12px}.jP3NOa_log{white-space:pre-wrap;overflow-wrap:anywhere;background:var(--dsw-alias-bg-layer-2,#f5f7f6);border-radius:6px;max-height:220px;margin:6px 0 0;padding:10px;font-size:12px;overflow:auto}@media (width<=700px){.jP3NOa_modeCards{grid-template-columns:1fr}}";
1329
1337
  const tagId$1 = "dsh-reasoning-distill/Settings.module.css";
1330
1338
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$1) + "]") === null) {
1331
1339
  const tag = document.createElement("style");
@@ -1335,48 +1343,49 @@ window.__ModuleLoader__.load({
1335
1343
  document.head.appendChild(tag);
1336
1344
  }
1337
1345
  var Settings_module_css_default = {
1338
- "prompt": "jP3NOa_prompt",
1346
+ "secondary": "jP3NOa_secondary",
1347
+ "backendOptions": "jP3NOa_backendOptions",
1348
+ "installProgress": "jP3NOa_installProgress",
1349
+ "itemBody": "jP3NOa_itemBody",
1350
+ "preview": "jP3NOa_preview",
1351
+ "modalHead": "jP3NOa_modalHead",
1352
+ "installBlock": "jP3NOa_installBlock",
1353
+ "priceGrid": "jP3NOa_priceGrid",
1354
+ "muted": "jP3NOa_muted",
1355
+ "error": "jP3NOa_error",
1356
+ "modal": "jP3NOa_modal",
1339
1357
  "modalBody": "jP3NOa_modalBody",
1340
- "modeCards": "jP3NOa_modeCards",
1358
+ "steps": "jP3NOa_steps",
1359
+ "logBox": "jP3NOa_logBox",
1360
+ "search": "jP3NOa_search",
1341
1361
  "pickerItem": "jP3NOa_pickerItem",
1342
- "note": "jP3NOa_note",
1362
+ "log": "jP3NOa_log",
1363
+ "pickerPanel": "jP3NOa_pickerPanel",
1343
1364
  "iconButton": "jP3NOa_iconButton",
1344
- "peakBox": "jP3NOa_peakBox",
1345
- "search": "jP3NOa_search",
1346
- "installEntry": "jP3NOa_installEntry",
1365
+ "rule": "jP3NOa_rule",
1366
+ "holidayBox": "jP3NOa_holidayBox",
1347
1367
  "checks": "jP3NOa_checks",
1348
- "itemBody": "jP3NOa_itemBody",
1349
- "error": "jP3NOa_error",
1350
- "picker": "jP3NOa_picker",
1351
- "page": "jP3NOa_page",
1368
+ "capBox": "jP3NOa_capBox",
1369
+ "field": "jP3NOa_field",
1352
1370
  "item": "jP3NOa_item",
1353
- "badge": "jP3NOa_badge",
1354
- "modal": "jP3NOa_modal",
1355
- "rule": "jP3NOa_rule",
1356
- "modalHead": "jP3NOa_modalHead",
1371
+ "primary": "jP3NOa_primary",
1372
+ "installEntry": "jP3NOa_installEntry",
1373
+ "prompt": "jP3NOa_prompt",
1374
+ "toggle": "jP3NOa_toggle",
1357
1375
  "sectionHeading": "jP3NOa_sectionHeading",
1358
- "pickerPanel": "jP3NOa_pickerPanel",
1359
- "installProgress": "jP3NOa_installProgress",
1360
- "route": "jP3NOa_route",
1361
- "steps": "jP3NOa_steps",
1362
- "logBox": "jP3NOa_logBox",
1363
- "actions": "jP3NOa_actions",
1376
+ "modalBackdrop": "jP3NOa_modalBackdrop",
1364
1377
  "modeCard": "jP3NOa_modeCard",
1365
- "installBlock": "jP3NOa_installBlock",
1366
- "secondary": "jP3NOa_secondary",
1367
- "toggle": "jP3NOa_toggle",
1368
- "primary": "jP3NOa_primary",
1369
- "preview": "jP3NOa_preview",
1370
- "log": "jP3NOa_log",
1371
- "section": "jP3NOa_section",
1372
- "muted": "jP3NOa_muted",
1373
- "backendOptions": "jP3NOa_backendOptions",
1378
+ "picker": "jP3NOa_picker",
1379
+ "badge": "jP3NOa_badge",
1380
+ "page": "jP3NOa_page",
1374
1381
  "pickerList": "jP3NOa_pickerList",
1375
- "priceGrid": "jP3NOa_priceGrid",
1376
- "holidayBox": "jP3NOa_holidayBox",
1377
1382
  "header": "jP3NOa_header",
1378
- "field": "jP3NOa_field",
1379
- "modalBackdrop": "jP3NOa_modalBackdrop"
1383
+ "actions": "jP3NOa_actions",
1384
+ "peakBox": "jP3NOa_peakBox",
1385
+ "modeCards": "jP3NOa_modeCards",
1386
+ "route": "jP3NOa_route",
1387
+ "section": "jP3NOa_section",
1388
+ "note": "jP3NOa_note"
1380
1389
  };
1381
1390
  //#endregion
1382
1391
  //#region src/client/InstallBackend.tsx
@@ -1858,12 +1867,13 @@ window.__ModuleLoader__.load({
1858
1867
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: label })]
1859
1868
  });
1860
1869
  }
1861
- function Count({ label, value, onChange, disabled = false }) {
1870
+ function Count({ label, value, onChange, disabled = false, min = 0, max }) {
1862
1871
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
1863
1872
  className: Settings_module_css_default.field,
1864
1873
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: label }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
1865
1874
  type: "number",
1866
- min: "0",
1875
+ min,
1876
+ max,
1867
1877
  step: "1",
1868
1878
  value,
1869
1879
  disabled,
@@ -2032,6 +2042,29 @@ window.__ModuleLoader__.load({
2032
2042
  })
2033
2043
  ]
2034
2044
  }),
2045
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2046
+ className: Settings_module_css_default.capBox,
2047
+ children: [
2048
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Toggle, {
2049
+ label: t("settings.contextCap"),
2050
+ checked: rule.contextCap,
2051
+ disabled: idle,
2052
+ onChange: (contextCap) => change({ contextCap })
2053
+ }),
2054
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Count, {
2055
+ label: t("settings.maxContextPercent"),
2056
+ value: rule.maxContextPercent,
2057
+ min: 1,
2058
+ max: 100,
2059
+ disabled: idle || !rule.contextCap,
2060
+ onChange: (maxContextPercent) => change({ maxContextPercent })
2061
+ }),
2062
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
2063
+ className: Settings_module_css_default.note,
2064
+ children: t("settings.contextCapHint")
2065
+ })
2066
+ ]
2067
+ }),
2035
2068
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
2036
2069
  className: Settings_module_css_default.note,
2037
2070
  children: t("settings.ruleIdle")
@@ -2789,41 +2822,41 @@ window.__ModuleLoader__.load({
2789
2822
  document.head.appendChild(tag);
2790
2823
  }
2791
2824
  var View_module_css_default = {
2792
- "sessionInfo": "_7CZWHG_sessionInfo",
2793
- "headerTrigger": "_7CZWHG_headerTrigger",
2794
- "popupList": "_7CZWHG_popupList",
2795
- "summary": "_7CZWHG_summary",
2796
- "page": "_7CZWHG_page",
2797
- "textBlock": "_7CZWHG_textBlock",
2825
+ "entry": "_7CZWHG_entry",
2798
2826
  "metric": "_7CZWHG_metric",
2799
- "activity": "_7CZWHG_activity",
2800
- "facts": "_7CZWHG_facts",
2801
- "muted": "_7CZWHG_muted",
2802
- "secondary": "_7CZWHG_secondary",
2803
- "entryTitle": "_7CZWHG_entryTitle",
2804
- "popupActions": "_7CZWHG_popupActions",
2805
- "popupFacts": "_7CZWHG_popupFacts",
2806
2827
  "activityDot": "_7CZWHG_activityDot",
2828
+ "popupActions": "_7CZWHG_popupActions",
2807
2829
  "activeRow": "_7CZWHG_activeRow",
2808
2830
  "activityLabel": "_7CZWHG_activityLabel",
2809
- "positive": "_7CZWHG_positive",
2810
- "note": "_7CZWHG_note",
2831
+ "facts": "_7CZWHG_facts",
2832
+ "error": "_7CZWHG_error",
2833
+ "entryBody": "_7CZWHG_entryBody",
2811
2834
  "section": "_7CZWHG_section",
2812
- "activityWhy": "_7CZWHG_activityWhy",
2813
2835
  "negative": "_7CZWHG_negative",
2814
- "header": "_7CZWHG_header",
2815
- "activityDotBlocked": "_7CZWHG_activityDotBlocked",
2816
- "sessionRow": "_7CZWHG_sessionRow",
2836
+ "popupList": "_7CZWHG_popupList",
2837
+ "sessionInfo": "_7CZWHG_sessionInfo",
2838
+ "rdPulse": "_7CZWHG_rdPulse",
2839
+ "activityWhy": "_7CZWHG_activityWhy",
2817
2840
  "popupRow": "_7CZWHG_popupRow",
2841
+ "positive": "_7CZWHG_positive",
2842
+ "sessionRow": "_7CZWHG_sessionRow",
2843
+ "summary": "_7CZWHG_summary",
2844
+ "headerTrigger": "_7CZWHG_headerTrigger",
2845
+ "popupFacts": "_7CZWHG_popupFacts",
2846
+ "iconButton": "_7CZWHG_iconButton",
2847
+ "muted": "_7CZWHG_muted",
2848
+ "activity": "_7CZWHG_activity",
2849
+ "secondary": "_7CZWHG_secondary",
2850
+ "popupHead": "_7CZWHG_popupHead",
2851
+ "note": "_7CZWHG_note",
2818
2852
  "actions": "_7CZWHG_actions",
2819
2853
  "blockedBanner": "_7CZWHG_blockedBanner",
2820
- "entryBody": "_7CZWHG_entryBody",
2854
+ "entryTitle": "_7CZWHG_entryTitle",
2855
+ "header": "_7CZWHG_header",
2856
+ "textBlock": "_7CZWHG_textBlock",
2821
2857
  "popup": "_7CZWHG_popup",
2822
- "error": "_7CZWHG_error",
2823
- "rdPulse": "_7CZWHG_rdPulse",
2824
- "iconButton": "_7CZWHG_iconButton",
2825
- "popupHead": "_7CZWHG_popupHead",
2826
- "entry": "_7CZWHG_entry"
2858
+ "activityDotBlocked": "_7CZWHG_activityDotBlocked",
2859
+ "page": "_7CZWHG_page"
2827
2860
  };
2828
2861
  //#endregion
2829
2862
  //#region src/client/ActivityChip.tsx
@@ -3137,10 +3170,6 @@ window.__ModuleLoader__.load({
3137
3170
  className: View_module_css_default.secondary,
3138
3171
  onClick: () => openSession(id),
3139
3172
  children: t("view.open")
3140
- }),
3141
- entry.sessionMissing === true && !expired && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
3142
- className: View_module_css_default.note,
3143
- children: t("view.auditUndurable")
3144
3173
  })
3145
3174
  ]
3146
3175
  })]