dsh-dock 0.19.0 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -21,14 +21,13 @@
21
21
  | **模型提供商** | 管理自定义模型 Provider 本身:新增 / 编辑 / 删除(OpenAI 兼容、Anthropic Messages 等)、API Key 写入本机凭据库、拉取上游 `{baseURL}/models` 列表;排版同官方模型管理页。**独立功能,可单独停用**——停用后写配置与出站拉取的路由一并关闭 |
22
22
  | **模型余额** | 展示所有模型 Provider 账户余额(5 分钟自动刷新);内置「DeepSeek 账号」官网余额(走宿主登录态,充值/赠送分列,不是 API Key 余额接口) |
23
23
  | **任务动画** | 19 种任务运行动画(含星际远征、星云潮汐、曲速航道、量子雷达、星座网络、深海脉动、神经电路等),速度随任务活动联动,配置全部持久化 |
24
- | **任务通知** | 任务完成 / 异常 / 需确认 / 卡住通知:页内卡片(总开关 + 完成/异常/需确认/卡住各自独立开关 + 卡片口径简洁/适中/详细三挡;卡住卡写明主/子任务、停滞时长与最后动作,恢复自动收、主任务在等子任务时不误报)、6 种提示音、浏览器系统通知、语音播报(完成/停止/需授权/卡住 × 简洁/适中/详细三挡 × 音色可选)、钉钉/飞书群机器人推送(宿主直发,浏览器关着也能推);与动画互相独立、各自启停 |
25
- | **运行状态** | 任务运行状态一览:进行中任务的阶段 / 耗时 / 回合 / 步骤 / 工具 / Token、等待确认提醒(等待的工具与说明)与最近完成记录(只读,与动画/通知共用同一份宿主侧追踪) |
24
+ | **任务通知** | 任务完成 / 异常 / 需确认 / 需回答 / 卡住通知:页内卡片(总开关 + 完成/异常/需确认/卡住各自独立开关 + 卡片口径简洁/适中/详细三挡;卡住卡写明主/子任务、停滞时长与最后动作,恢复自动收、主任务在等子任务时不误报;**停在原地等人(等批准 / 等回答)一律不算卡住**,等回答单独弹「任务需要你回答」卡)、6 种提示音、浏览器系统通知、语音播报(**服务端总开关 + 本机开关两层**:服务端管全实例、本机开关存当前浏览器,两者都开才播报;完成/停止/需授权/需回答/卡住 × 简洁/适中/详细三挡 × 音色可选)、钉钉/飞书群机器人推送(宿主直发,浏览器关着也能推);与动画互相独立、各自启停 |
25
+ | **运行状态** | 任务运行状态一览:进行中任务的阶段 / 耗时 / 回合 / 步骤 / 工具 / Token、等人介入提醒(等批准的工具与说明 / 等回答的问题,分别打「等待确认」「等待回答」标签)与最近完成记录(只读,与动画/通知共用同一份宿主侧追踪) |
26
26
  | **语音朗读** | 把会话回复读出来(浏览器 Web Speech API 语音合成,不消耗 token、不经过服务器):每条已完成回复下方一个 🔊 喇叭——点一下读这条、播放中再点暂停、继续就地续读(不重头),另有重新朗读/停止;也可开「自动朗读」,任务结束时直接读最后一条回复。音色/语速/音调/音量可调,Markdown 自动清洗(代码块、表格、思考过程不念),支持「只读前 N 句 / 字数上限」 |
27
27
 
28
28
  | **趣味游戏** | 任务等待时消磨时间的十款小游戏(五子棋、中国象棋、俄罗斯方块、推箱子、贪吃蛇、打砖块、极速赛车、坦克大战、星际躲避、反应堆解谜);浮动窗口可拖动/缩放/最小化,不遮挡会话,靠屏幕侧边隐藏 |
29
29
  | **图片理解代理** | 图片识别等(visionproxy);原图候选默认折叠展示,图片能力以你的声明为准 |
30
- | **远程访问** | 账号密码登录的远程入口:网关监听 `0.0.0.0` 独立端口,手机/平板/局域网设备访问同一实例,会话与任务进度实时一致;主实例保持仅监听 `127.0.0.1`,结构上不存在绕开登录的直连路径;LAN 非安全上下文自动补 crypto.randomUUID。手机端排版不在此列——统一归「手机适配」。 |
31
- | **手机适配** | 手机/窄屏排版与触控兜底:输入类控件 16px 防 iOS 聚焦缩放、纯图标按钮触控面积兜底 ≥36px、代码块横向滚动、viewport-fit=cover 安全区、滚动体 touch-action:pan-y + iOS 惯性滚动、设置弹层 min-height:0 滚动兜底;手机端 chrome 含左上角「三条横线」汉堡菜单(点击展开左侧会话抽屉,不占页面空间)+ 侧栏抽屉遮罩 + 软键盘让位 + 设置弹层纵排(宿主经 tapIndex 注入,客户端自建同款互斥) |
30
+ | **远程访问** | 账号密码登录的远程入口:网关监听 `0.0.0.0` 独立端口,手机/平板/局域网设备访问同一实例,会话与任务进度实时一致;主实例保持仅监听 `127.0.0.1`,结构上不存在绕开登录的直连路径;LAN 非安全上下文自动补 crypto.randomUUID。 |
32
31
  | **心跳监视 / 主题信息** | 示例功能(纯 Client) |
33
32
 
34
33
  **会话区随身小控件**:启用后,在会话输入区工具行(模型选择器左侧)显示——
@@ -182,7 +181,7 @@ dsh plugin --profile web add dsh-dock # 换回 npm 版
182
181
  - 桌面伙伴:**CSS 3D 立体**的具象人物坐在紧凑双工位前,任务活动越密集动作越快;**流级实时同步任务阶段**——模型思考时微抬头、单手托下巴,正文输出/写代码时低头键入右侧工位,查资料时转头扫视左侧屏幕;整卡可拖到屏幕任意位置(位置持久化),右下角手柄 / 面板滑块可缩放大小(85%~220%,自动保存)
183
182
  - 星际远征 / 星云潮汐 / 曲速航道 / 量子雷达 / 星座网络 / 数据萤火 / 深海脉动 / 棱镜光谱 / 神经电路 / 引力涟漪 / 灵感天灯:从星系远征到电路脉冲的十一种氛围场景(星际远征完成时货运舰会归航停泊在输入框上方)
184
183
  2. 任务结束动效自动消失,完成瞬间一缕流光掠过;功能坞面板打开时环境动效自动隐藏避免重叠
185
- 3. 任务运行状态(进行中 / 等待确认 / 最近完成)见左侧「运行状态」菜单,结束与需确认提醒见「任务通知」
184
+ 3. 任务运行状态(进行中 / 等人介入(等批准或等回答) / 最近完成)见左侧「运行状态」菜单,结束与需确认提醒见「任务通知」
186
185
  4. 配置(动画开关 / 动画模式 / 桌面伙伴大小)经宿主 settings 持久化,重启 dsh 后自动恢复
187
186
 
188
187
  **任务通知**(从「任务动画」拆出,独立菜单项与开关)
@@ -190,11 +189,11 @@ dsh plugin --profile web add dsh-dock # 换回 npm 版
190
189
  ![任务通知:通知事件 / 提醒方式 / 提示音试听 / 钉钉与飞书群机器人推送(Webhook 已脱敏)](screenshots/dock-notify.png)
191
190
 
192
191
  1. 打开功能坞 → 任务通知:
193
- - **通知事件**:**页内卡片**总开关(关闭后右侧所有类型的通知卡片一律不弹,已挂着的一并收起;语音播报、提示音、系统通知、群推送各自独立、不受影响)+ 完成通知 / 异常通知 / **需确认提醒**(工具等待你批准,如沙箱越界执行命令时弹卡片 + 确认音;审批处理完卡片自动收起,没处理完就一直显示,点卡片直达该会话)/ **卡住提醒**(编程阶段 18 秒没有动静时弹卡,写明是**主任务还是子任务**、停滞了多久、最后在执行什么;恢复活动或任务结束自动收起,同一停点只弹一次;主任务有子任务在跑时不算卡住,交由子任务自己判定)——四类各自独立开关
192
+ - **通知事件**:**页内卡片**总开关(关闭后右侧所有类型的通知卡片一律不弹,已挂着的一并收起;语音播报、提示音、系统通知、群推送各自独立、不受影响)+ 完成通知 / 异常通知 / **需确认提醒**(工具等待你批准,如沙箱越界执行命令时弹卡片 + 确认音;审批处理完卡片自动收起,没处理完就一直显示,点卡片直达该会话)/ **需回答提醒**(会话调 `ask_user_question` 提问后挂起等你选答案时弹「任务需要你回答」卡,写明问的是什么、共几问;答完自动收起——**提问挂起期间一律不算卡住**)/ **卡住提醒**(编程阶段长时间没有动静时弹卡,写明是**主任务还是子任务**、停滞了多久、最后在执行什么;恢复活动或任务结束自动收起,同一停点只弹一次;主任务有子任务在跑时不算卡住,交由子任务自己判定;**命令还在跑、正在压缩上下文这类「看着没事件其实在干活」的窗口也不算卡住**)——四类各自独立开关
194
193
  - **提醒方式**:**卡片口径**三挡(**简洁 / 适中 / 详细**,`cardMode`,默认详细=原有内容)决定右侧卡片正文写多少——简洁=任务与耗时、谁卡住;适中=加模型、起止时间、停滞时长;详细=全部(回合步骤、Token、摘要或错误、最后动作),与各类型开关、语音播报互不影响。结束卡片(完成/异常)**常驻到「看过」**——没有任何超时自毁,后台跑完的任务切回来一定还在;**点卡片直达对应会话**(跳转成功即收起),点进那个会话看结果也会自动收起,手动 ✕ 照旧;跳转与「看过」判定都按**会话 id** 走(优先宿主官方 `uiWorkspace.openSession`,回退侧栏行的 `data-row-key`),窄窗口/宽侧栏下同样可靠。卡片 ≥3 张自动**叠放**成标题条,鼠标移上去整体展开。浏览器系统通知(仅页面后台时推送,首次开启会请求授权)、**提示音** 6 种 WebAudio 合成音效可选(完成 / 异常 / 确认各配一音,可单独试听)
195
194
  - **钉钉推送**(可选):任务结束由宿主直发 markdown 消息到钉钉群机器人(浏览器关着也能推)——填入 Webhook 地址保存,「发送测试消息」验证连通;机器人安全设置选「自定义关键词」填「任务」或「dsh」
196
195
  - **飞书推送**(可选):与钉钉同款消息以卡片形式推送到飞书群机器人——填入 Webhook 地址(`https://open.feishu.cn/open-apis/bot/v2/hook/…`)保存,「发送测试消息」验证连通;可与钉钉同时开启
197
- - **语音播报**(可选,默认关):任务**完成 / 停止 / 需要授权 / 卡住**时用浏览器语音(Web Speech API)说一句话——四个时刻各自独立开关,口径**三挡**(**简洁 / 适中 / 详细**):**简洁**=一句话(「任务完成」;卡住则报「主任务(或子任务)·标题 卡住了」,一听就知道卡在哪),**适中**=点名任务(结束带原因与耗时、需授权带要批准的场景、卡住带停滞时长),**详细**=全量(结束带回合统计与回复摘要、需授权带工具名、卡住带最后动作);可调语速/音量/音色/语言并试听(音色下拉与【语音朗读】同款:读本机音色表、中文在前分组,换设备选中的音色不存在时自动按语言回落)。与【语音朗读】共用本机声音但两套开关互不依赖;播报是打断式的(正在朗读正文时任务信先来);「卡住」= 编程阶段 18 秒没有任何动静时报一次,**主任务与子任务会话分别判定、分别播报**(会话头 `origin`/`delegationDepth` 判归属;恢复后再卡可再报;等批准的会话不算卡住,由「需要授权」负责;主任务有子任务在跑时不算卡住,交给子任务判定)
196
+ - **语音播报**(可选,默认关):**服务端总开关 + 本机开关两层**——服务端开关跨浏览器(团队共用一个实例时由管理员统一控制),本机开关存当前浏览器(每人可单独静音,不影响别人;默认开,保持服务端开启后的既有行为);**两者都开才播报**。任务**完成 / 停止 / 需要授权 / 需要回答 / 卡住**时用浏览器语音(Web Speech API)说一句话——这些时刻各自独立开关,口径**三挡**(**简洁 / 适中 / 详细**):**简洁**=一句话(「任务完成」;卡住则报「主任务(或子任务)·标题 卡住了」,一听就知道卡在哪),**适中**=点名任务(结束带原因与耗时、需授权带要批准的场景、卡住带停滞时长),**详细**=全量(结束带回合统计与回复摘要、需授权带工具名、需回答带问题正文、卡住带最后动作);可调语速/音量/音色/语言并试听(音色下拉与【语音朗读】同款:读本机音色表、中文在前分组,换设备选中的音色不存在时自动按语言回落)。与【语音朗读】共用本机声音但两套开关互不依赖;播报是打断式的(正在朗读正文时任务信先来);「卡住」= 编程阶段长时间没有任何动静时报一次,**主任务与子任务会话分别判定、分别播报**(会话头 `origin`/`delegationDepth` 判归属;恢复后再卡可再报;**等批准、等回答的会话都不算卡住**——前者由「需要授权」负责、后者由「需要回答」负责;主任务有子任务在跑时不算卡住,交给子任务判定;**有在飞的工具调用、正在压缩上下文也不算卡住**,那是在干活,判据统一在 `src/shared.js` 的 `taskStalled`,两条通知路径共用一份)
198
197
  2. 通知与动画**互不依赖**:停用「任务动画」后通知照常工作,反之亦然(动画 / 通知 / 运行状态共用同一份宿主侧任务追踪,只有一份开销)
199
198
  3. 群机器人推送的事件筛选跟随「完成 / 异常通知」开关;通知配置经宿主 settings 持久化,重启后恢复;升级会自动把旧版存在「任务动画」里的通知配置迁移过来
200
199
 
@@ -204,10 +203,10 @@ dsh plugin --profile web add dsh-dock # 换回 npm 版
204
203
 
205
204
  1. 打开功能坞 → 运行状态:
206
205
  - **进行中任务**:任务标题 + 阶段标签(思考中 / 输出中 / 编写代码 / 查资料)、模型(Provider)、已运行时长、回合 / 步骤 / 工具次数、输入↧输出↥ Token
207
- - **等待确认**:顶部横幅提示「N 项等待确认」,对应任务打「等待确认」标签并列出等待的工具与说明(工具等待你批准时任务会停在原地)
206
+ - **等人介入**:顶部横幅提示「N 项等你介入」,并分别点名「M 项等批准、K 项等你回答」;对应任务打「等待确认」标签(工具等你批准,任务停在原地)或「等待回答」标签(会话提问等你选答案),并列出等待的工具与说明 / 问题与标题
208
207
  - **最近完成**:最多 10 条,含结束原因(完成 / 出错 / 已中止 / 受阻 / 达输出上限 / 中断)、耗时、Token 与结束时间
209
208
  2. 面板打开时自动刷新(有任务 2 秒、空闲 8 秒、出错 15 秒),也可手动「刷新」;本模块没有常驻浮层,关掉面板即零开销
210
- 3. 本页只读、**不写任何配置**:数据来自宿主侧会话级任务追踪(与动画 / 通知共用一份);动效在「任务动画」,结束 / 需确认提醒在「任务通知」
209
+ 3. 本页只读、**不写任何配置**:数据来自宿主侧会话级任务追踪(与动画 / 通知共用一份);动效在「任务动画」,结束 / 需确认 / 需回答提醒在「任务通知」
211
210
 
212
211
  **语音朗读**
213
212
 
@@ -256,15 +255,12 @@ dsh plugin --profile web add dsh-dock # 换回 npm 版
256
255
  - **重启自动拉起**:开启状态与端口会被记住,重启 `dsh web` 后插件加载时网关按上次端口自动重新监听,不必进面板再点一次;账号密码同样保持。历史升级中若账号等配置滞留在 `~/.dsh/settings.yaml.imported`(dsh 升级改名旧配置时官方导入 dsh-dock 段失败),下次启动会一次性自动恢复——现网已有改动的段不会被覆盖。
257
256
  - **异地组网**:Tailscale/ZeroTier 等虚拟组网内直接用组网 IP 访问同一入口,效果与局域网相同。
258
257
  - 旧版「服务器模式(0.0.0.0)」与「扫码令牌接力」已被此方案取代:前者把无认证的 DSH 裸露给局域网,后者双实例任务状态不同步。开启远程访问时会自动清理旧的 0.0.0.0 webserver 补丁行(提示重启后回到仅本机)。
259
- 2. **手机端接力体验(窄屏自动生效;由「手机适配」提供)**:
260
- - **左上角汉堡菜单**:点「三条横线」展开左侧会话抽屉(不占页面空间,底部不再有常驻栏)。插件 / 设置 / 运行状态等入口本来就在抽屉里(原生侧栏),展开即可达;**任务等待你确认时汉堡右上角出现红色脉冲角标**(进行中为蓝色计数),一眼可见不用翻页。标题会为汉堡留出宽度(会话页头、插件页头、自动化任务页头都会内缩,标题与汉堡保持 8px 间隔),不会被压住。
258
+ 2. **手机端接力体验(远程访问自带)**:
261
259
  - **PWA 添加到主屏幕**:网关自带 manifest 与图标(品牌渐变 + 白色气泡,零依赖生成),手机浏览器「添加到主屏幕」后像 App 一样全屏打开,无地址栏;未登录也能先装,打开后自然进登录页。
262
260
  - **断线提示**:换网 / 锁屏久置导致连接中断时,页面顶部出现「连接已断开,正在重连…」胶囊,恢复后自动消失(连续 2 次探测失败才提示,不闪报)。
263
- - **软键盘适配**:键盘弹出时汉堡菜单自动让位,不再挤占键盘上方空间。
264
- - 会话入口统一在左上角汉堡菜单(底部 Tab 栏、左缘浮动抽屉把手与浮动侧栏按钮均已移除,避免占用/遮挡内容)。
265
261
  - 面板「远程访问」页与首页总揽会显示当前**在线设备数**;登录页支持密码明文切换。
266
262
 
267
- **不开「远程访问」的直连形态**:也可以不经网关、自行经 patch 层把主实例绑 `0.0.0.0` 直连(安全自担,浏览器表层没有登录认证)。这种形态下「远程访问」功能可以整个停用,dsh-dock 仍兜住两件与功能开关无关的事:**非回环浏览器的「预览版说明」自动确认**(dsh 对远程浏览器的确认不持久化,每次刷新都会重弹;插件级注入,回环地址不介入、保留原生的一次性持久确认)与**「手机适配」的整套窄屏排版**(与远程访问完全解耦,见下)。
263
+ **不开「远程访问」的直连形态**:也可以不经网关、自行经 patch 层把主实例绑 `0.0.0.0` 直连(安全自担,浏览器表层没有登录认证)。这种形态下「远程访问」功能可以整个停用,dsh-dock 仍兜住与功能开关无关的一件事:**非回环浏览器的「预览版说明」自动确认**(dsh 对远程浏览器的确认不持久化,每次刷新都会重弹;插件级注入,回环地址不介入、保留原生的一次性持久确认)。
268
264
 
269
265
  **趣味游戏**
270
266