From 1844dcce481e7129b8db4a1b9d143e1d09bda6bd Mon Sep 17 00:00:00 2001 From: HUIDADA <1439078547@qq.com> Date: Wed, 23 Sep 2026 17:43:24 +0800 Subject: [PATCH] =?UTF-8?q?feat(slider):=20=E6=80=9D=E8=80=83=E5=BC=BA?= =?UTF-8?q?=E5=BA=A6=E6=BB=91=E6=9D=A1=E9=87=8D=E5=81=9A=E4=B8=BA=20dsh-re?= =?UTF-8?q?asoning-effort=20=E5=90=8C=E6=AC=BE=E8=BF=9E=E7=BB=AD=E6=8B=96?= =?UTF-8?q?=E5=8A=A8=E6=9D=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 轨道 1:1 复刻 HanaAyane/dsh-reasoning-effort(MIT):胶囊轨道渐变 + canvas 像素辐射 + 白色旋钮,--re-progress 百分比驱动 - 手感同上游:raw 浮点连续跟手,松手吸附最近档位;提交中 is-busy,失败回弹 - 移除分段概念,setSegments 仅兼容保留;SKILL.md 样式规格同步 --- skills/zcode-tokenspeed/SKILL.md | 71 +- .../scripts/zcode-thought-slider.js | 696 ++++++++++-------- 2 files changed, 437 insertions(+), 330 deletions(-) diff --git a/skills/zcode-tokenspeed/SKILL.md b/skills/zcode-tokenspeed/SKILL.md index c3a8a22..ee766f0 100644 --- a/skills/zcode-tokenspeed/SKILL.md +++ b/skills/zcode-tokenspeed/SKILL.md @@ -233,7 +233,7 @@ python "/scripts/zcode_patcher.py" --model-puller | 思考等级透传(≤3.11) | 给自定义模型配思考等级 | `python zcode_patcher.py [--check/--revert/--extract]` | 内核 zcode.cjs(原地改写,.bak 备份) | | 打开统计图 | 用量页趋势图/饼图去截断 | `python zcode_patcher.py --usage-chart [--check/--revert]` | app.asar 内渲染文件(同长度原地改字节 + integrity 同步) | | 打开状态栏 | 输入框下方居中统计条(**v2 纯 DOM 观测,3.12.2+ 安全**;右键可切工具栏/会话顶部 sticky):本轮指标 + 会话累计(第 N 轮/输入/命中+平均命中率/累出) | `python zcode_patcher.py --tps-footer [--check/--revert]` | app.asar(重打包级:注入脚本 + 挂载 index.html) | -| 思考强度滑条 | 工具栏「思考 · 档名」入口,点击弹出吸附拖拽条(动效);原生下拉隐藏,拖完即时生效 | `python zcode_patcher.py --thought-slider [--check/--revert]` | app.asar(重打包级:注入脚本 + 挂载 index.html) | +| 思考强度滑条 | 工具栏「思考 · 档名」入口,点击弹出拖动条面板(dsh-reasoning-effort 同款:胶囊轨道 + canvas 像素辐射 + 白色旋钮,连续跟手、松手吸附);原生下拉隐藏,拖完即时生效 | `python zcode_patcher.py --thought-slider [--check/--revert]` | app.asar(重打包级:注入脚本 + 挂载 index.html) | | 加宽模型弹窗 | 模型选择浮窗加宽,长模型名不再截断 | `python zcode_patcher.py --model-width [--check/--revert]` | app.asar 内主 bundle(同长度原地改字节) | | **增强提示词** | 输入框旁一键用当前选中模型润色草稿(可恢复原文) | `python zcode_patcher.py --enhance-prompt [--check/--revert]` | app.asar(重打包级:renderer 脚本 + index.html + preload 桥 + main IPC) | | 模型拉取按钮 | 设置页一键拉取/勾选模型 | `python zcode_patcher.py --model-puller [--check/--revert]` | app.asar(重打包级:renderer 脚本 + index.html + preload 桥 + main IPC) | @@ -684,9 +684,9 @@ python scripts/model_pull.py --test https://api.example.com/v1 [KEY] | 想换注入脚本逻辑 | 改 `scripts/zcode-model-puller.js` 或改 preload/main 注入构造器后重跑 `--model-puller` 即可——**四组件(renderer/preload/main/index)均按内容比对**,只更新与现行实现不一致的组件,无需 revert;`--check` 会显示「含旧版组件,重跑可自动更新」 | | 保存后档位丢失 | 正常不会(整读整写不重建条目);若用 ZCode 自带设置页保存过该 provider,属其重建路径剥掉 variants,重配 reasoning 即可 | -## 六、思考强度滑条:点击弹出的吸附拖拽条(Codex 风格) +## 六、思考强度滑条:点击弹出的拖动条(dsh-reasoning-effort 同款) -工具栏常驻「思考 · 档名 ▾」入口(带迷你电量条,造型同原生),点击弹出吸附拖拽条面板(260ms 弹出动效:模糊渐显 + 过冲缩放;填充条弹性扫入,分段逐级点亮,换档发射涟漪、档名脉冲,段级联弹入),拖拽/点击/←→键即换档,点外部或 Esc 收起;**原生「思考级别」下拉经 CSS 隐藏(单档位固定徽章除外),走原生切换链路,会话内即时生效、无需重启**: +工具栏常驻「思考 · 档名 ▾」入口(带迷你电量条,造型同原生),点击弹出拖动条面板(260ms 弹出动效:模糊渐显 + 过冲缩放;档名脉冲),拖拽/点击/←→键即换档,点外部或 Esc 收起;**原生「思考级别」下拉经 CSS 隐藏(单档位固定徽章除外),走原生切换链路,会话内即时生效、无需重启**: ```bash python zcode_patcher.py --thought-slider # 注入 scripts/zcode-thought-slider.js @@ -695,53 +695,50 @@ python zcode_patcher.py --thought-slider --revert # 整体还原 python zcode_patcher.py --thought-slider --slider-src /path/to/zcode-thought-slider.js ``` -### 样式规格(分段轨道) - -进度条 = 轨道 `.zslider-rail`(段容器)+ 每档一段 `.zslider-seg`(弱化底)+ 段内填充层 `.zslider-fill` -(width 0↔100% 即点亮)+ 拖尾光斑 `.zslider-flare` + 扫光 `.zslider-shimmer`;轨道占满整行(**无左侧图标**)。 -改样式只动 `ensureStyle()` 的样式表与内联几何,**不碰任何交互/提交逻辑**。 - -- **段数**:默认 = 可用档位数;`__zsliderCtl.setSegments(n)` 可强制(2–8 段)。档位→段位按 - `round(idx/(n-1)*(S-1))` 等比映射,点亮前 `lit+1` 段,`--zs-stagger`(i×45ms)让各段错开。 -- **主题**:颜色走 `--zs-*` 变量,判定顺序「应用主题类(`.dark`/`html.dark`/`body.dark`/`data-theme='dark'`)→ - 系统偏好 → 兜底」,与 TPS 同构。原实现只认 `prefers-color-scheme`,「应用深色 + 系统浅色」时轨道会 - 用浅色渐变压在深色面板上几乎看不见。 -- **几何**:厚度 `--zs-h`(16px,加粗胶囊)、段间隙 `--zs-gap`(5px)、段底色 `--zs-seg`、圆角统一 pill - (`--zs-r-pill`);触控(`pointer:coarse`)热区撑到 40px。 -- **立体光泽**:填充层 `.zslider-fill` 用「外投影 + 内高光/内压深」双层 `box-shadow`,再叠一个 - `::after` 纵向渐变(顶亮 → 中部透 → 底暗),避免加粗后成为整块平涂;段底 `.zslider-seg` 同样带 - `inset` 阴影,未激活时也有凹槽感。 -- **四态**(写在 `track` 的 `data-zs` 上,样式表按态下发):`loading` 段级联弹入(`zsSegIn`, - 延迟 40+i×35ms)+ 轨道扫光 → `dragging` 跟手增辉、逐段点亮不延迟 → `settling` 涟漪 - → `idle` 静止(max 档时最后一段的填充层外发光呼吸 `zsBreathe` 2.6s)。 -- **`data-thinking`(与 `data-zs` 正交)**:思考中 = `1`,激活段依次流动(`zsFlow`,周期 - `--zs-flow` = `CONFIG.flowMs`);空闲 = `0`,定格、rAF 停掉不空转。 -- **时长统一**:填充与光斑共用 `--zs-dur`/`--zs-ease`;拖拽时把 `--zs-dur` 置 `0ms` 跟手,松手移除恢复。 - `prefers-reduced-motion` 下时长归零、动画全关。 -- **响应式**:面板宽 `min(236px, 100vw - 24px)`;resize / 滚动时按 rAF 节流重新贴合入口。 -- **两个坑**:① `.zslider-seg` 的入场动画是**内联** `animation`,优先级高于样式表——所以 max 档呼吸 - 必须挂在**段内填充层**上,挂段盒子会被整个顶掉;② 重建段(切模型 / `setSegments`)时要 - `insertBefore(..., .zslider-shimmer/.zslider-flare)`,否则新段会盖住扫光与光斑。 +### 样式规格(1:1 复刻 HanaAyane/dsh-reasoning-effort,MIT) + +拖动条 = 32px 行 `.re-effort` + 30px 胶囊 `.re-effort-slider`(`--re-progress` 百分比驱动一切): +轨道 `.re-effort-track`(深色:暗夜蓝→紫渐变 `linear-gradient(100deg,#03040a…#5d35a0)` + 内高光; +浅色:浅蓝底 `#e5f0ff` + `::before` 进度填充,width = `--re-progress`)+ 特效层 `.re-effort-fx` +(canvas `.re-effort-canvas` 像素辐射 `drawRadiation`:4px 像素格能量柱 + 14 条拖尾粒子 + 旋钮径向辉光, +深色 screen / 浅色 multiply×0.78)+ 拖尾光斑 `.re-effort-flare`(78px 椭圆 + 十字辉光伪元素)+ +白色圆形旋钮 `.re-effort-knob`(28px,`clamp(14px,…)` 贴边)。 +类名与数值与上游 styles.ts 逐字一致,便于对照;改样式只动 `ensureStyle()`,**不碰任何交互/提交逻辑**。 + +- **主题映射**:上游 `body[data-ds-dark-theme]` ↔ 本插件 `panel.zs-dark`(打开面板时按 + 「应用主题类 → 系统偏好 → 兜底」判一次,与 TPS 同构);浅色分支即上游 + `body:not([data-ds-dark-theme])` 块逐条移植。canvas 的 isDark 逐帧读 panel 类。 +- **状态类(与上游同款)**:`is-dragging`(旋钮 scale 1.07 + 过渡归零跟手、canvas + saturate/brightness 增辉、粒子加速 2.8×)、`is-busy`(提交中 opacity .72)、 + `is-error`(未知档位描边)、slider `data-top`(顶端时轨道呼吸动画 `re-effort-*-breathe` + + 旋钮强泛光,深浅各一套 keyframes)。 +- **拖拽手感(上游同款)**:raw ∈ [0, n-1] **浮点连续**跟手(旋钮/光斑/canvas/档名预览实时跟随), + 松手 `Math.round` 吸附最近档位提交;提交期间 is-busy,失败回弹原档位并 console.warn。 + ←→/Home/End 直接提交一档(上游 onKeyDown 同款)。 +- **无障碍**:`prefers-reduced-motion` 下呼吸动画/跟手过渡全关,canvas 只画一帧(preview 变化补帧)。 +- **面板(本插件自有 chrome,非上游)**:宽 `min(236px, 100vw - 24px)`,玻璃渐变 + + backdrop-filter;标题行「思考强度 + 档名胶囊」;`outline:none` 压掉 `focus()` 的系统色焦点环。 + resize / 滚动按 rAF 节流重新贴合入口。 - **调试接口**:`__zsliderCtl.config`(直接改参数)、`.setThinking(true|false|null)`(手动锁定/恢复自动)、 - `.setSegments(n)`、`.refresh()`、`.state()`、`.diag()`。 + `.setSegments(n)`(已废弃,兼容保留)、`.refresh()`、`.state()`、`.diag()`。 ### 原理(纯 DOM 观测 + 原生回调,零协议逆向) 1. **读状态**:V4ComposerToolbar 渲染的隐藏 span(`className:"hidden"`)带 `data-thought`(当前档位)、`data-thought-levels`(该模型全部可用档位,逗号分隔)、`data-provider`/`data-model`,React 随会话实时更新——入口与面板 MutationObserver 监听其属性变化自动跟随原生操作(含 `t` 键循环切档),双向同步。 -2. **段数与档位动态**:取 `data-thought-levels`(off/minimal/low/medium/high/xhigh/max/ultra 等),模型配几档就几段,不硬编码;切模型导致档位数变化时段数跟着重建。 -3. **UI**:注入 `