@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.
Files changed (131) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +122 -0
  3. package/dist/adapters/aiAdapter.d.ts +21 -0
  4. package/dist/adapters/aiAdapter.d.ts.map +1 -0
  5. package/dist/adapters/aiAdapter.js +196 -0
  6. package/dist/adapters/aiAdapter.js.map +1 -0
  7. package/dist/adapters/index.d.ts +11 -0
  8. package/dist/adapters/index.d.ts.map +1 -0
  9. package/dist/adapters/index.js +20 -0
  10. package/dist/adapters/index.js.map +1 -0
  11. package/dist/adapters/logger.d.ts +9 -0
  12. package/dist/adapters/logger.d.ts.map +1 -0
  13. package/dist/adapters/logger.js +22 -0
  14. package/dist/adapters/logger.js.map +1 -0
  15. package/dist/adapters/storageAdapter.d.ts +20 -0
  16. package/dist/adapters/storageAdapter.d.ts.map +1 -0
  17. package/dist/adapters/storageAdapter.js +190 -0
  18. package/dist/adapters/storageAdapter.js.map +1 -0
  19. package/dist/adapters/validationAdapter.d.ts +16 -0
  20. package/dist/adapters/validationAdapter.d.ts.map +1 -0
  21. package/dist/adapters/validationAdapter.js +33 -0
  22. package/dist/adapters/validationAdapter.js.map +1 -0
  23. package/dist/bus/commands.d.ts +70 -0
  24. package/dist/bus/commands.d.ts.map +1 -0
  25. package/dist/bus/commands.js +34 -0
  26. package/dist/bus/commands.js.map +1 -0
  27. package/dist/bus/dispatcher.d.ts +4 -0
  28. package/dist/bus/dispatcher.d.ts.map +1 -0
  29. package/dist/bus/dispatcher.js +313 -0
  30. package/dist/bus/dispatcher.js.map +1 -0
  31. package/dist/bus/effectRunner.d.ts +11 -0
  32. package/dist/bus/effectRunner.d.ts.map +1 -0
  33. package/dist/bus/effectRunner.js +117 -0
  34. package/dist/bus/effectRunner.js.map +1 -0
  35. package/dist/bus/index.d.ts +4 -0
  36. package/dist/bus/index.d.ts.map +1 -0
  37. package/dist/bus/index.js +6 -0
  38. package/dist/bus/index.js.map +1 -0
  39. package/dist/config/paths.d.ts +13 -0
  40. package/dist/config/paths.d.ts.map +1 -0
  41. package/dist/config/paths.js +53 -0
  42. package/dist/config/paths.js.map +1 -0
  43. package/dist/core/effects.d.ts +109 -0
  44. package/dist/core/effects.d.ts.map +1 -0
  45. package/dist/core/effects.js +42 -0
  46. package/dist/core/effects.js.map +1 -0
  47. package/dist/core/errors.d.ts +28 -0
  48. package/dist/core/errors.d.ts.map +1 -0
  49. package/dist/core/errors.js +56 -0
  50. package/dist/core/errors.js.map +1 -0
  51. package/dist/core/index.d.ts +12 -0
  52. package/dist/core/index.d.ts.map +1 -0
  53. package/dist/core/index.js +18 -0
  54. package/dist/core/index.js.map +1 -0
  55. package/dist/core/jsonUtils.d.ts +13 -0
  56. package/dist/core/jsonUtils.d.ts.map +1 -0
  57. package/dist/core/jsonUtils.js +130 -0
  58. package/dist/core/jsonUtils.js.map +1 -0
  59. package/dist/core/logger.d.ts +16 -0
  60. package/dist/core/logger.d.ts.map +1 -0
  61. package/dist/core/logger.js +59 -0
  62. package/dist/core/logger.js.map +1 -0
  63. package/dist/core/ports.d.ts +57 -0
  64. package/dist/core/ports.d.ts.map +1 -0
  65. package/dist/core/ports.js +3 -0
  66. package/dist/core/ports.js.map +1 -0
  67. package/dist/core/rag/consistency.d.ts +51 -0
  68. package/dist/core/rag/consistency.d.ts.map +1 -0
  69. package/dist/core/rag/consistency.js +239 -0
  70. package/dist/core/rag/consistency.js.map +1 -0
  71. package/dist/core/rag/contextAssembler.d.ts +44 -0
  72. package/dist/core/rag/contextAssembler.d.ts.map +1 -0
  73. package/dist/core/rag/contextAssembler.js +278 -0
  74. package/dist/core/rag/contextAssembler.js.map +1 -0
  75. package/dist/core/rag/index.d.ts +12 -0
  76. package/dist/core/rag/index.d.ts.map +1 -0
  77. package/dist/core/rag/index.js +15 -0
  78. package/dist/core/rag/index.js.map +1 -0
  79. package/dist/core/rag/knowledgeGraph.d.ts +72 -0
  80. package/dist/core/rag/knowledgeGraph.d.ts.map +1 -0
  81. package/dist/core/rag/knowledgeGraph.js +227 -0
  82. package/dist/core/rag/knowledgeGraph.js.map +1 -0
  83. package/dist/core/rag/summaries.d.ts +57 -0
  84. package/dist/core/rag/summaries.d.ts.map +1 -0
  85. package/dist/core/rag/summaries.js +251 -0
  86. package/dist/core/rag/summaries.js.map +1 -0
  87. package/dist/core/rag/types.d.ts +201 -0
  88. package/dist/core/rag/types.d.ts.map +1 -0
  89. package/dist/core/rag/types.js +4 -0
  90. package/dist/core/rag/types.js.map +1 -0
  91. package/dist/core/rag/vectorStore.d.ts +68 -0
  92. package/dist/core/rag/vectorStore.d.ts.map +1 -0
  93. package/dist/core/rag/vectorStore.js +211 -0
  94. package/dist/core/rag/vectorStore.js.map +1 -0
  95. package/dist/core/types.d.ts +246 -0
  96. package/dist/core/types.d.ts.map +1 -0
  97. package/dist/core/types.js +3 -0
  98. package/dist/core/types.js.map +1 -0
  99. package/dist/core/usecases/generateChapter.d.ts +26 -0
  100. package/dist/core/usecases/generateChapter.d.ts.map +1 -0
  101. package/dist/core/usecases/generateChapter.js +132 -0
  102. package/dist/core/usecases/generateChapter.js.map +1 -0
  103. package/dist/core/usecases/generateChapterRAG.d.ts +40 -0
  104. package/dist/core/usecases/generateChapterRAG.d.ts.map +1 -0
  105. package/dist/core/usecases/generateChapterRAG.js +221 -0
  106. package/dist/core/usecases/generateChapterRAG.js.map +1 -0
  107. package/dist/core/usecases/generateOutline.d.ts +19 -0
  108. package/dist/core/usecases/generateOutline.d.ts.map +1 -0
  109. package/dist/core/usecases/generateOutline.js +129 -0
  110. package/dist/core/usecases/generateOutline.js.map +1 -0
  111. package/dist/core/usecases/generateWorld.d.ts +18 -0
  112. package/dist/core/usecases/generateWorld.d.ts.map +1 -0
  113. package/dist/core/usecases/generateWorld.js +189 -0
  114. package/dist/core/usecases/generateWorld.js.map +1 -0
  115. package/dist/core/usecases/parseRequirements.d.ts +20 -0
  116. package/dist/core/usecases/parseRequirements.d.ts.map +1 -0
  117. package/dist/core/usecases/parseRequirements.js +95 -0
  118. package/dist/core/usecases/parseRequirements.js.map +1 -0
  119. package/dist/core/usecases/validateNovel.d.ts +29 -0
  120. package/dist/core/usecases/validateNovel.d.ts.map +1 -0
  121. package/dist/core/usecases/validateNovel.js +156 -0
  122. package/dist/core/usecases/validateNovel.js.map +1 -0
  123. package/dist/shell/cli.d.ts +3 -0
  124. package/dist/shell/cli.d.ts.map +1 -0
  125. package/dist/shell/cli.js +158 -0
  126. package/dist/shell/cli.js.map +1 -0
  127. package/dist/shell/index.d.ts +3 -0
  128. package/dist/shell/index.d.ts.map +1 -0
  129. package/dist/shell/index.js +279 -0
  130. package/dist/shell/index.js.map +1 -0
  131. package/package.json +69 -0
@@ -0,0 +1,313 @@
1
+ // Bus层 - Command分发器
2
+ // 连接Command到UseCase,协调工作流
3
+ import { runEffect } from './effectRunner.js';
4
+ import { AppError } from '../core/index.js';
5
+ import { parseRequirements, parseRequirementsFromAIResponse } from '../core/usecases/parseRequirements.js';
6
+ import { generateWorld, parseWorldFromAIResponse } from '../core/usecases/generateWorld.js';
7
+ import { generateOutline, parseOutlineFromAIResponse } from '../core/usecases/generateOutline.js';
8
+ import { generateChapter, parseChapterFromAIResponse } from '../core/usecases/generateChapter.js';
9
+ import { generateChapterRAG, parseChapterFromAIResponse as parseChapterFromAIResponseRAG, updateRAGIndex } from '../core/usecases/generateChapterRAG.js';
10
+ import { globalSummaryManager } from '../core/rag/index.js';
11
+ import { validateChapter } from '../core/usecases/validateNovel.js';
12
+ // ============ Command处理器 ============
13
+ export async function dispatchCommand(ctx, command) {
14
+ switch (command.type) {
15
+ case 'PARSE_REQUIREMENTS':
16
+ throw new AppError('INVALID_STATE', 'PARSE_REQUIREMENTS 不应直接调用,请使用 GENERATE_FRAMEWORK');
17
+ case 'GENERATE_FRAMEWORK':
18
+ await handleGenerateFramework(ctx, command.payload);
19
+ break;
20
+ case 'GENERATE_CHAPTER':
21
+ await handleGenerateChapter(ctx, command.payload);
22
+ break;
23
+ case 'GENERATE_ALL_CHAPTERS':
24
+ await handleGenerateAllChapters(ctx, command.payload);
25
+ break;
26
+ case 'VALIDATE_NOVEL':
27
+ await handleValidateNovel(ctx, command.payload);
28
+ break;
29
+ case 'EXPORT_NOVEL':
30
+ await handleExportNovel(ctx, command.payload);
31
+ break;
32
+ case 'TEST_MODEL':
33
+ await handleTestModel(ctx, command.payload);
34
+ break;
35
+ default:
36
+ throw new AppError('UNKNOWN_COMMAND', `未知命令类型: ${command.type}`);
37
+ }
38
+ }
39
+ // ============ 框架生成工作流 ============
40
+ async function handleGenerateFramework(ctx, payload) {
41
+ const { userPrompt, config, outputDir } = payload;
42
+ ctx.logger.info('========== 开始生成小说框架 ==========');
43
+ ctx.logger.info('用户输入', { prompt: userPrompt.slice(0, 100) + '...' });
44
+ ctx.logger.info('输出目录', { outputDir });
45
+ ctx.logger.info('AI配置', { model: config.model, provider: config.provider });
46
+ // Step 1: 解析需求
47
+ ctx.logger.progress('framework', 1, 4, '解析需求...');
48
+ ctx.logger.info('[Step 1/4] 解析需求 - 构建 Prompt');
49
+ const reqResult = parseRequirements({ userPrompt, config });
50
+ ctx.logger.info('[Step 1/4] 需求解析 Prompt 构建完成,准备调用 AI');
51
+ const aiReqResponse = await executeAIEffect(ctx, reqResult);
52
+ ctx.logger.info('[Step 1/4] 获取 AI 响应,开始解析需求', {
53
+ responseLength: aiReqResponse.content?.length,
54
+ model: aiReqResponse.model
55
+ });
56
+ const requirements = parseRequirementsFromAIResponse(aiReqResponse.content);
57
+ ctx.logger.info('[Step 1/4] 需求解析完成', {
58
+ title: requirements.title,
59
+ genre: requirements.genre,
60
+ totalVolumes: requirements.totalVolumes,
61
+ totalWords: requirements.totalWords
62
+ });
63
+ // Step 2: 生成世界
64
+ ctx.logger.progress('framework', 2, 4, '构建世界观...');
65
+ ctx.logger.info('[Step 2/4] 生成世界设定 - 构建 Prompt');
66
+ const worldResult = generateWorld({ requirements, config });
67
+ ctx.logger.info('[Step 2/4] 世界观 Prompt 构建完成,准备调用 AI');
68
+ const aiWorldResponse = await executeAIEffect(ctx, worldResult);
69
+ ctx.logger.info('[Step 2/4] 获取 AI 响应,开始解析世界设定', {
70
+ responseLength: aiWorldResponse.content?.length
71
+ });
72
+ const worldState = parseWorldFromAIResponse(aiWorldResponse.content);
73
+ ctx.logger.info('[Step 2/4] 世界观构建完成', {
74
+ characters: worldState.characters.length,
75
+ locations: worldState.locations.length,
76
+ rules: worldState.rules.length,
77
+ foreshadowings: worldState.foreshadowings.length
78
+ });
79
+ // Step 3: 生成大纲
80
+ ctx.logger.progress('framework', 3, 4, '设计大纲...');
81
+ ctx.logger.info('[Step 3/4] 生成大纲 - 构建 Prompt');
82
+ const outlineResult = generateOutline({ requirements, worldState, config });
83
+ ctx.logger.info('[Step 3/4] 大纲 Prompt 构建完成,准备调用 AI');
84
+ const aiOutlineResponse = await executeAIEffect(ctx, outlineResult);
85
+ ctx.logger.info('[Step 3/4] 获取 AI 响应,开始解析大纲', {
86
+ responseLength: aiOutlineResponse.content?.length
87
+ });
88
+ const outline = parseOutlineFromAIResponse(aiOutlineResponse.content);
89
+ const totalChapters = outline.volumes.reduce((sum, v) => sum + v.chapters.length, 0);
90
+ ctx.logger.info('[Step 3/4] 大纲设计完成', {
91
+ volumes: outline.volumes.length,
92
+ totalChapters: totalChapters
93
+ });
94
+ // Step 4: 保存框架
95
+ ctx.logger.progress('framework', 4, 4, '保存框架...');
96
+ ctx.logger.info('[Step 4/4] 保存项目框架到文件系统');
97
+ const project = {
98
+ requirements,
99
+ worldState,
100
+ outline,
101
+ chapters: [],
102
+ createdAt: new Date().toISOString(),
103
+ updatedAt: new Date().toISOString()
104
+ };
105
+ ctx.logger.info('[Step 4/4] 项目数据结构构建完成', {
106
+ title: project.requirements.title,
107
+ characterCount: project.worldState.characters.length,
108
+ volumeCount: project.outline.volumes.length
109
+ });
110
+ await ctx.projectStorage.saveProject(project, outputDir);
111
+ ctx.logger.info('[Step 4/4] 项目文件保存完成', { outputDir });
112
+ ctx.logger.info('========== 小说框架生成完成 ==========', { outputDir });
113
+ }
114
+ // ============ 章节生成工作流 ============
115
+ async function handleGenerateAllChapters(ctx, payload) {
116
+ const { project, config, projectPath } = payload;
117
+ const totalChapters = project.outline.volumes.reduce((sum, v) => sum + v.chapters.length, 0);
118
+ ctx.logger.info('开始生成全部章节...', { totalChapters, projectPath });
119
+ // 初始化RAG系统(长文本一致性支持)
120
+ ctx.logger.info('初始化RAG知识检索系统...');
121
+ globalSummaryManager.initializeFromProject(project);
122
+ ctx.logger.info('RAG系统初始化完成', {
123
+ volumes: project.outline.volumes.length,
124
+ characters: project.worldState.characters.length
125
+ });
126
+ const generatedChapters = [];
127
+ let completedCount = 0;
128
+ for (const volume of project.outline.volumes) {
129
+ for (const chapterBlueprint of volume.chapters) {
130
+ // 更新项目状态,包含已生成的章节
131
+ const currentProject = {
132
+ ...project,
133
+ chapters: generatedChapters
134
+ };
135
+ ctx.logger.progress('chapters', completedCount, totalChapters, `生成第${volume.number}卷第${chapterBlueprint.number}章...`);
136
+ // 生成章节(使用RAG增强)
137
+ const useRAG = currentProject.chapters.length >= 3; // 3章后启用RAG
138
+ ctx.logger.info(`使用${useRAG ? 'RAG增强' : '标准'}模式生成章节`);
139
+ const chapterResult = generateChapterRAG({
140
+ project: currentProject,
141
+ volumeNumber: volume.number,
142
+ chapterNumber: chapterBlueprint.number,
143
+ config,
144
+ useRAG
145
+ });
146
+ const aiChapterResponse = await executeAIEffect(ctx, chapterResult);
147
+ const chapter = parseChapterFromAIResponseRAG(aiChapterResponse.content, chapterBlueprint);
148
+ // 自动校验
149
+ ctx.logger.info(`校验第${chapterBlueprint.number}章...`);
150
+ const validateResult = validateChapter({
151
+ chapter,
152
+ project: currentProject,
153
+ config
154
+ });
155
+ // 执行验证 effects(不需要 AI 响应)
156
+ await executeWithEffects(ctx, validateResult);
157
+ generatedChapters.push(chapter);
158
+ completedCount++;
159
+ // 更新RAG索引(第3章后启用)
160
+ if (useRAG) {
161
+ ctx.logger.info(`更新RAG索引...`);
162
+ updateRAGIndex(chapter, currentProject);
163
+ }
164
+ // 保存进度(如果提供了项目路径)
165
+ if (projectPath) {
166
+ const updatedProject = {
167
+ ...project,
168
+ chapters: generatedChapters,
169
+ updatedAt: new Date().toISOString()
170
+ };
171
+ await ctx.projectStorage.saveProject(updatedProject, projectPath);
172
+ ctx.logger.info(`已保存进度: ${completedCount}/${totalChapters} 章节`);
173
+ }
174
+ }
175
+ }
176
+ ctx.logger.progress('chapters', totalChapters, totalChapters, '所有章节生成完成!');
177
+ ctx.logger.info('小说生成完成!', {
178
+ totalChapters: generatedChapters.length,
179
+ totalWords: generatedChapters.reduce((sum, ch) => sum + (ch.wordCount || 0), 0)
180
+ });
181
+ }
182
+ async function handleGenerateChapter(ctx, payload) {
183
+ const { project, volumeNumber, chapterNumber, config } = payload;
184
+ ctx.logger.info(`生成第${volumeNumber}卷第${chapterNumber}章...`);
185
+ const result = generateChapter({ project, volumeNumber, chapterNumber, config });
186
+ const aiResponse = await executeAIEffect(ctx, result);
187
+ // 找到对应的blueprint
188
+ const volume = project.outline.volumes.find(v => v.number === volumeNumber);
189
+ const blueprint = volume?.chapters.find(c => c.number === chapterNumber);
190
+ if (!blueprint) {
191
+ throw new AppError('NOT_FOUND', `找不到章节: ${volumeNumber}-${chapterNumber}`);
192
+ }
193
+ const chapter = parseChapterFromAIResponse(aiResponse.content, blueprint);
194
+ ctx.logger.info('章节生成完成', { title: chapter.title, wordCount: chapter.wordCount });
195
+ }
196
+ // ============ 校验和导出 ============
197
+ async function handleValidateNovel(ctx, payload) {
198
+ const { project, config } = payload;
199
+ ctx.logger.info('开始校验小说...');
200
+ let hasError = false;
201
+ for (const chapter of project.chapters) {
202
+ const result = validateChapter({ chapter, project, config });
203
+ const output = await executeWithEffects(ctx, result);
204
+ if (!output.passed) {
205
+ hasError = true;
206
+ ctx.logger.error(`第${chapter.number}章校验失败`, { issues: output.results.filter(r => !r.passed) });
207
+ }
208
+ }
209
+ if (!hasError) {
210
+ ctx.logger.info('小说校验全部通过!');
211
+ }
212
+ }
213
+ async function handleExportNovel(ctx, payload) {
214
+ // 导出逻辑通过Effect执行
215
+ const effect = {
216
+ type: 'EXPORT_NOVEL',
217
+ payload: { project: payload.project, format: payload.format }
218
+ };
219
+ const result = await runEffect(ctx, effect);
220
+ if (!result.success) {
221
+ throw new AppError('EXPORT_FAILED', result.error || '导出失败');
222
+ }
223
+ ctx.logger.info(`小说已导出为 ${payload.format} 格式`);
224
+ }
225
+ // ============ 模型测试 ============
226
+ async function handleTestModel(ctx, payload) {
227
+ const { config } = payload;
228
+ ctx.logger.info('测试AI模型连接...');
229
+ const testMessages = [
230
+ { role: 'system', content: '你是一个 helpful assistant。请回复 "模型测试成功" 以确认连接正常。' },
231
+ { role: 'user', content: 'Hello, are you working?' }
232
+ ];
233
+ try {
234
+ const response = await ctx.ai.chat(testMessages, config);
235
+ ctx.logger.info('模型测试成功!', {
236
+ model: config.model,
237
+ response: response.content.slice(0, 100) + '...'
238
+ });
239
+ }
240
+ catch (error) {
241
+ throw new AppError('AI_ERROR', `模型测试失败: ${error instanceof Error ? error.message : String(error)}`);
242
+ }
243
+ }
244
+ // ============ 辅助函数 ============
245
+ /**
246
+ * 执行带Effects的UseCase,返回AI响应
247
+ */
248
+ async function executeAIEffect(ctx, withEffects, logRawResponse) {
249
+ ctx.logger.info(`[executeAIEffect] 开始执行 ${withEffects.effects.length} 个 effects`);
250
+ // 执行所有effects
251
+ const results = [];
252
+ let aiResponse;
253
+ for (let i = 0; i < withEffects.effects.length; i++) {
254
+ const effect = withEffects.effects[i];
255
+ ctx.logger.info(`[executeAIEffect] 执行 effect ${i + 1}/${withEffects.effects.length}: ${effect.type}`);
256
+ const result = await runEffect(ctx, effect);
257
+ results.push(result);
258
+ if (!result.success) {
259
+ ctx.logger.error(`[executeAIEffect] Effect 执行失败`, { type: effect.type, error: result.error });
260
+ throw new AppError('EFFECT_FAILED', `Effect执行失败 [${effect.type}]: ${result.error}`);
261
+ }
262
+ ctx.logger.info(`[executeAIEffect] Effect ${effect.type} 执行成功`, {
263
+ hasData: !!result.data,
264
+ dataType: result.data ? typeof result.data : 'none'
265
+ });
266
+ // 如果是AI_CHAT或VALIDATE_CHAPTER,保存响应
267
+ if ((effect.type === 'AI_CHAT' || effect.type === 'VALIDATE_CHAPTER') && result.data && typeof result.data === 'object') {
268
+ if ('content' in result.data) {
269
+ aiResponse = result.data;
270
+ ctx.logger.info(`[executeAIEffect] 获取到 AI 响应`, {
271
+ contentLength: aiResponse.content?.length,
272
+ model: aiResponse.model
273
+ });
274
+ }
275
+ else if ('passed' in result.data) {
276
+ // VALIDATE_CHAPTER 返回的是验证结果,包装成 AIResponse 格式
277
+ aiResponse = {
278
+ content: JSON.stringify(result.data),
279
+ model: 'validation'
280
+ };
281
+ ctx.logger.info(`[executeAIEffect] 获取到验证结果`, {
282
+ passed: result.data.passed
283
+ });
284
+ }
285
+ }
286
+ }
287
+ if (!aiResponse) {
288
+ ctx.logger.error(`[executeAIEffect] 没有获取到 AI 响应`, {
289
+ effectTypes: withEffects.effects.map(e => e.type),
290
+ results: results.map(r => ({ success: r.success, hasData: !!r.data }))
291
+ });
292
+ throw new AppError('AI_ERROR', '没有获取到AI响应');
293
+ }
294
+ // 记录原始响应用于调试
295
+ if (logRawResponse !== false) {
296
+ ctx.logger.info('AI原始响应', { content: aiResponse.content.slice(0, 500) + '...' });
297
+ }
298
+ return aiResponse;
299
+ }
300
+ /**
301
+ * 执行带Effects的UseCase(通用版本)
302
+ */
303
+ async function executeWithEffects(ctx, withEffects) {
304
+ // 执行所有effects
305
+ for (const effect of withEffects.effects) {
306
+ const result = await runEffect(ctx, effect);
307
+ if (!result.success) {
308
+ throw new AppError('EFFECT_FAILED', `Effect执行失败 [${effect.type}]: ${result.error}`);
309
+ }
310
+ }
311
+ return withEffects.result;
312
+ }
313
+ //# sourceMappingURL=dispatcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../src/bus/dispatcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { Effect, EffectResult } from '../core/index.js';
2
+ import type { AppContext } from '../core/ports.js';
3
+ /**
4
+ * 执行单个Effect
5
+ */
6
+ export declare function runEffect(ctx: AppContext, effect: Effect): Promise<EffectResult>;
7
+ /**
8
+ * 执行多个Effects
9
+ */
10
+ export declare function runEffects(ctx: AppContext, effects: Effect[]): Promise<EffectResult[]>;
11
+ //# sourceMappingURL=effectRunner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effectRunner.d.ts","sourceRoot":"","sources":["../../src/bus/effectRunner.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAc,MAAM,kBAAkB,CAAC;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD;;GAEG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAkDtF;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAc5F"}
@@ -0,0 +1,117 @@
1
+ // Bus层 - Effect执行器
2
+ // 整个应用中唯一执行I/O的地方
3
+ /**
4
+ * 执行单个Effect
5
+ */
6
+ export async function runEffect(ctx, effect) {
7
+ try {
8
+ switch (effect.type) {
9
+ case 'AI_CHAT':
10
+ return await runAIChat(ctx, effect.payload);
11
+ case 'WRITE_FILE':
12
+ await ctx.storage.writeFile(effect.payload.path, effect.payload.content);
13
+ return { success: true };
14
+ case 'ENSURE_DIR':
15
+ await ctx.storage.ensureDir(effect.payload.path);
16
+ return { success: true };
17
+ case 'SAVE_PROJECT':
18
+ await ctx.projectStorage.saveProject(effect.payload.project, effect.payload.basePath);
19
+ return { success: true };
20
+ case 'LOG_INFO':
21
+ ctx.logger.info(effect.payload.message, effect.payload.data);
22
+ return { success: true };
23
+ case 'LOG_ERROR':
24
+ ctx.logger.error(effect.payload.message, effect.payload.error);
25
+ return { success: true };
26
+ case 'LOG_PROGRESS':
27
+ ctx.logger.progress(effect.payload.stage, effect.payload.current, effect.payload.total, effect.payload.message);
28
+ return { success: true };
29
+ case 'VALIDATE_CHAPTER':
30
+ return await runValidateChapter(ctx, effect.payload);
31
+ case 'EXPORT_NOVEL':
32
+ return await runExportNovel(ctx, effect.payload);
33
+ default:
34
+ return { success: false, error: `Unknown effect type: ${effect.type}` };
35
+ }
36
+ }
37
+ catch (error) {
38
+ return {
39
+ success: false,
40
+ error: error instanceof Error ? error.message : String(error)
41
+ };
42
+ }
43
+ }
44
+ /**
45
+ * 执行多个Effects
46
+ */
47
+ export async function runEffects(ctx, effects) {
48
+ const results = [];
49
+ for (const effect of effects) {
50
+ const result = await runEffect(ctx, effect);
51
+ results.push(result);
52
+ // 如果关键effect失败,提前终止
53
+ if (!result.success && isCriticalEffect(effect)) {
54
+ break;
55
+ }
56
+ }
57
+ return results;
58
+ }
59
+ /**
60
+ * 判断Effect是否关键(失败应终止流程)
61
+ */
62
+ function isCriticalEffect(effect) {
63
+ return ['AI_CHAT', 'SAVE_PROJECT'].includes(effect.type);
64
+ }
65
+ // ============ 具体Effect实现 ============
66
+ async function runAIChat(ctx, payload) {
67
+ try {
68
+ const response = await ctx.ai.chat(payload.messages, payload.config);
69
+ return { success: true, data: response };
70
+ }
71
+ catch (error) {
72
+ return {
73
+ success: false,
74
+ error: `AI调用失败: ${error instanceof Error ? error.message : String(error)}`
75
+ };
76
+ }
77
+ }
78
+ async function runValidateChapter(ctx, payload) {
79
+ try {
80
+ const result = await ctx.validation.validateChapterContent(payload.chapter, payload.project);
81
+ return { success: true, data: result };
82
+ }
83
+ catch (error) {
84
+ return {
85
+ success: false,
86
+ error: `校验失败: ${error instanceof Error ? error.message : String(error)}`
87
+ };
88
+ }
89
+ }
90
+ async function runExportNovel(ctx, payload) {
91
+ try {
92
+ const { project, format } = payload;
93
+ if (format === 'markdown') {
94
+ // 生成Markdown
95
+ let content = `# ${project.outline.title}\n\n`;
96
+ content += `> ${project.requirements.genre} | ${project.requirements.tone}\n\n`;
97
+ content += `---\n\n`;
98
+ // 添加章节
99
+ project.chapters.forEach((ch) => {
100
+ content += `# ${ch.title}\n\n`;
101
+ content += ch.content;
102
+ content += '\n\n---\n\n';
103
+ });
104
+ const outputPath = `${project.outline.title}.md`;
105
+ await ctx.storage.writeFile(outputPath, content);
106
+ ctx.logger.info(`小说已导出: ${outputPath}`);
107
+ }
108
+ return { success: true };
109
+ }
110
+ catch (error) {
111
+ return {
112
+ success: false,
113
+ error: `导出失败: ${error instanceof Error ? error.message : String(error)}`
114
+ };
115
+ }
116
+ }
117
+ //# sourceMappingURL=effectRunner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effectRunner.js","sourceRoot":"","sources":["../../src/bus/effectRunner.ts"],"names":[],"mappings":"AAAA,mBAAmB;AACnB,kBAAkB;AAMlB;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAe,EAAE,MAAc;IAC7D,IAAI,CAAC;QACH,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,KAAK,SAAS;gBACZ,OAAO,MAAM,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YAE9C,KAAK,YAAY;gBACf,MAAM,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACzE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAE3B,KAAK,YAAY;gBACf,MAAM,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACjD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAE3B,KAAK,cAAc;gBACjB,MAAM,GAAG,CAAC,cAAc,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACtF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAE3B,KAAK,UAAU;gBACb,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC7D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAE3B,KAAK,WAAW;gBACd,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC/D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAE3B,KAAK,cAAc;gBACjB,GAAG,CAAC,MAAM,CAAC,QAAQ,CACjB,MAAM,CAAC,OAAO,CAAC,KAAK,EACpB,MAAM,CAAC,OAAO,CAAC,OAAO,EACtB,MAAM,CAAC,OAAO,CAAC,KAAK,EACpB,MAAM,CAAC,OAAO,CAAC,OAAO,CACvB,CAAC;gBACF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAE3B,KAAK,kBAAkB;gBACrB,OAAO,MAAM,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YAEvD,KAAK,cAAc;gBACjB,OAAO,MAAM,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YAEnD;gBACE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,wBAAyB,MAAc,CAAC,IAAI,EAAE,EAAE,CAAC;QACrF,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAe,EAAE,OAAiB;IACjE,MAAM,OAAO,GAAmB,EAAE,CAAC;IAEnC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAErB,oBAAoB;QACpB,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;YAChD,MAAM;QACR,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,MAAc;IACtC,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC3D,CAAC;AAED,uCAAuC;AAEvC,KAAK,UAAU,SAAS,CACtB,GAAe,EACf,OAA4E;IAE5E,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACrE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,WAAW,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;SAC3E,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,GAAe,EACf,OAAuC;IAEvC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,sBAAsB,CACxD,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,OAAO,CAChB,CAAC;QACF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACzC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,SAAS,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;SACzE,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,GAAe,EACf,OAAsD;IAEtD,IAAI,CAAC;QACH,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAEpC,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;YAC1B,aAAa;YACb,IAAI,OAAO,GAAG,KAAK,OAAO,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC;YAC/C,OAAO,IAAI,KAAK,OAAO,CAAC,YAAY,CAAC,KAAK,MAAM,OAAO,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC;YAChF,OAAO,IAAI,SAAS,CAAC;YAErB,OAAO;YACP,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAO,EAAE,EAAE;gBACnC,OAAO,IAAI,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC;gBAC/B,OAAO,IAAI,EAAE,CAAC,OAAO,CAAC;gBACtB,OAAO,IAAI,aAAa,CAAC;YAC3B,CAAC,CAAC,CAAC;YAEH,MAAM,UAAU,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC;YACjD,MAAM,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAEjD,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,UAAU,EAAE,CAAC,CAAC;QAC1C,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,SAAS,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;SACzE,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './commands.js';
2
+ export * from './effectRunner.js';
3
+ export * from './dispatcher.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bus/index.ts"],"names":[],"mappings":"AAGA,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,6 @@
1
+ // Bus层导出
2
+ // Command分发和Effect执行
3
+ export * from './commands.js';
4
+ export * from './effectRunner.js';
5
+ export * from './dispatcher.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bus/index.ts"],"names":[],"mappings":"AAAA,SAAS;AACT,qBAAqB;AAErB,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,13 @@
1
+ export declare const WORK_DIR: string;
2
+ export declare const CONFIG_FILE: string;
3
+ export declare const LOGS_DIR: string;
4
+ export declare const NOVEL_DIR: string;
5
+ export declare function getEnvInfo(): {
6
+ isDev: boolean;
7
+ workDir: string;
8
+ configFile: string;
9
+ logsDir: string;
10
+ novelDir: string;
11
+ };
12
+ export declare function normalizePath(inputPath: string): string;
13
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/config/paths.ts"],"names":[],"mappings":"AAmCA,eAAO,MAAM,QAAQ,QAAsC,CAAC;AAG5D,eAAO,MAAM,WAAW,QAAqC,CAAC;AAG9D,eAAO,MAAM,QAAQ,QAA8B,CAAC;AAGpD,eAAO,MAAM,SAAS,QAA+B,CAAC;AAGtD,wBAAgB,UAAU;;;;;;EAQzB;AAGD,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEvD"}
@@ -0,0 +1,53 @@
1
+ // 路径配置 - 统一管理开发和生产环境的路径
2
+ import path from 'path';
3
+ import fs from 'fs';
4
+ // 判断是否为开发环境
5
+ // 优先级:1. 环境变量 NODE_ENV=development 或 DEV=true
6
+ // 2. D:\Novel 目录存在且当前目录不是项目目录
7
+ // 开发环境:固定使用 D:\Novel
8
+ // 生产环境:使用当前工作目录
9
+ function detectDevMode() {
10
+ // 环境变量优先
11
+ if (process.env.NODE_ENV === 'development' || process.env.DEV === 'true') {
12
+ return true;
13
+ }
14
+ // 检查 D:\Novel 是否存在
15
+ const devDir = 'D:\\Novel';
16
+ try {
17
+ if (fs.existsSync(devDir)) {
18
+ // 如果 D:\Novel 存在,且当前目录不是 D:\Novel 的子目录,使用开发目录
19
+ const cwd = process.cwd();
20
+ if (!cwd.startsWith(devDir)) {
21
+ return true;
22
+ }
23
+ }
24
+ }
25
+ catch {
26
+ // 忽略错误
27
+ }
28
+ return false;
29
+ }
30
+ const isDev = detectDevMode();
31
+ // 工作目录根路径
32
+ export const WORK_DIR = isDev ? 'D:\\Novel' : process.cwd();
33
+ // 配置文件路径
34
+ export const CONFIG_FILE = path.join(WORK_DIR, 'config.json');
35
+ // 日志目录
36
+ export const LOGS_DIR = path.join(WORK_DIR, 'logs');
37
+ // 小说存储目录(固定为 draft)
38
+ export const NOVEL_DIR = path.join(WORK_DIR, 'draft');
39
+ // 获取当前环境的配置信息(用于日志输出)
40
+ export function getEnvInfo() {
41
+ return {
42
+ isDev,
43
+ workDir: WORK_DIR,
44
+ configFile: CONFIG_FILE,
45
+ logsDir: LOGS_DIR,
46
+ novelDir: NOVEL_DIR
47
+ };
48
+ }
49
+ // 确保路径使用正确的分隔符(Windows)
50
+ export function normalizePath(inputPath) {
51
+ return inputPath.replace(/\\/g, path.sep).replace(/\//g, path.sep);
52
+ }
53
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/config/paths.ts"],"names":[],"mappings":"AAAA,wBAAwB;AACxB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,YAAY;AACZ,8CAA8C;AAC9C,sCAAsC;AACtC,qBAAqB;AACrB,gBAAgB;AAChB,SAAS,aAAa;IACpB,SAAS;IACT,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,MAAM,EAAE,CAAC;QACzE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,mBAAmB;IACnB,MAAM,MAAM,GAAG,WAAW,CAAC;IAC3B,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,8CAA8C;YAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5B,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;AAE9B,UAAU;AACV,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;AAE5D,SAAS;AACT,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;AAE9D,OAAO;AACP,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAEpD,oBAAoB;AACpB,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAEtD,sBAAsB;AACtB,MAAM,UAAU,UAAU;IACxB,OAAO;QACL,KAAK;QACL,OAAO,EAAE,QAAQ;QACjB,UAAU,EAAE,WAAW;QACvB,OAAO,EAAE,QAAQ;QACjB,QAAQ,EAAE,SAAS;KACpB,CAAC;AACJ,CAAC;AAED,wBAAwB;AACxB,MAAM,UAAU,aAAa,CAAC,SAAiB;IAC7C,OAAO,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AACrE,CAAC"}