🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI
广告☁️ 云服务器特惠阿里云首购 8 折 · 腾讯云合作特惠
DeepSeek Harness Hub
← 返回列表

jackovibe/dsh-codex-pin

DeepSeek Harnessspec-screened扫描:无法判定在 GitHub 查看 ↗
⚠ 装前注意

Codex 式会话置顶与归档风格的 DSH Web 插件置顶=标记不是排序,宿主持久,零顺序改动

基本兼容但装前注意:未发布到 npm registry,仅可从源码安装 · 最近上游提交 2026/9/24 · 已提供中文文档

Codex 式会话置顶与归档风格的 DSH Web 插件(置顶=标记不是排序,宿主持久,零顺序改动)

综合分
35.7
GitHub 分
35.7
用户评分
—
★ Stars
1
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add jackovibe/dsh-codex-pin
未发布到 npm registry,仅可从源码安装,改用 GitHub 源安装
信任档位:已验证本站已于 2 天前真实安装成功(L4 · 真实安装)
是什么
dsh 原生插件 · browser
装得上吗
本站已真实安装成功(L4 · 真实安装,非静态推断)
安全吗
本站尚未对该插件做风险分级(暂未覆盖,不等同于无风险)
还在维护吗
活跃:最近一次提交在 2 天前

档位由下列信号合成:本站实装验证(真实安装,当前最高到 L4)· 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。下方各区块是它的证据明细。 验证判据与等级说明 →

🟢实装验证通过· 2026/9/23
由本站实装验证器在真实 dsh 环境安装成功,非静态推断。
数据截至 2026/9/25(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
安装兼容性检查⚠ 装前注意

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包dsh-codex-pin(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=22.19.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

未发布到 npm registry,仅可从源码安装

验证方式:npm registry 存在性 + package.json 静态校验 · 最后验证 2026/9/23 19:04:00

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-settings@deepseek-ai/schemastery@deepseek-ai/dsh-client-connection@deepseek-ai/dsh-client-ui-conversation@deepseek-ai/dsh-client-ui-sidebar@deepseek-ai/dsh-client-ui-layout@deepseek-ai/dsh-client-ui-settings
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

由 DeepSeek 最新模型翻译生成
dsh-codex-pin

DeepSeek Harness Web 侧栏的 Codex 式会话置顶 —— 置顶是标记,不是位置。

置顶一个会话,会把它提升到整个工作区列表之上的单个 已置顶 / Pinned 区域。
切换置顶状态从不调用 workspace.insertSessionBefore,从不改写工作区
视图的排序,也从不切换侧栏的排序模式:~/.dsh/storages/workspace.json
里的持久会话顺序原封不动。这条承诺由仓库里的静态检查(npm test)守着,
而不是只写在文档里。

已置顶区域位于工作区列表之上

独立社区插件,非 DeepSeek 官方产品,与 OpenAI 无隶属关系;“Codex 式”描述的是
它复刻的交互模型,不代表任何官方关联。

功能

- 一个置顶标记:鼠标悬停会话行 → 点图钉(📌),会话进入侧栏顶部的
已置顶 / Pinned,新的置顶排在前面。
- 置顶行离开原分组,不产生重复行:点该行即打开会话,点行上的图钉即取消置顶,
会话回到列表顺序原本属于它的位置。
- 宿主持久化:有序列表存在宿主 settings 命名空间 codex-pin
(~/.dsh/settings.yaml),重启后仍在,且凡设置通道可达的浏览器都能共享。
- 诚实降级:设置通道不可达的浏览器改用本机 localStorage,分区标题会显示
仅本浏览器 / This browser only。回退只是救急、不是单向锁:宿主写失败会先重试
一次;即便已经回退,之后每次置顶仍会探测宿主,一旦某次写入成功就清掉回退数据,
标题上的提示自动消失。
- 对模型零影响:不产生会话事件、不消耗 token、无遥测、无外部网络请求——
浏览器半程只触及同源的宿主能力:设置命名空间,以及行菜单用到的
workspaces.openSession / forkSession / archiveSession 与会话自身的 rename。

和同类置顶插件的区别

| | dsh-codex-pin | dsh-pin | dsh-session-pin |
|---|---|---|---|
| 置顶层级 | 一层:全局「已置顶」区 | 两层:工作区内 + 全局托盘 | 两层:工作区 + 会话 |
| 持久会话顺序 | 从不写入——完全不调用任何排序接口 | 工作区内置顶走 workspace.insertSessionBefore,并把排序切到手动;全局托盘是显示层 | 置顶会话移动到所属 account 最前 |
| 置顶状态存储 | 宿主 codex-pin.pinned + localStorage 兜底 | 宿主顺序锚点 + 本地记录 | 宿主 settings,按浏览器持久 |
| 附加能力 | 刻意不做 | 锚点精确还原、排序模式还原 | 8 色标记、看板、标签、视图、/goto |
| 体积 | 一个 bundle 条目,无 HTTP 路由 | 纯客户端 | 宿主 + 浏览器双侧 |

想要「置顶只是可随时撤销的视觉标记」,选这个;想让置顶顺带决定顺序、颜色或看板,
选另外两个。

前置条件

- DeepSeek Harness 的 web profile(插件声明 platform: web)。
- 实测环境 dsh web 0.1.5-rc.1,并已在 0.1.6-alpha.2 复测(该版本重写了
侧栏,浏览器半程因此改为探测宿主能力形状而非写死某一版的 API);peer 范围声明为
=0.1.2-rc.1 =22.19.0(仅从源码构建时需要)。
- dsh plugin add 在所有已知 DSH 版本上都会打印 peer 依赖警告——生态里的 peer
声明都是可选叠加层,该警告是预期的、无害的。

安装

直接从 GitHub 装 —— 现在就能用的路径
dsh plugin --profile web add github:jackovibe/dsh-codex-pin

想钉住某个 release 而不是跟 main(任何 tag 都可以)
dsh plugin --profile web add github:jackovibe/dsh-codex-pin#v0.2.7

用 release 附件里的 tarball(Releases → Assets)
dsh plugin --profile web add ./dsh-codex-pin-0.2.7.tgz

从源码
npm run build && npm pack && dsh plugin --profile web add ./dsh-codex-pin-0.2.7.tgz

npm(发布后)
dsh plugin --profile web add dsh-codex-pin

github: 这一条就是本插件自己开发用的 profile 在用的写法,每次本地运行都在跑;
npm 包名是留给后续发布的,目前还解析不到。

装完重启 dsh web(loader 在启动时组合 bundle 层),再在浏览器 Ctrl+Shift+R
硬刷新。悬停会话行即可看到图钉。

挂载方式

包自带 bundle patch(cordis.patch.yml),只插入一个 loader 条目:

- insert:
- id: codex-pin
name: dsh-codex-pin

dsh plugin add 会自行对账 dsh.profile.bundles,所以不要再在 profile 自己的
cordis.patch.yml 里重复插入同一条:两层插入同一个 loader id 会导致启动失败。
重启前可以这样确认组合结果:

dsh --profile web --dump-config | grep -c 'id: codex-pin'   # 必须输出 1

升级 / 卸载

升级:重跑同一个 spec(会取 main 上最新一次提交,然后重启)
dsh plugin --profile web add github:jackovibe/dsh-codex-pin
或切到指定 release
dsh plugin --profile web add github:jackovibe/dsh-codex-pin#v0.2.7

dsh plugin --profile web remove dsh-codex-pin       # 卸载后重启

卸载后 settings.yaml 里仍会留下 codex-pin 段(会话 id),需要清理可手动删除。

使用

| 操作 | 方式 |
|---|---|
| 置顶 / 取消置顶会话 | 悬停行,点图钉控件(📌 切换) |
| 打开已置顶会话 | 点「已置顶 / Pinned」区里的那一行 |
| 从分区里取消置顶 | 点分区行上的实心图钉 |
| 重命名 / 分叉 / 归档 / 删除 / 复制标题或 ID | 右键任意会话行打开行菜单 |
| 对当前会话置顶 / 重命名 / 归档 | Ctrl+Alt+P / Alt+Ctrl+R / Ctrl+Shift+A |

置顶与未置顶的会话行带同一组控件:图钉(未置顶=描边、置顶=实心)与归档;
「已置顶」区里的行同样带图钉和归档,所以归档在置顶状态下依然可用。行菜单里的
删除会话(红色)走 archive-manager 的 workspaceRegistry.deleteSession,
点击后先弹确认框;未装该插件时这一项会报「不可用」而不是静默失败。

菜单文案与提示语跟随应用语言:本插件经 ctx.inject(['locale']) 注册 zh/en
词典,中文界面显示「重命名 / 置顶聊天 / 归档会话 / 删除会话」,切成英文界面立刻
变成 Rename / Pin chat / Archive session / Delete session(无需刷新)。

Ctrl+Shift+A 会先弹二次确认再归档当前会话(单个全局按键不该静默归档);行菜单里的归档是一次明确点击,仍然一步到位。
右键会话行打开的是本插件的 Codex 式浮层菜单;只会拦截本插件能处理的会话行,
其余行(例如没有会话身份的行)仍走原来的右键菜单。应用自身的多选、搜索、
设置页不受影响。

配置

| 键 | 默认 | 含义 |
|---|---|---|
| maxPins | 0 | 置顶数量上限;0 = 不限。写在 loader 条目上: |

profile cordis.patch.yml
- id: codex-pin
config:
maxPins: 5

到达上限后,新置顶会挤掉最旧的一条,调低上限会在下一次读取时立即收敛视图。
修改上限会让宿主重新组合插件:已经打开的页面要等宿主推送新值才生效(实测可能
要几十秒,且这个窗口内的写入会与重新注册竞争)——改完上限请刷新页面。浏览器
本地兜底模式读不到该策略,因此上限只作用于宿主侧的列表。

状态存在哪里

| 内容 | 位置 |
|---|---|
| 置顶 id(新→旧) | ~/.dsh/settings.yaml → codex-pin.pinned |
| 浏览器本地兜底 | localStorage 键 dsh.codex-pin.pinned |
| 会话顺序 | 不碰——本插件从不写 ~/.dsh/storages/workspace.json |

兼容性

| DSH Web | 状态 |
|---|---|
| 0.1.5-rc.1 | 已实测(2026-09-16)——见「验证」 |
| 0.1.2-rc.1 … 0.1.5-rc.2 | 落在声明的 peer 范围内,未逐一实测 |
| 任何 0.2.x | 不承诺;peer 范围止于 <0.2.0 |

与接管侧栏槽位(sidebar.workspaces,priority −0.5)的
@michengai/dsh-archive-manager 同装已实测:已置顶区仍渲染在工作区树之上,
页面零报错。改写侧栏的插件是最可能的失配来源,因为本插件靠 React fiber props
定位行(见「限制」)。

验证

静态检查只需 Node:

npm run check   # lib/client.js 与 src/client-src.js 必须逐字节一致
npm test        # 不变量:不调排序接口、只有一个 loader 条目、e2e 选择器可产出

e2e 用 Playwright 的 Chromium 驱动一个运行中的 dsh web GUI。用 DSH_E2E_URL
(含 ?token=… 的完整地址)指向你的实例,或让它读取启动器写进
~/.dsh/dsh-web.log 的地址;DSH_E2E_CHROMIUM 可覆盖可执行文件(会自动发现
ms-playwright 缓存里的任意 chromium-* 构建)。它需要 devDependencies 里的
playwright-core:

node e2e/pin-e2e.mjs 3080              # 置顶 → 分区 → 打开 → 取消 → 落盘
node e2e/pin-e2e.mjs 3080 --leave-pinned
node e2e/state-check.mjs 3080          # 只读:分区当前渲染成什么样

2026-09-16 在 dsh web 0.1.5-rc.1 上的实测结果(Windows,5 条会话行、
2 个工作区分组,插件由打包后的 tarball 安装)。原始记录见
verification/(已脱敏:token、会话/工作区 id 与标题在写入前
就被移除)。e2e 每次运行都会断言下表每一行,任何一行不成立即非零退出:

| 检查项 | 结果 |
|---|---|
| 客户端 bundle 在启动图里 | …,dsh-codex-pin/client.js,…,经 client-HMR 重新哈希后提供 |
| 会话行注入置顶控件 | 5 行中 4 行——临时的 新会话 行本身没有行操作 |
| 已置顶区位于工作区列表之上 | aboveTree: true |
| 置顶行离开原分组 | hiddenRows: 1,取消置顶后回到 0 |
| 点分区行打开会话 | 点击走 sessions.open(单页应用,无 URL 变化可断言) |
| 取消置顶行归位 | 分区消失,hiddenRows: 0 |
| 置顶不改 DOM 顺序 | 置顶前后标题序列完全一致 |
| 落到宿主 | settings.yaml → codex-pin.pinned,id 由行的 React fiber props 读出 |
| 宿主顺序未变 | workspace.json 的 sessionIds 前后逐元素相同 |
| 从宿主渲染而非浏览器 | 全新无本地状态的上下文:已置顶 · 1,noteShown: false |
| 分区控件标记 | tray、tray-head、tray-row、tray-pin、tray-archive,控件容器 tray-ctl |
| maxPins: 1 | 写入与读取两侧都只留最新一条,见 verification/maxpins-check.md |
| 控制台 / 页面报错 | 无 |

开发

lib/index.js        宿主半程:注册 codex-pin settings 命名空间
src/client-src.js   浏览器半程(手写源码)
lib/client.js       实际提供的 bundle —— 由 npm run build 生成,npm run check 校验
e2e/                针对运行中的 dsh web 的 Playwright 套件(dev 依赖)
test/               零依赖不变量测试(npm test)
verification/       上文引用的实测记录(已脱敏)
shots/              e2e 截图(仅本地,不随包发布:含真实会话标题)

lib/client.js 是 src/client-src.js 的拷贝(loader 需要一段注册
window.__ModuleLoader__.load 的经典脚本):改源码只动 src/,然后
npm run build;两者漂移会被 CI 拦下。

限制

- 行内控件靠 React fiber props 和行自身的操作按钮定位。DSH 前端重写、或其他插件
接管侧栏槽位,都可能让行内控件失效(已置顶区本身仍能工作)。
- 只回退本插件自己隐藏的行,且装饰范围限定在工作区树内——但这是个启发式
判断(带分组头的树,平铺模式则全部树):若某插件在别的区域用 treeitem 渲染
会话行,那些行仍会被装饰和上提。
- 置顶 id 不会自动清理。被删除会话的 id 留在列表里但不再渲染;「有 id、没有可见
行」的置顶(删除的会话,或被 DSH 原生菜单归档的会话)只能靠手改
~/.dsh/settings.yaml 的 codex-pin.pinned 取消。走本插件菜单归档会先取消
置顶;走原生菜单归档则置顶潜伏(取消归档后复活,并占用 maxPins 名额)。
- 置顶行用 display: none 隐藏;宿主自己的分组徽标与计数由它的状态算出,不会
被调整。
- 列表是整段写入的:切置顶会先重读,所以两个浏览器同时置顶会合并,但在设置
RPC 的延迟窗口内后写者仍会覆盖先写者。
- 托盘与右键菜单是鼠标驱动的;除行内按钮和三个全局快捷键外没有键盘路径。
- Ctrl+Alt+P / Alt+Ctrl+R / Ctrl+Shift+A 是全局捕获、作用于当前会话,可能
与其他绑定冲突。
- 只支持会话置顶;Codex 模型里的工作区置顶未实现。
- 行右键菜单是插件自绘浮层,不是 DSH 原生右键菜单。

许可

MIT —— 见 LICENSE。DOM 层改编自
dsh-pin(MIT),宿主侧存储模式参考
dsh-session-pin(Apache-2.0);
详见 NOTICE.md 与 THIRD_PARTY_LICENSES.md。

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

同作者(jackovibe)的其他插件

💬 加入社群

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

DPharness QQ 群二维码,QQ 扫码进群
QQ 扫码进群
DPharness 飞书群二维码,飞书扫码进群
飞书扫码进群