Skip to content

Releases

v1.1.1 · 修复设置卡片加载与挂载

Choose a tag to compare

@mllun mllun released this 20 Oct 19:56

修复:设置卡片终于能加载并挂载

1.1.0 的卡片在页面上从未出现,设置表单也读不到配置。两个根因都在这次修掉了。

根因一:bundle 顶层声明撞名,整个 bundle 被静默丢弃

Harness 在共享脚本作用域求值 bundle。tsc 把模块级的 const FIELDS / const styles / const loader
原样留在了顶层,它们变成全局词法绑定;一旦与页面里已有变量撞名,整个 bundle 抛
Identifier ... has already been declared,而加载器不会在 UI 上报告 —— 卡片就这么消失了。

修法:只留 load(...) 调用和(编译后消失的)interface 在顶层,所有运行时值移进 factory。

根因二:普通 Config 字段不会出现在设置页

SettingsForms.describe() 用 volatileForm() 从 schema 构建表单,而它只认 .volatile() 字段;
一个 volatile 字段都没有的 entry 会被整个跳过(不报错,只是没有)。

修法:Config 的每个字段都加 .volatile()。语义也正好:每次工具调用都重新读合并后的配置,
所以改动下一次调用就生效,是真正的 live。volatile 字段的运行时值是稳定引用,Host 半用
.get() 解包后再用。

其他

  • 卡片优先使用设置页交给它的 props.form,ctx.get('configForms') 作为后备。
  • 表单不可达时显示可读诊断(configForms / form prop / entry 列表),不再停在「加载中」。
  • 文档补上 .volatile() 与 factory 作用域两条硬规则,并更新版本差异表。

实测

  • settings.describe() 现在包含 dsh-revivecoin(7 个字段)
  • 页面卡片渲染出 7 个输入框;把「会话文件上限」改成 150 并保存后,profile patch 写入
    maxSessionFiles: 150,Host 读回的值也是 150

v1.1.0 · 设置 UI(两半配对)

Choose a tag to compare

@mllun mllun released this 20 Oct 19:41

设置 UI(两半配对)

同一个包里两个半,通过包名 @local/dsh-revivecoin 配对。

Host 半 · src/index.ts → lib/index.js

导出 schemastery Config schema(7 个字段:profile、profileDir、单文件上限、单枚币总量预算、会话文件上限、扫描文件上限、递归深度)。DSH 0.2.1-rc.2 的设置服务没有 installSection(),命名空间由 schema 与 profile entry 派生,编辑写入 profile 里这条插件的 config。

浏览器半 · src/client/index.tsx → lib/client.js

向 plugins.bundle.config 注册卡片,key = 包名。读写走 ctx.get('configForms')(0.1.7 取代 ctx.settingsScope 的共享表单服务),用 mutate([{ op: 'set', path, value }]) 写回。

打包

  • exports['./client'] → ./lib/client.js
  • dsh.client:platform: web、immediately: true、inject: ["@deepseek-ai/dsh-client-ui-settings"]
  • 根 index.js 保留为入口转发 shim(loader 按包根解析入口)

验证

  • Host 半:配置 schema 已投影(Config.listConfigs 从 absent → schema),四个工具正常
  • 浏览器半:test/client-smoke.mjs 在 VM 中执行编译产物,断言工厂 id、槽位 key、无配置服务时安全跳过
  • 页面渲染需刷新一次 DSH 页面后可见

与目标版本的实测差异

期望写法 实际情况 做法
ctx.settings.installSection() 不存在,只有 describe/update/replace/mutate 导出 Config,服务派生命名空间
ctx.settingsScope 0.1.7 起不再提供 ctx.get('configForms')
applies: 'restart' descriptor 恒为 live 字段本就不用重启
role('secret') 支持,但本插件无敏感字段 未使用,README 写明规则