@zb2947244682/supernovel 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.
- package/LICENSE +21 -0
- package/README.md +122 -0
- package/dist/adapters/aiAdapter.d.ts +21 -0
- package/dist/adapters/aiAdapter.d.ts.map +1 -0
- package/dist/adapters/aiAdapter.js +196 -0
- package/dist/adapters/aiAdapter.js.map +1 -0
- package/dist/adapters/index.d.ts +11 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +20 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/logger.d.ts +9 -0
- package/dist/adapters/logger.d.ts.map +1 -0
- package/dist/adapters/logger.js +22 -0
- package/dist/adapters/logger.js.map +1 -0
- package/dist/adapters/storageAdapter.d.ts +20 -0
- package/dist/adapters/storageAdapter.d.ts.map +1 -0
- package/dist/adapters/storageAdapter.js +190 -0
- package/dist/adapters/storageAdapter.js.map +1 -0
- package/dist/adapters/validationAdapter.d.ts +16 -0
- package/dist/adapters/validationAdapter.d.ts.map +1 -0
- package/dist/adapters/validationAdapter.js +33 -0
- package/dist/adapters/validationAdapter.js.map +1 -0
- package/dist/bus/commands.d.ts +70 -0
- package/dist/bus/commands.d.ts.map +1 -0
- package/dist/bus/commands.js +34 -0
- package/dist/bus/commands.js.map +1 -0
- package/dist/bus/dispatcher.d.ts +4 -0
- package/dist/bus/dispatcher.d.ts.map +1 -0
- package/dist/bus/dispatcher.js +313 -0
- package/dist/bus/dispatcher.js.map +1 -0
- package/dist/bus/effectRunner.d.ts +11 -0
- package/dist/bus/effectRunner.d.ts.map +1 -0
- package/dist/bus/effectRunner.js +117 -0
- package/dist/bus/effectRunner.js.map +1 -0
- package/dist/bus/index.d.ts +4 -0
- package/dist/bus/index.d.ts.map +1 -0
- package/dist/bus/index.js +6 -0
- package/dist/bus/index.js.map +1 -0
- package/dist/config/paths.d.ts +13 -0
- package/dist/config/paths.d.ts.map +1 -0
- package/dist/config/paths.js +53 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/core/effects.d.ts +109 -0
- package/dist/core/effects.d.ts.map +1 -0
- package/dist/core/effects.js +42 -0
- package/dist/core/effects.js.map +1 -0
- package/dist/core/errors.d.ts +28 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +56 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/index.d.ts +12 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +18 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/jsonUtils.d.ts +13 -0
- package/dist/core/jsonUtils.d.ts.map +1 -0
- package/dist/core/jsonUtils.js +130 -0
- package/dist/core/jsonUtils.js.map +1 -0
- package/dist/core/logger.d.ts +16 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +59 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/ports.d.ts +57 -0
- package/dist/core/ports.d.ts.map +1 -0
- package/dist/core/ports.js +3 -0
- package/dist/core/ports.js.map +1 -0
- package/dist/core/rag/consistency.d.ts +51 -0
- package/dist/core/rag/consistency.d.ts.map +1 -0
- package/dist/core/rag/consistency.js +239 -0
- package/dist/core/rag/consistency.js.map +1 -0
- package/dist/core/rag/contextAssembler.d.ts +44 -0
- package/dist/core/rag/contextAssembler.d.ts.map +1 -0
- package/dist/core/rag/contextAssembler.js +278 -0
- package/dist/core/rag/contextAssembler.js.map +1 -0
- package/dist/core/rag/index.d.ts +12 -0
- package/dist/core/rag/index.d.ts.map +1 -0
- package/dist/core/rag/index.js +15 -0
- package/dist/core/rag/index.js.map +1 -0
- package/dist/core/rag/knowledgeGraph.d.ts +72 -0
- package/dist/core/rag/knowledgeGraph.d.ts.map +1 -0
- package/dist/core/rag/knowledgeGraph.js +227 -0
- package/dist/core/rag/knowledgeGraph.js.map +1 -0
- package/dist/core/rag/summaries.d.ts +57 -0
- package/dist/core/rag/summaries.d.ts.map +1 -0
- package/dist/core/rag/summaries.js +251 -0
- package/dist/core/rag/summaries.js.map +1 -0
- package/dist/core/rag/types.d.ts +201 -0
- package/dist/core/rag/types.d.ts.map +1 -0
- package/dist/core/rag/types.js +4 -0
- package/dist/core/rag/types.js.map +1 -0
- package/dist/core/rag/vectorStore.d.ts +68 -0
- package/dist/core/rag/vectorStore.d.ts.map +1 -0
- package/dist/core/rag/vectorStore.js +211 -0
- package/dist/core/rag/vectorStore.js.map +1 -0
- package/dist/core/types.d.ts +246 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +3 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/usecases/generateChapter.d.ts +26 -0
- package/dist/core/usecases/generateChapter.d.ts.map +1 -0
- package/dist/core/usecases/generateChapter.js +132 -0
- package/dist/core/usecases/generateChapter.js.map +1 -0
- package/dist/core/usecases/generateChapterRAG.d.ts +40 -0
- package/dist/core/usecases/generateChapterRAG.d.ts.map +1 -0
- package/dist/core/usecases/generateChapterRAG.js +221 -0
- package/dist/core/usecases/generateChapterRAG.js.map +1 -0
- package/dist/core/usecases/generateOutline.d.ts +19 -0
- package/dist/core/usecases/generateOutline.d.ts.map +1 -0
- package/dist/core/usecases/generateOutline.js +129 -0
- package/dist/core/usecases/generateOutline.js.map +1 -0
- package/dist/core/usecases/generateWorld.d.ts +18 -0
- package/dist/core/usecases/generateWorld.d.ts.map +1 -0
- package/dist/core/usecases/generateWorld.js +189 -0
- package/dist/core/usecases/generateWorld.js.map +1 -0
- package/dist/core/usecases/parseRequirements.d.ts +20 -0
- package/dist/core/usecases/parseRequirements.d.ts.map +1 -0
- package/dist/core/usecases/parseRequirements.js +95 -0
- package/dist/core/usecases/parseRequirements.js.map +1 -0
- package/dist/core/usecases/validateNovel.d.ts +29 -0
- package/dist/core/usecases/validateNovel.d.ts.map +1 -0
- package/dist/core/usecases/validateNovel.js +156 -0
- package/dist/core/usecases/validateNovel.js.map +1 -0
- package/dist/shell/cli.d.ts +3 -0
- package/dist/shell/cli.d.ts.map +1 -0
- package/dist/shell/cli.js +158 -0
- package/dist/shell/cli.js.map +1 -0
- package/dist/shell/index.d.ts +3 -0
- package/dist/shell/index.d.ts.map +1 -0
- package/dist/shell/index.js +279 -0
- package/dist/shell/index.js.map +1 -0
- package/package.json +69 -0
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
export interface NovelRequirements {
|
|
2
|
+
rawInput: string;
|
|
3
|
+
title: string;
|
|
4
|
+
genre: string;
|
|
5
|
+
tone: string;
|
|
6
|
+
targetAudience: string;
|
|
7
|
+
totalWords: number;
|
|
8
|
+
wordsPerChapter: number;
|
|
9
|
+
totalVolumes?: number;
|
|
10
|
+
chaptersPerVolume?: number[];
|
|
11
|
+
themes: string[];
|
|
12
|
+
coreConcept: string;
|
|
13
|
+
writingGuidelines: string[];
|
|
14
|
+
forbiddenElements: string[];
|
|
15
|
+
requiredElements?: string[];
|
|
16
|
+
styleReference?: string;
|
|
17
|
+
subGenre?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface Character {
|
|
20
|
+
id: string;
|
|
21
|
+
name: string;
|
|
22
|
+
identity: string;
|
|
23
|
+
aliases?: string[];
|
|
24
|
+
gender?: 'male' | 'female' | 'other';
|
|
25
|
+
age?: string;
|
|
26
|
+
appearance?: {
|
|
27
|
+
height?: string;
|
|
28
|
+
build?: string;
|
|
29
|
+
distinctiveFeatures?: string[];
|
|
30
|
+
commonAttire?: string;
|
|
31
|
+
};
|
|
32
|
+
personality: {
|
|
33
|
+
coreTraits: string[];
|
|
34
|
+
weaknesses?: string[];
|
|
35
|
+
catchphrases?: string[];
|
|
36
|
+
speechStyle?: string;
|
|
37
|
+
surfaceBehaviors?: string[];
|
|
38
|
+
};
|
|
39
|
+
background?: {
|
|
40
|
+
origin?: string;
|
|
41
|
+
keyExperiences?: string[];
|
|
42
|
+
};
|
|
43
|
+
motivation: string;
|
|
44
|
+
abilities?: {
|
|
45
|
+
acquired: string[];
|
|
46
|
+
notYetAcquired?: string[];
|
|
47
|
+
limitDescription?: string;
|
|
48
|
+
};
|
|
49
|
+
relationships?: Relationship[];
|
|
50
|
+
arc?: {
|
|
51
|
+
type: 'flat' | 'growth' | 'fall' | 'transformation';
|
|
52
|
+
stages: string[];
|
|
53
|
+
};
|
|
54
|
+
currentState: {
|
|
55
|
+
location: string;
|
|
56
|
+
health?: string;
|
|
57
|
+
items?: string[];
|
|
58
|
+
knownInfo?: string[];
|
|
59
|
+
unknownInfo?: string[];
|
|
60
|
+
emotion?: string;
|
|
61
|
+
currentEmotion?: string;
|
|
62
|
+
emotionSource?: string;
|
|
63
|
+
status?: string;
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
export interface Location {
|
|
67
|
+
id: string;
|
|
68
|
+
name: string;
|
|
69
|
+
type?: string;
|
|
70
|
+
region?: string;
|
|
71
|
+
description: string;
|
|
72
|
+
keyLandmarks?: string[];
|
|
73
|
+
distances?: Record<string, string>;
|
|
74
|
+
socialEnvironment?: string;
|
|
75
|
+
currentSeasonWeather?: string;
|
|
76
|
+
significance?: string;
|
|
77
|
+
}
|
|
78
|
+
export interface WorldRule {
|
|
79
|
+
id: string;
|
|
80
|
+
category: 'power-system' | 'social' | 'info-transmission' | 'physics' | 'magic' | 'custom';
|
|
81
|
+
content: string;
|
|
82
|
+
exceptions?: string;
|
|
83
|
+
}
|
|
84
|
+
export interface Relationship {
|
|
85
|
+
fromId: string;
|
|
86
|
+
toId: string;
|
|
87
|
+
type: string;
|
|
88
|
+
direction: 'unidirectional' | 'bidirectional' | 'hidden';
|
|
89
|
+
description?: string;
|
|
90
|
+
}
|
|
91
|
+
export interface TimelineEvent {
|
|
92
|
+
id: string;
|
|
93
|
+
date: string;
|
|
94
|
+
description: string;
|
|
95
|
+
characters: string[];
|
|
96
|
+
location: string;
|
|
97
|
+
impact: string;
|
|
98
|
+
}
|
|
99
|
+
export interface Foreshadowing {
|
|
100
|
+
id: string;
|
|
101
|
+
content: string;
|
|
102
|
+
setupChapter?: string;
|
|
103
|
+
plannedResolution?: string;
|
|
104
|
+
status: 'planted' | 'reminded' | 'resolved';
|
|
105
|
+
reminderCount?: number;
|
|
106
|
+
reminderPlan?: string;
|
|
107
|
+
}
|
|
108
|
+
export interface WorldFact {
|
|
109
|
+
id: string;
|
|
110
|
+
content: string;
|
|
111
|
+
effectiveTime: string;
|
|
112
|
+
expirationCondition?: string;
|
|
113
|
+
isActive: boolean;
|
|
114
|
+
impact?: string;
|
|
115
|
+
}
|
|
116
|
+
export interface WorldState {
|
|
117
|
+
background: string;
|
|
118
|
+
worldview?: string;
|
|
119
|
+
characters: Character[];
|
|
120
|
+
locations: Location[];
|
|
121
|
+
rules: WorldRule[];
|
|
122
|
+
relationships?: Relationship[];
|
|
123
|
+
timeline?: TimelineEvent[];
|
|
124
|
+
foreshadowings: Foreshadowing[];
|
|
125
|
+
facts?: WorldFact[];
|
|
126
|
+
plotThreads?: Array<{
|
|
127
|
+
id: string;
|
|
128
|
+
name: string;
|
|
129
|
+
description: string;
|
|
130
|
+
status: 'active' | 'paused' | 'completed';
|
|
131
|
+
}>;
|
|
132
|
+
}
|
|
133
|
+
export interface ChapterBlueprint {
|
|
134
|
+
id: string;
|
|
135
|
+
volume: number;
|
|
136
|
+
number: number;
|
|
137
|
+
title: string;
|
|
138
|
+
function: string;
|
|
139
|
+
scenes: SceneBlueprint[];
|
|
140
|
+
emotionalArc: string;
|
|
141
|
+
hooksToPlant: string[];
|
|
142
|
+
hooksToResolve: string[];
|
|
143
|
+
worldStateChanges?: string[];
|
|
144
|
+
expectedWordCount?: number;
|
|
145
|
+
}
|
|
146
|
+
export interface SceneBlueprint {
|
|
147
|
+
id?: string;
|
|
148
|
+
location: string;
|
|
149
|
+
characters: string[];
|
|
150
|
+
event: string;
|
|
151
|
+
infoRevealed: string[];
|
|
152
|
+
}
|
|
153
|
+
export interface VolumeOutline {
|
|
154
|
+
id?: string;
|
|
155
|
+
number: number;
|
|
156
|
+
title: string;
|
|
157
|
+
function?: string;
|
|
158
|
+
coreTask?: string;
|
|
159
|
+
endingState?: string;
|
|
160
|
+
mainConflict?: string;
|
|
161
|
+
twist?: string;
|
|
162
|
+
arcSummaries?: string[];
|
|
163
|
+
chapters: ChapterBlueprint[];
|
|
164
|
+
}
|
|
165
|
+
export interface NovelOutline {
|
|
166
|
+
title: string;
|
|
167
|
+
theme?: string;
|
|
168
|
+
subtitle?: string;
|
|
169
|
+
coreQuestion?: string;
|
|
170
|
+
emotionalArc?: string;
|
|
171
|
+
climax?: string;
|
|
172
|
+
ending?: string;
|
|
173
|
+
volumes: VolumeOutline[];
|
|
174
|
+
}
|
|
175
|
+
export interface GeneratedChapter {
|
|
176
|
+
id: string;
|
|
177
|
+
volume: number;
|
|
178
|
+
number: number;
|
|
179
|
+
title: string;
|
|
180
|
+
content: string;
|
|
181
|
+
summary: string;
|
|
182
|
+
wordCount: number;
|
|
183
|
+
extractedFacts?: ExtractedFact[];
|
|
184
|
+
characterStateChanges?: CharacterStateChange[];
|
|
185
|
+
newRelationships?: Relationship[];
|
|
186
|
+
validationResults?: ValidationResult[];
|
|
187
|
+
}
|
|
188
|
+
export interface ExtractedFact {
|
|
189
|
+
type: 'event' | 'state' | 'info' | 'item' | 'relationship';
|
|
190
|
+
content: string;
|
|
191
|
+
characters?: string[];
|
|
192
|
+
}
|
|
193
|
+
export interface CharacterStateChange {
|
|
194
|
+
characterId: string;
|
|
195
|
+
field: string;
|
|
196
|
+
oldValue: any;
|
|
197
|
+
newValue: any;
|
|
198
|
+
}
|
|
199
|
+
export interface ValidationResult {
|
|
200
|
+
checkType: ValidationCheckType;
|
|
201
|
+
passed: boolean;
|
|
202
|
+
issues: string[];
|
|
203
|
+
severity: 'error' | 'warning' | 'info';
|
|
204
|
+
}
|
|
205
|
+
export type ValidationCheckType = 'world-rules' | 'character-consistency' | 'timeline-continuity' | 'info-logic' | 'foreshadowing-closure' | 'plot-coherence' | 'style-consistency' | 'word-count';
|
|
206
|
+
export interface NovelProject {
|
|
207
|
+
id?: string;
|
|
208
|
+
requirements: NovelRequirements;
|
|
209
|
+
worldState: WorldState;
|
|
210
|
+
outline: NovelOutline;
|
|
211
|
+
chapters: GeneratedChapter[];
|
|
212
|
+
currentVolume?: number;
|
|
213
|
+
currentChapter?: number;
|
|
214
|
+
status?: 'framework-generated' | 'generating' | 'completed' | 'error';
|
|
215
|
+
errors?: string[];
|
|
216
|
+
createdAt: string;
|
|
217
|
+
updatedAt: string;
|
|
218
|
+
}
|
|
219
|
+
export interface AIConfig {
|
|
220
|
+
provider: 'openai' | 'anthropic' | 'openrouter' | 'custom';
|
|
221
|
+
baseURL: string;
|
|
222
|
+
apiKey: string;
|
|
223
|
+
model: string;
|
|
224
|
+
maxTokens?: number;
|
|
225
|
+
temperature?: number;
|
|
226
|
+
timeoutMs?: number;
|
|
227
|
+
}
|
|
228
|
+
export interface AIResponse {
|
|
229
|
+
content: string;
|
|
230
|
+
usage?: {
|
|
231
|
+
prompt_tokens?: number;
|
|
232
|
+
completion_tokens?: number;
|
|
233
|
+
total_tokens?: number;
|
|
234
|
+
};
|
|
235
|
+
model?: string;
|
|
236
|
+
}
|
|
237
|
+
export interface NovelConfig {
|
|
238
|
+
ai: AIConfig;
|
|
239
|
+
outputDir: string;
|
|
240
|
+
validation: {
|
|
241
|
+
strictMode: boolean;
|
|
242
|
+
maxRetries: number;
|
|
243
|
+
autoFix: boolean;
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,0BAA0B"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { NovelProject, GeneratedChapter, AIConfig, ChapterBlueprint } from '../types.js';
|
|
2
|
+
import type { WithEffects } from '../effects.js';
|
|
3
|
+
export interface GenerateChapterInput {
|
|
4
|
+
project: NovelProject;
|
|
5
|
+
volumeNumber: number;
|
|
6
|
+
chapterNumber: number;
|
|
7
|
+
config: AIConfig;
|
|
8
|
+
}
|
|
9
|
+
export interface GenerateChapterOutput {
|
|
10
|
+
chapter: GeneratedChapter;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* 生成单个章节
|
|
14
|
+
*/
|
|
15
|
+
export declare function generateChapter(input: GenerateChapterInput): WithEffects<GenerateChapterOutput>;
|
|
16
|
+
/**
|
|
17
|
+
* 解析AI响应为章节
|
|
18
|
+
*/
|
|
19
|
+
export declare function parseChapterFromAIResponse(aiContent: string, blueprint: ChapterBlueprint): GeneratedChapter;
|
|
20
|
+
/**
|
|
21
|
+
* 提取章节摘要
|
|
22
|
+
*/
|
|
23
|
+
export declare function extractChapterSummary(chapter: GeneratedChapter, config: AIConfig): WithEffects<{
|
|
24
|
+
summary: string;
|
|
25
|
+
}>;
|
|
26
|
+
//# sourceMappingURL=generateChapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateChapter.d.ts","sourceRoot":"","sources":["../../../src/core/usecases/generateChapter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC9F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAKjD,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,YAAY,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,QAAQ,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,WAAW,CAAC,qBAAqB,CAAC,CA0D/F;AAkED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,gBAAgB,GAC1B,gBAAgB,CAsBlB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,QAAQ,GACf,WAAW,CAAC;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CASlC"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
// UseCase: 生成章节
|
|
2
|
+
// 纯函数:输入项目状态和章节号,输出章节内容
|
|
3
|
+
import { Effects } from '../effects.js';
|
|
4
|
+
import { AppError } from '../errors.js';
|
|
5
|
+
/**
|
|
6
|
+
* 生成单个章节
|
|
7
|
+
*/
|
|
8
|
+
export function generateChapter(input) {
|
|
9
|
+
const { project, volumeNumber, chapterNumber } = input;
|
|
10
|
+
// 查找章节蓝图
|
|
11
|
+
const volume = project.outline.volumes.find(v => v.number === volumeNumber);
|
|
12
|
+
if (!volume) {
|
|
13
|
+
throw new AppError('NOT_FOUND', `卷 ${volumeNumber} 不存在`);
|
|
14
|
+
}
|
|
15
|
+
const blueprint = volume.chapters.find(c => c.number === chapterNumber);
|
|
16
|
+
if (!blueprint) {
|
|
17
|
+
throw new AppError('NOT_FOUND', `第 ${chapterNumber} 章不存在`);
|
|
18
|
+
}
|
|
19
|
+
// 构建上下文
|
|
20
|
+
const prevChapter = project.chapters.find(c => c.volume === volumeNumber && c.number === chapterNumber - 1);
|
|
21
|
+
const contextPrompt = buildChapterContext(project, blueprint, prevChapter);
|
|
22
|
+
const systemPrompt = `你是一位专业的小说作家,擅长创作长篇小说。
|
|
23
|
+
写作要求:
|
|
24
|
+
1. 严格遵循大纲的功能要求
|
|
25
|
+
2. 保持角色性格一致性
|
|
26
|
+
3. 场景切换自然流畅
|
|
27
|
+
4. 对话符合角色身份
|
|
28
|
+
5. 描写细腻,有画面感
|
|
29
|
+
6. 情绪走向符合大纲设计
|
|
30
|
+
7. 埋设和回收指定的伏笔
|
|
31
|
+
8. 字数控制在${project.requirements.wordsPerChapter}字左右
|
|
32
|
+
|
|
33
|
+
重要:直接输出章节正文,不要添加章节标题(如"第X章"),系统会自动添加。`;
|
|
34
|
+
const userPrompt = `${contextPrompt}
|
|
35
|
+
|
|
36
|
+
请开始写作第${volumeNumber}卷第${chapterNumber}章(约${project.requirements.wordsPerChapter}字),直接输出正文内容,不要添加标题:`;
|
|
37
|
+
const effect = Effects.aiChat([
|
|
38
|
+
{ role: 'system', content: systemPrompt },
|
|
39
|
+
{ role: 'user', content: userPrompt }
|
|
40
|
+
], input.config);
|
|
41
|
+
return {
|
|
42
|
+
result: {},
|
|
43
|
+
effects: [
|
|
44
|
+
effect,
|
|
45
|
+
Effects.logProgress('generating', project.chapters.length + 1, project.outline.volumes.reduce((sum, v) => sum + v.chapters.length, 0), `正在生成第${volumeNumber}卷第${chapterNumber}章...`)
|
|
46
|
+
]
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* 构建章节上下文
|
|
51
|
+
*/
|
|
52
|
+
function buildChapterContext(project, blueprint, prevChapter) {
|
|
53
|
+
const relevantChars = project.worldState.characters.filter(c => blueprint.scenes.some(s => s.characters.includes(c.id)));
|
|
54
|
+
const relevantLocations = project.worldState.locations.filter(l => blueprint.scenes.some(s => s.location === l.id));
|
|
55
|
+
const relevantHooks = project.worldState.foreshadowings.filter(h => blueprint.hooksToPlant.includes(h.id) || blueprint.hooksToResolve.includes(h.id));
|
|
56
|
+
let context = `## 第${blueprint.volume}卷第${blueprint.number}章:${blueprint.title}
|
|
57
|
+
|
|
58
|
+
### 大纲要求
|
|
59
|
+
功能:${blueprint.function}
|
|
60
|
+
情绪走向:${blueprint.emotionalArc}
|
|
61
|
+
|
|
62
|
+
### 场景
|
|
63
|
+
${blueprint.scenes.map(s => `
|
|
64
|
+
- 地点:${s.location}
|
|
65
|
+
- 角色:${s.characters.join(', ')}
|
|
66
|
+
- 事件:${s.event}
|
|
67
|
+
- 揭示:${s.infoRevealed.join(', ')}
|
|
68
|
+
`).join('\n')}
|
|
69
|
+
|
|
70
|
+
### 角色档案
|
|
71
|
+
${relevantChars.map(c => `
|
|
72
|
+
${c.name}:
|
|
73
|
+
- 性格:${c.personality.coreTraits.join(', ')}
|
|
74
|
+
- 动机:${c.motivation}
|
|
75
|
+
- 当前状态:${c.currentState.emotion}
|
|
76
|
+
`).join('\n')}
|
|
77
|
+
|
|
78
|
+
### 相关规则
|
|
79
|
+
${project.worldState.rules
|
|
80
|
+
.filter(r => blueprint.scenes.some(s => s.location === r.id))
|
|
81
|
+
.map(r => `- ${r.content}`)
|
|
82
|
+
.join('\n')}
|
|
83
|
+
|
|
84
|
+
### 伏笔处理
|
|
85
|
+
${relevantHooks.map(h => `
|
|
86
|
+
${blueprint.hooksToPlant.includes(h.id) ? '【埋设】' : '【回收】'} ${h.id}: ${h.content}
|
|
87
|
+
`).join('\n')}
|
|
88
|
+
`;
|
|
89
|
+
if (prevChapter) {
|
|
90
|
+
context += `
|
|
91
|
+
### 前一章结尾(衔接)
|
|
92
|
+
${prevChapter.content.slice(-500)}
|
|
93
|
+
`;
|
|
94
|
+
}
|
|
95
|
+
return context;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* 解析AI响应为章节
|
|
99
|
+
*/
|
|
100
|
+
export function parseChapterFromAIResponse(aiContent, blueprint) {
|
|
101
|
+
// 清理AI可能添加的标题
|
|
102
|
+
let content = aiContent.trim();
|
|
103
|
+
// 移除常见的标题格式
|
|
104
|
+
content = content.replace(/^#+\s*第[\d一二三四五六七八九十]+章[::]?.*\n*/m, '');
|
|
105
|
+
content = content.replace(/^第[\d一二三四五六七八九十]+章[::]?.*\n*/m, '');
|
|
106
|
+
content = content.replace(/^#+\s*.+\n*/m, '');
|
|
107
|
+
return {
|
|
108
|
+
id: blueprint.id,
|
|
109
|
+
volume: blueprint.volume,
|
|
110
|
+
number: blueprint.number,
|
|
111
|
+
title: blueprint.title,
|
|
112
|
+
content: content.trim(),
|
|
113
|
+
summary: '', // 后续通过AI提取或手动填写
|
|
114
|
+
wordCount: content.length,
|
|
115
|
+
extractedFacts: [],
|
|
116
|
+
characterStateChanges: [],
|
|
117
|
+
newRelationships: [],
|
|
118
|
+
validationResults: []
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* 提取章节摘要
|
|
123
|
+
*/
|
|
124
|
+
export function extractChapterSummary(chapter, config) {
|
|
125
|
+
const systemPrompt = '请为以下小说章节提取一段简短的摘要(50字以内),概括本章主要情节。';
|
|
126
|
+
const userPrompt = `章节标题:${chapter.title}\n\n内容:\n${chapter.content.slice(0, 1000)}...\n\n请提取摘要:`;
|
|
127
|
+
return {
|
|
128
|
+
result: { summary: '' },
|
|
129
|
+
effects: [Effects.aiChat([{ role: 'system', content: systemPrompt }, { role: 'user', content: userPrompt }], config)]
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=generateChapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateChapter.js","sourceRoot":"","sources":["../../../src/core/usecases/generateChapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { NovelProject, GeneratedChapter, AIConfig, ChapterBlueprint } from '../types.js';
|
|
2
|
+
import type { WithEffects } from '../effects.js';
|
|
3
|
+
export interface GenerateChapterRAGInput {
|
|
4
|
+
project: NovelProject;
|
|
5
|
+
volumeNumber: number;
|
|
6
|
+
chapterNumber: number;
|
|
7
|
+
config: AIConfig;
|
|
8
|
+
useRAG?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface GenerateChapterRAGOutput {
|
|
11
|
+
chapter: GeneratedChapter;
|
|
12
|
+
consistencyViolations?: any[];
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* 使用RAG生成章节
|
|
16
|
+
*/
|
|
17
|
+
export declare function generateChapterRAG(input: GenerateChapterRAGInput): WithEffects<GenerateChapterRAGOutput>;
|
|
18
|
+
/**
|
|
19
|
+
* 解析AI响应为章节
|
|
20
|
+
*/
|
|
21
|
+
export declare function parseChapterFromAIResponse(aiContent: string, blueprint: ChapterBlueprint): GeneratedChapter;
|
|
22
|
+
/**
|
|
23
|
+
* 提取章节摘要(使用AI)
|
|
24
|
+
*/
|
|
25
|
+
export declare function extractChapterSummary(chapter: GeneratedChapter, config: AIConfig): WithEffects<{
|
|
26
|
+
summary: string;
|
|
27
|
+
keyEvents: string[];
|
|
28
|
+
}>;
|
|
29
|
+
/**
|
|
30
|
+
* 检查章节一致性
|
|
31
|
+
*/
|
|
32
|
+
export declare function checkChapterConsistency(chapter: GeneratedChapter, project: NovelProject): WithEffects<{
|
|
33
|
+
violations: any[];
|
|
34
|
+
passed: boolean;
|
|
35
|
+
}>;
|
|
36
|
+
/**
|
|
37
|
+
* 更新RAG索引
|
|
38
|
+
*/
|
|
39
|
+
export declare function updateRAGIndex(chapter: GeneratedChapter, project: NovelProject, summary?: string, keyEvents?: string[]): void;
|
|
40
|
+
//# sourceMappingURL=generateChapterRAG.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateChapterRAG.d.ts","sourceRoot":"","sources":["../../../src/core/usecases/generateChapterRAG.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC9F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAWjD,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,YAAY,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,QAAQ,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,qBAAqB,CAAC,EAAE,GAAG,EAAE,CAAC;CAC/B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,GAAG,WAAW,CAAC,wBAAwB,CAAC,CAmDxG;AA+GD;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,gBAAgB,GAC1B,gBAAgB,CAsBlB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,QAAQ,GACf,WAAW,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAyBvD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,YAAY,GACpB,WAAW,CAAC;IAAE,UAAU,EAAE,GAAG,EAAE,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC,CAgBrD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,YAAY,EACrB,OAAO,CAAC,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,EAAE,GACnB,IAAI,CAmBN"}
|