Skip to content

v0.1.0:从零造插件+造完即验+一键编排与运行日志

Choose a tag to compare

@taxueseek taxueseek released this 25 Oct 10:32
· 43 commits to main since this release

相对 v0.0.3 的改进。这一版把项目从「只会修」推到「能造能修、造完即验」,并补上 2026-10-25 当天两次真实事故暴露的盲区(桌面端起不来的客户端半死链、工具仓被自身规则误报)。改动全部来自本机真实插件实测(taxue-dsh-artisan 0.3.3、dsh-image-gen 0.9.2、白描 plainspoken-writing-dsh、dsh-files/dsh-ledger 合成用例)。

新增能力

  • 从零造插件(scaffold.mjs):一条命令出五形态可冒烟骨架(tool / hook / service / config / llm-adapter)——package.json 免构建纯 ESM 不变量、按形态的最小可跑入口、cordis.patch.yml 挂载条目、dsh-plugin.naming.json 命名投影(collision-resistant 规则全量推导,生成物已过上游 validate-names 的 --strict 校验)。tool/hook 零依赖当场冒烟;service/config/llm-adapter 依赖宿主 @deepseek-ai/* 基类,诚实跳过并标注装包后手动跑。非空目标目录、非法 coordinate 都在写盘前拒绝
  • 造完即验的体检门(write-gate.mjs):编排冒烟+启用就绪+四维体检+官方指南核查,出一张「出生证」。硬门禁只有三条(入口产物存在、冒烟通过、指南 critical 零命中),fail 即退出码 1;audit 分数、high/medium 命中、mockFallbacks、未挂载 profile 一律进 discretion 区标「人工裁量」——工具不替用户说合格
  • 一键全链(run.mjs):环境→定版→指南→扫描→体检→冒烟→typecheck 一条命令跑完,出统一报告。typecheck 默认跑插件自有的 typecheck script(发布态 build 即红的存量问题,此前工具链完全看不到)
  • 本地运行日志(run-log.mjs + lib/runlog.mjs):每次运行写 ~/.cache/dsh-plugin-fast-adapt/runs/,索引摘要记录工具版本@commit与 phases 三态(scan/smoke/typecheck)、toolDirty 星标;list/show 回看,sanitize 脱敏 home/用户名/机器名/邮箱后才可外发,原始日志不出本机;runs/ 90 天惰性清理
  • 宿主启动失败一键诊断(log-doctor.mjs):解析 ~/.dsh/logs/,跨文件汇总 startup 头部、失败插件、等待服务、信号
  • 下游同步(sync-skill.mjs):把技能面同步到下游技能目录,--check 只查漂移(实测下游滞后会漏 lib/client-graph.mjs 这类新增文件)
  • peer 修补建议(plugin-audit --peer-patch):只对 @deepseek-ai/dsh 及 dsh-* 生成已验证的替换,且先过 satisfiesRange 自验证再输出;只打印不自动改包

修复(以前不行、现在能行)

  • 客户端半不再漏检:新增 lib/client-graph.mjs,按 dsh.client 声明 / ./client 产物 / 注入服务名册三层判定 MECE 对应宿主合成器的三个诊断点(声明 throw、client bundles not found、entry 永卡 loading)。2026-10-25 实录:桌面 APP 起不来、宿主半冒烟全绿,真凶是客户端半 manifest 死注入(inject 指向已移除、名册行又被覆盖层重写丢掉的 client-runtime)。web 与桌面共用 platform:web 前端,一处死链两端都炸,检查一视同仁
  • 覆盖层刻意垫片不再误报 critical:上游已移除、但 overlay 用显式 insert 补挂的包降级为 info(同日实录 web 端 client-runtime 垫片被误报,实为刻意保留);缩进边界(嵌套子项切块)已覆盖
  • 扫描窗口不再被库版本线顶倒挂:peer 按 @deepseek-ai/ 前缀全收时,cordis(4.x)/schemastery(3.x) 会把窗口起点顶到 3.18.4,倒挂后扫描静默跳过、索引仍记体检满分。窗口计算收敛为 computeWindow(宿主包精确匹配 + 倒挂回退留痕 + source 三档来源),isDshHostPackage 从 audit 提升到 scanner 三处同源复用
  • 工具仓不再被按插件规则误报:本仓被报「无 main 入口 → 入口不就绪 ERROR」、被 Cordis 生命周期规则建议 ctx.effect MEDIUM。新增 isPluginForm 判定层(证据只认 dsh 命名空间与 @deepseek-ai/* 依赖),工具仓 activation 记 N/A、audit 跳过 lifecycle 维度并出 targetForm
  • peer 弹性检查改真算语义:旧版看「范围有没有 -0」就报 HIGH,但它推荐的 >=0.1.0-0 <0.3.0 按真实 semver 根本收不下 0.2.1-rc.3(tuple 规则)。新增零依赖 satisfiesRange(^ ~ 精确 || 连字符,30 例与本机 semver 对拍锚定);覆盖不报、未覆盖 INFO 不扣分、无 target 不报
  • guide 是二手语义,宿主 node_modules 是一手事实:package 命中自动到目标宿主安装目录实测——包仍在 → 降级 info 证伪,确实不存在 → 维持 critical 并标注已实测,探不到 → unknown 不伪造
  • import type 引用已移除包降为 INFO(编译期引用不等于装载必炸)
  • 指南走廊空窗不再静默跳过:guide-sync 取版锚点退回本机版本,修「本机已是通道最新版 → 走廊空窗」
  • 扫描根取并集:src 与同级 client/web/ui 都扫,lib/dist 构建产物不重复扫
  • 冒烟按真 Cordis 契约拦未声明 inject:新增 inject_contract 阶段,不再让「装载即崩」的代码静默通过;声明了但 Mock 没提供的面仍兜底披露(Mock 缺口不是插件的错)
  • 描述漂移提示:工具描述里的宿主路径约定(如 .dsh-filess 这类已消亡约定)在宿主代码零命中 → INFO,只认路径形,不把 .dsh-* CSS 类名误报进来

实测数据

  • 全链 226ms(子进程开销:env-doctor ~70ms / code-scan ~47ms / quick-smoke ~44ms);真实插件端到端(taxue-dsh-artisan 0.3.3 × 宿主 0.2.1-rc.3):扫描命中 0、体检 100/100、冒烟 11 工具 17ms、typecheck 通过,全程 755ms
  • 现阶段真实插件核查面:扫描窗口 0.1.0-0 → 0.2.1-rc.3,命中 0 处
  • 自检 65 → 113 项断言(零网络);新增覆盖窗口四例、形态三例、activation N/A、audit 形态两例、phases/dirty/保留各一
  • 方案 A 第 4 项(进程内模块调用替代子进程)实测后否决:全链 226ms 下收益不抵削弱「执行插件代码」信任边界的风险,如实记录

默认关闭功能的打开方式

  • 覆盖层自愈默认 dry-run,真移动加 --apply
  • 取官方指南默认只定版本,实际拉取加 --clone
  • 运行日志默认只写本机,对外先 run-log.mjs sanitize

相关依赖(无变化)

零 npm 依赖:Node 内置模块 + git/npm 命令;Node 22.13+。Windows 真机仍未验证,如实标注。

npx skills add taxueseek/plugin-fast-adapt