dsh-skill-browser 1.8.7 → 1.9.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +202 -0
- package/README-es.md +1 -1
- package/README-hi.md +1 -1
- package/README-pt.md +1 -1
- package/README-zh.md +191 -1
- package/README.md +18 -3
- package/lib/client.js +1729 -108
- package/lib/groups.js +956 -0
- package/lib/index.js +377 -22
- package/lib/keyword-groups.js +200 -0
- package/lib/ledger-stats.js +203 -0
- package/lib/ledger-writer.js +56 -1
- package/lib/scan.js +16 -0
- package/lib/zh.js +117 -1
- package/locale/en.json +1 -1
- package/locale/zh.json +1 -1
- package/package.json +11 -4
- package/scripts/audit-contrast.mjs +215 -0
- package/scripts/check-bom.mjs +51 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,207 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.9.10 — 2026-10-25
|
|
4
|
+
|
|
5
|
+
### 修复
|
|
6
|
+
- **品牌渐变底文字对比度按「最差端点」判色**:原来用渐变中点算白字对比度,但 `linear-gradient` 实际铺满 g1..g2 整条 ramp,浅色皮肤(04 全息幻彩 / 051 / 113–127 等)的中点达标而浅端只有 3.7–4.4:1。现改为 `worst(ink, g1, g2) = min(cr(ink,g1), cr(ink,g2))`,两个端点都 ≥4.6:1 才用白字,否则翻成近黑或按 0.05 步长压深整条渐变。**128 皮肤 × 两端点 = 256 项全部 ≥4.5:1。**
|
|
7
|
+
|
|
8
|
+
### 文档(与实装功能对齐)
|
|
9
|
+
- **`locale/zh.json` / `locale/en.json` 的 `meta.description` 重写**:原描述只写到「一级/二级分类 + 启停 + 失效台账」,完全没提 v1.9.0 之后新增的自定义分组、树状/平铺、版本号徽章、调用台账看板、⚡ 热重载、全皮肤自适应配色 —— 与实装功能严重不符。现按真实功能重写。
|
|
10
|
+
- **`README.md`(主 README,英文为主)补全 v1.9.0–v1.9.9 全部功能**:新增「自定义分组」「树状 / 平铺双模式」「版本号徽章」「调用台账看板」「热重载」「性能」「全皮肤自适应配色」七节中文说明 + 对应 4 条英文 Highlights;API 表补 `/rev`、`/reload`、`/groups`(含 11 个 action)、`/ledger/stats`(含 `gran`/`sort` 参数),`/skills` 注明返回 `version` 字段。原来 API 表完全没有分组、统计、热重载这三组接口。
|
|
11
|
+
- **`README-zh.md` 数字口径修正**:AI 分组的大类数公式写的是「技能数 ÷ 8,6~18 组、单组上限 12 个」,而 `lib/groups.js` 实际是 `Math.max(3, Math.min(16, Math.ceil(list.length / 12)))`(技能数 ÷ 12、3~16 个)且 `addSub()` 按 10 个切片、`CLASSIFY_SYSTEM` 要求「每个子类最多 10 个技能」。三处已全部改成 10 / ÷12 / 3~16,第三遍兜底拆组的「超过 12 个」也改为「超过 10 个」。
|
|
12
|
+
- **`package.json` `description` 从「逐版本罗列」改为一份统一功能描述**:原来是把 v1.9.0→v1.9.10 每个版本的新增点串起来,越写越长、且和市场卡片/README 口径各不相同。现在 `package.json` description、`locale/zh.json` `meta.description`、`locale/en.json` `meta.description`、五语言 README 首段**全部指向同一份口径**(含「分组只改视图不动技能文件」「无版本显示暂未编版本号」两条容易被误解的点)。npm 市场的卡片描述取自 `package.json` description,插件管理器/设置页的描述取自 `locale/*.json` 的 `meta`,两边现在一字不差。
|
|
13
|
+
- **`README-es.md` / `README-pt.md` / `README-hi.md` 首段补齐**:原来这三份只有一个 8 行的空壳(只有标题 + 一句旧描述 + 一个跳转链接),连分组、版本号、台账看板、热重载、皮肤自适应都没提。现在各自有一段完整的本地语言功能描述,标题统一为 `Skill Browser`。
|
|
14
|
+
|
|
15
|
+
### 校验
|
|
16
|
+
- **`scripts/audit-contrast.mjs`(新写,随包发布,唯一权威口径)**:128 皮肤 × 18 组前景/背景组合 = **2304 项,0 项不达标**。与旧临时脚本的差别:
|
|
17
|
+
- 语义变量直接从真实调用链取 —— 切皮肤后读 `<style id="dsb-skin-style">` 的 `textContent`,不另存一份「期望值」,杜绝审计与实现各算一套的假绿。
|
|
18
|
+
- 背景一律取**实际叠层色**:`card = chipBg over panel`、`surface = --dsb-surface`(吸顶表头不透明底实算值)。
|
|
19
|
+
- 渐变底按**两个端点分别校验**:品牌渐变 `--dsb-onbrand-bg1/2`、分组大类行 `--dsb-tile1/2`(叠 `--dsb-shade` 后)。只测中点会漏掉浅端。
|
|
20
|
+
- 踩过的坑写进脚本注释:DOM stub 的 `localStorage` 必须可读写,否则 `SKIN.setSkin(id)` 记不住,128 款皮肤全按 01 号深色皮肤算 → 20 款浅色皮肤集体假报不达标(首轮就误报 200 项)。
|
|
21
|
+
- `audit_onbrand.mjs`:128 皮肤逐款取 `--dsb-onbrand-bg1/2` 与 `--dsb-onbrand`,两端点对比度 **0 项 < 4.5:1**。
|
|
22
|
+
- `doc_audit2.mjs` / `doc_audit3.mjs` / `route_audit.mjs`:README-zh 16 项功能词全覆盖;README.md 10 项新功能词 + 4 个新路由全在位;实装 17 条路由与文档逐一对应。
|
|
23
|
+
- `scripts/check-bom.mjs`:37 个文本文件 **0 BOM**。
|
|
24
|
+
|
|
25
|
+
> **口径统一**:此前各版本 CHANGELOG 出现过 `14 组 1792 项`、`17 组 2176 项` 两种数字,那是各阶段临时脚本的覆盖范围(未含吸顶表头底、未拆渐变端点)。自 v1.9.10 起以 `scripts/audit-contrast.mjs` 的 **18 组 2304 项**为准,README-zh / README.md / package.json 描述均已对齐该数字。
|
|
26
|
+
|
|
27
|
+
## 1.9.9 — 2026-10-25
|
|
28
|
+
|
|
29
|
+
### 新增
|
|
30
|
+
- **零配置 AI 模型自动发现(四段式)**:别人装完插件不用填任何配置,AI 分组/封面就能用。
|
|
31
|
+
1. 插件配置里显式写了 `provider` + `model` → 直接用(`source: config`)
|
|
32
|
+
2. 当前对话会话绑定的模型 → `source: agent-session`
|
|
33
|
+
3. DSH 设置里的默认模型 `agentDefaultModel.currentSelection()` → `source: dsh-default`
|
|
34
|
+
4. 兜底扫描宿主可用模型目录,取第一个 → `source: llm-catalog`
|
|
35
|
+
- **模型探针徽标**:分组工具条右侧常驻一个小徽标,一眼看出「AI 分组将使用:xxx(DSH 默认模型)」,点一下可重新探测。探测只读配置、**不触发任何模型调用**、不写 `groups.json`。宿主没提供 llm 服务或没选默认模型时,徽标直接变红并给出可操作提示,不用等真分组失败才发现。
|
|
36
|
+
|
|
37
|
+
### 修复
|
|
38
|
+
- **全皮肤小字可见性(第三次加固)**:
|
|
39
|
+
- `.dsb-gn` 数字徽标原来写死近白色 `--dsb-oncard-dim`,但它同时出现在工具条(面板底)、激活渐变按钮、大类行(深底)三种背景上 → 浅色皮肤下白字白底看不见。改为 **继承父级文字色**,三种背景各自正确。
|
|
40
|
+
- 基础 CSS 里所有 `var(--itm, …)` 文本色统一换成 `var(--dsb-dim, …)`(共 24 处)——皮肤自带的 `--itm` 在 28 款手调皮肤上对面板只有 3.0–4.0:1,达不到 10–11px 小字的 WCAG AA。
|
|
41
|
+
- 品牌渐变底(激活 chip / tab / 排序按钮 / 快捷区间 / 新建分组 / 子类选中)新增**安全渐变对** `--dsb-onbrand-bg1/2`:按「白字 ≥4.6:1」反解,浅色皮肤的淡渐变自动压深;8 款原本 3.03–3.5:1 的皮肤全部达标。
|
|
42
|
+
- `--dsb-ok` / `--dsb-fail` / `--dsb-warn` 作为 10–11px 文本时,按卡片底重新走一遍 4.8:1 阶梯(6 款浅色皮肤原本落在 4.35–4.50)。
|
|
43
|
+
|
|
44
|
+
### 校验
|
|
45
|
+
- 128 皮肤 × 17 组前景/背景组合 = **2176 项,0 项不达标**
|
|
46
|
+
- 语义色小字专项:1024 项,**0 项 < 4.5:1**
|
|
47
|
+
- 十一套回归全绿:DOM 78 / 热重载按钮 10 / 关键词 17 / 吸顶表头 24 / host 分组 36 / host 热重载 29 / 关键词 host 15 / 模型探针 11(均 0 FAIL)
|
|
48
|
+
|
|
49
|
+
## 1.9.8 — 2026-10-25
|
|
50
|
+
|
|
51
|
+
### 新增
|
|
52
|
+
- **分组栏树状 / 平铺双模式**:工具条新增「🌳 树状」「▦ 平铺」切换按钮,选择持久化到 `localStorage.dsh-skill-browser-gmode`。
|
|
53
|
+
- **树状(默认)**:每个大类独占一整行,子类**常驻**缩进挂在该行下方,用 `├─` / `└─` 树枝连接符 + 竖引导线画出真正的层级,一眼看出「Fluent 下面有 画网格 / 后处理 / SpaceClaim 几何操作 …」。不用先点大类才看得见子类。
|
|
54
|
+
- **平铺**:v1.9.3 原样(大类排成卡片,点开才显示子类栏),保留给习惯旧视图的用户。
|
|
55
|
+
- 分组栏顶部改为统一工具条 `dsb-gbar`:分组标题 · 全部 · 未分组 · 🌳树状 · ▦平铺 · ⚡关键词分组 · 🤖AI自动分组 · +新建。
|
|
56
|
+
- 大类行右侧显示「N 项 · N 子类」,鼠标悬停浮出 🎨封面 / +新建子类 / ✏️重命名 / 🗑删除 四个操作。
|
|
57
|
+
|
|
58
|
+
### 修复
|
|
59
|
+
- **「大类下面子类显示不清、零零散散挨着太乱」**:v1.9.3~v1.9.7 的子类行是 `flex-wrap` 横向小胶囊,和大类卡片视觉上分不开。现改为竖排逐行 + 树枝连接符,层级关系一眼可见。
|
|
60
|
+
|
|
61
|
+
### 变更
|
|
62
|
+
- 文案键新增 `groupModeTree` / `groupModeFlat` / `groupModeTreeTip` / `groupModeFlatTip`。
|
|
63
|
+
- 新增 CSS:`.dsb-gbar` / `.dsb-gsp` / `.dsb-gtree` / `.dsb-gitem` / `.dsb-grow`(大类整宽行)/ `.dsb-gico` / `.dsb-grname` / `.dsb-grmeta` / `.dsb-grops` / `.dsb-gsubrow` / `.dsb-gline` / `.dsb-gline-last` / `.dsb-gconn` / `.dsb-gsub` / `.dsb-gsub-on`;平铺模式类 `.dsb-gflat` / `.dsb-gcard` / `.dsb-gcard-dom` 全部保留。
|
|
64
|
+
- 分组栏容器 `max-height` 提到 `220px` 并可滚动,分组多时不再挤压技能列表。
|
|
65
|
+
|
|
66
|
+
## 1.9.7 — 2026-10-25
|
|
67
|
+
|
|
68
|
+
### 新增
|
|
69
|
+
- **关键词快速分组(⚡)**:分组栏新增「⚡ 关键词分组」按钮,纯本地正则规则直接产出「大类 → 子类」两级方案,**零 token、毫秒级(实测 111 个技能 1~2ms)、结果完全确定**,与 AI 分组共用同一个方案确认弹层和落盘路径(先出方案 → 选「替换」或「追加」才写入 `groups.json`)。
|
|
70
|
+
- 新模块 `lib/keyword-groups.js`:`keywordClassify(skills)` 返回 `{ok, plan:{domains}, stats, mode:"keyword", unmatched}`;另有 `keywordDomains()` / `keywordRules()` / `KEYWORD_MAX_SUB` 供自检与展示。
|
|
71
|
+
- 新接口 `POST /dsh-skill-browser/groups` 的 `action: "kw-classify"`(只出方案不落盘,与 `ai-classify` 同形)。
|
|
72
|
+
|
|
73
|
+
### 修复
|
|
74
|
+
- **AI 分组「太满」**:单子类技能数硬上限 `MAX_SUB = 8`,超过自动拆成「名称 1」「名称 2」…,保证一屏装得下。
|
|
75
|
+
- 关键词分组对模型未命中/漏掉的技能走 `unmatched` 兜底并归入「其他技能」,**实测 111/111 全覆盖、无重复归属**。
|
|
76
|
+
|
|
77
|
+
### 变更
|
|
78
|
+
- 文案键新增 `groupKw`(「⚡ 关键词分组」)、`groupKwTip`(「本地关键词规则直接分组:零 token、毫秒级、结果固定」)、`groupPlanTitleKw`(「关键词分组方案」)。
|
|
79
|
+
- `lib/client.js` 的 `kwClassifyFlow()` 与 `aiClassifyFlow()` 并列,共用 `openPlanMenu()` / `applyPlanFlow()`;`S.gplanMode` 区分 `"keyword"` / `"ai"` 只影响弹层标题。
|
|
80
|
+
|
|
81
|
+
## 1.9.6 — 2026-10-25
|
|
82
|
+
|
|
83
|
+
### 修复
|
|
84
|
+
- **详情页被吸顶表头穿透**:点技能看全文 / 点台账看失败明细时,排行榜的吸顶表头(`z-index:3`)会浮在详情层(`z-index:2`)之上,正文里横插一条「# 技能 / 版本 / 调用 …」的表格头,干扰阅读。详情层提到 `z-index:20`,彻底压住吸顶表头。
|
|
85
|
+
|
|
86
|
+
### 性能(不卡顿 / 少内存)
|
|
87
|
+
- **技能卡片分片渲染**:列表一次只渲染 60 张卡,滚动到底自动追加 60 张,也可点「加载更多(还有 N 条)」。切换分类/搜索/排序/分组时自动重置回 60。原来 130+ 技能是一次性拼几千个 DOM 节点。
|
|
88
|
+
- **原始流水分片渲染**:自动登记流水一次只渲染 120 行,点「加载更多」追加 120 行。原来 1000+ 行全量拼串。
|
|
89
|
+
- **重渲染保留滚动位置**:追加卡片时记住 `scrollTop`,不会跳回顶部。
|
|
90
|
+
- **jsonl 增量读取**:`lib/ledger-writer.js` 新增 `autoLogStat()`(只 stat 取 size+mtime)与 `readAutoLogTail(root, n, skill?)`(从文件尾部按行切齐读,不读全文)。`/ledger` 的「最近 30 条」改用尾部读,不再为 30 条记录读整个 986+ 行 jsonl。
|
|
91
|
+
- **统计缓存加 stat 探针**:`/ledger/stats` 的缓存键并入 jsonl 的 size+mtime —— 文件没变时切粒度/改排序都直接命中,且同一份 jsonl 只解析一次(原来换任何参数都要重读重解析全量)。
|
|
92
|
+
- **单技能明细分页**:`/ledger-detail` 默认只回最近 200 条(`&limit=` 可调),并额外返回 `autoTotal`;前端显示「共 N 条(仅显示最近 M 条)」。原来单技能上千条一次性塞给前端。
|
|
93
|
+
|
|
94
|
+
### 新增
|
|
95
|
+
- 文案键 `cardMore`(「加载更多(还有 {n} 条)」)、`detailHint`。
|
|
96
|
+
|
|
97
|
+
## 1.9.5 — 2026-10-25
|
|
98
|
+
|
|
99
|
+
### 修复
|
|
100
|
+
|
|
101
|
+
1. **调用台账排行榜吸顶表头透明,滚动时与行文字重叠** — 表头(`# 技能 / 版本 / 调用 / 成功 / 失败 / 成功率 / 最后调用`)原来 `background:transparent`,吸顶后下方滚动的行会从表头文字里穿过去,看着像字叠字。现改用新增语义变量 **`--dsb-surface`**(= 行/卡片真实渲染的不透明底色,即面板底色叠加 `--chipBg` 后的颜色),并:
|
|
102
|
+
- `z-index` 2 → **3**
|
|
103
|
+
- 加底部分隔线 `1px var(--dsb-line)` 与 `box-shadow:0 2px 6px rgba(0,0,0,.10)`,滚动时有明确边界
|
|
104
|
+
- 深色/浅色皮肤都取各自的不透明底色(实测 28 月白纸墨 `#f1efeb`、08 极地冰川 `#dfebf4`、04 全息幻彩 `#e7e4fe`、10 机械核心 `#252422`、01 曜石极光 `#252a38`),表头文字对比度 5.54–11.45:1
|
|
105
|
+
|
|
106
|
+
## 1.9.4 — 2026-10-25
|
|
107
|
+
|
|
108
|
+
### 新增
|
|
109
|
+
|
|
110
|
+
1. **面板热重载按钮 ⚡** — 面板右上角新增热重载按钮。改完插件代码点一下,host 半当场换新、client 半刷新页面取最新 bundle,**不重启桌面端、不中断会话**。
|
|
111
|
+
- host 半:`POST /dsh-skill-browser/reload` 用 `?v=<ts>` 重新 import 自身模块(5 个子模块一并换新,绕开 ESM 模块缓存),新的 API 实例接管请求,旧的经 `dispose()` 释放。
|
|
112
|
+
- 生效句柄挂在 `globalThis.__DSB_LIVE__`(`{api, gen}`),跨模块实例共享;每次重载 `gen` 自增,监听器由旧实例的 dispose 摘掉,不会重复注册。
|
|
113
|
+
- client 半:调 `ctx.get("clientModules").rebuilt(id)` 让 client-modules 重新从磁盘读 `client.js`,随后 `location.reload()` 取新界面。
|
|
114
|
+
2. **热重载探针 `GET /dsh-skill-browser/rev`** — 返回 `{version, gen}`。面板点完热重载后轮询该接口,确认宿主半真的换代(`gen` 变大)再刷新页面,避免刷到旧代码。
|
|
115
|
+
|
|
116
|
+
### 修复
|
|
117
|
+
|
|
118
|
+
1. **分组栏 / 台账看板滚动条不可见** — 面板内滚动容器原来用系统 overlay 滚动条,深色面板上几乎隐形。改为常驻 11px 品牌色滑块(轨道 `--dsb-soft`、滑块 `--dsb-brand`、`min-height:40px`、`scrollbar-width:thin`、`overscroll-behavior:contain`),覆盖技能列表 / 台账表格 / 详情正文 / 分组栏四个容器,浅色深色皮肤都看得见位置。
|
|
119
|
+
2. **悬浮球被面板盖住** — 球 `z-index` 原为 `2147481000`、面板 `2147481100`,面板一开就压住球。现球 `2147483600`、面板 `2147483000`,球恒在面板之上(与 dsh-todo-float-ball / dsh-font-enhancer / dsh-qq-digest 的层级一致)。
|
|
120
|
+
3. **分组栏过高挤占技能列表** — `.dsb-groups` 加 `max-height:96px;overflow-y:auto;overflow-x:hidden`。
|
|
121
|
+
|
|
122
|
+
## 1.9.3 — 2026-10-25
|
|
123
|
+
|
|
124
|
+
### 新增
|
|
125
|
+
|
|
126
|
+
1. **分组升级为「大类 → 子类」两级结构** — 原来的分组是平铺的一层,AI 分完只会得到一堆并列的组。现在支持逻辑上的总-分关系:一个大类(如「Fluent/CFD 仿真」)下可挂多个子类(前处理 / 画网格 / 求解与监测 / 后处理 / 故障排查),「DSH 工具链」下可挂(启动失败 / 插件冲突 / 插件开发 / 安装经验 / 网关配置)。层级上限两层,第三层会被拒绝。
|
|
127
|
+
2. **分组卡显示子类数与大类合计** — 大类卡右上角显示「N 子类」,数量是该大类自身成员 + 全部子类成员的合计;点大类看全部,点下面的子类只看那一个。
|
|
128
|
+
3. **二级子类筛选栏** — 选中某个大类后,分组栏下方出现一条「└ 子类」栏,含「整个大类」+ 每个子类(带计数),点哪个筛哪个。
|
|
129
|
+
4. **大类卡新增「+」按钮** — 直接在某个大类下新建子类,不必先建组再挪。
|
|
130
|
+
5. **AI 分组改为「先出方案,确认后落盘」** — 原先是点一下直接写库,模型截断或分得不满意只能删了重来。现在 AI 只返回一份「大类 → 子类 → 技能」方案,在弹层里列清楚(共 N 个大类 / M 个子类 / 覆盖 K 个技能),由用户选:
|
|
131
|
+
- **替换**:清掉旧的 AI 分组,按此方案重建(手工建的分组永远保留)
|
|
132
|
+
- **追加**:保留现有分组,只补还没归类的技能
|
|
133
|
+
不确认就不写盘。
|
|
134
|
+
6. **AI 分类提示词按「领域 → 用途」两级重写** — 明确要求大类是领域(Fluent/CFD 仿真、DSH 工具链、软件安装、网关与反代、文档处理…),子类是领域内的具体用途;每个技能恰好归一个子类、一个不漏;单子类 ≤10 个技能;禁止「通用/其他/杂项/综合/工具集」大杂烩筐;不再因为某领域技能多就只细分它。配套三遍覆盖:第一遍全量、第二遍只补模型漏掉的、第三遍按分类标签兜底,保证 100% 覆盖。
|
|
135
|
+
7. **AI 方案生成失败可读** — 模型流被 max-tokens 截断时不再只说「异常结束」,会带上 failure code/message。
|
|
136
|
+
|
|
137
|
+
### 修复
|
|
138
|
+
|
|
139
|
+
1. **滚动条看不见、不知道滚到哪** — 面板内所有滚动容器(技能列表、台账表格、详情正文、分组栏)原来用系统 overlay 滚动条,深色面板上几乎隐形。现在统一常驻 11px 滚动条:轨道半透明、滑块用品牌色(`--dsb-brand`)、最小高度 40px、hover 加深,并加 `scrollbar-width:thin` / `overscroll-behavior:contain`。
|
|
140
|
+
2. **悬浮球被面板盖住** — 本插件悬浮球 z-index 是 2147481000,面板是 2147481100,面板一开就压住球;而同类插件(dsh-todo-float-ball、dsh-font-enhancer、dsh-qq-digest)球都在 2147483600 以上。现在球提到 **2147483600**、面板提到 **2147483000**,球恒在面板之上。
|
|
141
|
+
3. **分组栏过高挤占列表** — 分组栏加 `max-height:96px` + 纵向滚动,分组多时不再把技能列表压扁。
|
|
142
|
+
4. **merge 模式误报失败** — 追加模式下如果所有技能都已有归属,原实现返回「方案里的技能都不在当前技能库中」错误。现在按正常结果处理,返回「所有技能都已在分组里,本次没有需要补的技能」。
|
|
143
|
+
|
|
144
|
+
## 1.9.2 — 2026-10-24
|
|
145
|
+
|
|
146
|
+
### 修复
|
|
147
|
+
|
|
148
|
+
1. **台账看板与分组栏对比度** — 1.9.0/1.9.1 新增的 CSS 全是深色硬编码(`#8fc7ff` / `#9ff5c8` / `#8b93a8` / `rgba(255,255,255,.x)`),浅色皮肤(04 全息幻彩、08 极地冰川、28 月白纸墨等)下白字白底、完全看不清。现在全部改为皮肤语义变量 `--dsb-ok` / `--dsb-fail` / `--dsb-warn` / `--dsb-dim` / `--dsb-soft` / `--dsb-line` / `--dsb-bar` 等,深色皮肤用亮色系、浅色皮肤用深色系。
|
|
149
|
+
2. **品牌强调色当正文色导致浅色皮肤看不见** — 卡片技能名、排行榜技能名、排序高亮、分组标签原来直接用皮肤品牌色 `var(--stA)`。08 极地冰川(`#f06a5d` 压 `#eef7fd`)只有 2.80:1、04 全息幻彩(`#e0559f` 压 `#f2f0ff`)只有 2.9:1。新增 `--dsb-brand` / `--dsb-brand-strong`:按「同色相逐级加深」的阶梯算出达标色,既保住品牌色观感又能看清。
|
|
150
|
+
3. **品牌渐变上的标签色** — 激活的 chip / tab / 排序按钮 / 快捷区间 / 新建分组是「品牌渐变 + 白字」,淡渐变上白字同样不可见。新增 `--dsb-onbrand`:按渐变中点亮度自动在白与近黑之间切换。
|
|
151
|
+
4. **趋势柱 / 迷你条不可见** — 柱状图直接用品牌色,浅色皮肤下 08 极地冰川只有 2.80 / 2.79:1。新增 `--dsb-bar1` / `--dsb-bar2`,按 3:1(非文字图形标准)取达标色。
|
|
152
|
+
5. **skinColorLum 支持 hsl() / hsla()** — 100 个派生皮肤的颜色是 hsl() 字符串,原先只解析 #rrggbb,导致亮度判定全部落回默认值、浅色判定失效。补齐 hsl → rgb 换算。
|
|
153
|
+
6. **次要小字改用 --dsb-dim** — 皮肤自带的 --hintC 对面板背景对比度实测仅 3.00~4.02:1(10~11px 小字达不到 WCAG AA 4.5:1),改为按候选链 hintC → itm → ptx → 兜底 取第一个达标的颜色,并按「卡片底」而非面板底核算(小字实际坐在卡片上)。
|
|
154
|
+
7. **开关开启态标签** — `.dsb-tgl-on` / `.dsb-sw-on` 原用皮肤 `--itD`,浅色皮肤同样是亮色,改走 `--dsb-ok`。
|
|
155
|
+
8. **日期选择器配色** — 新增 `--dsb-scheme`(light / dark),原生 `<input type="date">` 的日历弹窗在浅色皮肤下不再弹黑框。
|
|
156
|
+
|
|
157
|
+
### 变更
|
|
158
|
+
|
|
159
|
+
1. **分组栏改为紧凑单行卡** — 分组卡高度 56px → 30px,名称与数量同行,🎨/✏️/🗑 操作按钮浮到右上角 hover 才显形;12~18 个分组可一屏排完。
|
|
160
|
+
2. **「全部 / 未分组」改用统一样式的 chip** — 不再用内联渐变 hack,选中态统一走 .dsb-gadd-on。
|
|
161
|
+
|
|
162
|
+
### 新增
|
|
163
|
+
|
|
164
|
+
1. **全皮肤对比度自检** — 128 款皮肤 × 14 组前景/背景组合共 1792 项逐一校验(正文 4.5:1、品牌字 4.5:1、次要小字 4.5:1、大数字 3:1、趋势柱 3:1、渐变白字 3:1),当前 **0 项不达标**(20 款浅色皮肤全部通过)。
|
|
165
|
+
|
|
166
|
+
## 1.9.1 — 2026-10-24
|
|
167
|
+
|
|
168
|
+
### 重构
|
|
169
|
+
|
|
170
|
+
1. **失效台账 → 调用台账看板** — 原来的「📋 失效台账」只列人工台账表 + 最近 30 条自动登记流水,看不出调用规模与趋势,改为「📊 调用台账」看板。
|
|
171
|
+
|
|
172
|
+
### 新增
|
|
173
|
+
|
|
174
|
+
1. **时间区间筛选** — 7 个快捷区间(今天 / 近 7 天 / 近 30 天 / 本月 / 上月 / 今年 / 全部)+ 自定义起止日期(`<input type="date">`),工具栏右侧实时显示数据的实际覆盖区间。
|
|
175
|
+
2. **日 / 周 / 月 / 年四种粒度** — 趋势与统计按粒度聚合,周以周一为起点,空洞自动补零。
|
|
176
|
+
3. **6 个汇总指标卡** — 调用次数、活跃技能数、活跃天数、成功率、失败次数、日均调用。
|
|
177
|
+
4. **纯 CSS 趋势柱状图** — 按粒度出柱,失败全部命中的柱标红,悬停显示「日期 · 调用 N(成功 X / 失败 Y)」。
|
|
178
|
+
5. **技能调用排行榜** — 列出每个技能的调用次数、成功、失败、成功率、最后调用时间,并带**版本号徽章**(无版本显示「暂未编版本号」)与相对调用量的迷你条;5 个表头可点击切换排序(调用 / 失败 / 成功率 / 最后调用 / 名称);失败次数 > 0 的技能可点击直接打开该技能的人工台账明细。
|
|
179
|
+
6. **原始流水折叠** — 人工台账表与最近 30 条自动登记流水收进「展开原始流水」开关,默认收起,看板优先。
|
|
180
|
+
7. **新增接口 `GET /dsh-skill-browser/ledger/stats`** — 查询参数 `from` / `to`(YYYY-MM-DD)、`gran`(`day|week|month|year`)、`sort`(`calls|fails|rate|last|name`)、`top`;返回 `totals` / `buckets` / `ranks` / `dataFirst` / `dataLast` / `rankTotal`。带 30 秒缓存。
|
|
181
|
+
8. **新增模块 `lib/ledger-stats.js`** — 纯函数聚合层(无外部依赖):`dayKeyOf` / `weekStartOf` / `normalizeGran` / `normalizeRecords` / `buildStats`。日期按本地时区取日键,避免 UTC 漂移。
|
|
182
|
+
|
|
183
|
+
### 变更
|
|
184
|
+
|
|
185
|
+
1. 台账 tab 文案由「📋 失效台账」改为「📊 调用台账」。
|
|
186
|
+
2. `#dsb-ledger` 由 `display:block` 改为 `display:flex`,内部改为工具栏 / 指标卡 / 趋势 / 排行 / 流水的纵向 flex 布局。
|
|
187
|
+
3. 台账视图打开时若无统计数据会自动拉取一次。
|
|
188
|
+
## 1.9.0 — 2026-10-22
|
|
189
|
+
|
|
190
|
+
### 新增
|
|
191
|
+
|
|
192
|
+
1. **技能版本号徽章** — 卡片技能名旁显示 `v<version>` 绿色徽章;版本读取顺序为 `SKILL.md` frontmatter 的 `version` 字段 → 同目录 `package.json` 的 `version` 字段;两者都没有时显示灰色「暂未编版本号」。
|
|
193
|
+
2. **自定义视图分组(手动建组)** — 面板新增「我的分组」横向栏,可手动新建分组(名称 + emoji + 颜色),并支持重命名与删除。分组数据存于 `~/.dsh/data/dsh-skill-browser/groups.json`;**分组只是视图归档,绝不移动或修改任何技能文件在磁盘上的位置**。
|
|
194
|
+
3. **一键把技能移入分组** — 每张技能卡片底部新增「📁 移动」按钮,点开浮层选择目标分组即可归档;卡片上同时显示当前所属分组标签,也可选择「移出分组」。
|
|
195
|
+
4. **AI 自动分类建组** — 分组栏新增「🤖 AI 自动分组」按钮,调用 DSH 宿主 llm 服务读取技能库清单(目录名 + 中文简介 + 描述),让模型输出分组方案(每组含名称、emoji、成员技能列表),一次性建好分组并完成成员归档;**只重建 AI 建的组,保留用户手工建的组**。
|
|
196
|
+
5. **AI 一键生成分组封面** — 每个分组卡片右上角新增「🎨」按钮,调用 llm 生成一段纯 SVG(200x200,深色渐变 + 几何装饰 + 居中符号,无文字),经安全清洗(剥 `<script>`、`on*=` 事件属性、外部 href,上限 40KB)后存入 `groups.json` 作为分组卡片背景图。
|
|
197
|
+
6. **新增 HTTP 接口** — `GET /dsh-skill-browser/groups`(列出分组 + 技能归属映射);`POST /dsh-skill-browser/groups`(action = `create` / `rename` / `delete` / `assign` / `assign-batch` / `ai-classify` / `ai-cover`)。
|
|
198
|
+
7. **新增模块 `lib/groups.js`** — 承载分组存储与两个 AI 能力(自动分类建组、分组封面生成)。
|
|
199
|
+
|
|
200
|
+
### 变更
|
|
201
|
+
|
|
202
|
+
1. **宿主注入扩展** — `inject` 从 `["webServer"]` 扩展为 `["webServer", "llm"]`。
|
|
203
|
+
2. **新增可选依赖声明** — `@deepseek-ai/dsh-llm` 声明为 `optional peerDependency`:不安装也能正常使用,只是两个 AI 按钮会提示「AI 不可用」。
|
|
204
|
+
|
|
3
205
|
## 1.8.7 — 2026-10-19
|
|
4
206
|
|
|
5
207
|
### 文档与代码对齐(无功能改动)
|
package/README-es.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Skill Browser
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> Panel de bola flotante que convierte tu biblioteca de skills local en un activo navegable, buscable y gobernable: categorías de uno/dos niveles más grupos personalizados (vistas de árbol y plana, grupos manuales, agrupación instantánea por palabras clave, agrupación automática con IA y portadas generadas por IA — agrupar solo cambia la vista y nunca mueve archivos de skills), insignias de versión por skill con reserva "aún sin versión", habilitar/deshabilitar por tarjeta / por categoría / toda la biblioteca con copias de seguridad automáticas, y visor completo de SKILL.md. Un panel de libro de llamadas añade rangos de fechas, granularidad día/semana/mes/año, clasificaciones, gráfico de tendencia y detalles de fallos, alimentado automáticamente por el evento nativo tools/result. Recarga en caliente con un clic, 128 skins adaptables al contraste, raíz de skills configurable y bola arrastrable y restaurable.
|
|
4
4
|
|
|
5
5
|
> Full documentation: [English README](./README.md)
|
|
6
6
|
|
package/README-hi.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Skill Browser
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> फ्लोटिंग-बॉल पैनल जो आपकी लोकल स्किल लाइब्रेरी को ब्राउज़ करने, खोजने और प्रबंधित करने योग्य संपत्ति बनाता है: एक/दो-स्तरीय श्रेणियाँ और कस्टम समूह (ट्री/फ्लैट व्यू, मैन्युअल समूह, तुरंत कीवर्ड ग्रुपिंग, AI ऑटो-ग्रुपिंग और AI कवर — ग्रुपिंग केवल व्यू बदलती है, स्किल फ़ाइलें कभी नहीं हिलतीं), प्रति-स्किल वर्ज़न बैज जिसमें "अभी वर्ज़न नहीं" फ़ॉलबैक है, प्रति-कार्ड / प्रति-श्रेणी / पूरी लाइब्रेरी के लिए स्वचालित बैकअप के साथ चालू-बंद, और पूरा SKILL.md व्यूअर। कॉल-लेजर डैशबोर्ड में तिथि सीमा, दिन/सप्ताह/माह/वर्ष ग्रैन्युलैरिटी, रैंकिंग, ट्रेंड चार्ट और विफलता विवरण जुड़ते हैं, जो होस्ट के tools/result इवेंट से स्वचालित रूप से भरते हैं। एक-क्लिक हॉट रीलोड, सभी 128 स्किन कंट्रास्ट-अनुकूल, कॉन्फ़िगर करने योग्य स्किल रूट, खींचने योग्य और रीसेट करने योग्य बॉल।
|
|
4
4
|
|
|
5
5
|
> Full documentation: [English README](./README.md)
|
|
6
6
|
|
package/README-pt.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Skill Browser
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> Painel de bola flutuante que transforma sua biblioteca local de skills em um ativo navegável, pesquisável e gerenciável: categorias de um/dois níveis mais grupos personalizados (visões em árvore e plana, grupos manuais, agrupamento instantâneo por palavras-chave, agrupamento automático com IA e capas geradas por IA — agrupar só altera a visão e nunca move arquivos de skills), selos de versão por skill com fallback "ainda sem versão", habilitar/desabilitar por cartão / por categoria / toda a biblioteca com backups automáticos, e visualizador completo de SKILL.md. Um painel de registro de chamadas adiciona intervalos de datas, granularidade dia/semana/mês/ano, rankings, gráfico de tendência e detalhes de falhas, alimentado automaticamente pelo evento nativo tools/result. Recarga a quente com um clique, 128 skins adaptáveis ao contraste, raiz de skills configurável e bola arrastável e restaurável.
|
|
4
4
|
|
|
5
5
|
> Full documentation: [English README](./README.md)
|
|
6
6
|
|
package/README-zh.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# dsh-skill-browser
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> 悬浮球打开面板,把本机技能库变成可浏览、可检索、可治理的资产:两级分类 + 自定义分组(树状/平铺双模式、手动建组、⚡ 关键词分组、🤖 AI 自动分组与 AI 封面,**分组只改视图,不动技能文件**)、版本号徽章(无版本显示「暂未编版本号」)、单卡/分类/全库启停(自动备份)、SKILL.md 全文查看;内置调用台账看板(起止日期 + 日/周/月/年 + 排行榜 + 趋势图 + 失效明细),监听 `tools/result` 自动登记每次技能调用结果。⚡ 一键热重载,128 款皮肤全量自适应配色,技能库位置可配置,悬浮球可拖拽可复位。
|
|
4
4
|
|
|
5
5
|
> 完整文档以 [English README](./README.md) 为准,本页提供中文导读与关键信息速查。
|
|
6
6
|
|
|
@@ -8,6 +8,160 @@
|
|
|
8
8
|
|
|
9
9
|
浏览本地技能库、关键词检索、查看技能详情与触发词、快速路由到目标技能。
|
|
10
10
|
|
|
11
|
+
### 全皮肤自适应配色(v1.9.2)
|
|
12
|
+
|
|
13
|
+
面板支持 128 款皮肤,其中 20 款是浅色皮肤。v1.9.0 / v1.9.1 新增的台账看板与分组栏原先用深色硬编码,浅色皮肤下会白字白底看不清;现在全部改用皮肤语义变量:
|
|
14
|
+
|
|
15
|
+
- `--dsb-ok` / `--dsb-fail` / `--dsb-warn`:成功 / 失败 / 警告三色,深色皮肤用亮色系、浅色皮肤自动切深色系
|
|
16
|
+
- `--dsb-dim`:次要小字专用色,按 `hintC → itm → ptx → 兜底` 候选链取第一个达标色(4.8:1 余量,按卡片底而非面板底核算)
|
|
17
|
+
- `--dsb-brand` / `--dsb-brand-strong`:品牌强调色当**正文**用的版本。技能名、排行榜技能名、排序高亮、分组标签不再直接吃 `--stA`,而是沿「同色相逐级加深」阶梯算出达标色 —— 08 极地冰川原为 2.80:1、04 全息幻彩 2.9:1,现全部 ≥ 4.5:1(大数字 3:1)
|
|
18
|
+
- `--dsb-onbrand`:品牌渐变上的标签色,按渐变中点亮度自动在白 / 近黑之间切换,淡渐变上不再出现白字
|
|
19
|
+
- `--dsb-bar1` / `--dsb-bar2`:趋势柱与排行迷你条,按非文字图形标准 3:1 取达标色
|
|
20
|
+
- `--dsb-soft` / `--dsb-line` / `--dsb-hover`:分隔线、悬停底色
|
|
21
|
+
- `--dsb-scheme`:`light` / `dark`,驱动原生 `<input type="date">` 日历弹窗配色
|
|
22
|
+
|
|
23
|
+
切换皮肤后无需刷新,配色随皮肤即时重算。128 款皮肤 × 18 组前景/背景组合共 2304 项已全量校验,0 项不达标(`scripts/audit-contrast.mjs` 可随时复跑)。
|
|
24
|
+
|
|
25
|
+
> **v1.9.5**:排行榜表头是吸顶的,底色改用语义变量 `--dsb-surface`(行/卡片真实不透明底色),滚动时不会再和行文字重叠。
|
|
26
|
+
>
|
|
27
|
+
> **v1.9.9**:再加固一轮「小字可见性」——
|
|
28
|
+
> - `.dsb-gn` 数字徽标改为**继承父级文字色**(它同时出现在工具条、激活渐变按钮、大类深底三种背景上,写死白色必然有一处看不见)
|
|
29
|
+
> - 基础 CSS 里 24 处 `var(--itm)` 文本色统一换 `var(--dsb-dim)`(皮肤自带 `--itm` 在 28 款手调皮肤上只有 3.0–4.0:1)
|
|
30
|
+
> - 品牌渐变新增安全对 `--dsb-onbrand-bg1/2`,按「白字 ≥4.6:1」反解,浅色皮肤淡渐变自动压深
|
|
31
|
+
> - `--dsb-ok` / `--dsb-fail` / `--dsb-warn` 作为 10–11px 文本时按卡片底再走一遍 4.8:1 阶梯
|
|
32
|
+
> - 语义色小字专项审计 1024 项,0 项 < 4.5:1
|
|
33
|
+
|
|
34
|
+
### 调用台账看板(v1.9.1)
|
|
35
|
+
|
|
36
|
+
「📊 调用台账」tab 从原来的失效流水列表改为统计看板:
|
|
37
|
+
|
|
38
|
+
- **时间区间**:7 个快捷区间(今天 / 近 7 天 / 近 30 天 / 本月 / 上月 / 今年 / 全部)+ 自定义起止日期
|
|
39
|
+
- **聚合粒度**:日 / 周 / 月 / 年(周以周一为起点,空洞自动补零)
|
|
40
|
+
- **6 个指标卡**:调用次数、活跃技能数、活跃天数、成功率、失败次数、日均调用
|
|
41
|
+
- **趋势柱状图**:纯 CSS 柱状图,失败全部命中的柱标红,悬停看具体数字
|
|
42
|
+
- **技能调用排行**:调用 / 成功 / 失败 / 成功率 / 最后调用时间 + 版本徽章 + 相对量迷你条;5 个表头可点击切换排序;失败次数 > 0 的行可点开该技能的人工台账明细
|
|
43
|
+
- **原始流水折叠**:人工台账表与最近 30 条自动登记流水默认收起,需要时展开
|
|
44
|
+
|
|
45
|
+
数据来源是插件自己监听的 `skill` 工具调用结果(`技能失效-自动登记.jsonl`),不额外上报任何东西。
|
|
46
|
+
|
|
47
|
+
### 技能版本号徽章(v1.9.0)
|
|
48
|
+
|
|
49
|
+
卡片技能名旁显示 `v<version>` 绿色徽章。版本读取顺序:
|
|
50
|
+
|
|
51
|
+
1. `SKILL.md` frontmatter 的 `version` 字段
|
|
52
|
+
2. 同目录 `package.json` 的 `version` 字段
|
|
53
|
+
|
|
54
|
+
两者都没有时,显示灰色「暂未编版本号」。
|
|
55
|
+
|
|
56
|
+
### 自定义视图分组(v1.9.0,v1.9.3 升级为两级,v1.9.8 加树状视图)
|
|
57
|
+
|
|
58
|
+
面板新增「我的分组」栏,可手动新建分组(名称 + emoji + 颜色),并支持重命名与删除。
|
|
59
|
+
|
|
60
|
+
- 分组数据存于 `~/.dsh/data/dsh-skill-browser/groups.json`
|
|
61
|
+
- **分组只是视图归档,绝不移动或修改任何技能文件在磁盘上的位置**
|
|
62
|
+
|
|
63
|
+
**v1.9.8 起分组栏有两种显示模式**,工具条上的「🌳 树状」「▦ 平铺」一键切换,选择记在 `localStorage`:
|
|
64
|
+
|
|
65
|
+
| 模式 | 样子 | 适合 |
|
|
66
|
+
|---|---|---|
|
|
67
|
+
| 🌳 树状(默认) | 每个大类独占一整行,子类**常驻**缩进挂在下层,用 `├─` `└─` 树枝连接符 + 竖引导线画出层级 | 想一眼看全「哪个大类下面有哪些子类」 |
|
|
68
|
+
| ▦ 平铺 | v1.9.3 原样:大类排成卡片,点开才显示子类栏 | 习惯旧视图、分组很多想省纵向空间 |
|
|
69
|
+
|
|
70
|
+
工具条统一为:分组标题 · 全部 · 未分组 · 🌳树状 · ▦平铺 · ⚡关键词分组 · 🤖AI自动分组 · +新建。大类行右侧显示「N 项 · N 子类」,悬停浮出 🎨 / + / ✏️ / 🗑 四个操作。
|
|
71
|
+
|
|
72
|
+
**v1.9.3 起分组是「大类 → 子类」两级结构**,用来表达逻辑上的总-分关系:
|
|
73
|
+
|
|
74
|
+
- 大类 = 领域(如「Fluent/CFD 仿真」「DSH 工具链」「软件安装」「网关与反代」)
|
|
75
|
+
- 子类 = 该领域内的具体用途(Fluent 下:前处理 / 画网格 / 求解与监测 / 后处理 / 故障排查;DSH 下:启动失败 / 插件冲突 / 插件开发 / 安装经验 / 网关配置)
|
|
76
|
+
- 层级上限两层,第三层会被拒绝;大类行显示「N 项 · N 子类」,数量是该大类自身成员 + 全部子类的合计
|
|
77
|
+
- 点大类看全部,点子类就只看那一个;树状模式下子类一直可见,平铺模式下选中大类后才显示子类栏
|
|
78
|
+
- 大类行上的「+」按钮可直接在该大类下新建子类
|
|
79
|
+
|
|
80
|
+
### 一键把技能移入分组(v1.9.0,v1.9.3 支持两级)
|
|
81
|
+
|
|
82
|
+
每张技能卡片底部有「📁 移动」按钮,点开浮层选择目标分组即可归档;浮层按层级缩进列出「大类」与「└ 子类」,技能可以直接挂在大类上,也可以挂到更细的子类;卡片上同时显示当前所属分组标签,也可选择「移出分组」。
|
|
83
|
+
|
|
84
|
+
### 关键词快速分组(v1.9.7)
|
|
85
|
+
|
|
86
|
+
分组栏新增「⚡ 关键词分组」按钮,**完全不调模型**:`lib/keyword-groups.js` 用技能目录名的关键词正则直接切出「大类 → 子类」两级方案。
|
|
87
|
+
|
|
88
|
+
- **零 token、毫秒级**:实测 111 个技能 1~2ms 出方案(AI 分组要几十秒且可能被 max-tokens 截断)
|
|
89
|
+
- **结果完全确定**:同一批技能每次分组结果一样,不会今天一个样明天一个样
|
|
90
|
+
- **单子类硬上限 8 个**(`KEYWORD_MAX_SUB`),超过自动拆成「名称 1」「名称 2」,解决 AI 分组「太满」的问题
|
|
91
|
+
- **全覆盖**:未命中关键词的技能归入「其他技能」,不会丢
|
|
92
|
+
- 与 AI 分组共用同一个方案确认弹层:先看方案,再选「替换」或「追加」才写盘,不确认不落盘
|
|
93
|
+
|
|
94
|
+
AI 分组与关键词分组是并列的两条路:想快、想稳定就用 ⚡;想按语义细分就用 🤖。
|
|
95
|
+
|
|
96
|
+
### AI 自动分类建组(v1.9.0,v1.9.3 改为先出方案再落盘)
|
|
97
|
+
|
|
98
|
+
分组栏的「🤖 AI 自动分组」按钮调用 DSH 宿主 llm 服务,读取技能库清单(目录名 + 中文简介 + 现分类),让模型输出**两级**分组方案(`大类 → 子类 → 技能`)。
|
|
99
|
+
|
|
100
|
+
**v1.9.3 起 AI 只产出方案、不直接写盘**:方案会在弹层里列清楚(共 N 个大类 / M 个子类 / 覆盖 K 个技能),由用户选:
|
|
101
|
+
|
|
102
|
+
- **替换**:清掉旧的 AI 分组,按此方案重建(手工建的分组永远保留)
|
|
103
|
+
- **追加**:保留现有分组,只补还没归类的技能
|
|
104
|
+
|
|
105
|
+
不确认就不写盘,分得不满意可以直接取消重来,不用先删一堆组。
|
|
106
|
+
|
|
107
|
+
分类提示词按「领域 → 用途」两级重写:每个技能恰好归一个子类、一个不漏;单子类 ≤10 个技能;禁止「通用 / 其他 / 杂项 / 综合 / 工具集」大杂烩筐;不再因为某领域技能多就只细分它。
|
|
108
|
+
|
|
109
|
+
v1.9.2 起改为**三遍覆盖式分类**,解决「只分了 Fluent、其他技能全丢进一个杂项筐」的问题:
|
|
110
|
+
|
|
111
|
+
1. **第一遍**:全量技能交给模型,大类数按规模自动定(技能数 ÷ 12 向上取整,3~16 个,允许 ±2),每个大类下分 1~6 个子类,单个子类上限 10 个技能,提示词明确禁止「通用工具 / 其他 / 杂项 / 综合」这类筐,并要求各领域拆分粒度一致。
|
|
112
|
+
2. **第二遍**:把模型漏掉的技能单独再问一次,并要求避开第一遍已建的分组名,让它们得到真正的语义分组,而不是一个「其他」大筐。
|
|
113
|
+
3. **第三遍(不调模型)**:仍未覆盖的技能按自身分类标签兜底成组,单个子类超过 10 个技能时自动拆成 `名称 1` / `名称 2`。
|
|
114
|
+
|
|
115
|
+
因此 AI 分组后**不会再出现「未分组」堆积**,全部技能都会落到某个组里。
|
|
116
|
+
|
|
117
|
+
只重建 AI 建的组,保留用户手工建的组。
|
|
118
|
+
|
|
119
|
+
### AI 一键生成分组封面(v1.9.0)
|
|
120
|
+
|
|
121
|
+
每个分组卡片右上角有「🎨」按钮,调用 llm 生成一段纯 SVG(200x200,深色渐变 + 几何装饰 + 居中符号,无文字),经安全清洗(剥 `<script>`、`on*=` 事件属性、外部 href,上限 40KB)后存入 `groups.json`,作为分组卡片背景图。
|
|
122
|
+
|
|
123
|
+
### AI 能力为可选(v1.9.0)
|
|
124
|
+
|
|
125
|
+
`@deepseek-ai/dsh-llm` 声明为 `optional peerDependency`:不安装也能正常使用全部非 AI 功能,只是两个 AI 按钮会提示「AI 不可用」。
|
|
126
|
+
|
|
127
|
+
### 零配置模型自动发现(v1.9.9)
|
|
128
|
+
|
|
129
|
+
**别人装完插件不用填任何配置,AI 分组 / AI 封面就能用** —— 插件按四段式自动找「你正在用的那个模型」:
|
|
130
|
+
|
|
131
|
+
1. 插件配置里显式写了 `provider` + `model` → 直接用(`source: config`)
|
|
132
|
+
2. 当前对话会话绑定的模型(`ctx.agent.session`)→ `source: agent-session`
|
|
133
|
+
3. DSH 设置页选的默认模型(`agentDefaultModel.currentSelection()`)→ `source: dsh-default`
|
|
134
|
+
4. 兜底扫宿主可用模型目录,取第一个 → `source: llm-catalog`
|
|
135
|
+
|
|
136
|
+
分组工具条右侧有一个**模型探针徽标**,常驻显示「🤖 AI 分组将使用:deepseek-v3(DSH 默认模型)」,点一下可重新探测:
|
|
137
|
+
|
|
138
|
+
- 探测**只读配置,不触发任何模型调用**,也不写 `groups.json`
|
|
139
|
+
- 宿主没提供 llm 服务、或一个默认模型都没选时,徽标直接变红并提示「没找到任何可用模型,请到 DSH 设置 → 模型 选一个默认模型」——不用等真点分组失败才发现
|
|
140
|
+
- 关键词分组(⚡)完全不走模型,任何情况下都可用
|
|
141
|
+
|
|
142
|
+
### 热重载(v1.9.4)
|
|
143
|
+
|
|
144
|
+
面板右上角的 **⚡** 按钮:改完插件代码点一下,host 半当场换新、界面刷新取最新 bundle,**不重启桌面端、不中断会话**。
|
|
145
|
+
|
|
146
|
+
- host 半:`POST /dsh-skill-browser/reload` → 用 `?v=<ts>` 重新 import 自身模块(含 5 个子模块),新 API 实例接管请求,旧的 `dispose()` 释放;生效句柄挂在 `globalThis.__DSB_LIVE__`,`gen` 自增,监听器不重复注册。
|
|
147
|
+
- client 半:调 `clientModules.rebuilt(id)` 让宿主重读 `client.js`,随后页面刷新。
|
|
148
|
+
- 探针:`GET /dsh-skill-browser/rev` 返回 `{version, gen}`,面板轮询确认 `gen` 变大后才刷新,避免刷到旧代码。
|
|
149
|
+
- 适用范围:只换本插件代码。改了别的插件、或改了宿主本体,仍需重启桌面端。
|
|
150
|
+
|
|
151
|
+
### 性能与分片渲染(v1.9.6)
|
|
152
|
+
|
|
153
|
+
技能库到一百多个之后,原来「一次性把全部卡片和全部调用流水拼进 innerHTML」会明显卡顿、内存也高。v1.9.6 改成按需分片:
|
|
154
|
+
|
|
155
|
+
- **技能卡片**:一次只渲染 60 张,滚动到底自动追加 60 张;也可以点「加载更多(还有 N 条)」。切换分类 / 搜索 / 排序 / 分组时自动重置回 60。
|
|
156
|
+
- **原始流水**:一次只渲染 120 行,点「加载更多」追加 120 行。
|
|
157
|
+
- **追加时保留滚动位置**,不会跳回顶部。
|
|
158
|
+
- **列表是静态摘要**:卡片只显示目录名、中文简介、分类、版本徽章、修改时间;**SKILL.md 全文只在点开详情时才 fetch**(v1.9.0 起就是惰性加载,v1.9.6 保持)。
|
|
159
|
+
- **jsonl 增量读取**:宿主新增 `autoLogStat()`(只 stat 拿 size+mtime)和 `readAutoLogTail(root, n, skill?)`(从文件尾部按行切齐读)。「最近 30 条」不再为 30 条记录读整个 jsonl。
|
|
160
|
+
- **统计缓存加 stat 探针**:`/ledger/stats` 的缓存键并入 jsonl 的 size+mtime,文件没变时切粒度/改排序直接命中,且同一份 jsonl 只解析一次。
|
|
161
|
+
- **单技能明细分页**:`/ledger-detail` 默认只回最近 200 条(`&limit=` 可调),并返回 `autoTotal`,前端显示「共 N 条(仅显示最近 M 条)」。
|
|
162
|
+
|
|
163
|
+
> **v1.9.6**:详情页(点技能看全文 / 点台账看失败明细)里,排行榜的吸顶表头曾浮在详情层之上,正文里横插一条表格头。详情层 `z-index` 提到 20,彻底压住。
|
|
164
|
+
|
|
11
165
|
## 🎨 三球共享 128 皮肤
|
|
12
166
|
|
|
13
167
|
本节内容详见 [English README](./README.md)。
|
|
@@ -32,6 +186,42 @@
|
|
|
32
186
|
|
|
33
187
|
本节内容详见 [English README](./README.md)。
|
|
34
188
|
|
|
189
|
+
### v1.9.1 新增台账统计接口
|
|
190
|
+
|
|
191
|
+
| 方法 | 路径 | 说明 |
|
|
192
|
+
|---|---|---|
|
|
193
|
+
| `GET` | `/dsh-skill-browser/ledger/stats` | 调用台账聚合统计(区间 / 粒度 / 排行 / 趋势) |
|
|
194
|
+
|
|
195
|
+
查询参数:
|
|
196
|
+
|
|
197
|
+
| 参数 | 取值 | 默认 | 说明 |
|
|
198
|
+
|---|---|---|---|
|
|
199
|
+
| `from` | `YYYY-MM-DD` | 空(不限) | 起始日期(含) |
|
|
200
|
+
| `to` | `YYYY-MM-DD` | 空(不限) | 结束日期(含) |
|
|
201
|
+
| `gran` | `day` / `week` / `month` / `year` | `day` | 聚合粒度;周以周一为起点 |
|
|
202
|
+
| `sort` | `calls` / `fails` / `rate` / `last` / `name` | `calls` | 排行榜排序字段 |
|
|
203
|
+
| `top` | 正整数 | `200` | 排行榜返回条数上限 |
|
|
204
|
+
|
|
205
|
+
返回结构:`{ ok, gran, from, to, sort, dataFirst, dataLast, totals:{calls,ok,fail,rate,skills,days,avgPerDay}, buckets:[{key,label,calls,ok,fail}], ranks:[{skill,calls,ok,fail,first,last,rank,rate}], rankTotal }`。带 30 秒缓存;`from > to` 会自动交换。
|
|
206
|
+
|
|
207
|
+
### v1.9.0 新增分组接口
|
|
208
|
+
|
|
209
|
+
| 方法 | 路径 | 说明 |
|
|
210
|
+
|---|---|---|
|
|
211
|
+
| `GET` | `/dsh-skill-browser/groups` | 列出分组 + 技能归属映射 |
|
|
212
|
+
| `POST` | `/dsh-skill-browser/groups` | action = `create` / `rename` / `delete` / `move` / `assign` / `assign-batch` / `ai-classify` / `kw-classify` / `ai-apply` / `ai-cover` / `model-info` |
|
|
213
|
+
|
|
214
|
+
`ai-classify` / `ai-apply` / `ai-cover` 需要宿主 llm 服务(`@deepseek-ai/dsh-llm`);未安装时该 action 返回「AI 不可用」。
|
|
215
|
+
|
|
216
|
+
`kw-classify`(v1.9.7)**不需要 llm**:本地正则直接出方案,返回 `{ok, plan:{domains}, stats, mode:"keyword", unmatched}`;方案确认后仍走 `ai-apply` 落盘。
|
|
217
|
+
|
|
218
|
+
`model-info`(v1.9.9)**不调模型、不写盘**:返回 `{ok, provider, model, source, error}`,`source` ∈ `config` / `agent-session` / `dsh-default` / `llm-catalog`。面板用它渲染「AI 分组将使用:xxx」徽标,实现零配置可用性自检。
|
|
219
|
+
|
|
220
|
+
### v1.9.4 新增热重载接口
|
|
221
|
+
|
|
222
|
+
- `POST /dsh-skill-browser/reload` → `{ok, version, gen, reloading}`;用 `?v=<ts>` 重新 import 自身模块,换掉正在服务的 handler。
|
|
223
|
+
- `GET /dsh-skill-browser/rev` → `{ok, version, gen, ts}`;`gen` 变大表示宿主半已换代。
|
|
224
|
+
|
|
35
225
|
## 测试
|
|
36
226
|
|
|
37
227
|
本节内容详见 [English README](./README.md)。
|
package/README.md
CHANGED
|
@@ -4,9 +4,10 @@
|
|
|
4
4
|
|
|
5
5
|
**Turn your skill library into something you can see, search, and govern.**
|
|
6
6
|
|
|
7
|
-
在 DeepSeek Harness(DSH)桌面端 /
|
|
7
|
+
在 DeepSeek Harness(DSH)桌面端 / 网页端里用一个悬浮球打开面板,把本机技能库变成可浏览、可检索、可治理的资产:两级分类 + **自定义分组**(树状/平铺双模式、手动建大类与子类、⚡ 关键词分组、🤖 AI 自动分组与 AI 封面,**分组只是视图归档,绝不移动任何技能文件**)、**版本号徽章**(无版本显示「暂未编版本号」)、单卡 / 分类 / 全库启停(自动备份 `.bak-toggle`)、SKILL.md 全文查看;内置 **调用台账看板**(起止日期 + 日/周/月/年 + 排行榜 + 趋势图 + 失效明细),监听 DSH 官方 `tools/result` 事件自动登记每次技能调用结果。面板 ⚡ 一键热重载,**128 款皮肤全量自适应配色**(对比度实算),技能库位置可配置,悬浮球可拖拽可复位。
|
|
8
|
+
|
|
9
|
+
Open a floating-ball panel inside DeepSeek Harness (DSH) and turn your local skill library into something you can browse, search and govern: one/two-level categories plus **custom groups** (tree/flat views, manual parent/child groups, ⚡ instant keyword grouping, 🤖 AI auto-grouping with AI-generated covers — **grouping is view-only and never moves a skill file**), **version badges** (falling back to "no version yet"), per-card / per-category / library-wide enable-disable with automatic `.bak-toggle` backups, and a full SKILL.md viewer. A **call-ledger dashboard** adds date ranges, day/week/month/year granularity, rankings, a trend chart and failure details, fed automatically by DSH's native `tools/result` event. One-click ⚡ hot reload, **all 128 ball skins contrast-adaptive**, configurable skill root, draggable and resettable ball.
|
|
8
10
|
|
|
9
|
-
Browse your local DSH skill library straight from the GUI, with an **automatic skill-failure ledger**. One floating-ball entry point opens a wall of skill cards — categories, live search, full SKILL.md viewer — plus a ledger page that logs the outcome of every `skill` tool call.
|
|
10
11
|
|
|
11
12
|

|
|
12
13
|
|
|
@@ -26,10 +27,17 @@ Did that skill actually work? The plugin listens to DSH's native `tools/result`
|
|
|
26
27
|
- **悬浮球 🧩**:固定在屏幕角落,点击开关面板;可拖拽换位置(位置记忆),Alt+点击收起成小圆点
|
|
27
28
|
- **技能库位置自己定**:首次使用在面板 ⚙ 设置里选择技能库文件夹(弹系统目录选择框),或手动粘贴路径;未配置时自动探测官方默认根 `~/.dsh/skills`。**插件不含任何预设路径**
|
|
28
29
|
- **一级/二级分类**:按技能目录名模式自动归类(Fluent/CFD 仿真、DSH 工具链、多端协同、Excel/表格、文档处理、图片/视觉、语音/媒体、数据/可视化、开发/技能治理等 15 个一级分类与 Fluent/DSH 域二级分类)
|
|
30
|
+
- **自定义分组(v1.9.0 起,v1.9.8 支持树状/平铺双模式)**:分组栏可手动新建「大类 → 子类」两级分组,也可用「⚡ 关键词分组」(本地正则,零 token、毫秒级、结果确定)或「🤖 AI 自动分组」(读技能清单让模型出方案)自动建组。AI / 关键词都**只出方案不落盘**,方案弹层里确认「替换」或「追加」才写入 `groups.json`。**分组只是视图归档,绝不移动、不重命名任何技能文件。**
|
|
31
|
+
- **树状 / 平铺双模式**:树状模式下每个大类独占一整行,子类常驻缩进挂在下方并用 `├─` / `└─` 树杈连接,一眼看清「Fluent 下面有画网格 / 后处理 / SpaceClaim 几何操作」;平铺模式保留旧版卡片墙。选择持久化到 `localStorage.dsh-skill-browser-gmode`。
|
|
32
|
+
- **版本号徽章(v1.9.0 起)**:技能名右侧显示版本号(优先 SKILL.md frontmatter 的 `version`,其次同目录 `package.json` 的 `version`),没有版本号则显示「暂未编版本号」。
|
|
29
33
|
- **技能启停**(v1.7.0 起):单个技能卡片开关 / 分类级聚合滑块 / 全库批量启停(带确认菜单)。停用即改写该技能 `SKILL.md` frontmatter 的 `disable-model-invocation`,改写前自动备份为 `.bak-toggle`,停用卡灰显并带徽章;随时可一键恢复
|
|
30
34
|
- **中文简介**:技能简介直接取自各技能 SKILL.md frontmatter 的 description(v1.5.0 起插件不内置任何技能名清单/字典,避免泄漏技能库构成,也保证所有人看到的是自己技能库的准确描述)
|
|
31
35
|
- **搜索**:按技能名 / 中文简介 / 原始描述实时过滤
|
|
32
36
|
- **详情**:点击卡片查看 SKILL.md 全文,可一键复制
|
|
37
|
+
- **调用台账看板(v1.9.1 起)**:台账页从「原始流水」升级为看板——起止日期筛选 + 今天/近 7 天/近 30 天/本月/上月/今年/全部七个快捷区间 + 日/周/月/年四种粒度 + 6 张指标卡(调用次数 / 活跃技能 / 活跃天数 / 成功率 / 失败 / 日均)+ 纯 CSS 趋势柱 + 排行榜(可按调用、失败、成功率、最后调用、技能名排序,带版本号与迷你占比条)。原始流水(人工台账 + 自动登记)折叠在下方。
|
|
38
|
+
- **热重载(v1.9.4 起)**:面板头部 ⚡ 按钮调用 `POST /reload`,插件重新加载自己的 host 半代码(`?v=<ts>` 绕开 ESM 缓存)并递增代号,前端轮询 `GET /rev` 等到代号变化后自动刷新界面——**改完代码不用重启桌面端**。
|
|
39
|
+
- **性能(v1.9.6 起)**:技能卡片分片渲染(一次 60 张,滚到底自动追加),原始流水分片渲染(一次 120 行),jsonl 走尾部增量读取,`/ledger/stats` 缓存键并入 jsonl 的 size+mtime,详情页默认只回最近 200 条。
|
|
40
|
+
- **全皮肤自适应配色(v1.9.2 / v1.9.5 / v1.9.9 三轮加固)**:面板所有新增控件(分组栏、版本徽章、台账看板、吸顶表头)颜色全部走语义变量(`--dsb-brand` / `--dsb-dim` / `--dsb-ok` / `--dsb-fail` / `--dsb-warn` / `--dsb-surface` / `--dsb-onbrand` 等),按当前皮肤实际叠层背景实算对比度,128 款皮肤 × 18 组前景/背景组合共 2304 项全部达标。
|
|
33
41
|
- **失效台账**(人工 / 自动分开显示):
|
|
34
42
|
- **👤 人工台账**:解析台账 md 的统计表与失败明细(人工维护区,插件永不改动)
|
|
35
43
|
- **🤖 自动登记**:插件监听 DSH 官方 `tools/result` 事件,自动记录每次 `skill` 工具调用结果——成功记「生效✅」、加载失败记「未生效❌」(含错误信息)
|
|
@@ -46,6 +54,9 @@ Did that skill actually work? The plugin listens to DSH's native `tools/result`
|
|
|
46
54
|
- 🧩 **Floating-ball entry** — pinned to a screen corner, click to toggle the panel; draggable with position memory, Alt+click to collapse to a dot.
|
|
47
55
|
- 📂 **Configurable skill root** — pick the folder via the native directory chooser in ⚙ settings, or paste a path; auto-detects the official `~/.dsh/skills` root when unset. **No hard-coded paths shipped.**
|
|
48
56
|
- 📚 **Two-level categories** — auto-classified from skill directory names (15 top-level categories: Fluent/CFD simulation, DSH toolchain, multi-client collaboration, Excel/spreadsheets, document processing, image/vision, voice/media, data/visualisation, dev/skill governance…).
|
|
57
|
+
- 🗂 **Custom groups** (since v1.9.0; tree/flat dual view since v1.9.8) — create your own two-level `domain → sub` groups by hand, or let **⚡ keyword grouping** (local regex, zero tokens, millisecond, deterministic) / **🤖 AI auto-grouping** build them for you. Both only produce a *plan*; nothing is written to `groups.json` until you confirm **Replace** or **Merge**. **Groups are a view-only archive — no skill file is ever moved or renamed.**
|
|
58
|
+
- 🌳 **Tree / flat views** — tree mode gives every domain its own full-width row with its sub-groups permanently indented underneath, joined by `├─` / `└─` branches, so "Fluent → meshing / post-processing / SpaceClaim geometry" is visible at a glance. Choice persisted in `localStorage.dsh-skill-browser-gmode`.
|
|
59
|
+
- 🏷 **Version badges** (since v1.9.0) — the skill's version sits right next to its name (frontmatter `version`, else the sibling `package.json` `version`), showing "not versioned yet" when absent.
|
|
49
60
|
- 🔘 **Skill enable/disable** (since v1.7.0) — per-card switch, category-level aggregate slider, and whole-library batch toggle with a confirmation menu. Disabling rewrites the skill's `SKILL.md` frontmatter `disable-model-invocation` after backing it up to `.bak-toggle`; disabled cards grey out with a badge and can be restored at any time.
|
|
50
61
|
- 🇨🇳 **Chinese summaries** — taken straight from each skill's `SKILL.md` frontmatter `description`. Since v1.5.0 the plugin ships **no built-in skill dictionary**, so you always see an accurate description of *your own* library.
|
|
51
62
|
- 🔍 **Live search** — filter by skill name, Chinese summary, or raw description.
|
|
@@ -88,10 +99,14 @@ DSH 桌面端内置**供应链安全策略**(minimumReleaseAge):刚发布
|
|
|
88
99
|
| 路由 | 说明 |
|
|
89
100
|
|---|---|
|
|
90
101
|
| `GET /dsh-skill-browser/health` | 健康检查(含 root 与识别来源) |
|
|
102
|
+
| `GET /dsh-skill-browser/rev` | 当前加载代号与版本(热重载探针) |
|
|
103
|
+
| `POST /dsh-skill-browser/reload` | 热重载 host 半代码,返回新代号(v1.9.4) |
|
|
91
104
|
| `GET/POST /dsh-skill-browser/config` | 读取/保存运行时配置(skillsDir、ledgerEnabled) |
|
|
92
|
-
| `GET /dsh-skill-browser/skills[?refresh=1]` |
|
|
105
|
+
| `GET /dsh-skill-browser/skills[?refresh=1]` | 全量技能清单(含 `version` 字段)+ 分类元数据 + 总数 |
|
|
93
106
|
| `GET /dsh-skill-browser/skill?dir=<name>` | 读取某技能 SKILL.md 全文 |
|
|
107
|
+
| `GET/POST /dsh-skill-browser/groups` | 读取/写入两级分组(`groups.json`)。POST 的 `action`:`create` / `rename` / `delete` / `move` / `assign` / `assign-batch` / `ai-classify` / `kw-classify` / `ai-apply` / `ai-cover` / `model-info` |
|
|
94
108
|
| `GET /dsh-skill-browser/ledger[?refresh=1]` | 人工台账表 + 自动登记统计与流水 |
|
|
109
|
+
| `GET /dsh-skill-browser/ledger/stats?from=&to=&gran=&sort=&top=` | 调用台账看板聚合(`gran`=day\|week\|month\|year,`sort`=calls\|fails\|rate\|last\|name) |
|
|
95
110
|
| `POST /dsh-skill-browser/ledger/report` | 手动上报失败 `{ skill, note, kind }` |
|
|
96
111
|
| `POST /dsh-skill-browser/ledger/flush` | 立即落盘队列中的登记 |
|
|
97
112
|
| `GET /dsh-skill-browser/ledger-detail?skill=<name>` | 该技能的人工明细 + 全部自动记录 |
|