lllin000_PaperForge/AGENTS.md

627 lines
23 KiB
Markdown
Raw 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.

# PaperForge - Agent Guide
> 本文档面向 **安装完成后的新用户** 和 **AI Agent**。如果还没有安装 PaperForge请通过 Obsidian 插件市场安装,或查看 [README.md](README.md) 中的安装说明。Docs 版本与 v1.4.18 对应。
---
## 0. 安装后检查清单(第一次使用前必做)
```
[ ] Zotero 已安装 + Better BibTeX 插件已启用
[ ] Obsidian 已打开当前 Vault
[ ] PaperForge 已安装 (pip install paperforge)
[ ] PaddleOCR API Key 已配置(在 .env 中)
[ ] 目录结构已创建(安装向导会自动完成)
[ ] Zotero 数据目录已链接到 <system_dir>/Zotero
[ ] Better BibTeX 已按下方步骤导出 JSON 到 <system_dir>/PaperForge/exports/
```
> 安装向导是增量式的:如果你选择的 Vault 或目录里已经有文件PaperForge 只会补充缺失的目录和文件,不会删除已有内容。
### Better BibTeX 自动导出配置
这一步应在安装向导完成之后再做,因为 `exports/` 目录需要先由安装流程创建。
1. 打开 Zotero
2. 对你要同步的文献库或分类右键 → `导出...`
3. 选择格式:**Better BibTeX JSON**
4. 勾选 **"Keep updated"**(自动导出)
5. 保存到:`{你的Vault路径}/<system_dir>/PaperForge/exports/`
6. JSON 文件名会作为 Base 名称,例如 `library.json`、`骨科.json`
---
## 1. 核心架构v2.1 契约驱动)
PaperForge 在 v2.11.4.17rc4)重构为 **契约驱动架构**,分 5 层:
```
CLI/Plugin 调用
↓ PFResult 契约 {ok, command, version, data, error}
┌─────────────────────────────────────────────┐
│ commands/ CLI 分发层 │
├─────────────────────────────────────────────┤
│ adapter/bbt, zotero_paths, frontmatter │ ← 独立可测
│ services/sync_service ← 编排适配器 │
├─────────────────────────────────────────────┤
│ core/result, errors, state ← 共享数据契约 │
├─────────────────────────────────────────────┤
│ worker/sync, ocr, status ← 机械劳动 │
│ setup/6个类 ← 安装流程 │
├─────────────────────────────────────────────┤
│ schema/field_registry.yaml ← 字段注册表 │
│ doctor/field_validator.py ← 字段校验 │
└─────────────────────────────────────────────┘
```
| 层级 | 组件 | 触发方式 | 作用 |
|------|------|----------|------|
| **契约层** | `core/`PFResult, ErrorCode, 状态机) | 被所有模块引用 | 定义 CLI/Plugin/Worker 之间的数据交换格式 |
| **适配器层** | `adapters/`bbt, zotero_paths, frontmatter | 被服务层调用 | 封装外部数据格式与 I/O 操作 |
| **服务层** | `services/sync_service` | 被 worker 调度 | 编排适配器,实现业务逻辑 |
| **Worker 层** | `worker/`sync, ocr, status, repair 等) | Python CLI | 后台自动化(机械劳动) |
| **Agent 层** | `/pf-deep`, `/pf-paper` | 用户手动触发 | 交互式精读(深度思考) |
**操作速查**
| 你要做什么 | 在终端输入 | 在 OpenCode 输入 |
|-----------|-----------|-----------------|
| 同步 Zotero 并生成笔记 | `paperforge sync` | `/pf-sync` |
| 运行 OCR | `paperforge ocr` | `/pf-ocr` |
| 查看精读队列 | `paperforge deep-reading` | `/pf-deep`(精读具体文献) |
| 查看系统状态 | `paperforge status` | `/pf-status` |
| 修复状态分歧 | `paperforge repair` | (终端操作) |
| 验证安装配置 | `paperforge doctor` | (终端操作) |
| 查看帮助 | `paperforge --help` | (终端操作) |
---
## 2. 完整数据流
```
Zotero 添加文献
↓ Better BibTeX 自动导出 JSON
<system_dir>/PaperForge/exports/library.json
↓ 运行 sync
<resources_dir>/<literature_dir>/<domain>/<key> - <Title>.md正式笔记含 frontmatter
↓ 用户在正式笔记 frontmatter 中设置 do_ocr: true
运行 ocr → <system_dir>/PaperForge/ocr/<key>/
↓ 用户在正式笔记 frontmatter 中设置 analyze: true
运行 deep-reading查看队列确认就绪
↓ 用户执行 Agent 命令
/pf-deep <zotero_key>
↓ Agent 生成
正式笔记中新增 ## 🔍 精读 区域
```
---
## 3. 目录结构Lite 版5 个核心目录)
```
{你的Vault根目录}/
├── <resources_dir>/
│ ├── <literature_dir>/ ← 正式文献笔记sync 生成,含 frontmatter 状态跟踪)
│ │ ├── 骨科/
│ │ ├── 运动医学/
│ │ └── ...(你的分类)
├── <system_dir>/
│ ├── PaperForge/
│ │ ├── exports/ ← Better BibTeX 自动导出的 JSON
│ │ │ └── library.json
│ │ ├── ocr/ ← OCR 结果(每个文献一个子目录)
│ │ │ └── ABCDEFG/ ← Zotero key 作为目录名
│ │ │ ├── fulltext.md ← OCR 提取的全文
│ │ │ ├── images/ ← 图表切割图片
│ │ │ ├── meta.json ← OCR 元数据(含 ocr_status
│ │ │ └── figure-map.json ← 图表索引(自动创建)
│ │ ├── indexes/ ← 索引缓存formal-library.json 等)
│ │ └── config/ ← 领域-收藏夹映射等配置
│ └── Zotero/ ← Junction/Symlink 到 Zotero 数据目录
├── <agent_config_dir>/ ← OpenCode Agent 配置(自动创建)
│ └── skills/
│ └── literature-qa/ ← 深度阅读 Skill
│ ├── scripts/
│ │ └── ld_deep.py ← /pf-deep 核心脚本
│ ├── prompt_deep_subagent.md ← Agent 精读提示词
│ └── chart-reading/ ← 14 种图表阅读指南
├── .env ← API Key 等敏感配置
└── AGENTS.md ← 本文件
```
### 各目录作用速查
| 目录 | 内容 | 谁生成/修改 |
|------|------|------------|
| `<resources_dir>/<literature_dir>/` | 正式文献笔记(含 frontmatter + 精读内容) | sync 生成Agent 写入精读 |
| `<system_dir>/PaperForge/exports/` | Better BibTeX JSON 导出 | Zotero 自动导出 |
| `<system_dir>/PaperForge/ocr/` | OCR 全文 + 图表切割 | ocr worker 生成 |
| `<system_dir>/PaperForge/indexes/` | 索引缓存formal-library.json | sync 生成 |
| `<system_dir>/PaperForge/config/` | 领域-收藏夹映射等 | 用户/安装向导配置 |
| `<system_dir>/Zotero/` | Zotero 数据目录的链接 | 安装时手动创建 junction |
---
## 4. 核心 WorkersLite 版4 个)
### sync
- **作用**:检测 Zotero 中的新条目并生成正式文献笔记
- **运行时机**:添加新文献到 Zotero 后,或需要更新笔记格式时
- **输出**
- `<resources_dir>/<literature_dir>/<domain>/<key> - <Title>.md`
- **示例**
```bash
paperforge sync
# Legacy (备用):
# python -m paperforge sync --vault "{vault路径}"
```
### ocr
- **作用**:将 PDF 上传到 PaddleOCR API提取全文文本和图表
- **触发条件**:正式笔记 frontmatter 中 `do_ocr: true`
- **输出**`<system_dir>/PaperForge/ocr/<key>/` 目录
- `fulltext.md`:提取的全文(含 `<!-- page N -->` 分页标记)
- `images/`:自动切割的图表图片
- `meta.json`OCR 状态(`ocr_status: done/pending/processing/failed`
- `figure-map.json`:图表索引(后续自动生成)
- **注意**OCR 是异步的,大文件可能需要几分钟
- **示例**
```bash
paperforge ocr
# 诊断模式(不运行,仅检查状态)
paperforge ocr --diagnose
# Legacy (备用):
# python -m paperforge ocr --vault "{vault路径}"
```
### deep-reading
- **作用**:扫描所有正式笔记,列出 `analyze=true` 且 OCR 完成的文献
- **运行时机**:用户想看看哪些文献可以开始精读了
- **输出**:控制台表格,显示队列状态
- **重要**:这只是**查看队列**,不会自动触发 Agent 精读
- **示例**
```bash
paperforge deep-reading
paperforge deep-reading --verbose # 显示阻塞条目的修复指令
# Legacy (备用):
# python -m paperforge deep-reading --vault "{vault路径}"
```
---
## 5. Agent 命令(用户手动触发)
PaperForge 的命令分为两类:
| 类型 | 命令 | 用途 | 说明 |
|------|------|------|------|
| **深度思考** | `/pf-deep <key>` | 完整 Keshav 三阶段精读 | **必须 Agent 执行** — 需要理解论文、分析图表、生成 callout |
| **深度思考** | `/pf-paper <key>` | 文献问答 | **必须 Agent 执行** — 需要理解内容并写作 |
| **机械操作** | `/pf-sync` | 同步 Zotero 并生成笔记 | Agent 可帮你检查状态并执行 |
| **机械操作** | `/pf-ocr` | 运行 PDF OCR | Agent 可帮你检查队列并执行 |
| **机械操作** | `/pf-status` | 查看系统状态 | Agent 可帮你解读诊断结果 |
> **双模式调用**`/pf-sync`、`/pf-ocr`、`/pf-status` 本质上是 CLI 命令的 Agent 包装。你可以在终端直接运行 `paperforge sync/ocr/status`,也可以在 OpenCode 中使用 `/pf-*` 让 Agent 帮你检查前置条件、执行命令、解读输出。
> **v1.4 新增**:所有命令支持全局 `--verbose` / `-v` 参数(如 `paperforge sync --verbose`),输出 DEBUG 级别的诊断信息到 stderr不影响 stdout 的正常输出。
> **v1.4 新增 — auto_analyze_after_ocr**:如果开启了 `paperforge.json` 中的 `auto_analyze_after_ocr`OCR 完成后 `analyze` 会自动设为 `true`,无需手动修改 formal note frontmatter。
### 必须 Agent 执行的命令
#### `/pf-deep <zotero_key>` — 完整精读
**用途**:完整 Keshav 三阶段精读
**前置条件**OCR 完成 (`ocr_status: done`)
执行流程:
1. **prepare 阶段**(自动):查找正式笔记、检查 OCR、生成 figure-map
2. **精读阶段**Agent 执行Pass 1 概览 → Pass 2 精读还原 → Pass 3 深度理解
3. **验证阶段**(自动):检查 callout 间距、section 完整性
#### `/pf-paper <zotero_key>` — 文献问答
**用途**:文献问答(无 OCR 要求)
**前置条件**:有正式笔记即可
---
## 6. Path Resolution路径解析
PaperForge 支持三种 Better BibTeX 导出路径格式,并统一转换为 Obsidian wikilink
### 支持的 BBT 路径格式
| 格式 | 示例 | 处理方式 |
|------|------|----------|
| **Absolute Windows** | `D:\Zotero\storage\KEY\file.pdf` | 提取 8 位 KEY转换为 `storage:KEY/file.pdf` |
| **storage: prefix** | `storage:KEY/file.pdf` | 直接透传,仅规范化斜杠 |
| **Bare relative** | `KEY/file.pdf` | 自动添加 `storage:` 前缀 |
### Wikilink 生成规则
- 所有 PDF 路径在正式笔记中存储为 **Obsidian wikilink** 格式:`[[relative/path/to/file.pdf]]`
- 使用正斜杠 `/`(即使 Windows 系统)
- 支持中文文件名,无需转义
- 示例:`[[99_System/Zotero/storage/KEY/中文论文.pdf]]`
### Junction / Symlink 设置
如果 Zotero 数据目录在 Vault 外部,需创建 junction
```powershell
# 以管理员身份运行 PowerShell
New-Item -ItemType Junction -Path "C:\你的Vault\99_System\Zotero" -Target "C:\Users\用户名\Zotero"
```
或 CMD
```cmd
mklink /J "C:\你的Vault\99_System\Zotero" "C:\Users\用户名\Zotero"
```
运行 `paperforge doctor` 会自动检测 Zotero 位置并推荐正确的 junction 命令。
### 多附件处理
当一篇文献有多个 PDF 附件时:
- **Main PDF**title="PDF" 的附件,或最大文件,或第一个 PDF
- **Supplementary**:其他 PDF 附件列表,以 wikilink 数组形式存储
---
## 7. Frontmatter 字段参考
### Formal Note`Literature/<domain>/<key> - <Title>.md`
这是**用户控制工作流的核心**。每个文献对应一个 formal note 文件frontmatter 包含元数据 + 工作流控制字段:
```yaml
---
zotero_key: "ABCDEFG" # Zotero citation key自动生成
domain: "骨科" # 分类领域(对应 Zotero 收藏夹)
title: "论文标题"
year: 2024
doi: "10.xxxx/xxxxx"
collection_path: "子分类" # Zotero 子收藏夹路径
has_pdf: true # 是否有 PDF 附件(自动生成)
pdf_path: "[[99_System/Zotero/storage/KEY/文件名.pdf]]" # Wikilink 格式
bbt_path_raw: "D:\\Zotero\\storage\\KEY\\文件名.pdf" # 原始 BBT 路径(调试用)
zotero_storage_key: "KEY" # 8 位 Zotero storage key
attachment_count: 2 # 附件总数
supplementary: # 其他 PDF 附件wikilink 列表)
- "[[99_System/Zotero/storage/KEY/supp1.pdf]]"
- "[[99_System/Zotero/storage/KEY/supp2.pdf]]"
fulltext_md_path: "[[99_System/PaperForge/ocr/KEY/fulltext.md]]"
recommend_analyze: true # 系统推荐精读(有 PDF 时自动设为 true
analyze: false # 【用户控制】是否生成精读?设为 true 触发
do_ocr: true # 【用户控制】是否运行 OCR设为 true 触发
ocr_status: "done" # OCR 状态pending/processing/done/failed
deep_reading_status: "pending" # 精读状态pending/done
path_error: "" # 路径错误not_found/invalid/permission_denied
analysis_note: "" # 预留字段
---
```
**用户操作方式**
- 在 Obsidian 中打开 formal note 文件
- 修改 `analyze: false``analyze: true` 标记要精读的文献
- 修改 `do_ocr: false``do_ocr: true` 触发 OCR
- 或使用 Obsidian Base 视图批量操作
---
## 8. 第一次使用指南(手把手)
### Step 1: 完成 Better BibTeX 自动导出
先按上面的步骤把 JSON 导出到 `<system_dir>/PaperForge/exports/`。这一步没完成前,`sync` 不会读到文献。
### Step 2: 确认 Zotero 有文献
确保 Zotero 中已有至少一篇带 PDF 的文献,且 Better BibTeX 已导出 JSON。
### Step 3: 运行 sync
```bash
# 在 Vault 根目录执行
paperforge sync
```
预期输出:
```
[INFO] Found 5 new items
[INFO] Created 骨科/XXXXXXX.md
[INFO] Generated 5 formal notes
[INFO] Output: <resources_dir>/<literature_dir>/骨科/XXXXXXX - Title.md
...
```
### Step 4: 在 Base 视图中标记 OCR
打开 Obsidian Base 视图,找到该文献,将 `do_ocr` 设为 `true`
### Step 5: 运行 OCR
```bash
paperforge ocr
```
等待完成(可能需要几分钟)。
### Step 6: 在 Base 视图中标记精读
OCR 完成后,在 Base 视图中找到该文献,将 `analyze` 设为 `true`
### Step 7: 执行精读
先确认队列就绪:
```bash
paperforge deep-reading
```
然后在 OpenCode Agent 中输入:
```
/pf-deep XXXXXXX
```
Agent 会自动:
1. 准备精读骨架prepare
2. 逐阶段填写精读内容
3. 验证结构完整性
### Step 8: 查看结果
在 Obsidian 中打开正式笔记,找到 `## 🔍 精读` 区域,精读已完成。
---
## 9. 常用命令速查
```bash
# 检测 Zotero 新条目并生成正式笔记
paperforge sync
paperforge sync --verbose # 显示详细诊断信息
# 运行 OCR处理 do_ocr=true 的文献)
paperforge ocr
paperforge ocr --verbose # 显示 OCR 详细日志
paperforge ocr --diagnose # 诊断模式,不实际运行
paperforge ocr --no-progress # 静默模式,不显示进度条
# 查看精读队列
paperforge deep-reading
paperforge deep-reading --verbose # 显示阻塞条目修复指令
# 修复状态分歧(默认 dry-run
paperforge repair --verbose # 查看三向状态分歧详情
paperforge repair --fix # 实际修复(慎用)
# 查看整体状态
paperforge status
# 验证安装配置
paperforge doctor
```
> 如果 `paperforge` 命令未注册,可使用 fallback
> ```bash
> python -m paperforge <command>
> ```
> 例如:`python -m paperforge status`
### Agent 命令
```
/pf-deep <zotero_key> # 完整三阶段精读(必须 Agent 执行)
/pf-paper <zotero_key> # 文献问答(必须 Agent 执行)
/pf-sync # 同步 ZoteroAgent 包装 CLI
/pf-ocr # 运行 OCRAgent 包装 CLI
/pf-status # 查看状态Agent 包装 CLI
```
> 注:`/pf-sync`、`/pf-ocr`、`/pf-status` 与 `paperforge sync/ocr/status` 是同一命令的两种调用方式。在终端直接运行 CLI 即可;在 OpenCode 中使用 `/pf-*` 可以让 Agent 帮你检查前置条件并解读输出。
### Chart-Reading 指南索引
`/pf-deep` 精读时会参考 19 种图表类型的阅读指南,按生物医学文献常见度排序。完整索引参见 `chart-reading/INDEX.md`
---
## 10. 常见问题
### Q: 运行 sync 后没有生成正式笔记?
- 检查 Better BibTeX JSON 导出路径是否正确
- 检查 JSON 文件是否包含文献数据
- 确认 Zotero 中该文献有 citation key
### Q: OCR 一直显示 pending
- 检查 PaddleOCR API Key 是否配置正确(`.env` 文件)
- 检查网络连接
- 查看 `<system_dir>/PaperForge/ocr/<key>/meta.json` 中的错误信息
### Q: /pf-deep 提示 OCR 未完成?
- 确认正式笔记 frontmatter 中 `ocr_status: done`
- 如 OCR 失败,可重新设置 `do_ocr: true` 再运行 ocr worker
### Q: Base 视图中 pdf_path 显示为绝对路径?
- 这是 Obsidian 渲染问题,数据本身是相对路径
- 不影响功能,可忽略
### Q: 可以批量操作吗?
- 可以。使用 Obsidian Base 视图批量修改 `do_ocr``analyze` 字段
- 或使用脚本批量修改 formal note frontmatter
---
## 11. 升级与维护
### 更新 PaperForge 代码
#### 方式 1自动更新推荐
```bash
# 自动检测安装方式并更新
paperforge update
```
系统会自动检测你是通过 pip、git 还是手动安装,并执行对应的更新方式。
#### 方式 2Windows 一键脚本
双击运行 Vault 根目录下的 `scripts/update-paperforge.ps1`
- 自动检测安装方式
- 自动执行更新
- 无需手动输入命令
```powershell
# 或在 PowerShell 中执行
.\scripts\update-paperforge.ps1
# 强制更新(跳过确认)
.\scripts\update-paperforge.ps1 -Force
# 只检测不更新
.\scripts\update-paperforge.ps1 -DryRun
```
#### 方式 3手动更新
**推荐:自动更新**
```bash
paperforge update
```
系统会自动检测安装方式并执行对应的更新命令。
**pip 安装用户:**
```bash
pip install --upgrade paperforge
```
**pip editable / git clone 用户:**
```bash
cd 你的仓库目录
git pull origin master
pip install -e .
```
#### 方式 4手动复制最后手段
```bash
cp -r 新下载的代码/* <vault_path>/
```
> [!WARNING] 手动复制容易遗漏文件,建议优先使用自动更新。
### 备份注意事项
- `<resources_dir>/``<system_dir>/PaperForge/ocr/` 包含你的数据,需备份
- `.env` 包含 API Key不要提交到 git
- `<system_dir>/PaperForge/exports/` 可重新生成(由 Zotero 自动导出)
---
## 12. 命令迁移说明v1.1 → v1.2
从 v1.2 开始PaperForge 采用统一的命令接口:
- **CLI 统一入口**`paperforge sync`(替代 `selection-sync` + `index-refresh`)、`paperforge ocr`(替代 `ocr run`
- **Agent 统一前缀**`/pf-deep`、`/pf-paper`、`/pf-ocr`、`/pf-sync`、`/pf-status`(替代 `/LD-*``/lp-*`
- **Python 包重命名**`paperforge`(替代 `paperforge_lite`
**旧命令仍兼容**v1.2 继续支持旧命令名(`selection-sync`、`index-refresh`、`ocr run`),但文档已统一使用新命令。
> **v1.4 新增**:结构化日志(`--verbose`)、自动重试、进度条、代码自动化检查。详细迁移步骤和回滚说明参见 [docs/MIGRATION-v1.2.md](docs/MIGRATION-v1.2.md)v1.1→v1.2)和 [docs/MIGRATION-v1.4.md](docs/MIGRATION-v1.4.md)v1.3→v1.4)。
---
## 13. 开发者指南AI Agent 必读)
### v2.1 新增模块
v2.11.4.17rc4)引入了以下新增模块,开发时请注意:
| 路径 | 内容 | 注意事项 |
|------|------|---------|
| `paperforge/core/` | 契约层 — PFResult, ErrorCode, 状态机 | 所有模块都可引用,不循环依赖 |
| `paperforge/adapters/` | 适配器 — bbt, zotero_paths, frontmatter | 独立可测,从 `sync.py` 提取 |
| `paperforge/services/` | 服务层 — SyncService | 编排适配器,`sync.py` 变调度壳 |
| `paperforge/setup/` | 安装层 — 6 个类 | 从 `setup_wizard.py` 拆出 |
| `paperforge/schema/` | 字段注册表 — `field_registry.yaml` | 44 字段定义 |
| `paperforge/doctor/` | 校验 — `field_validator.py` | `doctor` 命令使用 |
所有 `--json` 输出统一为 PFResult 格式 `{ok, command, version, data, error}`。修改输出结构时需同时更新 `core/result.py` 和下游 consumerplugin
### 版本号管理
PaperForge 版本只在 `paperforge/__init__.py` 一处定义。升版本时不要手动改多个文件,使用自动化脚本:
```bash
# 升 patch 版本1.4.11 → 1.4.12),自动 git commit + tag
python scripts/bump.py patch
# 升 minor 版本1.4.11 → 1.5.0
python scripts/bump.py minor
# 指定版本号
python scripts/bump.py 2.0.0
# 预览(不实际修改)
python scripts/bump.py patch --dry-run
# 只改文件不 commit
python scripts/bump.py patch --no-git
```
脚本会自动更新:
| 文件 | 字段 |
|------|------|
| `paperforge/__init__.py` | `__version__` |
| `paperforge/plugin/manifest.json` | `version` |
| `manifest.json` | `version` |
| `paperforge/plugin/versions.json` | 追加 `"version": "minAppVersion"` |
### 发布 Release 流程
```bash
# 1. 升版本(自动 commit + tag
python scripts/bump.py patch
# 2. 推送代码和 tag
git push && git push --tags
# 3. 创建 GitHub Release 并上传插件文件
gh release create v1.4.12 \
--title "v1.4.12" \
--notes "简短说明" \
paperforge/plugin/main.js \
paperforge/plugin/styles.css \
paperforge/plugin/manifest.json \
paperforge/plugin/versions.json
```
> Obsidian 社区插件要求 Release 附带 `main.js`、`manifest.json`、`styles.css`、`versions.json` 四个单独文件(非 zip
### 插件 i18n
插件界面通过 `paperforge/plugin/i18n.js` 做中英文适配:
- 语言自动检测:读取 Obsidian 语言设置,`zh*` 用中文,其他用英文
- 新增文本时,需同时在 `i18n.js``zh``en` 两块加 key
- 代码中使用 `t('key_name')` 读取翻译
- Dashboard 的 `ACTIONS` 标题保持英文Obsidian 命令面板统一使用英文 ID
### pre-commit 检查
```bash
# 提交前运行 ruff lint + format + 一致性审计
ruff check --fix paperforge/ && ruff format paperforge/
# 运行测试173 tests
python -m pytest tests/unit/ -q --tb=short
```
---
*PaperForge | 快速开始指南 | 安装后阅读*