前言¶
DSH(智能体开发框架)的理念是「一切皆插件」。dsh-plugin-desktop 是 DSH-desktop 的官方伴生插件。原版桌面端保持极简;安装此插件才解锁增强功能。它运行在 dsh 服务进程内,一方面把桌面端需要的内部状态以稳定 HTTP 端点暴露出来,替代了过去通过嗅探 webRequest 或解压文件估算用量的 hack 做法,另一方面往 Web UI 注入增强的页内右键菜单与「置顶会话」扩展。
核心功能¶
该插件提供以下主要能力:
- 桌面端状态暴露:通过 HTTP 端点直接读取当前会话和用量数据。
- 全局快捷输入:提供统一的发送通道,用于外部程序向 DSH 发送 prompt。
- Web UI 增强:为 Web UI 注入完整的右键菜单(会话/工作区/正文/链接/输入框)及「置顶会话」功能。
- 终端桥接:提供
/api/shell端点,用于 PTY 终端交互。
安装¶
官方推荐使用命令行安装:
dsh plugin add github:Quan-Robin/dsh-plugin-desktop
DSH-desktop-for-Linux 托盘或设置页也提供「安装伴生插件」的一键安装功能。若需手动安装,需将目录拷贝至 $DSH_HOME/profiles/web/node_modules/dsh-plugin-desktop/,并在 $DSH_HOME/profiles/web/cordis.patch.yml 中注册:
- insert:
- id: dsh-plugin-desktop
name: dsh-plugin-desktop
inject:
- webServer
- apiProxy
典型用法¶
安装后,桌面端会持续嗅探 /api/session.* 请求以保持同步。以下是几个核心 API 的使用示例:
- 检查当前会话状态:
curl http://127.0.0.1:3080/api/state
返回示例包含 `currentSessionId`, `turn` 状态等。
- 发送全局快捷输入:
# POST /api/prompt { sessionId?, text }
# sessionId 缺省用当前会话
- 查询用量数据:
curl http://127.0.0.1:3080/api/usage
返回聚合后的会话用量信息。
- 设置当前会话:
# POST /api/set-session { sessionId }
# 用于桌面壳在 Web UI 切换会话时调用
技术细节¶
- 零依赖:插件本身不依赖 npm 包,桌面端直接拷贝目录安装即可。
- 适配机制:插件 API 尚未文档化,交互集中在
lib/index.js中的三个 ADAPTER 函数(EVENT_BUS_SHAPES、ROUTER_SHAPES、PROMPT_SHAPES)。适配真实 dsh 时只需修改这三个列表。 - 实时同步:桌面端会持续嗅探
/api/session.*请求,确保 UI 导航导致的当前会话变化能被正确同步。
适用场景¶
适合需要深度集成 DSH 状态管理、构建桌面级快捷输入通道或需要增强 Web UI 交互体验的开发者。