🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

会话面板 kjx-talesofai/dsh-plugin-session-palette

DeepSeek Harness
kjx-talesofai14 天前有提交已提供中文文档扫描:未发现敏感能力

按 ⌘K 弹出会话面板,预览内容并就地改名打标签

30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/18 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add kjx-talesofai/dsh-plugin-session-palette
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么
dsh 原生插件 · browser
装得上吗
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 14 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🟢 扫描:未发现敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。

扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery@deepseek-ai/dsh
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

让 Cmd+K 打开 Spotlight 风格的会话面板,而不是聚焦侧边栏搜索框——支持就地重命名,每个会话最多三个标签。

README

由 DeepSeek 最新模型翻译生成
dsh-plugin-session-palette 按 ⌘K,弹出的是 Spotlight 风格的会话面板,不再是角落里那个搜索框——最近优先,正在运行和等待你的会话置顶,打开之前先预览每条会话的最后一个 turn,两种方式就地改名——高亮行上按 ⌘⇧R,或者双击标题(在已打开的对话顶部)——还有标签:每条会话最多三个,点一下就筛选。 = 0.2.0-rc.1"> dsh-plugin-session-palette — ⌘K 弹出会话面板:最近优先,正在运行与等待你的置顶,预览最后一个 turn,⌘⇧R 或双击标题就地改名,还能给会话打标签(最多 3 个,点标签就筛选) 中文说明(点开) —— ⌘K 从「聚焦侧边栏搜索框」变成「蹦出一个会话面板」 它是什么:DSH Web 客户端的会话切换器。按 ⌘K,屏幕上方弹出一个面板:左边是会话列表(按「需要你 / 活跃 / 今天 / 昨天 / 过去 7 天 / 过去 30 天 / 更早」分组),右边是高亮那条的预览——包含它最后一个 turn 的你的提问和模型回复。方向键选,回车进。 为什么做:DSH 原本的 ⌘K 是「展开侧边栏 → 展开搜索框 → 把焦点丢进左下角那个输入框」。要切换会话,视线得从正文移到屏幕角落,而且只能看到一个平铺列表。
展开完整文档(README 剩余 1 节)
dsh-plugin-session-palette

按 ⌘K,弹出的是 Spotlight 风格的会话面板,不再是角落里那个搜索框——最近优先,正在运行和等待你的会话置顶,打开之前先预览每条会话的最后一个 turn,两种方式就地改名——高亮行上按 ⌘⇧R,或者双击标题(在已打开的对话顶部)——还有标签:每条会话最多三个,点一下就筛选。

= 0.2.0-rc.1">

dsh-plugin-session-palette — ⌘K 弹出会话面板:最近优先,正在运行与等待你的置顶,预览最后一个 turn,⌘⇧R 或双击标题就地改名,还能给会话打标签(最多 3 个,点标签就筛选)

中文说明(点开) —— ⌘K 从「聚焦侧边栏搜索框」变成「蹦出一个会话面板」

它是什么:DSH Web 客户端的会话切换器。按 ⌘K,屏幕上方弹出一个面板:左边是会话列表(按「需要你 / 活跃 / 今天 / 昨天 / 过去 7 天 / 过去 30 天 / 更早」分组),右边是高亮那条的预览——包含它最后一个 turn 的你的提问和模型回复。方向键选,回车进。

为什么做:DSH 原本的 ⌘K 是「展开侧边栏 → 展开搜索框 → 把焦点丢进左下角那个输入框」。要切换会话,视线得从正文移到屏幕角落,而且只能看到一个平铺列表。VS Code 的 ⌘P、Sublime 的 ⌘P、macOS 的 ⌘空格 都是把它做成视线所在处弹出的浮层——因为切换会话是高频动作,值得一次专门的界面。

四个视图(Tab 向前循环、⇧Tab 向后):

| 视图 | 回答的问题 | 内容 |
| 最近(默认) | 现在在发生什么 | 全部会话,按活跃度 + 时间分组 |
| 工作区 | 我不记得标题,只记得那个目录 | 按目录分组,组头就是工作区名,最近碰过的排前面 |
| 置顶 | 我留下过什么 | 你置顶的,按置顶顺序(最近置顶在前) |
| 归档 | 我收起来过什么 | 已归档的,行变暗 |

抽屉,不是分组——这是这个插件最核心的设计判断。一个 25 天前置顶的会话和今天没有任何关系,把它钉在「今天」上面占着首屏就是噪音。「怕忘了」的意思是必须找得到,不是必须一直看见。所以置顶和归档各是一个带计数的可切换视图:计数负责提醒你里面还有东西,抽屉负责在你需要时把它给你;而它们完全不影响「最近」的排序。

和一个搜索的区别:这不是「更好的搜索」,是「更快地切回去」。所以它打开时不输入任何东西就已经列好了会话——⌘K 之后直接按方向键就能跳。

怎么装(在 DSH「添加插件」里填,不需要 npm 账号、也无需发布):

| 填入 | 形式 |
| GitHub | github:kjx-talesofai/dsh-plugin-session-palette#v0.8.1(当前可用) |
| 本地目录 | 绝对路径,例如 /path/to/dsh-plugin-session-palette |

装完重启桌面端(host 半边只在启动时加载)。

怎么用:

| 按键 | 动作 |
| ⌘K | 打开 / 收起面板 |
| ↑ ↓ | 移动高亮(循环),鼠标划过也会移动 |
| Home End | 首 / 末(输入框光标已在两端时) |
| ⏎ | 打开高亮的会话 |
| ⌘⇧R | 给高亮的会话改名(复用上面那个输入框,⏎ 保存 / esc 取消) |
| 双击标题 | 在已经打开的会话里,双击顶部那个名字 → 就地弹出输入框改名 |
| ⌘⇧T | 给高亮的会话打标签(右栏变成标签选择器:打字筛/新建、⏎ 加或去掉、esc 完成) |
| Tab / ⇧Tab | 循环三个视图 |
| ⌘⇧P | 置顶 / 取消置顶 |
| ⌘⇧⌫ | 归档 / 恢复 |
| ⌘↑ / ⌘↓ | 跳到第一条 / 最后一条(光标在哪儿都生效) |
| PgUp / PgDn | 翻一屏(到底就停,不回头) |
| esc | 关闭 |

注意事项:

- 它会接管 ⌘K,这是它存在的意义。侧边栏那个搜索按钮照旧能用(鼠标点),只是键盘快捷键让给了面板。
- 改名不是新开一个输入框:⌘⇧R 之后,你最上面那个搜索框原地变成标题编辑框(列表还按你原来的查询筛着,高亮还停在要改的那一行)。打完 ⏎ 保存,esc 放弃;失败时原因显示在输入框下面一行,草稿不会被吃掉。成功后的提示里带撤销。
- 标签存在插件的 Config 里(volatile 字段),写在 profile 的 cordis.patch.yml,重启后还在。每个会话最多 3 个;标签是「文字 + 可选 emoji + 颜色」,颜色只用主题 token,所以亮/暗色都跟着走。
- 删除标签会先问一次,并告诉你代价:删除「dev」?3 个会话会失去它。 确认后,标签从词表和每一个挂着它的会话上一起移除(一次原子写入,不会留下指向已消失标签的分配);删除后的提示条里有撤销,会把标签和那些会话一起放回来。
- 点标签就是筛选:面板里那排标签(只列真正用上的)点一下筛,再点一下取消,多个标签是「任一命中」。预览窗格里会话自己的标签也是同一个控件。
- 行里的标签跟在标题后面(标题 🔥🧪),因为扫列表时眼睛停在标题上,不是停在右边缘。
- 长列表不会迷路:分组标题是吸顶的(滚到哪都写着"今天/昨天/更早"),页脚左边写着你在第几条(37 / 340),超过一屏的跳转有 ⌘↑/⌘↓ 和 PgUp/PgDn。
- 超过 7 天的行显示日期(9月12日),不是 23 天前——"上个月那个"是日期问题。
- 浮窗够大:1180px / 88vh,左 60 右 40。它存在的意义就是让你在里面认真翻,缩手缩脚没道理。
- 标签编辑器长在会话详情里,不长在搜索框里。搜索框永远只搜会话;标签的输入框在右栏,是第二个输入框,所以"我在打标签还是我在搜会话"从来不用猜。第一版把搜索框兼职成标签筛选,被否掉了。
- 列表永远是活的:鼠标划过、点行都照常。标签编辑器属于它打开时的那一行——高亮一换,它就关掉,不会悄悄改到别的会话上。
- 标签需要一次 DSH 重启才生效:存储字段是本版新加的 host 字段,而 host 半边只在启动时读。没重启之前,选择器会直接说「标签需要重启一次 DSH」,不会假装保存成功。
- 标题有字节上限(DSH 默认 80 字节,中文约 26 个字)。超了 host 会截断,面板的提示报的是实际存下来的标题,不是你打的草稿。
- 双击标题是在宿主自己的标题元素上挂的监听(匹配 crumbCurrent 这个类名后缀),所以它是这一版里唯一依赖宿主 DOM 的地方:DSH 哪天把这个类名改了,双击会静默失效(⌘K → ⌘⇧R 那条路不受影响)。侧边栏那排会话的双击归宿主管(它弹自己的改名框),这里刻意不碰。
- 它一个字都不改你的按键偏好。接管走的是「固定键位」这条官方通道,只在内存里生效;所以想关掉就干净地关掉,没有需要还原的东西。
- 它不做全文搜索(还没做)。现在匹配会话标题、工作区名和工作区目录路径(工作区被改过名之后,目录名仍然搜得到),不匹配消息正文。所以找一个"聊过某个话题"的会话,暂时还得用侧边栏那个搜索。
- 预览在旧会话上要等一下:DSH 的 projection 缓存只覆盖约三分之二的会话,其余的是「很久没碰过的那些」。面板在高亮停留约 0.2 秒后才会去读它们(一次一行,不并发),所以快速划过时不会卡。
- 预览里的文案是「你 X 前发言」而不是「X 前」——因为 DSH 的 updatedAt 记的是你最后一次输入的时间,模型回复不会推进它。写"2 小时前"会骗人。

卸载:DSH「插件」列表里卸载 dsh-plugin-session-palette → 重启;或「Restore All」恢复按键默认值。无需清理任何偏好——它没写过。

老实说(实测范围):只在 macOS(Apple Silicon)+ DSH Desktop 0.2.1-rc.2 上端到端跑过(0.8.0 的改名、标签、长列表都是在这个版本上验的)。Windows / Linux 未测;DSH 升级后上游契约可能变化,见下方 Compatibility。

为什么

DSH 的 ⌘K 会展开侧边栏、展开搜索框、必要时收起侧栏,然后才聚焦输入框——如果侧栏得先滑开,还要等 300 ms。切换会话是高频操作,代价却落在最糟的地方:你的眼睛得离开对话,去角落里找一个输入框。

凡是把这件事做好的工具,解法都一样——VS Code、Sublime、Spotlight——在注意力所在处弹一个浮层。这就是那个浮层。
第二个问题出在排序上。宿主按 updatedAt 给会话排序,这个字段取 max(createdAt, lastPromptAt):用户最后一次写字的时刻,而不是最后一次发生任何事的时刻。智能体回复不会推动它。于是,一个智能体刚跑完的会话,或者一个卡在等你批准的会话,可能排在你最近只是碰过的一打对话下面。命令面板把实时状态排在时钟之上——先等你处理,再运行中,再已完成未读——之后才回落到按时间分桶。

视图

Tab 循环切换。每个视图回答的是同一批会话的不同问题,所以它们是视图,而不是同一个列表的分区。

| 视图 | 回答的问题 | 排序 |
| Recents | 现在正在发生什么? | 需要你 → 活跃 → 今天 → 昨天 → 过去 7 天 → 过去 30 天 → 更早 |
| Workspaces | 我记得文件夹,不记得标题 | 每个工作区文件夹一组,最新的组在前,组内按时间倒序 |
| Pinned | 我留了什么? | 按固定顺序,最近固定的在前 |
| Archived | 我收起了什么? | 最近活跃的在前;行会变暗 |

有两点后果值得直说:

- 固定不等于提升。 固定和归档的会话会完全从 Recents 的排序中移除——它们不会浮上来,在查询里也不会排得更高。抽屉上的计数是提醒;抽屉本身才是取回入口。
- 一行只出现在一个 Recents 分组里,即它符合条件的最紧急的那一组。一个已固定的会话开始运行时,会出现在「活跃」下,而不是「已固定」下。

安装

用 DSH 自带的 Add plugin 对话框。不需要 npm 账号,不需要发布。

| 字段 | 值 |
| GitHub | github:kjx-talesofai/dsh-plugin-session-palette#v0.8.1 |
| 本地目录 | 绝对路径,例如 /path/to/dsh-plugin-session-palette |

之后重启桌面应用:Host 那一半只在启动时加载。浏览器那一半随页面重新加载。

这个插件没有发布到 npm,npm install 也不是安装路径——直接 npm install 这个 tarball 还会把整个 Harness 作为 peer 依赖拖进来。

用法

1. 按 ⌘K。命令面板打开,你的会话已经列好。
2. 输入内容,按标题、工作区名,或工作区所在的目录缩小范围(模糊匹配,有序子序列——和宿主自己的 / 菜单用同一个排序器)。目录很重要,因为工作区改名后就不再显示文件夹,而你记得的恰恰是文件夹。
3. ↑/↓ 或悬停移动高亮;右侧面板预览该会话的最后一轮。
4. ⏎ 打开它。Tab 切到「已固定」或「已归档」抽屉。
5. ⌘⇧R 就地重命名高亮的会话——搜索框变成标题框,⏎ 保存,esc 取消。
6. ⌘⇧P 固定,⌘⇧⌫ 归档,两者都是开关——同一个组合键即可恢复。
7. 在打开的会话中,双击标题栏里的标题就能就地重命名——用的还是同一个编辑器,浮在标题自己的框上。
8. ⌘⇧T 为高亮的会话打开标签选择器:输入即可缩小范围,输入一个没有匹配项的名字就能创建它,⏎ 切换选中,esc 完成。标签在列表行上显示为字形,在预览里显示为标签片;点击标签片会筛选列表(选多个 = 命中其中任意一个)。

标签

标签由 id + label + 可选 emoji + 颜色 组成。五种颜色,每种都是一个主题 token,所以浅色和深色主题会自动跟随,不用再维护第二套色板。一个会话最多带三个标签;到上限会明确拒绝(「Three tags is the limit」),而不是悄悄截断——用户看不见的第四个标签,比直接说不行更糟。

- 存在哪里:插件的 Config 里,紧挨着 takeOver。两个标签字段都是 .volatile(),这一点有两重关键作用——写入时只接受 volatile 字段,而 Loader 在比对配置差异时会排除 volatile 字段,所以保存标签只会更新正在运行的插件,不会重新挂载它。没有这一点,打标签这个动作本身就会关掉你正在用的选择器。
- 身份就是 id,创建标签时由 label 推导出来,之后保持不变,所以以后重命名标签也不会让指向它的会话失去关联。
- 筛选的含义是「任意一个」:标签用来归组跨工作区、跨日期的工作,所以按两个标签收窄范围时应该同时显示两组,而不是它们的交集。
- 只有一个选择器,挂在条目上。 侧边栏的会话菜单行(带标签图标,样式来自内置的 MenuItemButton)打开选择器时,会高亮对应会话并直接弹出选择器,而不是再长出一套需要同步维护的标签 UI。

编辑器是预览面板里一个类似 popover 的块,位于会话自己的标签片下方:有自己的输入框、自己的列表、自己的 Escape。搜索框全程都在搜索会话,列表也从不冻结——移动高亮就会关掉编辑器,因为编辑器属于它被打开的那一行。这是修正后的模型;第一版让搜索框去筛选标签、同时锁住列表,结果正如你所料没法用:一个字段两种含义,而且目标还动不了。

这需要重启一次 DSH。 标签存储是新的宿主侧 Config,而 Host 在启动时读取 index.js——所以在 DSH 重启之前,选择器会提示「Tags need one DSH restart」并拒绝写入。它从不假装保存成功。

在长列表里找到方向

一个要你浏览的选择器需要路标。三个,按作用大小排序:

- 吸顶的分组标题。 翻过两屏之后,剩下的只有一堵一模一样的行;现在标题会固定在滚动区顶部,所以「这是昨天」始终在屏幕上。
- 给出位置,而不只是总数。 页脚显示 37 / 340——重点在于回答「我是不是迷路了?」,而 340 sessions 回答不了。
- 跳转永远有效。 ⌘↑/⌘↓ 从任意位置直达两端(Home/End 本来也能做到,但只有光标先碰到边缘才行),PgUp/PgDn 翻一屏——带钳制,因为翻页后又跳回顶部,读起来就像 bug。

两个小改动:超过一周的行显示你处理它们的日期,而不是 23d(上个月的事,你记住的不是一个时长),卡片尺寸是 1180px × 88vh——这个界面就是用来浏览的,不该在空间上拘谨。

重命名

高亮项已经是你即将操作的对象,所以重命名只编辑那一行,不碰别的。⌘⇧R 把搜索框变成标题框:位置不变,行高不变,焦点不动,查询继续生效,高亮原地不动。⏎ 保存,esc 恢复查询,写入被拒时草稿留在原处,下面单独一行显示宿主给出的原因。

有三个决定值得说明:

- 用 ⌘⇧R,不用 ⌘R —— page.refresh 占着 ⌘R,⌘⌥G 是宿主自己的 session.rename。这两个组合键都会被 Electron 主进程在页面看到之前拦截,所以挂在任何一个上的处理函数都不会执行,宿主会在命令面板背后动手。Shift+R 没有被任何已发布的命令占用,但这是当前命令目录的性质,不是承诺。
- 用搜索框,不加第二个输入框 —— role="option" 行里的输入框对无障碍树不可见,第二个文本框还得跟行的焦点处理较劲。一个框,两份职责,它的 ARIA role 随职责切换。
- 走 sessions.using,不直接调用 —— 宿主拒绝重命名不在其存储中活跃的会话,所以写入要经过一个保留引用(已发布的侧边栏走的同一条路)。保留在 retainInfo 中记到 sessionPalette 名下,只持续一次调用。

你输入的字节不是存储的字节:宿主会规范化空白,并把超过 maxTitleBytes(已发布包中为 80)的标题截短。因此 toast 报告的是宿主接受的标题,只有原本存在标题可回退时才提供撤销。

工作原理

不依赖 Chrome 的部分:命令面板是一个组件,注册进横跨整个框架的 shell.overlay 座位,渲染 role="dialog" aria-modal="true"——正是这一点让它成为真正的模态框,宿主的 Escape 仲裁和后台快捷键门控都认它。toast 是同一座位里的第二个条目,所以它的生命周期比命令面板更长。

接管 ⌘K 才是有意思的部分,而且它不写入任何偏好设置:

| 步骤 | 机制 |
| 1 | ctx.shortcuts.register 拒绝任何与 session.search 重叠的默认值,而且没有注销 API——所以没法通过注册命令来占用这个组合键 |
| 2 | ctx.shortcuts.registerFixed 不做冲突检查,所以 ⌘K 上的固定绑定会被接受 |
| 3 | 这个固定绑定让 session.search 处于 冲突 状态,于是 meta+KeyK 从 Electron 主进程原生拦截的集合里被移除 |
| 4 | 组合键不再被拦截后,DOM 的 keydown 事件到达页面,固定观察者会在可配置派发 之前 运行,并把它消费掉 |

在写命令面板之前,步骤 2–4 已对着运行中的应用做过端到端验证。固定绑定刻意 不允许用户重新绑定,所以插件还注册了一个普通的、未绑定的命令(session.palette),你可以在 Settings → Shortcuts 里给它绑上自己的组合键。

预览来自宿主的 turnOutline 投影,它已经把每一轮的提示词(≤50 个码点)和响应(≤120 个码点)带进会话列表,所以对大多数会话来说 完全不发请求。实测覆盖率约为三分之二;剩下的都是你很久没碰过的会话,这些会在高亮稳定之后按需读取,一次一个。

覆盖不到的地方

- 还没有标签编辑器。 标签从选择器里创建(只有名称,颜色按环形顺序分配),也可以在那里删除;目前仍然没有用于 emoji、颜色或重命名标签的 UI,那是下个版本的事。在此期间,插件管理里的 Config 页面会显示原始数据。
- 还没有内容搜索。 匹配范围覆盖会话标题、工作区名称和工作区路径。内置侧边栏所做的消息正文搜索尚未接入。
- 还没有查询语言。 @workspace、is:archived、after:7d 和筛选标签已经设计好,但尚未实现。
- 还没有设置 UI。 唯一的开关(takeOver)放在你配置档的 cordis.patch.yml 里:
- id: session-palette
name: 'dsh-plugin-session-palette'
config:
takeOver: false # hand ⌘K back to the shipped sidebar search

- 固定组合键不允许用户重新绑定。 这是机制本身的属性,不是疏忽;未绑定的配套命令就是逃生出口。
- 归档仍有任务在跑的会话 会被 Host 拒绝,命令面板只把它报成普通失败,不提供内置的「先停止再归档」流程。
- 重命名会短暂打开会话。 重命名需要保留引用,而保留引用会以打开状态启动会话历史。重命名是显式的一次性操作,所以这和内置侧边栏为自己的行重命名付出的代价相同——但对一个你从未打开过的会话来说,这并不免费。
- 固定的是重命名组合键,不是标题。 ⌘⇧R 是本地处理器,所以只在命令面板获得焦点时生效,且不可重新绑定。
- 标题栏双击依赖一个类名后缀。 crumbCurrent 是 CSS-module 类,所以哈希值在每次构建之间会变,而后缀不变;如果 DSH 哪天改了这个后缀,这个手势会静默失效。其他功能不受影响,⌘K → ⌘⇧R 仍然可以重命名。
- 绝不删除会话 —— 归档的会话可以恢复,Archived 抽屉就是干这个的。

兼容性

在 macOS(Apple Silicon)上,用真实配置档验证过 DSH 0.2.1-rc.2。插件依赖以下上游契约,每一条都对照实际发布的 bundle 核对过,不是想当然:

| 契约 | 来源 |
| shell.overlay 作为根作用域的 list 插槽,带标准会话钩子 | dsh-client-ui-layout、dsh-client-ui-renderer、dsh-client-ui-session |
| registerFixed / observeFixedInput,以及固定绑定不参与原生拦截 | dsh-client-shortcuts |
| 带点号的命令 id 模式(id 写错会静默禁用所有键盘命令) | dsh-client-shortcuts |
| ctx.sessions.list、refreshProjections、ctx.uiWorkspace、ctx.workspaces | dsh-api-session-controller、dsh-client-ui-workspace、dsh-api-workspace-controller |
| sessions.using → reference.binding.session.rename,以及宿主「不在当前 store 中活跃」的拒绝 | dsh-api-session-controller、dsh-session-title |
| 原生拦截按精确 chord + 修饰键匹配,未匹配的 chord 交给主框架 | lib/main.js(before-input-event) |
| turnOutline(每轮提示词/响应的预览) | dsh-session-turn-outline |
| retainedBy.mainView 表示「当前会话」(标题栏的 title span 靠 crumbCurrent 类名后缀定位 —— 0.2.1-rc.2 里仍是 <hash>_crumbCurrent) | dsh-client-ui-workspace、dsh-client-ui-conversation |

上游随时可能改动其中任何一条。最该盯的是快捷键契约:它出问题时不报错,悄无声息。

开发

npm test # 113 tests, no install step required

这里刻意没有构建步骤:client.js 就是发布出去的浏览器 bundle,Host 那一半只有一个 index.js。

测试套件在 node:vm 里把浏览器那一半当脚本执行(所以产物确实是可脚本执行的模块加载器 bundle),通过一个小型钩子运行时驱动真实组件,并把 Host 那一半当文本读取 —— 从不 import 它,因为那需要 @deepseek-ai/schemastery,会让裸 checkout 直接失败。

| 路径 | 是否随包发布 | 用途 |
| client.js | ✓ | 浏览器那一半 —— 组件、样式、字典、快捷键声明 |
| index.js | ✓ | Host 那一半 —— Config schema 和空操作的 apply |
| cordis.patch.yml | ✓ | 挂载本包的 bundle 行 |
| locale/*.json | ✓ | 插件管理器的展示元数据(en / zh) |
| assets/icon.svg | ✓ | 插件图标 |
| tests/plugin.test.mjs | ✗ | 契约 + 渲染行为测试套件 |
| docs/plan.md | ✗ | 设计记录:验证了什么,又搞错了什么 |
| probe/ | ✗ | 独立的诊断 bundle,用实测证明了 ⌘K 机制 |
probe/ 保留为快捷方式机制的回归测试工具:如果未来的 DSH 改变了固定绑定冲突的语义,或者改变了 Electron 的拦截行为,重新运行它就能一次得到答案,不必重新推导。它是独立包,默认不设置任何东西,也不打进 tarball。

卸载

从 DSH 的插件列表里移除 dsh-plugin-session-palette,然后重启。没有需要清理的东西——插件不写按键绑定偏好,不写浏览器存储,除了自己可选的 config 块之外也不写配置档状态。

许可证

MIT © 2026 Jiaxin Kou

Built by hypersampling · GitHub
预览分享卡片长什么样 ↓kjx-talesofai/dsh-plugin-session-palette
分享 · DeepSeek Harness Hub
kjx-talesofai/dsh-plugin-session-palette

按 ⌘K 弹出会话面板,预览内容并就地改名打标签

回到顶部