@deepseek-ai/dsh-host-directory-picker-auto 0.1.1-rc.2 → 0.1.2-alpha.2

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.i18n.yaml CHANGED
@@ -2,5 +2,5 @@
2
2
  # side as of the last confirmed-consistent state. Both languages carry equal authority;
3
3
  # after editing either side, bring the other along and re-record with:
4
4
  # pnpm run verify-translation-pairing --write packages/host/directory-picker-auto/README.md
5
- README.md: fd162e0652c7eb43de111323e93e0be936d39e2f
6
- README.zh.md: da30e8008da5eb1741740f083c9bed5049d7b7bf
5
+ README.md: b42c4c159206cbd4583326dfbeaac4b459c6c230
6
+ README.zh.md: 56928d29658b4cd312a3f0d144a6a0ad39fc7c30
package/README.md CHANGED
@@ -1,14 +1,98 @@
1
+ ---
2
+ description: "Adaptive chooser of the directory-picker seam: resolves the web GUI host's situation once at boot and mounts the matching native or browse backend."
3
+ kind: "package-reference"
4
+ ---
5
+
1
6
  # @deepseek-ai/dsh-host-directory-picker-auto
2
7
 
3
8
  English | [中文](README.zh.md)
4
9
 
5
- The **adaptive chooser** of the [directory-picker seam](../directory-picker/README.md): a node-half-only plugin that resolves the host's situation once at boot and mounts the matching dual-face backend — [`-native`](../directory-picker-native/README.md) or [`-browse`](../directory-picker-browse/README.md) — as a real Loader entry in the in-memory root tree (never persisted to a config file; the root tree's `write()` is a no-op). Because the backend arrives as an ordinary entry, its browser half is discovered by the client module table exactly as a config-row's would be, so the seam's one-row-swaps-both-faces invariant holds for the resolved choice. Unloading the chooser removes the entry again, unloading both faces with it.
10
+ ## Summary
11
+
12
+ `dsh-host-directory-picker-auto` picks the right directory-picking interaction for every boot: it resolves the host's situation once at boot and mounts the matching backend — [native](../directory-picker-native/README.md) or [browse](../directory-picker-browse/README.md) — together with its browser half, as real Loader entries in the in-memory root tree. The resolution is one pure boot-time sample: `native` requires a loopback-only bind, a non-SSH launch, and a servable display session; anything ambiguous resolves to `browse`, which works everywhere. Pinning an interaction means composing that backend directly. The mounted capability stays stable for the service lifetime, as the seam requires.
13
+
14
+ ## Table of Contents
15
+
16
+ - [Use this package](#use-this-package)
17
+ - [Understand the implementation](#understand-the-implementation)
18
+ - [Further Exploration](#further-exploration)
19
+ - [Model Experience](#model-experience)
20
+ - [Known Limitations and Deferred Work](#known-limitations-and-deferred-work)
21
+ - [Dev Note](#dev-note)
22
+
23
+ -----
24
+
25
+ <a id="use-this-package"></a>
26
+ ## Use this package
27
+
28
+ Compose this plugin instead of a concrete backend when the same composition must serve hosts that differ: local workstation sessions where a native chooser works, and remote or headless sessions where only the in-app browser works. The chooser inspects the host once at boot and mounts the matching interaction.
29
+
30
+ ### How the choice is made
31
+
32
+ `native` requires every signal that the operator can see the host display and the native backend can serve it: a loopback-only bind (read from the injected `webServer`; an all-interfaces bind admits remote browsers no OS chooser can reach), no SSH launch (`SSH_CONNECTION`/`SSH_TTY` unset or blank), and a servable display session — assumed on darwin and win32; on linux, `DISPLAY`/`WAYLAND_DISPLAY` plus a zenity or kdialog binary on `PATH`; never on any other platform. Anything ambiguous resolves to `browse`, which works everywhere.
33
+
34
+ ### What you get
35
+
36
+ The resolved interaction arrives as an ordinary Loader entry: the backend registers `ctx.directoryPicker`, and its browser half is discovered by the client module table exactly as a config row's would be, so the seam's one-row-swaps-both-faces invariant holds. Unloading the chooser removes the entry, unloading both faces with it. The sample happens exactly once per boot, so the mounted capability stays stable for the service lifetime.
37
+
38
+ ### Pinning an interaction
39
+
40
+ Pinning is not a config field here: compose the `-native` or `-browse` row directly instead of this one — that is the seam's documented swap point. Mounting the chooser and a backend row together fails loud (duplicate `directoryPicker` service, duplicate client flow in the `single` holes).
41
+
42
+ ### Observable failures
43
+
44
+ A wrong `native` choice degrades to the backend's existing retryable failure dialog rather than a broken composition; composing `-browse` directly selects the safe interaction for deployments whose situation the probe cannot prove.
45
+
46
+ -----
47
+
48
+ <a id="understand-the-implementation"></a>
49
+ ## Understand the implementation
50
+
51
+ <details>
52
+ <summary>Implementation internals — click to expand</summary>
6
53
 
7
- Resolution is one pure boot-time sample (`resolveDirectoryPickerBackend`), exported for reuse. `native` requires every signal that the operator can see the host display and the native backend can serve it: a loopback-only bind (read from the injected `webServer`; an all-interfaces bind admits remote browsers no OS chooser can reach), no SSH launch (`SSH_CONNECTION`/`SSH_TTY` unset or blank — under SSH port-forwarding the chooser would open on the unattended server), and a servable display session — assumed on darwin/win32; on linux `DISPLAY`/`WAYLAND_DISPLAY` plus a zenity or kdialog binary on `PATH` (the probe is one more boot-time fact); never on any other platform, since the native backend drives exactly darwin/win32/linux. Anything ambiguous resolves to `browse`, which works everywhere. The sample happens exactly once per boot so the mounted capability stays stable for the service lifetime, as the seam requires. Pinning an interaction is not a config field here — compose the `-native` or `-browse` row directly instead of this one, the seam's documented swap point; mounting the chooser **and** a backend row together fails loud (duplicate `directoryPicker` service, duplicate client flow in the `single` holes).
54
+ ### Design concept
8
55
 
56
+ The chooser is a pure decision plus a mount: `resolveDirectoryPickerBackend` samples host facts once at boot and returns a backend kind, and `apply` mounts the matching backend and surface packages as real Loader entries in the in-memory root tree — never persisted to a config file, because the root tree's `write()` is a no-op. The effect's disposer removes both entries and joins their fibers' teardown, so unloading returns only after both faces of the mounted interaction quiesced.
57
+
58
+ ### The resolution table
59
+
60
+ | Condition | Backend |
61
+ |---|---|
62
+ | Bind host is not `127.0.0.1` | `browse` |
63
+ | `SSH_CONNECTION` or `SSH_TTY` present | `browse` |
64
+ | darwin or win32 | `native` |
65
+ | linux with a chooser binary and a display | `native` |
66
+ | anything else | `browse` |
67
+
68
+ ### Source map
69
+
70
+ | File | Role |
71
+ |---|---|
72
+ | [`src/index.ts`](src/index.ts) | Plugin entry: `BACKEND_PACKAGES`/`SURFACE_PACKAGES` maps, `apply` mount and unmount |
73
+ | [`src/resolve.ts`](src/resolve.ts) | `resolveDirectoryPickerBackend` — the pure boot-time decision |
74
+ | [`src/probe.ts`](src/probe.ts) | Host probes: `hasLinuxChooserBinary`, `canExecute` |
75
+
76
+ </details>
77
+
78
+ -----
79
+
80
+ <a id="further-exploration"></a>
81
+ ## Further Exploration
82
+
83
+ Read these when the chooser's contract is not enough: the seam definition first, then the two backends it mounts.
84
+
85
+ - [Directory-picker seam](../directory-picker/README.md) — the capability contract the chooser composes.
86
+ - [Directory-picker capability seam decision](../../../.agents/notes/implemented/architecture/2026-07-28-directory-picker-capability-seam.md) — why backends differ in interaction shape.
87
+ - [Native backend](../directory-picker-native/README.md) — the interaction mounted for a local operator.
88
+ - [Browse backend](../directory-picker-browse/README.md) — the interaction mounted everywhere else.
89
+
90
+ -----
91
+
92
+ <a id="model-experience"></a>
9
93
  ## Model Experience
10
94
 
11
- None, as the chooser only composes the GUI host's directory selection; nothing here reaches a model request.
95
+ None, as the GUI-host picking chooser only mounts a backend row and registers nothing model-facing.
12
96
 
13
97
  #### KV Cache effect
14
98
 
@@ -16,6 +100,21 @@ None; this package neither assembles nor sends a provider request.
16
100
 
17
101
  ## Known Limitations and Deferred Work
18
102
 
103
+ <a id="known-limitations-and-deferred-work"></a>
104
+
105
+
106
+ These limits define when the boot-time sample can misjudge the host. They are current package constraints, not a task backlog.
107
+
19
108
  - **Detection infers operator location from launch context, which no launch-side signal can prove** — a tmux session detached from its SSH launch loses the `SSH_*` markers; a Darwin process outside an Aqua session still counts as displayed; and a workstation-local launch later reached through `ssh -L` arrives from `127.0.0.1`, resolves `native`, and opens the chooser on the unattended workstation. A wrong `native` choice degrades to the backend's existing retryable failure dialog, and composing `-browse` directly selects the safe interaction for such deployments.
20
109
  - **The Linux chooser probe reads `PATH` only** — a zenity/kdialog reachable some other way (shell alias, non-PATH install) still resolves `browse`; installing either binary on `PATH` restores `native` eligibility at the next boot.
21
- - **Boot-time only** — one resolution serves every client of the boot; per-connection adaptivity (native for a local browser, browse for a remote one, same server) would need a per-client capability and the wire advertisement the seam deliberately deleted, and waits for a deployment that serves both at once.
110
+ - **Boot-time only** — one resolution serves every client of the boot; per-connection adaptivity (native for a local browser, browse for a remote one, same server) would need a per-client capability and the wire advertisement the seam does not carry, and waits for a deployment that serves both at once.
111
+
112
+ <a id="dev-note"></a>
113
+ ### Dev Note
114
+
115
+ <details>
116
+ <summary>Working context for maintainers — click to expand</summary>
117
+
118
+ None.
119
+
120
+ </details>
package/README.zh.md CHANGED
@@ -1,21 +1,120 @@
1
+ ---
2
+ description: "目录选择 seam 的自适应选择器:在启动时判定一次 web GUI 宿主的处境,并挂载匹配的原生或浏览后端。"
3
+ kind: "package-reference"
4
+ ---
5
+
1
6
  # @deepseek-ai/dsh-host-directory-picker-auto
2
7
 
3
8
  [English](README.md) | 中文
4
9
 
5
- [目录选择 seam](../directory-picker/README.zh.md) 的**自适应选择器**:一个只有 node 半侧的插件,在启动时一次性判定宿主处境,并把匹配的双面后端——[`-native`](../directory-picker-native/README.zh.md) 或 [`-browse`](../directory-picker-browse/README.zh.md)——作为真实的 Loader 条目挂进内存根树(绝不持久化到配置文件;根树的 `write()` 是 no-op)。由于后端以普通条目的形式到达,其 browser half 被 client 模块表发现的方式与配置行完全相同,因此对判定出的选择,seam 的“一行同时换两面”不变式依然成立。卸载该选择器会再次移除该条目,连同两面一起卸载。
10
+ ## 概述
11
+
12
+ `dsh-host-directory-picker-auto` 为每次启动选出正确的目录选择交互:它在启动时一次性判定宿主处境,并把匹配的后端——[原生](../directory-picker-native/README.zh.md)或[浏览](../directory-picker-browse/README.zh.md)——连同其 browser 半侧一起,作为真实的 Loader 条目挂进内存根树。判定是一次纯函数的启动时采样:`native` 要求仅回环绑定、非 SSH 启动与可服务的显示会话;任何含糊情形都判定为处处可用的 `browse`。固定某种交互就是直接组合那个后端。挂载的能力在服务生命周期内保持稳定,符合 seam 的要求。
13
+
14
+ ## 目录
15
+
16
+ - [使用本包](#use-this-package)
17
+ - [理解实现](#understand-the-implementation)
18
+ - [进一步探索](#further-exploration)
19
+ - [模型体验](#model-experience)
20
+ - [已知限制与延期工作](#known-limitations-and-deferred-work)
21
+ - [开发备注](#dev-note)
22
+
23
+ -----
24
+
25
+ <a id="use-this-package"></a>
26
+ ## 使用本包
27
+
28
+ 当同一份组合必须服务处境不同的宿主时,用本插件代替具体的后端:本地工作站会话里原生选择器可用,远程或无头会话里只有应用内浏览器可用。选择器在启动时检查一次宿主,并挂载匹配的交互。
29
+
30
+ ### 选择是如何作出的
31
+
32
+ `native` 要求「操作者看得到宿主屏幕、且原生后端能服务它」的全部信号:仅回环的绑定(从注入的 `webServer` 读取;全网卡绑定会接入任何 OS 选择器都触及不到的远程浏览器);非 SSH 启动(`SSH_CONNECTION`/`SSH_TTY` 未设置或为空);以及可服务的显示会话——darwin 与 win32 上视为存在;linux 上要求 `DISPLAY`/`WAYLAND_DISPLAY`,外加 `PATH` 上有 zenity 或 kdialog 二进制;其余任何平台上都不成立。任何含糊情形都判定为处处可用的 `browse`。
33
+
34
+ ### 你会得到什么
35
+
36
+ 判定出的交互以普通 Loader 条目的形式到达:后端注册 `ctx.directoryPicker`,其 browser 半侧被 client 模块表发现的方式与配置行完全相同,因此 seam 的「一行同时换两面」不变式依然成立。卸载该选择器会移除该条目,连同两面一起卸载。采样每次启动恰好发生一次,因此挂载的能力在服务生命周期内保持稳定。
37
+
38
+ ### 固定某种交互
39
+
40
+ 固定交互在这里不是配置字段:直接组合 `-native` 或 `-browse` 行来替代本行——那才是 seam 文档化的切换点。同时挂载选择器**和**某个后端行会明确报错(重复的 `directoryPicker` 服务、`single` 类 slot 中的重复 client 流程)。
41
+
42
+ ### 可观察的失败
43
+
44
+ 错误的 `native` 选择会退化为后端既有的可重试失败对话框,而不是坏掉的组合;对探查无法证明其处境的部署,直接组合 `-browse` 即选择安全的交互。
45
+
46
+ -----
47
+
48
+ <a id="understand-the-implementation"></a>
49
+ ## 理解实现
50
+
51
+ <details>
52
+ <summary>实现细节——点击展开</summary>
6
53
 
7
- 判定是一次纯函数的启动时采样(`resolveDirectoryPickerBackend`),已导出供复用。`native` 要求“操作者看得到宿主屏幕、且 native 后端能服务它”的全部信号:仅回环的绑定(从注入的 `webServer` 读取;全网卡绑定会接入任何 OS 选择器都触及不到的远程浏览器);非 SSH 启动(`SSH_CONNECTION`/`SSH_TTY` 未设置或为空——SSH 端口转发下选择器会弹在无人值守的服务器上);以及可服务的显示会话——darwin/win32 上视为存在;linux 上要求 `DISPLAY`/`WAYLAND_DISPLAY`,外加 `PATH` 上有 zenity 或 kdialog 二进制(该探查是又一项启动时事实);其余任何平台上都不成立,因为 native 后端驱动的平台恰为 darwin/win32/linux。任何含糊情形都判定为处处可用的 `browse`。采样每次启动恰好发生一次,因此挂载的能力在服务生命周期内保持稳定,符合 seam 的要求。固定某种交互在这里不是配置字段——直接组合 `-native` 或 `-browse` 行来替代本行,那才是 seam 文档化的切换点;同时挂载选择器**和**某个后端行会明确报错(重复的 `directoryPicker` 服务、`single` 类 slot 中的重复 client 流程)。
54
+ ### 设计理念
8
55
 
56
+ 选择器是一次纯决策加一次挂载:`resolveDirectoryPickerBackend` 在启动时采样宿主事实并返回一个后端类型,`apply` 把匹配的后端与界面包作为真实 Loader 条目挂进内存根树——绝不持久化到配置文件,因为根树的 `write()` 是 no-op。该 effect 的 disposer 会移除两个条目并汇合其 fiber 的拆除,因此卸载只在所挂载交互的两面(及其依赖方)完全停稳后返回。
57
+
58
+ ### 判定表
59
+
60
+ | 条件 | 后端 |
61
+ |---|---|
62
+ | 绑定宿主不是 `127.0.0.1` | `browse` |
63
+ | 存在 `SSH_CONNECTION` 或 `SSH_TTY` | `browse` |
64
+ | darwin 或 win32 | `native` |
65
+ | linux 且带选择器二进制与显示 | `native` |
66
+ | 其他任何情况 | `browse` |
67
+
68
+ ### 源码地图
69
+
70
+ | 文件 | 职责 |
71
+ |---|---|
72
+ | [`src/index.ts`](src/index.ts) | 插件入口:`BACKEND_PACKAGES`/`SURFACE_PACKAGES` 映射、`apply` 挂载与卸载 |
73
+ | [`src/resolve.ts`](src/resolve.ts) | `resolveDirectoryPickerBackend`——纯函数的启动时决策 |
74
+ | [`src/probe.ts`](src/probe.ts) | 宿主探查:`hasLinuxChooserBinary`、`canExecute` |
75
+
76
+ </details>
77
+
78
+ -----
79
+
80
+ <a id="further-exploration"></a>
81
+ ## 进一步探索
82
+
83
+ 当选择器的约定不够用时阅读以下内容:先看 seam 定义,再看它挂载的两个后端。
84
+
85
+ - [目录选择 seam](../directory-picker/README.zh.md)——选择器所组合的能力约定。
86
+ - [目录选择能力 seam 决策](../../../.agents/notes/implemented/architecture/2026-07-28-directory-picker-capability-seam.zh.md)——后端为何在交互形态上彼此不同。
87
+ - [原生后端](../directory-picker-native/README.zh.md)——为本地操作者挂载的交互。
88
+ - [浏览后端](../directory-picker-browse/README.zh.md)——在其他任何地方挂载的交互。
89
+
90
+ -----
91
+
92
+ <a id="model-experience"></a>
9
93
  ## 模型体验
10
94
 
11
- 无。该选择器仅组合 GUI 宿主的目录选择;这里没有任何内容进入模型请求。
95
+ 无。GUI 宿主的目录选择选择器只挂载一个后端行,不注册任何面向模型的内容。
12
96
 
13
97
  #### KV Cache 影响
14
98
 
15
99
  无;该包既不组装也不发送提供方请求。
16
100
 
17
- ## 已知限制与暂缓事项
101
+ ## 已知限制与延期工作
102
+
103
+ <a id="known-limitations-and-deferred-work"></a>
104
+
105
+
106
+ 这些限制说明启动时采样何时会误判宿主。它们是当前包约束,不是任务积压。
18
107
 
19
108
  - **探测是从启动上下文推断操作者位置,而任何启动侧信号都无法证明这一点**——从 SSH 启动中脱离的 tmux 会话会丢失 `SSH_*` 标记;Aqua 会话之外的 Darwin 进程仍被算作有显示;在工作站本地启动、之后经 `ssh -L` 访问时,请求会从 `127.0.0.1` 到达,系统会判定 `native`,并把选择器弹在无人值守的工作站上。错误的 `native` 选择会退化为后端既有的可重试失败对话框,而对这类部署,直接组合 `-browse` 即选择安全的交互。
20
109
  - **Linux 选择器探查只读 `PATH`**——以其他途径可用的 zenity/kdialog(shell 别名、未装在 PATH 上)仍判定为 `browse`;把任一二进制装到 `PATH` 上,下次启动即恢复 `native` 资格。
21
- - **仅在启动时判定**——一次判定服务本次启动的所有客户端;按连接自适应(同一台服务器,本地浏览器用 native、远程浏览器用 browse)需要按客户端的能力对象以及 seam 有意删除的协议通告,等到出现同时服务两种形态的部署再做。
110
+ - **仅在启动时判定**——一次判定服务本次启动的所有客户端;按连接自适应(同一台服务器,本地浏览器用 native、远程浏览器用 browse)需要按客户端的能力对象以及 seam 未携带的协议通告,等到出现同时服务两种形态的部署再做。
111
+
112
+ <a id="dev-note"></a>
113
+ ### 开发备注
114
+
115
+ <details>
116
+ <summary>维护者的工作上下文——点击展开</summary>
117
+
118
+ 无。
119
+
120
+ </details>
package/lib/index.js CHANGED
@@ -99,9 +99,8 @@ const BACKEND_PACKAGES = {
99
99
  * Client surface package per resolved kind, mounted with its backend so one
100
100
  * resolved interaction still composes both faces. Declared as dependencies by
101
101
  * every composing app for the same reason as {@link BACKEND_PACKAGES}. Only the
102
- * specifier is referenced here — the packages belong to the Client program, so
103
- * no import of them exists on this side and knip needs them ignored for this
104
- * workspace.
102
+ * specifier is referenced here because the packages belong to the Client
103
+ * program, so no import of them exists on this side.
105
104
  */
106
105
  const SURFACE_PACKAGES = {
107
106
  native: "@deepseek-ai/dsh-client-ui-directory-picker-native",
@@ -30,9 +30,8 @@ export declare const BACKEND_PACKAGES: Record<DirectoryPickerBackendKind, string
30
30
  * Client surface package per resolved kind, mounted with its backend so one
31
31
  * resolved interaction still composes both faces. Declared as dependencies by
32
32
  * every composing app for the same reason as {@link BACKEND_PACKAGES}. Only the
33
- * specifier is referenced here — the packages belong to the Client program, so
34
- * no import of them exists on this side and knip needs them ignored for this
35
- * workspace.
33
+ * specifier is referenced here because the packages belong to the Client
34
+ * program, so no import of them exists on this side.
36
35
  */
37
36
  export declare const SURFACE_PACKAGES: Record<DirectoryPickerBackendKind, string>;
38
37
  /**
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@deepseek-ai/dsh-host-directory-picker-auto",
3
3
  "description": "Adaptive chooser of the directory-picker seam: resolves the host situation at boot and mounts the native or browse backend for the DeepSeek Harness web GUI host",
4
- "version": "0.1.1-rc.2",
4
+ "version": "0.1.2-alpha.2",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -32,25 +32,25 @@
32
32
  ],
33
33
  "license": "MIT",
34
34
  "peerDependencies": {
35
- "@deepseek-ai/dsh-client-ui-directory-picker-browse": "^0.1.1-rc.2",
36
- "@deepseek-ai/dsh-client-ui-directory-picker-native": "^0.1.1-rc.2",
37
- "@deepseek-ai/dsh-host-directory-picker-browse": "^0.1.1-rc.2",
38
- "@deepseek-ai/dsh-host-directory-picker-native": "^0.1.1-rc.2",
39
- "@deepseek-ai/cordis": "^4.0.1",
40
- "@deepseek-ai/cordis-plugin-loader": "^1.0.2",
41
- "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2",
42
- "@deepseek-ai/dsh-host-webserver": "^0.1.1-rc.2"
35
+ "@deepseek-ai/cordis": "^4.0.2",
36
+ "@deepseek-ai/cordis-plugin-loader": "^1.0.3",
37
+ "@deepseek-ai/dsh-client-ui-directory-picker-browse": "^0.1.2-alpha.2",
38
+ "@deepseek-ai/dsh-host-directory-picker-browse": "^0.1.2-alpha.2",
39
+ "@deepseek-ai/dsh-host-directory-picker-native": "^0.1.2-alpha.2",
40
+ "@deepseek-ai/dsh-host-webserver": "^0.1.2-alpha.2",
41
+ "@deepseek-ai/dsh-invariants": "^0.1.2-alpha.2",
42
+ "@deepseek-ai/dsh-client-ui-directory-picker-native": "^0.1.2-alpha.2"
43
43
  },
44
44
  "devDependencies": {
45
- "@deepseek-ai/cordis": "^4.0.1",
46
- "@deepseek-ai/cordis-plugin-loader": "^1.0.2",
47
- "@deepseek-ai/dsh-client-ui-directory-picker-browse": "^0.1.1-rc.2",
48
- "@deepseek-ai/dsh-client-ui-directory-picker-native": "^0.1.1-rc.2",
49
- "@deepseek-ai/dsh-host-directory-picker": "^0.1.1-rc.2",
50
- "@deepseek-ai/cordis-plugin-include": "^1.0.6",
51
- "@deepseek-ai/dsh-host-directory-picker-browse": "^0.1.1-rc.2",
52
- "@deepseek-ai/dsh-host-directory-picker-native": "^0.1.1-rc.2",
53
- "@deepseek-ai/dsh-host-webserver": "^0.1.1-rc.2",
54
- "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2"
45
+ "@deepseek-ai/cordis": "^4.0.2",
46
+ "@deepseek-ai/cordis-plugin-include": "^1.0.7",
47
+ "@deepseek-ai/cordis-plugin-loader": "^1.0.3",
48
+ "@deepseek-ai/dsh-client-ui-directory-picker-browse": "^0.1.2-alpha.2",
49
+ "@deepseek-ai/dsh-client-ui-directory-picker-native": "^0.1.2-alpha.2",
50
+ "@deepseek-ai/dsh-host-directory-picker": "^0.1.2-alpha.2",
51
+ "@deepseek-ai/dsh-host-webserver": "^0.1.2-alpha.2",
52
+ "@deepseek-ai/dsh-host-directory-picker-browse": "^0.1.2-alpha.2",
53
+ "@deepseek-ai/dsh-host-directory-picker-native": "^0.1.2-alpha.2",
54
+ "@deepseek-ai/dsh-invariants": "^0.1.2-alpha.2"
55
55
  }
56
56
  }