Back to home

ywsldxk

dsh-color-preview

DeepSeek Harness 颜色预览插件:按需预览对话中提到的十六进制颜色

Stars
1
Language
JavaScript
Created
Aug 16, 2026
Updated
Aug 16, 2026

Introduction

dsh-color-preview

DeepSeek Harness 颜色预览插件:按需预览对话中提到的十六进制颜色。

当模型在对话中给出一个颜色代码(如 #F59E0B)时,你只需要说一句「预览这个颜色」,对话流里就会渲染出一张色块卡片——72px 真实色块 + RGB / HSL / WCAG 对比度 / 颜色名。

效果

为什么做这个

Codex 终端里输入 #F59E0B 会显示一个同字号的小色块,而 DeepSeek Harness 没有这个能力。我们本可以修改 markdown 渲染器全局扫描 #hex,但那会:

  • 引入常驻扫描的性能开销(每个 text 节点跑正则)
  • 产生误匹配(#fff#123456 在代码、issue 编号里到处都是)
  • 需要 patch 编译产物,升级即被覆盖

这个插件选择了另一条路:零扫描、零渲染开销,只有工具被调用才工作。这正是「按需」的含义——不常驻、不打扰、要的时候一秒钟出结果。

特性

  • 按需触发:模型给出色号 → 你说「预览」→ 卡片出现。不扫描、不常驻、零性能影响
  • 真实色块:对话流内渲染 72px 色块,暗色自动配白字、亮色配黑字
  • 完整信息:RGB / HSL / 白字对比度 / 黑字对比度 / 常用颜色名(中英双语)
  • 格式宽容:支持 #F59E0B(6 位)、#fff(3 位)、#ff000080(8 位含透明度)
  • 纯增量:注册在 tool.call.toolview 的开放 key 域,不替换任何官方 UI
  • 无源码改动:纯 Cordis 动态插件机制,不动 node_modules,升级不丢

安装

方法一:作为 preset 静态插件(推荐,持久)

  1. color-preview.mjs 复制到你的 agent preset 目录:
$target = Join-Path $env:USERPROFILE '.dsh\.agent-presets\<你的preset>\color-preview.mjs'
Copy-Item -LiteralPath .\color-preview.mjs -Destination $target
  1. agent.cordis.yml 里加一行(放在任意位置):
- id: color-preview
  name: ./color-preview.mjs
  1. 重启 DSH,新建会话即可。

方法二:作为动态插件(临时体验)

如果你只是想试试,可以在 DSH 的创造模式(cordis preset)里用动态插件机制加载本文件的 host / client 两半。

使用

  1. 对话里让模型给一个颜色(或自己提一个):「帮我看看 #F59E0B 这个颜色」
  2. 模型调用 color_preview 工具
  3. 对话流里出现色块卡片:
┌──────────────────────────┐
│ ████████████████████████  │  ← 72px 真实色块
│ #F59E0B                  │
├──────────────────────────┤
│ 名称: Amber 琥珀          │
│ RGB: rgb(245, 158, 11)   │
│ HSL: hsl(38, 92%, 50%)   │
│ 白字对比度: 2.15:1        │
│ 黑字对比度: 9.78:1        │
└──────────────────────────┘

工作原理

Host 半:harness.defineTool 注册 color_preview
  hex → RGB → HSL → WCAG 亮度/对比度 → 颜色名
        ↓ 返回 JSON
Client 半:slots.register('tool.call.toolview', key='color_preview')
  读取 ToolCallBlock(RunningToolCall | ToolResultNode)的 argsRaw + content
  → 渲染色块卡片

关键点:Client 读取的 ToolCallBlock 字段是 callId / argsRaw / contentRunningToolCallToolResultNode 两种形态),不是 arguments / result——这是本插件调试中踩过的最大的坑。

兼容性

  • DeepSeek Harness 0.1.0-rc.6 实测通过
  • 需要支持动态工具注册(harness.defineTool)与 tool.call.toolview Slot 的版本

许可

MIT License。参见 LICENSE

相关

  • DeepSeek Harness — 官方仓库(社区插件请发布到自己的项目并打上 dsh-plugin topic)