Files
wehub-resource-sync e2bed4b5a2
CI / Public checks (push) Failing after 0s
chore: import upstream snapshot with attribution
2026-07-13 12:27:29 +08:00

288 lines
8.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# html-anything CLI
从命令行直接将 Markdown(或纯文本/CSV/JSON)转换为精美排版的 HTML 文件,无需打开网页界面。
## 安装
```bash
# 1. 进入项目目录,安装依赖
cd html-anything
pnpm install
# 2. 构建 CLI
pnpm -F @html-anything/cli build
```
### 全局安装(可选)
构建完成后,可以创建全局链接:
```bash
# 在 cli 目录下创建全局链接
cd cli
npm link
# 之后可以在任意目录使用
html-anything --help
```
或者将以下别名添加到 `~/.zshrc``~/.bashrc`
```bash
alias html-anything="node /path/to/html-anything/cli/dist/run.js"
```
## 快速开始
### 1. 设置默认模板(推荐)
```bash
# 查看所有可用模板
html-anything templates
# 设置一个默认模板,之后 convert 时无需每次都指定
html-anything config set-default-template doc-kami-parchment
```
### 2. 转换 Markdown 文件
```bash
# 自动匹配模板(推荐:无需手动选模板)
html-anything auto article.md
# 仅查看匹配结果,不执行转换
html-anything auto article.md --show-match-only
# 使用默认模板转换(自动保存为 article.html
html-anything convert article.md
# 批量转换多个文件
html-anything convert file1.md file2.md file3.md -d ./dist
# 保存到指定文件
html-anything convert article.md -o output.html
# 指定自动保存目录
html-anything convert article.md -d ./dist
# 指定模板
html-anything convert article.md -t resume-modern
# 指定 AI agent
html-anything convert article.md -a claude --model sonnet
# 从标准输入读取(输出到 stdout)
cat article.md | html-anything convert -o page.html
```
### 3. 查看生成结果
```bash
# 用浏览器打开生成的 HTML
open output.html
```
## 命令详解
### `convert` / `auto` — 转换内容
两个命令共享以下通用参数:
| 参数 | 简写 | 说明 | 默认值 |
|------|------|------|--------|
| `input` | — | 输入文件路径,省略则从 stdin 读取 | stdin |
| `--agent <id>` | `-a` | AI agent ID | 自动检测第一个可用 agent |
| `--output <path>` | `-o` | 输出文件路径 | 自动保存为 `<输入文件名>.html`stdin 输入时输出到 stdout |
| `--output-dir <dir>` | `-d` | 自动保存目录 | 当前目录 |
| `--model <id>` | — | 使用的模型 | agent 默认模型 |
| `--format <type>` | — | 输入格式:markdown, text, csv, json | markdown |
#### `convert` — 指定模板转换
```bash
html-anything convert [input] [options]
```
用户明确指定模板 ID 来转换内容。
| 参数 | 简写 | 说明 | 默认值 |
|------|------|------|--------|
| `--template <id>` | `-t` | 模板 ID | 配置中的 default-template |
#### `auto` — 自动匹配模板并转换
```bash
html-anything auto [input] [options]
```
无需手动选择模板,CLI 自动分析内容主题,从 75 个模板中匹配最合适的模板,然后执行转换。
| 参数 | 简写 | 说明 | 默认值 |
|------|------|------|--------|
| `--force-ai` | — | 跳过关键词匹配,强制使用 AI summary | — |
| `--show-match-only` | — | 仅显示匹配结果,不执行转换 | — |
### `templates` — 列出模板
```bash
html-anything templates
```
列出所有 75 个可用模板,按类别分组显示。已设为默认的模板会标记 `(default)`
### `agents` — 列出 Agent
```bash
html-anything agents
```
列出系统中已安装的 AI agent CLI。`✓` 表示可用,`✗` 表示未安装。
### `config` — 配置管理
```bash
html-anything config # 查看当前配置
html-anything config set-default-template <id> # 设置默认模板
html-anything config set-default-agent <id> # 设置默认 agent
html-anything config set-model <id> # 设置默认模型
html-anything config reset # 重置所有配置
```
配置文件位于 `~/.config/html-anything/config.json`
## 支持的 AI Agent
html-anything 本身不做 AI 生成,它会自动检测并调用你系统里已安装的 AI CLI 工具(任意一个即可)来完成转换。支持的 AI CLI:
| Agent | 安装方式 |
|-------|----------|
| Claude Code | `npm install -g @anthropic-ai/claude-code` |
| OpenAI Codex | `npm install -g @openai/codex` |
| Cursor Agent | 安装 Cursor 编辑器后可用 |
| Gemini CLI | `npm install -g @google/gemini-cli` |
| GitHub Copilot CLI | `npm install -g @github/copilot-cli` |
| OpenCode | `npm install -g @open/open-cli` |
| Qwen Coder | `npm install -g @alibaba/qwen-coder` |
| CodeWhale | `npm install -g codewhale` |
| DeepSeek TUI | `npm install -g deepseek-tui` |
| Aider | `pip install aider-chat` |
| OpenClaw | 参考官方文档安装 |
## 常用模板推荐
| 模板 ID | 名称 | 适用场景 |
|---------|------|----------|
| `doc-kami-parchment` | Kami 羊皮纸文档 | 长文、报告、one-pager |
| `resume-modern` | 极简简历 | A4 单页简历 |
| `deck-swiss-international` | 瑞士国际主义 Deck | 演示文稿 |
| `deck-guizang-editorial` | 贵赞编辑墨水 Deck | 杂志风 PPT |
| `magazine-poster` | 杂志风海报 | 海报、宣传单页 |
| `blog-post` | 博客长文 | 技术博客 |
| `data-report` | 数据可视化报告 | 数据分析报告 |
| `card-xiaohongshu` | 小红书图文卡片 | 社交媒体图文 |
| `prototype-web` | Web 产品原型 | 产品原型 |
| `saas-landing` | SaaS Landing | 产品落地页 |
## 完整使用示例
```bash
# 1. 首次使用:查看有哪些模板
html-anything templates
# 2. 设置你最喜欢的模板为默认
html-anything config set-default-template doc-kami-parchment
# 3. 写一篇 Markdown 文章
cat > my-article.md << 'EOF'
# 我的项目总结
## 背景
这是一个关于...
## 成果
- 完成了 A 功能
- 优化了 B 模块
## 下一步
我们计划在 Q3 完成...
EOF
# 4. 一键自动匹配模板并转换(推荐)
html-anything auto my-article.md
# 5. 在浏览器中查看结果
open my-article.html
# 6. 如果只想看匹配结果
html-anything auto my-article.md --show-match-only
# 7. 如果想换个风格
html-anything convert my-article.md -t blog-post -o my-article-v2.html
# 8. 保存到指定目录
html-anything convert my-article.md -d ./output
```
## 开发
```bash
# 开发模式(无需构建,直接运行 TypeScript)
pnpm -F @html-anything/cli dev -- templates
# 类型检查
pnpm -F @html-anything/cli typecheck
# 构建
pnpm -F @html-anything/cli build
```
## 工作原理
### `convert` 命令流程
1. **模板加载**:从 `next/src/lib/templates/skills/` 加载 75 个 SKILL 模板,每个模板包含视觉风格定义和排版规则
2. **Prompt 拼接**:将全局设计指令 + 模板专属规则 + 用户内容拼接成一个完整的 AI prompt
3. **Agent 调用**:调用本地安装的 AI agent CLI(如 Claude Code),让 AI 根据 prompt 生成 HTML
4. **HTML 提取**:从 agent 的流式输出中提取完整的 HTML 文档
5. **输出**:将 HTML 写入文件或打印到 stdout
### `auto` 命令流程
```
用户内容
┌─────────────────────────┐
│ 第一层:强信号关键词匹配 │ ← 零 token,毫秒级
│ 命中 → 直接使用匹配模板 │
│ (简历→resume-modern 等) │
└──────────┬──────────────┘
│ 未命中
┌─────────────────────────┐
│ 第二层:规则打分匹配 │ ← 零 token,毫秒级
│ 内容 × 全部模板 metadata │
│ (tags + name + desc + │
│ scenario keywords) │
│ 置信度 ≥ 阈值 → 使用 │
└──────────┬──────────────┘
│ 置信度不足
┌─────────────────────────┐
│ 第三层:AI Summary 兜底 │ ← 仅在规则失配时
│ 提取内容前 800 字 │
│ → AI 判断主题类型 │
│ → 再次规则匹配 │
└──────────┬──────────────┘
执行转换
```
**匹配策略说明**
- **强信号**(~80 条规则):覆盖简历、定价、OKR、PRD、周报等高频场景,命中即定
- **规则打分**:遍历所有模板的 tags、名称、描述、场景关键词,累加得分
- **AI 兜底**:内容 ≥ 60 字且前两层均低置信度时,调用 AI 做一句话主题摘要,仅消耗极少量 token
- **最终兜底**:若所有层均失败,回退到 `deck-swiss-international` 通用模板
整个过程完全本地运行,不依赖任何外部 API key,使用你已有的 agent 订阅。转换过程中会显示动画进度指示器,展示已接收的文本块数和耗时。