Repository navigation
Releases: Wenaixi/dsh-cfbridge
Releases · Wenaixi/dsh-cfbridge
Release list
v0.13.2
0.13.2 — 2026-10-31
- feat(preset): 专属预设名称与描述规范化:
- 动态注册的专属智能体预设名称正式从
Cloudflare规范化命名为Cloudflare 模式,解决宿主界面模式选择与展示语义不直观的问题; - 预设描述同步对齐规范为「Cloudflare 模式:仅在本模式加载 Cloudflare MCP 工具与 14 个按需技能,预置操作规范」。
- 动态注册的专属智能体预设名称正式从
- fix(security): 彻底根除远程异步 MCP 客户端握手延迟导致的工具隔离时序穿透漏洞:
- 安装根级全局硬核守卫(Global Tool Guard):直接在根上下文注册
ctx.tools.guard单调拦截,任何会话在非 Cloudflare 模式或 MCP 关闭时调用特权工具,一律在执行管线最前端物理阻断并返回拒绝原因; - 动态监听
tools/change事件:解决异步远程 MCP 客户端握手连接延迟上线时,普通会话因创建瞬间无工具而漏配tools.restrict的竞态问题;MCP 上线后自动对活跃会话补全restrict屏蔽; - 智能会话作用域解析(
resolvePresetId):全面兼容原始 ScopeKey、Cordis Context 与包装在Agent.ctx内的上下文,解决exec.agent无法解包导致预设识别失败降级的问题。
- 安装根级全局硬核守卫(Global Tool Guard):直接在根上下文注册
- docs: 同步更新主 README、中文使用说明书与项目核心契约库
CLAUDE.md。 - test: 新增全功能真实环境端到端验证脚本
scripts/verify-all-features.mjs(9/9 全绿),综合门禁保持 15/15 全绿通过。
完整更新日志见 CHANGELOG.md
v0.13.1
0.13.1 — 2026-10-18
- fix(peerDependencies): 优化宿主微内核对等依赖生命周期区间(
peerDependencies):- 将
@deepseek-ai/dsh-skill从过窄的单一 RC 绑定调整为标准生命周期区间>=0.2.0-rc.2 <0.3.0-0; - 将
@deepseek-ai/cordis调整为>=4.0.4 <5.0.0,@deepseek-ai/schemastery调整为>=3.18.4 <4.0.0; - 彻底根除在相近小版本(如
0.2.0-rc.2)宿主启动时被加载器版本门禁误判为不兼容并静默禁用插件行(disabling profile plugin row "cfbridge")的暗坑。
- 将
- feat(isolated): 建立独立临时端口与全自动真机验收闭环,实现在全新隔离 DSH Web 实例中 100% 物理隔离、零触碰生产目录下的真机全功能验证。
完整更新日志见 CHANGELOG.md
v0.13.0
0.13.0 — 2026-10-18
- feat(core): 深度全面适配官方最新发布的 DSH 宿主(
@deepseek-ai/dshv0.2.1-rc.2)所有架构细节:- 契约无缝对齐
@deepseek-ai/dsh-agent-preset-registry的最新PresetDefinition规范,支持生命周期内的动态注册、审计与安全注销; - 强化普通会话双道特权物理防线:静态阶段调用
tools.restrict({ deny: CLOUDFLARE_TOOLS })剔除工具调用意图,执行期挂载tools.guard()动态拦截并返回清晰的可读理由; - 完善 MCP 总控
mcpEnabled的 Master 短路逻辑,关闭时全系统全会话物理阻断对 Cloudflare MCP 三工具(docs/search/execute)的调用; - 全链路取消信号无死角穿透:遍历、I/O 与候选发现严格检查并透传
AbortSignal,通过isAbortError识别重抛,杜绝中断被误判为文件损坏。
- 契约无缝对齐
- refactor(legacy): 彻底移除针对历史旧版本 DSH 的兼容代码与冗余包袱(Drop Legacy Baggage):
- 彻底移除
modelHiddenSkills与userHiddenSkills历史双轴隐藏字段,配置单一真源完全收敛为disabledSkills; - 客户端控制器(
PanelController)的开关操作从历史的 3-ops 平铺升级为纯净的单操作(1-op)原子批处理,网络传输与微内核处理极致轻量; - 物理删除已废弃的 4 个历史脚本(
install-preset.js、uninstall-preset.js、validate-preset.js与migrate-from-preset.js); - 从工具库中清除历史软链清理函数
removeLegacySkillLink; - 将
peerDependencies从宽泛的 0.0.1+ 收敛并锁定为 DSH 最新原生规范^0.2.1-rc.2(以及@deepseek-ai/cordis: ^4.0.5与@deepseek-ai/schemastery: ^3.18.5)。
- 彻底移除
- feat(test): 构建全新的独立新实例端到端自动化验收套件(
scripts/test-isolated-instance.js/npm run test:isolated):- 强制将
DSH_HOME导向系统临时目录,实现 100% 物理隔离,绝对不触碰和污染用户的生产环境(~/.dsh)与运行中实例; - 遵循 Direct Source Junction Rule 建立直连工作区源码的目录联接;
- 真实调用宿主 CLI 导出融合配置(
dump-config),真机验证动态预设注册、单一开关过滤与普通会话特权工具双道守卫拦截; - 验收完毕自动彻底销毁临时目录,提供可重复、零副作用的交付级验证。
- 强制将
- test(gate): 综合质量门禁全面通过 15/15 全绿,Bundle 结构严格校验 92/92 全过,独立隔离验收 5/5 全通,发布白名单仅 32 个纯净文件。
完整更新日志见 CHANGELOG.md
v0.12.0
0.12.0 — 2026-10-11
- feat(client): 采用
frontend-design专业美学重塑 DSH 插件设置面板 UI:- 引入头部微型状态展板(
HeroBanner),集成琥珀色(#f6821f)呼吸指示灯与三状态动态徽标(当前运行模式、MCP 激活状态、技能启用计数); - 引入双列卡片式分段选择器(
ModeCard),高对比度琥珀高亮边框与「推荐」胶囊徽标,替代简陋的原生 radio 控件; - 引入 Cloudflare Code Mode MCP 工具独立控制面板(
McpMasterCard),集成总控Switch、三大特权工具功能芯片标牌(docs/search/execute)及停用状态全局预警横幅; - 引入技能库即时搜索栏与「全部启用 / 全部停用」一键批量控制工具条;
- 技能列表卡片化:等宽代码风技能名、分类彩色徽标(Core、Platform、CLI、AI/Agents、Storage、Zero Trust、Security 等)、人话功能简介与一元化单开关。
- 引入头部微型状态展板(
- feat(skills): 技能开关一元化:彻底废弃模型与人类双轴分裂的心智负担,合并为单一开/关。开启时原子移出
disabledSkills并清空隐藏名单,关闭时原子写入disabledSkills并清空隐藏名单;单次原子 3-ops 批处理提交,两轴同步开闭,对历史字段保持平滑向后兼容。 - feat(mcp): 新增 Cloudflare MCP 工具总控开关(
mcpEnabledvolatile 配置字段与全链路拦截防线):- 当
mcpEnabled: false时,无论处于preset还是global模式,对全系统所有会话统一物理触发tools.restrict({ deny: CLOUDFLARE_TOOLS })并挂载运行期tools.guard拦截,杜绝越权与意外调用; - 配置自愈与提取引擎(
src/config-healer.ts)全面支持mcpEnabled容错解析、坏损 YAML 恢复与持久化回写。
- 当
- feat(mode): 将运行模式默认值从
global调整为preset(Cloudflare 专属模式),全系统默认对非专属会话实施特权工具与技能物理隔离,防范非 Cloudflare 任务被特权干扰。 - fix(client): 修复客户端插件依赖注入声明缺陷:在客户端导出显式补齐
inject: ['slots', 'locale'],确保全新实例在服务未完全就绪时不会触发未定义异常,冷启动激活率 100%。 - test: 综合质量门禁全面升级并通过 15/15 全绿,包含纯 Node 脱机状态机单测、MCP 拦截测试、单开关状态机与冷安装真实浏览器端到端全链路验收。
完整更新日志见 CHANGELOG.md
v0.11.1
0.11.1 — 2026-10-10
- docs: 根目录主
README.md全面重构为高质感全英文档,排版美学与五联徽章体系(npm / MIT / DSH Bundle / Node >= 22 / pnpm >= 11)对齐dsh-superpower风格。 - docs: 中文说明书精修留存为
README.zh.md,并在package.json.files白名单中正式注册,根除 npm 线上发布后多语言跳转链接沦为 404 死链的反模式。 - chore: 根目录
.gitignore正式收录.superpower/全目录忽略,彻底消除任务草稿文件的 Git 跟踪风险。 - release: 修复重推同名 tag 触发 npm E403(禁止覆写已发布版本)问题,正式平滑晋升为 0.11.1。
完整更新日志见 CHANGELOG.md
v0.11.0
0.11.0 — 2026-10-10
- feat(mode): 支持通过设置面板与配置自由切换运行模式(
loadMode:'global'全局加载 /'preset'cfbridge 专属模式):global模式下(默认),Cloudflare MCP 三工具与 14 个技能在所有会话全局可用;preset模式下,插件响应式向宿主注册cfbridge智能体预设(继承标准模式 19 个基础插件,显示为「Cloudflare」),自动向模型会话预置操作规范与安全审批提示词(CFBRIDGE_SYSTEM_INSTRUCTIONS),并通过作用域隔离(provider.list/get范围限制)与tools.restrict对非 cfbridge 模式会话屏蔽 Cloudflare MCP 工具与技能;- 切换模式时自动注册/注销专属预设,完全可逆。
- feat(rank): 将 Provider 优先级权重默认值提升为全系统最高
rank: 0。宿主dsh-skill按升序裁决同名条目(首位胜出),rank 0保证在全系统所有层级(项目级 100/200、内置级 600)中绝对优先胜出。 - feat(config): 实现配置自动自愈与损坏 YAML 提取重生成引擎(
src/config-healer.ts、scripts/repair-config.js、tests/config-healer.test.mjs):- 支持断电截断、语法畸变与 Tab 混用等极端场景下的两阶段启发式提取,确保坏损文件下的用户配置不丢失;
- 重生成前强制自动创建同目录带时间戳的
.bak.<timestamp>备份,生成的 YAML 严格保证 2 行结构契约与动态!!js安全 Token 引用; - 提供
npm run repair:configCLI 排障工具,支持--file、--profile与--dry-run演练; - 运行时
apply()自动执行配置清洗,并在 settings 可用时自动回写持久层 volatile 字段。
- refactor(client): 浏览器半侧提取
PanelController领域深模块(src/client.entry.ts):- 引入同步栈
_busy物理防重锁,彻底切断 React 18 异步调度微任务竞态窗口,100% 根除快速连击携带相同revision引发的宿主乐观锁版本撕裂; - 将
disabledSkills、modelHiddenSkills、userHiddenSkills平铺为单次form.mutate的 3 项 ops 数组原子提交; - 面板 React 组件退化为极薄声明式纯视图,代码量缩减 40% 以上。
- 引入同步栈
- refactor(core): 核心运行时去重与对称安装器架构演进(
src/cfbridge.ts):- 物理删除 28 行未被引用的孤儿死代码(
readStringListConfig/readLoadModeConfig),全仓懒求值统一收敛至单一数据源; - 解构提炼四大同构具名安装器(
installSkillRuntime、installSkillsWatcher、installPresetMode、installToolGuard),收敛apply()编排复杂度; - 为
SkillRuntime.listNames(signal?: AbortSignal)补齐取消信号透传,避免极端环境下目录扫描卡死。
- 物理删除 28 行未被引用的孤儿死代码(
- test(client): 新增纯 Node 脱机状态机单元测试
tests/client-controller.test.mjs(6 tests),执行耗时缩短至毫秒级,穷尽覆盖两轴状态翻转、并发互斥拦截与坏损数据优雅降级。 - chore(gate): 全仓唯一综合门禁平滑升级至 15/15 全绿,安全检查 85/85,结构校验 98/98,发布预检打包仅 31 个白名单文件、零源码与零开发辅助泄漏。
完整更新日志见 CHANGELOG.md
v0.10.2
0.10.2 — 2026-10-04
- docs: 移除 skills/cfbridge/SKILL.md 中残留的
/cfbridge斜杠命令指引(第 36/42/249 行)。该命令于 0.10.0 移除(commit 64df76b)时同步了 README 与客户端文案,唯独漏改技能本体文档——它是随 npm 包发布的模型可读操作指南,会教模型调用不存在的命令。 - refactor(provider): 清理
src/cfbridge.ts移除/cfbridge命令后残留的四处过时注释(328/378/382/534 行附近),改为中性表述(宿主控制面 / 技能清单发布)。仅注释改动,无行为变化。 - docs: README 验证节删除会随门禁断言数漂移的过期计数(76/86 → 无计数);维护节「四组行为测试」修正为七个行为测试文件(
scripts/test.js实况)。 - docs(changelog): 注明 check 门禁计数随环境(本机 web profile 装 bundle 时 85/85,CI/干净环境 84/84,两边均 0 失败)。
完整更新日志见 CHANGELOG.md
v0.10.1
0.10.1 — 2026-10-04
- fix(client): 修复技能开关的投影缺陷。
disabledSkills的语义是「模型与人类都关」,不是一个独立的第三字段;原实现把它当成独立字段参与合成,于是在历史落盘形态(技能只在disabledSkills里、两个 hidden 名单为空)下,只打开其中一个开关会连带把另一轴静默打开——用户没碰过的开关自己变了。改为先由disabledSkills还原两轴的真实开合状态,只翻转被点击的那一轴,再按「两轴都关则升级为disabledSkills、否则用对应 hidden 名单」重新合成,并把同一事实的双重来源归一(两轴都关时从两个 hidden 列表移除该技能)。 - test(client): 新增
tests/client-panel.test.mjs,用 Nodevm执行真实构建产物lib/client.js,穿过真实plugins.row.config注册与真实Switch.onChange驱动面板,断言form.mutate收到的三个字段投影与 revision 栅栏。模型轴与人类轴各有独立用例(评审实测发现只测一轴时,另一轴的镜像变异可以全绿存活)。每条断言均做破坏实测确认会红。 - fix(scripts):
wrangler.js此前在无CLOUDFLARE_API_TOKEN时拦截所有命令,包括--version这类纯本地探测,使综合套件在无凭据的 CI 上必然失败。改为只对需要访问 Cloudflare 的命令要求 Token,并按首个位置参数判定——用some()扫描全部参数会让whoami --version、deploy --help这类命令顺带绕过凭据检查(评审实测确认)。 - test(scripts): 新增
tests/wrangler-entry.test.mjs,锁定「无 Token 时--version必须可用」与「首参数是真实子命令时无论附带什么 flag 都必须被拦下」两条契约。 - ci: CI 与 Release 此前各自跑
check+validate:bundle+ best-efforttest:wrangler,从不调用既有综合套件——类型检查与四个测试文件只在本地跑。两者改为统一调用npm test(唯一验证入口),保留npm ci、npm pack --dry-run与 Release 的 tag 版本校验;原先被|| echo吞掉所有失败的 Wrangler 步骤随之退场。 - test(ci): 新增
tests/workflow-gate.test.mjs,解析两个 workflow 的真实结构,断言npm test已接入、零散 check/validate 步骤不再重复、pack 与 tag 校验仍然保留。该断言本身做过破坏实测:把 CI 改回只跑npm run check,它会红。 - refactor(scripts): 抽出
scripts/lib/skill-metadata.js,让validate-bundle.js与tests/bundle-metadata.test.mjs共用同一份 SKILL.md 索引元数据判定,消除同一语义两处各写一份。同时修正该判定比契约更严之处:它此前要求注释块后紧跟\n且 BOM 只能在文件最开头,而 vendored 快照的真实头部是「注释块 + CRLF + BOM + 注释块」交替,导致本地(CRLF)与 Linux checkout(LF)行为分裂。已实测两种行尾下 14 个技能全部通过。 - chore(gate): 门禁基线更新为
npm test13/13、check.js85/85、validate-bundle.js --strict-router98/98。 - 核实结论(明确不做):
MutableSkillProvider的四个名单方法与SkillRuntime.current()在当前代码里没有仓内调用者,但它们是已发布类型(v0.8.0 / v0.9.0 / v0.10.0 的lib/cfbridge.d.ts都公开了该返回类型与方法),删除属 breaking change;且current()由 CLAUDE.md 明文裁定为对外暴露面。故保留行为,只更新因/cfbridge命令移除而过时的注释。
完整更新日志见 CHANGELOG.md
v0.10.0
0.10.0 — 2026-10-04
- feat(ui): 插件配置面板的每个技能行改为显示一句人类可读的简介(中文界面中文、英文界面英文),取代此前只显示
skills/<目录名>的无信息量路径。不直接复用SKILL.md的 frontmatter description——那是面向模型的触发说明(实测英文 160–551 字符),塞进面板既长又难读;改为在客户端维护一份短简介表,只负责把名字翻译成人话,不参与技能发现。未登记简介的技能回退显示目录名。语言探测不新增宿主依赖(用一个已注册 key 作哨兵比较t()返回值)。 - feat(icon): 插件图标替换。旧图标是手写的「深色圆角底 + 白描边云 + 橙色闪电」SVG;新图标以 Cloudflare 官方 Logo 作参考图、经 gpt-image-2 的 edits 端点生成,产出「官方云形态 + 底部负形桥」的标志——延续 Cloudflare 的视觉血统,同时用桥的负形做出自身身份。规格 512×512 PNG、真透明底、86 KB(宿主上限 256 KiB)。
icon.svg已删除,package.json的icon/files[]与validate-bundle.js断言同步。 - test(gate): 新增门禁断言——每个技能都必须有中英成对的简介且中文非空;断言从
lib/client.js产物读取,兼容带引号与不带引号两种键形态。破坏实测确认会红(删掉某个技能的简介后精确报出缺失项)。 - docs: 重构 CLAUDE.md,243 行压至 125 行:发布记录由四节流水改为一张版本表,把「本轮做了什么」的过程叙述收敛为「未来必须遵守的契约与判据」,并新增「已知边界与明确不做的事」一节。
- refactor(provider)!: 移除
/cfbridge斜杠命令(约 65 行)。该命令于 0.8.0 引入,定位是「不重启就能改技能开关的即时调试入口」,但能力与插件页面板高度重叠(四项开关操作完全等价),且面板是持久化的正路。核实中还发现它与面板的合成规则不一致:同样把技能对模型和人类都关掉,面板会升级写入disabledSkills,命令则留下modelHiddenSkills + userHiddenSkills两个字段——功能等效但落盘形态不同,会让后续读配置的人困惑。移除后技能开关只有面板一条路径,语义单一。- 同步删除客户端面板里的
slashHint提示文案(中英文各一条)——命令不存在后该提示是假承诺。 - 实测确认(真实调用,非读代码):
apply()后命令注册数为 0、Provider 注册数为 1、list()仍返回 14 个技能、get()正文 8506 字节,核心能力无回归。
- 同步删除客户端面板里的
- chore(gate): 门禁基线维持
npm test10/10、check.js85/85、validate-bundle.js --strict-router97/97。
完整更新日志见 CHANGELOG.md
v0.9.0
0.9.0 — 2026-10-04
- test(gates): 门禁不再用正则匹配
src/cfbridge.ts源码文本来断言 Provider 行为。新增scripts/lib/provider-contract.js,改为import构建产物lib/cfbridge.js并断言真实导出值(name/inject/Config().rank)与真实行为(apply是否注册恰好一个 Provider、该 Provider 能否列出磁盘全部技能、list/get 两段式加载是否成立、保留名runtime是否被拒)。两个门禁共用该断言集合,消除逐字抄写两遍的重复。门禁计数check.js76→85、validate-bundle.js86→97。- 对照实验(临时副本,仓库不受影响):把
PROVIDER_RANK改名(行为不变)旧实现误报 2 项,新实现全绿;把registerProvider调用短路(Provider 永远注册不上)旧实现全绿漏报,新实现 FAIL 并非零退出。
- 对照实验(临时副本,仓库不受影响):把
- fix(client):
src/client.entry.ts此前完全不被类型检查(tsconfig.json与tsconfig.build.json都显式 exclude 它,唯一编译路径build-client.js走transpileModule且明确不做类型检查)。新增tsconfig.client.json与src/client.deps.d.ts(按实际用到的面声明 react 与 ui-primitives 的最小类型,两者本由 DSH 客户端运行时注入、本地不安装,因此不引入新依赖),并接入npm test成为独立一步。- 补上检查后立刻发现真实缺陷:
SkillRow的 props 里busy已声明为 boolean(调用方按busy === name求值后传入),组件内部却仍写busy === name,与 string 比较恒为假,导致保存中的开关不会被禁用、可被重复点击。已改为直接使用busy。 - 验证:注入类型错误 →
error TS2322并非零退出;恢复 → EXIT=0。
- 补上检查后立刻发现真实缺陷:
- refactor(provider): 收敛技能开关投影规则。
list()内的project()与get()内联的手写投影本属同一规则,抽出泛型纯函数projectInvocation<T extends { name; invocation }>(刻意不绑定SkillCandidate,因为get()需返回多一个content字段的SkillDefinition,这正是当初手抄一份的原因)。配套规则测试覆盖两个维度独立生效、名单为空、命中他名、已关闭方向不被打开、纯函数不可变;破坏实测确认该测试会红。 - refactor(provider):
createProviderForTest(8 个位置参数、其中 5 个可选)改为createSkillProvider({ ... })具名选项对象。旧签名下createProviderForTest(root, 'cfbridge', console, 700, true)必须回查签名才知道第 4、5 位是什么;名字里的ForTest也与事实不符(它在生产路径apply()内被调用)。 - refactor(provider): 拆解
apply()。它此前在单个函数体内混了七条生命周期,并靠三个裸闭包变量互相咬合(invalidateCatalog被 watcher 与斜杠命令同时读写、liveProvider被注册/发布/命令三处读写、settings取值表达式写了两遍)。引入SkillRuntime作接缝封装前两根线,对外只暴露current()/invalidate()/listNames();三条效果各自成为独立安装函数并各自返回清理函数(installSkillRuntime/installSkillsWatcher/installCommand/publishSkillCatalog),apply缩为约 40 行装配层。行为严格不变:六个命令动作的三维度增删逐条实测复现,清单发布经describe比对后写入availableSkills。 - refactor(scripts):
migrate-from-preset.js自带的listFiles改用共享的collectFiles(上一轮收敛共享助手时漏掉的消费方;实测两者对skills/的收集结果逐项一致)。 - chore(gate): 门禁基线更新为
npm test10/10、check.js85/85、validate-bundle.js --strict-router97/97。 - 核实结论(明确不做):
ALL_SKILLS手抄清单维持现状(实测磁盘 14 与声明 14 完全一致、零漂移;且删除漏改会被checkFile发现,只有新增漏改才是静默通过,严重度不足以换取自动化后破坏VENDORED_SKILLS意图语义的代价);locale/*.json与client.entry.ts内联语文案维持两条通道(前者供宿主渲染插件卡片、后者供面板内部使用,服务不同消费者,非重复)。
完整更新日志见 CHANGELOG.md