@dsh-electron/dsh-plugin-multi-root-workspace 0.1.9 → 0.1.11
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.en.md +26 -1
- package/CHANGELOG.md +26 -1
- package/README.en.md +24 -8
- package/README.md +24 -8
- package/cordis.patch.yml +4 -0
- package/lib/auto-review.js +1 -1
- package/lib/client.js +727 -209
- package/lib/client.js.map +1 -1
- package/lib/{command-Bwd6EGNV.js → command-BGdz7VBH.js} +65 -5
- package/lib/command.js +1 -1
- package/lib/{compat-CagUNzRB.js → compat-BiW-m_q0.js} +14 -1
- package/lib/compat.js +1 -1
- package/lib/{contract-DZ4zczDT.js → contract-CStSEOcK.js} +44 -1
- package/lib/index.js +6 -5
- package/lib/{instructions-CGNS3H0H.js → instructions-MePoRigy.js} +2 -206
- package/lib/instructions.js +1 -1
- package/lib/llm-message-fYORacvh.js +206 -0
- package/lib/metadata-DgqSdVX_.js +35 -0
- package/lib/{registry-BClm6wfh.js → registry-KSsmU393.js} +60 -7
- package/lib/registry.js +1 -1
- package/lib/{review-context-D-ohSVmA.js → review-context-AH-SXHmj.js} +1 -1
- package/lib/review-context.js +1 -1
- package/lib/scope.js +6 -2
- package/lib/skills.js +790 -0
- package/lib/types/client/WorkspaceFoldersAction.d.ts +1 -1
- package/lib/types/client/locales.d.ts +26 -16
- package/lib/types/client/open-in-app/OpenInAppAction.d.ts +5 -3
- package/lib/types/client/open-in-app/OpenTargetButton.d.ts +16 -10
- package/lib/types/client/open-in-app/adapter.d.ts +5 -1
- package/lib/types/client/open-in-app/controller.d.ts +5 -2
- package/lib/types/client/open-in-app/device.d.ts +11 -0
- package/lib/types/client/open-in-app/locales.d.ts +1 -1
- package/lib/types/client/open-in-app/open-path.d.ts +6 -5
- package/lib/types/client/open-in-app/open-toast.d.ts +39 -0
- package/lib/types/client/open-in-app/outcome.d.ts +23 -0
- package/lib/types/client/skills-client.d.ts +23 -0
- package/lib/types/client/skills-settings.d.ts +10 -0
- package/lib/types/client/skills.d.ts +36 -0
- package/lib/types/client/styles.d.ts +1 -1
- package/lib/types/command.d.ts +1 -1
- package/lib/types/compat/client-session.d.ts +2 -0
- package/lib/types/compat/dsh-version.d.ts +5 -5
- package/lib/types/compat/open-in-app-device.d.ts +23 -0
- package/lib/types/compat/skill-content.d.ts +3 -0
- package/lib/types/compat/skills-client.d.ts +33 -0
- package/lib/types/compat/skills-settings.d.ts +8 -0
- package/lib/types/compat/skills.d.ts +13 -0
- package/lib/types/compat/storage-zod.d.ts +1 -0
- package/lib/types/contract.d.ts +12 -1
- package/lib/types/registry.d.ts +7 -0
- package/lib/types/roots.d.ts +4 -1
- package/lib/types/scope.d.ts +2 -0
- package/lib/types/skills/catalog.d.ts +34 -0
- package/lib/types/skills/invocation.d.ts +7 -0
- package/lib/types/skills/metadata.d.ts +13 -0
- package/lib/types/skills/pool.d.ts +19 -0
- package/lib/types/skills/reader.d.ts +3 -0
- package/lib/types/skills/routing.d.ts +2 -0
- package/lib/types/skills-contract.d.ts +39 -0
- package/lib/types/skills.d.ts +43 -0
- package/package.json +98 -85
- package/lib/types/client/open-in-app/open-failure-toast.d.ts +0 -11
package/CHANGELOG.en.md
CHANGED
|
@@ -8,6 +8,29 @@ This file records the user-visible changes of every **released** version.
|
|
|
8
8
|
- For installation sources, the supported upstream runtimes, and known limitations, see the [README](./README.en.md).
|
|
9
9
|
- The evidence, numbering, and release state of each version live in the [roadmap progress ledger](./docs/plans/active/2026-09-12-multi-root-workspace.md#进度总账). The body of each GitHub Release is generated from the commit history by `scripts/release-notes.mjs` and is the complete raw list behind this file.
|
|
10
10
|
|
|
11
|
+
## [0.1.11] - 2026-10-29
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
- **Exact support for DSH `0.2.1-rc.4` and `0.2.2-alpha.2`**: the `rc.4` probe was fully green with no adapter changes; `0.2.2-alpha.2` splits tool execution out of `dsh-tools` into executors and gives `AgentRegistry` a new `sessionProjections` injection — neither touches plugin source. Upstream's new `SandboxExecutionPolicy.additionalWritableRoots` (a native third writable-root path unrelated to this fork) composes correctly with the widened provider, pinned by a new regression spec asserting both grants take effect. The dev pin moves to `0.2.2-alpha.2` (cordis `4.0.6-alpha.1`, Node ≥24.9). The client forks (files-tree, open-in-app) are re-synced to the `0.2.2-alpha.2` baseline — hover rules moved under `@media (hover: hover)` and open-in-app failure feedback became an app-wide `shell.overlay` outcome toast.
|
|
16
|
+
- **Upgrade lane and CI**: the CI verify matrix now routes by a known list — `0.1.*` / `0.2.0` / `0.2.1` run on Node `22.19.0`, everything else (including 0.2.2 and later) on `24.9.0`; the upgrade script additionally pins the target release's own cordis ecosystem (plugin-loader/group/include, schemastery, cosmokit) when repointing, so an older tree cannot mix with the alpha-line packages the committed lockfile prefers.
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
|
|
20
|
+
- **Skills refresh feedback loop caused by repeated Registry-authority notifications ([Issue #24](https://github.com/cherrchen/dsh-plugin-multi-root-workspace/issues/24))**: while a second DSH process contends for the registry lease (or the store fails to open), every additional-root Skills query retried the lease through `refresh()`; on failure `setRegistryAuthority(false)` notified listeners even though the state had not changed, invalidating the Skills cache and broadcasting `skills/change` — clients re-query on every event, closing an unbounded feedback loop: the contending Host burned about one CPU core while idle, grew memory, and eventually died of V8 OOM, and zero additional roots did not prevent it. Listeners are now notified only on a real `available`/`unavailable` transition; the lease retry, takeover after the holder exits, and the fail-closed "primary root only while authority is unavailable" semantics are unchanged ([troubleshooting](./docs/troubleshooting/registry-owned-by-another-process.md#skills-查询导致持续刷新issue-24), [ADR-0023 revision](./docs/decisions/ADR-0023-multi-root-skill-discovery-and-invocation.md#4-生命周期缓存与撤销)).
|
|
21
|
+
|
|
22
|
+
## [0.1.10] - 2026-10-25
|
|
23
|
+
|
|
24
|
+
### Added
|
|
25
|
+
|
|
26
|
+
- **Additional-root Skills**: skills are discovered in each additional folder's `.dsh/skills` and `.agents/skills`; names and descriptions are visible before the first model step and bodies load on invocation. The primary root uses `/skill-name`; additional roots always use the namespaced `/alias-id:skill-name` reference (completable from the Slash menu, invoked by the model through the native `skill` tool under an internal name). New `inherit` / `read-write` registrations enable Skills by default, `read-only` ones disable them; the Workspace Folders dialog provides an independent Skills toggle and `aliasId` editing, and the global **Enable additional-root Skills** switch under Settings → Plugins → Multi-root Workspace defaults to on — disabling it only stops new discovery and invocation while preserving each root's choice. On upgrade, legacy `inherit` / `read-write` registrations start with Skills enabled; migration preserves existing grants, but an older plugin writing the registry may strip `aliasId` and manual toggles — **lossless downgrade of Skills preferences is not guaranteed** (back up `$DSH_HOME/storages/multi_root_workspace.json` before downgrading). Enabling Skills on a read-only root grants no write access; disabling does not reclaim delivered bodies or stop started processes ([ADR-0023](./docs/decisions/ADR-0023-multi-root-skill-discovery-and-invocation.md)).
|
|
27
|
+
- **Exact support for DSH `0.2.1-rc.3`**. The upstream `rc.2`→`rc.3` delta is purely additive (new sidebar slots, navigation pins, and a DeepSeek `/models` listing), so no new adapter branch is needed; the dev pin moves to `0.2.1-rc.3` (cordis `4.0.5` unchanged).
|
|
28
|
+
|
|
29
|
+
### Fixed
|
|
30
|
+
|
|
31
|
+
- **Workspace Folders panel aligned with upstream UI**: the settings switch row layout, the Skills toggle folded into the icon actions, button backgrounds confined to hover, action appearance preserved during saves, and the folder policy and effective access combined into one label; the move up/down reorder buttons (the ordering interface is retained for a future drag interaction) and the permission introduction text at the top of the dialog are removed.
|
|
32
|
+
- **Namespaced skill reference rendering**: a sent `/alias-id:skill-name` reference renders as ordinary user text, without a dedicated button style, highlighting, or click-to-preview (same-day ADR-0023 revision); ordinary session activity/title updates no longer close an open skill body preview.
|
|
33
|
+
|
|
11
34
|
## [0.1.9] - 2026-10-20
|
|
12
35
|
|
|
13
36
|
### Added
|
|
@@ -169,7 +192,9 @@ The first release: the three MVP milestones (M1–M3).
|
|
|
169
192
|
|
|
170
193
|
- All eight findings of the pre-release external review (three of them release-blocking) are fixed, each with a regression test: a registered directory replaced by a symlink transplanting its authority (which introduced `recordedPath` — **re-resolving a path is not re-authorizing it**), concurrent registry mutations losing a write or reviving a revoked grant (per-primary-root mutations are serialized), a refresh not re-checking directories, a typed path being overwritten by the directory picker, the `reveal` response contract and failure code, duplicate ids not validated, the primary root missing from nesting validation, and CI testing before building.
|
|
171
194
|
|
|
172
|
-
[Unreleased]: https://github.com/cherrchen/dsh-plugin-multi-root-workspace/compare/v0.1.
|
|
195
|
+
[Unreleased]: https://github.com/cherrchen/dsh-plugin-multi-root-workspace/compare/v0.1.11...HEAD
|
|
196
|
+
[0.1.11]: https://github.com/cherrchen/dsh-plugin-multi-root-workspace/compare/v0.1.10...v0.1.11
|
|
197
|
+
[0.1.10]: https://github.com/cherrchen/dsh-plugin-multi-root-workspace/compare/v0.1.9...v0.1.10
|
|
173
198
|
[0.1.9]: https://github.com/cherrchen/dsh-plugin-multi-root-workspace/compare/v0.1.8...v0.1.9
|
|
174
199
|
[0.1.8]: https://github.com/cherrchen/dsh-plugin-multi-root-workspace/compare/v0.1.7...v0.1.8
|
|
175
200
|
[0.1.7]: https://github.com/cherrchen/dsh-plugin-multi-root-workspace/compare/v0.1.6...v0.1.7
|
package/CHANGELOG.md
CHANGED
|
@@ -8,6 +8,29 @@ English: [CHANGELOG.en.md](./CHANGELOG.en.md)
|
|
|
8
8
|
- 安装方式、受支持的上游运行时与已知限制见 [README](./README.md)。
|
|
9
9
|
- 每个版本的实施证据、编号口径与发布状态见[路线图 §进度总账](./docs/plans/active/2026-09-12-multi-root-workspace.md#进度总账);GitHub Release 的正文由 `scripts/release-notes.mjs` 从 commit 历史生成,是本文件之外的完整原始清单。
|
|
10
10
|
|
|
11
|
+
## [0.1.11] - 2026-10-29
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
- **精确支持 DSH `0.2.1-rc.4` 与 `0.2.2-alpha.2`**:`rc.4` 探针全绿、无需任何适配改动;`0.2.2-alpha.2` 把工具执行从 `dsh-tools` 拆出为独立执行器,`AgentRegistry` 新增注入 `sessionProjections`,本插件源码均不受影响。上游新增 `SandboxExecutionPolicy.additionalWritableRoots`(原生与 fork 无关的第三路可写根),宽授权 provider 与其正确复合——新回归用例钉住双方 grant 同时生效。开发 pin 提升到 `0.2.2-alpha.2`(cordis `4.0.6-alpha.1`,Node ≥24.9)。客户端 fork(files-tree、open-in-app)已对齐 `0.2.2-alpha.2` 基线——hover 规则移入 `@media (hover: hover)`,open-in-app 失败反馈改为应用级 `shell.overlay` outcome toast。
|
|
16
|
+
- **升级通道与 CI**:CI verify 矩阵改为按已知名单分流——`0.1.*` / `0.2.0` / `0.2.1` 走 Node `22.19.0`,其余(含 0.2.2 及以后)走 Node `24.9.0`;升级脚本在重指旧版本时会顺带钉住该版本自带的 cordis 生态(plugin-loader/group/include、schemastery、cosmokit),避免与提交锁文件的 alpha 行混树。
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
|
|
20
|
+
- **Registry Authority 重复通知引发的 Skills 刷新反馈循环([Issue #24](https://github.com/cherrchen/dsh-plugin-multi-root-workspace/issues/24))**:第二个 DSH 进程争用登记表 lease(或存储打开失败)时,附加根 Skills 的每次查询都经 `refresh()` 重试 lease;失败后 `setRegistryAuthority(false)` 即使状态没有变化也通知监听者,使 Skills 缓存失效并广播 `skills/change`,收到事件的客户端立即重查,形成无界反馈循环——等待方 Host 空闲时持续占用约一个 CPU 核心、内存增长直至 V8 OOM,零附加根同样可触发。现在仅在实际状态变化时通知;lease 重试、持锁方退出后的接管、以及「权限不可用时仅主根可写」的 fail-closed 语义不变([故障排查](./docs/troubleshooting/registry-owned-by-another-process.md#skills-查询导致持续刷新issue-24)、[ADR-0023 修订](./docs/decisions/ADR-0023-multi-root-skill-discovery-and-invocation.md#4-生命周期缓存与撤销))。
|
|
21
|
+
|
|
22
|
+
## [0.1.10] - 2026-10-25
|
|
23
|
+
|
|
24
|
+
### Added
|
|
25
|
+
|
|
26
|
+
- **附属根 Skills**:发现附属目录的 `.dsh/skills` 和 `.agents/skills`,首个模型步骤可见名称与描述,正文按需加载。主根使用 `/skill-name`;附属根始终使用 `/alias-id:skill-name` 命名空间引用(Slash 菜单可补全,模型经原生 `skill` 工具用内部名称调用)。新登记的 `inherit` / `read-write` 根默认开启,`read-only` 根默认关闭;Workspace Folders 对话框提供独立的 Skills 开关与 `aliasId` 编辑,Settings → Plugins → Multi-root Workspace 的「启用附属根 Skills」全局开关默认开启,关闭只阻止新发现与调用、保留每根选择。升级时旧 `inherit` / `read-write` 登记默认开启 Skills;持久化迁移保留原有 grant,但旧版写回可能剥离 `aliasId` 与手动开关,**不保证 Skills 配置无损降级**(降级前可备份 `$DSH_HOME/storages/multi_root_workspace.json`)。只读根开启 Skills 不授予写权限;禁用不回收已投递正文或已启动进程([ADR-0023](./docs/decisions/ADR-0023-multi-root-skill-discovery-and-invocation.md))。
|
|
27
|
+
- **精确支持 DSH `0.2.1-rc.3`**。上游 `rc.2`→`rc.3` 的差异全部为新增(新 sidebar 槽位、导航 pins、DeepSeek `/models` 列表),不需要新增适配分支;开发 pin 提升到 `0.2.1-rc.3`(cordis `4.0.5` 不变)。
|
|
28
|
+
|
|
29
|
+
### Fixed
|
|
30
|
+
|
|
31
|
+
- **Workspace Folders 面板与上游 UI 对齐**:设置开关行布局、Skills 开关收入图标动作区、按钮背景只出现在 hover、保存期间动作外观保持、根策略与生效访问合并为一个标签;移除上移/下移排序按钮(排序接口保留,供后续拖动排序)与对话框顶部的权限说明文字。
|
|
32
|
+
- **命名空间 Skill 引用的展示**:已发送的 `/alias-id:skill-name` 引用按普通用户文字渲染,不再携带独立按钮样式、高亮或点击预览(ADR-0023 同日修订);普通会话的 activity/title 更新不再误关闭已打开的 Skill 正文预览。
|
|
33
|
+
|
|
11
34
|
## [0.1.9] - 2026-10-20
|
|
12
35
|
|
|
13
36
|
### Added
|
|
@@ -169,7 +192,9 @@ English: [CHANGELOG.en.md](./CHANGELOG.en.md)
|
|
|
169
192
|
|
|
170
193
|
- 发布前外部评审提出的 8 项发现(其中 3 项发布阻断)全部修复,每项各带一个回归测试:登记目录被替换为符号链接后授权转移(引入 `recordedPath`,**重新解析路径不等于重新授权**)、并发修改注册表丢写或复活已撤销的授权(每个主根的变更串行)、刷新不重新检查目录、手输路径被目录选择器覆盖、`reveal` 的应答契约与失败码、重复 id 未校验、主根未纳入嵌套校验、CI 先测后构建。
|
|
171
194
|
|
|
172
|
-
[Unreleased]: https://github.com/cherrchen/dsh-plugin-multi-root-workspace/compare/v0.1.
|
|
195
|
+
[Unreleased]: https://github.com/cherrchen/dsh-plugin-multi-root-workspace/compare/v0.1.11...HEAD
|
|
196
|
+
[0.1.11]: https://github.com/cherrchen/dsh-plugin-multi-root-workspace/compare/v0.1.10...v0.1.11
|
|
197
|
+
[0.1.10]: https://github.com/cherrchen/dsh-plugin-multi-root-workspace/compare/v0.1.9...v0.1.10
|
|
173
198
|
[0.1.9]: https://github.com/cherrchen/dsh-plugin-multi-root-workspace/compare/v0.1.8...v0.1.9
|
|
174
199
|
[0.1.8]: https://github.com/cherrchen/dsh-plugin-multi-root-workspace/compare/v0.1.7...v0.1.8
|
|
175
200
|
[0.1.7]: https://github.com/cherrchen/dsh-plugin-multi-root-workspace/compare/v0.1.6...v0.1.7
|
package/README.en.md
CHANGED
|
@@ -17,9 +17,10 @@ Not every project is a monorepo. A real development project is usually several i
|
|
|
17
17
|
- **No new tools**: the agent keeps using the native `read` / `write` / `edit` / `bash`; only the granted directories grow.
|
|
18
18
|
- **Sandbox confinement**: an additional root may inherit the session's (primary root's) permission setting, or be pinned to read-only or read-write; under read-only and read-write, confinement does not rest on system prompts — it is enforced by an in-process filesystem fence plus kernel-level sandboxes (macOS Seatbelt / Linux bwrap / Landlock / Windows ACL), with files and bash sharing one and the same scope.
|
|
19
19
|
- **Optional Auto review (off by default)**: a fork of upstream's experimental auto-review that gives the reviewer the additional directories' context — the current workspace topology, each root's access level, and live instruction files; it ships disabled and only takes effect once the `@dsh-electron/dsh-plugin-multi-root-workspace/auto-review` row is explicitly enabled in the Plugin Manager row list, taking over the official bundle while on.
|
|
20
|
+
- **Additional-root Skills**: discovers `.dsh/skills` and `.agents/skills` inside additional folders, invoked through the namespaced `/alias-id:skill-name` reference and the native `skill` tool; each root has an independent toggle and editable `aliasId`, with a global setting that defaults to on.
|
|
20
21
|
- **Absent when absent**: with no additional root configured, its behavior is item-for-item identical to an uninstalled harness; every misconfiguration fails loudly instead of silently degrading.
|
|
21
22
|
|
|
22
|
-
Current released version: `v0.1.
|
|
23
|
+
Current released version: `v0.1.11`. The user-visible changes of each version live in the [CHANGELOG](./CHANGELOG.en.md); progress and release state live in the [roadmap progress ledger](./docs/plans/active/2026-09-12-multi-root-workspace.md#进度总账).
|
|
23
24
|
|
|
24
25
|
## Quick Start
|
|
25
26
|
|
|
@@ -48,11 +49,12 @@ The agent can now read, write, and run bash in that directory — the default is
|
|
|
48
49
|
| `0.1.6` | `0.1.6-alpha.1`, `0.1.6-alpha.2` |
|
|
49
50
|
| `0.1.7` | `0.1.7-alpha.1`, `0.1.7-alpha.2`, `0.1.7-rc.1`, `0.1.7-rc.2` |
|
|
50
51
|
| `0.2.0` | `0.2.0-rc.1`, `0.2.0-rc.2` |
|
|
51
|
-
| `0.2.1` | `0.2.1-alpha.1`, `0.2.1-alpha.2`, `0.2.1-alpha.3`, `0.2.1-alpha.4`, `0.2.1-alpha.5`, `0.2.1-rc.1`, `0.2.1-rc.2` |
|
|
52
|
+
| `0.2.1` | `0.2.1-alpha.1`, `0.2.1-alpha.2`, `0.2.1-alpha.3`, `0.2.1-alpha.4`, `0.2.1-alpha.5`, `0.2.1-rc.1`, `0.2.1-rc.2`, `0.2.1-rc.3`, `0.2.1-rc.4` |
|
|
53
|
+
| `0.2.2` | `0.2.2-alpha.2` |
|
|
52
54
|
|
|
53
55
|
The plugin does not start — as if it were not installed — when the DSH release is not in the table or the `@deepseek-ai/dsh-*` packages disagree on a version.
|
|
54
56
|
|
|
55
|
-
**Building from source / contributing**: Node.js `^22.19.0 || >=24`, pnpm `11.25.0` (enable via corepack); the dev-pinned DSH is `0.2.
|
|
57
|
+
**Building from source / contributing**: Node.js `^22.19.0 || >=24`, pnpm `11.25.0` (enable via corepack); the dev-pinned DSH is `0.2.2-alpha.2` (Node ≥24.9).
|
|
56
58
|
|
|
57
59
|
**Platforms**: macOS (Seatbelt), Linux (bwrap / Landlock), Windows (root-set ACL runner).
|
|
58
60
|
|
|
@@ -91,8 +93,8 @@ This installs pre-built artifacts; the first install needs the `allowBuilds` add
|
|
|
91
93
|
```sh
|
|
92
94
|
pnpm pack @dsh-electron/dsh-plugin-multi-root-workspace
|
|
93
95
|
# or download the tgz from the GitHub Release assets, e.g.:
|
|
94
|
-
# https://github.com/cherrchen/dsh-plugin-multi-root-workspace/releases/download/v0.1.
|
|
95
|
-
dsh plugin --profile web add ./dsh-electron-dsh-plugin-multi-root-workspace-0.1.
|
|
96
|
+
# https://github.com/cherrchen/dsh-plugin-multi-root-workspace/releases/download/v0.1.11/dsh-electron-dsh-plugin-multi-root-workspace-0.1.11.tgz
|
|
97
|
+
dsh plugin --profile web add ./dsh-electron-dsh-plugin-multi-root-workspace-0.1.11.tgz
|
|
96
98
|
```
|
|
97
99
|
|
|
98
100
|
Also pre-built, handy for air-gapped or offline delivery; the first install needs the same `allowBuilds` addition.
|
|
@@ -111,10 +113,10 @@ allowBuilds:
|
|
|
111
113
|
koffi: true
|
|
112
114
|
```
|
|
113
115
|
|
|
114
|
-
Pinning a version (e.g. `#v0.1.
|
|
116
|
+
Pinning a version (e.g. `#v0.1.11`) is recommended so a later push cannot silently change what actually runs:
|
|
115
117
|
|
|
116
118
|
```sh
|
|
117
|
-
dsh plugin --profile web add github:cherrchen/dsh-plugin-multi-root-workspace#v0.1.
|
|
119
|
+
dsh plugin --profile web add github:cherrchen/dsh-plugin-multi-root-workspace#v0.1.11
|
|
118
120
|
```
|
|
119
121
|
|
|
120
122
|
### Install from a local clone
|
|
@@ -205,6 +207,8 @@ The upstream `fs-sandbox` and `sandbox` rows are disabled and taken over by the
|
|
|
205
207
|
/workspace-folders [list] # list the primary root and the additional roots (access and state included)
|
|
206
208
|
/workspace-folders add <absolute path> [--inherit|--read-only|--read-write] # no path opens the OS directory picker; new registrations default to inherit
|
|
207
209
|
/workspace-folders access <n|path> inherit|read-only|read-write # switch access (widening requires the root to be available right now)
|
|
210
|
+
/workspace-folders skills <n|path> on|off # toggle additional-root Skills independently of write access
|
|
211
|
+
/workspace-folders alias-id <n|path> <kebab-case> # edit the stable Skill namespace
|
|
208
212
|
/workspace-folders alias <n|path> [name] # omitting the name clears the alias
|
|
209
213
|
/workspace-folders remove <n|path> # n is the number list prints
|
|
210
214
|
/workspace-folders reveal <n|path> # show it in the file manager
|
|
@@ -226,9 +230,21 @@ Workspace root (primary; access follows the current sandbox mode): /home/me/mono
|
|
|
226
230
|
Writable additional roots under the current mode: 1 of 2.
|
|
227
231
|
```
|
|
228
232
|
|
|
233
|
+
### Additional-root Skills
|
|
234
|
+
|
|
235
|
+
Skills are discovered in each additional folder’s `.dsh/skills` and `.agents/skills`. Names and descriptions are available before the first model step; bodies are loaded on invocation. The primary root uses `/skill-name`; additional roots always use `/alias-id:skill-name`, with Slash completion and manual entry. The model uses the native `skill` tool with an internal name. Internal IDs can appear in tool logs; human menus list namespaced references.
|
|
236
|
+
|
|
237
|
+
New `inherit` and `read-write` registrations enable Skills by default; `read-only` registrations disable them. The Workspace Folders dialog provides an independent Skills toggle and editable `aliasId`. Renaming the display Alias keeps `aliasId` stable. An actual change to registered access resets the toggle; session sandbox mode changes, same-value access updates, and re-registration without an access change preserve the manual choice. Enabling Skills on a read-only root grants no write access.
|
|
238
|
+
|
|
239
|
+
**Enable additional-root Skills** under Settings → Plugins → Multi-root Workspace controls all additional roots and defaults to on. Disabling it stops new discovery and invocation while preserving each root’s choice. Re-enabling restores discovery according to those choices. Primary-root Skills, instructions, LSP, browsing, and sandbox permissions retain their behavior. Older hosts use the compatible plugin settings page. Namespaced references appear as ordinary user text, without a separate background, highlighting, or click-to-preview action. Native draft highlighting does not yet support colon references.
|
|
240
|
+
|
|
241
|
+
On upgrade, legacy `inherit` and `read-write` registrations start with Skills enabled. Migration preserves existing grants. An older plugin can strip `aliasId` and manual toggles when it writes the registry; upgrading again applies the defaults. **Lossless downgrade of Skills preferences is not guaranteed.** Back up `$DSH_HOME/storages/multi_root_workspace.json` before downgrading if preferences must survive. Disabling Skills does not remove previously delivered bodies from history or stop processes already started.
|
|
242
|
+
|
|
243
|
+
See [ADR-0023](./docs/decisions/ADR-0023-multi-root-skill-discovery-and-invocation.md) for the architecture and acceptance boundaries, and the [progress ledger](./docs/plans/active/2026-09-12-multi-root-workspace.md#multi-root-skills-架构验证2026-10-23) for implementation and platform evidence.
|
|
244
|
+
|
|
229
245
|
### Panel
|
|
230
246
|
|
|
231
|
-
The **Folders** dialog at the sidebar foot lists the primary root and the additional roots, and offers add, remove, alias, read-only/read-write switching, copy path, reveal in the file manager
|
|
247
|
+
The **Folders** dialog at the sidebar foot lists the primary root and the additional roots, and offers add, remove, alias, read-only/read-write switching, copy path, and reveal in the file manager.
|
|
232
248
|
|
|
233
249
|
### Model side
|
|
234
250
|
|
package/README.md
CHANGED
|
@@ -17,9 +17,10 @@
|
|
|
17
17
|
- **不新增工具**:Agent 照旧使用原生 `read` / `write` / `edit` / `bash`,只是授权的目录变多了。
|
|
18
18
|
- **沙箱约束**:附加根可继承会话(主目录)的权限设置,也可单独固定为只读或读写;在只读与读写下,约束不靠系统提示词,而由进程内文件围栏 + 内核级沙箱(macOS Seatbelt / Linux bwrap / Landlock / Windows ACL)执行,文件与 bash 共享同一份授权范围。
|
|
19
19
|
- **可选 Auto review(默认关闭)**:fork 上游实验性「自动授权审查」,向 Reviewer 补充附加目录的审查上下文——当前工作区拓扑、各根访问级别与实时指令文件;出厂关闭,需在插件管理器的行列表中显式打开 `@dsh-electron/dsh-plugin-multi-root-workspace/auto-review` 行后生效,启用时接管官方同名 bundle。
|
|
20
|
+
- **附属根 Skills**:发现附属目录的 `.dsh/skills` 与 `.agents/skills`,附属根经 `/alias-id:skill-name` 命名空间调用原生 `skill` 工具;每根独立开关、可编辑 `aliasId`,全局设置默认开启。
|
|
20
21
|
- **不配等于没装**:未登记附加根时行为与未装插件逐项一致;配置错误一律明确报错,从不静默降级。
|
|
21
22
|
|
|
22
|
-
当前发布版本 `v0.1.
|
|
23
|
+
当前发布版本 `v0.1.11`。各版本的用户可见变更见 [CHANGELOG](./CHANGELOG.md);进度与发布状态见[路线图 §进度总账](./docs/plans/active/2026-09-12-multi-root-workspace.md#进度总账)。
|
|
23
24
|
|
|
24
25
|
## 快速开始
|
|
25
26
|
|
|
@@ -50,11 +51,12 @@ tarball、GitHub、本地源码等其他安装方式见[安装](#安装)。
|
|
|
50
51
|
| `0.1.6` | `0.1.6-alpha.1`、`0.1.6-alpha.2` |
|
|
51
52
|
| `0.1.7` | `0.1.7-alpha.1`、`0.1.7-alpha.2`、`0.1.7-rc.1`、`0.1.7-rc.2` |
|
|
52
53
|
| `0.2.0` | `0.2.0-rc.1`、`0.2.0-rc.2` |
|
|
53
|
-
| `0.2.1` | `0.2.1-alpha.1`、`0.2.1-alpha.2`、`0.2.1-alpha.3`、`0.2.1-alpha.4`、`0.2.1-alpha.5`、`0.2.1-rc.1`、`0.2.1-rc.2` |
|
|
54
|
+
| `0.2.1` | `0.2.1-alpha.1`、`0.2.1-alpha.2`、`0.2.1-alpha.3`、`0.2.1-alpha.4`、`0.2.1-alpha.5`、`0.2.1-rc.1`、`0.2.1-rc.2`、`0.2.1-rc.3`、`0.2.1-rc.4` |
|
|
55
|
+
| `0.2.2` | `0.2.2-alpha.2` |
|
|
54
56
|
|
|
55
57
|
DSH 版本不在表内、或 `@deepseek-ai/dsh-*` 各包版本不一致时,插件不会启动,行为等同没装。
|
|
56
58
|
|
|
57
|
-
**从源码构建 / 贡献**:Node.js `^22.19.0 || >=24`,pnpm `11.25.0`(建议经 corepack 启用);开发 pin 的 DSH 为 `0.2.
|
|
59
|
+
**从源码构建 / 贡献**:Node.js `^22.19.0 || >=24`,pnpm `11.25.0`(建议经 corepack 启用);开发 pin 的 DSH 为 `0.2.2-alpha.2`(Node ≥24.9)。
|
|
58
60
|
|
|
59
61
|
**运行平台**:macOS(Seatbelt)、Linux(bwrap / Landlock)、Windows(root-set ACL runner)。
|
|
60
62
|
|
|
@@ -93,8 +95,8 @@ dsh plugin --profile web add @dsh-electron/dsh-plugin-multi-root-workspace
|
|
|
93
95
|
```sh
|
|
94
96
|
pnpm pack @dsh-electron/dsh-plugin-multi-root-workspace
|
|
95
97
|
# 或从 GitHub Release 资产下载,例如:
|
|
96
|
-
# https://github.com/cherrchen/dsh-plugin-multi-root-workspace/releases/download/v0.1.
|
|
97
|
-
dsh plugin --profile web add ./dsh-electron-dsh-plugin-multi-root-workspace-0.1.
|
|
98
|
+
# https://github.com/cherrchen/dsh-plugin-multi-root-workspace/releases/download/v0.1.11/dsh-electron-dsh-plugin-multi-root-workspace-0.1.11.tgz
|
|
99
|
+
dsh plugin --profile web add ./dsh-electron-dsh-plugin-multi-root-workspace-0.1.11.tgz
|
|
98
100
|
```
|
|
99
101
|
|
|
100
102
|
同样是预构建产物,适合内网或离线环境交付;首次安装同样需要添加 `allowBuilds`。
|
|
@@ -113,10 +115,10 @@ allowBuilds:
|
|
|
113
115
|
koffi: true
|
|
114
116
|
```
|
|
115
117
|
|
|
116
|
-
建议锁定版本(如 `#v0.1.
|
|
118
|
+
建议锁定版本(如 `#v0.1.11`),让后续推送无法悄悄改变实际运行的内容:
|
|
117
119
|
|
|
118
120
|
```sh
|
|
119
|
-
dsh plugin --profile web add github:cherrchen/dsh-plugin-multi-root-workspace#v0.1.
|
|
121
|
+
dsh plugin --profile web add github:cherrchen/dsh-plugin-multi-root-workspace#v0.1.11
|
|
120
122
|
```
|
|
121
123
|
|
|
122
124
|
### 从本地源码安装
|
|
@@ -207,6 +209,8 @@ dsh --profile web --dump-config | grep -A3 'multi-root'
|
|
|
207
209
|
/workspace-folders [list] # 列出主根与附加根(含每根访问级别与状态)
|
|
208
210
|
/workspace-folders add <absolute path> [--inherit|--read-only|--read-write] # 不带路径时打开系统目录选择器;新登记默认 inherit
|
|
209
211
|
/workspace-folders access <order|path> inherit|read-only|read-write # 切换访问级别(扩权要求该根此刻可用)
|
|
212
|
+
/workspace-folders skills <order|path> on|off # 独立切换附属根 Skills,不改变写权限
|
|
213
|
+
/workspace-folders alias-id <order|path> <kebab-case> # 编辑稳定 Skill 命名空间
|
|
210
214
|
/workspace-folders alias <order|path> [alias] # 不带别名则清除已有别名
|
|
211
215
|
/workspace-folders remove <order|path> # 序号即 list 输出的编号
|
|
212
216
|
/workspace-folders reveal <order|path> # 在文件管理器中显示
|
|
@@ -228,9 +232,21 @@ Workspace root (primary; access follows the current sandbox mode): /home/me/mono
|
|
|
228
232
|
Writable additional roots under the current mode: 1 of 2.
|
|
229
233
|
```
|
|
230
234
|
|
|
235
|
+
### 附属根 Skills
|
|
236
|
+
|
|
237
|
+
发现附属目录的 `.dsh/skills` 和 `.agents/skills`,首个模型步骤可见名称与描述,正文按需加载。主根使用 `/skill-name`;附属根始终使用 `/alias-id:skill-name`,可在 Slash 菜单补全或手动输入。模型通过原生 `skill` 工具调用内部名称;工具日志中可能显示内部 ID,人类菜单只列命名空间引用。
|
|
238
|
+
|
|
239
|
+
新登记的 `inherit` / `read-write` 根默认开启,`read-only` 根默认关闭;Workspace Folders Dialog 可独立切换 Skills 并编辑 `aliasId`。显示 Alias 的修改不改变 `aliasId`。只有登记权限的实际变化才重置开关;切换会话沙箱模式、同值权限设置和未改变权限的重新登记都保留手动选择。只读根开启 Skills 后仍没有写权限。
|
|
240
|
+
|
|
241
|
+
Settings → Plugins → Multi-root Workspace 中的 **启用附属根 Skills** 控制全部附属根,默认开启。关闭后阻止新的发现与调用,保留每根选择;恢复后按原值发现。主根 Skills、指令、LSP、文件浏览及沙箱权限不受此开关影响。旧版宿主使用兼容的插件设置页。命名空间引用按普通用户输入显示,不添加背景、高亮或点击预览;草稿内的原生 Skill 高亮暂不支持冒号引用。
|
|
242
|
+
|
|
243
|
+
升级时旧 `inherit` / `read-write` 登记会默认开启 Skills。持久化迁移保留原有 grant;旧版写回可能剥离 `aliasId` 和手动开关,再升级时重新按默认值迁移,**不保证 Skills 配置无损降级**。如需保留选择,降级前备份 `$DSH_HOME/storages/multi_root_workspace.json`。已投递正文仍留在历史中,禁用不会结束已经启动的进程。
|
|
244
|
+
|
|
245
|
+
架构与验收边界见 [ADR-0023](./docs/decisions/ADR-0023-multi-root-skill-discovery-and-invocation.md),实施和平台状态见[路线账本](./docs/plans/active/2026-09-12-multi-root-workspace.md#multi-root-skills-架构验证2026-10-23)。
|
|
246
|
+
|
|
231
247
|
### 面板
|
|
232
248
|
|
|
233
|
-
侧栏底部的 **Folders**
|
|
249
|
+
侧栏底部的 **Folders** 对话框列出主根与附加根,支持添加、移除、别名、切换只读/可写、复制路径与在文件管理器中显示。
|
|
234
250
|
|
|
235
251
|
### 模型侧
|
|
236
252
|
|
package/cordis.patch.yml
CHANGED
|
@@ -92,6 +92,10 @@
|
|
|
92
92
|
# the model. This row closes that gap for the additional roots only; the
|
|
93
93
|
# primary root and the user-global file stay upstream's. The budget is the
|
|
94
94
|
# total for ALL additional roots, not per root.
|
|
95
|
+
- id: multi-root-skills
|
|
96
|
+
name: '@dsh-electron/dsh-plugin-multi-root-workspace/skills'
|
|
97
|
+
config:
|
|
98
|
+
enabled: true
|
|
95
99
|
- id: multi-root-instructions
|
|
96
100
|
name: '@dsh-electron/dsh-plugin-multi-root-workspace/instructions'
|
|
97
101
|
config:
|
package/lib/auto-review.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as assertAutoReviewRelease, t as MultiRootReviewContext } from "./review-context-
|
|
1
|
+
import { n as assertAutoReviewRelease, t as MultiRootReviewContext } from "./review-context-AH-SXHmj.js";
|
|
2
2
|
import { t as assertForkPackages } from "./auto-review-packages-nRjnb4pU.js";
|
|
3
3
|
import { t as wrapMethod } from "./method-wrapper-CFY3p3j2.js";
|
|
4
4
|
//#region src/compat/auto-review-loader.ts
|