Skip to content

Releases: WestFox-AwA/dsh-wish-specializer

v0.9.0-beta-1

v0.9.0-beta-1 Pre-release
Pre-release

Choose a tag to compare

@WestFox-AwA WestFox-AwA released this 19 Oct 15:36

改名:产品显示名从「提示词优化器」改为「许愿特化器」(英文 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

Choose a tag to compare

@WestFox-AwA WestFox-AwA released this 15 Oct 10:48

六条线上 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

Choose a tag to compare

@WestFox-AwA WestFox-AwA released this 09 Oct 15:15

解释协议 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

Choose a tag to compare

@WestFox-AwA WestFox-AwA released this 06 Oct 16:52

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(说明已写)即视为"有说明",
      只有"既没丢条目、又没写说明"才报;并补正反两侧用例,确保判据没被架空。
  • #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。

已知未包含

  • #5 / #12 / #28:分别疑似扫描器误报、产物已演进的交互建议、推广内容,需答复后关闭,不需要改代码。

0.8.1-stable

Choose a tag to compare

@WestFox-AwA WestFox-AwA released this 02 Oct 16:49

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 动态取真值再比对 —— 写死字面量会在下次改名时静默通过。

其余修复

  • #22 readTools 恒报 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

Choose a tag to compare

@WestFox-AwA WestFox-AwA released this 01 Oct 18:20

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

Choose a tag to compare

@WestFox-AwA WestFox-AwA released this 29 Sep 08:52

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

Choose a tag to compare

@WestFox-AwA WestFox-AwA released this 27 Sep 06:27

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

Choose a tag to compare

@WestFox-AwA WestFox-AwA released this 26 Sep 13:38

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

Choose a tag to compare

@WestFox-AwA WestFox-AwA released this 26 Sep 03:47

修掉一个只有别人会踩到的缺陷:外部用户反馈「装上后 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 ⇒ 每次调用都返回「插件运行时模块加载失败」。

现象:工具在工具表里、参数也对,但完全跑不动。作者本机因为那个路径恰好存在,一直测不出来。

修法

  1. 去掉硬编码,改为多种候选位置运行时解析:
    裸包名 → DSH_CHECKOUT → %APPDATA%/npm → 从宿主入口脚本 argv[1] 反推 → node 同级的全局 node_modules;
  2. 全失败也不抛,降级到 spawn + taskkill /T /F 的等价实现(接口与 win32 作业对象版一致:
    pid / done / terminate / waitForExit / output);
  3. 新增 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 仓库地址与本机来源的说明性注释外,无任何作者机器路径。