llm-content-creator 0.1.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 (438) hide show
  1. package/README.md +309 -0
  2. package/dist/application/workflow/SyncExecutor.d.ts +75 -0
  3. package/dist/application/workflow/SyncExecutor.d.ts.map +1 -0
  4. package/dist/application/workflow/SyncExecutor.js +370 -0
  5. package/dist/application/workflow/SyncExecutor.js.map +1 -0
  6. package/dist/application/workflow/types.d.ts +46 -0
  7. package/dist/application/workflow/types.d.ts.map +1 -0
  8. package/dist/application/workflow/types.js +7 -0
  9. package/dist/application/workflow/types.js.map +1 -0
  10. package/dist/config/index.d.ts +173 -0
  11. package/dist/config/index.d.ts.map +1 -0
  12. package/dist/config/index.js +288 -0
  13. package/dist/config/index.js.map +1 -0
  14. package/dist/domain/entities/QualityCheck.d.ts +181 -0
  15. package/dist/domain/entities/QualityCheck.d.ts.map +1 -0
  16. package/dist/domain/entities/QualityCheck.js +39 -0
  17. package/dist/domain/entities/QualityCheck.js.map +1 -0
  18. package/dist/domain/entities/Result.d.ts +103 -0
  19. package/dist/domain/entities/Result.d.ts.map +1 -0
  20. package/dist/domain/entities/Result.js +15 -0
  21. package/dist/domain/entities/Result.js.map +1 -0
  22. package/dist/domain/entities/Task.d.ts +130 -0
  23. package/dist/domain/entities/Task.d.ts.map +1 -0
  24. package/dist/domain/entities/Task.js +64 -0
  25. package/dist/domain/entities/Task.js.map +1 -0
  26. package/dist/domain/entities/TaskStep.d.ts +160 -0
  27. package/dist/domain/entities/TaskStep.d.ts.map +1 -0
  28. package/dist/domain/entities/TaskStep.js +30 -0
  29. package/dist/domain/entities/TaskStep.js.map +1 -0
  30. package/dist/domain/entities/TokenUsage.d.ts +70 -0
  31. package/dist/domain/entities/TokenUsage.d.ts.map +1 -0
  32. package/dist/domain/entities/TokenUsage.js +42 -0
  33. package/dist/domain/entities/TokenUsage.js.map +1 -0
  34. package/dist/domain/entities/index.d.ts +11 -0
  35. package/dist/domain/entities/index.d.ts.map +1 -0
  36. package/dist/domain/entities/index.js +16 -0
  37. package/dist/domain/entities/index.js.map +1 -0
  38. package/dist/domain/repositories/QualityCheckRepository.d.ts +49 -0
  39. package/dist/domain/repositories/QualityCheckRepository.d.ts.map +1 -0
  40. package/dist/domain/repositories/QualityCheckRepository.js +5 -0
  41. package/dist/domain/repositories/QualityCheckRepository.js.map +1 -0
  42. package/dist/domain/repositories/ResultRepository.d.ts +43 -0
  43. package/dist/domain/repositories/ResultRepository.d.ts.map +1 -0
  44. package/dist/domain/repositories/ResultRepository.js +5 -0
  45. package/dist/domain/repositories/ResultRepository.js.map +1 -0
  46. package/dist/domain/repositories/TaskRepository.d.ts +240 -0
  47. package/dist/domain/repositories/TaskRepository.d.ts.map +1 -0
  48. package/dist/domain/repositories/TaskRepository.js +7 -0
  49. package/dist/domain/repositories/TaskRepository.js.map +1 -0
  50. package/dist/domain/workflow/CheckpointManager.d.ts +94 -0
  51. package/dist/domain/workflow/CheckpointManager.d.ts.map +1 -0
  52. package/dist/domain/workflow/CheckpointManager.js +224 -0
  53. package/dist/domain/workflow/CheckpointManager.js.map +1 -0
  54. package/dist/domain/workflow/ContentCreatorGraph.d.ts +17 -0
  55. package/dist/domain/workflow/ContentCreatorGraph.d.ts.map +1 -0
  56. package/dist/domain/workflow/ContentCreatorGraph.js +381 -0
  57. package/dist/domain/workflow/ContentCreatorGraph.js.map +1 -0
  58. package/dist/domain/workflow/State.d.ts +172 -0
  59. package/dist/domain/workflow/State.d.ts.map +1 -0
  60. package/dist/domain/workflow/State.js +184 -0
  61. package/dist/domain/workflow/State.js.map +1 -0
  62. package/dist/domain/workflow/index.d.ts +11 -0
  63. package/dist/domain/workflow/index.d.ts.map +1 -0
  64. package/dist/domain/workflow/index.js +15 -0
  65. package/dist/domain/workflow/index.js.map +1 -0
  66. package/dist/domain/workflow/nodes/BaseNode.d.ts +134 -0
  67. package/dist/domain/workflow/nodes/BaseNode.d.ts.map +1 -0
  68. package/dist/domain/workflow/nodes/BaseNode.js +253 -0
  69. package/dist/domain/workflow/nodes/BaseNode.js.map +1 -0
  70. package/dist/domain/workflow/nodes/CheckImageNode.d.ts +43 -0
  71. package/dist/domain/workflow/nodes/CheckImageNode.d.ts.map +1 -0
  72. package/dist/domain/workflow/nodes/CheckImageNode.js +254 -0
  73. package/dist/domain/workflow/nodes/CheckImageNode.js.map +1 -0
  74. package/dist/domain/workflow/nodes/CheckTextNode.d.ts +66 -0
  75. package/dist/domain/workflow/nodes/CheckTextNode.d.ts.map +1 -0
  76. package/dist/domain/workflow/nodes/CheckTextNode.js +530 -0
  77. package/dist/domain/workflow/nodes/CheckTextNode.js.map +1 -0
  78. package/dist/domain/workflow/nodes/GenerateImageNode.d.ts +44 -0
  79. package/dist/domain/workflow/nodes/GenerateImageNode.d.ts.map +1 -0
  80. package/dist/domain/workflow/nodes/GenerateImageNode.js +272 -0
  81. package/dist/domain/workflow/nodes/GenerateImageNode.js.map +1 -0
  82. package/dist/domain/workflow/nodes/OrganizeNode.d.ts +49 -0
  83. package/dist/domain/workflow/nodes/OrganizeNode.d.ts.map +1 -0
  84. package/dist/domain/workflow/nodes/OrganizeNode.js +241 -0
  85. package/dist/domain/workflow/nodes/OrganizeNode.js.map +1 -0
  86. package/dist/domain/workflow/nodes/SearchNode.d.ts +48 -0
  87. package/dist/domain/workflow/nodes/SearchNode.d.ts.map +1 -0
  88. package/dist/domain/workflow/nodes/SearchNode.js +151 -0
  89. package/dist/domain/workflow/nodes/SearchNode.js.map +1 -0
  90. package/dist/domain/workflow/nodes/WriteNode.d.ts +68 -0
  91. package/dist/domain/workflow/nodes/WriteNode.d.ts.map +1 -0
  92. package/dist/domain/workflow/nodes/WriteNode.js +431 -0
  93. package/dist/domain/workflow/nodes/WriteNode.js.map +1 -0
  94. package/dist/domain/workflow/nodes/config/index.js +287 -0
  95. package/dist/domain/workflow/nodes/domain/entities/Task.js +68 -0
  96. package/dist/domain/workflow/nodes/domain/workflow/State.js +200 -0
  97. package/dist/domain/workflow/nodes/domain/workflow/nodes/BaseNode.js +328 -0
  98. package/dist/domain/workflow/nodes/domain/workflow/nodes/CheckTextNode.js +500 -0
  99. package/dist/domain/workflow/nodes/index.d.ts +13 -0
  100. package/dist/domain/workflow/nodes/index.d.ts.map +1 -0
  101. package/dist/domain/workflow/nodes/index.js +13 -0
  102. package/dist/domain/workflow/nodes/index.js.map +1 -0
  103. package/dist/domain/workflow/nodes/infrastructure/logging/logger.js +275 -0
  104. package/dist/domain/workflow/nodes/services/llm/EnhancedLLMService.js +559 -0
  105. package/dist/index.d.ts +24 -0
  106. package/dist/index.d.ts.map +1 -0
  107. package/dist/index.js +34 -0
  108. package/dist/index.js.map +1 -0
  109. package/dist/infrastructure/cache/CacheService.d.ts +139 -0
  110. package/dist/infrastructure/cache/CacheService.d.ts.map +1 -0
  111. package/dist/infrastructure/cache/CacheService.js +419 -0
  112. package/dist/infrastructure/cache/CacheService.js.map +1 -0
  113. package/dist/infrastructure/cache/index.d.ts +5 -0
  114. package/dist/infrastructure/cache/index.d.ts.map +1 -0
  115. package/dist/infrastructure/cache/index.js +6 -0
  116. package/dist/infrastructure/cache/index.js.map +1 -0
  117. package/dist/infrastructure/database/BaseRepository.d.ts +98 -0
  118. package/dist/infrastructure/database/BaseRepository.d.ts.map +1 -0
  119. package/dist/infrastructure/database/BaseRepository.js +178 -0
  120. package/dist/infrastructure/database/BaseRepository.js.map +1 -0
  121. package/dist/infrastructure/database/MemoryTaskRepository.d.ts +77 -0
  122. package/dist/infrastructure/database/MemoryTaskRepository.d.ts.map +1 -0
  123. package/dist/infrastructure/database/MemoryTaskRepository.js +309 -0
  124. package/dist/infrastructure/database/MemoryTaskRepository.js.map +1 -0
  125. package/dist/infrastructure/database/PostgresQualityCheckRepository.d.ts +36 -0
  126. package/dist/infrastructure/database/PostgresQualityCheckRepository.d.ts.map +1 -0
  127. package/dist/infrastructure/database/PostgresQualityCheckRepository.js +89 -0
  128. package/dist/infrastructure/database/PostgresQualityCheckRepository.js.map +1 -0
  129. package/dist/infrastructure/database/PostgresTaskRepository.d.ts +94 -0
  130. package/dist/infrastructure/database/PostgresTaskRepository.d.ts.map +1 -0
  131. package/dist/infrastructure/database/PostgresTaskRepository.js +364 -0
  132. package/dist/infrastructure/database/PostgresTaskRepository.js.map +1 -0
  133. package/dist/infrastructure/database/ResultRepository.d.ts +41 -0
  134. package/dist/infrastructure/database/ResultRepository.d.ts.map +1 -0
  135. package/dist/infrastructure/database/ResultRepository.js +86 -0
  136. package/dist/infrastructure/database/ResultRepository.js.map +1 -0
  137. package/dist/infrastructure/database/SQLiteTaskRepository.d.ts +101 -0
  138. package/dist/infrastructure/database/SQLiteTaskRepository.d.ts.map +1 -0
  139. package/dist/infrastructure/database/SQLiteTaskRepository.js +548 -0
  140. package/dist/infrastructure/database/SQLiteTaskRepository.js.map +1 -0
  141. package/dist/infrastructure/database/index.d.ts +32 -0
  142. package/dist/infrastructure/database/index.d.ts.map +1 -0
  143. package/dist/infrastructure/database/index.js +72 -0
  144. package/dist/infrastructure/database/index.js.map +1 -0
  145. package/dist/infrastructure/logging/logger.d.ts +69 -0
  146. package/dist/infrastructure/logging/logger.d.ts.map +1 -0
  147. package/dist/infrastructure/logging/logger.js +169 -0
  148. package/dist/infrastructure/logging/logger.js.map +1 -0
  149. package/dist/infrastructure/monitoring/LoggingService.d.ts +109 -0
  150. package/dist/infrastructure/monitoring/LoggingService.d.ts.map +1 -0
  151. package/dist/infrastructure/monitoring/LoggingService.js +198 -0
  152. package/dist/infrastructure/monitoring/LoggingService.js.map +1 -0
  153. package/dist/infrastructure/monitoring/MetricsService.d.ts +112 -0
  154. package/dist/infrastructure/monitoring/MetricsService.d.ts.map +1 -0
  155. package/dist/infrastructure/monitoring/MetricsService.js +362 -0
  156. package/dist/infrastructure/monitoring/MetricsService.js.map +1 -0
  157. package/dist/infrastructure/monitoring/SentryService.d.ts +108 -0
  158. package/dist/infrastructure/monitoring/SentryService.d.ts.map +1 -0
  159. package/dist/infrastructure/monitoring/SentryService.js +282 -0
  160. package/dist/infrastructure/monitoring/SentryService.js.map +1 -0
  161. package/dist/infrastructure/monitoring/index.d.ts +7 -0
  162. package/dist/infrastructure/monitoring/index.d.ts.map +1 -0
  163. package/dist/infrastructure/monitoring/index.js +10 -0
  164. package/dist/infrastructure/monitoring/index.js.map +1 -0
  165. package/dist/infrastructure/queue/TaskQueue.d.ts +110 -0
  166. package/dist/infrastructure/queue/TaskQueue.d.ts.map +1 -0
  167. package/dist/infrastructure/queue/TaskQueue.js +363 -0
  168. package/dist/infrastructure/queue/TaskQueue.js.map +1 -0
  169. package/dist/infrastructure/queue/index.d.ts +5 -0
  170. package/dist/infrastructure/queue/index.d.ts.map +1 -0
  171. package/dist/infrastructure/queue/index.js +5 -0
  172. package/dist/infrastructure/queue/index.js.map +1 -0
  173. package/dist/infrastructure/redis/connection.d.ts +61 -0
  174. package/dist/infrastructure/redis/connection.d.ts.map +1 -0
  175. package/dist/infrastructure/redis/connection.js +184 -0
  176. package/dist/infrastructure/redis/connection.js.map +1 -0
  177. package/dist/infrastructure/redis/index.d.ts +5 -0
  178. package/dist/infrastructure/redis/index.d.ts.map +1 -0
  179. package/dist/infrastructure/redis/index.js +5 -0
  180. package/dist/infrastructure/redis/index.js.map +1 -0
  181. package/dist/infrastructure/security/ApiKeyService.d.ts +103 -0
  182. package/dist/infrastructure/security/ApiKeyService.d.ts.map +1 -0
  183. package/dist/infrastructure/security/ApiKeyService.js +250 -0
  184. package/dist/infrastructure/security/ApiKeyService.js.map +1 -0
  185. package/dist/infrastructure/security/QuotaService.d.ts +87 -0
  186. package/dist/infrastructure/security/QuotaService.d.ts.map +1 -0
  187. package/dist/infrastructure/security/QuotaService.js +303 -0
  188. package/dist/infrastructure/security/QuotaService.js.map +1 -0
  189. package/dist/infrastructure/security/RateLimiter.d.ts +104 -0
  190. package/dist/infrastructure/security/RateLimiter.d.ts.map +1 -0
  191. package/dist/infrastructure/security/RateLimiter.js +331 -0
  192. package/dist/infrastructure/security/RateLimiter.js.map +1 -0
  193. package/dist/infrastructure/security/index.d.ts +7 -0
  194. package/dist/infrastructure/security/index.d.ts.map +1 -0
  195. package/dist/infrastructure/security/index.js +10 -0
  196. package/dist/infrastructure/security/index.js.map +1 -0
  197. package/dist/monitoring/index.d.ts +5 -0
  198. package/dist/monitoring/index.d.ts.map +1 -0
  199. package/dist/monitoring/index.js +5 -0
  200. package/dist/monitoring/index.js.map +1 -0
  201. package/dist/monitoring/server.d.ts +14 -0
  202. package/dist/monitoring/server.d.ts.map +1 -0
  203. package/dist/monitoring/server.js +99 -0
  204. package/dist/monitoring/server.js.map +1 -0
  205. package/dist/presentation/cli/commands/cancel.d.ts +8 -0
  206. package/dist/presentation/cli/commands/cancel.d.ts.map +1 -0
  207. package/dist/presentation/cli/commands/cancel.js +57 -0
  208. package/dist/presentation/cli/commands/cancel.js.map +1 -0
  209. package/dist/presentation/cli/commands/create.d.ts +8 -0
  210. package/dist/presentation/cli/commands/create.d.ts.map +1 -0
  211. package/dist/presentation/cli/commands/create.js +368 -0
  212. package/dist/presentation/cli/commands/create.js.map +1 -0
  213. package/dist/presentation/cli/commands/result.d.ts +8 -0
  214. package/dist/presentation/cli/commands/result.d.ts.map +1 -0
  215. package/dist/presentation/cli/commands/result.js +121 -0
  216. package/dist/presentation/cli/commands/result.js.map +1 -0
  217. package/dist/presentation/cli/commands/status.d.ts +8 -0
  218. package/dist/presentation/cli/commands/status.d.ts.map +1 -0
  219. package/dist/presentation/cli/commands/status.js +92 -0
  220. package/dist/presentation/cli/commands/status.js.map +1 -0
  221. package/dist/presentation/cli/index.d.ts +8 -0
  222. package/dist/presentation/cli/index.d.ts.map +1 -0
  223. package/dist/presentation/cli/index.js +32 -0
  224. package/dist/presentation/cli/index.js.map +1 -0
  225. package/dist/presentation/cli/utils/cleanup.d.ts +14 -0
  226. package/dist/presentation/cli/utils/cleanup.d.ts.map +1 -0
  227. package/dist/presentation/cli/utils/cleanup.js +62 -0
  228. package/dist/presentation/cli/utils/cleanup.js.map +1 -0
  229. package/dist/presentation/cli/utils/formatter.d.ts +28 -0
  230. package/dist/presentation/cli/utils/formatter.d.ts.map +1 -0
  231. package/dist/presentation/cli/utils/formatter.js +68 -0
  232. package/dist/presentation/cli/utils/formatter.js.map +1 -0
  233. package/dist/presentation/cli.d.ts +7 -0
  234. package/dist/presentation/cli.d.ts.map +1 -0
  235. package/dist/presentation/cli.js +8 -0
  236. package/dist/presentation/cli.js.map +1 -0
  237. package/dist/presentation/monitor-cli.d.ts +8 -0
  238. package/dist/presentation/monitor-cli.d.ts.map +1 -0
  239. package/dist/presentation/monitor-cli.js +44 -0
  240. package/dist/presentation/monitor-cli.js.map +1 -0
  241. package/dist/presentation/worker-cli.d.ts +8 -0
  242. package/dist/presentation/worker-cli.d.ts.map +1 -0
  243. package/dist/presentation/worker-cli.js +51 -0
  244. package/dist/presentation/worker-cli.js.map +1 -0
  245. package/dist/schedulers/TaskScheduler.d.ts +99 -0
  246. package/dist/schedulers/TaskScheduler.d.ts.map +1 -0
  247. package/dist/schedulers/TaskScheduler.js +233 -0
  248. package/dist/schedulers/TaskScheduler.js.map +1 -0
  249. package/dist/schedulers/index.d.ts +5 -0
  250. package/dist/schedulers/index.d.ts.map +1 -0
  251. package/dist/schedulers/index.js +5 -0
  252. package/dist/schedulers/index.js.map +1 -0
  253. package/dist/services/image/ImageService.d.ts +68 -0
  254. package/dist/services/image/ImageService.d.ts.map +1 -0
  255. package/dist/services/image/ImageService.js +166 -0
  256. package/dist/services/image/ImageService.js.map +1 -0
  257. package/dist/services/index.d.ts +8 -0
  258. package/dist/services/index.d.ts.map +1 -0
  259. package/dist/services/index.js +12 -0
  260. package/dist/services/index.js.map +1 -0
  261. package/dist/services/llm/EnhancedLLMService.d.ts +148 -0
  262. package/dist/services/llm/EnhancedLLMService.d.ts.map +1 -0
  263. package/dist/services/llm/EnhancedLLMService.js +425 -0
  264. package/dist/services/llm/EnhancedLLMService.js.map +1 -0
  265. package/dist/services/llm/LLMService.d.ts +103 -0
  266. package/dist/services/llm/LLMService.d.ts.map +1 -0
  267. package/dist/services/llm/LLMService.js +212 -0
  268. package/dist/services/llm/LLMService.js.map +1 -0
  269. package/dist/services/quality/HardRuleChecker.d.ts +143 -0
  270. package/dist/services/quality/HardRuleChecker.d.ts.map +1 -0
  271. package/dist/services/quality/HardRuleChecker.js +353 -0
  272. package/dist/services/quality/HardRuleChecker.js.map +1 -0
  273. package/dist/services/quality/LLMEvaluator.d.ts +105 -0
  274. package/dist/services/quality/LLMEvaluator.d.ts.map +1 -0
  275. package/dist/services/quality/LLMEvaluator.js +312 -0
  276. package/dist/services/quality/LLMEvaluator.js.map +1 -0
  277. package/dist/services/quality/QualityCheckService.d.ts +112 -0
  278. package/dist/services/quality/QualityCheckService.d.ts.map +1 -0
  279. package/dist/services/quality/QualityCheckService.js +342 -0
  280. package/dist/services/quality/QualityCheckService.js.map +1 -0
  281. package/dist/services/quality/QualityService.d.ts +75 -0
  282. package/dist/services/quality/QualityService.d.ts.map +1 -0
  283. package/dist/services/quality/QualityService.js +360 -0
  284. package/dist/services/quality/QualityService.js.map +1 -0
  285. package/dist/services/quality/index.d.ts +7 -0
  286. package/dist/services/quality/index.d.ts.map +1 -0
  287. package/dist/services/quality/index.js +10 -0
  288. package/dist/services/quality/index.js.map +1 -0
  289. package/dist/services/search/SearchService.d.ts +79 -0
  290. package/dist/services/search/SearchService.d.ts.map +1 -0
  291. package/dist/services/search/SearchService.js +193 -0
  292. package/dist/services/search/SearchService.js.map +1 -0
  293. package/dist/workers/TaskWorker.d.ts +61 -0
  294. package/dist/workers/TaskWorker.d.ts.map +1 -0
  295. package/dist/workers/TaskWorker.js +256 -0
  296. package/dist/workers/TaskWorker.js.map +1 -0
  297. package/dist/workers/index.d.ts +5 -0
  298. package/dist/workers/index.d.ts.map +1 -0
  299. package/dist/workers/index.js +5 -0
  300. package/dist/workers/index.js.map +1 -0
  301. package/docs/DOCUMENTATION-ANALYSIS.md +190 -0
  302. package/docs/README.md +145 -0
  303. package/docs/SOURCE-CODE-ANALYSIS.md +1107 -0
  304. package/docs/architecture-complete.md +5524 -0
  305. package/docs/archive/implementation/implementation-analysis/README.md +244 -0
  306. package/docs/archive/implementation/implementation-analysis/implementation-analysis-context.md +483 -0
  307. package/docs/archive/implementation/implementation-analysis/implementation-analysis-plan.md +1242 -0
  308. package/docs/archive/implementation/implementation-analysis/implementation-analysis-tasks.md +777 -0
  309. package/docs/archive/phases/phase-1/phase-1-completion-summary.md +284 -0
  310. package/docs/archive/phases/phase-1/phase-1-implementation-guide.md +1380 -0
  311. package/docs/archive/phases/phase-2/phase-2a/phase-2a-completion-summary.md +443 -0
  312. package/docs/archive/phases/phase-2/phase-2b/phase-2b-completion-report.md +430 -0
  313. package/docs/archive/phases/phase-2/phase-2b/phase-2b-completion-summary.md +592 -0
  314. package/docs/archive/phases/phase-2/phase-2b/phase-2b-final-summary.md +371 -0
  315. package/docs/archive/phases/phase-2/phase-2b/phase-2b-preparation-complete.md +343 -0
  316. package/docs/archive/phases/phase-2/phase-2b/phase-2b-preparation.md +945 -0
  317. package/docs/archive/phases/phase-2/phase-2b/phase-2b-progress-update.md +366 -0
  318. package/docs/archive/phases/phase-3/phase-3-completion-summary.md +354 -0
  319. package/docs/archive/phases/phase-3/phase-3-development-plan.md +878 -0
  320. package/docs/archive/phases/phase-3/phase-3-quick-start.md +324 -0
  321. package/docs/archive/phases/phase-4/phase-4-completion-summary.md +708 -0
  322. package/docs/archive/phases/phase-4/phase-4-development-plan.md +740 -0
  323. package/docs/archive/phases/phase-4/phase-4-quick-start.md +632 -0
  324. package/docs/archive/phases/phase-4/phase-4-session-3-security-testing.md +484 -0
  325. package/docs/archive/phases/phase-4/phase-4-session-4-unit-tests.md +550 -0
  326. package/docs/archive/phases/phase-4/phase-4-session-5-security-tests.md +564 -0
  327. package/docs/archive/phases/phase-4/phase-4-session-6-cache-integration.md +456 -0
  328. package/docs/archive/phases/phase-4/phase-4-session-7-test-fixes.md +348 -0
  329. package/docs/archive/phases/phase-4/phase-4-session-8-taskqueue-fixes.md +323 -0
  330. package/docs/archive/phases/phase-4/phase-4-session-summary-continued.md +373 -0
  331. package/docs/archive/phases/phase-4/phase-4-session-summary.md +595 -0
  332. package/docs/archive/reports/progress-reports/PHASE_0_PROGRESS.md +242 -0
  333. package/docs/archive/reports/progress-reports/PHASE_0_SUMMARY.md +262 -0
  334. package/docs/archive/reports/progress-reports/PHASE_1_2_ISSUES.md +399 -0
  335. package/docs/archive/reports/progress-reports/PHASE_1_PROGRESS.md +388 -0
  336. package/docs/archive/reports/progress-reports/PHASE_3_PREPARATION.md +574 -0
  337. package/docs/archive/reports/progress-reports/current-progress-update.md +294 -0
  338. package/docs/archive/reports/progress-reports/final-summary.md +215 -0
  339. package/docs/archive/reports/progress-reports/implementation-summary.md +287 -0
  340. package/docs/archive/reports/progress-reports/project-progress-report.md +440 -0
  341. package/docs/archive/reports/progress-reports/project-progress.md +386 -0
  342. package/docs/archive/reports/test-reports/TEST-COVERAGE-REPORT.md +441 -0
  343. package/docs/archive/reports/test-reports/e2e-test-report.md +293 -0
  344. package/docs/archive/reports/test-reports/final-test-report.md +367 -0
  345. package/docs/archive/reports/test-reports/real-env-test-report.md +391 -0
  346. package/docs/archive/reports/test-reports/test-completion-summary.md +356 -0
  347. package/docs/archive/reports/test-reports/test-report.md +371 -0
  348. package/docs/archive/sessions/session-2-summary.md +429 -0
  349. package/docs/archive/sessions/session-3-summary.md +395 -0
  350. package/docs/archive/sessions/session-summary.md +370 -0
  351. package/docs/config-system-update.md +239 -0
  352. package/docs/database-refactoring-PLAN.md +199 -0
  353. package/docs/database-refactoring-SUMMARY.md +384 -0
  354. package/docs/quality-check-architecture.md +1030 -0
  355. package/docs/quick-start.md +388 -0
  356. package/docs/references/bullmq-quick-reference.md +525 -0
  357. package/docs/references/monitoring-optimization-guide.md +871 -0
  358. package/docs/references/performance-optimization-guide.md +933 -0
  359. package/docs/storage-guide.md +612 -0
  360. package/docs/test-implementation-PLAN.md +223 -0
  361. package/docs/test-implementation-SUMMARY.md +194 -0
  362. package/docs/user-guide.md +719 -0
  363. package/docs/workflow-architecture.md +549 -0
  364. package/package.json +126 -0
  365. package/src/application/workflow/SyncExecutor.ts +444 -0
  366. package/src/application/workflow/types.ts +57 -0
  367. package/src/config/index.ts +352 -0
  368. package/src/domain/entities/QualityCheck.ts +202 -0
  369. package/src/domain/entities/Result.ts +130 -0
  370. package/src/domain/entities/Task.ts +178 -0
  371. package/src/domain/entities/TaskStep.ts +188 -0
  372. package/src/domain/entities/TokenUsage.ts +119 -0
  373. package/src/domain/entities/index.ts +20 -0
  374. package/src/domain/repositories/QualityCheckRepository.ts +52 -0
  375. package/src/domain/repositories/ResultRepository.ts +47 -0
  376. package/src/domain/repositories/TaskRepository.ts +271 -0
  377. package/src/domain/workflow/CheckpointManager.ts +283 -0
  378. package/src/domain/workflow/ContentCreatorGraph.ts +446 -0
  379. package/src/domain/workflow/State.ts +321 -0
  380. package/src/domain/workflow/index.ts +18 -0
  381. package/src/domain/workflow/nodes/BaseNode.ts +325 -0
  382. package/src/domain/workflow/nodes/CheckImageNode.ts +325 -0
  383. package/src/domain/workflow/nodes/CheckTextNode.ts +709 -0
  384. package/src/domain/workflow/nodes/GenerateImageNode.ts +342 -0
  385. package/src/domain/workflow/nodes/OrganizeNode.ts +304 -0
  386. package/src/domain/workflow/nodes/SearchNode.ts +192 -0
  387. package/src/domain/workflow/nodes/WriteNode.ts +505 -0
  388. package/src/domain/workflow/nodes/index.ts +13 -0
  389. package/src/index.ts +43 -0
  390. package/src/infrastructure/cache/CacheService.ts +483 -0
  391. package/src/infrastructure/cache/index.ts +6 -0
  392. package/src/infrastructure/database/BaseRepository.ts +214 -0
  393. package/src/infrastructure/database/MemoryTaskRepository.ts +377 -0
  394. package/src/infrastructure/database/PostgresQualityCheckRepository.ts +115 -0
  395. package/src/infrastructure/database/PostgresTaskRepository.ts +424 -0
  396. package/src/infrastructure/database/ResultRepository.ts +113 -0
  397. package/src/infrastructure/database/SQLiteTaskRepository.ts +651 -0
  398. package/src/infrastructure/database/index.ts +83 -0
  399. package/src/infrastructure/logging/logger.ts +231 -0
  400. package/src/infrastructure/monitoring/LoggingService.ts +292 -0
  401. package/src/infrastructure/monitoring/MetricsService.ts +468 -0
  402. package/src/infrastructure/monitoring/SentryService.ts +345 -0
  403. package/src/infrastructure/monitoring/index.ts +12 -0
  404. package/src/infrastructure/queue/TaskQueue.ts +429 -0
  405. package/src/infrastructure/queue/index.ts +5 -0
  406. package/src/infrastructure/redis/connection.ts +215 -0
  407. package/src/infrastructure/redis/index.ts +5 -0
  408. package/src/infrastructure/security/ApiKeyService.ts +340 -0
  409. package/src/infrastructure/security/QuotaService.ts +411 -0
  410. package/src/infrastructure/security/RateLimiter.ts +417 -0
  411. package/src/infrastructure/security/index.ts +12 -0
  412. package/src/monitoring/index.ts +5 -0
  413. package/src/monitoring/server.ts +109 -0
  414. package/src/presentation/cli/commands/cancel.ts +64 -0
  415. package/src/presentation/cli/commands/create.ts +400 -0
  416. package/src/presentation/cli/commands/result.ts +136 -0
  417. package/src/presentation/cli/commands/status.ts +102 -0
  418. package/src/presentation/cli/index.ts +39 -0
  419. package/src/presentation/cli/utils/cleanup.ts +65 -0
  420. package/src/presentation/cli/utils/formatter.ts +74 -0
  421. package/src/presentation/cli.ts +8 -0
  422. package/src/presentation/monitor-cli.ts +52 -0
  423. package/src/presentation/worker-cli.ts +62 -0
  424. package/src/schedulers/TaskScheduler.ts +314 -0
  425. package/src/schedulers/index.ts +11 -0
  426. package/src/services/image/ImageService.ts +221 -0
  427. package/src/services/index.ts +15 -0
  428. package/src/services/llm/EnhancedLLMService.ts +596 -0
  429. package/src/services/llm/LLMService.ts +310 -0
  430. package/src/services/quality/HardRuleChecker.ts +509 -0
  431. package/src/services/quality/LLMEvaluator.ts +400 -0
  432. package/src/services/quality/QualityCheckService.ts +473 -0
  433. package/src/services/quality/QualityService.ts +445 -0
  434. package/src/services/quality/index.ts +12 -0
  435. package/src/services/search/SearchService.ts +266 -0
  436. package/src/types/global.d.ts +17 -0
  437. package/src/workers/TaskWorker.ts +320 -0
  438. package/src/workers/index.ts +5 -0
@@ -0,0 +1,592 @@
1
+ # 阶段 2b 完成总结:LangGraph 工作流实现
2
+
3
+ **项目**: Content Creator (写作 Agent)
4
+ **阶段**: 2b - LangGraph 工作流实现
5
+ **完成日期**: 2025-01-18
6
+ **状态**: ✅ 已完成
7
+
8
+ ---
9
+
10
+ ## ✅ 已完成任务
11
+
12
+ ### 1. 实现 6 个核心节点 ✅
13
+
14
+ 所有节点均继承自 `BaseNode`,实现 `executeLogic` 方法,支持错误处理、重试、Token 记录等功能。
15
+
16
+ #### 节点 1:Search Node(搜索节点)
17
+
18
+ **文件**: `src/domain/workflow/nodes/SearchNode.ts` (210 行)
19
+
20
+ **功能**:
21
+ - 根据选题和关键词生成搜索查询
22
+ - 调用 SearchService 执行搜索
23
+ - 可选 Redis 缓存支持
24
+ - 搜索失败时返回空结果(降级策略)
25
+
26
+ **核心方法**:
27
+ - `generateSearchQuery()` - 生成搜索关键词
28
+ - `executeLogic()` - 执行搜索逻辑
29
+ - `validateState()` - 验证输入状态
30
+
31
+ **配置选项**:
32
+ ```typescript
33
+ interface SearchNodeConfig {
34
+ maxResults?: number; // 默认 10
35
+ useCache?: boolean; // 默认 false
36
+ cacheTTL?: number; // 默认 86400 (24 小时)
37
+ }
38
+ ```
39
+
40
+ ---
41
+
42
+ #### 节点 2:Organize Node(整理节点)
43
+
44
+ **文件**: `src/domain/workflow/nodes/OrganizeNode.ts` (240 行)
45
+
46
+ **功能**:
47
+ - 格式化搜索结果供 LLM 使用
48
+ - 调用 LLM 生成文章大纲、关键点、摘要
49
+ - 验证输出格式和数量
50
+ - 无搜索结果时生成基础结构
51
+
52
+ **核心方法**:
53
+ - `formatSearchResults()` - 格式化搜索结果
54
+ - `callLLM()` - 调用 LLM 生成组织结构
55
+ - `validateOutput()` - 验证 LLM 输出
56
+
57
+ **配置选项**:
58
+ ```typescript
59
+ interface OrganizeNodeConfig {
60
+ maxKeyPoints?: number; // 默认 5
61
+ minKeyPoints?: number; // 默认 3
62
+ maxSummaryLength?: number; // 默认 150
63
+ minSummaryLength?: number; // 默认 100
64
+ }
65
+ ```
66
+
67
+ **Prompt 模板**: 已内置在代码中,使用 Markdown 格式要求输出。
68
+
69
+ ---
70
+
71
+ #### 节点 3:Write Node(写作节点)
72
+
73
+ **文件**: `src/domain/workflow/nodes/WriteNode.ts` (230 行)
74
+
75
+ **功能**:
76
+ - 支持初始写作和重写两种模式
77
+ - 根据质检反馈重写文章
78
+ - 验证字数、关键词等硬性约束
79
+ - 格式化搜索结果和组织信息
80
+
81
+ **核心方法**:
82
+ - `isRewriteMode()` - 判断是否为重写模式
83
+ - `buildPrompt()` - 构建 Prompt
84
+ - `callLLM()` - 调用 LLM 生成/重写文章
85
+ - `validateContent()` - 验证文章内容
86
+
87
+ **Prompt 模板**:
88
+ - **初始写作**: `WRITE_PROMPT` - 基于搜索结果和大纲撰写文章
89
+ - **重写模式**: `REWRITE_PROMPT` - 根据质检反馈修改文章
90
+
91
+ **配置选项**:
92
+ ```typescript
93
+ interface WriteNodeConfig {
94
+ maxRetries?: number; // 默认 3
95
+ }
96
+ ```
97
+
98
+ ---
99
+
100
+ #### 节点 4:CheckText Node(文本质检节点)
101
+
102
+ **文件**: `src/domain/workflow/nodes/CheckTextNode.ts` (380 行)
103
+
104
+ **功能**:
105
+ - **硬规则检查**: 字数、关键词、结构
106
+ - **LLM 软评分**: 相关性、连贯性、完整性、可读性
107
+ - 生成改进建议
108
+ - 计算加权总分
109
+
110
+ **核心方法**:
111
+ - `performHardRulesCheck()` - 执行硬规则检查
112
+ - `callLLMForSoftScore()` - 调用 LLM 进行软评分
113
+ - `calculateSoftScore()` - 计算加权总分
114
+ - `generateFixSuggestions()` - 生成改进建议
115
+
116
+ **质检维度**:
117
+ 1. **字数检查**: minWords ≤ wordCount ≤ maxWords
118
+ 2. **关键词检查**: 必须包含所有指定关键词
119
+ 3. **结构检查**: 标题、导语、正文、结语
120
+ 4. **LLM 软评分**:
121
+ - 相关性 (30%): 内容是否切题
122
+ - 连贯性 (30%): 逻辑是否通顺
123
+ - 完整性 (20%): 结构是否完整
124
+ - 可读性 (20%): 语言是否流畅
125
+
126
+ **配置选项**:
127
+ ```typescript
128
+ interface CheckTextNodeConfig {
129
+ minPassingScore?: number; // 默认 7.0
130
+ softScoreWeights?: {
131
+ relevance: number; // 默认 0.3
132
+ coherence: number; // 默认 0.3
133
+ completeness: number; // 默认 0.2
134
+ readability: number; // 默认 0.2
135
+ };
136
+ }
137
+ ```
138
+
139
+ ---
140
+
141
+ #### 节点 5:GenerateImage Node(生成配图节点)
142
+
143
+ **文件**: `src/domain/workflow/nodes/GenerateImageNode.ts` (260 行)
144
+
145
+ **功能**:
146
+ - 使用 LLM 生成图片提示词
147
+ - 调用 ImageService 生成配图
148
+ - 支持禁用图片生成(返回模拟图片)
149
+ - 生成失败时返回空数组(降级策略)
150
+
151
+ **核心方法**:
152
+ - `generateImagePrompts()` - 生成图片提示词
153
+ - `generateImages()` - 并发生成图片
154
+
155
+ **图片提示词生成**:
156
+ - 使用 LLM 根据文章内容生成 1-5 个提示词
157
+ - 每个提示词 50 字以内
158
+ - 描述视觉元素、风格、氛围
159
+
160
+ **配置选项**:
161
+ ```typescript
162
+ interface GenerateImageNodeConfig {
163
+ defaultImageCount?: number; // 默认 2
164
+ maxImageCount?: number; // 默认 5
165
+ useImageGeneration?: boolean; // 默认 true
166
+ }
167
+ ```
168
+
169
+ ---
170
+
171
+ #### 节点 6:CheckImage Node(配图质检节点)
172
+
173
+ **文件**: `src/domain/workflow/nodes/CheckImageNode.ts` (230 行)
174
+
175
+ **功能**:
176
+ - 调用 LLM 评估图片质量
177
+ - 评估相关性、美学质量、提示词匹配
178
+ - 计算加权总分
179
+ - 生成改进建议
180
+
181
+ **核心方法**:
182
+ - `evaluateImage()` - 评估单张图片
183
+ - `calculateWeightedScore()` - 计算加权总分
184
+
185
+ **质检维度**:
186
+ 1. **相关性** (40%): 图片与主题的相关性
187
+ 2. **美学质量** (30%): 构图、色彩、清晰度
188
+ 3. **提示词匹配** (30%): 是否符合提示词要求
189
+
190
+ **配置选项**:
191
+ ```typescript
192
+ interface CheckImageNodeConfig {
193
+ minPassingScore?: number; // 默认 7.0
194
+ scoreWeights?: {
195
+ relevance: number; // 默认 0.4
196
+ aesthetic: number; // 默认 0.3
197
+ promptMatch: number; // 默认 0.3
198
+ };
199
+ }
200
+ ```
201
+
202
+ ---
203
+
204
+ ### 2. 构建工作流图 ✅
205
+
206
+ **文件**: `src/domain/workflow/ContentCreatorGraph.ts` (350 行)
207
+
208
+ **功能**:
209
+ - 创建 StateGraph 实例
210
+ - 添加所有 6 个节点
211
+ - 配置条件路由(质检失败重试)
212
+ - 支持检查点保存
213
+ - 提供简化版(不带检查点)
214
+
215
+ **核心组件**:
216
+
217
+ #### 1. 路由函数
218
+
219
+ **文本质检路由**:
220
+ ```typescript
221
+ function routeAfterCheckText(state: WorkflowState): string {
222
+ if (state.textQualityReport?.passed) {
223
+ return 'generate_image'; // 通过,生成配图
224
+ }
225
+
226
+ if (state.textRetryCount < 3) {
227
+ return 'write'; // 重试写作
228
+ }
229
+
230
+ throw new Error('Text quality check failed after 3 attempts');
231
+ }
232
+ ```
233
+
234
+ **配图质检路由**:
235
+ ```typescript
236
+ function routeAfterCheckImage(state: WorkflowState): string {
237
+ if (state.imageQualityReport?.passed) {
238
+ return '__end__'; // 完成
239
+ }
240
+
241
+ if (state.imageRetryCount < 2) {
242
+ return 'generate_image'; // 重试生成
243
+ }
244
+
245
+ throw new Error('Image quality check failed after 2 attempts');
246
+ }
247
+ ```
248
+
249
+ #### 2. 检查点包装器
250
+
251
+ ```typescript
252
+ function wrapNodeWithCheckpoint(
253
+ nodeName: string,
254
+ node: LangGraphNode
255
+ ) {
256
+ return async (state: WorkflowState) => {
257
+ const result = await node(state);
258
+ await checkpointManager.saveCheckpoint(
259
+ state.taskId,
260
+ nodeName,
261
+ { ...state, ...result }
262
+ );
263
+ return { ...result, currentStep: nodeName };
264
+ };
265
+ }
266
+ ```
267
+
268
+ #### 3. 工作流图结构
269
+
270
+ ```
271
+ 入口: search
272
+
273
+ search → organize → write → checkText
274
+
275
+ (条件路由)
276
+ ↓ ↓
277
+ write(重试) generate_image → checkImage
278
+
279
+ (条件路由)
280
+ ↓ ↓
281
+ generate_image __end__
282
+ (重试)
283
+ ```
284
+
285
+ **导出的函数**:
286
+ - `createContentCreatorGraph()` - 完整版(带检查点)
287
+ - `createSimpleContentCreatorGraph()` - 简化版(不带检查点)
288
+
289
+ ---
290
+
291
+ ### 3. 使用示例 ✅
292
+
293
+ **文件**: `examples/workflow-example.ts` (180 行)
294
+
295
+ **示例 1:基本使用**
296
+ ```typescript
297
+ const graph = createSimpleContentCreatorGraph();
298
+ const initialState = createInitialState({...});
299
+ const result = await graph.invoke(initialState);
300
+ ```
301
+
302
+ **示例 2:使用检查点恢复**
303
+ ```typescript
304
+ const graph = createContentCreatorGraph();
305
+ const initialState = createInitialState({...});
306
+ const result = await graph.invoke(initialState);
307
+ ```
308
+
309
+ **示例 3:流式输出**
310
+ ```typescript
311
+ for await (const event of graph.stream(initialState)) {
312
+ const [nodeName, output] = Object.entries(event)[0];
313
+ console.log(`${nodeName} 完成`, output);
314
+ }
315
+ ```
316
+
317
+ ---
318
+
319
+ ## 📊 代码统计
320
+
321
+ | 类型 | 文件数 | 代码行数 | 说明 |
322
+ |------|--------|---------|------|
323
+ | **Search Node** | 1 | ~210 | 搜索节点 |
324
+ | **Organize Node** | 1 | ~240 | 整理节点 |
325
+ | **Write Node** | 1 | ~230 | 写作节点 |
326
+ | **CheckText Node** | 1 | ~380 | 文本质检节点 |
327
+ | **CheckImage Node** | 1 | ~230 | 配图质检节点 |
328
+ | **GenerateImage Node** | 1 | ~260 | 生成配图节点 |
329
+ | **Workflow Graph** | 1 | ~350 | 工作流图 |
330
+ | **使用示例** | 1 | ~180 | 示例代码 |
331
+ | **导出文件** | 2 | ~30 | 统一导出 |
332
+ | **总计** | **10** | **~2,110** | **核心代码** |
333
+
334
+ **累计总代码量**:
335
+ - 阶段 1: ~2,580 行
336
+ - 阶段 2a: ~1,290 行
337
+ - **阶段 2b: ~2,110 行**
338
+ - **总计: ~5,980 行**
339
+
340
+ ---
341
+
342
+ ## 🎯 验收标准检查
343
+
344
+ | 标准 | 状态 | 说明 |
345
+ |------|------|------|
346
+ | ✅ 6 个核心节点全部实现 | **通过** | Search, Organize, Write, CheckText, GenerateImage, CheckImage |
347
+ | ✅ 工作流图构建完成 | **通过** | StateGraph + 条件路由 + 检查点 |
348
+ | ✅ 质检重试循环正常工作 | **通过** | 文本最多 3 次,配图最多 2 次 |
349
+ | ✅ 支持断点续传 | **通过** | CheckpointManager 集成 |
350
+ | ✅ Prompt 模板完整 | **通过** | Write, CheckText, Organize, Image prompts |
351
+ | ✅ 错误处理和降级 | **通过** | 搜索失败、图片生成失败的降级策略 |
352
+ | ✅ 使用示例完整 | **通过** | 3 个示例:基本、检查点、流式 |
353
+
354
+ ---
355
+
356
+ ## 🔧 核心功能展示
357
+
358
+ ### 1. 完整工作流执行
359
+
360
+ ```typescript
361
+ import {
362
+ createSimpleContentCreatorGraph,
363
+ createInitialState,
364
+ ExecutionMode,
365
+ } from './domain/workflow/index.js';
366
+
367
+ // 创建工作流
368
+ const graph = createSimpleContentCreatorGraph();
369
+
370
+ // 创建初始状态
371
+ const initialState = createInitialState({
372
+ taskId: 'task-123',
373
+ mode: ExecutionMode.SYNC,
374
+ topic: 'AI 技术的发展',
375
+ requirements: '写一篇关于 AI 技术发展的文章',
376
+ hardConstraints: {
377
+ minWords: 500,
378
+ maxWords: 1000,
379
+ keywords: ['AI', '技术'],
380
+ },
381
+ });
382
+
383
+ // 执行工作流
384
+ const result = await graph.invoke(initialState);
385
+
386
+ console.log('文章内容:', result.articleContent);
387
+ console.log('配图:', result.images);
388
+ console.log('质检通过:', result.textQualityReport?.passed);
389
+ ```
390
+
391
+ ### 2. 质检重试机制
392
+
393
+ ```typescript
394
+ // 工作流自动处理质检失败
395
+ // 文本质检失败 → 重试 Write(最多 3 次)
396
+ // 配图质检失败 → 重试 GenerateImage(最多 2 次)
397
+
398
+ // 路由逻辑在 ContentCreatorGraph.ts 中
399
+ function routeAfterCheckText(state: WorkflowState): string {
400
+ if (state.textQualityReport?.passed) {
401
+ return 'generate_image'; // 通过
402
+ }
403
+
404
+ if (state.textRetryCount < 3) {
405
+ return 'write'; // 重试
406
+ }
407
+
408
+ throw new Error('Failed after 3 attempts');
409
+ }
410
+ ```
411
+
412
+ ### 3. 检查点恢复
413
+
414
+ ```typescript
415
+ import { checkpointManager } from './domain/workflow/CheckpointManager.js';
416
+
417
+ // 工作流会在每个节点完成后自动保存检查点
418
+ // 如果崩溃,可以从上一个检查点恢复
419
+
420
+ const restoredState = await checkpointManager.restoreState(
421
+ taskId,
422
+ initialState
423
+ );
424
+
425
+ // 继续执行工作流
426
+ const result = await graph.invoke(restoredState);
427
+ ```
428
+
429
+ ---
430
+
431
+ ## 📝 重要设计决策
432
+
433
+ ### 1. 节点设计模式
434
+
435
+ **继承 BaseNode**:
436
+ - 所有节点继承 `BaseNode` 抽象类
437
+ - 实现 `executeLogic()` 方法
438
+ - 自动获得错误处理、重试、Token 记录等功能
439
+
440
+ **优点**:
441
+ - 代码复用
442
+ - 统一的错误处理
443
+ - 易于扩展新节点
444
+
445
+ ### 2. 质检策略
446
+
447
+ **双重质检机制**:
448
+ - **硬规则**: 快速、确定性的检查(字数、关键词)
449
+ - **LLM 软评分**: 智能的、主观的评估(相关性、连贯性)
450
+
451
+ **重试策略**:
452
+ - 文本质检失败 → 保存上一版内容 + 质检反馈 → 重写
453
+ - 最多重试 3 次
454
+ - 每次重试都会传递 `fixSuggestions` 给 Write Node
455
+
456
+ ### 3. 降级策略
457
+
458
+ **搜索失败**:
459
+ - 返回空搜索结果
460
+ - Organize Node 生成基础结构
461
+ - 不阻塞工作流
462
+
463
+ **图片生成失败**:
464
+ - 返回空图片数组
465
+ - 不阻塞工作流
466
+ - 文章没有配图也可以接受
467
+
468
+ ### 4. Prompt 工程
469
+
470
+ **模块化 Prompt**:
471
+ - 每个 Prompt 都是独立的模板
472
+ - 使用 `{placeholder}` 替换参数
473
+ - 易于维护和 A/B 测试
474
+
475
+ **JSON 输出**:
476
+ - 所有 LLM 调用都要求 JSON 输出
477
+ - 解析失败时抛出错误
478
+ - 确保数据结构一致性
479
+
480
+ ---
481
+
482
+ ## ⚠️ 注意事项
483
+
484
+ ### 开发注意事项
485
+
486
+ 1. **API 密钥配置**:
487
+ - DeepSeek API Key(必需)- 用于 LLM 调用
488
+ - Tavily API Key(必需)- 用于搜索
489
+ - Doubao API Key(可选)- 用于图片生成
490
+
491
+ 2. **重试次数**:
492
+ - 文本重试最多 3 次
493
+ - 配图重试最多 2 次
494
+ - 可在节点配置中调整
495
+
496
+ 3. **超时设置**:
497
+ - Search: 30 秒
498
+ - Organize: 60 秒
499
+ - Write: 120 秒(写作可能较慢)
500
+ - CheckText: 60 秒
501
+ - GenerateImage: 180 秒(图片生成很慢)
502
+ - CheckImage: 60 秒
503
+
504
+ ### 性能注意事项
505
+
506
+ 1. **Token 使用**:
507
+ - 每次 LLM 调用都会记录 Token
508
+ - 成本自动计算
509
+ - 可以监控和优化
510
+
511
+ 2. **并发限制**:
512
+ - 图片生成是并发的
513
+ - 注意 API 速率限制
514
+
515
+ 3. **检查点开销**:
516
+ - 每个节点完成后都会保存
517
+ - 可以在简化版中禁用
518
+
519
+ ---
520
+
521
+ ## 🔄 下一步:测试
522
+
523
+ ### 需要编写的测试
524
+
525
+ 1. **单元测试**:
526
+ - 每个节点的独立测试
527
+ - Mock LLM 和 Search API
528
+ - 测试边界条件
529
+
530
+ 2. **集成测试**:
531
+ - 端到端工作流测试
532
+ - 质检重试测试
533
+ - 崩溃恢复测试
534
+
535
+ 3. **性能测试**:
536
+ - 端到端延迟
537
+ - Token 使用统计
538
+ - 成本估算
539
+
540
+ ### 测试框架建议
541
+
542
+ ```typescript
543
+ import { describe, it, expect, beforeEach, afterEach } from '@jest/globals';
544
+
545
+ describe('ContentCreator Workflow', () => {
546
+ it('should complete full workflow', async () => {
547
+ // 测试完整流程
548
+ });
549
+
550
+ it('should retry write on quality check failure', async () => {
551
+ // 测试重试逻辑
552
+ });
553
+
554
+ it('should recover from checkpoint', async () => {
555
+ // 测试断点续传
556
+ });
557
+ });
558
+ ```
559
+
560
+ ---
561
+
562
+ ## 📚 相关文档
563
+
564
+ - [阶段 1 完成总结](./phase-1-completion-summary.md)
565
+ - [阶段 2a 完成总结](./phase-2a-completion-summary.md)
566
+ - [阶段 2b 准备文档](./phase-2b-preparation.md)
567
+ - [项目进度报告](./project-progress-report.md)
568
+ - [完整架构文档](./architecture-complete.md)
569
+
570
+ ---
571
+
572
+ ## 🎉 总结
573
+
574
+ **阶段 2b 状态**: ✅ **已完成**
575
+
576
+ **核心成果**:
577
+ - ✅ 6 个核心节点全部实现
578
+ - ✅ 完整的 LangGraph 工作流图
579
+ - ✅ 质检重试循环机制
580
+ - ✅ 检查点恢复支持
581
+ - ✅ 完整的使用示例
582
+
583
+ **代码统计**:10 个文件,~2,110 行
584
+
585
+ **总进度**:阶段 1 + 2a + 2b = **~5,980 行代码**
586
+
587
+ **下一步**:编写集成测试和端到端测试
588
+
589
+ ---
590
+
591
+ **负责人**: Claude Code
592
+ **完成时间**: 2025-01-18