Skip to main content
ClaudeWave
Skill4.7k estrellas del repoactualizado today

story-import

The story-import Claude Code skill reverses-engineers existing novels by parsing user-provided text into a standard project directory structure compatible with subsequent long-form or short-form writing workflows. It first analyzes the source material using the appropriate decomposition pipeline (story-long-analyze or story-short-analyze based on detected length), then migrates analysis results into a writing project structure, preserving decomposition libraries as analytical assets rather than disposable intermediates.

Instalar en Claude Code
Copiar
git clone --depth 1 https://github.com/worldwonderer/oh-story-claudecode /tmp/story-import && cp -r /tmp/story-import/skills/story-import ~/.claude/skills/story-import
Después abre una sesión nueva de Claude Code; el skill carga automáticamente.

SKILL.md

# story-import:逆向导入已有小说

你是小说项目逆向工程师。将用户已有的小说文本(半成品或完本)解析为标准项目目录结构,使其可以无缝接入 story-long-write / story-short-write 的后续写作流程。导入流程按篇幅分流:长篇走长篇路径,短篇走短篇路径。

**核心信念:好的工具从已有素材开始,不从零起步。**

**交付物是写作工程**:把作者已有的书重建为可续写的**写作工程**(项目结构 + 拆文库分析资产)。`拆文库/` 属于工程的一部分(喂给项目 `对标/`),不能当成用完即弃的中间产物,也不能替代交付物本身——交付物应让作者能直接续写。执行时以「建工程」为可见目标,别把「拆文」当成终点或对外标签。

---

## 核心原则

### 原则 1:先分析后迁移

先用拆解管道完整拆解小说(输出到 `拆文库/`),再将分析结果迁移为项目结构。**`拆文库/` 是写作工程的一部分**(分析资产,喂给项目 `对标/`),保留不丢弃,不是用完即弃的中间产物。

### 原则 2:复用不重复

深度分析阶段调用现成的拆解管道,不重新发明:长篇运行 `/story-long-analyze` 的完整拆解管道,短篇运行 `/story-short-analyze` 的拆解管道。拆解方法论与输出模板由对应 analyze skill 自带,story-import 不执行拆解方法论、不维护这些文件。

---

## Phase 1:确认导入源

问用户:**「你要导入哪本书?请提供文件路径或直接贴文本。」**

### 1.0 确认意图(写作工程 vs 仅拆文库)

默认目标是**完整写作工程**(可续写)。若用户意图不明确——是要可续写的工程,还是只要一份拆文库分析——**主动询问**,不要默认:

> 「你是想把这本书做成可续写的写作工程(设定/大纲/正文/追踪,能接着写第 N+1 章),还是只要一份拆文库分析?」

- 要可续写工程 → 走完整 story-import(Phase 2 拆 + Phase 3 迁移)。
- 只要分析 / 拆文库 → 直接用 `/story-long-analyze`(短篇 `/story-short-analyze`),到拆文库为止,不进 Phase 3 迁移。

### 输入方式识别

```
用户提供路径?
├─ 单文件路径(.txt/.md)
│   └─ 按章节分隔符自动切分
├─ 目录路径
│   └─ 按文件名排序,合并处理
└─ 无路径 → 用户直接贴文本?
              ├─ 是 → 保存到临时文件后处理
              └─ 否 → 提示用户提供源文件
```

### 基本信息确认

1. **自动检测**:从文本中识别书名(如果有)、总章数、总字数、章节格式
2. **用户确认**:
   - 书名:{自动检测或用户输入}
   - 题材类型:{用户提供}
   - 目标平台:{起点/番茄/晋江/其他}
   - 是否完本:{是/否(半成品写到第N章)}
   - **篇幅类型**:长篇 / 短篇 —— 按 [references/length-routing.md](references/length-routing.md) 自动检测(用户显式声明 > 结构信号 > 字数兜底),并向用户复述检测结果请其确认。判定结果决定 Phase 3 走长篇还是短篇路径。
   - **最后一章是否完整**:完整章 / 残稿(写了一半)。若是残稿,提示用户并把「残稿到第 N 章」记入上下文,让用户决定是「基于残章续写」还是「先补完再导入」。story-import 只记录用户决定,不替用户选。
3. **输出确认**:向用户展示检测到的章节范围、字数、判定的篇幅类型、最后一章状态,确认后开始分析

### 环境检测前置

在进入 Phase 2 之前,先检测项目是否已部署 story-setup 基础设施:

- 检测 `.story-deployed` 是否存在;
- 优先检测 `.claude/agents/` 下的 `chapter-extractor.md` 是否存在;不存在时再检测 `.opencode/agents/`(Phase 2 长篇深度分析的并行 agent)。

**未部署时**,提示用户:

> 「检测到当前项目尚未部署写作基础设施。建议先运行 `/story-setup` 再回来导入,否则深度分析阶段无法使用并行 chapter-extractor agent。」

给用户两个选择:

1. **先去 setup**:暂停导入,运行 `/story-setup`,部署完成后重新触发 `/story-import`;
2. **继续导入**:接受 Phase 2 降级为串行处理(长篇逐章摘要不并行,速度较慢,但产物完整)。

用户选择记入上下文,Phase 2 据此决定是否走并行模式。

### 原文备份

原文备份由 Phase 2 调用的 analyze 拆解管道负责(analyze 管道前置步骤会把原文复制/保存到 `拆文库/{书名}/原文/`,对应 story-long-analyze 与 story-short-analyze 的「原文备份(管道前置步骤)」)。Phase 1 只需确认源文件就绪(路径有效或文本已拿到),不在此处单独备份,避免与 analyze 管道重复备份逻辑。

---

## Phase 2:深度分析

按 Phase 1 判定的篇幅类型,调用对应 analyze skill 的**完整拆解管道**;不要做「复用方法论」式的半流程,要驱动整条管道跑完,拿到全套结构化产物。

| 篇幅 | 调用的拆解管道 | 产物目录 |
|------|--------------|---------|
| 长篇 | story-long-analyze 的完整管道(Stage 0-6) | `拆文库/{书名}/` |
| 短篇 | story-short-analyze 的拆解管道(Stage 2-6) | `拆文库/{书名}/` |

### 调用契约

<!--
  契约说明:story-import 依赖 story-long-analyze 的「跳过询问」机制
  (对应 story-long-analyze「Stage 1 停靠点」的「跳过询问的情形」)。
  若 story-long-analyze 后续重构改动了该机制的触发措辞,需同步检查并更新本契约。
-->

#### 长篇:自动续跑过 Stage 1 停靠点

story-long-analyze 在 Stage 0+1(黄金三章)后会**自动停靠**并用 AskUserQuestion 询问是否继续全量拆解(对应 story-long-analyze 的「Stage 1 停靠点」)。但导入场景需要 Stage 2-6 的全套产物(逐章摘要 / 聚合分析 / `剧情/节奏.md` / `剧情/情绪模块.md` / 设定关系 / 汇总报告 / 文风),缺一不可——否则 Phase 3 迁移会拿到半成品。

**新旧拆文库判定**:若 `_progress.md` 标记 Stage 3+ 已完成,或 `拆文报告.md` 已含「读者需求 / 情绪引擎」「关键信息与扩写技法总览」「节奏与情绪触动点」「可复现模块」任一 v12 摘要标题,视为 v12 新契约拆文库;此时 `剧情/节奏.md` 与 `剧情/情绪模块.md` 是导入必备权威产物,缺失必须先修复/重跑 Stage 3,不得静默降级。只有旧拆文库(pre-v12,无上述信号)才能走 legacy fallback。

因此调用 story-long-analyze 时**必须在一开始就以「完整拆解、一次跑完、不要停下询问」模式驱动管道**,命中其「跳过询问」路径(用户开头明确说「完整拆解 / 一次跑完 / 系统拆解 / 别问」时不停靠),让管道自动从 Stage 2 续跑到 Stage 6。

- 措辞示例:启动深度分析时声明「以『完整拆解、一次跑完、不要停下询问』模式拆解本书,确保 Stage 2-6 全部产出」。
- **兜底**:若运行环境实际仍停在 Stage 1 询问处,story-import 自动选择「继续全量拆解」,**绝不把停靠询问甩给用户**。
- 环境检测(Phase 1)发现未部署 chapter-extractor agent 且用户选择「继续导入」时,Stage 2 逐章摘要降级为串行处理,产物仍完整,仅速度变慢。

#### 短篇:单一全量管道

story-short-analyze 是单一全量拆解管道(Stage 2-6),**无 Stage 1 停靠点**,契约较简单:调用后让其跑完 Stage 2-6 即可,无需声明跳过询问。

### 输出目录

#### 长篇拆文库结构

长篇分析输出到 `拆文库/{书名}/`,与 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          # Stage 6 文风:写作技法视图 + 原文范例锚点
└── _progress.md
```

#### 短篇拆文库结构

短篇分析输出到 `拆文库/{书名}/`,与 story-short-analyze 拆解管道一致:

```
拆文库/{书名}/
├── 原文/
│   └── 原文.txt          # 扩展名随源文件;对话直接贴入的文本存为 原文.md
├── 拆文报告.md
├── 情节节点.md
└── 写作手法.md
```

### 长篇完整管道(Stage 0-6)

> 管道详细说明见 story-long-analyze(运行 `/story-long-analyze`),此处仅列概要。

| 阶段 | 名称 | 输入 | 输出 | 完成标志 |
|------|------|------|------|----------|
| 0 | 概要提取 | 原始文本 | 概要.md + 章节索引 | 章节结构识别完成 |
| 1 | 黄金三章 | 前 3 章原文 | 第1章_深度拆解.md / 第2章_深度拆解.md / 第3章_深度拆解.md → **停靠产出快速预览.md**(导入场景自动续跑,不停下询问) | 3 章拆解完成 |
| 2 | 逐章摘要 | 分块章节文本 | 章节摘要.md(含情节点+角色+**关键信息与扩写技法**)。每章10-40情节点(密度150-200字/个,按字数动态调节)。角色过滤(龙套不提取、别名归类)。**并行 chapter-extractor agent 模式**(未部署 agent 时降级串行)。**计数验证:摘要数 == 章节数**。 | 所有章节处理完成 |
| 3 | 聚合分析 | 全部章节摘要 | `剧情/*.md` + `剧情/README.md` + `剧情/故事线.md` + **`剧情/节奏.md` + `剧情/情绪模块.md`**。**故事框架识别**(前置)。**两步法剧情聚合**(先从摘要识别剧情大纲,再按大纲分配情节点)。**关键信息推进索引**、**情绪触动点与爆发节奏**、**读者需求 / 情绪引擎 / 可复现模块**。**角色合并**(跨章节去重+别名归一)。**角色分级**(主角/反派/核心配角/功能角色)。**散落情节兜底**(6步,含覆盖率验证)。**质量检查**(置信度>=0.85/覆盖率85%-95%/重叠率<=35%)。 | 质量检查通过 |
| 4 | 设定+关系 | 阶段 3 合并后角色数据+情节点 | 设定/*.md + 角色/*.md。**两阶段角色模型**。**别名解析**(置信度≥0.85自动合并)。 | 设定和关系提取完成 |
| 5 | 汇总报告 | 全部输出 | 拆文报告.md(含「读者需求 / 情绪引擎」「关键信息与扩写技法总览」「节奏与情绪触动点」「可复现模块」,并指向 `剧情/节奏.md` / `剧情/情绪模块.md`) | 报告生成完成 |
| 6 | 文风 | 拆文报告.md + 章节/第1-3章_深度拆解.md + 章节/*_摘要.md + 原文/原文.txt | 文风.md(整书级写作技法视图,story-long-write 日更循环必读) | 文风落盘 `拆文库/{书名}/文风.md` |

### 短篇拆文管道

> 管道详细说明见 story-short-analyze(运行 `/story-short-analyze`),此处仅列概要。

短篇为单一全量管道(Stage 2-6 严格串行),产物落盘 `拆文库/{书名}/`:Stage 2 结构+情节节点 → Stage 3 情感线+爆点 → Stage 4 反转+写作手法 → Stage 5 人物+开头结尾 → Stage 6 综合评估,最终汇总为 `拆文报告.md`、`情节节点.md`、`写作手法.md`。

### 分块策略(长篇)

沿用 story-long-analyze 的分块策略(Stage 2 使用 chapter-extractor agent 并行,其他阶段按以