story-import · diff

v1.0.0 to v1.0.0

62 added, 578 removed. Audit A to A.

---
name: story-import
version: 1.0.0
description: "逆向导入已有小说。将已写好的小说(半成品或完本)反向解析为标准项目目录结构,兼容 story-long-write / story-short-write 后续写作流程;内部复用 story-long-analyze / story-short-analyze 的拆解管道,按篇幅自动分流。触发方式:/story-import、「导入小说」「反向解析」「导入」「把我的书导进来」。"
metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudecode"}}
---
# story-import:逆向导入已有小说
- 你是小说项目逆向工程师。导入按篇幅分流:长篇走 Phase 3-L,短篇走 Phase 3-S。
-
- **交付物是写作工程**:把作者已有的书重建为可续写的**写作工程**(项目结构 + 拆文库分析资产)。`拆文库/{导入书名}/` 是重建工程的数据源,不能当成用完即弃的中间产物,也不能替代交付物本身——交付物应让作者能直接续写。执行时以「建工程」为可见目标,别把「拆文」当成终点或对外标签。
-
- ---
+ 你是小说项目逆向工程师。**交付物是写作工程**:把作者已有的书重建为可续写的工程(项目结构 + 拆文库分析资产),让作者能直接接着写。`拆文库/{导入书名}/` 是重建工程的数据源,保留不丢弃,但不是交付物本身;对作者以「建工程」为可见目标,别把「拆文」当成终点或对外标签。
> Agent 兼容性:只检查当前运行时的 canonical 目录:Claude `.claude/agents/{agent}.md`、OpenCode `.opencode/agents/{agent}.md`、Codex `.codex/agents/{agent}.toml`、Antigravity `.agents/agents/agent-name/agent.md`(`agent-name` 为目标 agent 名),不得因其他端文件存在而误判。Codex 使用同名 `agent_type`;Antigravity 使用 `invoke_subagent` + `TypeName`。对应运行时未暴露 custom-agent registry / `invoke_subagent` 或返回未知 agent 时,必须降级 solo/direct。检测到 `.zcode/` 时同样直接 solo/direct,因为 ZCode 3.3.4 不执行项目 custom agents;报告 `Fallback: project custom agents unavailable -> solo`。Claude 用 `subagent_type`;OpenCode 用 `subagent` 工具的 `agent` 参数。
>
- > Spawn 版本提示(不阻断 spawn):先读取项目根 `.story-deployed` 的 `agents_version`。与本版 `agents_version: 32` 不一致时(标记缺失、字段缺失/非整数、小于或大于 32)**照常按文件存在性检查并 spawn**,同时报告 `Notice: agents bundle 版本不匹配(项目 {N},本版 32)` 并提示重新运行 `/story-setup` 后新开会话;大于 32 时额外提示先更新 oh-story-claudecode,不要用本地旧版 setup 降级覆盖。只有 agent 文件缺失、或运行时不暴露 custom agent 时才降级 solo/direct,报告 `Fallback: ... -> solo`。
-
- ## 核心原则
+ > Spawn 版本提示(不阻断 spawn):先读取项目根 `.story-deployed` 的 `agents_version`。与本版 `agents_version: 34` 不一致时(标记缺失、字段缺失/非整数、小于或大于 34)**照常按文件存在性检查并 spawn**,同时报告 `Notice: agents bundle 版本不匹配(项目 {N},本版 34)` 并提示重新运行 `/story-setup` 后新开会话;大于 34 时额外提示先更新 oh-story-claudecode,不要用本地旧版 setup 降级覆盖。只有 agent 文件缺失、或运行时不暴露 custom agent 时才降级 solo/direct,报告 `Fallback: ... -> solo`。
- ### 名词与目录边界(全流程硬约束)
+ ## 名词与目录边界(全流程硬约束)
- `{导入书名}`:用户自己已经写到一半或已经完本、现在要重建为工程的小说;它的分析源固定为 `拆文库/{导入书名}/`。
- `{对标书名}`:用户另行选择的外部参考作品;它必须是独立拆解产物,来源固定为 `拆文库/{对标书名}/`,且不得指向本次导入源。
- `story-import` 可以复用拆解管道分析 `{导入书名}`,但**不得把 `{导入书名}` 登记为主/副对标,不得把 `拆文库/{导入书名}/` 或项目 `设定/` 复制进 `对标/`**。
- 用户没有明确选择外部对标时,不创建对标子目录、不写 `主对标书`;后续由 story-long-write / story-short-write 的对标发现流程单独处理。
- ### 原则 1:先分析后迁移
-
- 先用拆解管道完整拆解小说(输出到 `拆文库/{导入书名}/`),再将分析结果迁移为项目结构。该目录保存本书导入分析,保留不丢弃,但不属于外部对标视图。
-
- ### 原则 2:复用不重复
-
- 深度分析复用现成管道:长篇由 `/story-long-analyze` 识别旧成果、增强或续跑,短篇运行 `/story-short-analyze`。方法与模板由 analyze skill 自带,story-import 不另维护。
-
- ---
-
- ## Phase 1:确认导入源
-
- ### Step 1:导入续写入口顺序(先答用户的流程问题)
-
- 当用户问"导入续写先走 story-setup 还是 story-import"、"已有小说怎么续写"、"导入流程"这类流程问题时,先直接给出结论,再继续收集原文:
-
- 1. **推荐顺序**:先 `/story-setup`(部署 hooks/agents/AGENTS),新开/刷新会话后运行 `/story-import`,最后用 `/story-long-write 日更/写第N章` 续写。
- 2. **也可以直接 `/story-import`**:本 skill 会在进入深度分析前检测 `.story-deployed` 与专业 agent;未部署时会给出"先去 setup"或"继续导入(串行降级)"两种选择。
- 3. **已导入过的当前协议项目**(书名目录下有 `追踪/_tracking-state.json`):不要重复跑完整导入;直接进入书名目录,确认 `.active-book` 指向正确书目,再用 `/story-long-write 日更` 或 `/story-long-write 写第N章`。
- 4. **v0.7.2 及更早的旧追踪项目**(有 `追踪/` 和正文,但没有 `追踪/_tracking-state.json`):日更会停下要求重新导入,但**不需要重跑全书拆解**。只重建追踪即可,见下方「旧追踪项目迁移」。
-
- 这段结论必须出现在任何导入源追问之前,避免用户只想确认流程却被直接要求贴原文。
-
- #### 旧追踪项目迁移
-
- 书名目录下有 `追踪/` 与正文、但没有 `追踪/_tracking-state.json` 时,项目停在 v0.7.2 及更早的追踪结构上。正文和 `设定/`、`大纲/`、`拆文库/` 都不受影响,**只需重建 `追踪/`**,不重跑 Phase 2 拆解、不碰正文:
-
- 1. 数清最后一个完整章号 `N`(`正文/第NNN章_*.md` 的最大值)。
- 2. 从旧 `追踪/` 现有文件(角色状态、伏笔、时间线等,文件名按项目实际情况)和最近 3-5 章正文,重建当前状态:核心角色快照、未回收伏笔、已揭示时间线事件、长期约束、下一章承诺。角色快照的反推方法见 [references/character-state-reverse.md](references/character-state-reverse.md)。
- 3. 完整读取 [references/tracking-initialization.md](references/tracking-initialization.md),按其初始化事务格式构造 JSON,`last_chapter` 写 `N`(第 1..N 章不伪造逐章记录),执行 `tracking_commit.py init`。
- 4. `init` 会把旧追踪结构按原样整体移入 `追踪/_旧追踪存档/` 再建当前协议——旧内容不删除、不参与解析,留给作者查阅。
- 5. 跑 `tracking_commit.py check` 确认通过,再回 `/story-long-write 日更` 续写。
-
- 重建结果以第 2 步的证据为准;拿不准的字段留空或写进 `continuity_risks`,不杜撰。用户明确要求重拆全书时才走完整 Phase 2。
-
- 问用户:**「你要导入哪本书?请提供文件路径或直接贴文本。」**
-
- ### Step 2:确认意图(写作工程 vs 仅拆文库)
-
- 默认目标是**完整写作工程**(可续写)。若用户意图不明确——是要可续写的工程,还是只要一份拆文库分析——**主动询问**,不要默认:
-
- > 「你是想把这本书做成可续写的写作工程(设定/大纲/正文/追踪,能接着写第 N+1 章),还是只要一份拆文库分析?」
-
- - 要可续写工程 → 走完整 story-import(Phase 2 拆 + Phase 3 迁移)。
- - 只要分析 / 拆文库 → 直接用 `/story-long-analyze`(短篇 `/story-short-analyze`),到拆文库为止,不进 Phase 3 迁移。
-
- ### Step 3:输入方式识别
-
- ```
- 用户提供路径?
- ├─ 单文件路径(.txt/.md)
- │ └─ 按章节分隔符自动切分
- ├─ 目录路径
- │ └─ 按文件名排序,合并处理
- └─ 无路径 → 用户直接贴文本?
- ├─ 是 → 保存到临时文件后处理
- └─ 否 → 提示用户提供源文件
- ```
-
- ### Step 4:基本信息确认
-
- 1. **自动检测**:从文本中识别书名(如果有)、总章数、总字数、章节格式
- 2. **用户确认**:
- - 导入书名:{自动检测或用户输入}
- - 题材类型:{用户提供}
- - 目标平台:{起点/番茄/晋江/其他}
- - 是否完本:{是/否(半成品写到第N章)}
- - **篇幅类型**:长篇 / 短篇 —— 按 [references/length-routing.md](references/length-routing.md) 自动检测(用户显式声明 > 结构信号 > 字数兜底),并向用户复述检测结果请其确认。判定结果决定 Phase 3 走长篇还是短篇路径。
- - **最后一章是否完整**:完整章 / 残稿(写了一半)。若是残稿,提示用户并把「残稿到第 N 章」记入上下文,让用户决定是「基于残章续写」还是「先补完再导入」。story-import 只记录用户决定,不替用户选。
- 3. **外部对标(可选、与导入源分离)**:用户已经明确指定外部对标时,记录 `{对标书名}` 并确认 `拆文库/{对标书名}/` 是该参考作品的独立拆解产物;不得把 `{导入书名}` 或本次刚生成的拆文目录当候选。用户未指定时不追加提问,记为“未绑定”,后续交给写作 skill 的对标发现流程。
- 4. **输出确认**:向用户展示检测到的章节范围、字数、判定的篇幅类型、最后一章状态,以及“外部对标:{对标书名/未绑定}”,确认后开始分析。
-
- ### Step 5:环境检测前置
-
- 在进入 Phase 2 之前,先检测项目是否已部署 story-setup 基础设施:
-
- - 先读取 `.story-deployed` 并执行顶部 Spawn 版本门禁;旧版 `chapter-extractor` 文件即使仍在磁盘上也不可复用。
- - 只有 `agents_version: 32` 通过后,才在当前运行时的 canonical 目录检查 Phase 2 `chapter-extractor`:Claude/OpenCode/Antigravity 为同名 Markdown,Codex 为同名 TOML。
- - 如果 `.story-deployed` 的 `target_cli` 包含 `zcode`,项目 agents 缺失是 ZCode 3.3.4 的预期状态:不要提示重复部署,直接以串行 solo/direct 进入分析并报告 fallback。
-
- **部署标记缺失、版本无效/过期,或当前端的 agent 不可用,且不是已部署 ZCode 项目时**,这样问用户:
-
- > 「这个项目还没装好写作环境。装好后由专门的分析助手逐段拆书,主对话不会被整本书塞满;不装也能导,只是全部在主对话里做,慢一些,结果一样完整。你想:1. 先装环境(推荐):运行 `/story-setup`,装完再说"导入" 2. 直接导入,慢一点也行」
-
- 1. **先去 setup**:暂停导入,运行 `/story-setup`,部署完成后重新触发 `/story-import`;
- 2. **继续导入**:Phase 2 降级为主线程串行处理(长篇逐章摘要由主线程自己写,速度较慢,但产物完整)。
-
- 用户选择记入上下文,Phase 2 据此决定是否派 chapter-extractor。有子代理时,导入属自动续跑,按 story-long-analyze 的「有限并行」档派发(每轮 3 批);用户明确要求时改用串行或不限批次顺序。
-
- ### Step 6:原文备份
-
- 原文备份由 Phase 2 调用的 analyze 拆解管道负责(analyze 管道前置步骤会把原文复制/保存到 `拆文库/{导入书名}/原文/`,对应 story-long-analyze 与 story-short-analyze 的「原文备份(管道前置步骤)」)。Phase 1 只需确认源文件就绪(路径有效或文本已拿到),不在此处单独备份,避免与 analyze 管道重复备份逻辑。
-
- ---
-
- ## Phase 2:深度分析
-
- 按 Phase 1 判定的篇幅类型进入对应 analyze skill。先检查已有拆文资产;可验证的旧成果直接复用,只有缺失范围或本次导入确实依赖的新分析才进入对应 Stage。全新项目再驱动完整管道。
-
- | 篇幅 | 调用的拆解管道 | 产物目录 |
- |------|--------------|---------|
- | 长篇 | story-long-analyze 的统一管道(旧成果直用 / 按需增强 / 全新或部分续跑) | `拆文库/{导入书名}/` |
- | 短篇 | story-short-analyze 的拆解管道(Stage 2-6) | `拆文库/{导入书名}/` |
-
- ### 调用契约
-
- #### 长篇:先兼容识别,再决定是否续跑
-
- 先运行 story-long-analyze Phase 1 的只读检查器(`inspect_existing_assets.py`),登记实际文件和覆盖范围;检查建议不能覆盖下列语义规则:
-
- 新生成或按当前契约续跑的长篇进度保持 `schema_version: 2`;旧成果直接使用不以缺少该字段为失败。
-
- - **旧成果已完成且足以重建写作工程**:直接进入 Phase 3-L。旧 `_progress.md` 版本、缺少 `chapter_index.csv`,或缺少本次新增字段,都不能单独成为重拆理由。
- - **旧成果可以导入,但缺少当前写作/对标功能需要的 `剧情/节奏.md`、`剧情/情绪模块.md` 等资料**:先用现有逐章、剧情、关系、报告和文风做 Stage 3+ 按需增强,不回读原文。不得重跑已完成章节,也不得用空壳文件让门禁通过。
- - **只完成一部分或新旧产物混存**:验证并保留已完成部分,从首个缺失的连续章节块续跑,最后统一聚合。进度记录与实际文件冲突时,以可验证文件为准并记录冲突。
- - **全新导入**:运行 Stage 0-6 完整管道。
-
- 导入需要自动完成本次判定出的必需范围,不把 Stage 1 停靠询问甩给用户。全新导入命中「完整拆解、一次跑完」路径;旧成果增强或部分续跑只执行缺失 Stage/章节块。原有用途当前不消费新增分析时,缺少新增字段只记录能力限制,不阻断导入。
-
- - 措辞示例(全新):启动深度分析时声明「以『完整拆解、一次跑完、不要停下询问』模式拆解本书,确保 Stage 2-6 全部产出」。
- - 措辞示例(旧成果):声明「先复用并校验现有成果,只补当前导入缺失的章节或分析,不覆盖用户原成果」。
- - **兜底**:若全新导入实际仍停在 Stage 1,story-import 自动选择继续;若旧成果任务停靠,则按已登记的缺失范围继续,不能扩大成全书重跑。
- - 环境检测(Phase 1)发现未部署 chapter-extractor agent 且用户选择「继续导入」时,Stage 2 由主线程按相同连续章节块契约串行处理,不能退回每章一次独立调用;产物仍完整,仅速度变慢。
-
- #### 短篇:单一全量管道
-
- story-short-analyze 的拆解管道(Stage 2-6)本身**无 Stage 1 停靠点**,一次跑完即可。它的 Phase 1 四个 Step 都要跑,按下表的导入场景取值执行,不整段跳过:
-
- | Phase 1 步骤 | 导入场景下的处理 |
- |-------------|----------------|
- | Step 1:拿到原文 | 用 story-import Phase 1 已确认的源文件,不重新问 |
- | Step 2:字数检查(长短篇路由) | 篇幅已在 story-import Phase 1 判定并经用户确认,直接答「按短篇继续」,不重新路由 |
- | Step 3:题材识别 | **照常跑**,题材标尺必须加载;story-import Phase 1 Step 4 已确认的题材类型直接代入,不重复提问 |
- | Step 4:续跑检查(`拆文库/{导入书名}/_meta.json` 已存在时三选一) | 先看旧产出是否可直接复用:`stages_completed` 已含 6 且 `拆文报告.md` / `情节节点.md` / `写作手法.md` / `原文/` 均非空、来源与本次导入源一致 → 直接进 Phase 3,不重跑也不归档。否则本轮首次进入 Phase 2 → 按 (a) 覆盖:先把旧产出归档到 `拆文库/{导入书名}/_archive_{时间戳}/`,再从 Stage 2 重跑;同一轮导入内重试同一本书 → 按 (b) 续跑。不把三选一甩给用户,也不跳过归档 |
-
- `_meta.json` 的 `genre_detected` 由 Step 3 产出,是拆文契约的阻断级必填字段,下游 story-short-write 靠它选题材标尺——**不要跳过 Step 3 直接从原文备份起跑**。
-
- - 措辞示例:启动深度分析时声明「《{导入书名}》篇幅已确认为短篇(题材 {题材类型},全文约 {N} 字),Step 2 直接按短篇继续,Step 4 按覆盖并归档处理,题材识别照跑,确保 Stage 2-6 全部产出」。
- - **兜底**:若运行环境仍抛出「此文字数 {N} 偏长,建议改用 `/story-long-analyze`」或灰区提问「介于短/长之间,按短篇还是长篇拆?」,一律按 Phase 1 已锁定的判定逐字回「按短篇继续」,**绝不把路由询问甩给用户**。
-
- ### 输出目录
-
- #### 长篇拆文库结构
-
- 长篇分析输出到 `拆文库/{导入书名}/`,与 story-long-analyze 拆解管道完全一致:
-
- ```
- 拆文库/{导入书名}/
- ├── 原文/
- │ └── 原文.txt # 扩展名随源文件;对话直接贴入的文本存为 原文.md
- ├── 概要.md
- ├── 章节/
- │ ├── 第1章_深度拆解.md
- │ ├── 第1章_摘要.md
- │ └── ... # 每章同时有 第N章_深度拆解.md 和 第N章_摘要.md
- ├── 快速预览.md
- ├── 角色/
- │ ├── {角色名}.md
- │ └── 角色关系.md
- ├── 剧情/
- │ ├── {剧情标题}.md
- │ ├── 故事线.md
- │ ├── 节奏.md # 关键信息推进 / 情绪触动点 / 爆发节奏
- │ ├── 情绪模块.md # 读者需求 / 情绪引擎 / 可复现模块
- │ └── 散落情节.md
- ├── 设定/
- │ ├── 世界观/ # 背景设定.md / 力量体系.md / 地理.md / 金手指.md(子目录形态)
- │ └── 势力/ # {势力名}.md(每势力一文件)
- ├── 拆文报告.md
- ├── chapter_index.csv # 机械章界、原文定位、源 hash 与解析器版本
- ├── 人物关系图/ # 人物关系图.md(Mermaid 中文图);有中文字体时另有 PNG
- ├── 文风.md # Stage 6 文风:写作技法视图 + 原文范例锚点
- └── _progress.md
- ```
-
- #### 短篇拆文库结构
-
- 短篇分析输出到 `拆文库/{导入书名}/`,与 story-short-analyze 拆解管道一致:
-
- ```
- 拆文库/{导入书名}/
- ├── 原文/
- │ └── 原文.txt # 扩展名随源文件;对话直接贴入的文本存为 原文.md
- ├── 拆文报告.md
- ├── 情节节点.md
- ├── 写作手法.md
- └── _meta.json # 管道元数据 + 结构计数(下游 story-short-write 必读)
- ```
-
- ### 长篇完整管道(Stage 0-6)
-
- > 管道详细说明见 story-long-analyze(运行 `/story-long-analyze`),此处仅列概要。
-
- | 阶段 | 名称 | 输入 | 输出 | 完成标志 |
- |------|------|------|------|----------|
- | 0 | 概要与机械索引 | 原始文本 | 概要.md + `chapter_index.csv` | 章节结构、定位、源 hash 与解析器版本记录完成 |
- | 1 | 黄金三章 | 前 3 章原文 | 第1章_深度拆解.md / 第2章_深度拆解.md / 第3章_深度拆解.md → **停靠产出快速预览.md**(导入场景自动续跑,不停下询问) | 3 章拆解完成 |
- | 2 | 连续章节块提取 | 待处理连续原文、旧成果与跨块状态 | 同次产出 `章节/第N章_摘要.md`(含情节点序列)和 `_analysis_cache/批次-*.md`;每批最多 3 章,长章缩到 1-2 章;每章 10-20 个情节点,长章最多 30 | 可用正文覆盖完整,摘要数与可用章节数一致 |
- | 3 | 聚合分析 | 批次观察、必要逐章事实与可复用旧资料 | `剧情/*.md` + `剧情/README.md` + `剧情/故事线.md` + **`剧情/节奏.md` + `剧情/情绪模块.md`**。在现有资料中补强因果链、客观事件/多次披露、信息差、事件/情绪/篇幅三维节奏及机制成立条件 | 质量检查通过 |
- | 4 | 设定+关系 | 批次观察、阶段 3 归一实体与必要逐章事实 | 设定/*.md + 角色/*.md + 人物关系图。关系记录方向、触发、双方得失、阶段状态和证据 | 设定和关系提取完成 |
- | 5 | 汇总报告 | 全部权威底层结果 | `拆文报告.md`:一份可独立阅读的人类主报告,嵌入可用人物关系图,不重新阅读全文 | 报告生成完成 |
- | 6 | 文风 | 拆文报告.md + 章节/第1-3章_深度拆解.md + 章节/*_摘要.md + 原文/原文.txt | 文风.md(本书历史写法分析) | 文风落盘 `拆文库/{导入书名}/文风.md`,保留为导入分析,不复制到本书 `对标/` |
-
- ### 短篇拆文管道
-
- > 管道详细说明见 story-short-analyze(运行 `/story-short-analyze`),此处仅列概要。
-
- 短篇为单一全量管道(Stage 2-6 严格串行),产物落盘 `拆文库/{导入书名}/`:Stage 2 结构+情节节点 → Stage 3 情感线+爆点 → Stage 4 反转+写作手法 → Stage 5 人物+开头结尾 → Stage 6 综合评估,最终汇总为 `拆文报告.md`、`情节节点.md`、`写作手法.md`,另有 `_meta.json` 记管道元数据与结构计数。
-
- 长篇组块、旧成果复用和恢复全部沿用 story-long-analyze。Stage 2 每个连续章节批次只调用一次 chapter-extractor,同次生成逐章事实与跨章观察;story-import 不另定一套。
-
- ### 恢复机制
-
- - 中断时通过进度文件追踪进度
- - 新会话读取进度文件定位断点
- - 先验证断点批次已经落盘的逐章文件和跨章缓存;完整则补记进度,缺失或损坏才从该批次起章恢复
- - 长篇进度文件沿用 story-long-analyze 的 `_progress.md` 受管区:批次表、阶段表和 `最终状态`
-
- ### 质量检查
-
- 长篇阶段 3-4 完成前执行质量检查(置信度 >= 0.85,覆盖率 85%-95%,重叠率 <= 35%),由 story-long-analyze 拆解管道自带的质量检查负责。短篇质量检查见 story-short-analyze 各阶段的完成标志。
-
- ---
-
- ## Phase 3:结构迁移
-
- 将 `拆文库/{导入书名}/` 的分析结果迁移为可被写作 skill 消费的项目结构。
-
- ### 分流路由
-
- 按 Phase 1 判定的篇幅类型分流,两条路径产出的工程结构完全不同:
-
- | 篇幅 | 迁移路径 | 映射规则 | 续写接手 |
- |------|---------|---------|---------|
- | 长篇 | **3-L:长篇结构迁移** | [references/structure-mapping-long.md](references/structure-mapping-long.md) | story-long-write 日更循环 |
- | 短篇 | **3-S:短篇结构迁移** | [references/structure-mapping-short.md](references/structure-mapping-short.md) | story-short-write Phase 3 逐场景写作 |
-
- ---
-
- ## Phase 3-L:长篇结构迁移
-
- 将 `拆文库/{导入书名}/` 的分析结果迁移为 `{导入书名}/` 长篇项目结构。迁移规则详见 [references/structure-mapping-long.md](references/structure-mapping-long.md)。
-
- ### 迁移步骤
-
- #### Step 1:创建项目骨架
-
- ```
- {导入书名}/
- ├── 设定/
- │ ├── 世界观/
- │ ├── 角色/
- │ └── 势力/
- ├── 大纲/
- ├── 正文/
- ├── 追踪/
- │ └── 逐章记录/
- ├── 对标/ # 可选;仅在显式绑定外部对标时创建子目录
- └── 参考资料/
- ```
-
- #### Step 2:正文标准化
-
- 将原文迁移到 `正文/`,统一命名格式:`第XXX章_章名.md`。
-
- - 识别章节分隔符(第X章、Chapter X 等)
- - 提取章节标题
- - 补零对齐编号(第1章 → 第001章)
- - 保留原文内容不变
-
- #### Step 3:角色文件迁移
-
- 将 `拆文库/{导入书名}/角色/{角色名}.md` 迁移到 `设定/角色/{角色名}.md`。
-
- 迁移时按 `references/structure-mapping-long.md` 的「角色文件迁移模板」补齐 story-long-write 角色模板字段。
-
- 角色分级(沿用 story-long-analyze 标准):
-
- | 等级 | 标准 | 迁移策略 |
- |------|------|---------|
- | 主角 | 出现章节 ≥50% + 推动主线 + 完整成长轨迹 | 完整迁移 |
- | 反派 | 与主角对立 + 推动核心冲突 + 明确动机 | 完整迁移 |
- | 核心配角 | 出现章节 ≥20% 或推动重要支线 | 完整迁移 |
- | 功能角色 | 出现章节 <20% + 作用有限 | 简化迁移 |
-
- #### Step 4:关系文件迁移
-
- 将 `拆文库/{导入书名}/角色/角色关系.md` 转换为 `设定/关系.md`,按 [structure-mapping-long.md](references/structure-mapping-long.md)「关系文件转换规则」的目标格式模板输出。
-
- #### Step 5:同步世界观设定
-
- 当前拆文契约按主题输出 `拆文库/{导入书名}/设定/世界观/*.md` 与 `设定/势力/*.md`,导入时原样同步;`世界观/` 必须有 `背景设定.md`,短小力量体系可并入。当前产物缺失时停止并提示修复 Stage 4;检查器确认的旧成果则从已有扁平设定转换到当前项目路径,标注来源,不回写或覆盖拆文库。
-
- #### Step 6:大纲生成
-
- **大纲.md**(卷级结构):从 `剧情/故事线.md`、`剧情/*.md` 和 `快速预览.md` 反推。**卷划分采用用户确认制**,规则见 [structure-mapping-long.md](references/structure-mapping-long.md)「大纲反推规则」:
-
- - **原文有明确卷界**(存在「第一卷」「卷一」等卷级标题)→ 按原文卷界直接划分,无需询问。
- - **原文无明确卷界** → **不机械按「每卷 20-40 章」硬切**。根据故事线/场景切换/大型时间跳跃检测候选卷边界,向用户展示候选划分方案,**等待用户确认后**才写定卷纲;用户确认前 `大纲/大纲.md` 只记录候选方案。
-
- ```markdown
- # 全书大纲
-
- ## 卷级大纲
-
- ### 第一卷:{卷名}(约 {X} 万字,{Y} 章)
- - 功能:{从剧情分析推断}
- - 核心事件:{一句话}
- - 起始状态 → 结束状态:{从角色弧线推断}
- ```
-
- **卷纲**:卷划分确认后,从剧情文件聚合生成 `大纲/卷纲_第X卷.md`,按 [structure-mapping-long.md](references/structure-mapping-long.md)「卷纲反推」模板格式。
-
- **细纲**:从章节摘要反推生成 `大纲/细纲_第XXX章.md`:
-
- 每章先通过 story-long-write 的 Wordcount Core 运行 `wordcount measure`,将 JSON 的 `actual` 作为已写章节的历史长度快照。这里记录的是原文在 `visible_chars_v1` 下的实际长度,不是让模型重新决定创作目标。依次探测 `python3`、`python`、`py -3`;找不到 Python 3 或 CLI 时返回 `TOOL_UNAVAILABLE` 并停止导入,不得用模型估算或静默跳过。
-
- ```bash
- {PYTHON} {story-long-write skill 根}/scripts/storyctl.py wordcount measure \
- --file "{原文章节文件}" \
- --chapter {N}
- ```
-
- ```markdown
- ## 细纲(第 N 章)
-
- ### 第 N 章:{章名}
- - 核心事件:{从摘要中提取}
- - 字数目标:{storyctl 返回的 actual} 字
- - 字数口径:visible_chars_v1
- - 目标情绪:{从章节基调/情绪曲线提取;未知写 [待补充]}
- - 章首钩子:[待补充]
- - 爽点:{从情节点推断;无明确证据写 [待补充]}
-
- #### 内容概括(五段式)
- - 起因:{从情节点归纳;未知写 [待补充]}
- - 发展:{从情节点归纳;未知写 [待补充]}
- - 转折:{从情节点归纳;未知写 [待补充]}
- - 高潮:{从情节点归纳;未知写 [待补充]}
- - 结尾:{原文最后落在什么动作/画面/台词上;未知写 [待补充]}
-
- #### 情节安排(多线)
- - 主线推进:{从剧情单元索引/摘要反推}
- - 辅线推进:{无证据写“无”或 [待补充]}
- - 事件线 / 任务线:{外部事件链}
- - 感情线 / 关系线:{有证据才写;否则“无显性”或 [待补充]}
- - 逻辑线:原因 → 行动 → 结果 → 后果/新问题
+ 先分析后迁移:深度分析复用现成管道(长篇 `/story-long-analyze`,短篇 `/story-short-analyze`),方法、模板与质量检查由 analyze skill 自带,本 skill 不另维护;再把分析结果迁移为项目结构。
- #### 人物关系和出场顺序
- - 出场顺序:{摘要中角色/势力/关键物件出现顺序}
- - 人物关系变化:{本章前 → 本章后;未知写 [待补充]}
- - 视角/信息差:{谁知道什么;读者知道什么;主角误判什么;未知写 [待补充]}
+ ## 时刻表与交接
- #### 情节细化
- - 情节点序列(逐行填下表;从摘要情节点反推):
+ 导入是一串时刻,每个时刻只读自己的文件;后一时刻只靠落盘文件接上前一时刻,不靠对话记忆。
- | # | 情节点(谁做了什么) | 功能标签 | 执行边界 |
+ | 时刻 | 作者确认什么 | 读什么 | 落盘 |
|---|---|---|---|
- | 1 | {} | {功能不明写 [待补充]} | {从原文确认本点没有释放什么;未知写 [待补充]} |
- - 行动成本(可无)/收益归属:{有证据才写;行动成本可无、不硬造;未知写 [待补充]}
-
- #### 结尾设定和钩子
- - 结尾设定:{原文收束落在什么动作或画面;未解决问题;下一章推动力;未知写 [待补充]}
- - 章尾钩子:[待补充]
- ```
-
- > 钩子、人物关系变化、辅线/感情线、行动成本/收益归属等无法由原文摘要稳定判断的字段统一标 `[待补充]`;story-import 只反推有证据的蓝图,不为补齐字段编造关系或副线。
-
- #### Step 7:追踪文件生成
-
- 导入项目必须通过本 skill 自带的 `scripts/tracking_commit.py init` 一次性生成追踪状态,禁止模型分别写最终文件。完整字段与命令见 [references/tracking-transaction.md](references/tracking-transaction.md)。语义准备顺序如下:
-
- 1. **导入截止章**:把最后完整章 N 写入初始化事务的 `last_chapter`。工具在 meta 记录 `imported_through_chapter=N`;导入旧章没有日更事务,不得为第 1..N 章伪造逐章增量,也不额外生成一份重复当前状态的叙事基线。
- 2. **核心角色当前快照**:从拆书产物反推主角、反派、核心配角的截至 N 章状态,按角色写入初始化 JSON 的 `character_snapshots`。输出由工具生成到 `追踪/角色状态/{角色名}.md`;算法见 [references/character-state-reverse.md](references/character-state-reverse.md)。
- 3. **伏笔当前行**:从有正文证据的铺垫/回收事件生成 `foreshadow`。每个 ID 只保留当前状态一行;尚未实际埋设的未来设计留在大纲,不写 `伏笔.md`。
- 4. **事实与读者认知**:把关键事件生成到 `timeline_events`。同一事件同时写客观事实、读者截至 N 章已知内容和实际揭示状态;未来计划揭示章不得伪装成已发生事实。
- 5. **续写状态卡输入**:准备当前位置、长期约束、活跃核心角色、近三章速记、下一章承诺和连贯性风险。`上下文.md` 由工具生成固定 7 栏,不把文风、文件索引、普通待办或质检计数塞进续写状态卡。
- 6. **执行初始化**:按当前平台探测 Python 3(`python3` → `python` → `py -3`),执行:
-
- > 项目 `追踪/` 里已有不属于当前协议的早期文件时不必手工清理:`init` 会先把它们按原样整体移入 `追踪/_旧追踪存档/`,再在原地建当前协议。旧内容保留供作者查阅,不参与解析,当前状态完全由本次导入输入决定;校验失败的 `init` 不移动任何文件。
-
- ```text
- {PYTHON} {story-import skill 根}/scripts/tracking_commit.py init --project {项目根} --input {项目根}/.story/work/init.json
- {PYTHON} {story-import skill 根}/scripts/tracking_commit.py check --project {项目根}
- ```
-
- 以 demo《让你管账号,你高燃混剪炸全网》导入至第 10 章为例:续写状态卡要写清江晨的手机原版《诸君,且听龙吟》被专业团队高清重拍,但高层看片后认为新版“缺了灵魂”,最终继续采用原版;江晨快照应体现其军宣创作价值已获周薄森、张耀祖确认;读者时间线只写读者已经看到的看片会结论,钟嘉嘉“只猜对了一半”背后的培养安排若尚未揭示,只能出现在作者真相,不能泄露到读者视图。
-
- 初始化成功后应得到:
-
- ```text
- 追踪/
- ├── _tracking-state.json
- ├── 上下文.md
- ├── 逐章记录/ # 导入旧章不补造文件,续写从第 N+1 章开始
- ├── 角色状态/{角色名}.md
- ├── 伏笔.md
- ├── 时间线/
- │ ├── 作者真相.md
- │ └── 读者已知.md
- ```
-
- 半成品最后一章为残稿时,`last_chapter`、角色快照和其他当前语义检查点一律截至最后完整章;残稿处理策略写入连贯性风险,不把未完成动作登记成既成事实。
-
- #### Step 8:题材定位生成
-
- 从拆文报告中提取核心发现,生成 `设定/题材定位.md`(按 [structure-mapping-long.md](references/structure-mapping-long.md)「题材定位生成」模板格式)。
-
- `设定/题材定位.md` 的本书题材、核心梗、情绪与节奏摘要来自 `拆文库/{导入书名}/`,但这些字段不是对标登记。只有 Phase 1 已明确绑定外部对标时,才追加「对标书清单 + 主对标书」段;主对标书最多 1 本,副对标 / 参考对标不限制数量。未绑定时省略整个对标登记段,不得用 `{导入书名}` 补位。该段格式见上述「题材定位生成」模板的「对标书清单」。
-
- 后续如需快速概览,可另写「对标分析(派生概要)」表;该表不是权威 registry,不得替代 `主对标书` 与完整 `对标书列表`。所有登记项必须能回溯到对应 `拆文库/{对标书名}/`,不得引用本书根 `设定/`。
-
- #### Step 9:对标结构化资产同步
-
- 本步只处理 Phase 1 显式绑定的外部参考作品。把 `拆文库/{对标书名}/` 的结构化分析资产同步到项目引用视图 `{项目}/对标/{对标书名}/`,供 story-long-write 优先读取。没有绑定外部对标时跳过本步,不创建空目录;严禁使用 `拆文库/{导入书名}/` 或项目 `设定/` 作为复制源。源路径→目标路径的完整同步映射见 [structure-mapping-long.md](references/structure-mapping-long.md)「对标引用视图同步规则」。
-
- **缺失处理**:
-
- - 已选外部对标缺 `剧情/节奏.md` 或 `剧情/情绪模块.md` → 导入报告里告诉作者「《{对标书名}》的拆文缺节奏和情绪资料,这本对标暂时用不上;重新拆一次(`/story-long-analyze`)补齐后再接入」,并停止该对标召回;不得用摘要或报告生成空壳。本书核心工程迁移不回滚。两份老权威产物都存在时正常同步,缺少本次新增内嵌字段不阻断。
- - 其它结构化子目录缺失 → 在导入完成报告里用白话提示,不阻塞项目创建
-
- #### Step 10:文风同步
-
- 外部对标已通过 Step 9 校验时,把 `拆文库/{对标书名}/文风.md` 复制到 `{项目}/对标/{对标书名}/文风.md`。纯复制,不重新生成;未绑定外部对标时跳过。
-
- **缺失处理**:
-
- - 拆文库没有文风文件(analyze 未跑 Stage 6)→ 导入报告提示用户重跑 `/story-long-analyze` 后再同步;日更前文风缺失会被 fail-fast 拦截
- - 项目对标已有旧文风文件 → 覆盖(最新拆文产物优先),在导入报告告知
-
- ---
-
- ## Phase 3-S:短篇结构迁移
-
- 将 `拆文库/{导入书名}/` 的短篇拆文产物迁移为 `{短篇标题}/` 短篇工程结构,供 story-short-write Phase 3 逐场景写作无缝接手。迁移规则详见 [references/structure-mapping-short.md](references/structure-mapping-short.md)。
-
- > **短篇工程与长篇完全不同**:短篇正文是单文件 `正文.md`(不切章),**不产** `追踪/`、`大纲/`、`正文/` 等长篇目录。迁移时严禁误建这些长篇专属目录。
-
- ### 短篇目标工程结构
-
- ```
- {短篇标题}/
- ├── 设定.md ← 含核心框架 + 本书续写基线
- ├── 小节大纲.md ← 按段-小节结构反推
- ├── 正文.md ← 单文件全文正文
- └── 对标/{对标书名}/ ← 可选:仅外部对标引用视图
- ├── 拆文报告.md
- ├── 情节节点.md
- └── 写作手法.md
- ```
-
- ### 迁移步骤
-
- #### Step 1:正文迁移
-
- 将 `拆文库/{导入书名}/原文/` 的全文迁移为单文件 `{标题}/正文.md`,按 [format-and-structure.md](references/format-and-structure.md) 规范化格式(小节标记 `###1.`、段间仅单换行、对话引号按项目/平台约定统一)。**原文已是成稿,不重写内容,只规范格式。**
-
- #### Step 2:设定生成
-
- 从 `拆文报告.md`、`写作手法.md` 反推 `{标题}/设定.md`,含两个区块:
-
- - **核心框架**:对齐 story-short-write 核心框架模板(基本信息、一句话梗概、核心反转、情绪设计、人设速写)。
- - **本书续写基线**:把已写内容的故事结构、情绪节奏、核心反转机制、既有写作手法写入续写基线区;这是本书内部上下文,不是对标摘要。
-
- #### Step 3:小节大纲生成
-
- 从 `情节节点.md` 的功能分段反推 `{标题}/小节大纲.md`,按开头段/铺垫段/升级段/反转段/结尾段映射;短篇只做轻量蓝图:每节写 `结构段/五段功能`、主事件、一个或多个真实推进、目标情绪、人物/关系变化、因果/逻辑链、结尾承接/小钩子。相关情节点可由同一动作链或对话同时兑现,不为凑数量拆成多个子事件。钩子或关系无法判断时标 `[待补充]`,不套用长篇完整章节蓝图。
-
- #### Step 4:外部对标引用视图(可选)
+ | Phase 1 确认来源与范围 | 书名、题材、平台、篇幅、残稿怎么处理、外部对标、先不先装环境 | 本文件 Phase 1;判篇幅读 [length-routing.md](references/length-routing.md) | 导入记录 |
+ | Phase 2 深度分析 | 不打扰作者 | [deep-analysis.md](references/deep-analysis.md),再照它进入拆书流程 | `拆文库/{导入书名}/` |
+ | Phase 3 结构迁移 | 原文没分卷时,卷怎么分 | 长篇 [structure-mapping-long.md](references/structure-mapping-long.md);短篇 [structure-mapping-short.md](references/structure-mapping-short.md) | 项目 `设定/`、`正文/`、`大纲/`(短篇为三个单文件) |
+ | 逐批反推细纲(长篇) | 不打扰作者 | 本批任务包(见 [outline-reverse.md](references/outline-reverse.md)) | `大纲/细纲_第XXX章.md` |
+ | Phase 4 追踪初始化(长篇) | 不打扰作者 | [import-tracking.md](references/import-tracking.md) | `追踪/` |
+ | Phase 5 汇报与激活 | 请作者核对、拍板的事 | [import-report.md](references/import-report.md) | `.active-book` |
- 仅当 Phase 1 已显式绑定外部 `{对标书名}` 时,才把 `拆文库/{对标书名}/` 同步为 `{标题}/对标/{对标书名}/`;没有绑定则跳过。不得把 `拆文库/{导入书名}/` 整体复制进 `对标/`。
+ **导入记录**:`{书目录}/.story/work/导入记录.md`(书目录:长篇 `{导入书名}/`,短篇 `{短篇标题}/`),Phase 1 建立,格式见下方 Step 5。每个时刻开头先读它,不回翻对话;时刻交付前把作者在对话里新定的事(决定、偏好、红线、否掉的方案)和进度写回它,再往下走。
+ **换上下文**:深度分析、每批细纲、追踪初始化读的东西多。每个时刻交付后,汇报末尾加一句「下一步建议新开一个对话,说『继续导入』,会更专注」;作者要在本对话继续也照做。作者说「继续导入」时,在项目根下找进度没勾完的 `*/.story/work/导入记录.md`,从第一个未完成的进度接着做。
+ **导入续写入口顺序**:用户只问流程时先答结论再收原文——推荐先 `/story-setup`,新开对话 `/story-import`,导完 `/story-long-write 日更`;也可直接导入,缺环境时 Step 4 给选择。导入过的书、旧版追踪的书、超过 200 章的书按 [import-special-cases.md](references/import-special-cases.md) 处理。
---
- ## Phase 4:项目激活
-
- ### Step 1:质量检查
+ ## Phase 1:确认来源与范围
- 按篇幅对照对应的质量检查清单。这是你自己的自检,不念给作者:全部通过就不提;没通过先修,修不了才用故事话告诉作者影响和办法。
+ ### Step 1:确认意图
- - **长篇**:完整导入质量清单见 [references/structure-mapping-long.md](references/structure-mapping-long.md) 末尾(含正文文件数对照、核心角色独立快照、作者/读者时间线隔离、`tracking_commit.py check` 通过、卷划分已经用户确认等)。
- - **短篇**:质量清单见 [references/structure-mapping-short.md](references/structure-mapping-short.md) 末尾的质量检查清单(含 `正文.md` 单文件存在且格式合规、`设定.md` 含核心框架+本书续写基线、未误建长篇专属目录等)。
+ 默认目标是可续写的写作工程。意图不明时主动问:「你是想把这本书做成可续写的写作工程(设定/大纲/正文/追踪,能接着写第 N+1 章),还是只要一份拆文库分析?」只要分析 → 直接用 `/story-long-analyze`(短篇 `/story-short-analyze`),到拆文库为止,不建导入记录、不做迁移。
- ### Step 2:导入完成报告
+ ### Step 2:拿到原文
- 报告写给作者:导进来了什么、哪几处请他核对、要他拍板的事、下一步怎么说。字段名、脚本名、校验结果、字数口径、伏笔/事件编号不进报告;编号只能跟着故事描述出现(如「玉佩的来历(F003)」)。核对项要落到具体人和事,一次最多 5 条。
+ 问:「你要导入哪本书?请提供文件路径或直接贴文本。」单文件(.txt/.md)按章节分隔符自动切分;目录按文件名排序合并;直接贴的文本在 Step 5 书名定下后原样存成 `{书目录}/.story/work/导入原文.md`(换对话后对话里的文本就拿不到了);都没有就请作者提供。本时刻只确认源文件就绪,原文备份到 `拆文库/{导入书名}/原文/` 由 Phase 2 的拆解管道负责,这里不另备份。
- **长篇**:
+ ### Step 3:基本信息确认
- <!-- author-report -->
- ```md
- === 《{导入书名}》导入完成 ===
- 导进来了:第 1–{N} 章,约 {Y} 万字{;第 {N+1} 章只写了一半,按你的决定{接着残章写 | 先补完}}。项目在 `{项目目录}`。
+ 1. 自动检测书名(如有)、总章数、总字数、章节格式。
+ 2. 请作者确认:导入书名、题材类型、目标平台(起点/番茄/晋江/其他)、是否完本(半成品写到第 N 章)、**篇幅**(长篇/短篇,按 length-routing.md 检测:用户显式声明 > 结构信号 > 字数兜底,向作者复述结果请其确认;决定 Phase 3 走 3-L 还是 3-S)、**最后一章是否完整**——残稿时告诉作者,请他决定「接着残章写」还是「先补完再导入」,本 skill 只记录决定,不替作者选。
+ 3. 外部对标(可选、与导入源分离):作者已明确指定时记录 `{对标书名}`,并确认 `拆文库/{对标书名}/` 是该参考作品的独立拆解产物;不得把 `{导入书名}` 或本次刚生成的拆文目录当候选。未指定时不追问,记为“未绑定”。
+ 4. 向作者展示检测到的章节范围、字数、篇幅、最后一章状态与“外部对标:{对标书名/未绑定}”,确认后往下走。
- 我整理出了:
- - 人物:{M} 个角色档案,主要人物写到第 {N} 章时的处境已记下(如「{角色}:{一句话现状}」)
- - 大纲:全书大纲、{V} 卷卷纲、每章细纲
- - 还没收的线:{K} 条(如「{伏笔的故事描述}」)
- - 时间线:真相和读者目前知道的分开记,续写时不会提前泄底
- - 设定:{设定文件数} 份世界观资料
- - 对标书:{没有绑定 | 已接入《{对标书名}》 | 没接上:原因和补救}
+ ### Step 4:写作环境检测
- 请你核对:
- 1. {最拿不准的一处,写成具体问题,如「第 5 章的黑衣人和第 2 章的车夫是同一人吗?」}
- 2. {如「还没收的线里有没有漏的?我列的是:……」}
+ 先读取 `.story-deployed` 并执行顶部 Spawn 版本门禁;旧版 `chapter-extractor` 文件即使仍在磁盘上也不可复用。通过后在当前运行时的 canonical 目录检查 `chapter-extractor`(Claude/OpenCode/Antigravity 为同名 Markdown,Codex 为同名 TOML),顺带记下 `story-architect` 是否可用(逐批细纲用)。`.story-deployed` 的 `target_cli` 含 `zcode` 时项目 agents 缺失是预期状态:不提示重复部署,直接串行 solo/direct 并报告 fallback。
- 需要你决定:{仅在有待定事项时写,如「原文没分卷,我按剧情分成 3 卷(1–40 / 41–95 / 96–{N} 章),这样分可以吗?」}
+ 部署标记缺失、版本无效/过期,或当前端 agent 不可用(且不是已部署 ZCode 项目)时这样问:
- 下一步:说「日更」就从第 {N+1} 章接着写;想先检查导入质量,说「审一下」。
- ```
+ > 「这个项目还没装好写作环境。装好后由专门的分析助手逐段拆书,主对话不会被整本书塞满;不装也能导,只是全部在主对话里做,慢一些,结果一样完整。你想:1. 先装环境(推荐):运行 `/story-setup`,装完再说"导入" 2. 直接导入,慢一点也行」
- **短篇**:
+ 选 1 → 先按 Step 5 把已确认的信息写进导入记录(写作环境记「待装」),暂停导入,装完新开对话说「继续导入」;选 2 → Phase 2 由主会话串行处理,产物完整。
- <!-- author-report -->
- ```md
- === 《{短篇标题}》导入完成 ===
- 导进来了:全文约 {Y} 字,分成 {N} 个小节。项目在 `{项目目录}`。
+ ### Step 5:写导入记录
- 我整理出了:
- - 设定:核心框架和续写要守住的人物、情绪基调
- - 小节大纲:{N} 节,每节讲了什么
- - 对标书:{没有绑定 | 已接入《{对标书名}》 | 没接上:原因和补救}
+ 确认完把结果写进 `{书目录}/.story/work/导入记录.md`(目录不存在就建;贴入的原文同时存到同目录),再进入 Phase 2:
- 请你核对:
- 1. {标了 [待补充] 的地方,写成问题,如「女主最后原谅他了吗?原文没写明」}
- 2. {核心反转前埋的线索我找到的是:……,有没有漏的?}
+ ```markdown
+ # 导入记录:《{导入书名}》
+ - 原文:{源文件或目录路径;贴入文本写 .story/work/导入原文.md}
+ - 篇幅:{长篇 | 短篇}({判定依据一句})
+ - 范围:第 1–{N} 章,约 {Y} 万字;{完本 | 半成品};首期深拆:{全书 | 第 1–50 章,其余用简化摘要(超过 200 章)}
+ - 最后一章:{完整 | 残稿:第 {N+1} 章写了一半,作者决定{接着残章写 | 先补完再导入}}
+ - 题材:{题材类型};目标平台:{平台}
+ - 外部对标:{对标书名 | 未绑定}
+ - 写作环境:{已装,分析助手可用{,story-architect 可用} | 待装(继续时重新检测) | 未装,作者选直接导入(主会话串行) | ZCode 串行}
+ - 卷划分:{待 Phase 3 | 按原文卷界 | 作者已确认:1–40 / 41–95 / …}
+ - 作者交代:{偏好、红线、否掉的方案,逐条;没有写「无」}
- 下一步:{没写完:运行 `/story-short-write` 说「接着写」,从第 {N+1} 节往下写 | 已完本:想改稿说「审一下」}。
+ ## 进度
+ - [ ] 深度分析
+ - [ ] 结构迁移(卷划分已确认、卷纲已写)
+ - [ ] 细纲:已验收到第 {B} 章(长篇;续跑从第 {B+1} 章整批重做)
+ - [ ] 追踪初始化(长篇,检查通过)
+ - [ ] 汇报与激活
```
- ### Step 3:项目激活
-
- - 设置 `.active-book` 指向导入的书名/标题目录
- - 确认项目可以被对应写作 skill 识别(长篇 → story-long-write,短篇 → story-short-write)
- - 可选验证:如果当前运行时的 canonical 目录已部署 story-explorer agent,可 spawn 交叉验证迁移数据完整性;Antigravity 检查 `.agents/agents/story-explorer/agent.md` 并用 `invoke_subagent` + `TypeName: "story-explorer"`。Prompt:`项目目录:{dir}\n查询类型:progress\n查询参数:导入验证`
-
- > setup 环境检测已在 Phase 1「环境检测前置」完成,此处不再重复检测。
-
---
- ## 大型作品处理(>200 章)
-
- > 本节仅适用于长篇导入。短篇为单文件全量迁移,无增量导入需求。
-
- 超过 200 章的作品,**拆解可以分批,追踪初始化必须一次覆盖全部已写章节**:
-
- 1. **拆解分批**:首期只深拆前 50 章 + 全书概要,后续按需补拆更多章节到 `拆文库/`。
- 2. **追踪一次到位**:初始化事务的 `last_chapter` 写**最后一个已写完的章号 N**,不是首期拆解的 50。`imported_through_chapter` 由 `init` 一次写定、之后不再推进,逐章事务只接受 N+1 起的章号;第 1..N 章不伪造逐章记录,续写从 N+1 开始。若 init 时误写成 50,第 51..N 章仍可逐章 `append` 补上(一章一份事务,章号必须连续),只是要为已写好的旧章逐章构造事务;不要删 `追踪/` 重来——`_旧追踪存档/` 也在里面。
- 3. **上下文摘要**:未深拆的章节生成简化摘要(200 字/章),供反推当前状态用。
-
- ---
-
- ## 参考资料索引
-
- 按阶段加载,不一次全部加载。
-
- 本 skill 自带的 reference 文件全部位于 `references/`,按场景加载。涉及别的 skill 的方法论/模板时,story-import 不直接加载文件,而是运行对应 `/命令` 由该 skill 自行加载。
-
- ### Phase 1:确认导入源
-
- | 场景 | 加载文件 |
- |------|---------|
- | 篇幅分流判定 | `references/length-routing.md` |
- | 章节格式识别 | 由 story-long-analyze 拆解管道(运行 `/story-long-analyze`)的阶段 1 负责 |
+ ## Phase 2:深度分析
- ### Phase 2:深度分析
+ 读 [deep-analysis.md](references/deep-analysis.md),按导入记录的篇幅与写作环境进入对应拆解管道,自动跑完本次需要的范围,不把拆书中途的停靠询问甩给作者。完成后勾进度。
- | 场景 | 加载文件 / 相关 skill |
- |------|---------|
- | 长篇深度分析(方法论、质量检查、输出模板均自带) | 运行 `/story-long-analyze` 调用长篇拆解管道 |
- | 短篇深度分析(方法论、质量检查、输出模板均自带) | 运行 `/story-short-analyze` 调用短篇拆解管道 |
+ ## Phase 3:结构迁移
- ### Phase 3:结构迁移
+ 长篇(3-L)按 [structure-mapping-long.md](references/structure-mapping-long.md) 的迁移步骤把 `拆文库/{导入书名}/` 迁成 `{导入书名}/` 工程;原文没有明确卷界时,卷划分必须等作者确认,确认结果写进导入记录。细纲最后一步按 [outline-reverse.md](references/outline-reverse.md) 分批反推。短篇(3-S)按 [structure-mapping-short.md](references/structure-mapping-short.md) 迁成 `{短篇标题}/` 的三个单文件,**不产** `追踪/`、`大纲/`、`正文/` 等长篇目录,迁完直接到 Phase 5。
- | 场景 | 加载文件 |
- |------|---------|
- | 长篇迁移映射规则 | `references/structure-mapping-long.md` |
- | 短篇迁移映射规则 | `references/structure-mapping-short.md` |
- | 角色状态反推规则(长篇) | `references/character-state-reverse.md` |
- | 角色状态规则(character-state-reverse.md 依赖) | `references/state-tracking.md` |
- | 短篇正文格式规范 | `references/format-and-structure.md` |
+ ## Phase 4:追踪初始化(仅长篇)
- > 长篇细纲模板格式参见 story-long-write(Phase 3 细纲部分);短篇核心框架模板参见 story-short-write(核心框架部分)。这两项为纯文本指引,story-import 不加载对应 skill 的文件。
+ 读 [import-tracking.md](references/import-tracking.md),用本 skill 自带的 `scripts/tracking_commit.py init` 一次性生成 `追踪/`,`check` 通过后勾进度。
- ### Phase 4:项目激活
+ ## Phase 5:汇报与激活
- | 场景 | 说明 |
- |------|---------|
- | 长篇项目结构规范 | 参见 story-long-write(Phase 4 项目文件结构) |
- | 短篇项目结构规范 | 参见 story-short-write(Phase 3 项目结构) |
- | 环境部署 | 部署模板由 `/story-setup` 提供,story-import 不负责部署 |
+ 读 [import-report.md](references/import-report.md):自检、按模板向作者汇报、设置 `.active-book`。
---
## 流程衔接
- **流水线:** 长篇 / 短篇
- **位置:** 导入(在开书之前)
-
| 时机 | 跳转到 | 命令 |
|---|---|---|
- | 导入完想继续写(长篇) | story-long-write | `/story-long-write` + "日更" |
- | 导入完想继续写(短篇) | story-short-write | `/story-short-write` |
+ | 导入完想继续写 | story-long-write / story-short-write | `/story-long-write` + "日更" / `/story-short-write` |
| 导入完想审查质量 | story-review | `/story-review` |
- | 想深入分析对标(长篇) | story-long-analyze | `/story-long-analyze` |
- | 想深入分析对标(短篇) | story-short-analyze | `/story-short-analyze` |
- | 从零开新书(长篇) | story-long-write | `/story-long-write` + "开书" |
- | 从零开新书(短篇) | story-short-write | `/story-short-write` |
- | 项目未部署环境 | story-setup | `/story-setup` |
-
- ---
+ | 想拆一本外部对标书 | story-long-analyze / story-short-analyze | `/story-long-analyze` / `/story-short-analyze` |
+ | 从零开新书 | story-long-write / story-short-write | `/story-long-write` + "开书" / `/story-short-write` |
+ | 项目未装写作环境 | story-setup | `/story-setup` |
## 语言
- 跟随用户的语言回复,用户用什么语言就用什么语言回复
- 中文回复遵循《中文文案排版指北》