Repository navigation
Releases: WestFox-AwA/dsh-wish-specializer
Release list
v0.9.0-beta-1
改名:产品显示名从「提示词优化器」改为「许愿特化器」(英文 Wish Specializer)。
包名、目录、API 前缀(po06)保持不变:它们是安装身份与状态路径,改名的收益是零、代价是迁移。
仓库名同步改为 dsh-wish-specializer(旧链接由 GitHub 301 重定向;0.5 的旧包
@dsh-external/dsh-prompt-optimizer是另一个包,不受影响)。
口径变化:优化器从「贡献解题方法」改成扩充愿望内容;顾问从「给建议」改成给必须执行的要求,
并且不再因为格式问题整份作废。另修一条 P0:卡片曾用自定义会话事件,导致会话重启后打不开。
- 界面与动效(本轮):选项面板重做(348 宽、分段控件改成"内嵌轨道 + 滑动药丸"、档位带主题特效:
轻度绿 / 标准蓝 + 无序飘动 / 重度紫 + 白色流星与右缘激浪);上下文行拆成"模式分段 + 自绘滑杆";
模型与思考档位换成自绘下拉(挂在 body 上,不再被裁剪);拦截面板改成果冻式逐组件入场,
发送/跳过各有收束曲线,正文用 clip-path 自上而下展开;所有弹层补齐退场(含!important的层叠修复)。 - 预设提示改版:不再依赖预设判定——启动/切会话时提示一次(一次运行最多一次),
在会话里把预设切到非 PTC/Wish 时 0.5 秒内再提示;「以后不再显示」写进设置后永久静默。 - 跳过提示:点「跳过并直接发送」时提示"双击 Enter 也能跳过"(开关开着也提示),两个出口同上。
- 帮助面板:标题/小标题加主题色竖条、引用块与表格行加主题色点缀。
- 优化器 = 愿望扩充器:补审美、光影与材质、构图与层次、场景与氛围、交互与体验、物理可信度方向、
验收口径;明确禁止给代码/数值/实现步骤。档位改为 2–3 条 / 4–6 条 / 全维度 + 阶段拆分。 - 顾问不再白跑:JSON 解析失败、verdict 非法、summary 缺失、贡献模式格式不齐,一律就地降级采纳
(verdict=unverified),只有输出为空才算失败;返回值带 directive(必须执行),并随注入文进上下文
(20 分钟 TTL)。提示词里写死「用户原话 vs 执行者提问」的区分与冲突裁决。 - 顾问读图已实测:附 ORBIT-7 探针图,顾问复述出词与版式。
- P0 修复:停止写自定义会话事件(宿主 fail-closed,插件无法设置 ignorable)。
卡片改用宿主已知的 command/run + command/done 作行锚,正文走插件自己的存储与 /po06/api/injection。 - 双击 Enter 跳过优化(默认开):600ms 内第二次回车=放弃本轮解释、按原文发出。
- 隐藏实验性「快速增强」:设置页与详情面板都不再渲染入口(代码保留)。
- 预设提示:当前会话不是 Wish / PTC 预设时,弹一次提示(主题色点缀 + 「知道了」「以后不再显示」);
「以后不再显示」写进持久设置presetNoticeDismissed。 - 视觉基线 v2(面板重设计):选项面板 348 宽、14/16 内距、行高 30、行距 8;
分段控件改成「内嵌轨道 + 实心药丸」;设置行右侧状态值改成药丸(开=主题色/关=空心);
用两条细线分组(替代小标题);行标签 fg2 12px。其余各面的层级见下。 - 视觉基线 v2(紧凑版):全插件共用一套层级(标题 12.5 / 主值 12 / 次值 11 / 操作 28px)、
间距(4/6/8/10/12)、圆角(8/10/12);面板 288 宽、12/14 内距;设置行改成左侧标签 + 右侧状态值
(开=主题色)的两段式色块行;分段控件选中态改成实心主题色;注入卡片浅底 + 左侧主题色条;
弹层 160ms 浮起、按压 0.5px;浮层只靠阴影与底色分层,描边极淡。 - 产品描述:根与
po06/的package.json描述改成「许愿特化器」口径(原来还写着"独立裁判层")。 - 修复 issue #35:evidencePathIdentity 在 Linux/macOS 上拒收一切绝对路径
(win32.isAbsolute('/tmp/...') 为真)。现在非 Windows 分支只拒收盘符与 UNC 路径,
root 内的 POSIX 绝对路径正常映射成相对键;新增 3 项跨平台钉桩。 - 修复 issue #36:turn305-parity.test.mjs 在参考树缺失时加载阶段抛错(干净检出/CI 恒红)。
现在缺参考树整份套件跳过并打印原因(exit 0),发版门 check-release 另行要求参考树存在。
v0.8.4-stable
六条线上 issue 修复与顾问闭环:解析被拒不再 no-packet、顾问真能引用「我读不到」、失败卡片交出已产出内容
发布 tag:
v0.8.4-stable。本版把 GitHub 上六个仍开着的条目(#29 ~ #34)逐条修掉,
并在「顾问给出的结论到底能不能用」这条链上做了一轮收口。不含协议重写,不改用户模型与权限。
顾问闭环(本版主线)
- 按具体主张核对证据:每条结论只对它实际引用的材料负责。未引用的补充材料即使被截断或缺失,也只是警告,
不再整体否决报告;被引用的截断材料仍必须完整定向补读。源码、截图与运行记录不互相冒充。 - 前版对照:同一任务、同一对象的后续改进可以看到实际已发送过的改前内容;文件变了只提示「需要比较」,
不把「文件不同」说成「采用成功」。keep合法,且不算验收通过。 - 逐轮交付旁注:按会话 + 事件序号重建该轮的复核状态,不用后续轮次覆盖旧答复,不读「完成了」作裁决,
不拦文件分享,也不自动追加模型回合。
修掉的线上条目
- #31 解析被拒时两级兜底不生效(真机一周 12 次「失败:no-packet」)——
BAD_JSON/BAD_OPTIMIZER_SHAPE现在与
「一个字都没吐」同等对待:先重试一次,仍坏则由宿主补一条如实说明的兜底条目(不发明任何新要求)。
真机 429/772 位置上多出来的}改由配对括号扫描取第一段完整对象解决。 - #32 顾问无法接受文件输入 —— 失败的 F 编号现在也登记进
evidenceIds,所以「我读不到这个文件」这句实话有了合法引用,
不再被整份判为advisor-invalid-citation;/po06/api/status也不再写死「只读未开」。 - #30 复核落账失败 + 失败卡片丢弃产出 —— 读痕迹按文件版本归并(同一文件读 5 段 = 1 行,改过的版本不会被吞),
不再撞 8 行上限而丢掉已通过的结论;失败/中断的卡片真的显示已产出的思考尾部与查证记录,
「保留部分内容」的标题也改成只在真拿到内容时才出现。 - #33A 非 delivery 下
requiredScopes/requiredReviews误拒 —— 这两个参数只在delivery生效,
非 delivery 下是纯 no-op,原先却按硬错误拒掉整次调用(真机某会话 21 连败 0 成功)。
现在非 delivery 一律放行,delivery 内的非法值仍被拒,且理由带上当前值、允许取值与正确用法。 - #33B 英文模式翻译中断 —— 容忍围栏/散文/尾部垃圾的翻译 JSON 提取、有界重试(永久错误与已取消不重试),
每条失败路径都带attempts台账;英文后处理失败不再把整轮判死。 - #34 顾问无产出时干等满熔断 —— 新增空闲判死:只在连续没有任何正文/思考增量与查证事件时才结束(默认 90 秒),
有任何产出即重置。这不是总截止(默认仍不设总截止),DSH_PO06_ADVISOR_STALL_MS=0可完全关闭。 - #29 安装分发 —— 本插件按设计不发 npm,安装器因此回落到 git 安装;README 增加排查表,
并修掉两处会直接害人的文档错:下载直链用了旧包名(必 404)、以及一句过期的「本版是预发布」。
顺带修掉的真实缺陷
- 变异门一条锚点长期失效:
eval-e001.js的写入被包进 try/catch 后旧锚点永远匹配不上 —— 那条守卫此前等于不存在。 - 两条只在作者机成立的变异期望:
answer-audit.test.mjs的 4 条真实产物用例读的是作者机路径,在别的机器上
静默跳过还计入通过。现在跳过显式记账(skipped字段),期望片段补上跨机器的合成用例名。 - 界面作用域静态守卫误报:
props.sessionId与对象字面量的键不再被当成自由引用(判据本身没有放松)。 - 打包位置:Release 附件必须从
po06/打。从仓库根打出的薄壳文件名相同但结构不同,产物核对会报「多 244 / 少 241 / 不同 2」。 RELEASING.md指向一个不存在的发布脚本,且基线数字停在 71 套 / 209 项 —— 已改正并补上打包位置对照表。
验证(本机实跑,不是估计)
| 项 | 结果 |
|---|---|
发版门 check-release.mjs |
PASS(0 阻断) |
| 测试 | 104 套 / 1141 项 / 0 失败 |
| 变异门 | 234 个 / 漏捕 0 |
| 打包自足性 | PASS(63 个 lib 模块) |
| 文档漂移门 | PASS |
产物核对 verify-artifact.mjs |
PASS:243 个成员、63 个 lib 模块、逐字节不同 0、版本四处一致 |
安装
$v = '0.8.4-stable'; $d = "$env:USERPROFILE\Downloads"
Invoke-WebRequest "https://github.com/WestFox-AwA/dsh-prompt-optimizer/releases/download/v$v/dsh-external-dsh-arbiter-wf-$v.tgz" -OutFile "$d\dsh-external-dsh-arbiter-wf-$v.tgz"
Invoke-WebRequest "https://github.com/WestFox-AwA/dsh-prompt-optimizer/releases/download/v$v/SHA256SUMS-$v.txt" -OutFile "$d\SHA256SUMS-$v.txt"
Get-Content "$d\SHA256SUMS-$v.txt" # 与下载到的 tgz 对 sha256
dsh plugin --profile po061 add "$d\dsh-external-dsh-arbiter-wf-$v.tgz"装完在面板上把档位拨到 标准 或 重度(关闭 档不拦截、不注入)。
已知限制(不夸大)
- 未做性能跑分:这是正确性与可用性修复,不声称更快或产物必然更强。
- 顾问在只声称「满足」却没有任何结果类证据时仍会整份拒绝 —— 这是刻意保留的防线,不是漏改。
- 顾问 claim 路径在超过 8 个真实文件版本时会保留前 8 条:不影响判定、也不放行,但那份截断尚未在状态里显式记账。
- 英文后处理降级后,最终包是否仍满足「英文内部协作」只有单元级证据,未做端到端复现。
0.8.3-stable
解释协议 v3:更短的优化协议、机器建议不再越权,并修掉两处只在特定机器/ Node 版本上才暴露的失败
发布 tag:
v0.8.3-stable。本版重写了发送前那一轮的优化解释协议:把工程字段从模型手里拿回来,
让模型专注"读懂你的意图 + 贡献有价值的补充"。同时修掉三处只在特定机器/Node 版本上才暴露的失败。
解释协议 v3(本版主线)
- 更短、更专注的协议:模型只收到「共用核心 + 当前档位 + 薄输出格式」(需要时再加只读/语气/英文段)。
中文普通组合:轻度 596 / 标准 599 / 重度 639 字符——此前是三段叠加的数千字符。 - 输出改为
intent/clarify/add/ask:本轮意图、表达澄清、正向补充与建议、需要反问的点。
条目 ID、来源绑定、状态补丁、逐字引文比对由宿主负责,不再要求模型填写这些工程字段。 - 原意权威不变,但不再靠"逐字引文"一刀切:你的原话独立保留、原样发出;模型产出的澄清与建议始终是机器建议,
不会被放进"用户明说"那一类。引文比对仍用于旧格式,且继续按条丢弃而不是整份作废。 - 三档按用途区分(不再靠条数、字数或问题配额):轻度=把原意讲清楚、消除歧义、指出必要反问;
标准=澄清表达并补足影响结果最大的缺口;重度=围绕已有目标做全方位正向补充、构思与方法,并呈现实质取舍。 - 零增量是合法结果:没有值得补充的内容时不再硬造条目、也不再因为"空"而重试。
- 旧上限取消:新路径不再受 12 条 / 300 字 / 提问配额约束;长建议与多条反问完整进入上下文与审查面板。
- 英文模式改用原生英文协议:不再"自定义译文 + 英文内置协议"叠加;忠实任务翻译与新增建议分开,
代码块、路径、URL、JSON 与精确回话继续逐字保留,用户自己的语言要求原样保留。 - 界面可核对:详情里同时给出「当前设置的完整组合预览」与「本会话最后一次实际发送的协议、字符数与思考档位」,
预览明确标注不是实测请求。拦截浮层继续流式显示新格式的理解、澄清与建议。 - 本机旧默认提示词精确迁移:只在与内置旧默认逐字节相同时替换,替换前原样备份;
真正改过的自定义文本一律保留(并继续接受旧格式输出)。
修复
- CI 在旧 Node 上必然红(真实缺陷):
read-session.mjs用具名导入取 zstd 解压 API,
而该 API 是 Node 22.15+/23 才有 ⇒ 在 Node 20 上整个模块链接失败,连"优雅报错"的机会都没有。
改为命名空间导入 + 能力探测:有就走原逻辑,没有就如实说明缺什么并跳过(附带静态守卫禁止退回具名导入)。 - 安装检查依赖机器上装了
dsh:装配层验证要跑一次--dump-config,而 CI runner 上没有这个命令 ⇒
那条"无法验证装配层 ⇒ 阻断"的纪律会把测试夹具一起判死。现在dsh命令可注入(--dsh/DSH_PO06_DSH),
单测自带桩命令;同时只在包确实装上了才去验证装配层(没装就跳过,不再制造噪声阻断)。
纪律本身没放松:跑不了dump-config仍然阻断,并新增一条用例钉住它。
工程
- 发版门、CI、套件、变异守卫继续共用同一套计数口径;本轮计数见
po06/eval/release-check.json。
未验证 / 不声称的部分
- 没有做专业跑分,也没有"更快"的结论。协议变短不等于模型更快:思考档位、上下文与任务本身都会影响耗时。
- 新协议不保证建议一定更好或更少跑偏;它保证的是"不再把工程字段与逐字引文强加给模型",
以及"机器建议不会冒充用户要求"。实际价值需要你在同一任务上对照三档自行判断。
0.8.2-stable — 英文模式、推理增强(实验性)与发布门修复
发布 tag:
v0.8.2-stable。本版把上一节遗留的 issue 修复(#23 / #25 / #26 / #27 / #14)一并带上,
并新增英文模式、实验性推理增强,以及一组发布门与文档修复。
新增
- 英文模式(默认关闭):面板里与「权限」同款两档滑档。把用户任务、优化策略与辅助文转成英文再送给模型,
界面仍为中文;状态里的要求正文回到原话语言(英文那份只作注入口径),关掉英文模式后状态照样可读。- 逐字保护:代码块、内联代码、
@"路径"、URL、Windows/POSIX 路径、JSON 字面量与精确回话不参与翻译; - 翻译与辅助解耦:过期输入或已取消的请求不会发出去;翻译失败只回落一次,并保留真实失败原因;
- 斜杠命令不参与翻译;允许列表内的命令(如
vmake)照旧走拦截审查(本轮曾因放行条件写错而漏拦,已修并加回归)。
- 逐字保护:代码块、内联代码、
安装:见仓库 README 的「30 秒装上」片段;附件含 tgz 与 SHA256SUMS.txt。
未验证(如实登记):没有做专业跑分,也没有"更快"的结论;协议变短不等于模型更快。
新协议不保证建议一定更好,它的保证是"工程字段不再压给模型"与"机器建议不会冒充用户要求"。
0.8.2-stable
0.8.2-stable — 英文模式、推理增强(实验性)与发布门修复
发布 tag:
v0.8.2-stable。本版把上一节遗留的 issue 修复(#23 / #25 / #26 / #27 / #14)一并带上,
并新增英文模式、实验性推理增强,以及一组发布门与文档修复。
新增
- 英文模式(默认关闭):面板里与「权限」同款两档滑档。把用户任务、优化策略与辅助文转成英文再送给模型,
界面仍为中文;状态里的要求正文回到原话语言(英文那份只作注入口径),关掉英文模式后状态照样可读。- 逐字保护:代码块、内联代码、
@"路径"、URL、Windows/POSIX 路径、JSON 字面量与精确回话不参与翻译; - 翻译与辅助解耦:过期输入或已取消的请求不会发出去;翻译失败只回落一次,并保留真实失败原因;
- 斜杠命令不参与翻译;允许列表内的命令(如
vmake)照旧走拦截审查(本轮曾因放行条件写错而漏拦,已修并加回归)。 - 不添加答复语言要求:答复用什么语言由模型按你的话决定;需要中文就在原话里说。
- 逐字保护:代码块、内联代码、
- 推理增强(实验性):置于选项面板最底部并单独分界,含多候选择优 / 循环改进 / 混合三种模式与快速-均衡-跟随三档强度;
「推理过程」面板只在开关打开时出现。面板内写明了真实代价:目前无法确定它能否稳定提升模型能力,但会大幅增加模型工作时间,请谨慎开启。
工程
- CI(本版新增):
.github/workflows/ci.yml+po06/scripts/run-suites.mjs(与发版门同一条调用方式与计数口径,
受限环境自动选择可写临时目录)。套件与发版门从此在每次推送时自动运行,不再依赖人手。 - 变异守卫修复:两个变异体的锚点仍写着旧节标签 ⇒ 变异从未被应用,而门禁把它报成"未被捕获",方向完全相反。
已修锚点并逐条实测确认会红;门禁现在把「锚点失效(守卫等于不存在)」与「变异未被执行捕获(测试变弱)」分开报。 - 清理:删除已被内联取代的重复模块(
lib/bash/client.js、lib/bash/bash-tool-contract.mjs);
未接线的lib/bash/runtime-integrity.mjs保留并写明,新增用例钉住"一旦接线就会红"。
修复
-
#23 内置 Bash 在 win32 上把
HOME显式指向真实用户目录(此前落在自带 MSYS2 运行时内不存在的目录)。- 症状:插件内
git config --global --get <key>永远读到空——静默返回 1,不报错、不崩、日志里什么都没有;
同一台机器、同一个用户,插件内外是两份不同的"全局配置"。 - 根因:spawn 的 env 只有
{...process.env}+PATH,没有HOME;MSYS2 在被非 MSYS 父进程启动时兜底成
/home/<账户>,而本私有 root 的/就是po06/runtime⇒ 落点<plugin>/runtime/home/<user>,该目录不存在、也没人创建。 - 修法:
win32且本次运行时来源是自带 bundle 时才接管;取值DSH_BASH_HOME→USERPROFILE
→HOMEDRIVE+HOMEPATH→os.homedir()。Git for Windows / 系统 MSYS2 /DSH_BASH_PATH/ 显式config.bashPath
一律不动(它们各自已把 HOME 映射到用户目录)。 - 来源:PR #23(作者 @deadbushxw);本机已复现(
HOME=/home/WestFox、git config --global返回 1)并验证修复。 - 取舍(如实写明):内置 Bash 不经 ACL 沙箱,交出真实用户目录意味着
~/.ssh、~/.gitconfig、~/.netrc在其可及范围内。
本版选的是"配置可用性与插件内外一致",不是隔离;需要隔离的用户请设DSH_BASH_HOME。
- 症状:插件内
-
#27 按会话拨档位(
bySession)也写启用意图。- 症状:新装后"进会话 → 在面板拨档位",闸门永远
gate:rollout-off,界面报"失败:gate:rollout-off",
用户看到的是"插件装了却什么都不做"。 - 根因:面板切档位走的是
save({ bySession: … }),而写启用意图的判据只认顶层tier|assist|detail|budget
四个键(#16 的修法只覆盖了全局那条路)。 - 修法:按会话的档位写入同样补
enabled:true+rollout:{mode:'all'};只开不关——把某一场设为"关闭"
不代表整个插件要关,那条不写 gate;只改framing这类非档位项依旧不碰启用意图。
- 症状:新装后"进会话 → 在面板拨档位",闸门永远
-
#26 发版门同时认两种套件风格。
- 症状:
check-release.mjs恒 FAIL,43 项阻断里 38 项是"输出无法解析"。 - 根因:门把每套的整段 stdout 当一行 JSON 解析,而仓库里并存两种风格——自研 runner(结束时吐一行 JSON)与
node:test(吐ℹ pass N汇总行)⇒ 后者一律被判为无法解析。 - 修法:新增
readSuiteSummary()/lastJsonObject()——先试末尾 JSON,再试ℹ/TAP 汇总行;两者都不认才记 unparsable;
并补"自述 fail=0 却非零退出按失败处理"。变异检验与打包演练同样改为末尾 JSON 读法。
- 症状:
-
#25 审计判据读进编译器自己写的【预算不足】降级说明。
- 症状:发送条目较多的长消息时,前置拦截报"失败:no-packet"(消息按设计原样发出),台账该条
outcome=audit-failed packetChars=0 packetOverBudget=true packetOverBy=36;而 11 秒后同一轮的
生产路径却committed、packetChars=1171—— 内容本身合格,只有前置那一步被拒。 - 根因:审计规则是
chars > budget && dropped.length === 0,而这种情况恰恰就是compose()
写【预算不足】的唯一场合(必保内容本身超预算、可丢节全空)⇒ 判据漏读自己写下的降级说明,
合规产物必被整包拒收(报错文字里的 "and no explanation" 是假的)。 - 修法:与编译器口径对齐——
overBudget/overBy > 0(说明已写)即视为"有说明",
只有"既没丢条目、又没写说明"才报;并补正反两侧用例,确保判据没被架空。
- 症状:发送条目较多的长消息时,前置拦截报"失败:no-packet"(消息按设计原样发出),台账该条
-
#14 认出 DSH Desktop 的路径形态 profile 位置参数。
- 症状:桌面端不传
--profile,把 profile 目录当位置参数交给 desktop-host;那些参数含分隔符 ⇒ 被名字正则挡掉
⇒resolveProfileName回落默认web,而进程实际跑的是desktop。于是"旧插件是否仍在装配"的判断问的是
另一个 profile,双重拦截守卫可能给出相反结论(与 EV-0081/EV-0121 同形:不报错、只给错答案)。 - 修法:裸子命令之后追加一轮路径形态候选——取末段并用
profileExists证伪,不写死profiles目录名;
--profile X/--profile=X/ 裸子命令的优先级不变。 - 来源:#14(该 PR 基于旧 main,本轮只移植这一条特性并补当前基线的回归用例;未整体套用,
以免回退reasoningEffort等后续改动)。真机 argv 前后对照:修前web/修后desktop。
- 症状:桌面端不传
已知未包含
0.8.1-stable
0.8.1-stable · 装配修复版
装了
0.8.0-preview的请换这一版 —— 那一版的客户端半侧根本不会激活。
这一版修了什么
根因(重要):0.8.0-preview 的产物里,package.json 已经是 @dsh-external/dsh-arbiter-wf,但 lib/client.js 的注册 id、lib/index.js 的 export const name 与 PRODUCER_KIND 还是旧名 @dsh-external/dsh-po06。宿主按包名生成 boot row id,并且只在该 id 下找注册 ⇒ 报 loaded without registering,客户端半侧整个不激活:面板、卡片、设置页都不会出现。本版把三处标识连同 cordis.patch.yml 的条目名一并改齐。
- 这与 DSH 版本无关:同一份产物在
0.1.7上同样注册不上。0.7.8及更早的产物名字一致,所以只有装了0.8.0-preview的用户会中招。 - 新增门禁测试
po06/test/identity.test.mjs:包名、client 注册 id、export const name、PRODUCER_KIND、装配条目名从package.json动态取真值再比对 —— 写死字面量会在下次改名时静默通过。
其余修复
#22readTools恒报no-packet:判定是否工具包只用了子串匹配,混着散文的 JSON 会漏判,改用与流水线相同的extractJson。#17每次 bash 调用都刷could not find /tmp警告:改为注册期与每次执行入口都确保内置运行时的/tmp存在。#16面板里把档位从 off 调回可用后插件仍是关的:writeSettings没有任何路径把enabled写回 true,改为按档位联动门禁。#19切换会话后悬浮球与拦截面板状态不同步:改为模块级 hold 桥,并保证卸载时不再 abort 正在进行的回合。#18浮层被右侧预览栏压住:改为排布方案 —— 量输入卡片得到「会话窗」边界,浮层整块收在窗内,会话列变窄时跟着变窄;右侧栏若是不压缩会话列的固定浮层,另有一条保守探测取它的左缘当边界。
新能力
- 拦截面板产出层流式显示:生成过程中实时显示产出层中间结果并标注「正在生成 · 尚未校验」、只读;校验完成后才切成可编辑的最终报文。
兼容性(如实写清边界)
- 本机实测运行环境:
dsh-0.1.7-rc.2。 dsh-0.2.0-rc.2:只做了静态契约核对,没有实机跑过。 对 0.2.0-rc.2 的实际产物逐成员对照:模块加载契约、dsh.client清单、四个插槽、工具与卡片注册、clientModules/systemPrompt/sessionProjections/webServer/agents/llm/attachments/commands一致;19 个接触包中 14 个的类型声明与 0.1.7 逐字节相同,另外 5 个的差异全是追加或可选参数,不触本插件调用点。详见仓库内docs/DSH-0.2-COMPAT.md。- 因此本版不宣称「已支持 0.2 / 已在 0.2 验证」。 已知的待验项:0.2 的插件装配路径是否仍接受本包的 patch + junction 形态、桌面端是否复用
platform:"web"客户端、session中「中断工具调用修复」带来的运行时行为差异。
安装
$v = '0.8.1-stable'; $d = "$env:USERPROFILE\Downloads"
Invoke-WebRequest "https://github.com/WestFox-AwA/dsh-prompt-optimizer/releases/download/v$v/dsh-external-dsh-arbiter-wf-$v.tgz" -OutFile "$d\dsh-external-dsh-arbiter-wf-$v.tgz"随后在 DSH 的插件管理里选择该 tgz 安装(或按仓库 README 的说明装配)。安装后重启 DSH,面板与卡片才会出现。
附件
dsh-external-dsh-arbiter-wf-0.8.1-stable.tgz—— 插件包本体SHA256SUMS-0.8.1-stable.txt—— 校验和
0.8.0-preview
dsh-arbiter-wf 0.8.0-preview
更名首版:插件由 dsh-po06 更名为 dsh-arbiter-wf(wf = WestFox)。配置与台账文件名不变(po06.json、po06-state/、po06-wire.jsonl、po06-advisor-ui.json),旧设置无需迁移;内部路由前缀 /po06/api 与 DSH_PO06_* 环境变量保持兼容。
本版内容
- 独立顾问 consult_task:分阶段专项复核(形体与装配 / 画面观感 / 代码 / 交互 / 性能 / 交付覆盖 / 自定义)、交付前覆盖核对、文件与图像材料的真实传递
- 内置 Bash 可靠性整改:取消接线、每次调用独立输出、失败保留 stdout/stderr、句柄释放、有界日志、探测可取消并短期缓存
- 斜杠命令允许列表 slashReview:仅名单内且宿主确认已注册的命令走「拦截 → 优化 → 可编辑确认」
- 顾问卡片 token 计数修复:页脚原先恒显占位符,现显示合计与 入/出/缓存
- shell 选择判据改写:删除未实测的 pwsh 偏好,改按命令性质给判据
- 发布工具链:verify-artifact 的 tar 调用在 MSYS GNU tar 与 Windows bsdtar 下均可移植
安装
$v = 0.8.0-preview; $d = "$env:USERPROFILE\Downloads"
Invoke-WebRequest "https://github.com/WestFox-AwA/dsh-prompt-optimizer/releases/download/v$v/dsh-external-dsh-arbiter-wf-0.8.0-preview.tgz" -OutFile "$d\dsh-external-dsh-arbiter-wf-0.8.0-preview.tgz"
Get-Content "$d\SHA256SUMS-$v.txt" # 与下载到的 tgz 对 sha256
dsh plugin --profile po061 add "$d\dsh-external-dsh-arbiter-wf-0.8.0-preview.tgz"校验
- sha256:
44bffe2e2a71b166d88767244001dd6e629dfd2b597f7dc340c39fad7f31ad35 - 产物与 tag v0.8.0-preview 逐字节一致(225 个成员 / 45 个 lib 模块);仓库自带核对器 verify-artifact.mjs 判决 PASS;71 套测试全绿(209 项,bash 与 pwsh 两种 shell)
边界(如实保留)
- 真实 Win32 Job 行为、脱离父链的 MSYS 子孙清空、真实模型识图效果均未由本轮测试证明
- 本版不含性能跑分结论;效果测试计划后续单独进行
0.7.8
v0.7.8 — 会话级档位 · 交互框架(硬邦邦)· bash 调用质量判定
这一版是三件事叠在一起:档位终于按会话、多了一档会改变语域的协作基调、bash 调用开始当场判值不值。
一、档位改为会话级(修「点一次正常,之后固定」)
此前:在优化选项里连点两次档位,第二次开始界面就不动了。
成因:点档位是合并写入,而宿主早先把 tier 展开成 assist/detail/budget 后存了回去;
于是第二次点击时,新的 tier 会与上一次展开的陈旧三项合并,读取时那三项盖过新预设 ⇒ 推导档位不变。
第一次之所以正常,是因为覆盖是空的、没有残留可覆盖。
现在:存意图、读取时展开——存储里只留用户写的 tier,展开挪到读取时;点档位时整份替换该会话的覆盖。
档位与协作基调都按会话存,全局只作默认值。
二、新会话首条消息挑错模型
agentDefaultModel 的真实方法是 currentSelection(),而代码里试的是 current/read/get/selection——
四个全不存在 ⇒ 兜底到「模型清单第一条」,用与会话无关的模型去优化。已修正(实测该方法返回的正是 {provider, model})。
三、交互框架(协作基调):普通 / 硬邦邦
依据:同样字数的正式提示词做不到口语版的效果 ⇒ 起作用的是语域,不是信息量。
正式语域会把整包带回「专业助手」那一簇(客套、求稳);口语+高唤醒语域带回「把活干出来」那一簇。
- 骨架归代码:标签 / 语域 / 越权反制行——三条不变量,模型无权改,且边界行永远在最后;
- 加码归模型:按本轮实际情况写,长度自定,要求定点爆破(点名这一单的交付物与最可能做歪的点);
- 必须引用包内真实条目 id:写不出引用就整段不采用、退回纯骨架;
- 两类例外保持字面、不许修辞:未决项(没拍板的事说清楚)、防御性限制(不许做什么、范围边界)。
四、单轮提升(第一次就把事做对)
- 新增【完成前自检】节:来自代码持有的任务类知识(第一批:单文件可交互 3D/可视化程序);
来源是project_convention而非 human ⇒ 结构上不可能升格成用户要求。 - 质量解释要求落到「可肉眼判断的维度 + 最低可接受线」;新增【结构性分叉】规则。
五、bash 调用质量判定
- 长等待 / 低产出:耗时与字节当场交回(工具一直知道这两个数,却从没告诉过模型);
- 链结构:段数 ≥3 且用了吞错型连接符(
;|||)⇒ 点明「中间某段失败了你看不出来」; - 重武器 + 替代路径:命中无头浏览器 / 装包 / 网络下载 / 重构建时,直接给能照做的更省做法;
- 崩溃/中止探测器:调用被外层掐掉(
AbortError)时工具交不出任何东西,故落「进行中」标记,
下一次调用开头点明「上次没有正常收尾、那次等待是纯损失」。
⚠ npm 上
@dsh-external/dsh-prompt-optimizer与本插件无关,本插件不发 npm(private: true),只用 Release 附件。
安装
$v = "0.7.8"; $d = "$env:USERPROFILE\Downloads"
Invoke-WebRequest "https://github.com/WestFox-AwA/dsh-prompt-optimizer/releases/download/v$v/dsh-external-dsh-po06-$v.tgz" -OutFile "$d\dsh-external-dsh-po06-$v.tgz"
dsh plugin --profile web add "$d\dsh-external-dsh-po06-$v.tgz"附件含 tgz 与 SHA256SUMS,请核对。
回归:57 套测试全绿。
0.7.6
v0.7.6 — 长输入修复 · bash 让位 · 文档归入 docs/
两处用户反馈:几万字提示词必然失败、关掉内置 Bash 后系统自带的 bash 也回不来。
一、几万字提示词不再失败
此前:提示词几万字时,面板报「失败:连不上宿主服务(它可能刚重启)」。
根因(两处叠加):
① 请求体上限只有 64KB,代码注释的理由是「设置/指令都很小」——这个前提不成立:
同一个读取函数也服务解释端点,而那个 body 里装的是你的原文。
中文一字 3 字节 ⇒ 64KB ÷ 3 ≈ 21800 字即撞墙(实测 39123 字 ≈ 117KB)。
② 超限时直接销毁连接而不是回 HTTP 错误 ⇒ 浏览器看到的是「连接断开」⇒
界面把它显示成「连不上宿主服务」——真因被彻底盖掉。
现在:上限 64KB → 2MB(约 66 万汉字);超限不再砍连接,
而是如实回一个可读的原因(请求过大 + 实际字节数)。
顺带修正同链路另一处旧尺度:注入上下文时的单段上限 4000 → 6000、总预算 12000 → 24000。
(该常量只作用于「存进会话历史、供后续轮次当上下文」的那份文本;
本轮解释走的是逐字原文,从不截断。)
二、非 Windows 平台:关掉内置 Bash 会退回系统那个 bash
此前:系统自带 bash 的用户(觉得原来那个更好)关掉内置 Bash 后,DSH 里彻底没有 bash。
根因:宿主自带的 bash 工具注册的名字也是 bash,而宿主官方配置里写着
disabled: process.platform === 'win32'——只在 Windows 禁用它,
所以 Linux/macOS 上宿主本来就提供 bash。而本插件此前无差别注册了同名工具,
把宿主那份顶掉;宿主只在装配时注册一次、被顶掉后不会重试 ⇒ 一关内置就再没有 bash。
现在:按平台让位——非 Windows 平台本插件不注册该工具,
于是关掉开关就回到宿主那个 bash(正是「原来的更好」那种用法);
Windows 上宿主被官方禁用,本插件照旧补位,行为不变。
三、仓库结构:文档归入 docs/
仓库根由 27 项降为 10 项,只留对外门面(README ×2 / LICENSE / CHANGELOG)与必需文件,
其余文档移入 docs/ 并按用途分组,新增 docs/README.md 索引。
同步修正引用,并顺带修掉一处早已存在的死链(README 指向的 README-0.5.md 已移入 old/)。
⚠️ npm 上的@dsh-external/dsh-prompt-optimizer是 0.5 老包,本插件不发 npm(private: true)。
安装
$v = "0.7.6"; $d = "$env:USERPROFILE\Downloads"
Invoke-WebRequest "https://github.com/WestFox-AwA/dsh-prompt-optimizer/releases/download/v$v/dsh-external-dsh-po06-$v.tgz" -OutFile "$d\dsh-external-dsh-po06-$v.tgz"
dsh plugin --profile po061 add "$d\dsh-external-dsh-po06-$v.tgz"附件含 tgz 与 SHA256SUMS,请核对。
回归:50 套测试全绿。
0.7.5
v0.7.5 — 思考档位按模型各配 · token 与拦截修复 · 仓库结构整理
这一版来自两类反馈:思考档位不生效(用户实测)与仓库结构混乱
(外部用户:npm 上是 0.5、Release 是 0.7、而 0.7 在子目录)。
一、思考档位:按模型各配,并真正传给调用
此前:po06 调 llm.stream() 时从不传 reasoningEffort,于是每次都走 provider 默认档,
而默认档下由模型自己决定要不要思考 ⇒ 你看到"有时有思考、有时没有"。
插件里其实早有这个设置项,但它只出现在迁移清单里,从未接线。
现在:
- 按模型各配(不同模型档位划分不同,且优化模型与会话模型未必是同一个);
- 优化选项里新增「思考档位」下拉,两种模式都能配——选了具体模型就按它查,
「跟随会话模型」就先问宿主这个会话用的是哪个模型再按它查; - 档位与官方同源:读宿主
resolveModelInfo的reasoning.efforts、写同一个reasoningEffort字段,
不存在第二套档位名。
实测对照(同一模型、同一输入,只差档位):
| 档位 | 耗时 | 思考字数 |
|---|---|---|
off |
7 秒 | 0 |
max |
63 秒 | 40589 |
注意:只有
deepseek-flash/deepseek-v4-pro这类模型提供档位;
其余模型宿主不给档位,下拉会如实显示"默认(不指定)"。
二、修「档位选完立刻被覆盖」
根因:键格式三处不一致——前端用 JSON.stringify([provider, model])、后端校验要求键含 /、
wire.js 查表用 provider/model。于是每次保存都被判非法、丢弃并回默认。
现在:前端改为 provider/model,三处口径统一。
三、修「拦截 UI 不再统计 token」
根因:用量只在解释完成那一刻写进进度面,而界面一离开"优化中"就停止轮询并清空进度面,
最后那次写入永远拉不到(那行代码与其上方注释的意图正好相反)。
现在:轮询放宽到"优化中"与"审查"两种状态;收尾时把最后一份用量钉在结果上;
显示改为"结果优先、进度面兜底"。
四、修「调 skill 时漏拦截 + 旧包迟到、新包随后才到」
根因(两处叠加):① 去重判据只认文本逐字相等,而拦截侧记的是客户端原文、
订阅侧取的是宿主事件文本,调 skill 时两者形态不一致 ⇒ 去重失配 ⇒ 同一句话被解释两遍;
② 第二遍是并发执行的,两遍基于同一旧状态各写一次,后完成的覆盖先完成的
(台账实测 revision 从 309 倒退到 307——正是"先到一份旧的、随后才到一份新的")。
现在:判据增加时间窗——刚放行后 15 秒内无论文本是否变形都认定为同一条;
两种跳过在台账里分开记,使"这轮为什么没解释"始终可查。
五、仓库结构整理
- 仓库根 = 最新版:0.1~0.6 的历史产物全部移入
old/,根目录不再有.tgz与旧源码,
old/README.md给出各代简介与三种下载方式; - 根
package.json改为薄壳(逐字段从po06/package.json派生)。
此前它曾是 0.5.x 的完整插件包,而安装入口读的正是仓库根 ⇒ 外部用户按仓库地址装到的是 0.5; - 新增
RELEASING.md:四条不变量 + 9 步发布流程 + 可照抄的检查清单; - README 写明安装来源:唯一正确来源是 Release 附件。
⚠️ npm 上的@dsh-external/dsh-prompt-optimizer是 0.5 老包,本插件不发 npm(private: true)。
安装
$v = "0.7.5"; $d = "$env:USERPROFILE\Downloads"
Invoke-WebRequest "https://github.com/WestFox-AwA/dsh-prompt-optimizer/releases/download/v$v/dsh-external-dsh-po06-$v.tgz" -OutFile "$d\dsh-external-dsh-po06-$v.tgz"
dsh plugin --profile po061 add "$d\dsh-external-dsh-po06-$v.tgz"附件含 tgz 与 SHA256SUMS,请核对。
回归:49 套测试全绿。
0.7.4
修掉一个只有别人会踩到的缺陷:外部用户反馈「装上后 bash 跑不起来」。
根因:写死了打包者本机的绝对路径
lib/bash/pg-jobport.mjs 顶部是:
const WIN32_URL = "file:///C:/Users/<打包者>/AppData/Roaming/npm/.../dsh-win32-process/lib/index.js";
const win32 = await import(WIN32_URL);
而且是顶层 await import。别人机器上这个路径不存在 ⇒ import 抛错 ⇒ 整个模块加载失败 ⇒
index.js 的 load('pg-jobport.mjs') 落进 catch ⇒ 每次调用都返回「插件运行时模块加载失败」。
现象:工具在工具表里、参数也对,但完全跑不动。作者本机因为那个路径恰好存在,一直测不出来。
修法
- 去掉硬编码,改为多种候选位置运行时解析:
裸包名 →DSH_CHECKOUT→%APPDATA%/npm→ 从宿主入口脚本argv[1]反推 → node 同级的全局node_modules; - 全失败也不抛,降级到
spawn+taskkill /T /F的等价实现(接口与 win32 作业对象版一致:
pid/done/terminate/waitForExit/output); - 新增
DSH_BASH_FORCE_FALLBACK=1强制降级开关,便于自测与排障。
所以现在的能力是按环境浮动的:拿得到宿主的 Job 原语就用它(终止彻底);拿不到也能跑(终止尽力而为)。
实测两条路径(同一台机器)
| win32 路径 | 强制降级(模拟他人环境) | |
|---|---|---|
| mode | win32-job |
fallback-taskkill |
| 解析来源 | %APPDATA%/npm(推导,非写死) |
无 |
| 执行 | exitCode:0 / 输出正确 |
exitCode:0 / 输出正确 |
| 超时终止 | terminated=true |
terminated=true |
诚实说明:降级路径的终止靠 taskkill /T,而 MSYS 的 fork 会让个别孙进程脱离父链——
这是已知弱点(也正是 win32 作业对象要解决的问题)。但「偶尔漏杀」远好于「完全跑不起来」。
顺带清掉产物里的其它本机痕迹
runtime/manifest.json的source:D:/other/Git→bundled(该字段无消费者,纯元数据);- 调试时遗留在
runtime/tmp/的 3 个 json(我把运行时当过临时目录)已删除。
产物复核:解包 tgz 后全量扫描,除 GitHub 仓库地址与本机来源的说明性注释外,无任何作者机器路径。