dsh-at-file
FSMargoo/dsh-at-fileCodex 风格的 `@file` 文件引用,输入框里直接搜索并引用工作区文件。
在侧栏列表上方加「工作区 / 最新会话」切换条,含固定会话分组、行级菜单(固定/取消固定、复制 Session ID)、标题过滤;pin 存于浏览器 localStorage,并对 dsh-plugin-pin-session 做一次性迁移与过渡双写。
window.__ModuleLoader__ bundle) · localStorage dsx2-pins / dsx2-groups · 声明 dsh.bundle.patch + dsh.client(web)
语言 / Language:中文 | English
一个 DeepSeek Harness 客户端插件,升级侧栏会话列表: 列表上方加「工作区 / 历史会话」切换条——工作区是原生分组,历史会话把全部会话按最近排序平铺, 带相对时间戳、运行状态点与所属工作区标签;固定会话分组常驻顶部。 0.3.0 起历史会话再分「工作区 / 外部调用」两组,外部调用(headless 流量)默认折叠、实时计数。 0.3.4 起分组只看 workspace 成员资格:
Automation-*workspace 里的会话属「工作区」组, 其最新运行直接排在工作区组顶部;注册滞后的会话按 cwd→workspace 路径前缀兜底归组。 纯 DOM 实现——无 React、无 portal、不接管 slot;装进webprofile 重启即用。
Automation-* workspace 也是正常 workspace,其最新运行就在本组顶部)在上,「外部调用」(真正无 workspace 的 headless 会话,如 dsh --profile <x> 直连创建)在下,默认折叠并显示实时计数。host 侧 workspace 注册滞后时按会话 cwd 对 workspace 路径做最长前缀匹配兜底归组。折叠状态存 localStorage(dsx2-groups);搜索时强制展开两组;折叠组完全跳过行渲染,上千条 headless 历史也不建 DOM。workspaces.openPath 服务激活——无宿主侧代码。ResizeObserver 在侧栏收窄成 rail 时整体隐藏。content-visibility 跳过 layout/paint、数据刷新 400ms 节流(tab 切换/折叠/搜索等直接交互路径不节流,保持即时);展开 2400+ 行实测毫秒级。dsh-plugin-pin-session 时,启动时一次性合并其固定列表(id 去重、保持最旧优先,GET /pin-session/pins),过渡期每次固定/取消双写到旧插件 POST /pin-session/pin|unpin;旧插件移除后两者均为静默空操作。dsh web 可运行)。dsh web。web profile)一条命令安装:
dsh plugin --profile web add github:NattoCB/dsh-plugin-sidebar-views
手动安装:在 profile 的 package.json 里,把包加入 dependencies、把插件名加入 dsh.profile.bundles,然后在 profile 目录跑 pnpm install,重启 dsh web。
重启后侧栏列表上方即出现切换条,零配置。切换视图、固定会话、折叠分组的状态全部存浏览器 localStorage,刷新不丢。
Pin 与分组状态都存浏览器 localStorage,固定关系跟随浏览器 profile,不跟随 DSH host:
| localStorage 键 | 内容 |
|---|---|
dsx2-pins | 固定列表(最旧优先 [{ id, title?, pinnedAt }]) |
dsx2-pins-collapsed | 固定分组的折叠状态 |
dsx2-groups | 工作区/外部调用分组的折叠状态(外部组默认折叠) |
对旧 dsh-plugin-pin-session 的迁移语义见功能一览 🔁:一次性合并 + 过渡期双写,均为静默容错。
从 profile package.json 的 dependencies 与 dsh.profile.bundles 两处同时移除本插件,然后重启 DSH。只删 node_modules 里的包而留下 bundles 条目,boot graph 会请求一个已不存在的 client.js——模块加载器将其视为致命错误,整个 web GUI 无法挂载。
npm test # node --test: 包契约 + pin 合并逻辑
client/client.js 是 window.__ModuleLoader__.load({ id, factory }) bundle,与 DSH 自家客户端 bundle 同形。pin 合并逻辑导出为 exports._mergePins,测试跑的是真实代码而非拷贝。