> ## Documentation Index
> Fetch the complete documentation index at: https://docs.myrmagent.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Wiki 知识库

> 用设置树 UI、混合检索与聊天一键保存管理结构化知识。

# Wiki 知识库

Myrm 提供**编译型知识库（Wiki）**——不是让 Agent 解读的一堆 markdown 技能。专用引擎负责编译、索引、检索、审核与维护。同一工作流适用于**本地 WebUI**、**Tauri 桌面**与 **SaaS 云端**。

## 按智能体隔离的 Wiki

每个智能体可有**独立 Wiki 库**。在 **设置 → Wiki** 使用 **智能体范围** 下拉（或从智能体横幅打开 `/settings/wiki?agentId=<id>`）。统计、编译、维护与导入均作用于所选智能体。

**诚实边界（Agent Scope SSOT v2 落地前）：** **队列 Tab** 与 ingest SSE 会随所选智能体立即切换；若在 **待审** 或 **词条** Tab 内切换下拉，在 scope 全链路重载完成前请刷新页面或切 Tab，避免误把 A 库草稿批准进 B 库——这是下一版 scope 硬化要闭合的 P0 风险。

工件 **存入 Wiki** 与聊天入库会使用**当前会话的 agent id**，避免误写入默认库。

## 记忆 + Wiki 统一检索

智能体配置中**同时启用 Wiki 与 Memory** 时，Myrm 挂载 **`knowledge_recall_tool`**（`corpus=all`）— 一次工具调用同时检索长期记忆与该智能体 Wiki。记忆命中会写入 **citedMemoryIds** 供 UI 展示；Wiki 命中在工具结果文本中返回。

默认智能体已开启 Memory；在 **智能体配置 → 内置工具** 中打开 Wiki 即可走统一检索路径。

## Memory 引用按钮（刷新不丢）

当助手召回语义/情节记忆时，已完成消息的操作栏会显示 **Memory N** 按钮。打开 Sheet 可查看影响回答的记忆（类型、分数、命名空间、跳回来源会话）。

引用会**写入数据库**，**刷新页面后仍在** — 不依赖仅 SSE 的临时状态。

## 打开 Wiki 设置

1. 进入 **设置 → Wiki 知识库 (Wiki)**。
2. 使用标签页：
   * **概览** — 用途、统计、编译/维护操作、即席查询。
   * **词条管理 (Concepts)** — 文件夹树、CRUD、拖放。
   * **待审编辑** — LLM 草稿的人工审批/驳回。
   * **队列** — 文档摄取流水线状态。

## 编译过程实时可见（需打开 Settings Wiki 页）

在浏览器或桌面端 **设置 → Wiki** 页面保持打开时：

| 区域                 | 实时更新内容                                                                                                                                                   | 用户收益                                    |
| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------- |
| **队列 Tab**         | SSE（`GET /wiki/ingest/stream`）推送 pending/processing/failed 计数与 compile 熔断状态（约 5s）；**编译阶段条**显示结构扫描 → 语义编译 → 后处理（含 facet 数 / 快速路径标签）；计数与失败列表不一致时自动 REST 对齐 | 批量入库无需点刷新；API Key 失效时出现 amber 暂停条，可一键恢复 |
| **概览 Compile 操作区** | 同一 SSE `compile_run.phase` 在 Compile/Maintain 按钮上方显示共享阶段条                                                                                                | 主路径编译不必切 Queue Tab 也能看到进度               |
| **概览 → 原始来源树**     | bulk compile 中 `tree_sync_required` 触发 silent `GET /wiki/raw/tree`，三色 ingest 点 live 更新                                                                   | 文件从「未编译灰点」变「已入库绿点」可即时看见，建立迁移信任          |
| **词条 Tab 树**       | 同上信号在词条 Tab 挂载时刷新 concept 树                                                                                                                              | 关联源过期的 amber 点随编译推进更新                   |

<Note>
  实时推送仅在 Settings Wiki 页 EventSource 连接期间生效；关闭设置页即停止 SSE——这是 GUI 范围内的可见性设计，不是后台守护进程。Hermes SKILL / OpenClaw 纯 MD 文件夹等竞品无等价 Queue 面板 + compile 中树 badge live。
</Note>

## 外部来源同步（Settings 概览）

**设置 → 知识库 → 概览 → 外部来源** 可将收藏邮件与 RSS 定时或手动拉入 `wiki/raw/`：

| 来源                   | 配置方式                                               | 结果                                               |
| -------------------- | -------------------------------------------------- | ------------------------------------------------ |
| **Gmail 标签**         | 集成里连接 Google；开启 Gmail 同步；填写标签名（大小写不敏感）             | 该标签下邮件变为 `wiki/raw/gmail/` 下的 Markdown           |
| **Google Drive 文件夹** | 集成里连接 Google；开启 Drive 同步；填写文件夹 ID（`root` = 我的云端硬盘） | 文档/表格/幻灯片/PDF 导出为 `wiki/raw/gdrive/` 下的 Markdown |
| **RSS**              | 每行一个 URL                                           | 条目写入 `wiki/raw/rss/`                             |
| **集成镜像**             | 开启「镜像集成同步」                                         | 集成同步的新条目可写入 raw                                  |

**零 LLM pull：** 拉取 Gmail/RSS **不调用**对话模型。仅当配置了模型且开启 **同步后自动编译** 时才会消耗 LLM。

**定时任务：** **稍后读知识内化** 蓝图每日运行（第二大脑预设常搭配 **知识库晨间摘要**）。Router 任务 `__wiki_source_sync__` 在服务端执行，**不挂载 Agent 工具** — 安全、确定性自动化。

**可观测性：** 卡片展示上次同步时间、新增/跳过/失败计数，以及首条错误（如 `Gmail label not found`）。

<Note>
  **诚实边界：** Gmail 标签与 Drive 文件夹 ID 均需**手动输入**，无标签下拉或 Drive Picker。请在 Gmail 中创建同名标签（预设默认 `ReadLater`）。若已连接 Google 但缺少 Drive 只读 scope，卡片会显示**重连提示**（`google_drive_authorized: false`）。**不支持 OneDrive**（无 Microsoft OAuth 基建）。配错会在同步结果中显示，不会静默忽略。
</Note>

**测试（2026-07-30）：** gdrive 3 + gmail/rss/status/oauth 12 + state/config/defaults/blueprint/hygiene/second\_brain 15 + gmail\_html 2 = **32 pytest 通过**（mock Gmail/Drive API；本轮未跑 Chrome MCP）。

**回归测试（2026-07-29 复测）：** Harness 6 raw\_gate + 48 persistence/raw security + 21 apply/canonical + Server 9 wiki\_apply/import raw\_gate + 40 obsidian\_adapter pytest（分批 \~18s）。本轮未跑浏览器 MCP E2E。

## 编译期演变合成（CCSP）

**编译 Wiki** 时，Step 2.5 会在常规文章生成之后运行 **编译期矛盾合成（CCSP）**：

| 步骤              | 行为                                                     | 用户收益                           |
| --------------- | ------------------------------------------------------ | ------------------------------ |
| **配对（零 LLM）**   | 关联概念、共享 slug 自动配对                                      | obvious 候选不额外消耗 token          |
| **检测（LLM，有上限）** | 每次 compile 最多 3 组高置信跨概念事实冲突                            | 不用逐篇阅读也能发现「两页说法不一致」            |
| **暂存（HITL）**    | 演变草稿进入 **待审编辑** — **不自动发布**                            | 你决定优先级后再入库（比教程里 Agent 自动写页更可控） |
| **批准 → 双向链接**   | 两个关联概念的 Timeline 均追加指向 `Comparisons/.../Evolution` 的条目 | 在 Obsidian 或树 GUI 从任一侧追溯冲突     |
| **概览 badge**    | 有待审演变时 Overview 显示 violet 计数；点击 → 待审 Tab 并筛选 **演变合成**  | 编译后不必自己找 Pending Tab           |

**实时计数：** ingest SSE 推送 `synthesis_pending_count`；保持 Settings → Wiki 打开时 Overview 可静默刷新。

**相对 OpenClaw 的差异化：** OpenClaw 写 `reports/contradictions.md` 并依赖 CLI 跟进。Myrm 把同等 intelligence 放在 **Settings 待审队列 + GUI 筛选 + 双向 Timeline** — 更贴合 Article 8「请你决定哪条定义优先」。

**诚实边界：** 仅 cross-concept（同 batch 同名 merge 跳过）。这是 Wiki 编译合成，与 Memory **ConflictCard** 通知是不同链路。

**测试（2026-07-29）：** Harness 8 + 12 + Server 2 = **22 passed**。本轮未跑浏览器 MCP E2E。

## 在树中管理词条

在 **词条管理**：

* **新建文件夹** — 选择可选父文件夹（根或嵌套），命名。
* **重命名 / 删除** — 悬停行；删除显示完整路径及将移除的条目数。
* **拖放** — 在父级间移动文件夹或词条（服务端更新链接引用）。
* **详情面板** — 选中词条查看富渲染内容（Mermaid 图表、KaTeX 数学公式、GFM 表格、代码语法高亮、暗色模式），或切换到原始 Markdown 编辑。
* **四 Tab 编辑（Edit）** — 经 `POST /wiki/apply` 窄写（非整页 PUT）：
  * **Compiled Truth** — 仅 patch `## Compiled Truth` 区块。
  * **Timeline** — 只追加条目；重复行会 toast 跳过。
  * **Metadata** — Settings 路径下 **replace** tags/aliases（Agent merge 走不同 caller 门禁）。
  * **Advanced** — 整页 replace；**仅 Settings**（`caller=settings`）。Agent/聊天不可用此 op。

每次保存携带页 **租约**（`if_match` = 上次 `content_hash`）。若其他 Tab/客户端已先改页，会 toast **页冲突** — 请刷新后重试。

## 受控写入面（`POST /wiki/apply`）

所有 Wiki 变更统一走 **`POST /wiki/apply?caller=`**（`settings` | `agent` | `chat`）。

| 操作                      | 调用方                               | 作用                                |
| ----------------------- | --------------------------------- | --------------------------------- |
| `create_note`           | 存入 Wiki、Agent（opt-in）             | 新建词条 + 受管区块 + 溯源 frontmatter      |
| `update_metadata`       | Settings Metadata Tab；Agent merge | tags / aliases / sources / claims |
| `patch_compiled_truth`  | Settings Truth Tab                | 仅替换 Compiled Truth                |
| `append_timeline`       | Settings Timeline Tab             | Timeline 只追加 + 去重                 |
| `replace_full_document` | 仅 Settings Advanced Tab           | 整页 replace — agent/chat **403**   |

**写时去重：** `canonical_id` 与 alias 索引在创建时拒绝近义重复页（HTTP 409 `canonical_conflict`）。存入 Wiki 时若同主题笔记已存在，会友好 toast 而非静默重复建页。

**诚实边界：** Agent `wiki_apply_tool` 仍为 CSV 形参、不自动 `if_match`；Settings GUI 与 Save to Wiki 路径已完整。

## Raw 证据层闸门（导入与 ingest）

稳定路径写入 `wiki/raw/` 经 harness **`publish_raw`** 闸门 — 与 concept 层 `POST /wiki/apply`（#12+#13）互补。

| 场景                            | 默认行为                        | 用户收益                          |
| ----------------------------- | --------------------------- | ----------------------------- |
| **重复导入** 文件夹 / ZIP / Obsidian | 已存在且**内容不同**的 raw **跳过**    | 已 curated 的 raw 笔记不会被静默覆盖     |
| **冲突弹窗**                      | 列出跳过路径；可选填 reason **全部覆盖**  | GUI 显式决策，无需翻文件系统              |
| **审计**                        | 覆盖事件写入 **`wiki/log.md`**    | 可追溯 raw 被替换的原因                |
| **Agent ingest**              | `wiki_ingest`（caller=agent） | 高置信 prompt injection **写前拦截** |
| **未改文件**                      | 同 hash 跳过，**不重复 compile**   | 重复导入省 LLM 编译费                 |

**诚实边界：** timestamp/uuid 路径（research、artifact、会话归档）故意不 gate；无专用 Raw 审计页，可读 `wiki/log.md`。

## 归档安全治理（敏感内容）

所有 durable Wiki 写入共享 harness 持久化扫描 SSOT（`core/security/persistence/content_scan.py`）：

| 阶段                     | 闸门                                                     | 用户收益                                       |
| ---------------------- | ------------------------------------------------------ | ------------------------------------------ |
| **导入 / ingest / 会话归档** | `publish_raw` 预扫描（`WIKI_RAW`）                          | API Key 等凭证形文本在落盘前 **拒收** 或 **脱敏**         |
| **编译发布**               | `publish_concept_article`（`WIKI_PUBLISH`）              | 不可脱敏凭证不会静默成为 canonical 页                   |
| **Settings 导入反馈**      | `WikiImportSecurityDialog`                             | 文件夹/ZIP/Obsidian 导入后列出 blocked/redacted 路径 |
| **擦除证据**               | Overview raw 树 → 填写 reason → `DELETE /wiki/raw/{path}` | 误导入可删；依赖页 re-anchor；事件写入 `wiki/log.md`     |
| **维护**                 | `wiki_maintain` 扫描既有 raw vault                         | 捕获旧文件；**不可脱敏凭证会从磁盘删除**（非仅计数）               |

**诚实边界：** 尚无安全统计面板；Settings/chat 导入 injection 仅 warn；**agent `wiki_ingest` 拦截高置信 injection**。Agent 被拦路径以工具错误呈现，无 Settings 弹窗。

<Note>
  Wiki 文件在磁盘上仍为纯 Markdown。Obsidian 等编辑器可打开同一库；Myrm 在其上增加索引、检索与 GUI 管理。
</Note>

## 知识消费闭环

Wiki 不是「写完就忘」的死水。Myrm 用 **12 条代码级路径** 把知识库和 Agent 连起来（无需像 OpenWiki 那样手工维护 AGENTS.md）：

* **四工具自动挂载** — 在智能体配置中启用 Wiki 后，ingest / compile / query / maintain 随对话可用。
* **大文件上传引导** — 上传 PDF 等大文档时，系统自动注入「先 wiki\_ingest 再 wiki\_query」指令，避免整文件塞进 prompt。
* **Deep Research 入库** — 深度研究报告经共享 archiver 写入同一 Wiki 库并触发编译。
* **聊天一键保存** — 任意助手消息可「存入 Wiki」，带来源 frontmatter。
* **压缩后会话笔记归档** — 上下文压缩完成时，会话笔记自动归档到 Wiki（在摘要持久化之后触发，而非每次 note 保存）。
* **设置页即席查询** — 概览标签直接问 Wiki、编译、维护，并展示库健康状态。

## Memory → Wiki 自动桥接

在智能体配置中**启用 Wiki** 后，四条自动入库路径经统一 **`publish_raw`** 写入同一 vault（Roadmap #16 — 无独立 per-source 开关）：

| 来源                         | 触发时机                   | 行为                              |
| -------------------------- | ---------------------- | ------------------------------- |
| **Deep Research**          | 研究 lane 完成             | 报告归档 → 安全扫描 → 编译队列              |
| **回合 digest**              | SkillAgent 回合结束 review | 高信号 digest 以 `PUT_IF_ABSENT` 发布 |
| **Consolidation insights** | 记忆整合回调                 | 去重/覆盖后的结构化 insights 桥接入库        |
| **Session notes**          | 压缩后归档                  | 摘要持久化后会话笔记归档（非每次 note 保存）       |

**安全与门控：** 全部路径经 **#15 归档安全**（凭证拒收/脱敏）与 **#14 raw gate**（稳定路径禁止 silent overwrite）。**`enable_wiki`** 为智能体级总开关 — Settings 无 per-source 开关。

**召回方向：** Wiki 内容通过 **`knowledge_recall_tool(corpus=wiki|all)`** 按需 pull 进对话（Wiki+Memory 双开时）— 非 OpenClaw 式每轮 push digest。

**测试：** 37 项定向 pytest（Harness 18 + Server 19，2026-07）。

## Wiki 与 Memory 写入边界

智能体**同时启用 Wiki 与 Memory** 时，Myrm 防止长文污染紧凑记忆：

| 路径                           | 护栏                                                | 用户收益                               |
| ---------------------------- | ------------------------------------------------- | ---------------------------------- |
| Agent **`memory_save_tool`** | 硬拒 document-like 的 knowledge/event（>800 字或 ≥3 标题） | Agent 被引导使用 **`wiki_ingest_tool`** |
| **回合结束 auto-extract**        | persist 硬滤 + 提取 prompt 跳过                         | 长文摘要不会进入 semantic memory           |
| **存入 Wiki** / **外部来源**       | 产品化长文路径                                           | 邮件/Drive/RSS/聊天 → vault raw → 可选编译 |

**对比 Hermes：** 扁平 MEMORY.md **2200 字符上限** — 无编译型 Wiki 与 `corpus=all` 统一检索。

**测试：** 25 项定向 pytest（Harness wiki boundary 模块，2026-07）。

## Karpathy 认知地图三件套（index / log / hot）

编译、维护、导入或审批后，引擎**确定性**维护 vault 根目录三文件（零额外 LLM 成本）：

| 文件           | 作用                                          | 用户收益                                  |
| ------------ | ------------------------------------------- | ------------------------------------- |
| **index.md** | 按页面 `type` 分组的概念目录，摘要优先来自 L0 `.abstract.md` | Obsidian/任意编辑器打开即可浏览；迁移用户「看得见」结构化库    |
| **log.md**   | 人类可读操作审计，最新在上                               | 回溯「何时编译/导入/审批」                        |
| **hot.md**   | 近期操作、待编译队列、待审提示                             | Settings 查询与 wiki\_query 在无匹配时诚实展示库状态 |

**与竞品差异（诚实）：**

* **强于 Molio**：hot 仅在 wiki 查询路径使用，**不**注入 agent 全局 system prompt → prompt cache 更安全
* **强于 Hippocampus**：事件驱动刷新，非每会话盲注 hot
* **不做**：Molio 式 LLM 重写 hot（token/幻觉成本）；全局 middleware hot（破坏 cache）

Settings **概览** 自动展示三件套就绪状态；无需 CLI。

## 统一 Vault 路径

所有 Wiki 数据位于**同一工作区下的单一库目录**。设置页、REST API、Agent 工具、存入 Wiki、Deep Research 与压缩归档共用该路径；启动时自动迁移旧路径。

在 **设置 → Wiki → 概览** 中，统计信息随页面打开自动加载，并显示：

* **知识库已就绪** — Wiki 目录存在且可写。
* **旧库已迁移** — 历史路径已合并到当前库。
* **知识目录 / 活动日志 / 近期上下文** — Karpathy 式三件套（`index.md`、`log.md`、`hot.md`）是否在编译、导入或审阅后已构建并保持新鲜。

无需再依赖 CLI「doctor」式自检，产品内即可确认库状态。

## Project 工作区（file-centric SSOT）vs Wiki 导入

**两条路径，按场景选择：**

| 目标                                  | 用法                                            | 用户收益                                 |
| ----------------------------------- | --------------------------------------------- | ------------------------------------ |
| 继续在 Obsidian/Typora/VSCode **原盘编辑** | **设置 → 项目 → 挂载同步目录**（或 OpenClaw 迁移 Result 绑定） | Agent 读写 **同一份文件**；Files 面板 SSE 自动刷新 |
| 把笔记 **复制进 Wiki 编译库** 做混合检索          | **设置 → Wiki → 导入 Obsidian/ZIP**               | 适合检索/编译/HITL 审阅 — **不是**实时同步镜像       |

竞品迁移完成后，用 **Migration Result vault 绑定卡片**，首条对话即指向真实 vault，无需手动建 Project。

单次任务 scope（不建 Project）：消息输入框 **文件夹图标**（`WorkspaceDirPicker`）绑定本会话目录。

## 在对话中引用 Wiki（@wiki:）

在聊天输入框中键入 `@wiki:` 即可实时搜索 Wiki 词条并自动补全。选择词条后，其编译内容将注入当前消息上下文：

* **`@wiki:关键词`** — 下拉列表仅显示匹配的 Wiki 词条（模糊匹配词条名）。
* **选择词条** — 输入框变为 `@wiki:词条名` 加可移除标签，与 `@staged`、`@diff` 操作方式一致。
* **Agent 接收** 词条内容在 `<mentioned_files>` XML 块中，确保回答精确引用知识库。
* **组合引用** — `@wiki:项目架构 @staged` 同时发送 Wiki 文章和 Git 暂存变更。
* **普通 `@` 搜索** — 输入 `@关键词`（不带 `wiki:` 前缀）显示 Agent、Wiki 词条和文件的混合列表。

精确、按需地控制 Agent 使用哪些知识 — 无需依赖自动检索或提示工程。

## 将聊天消息存入 Wiki

任意**已完成的助手消息**，在消息操作栏用 **存入 Wiki**（书本图标）：

1. 在树选择器中选文件名与可选目标文件夹。
2. 确认保存 — 经 `POST /wiki/apply` 的 **`create_note`** 写入（受管 Compiled Truth + Timeline 骨架）。
3. 每次保存添加 YAML frontmatter：`source_chat`、`source_message`、`saved_at` 便于追溯。
4. 若同 **canonical 主题** 的笔记已存在，会 toast **canonical 冲突**，而非静默重复建页。

## 页面类型契约（frontmatter `type`）

每条 Wiki 页面必须在 YAML frontmatter 中声明 **页面类型**。在编译、待审批准、以及 Linter 维护时**代码级强制**，而非仅靠 prompt 建议。

**允许值：** `source`、`entity`、`concept`、`comparison`、`overview`、`question`、`session`（与 Google OKF 兼容的子集）。

| 场景                    | 行为                                                    |
| --------------------- | ----------------------------------------------------- |
| **编译**                | LLM 产出经 compile gate；缺 `type` 默认 `concept`，非法值拒绝写入    |
| **待审批准**              | frontmatter 无效时 Approve 返回 **422**，前端友好 toast         |
| **维护 / Linter**       | 自动检测缺失或非法 `type`，Maintain 时可修复                        |
| **Repair Page Types** | 设置 → Wiki → **Repair Page Types** 扫描 vault 并为历史笔记推断类型 |
| **Obsidian 导入**       | 按路径/内容启发式推断；写回保留 `type`、`sources`、`provenance`        |

**诚实边界：** 聊天「Save to Wiki」当前仅写溯源字段；可对这类笔记运行 **Repair Page Types** 或 **Maintain** 补全 `type`。Settings Advanced 整页 replace 未硬拦截 frontmatter — 下次 Maintain 时 Linter 自愈。

闭环：**对话 → 一键归档 → 可检索知识**。

## 检索与维护

* **查询 Wiki**（概览标签）— 自然语言问答走 **零 LLM** 检索路径：从认知 index、sidecar 摘要、FTS5 与关键词种子出发，经有预算的 best-first 图扩展收敛后，组装 L0/L1/L2 片段与声明/证据卡片。
* **检索模式**（概览 → 查询 Wiki）— 可选 **综合检索**（索引、目录与文章均衡召回）或 **声明优先**（优先含 frontmatter claims 与关联证据的概念；无匹配时自动回退综合检索）。OpenClaw 有类似 `raw-claim` 但仅 CLI；Myrm 在 Settings 下拉即可切换。
* **引用可信度** — 回答卡片展示 claim 文本、evidence 路径与 `snapshot_status`，便于判断引用内容是否仍与 vault 磁盘一致。
* **证据引用 Drawer（Closure v2）** — Chat 或 Settings 点 citation chip：展示 claim 状态 badge（仅 contested/unsupported 降噪）、**编译置信度百分比**（显式设置时）与 **raw 摘录**；检索侧 fresh supported claim 优先于 stale contested。
* **Settings 检索路径 trace** — Query 结果下方卡片展示 index 命中、seeds、sidecar 目录与最终概念，便于排障「为何命中这条」。
* **编译 / 维护** — 增量编译、并发批量摄入（Semaphore 限流并行处理，多文档编译提速约40%）、视觉化指导（编译器自动引导 LLM 在合适位置产出 Mermaid 图表、GFM 表格和代码块，提升信息密度）与 linter 驱动健康修复（断链、漂移、孤立概念/桥接节点知识盲区检测等）。
* **结构健康 Stats**（Overview 页）— 零 LLM 扫描：markdown 断链、Obsidian `[[wikilink]]` 断链（路径 + 唯一 title 别名）、缺 frontmatter `type`；amber badge 在编译、导入、词条编辑、待审审批、文件夹删除后即时刷新；Harness CI 跑 4 case 检索回归门。无需 CLI `wiki lint`。
* **图书馆 / Brain 视图** — 3D 知识图谱与词条探索（因部署而异）。
* **知识图谱** — 编译器自动抽取概念及其关联关系，构建加权边图谱（直接链接 + 来源重叠 + 共同邻居三维权重）。LPA 社区检测自动将相关概念分组；盲区分析高亮孤立节点和跨领域桥接概念。
* **智能上下文回忆** — 开始新对话时，Agent 自动根据当前话题检索相关记忆和知识，无需手动指引文档。
* **矛盾检测** — Claim Graph 追踪 `contradiction_status` 和 `CONTRADICTED_BY` 关系。巩固流程自动标记冲突事实，交由人工审核而非静默覆盖。
* **联邦检索** — 当存在多个 Wiki 命名空间或发布目录时，查询自动跨源检索并以 RRF 排序合并结果，确保全面覆盖无需手动切换范围。

## 从 Obsidian 导入

Myrm 提供专用 **Obsidian Vault 导入器**，完整保留笔记、标签和图片：

1. 在 **设置 → Wiki** 中滚动到导入区域。
2. **Tauri 桌面端**：点击 **导入 Obsidian Vault** 并选择本地 vault 目录。
3. **WebUI / 云端**：点击 **上传 Obsidian ZIP** 并上传 vault 压缩包。

导入器处理：

* **YAML frontmatter** — 行内数组（`tags: [a, b]`）与 YAML 缩进列表（`tags:\n  - a\n  - b`）双格式，含 `aliases`、`created`、`updated`。
* **图片嵌入** — `![[image.png]]` 语法自动改写为标准 Markdown 并将图片复制至 wiki 资产目录。
* **`.canvas` 文件** — 空板或无可用文本时跳过；含 text 节点的白板按 JSON Canvas 1.0 提取为 Markdown（文本内容及 file/link 标签）。
* **编码容错** — UTF-8 解码失败的文件会报告但不阻塞整体导入。
* **冲突安全 re-import** — raw 已存在且内容不同时**默认跳过**；弹窗可填 reason 覆盖（记入 `wiki/log.md`）。

导入完成后弹出 toast 通知，显示已处理笔记数、提取标签数和迁移图片数。导入的文件自动进入编译队列并被索引。

## 在 Obsidian 中打开与导出（#22 + #22b）

Settings → Wiki → Overview 的 **Obsidian Vault** 卡片提供反向打开与导出（与上方「导入」互补）：

| 动作                 | Local / Tauri                                                                                                | Cloud                  |
| ------------------ | ------------------------------------------------------------------------------------------------------------ | ---------------------- |
| **在 Obsidian 中打开** | 已安装 Obsidian 时可用（`obsidian_launch_available`）— macOS `open -a`、Windows `%LocalAppData%`、Linux `obsidian` CLI | 不可用（UI 隐藏）             |
| **在文件夹中显示**        | Finder / Explorer / 文件管理器定位 wiki 目录                                                                          | 不可用                    |
| **复制 vault 路径**    | 一键复制 `{harness_dir}/wiki/agents/{agent}/`                                                                    | 不可用                    |
| **下载 Obsidian 包**  | 完整 vault ZIP + `.obsidian/graph.json`（按 frontmatter `type` 预着色）+ `README-OBSIDIAN.txt`                       | 同左（下载后在本地 Obsidian 打开） |

解压后：**Obsidian → 打开文件夹作为库** → 打开 Graph 视图即可看到按页面类型着色的节点。

**回归测试（2026-07-29）：** 14 项定向 pytest（跨平台启动 + reveal + 导出 · 无 Chrome MCP E2E）。

<Note>
  **与 Project 挂载的分工：** 若你在 **自有磁盘** 用 Obsidian/Typora 双向编辑，请用 **设置 → 项目 → 挂载同步目录**。#22 针对 **Myrm 托管的编译库** 一键打开或快照导出。
</Note>

<Note>
  **诚实边界：** Cloud 无法本地 reveal；未安装 Obsidian 时隐藏「在 Obsidian 中打开」（「在文件夹中显示」+ 下载包仍可用）；Windows 尚未探测 `%ProgramFiles%\Obsidian\Obsidian.exe`；不提供 `obsidian://` 深链。
</Note>

## Vault 本地 git 快照（#23）

开启 **版本控制** 后（Local/Tauri 在 session archive 等路径会默认开启），Myrm 在 vault 内维护 **真实 `.git` 目录**（非 shadow-git 插件）：

| 能力              | 时机                                          | 用户收益                                     |
| --------------- | ------------------------------------------- | ---------------------------------------- |
| **自动 commit**   | 编译、导入、apply、审批、删除等 vault 变更（13 处 SSOT hook） | 无需手工 `git init` 即可审计历史                   |
| **Overview 提示** | 设置 → Wiki → Overview                        | git 激活时显示最近快照 commit                     |
| **标准 git 工具链**  | 任意 git 客户端或 Obsidian Git 插件                 | 对 Myrm 编译的同一份文件做 `git log` / `git blame` |

**回归测试（2026-07-29）：** 5 项 #23 定向 pytest（`test_wiki_vault_git_mutation` 2 + Harness `test_vault_git` 3 · 无 Chrome MCP E2E）。

<Note>
  **诚实边界：** Settings 无提交列表 UI — 深度历史请用 `git log` 或 Obsidian Git。下载 Obsidian 包 ZIP **不含** `.git`。Cloud 不承诺 vault git。
</Note>

## 搜索已导入图片（Obsidian assets）

在 **设置 → 模型** 中配置 **Vision Fallback Model** 后，Myrm 会用视觉模型为 `wiki/assets/` 下的图片生成 caption 并建立索引（FTS5 + 可选向量混合检索）。**无需**单独的 image search 工具即可找图：

* **`wiki_query` / `knowledge_recall(corpus=wiki|all)`** — 用自然语言问「架构图在哪」可返回 asset 命中，Chat **Sources 带缩略图** citation。
* **设置 → Wiki → Overview** — `asset_index` badge 显示已索引/待处理/失败数量；有图但未配 vision 时显示 amber 提示并引导至模型设置。
* **导入链路** — Obsidian 导入会后台调度 asset 索引；compile/maintain 也会刷新 asset 索引。

<Note>
  **诚实边界：** 这是 **文字找图**（caption 检索），不是 **以图搜图**（multimodal embed）。OpenViking 有后者；OpenClaw/Hermes 等普遍 **没有** Obsidian asset caption 索引管线。未配 vision 时图片会导入但 **不可搜索** — Overview 提示已覆盖；Chat 不会出现「有缩略图但 caption 为空」的误导路径。
</Note>

## URL 入库与视频字幕提取

向 Wiki 导入 URL 时，Myrm 通过 **CrawlEngine** 统一处理所有链接：

* **YouTube 视频** — 自动提取字幕文本（支持 10+ 种语言），存入的是可搜索的文字内容而非 HTML 页面代码。
* **Bilibili 视频** — API 直连提取字幕，无需 DOM 解析。
* **公众号文章** — 多层 fetcher 自动应对微信反爬（HTTP → 浏览器 → 隐身模式逐级降级）。
* **普通网页** — CrawlEngine 自适应选择最优抓取策略，JS 渲染页面自动升级到浏览器引擎。
* **高可用降级** — CrawlEngine 故障时自动 fallback 到 `secure_get` + Markdown 转换，保证入库不中断。

用户只需丢一个链接给 Agent 说「导入这个」，系统自动识别 URL 类型并选择最优提取方式。

## 文档解析与 OCR

向 Wiki 导入文档时，Myrm 自动选择最优解析策略：

* **文字型 PDF** — pdfplumber 并行提取 + 书签注入 + 字体标题检测。
* **扫描型 PDF** — 文字稀少时（\< 200 字符）自动识别，整页渲染为 PNG 交由视觉大模型（VLM）理解。
* **混合型 PDF** — 文字正常提取，同时捕获内嵌图表/照片，经智能图像过滤器去噪（去除 UI 噪声、Logo、装饰元素）。
* **图片** — 本地 PaddleOCR 引擎支持中日韩英文，无需云端依赖，结果含置信度和定位框。
* **Office 文件** — DOCX / XLSX / PPTX 原生解析器，无需安装 MarkItDown 等外部依赖。

所有策略异步执行并统一进入编译管线——无需手动选择。

## 安全防护

Wiki 入库受 **路径遍历防御** 与 **持久化层内容扫描** 保护：

1. **文件名清理** — 剥离 LLM 提供文件名中的目录组件（`Path(filename).name`），防止注入攻击写入 `../../../etc/cron.d/evil.md` 等任意路径。
2. **边界校验** — `safe_join_path()` 验证解析后路径始终位于 Wiki raw 目录内，阻断绝对路径、空字节注入、符号链接逃逸和 `../` 遍历。
3. **写前扫描** — `publish_raw` 与编译发布在落盘前执行凭证/注入检查（见上文 **归档安全治理**）。

这些防御在 harness 框架层实现，所有入库路径（agent 工具、自动归档、Settings 导入、大文档 RAG 入库）均自动受保护。Wiki 目录位于用户主目录外，代码执行期间还受 OS 级沙箱隔离（macOS Seatbelt / Linux bubblewrap / Windows AppContainer）保护。

## 对比 DIY Wiki 技能

| DIY（如 Hermes llm-wiki SKILL） | Myrm                    |
| ---------------------------- | ----------------------- |
| Agent 须遵循数百行说明               | Python 引擎可靠运行编译/检索/lint |
| 手工文件夹布局                      | 设置树 GUI + API           |
| 复制粘贴好回答                      | 存入 Wiki 按钮 + 来源元数据      |
| 图谱需 Obsidian                 | 内置 3D 图谱 + Web 设置       |

<Warning>
  Myrm 尚无 Notion 式 Wiki 回收站。删除确认请慎重；重要笔记请备份。
</Warning>

## 相关

* [记忆系统](/zh/core-concepts/memory-system) — 情节/语义记忆 vs 编译型 Wiki 文章
* [竞品对比](/zh/getting-started/competitor-comparison) — 迁移与定位
