# dsh-wsl-workspace-picker

[![Awesome DSH Plugin](https://awesome-dsh-plugin.com/badge.svg)](https://awesome-dsh-plugin.com)

DeepSeek Harness Web UI 增强版工作区目录选择器：一键直达 `/mnt` Windows 盘符、从文件系统根目录开始的完整面包屑、常显路径输入框。

| [English](README.md) |

## 截图

![dsh-wsl-workspace-picker 对话框](assets/workspace-picker-demo.png)

增强版"选择工作区目录"对话框：顶部为 `/mnt` Windows 盘符快捷访问行、常显路径输入框、从 `/` 开始的完整面包屑。

## 为什么需要它

DSH 自带的目录选择对话框（侧边栏工作区"+"按钮和对话页工作区选择器背后的对话框）默认打开 Linux 主目录，并且**面包屑在"主目录"处截断**。在 WSL 下，Windows 盘位于 `/mnt/c`、`/mnt/d`……只能通过面包屑旁一个极不显眼的铅笔图标输入路径才能到达——大多数用户根本找不到它，面包屑也永远点不到 `/mnt`。

本插件以单栏浏览器遮蔽（shadow）原版对话框，让所有路径都触手可及：

- **快捷访问行** — 主目录、`/`、`/mnt`、`/mnt/c`、`/mnt/d`、`/mnt/e`、`/mnt/f`，WSL 下任意 Windows 盘一键直达。
- **常显路径输入框** — 直接输入绝对路径（如 `/mnt/d/projects`）回车跳转。
- **从 `/` 开始的完整面包屑** — 整个文件系统上下点击，不再被主目录截断。
- **新建文件夹** 和 **显示隐藏文件** 开关，与原版一致。

## 安装

```sh
dsh plugin --profile web add dsh-wsl-workspace-picker
```

重启 `dsh web` 并刷新浏览器页面。通过侧边栏工作区"+"按钮（或对话页工作区选择器）打开选择器，即可看到增强版对话框。

卸载：

```sh
dsh plugin --profile web remove dsh-wsl-workspace-picker
```

## 工作原理

本插件（dual-face 包）的浏览器半注册到两个 `directoryFlow` 槽位（`sidebar.workspaces.directoryFlow` 与 `conversation.hero.workspace.directoryFlow`），槽位优先级 **−10**。DSH 槽位系统是遮蔽制：同槽位中优先级最低的 occupant 生效，因此 −10 会替换原版浏览对话框（优先级 0）。原版插件保持加载、不受影响，卸载本插件即可还原。

目录列表复用 host 端现有的 `browse` 能力（经客户端运行时 `ctx.workspaces.listDirectory` / `createDirectory`）——无任何 host 侧代码，不自行访问文件系统。

```
dsh-wsl-workspace-picker/
├── package.json      # dsh.bundle.patch + dsh.client（dual-face 声明）
├── cordis.patch.yml  # loader 条目插入
├── scripts/build.mjs # ESBuild：src/ → lib/
├── src/
│   ├── client.tsx    # 浏览器半（TypeScript 源码）
│   ├── styles.ts     # 对话框样式 + 注入
│   └── index.ts      # host 半（空 apply）
└── lib/
    ├── index.js      # host 半（构建产物）
    └── client.js     # 浏览器半（构建产物：__ModuleLoader__ bundle）
```

浏览器半使用 TypeScript 编写，由 ESBuild 编译（`npm run build`）。运行时依赖（`react`、`react/jsx-runtime`、`@deepseek-ai/dsh-client-ui-primitives` 等）保持 external，加载时经 web shell 模块表解析，与官方 client bundle 一致。`npm run typecheck` 执行 `tsc --noEmit` 类型检查。

## 兼容性

- DeepSeek Harness `0.1.0-rc.6` 及以上（web profile）
- 存在 `/mnt/<盘符>` Windows 挂载的主机（WSL）；其他主机上快捷 chip 只是列出可能不存在的目录
- 语言：English、简体中文（跟随 UI 语言）

## 安全与范围

纯 UI 插件。无 host 侧行为、不发起任何网络连接，仅通过原版对话框同款的 host `browse` 能力列目录/建目录，受当前 profile 的文件沙箱策略约束。

## 许可证

MIT
