Repository navigation
Releases
v1.1.1 · 修复设置卡片加载与挂载
修复:设置卡片终于能加载并挂载
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(两半配对)
设置 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.jsdsh.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 写明规则 |