# LangGraph工作流引擎
**本文档引用的文件**
- [graph.ts](file://server/src/modules/book-generator/graph.ts)
- [langgraph-controller.ts](file://server/src/modules/book-generator/langgraph-controller.ts)
- [stage-manager.ts](file://server/src/modules/book-generator/stage-manager.ts)
- [book-generator.types.ts](file://server/src/modules/book-generator/book-generator.types.ts)
- [index.ts](file://server/src/modules/book-generator/index.ts)
- [content.node.ts](file://server/src/modules/book-generator/nodes/content.node.ts)
- [outline.node.ts](file://server/src/modules/book-generator/nodes/outline.node.ts)
- [full-outline.node.ts](file://server/src/modules/book-generator/nodes/full-outline.node.ts)
- [plan.node.ts](file://server/src/modules/book-generator/nodes/plan.node.ts)
- [selector.ts](file://server/src/modules/book-generator/strategies/selector.ts)
- [fault-tolerance.ts](file://server/src/modules/book-generator/fault-tolerance.ts)
- [utils.ts](file://server/src/modules/book-generator/utils.ts)
- [book-generator.store.ts](file://server/src/modules/book-generator/book-generator.store.ts)
- [book-type-config.ts](file://server/src/modules/book-generator/book-type-config.ts)
- [langgraph-types.ts](file://server/src/modules/book-generator/langgraph-types.ts)
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构概览](#架构概览)
5. [详细组件分析](#详细组件分析)
6. [依赖分析](#依赖分析)
7. [性能考虑](#性能考虑)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录](#附录)
## 简介
本文件为 LangGraph 工作流引擎的技术文档,面向希望理解并扩展“书籍生成”自动化流水线的工程师与产品人员。文档从系统架构、节点设计、状态管理、阶段切换、容错机制、配置选项、调试监控等方面进行深入剖析,并提供最佳实践与排障建议。
## 项目结构
LangGraph 工作流位于后端服务的书籍生成模块中,采用“策略门面 + 图编排 + 节点执行 + 阶段管理 + 容错控制”的分层设计。核心目录与职责如下:
- graph.ts:定义 LangGraph 状态与 reducer,作为工作流的“状态中枢”
- nodes/*:具体节点实现(规划、大纲、内容、连贯性编辑等)
- strategies/*:生成策略选择器与不同策略实现
- langgraph-controller.ts:对外 API 路由与任务调度
- stage-manager.ts:章节阶段机,负责线性阶段推进与回退
- fault-tolerance.ts:AI 调用重试、节点超时、进度监控与自动恢复
- book-generator.store.ts:持久化与数据访问层
- book-type-config.ts:书籍规模与章节/字数估算配置
- utils.ts:通用工具(进度常量、字数统计)
```mermaid
graph TB
subgraph "API 层"
C["langgraph-controller.ts
路由与任务调度"]
end
subgraph "策略层"
S["selector.ts
策略选择器"]
I["index.ts
策略门面"]
end
subgraph "编排层"
G["graph.ts
状态与reducer"]
end
subgraph "节点层"
P["plan.node.ts
书籍规划"]
O["outline.node.ts
大纲生成"]
FO["full-outline.node.ts
一步大纲"]
W["content.node.ts
内容生成/并行"]
end
subgraph "阶段管理"
SM["stage-manager.ts
章节阶段机"]
end
subgraph "容错层"
FT["fault-tolerance.ts
重试/超时/监控"]
end
subgraph "存储层"
BS["book-generator.store.ts
持久化"]
BTC["book-type-config.ts
规模配置"]
end
C --> I
I --> S
I --> G
G --> P --> O --> W
G --> FO
W --> SM
O --> BS
W --> BS
FO --> BS
P --> BS
C --> FT
C --> BS
C --> BTC
```
图表来源
- [langgraph-controller.ts:1-800](file://server/src/modules/book-generator/langgraph-controller.ts#L1-L800)
- [index.ts:1-119](file://server/src/modules/book-generator/index.ts#L1-L119)
- [selector.ts:1-81](file://server/src/modules/book-generator/strategies/selector.ts#L1-L81)
- [graph.ts:1-83](file://server/src/modules/book-generator/graph.ts#L1-L83)
- [plan.node.ts:1-201](file://server/src/modules/book-generator/nodes/plan.node.ts#L1-L201)
- [outline.node.ts:1-129](file://server/src/modules/book-generator/nodes/outline.node.ts#L1-L129)
- [full-outline.node.ts:1-243](file://server/src/modules/book-generator/nodes/full-outline.node.ts#L1-L243)
- [content.node.ts:1-546](file://server/src/modules/book-generator/nodes/content.node.ts#L1-L546)
- [stage-manager.ts:1-202](file://server/src/modules/book-generator/stage-manager.ts#L1-L202)
- [fault-tolerance.ts:1-387](file://server/src/modules/book-generator/fault-tolerance.ts#L1-L387)
- [book-generator.store.ts:1-800](file://server/src/modules/book-generator/book-generator.store.ts#L1-L800)
- [book-type-config.ts:1-133](file://server/src/modules/book-generator/book-type-config.ts#L1-L133)
章节来源
- [langgraph-controller.ts:1-800](file://server/src/modules/book-generator/langgraph-controller.ts#L1-L800)
- [graph.ts:1-83](file://server/src/modules/book-generator/graph.ts#L1-L83)
## 核心组件
- 状态中枢(GraphState):使用 LangChain Annotation API 定义工作流状态,含书籍标识、主题、规模、大纲层级、当前章节、完成章节列表、完成标志、错误信息、进度、失败章节等字段;通过 reducer 实现并发写入的安全合并。
- 节点(Node):每个节点负责特定阶段的工作,如“规划”“大纲生成”“内容生成”“并行内容生成”“一步大纲”等,节点间通过 GraphState 传递上下文。
- 策略(Strategy):通过策略选择器在“串行”“一步大纲+并行内容”“逐章内聚”“DeepPlan+并行”等方案间切换。
- 阶段管理(StageManager):维护章节线性阶段机,提供安全推进与回退,支持资源清理与乐观锁。
- 容错(FaultTolerance):提供 AI 调用重试、节点超时、进度监控与自动恢复,保证生成任务的稳定性。
- 存储(BookStore):封装 Prisma 访问,提供书籍/章节 CRUD、树形大纲重建、音频生成回调更新等能力。
章节来源
- [graph.ts:23-82](file://server/src/modules/book-generator/graph.ts#L23-L82)
- [index.ts:74-91](file://server/src/modules/book-generator/index.ts#L74-L91)
- [stage-manager.ts:100-198](file://server/src/modules/book-generator/stage-manager.ts#L100-L198)
- [fault-tolerance.ts:17-51](file://server/src/modules/book-generator/fault-tolerance.ts#L17-L51)
- [book-generator.store.ts:163-800](file://server/src/modules/book-generator/book-generator.store.ts#L163-L800)
## 架构概览
LangGraph 工作流以“策略门面 + 图编排 + 节点执行”为核心,结合“阶段管理 + 容错控制 + 存储层”,形成完整的书籍生成流水线。API 层接收请求后,选择策略并启动图编排;节点在图中按顺序执行,状态通过 reducer 合并;阶段管理器确保章节状态线性推进;容错层保障稳定性;存储层提供持久化与数据重建能力。
```mermaid
sequenceDiagram
participant Client as "客户端"
participant API as "langgraph-controller.ts"
participant Strat as "index.ts/selector.ts"
participant Graph as "graph.ts"
participant Node as "nodes/*"
participant Stage as "stage-manager.ts"
participant Store as "book-generator.store.ts"
Client->>API : POST /api/book-generator/langgraph/books
API->>Strat : 选择策略并初始化
Strat->>Graph : 初始化GraphState
Graph->>Node : planBookNode规划
Node->>Store : 写入规划结果/更新bookPlan
Graph->>Node : generateOutlineNode 或 fullOutlineNode
Node->>Store : 写入大纲/创建章节
Graph->>Node : writeChaptersParallelNode并行内容
Node->>Stage : advanceChapter/content_completed
Node->>Store : 更新章节内容/字数/音频URL
Graph-->>API : 返回进度/状态
API-->>Client : 任务状态/进度
```
图表来源
- [langgraph-controller.ts:388-546](file://server/src/modules/book-generator/langgraph-controller.ts#L388-L546)
- [index.ts:74-91](file://server/src/modules/book-generator/index.ts#L74-L91)
- [graph.ts:23-82](file://server/src/modules/book-generator/graph.ts#L23-L82)
- [plan.node.ts:145-200](file://server/src/modules/book-generator/nodes/plan.node.ts#L145-L200)
- [outline.node.ts:14-128](file://server/src/modules/book-generator/nodes/outline.node.ts#L14-L128)
- [full-outline.node.ts:135-217](file://server/src/modules/book-generator/nodes/full-outline.node.ts#L135-L217)
- [content.node.ts:444-545](file://server/src/modules/book-generator/nodes/content.node.ts#L444-L545)
- [stage-manager.ts:158-198](file://server/src/modules/book-generator/stage-manager.ts#L158-L198)
- [book-generator.store.ts:402-428](file://server/src/modules/book-generator/book-generator.store.ts#L402-L428)
## 详细组件分析
### 状态与图编排(graph.ts)
- 状态字段:包含 bookId、userId、topic、bookScale、genLevel、description、bookPlan、currentChapter、completedChapters、finished、error、progress、failedChapters 等。
- Reducer 设计:
- 进度与完成章节只增不减,防止回退导致状态倒退。
- 失败章节列表通过追加合并,避免覆盖。
- 控制流:GraphState 作为节点间共享上下文,节点通过返回 partial state 更新状态。
```mermaid
classDiagram
class GraphState {
+string bookId
+string|number userId
+string topic
+string bookScale
+number genLevel
+string description
+string|undefined bookPlan
+number currentChapter
+number[] completedChapters
+boolean finished
+string|undefined error
+number progress
+number[] failedChapters
}
```
图表来源
- [graph.ts:23-82](file://server/src/modules/book-generator/graph.ts#L23-L82)
章节来源
- [graph.ts:12-82](file://server/src/modules/book-generator/graph.ts#L12-L82)
### 节点设计与执行(nodes/*)
- 规划节点(plan.node.ts):在生成前由 AI 对书籍类型、目标读者、内容深度、写作风格、结构逻辑进行分析,输出可被后续节点使用的 bookPlan。
- 大纲节点(outline.node.ts):基于 topic、bookScale、description 与 bookPlan 生成大纲,校验章节数并在范围内自动补全或截断。
- 一步大纲节点(full-outline.node.ts):一次性生成完整树形大纲(章→节→小节),按 genLevel 决定层级。
- 内容节点(content.node.ts):
- 串行内容生成:遍历叶节点,逐个生成内容,更新章节状态与进度。
- 并行内容生成:使用 AsyncPool 并发生成,支持拓扑排序与依赖处理,提升吞吐。
- 安全防护:章节预算偏差检测、全书字数上限、配额消耗、失败回退。
```mermaid
flowchart TD
Start(["开始:content.node"]) --> FindLeaves["查找叶节点无子节点"]
FindLeaves --> Filter["过滤未完成内容的叶节点"]
Filter --> Loop{"还有待生成节点?"}
Loop --> |否| Done["完成:推进父节点状态"]
Loop --> |是| Gen["生成单个叶节点内容"]
Gen --> Safety["安全防护:预算/上限/配额"]
Safety --> Save["保存内容与字数"]
Save --> Advance["advanceChapter 到 content_completed"]
Advance --> Trigger["触发音频生成"]
Trigger --> Next["下一个节点"]
Next --> Loop
```
图表来源
- [content.node.ts:102-332](file://server/src/modules/book-generator/nodes/content.node.ts#L102-L332)
- [content.node.ts:444-545](file://server/src/modules/book-generator/nodes/content.node.ts#L444-L545)
章节来源
- [plan.node.ts:145-200](file://server/src/modules/book-generator/nodes/plan.node.ts#L145-L200)
- [outline.node.ts:14-128](file://server/src/modules/book-generator/nodes/outline.node.ts#L14-L128)
- [full-outline.node.ts:135-217](file://server/src/modules/book-generator/nodes/full-outline.node.ts#L135-L217)
- [content.node.ts:102-332](file://server/src/modules/book-generator/nodes/content.node.ts#L102-L332)
- [content.node.ts:444-545](file://server/src/modules/book-generator/nodes/content.node.ts#L444-L545)
### 阶段管理器(stage-manager.ts)
- 章节阶段机:定义章节阶段顺序与转移矩阵,确保只能按序推进或在允许范围内回退。
- 安全转移:使用乐观锁更新章节状态,若检测到冲突,记录日志并优雅处理。
- 资源清理:回退时按阶段索引清理下游资源(音频/视频 URL 与时长)。
- 上层封装:提供 advanceChapter(仅前进)、regenerateChapter(回退/重试)等便捷方法。
```mermaid
stateDiagram-v2
[*] --> idle
idle --> content_generating : "advanceChapter"
idle --> failed : "regenerateChapter"
outline_completed --> content_generating : "advanceChapter"
outline_completed --> failed : "regenerateChapter"
content_generating --> content_completed : "完成"
content_generating --> failed : "失败"
content_completed --> audio_generating : "advanceChapter"
content_completed --> audio_completed : "advanceChapter"
content_completed --> content_generating : "regenerateChapter"
content_completed --> failed : "regenerateChapter"
audio_generating --> audio_completed : "完成"
audio_generating --> content_completed : "回退"
audio_generating --> failed : "失败"
audio_completed --> video_generating : "advanceChapter"
audio_completed --> audio_generating : "regenerateChapter"
audio_completed --> content_generating : "regenerateChapter"
audio_completed --> failed : "regenerateChapter"
video_generating --> video_completed : "完成"
video_generating --> failed : "失败"
video_completed --> video_generating : "regenerateChapter"
video_completed --> audio_generating : "regenerateChapter"
video_completed --> content_generating : "regenerateChapter"
video_completed --> failed : "regenerateChapter"
failed --> content_generating : "regenerateChapter"
failed --> audio_generating : "regenerateChapter"
failed --> video_generating : "regenerateChapter"
failed --> idle : "regenerateChapter"
```
图表来源
- [stage-manager.ts:39-67](file://server/src/modules/book-generator/stage-manager.ts#L39-L67)
- [stage-manager.ts:100-198](file://server/src/modules/book-generator/stage-manager.ts#L100-L198)
章节来源
- [stage-manager.ts:100-198](file://server/src/modules/book-generator/stage-manager.ts#L100-L198)
### 容错与稳定性(fault-tolerance.ts)
- AI 调用重试:指数退避重试,记录失败日志并通知用户。
- 节点超时:为各节点配置超时阈值,超时后记录并尝试自动恢复。
- 进度监控:定时检查书籍进度,长时间无进展发出警告并尝试自动恢复。
- 自动恢复:重新入队并延时重试,避免任务永久卡死。
```mermaid
flowchart TD
Enter(["进入节点"]) --> Timeout["设置超时计时器"]
Timeout --> CallLLM["调用LLM带重试"]
CallLLM --> Success{"成功?"}
Success --> |是| Complete["通知完成并返回"]
Success --> |否| Retry["指数退避重试"]
Retry --> Max{"超过最大重试?"}
Max --> |否| CallLLM
Max --> |是| Fail["记录失败并通知用户"]
Timeout --> |超时| TimeoutAction["记录超时并尝试恢复"]
TimeoutAction --> Recovery["自动恢复:重新入队"]
```
图表来源
- [fault-tolerance.ts:68-180](file://server/src/modules/book-generator/fault-tolerance.ts#L68-L180)
- [fault-tolerance.ts:188-323](file://server/src/modules/book-generator/fault-tolerance.ts#L188-L323)
章节来源
- [fault-tolerance.ts:17-51](file://server/src/modules/book-generator/fault-tolerance.ts#L17-L51)
- [fault-tolerance.ts:68-180](file://server/src/modules/book-generator/fault-tolerance.ts#L68-L180)
- [fault-tolerance.ts:188-323](file://server/src/modules/book-generator/fault-tolerance.ts#L188-L323)
### 存储与数据模型(book-generator.store.ts, book-generator.types.ts)
- 数据模型:Book、Chapter、BookOutline、GenerateTask 等,支持三级树形结构(章→节→小节)。
- 存储能力:创建/更新书籍、批量创建章节、按 ID 更新章节内容、发布/取消发布、生成音频并回调更新 URL。
- 阶段映射:根据章节状态计算书籍整体阶段,确保整体进度一致性。
```mermaid
erDiagram
BOOK {
int id PK
string title
string description
string bookScale
int totalChapters
int estimatedWords
string genStage
int progress
boolean isPublished
}
CHAPTER {
int id PK
int bookId FK
int number
string title
string content
int wordCount
string genStage
string audioUrl
float audioDuration
string videoUrl
float videoDuration
int level
int parentId
}
BOOK ||--o{ CHAPTER : "包含"
```
图表来源
- [book-generator.types.ts:32-112](file://server/src/modules/book-generator/book-generator.types.ts#L32-L112)
- [book-generator.store.ts:244-274](file://server/src/modules/book-generator/book-generator.store.ts#L244-L274)
- [book-generator.store.ts:445-509](file://server/src/modules/book-generator/book-generator.store.ts#L445-L509)
章节来源
- [book-generator.types.ts:8-112](file://server/src/modules/book-generator/book-generator.types.ts#L8-L112)
- [book-generator.store.ts:19-60](file://server/src/modules/book-generator/book-generator.store.ts#L19-L60)
- [book-generator.store.ts:402-428](file://server/src/modules/book-generator/book-generator.store.ts#L402-L428)
### 策略选择与配置(index.ts, selector.ts)
- 策略门面:LangGraphBookGenerator.generate 调用当前策略执行生成。
- 策略选择器:支持 sequential、one-step-outline、per-chapter、deep-plan-parallel 四种策略,可通过运行时切换。
- 大纲层级:根据书籍规模与话题文本自动推荐 genLevel,也可由用户显式指定。
章节来源
- [index.ts:74-91](file://server/src/modules/book-generator/index.ts#L74-L91)
- [selector.ts:14-77](file://server/src/modules/book-generator/strategies/selector.ts#L14-L77)
### API 与任务调度(langgraph-controller.ts)
- 估算接口:提供书籍规模预估、章节数量、音频时长估算与配额检查。
- 书籍创建:支持立即生成与队列模式,失败时优雅降级为同步执行。
- 任务进度:提供书籍进度查询,基于章节完成情况计算。
- 交互模式:支持交互式创建(仅创建书籍,不自动生成)。
章节来源
- [langgraph-controller.ts:42-92](file://server/src/modules/book-generator/langgraph-controller.ts#L42-L92)
- [langgraph-controller.ts:388-546](file://server/src/modules/book-generator/langgraph-controller.ts#L388-L546)
- [langgraph-controller.ts:677-714](file://server/src/modules/book-generator/langgraph-controller.ts#L677-L714)
## 依赖分析
- 组件耦合:
- graph.ts 与 nodes/* 强耦合,节点通过 GraphState 读写状态。
- langgraph-controller.ts 依赖策略选择器与存储层,协调任务生命周期。
- stage-manager.ts 与 book-generator.store.ts 协作,确保状态一致性。
- fault-tolerance.ts 与 API 层协作,提供稳定的服务体验。
- 外部依赖:
- LangChain LangGraph:状态注解与图编排。
- Prisma:数据库访问与事务。
- LLM 服务:提示词构建与调用。
```mermaid
graph LR
Controller["langgraph-controller.ts"] --> Strategy["selector.ts"]
Strategy --> Graph["graph.ts"]
Graph --> Nodes["nodes/*"]
Nodes --> Store["book-generator.store.ts"]
Nodes --> Stage["stage-manager.ts"]
Controller --> FT["fault-tolerance.ts"]
Controller --> Store
Controller --> BTC["book-type-config.ts"]
```
图表来源
- [langgraph-controller.ts:1-36](file://server/src/modules/book-generator/langgraph-controller.ts#L1-L36)
- [selector.ts:14-77](file://server/src/modules/book-generator/strategies/selector.ts#L14-L77)
- [graph.ts:5-6](file://server/src/modules/book-generator/graph.ts#L5-L6)
- [content.node.ts:6-17](file://server/src/modules/book-generator/nodes/content.node.ts#L6-L17)
- [stage-manager.ts:6-8](file://server/src/modules/book-generator/stage-manager.ts#L6-L8)
- [fault-tolerance.ts:11-13](file://server/src/modules/book-generator/fault-tolerance.ts#L11-L13)
- [book-generator.store.ts:5-13](file://server/src/modules/book-generator/book-generator.store.ts#L5-L13)
- [book-type-config.ts:61-75](file://server/src/modules/book-generator/book-type-config.ts#L61-L75)
章节来源
- [langgraph-controller.ts:1-36](file://server/src/modules/book-generator/langgraph-controller.ts#L1-L36)
- [selector.ts:14-77](file://server/src/modules/book-generator/strategies/selector.ts#L14-L77)
- [graph.ts:5-6](file://server/src/modules/book-generator/graph.ts#L5-L6)
- [content.node.ts:6-17](file://server/src/modules/book-generator/nodes/content.node.ts#L6-L17)
- [stage-manager.ts:6-8](file://server/src/modules/book-generator/stage-manager.ts#L6-L8)
- [fault-tolerance.ts:11-13](file://server/src/modules/book-generator/fault-tolerance.ts#L11-L13)
- [book-generator.store.ts:5-13](file://server/src/modules/book-generator/book-generator.store.ts#L5-L13)
- [book-type-config.ts:61-75](file://server/src/modules/book-generator/book-type-config.ts#L61-L75)
## 性能考虑
- 并行内容生成:content.node.ts 使用 AsyncPool 并发生成叶节点内容,显著提升吞吐;建议根据服务器资源与 LLM 限流策略调整并发度。
- 进度只增不减:graph.ts 的 reducer 设计避免回退导致的重复计算与状态抖动,提高稳定性。
- 预算与上限:节点内嵌预算偏差检测与全书字数上限,防止超支与资源浪费。
- 队列与降级:API 层优先使用队列提升用户体验,队列不可用时自动降级为同步执行,保证核心业务可用性。
## 故障排查指南
- AI 调用失败:
- 检查重试日志与失败记录,确认是否达到最大重试次数。
- 关注通知消息(ai_retry/ai_failed),定位失败节点。
- 节点超时:
- 查看节点超时配置,确认执行时间是否异常。
- 观察自动恢复流程,确认是否重新入队。
- 进度停滞:
- 使用进度监控接口确认书籍进度,长时间无更新将触发警告与自动恢复。
- 章节状态异常:
- 使用 safeTransition 的日志与冲突处理,确认乐观锁更新是否成功。
- 必要时使用 regenerateChapter 进行回退与重试。
章节来源
- [fault-tolerance.ts:68-180](file://server/src/modules/book-generator/fault-tolerance.ts#L68-L180)
- [fault-tolerance.ts:188-323](file://server/src/modules/book-generator/fault-tolerance.ts#L188-L323)
- [stage-manager.ts:100-198](file://server/src/modules/book-generator/stage-manager.ts#L100-L198)
## 结论
LangGraph 工作流引擎通过“策略门面 + 图编排 + 节点执行 + 阶段管理 + 容错控制”的分层设计,实现了从书籍规划到内容生成的自动化流水线。其状态中枢与 reducer 设计保证了并发安全性,阶段管理器确保线性推进与资源清理,容错层提升了稳定性与用户体验。配合存储层的数据模型与 API 层的任务调度,形成了可扩展、可观测、可恢复的完整体系。
## 附录
- 配置选项与最佳实践
- 大纲层级:根据书籍规模与话题文本自动推荐 genLevel,复杂书籍建议使用 3 层结构。
- 并发控制:并行内容生成建议从 8 起步,结合 LLM 限流与服务器资源动态调整。
- 超时设置:依据节点复杂度调整超时阈值,避免误伤正常执行。
- 重试策略:指数退避重试,最大重试次数与最大延迟需结合 SLA 设定。
- 日志与监控:启用进度监控与节点通知,及时发现异常并自动恢复。
- 参考类型定义
- LangGraph 状态参考:langgraph-types.ts(实际运行时以 graph.ts 的 Annotation API 为准)
- 书籍/章节类型:book-generator.types.ts
章节来源
- [book-type-config.ts:61-133](file://server/src/modules/book-generator/book-type-config.ts#L61-L133)
- [content.node.ts:337-338](file://server/src/modules/book-generator/nodes/content.node.ts#L337-L338)
- [fault-tolerance.ts:17-51](file://server/src/modules/book-generator/fault-tolerance.ts#L17-L51)
- [langgraph-types.ts:16-53](file://server/src/modules/book-generator/langgraph-types.ts#L16-L53)
- [book-generator.types.ts:8-112](file://server/src/modules/book-generator/book-generator.types.ts#L8-L112)