Repository navigation
v0.1.0:从零造插件+造完即验+一键编排与运行日志
相对 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 默认跑插件自有的typecheckscript(发布态 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.effectMEDIUM。新增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