dsh-extra-workspaces
给一个 DSH 会话挂上额外的本地工作目录。清单出现在右侧栏的 会话设置 页里,并且会作为一条运行时上下文提醒告诉模型——只在清单变化时注入,不是每轮重复。
它做什么
- 会话设置页里多出一节 额外工作区:添加目录(走 DSH 自带的目录选择器)、改别名、写一句备注、删除。
- 清单按会话保存(
<DSH_HOME>/storages/session_settings/sessions/<会话id>.json),DSH 重启后同一条会话仍然带着它。
- 清单变化时,模型的最新上下文里出现一条提醒,列出每个目录的别名、绝对路径、备注,并如实说明当前权限档下能不能改这些目录。
- 不注册成 DSH 的正式工作区,不改 DSH 本体的任何文件,不挂 DSH 的任何钩子。
权限:说清楚,不假装
本插件不扩大 DSH 允许写入的范围。DSH 的可写根只有一个:会话自己的工作目录(外加系统临时目录)。所以:
| 会话权限档 | 主工作区 | 额外工作区 |
|---|
| 仅可查看 | 读得到,改不了 | 读得到,改不了 |
| 工作区可写 | 读得到,改得了 | 读得到,改不了;只读命令能跑,要写文件的命令会被拒绝 |
| 完全权限 | 完全对等 | 完全对等 |
提醒文本按会话实际权限档选措辞,所以模型不会以为自己能写其实写不了。
规则
- 同一个目录重复添加会被拒绝;
- 与已有条目互相包含(父目录或子目录)也会被拒绝——避免"加了父目录之后主工作区反而变成它的子目录"这种状态;
- 每个会话最多 8 条(可用
maxWorkspaces 配置);
- 目录被删掉或移走不会自动移除,也不会被插件主动标注:提醒里不断言目录是否存在(那需要在每步请求里探测磁盘,会把整个 DSH 卡住),面板上的标注只在目录选择器处于"网页内浏览"形态时可用,且含义是"宿主读不到这个目录"。
配置
| 字段 | 默认 | 说明 |
|---|
maxWorkspaces | 8 | 每个会话最多几条(上限 64) |
reminderLanguage | 'zh' | 提醒文本语言('zh' / 'en') |
安装
包放进 profile 能解析的位置(例如 link:D:/projects/dsh-plugins/dsh-extra-workspaces),把它加进 profile 的 dsh.profile.bundles,再按 cordis.patch.yml 里的那一行把宿主半边挂上。客户端半边由 dsh.client 声明自动装配,无需额外步骤。
依赖与升级对照
这个插件依赖 DSH 的哪些特性/API、动了 DSH 的哪些部分、DSH 升级时要复查什么,见 docs/dsh-dependencies.md。
测试
node --test "tests/**/*.spec.mjs"
已知边界
- 只支持本地目录;远程(SSH)工作区未支持。
- 不判断目录是否存在:提醒不断言,请求路径上也不探测磁盘(网络路径的探测会同步阻塞整个进程)。
- 会话设置页仍会显示这一项自带的"默认值/已覆盖"框架,那由页面控制,不由本插件控制。