dsh-settings-hub
本仓库 100% 由 AI 生成 —— 需求、代码、测试、文档都是人与 AI 对话里由 AI 写出来的,人只负责验收和拍板。 实验性 · 自用性质 · 非商业:它紧贴 DeepSeek Harness(DSH)的宿主接缝(
apply/inject/ client bundle / 配置解析),只在写它的那个 DSH 版本上验证过,宿主升级后可能直接失效。 安装前必读:DSH 的 profile 加载是全有或全无——一个插件import失败会连坐整个 profile,甚至把配置写残。装之前先备份 profile 里的package.json与cordis.patch.yml。 没有发布到 npm:把本目录放进 profile 的node_modules(或"<包名>": "link:<本目录绝对路径>"),再在package.json的dsh.profile.bundles里登记,重启 DSH。 卸载/回滚:从dsh.profile.bundles摘掉 →pnpm remove <包名>或删掉 junction → 重启;出问题就用备份的那两个文件还原。
DSH 插件:把散落在「设置」里的第三方插件设置页,收拢进一个统一的「插件设置」入口。
装一个带设置页的插件,设置面板左栏就多一行;装得越多,左栏越长。这个插件只保留产品自身的页面(账号、通用、模型、内置插件、Agent 预设等),其余页面折叠进一个新的「插件设置」页:
- 左栏不再一个插件一行;
- 「插件设置」页列出所有插件提供的设置页,可搜索,点击即在当前页内展开;
- 展开的是插件原本的页面组件本身(组件、locale、store、inject 全部复用),功能与外观和原生页面完全一致。
行为
- 新增
settings.section页:idplugin-settings,标签「插件设置 / Plugins」,order 5(General 之后、Models 之前)。 - 折叠规则:以下内置页面保持原位,其余全部折叠(含以后新装的插件):
account、general、models、plugins、agent-presets、archived-sessions、session-log。 - 折叠页的组件镜像注册到本插件在注册时声明的子槽
plugin-settings.detail(槽渲染器只允许渲染自己声明过的子槽,因此必须用镜像而不是原槽内联)。 - 镜像保留原条目顶层的
locale/store/inject——这三项在槽条目上是顶层字段,不在options里(options只有key/id/order/label/priority)。 - 若某个页面自己声明了子槽(无法安全镜像),该行改为调用设置外壳的
actions.openSection(id)跳到它自己的页面。 - 新装/卸载插件时
settings.section会触发订阅,本期列表会自动增删。 - 停用本插件时会还原导航过滤并移除所有镜像,设置面板回到原样。
实现说明
- 导航过滤:对
slots服务的entries方法做一次局部包装——仅当key === "settings.section"时过滤掉被折叠的行,其它 slot 原样返回,停用时按 descriptor 校验还原。槽系统本身不提供「删除/隐藏他人注册项」的 API,这是在不 fork 设置外壳的前提下唯一可行的收敛方式。包装装在原型 owner 上(ctx.slots.entries每次访问都返回新的绑定包装,不能用函数身份判断),装完会做一次功能自检;若失效则退化为「多一个插件设置页」并显示提示,不会崩溃。 - 拿外壳 store:
sidebar.settings外壳条目的storehandle 是同一对象,注册本页时把它作为store传入,即可在组件里拿到外壳的useStore(open/activeId)与actions(openSection等)。 - 自检报告:客户端加载后会把自检结果 POST 到 Host 半边的
/api/settings-hub/status,由 Host 落到本包目录下的.diagnostics.json(浏览器侧状态无法从外部查看,这是唯一的观测通道)。记录包含导航可见/隐藏的 section id、已镜像的页面、过滤是否安装成功,以及被槽错误边界吞掉的崩溃信息。
安装
plugin_manager action:"install_bundle" target:"<repo>"
安装后无需重启;打开「设置」(账号菜单 → 设置,或 Ctrl+,)即可看到「插件设置」。
改代码后需要 remove_bundle 再 install_bundle,并且 bump version,客户端 bundle 才会在页面内重新加载。
文件
index.js— Host 半边:只注册POST /api/settings-hub/status,把客户端自检写进.diagnostics.json。client.js— 全部 UI 逻辑:字典、样式、settings.section注册、页面镜像、导航过滤、自检上报。cordis.patch.yml— 插入 loader 条目settings-hub。icon.svg— 插件图标。
No comments yet. Be the first to write one.