READMESource: main@d844ea49
dsh-pet-chat
点一下桌面上的鲸鱼娘,打字问它。它会自己看你此刻的屏幕,把「问题 + 一帧截图」送进你正在用的 dsh 会话,再把答案吐回那张小卡片。
Windows · PowerShell 5.1 · 需要 dsh 桌面端与官方桌宠 dsh-tauri-pet · MIT

它解决什么
学习时遇到没见过的东西,截图 → 保存 → 粘贴 → 描述,四步太烦。这个插件只留一步:点桌宠,打字。 屏幕内容由它自己抓,问题和那一帧一起进 dsh 的当前会话,所以后台那个正在跑的 dsh 能直接接着看、接着答。
它不是什么
- 不是新的宠物形象:形象与动画复用官方
dsh-tauri-pet,本插件只负责"看屏幕 + 聊天"这一层。 - 不是独立应用:答案来自你正开着的 dsh(同一个会话、同一份上下文)。
- 没有云端:截图只在你本机的 dsh 进程与卡片进程之间传递。
前置条件
| 需要 | 说明 |
|---|---|
| Windows 10/11 + PowerShell 5.1 | 卡片是 WinForms 脚本,用系统自带 PowerShell 跑 |
| dsh 桌面端在运行 | 提供 /api/pet-chat/* 四条本地路由 |
官方桌宠 dsh-tauri-pet 已启用 |
点它唤出卡片(插件不自己画宠物) |
安装
# 1) 装进 dsh 的 profile(web 是你的 profile 名),然后重启 dsh
dsh plugin --profile web add "<本目录>"
# 2) 启动卡片进程(常驻托盘,平时不显示窗口)
.\pet-chat.cmd
插件加载时会把 {base, token, pid} 写到 %USERPROFILE%\.dsh\pet-chat\endpoint.json,卡片靠它找到 dsh,每个请求带 x-pet-token。
所以顺序是:先起 dsh,再起卡片。
使用
- 点屏幕上的鲸鱼娘 → 卡片从右侧弹出。
- 打字,然后:
- 按
Enter或点右下角圆形箭头 = 只发问题; - 点
看屏幕并提问= 连当前屏幕一帧一起发。
- 按
- header 下面那条:左边换工作区,右边
新建会话(预设走 dsh 的默认,不写死)。 - 卡片可以拖:按住任意空白处移动,贴四边/四角 12px 内拖动改大小。位置与大小记在
%USERPROFILE%\.dsh\pet-chat\card.json,下次沿用。 —收起(再点鲸鱼娘唤回)、×关掉卡片进程;彻底退出用托盘右键。
工作原理
鲸鱼娘(官方 dsh-tauri-pet 窗口)
│ 点它:外部观测窗口矩形 + GetAsyncKeyState
▼
pet-chat.ps1(WinForms 卡片进程)
│ HTTP + x-pet-token
▼
dsh 宿主插件(lib/index.js)
GET /api/pet-chat/state?sessionId= 会话列表 / 最后回答 / 运行状态
GET /api/pet-chat/workspaces 工作区列表
POST /api/pet-chat/session 新建会话(预设默认)
POST /api/pet-chat/ask 问题 + 可选截图 → 当前会话
│ ctx.get('agents').get(id).followup(...)
▼
你正在用的 dsh 会话(截图存进附件区,消息排队下一轮)
卡片不碰 dsh 内部:它只读端点文件、发 HTTP、按 800ms 轮询答案。所以 dsh 崩了它只是显示"未连接"。
验证
node verify\selfcheck.mjs # 宿主四条路由的桩测试(39 条断言)
卡片侧的等价物是 card.log:每次点击、每次发送、每份排版都会留一行。
排错
| 现象 | 原因 | 处理 |
|---|---|---|
| 「未连接 dsh(缺 endpoint.json)」 | dsh 没起 / 插件没装 / 端点文件是上次的 | 先起 dsh;dsh plugin --profile web list 确认插件在;仍是旧的就连 dsh 一起重启 |
| 点鲸鱼娘没反应 | 卡片进程没跑,或点到宠物窗的透明留白(宠物只占窗内约 62%×82%) | 托盘右键「显示聊天卡」;点鲸鱼娘本体而不是边角 |
| 输入后没回音 | 会话还不是活体(刚新建),或 dsh 正在跑别的回合 | 新建会话的第一次提问会自动认领;回显靠 800ms 轮询 |
| 点了发送没反应 | 见 card.log |
有 send: 说明送出、看 view: 是否正常;两行都缺就是入口没触发 |
已知边界
- 仅 Windows(WinForms + GDI)。
- 触发依赖外部观测官方宠物窗口:不注入、不改壳,代价是"必须点宠物本体"。
- 预设固定走 dsh 默认值,卡片里不提供切换。
- 右侧细条是滚动进度指示,不可拖(滚轮 / PageUp / PageDown / Home / End 可滚)。
仓库结构
lib/index.js 宿主半边:四条路由 + token 边界 + 会话注入
pet-chat.ps1 卡片半边:WinForms 悬浮窗(窗口观测、抓屏、轮询、拖拽)
msgview.cs 自绘消息视图(精确行高 + 圆角气泡,RichTextBox 做不到)
cordis.patch.yml 插件注入声明
verify/selfcheck.mjs 宿主桩测试
design-demos/ 三版 UI 视觉稿(Bento / Raycast 浮层 / 原研哉),当前实现取第 2 版
DESIGN.md 设计文档与逐轮决策记录(含踩过的坑)
License
MIT,见 LICENSE。
No comments yet. Be the first to write one.