中文EN

meow-smooth

ui已测通过npmMIT

手机优先的 DSH 前端体验优化:输入框自动折叠、手机回车换行、侧边栏/顶部栏/设置页压缩、禁缩放回弹,以及审批/提问/任务完成通知(页面卡片、Web Push、webhook);零 dsh 本体改动。

下载量 / Downloads
3,298
依赖体积 / node_modules
1.16 MB
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

安装

dsh plugin --profile web add meow-smooth

沙箱测试结果

阶段结果
1 安装✓
2 列装✓
3 挂载✓
4 启动—

四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。

README

dsh-meow-smooth 喵丝滑——手机端远程使用dsh,躺着coding,刷b站coding

dsh(DeepSeek Harness)前端体验增强插件,零 dsh 本体改动,纯客户端自包含。

装上之后,dsh 在手机上像原生 App 一样好摸,在电脑上也有更舒服的小细节。

tailscale实现手机端远程连接dsh(插件包含tailscale配置踩坑指导,AI看完应该可以帮你快速实现手机连接dsh,你就不用自己从零开始踩坑了。)

手机端ui交互优化,让手机端dsh真正可用。你可以躺着coding了。

电脑、手机都支持的通知系统。AI跑任务,你切出去刷b站了,AI跑完任务或者中途提问,会发通知给你。

还有一些ui交互方面的细节优化。

作者自己在用,亲测好用,非常提高幸福感。

dsh-meow-smooth:

<img width="725" height="594" alt="image" src="https://github.com/user-attachments/assets/e5bb97b6-051e-45a9-b7a9-8437fe400a4c" />

功能

打字舒服

  • 输入框失焦自动折叠:长草稿不再一直占着半个屏幕。写完切走,输入框自动收起来——电脑上保留 2 行(扫一眼上下文就能接着写),手机上收成 1 行(屏幕小,把地方留给内容);点一下又展开,草稿内容和滚动位置原样保留。
  • 手机上回车 = 换行:手机键盘的回车键变成"换行",不怕误触把半截话发出去;Shift/Ctrl/Enter 和输入法选词不受影响,桌面键盘依旧是回车发送。
  • AI 运行时多一个插话按钮:AI 正在回话时(发送键变成停止的那一刻),发送按钮旁会多出一个小箭头——点了等价于按一次回车,按设置执行插话或排队。手机回车已改成换行、虚拟键盘又没有 Ctrl/Cmd 键,运行中插话全靠它补全;AI 空闲时它自动消失,界面跟原版一样。
  • 打字时顶部栏自动让位:唤起输入法时,对话/轨迹那些标签自动隐藏,屏幕最上方只留一条当前会话名——你知道自己正在跟谁聊;键盘收起,一切恢复原样。

手机上更顺滑

  • 按钮行永不换行:窗口再窄(折叠屏半窗、小屏),权限/模型/上下文/发送按钮都稳稳一行排开——空间不够时模型名自动缩短省略,权限按钮自动收成图标,不再整排掉到第二行。
  • 模式选择只留图标:agent preset 在手机上只显示一个小图标,点一下展开完整名字,点别处自动收回。
  • 侧边栏更聪明:窄屏下切换会话后,侧边栏自动收起,把屏幕还给对话;展开时点一下右侧空白就收起。
  • 边缘手势抽屉:屏幕左缘往右轻轻一划,侧边栏滑出来;再划一下展开完整侧边栏;长划一步到位。想收起就点外面或往左一划,直接收得干干净净。三档停留全是原生状态,动画用的是官方自带过渡,丝滑不卡手。
  • 返回手势当抽屉用:手机浏览器里,屏幕左缘往右一划(或按返回键)不再退出页面——直接打开侧边栏;边栏开着时再来一次就收起。跟 PWA 里的体验一致,AI 跑着任务也绝不会被一滑带走;要离开页面用系统的多任务/标签切换。
  • 细竖条折成小方块:手机上连收起后的那条细竖条也省了——它折叠成左上角一个带 DeepSeek 图标的小方块,会话标题自动让位,谁也不挡谁。点一下直接展开完整侧边栏,选完会话自动折回去。哪天装了会往侧边栏加按钮的插件,小方块还会自动让位回原生竖条,一个按钮都不藏。
  • 宽手机右侧面板分屏(dsh 0.1.6+):折叠屏内屏、小平板(宽度约 560–768px)上打开右上角的文件查看面板,不再整屏盖住对话——屏幕左右各半:左边继续对话,右边看文件,面板滑入与对话让位是同步动画。普通手机(≤480px)保持全屏;电脑窄窗口与 ≥768px 设备官方本来就是分栏,行为不变。
  • 细竖条折成小方块:手机上连收起后的那条细竖条也省了——它折叠成左上角一个带 DeepSeek 图标的小方块,会话标题自动让位,谁也不挡谁。点一下直接展开完整侧边栏,不再先唤出细竖条,选完会话自动折回去。细竖条仍可从屏幕左缘划出来停留。
  • 按钮只留图标:下载记录、后台任务、子代理这些按钮在手机上缩成紧凑的小图标,依旧一点就开。
  • 顶部栏可以横滑:Session 名永远完整显示、绝不截断,内容超宽就左右滑着看。
  • 回答信息行可以横滑:AI 回答下方那排 复制/点赞/分支 + 时间·用时·首token·吐字速度,手机上一行放不下——左右滑动就能看到后面的统计,不再被屏幕边缘切掉。
  • 禁止意外缩放:双击、双指捏合都不会再让页面意外缩放。
  • 表格触摸滚动修复:AI 画的表格,从表格任意位置起手都能正常上下滑动页面了(之前必须精准按到文字上才动);宽表格还能直接左右滑,看得到右边的列。
  • 禁用橡皮筋回弹:页面下拉不会再回弹,更像原生 App 的手感。
  • 设置页也适配了手机:手机上设置页全屏显示,左侧边栏收成图标列,点开展开;电脑上保持官方原样。
  • 手机拍/选图(dsh ≤0.1.2):输入栏右侧加 📷,直接调起系统「拍照 / 相册」,选好的图与桌面拖图走同一条官方附件管线(压缩、预览、发送全部复用官方行为,零宿主改动)。0.1.3-alpha.2 起官方自己带了 📎 选图入口,本插件探测到就不再重复显示,按钮自动让位。

通知

  • 提醒卡片:AI 跑长任务时中途要权限、或有问题等你回答——即使你没在看那个会话,屏幕上方也会弹出提醒卡片,点一下就跳过去处理。AI 回合因错误中断(接口报错、限流等)同样弹卡片提醒。
  • 系统通知:AI 跑完长任务、中途要权限或提问,哪怕你已经切出去刷 B 站了,也会弹系统通知,点通知直接回到对应会话。
  • 多会话同时跑也不错过:一次开好几个会话同时跑,你在和其中一个聊天,别的会话有动静(跑完任务 / 要权限 / 提问)同样会提醒你。
  • 运行失败也提醒:AI 回合因错误中断(接口报错等)时同样弹通知。自动重试中的瞬时小错误不打扰——只有重试不过去的最终失败才提醒,每条失败恰好一条通知。
  • 手机也能收到系统通知:桌面和安卓直接弹系统通知;iPhone 通过 Web Push 或 Bark 等通道也能收到(配置见下文)。
  • 不打扰:电脑端 dsh 页面正聚焦时不弹系统通知(官方面板/卡片负责提醒),切到别的窗口才弹。

手机上访问更快

dsh 的大会话在手机上看很慢——历史记录一次要拉好几 MB 的 JSON。插件内置压缩代理,把这些响应压缩 70–90%,蜂窝网络也流畅;流式输出和实时连接不受影响。默认关闭,需要时在配置里打开(见下文)。

安装

从 GitHub 安装:源码在 src/,lib/ 不入仓库,安装时 npm 会触发 prepare 脚本现场构建,装完即用。

dsh plugin --profile web add github:Phant0Meow/dsh-meow-smooth

从 npm 安装:包内已含构建产物 lib/index.js 与 lib/client.js,安装时不再构建。

dsh plugin --profile web add meow-smooth

两种方式装完都会自动挂载,重启 DSH web 后启用,无需手工编辑任何组合文件。

npm 源 dsh plugin --profile web add meow-smooth 自 0.6.1 起恢复可用;0.6.0 及更早版本的 package.json 带 BOM 会解析失败,请避开。GitHub 源始终最新,推荐优先使用。

卸载

dsh plugin --profile web remove meow-smooth

彻底移除,重启 DSH web 后不再加载。

兼容性

支持 dsh 0.1.5(含最新的 0.1.5-rc.1),同时向下兼容旧版本——升级 dsh 不需要改本插件,也不需要改配置,手机端链接(tailscale serve 指向)照旧。

其中的手机访问加速代理会自动分辨宿主版本:老版 dsh 没有响应压缩,代理就压缩历史记录;新版 dsh 自己已经会压缩,代理自动切成纯透传,不再多绕一层。这个判断靠实测能力、不认版本号,所以夹在中间的版本也各有正确行为。

通知功能(可选)

页面内提醒卡片开箱即用;系统通知(Web Push / webhook)需要一点额外配置:

  • HTTPS:Web Push / Service Worker 要求安全上下文——手机端需要一个 HTTPS 入口(Tailscale Serve、Caddy、nginx 均可),并从该入口"添加到主屏幕";
  • iOS:16.4+(Web Push for Home Screen Web Apps),需在 PWA(从主屏幕图标打开)里完成通知授权;
  • VAPID keys:首次启动自动生成,持久化在 $DSH_HOME/.meow-smooth/;长任务完成阈值 longTaskToolCalls(默认 7)可在 patch config 里调整;
  • webhook 兜底(Bark 等):patch 配置 webhookUrl(如 https://api.day.app/<Bark key>)后,三类事件也会 POST 到该地址;iOS 订阅建立后不会双通道重复提醒。webhookIconUrl / webhookAppUrl 可分别配置通知图标与点击跳转地址;
  • iOS 已知限制:iOS 18.x 上 PWA 通知权限弹窗偶尔不出现(WebKit 320551)、APNs 偶尔投递不到(WebKit 319865)——均为概率性问题,授权成功后通常能正常收到,Bark 可作稳定兜底;
  • 多实例:每个 dsh 实例各自在 patch 里配置,跳转/图标 URL 用各自入口。

飞书 / 企业微信群机器人(可选,需要转发脚本)

飞书自定义机器人和企业微信群机器人要的不是 Bark 形状的报文,而是各自的卡片结构。插件只发 Bark 形状的 JSON,所以用它们需要一层转换:

scripts/feishu-relay.mjs 是一个零依赖的转发进程——接收插件发出的 Bark 形状报文,构造成飞书 interactive 卡片(按事件类型配色:待审批橙、待回答蓝、完成绿、失败红、启动青),签名后投递到群机器人的 webhook。

先把脚本放到你自己的目录。 下面的命令假定你就在一个含 scripts/ 的目录里。若你是从 npm 或 dsh plugin add github:… 安装的,文件在 <profile>/node_modules/meow-smooth/scripts/ 下——请先把 feishu-relay.mjs 与 feishu-relay.config.example.json 复制到一个你自有的稳定目录再运行。脚本把配置与日志都写在它自己所在的目录,直接在 node_modules 里跑的话,重装一次就全丢了。

1. 复制配置样例,填入群机器人的 webhook 地址(secret 只在飞书侧开了「签名校验」时才需要):

   cp scripts/feishu-relay.config.example.json scripts/feishu-relay.config.json

2. patch 配置里让 webhook 每次都发,并把地址指向这个进程:

   - id: meow-smooth
     config:
       enabled: true
       webhookMode: always        # 默认 fallback:桌面 Web Push 成功时 webhook 永不触发
       webhookUrl: 'http://127.0.0.1:2587/'

webhookMode: always 是必须的:默认的 fallback 只在 Web Push 无订阅或全部失败时才发 webhook,而同一台机器的桌面端订阅通常是好的,于是 webhook 永远收不到东西。

3. 启动转发进程(与 dsh 同机,常驻):

   node scripts/feishu-relay.mjs

想让卡片按钮点了就能直接进 dsh,还需要额外把 dsh 的输出落盘。 dsh 的浏览器 cookie 是 SameSite=Strict、按浏览器各存各的、绑定 hostname+port,从手机上的 IM 点一个裸域名链接必然 401;能换到 cookie 的是带 launch token 的链接,而那个 token 只出现在 dsh 启动时的 stdout(在进程内存里,不落盘、没有文件可读)。所以把启动输出重定向到一个文件,并让配置里的 launchUrlFile 指向它(默认是同目录的 dsh-stdout.log):

dsh web --no-open > dsh-stdout.log 2>&1          # Linux / macOS(或 dsh web --no-open | 

…(truncated)

以上内容来自 npm 上的 README,我们只做格式化,不改内容。

版本

npm 上共发布:11,最后更新 2026-09-23

链接

GitHub · Homepage · npm

同类插件