前言¶
下面介绍一个 DSH 插件:alooshxl/dsh-session-pins。它解决的是一个具体问题:在 DeepSeek Harness 的 web 侧边栏中,把常用会话固定起来,避免每次重新查找。
DSH 支持插件扩展,但这个插件没有替换宿主会话浏览器,而是通过公开的 sidebar.footer.action 槽位贡献一个根级动作。这样插件不会修补宿主,也不依赖私有 UI 源码。
这是什么¶
@dsh-external/dsh-session-pins 是由 alooshxl 维护的 MIT 许可证插件。它面向使用 DSH web profile 的用户和开发者:在侧边栏底部增加一个固定会话菜单,让常用会话有稳定的入口。
固定记录保存在浏览器本地 localStorage,不依赖 API key 或凭证。
核心功能¶
- 宽侧边栏的动作显示 pin 图标、
Pinned sessions和当前固定数量。 - 窄侧边栏的动作是图标样式,带有可访问名称和延迟 tooltip。
- 菜单支持
Open、Unpin、Back,适用时显示;空列表有明确的空状态。 - 普通、非空、非子代理的当前会话可以被固定;最新固定项排在前面;已存在的 id 再次固定会移到前面,不产生重复。
- 空会话和子代理当前会话不能新固定;已保存的 id 仍可移除,打开失败会被包含在菜单内,并保留恢复操作。
- 固定项保存在
localStorage的dsh.session-pins.v1下,是带版本号的有序 id 列表。输入会被校验:非法记录回退为空,非字符串和空白 id 被移除,重复 id 保留首次出现,最多保留 100 个固定项。 - 同源 tab 在插件激活时通过浏览器
storage事件协调;写入方 tab 直接更新自己。 - 固定、取消固定、持久化和打开会话都不需要 API key 或凭证。
- 集成使用公开的 Harness 客户端服务和
sidebar.footer.action槽位,不使用 host patch、monkey patch 或兼容层。 package.json中dsh.client.platform为web,dsh.client.inject包括@deepseek-ai/dsh-client-runtime、@deepseek-ai/dsh-client-locale、@deepseek-ai/dsh-client-ui-sidebar。
安装与启用¶
以下安装命令以 v0.1.0 Git tag 为例。README 说明 GitHub 仓库和 tag 在 release 步骤中创建,因此应在对应 release 存在后再运行。
dsh plugin --profile web add github:alooshxl/dsh-session-pins#v0.1.0
安装后,启动 stock web profile:
dsh web
等价的显式启动命令是:
dsh --profile web
如果升级到另一个 Git tag,重复 add 并使用新 tag;不要用 update 选择 Git ref。例如:
dsh plugin --profile web add github:alooshxl/dsh-session-pins#v0.1.1
如果需要不可变安装,把占位符替换为完整的 40 位 commit SHA:
dsh plugin --profile web add github:alooshxl/dsh-session-pins#<40-character-commit-sha>
移除插件:
dsh plugin --profile web remove @dsh-external/dsh-session-pins
典型用法¶
在浏览器里,启动 dsh web 后,从侧边栏底部的固定会话入口打开菜单。选择一个 root 行时,会打开同一菜单的下钻视图;适用时会看到 Open、Unpin、Back。
固定当前会话的前提是当前会话为普通、非空、非子代理会话;被固定的当前会话会提供 Unpin current session。
如果你要本地开发或验证仓库,先做环境准备。package.json 中 packageManager 为 pnpm@11.7.0,engines 为 ^22.19.0 || >=24.0.0。
git clone https://github.com/alooshxl/dsh-session-pins.git
cd dsh-session-pins
pnpm install --frozen-lockfile
GNU Make 检查点:
make fmt && make test && make lint
完整的发布向验证命令如下。最后的 git status 命令应没有输出;如果生成物有漂移,应视为未通过。
pnpm run build
pnpm run format:check
pnpm run typecheck
pnpm run verify:self-contained
pnpm run verify:package
git diff --check
git status --short --untracked-files=all -- lib
适用场景与注意¶
- 该插件的兼容目标是
@deepseek-ai/dsh@0.1.0-rc.6。DeepSeek Harness 处于 developer preview,新的 release candidate 可能在兼容性复核前破坏该插件。 - 浏览器本地持久化不会跨设备、浏览器 profile、浏览器或不同 origin 同步。如果
localStorage被阻止或抛出错误,固定项仍可在当前页面内存中使用,但不会在刷新后保留。 - Workspace archive 状态只有在
baselinesReady === true、phase === 'ready'且state === 'idle'时才可执行;否则省略Open,保留Unpin和Back。 - 在 DeepSeek Harness
0.1.0-rc.6中,通过sessions.open()选择已归档 id 会立即清除,且没有公开 unarchive 操作;可操作的已归档固定项保留实时标题,省略Open,但仍可移除。 - Task 7 的 wide/rail 手工视觉验收仍为 pending,文中不将其声明为已完成。
- 该插件不读取凭证文件,不携带临时浏览器 profile,也不包含私有 Harness 源码;固定、取消固定、持久化和打开会话不需要 API key 或凭证。
- DSH 生态的扩展方式是插件化。第三方插件目录是独立站点,与 DeepSeek / 幻方没有官方从属关系,不应把它理解为官方应用商店。
- 插件以当前
dsh进程权限运行。安装前建议检查源码、依赖、许可证和实际行为;本项目使用 MIT 许可证。
参考链接¶
- 目录页(来自本次材料线索):https://www.skillhub.cn/plugins/alooshxl/dsh-session-pins
- GitHub:https://github.com/alooshxl/dsh-session-pins