dsh-workspace-icons:为 DSH 侧栏每个项目单独设定图标

前言

在 DeepSeek Harness(DSH)里,侧栏往往挂着多个工作区或项目文件夹。列表一长,默认统一的文件夹图标很难一眼区分「这是前端仓库还是数据分析脚本」。手工给每个项目换图标,若没有集中入口,配置也容易散落在各处。

社区插件 dsh-workspace-icons(维护者 bloodyxu,分类:趣味换装)针对的是:在 Web 侧栏里为每个项目目录提供可辨认的图标——内置 160 个 Hugeicons(stroke-rounded 免费集),每个图标有固定配色,也支持 emoji 或图片 URL;未手动设置时,插件会读取项目根目录下的有限证据并请求 AI 推荐图标,模型不可用则由本地规则兜底。数据保存在浏览器 localStorage,不写项目磁盘。

这是什么

dsh-workspace-icons 是 DSH 的 Cordis 插件包(当前资料中版本 2.1.0,许可证 MIT,要求 Node >= 20)。它分浏览器端与 Host 端两半:浏览器端负责设置页、右键选图标与侧栏 CSS 渲染;Host 端负责读项目清单与调用 DSH 配置的默认模型做建议。插件以当前 Harness 进程权限运行;安装前宜自行查看 GitHub 仓库 源码与许可证。社区目录页:skillhub.cn 插件条目(与 DeepSeek / 幻方无官方从属关系,DSH 生态本身也遵循「一切皆插件」的思路)。

核心功能

图标来源

  1. 内置图标:160 个 Hugeicons,分 10 类(code / web / data / design / docs / media / science / brand / business / life),带搜索。
  2. 颜色:每个内置图标颜色由目录位置按黄金角在 OKLCH 中生成,同一图标颜色恒定;浅/深主题下对比度约在资料给出的区间内,emoji 与图片不受影响。
  3. Emoji:7 组共 60+ emoji,另可粘贴任意单个 emoji。
  4. 图片:仅允许 https://… 与 data:image/…;拒绝 javascript:、file: 等 scheme。
  5. Remove icon:恢复默认文件夹图标。

AI 与本地规则

默认开启自动建议。规则要点(摘自 README):

  • 只分析尚无手动图标且尚无建议的项目。
  • 同一项目至少间隔 10 分钟再分析;失败后等待 2 分钟重试。
  • 并发与超时:Host 端最多 2 个项目并行,单项目 25 s、单次请求 45 s 预算;一次仅一个请求在飞。
  • 手动图标始终优先;删除手动设置后,之前的 AI 建议会重新生效。

Host 读取范围限于项目根、非递归:package.json 等常见清单(各最多约 1.4 KB)、README* 前 900 字符、顶层目录项(最多 40 个,跳过 node_modules、.git 等)及语言比例抽样。模型需返回 {"glyph":"<name>","why":"<one line>"},glyph 须与内置图标名完全一致;失败则走本地规则链(依赖 → README/名称关键词 → 主语言 → 清单类型 → 通用文件夹图标)。

可在 Settings → Project icons 关闭「Pick icons automatically」以停止新请求;已保存建议仍显示,可逐个覆盖或清除。请求使用 DSH 的 agentDefaultModel,仅发送路径、名称与上述摘录,不涉及完整源码写入项目。

数据存放

两套 localStorage,键为项目文件夹路径(无路径时用 workspace id):

  • dsh-workspace-icons.v1:手动图标。
  • dsh-workspace-icons.auto.v1:AI/规则建议(含 reason、source、时间戳)与自动开关。

每库最多 500 条,超出删最旧项;不跨机器同步,清空浏览器数据会丢失配置。

安装与启用

安装命令须使用 README 原文形式,<profile> 为你运行 Harness 的 profile(桌面应用一般为 desktop):

dsh plugin --profile <profile> add dsh-workspace-icons

该命令会把包写入对应 profile 的 dependencies、追加到 dsh.profile.bundles(从而加载 cordis.patch.yml 中的 Host 行),并由 pnpm 完成依赖装配。

重启 Harness,待 Host 半加载后,Settings 中应出现 Project icons 页;侧栏项目行右键应能打开图标选择器。

典型用法

两处入口共用同一存储:

  1. 侧栏右键项目行(推荐):在任意项目标题上右键,打开选择器;可选内置图标、粘贴 emoji 或填写图片 URL,立即生效。若有 AI 建议,会显示为「AI suggested · reason」,可接受或重新生成。
  2. Settings → Project icons:列出全部项目逐项设置或清除;页顶有「Pick icons automatically」开关与 Re-suggest all。

选择器三个标签页:Icons(默认)、Emoji、Image。

从 1.x 升级时注意:2.0 起图标名由 Phosphor 改为 Hugeicons 命名(如 sparkle → sparkles 等),旧配置可能需要重选。

实现要点(便于排查)

浏览器端(client.js)占用官方槽位:settings.section(Project icons,order: 25)与 shell.overlay(右键菜单,order: 40)。侧栏绘制无官方槽位,通过 [data-row-key="workspace:<id>"] 隐藏原生 SVG 并用 ::before 绘制自定义图标。

Host 端注册鉴权路由:

POST /api/workspace-icons/suggest

请求体含 language(zh | en)与 projects 数组(key、path 绝对路径、title);仅绝对路径、最多 24 个项目、去重、body 上限 64 KB。存在 workspaceRegistry 时只读已注册工作区目录。模型经 ctx.get('llm').stream(...) 调用;@deepseek-ai/dsh-llm 为可选 peer 依赖,导入失败时仍可仅靠本地规则工作。

适用场景与注意

适合在 DSH Web UI 中长期维护多个仓库、希望侧栏快速扫一眼区分类型的开发者。不适合期待「配置进仓库、团队机器一致同步」的场景——当前设计明确为纯本机 localStorage。

注意:

  • 自动建议会产生模型调用成本与延迟,可在设置中关闭。
  • 图片 URL 需可访问且符合安全策略;插件拒绝危险 scheme。
  • 插件能力与 Harness 版本、profile 及可选 LLM 依赖是否解析成功相关;无模型时仍有规则兜底图标。

结尾

dsh-workspace-icons 把「项目辨识度」收拢到侧栏右键与统一设置页:160 个带固定配色的 Hugeicons、emoji/图片,以及可选的 AI 建议与本地方案。若要在本机 DSH 中试用,可按上文安装命令安装并重启 Harness。

  • 目录页:https://www.skillhub.cn/plugins/bloodyxu/dsh-workspace-icons
  • 源码与文档:https://github.com/bloodyxu/dsh-workspace-icons
羽毛球分组比赛记分
小程序二维码

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

Xiaoye