Skip to content

Releases: Wenaixi/dsh-cfbridge

v0.13.2

Choose a tag to compare

@github-actions github-actions released this 30 Oct 16:59

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 无法解包导致预设识别失败降级的问题。
  • docs: 同步更新主 README、中文使用说明书与项目核心契约库 CLAUDE.md。
  • test: 新增全功能真实环境端到端验证脚本 scripts/verify-all-features.mjs(9/9 全绿),综合门禁保持 15/15 全绿通过。

完整更新日志见 CHANGELOG.md

v0.13.1

Choose a tag to compare

@github-actions github-actions released this 18 Oct 04:31

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

Choose a tag to compare

@github-actions github-actions released this 17 Oct 15:58

0.13.0 — 2026-10-18

  • feat(core): 深度全面适配官方最新发布的 DSH 宿主(@deepseek-ai/dsh v0.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

Choose a tag to compare

@github-actions github-actions released this 11 Oct 05:59

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 工具总控开关(mcpEnabled volatile 配置字段与全链路拦截防线):
    • 当 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

Choose a tag to compare

@github-actions github-actions released this 10 Oct 11:53

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

Choose a tag to compare

@github-actions github-actions released this 10 Oct 10:30

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:config CLI 排障工具,支持 --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) 补齐取消信号透传,避免极端环境下目录扫描卡死。
  • test(client): 新增纯 Node 脱机状态机单元测试 tests/client-controller.test.mjs(6 tests),执行耗时缩短至毫秒级,穷尽覆盖两轴状态翻转、并发互斥拦截与坏损数据优雅降级。
  • chore(gate): 全仓唯一综合门禁平滑升级至 15/15 全绿,安全检查 85/85,结构校验 98/98,发布预检打包仅 31 个白名单文件、零源码与零开发辅助泄漏。

完整更新日志见 CHANGELOG.md

v0.10.2

Choose a tag to compare

@github-actions github-actions released this 04 Oct 08:03

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

Choose a tag to compare

@github-actions github-actions released this 04 Oct 06:37

0.10.1 — 2026-10-04

  • fix(client): 修复技能开关的投影缺陷。disabledSkills 的语义是「模型与人类都关」,不是一个独立的第三字段;原实现把它当成独立字段参与合成,于是在历史落盘形态(技能只在 disabledSkills 里、两个 hidden 名单为空)下,只打开其中一个开关会连带把另一轴静默打开——用户没碰过的开关自己变了。改为先由 disabledSkills 还原两轴的真实开合状态,只翻转被点击的那一轴,再按「两轴都关则升级为 disabledSkills、否则用对应 hidden 名单」重新合成,并把同一事实的双重来源归一(两轴都关时从两个 hidden 列表移除该技能)。
  • test(client): 新增 tests/client-panel.test.mjs,用 Node vm 执行真实构建产物 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-effort test: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 test 13/13、check.js 85/85、validate-bundle.js --strict-router 98/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

Choose a tag to compare

@github-actions github-actions released this 03 Oct 18:07

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 test 10/10、check.js 85/85、validate-bundle.js --strict-router 97/97。

完整更新日志见 CHANGELOG.md

v0.9.0

Choose a tag to compare

@github-actions github-actions released this 03 Oct 16:52

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.js 76→85、validate-bundle.js 86→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 test 10/10、check.js 85/85、validate-bundle.js --strict-router 97/97。
  • 核实结论(明确不做): ALL_SKILLS 手抄清单维持现状(实测磁盘 14 与声明 14 完全一致、零漂移;且删除漏改会被 checkFile 发现,只有新增漏改才是静默通过,严重度不足以换取自动化后破坏 VENDORED_SKILLS 意图语义的代价);locale/*.json 与 client.entry.ts 内联语文案维持两条通道(前者供宿主渲染插件卡片、后者供面板内部使用,服务不同消费者,非重复)。

完整更新日志见 CHANGELOG.md