给会话加置顶、颜色和 emoji,重启后仍保留
27.3/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/18 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add LuckVd/dsh-pin-color该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · ui
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 72 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 10 处,展示前 10 条)
- 发起网络请求src/client/index.ts:214
const res = await fetch(ROUTE) - 发起网络请求src/client/index.ts:240
const res = await fetch(ROUTE, { - 读取本地文件src/index.ts:104
if (existsSync(this.file)) { - 读取本地文件src/index.ts:105
return this.parseLedger(readFileSync(this.file, 'utf8')) ?? emptyLedger() - 读取本地文件src/index.ts:111
if (existsSync(legacyFile)) { - 读取本地文件src/index.ts:112
const migrated = this.parseLedger(readFileSync(legacyFile, 'utf8')) - 读取本地文件src/index.ts:160
if (!existsSync(dir)) mkdirSync(dir, { recursive: true }) - 写入本地文件src/index.ts:160
if (!existsSync(dir)) mkdirSync(dir, { recursive: true }) - 写入本地文件src/index.ts:162
writeFileSync(tmp, JSON.stringify(this.ledger, null, 2), { encoding: 'utf8' }) - 写入本地文件src/index.ts:163
renameSync(tmp, this.file)
扫描于 2026/11/3(0 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-client-runtime@deepseek-ai/dsh-host-webserver给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 会话置顶
- 会话tab配色
- emoji标记
README
由 DeepSeek 最新模型翻译生成dsh-pin-color
DeepSeek Harness (DSH) Web GUI 插件:给左侧会话加置顶、tab 颜色和 emoji。
Dual-face(host + browser)插件,不修改 DSH 源码,置顶/颜色/emoji 由 host 持久化,重启后保留。
置顶与颜色效果:置顶的会话带 📌 前缀钉在顶部,“…” 菜单追加颜色/置顶项并展开二级置顶菜单
功能
入口全部在会话行右侧的官方 “…” 菜单里(底部追加分隔线与两项,视觉与原菜单项一致):可展开项带 ▸ 箭头,点开后像多级菜单一样在菜单项旁边展开选择面板,官方主菜单保持打开(面板 z-index 在菜单之上),选完或点外部后一起收起:
- 🎨 会话颜色/表情:点开弹出会话颜色面板
- 色卡:10 色预设,选中的颜色生效在 会话 tab(对话区顶部标签页的文字+下划线)以及侧边栏会话行(左侧色条 + 淡色底)
- 表情:24 个常用 emoji,选中后显示在会话名前面(侧边栏行与会话 tab 都是)
- 「无」清除颜色 / emoji,清除全部后条目自动移除
- 📌 置顶 / 取消置顶:未置顶的会话,点开弹层选择两个置顶级别;已置顶的会话 “…
展开完整文档(README 剩余 1 节)
dsh-pin-color
DeepSeek Harness (DSH) Web GUI 插件:给左侧会话加置顶、tab 颜色和 emoji。
Dual-face(host + browser)插件,不修改 DSH 源码,置顶/颜色/emoji 由 host 持久化,重启后保留。
置顶与颜色效果:置顶的会话带 📌 前缀钉在顶部,“…” 菜单追加颜色/置顶项并展开二级置顶菜单
功能
入口全部在会话行右侧的官方 “…” 菜单里(底部追加分隔线与两项,视觉与原菜单项一致):可展开项带 ▸ 箭头,点开后像多级菜单一样在菜单项旁边展开选择面板,官方主菜单保持打开(面板 z-index 在菜单之上),选完或点外部后一起收起:
- 🎨 会话颜色/表情:点开弹出会话颜色面板
- 色卡:10 色预设,选中的颜色生效在 会话 tab(对话区顶部标签页的文字+下划线)以及侧边栏会话行(左侧色条 + 淡色底)
- 表情:24 个常用 emoji,选中后显示在会话名前面(侧边栏行与会话 tab 都是)
- 「无」清除颜色 / emoji,清除全部后条目自动移除
- 📌 置顶 / 取消置顶:未置顶的会话,点开弹层选择两个置顶级别;已置顶的会话 “…” 菜单直接变为一级「取消置顶」项(标注当前级别),点击一步取消,不用进二级菜单
- 置顶(本组顶部):把会话钉到它所在组/账户的会话列表最顶部
- 置顶(工作区全局顶部):把会话钉到整个工作区树的最顶部(所有组之前)
- 已置顶的会话不能再置顶、也不能切换置顶级别,只能取消:两种级别在 DOM 上的落位不同(组内列表 vs 整棵树),级别切换会把行挪出原本分组(例如全局置顶后再本组置顶,行会跑到「未分组」区域),故已置顶即收起置顶入口
- 多会话置顶按置顶时间先后排列;行内会话名前缀 📌
- 持久化:host 半区把状态以 JSON 账本写到 $DSH_HOME/pin-color/state.json;浏览器半区经同源 HTTP 路由读写,本地乐观更新 + 300ms 防抖落盘。
从旧名 dsh-session-style 升级时,首次启动自动把 $DSH_HOME/session-style/state.json 迁移到新路径(旧文件保留不动)
安装
方式一(推荐):预构建 tarball,免本地构建
dsh plugin --profile web add https://github.com/LuckVd/dsh-pin-color/releases/latest/download/dsh-pin-color.tgz
方式二:源码安装
git clone https://github.com/LuckVd/dsh-pin-color && cd dsh-pin-color
pnpm install && pnpm run build
dsh plugin --profile web add /path/to/dsh-pin-color
任一方式装完重启 dsh web 生效(浏览器强刷 Ctrl+Shift+R)
架构
| 面 | 实现 |
| Host | src/index.ts — StyleStore(原子写 JSON 账本)+ 两条 exact 路由 GET/PUT /dsh-pin-color/state(同源守卫,PUT 接受 {sessionId: 样式或 null};非 null 时整体替换该条目标样式,使“清除颜色/emoji”这类字段删除不会被旧字段合并回来;样式经 sanitizeStyle 校验,__proto__ 等键被拒绝) |
| Browser | src/client/index.ts — 纯 DOM 增强,零运行时依赖。MutationObserver 自愈扫描会话行([role="treeitem"]:not([aria-expanded]),排除搜索结果的 行)与对话 tab(button[role="tab"],按 displayTitle 匹配,兜底当前会话)。点击官方 “…” 按钮时(捕获阶段监听)记录目标会话,菜单 popup(div[role="menu"])挂载后把分隔线 + 两项克隆自官方菜单项模板追加进 popup;可展开项(带 ▸)点击后不关闭官方菜单,选择面板以多级菜单方式在菜单项右侧展开(视口放不下时翻到左侧)。官方菜单带 closeOnPointerLeave pointer-grace:指针离开其 React fiber 子树(触发按钮 + portal 列表)200ms 后自动收起——选择面板因此必须挂在 popup 的 DOM 内(而非 body,body 级浮层会被判为“菜单外”),并在面板与菜单之间的缝隙上放一块透明桥(.dss-popover-bridge,挂在 popup 内,覆盖滑行走廊):指针从菜单滑向面板的整个路径都落在 fiber 树内,主菜单保持打开。已置顶的会话则是一级「取消置顶」直接执行、随后收起主菜单。置顶按行自身定位(不依赖侧边栏容器):移动会话行的“可移动单元”(官方给每行套的 HoverCard 单子容器 span,或行本身),session 级钉到本组会话列表顶部、workspace 级钉到整棵树顶部,多会话按 pinAt 升序排列;取消置顶优先按记忆的原始位置恢复,否则按会话列表的顺序恢复到逻辑位置 |
冒烟测试 + host 单测:
pnpm install && pnpm build && pnpm test
- tests/host.mjs — 直接加载 lib/index.js:整体替换语义、null 删除、样式校验、__proto__ 防护、落盘/重载。
- tests/smoke.mjs — jsdom + 真实构建 bundle,fixture 镜像当前 DSH web 的会话树(HoverCard 包装 span + 组节点):置顶按 pinAt 排序、菜单注入、“无”清除 emoji 且保留 pin/pinAt、置顶移动包装单元、取消置顶还原逻辑位置、已置顶会话一级菜单直接取消(不下钻弹层、不能切换级别)、纯 pin 会话取消后条目删除。
已知限制
- 官方 “…” 菜单的 items 数组不可扩展(无公开 slot),插件在菜单打开后向 popup 追加克隆项;依赖官方 popup 的 DOM 结构(div[role="menu"] + button[role="menuitem"])与 closeOnPointerLeave 的 fiber 子树判定(选择面板借此随菜单保持打开), DSH 升级若改动该结构需要同步适配。
- 选择面板挂在官方 popup 内:菜单关闭(popup 卸载)时面板随之销毁,不会残留; 若菜单被 React 整节点重建(remount),已打开的面板会短暂消失,需要重新展开。
- 置顶采用 DOM 位移实现:官方列表在状态变化时会整体重渲染,插件在每次渲染后自愈恢复置顶位置,
极端情况下(会话频繁更新)可能出现轻微闪烁;每行 400ms 节流避免抖动循环。
- 会话身份按标题文本匹配(displayTitle),同名会话取当前选中/最近更新的那个;个别同名场景可能错配。
- 颜色/emoji 作用于会话 tab 与侧边栏行;置顶只作用于侧边栏树,搜索结果列表保持官方顺序。
- 首次安装后需要重启 dsh web;浏览器半区在官方 ui-workspace 渲染出行之后才开始注入。
License
Apache-2.0预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
LuckVd/dsh-pin-color
给会话加置顶、颜色和 emoji,重启后仍保留
相关插件 · UI / 主题
破甲增强版JeffKeeping/dsh-purge-plus
dsh-purge 的非官方分支fork:适配 DeepSeek Harness 0.2.1-rc.2、破甲内核…
★ 387已汉化DeepSeek 客户端
71.9
无代码业务系统平台nocobase/nocobase
NocoBase 是什么
★ 24,804已汉化DSH
71.8
1Panel 服务器面板1Panel-dev/1Panel
全球 250 万+ 自托管用户共同喜爱。
★ 37,344已汉化DSH
71.5
终端编码代理esengine/DeepSeek-Reasonix
· 指南 · ACP · 扩展开发 · 规格 · 官方网站 · Discord · QQ
★ 36,045已汉化DSH
71.2
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 151,202已汉化DSH
71.1
这是你的仓库?认领条目