feat: zcode thinking-mode 0.3.0(state历史+rollback+分写+校验收紧+34用例全绿+文档)

This commit is contained in:
2026-09-21 09:47:20 +08:00
commit 6ed5dda847
41 changed files with 6213 additions and 0 deletions
@@ -0,0 +1,31 @@
---
description: 思考模式默认值(查看/设置/清除:不带参数时 set 用哪个档位、status 用哪个模型)
argument-hint: [set --variant <档位>] [--model <模型名>] | clear
---
用 Bash(Windows 用 git-bash)运行:
```bash
THINK_SCRIPT="${ZCODE_THINKING_SCRIPT:-$(find ~/.zcode/plugins -maxdepth 4 -name thinking.mjs -path '*thinking-mode*' 2>/dev/null | head -1)}"
[ -n "$THINK_SCRIPT" ] || THINK_SCRIPT="$(find ~/.zcode -maxdepth 8 -type f -path '*thinking-mode/scripts/thinking.mjs' 2>/dev/null | head -1)"
[ -n "$THINK_SCRIPT" ] || { echo "找不到 thinking.mjs:插件未安装或不在默认位置,可用 ZCODE_THINKING_SCRIPT 指定路径"; exit 1; }
node "$THINK_SCRIPT" defaults $ARGUMENTS
```
三种用法:
- `defaults`(不带参数)→ 看当前默认档位/默认模型,以及它们的来源
- `defaults set --variant high [--model GLM-5.3]` → 写入落地文件
- `defaults clear` → 删掉落地文件,回到内置兜底
**为什么要这个命令**:`plugin.json` 里的 `userConfig` 在设置界面能填,但宿主只把
`${user_config.*}` 插值进 MCP server 字段与 hook,**命令正文拿不到** —— 所以脚本自己读
`~/.zcode/zcode-thinking-mode.json` 这份落地文件,那两个配置项才有实际作用。
优先级:**命令行参数 > 环境变量(`ZCODE_THINKING_VARIANT` / `ZCODE_THINKING_MODEL`) > 默认值文件 > 内置兜底**。
设了之后:`set` 不带档位就用默认档位;`status`/`variants` 不带 `--model` 就用默认模型。
**把脚本输出原样展示给用户**,包含写入的文件路径与内容。
用户附加要求:$ARGUMENTS
@@ -0,0 +1,31 @@
---
description: 自检:安装是否完整、两个写入目标是否可写、node:sqlite 是否可用(只读)
---
用 Bash(Windows 用 git-bash)运行(**只读,不改任何东西,不写档位**):
```bash
THINK_SCRIPT="${ZCODE_THINKING_SCRIPT:-$(find ~/.zcode/plugins -maxdepth 4 -name thinking.mjs -path '*thinking-mode*' 2>/dev/null | head -1)}"
[ -n "$THINK_SCRIPT" ] || THINK_SCRIPT="$(find ~/.zcode -maxdepth 8 -type f -path '*thinking-mode/scripts/thinking.mjs' 2>/dev/null | head -1)"
[ -n "$THINK_SCRIPT" ] || { echo "找不到 thinking.mjs:插件未安装或不在默认位置,可用 ZCODE_THINKING_SCRIPT 指定路径"; exit 1; }
node "$THINK_SCRIPT" doctor $ARGUMENTS
```
检查项(每项 `✓ ok` / `⚠ warn` / `✗ fail`,失败项附可执行的修复建议):
- **Node 版本 / node:sqlite** — 热档位那一半依赖 `node:sqlite`(需 Node ≥22.5);
导入失败时热档位写不了,只能改模型配置
- **模型配置** — 能否读到、JSON 是否合法、有几个模型声明了 `reasoning`
- **热档位库** — 文件在不在、能否打开、有没有 `local_setting` 表(缺表说明不是有效的 session 库)
- **当前热档位** — 库里现在的值;没有这行也会如实说明,不假装读到
- **默认值** — 默认档位/默认模型及其来源(环境变量/文件/未设)
- **写入能力** — 模型配置是否可写、能否在配置目录写备份、默认值目录是否存在
退出码:有 `fail` 时为 1。
用法场景:**用户说"切不了/切了没效果/报错"时先跑这个**,再把 `fail` 项与修复建议照实告诉他,
不要自己猜。想知道"怎么回滚"也可以先跑它,备份可写性就在检查项里。
**把脚本输出原样展示给用户**。
用户附加要求:$ARGUMENTS
@@ -0,0 +1,19 @@
---
description: 查看思考模式切换历史(时间/旧值→新值/分写标记/备份路径)
---
用 Bash(Windows 用 git-bash)运行:
```bash
THINK_SCRIPT="${ZCODE_THINKING_SCRIPT:-$(find ~/.zcode/plugins -maxdepth 4 -name thinking.mjs -path '*thinking-mode*' 2>/dev/null | head -1)}"
[ -n "$THINK_SCRIPT" ] || THINK_SCRIPT="$(find ~/.zcode -maxdepth 8 -type f -path '*thinking-mode/scripts/thinking.mjs' 2>/dev/null | head -1)"
[ -n "$THINK_SCRIPT" ] || { echo "找不到 thinking.mjs:插件未安装或不在默认位置,可用 ZCODE_THINKING_SCRIPT 指定路径"; exit 1; }
node "$THINK_SCRIPT" history $ARGUMENTS
```
每次 `set` 成功都会在历史文件(`~/.zcode/zcode-thinking-mode-state.json`,保留最近 50 条)
追加一条:时间戳、旧热值→新热值、分写标记(`仅热`/`仅持久`/`热+持久`)、作用模型、备份路径。
**把脚本输出原样展示给用户**。
用户附加要求:$ARGUMENTS
@@ -0,0 +1,22 @@
---
description: 回滚到上次思考模式切换之前(热档位与持久默认都写回去)
argument-hint: [--steps N]
---
用 Bash(Windows 用 git-bash)运行:
```bash
THINK_SCRIPT="${ZCODE_THINKING_SCRIPT:-$(find ~/.zcode/plugins -maxdepth 4 -name thinking.mjs -path '*thinking-mode*' 2>/dev/null | head -1)}"
[ -n "$THINK_SCRIPT" ] || THINK_SCRIPT="$(find ~/.zcode -maxdepth 8 -type f -path '*thinking-mode/scripts/thinking.mjs' 2>/dev/null | head -1)"
[ -n "$THINK_SCRIPT" ] || { echo "找不到 thinking.mjs:插件未安装或不在默认位置,可用 ZCODE_THINKING_SCRIPT 指定路径"; exit 1; }
node "$THINK_SCRIPT" rollback $ARGUMENTS
```
- 按历史文件最新一条把**全局热档位**与**持久默认**(仅历史里记录过的模型)写回去
- 回滚本身不删历史,可多次回滚;`--steps N` 可一次退 N 步
- 写模型配置前同样留备份;热档位写失败时模型配置不动
**把脚本输出原样展示给用户**——含回滚目标时间、写回的两边值、备份路径与
"当前会话补一行 `/effort <档位>` 即热切"提示,不要省略。
用户附加要求:$ARGUMENTS
@@ -0,0 +1,26 @@
---
description: 切换思考模式档位(low/max/high,可加 --model 只改单个模型,可加 --hot-only/--persist-only 分写)
argument-hint: <low|max|high> [--model 模型名] [--hot-only|--persist-only]
---
用 Bash(Windows 用 git-bash)运行:
```bash
THINK_SCRIPT="${ZCODE_THINKING_SCRIPT:-$(find ~/.zcode/plugins -maxdepth 4 -name thinking.mjs -path '*thinking-mode*' 2>/dev/null | head -1)}"
[ -n "$THINK_SCRIPT" ] || THINK_SCRIPT="$(find ~/.zcode -maxdepth 8 -type f -path '*thinking-mode/scripts/thinking.mjs' 2>/dev/null | head -1)"
[ -n "$THINK_SCRIPT" ] || { echo "找不到 thinking.mjs:插件未安装或不在默认位置,可用 ZCODE_THINKING_SCRIPT 指定路径"; exit 1; }
node "$THINK_SCRIPT" set $ARGUMENTS
```
- 不带 `--model` → 改**全部**带 reasoning 的模型(或默认值文件里指定的那个)
- 不带档位参数 → 用默认值文件里的默认档位;两处都没有会明确报错,不会瞎猜一个档位就改配置
- 校验是整批收紧的:档位不在全部目标的 variants 并集里(如 `ultra`)直接拒绝,两边都不写;
目标里只要有一个模型不支持该档位,**整批中止**,不做部分切换
- `--hot-only` 只写热档位(不碰模型配置);`--persist-only` 只写模型配置(不碰热档位);两者不能同时用
- 改写模型配置前会在同目录留备份 `config.json.bak-<yyyyMMdd-HHmmss>`;
回滚用 `/thinking:rollback`(按切换历史把两边写回去),或把备份拷回去
**把脚本输出原样展示给用户**——含热档位切换结果、持久默认改动、备份路径与"当前会话补一行 `/effort <档位>` 即热切"提示,不要省略。
失败时把报错原文带上(尤其"模型 X 不支持档位 Y(可选:…)"),它已经说明了哪个模型、支持哪些档位。
用户附加要求:$ARGUMENTS
@@ -0,0 +1,16 @@
---
description: 查看各模型的思考模式现状(当前默认档位与可选档位)
---
用 Bash(Windows 用 git-bash)运行:
```bash
THINK_SCRIPT="${ZCODE_THINKING_SCRIPT:-$(find ~/.zcode/plugins -maxdepth 4 -name thinking.mjs -path '*thinking-mode*' 2>/dev/null | head -1)}"
[ -n "$THINK_SCRIPT" ] || THINK_SCRIPT="$(find ~/.zcode -maxdepth 8 -type f -path '*thinking-mode/scripts/thinking.mjs' 2>/dev/null | head -1)"
[ -n "$THINK_SCRIPT" ] || { echo "找不到 thinking.mjs:插件未安装或不在默认位置,可用 ZCODE_THINKING_SCRIPT 指定路径"; exit 1; }
node "$THINK_SCRIPT" status $ARGUMENTS
```
**把脚本输出原样展示给用户**。
用户附加要求:$ARGUMENTS