@bytechain.cn/colamd-themes 0.3.1 → 0.5.0

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.
Files changed (100) hide show
  1. package/.claude/skills/colamd-themes-preview.skill.md +333 -0
  2. package/.claude/skills/colamd-themes.skill.md +10 -0
  3. package/.dsh/skills/colamd-themes/SKILL.md +14 -0
  4. package/.github/supported-topics.yml +17 -0
  5. package/.hermes/skills/tools/colamd-themes/SKILL.md +14 -0
  6. package/.openclaw/skills/colamd-themes/SKILL.md +1 -146
  7. package/.opencode/skills/colamd-themes/SKILL.md +17 -0
  8. package/.trae/rules/colamd-themes.md +0 -145
  9. package/CHANGELOG.md +318 -240
  10. package/DSH_SUPPORT_SUMMARY.md +87 -0
  11. package/README.md +414 -384
  12. package/README_CN.md +412 -384
  13. package/RELEASENOTE.md +541 -365
  14. package/bytechain.cn-colamd-themes-0.5.0.tgz +0 -0
  15. package/dist/cli.js +272 -32
  16. package/dist/cli.js.map +1 -1
  17. package/dist/color-utils.d.ts +1 -0
  18. package/dist/color-utils.js +25 -6
  19. package/dist/color-utils.js.map +1 -1
  20. package/dist/extractors/pdf-extractor.js +6 -1
  21. package/dist/extractors/pdf-extractor.js.map +1 -1
  22. package/dist/extractors/url-extractor.d.ts +0 -4
  23. package/dist/extractors/url-extractor.js +13 -126
  24. package/dist/extractors/url-extractor.js.map +1 -1
  25. package/dist/generator.d.ts +1 -1
  26. package/dist/generator.js +32 -11
  27. package/dist/generator.js.map +1 -1
  28. package/dist/models.d.ts +5 -4
  29. package/dist/models.js +2 -3
  30. package/dist/models.js.map +1 -1
  31. package/dist/renderer.d.ts +4 -2
  32. package/dist/renderer.js +68 -25
  33. package/dist/renderer.js.map +1 -1
  34. package/dist/templates/template.css +220 -498
  35. package/dist/templates/theme-paradigm.md +530 -658
  36. package/dist/templates/theme-template.hbs +256 -370
  37. package/dist/theme-store.js +19 -3
  38. package/dist/theme-store.js.map +1 -1
  39. package/dist/utils/document-paradigm.d.ts +12 -0
  40. package/dist/utils/document-paradigm.js +109 -0
  41. package/dist/utils/document-paradigm.js.map +1 -0
  42. package/dist/validators.d.ts +4 -1
  43. package/dist/validators.js +115 -1
  44. package/dist/validators.js.map +1 -1
  45. package/mcp-server/dist/index.d.ts +13 -0
  46. package/mcp-server/dist/index.d.ts.map +1 -0
  47. package/mcp-server/dist/index.js +0 -0
  48. package/mcp-server/dist/index.js.map +1 -0
  49. package/mcp-server/package-lock.json +1759 -0
  50. package/mcp-server/package.json +24 -0
  51. package/mcp-server/src/index.ts +0 -0
  52. package/mcp-server/tsconfig.json +19 -0
  53. package/package.json +54 -36
  54. package/skills/build-skills.sh +30 -5
  55. package/skills/colamd-themes/SKILL.md +180 -148
  56. package/src/cli.ts +474 -217
  57. package/src/color-systems.ts +289 -289
  58. package/src/color-utils.ts +137 -120
  59. package/src/contrast.ts +66 -66
  60. package/src/docx-style-paradigm.ts +811 -811
  61. package/src/export-cli.ts +356 -356
  62. package/src/extractors/base.ts +8 -8
  63. package/src/extractors/docx-extractor.ts +417 -417
  64. package/src/extractors/pdf-extractor.ts +533 -527
  65. package/src/extractors/url-extractor.ts +846 -981
  66. package/src/generator.ts +197 -169
  67. package/src/index.ts +29 -29
  68. package/src/models.ts +212 -212
  69. package/src/renderer.ts +332 -288
  70. package/src/templates/template.css +220 -498
  71. package/src/templates/theme-paradigm.md +530 -658
  72. package/src/templates/theme-template.hbs +256 -370
  73. package/src/theme-store.ts +185 -170
  74. package/src/types/pdf-parse.d.ts +12 -12
  75. package/src/utils/cli-utils.ts +84 -84
  76. package/src/utils/document-paradigm.ts +118 -0
  77. package/src/validators.ts +298 -176
  78. package/themes/academic-paper-pt.css +353 -1805
  79. package/themes/academic-paper.css +350 -1099
  80. package/themes/academic-style.css +342 -2430
  81. package/themes/colly.css +256 -370
  82. package/themes/elegant.css +288 -671
  83. package/themes/forest-ink.css +240 -664
  84. package/themes/guizang.css +250 -732
  85. package/themes/hermes-security.css +279 -0
  86. package/themes/meeting-minutes.css +256 -370
  87. package/themes/pixso-design.css +278 -1261
  88. package/themes/salvator-blog.css +256 -370
  89. package/themes/shimo-theme.css +256 -0
  90. package/themes/swiss-design.css +285 -746
  91. package/themes/template.css +220 -498
  92. package/themes/trae-blue.css +280 -737
  93. package/themes/word-contract.css +249 -0
  94. package/themes-preview/demo-content.md +187 -187
  95. package/tsconfig.json +18 -18
  96. package/src/mermaid-presets.ts +0 -142
  97. package/themes/swiss-design copy.css +0 -746
  98. package/themes-preview/colly-preview.html +0 -623
  99. package/themes-preview/meeting-minutes-preview.html +0 -625
  100. package/themes-preview/salvator-blog-preview.html +0 -623
package/README_CN.md CHANGED
@@ -1,384 +1,412 @@
1
- # ColaMD Themes
2
-
3
- [ColaMD](https://github.com/cola-md/cola-md) Agent 原生 Markdown 编辑器的主题开发与导出工具。从网页、Word 文档和 PDF 中提取视觉格式,转换为经过范式验证的 CSS 主题文件,并可将 Markdown 导出为带主题样式的独立 HTML 或 PDF。
4
-
5
- ## 功能特性
6
-
7
- ### 主题提取
8
-
9
- - **URL 提取** — 抓取网页,通过 `css-tree` 解析 CSS 规则,结合选择器特异性计算与内联样式合并,推导协调的主题色板
10
- - **DOCX 提取** — 通过 mammoth 读取 Word 文档完整样式(H1–H6、表格、代码块),映射为主题变量
11
- - **PDF 提取** — 采用多层启发式分析从 PDF 文本中提取排版元数据
12
- - **自动检测** — `extract` 命令根据文件类型或 URL 协议自动路由到对应提取器
13
-
14
- ### HTML / PDF 导出
15
-
16
- - **`export-html`** — 将 Markdown 渲染为独立 HTML 文档,主题 CSS 内嵌,Mermaid 图表和 KaTeX 公式完整渲染
17
- - **`export-pdf`** — 通过 Puppeteer(Chromium)将 Markdown 渲染为 PDF,使用 `@media print` 保真主题配色
18
- - **`export`** — 批量导出多个文件或整个目录为 HTML 或 PDF
19
- - 底层使用 `@bytechain.cn/colamd/renderer` — 与 ColaMD 应用相同的 Milkdown 编辑器引擎
20
-
21
- ### 主题管理
22
-
23
- - **`set-theme`** — 配置默认导出主题、注册自定义 CSS 主题、在内置主题间切换
24
- - 内置主题:`light`、`dark`、`elegant`、`newsprint`
25
- - 自定义主题:任意 `.css` 文件注册后按名称引用
26
-
27
- ### 验证与色彩系统
28
-
29
- - **对比度引擎** — WCAG 2.1 相对亮度与对比度计算
30
- - **范式验证器** — 15+ 条设计约束规则(CR、HR、SL、NT、BD、MP、FP、FS、SH),附带自动修复建议
31
- - **色彩系统库** — 5 大色系 15 套预定义种子色板(莫兰迪、马卡龙、北欧、复古、薄荷绿)
32
- - **Mermaid 预设** — 3 套预设(light/dark/elegant),20 个核心变量,根据明度和色相自动选择
33
-
34
- ### 安全与性能 (v0.3.1+)
35
-
36
- - **SSRF 防护** — URL 提取器通过协议白名单验证并阻止私有网络访问,防止服务器端请求伪造攻击
37
- - **输入验证** — CSS 文件经过扩展名、大小限制(最大 1MB)和内容有效性验证,防止 OOM 攻击
38
- - **异步 I/O** — 非阻塞文件操作,提升批量导出时的响应速度
39
- - **模板缓存** — LRU 式缓存(最多 10 个模板),支持 TTL 过期(30 分钟)和基于 mtime 的自动失效,确保内存使用稳定
40
- - **统一错误处理** — 所有命令采用结构化错误码(`CLIError` + `ErrorCode`),提供一致的调试体验
41
- - **资源清理** — 显式 Puppeteer 页面清理,防止僵尸进程和资源泄漏
42
-
43
- ### CSS 模板引擎
44
-
45
- 基于 Handlebars 的模板引擎生成 v3.0 范式 CSS(≤300 行):
46
-
47
- | 分区 | 内容 |
48
- |------|------|
49
- | 1 | 设计令牌 — 种子色板(11 变量)、字体系统(4 组字体栈)、字号倍率、圆角与间距 |
50
- | 2 | 语义映射 — 通过 `var(--seed-*)` 从种子色自动推导 |
51
- | 3 | Mermaid 20 核心变量 — 容器、字体、节点、连线、聚类、标签、标题、人物、偏移 |
52
- | 4 | 排版微调 |
53
- | 5 | 选择器级微调 — 标题、代码、引用块、表格、分割线、响应式 |
54
- | 6 | `@media print` — 屏幕样式镜像 + `!important` + `print-color-adjust: exact` |
55
-
56
- ### 多 Agent Skill 通用支持
57
-
58
- 从单一源文件自动生成 5 个 AI 编码代理的 Skill 定义:
59
-
60
- | Agent | Skill 路径 | 前置元数据 |
61
- |-------|-----------|-----------|
62
- | **Claude Code** | `.claude/skills/colamd-themes.skill.md` | `name`, `description` |
63
- | **OpenCode** | `.opencode/skills/colamd-themes/SKILL.md` | `name`, `version`, `user-invocable`, `allowed-tools`, `hooks` |
64
- | **OpenClaw** | `.openclaw/skills/colamd-themes/SKILL.md` | `id`, `name`, `version`, `icon`, `author`, `homepage`, `metadata.openclaw.os` |
65
- | **Hermes** | `.hermes/skills/tools/colamd-themes/SKILL.md` | `name`, `version`, `author`, `license`, `metadata.hermes.tags`, `prerequisites` |
66
- | **Trae** | `.trae/rules/colamd-themes.md` | 纯 Markdown(无前置元数据) |
67
-
68
- **架构:**
69
-
70
- ```
71
- skills/colamd-themes/SKILL.md ← 规范源文件(单一事实来源)
72
- │
73
- ▼
74
- skills/build-skills.sh ← 构建脚本(bash)
75
- │
76
- ├──→ .claude/skills/colamd-themes.skill.md
77
- ├──→ .opencode/skills/colamd-themes/SKILL.md
78
- ├──→ .openclaw/skills/colamd-themes/SKILL.md
79
- ├──→ .hermes/skills/tools/colamd-themes/SKILL.md
80
- └──→ .trae/rules/colamd-themes.md
81
- ```
82
-
83
- **重新生成所有 Agent 的 Skill:**
84
-
85
- ```bash
86
- npm run build:skills # 生成全部
87
- bash skills/build-skills.sh # 同上
88
-
89
- # 或只生成单个 Agent:
90
- bash skills/build-skills.sh claude
91
- bash skills/build-skills.sh opencode
92
- bash skills/build-skills.sh openclaw
93
- bash skills/build-skills.sh hermes
94
- bash skills/build-skills.sh trae
95
- ```
96
-
97
- 自定义 Skill 内容:编辑 `skills/colamd-themes/SKILL.md`,然后运行 `npm run build:skills`
98
-
99
- ## 安装
100
-
101
- ```bash
102
- git clone git@github.com:byteuser1977/ColaMD-themes.git
103
- cd ColaMD-themes
104
- npm install
105
- npm run build
106
- ```
107
-
108
- 开发模式(热加载):
109
-
110
- ```bash
111
- npx tsx src/cli.ts <command>
112
- ```
113
-
114
- ## 使用方法
115
-
116
- 本包提供两个等效的 CLI 命令:
117
-
118
- - **`colamd-themes`** — 完整命令名
119
- - **`cthemes`** — 短命令别名(推荐频繁使用时使用)
120
-
121
- 以下示例使用短命令 `cthemes`,你可以随时替换为 `colamd-themes`。
122
-
123
- ### 从网页提取主题
124
-
125
- ```bash
126
- cthemes from-url "https://example.com" --name 我的主题
127
- ```
128
-
129
- ### 从 Word 文档提取
130
-
131
- ```bash
132
- cthemes from-docx 报告.docx --name 企业主题
133
- ```
134
-
135
- ### 从 PDF 提取
136
-
137
- ```bash
138
- cthemes from-pdf 论文.pdf --name 学术主题
139
- ```
140
-
141
- ### 自动检测来源类型
142
-
143
- ```bash
144
- cthemes extract 源文件.docx --name 自动主题
145
- ```
146
-
147
- ### 验证主题
148
-
149
- ```bash
150
- cthemes validate themes/我的主题.css
151
- ```
152
-
153
- ### 列出主题和色彩系统
154
-
155
- ```bash
156
- cthemes list
157
- cthemes color-systems
158
- cthemes mermaid-presets
159
- ```
160
-
161
- ### 导出为 HTML
162
-
163
- ```bash
164
- # 单文件,使用内置主题
165
- cthemes export-html 文档.md -t elegant -o 输出.html
166
-
167
- # 使用自定义主题
168
- cthemes export-html 文档.md -t 我的品牌 -o 输出.html
169
- ```
170
-
171
- ### 导出为 PDF
172
-
173
- ```bash
174
- # 单文件
175
- cthemes export-pdf 文档.md -t dark -o 输出.pdf
176
-
177
- # 指定页面格式
178
- cthemes export-pdf 文档.md -t elegant --format Letter -o 输出.pdf
179
- ```
180
-
181
- ### 批量导出
182
-
183
- ```bash
184
- # 多文件导出为 HTML
185
- cthemes export docs/*.md --format html -t light -d 输出目录/
186
-
187
- # 目录下所有 Markdown 导出为 PDF
188
- cthemes export docs/ --format pdf -t elegant -d 输出目录/
189
- ```
190
-
191
- ### 主题管理
192
-
193
- ```bash
194
- # 设置内置主题为默认
195
- cthemes set-theme elegant --default
196
-
197
- # 注册自定义主题
198
- cthemes set-theme 我的品牌 --css themes/swiss-design.css
199
-
200
- # 注册并设为默认
201
- cthemes set-theme 我的品牌 --css themes/swiss-design.css --default
202
-
203
- # 注销自定义主题
204
- cthemes set-theme 我的品牌 --remove
205
- ```
206
-
207
- ### 全部命令
208
-
209
- | 命令 | 说明 |
210
- |------|------|
211
- | `from-url <url>` | 从网页 URL 提取主题 |
212
- | `from-docx <file>` | 从 .docx 文档提取主题 |
213
- | `from-pdf <file>` | 从 PDF 文档提取主题 |
214
- | `extract <source>` | 自动检测来源类型并提取主题 |
215
- | `color-systems` | 列出 15 套内置色彩系统 |
216
- | `mermaid-presets` | 列出 Mermaid 预设(light/dark/elegant) |
217
- | `list` | 列出所有已生成主题 |
218
- | `validate <file>` | 验证主题是否符合 v3.0 范式规则 |
219
- | `set-theme <name>` | 设置、注册或注销导出主题 |
220
- | `export-html <input>` | 导出 Markdown → 独立 HTML |
221
- | `export-pdf <input>` | 导出 Markdown → PDF |
222
- | `export <inputs...>` | 批量导出多个文件或目录 |
223
-
224
- ### 提取选项
225
-
226
- | 参数 | 说明 |
227
- |------|------|
228
- | `-n, --name` | 主题名称(默认从来源自动获取) |
229
- | `-o, --output` | 输出 CSS 文件路径 |
230
- | `-d, --themes-dir` | 主题目录(默认:`themes/`) |
231
- | `-c, --color-system` | 强制指定色彩系统 |
232
- | `-m, --mermaid-preset` | 强制指定 Mermaid 预设 |
233
- | `-A, --auto-match` | 自动匹配色彩系统和 Mermaid 预设 |
234
-
235
- ### 导出选项
236
-
237
- | 参数 | 说明 |
238
- |------|------|
239
- | `-t, --theme` | 主题名称(内置、自定义或 CSS 文件路径) |
240
- | `-o, --output` | 输出文件路径 |
241
- | `-d, --output-dir` | 批量导出的输出目录 |
242
- | `--format` | 批量导出格式:`html` 或 `pdf`(默认:`html`) |
243
- | `--format` | PDF 页面大小:`A4`、`Letter`、`A3`(默认:`A4`) |
244
-
245
- ## 工作原理
246
-
247
- ### 主题提取管道
248
-
249
- ```
250
- 来源 (URL / .docx / .pdf)
251
- │
252
- ▼
253
- ┌─────────────────────┐
254
- │ 提取器 │ 解析来源 → 原始 ThemeStyle
255
- └──────────┬──────────┘
256
- │
257
- ▼
258
- ┌─────────────────────┐
259
- │ 色彩系统匹配 │ → 15 套内置色板
260
- │ Mermaid 预设选择 │ → light/dark/elegant
261
- │ 范式验证 │ → WCAG 对比度 + 设计约束
262
- └──────────┬──────────┘
263
- │
264
- ▼
265
- ┌─────────────────────┐
266
- │ 模板引擎 │ Handlebars → v3.0 CSS(≤300 行)
267
- └──────────┬──────────┘
268
- │
269
- ▼
270
- themes/<name>.css
271
- ```
272
-
273
- ### 导出管道
274
-
275
- ```
276
- Markdown 文件
277
- │
278
- ▼
279
- ┌─────────────────────────────────────────────┐
280
- │ Puppeteer(无头 Chromium) │
281
- │ ┌───────────────────────────────────────┐ │
282
- │ │ 本地 HTTP 服务 │ │
283
- │ │ 提供 @bytechain.cn/colamd/renderer │ │
284
- │ │ (同源加载,无 CORS 限制) │ │
285
- │ └──────────────┬────────────────────────┘ │
286
- │ │ │
287
- │ createColaMDEditor({ editable: false }) │
288
- │ applyTheme(主题名, 自定义CSS?) │
289
- │ setMarkdown(内容) │
290
- │ ensureAllPluginsRendered() ← 等待渲染完成 │
291
- │ │ │
292
- │ ┌──────────────┴──────────────┐ │
293
- │ │ buildExportHTML() → .html │ │
294
- │ │ page.pdf() → .pdf │ │
295
- │ └─────────────────────────────┘ │
296
- └─────────────────────────────────────────────┘
297
- ```
298
-
299
- ## 设计范式 (v3.0)
300
-
301
- 完整规范文档:[`templates/theme-paradigm.md`](src/templates/theme-paradigm.md)。
302
-
303
- ### 核心设计原则
304
-
305
- | 原则 | 说明 |
306
- |------|------|
307
- | **变量化优先** | 所有颜色、字体、字号、间距一律通过 CSS 自定义属性定义,选择器中禁止裸值 |
308
- | **模块化** | 主题 = 变量 + 极少量选择器微调,内置系统自动继承 |
309
- | **语义化** | `--color-link` 而非 `--color-blue`;`--font-heading` 而非 `--font-sans` |
310
- | **可推导性** | 完整主题由 5 个种子色 + 3 组字体栈自动推导,AI Agent 只需修改 Section 1 |
311
- | **打印保真** | `@media print` 是屏幕样式的镜像增强版(同值 + `!important` + `print-color-adjust`) |
312
-
313
- ### 对比度要求 (WCAG 2.1)
314
-
315
- | 规则 ID | 级别 | 要求 | 阈值 |
316
- |---------|------|------|------|
317
- | CR-01 | MUST | 正文色 vs 页面底色 | ≥ 7:1 (AAA) |
318
- | CR-02 | MUST | 次要文字 vs 页面底色 | ≥ 4.5:1 (AA) |
319
- | CR-03 | MUST | 弱化文字 vs 页面底色 | ≥ 3:1 (AA 大文本) |
320
- | CR-04 | MUST | 点缀色 vs 页面底色 | ≥ 4.5:1 (AA) |
321
- | CR-05 | SHOULD | 内联代码背景 vs 页面底色区分度 | ≥ 1.5:1 |
322
-
323
- ## 项目结构
324
-
325
- ```
326
- ColaMD-themes/
327
- ├── skills/
328
- │ ├── colamd-themes/SKILL.md # 规范 Skill 源文件
329
- │ └── build-skills.sh # 生成各 Agent 专用文件
330
- ├── .claude/skills/colamd-themes.skill.md # Claude Code Skill
331
- ├── .opencode/skills/colamd-themes/SKILL.md # OpenCode Skill
332
- ├── .openclaw/skills/colamd-themes/SKILL.md # OpenClaw Skill
333
- ├── .hermes/skills/tools/colamd-themes/ # Hermes Skill
334
- ├── .trae/rules/colamd-themes.md # Trae 规则
335
- ├── package.json
336
- ├── tsconfig.json
337
- ├── themes/ # 生成的 CSS 主题
338
- ├── src/
339
- │ ├── cli.ts # CLI 入口
340
- │ ├── index.ts # 公共 API 导出
341
- │ ├── models.ts # ThemeStyle / SeedPalette 类型
342
- │ ├── generator.ts # Handlebars → CSS 管道
343
- │ ├── renderer.ts # Puppeteer HTML/PDF 导出引擎
344
- │ ├── export-cli.ts # 导出 CLI 命令
345
- │ ├── theme-store.ts # 主题配置持久化(异步 API)
346
- │ ├── utils/
347
- │ │ └── cli-utils.ts # 公共工具函数与错误处理
348
- │ ├── color-utils.ts # 颜色操作工具
349
- │ ├── contrast.ts # WCAG 2.1 亮度与对比度
350
- │ ├── validators.ts # 范式验证引擎
351
- │ ├── color-systems.ts # 15 套预定义种子色板
352
- │ ├── mermaid-presets.ts # Mermaid 20 变量预设
353
- │ ├── docx-style-paradigm.ts # 文档样式规范
354
- │ ├── extractors/
355
- │ │ ├── base.ts # 提取器接口
356
- │ │ ├── url-extractor.ts # URL → ThemeStyle
357
- │ │ ├── docx-extractor.ts # DOCX → ThemeStyle
358
- │ │ └── pdf-extractor.ts # PDF → ThemeStyle
359
- │ └── templates/
360
- │ ├── template.css # 范式配套 CSS 模板
361
- │ ├── theme-paradigm.md # v3.0 设计规范
362
- │ └── theme-template.hbs # Handlebars CSS 模板
363
- └── tests/
364
- ```
365
-
366
- ## 技术栈
367
-
368
- | 组件 | 库 | 用途 |
369
- |------|-----|------|
370
- | 运行时 | Node.js + TypeScript | ESM 模块,严格类型 |
371
- | CLI 框架 | Commander.js | 参数解析、子命令分发 |
372
- | CSS 模板 | Handlebars | v3.0 范式 CSS 生成 |
373
- | HTML 解析 | Cheerio | URL 提取时的 DOM 遍历 |
374
- | CSS 解析 | css-tree | CSS 规则 AST 解析 |
375
- | DOCX 解析 | Mammoth | Word → HTML 转换 |
376
- | PDF 解析 | pdf-parse | PDF 文本提取 |
377
- | HTTP 客户端 | Axios | 网页抓取 |
378
- | 浏览器引擎 | Puppeteer | 无头 Chromium,HTML/PDF 导出 |
379
- | 编辑器引擎 | @bytechain.cn/colamd | 基于 Milkdown 的 Markdown 渲染器 |
380
- | 终端输出 | Chalk + Ora | 彩色文本 + 加载动画 |
381
-
382
- ## License
383
-
384
- MIT
1
+ # ColaMD Themes
2
+
3
+ [![DSH Skill](https://img.shields.io/badge/DSH%20Skill-supported-brightgreen?logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSJjdXJyZW50Q29sb3IiIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0tMSAxN2gxMm0tMTItMmgxMm0tMTItMkgxMg=="/>](https://github.com/deepseek-ai/deepseek-harness)
4
+ [![Awesome DSH](https://awesome.re/badge.svg)](https://github.com/Dominic789654/awesome-deepseek-harness)
5
+ [![Awesome DSH Plugin](https://beancookie.github.io/awesome-dsh-plugin/badge.svg)](https://github.com/beancookie/awesome-dsh-plugin)
6
+
7
+ **Topics**: `dsh` `deepseek-harness` `colamd` `themes` `css` `markdown` `pdf` `html` `skill` `ai-agent`
8
+
9
+ [ColaMD](https://github.com/cola-md/cola-md) Agent 原生 Markdown 编辑器的主题开发与导出工具。从网页、Word 文档和 PDF 中提取视觉格式,转换为经过范式验证的 CSS 主题文件,并可将 Markdown 导出为带主题样式的独立 HTML 或 PDF。
10
+
11
+ ## 功能特性
12
+
13
+ ### 主题提取
14
+
15
+ - **URL 提取** — 抓取网页,通过 `css-tree` 解析 CSS 规则,结合选择器特异性计算与内联样式合并,推导协调的主题色板
16
+ - **DOCX 提取** — 通过 mammoth 读取 Word 文档完整样式(H1–H6、表格、代码块),映射为主题变量
17
+ - **PDF 提取** — 采用多层启发式分析从 PDF 文本中提取排版元数据
18
+ - **自动检测** — `extract` 命令根据文件类型或 URL 协议自动路由到对应提取器
19
+
20
+ ### HTML / PDF 导出
21
+
22
+ - **`export-html`** — 将 Markdown 渲染为独立 HTML 文档,主题 CSS 内嵌,Mermaid 图表和 KaTeX 公式完整渲染
23
+ - **`export-pdf`** — 通过 Puppeteer(Chromium)将 Markdown 渲染为 PDF,用 `print-color-adjust: exact` 保住主题配色
24
+ - **`export`** — 批量导出多个文件或整个目录为 HTML 或 PDF
25
+ - 底层使用 `@bytechain.cn/colamd/renderer`(1.5.x,Milkdown)—— npm 2.x 包为 Electron 应用分发,不再提供库构建;`renderer.ts` 对 2.x 安装给出明确的降级提示。内置主题名优先解析本仓库的 2.7.7 契约 CSS,并通过 body 变量桥接保证 2.7.7 配色在 1.5.x 渲染器中不丢失(主题文件仍保持 `:root` 契约)。生成的主题按 **2.7.7 契约**编写(已对照 `@bytechain.cn/colamd@2.7.7` 发布包核验),升级应用无需改动主题
26
+
27
+ ### 主题管理
28
+
29
+ - **`set-theme`** — 配置默认导出主题、注册自定义 CSS 主题、在内置主题间切换
30
+ - 内置主题:`light`、`dark`、`elegant`、`newsprint`
31
+ - 自定义主题:任意 `.css` 文件注册后按名称引用
32
+ - **在 ColaMD 2.7.7 应用中使用主题** — 通过 *主题 > 导入主题* 或放入 `~/.colamd/themes/`。应用现自带内置 `elegant` 主题;导入我们的 `elegant.css` 前建议改名(如 `elegant-brick.css`)避免重名冲突
33
+
34
+ ### 验证与色彩系统
35
+
36
+ - **对比度引擎** — WCAG 2.1 相对亮度与对比度计算
37
+ - **范式验证器** — 15+ 条设计约束规则(CR、HR、SL、NT、BD、MP、FP、FS、SH),附带自动修复建议
38
+ - **色彩系统库** — 5 大色系 15 套预定义种子色板(莫兰迪、马卡龙、北欧、复古、薄荷绿)
39
+ - **2.7.7 契约校验器** — 检查死选择器(`#write`、`.ProseMirror`、`body.theme-custom`)、死变量(`--mermaid-*`、`--radius-*`、`--font-size-root` 等)、`pt` 单位与引用/代码块的纵向 padding
40
+ - **2.7.7 核验通过** — 全部 16 个主题已对照 npm 发布的 `@bytechain.cn/colamd@2.7.7` 逐项审计:`.cm-md-*` 钩子零漂移,`:root` 活变量与 `--pele-*` 覆盖全部被 2.7.7 渲染器消费
41
+ - **Pele 图表配色** — 9 个 `--pele-*` 变量由 `--code-block-bg` / `--code-block-text` / `--link-color` 推导,取代 Mermaid 20 变量
42
+
43
+ ### 安全与性能 (v0.4.0+)
44
+
45
+ - **SSRF 防护** — URL 提取器通过协议白名单验证并阻止私有网络访问,防止服务器端请求伪造攻击
46
+ - **输入验证** — CSS 文件经过扩展名、大小限制(最大 1MB)和内容有效性验证,防止 OOM 攻击
47
+ - **异步 I/O** — 非阻塞文件操作,提升批量导出时的响应速度
48
+ - **模板缓存** — LRU 式缓存(最多 10 个模板),支持 TTL 过期(30 分钟)和基于 mtime 的自动失效,确保内存使用稳定
49
+ - **统一错误处理** — 所有命令采用结构化错误码(`CLIError` + `ErrorCode`),提供一致的调试体验
50
+ - **资源清理** — 显式 Puppeteer 页面清理,防止僵尸进程和资源泄漏
51
+
52
+ ### CSS 模板引擎
53
+
54
+ 基于 Handlebars 的模板引擎生成 ColaMD 2.7.7 契约 CSS(≤300 行):
55
+
56
+ | 分区 | 内容 |
57
+ |------|------|
58
+ | 1 | 设计令牌 — `:root` 种子色板(11 变量)、14 个语义色、字体与度量、9 个 `--pele-*` |
59
+ | 2 | 编辑器 DOM — `#editor .cm-content` + `.cm-md-*`(标题、行内、引用、代码块、表格、缩进) |
60
+ | 3 | 导出 HTML — `.colamd-document` 语义标签配色层 |
61
+ | 4 | `@media print` — 只补打印保真(屏幕规则原样生效) |
62
+
63
+ ### 多 Agent Skill 通用支持
64
+
65
+ 从单一源文件自动生成 6 个 AI 编码代理的 Skill 定义:
66
+
67
+ | Agent | Skill 路径 | 前置元数据 |
68
+ |-------|-----------|-----------|
69
+ | **Claude Code** | `.claude/skills/colamd-themes.skill.md` | `name`, `description` |
70
+ | **OpenCode** | `.opencode/skills/colamd-themes/SKILL.md` | `name`, `version`, `user-invocable`, `allowed-tools`, `hooks` |
71
+ | **OpenClaw** | `.openclaw/skills/colamd-themes/SKILL.md` | `id`, `name`, `version`, `icon`, `author`, `homepage`, `metadata.openclaw.os` |
72
+ | **Hermes** | `.hermes/skills/tools/colamd-themes/SKILL.md` | `name`, `version`, `author`, `license`, `metadata.hermes.tags`, `prerequisites` |
73
+ | **Trae** | `.trae/rules/colamd-themes.md` | 纯 Markdown(无前置元数据) |
74
+ | **DeepSeek Harness** | `.dsh/skills/colamd-themes/SKILL.md` | `name`, `version`, `description`, `metadata.dsh.tags`, `prerequisites` |
75
+
76
+ **架构:**
77
+
78
+ ```
79
+ skills/colamd-themes/SKILL.md ← 规范源文件(单一事实来源)
80
+ │
81
+ ▼
82
+ skills/build-skills.sh ← 构建脚本(bash)
83
+ │
84
+ ├──→ .claude/skills/colamd-themes.skill.md
85
+ ├──→ .opencode/skills/colamd-themes/SKILL.md
86
+ ├──→ .openclaw/skills/colamd-themes/SKILL.md
87
+ ├──→ .hermes/skills/tools/colamd-themes/SKILL.md
88
+ ├──→ .trae/rules/colamd-themes.md
89
+ └──→ .dsh/skills/colamd-themes/SKILL.md
90
+ ```
91
+
92
+ **重新生成所有 Agent 的 Skill:**
93
+
94
+ ```bash
95
+ npm run build:skills # 生成全部
96
+ bash skills/build-skills.sh # 同上
97
+
98
+ # 或只生成单个 Agent:
99
+ bash skills/build-skills.sh claude
100
+ bash skills/build-skills.sh opencode
101
+ bash skills/build-skills.sh openclaw
102
+ bash skills/build-skills.sh hermes
103
+ bash skills/build-skills.sh trae
104
+ bash skills/build-skills.sh dsh
105
+ ```
106
+
107
+ 自定义 Skill 内容:编辑 `skills/colamd-themes/SKILL.md`,然后运行 `npm run build:skills`
108
+
109
+ ## 安装
110
+
111
+ ```bash
112
+ git clone git@github.com:byteuser1977/ColaMD-themes.git
113
+ cd ColaMD-themes
114
+ npm install
115
+ npm run build
116
+ ```
117
+
118
+ 开发模式(热加载):
119
+
120
+ ```bash
121
+ npx tsx src/cli.ts <command>
122
+ ```
123
+
124
+ ## 使用方法
125
+
126
+ 本包提供两个等效的 CLI 命令:
127
+
128
+ - **`colamd-themes`** — 完整命令名
129
+ - **`cthemes`** — 短命令别名(推荐频繁使用时使用)
130
+
131
+ 以下示例使用短命令 `cthemes`,你可以随时替换为 `colamd-themes`。
132
+
133
+ ### 从网页提取主题
134
+
135
+ ```bash
136
+ cthemes from-url "https://example.com" --name 我的主题
137
+ ```
138
+
139
+ ### 从 Word 文档提取
140
+
141
+ ```bash
142
+ cthemes from-docx 报告.docx --name 企业主题
143
+ ```
144
+
145
+ ### 从 PDF 提取
146
+
147
+ ```bash
148
+ cthemes from-pdf 论文.pdf --name 学术主题
149
+ ```
150
+
151
+ ### 自动检测来源类型
152
+
153
+ ```bash
154
+ cthemes extract 源文件.docx --name 自动主题
155
+ ```
156
+
157
+ ### 验证主题
158
+
159
+ ```bash
160
+ cthemes validate themes/我的主题.css
161
+ ```
162
+
163
+ ### 列出主题和色彩系统
164
+
165
+ ```bash
166
+ cthemes list
167
+ cthemes color-systems
168
+ ```
169
+
170
+ ### 导出为 HTML
171
+
172
+ ```bash
173
+ # 单文件,使用内置主题
174
+ cthemes export-html 文档.md -t elegant -o 输出.html
175
+
176
+ # 使用自定义主题
177
+ cthemes export-html 文档.md -t 我的品牌 -o 输出.html
178
+ ```
179
+
180
+ ### 导出为 PDF
181
+
182
+ ```bash
183
+ # 单文件
184
+ cthemes export-pdf 文档.md -t dark -o 输出.pdf
185
+
186
+ # 指定页面格式
187
+ cthemes export-pdf 文档.md -t elegant --format Letter -o 输出.pdf
188
+ ```
189
+
190
+ ### 批量导出
191
+
192
+ ```bash
193
+ # 多文件导出为 HTML
194
+ cthemes export docs/*.md --format html -t light -d 输出目录/
195
+
196
+ # 目录下所有 Markdown 导出为 PDF
197
+ cthemes export docs/ --format pdf -t elegant -d 输出目录/
198
+ ```
199
+
200
+ ### 主题管理
201
+
202
+ ```bash
203
+ # 设置内置主题为默认
204
+ cthemes set-theme elegant --default
205
+
206
+ # 注册自定义主题
207
+ cthemes set-theme 我的品牌 --css themes/swiss-design.css
208
+
209
+ # 注册并设为默认
210
+ cthemes set-theme 我的品牌 --css themes/swiss-design.css --default
211
+
212
+ # 注销自定义主题
213
+ cthemes set-theme 我的品牌 --remove
214
+ ```
215
+
216
+ ### 全部命令
217
+
218
+ | 命令 | 说明 |
219
+ |------|------|
220
+ | `from-url <url>` | 从网页 URL 提取主题 |
221
+ | `from-docx <file>` | 从 .docx 文档提取主题 |
222
+ | `from-pdf <file>` | 从 PDF 文档提取主题 |
223
+ | `extract <source>` | 自动检测来源类型并提取主题 |
224
+ | `color-systems` | 列出 15 套内置色彩系统 |
225
+ | `list` | 列出所有生成的主题 |
226
+ | `validate <file>` | 验证主题是否符合 2.7.7 契约与范式规则 |
227
+ | `set-theme <name>` | 设置、注册或注销导出主题 |
228
+ | `export-html <input>` | 导出 Markdown → 独立 HTML |
229
+ | `export-pdf <input>` | 导出 Markdown → PDF |
230
+ | `export <inputs...>` | 批量导出多个文件或目录 |
231
+
232
+ ### 提取选项
233
+
234
+ | 参数 | 说明 |
235
+ |------|------|
236
+ | `-n, --name` | 主题名称(默认从来源自动获取) |
237
+ | `-o, --output` | 输出 CSS 文件路径 |
238
+ | `-d, --themes-dir` | 主题目录(默认:`themes/`) |
239
+ | `-c, --color-system` | 强制指定色彩系统 |
240
+ | `-A, --auto-match` | 从提取的色板自动匹配色彩系统 |
241
+
242
+ ### 导出选项
243
+
244
+ | 参数 | 说明 |
245
+ |------|------|
246
+ | `-t, --theme` | 主题名称(内置、自定义或 CSS 文件路径) |
247
+ | `-o, --output` | 输出文件路径 |
248
+ | `-d, --output-dir` | 批量导出的输出目录 |
249
+ | `--format` | 批量导出格式:`html` 或 `pdf`(默认:`html`) |
250
+ | `--format` | PDF 页面大小:`A4`、`Letter`、`A3`(默认:`A4`) |
251
+
252
+ ## 工作原理
253
+
254
+ ### 主题提取管道
255
+
256
+ ```
257
+ 来源 (URL / .docx / .pdf)
258
+ │
259
+ ▼
260
+ ┌─────────────────────┐
261
+ │ 提取器 │ 解析来源 → 原始 ThemeStyle
262
+ └──────────┬──────────┘
263
+ │
264
+ ▼
265
+ ┌─────────────────────┐
266
+ │ 色彩系统匹配 │ → 15 套内置色板
267
+ │ 范式与契约验证 │ → WCAG 对比度 + 设计约束 + 2.7.7 契约
268
+ └──────────┬──────────┘
269
+ │
270
+ ▼
271
+ ┌─────────────────────┐
272
+ │ 模板引擎 │ Handlebars → 2.7.7 契约 CSS(≤300 行)
273
+ └──────────┬──────────┘
274
+ │
275
+ ▼
276
+ themes/<name>.css
277
+ ```
278
+
279
+ ### 导出管道
280
+
281
+ ```
282
+ Markdown 文件
283
+ │
284
+ ▼
285
+ ┌─────────────────────────────────────────────┐
286
+ │ Puppeteer(无头 Chromium) │
287
+ │ ┌───────────────────────────────────────┐ │
288
+ │ │ 本地 HTTP 服务 │ │
289
+ │ │ 提供 @bytechain.cn/colamd/renderer │ │
290
+ │ │ (同源加载,无 CORS 限制) │ │
291
+ │ └──────────────┬────────────────────────┘ │
292
+ │ │ │
293
+ │ createColaMDEditor({ editable: false }) │
294
+ │ applyTheme(主题名, 自定义CSS?) │
295
+ │ setMarkdown(内容) │
296
+ │ ensureAllPluginsRendered() ← 等待渲染完成 │
297
+ │ │ │
298
+ │ ┌──────────────┴──────────────┐ │
299
+ │ │ buildExportHTML() → .html │ │
300
+ │ │ page.pdf() → .pdf │ │
301
+ │ └─────────────────────────────┘ │
302
+ └─────────────────────────────────────────────┘
303
+ ```
304
+
305
+ ## 设计范式 (2.7.7 契约)
306
+
307
+ 完整规范文档:[`templates/theme-paradigm.md`](src/templates/theme-paradigm.md)。
308
+
309
+ ### 核心设计原则
310
+
311
+ | 原则 | 说明 |
312
+ |------|------|
313
+ | **变量化优先** | 所有颜色、字体、字号、间距一律通过 CSS 自定义属性定义,选择器中禁止裸值 |
314
+ | **模块化** | 主题 = 变量 + 极少量选择器微调,内置系统自动继承 |
315
+ | **语义化** | `--link-color` 而非 `--color-blue`;`--font-body` 而非 `--font-sans` |
316
+ | **可推导性** | 完整主题由 11 个种子令牌 + 3 组字体栈自动推导,AI Agent 只需修改 Section 1 |
317
+ | **打印保真** | 导出直接打印当前窗口,屏幕规则原样生效;`@media print` 只补 `print-color-adjust` |
318
+ | **无死规则** | CodeMirror 6 没有 `#write`、`.ProseMirror`、`<h1>`、`<blockquote>`,只用 `.cm-md-*` 行类 |
319
+
320
+ ### 对比度要求 (WCAG 2.1)
321
+
322
+ | 规则 ID | 级别 | 要求 | 阈值 |
323
+ |---------|------|------|------|
324
+ | CR-01 | MUST | 正文色 vs 页面底色 | ≥ 7:1 (AAA) |
325
+ | CR-02 | MUST | 次要文字 vs 页面底色 | ≥ 4.5:1 (AA) |
326
+ | CR-03 | MUST | 弱化文字 vs 页面底色 | ≥ 3:1 (AA 大文本) |
327
+ | CR-04 | MUST | 点缀色 vs 页面底色 | ≥ 4.5:1 (AA) |
328
+ | CR-05 | SHOULD | 内联代码背景 vs 页面底色区分度 | ≥ 1.5:1 |
329
+
330
+ ## 项目结构
331
+
332
+ ```
333
+ ColaMD-themes/
334
+ ├── skills/
335
+ │ ├── colamd-themes/SKILL.md # 规范 Skill 源文件
336
+ │ └── build-skills.sh # 生成各 Agent 专用文件
337
+ ├── .claude/skills/colamd-themes.skill.md # Claude Code Skill
338
+ ├── .opencode/skills/colamd-themes/SKILL.md # OpenCode Skill
339
+ ├── .openclaw/skills/colamd-themes/SKILL.md # OpenClaw Skill
340
+ ├── .hermes/skills/tools/colamd-themes/ # Hermes Skill
341
+ ├── .trae/rules/colamd-themes.md # Trae 规则
342
+ ├── package.json
343
+ ├── tsconfig.json
344
+ ├── themes/ # 生成的 CSS 主题
345
+ ├── src/
346
+ │ ├── cli.ts # CLI 入口
347
+ │ ├── index.ts # 公共 API 导出
348
+ │ ├── models.ts # ThemeStyle / SeedPalette 类型
349
+ │ ├── generator.ts # Handlebars → CSS 管道
350
+ │ ├── renderer.ts # Puppeteer HTML/PDF 导出引擎
351
+ │ ├── export-cli.ts # 导出 CLI 命令
352
+ │ ├── theme-store.ts # 主题配置持久化(异步 API)
353
+ │ ├── utils/
354
+ │ │ └── cli-utils.ts # 公共工具函数与错误处理
355
+ │ ├── color-utils.ts # 颜色操作工具
356
+ │ ├── contrast.ts # WCAG 2.1 亮度与对比度
357
+ │ ├── validators.ts # 范式验证引擎
358
+ │ ├── color-systems.ts # 15 套预定义种子色板
359
+ │ ├── docx-style-paradigm.ts # 文档样式规范
360
+ │ ├── extractors/
361
+ │ │ ├── base.ts # 提取器接口
362
+ │ │ ├── url-extractor.ts # URL → ThemeStyle
363
+ │ │ ├── docx-extractor.ts # DOCX → ThemeStyle
364
+ │ │ └── pdf-extractor.ts # PDF → ThemeStyle
365
+ │ └── templates/
366
+ │ ├── template.css # 范式配套 CSS 模板
367
+ │ ├── theme-paradigm.md # v4.0 设计规范(2.7.7 契约)
368
+ │ └── theme-template.hbs # Handlebars CSS 模板
369
+ └── tests/
370
+ ```
371
+
372
+ ### MCP 服务器配置
373
+
374
+ 在你的 MCP 客户端配置中添加(如 Chatbox、Cursor、Claude Desktop):
375
+
376
+ ```json
377
+ {
378
+ "mcpServers": {
379
+ "colamd-themes": {
380
+ "command": "node",
381
+ "args": ["./mcp-server/dist/index.js"],
382
+ "cwd": "/path/to/ColaMD-themes"
383
+ }
384
+ }
385
+ }
386
+ ```
387
+
388
+ 或直接运行:
389
+
390
+ ```bash
391
+ npm run mcp
392
+ ```
393
+
394
+ ## 技术栈
395
+
396
+ | 组件 | 库 | 用途 |
397
+ |------|-----|------|
398
+ | 运行时 | Node.js + TypeScript | ESM 模块,严格类型 |
399
+ | CLI 框架 | Commander.js | 参数解析、子命令分发 |
400
+ | CSS 模板 | Handlebars | 2.7.7 契约 CSS 生成 |
401
+ | HTML 解析 | Cheerio | URL 提取时的 DOM 遍历 |
402
+ | CSS 解析 | css-tree | CSS 规则 AST 解析 |
403
+ | DOCX 解析 | Mammoth | Word → HTML 转换 |
404
+ | PDF 解析 | pdf-parse | PDF 文本提取 |
405
+ | HTTP 客户端 | Axios | 网页抓取 |
406
+ | 浏览器引擎 | Puppeteer | 无头 Chromium,HTML/PDF 导出 |
407
+ | 编辑器引擎 | @bytechain.cn/colamd | 基于 Milkdown 的 Markdown 渲染器 |
408
+ | 终端输出 | Chalk + Ora | 彩色文本 + 加载动画 |
409
+
410
+ ## License
411
+
412
+ MIT