dsh-zen-remote 2.2.7 → 2.2.8

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
@@ -94,7 +94,7 @@ dsh plugin --profile web add dsh-zen-remote
94
94
  // ~/.dsh/profiles/desktop/package.json
95
95
  {
96
96
  "dependencies": {
97
- "dsh-zen-remote": "^2.2.7" // for local development: "link:/path/to/dsh-zen-remote"
97
+ "dsh-zen-remote": "^2.2.8" // for local development: "link:/path/to/dsh-zen-remote"
98
98
  }
99
99
  }
100
100
  ```
package/README.zh-CN.md CHANGED
@@ -94,7 +94,7 @@ dsh plugin --profile web add dsh-zen-remote
94
94
  // ~/.dsh/profiles/desktop/package.json
95
95
  {
96
96
  "dependencies": {
97
- "dsh-zen-remote": "^2.2.7" // 本地开发换成 "link:/path/to/dsh-zen-remote"
97
+ "dsh-zen-remote": "^2.2.8" // 本地开发换成 "link:/path/to/dsh-zen-remote"
98
98
  }
99
99
  }
100
100
  ```
package/docs/interface.md CHANGED
@@ -127,11 +127,13 @@ PWA,再进来就是冷启动。插件自己的边缘手势也触发不了—
127
127
 
128
128
  ### 附件上传
129
129
 
130
- composer 最左的回形针打开的是**手机本地**的文件选择器(iOS 上会弹相册/拍照/选取文件三选一)——官方那套文件选择器是在跑 DSH 的电脑上弹窗,手机远程用不了。图片和文件一视同仁:都上传到会话工作目录的 `.dsh-uploads/`,composer 上方出现可删除的预览 chip(图片缩略图、文件图标+文件名),并把 `@.dsh-uploads/文件名` 追加到输入框——发不发、什么时候发,由你按官方发送键决定,不会替你自动发出。
130
+ 手机外壳(<768px)底栏左侧常驻本插件的回形针按钮(`[data-mobile-nav="attach"]`;子智能体会话不显示,与官方一致——官方在子智能体会话里也禁用自己的文件选择)。点按直接拉起**手机本地**的系统选择器(iOS 上是相册/拍照/选取文件三选一,支持多选,单文件默认上限 20 MB)。图片和文件一视同仁:都上传到会话工作目录的 `.dsh-uploads/`,composer 上方出现可删除的预览 chip(图片缩略图、文件图标+文件名),并把 `@.dsh-uploads/文件名` 追加到输入框——发不发、什么时候发,由你按官方发送键决定,不会替你自动发出。
131
131
 
132
- **宿主原生附件让位(2026-09-11)**:DSH 0.1.5 起官方工具行自带了一枚回形针(原生附件流,文件落 `~/.dsh/attachments`),手机上于是出现过两枚一样的回形针。现在 `host-attach.ts` 运行时探测官方工具行里自带的 `<input type="file">`(`_tools` 直接子元素、结构性选择器、不依赖语言):探测命中就整组不加载我们的附件 UI(按钮连隐藏 file input、chips 行都不渲染),输入区只留官方一枚;宿主没有(DSH ≤ 0.1.2)则一切照旧。首轮判定走 layout effect,首帧就不会闪出第二枚。
132
+ 接收端点的完整契约:`POST /_dsh/mobile-nav/upload?session=<会话id>&name=<文件名>`,请求体是文件原始字节流(无 multipart 包装)。服务端把文件落盘到该会话工作区的 `.dsh-uploads/`(目录内自动写入自忽略的 `.gitignore`,内容 `*` + `!.gitignore`,已存在则不覆盖),返回相对路径;浏览器半边拿到路径后往草稿追加 `@.dsh-uploads/<文件名>` token,草稿上方的 `conversation.input.dock` 同步渲染缩略图/文件名预览条,点 `×` 或删掉正文里的 `@...` 即移除。
133
133
 
134
- 安全上的几句话:这个功能给插件的 host 半区新增了一条 HTTP 路由(`POST /_dsh/mobile-nav/upload`),只接受同源请求,文件名清洗后只取叶子名,写入路径校验不允许越出工作目录,单文件默认上限 20MB(可在 profile 里的插件行用 `maxUploadBytes` 调整)。远程访问时,这条路由和其它请求一样在 网关半边的配对墙之后。
134
+ **为什么常驻自研按钮(#31 修复)**:DSH 0.1.5 起官方工具行自带了一枚独立回形针(原生附件流,文件落宿主机 `~/.dsh/attachments`),手机上出现过两枚回形针,插件于是按「运行时探测到官方工具行 `_tools` 下隐藏的 `<input type="file">` 就整体让位」处理。顺带修正一个旧说法:`<input type="file">` 在浏览器/PWA 里弹的是**当前客户端设备**的文件选择器,不是宿主机桌面的弹窗。真正压垮让位方案的是 DSH 0.2.x:独立回形针挪进了 `+` 命令菜单,隐藏的 `<input type="file">` 却留在 `_tools` 里——让位探测从此永远命中,手机输入区一枚回形针都不剩(issue #31)。修复后手机外壳不再让位:自研回形针常驻,走自己的上传路由,各版本 DSH 下体验一致;DSH ≤ 0.1.5 官方仍渲染的第二枚独立回形针由 CSS 在 <768px 隐藏,行内始终只有一枚。桌面端(≥768px)一切照旧,官方回形针照常使用。
135
+
136
+ 安全上的几句话:这条 HTTP 路由只接受同源请求,文件名清洗后只取叶子名,写入路径校验不允许越出工作目录,单文件默认上限 20MB(可在 profile 里的插件行用 `maxUploadBytes` 调整)。远程访问时,这条路由和其它请求一样在网关半边的配对墙之后。
135
137
 
136
138
  ### 远程会话拖拽附件(2.2.6)
137
139
 
@@ -215,7 +217,7 @@ composer 最左的回形针打开的是**手机本地**的文件选择器(iOS
215
217
  - 适配 DSH `0.1.5`(0.1.2 → 0.1.5-rc.2 的一批回归,2026-09-11 真机报告、逐项实测):
216
218
  - 官方工具行新增了原生附件回形针,手机端一度出现两枚——现在运行时探测宿主
217
219
  自带的 `<input type="file">`,命中即整组让位(见「附件上传」一节),不命中
218
- 照旧加载;
220
+ 照旧加载(该让位机制已于 #31 移除);
219
221
  - 官方右侧栏的 ExpandButton 落在**新的** `conversation.session.header.corner`
220
222
  槽里,逃过了头部两条 blanket hide,顶到右上角——已隐藏(隐藏它的选择器
221
223
  必须 ≥(0,3,1):老的 utilities 反隐藏规则在 0.1.5 下恰好命中这个 `:last-child`
@@ -519,6 +519,7 @@ npm test # 起 mock 上游,跑 gateway/auth/push 三组测试:反代与注
519
519
  - **稳定选择器**:用 `[data-slot=...]` / ARIA 而非 hash 类名,避免前端构建后失效。
520
520
  - **注入页的单引号坑**:`lib/lan-gate-server.cjs` 里的注入脚本字符串,历史上有「双引号套双引号」bug,注意字面量转义。
521
521
  - **本机直连判定**:新增/修改路由前先看 `isLocalDirect`——它是管理面 403 防护的唯一依据,别绕过它。
522
+ - **改 `pwa/inject.js` 要重启网关**:`lib/lan-gate-server.cjs` 在网关子进程启动时把 `pwa/inject.js` 一次性读进内存常量 `INJECT_JS`(`readPwaText('inject.js')`,用于拼装首帧 HTML 的注入脚本),之后不再读盘——本地改完 `pwa/inject.js` 必须重启网关子进程(或重启 DSH)才会出现在响应里。
522
523
 
523
524
  ---
524
525