DSH Session Pins:为 DeepSeek Harness 提供持久固定会话菜单

前言

下面介绍一个 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。
  • 菜单支持 OpenUnpinBack,适用时显示;空列表有明确的空状态。
  • 普通、非空、非子代理的当前会话可以被固定;最新固定项排在前面;已存在的 id 再次固定会移到前面,不产生重复。
  • 空会话和子代理当前会话不能新固定;已保存的 id 仍可移除,打开失败会被包含在菜单内,并保留恢复操作。
  • 固定项保存在 localStoragedsh.session-pins.v1 下,是带版本号的有序 id 列表。输入会被校验:非法记录回退为空,非字符串和空白 id 被移除,重复 id 保留首次出现,最多保留 100 个固定项。
  • 同源 tab 在插件激活时通过浏览器 storage 事件协调;写入方 tab 直接更新自己。
  • 固定、取消固定、持久化和打开会话都不需要 API key 或凭证。
  • 集成使用公开的 Harness 客户端服务和 sidebar.footer.action 槽位,不使用 host patch、monkey patch 或兼容层。
  • package.jsondsh.client.platformwebdsh.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 行时,会打开同一菜单的下钻视图;适用时会看到 OpenUnpinBack

固定当前会话的前提是当前会话为普通、非空、非子代理会话;被固定的当前会话会提供 Unpin current session

如果你要本地开发或验证仓库,先做环境准备。package.jsonpackageManagerpnpm@11.7.0engines^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 === truephase === 'ready'state === 'idle' 时才可执行;否则省略 Open,保留 UnpinBack
  • 在 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
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜