Repository navigation
Releases: xbzbing/dsh-decision-layer
Releases · xbzbing/dsh-decision-layer
Release list
v0.7.0
主要变更
- 各决策点的介入阈值全部可配置:新增
gateSettings.minConfidence(门控拦截置信度,默认 0.6,原为硬编码常量)、checkSettings.minConfidence、completeSettings.minConfidence(默认 0.4);配置页补上原先只能手改config.json的rubric、lowScoreThreshold、trendMinConfidence/trendRun/trendSevereRun、minConditions、batchMode。门控阈值改为按次解析,改配置即生效、无需重启。 - 配置写坏不再让每个工具调用失败:
featureOn位于宿主tools/pre-execute瀑布内,抛错会被转成toolErrorResult且工具不派发——写错一个配置值就会失去全部工具(含read/edit,连修配置都做不到)。现在配置读取失败退化为「全部功能开启 + 各决策点自己的安全默认」,安全网保持有效,同时不拖垮 agent。 - 产物移出仓库,发布交给 GitHub Actions:
lib/不再提交,npm pack前由 CI 构建,scripts/assert-pack.mjs断言产物含lib/client.js且无源码泄漏。新增 CI(Node 22/24)与release.yml(仅手动触发、默认dry_run=true)。破坏性:不带 ref 的github:xbzbing/dsh-decision-layer安装不再可用,GitHub 侧请用 Release 附件 tgz。 - dock 触发器与官方上下文用量指示同时出现:会话还没有上下文读数时这一行是空的,不再单独露出「决策」按钮。
- 配置项校验更明确:
rubric不足 2 档 / 超 10 档 / 单档超 256 字时给出具体提示并阻止保存,不再静默替换或截断;保存失败会带上服务端原因。 - 新增架构决策记录:
docs/adr/收录 13 份 ADR(门控两档模型、失败即放行与爆炸半径、配置整段替换、收窄三重保护、分发渠道等),说明每条规则为什么存在、放弃了哪些备选。
验证
npm test:226 通过 / 0 失败npm run build:client:tsc严格模式 + esbuild 无告警scripts/assert-pack.mjs:打包产物 27 个文件、lib/client.js存在且非空,无源码 / 测试泄漏- 回归判别力抽查:去掉
featureOn兜底后「非法配置不炸工具调用」测试立即变红;去掉 dock 门控后「新会话隐藏」测试立即变红
English
- Every intervention threshold is now configurable: new
gateSettings.minConfidence(danger-gate block confidence, default 0.6, previously a hardcoded constant),checkSettings.minConfidenceandcompleteSettings.minConfidence(default 0.4); the config page now exposes what previously required hand-editingconfig.json—rubric,lowScoreThreshold,trendMinConfidence/trendRun/trendSevereRun,minConditions,batchMode. The gate floor is resolved per call, so a config edit takes effect without a restart. - A broken config no longer fails every tool call:
featureOnruns inside the host'stools/pre-executewaterfall, where a throw becomes a failed call with the tool never dispatching — one bad value used to cost every tool, includingread/edit, so the file could not even be repaired. An unreadable config now degrades to "all features on plus each decision point's own safe default", keeping the safety net armed without taking the agent's tools away. - Build output moved out of the repository; releases run in GitHub Actions:
lib/is no longer committed, CI builds it beforenpm pack, andscripts/assert-pack.mjsasserts the tarball carrieslib/client.jsand leaks no sources. Adds CI (Node 22/24) and a manual-onlyrelease.ymlthat defaults todry_run=true. Breaking: installinggithub:xbzbing/dsh-decision-layerwithout a ref no longer works; use the Release tarball instead. - The dock trigger appears together with the official context meter: while a session has no context reading yet, the row stays empty instead of showing a lone "decisions" button.
- Clearer config validation:
rubricwith fewer than 2 levels, more than 10, or a level over 256 characters now blocks the save with a specific message instead of being silently rewritten or truncated; a failed save also surfaces the server's reason. - Architecture decision records added:
docs/adr/holds 13 ADRs (two-tier gate, fail-open with a bounded blast radius, wholesale config replacement, narrowing safeguards, distribution channels), recording why each rule exists and what was rejected.
Verification
npm test: 226 passed / 0 failednpm run build:client: stricttsc+ esbuild cleanscripts/assert-pack.mjs: 27 files packed,lib/client.jspresent and non-empty, no sources or tests leaked- Regression discrimination spot-check: removing the
featureOnguard turns the invalid-config test red; removing the dock gate turns the fresh-session test red
v0.6.4
主要变更
- 自检主题剥离注入的记忆上下文:此前自检「请求主题」会把本回合注入的
<openviking-context>记忆块一并拼进turnUserText,日志主题里混入「… Relevant memory…」这类噪声。现先在subjectOf中剥离所有完整(支持多个、跨行)与未闭合的记忆块,只保留用户真实请求;剥离后无实质内容则不记主题。 - 自检主题改用散文式显示:请求主题由等宽「命令药丸」样式改为专用
decision-log-subject散文样式(次级色 + 斜体 + 「」括注),与日志里的命令/路径明确区分。 - 文档:中文 tev1 部署指南新增「量化权衡(省资源时必读)」小节,含三档量化对比表、三个危险样本上 q4_K_M 门控从
ask滑到allow的实测退化及门控影响分析;英文版同步 q4_K_M 量化与门控退化说明(样本对照表 + 性能表列),中英文内容核对一致。
验证
- 全量 206 项测试通过(
node --test tests/*.test.mjs),含新增剥离测试:完整块 / 未闭合块 / 仅记忆→无主题。 npm run build:client构建通过,重建后lib/client.js与已提交的客户端改动一致(无 diff),GitHub 安装拿到的 bundle 为最新。
v0.6.3
主要变更
- 门控日志带上脱敏命令/路径:此前门控记录只存工具名,日志里只有「门控 · bash」,无法判断拦的是哪条调用。现把已脱敏的命令/路径一并写入每条门控日志(拒绝 / 放行 / 失败三出口都带),面板与决策分析页在工具名后内联显示(预览截断、完整内容在悬浮提示,秘钥仍做脱敏)。
- 自检日志带上请求主题:此前自检记录只有「自检」二字,评审时无法分辨得分属于哪一轮请求。现把本回合用户请求的单行摘要(折叠空白、上限 120 字)写入每条自检日志(ok / low / error 三出口都带),面板在「自检」标签后内联显示(预览 60 字、完整内容在悬浮提示)。
验证
- 全量 205 项测试通过(
node --test tests/*.test.mjs)。 npm run build:client构建通过,lib/client.js已随客户端改动重建并提交。
v0.6.2
主要变更
- 过程画像卡片重设计为行式布局,彻底消除标签换行错位:此前多列并排时每个数字格列宽过窄(约 43px),而「失败回退」等 4 字标签约 46px 必然折成两行、与兄弟格错位——是列宽随列数挤压的结构性问题。现每个指标改为整行呈现(标签左、数值居中、百分比右对齐成列),标签宽度不再受列数影响,任意列数 / 计数位数 / 标签长度都不再折行或错位。
- 纯 CSS,仅作用于分析页
.decision-analysis;composer-dock 的 modal 面板保持原紧凑列式布局不变。
验证
- 无头 Chrome 渲染前后对比确认(三列 + 3 位数 + 长标签场景均不折行、不错位)。
- 全量
npm test202 passed(纯样式改动,TSX 未变)。
升级提示
client 侧改动,更新插件后需重启 dsh web 并刷新页面生效。
v0.6.1
主要变更
- 决策分析页「决策日志」共用页面滚动并分页:分析页日志不再有独立滚动条,随页面滚动;可翻看该会话全部落盘历史(不再受内存最近 50 条限制),每页 100 条倒序,附「上一页 / 第 X/Y 页 · 共 N 条 / 下一页」。modal 面板的「决策日志」仍保持独立滚动不变。
- 新增只读分页接口
/logrows:按会话 id 去重取最新、倒序分页;返回行仅含面板字段(工具名 / 结果 / 计数),绝不含 gate 的 command/path(那些只发后端、从不入日志)。
- 新增只读分页接口
- 过程画像数字格错位修复:决策次数升到 3 位数(如 124 / 243)时,数字格不再因变宽把末格挤到第二行。数字格行由 flex 改为 grid 等宽列、数字不折行、标签底对齐。
验证
- 全量
npm test202 passed(新增/logrows路由、listSessionDecisions分页、分析页分页客户端测试)。 - 过程画像修复以无头 Chrome 渲染前后对比确认(3 位数场景末格不再换行)。
升级提示
client 侧改动,更新插件后需重启 dsh web 并刷新页面生效。
v0.6.0
主要变更
- 同一会话决策指标持久化:面板实时指标(dock 计数、各决策点卡片、最近决策日志)在实例重启后不再归零。每个会话的实时状态按会话 id(非端口)另存一份快照到
~/.config/dsh-decision-layer/state/<会话id>.json,每次计数变化防抖写盘、原子落盘、保留 30 天;会话 id 做路径段白名单校验防目录穿越。 - 恢复时自动续算:同一会话恢复时优先读该快照续算;若尚无快照但有历史决策日志(早于本机制、或快照已被清理的会话),则跨全部端口按会话 id 从日志重建种子续算——顺带消除了换端口导致历史被孤立的隐患。
- 唯一例外:gate 的「实际结果」(观测到的放行 / 拒绝)日志未记录,重建会话该项从零重新累计;其余所有计数均无损。
- 写盘全程尽力而为,任何失败都不会进入决策路径。
验证
- 全量
npm test196 passed(新增 state-store 7、session-state 5、log-analyze 2,dsh effect 计数断言 4→5)。 - 以本机真实 JSONL 日志重建种子,逐项与「决策分析」页聚合吻合(87 决策、check 42、narrow applied 36 / dropped 266)。
升级提示
host 侧改动,需重启 dsh web 后生效;当前会话重启后将从历史日志重建,不再显示为 0。
v0.5.6
主要变更
工具收窄新增 batchMode(auto/single/split,默认 auto),按后端上下文容量自适应分批请求:
auto:先整批请求判全部工具;遇上下文超限 http-error 自动降级为「逐工具并发请求」并记住,之后直接拆分,不再反复探测。single:始终整批(适合大上下文后端如 Jev,保持单次调用)。split:始终逐工具(适合小上下文后端如本地 tev1,约 2050 token 单请求上限)。- 逐工具请求失败时该工具保守保留,全部失败才报后端错误。
修复 narrow 在小上下文后端整批请求超限导致的 http-error。
验证
- 183 项单测通过(较上版 +6)。
build:client通过。- 本地 tev1:4b 对 16 / 30 / 50 工具端到端验证:不再
http-error,全部 evaluated。
v0.5.5-dsh-decision-layer (体验版)
主要变更
修复插件详情页「基础功能」开关的两个体感问题。
- 基础功能开关即时生效:危险门控 / 产出自检 / 工具收窄 / 任务完成核对四个开关现在拨动即保存(乐观更新、失败回滚),不再需要点「保存高级配置」,也不再有保存按钮之说,和输入框面板的会话总开关一致。
- 修复跨区保存重置开关的 bug:此前点「保存配置」(后端区)或「保存高级配置」会用服务端旧值整体回填,把用户刚拨动、尚未保存的开关弹回原状。现在每个保存按钮只回填自己那一区的字段,互不干扰——保存后端配置不再重置基础开关,保存高级配置也不再重置未保存的后端编辑。
纯前端行为修复,不改变任何决策逻辑,安全不变量维持不变。
验证
- 177 项 Node 测试通过(
npm test),较上版新增 2 项(开关即时保存只发 features 全集、失败回滚),并更新了受影响的高级保存用例。 - 客户端
npm run build:client通过,lib/client.js随源码提交。 npm pack --dry-run共 26 个文件,仅运行时资产。- peer 依赖:主包
@deepseek-ai/dsh >=0.1.7-rc.2、@deepseek-ai/cordis ~4.0.4。
v0.5.4-dsh-decision-layer(体验版)
主要变更
针对「自检低分但置信度极低」的体感优化:这类记录是模型没把握的随口打分,容易被误读为真实质量下降。
- 低置信低分标为可忽略噪声:自检得分偏低、但置信度低于质量趋势门槛(
trendMinConfidence,默认 0.6)时,决策日志中该行文案改为「得分偏低(低置信)· 噪声,可忽略」,hover 有完整解释(模型对这次打分几乎没有把握,不计入质量趋势、也不触发任何补完)。 - 视觉区分:这类行的左侧强调条与结论文字改用中性灰,不再与真实低分共用琥珀色 warn,避免误读为质量问题。
- 判定与系统行为一致:只有「高置信低分」才推进质量趋势告警、才可能触发补完;低置信低分本就是纯观测噪声。真正值得关注的仍是连续多次高置信的低分。
纯展示与标注优化,不改变任何决策行为,安全不变量维持不变。
验证
- 175 项 Node 测试通过(
npm test),较上版新增 2 项(服务端 noise 标记正负例、客户端噪声行文案与中性灰样式)。 - 客户端
npm run build:client通过,lib/client.js随源码提交。 npm pack --dry-run共 26 个文件,仅运行时资产。- peer 依赖:主包
@deepseek-ai/dsh >=0.1.7-rc.2、@deepseek-ai/cordis ~4.0.4。
v0.5.3-dsh-decision-layer(体验版)
主要变更
一轮五轴代码评审的收尾修复,处理全部 Required / Optional / Nit 项,纯健壮性与正确性改进,不改变任何对外行为。
- 任务完成核对触发门修正:补完的置信度门此前取所有条件的最小置信度,导致某条件低置信
satisfied会压掉本该由另一条件高置信unsatisfied触发的补完。改为只看unsatisfied条件的最小置信度。 - 标注写入失败回滚:介入面板 / 分析页对某条决策重新标注(如 判对→判错)且写入失败时,现在回滚到原有标注,而不是抹成未标注。
- 工具收窄候选上限与后端对齐:候选上限夹到后端每请求 64 题的硬上限,超限时只评估有界子集,不再在发请求前本地抛错、被误记为「后端不可达」。
- steer 预算不再被瞬时失败吞掉:抽出共享的一次性 steer 逻辑,产出自检与任务完成核对都改为「补完成功后才消耗本回合预算」,宿主 steer 瞬时抛错后可重试。
- 内部故障返回 500:
/logs分析器抛错、/annotate写盘失败等真正的内部故障现返回 500,坏输入仍是 400。 - 面板小修:探测回调改用挂载引用,会话切换后不再对已卸载实例 setState;打开态 effect 去掉多余依赖,避免语言环境变化误关闭弹窗。
安全不变量维持不变:只收窄 / 只门控、不新增权限;后端失败 / 低置信不替宿主决定;密钥不回显;HTTP 明文按地址逐个确认;门控命令 / 路径不外泄到前端。
验证
- 173 项 Node 测试通过(
npm test),较上版新增 10 项(混合置信度、标注回滚失败路径、CSRF 四分支、64 题上限、steer 瞬时失败重试、内部故障 500)。 - 客户端
npm run build:client通过,lib/client.js随源码提交。 npm pack --dry-run共 26 个文件,仅运行时资产。- peer 依赖:主包
@deepseek-ai/dsh >=0.1.7-rc.2、@deepseek-ai/cordis ~4.0.4。