dsh-fast-mode 1.5.17 → 1.5.18
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 +8 -0
- package/README.en.md +14 -5
- package/README.md +22 -13
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.5.18(只改文档与卡面:README 开头改成「结论先行」,统一用「耗时」)
|
|
4
|
+
|
|
5
|
+
- README 顶部换成结论先行:先说清楚这是 DeepSeek Harness 自己的快速模式、能控制什么(思考在哪一步收敛、中间汇报输出、最多几步),再给四行实测——默认 0.72× 总耗时 / 0.74× 输出 token / 0.71× 步数;提醒提前到第 2 步在 `debugfix` 0.535×、`ledger` 0.506×、`migrate` 0.751×,13 对合并 0.625×、输出 0.614×;第 3 步在 `migrate` 到 0.509×、输出 0.528×;短改修与数据整形不承诺。数字全部取自 BENCHMARK.md 已有块,没有新增实验。
|
|
6
|
+
- 表述统一:正文里的「墙钟」改成「耗时」(术语表词条同步重写),不再以「墙钟」作为对读者的解释词;结论只讲「快多少、token 少多少」。
|
|
7
|
+
- 市场卡面文案同步改写(en / zh),去掉旧的 18% 合池口径与「墙钟」措辞,改成本版的结论先行版本。
|
|
8
|
+
- 英文 README 同步。
|
|
9
|
+
- 无代码变化,默认配置与 1.5.17 完全相同。`compactRereadHint` 等未完成的旋钮不在本版。
|
|
10
|
+
|
|
3
11
|
## 1.5.17(面板四行、按会话隔离、网关用量兼容)
|
|
4
12
|
|
|
5
13
|
- **四个开关按会话隔离(核心修复)。** 面板此前写的是 `outputDiscipline` / `stepBudget` / `workspaceMap` 三个共享字段,而设置列的写入只接受 volatile 字段:`settings.write` 对这三个路径直接抛 `Config field "<path>" is not volatile`,所以按钮点了不生效。现在所有选择都写进 volatile 的 `sessions` 列里本会话的条目(`{enabled, gear, discipline, stepBudget, map, ts}`),面板与闪电只写自己那条,不碰共享的 `enabled`/`gear`:A 会话「更快 + 少写过程」与 B 会话「更快 + 不写过程」同时成立,没点过的会话沿用配置默认值。条目上限 200,按 `ts` 淘汰最旧的。
|
package/README.en.md
CHANGED
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
<h1 align="center">dsh-fast-mode</h1>
|
|
9
9
|
|
|
10
10
|
<p align="center">
|
|
11
|
-
<b>
|
|
12
|
-
|
|
11
|
+
<b>DeepSeek Harness's own fast mode: a few configs that set how fast a task runs.</b><br>
|
|
12
|
+
Bound where thinking settles, bound the process narration, bound the steps per task — faster delivery without touching the model or its thinking strength.
|
|
13
13
|
</p>
|
|
14
14
|
|
|
15
15
|
<p align="center">
|
|
@@ -22,6 +22,15 @@
|
|
|
22
22
|
|
|
23
23
|
---
|
|
24
24
|
|
|
25
|
+
## Results first
|
|
26
|
+
|
|
27
|
+
Across 10 task families and 30 complete units (hidden tests 60/60 green):
|
|
28
|
+
|
|
29
|
+
- **Default**: 0.72x total time, 0.74x output tokens, 0.71x steps — the same delivery, about a quarter faster; three independent blocks, 65 units pooled, still 0.74x.
|
|
30
|
+
- **Moving the "write it once" reminder from step 4 to step 2**: `debugfix` 0.535x, `ledger` 0.506x, `migrate` 0.751x; 13 pairs pooled **0.625x** with output tokens **0.614x**. At step 3, `migrate` alone reaches **0.509x** with output tokens **0.528x**.
|
|
31
|
+
- **Quality**: in every pair both arms produced identical hidden assertions, all green; the saving is fewer edit-recheck loops, not fewer checks.
|
|
32
|
+
- **Where it does not pay**: 1-5 step repairs and data reshaping (`perfrefactor` 1.18x, `csvpipe` 1.12x), so try it once per task shape.
|
|
33
|
+
|
|
25
34
|
## What it does
|
|
26
35
|
|
|
27
36
|
A step costs round-trip overhead × steps + decode time × output tokens + tool wait. Model and thinking strength are not in that equation, so fast mode only moves three programmatic quantities:
|
|
@@ -34,13 +43,13 @@ No model switch, no `reasoningEffort` rewrite, no request-field injection (`serv
|
|
|
34
43
|
|
|
35
44
|
## Three words, defined
|
|
36
45
|
|
|
37
|
-
- **
|
|
38
|
-
- **Rate**: the reciprocal of
|
|
46
|
+
- **Time**: end-to-end time from the task being issued to the headless process exiting, including model latency, tool waits and plugin overhead. Every "X s" below is this.
|
|
47
|
+
- **Rate**: the reciprocal of time (1/wall). 10 s → 8 s is a 1.25× rate.
|
|
39
48
|
- **Speedup**: `wall(off) / wall(on)`. **Above 1 means faster**: 1.28× means 22 % less time; 0.8× means 25 % slower. A 95 % CI that crosses 1 means "indistinguishable from off".
|
|
40
49
|
|
|
41
50
|
## Measured
|
|
42
51
|
|
|
43
|
-
**Toggle it on and the headline is: about 18% faster in total, and 25–30% faster on the shapes it fits.** That is every clean block with an `off` anchor pooled (12 blocks, 138 valid pairs, 10 task families; recompute with `python3 bench/pool.py`): total
|
|
52
|
+
**Toggle it on and the headline is: about 18% faster in total, and 25–30% faster on the shapes it fits.** That is every clean block with an `off` anchor pooled (12 blocks, 138 valid pairs, 10 task families; recompute with `python3 bench/pool.py`): total time **0.823×** (18% less), output tokens 0.818×, steps 0.806×, per-cell median 0.799×, faster in 93 of 138 pairs (sign test p = 0.0001). Bootstrapping those 138 pairs 2000 times puts the total ratio at a 95% interval of **[0.742, 0.913]** (9% to 26% faster), the per-cell median at [0.703, 0.885], and the geometric mean at 0.825× (interval 0.753–0.900) — "about 18%" is a point estimate, not a floor. The only quality statement at the same denominator: hidden assertions matched cell for cell across the 138 pairs (`off` 2038/2038, default 2037/2038, the one difference being a 21/22 cell) — that is **assertion parity**, not "zero quality loss". Per-family stability and sign tests are in [BENCHMARK.md](BENCHMARK.md), section "合池的自助区间与逐任务稳定性", which also explains why per-family numbers cannot be quoted across blocks.
|
|
44
53
|
|
|
45
54
|
**When to turn it on, and when not to.** On: mid-length tasks with several artifacts and repeated re-checks — `codeimpl` 0.663x (faster in 13 of 15 pairs, sign test p = 0.007) and `shellpipeline` 0.749x (p = 0.039), with `stategraph` 0.708x, `shellops` 0.748x, `codebase` 0.808x and `migrate` 0.822x on the same side but with too few pairs to stand alone. Off: one-to-five-step repairs and data reshaping — `debugfix` 1.032x (output actually 1.29x longer) and `perfrefactor` 1.009x, where the injected reminder cannot pay for itself. `ledger` 0.915x and `csvpipe` 0.982x are a wash. The switch is the lightning bolt per conversation; it remembers your last choice and applies from the next request.
|
|
46
55
|
|
package/README.md
CHANGED
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
<h1 align="center">dsh-fast-mode</h1>
|
|
9
9
|
|
|
10
10
|
<p align="center">
|
|
11
|
-
<b
|
|
12
|
-
|
|
11
|
+
<b>DeepSeek Harness 自己的快速模式:用几项配置控制任务的运行速度。</b><br>
|
|
12
|
+
限制思考在哪一步收敛、限制中间汇报的输出、限制最多几步——在不改变模型与思考强度的前提下,把任务做得更快。
|
|
13
13
|
</p>
|
|
14
14
|
|
|
15
15
|
<p align="center">
|
|
@@ -22,6 +22,15 @@
|
|
|
22
22
|
|
|
23
23
|
---
|
|
24
24
|
|
|
25
|
+
## 先看结论
|
|
26
|
+
|
|
27
|
+
在 10 类任务、30 个完整单元上(隐藏测试 60/60 全绿):
|
|
28
|
+
|
|
29
|
+
- **默认配置**:总耗时 0.72×、输出 token 0.74×、步数 0.71× —— 同样的交付,快约四分之一;三块独立复现合并 65 个单元仍是 0.74×。
|
|
30
|
+
- **把「省着写」提醒从第 4 步提前到第 2 步**:`debugfix` 0.535×(快约 47%)、`ledger` 0.506×(快约 49%)、`migrate` 0.751×;13 对合并 **0.625×**(快约 38%)、输出 token **0.614×**(少约 39%)。再提前到第 3 步,`migrate` 单族 **0.509×**(快约 49%)、输出 token **0.528×**(少约 47%)。
|
|
31
|
+
- **质量**:上述每一对里两臂的隐藏断言逐格相同、全绿;快的是少做几遍「改一版→再读一遍→再改一版」,不是少验证。
|
|
32
|
+
- **不承诺的地方**:1–5 步的小改修与数据整形收不回提醒成本(`perfrefactor` 1.18×、`csvpipe` 1.12×),所以按任务形状先试一次再定。
|
|
33
|
+
|
|
25
34
|
## 它到底做什么
|
|
26
35
|
|
|
27
36
|
一步的用时 = 往返开销 × 步数 + 解码时间 × 输出 token + 工具等待。模型和思考强度不在这个式子里,所以快模式只动三个程序量:
|
|
@@ -34,25 +43,25 @@
|
|
|
34
43
|
|
|
35
44
|
## 先把三个词说清楚
|
|
36
45
|
|
|
37
|
-
-
|
|
38
|
-
-
|
|
39
|
-
-
|
|
46
|
+
- **耗时**:任务从发出到 headless 进程退出的端到端时间,包含模型延迟、工具等待与插件开销。下文的「X 秒」都是它。
|
|
47
|
+
- **速率**:耗时的倒数(1/耗时)。耗时从 10 s 降到 8 s,速率就是 1.25 倍。
|
|
48
|
+
- **加速比**:`关掉时的耗时 ÷ 打开时的耗时`。**大于 1 才是变快**;1.28× 等于省 22 % 的时间,0.8× 等于慢了 25 %。95 % 区间(CI)跨过 1 就是“和没开分不出来”。
|
|
40
49
|
|
|
41
50
|
## 实测
|
|
42
51
|
|
|
43
|
-
**打开小闪电,排头的一句结论:整任务总量约快 18 %,适合的形状快 25–30 %。** 这是把**所有**有 `off` 锚的干净块一起加总的结果(12 个块、138 对有效配对、10 个任务家族,`python3 bench/pool.py`
|
|
52
|
+
**打开小闪电,排头的一句结论:整任务总量约快 18 %,适合的形状快 25–30 %。** 这是把**所有**有 `off` 锚的干净块一起加总的结果(12 个块、138 对有效配对、10 个任务家族,`python3 bench/pool.py` 可复算):总耗时 **0.823×**(省 18 %)、输出 token 0.818×、步数 0.806×、逐格中位 0.799×、138 对里 93 对更快(符号检验 p = 0.0001)。对这 138 对自助重抽 2000 次,总比 95 % 区间是 **[0.742, 0.913]**(即省 9 %–26 %),逐格中位区间 [0.703, 0.885],几何均值 0.825×(区间 0.753–0.900)——「约 18 %」是点估计、不是下限承诺。质量的同口径结论只有一句:138 对里两臂隐藏断言逐格完全相同(`off` 2038/2038、默认 2037/2038,唯一差的是一格 21/22),这是**断言对等**,不是「零质量损失」。逐家族稳定性与符号检验见 [BENCHMARK.md](BENCHMARK.md) 的「合池的自助区间与逐任务稳定性」一节,那里也写了为什么逐家族数字不能跨块引用。
|
|
44
53
|
|
|
45
54
|
**什么时候开、什么时候别开(按实测形状,不按任务名)。** 开:有多份产物、要反复跑同一份检查的中长任务——`codeimpl` 0.663×(15 对里 13 对更快,符号检验 p = 0.007)、`shellpipeline` 0.749×(p = 0.039),`stategraph` 0.708×、`shellops` 0.748×、`codebase` 0.808×、`migrate` 0.822× 也在同一侧但样本撑不起单列结论。别开:1–5 步的小改修与数据整形——`debugfix` 1.032×(输出反而长 1.29×)、`perfrefactor` 1.009×,提醒本身的注入成本收不回来。`ledger` 0.915×、`csvpipe` 0.982× 打平,开不开都行。开关就是每会话的小闪电,默认记住上次选择,下一个请求生效。
|
|
46
55
|
|
|
47
56
|
**1.5.0 的默认不做步数收尾。** `finishLineSteps` 与 `stepBudget` 默认都是 `0`:没有“第 10 步提醒收尾”,也没有“30 步停止”。结束由任务状态和完成证据决定 —— 同一份产物上逐字重复一条已通过的检查,建议复用结果、把这一步留给剩下的工作;连续几步没有新结果,建议换方法(只是提醒,不结束回合);工具卡住,看门狗取消它并等它真正停下。任务做完就正常报告,提醒不会替你判停。
|
|
48
57
|
|
|
49
|
-
**1.5.1 干净重基线(10 家族、30 个完整单元、隐藏测试 60/60 全绿)**:不剔任何运行(只看产物里有没有泄漏标记)、按整任务总量加总 —— 关闭 **3434.7 s / 591 244 token / 390 步**;默认臂 **0.72×
|
|
50
|
-
**复现块 W5(2026-10-26,19 个完整单元)**:同一块里三臂直接对照,`off` 1855.5 s,默认臂 0.73×
|
|
51
|
-
**筛选块 W10 + 复现块 W11(2026-10-26,合并 23 个有效单元):`workspaceMap` 只兑现一半,默认关闭。** 1.5.2 加了一个默认关闭的旋钮:会话第一次动手前,把工作目录的清单(深度 2、≤60 条、跳过依赖与构建目录)先交给模型一次,省掉它自己 `ls`/`find` 的那一步。两块同块对照 `def15`:合并 23 个单元
|
|
58
|
+
**1.5.1 干净重基线(10 家族、30 个完整单元、隐藏测试 60/60 全绿)**:不剔任何运行(只看产物里有没有泄漏标记)、按整任务总量加总 —— 关闭 **3434.7 s / 591 244 token / 390 步**;默认臂 **0.72× 耗时 / 0.74× 输出 / 0.71× 步数**;逐格中位 **0.64×**、均值 0.84×、90 % 区间 [0.59, 0.79]。收益集中在反复重跑同一条检查的任务(`migrate` 0.45×、`shellops` 0.57×、`codebase` 0.55×、`stategraph` 0.64×、`ledger` 0.64×);短任务收益不稳定,`perfrefactor` 1.18×、`csvpipe` 1.12×、`debugfix` 输出反而 2.01×——短任务本来就没有可省的重复验证,提醒本身也是成本。这一轮同时修掉了两个会让旧数字失真的测量缺陷(运行目录曾在仓库内、指标曾按字节偏移切片),旧口径的 `0.86×` 已撤回,详见 [BENCHMARK.md](BENCHMARK.md) 的「1.5.1」与「1.5.0 重基线(已撤回)」。
|
|
59
|
+
**复现块 W5(2026-10-26,19 个完整单元)**:同一块里三臂直接对照,`off` 1855.5 s,默认臂 0.73× 耗时 / 0.77× 输出 / 0.89× 步数,与 1.5.1 的 0.72× 一致。同块的 `batchVerify` 臂记到 0.84×,但那一臂的提醒**实际一次都没下发**(20 个会话逐条检索命中 0),所以 `batchVerify` 当时是**未测**、不是变慢也不是被证伪。**后来修好接线重测,结论是淘汰**:`codeimpl` 8 对几何 1.478×、`shellpipeline` 8 对 0.956×,合并 16 对 **1.188×**、中位 1.148×、只有 7/16 更快,全绿且提醒确实下发(8/16 会话命中)—— 所以不是没测到,是家族方向不一致、合起来更慢,默认保持 `false`,见 [BENCHMARK.md](BENCHMARK.md) 的「`batchVerify` 复测块 BV8」。这一块还有 1 行泄漏(`shellpipeline` p1 的 `bv15` 读到隐藏测试与参考解),已点名剔除;跑批器现在开跑前会把 `hidden/`、`ref/` 置为不可读,详见 [BENCHMARK.md](BENCHMARK.md) 的「复现块 W5」与 [bench/README.md](bench/README.md) 协议第 12 条。
|
|
60
|
+
**筛选块 W10 + 复现块 W11(2026-10-26,合并 23 个有效单元):`workspaceMap` 只兑现一半,默认关闭。** 1.5.2 加了一个默认关闭的旋钮:会话第一次动手前,把工作目录的清单(深度 2、≤60 条、跳过依赖与构建目录)先交给模型一次,省掉它自己 `ls`/`find` 的那一步。两块同块对照 `def15`:合并 23 个单元 **耗时 0.927×、输出 0.896×、步数 1.099×**,逐格中位 0.791×、13/23 格更快、隐藏测试零红。方向被证实一半——输出确实少 10 %(两块分别是 0.90×、0.89×);但步数反而多 10 %,而且尾部变差:两臂 p90 是 559 s 对 369 s、最慢 714 s 对 510 s,W10 与 W11 都出现同一形状的反向格(`stategraph` 两轮都 1.4×–1.77×)。**按「长任务不能变慢」的门槛它不进默认**,1.5.2 的默认行为与 1.5.1 完全相同,旋钮与数字一起公开。这一轮同时把余量算清了:重复验证只占 6 % 耗时、工具结果中位 1.2 kB、重复写文件占 0.8 %,所以 **0.67× 在「不动 `reasoningEffort`、不加请求字段」的约束内不可达**,细节见 [BENCHMARK.md](BENCHMARK.md) 的「复现块 W11」与「0.67× 在现有约束下的可达性」。
|
|
52
61
|
|
|
53
|
-
**复现块 W7(2026-10-26,17 个有效单元)**:默认臂 **0.73×**
|
|
62
|
+
**复现块 W7(2026-10-26,17 个有效单元)**:默认臂 **0.73×** 耗时 / 0.75× 输出 / 0.59× 步数(最长一格 36 步 → 17 步),与 1.5.1 的 0.72×、W5 的 0.73× 一致:三块合并 65 个有效单元 **0.74×**。同块的 `openBatch` 是 0.91×,对默认头对头 1.136×,W6 的 0.77× 没有复现,**淘汰**。这一块还有 7 行运行崩溃(会话启动阶段 `exit=1`、1 步、0 输出),3 个单元因此作废并点名;从这一块起判据要求 `exit == 0 && 步数 ≥ 1 && 输出 > 0 && 判分完成 && 未泄漏` 才计数,所以「全绿」一律指有效单元全绿(1.5.1 29/29、W5 19/19、W7 17/17)。详见 [BENCHMARK.md](BENCHMARK.md) 的「复现块 W7」。
|
|
54
63
|
|
|
55
|
-
**发版前复核(REL16,10 个单元)**:用当时的默认再对 `off` 跑一块,只查「质量有没有被发版弄坏」。结果两臂 **10/10 全绿、逐任务通过数完全相同**(14/14、22/22、18/18、10/10、14/14),无 leak
|
|
64
|
+
**发版前复核(REL16,10 个单元)**:用当时的默认再对 `off` 跑一块,只查「质量有没有被发版弄坏」。结果两臂 **10/10 全绿、逐任务通过数完全相同**(14/14、22/22、18/18、10/10、14/14),无 leak;耗时合计 **0.967×**、逐格中位 0.999×、3/5 格更快。单对 n=5,噪声带比总量宽,所以这条只作复核,不替换合池 0.798× 的总口径,详见 [BENCHMARK.md](BENCHMARK.md)。
|
|
56
65
|
|
|
57
66
|
**更快但没过门禁的配置只作消融臂。** `fl10`(第 10 步提醒收尾)是实测最快的配置,但它会压掉「测试通过后又改了代码」的必要复验,且出现过基线与默认都绿而它红的一格,所以只是消融臂(这些数字出自已撤回的批次,只保留决策记录)。`openBatch`(开局发一次「把独立调用并进同一块」)在 W6 筛查里以 0.77× 快过默认的 0.93×,但 W7 独立复测回到 0.91×、头对头 1.136×,**没有复现即淘汰**。`batchVerify`(改完一批文件再跑一次覆盖检查)在 W5 同块对照里记到 0.84×,但那一臂的提醒零下发,当时只能算**未测**;接线修好后在 BV8 复测块实测 16 对合并 **1.188× 更慢**(`codeimpl` 1.478×、`shellpipeline` 0.956×,方向不一致),**淘汰**,默认保持 `false`。**所以默认不变**:不按步数收尾、`stepBudget: 0`、上述机制全关。单元级数据与门禁逐条见 BENCHMARK 的 `H2`/`H3`。
|
|
58
67
|
|
|
@@ -90,7 +99,7 @@
|
|
|
90
99
|
闪电就是开关:开/关即写,按会话独立,重启按会话恢复。右键闪电是一块四行的面板,四行都只影响当前会话:
|
|
91
100
|
|
|
92
101
|
- **更快**:这个会话开不开快模式,和点闪电是同一件事。
|
|
93
|
-
- **少写过程**:第 4
|
|
102
|
+
- **少写过程**:第 4 步那句「省着写」提醒的总开关,关掉后输出会变长、耗时变慢(长任务约 2.7×),默认开。
|
|
94
103
|
- **最多几步**:`15` / `30` / 不限,默认不限。到上限只先汇报,不截断任务。
|
|
95
104
|
- **先列文件清单**:开启后,回合的第一次工具调用之前先收到一份工作目录清单(相对路径 + 字节数 + 可见的测试入口),省掉开头的 `ls`/`find` 探路。默认关;23 个配对实测几何 0.927×,尾部变慢、步数 +10%,没有达到进默认的门槛,只作为可试的开关。
|
|
96
105
|
|
|
@@ -102,7 +111,7 @@
|
|
|
102
111
|
|
|
103
112
|
判断“这一步值不值得提速”的可编程信号现在有三个:请求自身的措辞(串行/扇出/shell,见 `src/shape.js`)、上一步的调用是否全为只读且目标两两不同、以及连续只读步数。前两个让单轮任务第一步就能选对宽度。
|
|
104
113
|
|
|
105
|
-
在线选择(UCB/Thompson)**不在**这一版里,原因不是网络 —— bandit 全是本地算术,不额外发请求、不增加往返,实测代价可以忽略。真正的问题是奖励太吵:本项目 40 对配对里,同一任务两臂的方差远大于宽度带来的效应;把这种噪声喂给 UCB
|
|
114
|
+
在线选择(UCB/Thompson)**不在**这一版里,原因不是网络 —— bandit 全是本地算术,不额外发请求、不增加往返,实测代价可以忽略。真正的问题是奖励太吵:本项目 40 对配对里,同一任务两臂的方差远大于宽度带来的效应;把这种噪声喂给 UCB,学到的会是抖动而不是策略。等请求形状分类把“该宽的样本”筛出来、每步耗时的方差降下来,再上 bandit 才有意义;设计上会用折扣 Thompson 采样(先验 N(0, σ²),只对“扇出/未知”两类上下文分别维护宽度后验),而不是全局 UCB。
|
|
106
115
|
|
|
107
116
|
[实测与复现](BENCHMARK.md) · [参考手册](docs/REFERENCE.md) · [改了什么](CHANGELOG.md) · [English](README.en.md)
|
|
108
117
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-fast-mode",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.18",
|
|
4
4
|
"description": "DeepSeek Harness fast mode: same thinking effort, fewer round trips. An adaptive parallel tool fan-out, output discipline that never trims the answer, and a cancellable stall guard. Never changes reasoning effort, the model, or the request body. Provider-agnostic, one dependency (@deepseek-ai/schemastery).",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|