# up-Library-ingest

> Up Library Ingest

- Skill: `dqtx760/up-library-ingest` (Agent Skill)
- Install (CLI): `npx skillmds@latest add dqtx760/up-library-ingest`
- Raw SKILL.md: https://api.skillmd.com/api/skills/dqtx760/up-library-ingest/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: dqtx760 (https://skillmd.com/u/dqtx760)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/dqtx760/up-library-ingest

---

# /up-Library-ingest — 编译素材到 Library

## 触发条件

- 用户输入 `/up-Library-ingest` 或 `/up-Library-ingest <路径>`
- 用户说"编译素材"、"导入到知识库"、"ingest 这个文件"

## 编译范围

只编译以下 7 个目录中的 `.md` 文件，其他目录忽略：

| 编号 | 目录 | 内容 |
|------|------|------|
| 01 | `01-输入/01-Clipings/` | 网页剪藏 |
| 02 | `01-输入/02-get笔记/` | Get 笔记插件同步内容 |
| 03 | `01-输入/03-微信/` | 微信文章、收藏 |
| 04 | `01-输入/04-选题/` | 选题素材 |
| 05 | `01-输入/05-口喷稿/` | 口播/口喷稿 |
| 06 | `01-输入/06-微信读书/` | 微信读书笔记 |
| 07 | `01-输入/07-Daily/` | 日常记录 |

归档目录：`01-输入/archive/`

## 文件命名规范

优先使用中文名称，专有名词保留英文原名（产品名、人名等）。

| 页面类型 | 命名规则 | 示例 |
|---------|---------|------|
| Sources | `摘要-<中文标题>.md` | `摘要-Claude Code浏览器版.md` |
| Entities | `<中文名称>.md` | `卡帕西.md`、`The Vibe Companion.md` |
| Concepts | `<中文名称>.md` | `Lolm Wiki框架.md`、`本地知识库+大模型.md` |
| Syntheses | kebab-case 或中文均可 | `ai-coding-tools-对比分析.md` |

**判断原则**：
- 有明确中文名的 → 用中文（如"卡帕西"）
- 纯英文品牌/产品 → 保留英文原名（如 `The Vibe Companion.md`）
- 混合场景 → 中文为主，英文保留（如 `Lolm Wiki框架.md`）

## 执行流程

### 1. 扫描待编译文件

**指定路径时**（`/up-Library-ingest 01-输入/02-get笔记/Notes`）：只扫描该路径下的 `.md` 文件。

**未指定路径时**（`/up-Library-ingest`）：扫描上述 7 个目录中的所有 `.md` 文件。

两种情况都排除已归档的（`01-输入/archive/`）。如未指定文件，列出未处理的文件供用户选择。

### 1.5 构建已编译文件检查表（防重复）

Get 笔记重新同步会把已归档的文件重新拉到源目录，且文件名后缀会变（如 `_37` → `_38`）。需要在编译前排除已有对应页面的文件。

1. 用 grep 扫描 `Library/` 所有 `.md` 文件中 `sources:` 字段引用的源文件路径
2. 归一化文件名（去掉 `_数字` 后缀）建立检查表
3. 扫描源目录时，跳过检查表中已存在的文件
4. 记录「新文件」和「已编译跳过」的数量，供 Step 2 展示

```bash
grep -rh "^sources:" Library/ --include="*.md" \
  | grep -oP '01-输入/[^ ,\]]+\.md' \
  | sed 's/_[0-9]*\.md$//' \
  | sort -u > /tmp/compiled_sources.txt
```

### 2. 用户确认

向用户展示扫描结果，格式如下：

```
扫描结果：
- 新文件：XX 个（待编译）
- 已编译：XX 个（自动跳过）
- 合计：XX 个
```

等待确认后继续。如未指定文件，列出新文件供用户选择。

### 3. 7 个子代理并行编译

同时启动 7 个 Agent（前台并行），每个 Agent 负责一个目录：

| Agent | 目录 |
|-------|------|
| Agent-01 | `01-输入/01-Clipings/` |
| Agent-02 | `01-输入/02-get笔记/` |
| Agent-03 | `01-输入/03-微信/` |
| Agent-04 | `01-输入/04-选题/` |
| Agent-05 | `01-输入/05-口喷稿/` |
| Agent-06 | `01-输入/06-微信读书/` |
| Agent-07 | `01-输入/07-Daily/` |

**每个子代理的职责**：
1. 读取分配到的目录中的所有 `.md` 文件
2. 读取 `Library/index.md` 了解现有页面
3. 从每个源文件中提取：
   - **核心事实**：关键数据、结论、发现
   - **实体**：涉及的工具、产品、人物、公司
   - **概念**：涉及的方法论、框架、技术概念
4. 生成页面（**直接写入** `Library/` 对应目录）：
   - 来源摘要 → `Library/sources/摘要-<中文标题>.md`
   - 新实体 → `Library/entities/<中文名称>.md`
   - 新概念 → `Library/concepts/<中文名称>.md`
   - 已存在 → 增量合并，不覆盖旧内容
   - 信息冲突 → 新建 `## 知识冲突` 区块，保留两种说法
5. 返回处理结果清单（创建/更新的页面列表、冲突列表）

**子代理 prompt 模板**：

```
你是 Library 编译子代理，负责处理 `01-输入/<目录>/` 中的文件。

## 任务
1. 列出该目录下所有 .md 文件（排除 archive/）
2. 读取 `Library/index.md` 了解现有页面
3. 逐个读取源文件，提取实体、概念、核心事实
4. 按以下规范写入页面：
   - 来源摘要 → `Library/sources/摘要-<中文标题>.md`
   - 实体 → `Library/entities/<中文名称>.md`（中文名优先，专有名词保留英文）
   - 概念 → `Library/concepts/<中文名称>.md`
   - 已存在的页面 → 增量合并，冲突处加 `## 知识冲突`
5. 所有页面必须有 `## 关联连接`
6. 返回清单：创建了哪些页面、更新了哪些页面、有哪些冲突

## 命名规范
- 优先中文：卡帕西.md、Lolm Wiki框架.md
- 纯英文品牌保留原名：The Vibe Companion.md
- 来源摘要前缀：摘要-<中文标题>.md

## 页面模板
遵循 `Library/schema.md` 中的四类模板（Sources/Entities/Concepts/Syntheses）。
使用简体中文编写所有内容。
```

**执行方式**：7 个 Agent 使用 `run_in_background: false`（前台等待），在同一条消息中并行发出（同一 message 多个 Agent tool call）。如果某目录无待处理文件，该 Agent 直接返回"无待处理文件"。

### 4. 主代理：去重合并与汇总

所有子代理完成后，主代理执行：

1. **去重检查**：检查 7 个 Agent 是否创建了同名实体/概念页面，处理冲突（合并内容或保留更完整的版本）
2. **更新 `Library/index.md`**：汇总所有新页面，添加到对应分类下
3. **追加 `Library/log.md`**：
   ```
   ## [YYYY-MM-DD] ingest | 并行编译 N 个文件
   - **处理文件**: 列出所有源文件路径
   - **创建页面**: [[摘要-xxx]], [[实体名]], [[概念名]] ...
   - **更新页面**: [[已有实体]]（增量合并）
   - **冲突**: 无（或描述冲突及处理方式）
   - **并行代理**: 7 个，其中 X 个有文件，Y 个为空
   ```

### 5. 归档源文件

将已处理的源文件移动到 `01-输入/archive/`（保留原始目录结构）。

**⚠️ 02-get笔记 目录的特殊规则**：

`01-输入/02-get笔记/` 下有多个子目录和文件，归档时**只移动 `Notes/` 子目录下的 `.md` 文件**，不动以下内容：
- `get attachment/`（附件目录，不动）
- `Get Canvas.canvas`（画布文件，不动）
- `Get Moments.md`（动态文件，不动）

即：只归档 `01-输入/02-get笔记/Notes/**/*.md`，其余保持原位。

**归档后清理**：移动完文件后，删除源目录中遗留的空子目录（如日期文件夹），保持目录整洁。

## 约束

- **只编译**上述 7 个目录中的文件，其他目录（`01-输入/研究/`、`01-输入/素材/` 等）不处理
- **绝不修改** `01-输入/` 中的源文件内容
- **绝不读取** `01-输入/archive/` 中已归档的文件（除非用户明确要求）
- 每个 wiki 页面必须有 `## 关联连接`
- 使用简体中文编写所有内容
- 文件名优先使用中文，专有名词保留英文原名

