dsh-dock 0.20.0 → 0.21.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,13 +21,14 @@
21
21
  | **模型提供商** | 管理自定义模型 Provider 本身:新增 / 编辑 / 删除(OpenAI 兼容、Anthropic Messages 等)、API Key 写入本机凭据库、拉取上游 `{baseURL}/models` 列表;排版同官方模型管理页。**独立功能,可单独停用**——停用后写配置与出站拉取的路由一并关闭 |
22
22
  | **模型余额** | 展示所有模型 Provider 账户余额(5 分钟自动刷新);内置「DeepSeek 账号」官网余额(走宿主登录态,充值/赠送分列,不是 API Key 余额接口) |
23
23
  | **任务动画** | 19 种任务运行动画(含星际远征、星云潮汐、曲速航道、量子雷达、星座网络、深海脉动、神经电路等),速度随任务活动联动,配置全部持久化 |
24
- | **任务通知** | 任务完成 / 异常 / 需确认 / 需回答 / 卡住通知:页内卡片(总开关 + 完成/异常/需确认/卡住各自独立开关 + 卡片口径简洁/适中/详细三挡;卡住卡写明主/子任务、停滞时长与最后动作,恢复自动收、主任务在等子任务时不误报;**停在原地等人(等批准 / 等回答)一律不算卡住**,等回答单独弹「任务需要你回答」卡)、6 种提示音、浏览器系统通知、语音播报(**服务端总开关 + 本机开关两层**:服务端管全实例、本机开关存当前浏览器,两者都开才播报;完成/停止/需授权/需回答/卡住 × 简洁/适中/详细三挡 × 音色可选)、钉钉/飞书群机器人推送(宿主直发,浏览器关着也能推);与动画互相独立、各自启停 |
24
+ | **任务通知** | 任务完成 / 异常 / 需确认 / 需回答 / 卡住通知(设置页支持「服务端配置 / 本机配置」总开关 + 事件×渠道勾选矩阵):页内卡片(总开关 + 完成/异常/需确认/卡住各自独立开关 + 卡片口径简洁/适中/详细三挡;卡住卡写明主/子任务、停滞时长与最后动作,恢复自动收、主任务在等子任务时不误报;**停在原地等人(等批准 / 等回答)一律不算卡住**,等回答单独弹「任务需要你回答」卡)、6 种提示音、浏览器系统通知、语音播报(**服务端总开关 + 本机开关两层**:服务端管全实例、本机开关存当前浏览器,两者都开才播报;完成/停止/需授权/需回答/卡住 × 简洁/适中/详细三挡 × 音色可选)、钉钉/飞书群机器人推送(宿主直发,浏览器关着也能推,消息口径可调);与动画互相独立、各自启停 |
25
25
  | **运行状态** | 任务运行状态一览:进行中任务的阶段 / 耗时 / 回合 / 步骤 / 工具 / Token、等人介入提醒(等批准的工具与说明 / 等回答的问题,分别打「等待确认」「等待回答」标签)与最近完成记录(只读,与动画/通知共用同一份宿主侧追踪) |
26
26
  | **语音朗读** | 把会话回复读出来(浏览器 Web Speech API 语音合成,不消耗 token、不经过服务器):每条已完成回复下方一个 🔊 喇叭——点一下读这条、播放中再点暂停、继续就地续读(不重头),另有重新朗读/停止;也可开「自动朗读」,任务结束时直接读最后一条回复。音色/语速/音调/音量可调,Markdown 自动清洗(代码块、表格、思考过程不念),支持「只读前 N 句 / 字数上限」 |
27
27
 
28
28
  | **趣味游戏** | 任务等待时消磨时间的十款小游戏(五子棋、中国象棋、俄罗斯方块、推箱子、贪吃蛇、打砖块、极速赛车、坦克大战、星际躲避、反应堆解谜);浮动窗口可拖动/缩放/最小化,不遮挡会话,靠屏幕侧边隐藏 |
29
29
  | **图片理解代理** | 图片识别等(visionproxy);原图候选默认折叠展示,图片能力以你的声明为准 |
30
30
  | **远程访问** | 账号密码登录的远程入口:网关监听 `0.0.0.0` 独立端口,手机/平板/局域网设备访问同一实例,会话与任务进度实时一致;主实例保持仅监听 `127.0.0.1`,结构上不存在绕开登录的直连路径;LAN 非安全上下文自动补 crypto.randomUUID。 |
31
+ | **手机适配** | 手机/窄屏体验优化(**默认关闭,需要时在功能坞开启**;关闭后零残留、不干扰原生排版):输入框 16px 防 iOS 聚焦整页缩放、原生侧栏开关触控热区扩到 44×44、代码块横向滚动、会话输入行的余额/用量 chip 收起;旧版 DSH(<768 仍是「左导航 + 右内容」两栏弹层 / 静态图标轨道)自动兜底成单列 / 浮层抽屉。样式与行为在挂载时注入、关闭即移除,不改 `index.html` 与 `viewport` meta。 |
31
32
  | **心跳监视 / 主题信息** | 示例功能(纯 Client) |
32
33
 
33
34
  **会话区随身小控件**:启用后,在会话输入区工具行(模型选择器左侧)显示——
@@ -39,7 +40,7 @@
39
40
 
40
41
  ## 界面
41
42
 
42
- 点击侧栏底部「功能坞」按钮,弹出功能面板:左侧导航 = 首页总揽 + 各功能模块,右侧内容区。
43
+ 「功能坞」现在是**侧栏一级面板图标**(与「插件」「服务台」并列):点击打开功能坞面板页。可用侧栏「更多」菜单里的 Pin 把它固定在侧栏顶部,或取消固定收进「更多」——位置随你。会话输入区的余额/用量小控件点击仍会弹出浮层面板。
43
44
 
44
45
  ![用量记录页](screenshots/dock-tokenlog.png)
45
46
 
@@ -120,7 +121,7 @@ dsh plugin --profile web add dsh-dock # 换回 npm 版
120
121
  每个功能有独立开关,两个入口:
121
122
 
122
123
  - **弹窗页脚**:进入某个功能页,页脚显示「已启用(点击停用)/ 已停用(点击启用)」
123
- - **设置页**:侧栏底部 → 设置 → 功能坞,每个模块卡片上有开关
124
+ - **设置页**:账号菜单 → 设置 → 功能坞,每个模块卡片上有开关
124
125
 
125
126
  停用某功能后,其菜单项、首页卡片、会话区小控件一并隐藏。
126
127
 
@@ -186,14 +187,18 @@ dsh plugin --profile web add dsh-dock # 换回 npm 版
186
187
 
187
188
  **任务通知**(从「任务动画」拆出,独立菜单项与开关)
188
189
 
189
- ![任务通知:通知事件 / 提醒方式 / 提示音试听 / 钉钉与飞书群机器人推送(Webhook 已脱敏)](screenshots/dock-notify.png)
190
+ ![任务通知:配置来源(服务端/本机)+ 按事件提醒矩阵 + 按渠道设置 + 群机器人(Webhook 已脱敏)](screenshots/dock-notify.png)
190
191
 
191
192
  1. 打开功能坞 → 任务通知:
192
- - **通知事件**:**页内卡片**总开关(关闭后右侧所有类型的通知卡片一律不弹,已挂着的一并收起;语音播报、提示音、系统通知、群推送各自独立、不受影响)+ 完成通知 / 异常通知 / **需确认提醒**(工具等待你批准,如沙箱越界执行命令时弹卡片 + 确认音;审批处理完卡片自动收起,没处理完就一直显示,点卡片直达该会话)/ **需回答提醒**(会话调 `ask_user_question` 提问后挂起等你选答案时弹「任务需要你回答」卡,写明问的是什么、共几问;答完自动收起——**提问挂起期间一律不算卡住**)/ **卡住提醒**(编程阶段长时间没有动静时弹卡,写明是**主任务还是子任务**、停滞了多久、最后在执行什么;恢复活动或任务结束自动收起,同一停点只弹一次;主任务有子任务在跑时不算卡住,交由子任务自己判定;**命令还在跑、正在压缩上下文这类「看着没事件其实在干活」的窗口也不算卡住**)——四类各自独立开关
193
- - **提醒方式**:**卡片口径**三挡(**简洁 / 适中 / 详细**,`cardMode`,默认详细=原有内容)决定右侧卡片正文写多少——简洁=任务与耗时、谁卡住;适中=加模型、起止时间、停滞时长;详细=全部(回合步骤、Token、摘要或错误、最后动作),与各类型开关、语音播报互不影响。结束卡片(完成/异常)**常驻到「看过」**——没有任何超时自毁,后台跑完的任务切回来一定还在;**点卡片直达对应会话**(跳转成功即收起),点进那个会话看结果也会自动收起,手动 ✕ 照旧;跳转与「看过」判定都按**会话 id** 走(优先宿主官方 `uiWorkspace.openSession`,回退侧栏行的 `data-row-key`),窄窗口/宽侧栏下同样可靠。卡片 ≥3 张自动**叠放**成标题条,鼠标移上去整体展开。浏览器系统通知(仅页面后台时推送,首次开启会请求授权)、**提示音** 6 种 WebAudio 合成音效可选(完成 / 异常 / 确认各配一音,可单独试听)
194
- - **钉钉推送**(可选):任务结束由宿主直发 markdown 消息到钉钉群机器人(浏览器关着也能推)——填入 Webhook 地址保存,「发送测试消息」验证连通;机器人安全设置选「自定义关键词」填「任务」或「dsh」
195
- - **飞书推送**(可选):与钉钉同款消息以卡片形式推送到飞书群机器人——填入 Webhook 地址(`https://open.feishu.cn/open-apis/bot/v2/hook/…`)保存,「发送测试消息」验证连通;可与钉钉同时开启
196
- - **语音播报**(可选,默认关):**服务端总开关 + 本机开关两层**——服务端开关跨浏览器(团队共用一个实例时由管理员统一控制),本机开关存当前浏览器(每人可单独静音,不影响别人;默认开,保持服务端开启后的既有行为);**两者都开才播报**。任务**完成 / 停止 / 需要授权 / 需要回答 / 卡住**时用浏览器语音(Web Speech API)说一句话——这些时刻各自独立开关,口径**三挡**(**简洁 / 适中 / 详细**):**简洁**=一句话(「任务完成」;卡住则报「主任务(或子任务)·标题 卡住了」,一听就知道卡在哪),**适中**=点名任务(结束带原因与耗时、需授权带要批准的场景、卡住带停滞时长),**详细**=全量(结束带回合统计与回复摘要、需授权带工具名、需回答带问题正文、卡住带最后动作);可调语速/音量/音色/语言并试听(音色下拉与【语音朗读】同款:读本机音色表、中文在前分组,换设备选中的音色不存在时自动按语言回落)。与【语音朗读】共用本机声音但两套开关互不依赖;播报是打断式的(正在朗读正文时任务信先来);「卡住」= 编程阶段长时间没有任何动静时报一次,**主任务与子任务会话分别判定、分别播报**(会话头 `origin`/`delegationDepth` 判归属;恢复后再卡可再报;**等批准、等回答的会话都不算卡住**——前者由「需要授权」负责、后者由「需要回答」负责;主任务有子任务在跑时不算卡住,交给子任务判定;**有在飞的工具调用、正在压缩上下文也不算卡住**,那是在干活,判据统一在 `src/shared.js` 的 `taskStalled`,两条通知路径共用一份)
193
+ - **配置来源**(顶部总开关):**服务端配置**(默认,存宿主 `settings`,所有浏览器/设备共享)或**本机配置**(只存当前浏览器 `localStorage`,自己一套开关、不影响别人;可一键从服务端复制)。群机器人推送与语音服务端总开关始终由服务端执行/控制,本机模式下不可修改。
194
+ - **按事件提醒**(默认页签):事件 × 渠道矩阵——纵向是**完成 / 异常 / 需确认·需回答 / 卡住**,横向是**页内卡片 / 提示音 / 系统通知 / 语音播报 / 钉钉 / 飞书**;勾选即「该事件用该渠道提醒」。「—」表示该渠道不支持此事件(提示音与系统通知没有卡住,群机器人只在任务结束推送)。每个渠道的总开关、正文口径与详细参数在「按渠道设置」页签。
195
+ - **按渠道设置**:
196
+ - **页内卡片**:总开关 + 正文口径三挡(简洁 / 适中 / 详细);结束卡常驻到「看过」、点卡直达会话、≥3 张自动叠放收纳。
197
+ - **提示音**:总开关 + 6 种 WebAudio 合成音效可选、可单独试听。
198
+ - **系统通知**:总开关 + 浏览器授权状态;仅页面在后台时推送。
199
+ - **语音播报**:服务端总开关 + 本机开关(两者都开才播报)+ 播报口径三挡 + 语速/音量/音色/语言/试听;播报事件在上方矩阵的「语音播报」列勾选。
200
+ - **群机器人**:钉钉 / 飞书推送(任务结束由宿主直发,浏览器关着也能推);各自可填 Webhook、发送测试消息,并选择**消息口径**(简洁 / 适中 / 详细);推送事件在「按事件提醒」的钉钉/飞书列勾选(仅完成 / 异常)。
201
+ - **语音播报细节**(可选,默认关):任务**完成 / 停止 / 需要授权 / 需要回答 / 卡住**时用浏览器语音(Web Speech API)说一句话——口径**三挡**:**简洁**=一句话(「任务完成」;卡住则报「主任务(或子任务)·标题 卡住了」,一听就知道卡在哪),**适中**=点名任务(结束带原因与耗时、需授权带要批准的场景、卡住带停滞时长),**详细**=全量(结束带回合统计与回复摘要、需授权带工具名、需回答带问题正文、卡住带最后动作);可调语速/音量/音色/语言并试听(音色下拉与【语音朗读】同款:读本机音色表、中文在前分组,换设备选中的音色不存在时自动按语言回落)。与【语音朗读】共用本机声音但两套开关互不依赖;播报是打断式的(正在朗读正文时任务信先来);「卡住」= 编程阶段长时间没有任何动静时报一次,**主任务与子任务会话分别判定、分别播报**(会话头 `origin`/`delegationDepth` 判归属;恢复后再卡可再报;**等批准、等回答的会话都不算卡住**——前者由「需要授权」负责、后者由「需要回答」负责;主任务有子任务在跑时不算卡住,交给子任务判定;**有在飞的工具调用、正在压缩上下文也不算卡住**,那是在干活,判据统一在 `src/shared.js` 的 `taskStalled`,两条通知路径共用一份)
197
202
  2. 通知与动画**互不依赖**:停用「任务动画」后通知照常工作,反之亦然(动画 / 通知 / 运行状态共用同一份宿主侧任务追踪,只有一份开销)
198
203
  3. 群机器人推送的事件筛选跟随「完成 / 异常通知」开关;通知配置经宿主 settings 持久化,重启后恢复;升级会自动把旧版存在「任务动画」里的通知配置迁移过来
199
204
 
@@ -255,7 +260,7 @@ dsh plugin --profile web add dsh-dock # 换回 npm 版
255
260
  - **重启自动拉起**:开启状态与端口会被记住,重启 `dsh web` 后插件加载时网关按上次端口自动重新监听,不必进面板再点一次;账号密码同样保持。历史升级中若账号等配置滞留在 `~/.dsh/settings.yaml.imported`(dsh 升级改名旧配置时官方导入 dsh-dock 段失败),下次启动会一次性自动恢复——现网已有改动的段不会被覆盖。
256
261
  - **异地组网**:Tailscale/ZeroTier 等虚拟组网内直接用组网 IP 访问同一入口,效果与局域网相同。
257
262
  - 旧版「服务器模式(0.0.0.0)」与「扫码令牌接力」已被此方案取代:前者把无认证的 DSH 裸露给局域网,后者双实例任务状态不同步。开启远程访问时会自动清理旧的 0.0.0.0 webserver 补丁行(提示重启后回到仅本机)。
258
- 2. **手机端接力体验(远程访问自带)**:
263
+ 2. **手机端接力体验(远程访问自带)**(页面排版/抽屉/设置弹层由【手机适配】模块负责,见上表):
259
264
  - **PWA 添加到主屏幕**:网关自带 manifest 与图标(品牌渐变 + 白色气泡,零依赖生成),手机浏览器「添加到主屏幕」后像 App 一样全屏打开,无地址栏;未登录也能先装,打开后自然进登录页。
260
265
  - **断线提示**:换网 / 锁屏久置导致连接中断时,页面顶部出现「连接已断开,正在重连…」胶囊,恢复后自动消失(连续 2 次探测失败才提示,不闪报)。
261
266
  - 面板「远程访问」页与首页总揽会显示当前**在线设备数**;登录页支持密码明文切换。