dsh-plugin-tether 0.1.24 → 0.1.25

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/CHANGELOG.md CHANGED
@@ -2,6 +2,28 @@
2
2
 
3
3
  本文件记录面向用户的变化。每个版本的这一节会原样作为该版本 Release 的说明。
4
4
 
5
+ ## 0.1.25
6
+
7
+ ### 修复
8
+
9
+ - **窄屏下侧栏卡在 56px:标签文字渲染出来却被裁掉,侧栏开关也找不到**([#22](https://github.com/zexadev/dsh-tether/issues/22))。0.1.24 的窄屏样式用「主框架下有没有拖拽把手」判断侧栏是否展开,这个判据要靠 `:has()`。有的厂商 WebView 会把带 `:has()` 的规则整条丢掉(报告机型:华为 Mate 50 / HarmonyOS 4.2),于是「展开时侧栏 300px」那条不生效,而 dsh 自己处在展开态——标签照常渲染,被 56px 的盒子裁成每行一两个字;开关只在收起态渲染,页面上也找不到,界面就卡在这个混态。现在改读 dsh 写在主框架上的 `data-sidebar-collapsed`(收起为 `"true"`,展开时属性不存在),不再用 `:has()`;插件声明支持的五段 dsh 范围各取一版查过,这个属性每版都有。拖拽把手那条规则一并删掉,手机上它本来也拖不动。实测 480×1056:收起侧栏 57px、无遮罩、「主机」标签隐藏;按开关 301px、遮罩出现、标签显示;点内容区收回。
10
+ - **dsh 桌面端里「我的电脑」按钮点了没有任何反应**([#23](https://github.com/zexadev/dsh-tether/issues/23))。按钮的文案和行为原本按 `window.parent !== window` 判断「是不是在 tether 手机 App 里」,而 dsh 桌面端的插件界面同样跑在宿主的内嵌 frame 里,于是桌面端被当成手机:按钮显示「我的电脑」,点击只向父窗口发一条 `dsh-tether:open-hosts` 消息——桌面宿主没有这条消息的监听者,按钮因此是死的,也没有别的出路。现在改成 App 建窗口时往所有 frame 注入 `window.__DSH_TETHER_APP__`,谁是 App 谁挂标记;拿不到标记一律按浏览器处理,当场出示配对串。桌面端因此也能拿到配对串(换手机、加设备时用),不必再手动开浏览器访问本机地址。这条要配新版 App 才完整:老 App 没有这个标记,装上新插件后按钮会显示「连接手机」并出示配对串。
11
+ - **窄屏下附件缩略图被挤变形**(修 #22 时发现)。窄屏那几条规则用 `[class*="_frame"]` 选主框架,但 dsh 的会话区、附件缩略图、子代理、文档预览的局部类名也带 `_frame`,而且都长在主框架里面。附件缩略图自己是个单格网格,被 `grid-template-columns: 56px minmax(0,1fr) 0px` 改成三列之后,图片挤进 56px 的第一列;侧栏遮罩那条同理会糊在每个嵌套元素上。这几条现在限定成「带 `_frame` 且不在任何 `_frame` 里面」。
12
+
13
+ ### 变更
14
+
15
+ - 声明支持 dsh `0.2.1-rc.5` 与 `0.2.2-alpha.2`。dsh 从 0.1.7 起会拒装声明范围没覆盖自己的插件,所以 0.2.2-alpha 线上原本装不上。两个版本都实跑验证过:布局包的类名与 `data-sidebar-collapsed` 和 0.2.1-rc.3 逐字相同,抽屉、设置弹窗、侧栏按钮行为一致。APK 内置的 dsh 仍是 `0.2.1-rc.2`,本次不动。
16
+
17
+ ### English
18
+
19
+ On a narrow screen the sidebar could get stuck at 56px with its labels rendered but clipped and no sidebar toggle in sight ([#22](https://github.com/zexadev/dsh-tether/issues/22)). The narrow-screen styling in 0.1.24 decided whether the sidebar was expanded by looking for the drag handle under the frame, which needs `:has()`. Some vendor WebViews drop every rule containing `:has()` (reported on a Huawei Mate 50 running HarmonyOS 4.2), so the "sidebar is 300px when expanded" rule never applied while dsh itself was in the expanded state: the labels rendered and were clipped to one or two characters by the 56px box, and the toggle is only rendered while collapsed, so there was no way out of that mixed state. The expanded state is now read from `data-sidebar-collapsed`, which dsh writes on the frame itself (`"true"` when collapsed, absent when expanded), with no `:has()` involved; the attribute was checked in one version from each of the five dsh ranges the plugin declares. The drag-handle rule is gone as well — it was never draggable on a phone. Measured at 480×1056: collapsed sidebar 57px, no veil, hosts label hidden; after the toggle 301px with the veil and the label; tapping the content column collapses it again.
20
+
21
+ In the dsh desktop app the "My computers" button did nothing when clicked ([#23](https://github.com/zexadev/dsh-tether/issues/23)). The label and the behaviour were chosen by `window.parent !== window`, meant to detect "running inside the tether phone app", but the plugin UI in the dsh desktop shell also lives in an embedded frame, so the desktop was treated as a phone: the button read "My computers" and a click only posted `dsh-tether:open-hosts` to the parent window — which the desktop shell does not listen for, leaving the button dead with nothing else to fall back on. The app now injects `window.__DSH_TETHER_APP__` into every frame when it creates the window, so whoever is the app says so; without that marker the plugin treats the page as a browser and shows the pairing string. Desktop users can therefore get the pairing string (for a new phone or an extra device) without opening a browser by hand. This one needs the new app build to be complete: an older app does not set the marker, so with the new plugin its button reads "Connect a phone" and shows the pairing string.
22
+
23
+ Attachment thumbnails were squeezed out of shape on narrow screens (found while fixing #22). Those narrow-screen rules selected the frame with `[class*="_frame"]`, but the conversation area, attachment thumbnails, subagent and document-preview components all carry local class names containing `_frame` and all live inside the frame. An attachment thumbnail is a single-cell grid, so `grid-template-columns: 56px minmax(0,1fr) 0px` turned it into three columns and pushed the image into the 56px first column, and the sidebar veil would likewise be painted over every nested element. Those rules are now restricted to a `_frame` that is not inside another `_frame`.
24
+
25
+ Support is now declared for dsh `0.2.1-rc.5` and `0.2.2-alpha.2`. Since 0.1.7 dsh refuses to install a plugin whose declared range does not cover it, so the 0.2.2-alpha line could not install this plugin at all. Both versions were verified by running them: the layout package class names and `data-sidebar-collapsed` are identical to 0.2.1-rc.3, and the drawer, settings dialog and sidebar button all behave the same. The dsh bundled inside the APK stays at `0.2.1-rc.2`.
26
+
5
27
  ## 0.1.24
6
28
 
7
29
  ### 修复
package/README.md CHANGED
@@ -17,7 +17,7 @@
17
17
  <a href="../../releases"><img src="https://img.shields.io/github/downloads/zexadev/dsh-tether/total?style=flat&label=downloads&color=4D6BFE" alt="Downloads"></a>
18
18
  <a href="../../stargazers"><img src="https://img.shields.io/github/stars/zexadev/dsh-tether?style=flat&label=%E2%98%85&color=08C" alt="Stars"></a>
19
19
  <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-2EA44F?style=flat" alt="MIT"></a>
20
- <img src="https://img.shields.io/badge/dsh-0.1.0--rc.7%20%7C%20rc.8%20%7C%200.1.2%20%7C%200.1.5%20%7C%200.1.6%20%7C%200.1.7%20%7C%200.2.0%20%7C%200.2.1-4D6BFE?style=flat" alt="dsh 0.1.0-rc.7 | rc.8 | 0.1.2 | 0.1.5 | 0.1.6 | 0.1.7 | 0.2.0 | 0.2.1">
20
+ <img src="https://img.shields.io/badge/dsh-0.1.0--rc.7%20%7C%20rc.8%20%7C%200.1.2%20%7C%200.1.5%20%7C%200.1.6%20%7C%200.1.7%20%7C%200.2.0%20%7C%200.2.1%20%7C%200.2.2-4D6BFE?style=flat" alt="dsh 0.1.0-rc.7 | rc.8 | 0.1.2 | 0.1.5 | 0.1.6 | 0.1.7 | 0.2.0 | 0.2.1 | 0.2.2">
21
21
  <img src="https://img.shields.io/badge/Android-4493F8?style=flat" alt="Android">
22
22
  <img src="https://img.shields.io/badge/iOS-beta-8E8E93?style=flat" alt="iOS beta">
23
23
  <a href="https://www.dsh.so/artifact/dsh-tether"><img src="https://www.dsh.so/badge/dsh-tether.svg" alt="dsh.so security scan"></a>
@@ -137,7 +137,7 @@ The Termux route still works if you prefer it: install dsh and this plugin insid
137
137
  - The interface on the phone is DSH's own; the narrow-screen fit comes from minimal injected styles, so a dsh layout change may need a follow-up here.
138
138
  - English and Chinese: the app follows your phone's system language, terminal output follows the computer's, and the part injected into the dsh interface follows dsh's own language setting. There is no separate language switch.
139
139
  - Local mode exists only in the `arm64` build, never on iOS; the phone lacks bash and a full coreutils, so shell-dependent tools are incomplete. The `arm64` APK is about 83 MB because of the bundled runtime; the others are about 32 MB.
140
- - Verified against dsh **`0.1.0-rc.7`**, **`0.1.0-rc.8`**, **`0.1.2`** (alpha and rc.1), **`0.1.5-alpha.1`**, **`0.1.5-rc.2`**, **`0.1.6-alpha.2`**, **`0.1.7-rc.2`**, **`0.2.0-rc.2`**, **`0.2.1-alpha.1`**, **`0.2.1-alpha.2`** and **`0.2.1-rc.2`**. dsh is in developer preview — check this line before assuming a newer dsh works. From 0.1.7 dsh refuses to install a plugin whose declared range does not cover it, so a version outside this line is a refusal at install time rather than a silent risk. The browser authentication dsh introduced in 0.1.2-alpha is handled entirely on the machine side; the phone app needs no update for it.
140
+ - Verified against dsh **`0.1.0-rc.7`**, **`0.1.0-rc.8`**, **`0.1.2`** (alpha and rc.1), **`0.1.5-alpha.1`**, **`0.1.5-rc.2`**, **`0.1.6-alpha.2`**, **`0.1.7-rc.2`**, **`0.2.0-rc.2`**, **`0.2.1-alpha.1`**, **`0.2.1-alpha.2`**, **`0.2.1-rc.2`**, **`0.2.1-rc.3`**, **`0.2.1-rc.5`** and **`0.2.2-alpha.2`**. dsh is in developer preview — check this line before assuming a newer dsh works. From 0.1.7 dsh refuses to install a plugin whose declared range does not cover it, so a version outside this line is a refusal at install time rather than a silent risk. The browser authentication dsh introduced in 0.1.2-alpha is handled entirely on the machine side; the phone app needs no update for it.
141
141
 
142
142
  ## What has been verified
143
143
 
package/README.zh.md CHANGED
@@ -17,7 +17,7 @@
17
17
  <a href="../../releases"><img src="https://img.shields.io/github/downloads/zexadev/dsh-tether/total?style=flat&label=downloads&color=4D6BFE" alt="下载量"></a>
18
18
  <a href="../../stargazers"><img src="https://img.shields.io/github/stars/zexadev/dsh-tether?style=flat&label=%E2%98%85&color=08C" alt="Stars"></a>
19
19
  <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-2EA44F?style=flat" alt="MIT"></a>
20
- <img src="https://img.shields.io/badge/dsh-0.1.0--rc.7%20%7C%20rc.8%20%7C%200.1.2%20%7C%200.1.5%20%7C%200.1.6%20%7C%200.1.7%20%7C%200.2.0%20%7C%200.2.1-4D6BFE?style=flat" alt="dsh 0.1.0-rc.7 | rc.8 | 0.1.2 | 0.1.5 | 0.1.6 | 0.1.7 | 0.2.0 | 0.2.1">
20
+ <img src="https://img.shields.io/badge/dsh-0.1.0--rc.7%20%7C%20rc.8%20%7C%200.1.2%20%7C%200.1.5%20%7C%200.1.6%20%7C%200.1.7%20%7C%200.2.0%20%7C%200.2.1%20%7C%200.2.2-4D6BFE?style=flat" alt="dsh 0.1.0-rc.7 | rc.8 | 0.1.2 | 0.1.5 | 0.1.6 | 0.1.7 | 0.2.0 | 0.2.1 | 0.2.2">
21
21
  <img src="https://img.shields.io/badge/Android-4493F8?style=flat" alt="Android">
22
22
  <img src="https://img.shields.io/badge/iOS-%E6%B5%8B%E8%AF%95%E7%89%88-8E8E93?style=flat" alt="iOS 测试版">
23
23
  <a href="https://www.dsh.so/artifact/dsh-tether"><img src="https://www.dsh.so/badge/dsh-tether.svg" alt="dsh.so 安全扫描"></a>
@@ -137,7 +137,7 @@ dsh plugin --profile web add .
137
137
  - 手机上的界面是 DSH 自己的,窄屏适配靠注入的最小样式完成;dsh 改版式时可能需要跟进。
138
138
  - 中英双语:App 界面跟随手机的系统语言;电脑终端上的输出跟随电脑的系统语言;注入 dsh 界面的那部分跟随 dsh 自己的语言设置。没有单独的语言开关。
139
139
  - 本地模式只有 `arm64` 包有,iOS 没有;手机上没有 bash 与完整 coreutils,依赖 shell 的工具用不全。arm64 包因内置运行时约 83 MB,其余包约 32 MB。
140
- - 已针对 dsh **`0.1.0-rc.7`**、**`0.1.0-rc.8`**、**`0.1.2`**(alpha 与 rc.1)、**`0.1.5-alpha.1`**、**`0.1.5-rc.2`**、**`0.1.6-alpha.2`**、**`0.1.7-rc.2`**、**`0.2.0-rc.2`**、**`0.2.1-alpha.1`**、**`0.2.1-alpha.2`** 与 **`0.2.1-rc.2`** 验证。dsh 处于 developer preview,换更新的 dsh 之前先看这一行。0.1.7 起 dsh 会拒绝安装声明范围没覆盖自己的插件,所以这一行之外的版本是装不上,而不是装上了埋雷。dsh 0.1.2-alpha 引入的浏览器认证完全在电脑侧处理,手机 App 无需更新。
140
+ - 已针对 dsh **`0.1.0-rc.7`**、**`0.1.0-rc.8`**、**`0.1.2`**(alpha 与 rc.1)、**`0.1.5-alpha.1`**、**`0.1.5-rc.2`**、**`0.1.6-alpha.2`**、**`0.1.7-rc.2`**、**`0.2.0-rc.2`**、**`0.2.1-alpha.1`**、**`0.2.1-alpha.2`**、**`0.2.1-rc.2`**、**`0.2.1-rc.3`**、**`0.2.1-rc.5`** 与 **`0.2.2-alpha.2`** 验证。dsh 处于 developer preview,换更新的 dsh 之前先看这一行。0.1.7 起 dsh 会拒绝安装声明范围没覆盖自己的插件,所以这一行之外的版本是装不上,而不是装上了埋雷。dsh 0.1.2-alpha 引入的浏览器认证完全在电脑侧处理,手机 App 无需更新。
141
141
 
142
142
  ## 验证过什么
143
143
 
package/index.js CHANGED
@@ -490,13 +490,17 @@ const tetherCss = `
490
490
  }
491
491
  /* 侧栏展开时主框架把网格从「56px 内容」改成「280px 内容」,对话区被压到
492
492
  140px。改成抽屉:网格保持收起时的列宽,侧栏浮到内容之上盖住一部分。
493
- 展开态没有专门的类名,但展开才会出现拖拽把手,用它作状态信号。
494
- 把手本身在手机上没用(没法拖),隐掉。 */
493
+ 展开态读 dsh 自己写在 frame 上的 data-sidebar-collapsed(收起为 "true",
494
+ 展开时该属性不在),0.1.0-rc.7 起每个版本都带。把手本身在手机上没用
495
+ (没法拖),隐掉。 */
495
496
  /* 网格恒定为收起时的列宽,侧栏恒定绝对定位、只让宽度随展开态变化——
496
497
  position 不可过渡,只有始终 absolute 才能做出滑入滑出的动画。
497
498
  侧栏脱离文档流后剩下的子元素会整体上移一列(对话区掉进 56px 那列,
498
499
  反而更窄),所以显式钉住列号。 */
499
- [class*="_frame"] {
500
+ /* 只认最外层那个 frame。dsh 里好几个组件的局部类名也带 _frame(会话区、
501
+ 附件缩略图、子代理、文档预览),它们都长在它里面:附件缩略图自己是个
502
+ 单格网格,被这条列模板改掉后图片会挤进 56px 的第一列。 */
503
+ [class*="_frame"]:not([class*="_frame"] *) {
500
504
  grid-template-columns: 56px minmax(0, 1fr) 0px !important;
501
505
  }
502
506
  [class*="_frame"] > [class*="centerCol"] { grid-column: 2 !important; }
@@ -512,14 +516,13 @@ const tetherCss = `
512
516
  z-index: 30 !important;
513
517
  transition: width 220ms ease, box-shadow 220ms ease;
514
518
  }
515
- /* 展开态没有专门的类名,但展开才会出现拖拽把手,用它作状态信号 */
516
- [class*="_frame"]:has(> [class*="_handle"]) > [class*="sidebarCol"] {
519
+ [class*="_frame"]:not([data-sidebar-collapsed="true"]) > [class*="sidebarCol"] {
517
520
  width: min(300px, 84vw) !important;
518
521
  box-shadow: 0 10px 36px rgba(0, 0, 0, 0.24);
519
522
  }
520
523
  /* 抽屉下的内容压暗。指针不拦——收起由注入的脚本接管,拦了反而会在脚本
521
524
  未生效时把整页点死。 */
522
- [class*="_frame"]::after {
525
+ [class*="_frame"]:not([class*="_frame"] *)::after {
523
526
  content: '';
524
527
  position: absolute;
525
528
  inset: 0;
@@ -529,12 +532,12 @@ const tetherCss = `
529
532
  pointer-events: none;
530
533
  transition: opacity 220ms ease;
531
534
  }
532
- [class*="_frame"]:has(> [class*="_handle"])::after { opacity: 1; }
535
+ [class*="_frame"]:not([class*="_frame"] *):not([data-sidebar-collapsed="true"])::after { opacity: 1; }
533
536
  [class*="_frame"] > [class*="_handle"] { display: none !important; }
534
537
 
535
538
  /* 侧栏收起时是图标条,「主机」按钮的文字跟着藏起来,和 dsh 自己的按钮一致 */
536
539
  [data-dsh-tether="hosts-label"] { display: none; }
537
- [class*="_frame"]:has(> [class*="_handle"]) [data-dsh-tether="hosts-label"] { display: inline; }
540
+ [class*="_frame"]:not([data-sidebar-collapsed="true"]) [data-dsh-tether="hosts-label"] { display: inline; }
538
541
  @media (prefers-reduced-motion: reduce) {
539
542
  [class*="_frame"] > [class*="sidebarCol"],
540
543
  [class*="_frame"]::after { transition: none; }
@@ -570,7 +573,8 @@ const tetherScript = `
570
573
  document.addEventListener('pointerdown', function (event) {
571
574
  if (!narrow.matches) return
572
575
  var frame = document.querySelector('[class*="_frame"]')
573
- if (!frame || !frame.querySelector(':scope > [class*="_handle"]')) return
576
+ // 抽屉开着才有「点外面收起来」可言;判据和样式那边同一个
577
+ if (!frame || frame.getAttribute('data-sidebar-collapsed') === 'true') return
574
578
  var drawer = frame.querySelector(':scope > [class*="sidebarCol"]')
575
579
  if (!drawer || drawer.contains(event.target)) return
576
580
  var toggle = document.querySelector('button[aria-label*="侧边栏"], button[aria-label*="sidebar" i]')
@@ -649,7 +653,13 @@ const tetherScript = `
649
653
  // 这里放「主机」按钮,点了让外层的手机客户端打开它自己的主机页。
650
654
  // 同一个按钮两种归宿:手机 App 里打开它自己的主机页;电脑浏览器里出示配对串,
651
655
  // 好让用户换手机、加设备时有地方拿新配对码(否则只能去删 paired.json)。
652
- var framed = window.parent !== window
656
+ // 判据是「App 自己挂的标记」,不是「我在不在 iframe 里」:dsh 桌面端的插件界面
657
+ // 同样跑在宿主的内嵌 frame 里,按 window.parent !== window 判会被当成手机 App,
658
+ // 按钮变「我的电脑」、点了只往父窗口发一条消息——桌面端没有这条消息的监听者,
659
+ // 按钮就是死的。标记拿不到一律按浏览器处理,出示配对串,至少点得动;
660
+ // 0.1.24 及更早的 App 没有这个标记,在 App 里也会出示配对串(它自己的顶栏有
661
+ // 「主机」入口,功能不丢)。
662
+ var inApp = !!window.__DSH_TETHER_APP__
653
663
 
654
664
  // 已配对手机列表。白名单每条都持有访问权,而手机重装 App 会换身份密钥,
655
665
  // 旧条目就此变成没人认识的常驻凭证——这里是撤销它们的地方。
@@ -803,7 +813,7 @@ const tetherScript = `
803
813
  var button = document.createElement('button')
804
814
  button.type = 'button'
805
815
  button.setAttribute('data-dsh-tether', 'hosts-trigger')
806
- var label = framed ? tx('我的电脑', 'My computers') : tx('连接手机', 'Connect a phone')
816
+ var label = inApp ? tx('我的电脑', 'My computers') : tx('连接手机', 'Connect a phone')
807
817
  button.setAttribute('aria-label', label)
808
818
  // 浏览器侧沿用原来那个 18px 图标,一字不改;抄不到「设置」时按参照行的尺寸画
809
819
  var icon = reference === null || reference.browser
@@ -811,7 +821,7 @@ const tetherScript = `
811
821
  : phoneIcon(referenceIconWidth(reference.trigger))
812
822
  button.innerHTML = icon + '<span data-dsh-tether="hosts-label">' + label + '</span>'
813
823
  button.addEventListener('click', function () {
814
- if (framed) window.parent.postMessage({ type: 'dsh-tether:open-hosts' }, '*')
824
+ if (inApp) window.parent.postMessage({ type: 'dsh-tether:open-hosts' }, '*')
815
825
  else showPairing()
816
826
  })
817
827
  row.append(button)
@@ -853,7 +863,7 @@ const tetherScript = `
853
863
  }
854
864
  // dsh 的语言能在设置里当场切,这个标签跟着换
855
865
  new MutationObserver(function () {
856
- var next = framed ? tx('我的电脑', 'My computers') : tx('连接手机', 'Connect a phone')
866
+ var next = inApp ? tx('我的电脑', 'My computers') : tx('连接手机', 'Connect a phone')
857
867
  button.setAttribute('aria-label', next)
858
868
  var span = button.querySelector('[data-dsh-tether="hosts-label"]')
859
869
  if (span) span.textContent = next
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-plugin-tether",
3
- "version": "0.1.24",
3
+ "version": "0.1.25",
4
4
  "description": "Mobile client for the DeepSeek Harness — use the dsh on your dev machine from your Android or iOS phone, remotely across networks, peer-to-peer over iroh with no server to set up (falls back to a relay that only sees ciphertext)",
5
5
  "keywords": [
6
6
  "dsh",
@@ -48,19 +48,19 @@
48
48
  }
49
49
  },
50
50
  "peerDependencies": {
51
- "@deepseek-ai/dsh-host-webserver": ">=0.1.0-rc.7 <0.1.1-0 || >=0.1.2-alpha.0 <0.1.3-0 || >=0.1.5-alpha.0 <0.1.8-0 || >=0.2.0-rc.2 <0.2.1-0 || >=0.2.1-alpha.1 <0.2.2-0",
52
- "@deepseek-ai/dsh-user-approval": ">=0.1.0-rc.7 <0.1.1-0 || >=0.1.2-alpha.0 <0.1.3-0 || >=0.1.5-alpha.0 <0.1.8-0 || >=0.2.0-rc.2 <0.2.1-0 || >=0.2.1-alpha.1 <0.2.2-0"
51
+ "@deepseek-ai/dsh-host-webserver": ">=0.1.0-rc.7 <0.1.1-0 || >=0.1.2-alpha.0 <0.1.3-0 || >=0.1.5-alpha.0 <0.1.8-0 || >=0.2.0-rc.2 <0.2.1-0 || >=0.2.1-alpha.1 <0.2.2-0 || >=0.2.2-alpha.2 <0.2.3-0",
52
+ "@deepseek-ai/dsh-user-approval": ">=0.1.0-rc.7 <0.1.1-0 || >=0.1.2-alpha.0 <0.1.3-0 || >=0.1.5-alpha.0 <0.1.8-0 || >=0.2.0-rc.2 <0.2.1-0 || >=0.2.1-alpha.1 <0.2.2-0 || >=0.2.2-alpha.2 <0.2.3-0"
53
53
  },
54
54
  "peerDependenciesMeta": {
55
55
  "@deepseek-ai/dsh-host-webserver": { "optional": true },
56
56
  "@deepseek-ai/dsh-user-approval": { "optional": true }
57
57
  },
58
58
  "optionalDependencies": {
59
- "dsh-tether-host-android-arm64": "0.1.24",
60
- "dsh-tether-host-darwin-arm64": "0.1.24",
61
- "dsh-tether-host-darwin-x64": "0.1.24",
62
- "dsh-tether-host-linux-arm64": "0.1.24",
63
- "dsh-tether-host-linux-x64": "0.1.24",
64
- "dsh-tether-host-win32-x64": "0.1.24"
59
+ "dsh-tether-host-android-arm64": "0.1.25",
60
+ "dsh-tether-host-darwin-arm64": "0.1.25",
61
+ "dsh-tether-host-darwin-x64": "0.1.25",
62
+ "dsh-tether-host-linux-arm64": "0.1.25",
63
+ "dsh-tether-host-linux-x64": "0.1.25",
64
+ "dsh-tether-host-win32-x64": "0.1.25"
65
65
  }
66
66
  }