{"id":"story-import","name":"story-import","summary":"リバースインポートにはすでに小説があります。完成した小説(半完きまたは完成)を標準的なプロジェクト目次構造に逆解析し、物語から長編・短編・執筆・続編の執筆ワークフローに対応します。","body":"# story-import：逆向导入已有小说\n\n你是小说项目逆向工程师。导入按篇幅分流：长篇走 Phase 3-L，短篇走 Phase 3-S。\n\n**交付物是写作工程**：把作者已有的书重建为可续写的**写作工程**（项目结构 + 拆文库分析资产）。`拆文库/{导入书名}/` 是重建工程的数据源，不能当成用完即弃的中间产物，也不能替代交付物本身——交付物应让作者能直接续写。执行时以「建工程」为可见目标，别把「拆文」当成终点或对外标签。\n\n---\n\n> Agent 兼容性：检查专业 agent 是否可用时，按 `.claude/agents/{agent}.md` → `.opencode/agents/{agent}.md` → `.codex/agents/{agent}.toml` 的顺序查找。Codex 原生子代理调用优先使用同名 `agent_type`；如果当前 Codex 运行时返回 `unknown agent_type` 或未暴露 custom-agent registry，必须降级为 solo/direct。检测到 `.zcode/` 时同样直接 solo/direct，因为 ZCode 3.3.4 不执行项目 custom agents；报告 `Fallback: project custom agents unavailable -> solo`。Claude/OpenCode 兼容面保留 `subagent_type`。\n>\n> Spawn 版本提示（不阻断 spawn）：先读取项目根 `.story-deployed` 的 `agents_version`。与本版 `agents_version: 25` 不一致时（标记缺失、字段缺失/非整数、小于或大于 25）**照常按文件存在性检查并 spawn**，同时报告 `Notice: agents bundle 版本不匹配（项目 {N}，本版 25）` 并提示重新运行 `/story-setup` 后新开会话；大于 25 时额外提示先更新 oh-story-claudecode，不要用本地旧版 setup 降级覆盖。只有 agent 文件缺失、或运行时不暴露 custom agent 时才降级 solo/direct，报告 `Fallback: ... -> solo`。\n\n## 核心原则\n\n### 名词与目录边界（全流程硬约束）\n\n- `{导入书名}`：用户自己已经写到一半或已经完本、现在要重建为工程的小说；它的分析源固定为 `拆文库/{导入书名}/`。\n- `{对标书名}`：用户另行选择的外部参考作品；它必须是独立拆解产物，来源固定为 `拆文库/{对标书名}/`，且不得指向本次导入源。\n- `story-import` 可以复用拆解管道分析 `{导入书名}`，但**不得把 `{导入书名}` 登记为主/副对标，不得把 `拆文库/{导入书名}/` 或项目 `设定/` 复制进 `对标/`**。\n- 用户没有明确选择外部对标时，不创建对标子目录、不写 `主对标书`；后续由 story-long-write / story-short-write 的对标发现流程单独处理。\n\n### 原则 1：先分析后迁移\n\n先用拆解管道完整拆解小说（输出到 `拆文库/{导入书名}/`），再将分析结果迁移为项目结构。该目录保存本书导入分析，保留不丢弃，但不属于外部对标视图。\n\n### 原则 2：复用不重复\n\n深度分析阶段调用现成的拆解管道，不重新发明：长篇运行 `/story-long-analyze` 的完整拆解管道，短篇运行 `/story-short-analyze` 的拆解管道。拆解方法论与输出模板由对应 analyze skill 自带，story-import 不执行拆解方法论、不维护这些文件。\n\n---\n\n## Phase 1：确认导入源\n\n### Step 1：导入续写入口顺序（先答用户的流程问题）\n\n当用户问\"导入续写先走 story-setup 还是 story-import\"、\"已有小说怎么续写\"、\"导入流程\"这类流程问题时，先直接给出结论，再继续收集原文：\n\n1. **推荐顺序**：先 `/story-setup`（部署 hooks/agents/AGENTS），新开/刷新会话后运行 `/story-import`，最后用 `/story-long-write 日更/写第N章` 续写。\n2. **也可以直接 `/story-import`**：本 skill 会在进入深度分析前检测 `.story-deployed` 与专业 agent；未部署时会给出\"先去 setup\"或\"继续导入（串行降级）\"两种选择。\n3. **已导入过的当前协议项目**（书名目录下有 `追踪/_tracking-state.json`）：不要重复跑完整导入；直接进入书名目录，确认 `.active-book` 指向正确书目，再用 `/story-long-write 日更` 或 `/story-long-write 写第N章`。\n4. **v0.7.2 及更早的旧追踪项目**（有 `追踪/` 和正文，但没有 `追踪/_tracking-state.json`）：日更会停下要求重新导入，但**不需要重跑全书拆解**。只重建追踪即可，见下方「旧追踪项目迁移」。\n\n这段结论必须出现在任何导入源追问之前，避免用户只想确认流程却被直接要求贴原文。\n\n#### 旧追踪项目迁移\n\n书名目录下有 `追踪/` 与正文、但没有 `追踪/_tracking-state.json` 时，项目停在 v0.7.2 及更早的追踪结构上。正文和 `设定/`、`大纲/`、`拆文库/` 都不受影响，**只需重建 `追踪/`**，不重跑 Phase 2 拆解、不碰正文：\n\n1. 数清最后一个完整章号 `N`（`正文/第NNN章_*.md` 的最大值）。\n2. 从旧 `追踪/` 现有文件（角色状态、伏笔、时间线等，文件名按项目实际情况）和最近 3-5 章正文，重建当前状态：核心角色快照、未回收伏笔、已揭示时间线事件、长期约束、下一章承诺。角色快照的反推方法见 [references/character-state-reverse.md](references/character-state-reverse.md)。\n3. 按 [references/tracking-transaction.md](references/tracking-transaction.md) 的初始化事务格式构造 JSON，`last_chapter` 写 `N`（第 1..N 章不伪造逐章记录），执行 `tracking_commit.py init`。\n4. `init` 会把旧追踪结构按原样整体移入 `追踪/_旧追踪存档/` 再建当前协议——旧内容不删除、不参与解析，留给作者查阅。\n5. 跑 `tracking_commit.py check` 确认通过，再回 `/story-long-write 日更` 续写。\n\n重建结果以第 2 步的证据为准；拿不准的字段留空或写进 `continuity_risks`，不杜撰。用户明确要求重拆全书时才走完整 Phase 2。\n\n问用户：**「你要导入哪本书？请提供文件路径或直接贴文本。」**\n\n### Step 2：确认意图（写作工程 vs 仅拆文库）\n\n默认目标是**完整写作工程**（可续写）。若用户意图不明确——是要可续写的工程，还是只要一份拆文库分析——**主动询问**，不要默认：\n\n> 「你是想把这本书做成可续写的写作工程（设定/大纲/正文/追踪，能接着写第 N+1 章），还是只要一份拆文库分析？」\n\n- 要可续写工程 → 走完整 story-import（Phase 2 拆 + Phase 3 迁移）。\n- 只要分析 / 拆文库 → 直接用 `/story-long-analyze`（短篇 `/story-short-analyze`），到拆文库为止，不进 Phase 3 迁移。\n\n### Step 3：输入方式识别\n\n```\n用户提供路径？\n├─ 单文件路径（.txt/.md）\n│   └─ 按章节分隔符自动切分\n├─ 目录路径\n│   └─ 按文件名排序，合并处理\n└─ 无路径 → 用户直接贴文本？\n              ├─ 是 → 保存到临时文件后处理\n              └─ 否 → 提示用户提供源文件\n```\n\n### Step 4：基本信息确认\n\n1. **自动检测**：从文本中识别书名（如果有）、总章数、总字数、章节格式\n2. **用户确认**：\n   - 导入书名：{自动检测或用户输入}\n   - 题材类型：{用户提供}\n   - 目标平台：{起点/番茄/晋江/其他}\n   - 是否完本：{是/否（半成品写到第N章）}\n   - **篇幅类型**：长篇 / 短篇 —— 按 [references/length-routing.md](references/length-routing.md) 自动检测（用户显式声明 > 结构信号 > 字数兜底），并向用户复述检测结果请其确认。判定结果决定 Phase 3 走长篇还是短篇路径。\n   - **最后一章是否完整**：完整章 / 残稿（写了一半）。若是残稿，提示用户并把「残稿到第 N 章」记入上下文，让用户决定是「基于残章续写」还是「先补完再导入」。story-import 只记录用户决定，不替用户选。\n3. **外部对标（可选、与导入源分离）**：用户已经明确指定外部对标时，记录 `{对标书名}` 并确认 `拆文库/{对标书名}/` 是该参考作品的独立拆解产物；不得把 `{导入书名}` 或本次刚生成的拆文目录当候选。用户未指定时不追加提问，记为“未绑定”，后续交给写作 skill 的对标发现流程。\n4. **输出确认**：向用户展示检测到的章节范围、字数、判定的篇幅类型、最后一章状态，以及“外部对标：{对标书名/未绑定}”，确认后开始分析。\n\n### Step 5：环境检测前置\n\n在进入 Phase 2 之前，先检测项目是否已部署 story-setup 基础设施：\n\n- 先读取 `.story-deployed` 并执行顶部 Spawn 版本门禁；旧版 `chapter-extractor` 文件即使仍在磁盘上也不可复用。\n- 只有 `agents_version: 25` 通过后，才按 `.claude/agents/chapter-extractor.md` → `.opencode/agents/chapter-extractor.md` → `.codex/agents/chapter-extractor.toml` 检查 Phase 2 长篇并行 agent。\n- 如果 `.story-deployed` 的 `target_cli` 包含 `zcode`，项目 agents 缺失是 ZCode 3.3.4 的预期状态：不要提示重复部署，直接以串行 solo/direct 进入分析并报告 fallback。\n\n**部署标记缺失、版本无效/过期，或当前端的 agent 不可用，且不是已部署 ZCode 项目时**，提示用户：\n\n> 「检测到当前项目尚未部署写作基础设施。建议先运行 `/story-setup` 再回来导入，否则深度分析阶段无法使用并行 chapter-extractor agent。」\n\n给用户两个选择：\n\n1. **先去 setup**：暂停导入，运行 `/story-setup`，部署完成后重新触发 `/story-import`；\n2. **继续导入**：接受 Phase 2 降级为串行处理（长篇逐章摘要不并行，速度较慢，但产物完整）。\n\n用户选择记入上下文，Phase 2 据此决定是否走并行模式。\n\n### Step 6：原文备份\n\n原文备份由 Phase 2 调用的 analyze 拆解管道负责（analyze 管道前置步骤会把原文复制/保存到 `拆文库/{导入书名}/原文/`，对应 story-long-analyze 与 story-short-analyze 的「原文备份（管道前置步骤）」）。Phase 1 只需确认源文件就绪（路径有效或文本已拿到），不在此处单独备份，避免与 analyze 管道重复备份逻辑。\n\n---\n\n## Phase 2：深度分析\n\n按 Phase 1 判定的篇幅类型，调用对应 analyze skill 的**完整拆解管道**；不要做「复用方法论」式的半流程，要驱动整条管道跑完，拿到全套结构化产物。\n\n| 篇幅 | 调用的拆解管道 | 产物目录 |\n|------|--------------|---------|\n| 长篇 | story-long-analyze 的完整管道（Stage 0-6） | `拆文库/{导入书名}/` |\n| 短篇 | story-short-analyze 的拆解管道（Stage 2-6） | `拆文库/{导入书名}/` |\n\n### 调用契约\n\n#### 长篇：自动续跑过 Stage 1 停靠点\n\nstory-long-analyze 在 Stage 0+1（黄金三章）后会**自动停靠**并用 AskUserQuestion 询问是否继续全量拆解（对应 story-long-analyze 的「Stage 1 停靠点」）。但导入场景需要 Stage 2-6 的全套产物（逐章摘要 / 聚合分析 / `剧情/节奏.md` / `剧情/情绪模块.md` / 设定关系 / 汇总报告 / 文风），缺一不可——否则 Phase 3 迁移会拿到半成品。\n\n**当前拆文契约**：`_progress.md` 必须是 `schema_version: 2`，且 `剧情/节奏.md` 与 `剧情/情绪模块.md` 是导入必备权威产物。任一缺失都先修复或重跑对应 Stage，不得用摘要文件拼出看似完整的导入工程。\n\n因此调用 story-long-analyze 时**必须在一开始就以「完整拆解、一次跑完、不要停下询问」模式驱动管道**，命中其「跳过询问」路径（用户开头明确说「完整拆解 / 一次跑完 / 系统拆解 / 别问」时不停靠），让管道自动从 Stage 2 续跑到 Stage 6。\n\n- 措辞示例：启动深度分析时声明「以『完整拆解、一次跑完、不要停下询问』模式拆解本书，确保 Stage 2-6 全部产出」。\n- **兜底**：若运行环境实际仍停在 Stage 1 询问处，story-import 自动选择「继续全量拆解」，**绝不把停靠询问甩给用户**。\n- 环境检测（Phase 1）发现未部署 chapter-extractor agent 且用户选择「继续导入」时，Stage 2 逐章摘要降级为串行处理，产物仍完整，仅速度变慢。\n\n#### 短篇：单一全量管道\n\nstory-short-analyze 的拆解管道（Stage 2-6）本身**无 Stage 1 停靠点**，一次跑完即可。它的 Phase 1 四个 Step 都要跑，按下表的导入场景取值执行，不整段跳过：\n\n| Phase 1 步骤 | 导入场景下的处理 |\n|-------------|----------------|\n| Step 1：拿到原文 | 用 story-import Phase 1 已确认的源文件，不重新问 |\n| Step 2：字数检查（长短篇路由） | 篇幅已在 story-import Phase 1 判定并经用户确认，直接答「按短篇继续」，不重新路由 |\n| Step 3：题材识别 | **照常跑**，题材标尺必须加载；story-import Phase 1 Step 4 已确认的题材类型直接代入，不重复提问 |\n| Step 4：续跑检查（`拆文库/{导入书名}/_meta.json` 已存在时三选一） | 先看旧产出是否可直接复用：`stages_completed` 已含 6 且 `拆文报告.md` / `情节节点.md` / `写作手法.md` / `原文/` 均非空、来源与本次导入源一致 → 直接进 Phase 3，不重跑也不归档。否则本轮首次进入 Phase 2 → 按 (a) 覆盖：先把旧产出归档到 `拆文库/{导入书名}/_archive_{时间戳}/`，再从 Stage 2 重跑；同一轮导入内重试同一本书 → 按 (b) 续跑。不把三选一甩给用户，也不跳过归档 |\n\n`_meta.json` 的 `genre_detected` 由 Step 3 产出，是拆文契约的阻断级必填字段，下游 story-short-write 靠它选题材标尺——**不要跳过 Step 3 直接从原文备份起跑**。\n\n- 措辞示例：启动深度分析时声明「《{导入书名}》篇幅已确认为短篇（题材 {题材类型}，全文约 {N} 字），Step 2 直接按短篇继续，Step 4 按覆盖并归档处理，题材识别照跑，确保 Stage 2-6 全部产出」。\n- **兜底**：若运行环境仍抛出「此文字数 {N} 偏长，建议改用 `/story-long-analyze`」或灰区提问「介于短/长之间，按短篇还是长篇拆？」，一律按 Phase 1 已锁定的判定逐字回「按短篇继续」，**绝不把路由询问甩给用户**。\n\n### 输出目录\n\n#### 长篇拆文库结构\n\n长篇分析输出到 `拆文库/{导入书名}/`，与 story-long-analyze 拆解管道完全一致：\n\n```\n拆文库/{导入书名}/\n├── 原文/\n│   └── 原文.txt          # 扩展名随源文件；对话直接贴入的文本存为 原文.md\n├── 概要.md\n├── 章节/\n│   ├── 第1章_深度拆解.md\n│   ├── 第1章_摘要.md\n│   └── ...               # 每章同时有 第N章_深度拆解.md 和 第N章_摘要.md\n├── 快速预览.md\n├── 角色/\n│   ├── {角色名}.md\n│   └── 角色关系.md\n├── 剧情/\n│   ├── {剧情标题}.md\n│   ├── 故事线.md\n│   ├── 节奏.md          # 关键信息推进 / 情绪触动点 / 爆发节奏\n│   ├── 情绪模块.md      # 读者需求 / 情绪引擎 / 可复现模块\n│   └── 散落情节.md\n├── 设定/\n│   ├── 世界观/         # 背景设定.md / 力量体系.md / 地理.md / 金手指.md（子目录形态）\n│   └── 势力/           # {势力名}.md（每势力一文件）\n├── 拆文报告.md\n├── 文风.md          # Stage 6 文风：写作技法视图 + 原文范例锚点\n└── _progress.md\n```\n\n#### 短篇拆文库结构\n\n短篇分析输出到 `拆文库/{导入书名}/`，与 story-short-analyze 拆解管道一致：\n\n```\n拆文库/{导入书名}/\n├── 原文/\n│   └── 原文.txt          # 扩展名随源文件；对话直接贴入的文本存为 原文.md\n├── 拆文报告.md\n├── 情节节点.md\n├── 写作手法.md\n└── _meta.json           # 管道元数据 + 结构计数（下游 story-short-write 必读）\n```\n\n### 长篇完整管道（Stage 0-6）\n\n> 管道详细说明见 story-long-analyze（运行 `/story-long-analyze`），此处仅列概要。\n\n| 阶段 | 名称 | 输入 | 输出 | 完成标志 |\n|------|------|------|------|----------|\n| 0 | 概要提取 | 原始文本 | 概要.md + 章节索引 | 章节结构识别完成 |\n| 1 | 黄金三章 | 前 3 章原文 | 第1章_深度拆解.md / 第2章_深度拆解.md / 第3章_深度拆解.md → **停靠产出快速预览.md**（导入场景自动续跑，不停下询问） | 3 章拆解完成 |\n| 2 | 逐章摘要 | 分块章节文本 | 章节摘要.md（含情节点+角色+**关键信息与扩写技法**）。每章10-40情节点（密度150-200字/个，按字数动态调节）。角色过滤（龙套不提取、别名归类）。**并行 chapter-extractor agent 模式**（未部署 agent 时降级串行）。**计数验证：摘要数 == 章节数**。 | 所有章节处理完成 |\n| 3 | 聚合分析 | 全部章节摘要 | `剧情/*.md` + `剧情/README.md` + `剧情/故事线.md` + **`剧情/节奏.md` + `剧情/情绪模块.md`**。**故事框架识别**（前置）。**两步法剧情聚合**（先从摘要识别剧情大纲，再按大纲分配情节点）。**关键信息推进索引**、**情绪触动点与爆发节奏**、**读者需求 / 情绪引擎 / 可复现模块**。**角色合并**（跨章节去重+别名归一）。**角色分级**（主角/反派/核心配角/功能角色）。**散落情节兜底**（6步，含覆盖率验证）。**质量检查**（置信度>=0.85/覆盖率85%-95%/重叠率<=35%）。 | 质量检查通过 |\n| 4 | 设定+关系 | 阶段 3 合并后角色数据+情节点 | 设定/*.md + 角色/*.md。**两阶段角色模型**。**别名解析**（置信度≥0.85自动合并）。 | 设定和关系提取完成 |\n| 5 | 汇总报告 | 全部输出 | 拆文报告.md（含「读者需求 / 情绪引擎」「关键信息与扩写技法总览」「节奏与情绪触动点」「可复现模块」，并指向 `剧情/节奏.md` / `剧情/情绪模块.md`） | 报告生成完成 |\n| 6 | 文风 | 拆文报告.md + 章节/第1-3章_深度拆解.md + 章节/*_摘要.md + 原文/原文.txt | 文风.md（本书历史写法分析） | 文风落盘 `拆文库/{导入书名}/文风.md`，保留为导入分析，不复制到本书 `对标/` |\n\n### 短篇拆文管道\n\n> 管道详细说明见 story-short-analyze（运行 `/story-short-analyze`），此处仅列概要。\n\n短篇为单一全量管道（Stage 2-6 严格串行），产物落盘 `拆文库/{导入书名}/`：Stage 2 结构+情节节点 → Stage 3 情感线+爆点 → Stage 4 反转+写作手法 → Stage 5 人物+开头结尾 → Stage 6 综合评估，最终汇总为 `拆文报告.md`、`情节节点.md`、`写作手法.md`，另有 `_meta.json` 记管道元数据与结构计数。\n\n长篇分块沿用 story-long-analyze：Stage 2 用 chapter-extractor agent 并行，其余阶段按该 skill「分块策略」的章数阈值执行，story-import 不另定一套。\n\n### 恢复机制\n\n- 中断时通过进度文件追踪进度\n- 新会话读取进度文件定位断点\n- 从断点所在块的起始章节恢复\n- 长篇进度文件格式沿用 story-long-analyze 拆解管道的进度段落约定，包含当前阶段、最后处理章节、已完成阶段列表、更新时间\n\n### 质量检查\n\n长篇阶段 3-4 完成前执行质量检查（置信度 >= 0.85，覆盖率 85%-95%，重叠率 <= 35%），由 story-long-analyze 拆解管道自带的质量检查负责。短篇质量检查见 story-short-analyze 各阶段的完成标志。\n\n---\n\n## Phase 3：结构迁移\n\n将 `拆文库/{导入书名}/` 的分析结果迁移为可被写作 skill 消费的项目结构。\n\n### 分流路由\n\n按 Phase 1 判定的篇幅类型分流，两条路径产出的工程结构完全不同：\n\n| 篇幅 | 迁移路径 | 映射规则 | 续写接手 |\n|------|---------|---------|---------|\n| 长篇 | **3-L：长篇结构迁移** | [references/structure-mapping-long.md](references/structure-mapping-long.md) | story-long-write 日更循环 |\n| 短篇 | **3-S：短篇结构迁移** | [references/structure-mapping-short.md](references/structure-mapping-short.md) | story-short-write Phase 3 逐场景写作 |\n\n---\n\n## Phase 3-L：长篇结构迁移\n\n将 `拆文库/{导入书名}/` 的分析结果迁移为 `{导入书名}/` 长篇项目结构。迁移规则详见 [references/structure-mapping-long.md](references/structure-mapping-long.md)。\n\n### 迁移步骤\n\n#### Step 1：创建项目骨架\n\n```\n{导入书名}/\n├── 设定/\n│   ├── 世界观/\n│   ├── 角色/\n│   └── 势力/\n├── 大纲/\n├── 正文/\n├── 追踪/\n│   └── 逐章记录/\n├── 对标/                       # 可选；仅在显式绑定外部对标时创建子目录\n└── 参考资料/\n```\n\n#### Step 2：正文标准化\n\n将原文迁移到 `正文/`，统一命名格式：`第XXX章_章名.md`。\n\n- 识别章节分隔符（第X章、Chapter X 等）\n- 提取章节标题\n- 补零对齐编号（第1章 → 第001章）\n- 保留原文内容不变\n\n#### Step 3：角色文件迁移\n\n将 `拆文库/{导入书名}/角色/{角色名}.md` 迁移到 `设定/角色/{角色名}.md`。\n\n迁移时按 `references/structure-mapping-long.md` 的「角色文件迁移模板」补齐 story-long-write 角色模板字段。\n\n角色分级（沿用 story-long-analyze 标准）：\n\n| 等级 | 标准 | 迁移策略 |\n|------|------|---------|\n| 主角 | 出现章节 ≥50% + 推动主线 + 完整成长轨迹 | 完整迁移 |\n| 反派 | 与主角对立 + 推动核心冲突 + 明确动机 | 完整迁移 |\n| 核心配角 | 出现章节 ≥20% 或推动重要支线 | 完整迁移 |\n| 功能角色 | 出现章节 <20% + 作用有限 | 简化迁移 |\n\n#### Step 4：关系文件迁移\n\n将 `拆文库/{导入书名}/角色/角色关系.md` 转换为 `设定/关系.md`，按 [structure-mapping-long.md](references/structure-mapping-long.md)「关系文件转换规则」的目标格式模板输出。\n\n#### Step 5：同步世界观设定\n\n当前拆文契约已按主题输出 `拆文库/{导入书名}/设定/世界观/*.md` 与 `设定/势力/*.md`。导入时原样同步到项目；`世界观/` 必须包含 `背景设定.md`。`力量体系.md` 小于 200 字并已并入 `背景设定.md` 时可省略；否则缺失当前必需产物时停止并提示重跑 story-long-analyze Stage 4。不再现场拆分扁平文件。\n\n#### Step 6：大纲生成\n\n**大纲.md**（卷级结构）：从 `剧情/故事线.md`、`剧情/*.md` 和 `快速预览.md` 反推。**卷划分采用用户确认制**，规则见 [structure-mapping-long.md](references/structure-mapping-long.md)「大纲反推规则」：\n\n- **原文有明确卷界**（存在「第一卷」「卷一」等卷级标题）→ 按原文卷界直接划分，无需询问。\n- **原文无明确卷界** → **不机械按「每卷 20-40 章」硬切**。根据故事线/场景切换/大型时间跳跃检测候选卷边界，向用户展示候选划分方案，**等待用户确认后**才写定卷纲；用户确认前 `大纲/大纲.md` 只记录候选方案。\n\n```markdown\n# 全书大纲\n\n## 卷级大纲\n\n### 第一卷：{卷名}（约 {X} 万字，{Y} 章）\n- 功能：{从剧情分析推断}\n- 核心事件：{一句话}\n- 起始状态 → 结束状态：{从角色弧线推断}\n```\n\n**卷纲**：卷划分确认后，从剧情文件聚合生成 `大纲/卷纲_第X卷.md`，按 [structure-mapping-long.md](references/structure-mapping-long.md)「卷纲反推」模板格式。\n\n**细纲**：从章节摘要反推生成 `大纲/细纲_第XXX章.md`：\n\n```markdown\n## 细纲（第 N 章）\n\n### 第 N 章：{章名}\n- 核心事件：{从摘要中提取}\n- 字数目标：{原文实际字数}\n- 目标情绪：{从章节基调/情绪曲线提取；未知写 [待补充]}\n- 章首钩子：[待补充]\n- 爽点：{从情节点推断；无明确证据写 [待补充]}\n\n#### 内容概括（五段式）\n- 起因：{从情节点归纳；未知写 [待补充]}\n- 发展：{从情节点归纳；未知写 [待补充]}\n- 转折：{从情节点归纳；未知写 [待补充]}\n- 高潮：{从情节点归纳；未知写 [待补充]}\n- 结尾：{原文最后落在什么动作/画面/台词上；未知写 [待补充]}\n\n#### 情节安排（多线）\n- 主线推进：{从剧情单元索引/摘要反推}\n- 辅线推进：{无证据写“无”或 [待补充]}\n- 事件线 / 任务线：{外部事件链}\n- 感情线 / 关系线：{有证据才写；否则“无显性”或 [待补充]}\n- 逻辑线：原因 → 行动 → 结果 → 后果/新问题\n\n#### 人物关系和出场顺序\n- 出场顺序：{摘要中角色/势力/关键物件出现顺序}\n- 人物关系变化：{本章前 → 本章后；未知写 [待补充]}\n- 视角/信息差：{谁知道什么；读者知道什么；主角误判什么；未知写 [待补充]}\n\n#### 情节细化\n- 情节点序列（逐行填下表；从摘要情节点反推）：\n\n| # | 情节点（谁做了什么） | 功能标签 | 密/铺/疏 | 目标字数 |\n|---|---|---|---|---|\n| 1 | {} | {功能不明写 [待补充]} | {按原文该段实际篇幅归档} | {[待补充]} |\n- 行动成本（可无）/收益归属：{有证据才写；行动成本可无、不硬造；未知写 [待补充]}\n\n#### 结尾设定和钩子\n- 结尾设定：{原文收束落在什么动作或画面；未解决问题；下一章推动力；未知写 [待补充]}\n- 章尾钩子：[待补充]\n```\n\n> 钩子、人物关系变化、辅线/感情线、行动成本/收益归属等无法由原文摘要稳定判断的字段统一标 `[待补充]`；story-import 只反推有证据的蓝图，不为补齐字段编造关系或副线。\n\n#### Step 7：追踪文件生成\n\n导入项目必须通过本 skill 自带的 `scripts/tracking_commit.py init` 一次性生成追踪状态，禁止模型分别写最终文件。完整字段与命令见 [references/tracking-transaction.md](references/tracking-transaction.md)。语义准备顺序如下：\n\n1. **导入截止章**：把最后完整章 N 写入初始化事务的 `last_chapter`。工具在 meta 记录 `imported_through_chapter=N`；导入旧章没有日更事务，不得为第 1..N 章伪造逐章增量，也不额外生成一份重复当前状态的叙事基线。\n2. **核心角色当前快照**：从拆书产物反推主角、反派、核心配角的截至 N 章状态，按角色写入初始化 JSON 的 `character_snapshots`。输出由工具生成到 `追踪/角色状态/{角色名}.md`；算法见 [references/character-state-reverse.md](references/character-state-reverse.md)。\n3. **伏笔当前行**：从有正文证据的铺垫/回收事件生成 `foreshadow`。每个 ID 只保留当前状态一行；尚未实际埋设的未来设计留在大纲，不写 `伏笔.md`。\n4. **事实与读者认知**：把关键事件生成到 `timeline_events`。同一事件同时写客观事实、读者截至 N 章已知内容和实际揭示状态；未来计划揭示章不得伪装成已发生事实。\n5. **续写状态卡输入**：准备当前位置、长期约束、活跃核心角色、近三章速记、下一章承诺和连贯性风险。`上下文.md` 由工具生成固定 7 栏，不把文风、文件索引、普通待办或质检计数塞进续写状态卡。\n6. **执行初始化**：按当前平台探测 Python 3（`python3` → `python` → `py -3`），执行：\n\n   > 项目 `追踪/` 里已有不属于当前协议的早期文件时不必手工清理：`init` 会先把它们按原样整体移入 `追踪/_旧追踪存档/`，再在原地建当前协议。旧内容保留供作者查阅，不参与解析，当前状态完全由本次导入输入决定；校验失败的 `init` 不移动任何文件。\n\n   ```text\n   {PYTHON} {story-import skill 根}/scripts/tracking_commit.py init --project {项目根} --input {初始化事务.json}\n   {PYTHON} {story-import skill 根}/scripts/tracking_commit.py check --project {项目根}\n   ```\n\n以 demo《让你管账号，你高燃混剪炸全网》导入至第 10 章为例：续写状态卡要写清江晨的手机原版《诸君，且听龙吟》被专业团队高清重拍，但高层看片后认为新版“缺了灵魂”，最终继续采用原版；江晨快照应体现其军宣创作价值已获周薄森、张耀祖确认；读者时间线只写读者已经看到的看片会结论，钟嘉嘉“只猜对了一半”背后的培养安排若尚未揭示，只能出现在作者真相，不能泄露到读者视图。\n\n初始化成功后应得到：\n\n```text\n追踪/\n├── _tracking-state.json\n├── 上下文.md\n├── 逐章记录/                 # 导入旧章不补造文件，续写从第 N+1 章开始\n├── 角色状态/{角色名}.md\n├── 伏笔.md\n├── 时间线/\n│   ├── 作者真相.md\n│   └── 读者已知.md\n```\n\n半成品最后一章为残稿时，`last_chapter`、角色快照和其他当前语义检查点一律截至最后完整章；残稿处理策略写入连贯性风险，不把未完成动作登记成既成事实。\n\n#### Step 8：题材定位生成\n\n从拆文报告中提取核心发现，生成 `设定/题材定位.md`（按 [structure-mapping-long.md](references/structure-mapping-long.md)「题材定位生成」模板格式）。\n\n`设定/题材定位.md` 的本书题材、核心梗、情绪与节奏摘要来自 `拆文库/{导入书名}/`，但这些字段不是对标登记。只有 Phase 1 已明确绑定外部对标时，才追加「对标书清单 + 主对标书」段；主对标书最多 1 本，副对标 / 参考对标不限制数量。未绑定时省略整个对标登记段，不得用 `{导入书名}` 补位。该段格式见上述「题材定位生成」模板的「对标书清单」。\n\n后续如需快速概览，可另写「对标分析（派生概要）」表；该表不是权威 registry，不得替代 `主对标书` 与完整 `对标书列表`。所有登记项必须能回溯到对应 `拆文库/{对标书名}/`，不得引用本书根 `设定/`。\n\n#### Step 9：对标结构化资产同步\n\n本步只处理 Phase 1 显式绑定的外部参考作品。把 `拆文库/{对标书名}/` 的结构化分析资产同步到项目引用视图 `{项目}/对标/{对标书名}/`，供 story-long-write 优先读取。没有绑定外部对标时跳过本步，不创建空目录；严禁使用 `拆文库/{导入书名}/` 或项目 `设定/` 作为复制源。源路径→目标路径的完整同步映射见 [structure-mapping-long.md](references/structure-mapping-long.md)「对标引用视图同步规则」。\n\n**缺失处理**：\n\n- 已选外部对标缺 `剧情/节奏.md` 或 `剧情/情绪模块.md` → 不登记、不生成半套对标视图；报告 `module_or_rhythm_required_missing` 并提示对 `{对标书名}` 重跑 `/story-long-analyze` Stage 3+。本书核心工程迁移不因此回滚。\n- 其它结构化子目录缺失 → 按既有导入缺失项提示，不阻塞项目创建\n\n#### Step 10：文风同步\n\n外部对标已通过 Step 9 校验时，把 `拆文库/{对标书名}/文风.md` 复制到 `{项目}/对标/{对标书名}/文风.md`。纯复制，不重新生成；未绑定外部对标时跳过。\n\n**缺失处理**：\n\n- 拆文库没有文风文件（analyze 未跑 Stage 6）→ 导入报告提示用户重跑 `/story-long-analyze` 后再同步；日更前文风缺失会被 fail-fast 拦截\n- 项目对标已有旧文风文件 → 覆盖（最新拆文产物优先），在导入报告告知\n\n---\n\n## Phase 3-S：短篇结构迁移\n\n将 `拆文库/{导入书名}/` 的短篇拆文产物迁移为 `{短篇标题}/` 短篇工程结构，供 story-short-write Phase 3 逐场景写作无缝接手。迁移规则详见 [references/structure-mapping-short.md](references/structure-mapping-short.md)。\n\n> **短篇工程与长篇完全不同**：短篇正文是单文件 `正文.md`（不切章），**不产** `追踪/`、`大纲/`、`正文/` 等长篇目录。迁移时严禁误建这些长篇专属目录。\n\n### 短篇目标工程结构\n\n```\n{短篇标题}/\n├── 设定.md              ← 含核心框架 + 本书续写基线\n├── 小节大纲.md          ← 按段-小节结构反推\n├── 正文.md              ← 单文件全文正文\n└── 对标/{对标书名}/     ← 可选：仅外部对标引用视图\n    ├── 拆文报告.md\n    ├── 情节节点.md\n    └── 写作手法.md\n```\n\n### 迁移步骤\n\n#### Step 1：正文迁移\n\n将 `拆文库/{导入书名}/原文/` 的全文迁移为单文件 `{标题}/正文.md`，按 [format-and-structure.md](references/format-and-structure.md) 规范化格式（小节标记 `###1.`、段间仅单换行、对话引号按项目/平台约定统一）。**原文已是成稿，不重写内容，只规范格式。**\n\n#### Step 2：设定生成\n\n从 `拆文报告.md`、`写作手法.md` 反推 `{标题}/设定.md`，含两个区块：\n\n- **核心框架**：对齐 story-short-write 核心框架模板（基本信息、一句话梗概、核心反转、情绪设计、人设速写）。\n- **本书续写基线**：把已写内容的故事结构、情绪节奏、核心反转机制、既有写作手法写入续写基线区；这是本书内部上下文，不是对标摘要。\n\n#### Step 3：小节大纲生成\n\n从 `情节节点.md` 的功能分段反推 `{标题}/小节大纲.md`，按开头段/铺垫段/升级段/反转段/结尾段映射；短篇只做轻量蓝图：每节写 `结构段/五段功能`、主事件、3-5 个子事件、目标情绪、人物/关系变化、因果/逻辑链、结尾承接/小钩子。钩子或关系无法判断时标 `[待补充]`，不套用长篇完整章节蓝图。\n\n#### Step 4：外部对标引用视图（可选）\n\n仅当 Phase 1 已显式绑定外部 `{对标书名}` 时，才把 `拆文库/{对标书名}/` 同步为 `{标题}/对标/{对标书名}/`；没有绑定则跳过。不得把 `拆文库/{导入书名}/` 整体复制进 `对标/`。\n\n---\n\n## Phase 4：项目激活\n\n### Step 1：质量检查\n\n按篇幅对照对应的质量检查清单：\n\n- **长篇**：完整导入质量清单见 [references/structure-mapping-long.md](references/structure-mapping-long.md) 末尾（含正文文件数对照、核心角色独立快照、作者/读者时间线隔离、`tracking_commit.py check` 通过、卷划分已经用户确认等）。\n- **短篇**：质量清单见 [references/structure-mapping-short.md](references/structure-mapping-short.md) 末尾的质量检查清单（含 `正文.md` 单文件存在且格式合规、`设定.md` 含核心框架+本书续写基线、未误建长篇专属目录等）。\n\n### Step 2：缺失项提示\n\n输出导入结果摘要和待补充项，按篇幅分支。\n\n**长篇导入完成报告**：\n\n```\n=== 导入完成报告（长篇）===\n书名：{导入书名}\n源文件：{X} 章，{Y} 万字\n项目目录：{路径}\n\n## 已生成文件\n- 正文：{N} 章\n- 角色文件：{M} 个\n- 大纲：大纲.md + {V} 个卷纲 + {N} 个细纲\n- 追踪：唯一结构化 state + 核心角色独立派生快照 + 伏笔当前视图 + 时间线双视图 + 空逐章记录目录 + 固定 7 栏上下文\n- 设定：{世界观文件数} 个\n- 外部对标：{未绑定 / 已从 `拆文库/{对标书名}/` 同步到 `对标/{对标书名}/` / 绑定失败及修复动作}\n\n## 待补充项\n- [ ] 细纲中的章首/章尾钩子需要补充\n- [ ] 题材定位的核心梗三分法需要确认\n- [ ] 伏笔追踪中的伏笔已复核\n- [ ] `追踪/时间线/读者已知.md` 未泄露 `作者真相.md` 中尚未揭示的事实\n- [ ] 卷划分已确认（原文无明确卷界时）\n- [ ] `拆文库/{导入书名}/` 未被复制到项目 `对标/`，本书未登记为自身对标\n- [ ] 若绑定外部对标，`设定/题材定位.md` 的 `主对标书` 与 `对标书列表` 只包含独立 `{对标书名}`，且同步来源与目录名一致\n\n## 下一步操作\n- 运行 `/story-review lean` 审查导入结果\n- 运行 `/story-long-write` + \"日更\" 开始续写\n```\n\n**短篇导入完成报告**：\n\n```\n=== 导入完成报告（短篇）===\n标题：{短篇标题}\n源文件：{Y} 字\n项目目录：{路径}\n\n## 已生成文件\n- 正文.md（单文件，{Y} 字）\n- 设定.md（核心框架 + 本书续写基线）\n- 小节大纲.md（{N} 个小节）\n- 外部对标：{未绑定 / `对标/{对标书名}/` 已同步 / 绑定失败及修复动作}\n\n## 待补充项\n- [ ] 所有 [待补充] 标记的文件已复核\n- [ ] 小节大纲的章首/章尾钩子需要补充\n- [ ] 核心反转的铺垫线索已确认\n\n## 下一步操作\n- 运行 `/story-short-write` Phase 3 开始续写\n```\n\n### Step 3：项目激活\n\n- 设置 `.active-book` 指向导入的书名/标题目录\n- 确认项目可以被对应写作 skill 识别（长篇 → story-long-write，短篇 → story-short-write）\n- 可选验证：如果项目已部署 story-explorer agent（优先检查 `.claude/agents/` 下的 `story-explorer.md` 是否存在；不存在时再检查 `.opencode/agents/`，再不存在时检查 `.codex/agents/`），可 spawn `Agent(subagent_type: \"story-explorer\", prompt: \"项目目录：{dir}\\n查询类型：progress\\n查询参数：导入验证\")` 交叉验证迁移数据完整性\n\n> setup 环境检测已在 Phase 1「环境检测前置」完成，此处不再重复检测。\n\n---\n\n## 大型作品处理（>200 章）\n\n> 本节仅适用于长篇导入。短篇为单文件全量迁移，无增量导入需求。\n\n超过 200 章的作品，**拆解可以分批，追踪初始化必须一次覆盖全部已写章节**：\n\n1. **拆解分批**：首期只深拆前 50 章 + 全书概要，后续按需补拆更多章节到 `拆文库/`。\n2. **追踪一次到位**：初始化事务的 `last_chapter` 写**最后一个已写完的章号 N**，不是首期拆解的 50。`imported_through_chapter` 由 `init` 一次写定、之后不再推进，逐章事务只接受 N+1 起的章号；第 1..N 章不伪造逐章记录，续写从 N+1 开始。若 init 时误写成 50，第 51..N 章仍可逐章 `append` 补上（一章一份事务，章号必须连续），只是要为已写好的旧章逐章构造事务；不要删 `追踪/` 重来——`_旧追踪存档/` 也在里面。\n3. **上下文摘要**：未深拆的章节生成简化摘要（200 字/章），供反推当前状态用。\n\n---\n\n## 参考资料索引\n\n按阶段加载，不一次全部加载。\n\n本 skill 自带的 reference 文件全部位于 `references/`，按场景加载。涉及别的 skill 的方法论/模板时，story-import 不直接加载文件，而是运行对应 `/命令` 由该 skill 自行加载。\n\n### Phase 1：确认导入源\n\n| 场景 | 加载文件 |\n|------|---------|\n| 篇幅分流判定 | `references/length-routing.md` |\n| 章节格式识别 | 由 story-long-analyze 拆解管道（运行 `/story-long-analyze`）的阶段 1 负责 |\n\n### Phase 2：深度分析\n\n| 场景 | 加载文件 / 相关 skill |\n|------|---------|\n| 长篇深度分析（方法论、质量检查、输出模板均自带） | 运行 `/story-long-analyze` 调用长篇拆解管道 |\n| 短篇深度分析（方法论、质量检查、输出模板均自带） | 运行 `/story-short-analyze` 调用短篇拆解管道 |\n\n### Phase 3：结构迁移\n\n| 场景 | 加载文件 |\n|------|---------|\n| 长篇迁移映射规则 | `references/structure-mapping-long.md` |\n| 短篇迁移映射规则 | `references/structure-mapping-short.md` |\n| 角色状态反推规则（长篇） | `references/character-state-reverse.md` |\n| 角色状态规则（character-state-reverse.md 依赖） | `references/state-tracking.md` |\n| 短篇正文格式规范 | `references/format-and-structure.md` |\n\n> 长篇细纲模板格式参见 story-long-write（Phase 3 细纲部分）；短篇核心框架模板参见 story-short-write（核心框架部分）。这两项为纯文本指引，story-import 不加载对应 skill 的文件。\n\n### Phase 4：项目激活\n\n| 场景 | 说明 |\n|------|---------|\n| 长篇项目结构规范 | 参见 story-long-write（Phase 4 项目文件结构） |\n| 短篇项目结构规范 | 参见 story-short-write（Phase 3 项目结构） |\n| 环境部署 | 部署模板由 `/story-setup` 提供，story-import 不负责部署 |\n\n---\n\n## 流程衔接\n\n**流水线：** 长篇 / 短篇\n**位置：** 导入（在开书之前）\n\n| 时机 | 跳转到 | 命令 |\n|---|---|---|\n| 导入完想继续写（长篇） | story-long-write | `/story-long-write` + \"日更\" |\n| 导入完想继续写（短篇） | story-short-write | `/story-short-write` |\n| 导入完想审查质量 | story-review | `/story-review` |\n| 想深入分析对标（长篇） | story-long-analyze | `/story-long-analyze` |\n| 想深入分析对标（短篇） | story-short-analyze | `/story-short-analyze` |\n| 从零开新书（长篇） | story-long-write | `/story-long-write` + \"开书\" |\n| 从零开新书（短篇） | story-short-write | `/story-short-write` |\n| 项目未部署环境 | story-setup | `/story-setup` |\n\n---\n\n## 语言\n\n- 跟随用户的语言回复，用户用什么语言就用什么语言回复\n- 中文回复遵循《中文文案排版指北》","author":"@worldwonderer","ownerProfile":null,"authorContacts":null,"sourceUrl":"https://github.com/worldwonderer/oh-story-claudecode/tree/main/skills/story-import","license":"MIT","category":"writing","lang":"multi","tokens":12239,"stars":0,"calls30d":1,"claimed":false,"visibility":"public","origin":"crawler","version":"0.1.0","createdAt":"2026-08-22","updatedAt":"2026-08-22","files":[{"path":"references/character-state-reverse.md","size":4167,"sha256":"73e3f73bc01ec12d116baaa875e93589648862d456ba2532ca6847fccbc1819f"},{"path":"references/format-and-structure.md","size":10181,"sha256":"f7cdac57d656f432841f90a337368e2cab8f7b89f80c917e2d7c857122921135"},{"path":"references/length-routing.md","size":6328,"sha256":"7f0db8d0dd53f4ce808228f8373139892f46ead4087b78203b492d7028056b2c"},{"path":"references/state-tracking.md","size":4527,"sha256":"76c2261e4b9cd825916c3bdba75c07d9db9a7cddd6e67dd52f26f38a96ad289a"},{"path":"references/structure-mapping-long.md","size":20225,"sha256":"f6856dc294184990b95d62caef02594ebb0fd3f5fa13c8bb9e81194fdacac0b9"},{"path":"references/structure-mapping-short.md","size":7631,"sha256":"f44952a088e8748c5a6c050970c6f0570a114f8da35f437be4acbaeba0a8ff13"},{"path":"references/tracking-transaction.md","size":11388,"sha256":"4f4d7909736ad2aeb6a04442b67a8511d8a30f5d207666a5d98817d1a3f8486f"},{"path":"scripts/tracking_commit.py","size":51860,"sha256":"44be5492003377928753644956f3f13ff6e20b2759c208273c4e551da3522628"}],"requires":{"mcp":[],"tools":[]},"safety":{"flags":[],"scannedAt":"2026-08-22","hasScripts":true,"networkEndpoints":[]}}