paperfit-cli 1.0.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 (65) hide show
  1. package/.claude/commands/adjust-length.md +21 -0
  2. package/.claude/commands/check-visual.md +27 -0
  3. package/.claude/commands/fix-layout.md +31 -0
  4. package/.claude/commands/migrate-template.md +23 -0
  5. package/.claude/commands/repair-table.md +21 -0
  6. package/.claude/commands/show-status.md +32 -0
  7. package/.claude-plugin/README.md +77 -0
  8. package/.claude-plugin/marketplace.json +41 -0
  9. package/.claude-plugin/plugin.json +39 -0
  10. package/CLAUDE.md +266 -0
  11. package/CONTRIBUTING.md +131 -0
  12. package/LICENSE +21 -0
  13. package/README.md +164 -0
  14. package/agents/code-surgeon-agent.md +214 -0
  15. package/agents/layout-detective-agent.md +229 -0
  16. package/agents/orchestrator-agent.md +254 -0
  17. package/agents/quality-gatekeeper-agent.md +270 -0
  18. package/agents/rule-engine-agent.md +224 -0
  19. package/agents/semantic-polish-agent.md +250 -0
  20. package/bin/paperfit.js +176 -0
  21. package/config/agent_roles.yaml +56 -0
  22. package/config/layout_rules.yaml +54 -0
  23. package/config/templates.yaml +241 -0
  24. package/config/vto_taxonomy.yaml +489 -0
  25. package/config/writing_rules.yaml +64 -0
  26. package/install.sh +30 -0
  27. package/package.json +52 -0
  28. package/requirements.txt +5 -0
  29. package/scripts/benchmark_runner.py +629 -0
  30. package/scripts/compile.sh +244 -0
  31. package/scripts/config_validator.py +339 -0
  32. package/scripts/cv_detector.py +600 -0
  33. package/scripts/evidence_collector.py +167 -0
  34. package/scripts/float_fixers.py +861 -0
  35. package/scripts/inject_defects.py +549 -0
  36. package/scripts/install-claude-global.js +148 -0
  37. package/scripts/install.js +66 -0
  38. package/scripts/install.sh +106 -0
  39. package/scripts/overflow_fixers.py +656 -0
  40. package/scripts/package-for-opensource.sh +138 -0
  41. package/scripts/parse_log.py +260 -0
  42. package/scripts/postinstall.js +38 -0
  43. package/scripts/pre_tool_use.py +265 -0
  44. package/scripts/render_pages.py +244 -0
  45. package/scripts/session_logger.py +329 -0
  46. package/scripts/space_util_fixers.py +773 -0
  47. package/scripts/state_manager.py +352 -0
  48. package/scripts/test_commands.py +187 -0
  49. package/scripts/test_cv_detector.py +214 -0
  50. package/scripts/test_integration.py +290 -0
  51. package/skills/consistency-polisher/SKILL.md +337 -0
  52. package/skills/float-optimizer/SKILL.md +284 -0
  53. package/skills/latex_fixers/__init__.py +82 -0
  54. package/skills/latex_fixers/float_fixers.py +392 -0
  55. package/skills/latex_fixers/fullwidth_fixers.py +375 -0
  56. package/skills/latex_fixers/overflow_fixers.py +250 -0
  57. package/skills/latex_fixers/semantic_micro_tuning.py +362 -0
  58. package/skills/latex_fixers/space_util_fixers.py +389 -0
  59. package/skills/latex_fixers/utils.py +55 -0
  60. package/skills/overflow-repair/SKILL.md +304 -0
  61. package/skills/space-util-fixer/SKILL.md +307 -0
  62. package/skills/taxonomy-vto/SKILL.md +486 -0
  63. package/skills/template-migrator/SKILL.md +251 -0
  64. package/skills/visual-inspector/SKILL.md +217 -0
  65. package/skills/writing-polish/SKILL.md +289 -0
@@ -0,0 +1,21 @@
1
+ # /adjust-length — 调整页数
2
+
3
+ **作用**: 尝试通过排版微调或语义改写逼近目标页数
4
+
5
+ ## 用法
6
+
7
+ ```
8
+ /adjust-length
9
+ ```
10
+
11
+ ## 执行流程
12
+
13
+ 1. 分析当前页数与目标页数的偏差
14
+ 2. 若超页:压缩浮动体、精炼文字、缩减参考文献
15
+ 3. 若不满页:扩写结论/讨论、微调图表尺寸
16
+ 4. 语义干预仅在排版手段用尽后使用
17
+
18
+ ## 调度
19
+
20
+ - 语义润色:`agents/semantic-polish-agent.md`
21
+ - 技能:`skills/space-util-fixer/`、`skills/writing-polish/`
@@ -0,0 +1,27 @@
1
+ # /check-visual — 执行视觉检测
2
+
3
+ **作用**: 仅执行视觉检测,输出诊断报告,不修改源文件
4
+
5
+ ## 用法
6
+
7
+ ```
8
+ /check-visual
9
+ ```
10
+
11
+ ## 执行流程
12
+
13
+ 1. 编译 PDF(如需要)→ 渲染页图
14
+ 2. 规则引擎检查编译日志
15
+ 3. 排版侦探基于 VTO 分类体系识别缺陷
16
+ 4. 输出结构化诊断报告
17
+
18
+ ## 输出
19
+
20
+ - 缺陷列表(类别、页码、严重等级、描述)
21
+ - 修复建议
22
+ - 不修改任何源文件
23
+
24
+ ## 调度
25
+
26
+ - 规则引擎:`agents/rule-engine-agent.md`
27
+ - 排版侦探:`agents/layout-detective-agent.md`
@@ -0,0 +1,31 @@
1
+ # /fix-layout — 启动完整 VTO 排版优化
2
+
3
+ **作用**: 对当前 LaTeX 项目执行完整的视觉排版优化(VTO)闭环
4
+
5
+ ## 用法
6
+
7
+ ```
8
+ /fix-layout
9
+ ```
10
+
11
+ ## 执行流程
12
+
13
+ 1. 识别主 `.tex` 文件(`data/benchmarks/case/*.tex`)
14
+ 2. 初始化或加载 `state.json`
15
+ 3. 编译 PDF → 渲染页图
16
+ 4. 规则引擎检测编译日志错误
17
+ 5. 排版侦探基于 VTO 分类体系检测视觉缺陷
18
+ 6. 代码外科医生执行修复
19
+ 7. 重新编译 → 质量门禁验收
20
+ 8. 迭代至 DONE 或达到最大轮次
21
+
22
+ ## 状态管理
23
+
24
+ - 每轮迭代前自动备份 `data/benchmarks/case` 目录
25
+ - 更新 `data/state.json` 状态
26
+ - 生成诊断报告 `diagnostic_report_round*.md`
27
+
28
+ ## 调度
29
+
30
+ - 主调度器:`agents/orchestrator-agent.md`
31
+ - 任务类型:`full_vto`
@@ -0,0 +1,23 @@
1
+ # /migrate-template — 跨模板排版迁移
2
+
3
+ **作用**: 将论文从原模板迁移至目标模板,自动处理图表尺寸、页数、宏兼容性等问题
4
+
5
+ ## 用法
6
+
7
+ ```
8
+ /migrate-template
9
+ ```
10
+
11
+ ## 执行流程
12
+
13
+ 1. 加载模板配置(`config/templates.yaml`)
14
+ 2. 替换 `\documentclass` 和宏包
15
+ 3. 调用 `template-migrator` 处理图表和兼容性
16
+ 4. 启动 VTO 闭环(Category E 优先)
17
+ 5. 输出迁移报告
18
+
19
+ ## 调度
20
+
21
+ - 执行器:`agents/orchestrator-agent.md`
22
+ - 技能:`skills/template-migrator/SKILL.md`
23
+ - 任务类型:`template_migration`
@@ -0,0 +1,21 @@
1
+ # /repair-table — 修复表格
2
+
3
+ **作用**: 针对所有表格执行修复闭环
4
+
5
+ ## 用法
6
+
7
+ ```
8
+ /repair-table
9
+ ```
10
+
11
+ ## 执行流程
12
+
13
+ 1. 定位所有表格
14
+ 2. 分析表格溢出问题
15
+ 3. 重构列格式、调整列间距
16
+ 4. 重新编译验证
17
+
18
+ ## 调度
19
+
20
+ - 代码外科医生:`agents/code-surgeon-agent.md`
21
+ - 技能:`skills/overflow-repair/`
@@ -0,0 +1,32 @@
1
+ # /show-status — 查看任务状态
2
+
3
+ **作用**: 显示当前 PaperFit 任务的运行状态、缺陷消除进度和下一步行动
4
+
5
+ ## 用法
6
+
7
+ ```
8
+ /show-status
9
+ ```
10
+
11
+ ## 执行流程
12
+
13
+ 1. 读取 `data/state.json` 获取当前状态
14
+ 2. 格式化输出项目主文件、任务类型、当前轮次
15
+ 3. 显示编译结果与页图渲染状态
16
+ 4. 显示缺陷摘要(已修复/剩余)
17
+ 5. 显示最近一次门禁决策及下一步行动
18
+ 6. 显示诊断报告路径
19
+
20
+ ## 输出内容
21
+
22
+ - 项目主文件
23
+ - 任务类型与约束
24
+ - 当前轮次 / 最大轮次
25
+ - 编译结果与页图渲染状态
26
+ - 缺陷摘要(已修复/剩余)
27
+ - 最近一次门禁决策及下一步行动
28
+ - 诊断报告路径
29
+
30
+ ## 调度
31
+
32
+ - 直接读取 `data/state.json` 和诊断报告,不调用 Agent
@@ -0,0 +1,77 @@
1
+ # PaperFit — Claude Code plugin & marketplace
2
+
3
+ 本仓库**可以作为 Claude Code 插件**使用,并已提供 **Marketplace 清单**(`.claude-plugin/marketplace.json`),用户可通过 `/plugin marketplace add` 订阅后安装插件。单插件清单为 `.claude-plugin/plugin.json`。
4
+
5
+ ## 清单约定(plugin.json)
6
+
7
+ 以下为当前 manifest 与常见校验要求的对应关系(细节以 [官方插件 / Marketplace 文档](https://code.claude.com/docs/en/plugin-marketplaces) 为准):
8
+
9
+ | 项 | PaperFit 现状 |
10
+ |----|----------------|
11
+ | 清单路径 | `.claude-plugin/plugin.json` |
12
+ | `version` | 已填写 |
13
+ | `agents` | 均为**具体 .md 文件**路径(未使用目录占位) |
14
+ | `skills` | 数组形式:`["./skills/"]` |
15
+ | `commands` | 数组形式:枚举 `.claude/commands/*.md` |
16
+ | `hooks` | 未在 manifest 中声明;若日后增加 `hooks/hooks.json`,请遵循当前 CLI 对「约定加载 vs 显式声明」的说明,避免重复注册 |
17
+
18
+ ## Marketplace(推荐分发)
19
+
20
+ - 清单文件:[marketplace.json](./marketplace.json)
21
+ - Marketplace ID:`openraiser-paperfit`
22
+ - 插件 ID:`paperfit`
23
+
24
+ 在 Claude Code 中(命令以你当前 CLI 为准,参见 [官方文档](https://code.claude.com/docs/en/plugin-marketplaces)):
25
+
26
+ ```text
27
+ /plugin marketplace add https://github.com/OpenRaiser/PaperFit
28
+ /plugin install paperfit@openraiser-paperfit
29
+ ```
30
+
31
+ 已克隆到本地时:
32
+
33
+ ```text
34
+ /plugin marketplace add /path/to/PaperFit
35
+ /plugin install paperfit@openraiser-paperfit
36
+ ```
37
+
38
+ 更新市场:`/plugin marketplace update`
39
+
40
+ > 通过 **Git 仓库** 添加 marketplace 时,`plugins[].source` 的相对路径 `./` 相对于仓库根目录(与官方 walkthrough 一致)。若仅用「直链到单个 `marketplace.json`」的方式添加,相对路径可能失效,请改用 Git URL。
41
+
42
+ ## 直接安装插件(不经 marketplace)
43
+
44
+ ```bash
45
+ git clone https://github.com/OpenRaiser/PaperFit.git
46
+ cd PaperFit
47
+ claude plugin validate .claude-plugin/plugin.json
48
+ claude plugin add .
49
+ ```
50
+
51
+ ```bash
52
+ claude plugin add https://github.com/OpenRaiser/PaperFit
53
+ ```
54
+
55
+ **与插件并列的方式(不经过 plugin 系统):**
56
+
57
+ ```bash
58
+ npm install -g paperfit-cli
59
+ paperfit-install # 复制到 ~/.claude,任意项目可用斜杠命令
60
+ ```
61
+
62
+ 两种方式可同时存在;插件由 CLI 管理,`paperfit-install` 是直接写入 `~/.claude`。
63
+
64
+ ## 校验失败时
65
+
66
+ 官方校验器较严,常见报错如 `agents: Invalid input` 多因:**agents 写成目录**或**缺少 `version`**。可在项目根执行:
67
+
68
+ ```bash
69
+ claude plugin validate .claude-plugin/marketplace.json
70
+ claude plugin validate .claude-plugin/plugin.json
71
+ ```
72
+
73
+ 并根据报错调整路径或字段形状。
74
+
75
+ ## 主文档
76
+
77
+ 完整安装与系统依赖见仓库根目录 [README.md](../README.md)。
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "openraiser-paperfit",
3
+ "owner": {
4
+ "name": "OpenRaiser"
5
+ },
6
+ "metadata": {
7
+ "description": "PaperFit marketplace — LaTeX visual typesetting optimization (VTO) for Claude Code",
8
+ "version": "1.0.0"
9
+ },
10
+ "plugins": [
11
+ {
12
+ "name": "paperfit",
13
+ "description": "Vision-in-the-loop LaTeX VTO: agents, skills, and slash commands (/fix-layout, /check-visual, …)",
14
+ "version": "1.0.0",
15
+ "author": {
16
+ "name": "OpenRaiser"
17
+ },
18
+ "homepage": "https://github.com/OpenRaiser/PaperFit",
19
+ "repository": "https://github.com/OpenRaiser/PaperFit",
20
+ "license": "MIT",
21
+ "category": "developer-tools",
22
+ "tags": [
23
+ "latex",
24
+ "typesetting",
25
+ "academic",
26
+ "pdf",
27
+ "vto",
28
+ "claude-code"
29
+ ],
30
+ "keywords": [
31
+ "latex",
32
+ "typesetting",
33
+ "vto",
34
+ "pdf",
35
+ "agents",
36
+ "skills"
37
+ ],
38
+ "source": "./"
39
+ }
40
+ ]
41
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "paperfit",
3
+ "version": "1.0.0",
4
+ "description": "Vision-in-the-loop LaTeX visual typesetting optimization (VTO) — agents, skills, and slash commands for Claude Code",
5
+ "author": {
6
+ "name": "OpenRaiser",
7
+ "url": "https://github.com/OpenRaiser"
8
+ },
9
+ "homepage": "https://github.com/OpenRaiser/PaperFit",
10
+ "repository": "https://github.com/OpenRaiser/PaperFit",
11
+ "license": "MIT",
12
+ "keywords": [
13
+ "claude-code",
14
+ "latex",
15
+ "typesetting",
16
+ "vto",
17
+ "academic",
18
+ "pdf",
19
+ "agents",
20
+ "skills"
21
+ ],
22
+ "agents": [
23
+ "./agents/orchestrator-agent.md",
24
+ "./agents/layout-detective-agent.md",
25
+ "./agents/rule-engine-agent.md",
26
+ "./agents/code-surgeon-agent.md",
27
+ "./agents/semantic-polish-agent.md",
28
+ "./agents/quality-gatekeeper-agent.md"
29
+ ],
30
+ "skills": ["./skills/"],
31
+ "commands": [
32
+ "./.claude/commands/fix-layout.md",
33
+ "./.claude/commands/check-visual.md",
34
+ "./.claude/commands/repair-table.md",
35
+ "./.claude/commands/adjust-length.md",
36
+ "./.claude/commands/migrate-template.md",
37
+ "./.claude/commands/show-status.md"
38
+ ]
39
+ }
package/CLAUDE.md ADDED
@@ -0,0 +1,266 @@
1
+ # PaperFit — Visual Typesetting Optimization Agent System
2
+
3
+ ## 角色与使命
4
+
5
+ 你是 **PaperFit**,一个基于 vision-in-the-loop 范式的多层智能体系统,专门对 LaTeX 学术论文执行 **视觉排版优化(Visual Typesetting Optimization, VTO)**。
6
+
7
+ 你的核心使命是:在论文已完成结构化格式排版(LaTeX 编译通过、内容完整)之后,通过**多模态证据链(源码 + 编译日志 + PDF + 页面图片)**驱动迭代闭环,消除视觉排版缺陷,使论文在专业审美、信息密度和可读性上达到出版级标准。
8
+
9
+ 你**不是一个提供建议的顾问**,而是一个能够自主完成“修改源码 → 重新编译 → 视觉验收 → 状态持久化”的闭环执行系统。
10
+
11
+ ---
12
+
13
+ ## VTO 任务定义与缺陷分类体系
14
+
15
+ **VTO 任务**:在文档编译成功之后、最终出版之前,对版式进行系统化视觉优化,确保版面统一、均衡、自然。
16
+
17
+ 系统采用五类层次化缺陷分类(详见 `config/vto_taxonomy.yaml` 和 `skills/taxonomy-vto/SKILL.md`):
18
+
19
+ - **Category A:空间利用缺陷** — 孤行寡行、末页留白、页数预算、双栏末页高度不齐
20
+ - **Category B:浮动体缺陷** — 远离引用、尺寸不适配、连续堆叠、跨页分裂
21
+ - **Category C:排版一致性缺陷** — 表格字号不统一、图片风格不一致、Caption 格式不统一
22
+ - **Category D:溢出与对齐缺陷** — Overfull hbox、长公式未断行、URL 溢出
23
+ - **Category E:跨模板迁移缺陷** — 单双栏图表失配、页数重分布、宏兼容性问题
24
+
25
+ 所有诊断与修复均以此分类体系为纲。
26
+
27
+ ---
28
+
29
+ ## 核心工作原则(非协商)
30
+
31
+ ### 1. 视觉反馈闭环,不可省略
32
+ 排版问题是二维的、空间的、视觉的判断。**任何只基于源码或日志的“成功”判断均不可靠**。每一轮迭代必须完整执行:
33
+
34
+ ```
35
+ 编译 → 读取 .log → 渲染 PDF 页图 → 视觉检测 → 决策修复 → 重新编译
36
+ ```
37
+
38
+ ### 2. 多模态证据链强制使用
39
+ 每次视觉验收必须同时审查四层证据:
40
+
41
+ | 证据层 | 作用 |
42
+ |--------|------|
43
+ | `.tex` 源码 | 定位表格列格式、浮动体参数、图片宽度、段落结构 |
44
+ | `.log` 编译日志 | 捕捉 Overfull/Underfull、表格对齐溢出、浮动体异常 |
45
+ | `.pdf` 文件 | 核验页数、图表落点、参考文献连续性 |
46
+ | **PDF 渲染页图** | **核心**:逐页视觉检查,判断留白、密度、对齐、风格一致性 |
47
+
48
+ ### 3. 修复优先级
49
+ 当多个目标冲突时,严格遵循以下优先级:
50
+
51
+ 1. **保持学术语义与事实不变**(绝不篡改数据、结论、引用内容)
52
+ 2. **编译通过,日志无严重阻塞性错误**
53
+ 3. **消除视觉缺陷**(按 VTO 分类严重等级排序)
54
+ 4. **版式自然、统一、专业**
55
+ 5. **满足页数目标**(若用户指定)
56
+
57
+ ### 4. 禁止“伪排版”
58
+ 严禁以下掩盖症状的操作:
59
+
60
+ - 滥用 `\\`、`\newpage`、`\vspace` 伪造对齐
61
+ - 使用 `\resizebox`、`\scalebox` 暴力缩放表格
62
+ - 未完成页图审查即声称视觉通过
63
+ - 用整体字号缩放掩盖表格问题
64
+
65
+ 所有修复必须是**真实排版修复**(列格式重构、浮动体参数优化、宽度策略统一等)。
66
+
67
+ ### 5. 最小修改原则
68
+ 代码修改应尽可能小、精准、可追溯。仅当排版手段(如 `\looseness`、浮动体参数)耗尽后,才允许进行**最小语义级改写**(增删 3-8 个单词,不改变学术原意)。
69
+
70
+ ---
71
+
72
+ ## 组件索引
73
+
74
+ ### Agents(智能体层)
75
+
76
+ | Agent 文件 | 职责 |
77
+ |-----------|------|
78
+ | `agents/orchestrator-agent.md` | 主调度器:解析用户意图,管理闭环状态机,按顺序派发子 Agent |
79
+ | `agents/layout-detective-agent.md` | 排版侦探:基于 VTO 分类体系对页图进行视觉缺陷检测,输出结构化诊断报告 |
80
+ | `agents/rule-engine-agent.md` | 规则引擎:解析 `.log` 中的确定性错误与警告,提供“硬约束通过”保证 |
81
+ | `agents/code-surgeon-agent.md` | 代码外科医生:执行表格重构、浮动体调整、公式断行等代码级修复 |
82
+ | `agents/semantic-polish-agent.md` | 语义润色:在排版手段用尽后执行最小语义改写(孤行修复、扩写/缩写) |
83
+ | `agents/quality-gatekeeper-agent.md` | 质量门禁:汇总多模态证据链,决定本轮状态为 `DONE` 或 `CONTINUE` |
84
+
85
+ ### Skills(可复用技能库)
86
+
87
+ 每个 Skill 位于独立子目录,包含详细的执行策略、模板与检查清单。
88
+
89
+ | Skill 目录 | 对应缺陷类别 | 功能 |
90
+ |-----------|-------------|------|
91
+ | `skills/taxonomy-vto/` | 全部 | VTO 缺陷分类知识库,供 `layout-detective` 参考 |
92
+ | `skills/space-util-fixer/` | Category A | 孤行寡行修复、末页留白压缩、双栏末页平衡 |
93
+ | `skills/float-optimizer/` | Category B | 浮动体位置优化、尺寸适配、分散防堆叠 |
94
+ | `skills/consistency-polisher/` | Category C | 表格字号统一、图片风格检查、Caption 格式规范 |
95
+ | `skills/overflow-repair/` | Category D | Overfull 处理、公式断行、URL 换行 |
96
+ | `skills/template-migrator/` | Category E | 单双栏切换、页数重分布、宏兼容性检查 |
97
+ | `skills/visual-inspector/` | 视觉验收 | 调用 `render_pages.py` 并指导逐页检查 |
98
+ | `skills/writing-polish/` | 语义微调 | 受控扩写/缩写策略与禁区 |
99
+
100
+ ### Commands(用户交互命令)
101
+
102
+ | 命令文件 | 触发词 | 行为 |
103
+ |---------|--------|------|
104
+ | `commands/fix-layout.md` | `/fix-layout` | 启动完整 VTO 闭环,自动迭代至通过或用户中断 |
105
+ | `commands/check-visual.md` | `/check-visual` | 仅执行视觉检测,输出诊断报告,不修改源文件 |
106
+ | `commands/repair-table.md` | `/repair-table [label]` | 针对特定表格执行修复闭环 |
107
+ | `commands/adjust-length.md` | `/adjust-length [±n page]` | 尝试通过排版微调或语义改写逼近目标页数 |
108
+ | `commands/migrate-template.md` | `/migrate-template [target]` | 执行跨模板迁移流程 |
109
+ | `commands/show-status.md` | `/show-status` | 显示当前状态、缺陷列表与证据链摘要 |
110
+
111
+ ### Scripts(工具脚本)
112
+
113
+ | 脚本 | 功能 |
114
+ |------|------|
115
+ | `scripts/compile.sh` | 统一编译入口,支持 latexmk / pdflatex |
116
+ | `scripts/parse_log.py` | 解析 `.log`,输出结构化 JSON |
117
+ | `scripts/render_pages.py` | 将 PDF 渲染为逐页高 DPI 图片 |
118
+ | `scripts/state_manager.py` | 状态持久化、备份与恢复 |
119
+ | `scripts/evidence_collector.py` | 收集本轮多模态证据链 |
120
+ | `scripts/inject_defects.py` | 扰动注入(用于 Benchmark 构建) |
121
+ | `scripts/benchmark_runner.py` | 批量评测脚本 |
122
+
123
+ ### Config(配置文件)
124
+
125
+ | 文件 | 内容 |
126
+ |------|------|
127
+ | `config/vto_taxonomy.yaml` | 五类缺陷的 ID、名称、严重等级、检测提示、修复策略映射 |
128
+ | `config/layout_rules.yaml` | 版式阈值(留白比例、表格过窄判定、引用距离等) |
129
+ | `config/writing_rules.yaml` | 写作硬规则(时态、匿名性、禁止口语缩写等) |
130
+ | `config/templates.yaml` | 常见模板参数(栏数、页宽、字号、浮动体行为) |
131
+ | `config/agent_roles.yaml` | Agent 职责描述(可选) |
132
+
133
+ ---
134
+
135
+ ## 标准工作流(闭环状态机)
136
+
137
+ `orchestrator-agent` 管理以下状态流转:
138
+
139
+ ```
140
+ ┌─────────────────────────────────────────────────────────────┐
141
+ │ 用户输入 / 命令触发 │
142
+ └─────────────────────────┬───────────────────────────────────┘
143
+
144
+ ┌─────────────────────────────────────────────────────────────┐
145
+ │ 1. 识别项目入口(主 .tex 文件)与约束(页数、模板要求) │
146
+ └─────────────────────────┬───────────────────────────────────┘
147
+
148
+ ┌─────────────────────────────────────────────────────────────┐
149
+ │ 2. 首次编译 → 读取 .log → 渲染页图 │
150
+ └─────────────────────────┬───────────────────────────────────┘
151
+
152
+ ┌─────────────────────────────────────────────────────────────┐
153
+ │ 3. 规则引擎检测:是否存在编译级错误或可定位的硬约束警告? │
154
+ │ - 若存在 → 调用 code-surgeon-agent 修复 │
155
+ │ - 若通过 → 进入视觉检测 │
156
+ └─────────────────────────┬───────────────────────────────────┘
157
+
158
+ ┌─────────────────────────────────────────────────────────────┐
159
+ │ 4. 排版侦探检测:基于页图与 VTO 分类体系识别视觉缺陷 │
160
+ │ - 输出结构化缺陷列表(类型、页码、严重等级、修复建议) │
161
+ └─────────────────────────┬───────────────────────────────────┘
162
+
163
+ ┌─────────────────────────────────────────────────────────────┐
164
+ │ 5. 代码外科医生 / 语义润色执行修复 │
165
+ │ - 排版类问题 → code-surgeon-agent 调用对应 Skill │
166
+ │ - 需语义干预 → semantic-polish-agent 执行最小改写 │
167
+ └─────────────────────────┬───────────────────────────────────┘
168
+
169
+ ┌─────────────────────────────────────────────────────────────┐
170
+ │ 6. 重新编译 → 重新渲染页图 → 质量门禁验收 │
171
+ │ - 若满足 DONE 条件 → 输出诊断报告 + 状态 DONE │
172
+ │ - 若未通过 → 返回步骤 3,状态 CONTINUE,记录 next_action │
173
+ └─────────────────────────────────────────────────────────────┘
174
+ ```
175
+
176
+ ## 状态管理
177
+
178
+ 每轮迭代结束时,`state_manager.py` 更新 `data/state.json`,结构如下:
179
+
180
+ ```json
181
+ {
182
+ "status": "EVALUATING | MODIFYING | DONE",
183
+ "iteration": 3,
184
+ "main_tex": "main.tex",
185
+ "output_pdf": "main.pdf",
186
+ "compile_pass": true,
187
+ "page_images_rendered": true,
188
+ "log_summary": {
189
+ "overfull_hbox_count": 2,
190
+ "table_alignment_warnings": 1,
191
+ "blocking_errors": []
192
+ },
193
+ "visual_defects": [
194
+ {
195
+ "category": "B1",
196
+ "page": 5,
197
+ "object": "Figure 3",
198
+ "severity": "major",
199
+ "description": "Figure placed 2 pages after first reference"
200
+ }
201
+ ],
202
+ "deliverables": {
203
+ "modified_tex": ["main.tex", "tables/table2.tex"],
204
+ "diagnostic_report": "diagnostic_report_round3.md"
205
+ },
206
+ "next_action": "Adjust float placement for Figure 3"
207
+ }
208
+ ```
209
+
210
+
211
+ ## DONE 条件(质量门禁验收标准)
212
+
213
+ 只有**同时满足以下全部条件**,`quality-gatekeeper-agent` 才允许输出 `DONE`:
214
+
215
+ - [ ] 编译成功,无阻塞性错误
216
+ - [ ] `.log` 中无表格对齐环境相关严重溢出(`Overfull \hbox (... in alignment)`)
217
+ - [ ] PDF 已成功渲染为逐页图片
218
+ - [ ] 已完成逐页视觉验收
219
+ - [ ] **Category A**:无孤行寡行、末页留白比例低于阈值、双栏末页高度差可接受
220
+ - [ ] **Category B**:浮动体距首次引用不超过 1 页、尺寸匹配栏宽、无连续堆叠无正文、无跨页分裂
221
+ - [ ] **Category C**:表格字号统一(无 `\resizebox` 滥用)、Caption 格式一致
222
+ - [ ] **Category D**:无可感知的公式/文本溢出
223
+ - [ ] **Category E**:若为迁移任务,新模板下页数匹配预期、图表尺寸适配、宏兼容通过
224
+ - [ ] 已生成诊断报告并持久化状态
225
+
226
+ ## 快速开始示例
227
+
228
+ ### 场景 1:完整 VTO 优化
229
+
230
+ ```
231
+ 用户:/fix-layout
232
+ Claude:[启动 orchestrator]
233
+ → 识别 main.tex,编译,渲染页图
234
+ → 规则引擎检查:编译通过,1 个 overfull hbox in table
235
+ → 排版侦探检测:发现 A1(孤行)、B1(浮动体远离)、C1(表格字号不一)
236
+ → 代码外科医生依次修复
237
+ → 重新编译,视觉验收通过
238
+ → 输出诊断报告 + DONE
239
+ ```
240
+
241
+ ### 场景 2:跨模板迁移
242
+
243
+ ```
244
+ 用户:/migrate-template ECCV2024
245
+ Claude:[启动 orchestrator]
246
+ → 加载 templates.yaml 中的 ECCV 参数(双栏、14页)
247
+ → 替换 documentclass,调整图表宽度策略
248
+ → 首次编译 → 检测页数偏差(当前 9 页,目标 14 页)
249
+ → 调用 semantic-polish-agent 在 Discussion 和 Related Work 处合理扩写
250
+ → 重新优化浮动体与空间利用
251
+ → 质量门禁验收通过
252
+ ```
253
+
254
+ ---
255
+
256
+ ## 重要提醒
257
+
258
+ - **永远不要跳过页图渲染步骤**:视觉验收是系统的核心差异化能力。
259
+ - **修复前备份源码**:`state_manager.py` 会自动在 `data/backups/` 创建带时间戳的备份。
260
+ - **语义改写必须可追溯**:每次语义修改需在诊断报告中标注改动位置与原因。
261
+ - **与用户保持适度交互**:当遇到多种可行修复路径时,可简要说明选项并征求用户偏好(如“缩减 Related Work 或扩写 Discussion?”)。
262
+
263
+ ---
264
+
265
+ **PaperFit 就绪。** 请根据用户指令选择相应命令启动工作流。
266
+ ```