在 DeepSeek Harness (DSH) 的开发实践中,插件需要向用户展示自身的连接状态或功能入口。如果每个插件都独立在设置面板中开辟区域,会导致界面杂乱且难以维护。dsh-authorize-app 插件提供了一个标准化的解决方案,它将“连接应用”作为一个统一的设置区块,供其他 DSH 插件通过插槽注册自身。

插件定位

dsh-authorize-app 是一个由 extension-hunter 维护的 DSH 插件。它的核心作用是在设置面板中新增“Connected Apps / 连接应用”区块(顺序为 25),作为其他 DSH 插件自我展示的中央平台。

核心功能

  • 统一设置区块:在设置面板中增加第 5 个入口“连接应用”,位置紧随 General、Models、Plugins 和 Agent Presets 之后。
  • 插槽声明:声明子插槽 settings.connected-apps.item,任何 DSH 插件都可以注册到该插槽。
  • 双语空状态:默认渲染一个双语空状态提示,显示“No connectable apps yet”和“暂无可连接的应用”。
  • 占位工具注册:注册了一个主机端的占位工具 dsh_authorize_app。

安装与启用

使用官方命令安装该插件:

dsh plugin --profile web add dsh-authorize-app

安装完成后,重启 profile (dsh web) 并刷新页面。在设置页面中即可找到“连接应用”选项。

典型用法

其他插件若希望在该列表中显示,需要在客户端通过注入插槽的方式注册卡片。以下是注册示例:

ctx.slots.inject('settings.connected-apps.item', () =>
  ctx.slots.register({
    name: 'settings.connected-apps.item',
    id: 'your-app-id',      // 唯一 ID
    order: 0,               // 排序顺序(升序)
    inject: () => ({
      // 卡片所需数据:名称、描述、连接状态等
    }),
  }, YourAppCard),          // React 组件
)

最小的卡片渲染示例如下:

function YourAppCard(props) {
  return React.createElement('div', { style: { padding: '12px 0' } },
    'My App', ' — ', props.t ? props.t('status') : 'connected')
}

适用场景与注意

该插件适合需要向用户展示连接状态或功能入口的其他 DSH 插件使用。

开发者在开发相关插件时,需注意以下几点:

  1. 环境要求:Node.js 版本需为 ^22.19.0 || >=24.0.0。
  2. 依赖关系:@deepseek-ai/cordis 为 peerDependency,仅导入类型定义即可,运行时由主机提供上下文。
  3. 客户端发现:若插件包含客户端代码,package.json 的 exports 字段必须包含 "./package.json": "./package.json" 和 "./client",否则客户端模块会被静默跳过。
  4. 版本标签:NPM 上的 latest 标签目前指向过时的 0.0.1-rc.1,请使用 next 标签(如 0.1.0-rc.x)。

总结

dsh-authorize-app 通过插槽机制实现了 DSH 插件间轻量级的自我展示。开发者无需自行构建复杂的注册表或网络传输层,只需注入卡片组件,即可在统一的“连接应用”列表中展示自身。