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,632 @@
1
+ # 阶段 4 快速开始指南
2
+
3
+ **日期**: 2026-01-19
4
+ **版本**: 1.0.0
5
+
6
+ ---
7
+
8
+ ## 📋 目录
9
+
10
+ 1. [环境准备](#环境准备)
11
+ 2. [数据库配置](#数据库配置)
12
+ 3. [服务初始化](#服务初始化)
13
+ 4. [使用示例](#使用示例)
14
+ 5. [监控和日志](#监控和日志)
15
+ 6. [常见问题](#常见问题)
16
+
17
+ ---
18
+
19
+ ## 环境准备
20
+
21
+ ### 1. 安装依赖
22
+
23
+ ```bash
24
+ pnpm install
25
+ ```
26
+
27
+ 已安装的依赖包括:
28
+ - `@sentry/node` - Sentry 错误追踪
29
+ - `prom-client` - Prometheus 指标采集
30
+ - `winston-daily-rotate-file` - Winston 日志轮转
31
+ - `cache-manager` + `cache-manager-ioredis` - 缓存管理
32
+
33
+ ### 2. 启动 Redis
34
+
35
+ ```bash
36
+ # macOS
37
+ brew install redis
38
+ brew services start redis
39
+
40
+ # Linux
41
+ sudo systemctl start redis
42
+
43
+ # Docker
44
+ docker run -d -p 6379:6379 redis:latest
45
+ ```
46
+
47
+ ### 3. 启动 PostgreSQL
48
+
49
+ ```bash
50
+ # 确保数据库正在运行
51
+ psql -U postgres -c "SELECT version();"
52
+ ```
53
+
54
+ ---
55
+
56
+ ## 数据库配置
57
+
58
+ ### 运行迁移
59
+
60
+ 创建所需的数据库表:
61
+
62
+ ```sql
63
+ -- API Keys 表
64
+ CREATE TABLE IF NOT EXISTS api_keys (
65
+ id VARCHAR(36) PRIMARY KEY,
66
+ key_hash VARCHAR(64) UNIQUE NOT NULL,
67
+ user_id VARCHAR(36) NOT NULL,
68
+ metadata JSONB,
69
+ is_active BOOLEAN DEFAULT true,
70
+ expires_at TIMESTAMP,
71
+ last_used_at TIMESTAMP,
72
+ created_at TIMESTAMP DEFAULT NOW(),
73
+ usage_count INT DEFAULT 0
74
+ );
75
+
76
+ -- 配额预留表
77
+ CREATE TABLE IF NOT EXISTS quota_reservations (
78
+ id VARCHAR(36) PRIMARY KEY,
79
+ user_id VARCHAR(36) NOT NULL,
80
+ amount INT NOT NULL,
81
+ consumed BOOLEAN DEFAULT false,
82
+ created_at TIMESTAMP DEFAULT NOW(),
83
+ expires_at TIMESTAMP NOT NULL,
84
+ consumed_at TIMESTAMP
85
+ );
86
+
87
+ -- 更新用户表(如果不存在这些列)
88
+ ALTER TABLE users
89
+ ADD COLUMN IF NOT EXISTS quota_daily INT DEFAULT 100,
90
+ ADD COLUMN IF NOT EXISTS quota_used_today INT DEFAULT 0,
91
+ ADD COLUMN IF NOT EXISTS quota_reserved INT DEFAULT 0,
92
+ ADD COLUMN IF NOT EXISTS last_reset_at TIMESTAMP DEFAULT NOW(),
93
+ ADD COLUMN IF NOT EXISTS version INT DEFAULT 0;
94
+
95
+ -- 创建索引
96
+ CREATE INDEX IF NOT EXISTS idx_api_keys_user_id ON api_keys(user_id);
97
+ CREATE INDEX IF NOT EXISTS idx_api_keys_key_hash ON api_keys(key_hash);
98
+ CREATE INDEX IF NOT EXISTS idx_quota_reservations_user_id ON quota_reservations(user_id);
99
+ CREATE INDEX IF NOT EXISTS idx_quota_reservations_expires_at ON quota_reservations(expires_at);
100
+ ```
101
+
102
+ ---
103
+
104
+ ## 服务初始化
105
+
106
+ ### 1. Sentry 初始化
107
+
108
+ 在应用启动时初始化 Sentry:
109
+
110
+ ```typescript
111
+ import { sentryService } from './infrastructure/monitoring/index.js';
112
+
113
+ sentryService.initialize({
114
+ dsn: process.env.SENTRY_DSN,
115
+ environment: process.env.NODE_ENV || 'development',
116
+ tracesSampleRate: process.env.NODE_ENV === 'production' ? 0.1 : 1.0,
117
+ });
118
+ ```
119
+
120
+ ### 2. 健康检查
121
+
122
+ 启动时检查各服务健康状态:
123
+
124
+ ```typescript
125
+ import { cacheService, quotaService, apiKeyService, rateLimiter } from './index.js';
126
+
127
+ async function checkHealth() {
128
+ const results = await Promise.all([
129
+ cacheService.healthCheck(),
130
+ quotaService.healthCheck(),
131
+ apiKeyService.healthCheck(),
132
+ rateLimiter.healthCheck(),
133
+ ]);
134
+
135
+ console.log('Health check results:', {
136
+ cache: results[0],
137
+ quota: results[1],
138
+ apiKey: results[2],
139
+ rateLimiter: results[3],
140
+ });
141
+ }
142
+ ```
143
+
144
+ ---
145
+
146
+ ## 使用示例
147
+
148
+ ### 质量检查服务
149
+
150
+ #### 基础用法
151
+
152
+ ```typescript
153
+ import { qualityCheckService } from './services/quality/index.js';
154
+
155
+ // 检查内容质量
156
+ const result = await qualityCheckService.check(
157
+ content,
158
+ requirements,
159
+ {
160
+ hardRules: {
161
+ minWords: 500,
162
+ maxWords: 5000,
163
+ keywords: ['AI', '人工智能'],
164
+ requireTitle: true,
165
+ requireIntro: true,
166
+ },
167
+ softScoring: {
168
+ enabled: true,
169
+ passThreshold: 7.0,
170
+ maxAttempts: 3,
171
+ },
172
+ }
173
+ );
174
+
175
+ if (result.passed) {
176
+ console.log('质量检查通过!', { score: result.score });
177
+ } else {
178
+ console.log('质量检查未通过');
179
+ console.log('修复建议:', result.fixSuggestions);
180
+ }
181
+ ```
182
+
183
+ #### 仅硬规则检查
184
+
185
+ ```typescript
186
+ import { hardRuleChecker } from './services/quality/index.js';
187
+
188
+ const result = hardRuleChecker.check(content, {
189
+ minWords: 500,
190
+ maxWords: 5000,
191
+ keywords: ['AI', '技术'],
192
+ requireAllKeywords: false,
193
+ });
194
+
195
+ if (!result.passed) {
196
+ console.log('违反的规则:', result.issues);
197
+ }
198
+ ```
199
+
200
+ #### 批量检查
201
+
202
+ ```typescript
203
+ const items = [
204
+ { content: '内容1', requirements: '要求1' },
205
+ { content: '内容2', requirements: '要求2' },
206
+ ];
207
+
208
+ const results = await qualityCheckService.batchCheck(items);
209
+ ```
210
+
211
+ ---
212
+
213
+ ### 缓存服务
214
+
215
+ #### 基础用法
216
+
217
+ ```typescript
218
+ import { cacheService } from './infrastructure/cache/index.js';
219
+
220
+ // 设置缓存
221
+ await cacheService.set('user:123', { name: 'Alice', age: 30 }, 3600);
222
+
223
+ // 获取缓存
224
+ const user = await cacheService.get('user:123');
225
+ if (user) {
226
+ console.log('缓存命中:', user);
227
+ } else {
228
+ console.log('缓存未命中');
229
+ }
230
+
231
+ // 删除缓存
232
+ await cacheService.delete('user:123');
233
+
234
+ // 批量获取
235
+ const keys = ['user:1', 'user:2', 'user:3'];
236
+ const users = await cacheService.getMany(keys);
237
+ ```
238
+
239
+ #### LLM 响应缓存
240
+
241
+ ```typescript
242
+ // 检查缓存
243
+ const cachedResponse = await cacheService.getCachedLLMResponse(prompt);
244
+ if (cachedResponse) {
245
+ return cachedResponse;
246
+ }
247
+
248
+ // 生成新响应
249
+ const response = await llmService.generateText(prompt);
250
+
251
+ // 缓存响应(7天)
252
+ await cacheService.setCachedLLMResponse(prompt, response);
253
+ ```
254
+
255
+ #### 缓存统计
256
+
257
+ ```typescript
258
+ const stats = await cacheService.getStats();
259
+ console.log('缓存统计:', {
260
+ 命中次数: stats.hits,
261
+ 未命中次数: stats.misses,
262
+ 命中率: `${stats.hitRate.toFixed(2)}%`,
263
+ 缓存大小: stats.size,
264
+ });
265
+ ```
266
+
267
+ ---
268
+
269
+ ### API Key 管理
270
+
271
+ #### 创建 API Key
272
+
273
+ ```typescript
274
+ import { apiKeyService } from './infrastructure/security/index.js';
275
+
276
+ const { apiKey, apiKeyId } = await apiKeyService.createApiKey({
277
+ userId: 'user-123',
278
+ name: 'Production Key',
279
+ description: '用于生产环境',
280
+ expiresIn: 30 * 24 * 3600, // 30天
281
+ });
282
+
283
+ console.log('API Key:', apiKey); // 保存这个 Key,只显示一次!
284
+ console.log('API Key ID:', apiKeyId);
285
+ ```
286
+
287
+ #### 验证 API Key
288
+
289
+ ```typescript
290
+ const result = await apiKeyService.verifyApiKey(apiKey);
291
+
292
+ if (result.valid) {
293
+ console.log('API Key 有效');
294
+ console.log('用户 ID:', result.userId);
295
+ console.log('API Key 详情:', result.apiKey);
296
+ } else {
297
+ console.log('API Key 无效或已过期');
298
+ }
299
+ ```
300
+
301
+ #### 管理用户 API Keys
302
+
303
+ ```typescript
304
+ // 获取用户的所有 API Keys
305
+ const apiKeys = await apiKeyService.getUserApiKeys('user-123');
306
+
307
+ // 禁用某个 API Key
308
+ await apiKeyService.disableApiKey(apiKeyId);
309
+
310
+ // 启用某个 API Key
311
+ await apiKeyService.enableApiKey(apiKeyId);
312
+
313
+ // 删除某个 API Key
314
+ await apiKeyService.deleteApiKey(apiKeyId);
315
+ ```
316
+
317
+ ---
318
+
319
+ ### 配额管理
320
+
321
+ #### 检查配额
322
+
323
+ ```typescript
324
+ import { quotaService } from './infrastructure/security/index.js';
325
+
326
+ const quota = await quotaService.getUserQuota('user-123');
327
+ if (quota) {
328
+ console.log('配额信息:', {
329
+ 每日配额: quota.quotaDaily,
330
+ 今日已用: quota.quotaUsedToday,
331
+ 已预留: quota.quotaReserved,
332
+ 可用配额: quota.quotaAvailable,
333
+ });
334
+ }
335
+ ```
336
+
337
+ #### 预留和消费配额
338
+
339
+ ```typescript
340
+ // 预留配额
341
+ const { success, reservationId } = await quotaService.reserveQuota(
342
+ 'user-123',
343
+ 5, // 需要 5 个配额
344
+ 300 // 预留 5 分钟后过期
345
+ );
346
+
347
+ if (success) {
348
+ try {
349
+ // 执行业务逻辑
350
+ await performTask();
351
+
352
+ // 消费配额
353
+ await quotaService.consumeQuota('user-123', reservationId);
354
+ } catch (error) {
355
+ // 任务失败,预留会自动过期或手动释放
356
+ console.error('任务失败:', error);
357
+ }
358
+ }
359
+ ```
360
+
361
+ #### 直接消费配额
362
+
363
+ ```typescript
364
+ const success = await quotaService.consumeDirectly('user-123', 5);
365
+ if (!success) {
366
+ console.log('配额不足');
367
+ }
368
+ ```
369
+
370
+ #### 设置用户配额
371
+
372
+ ```typescript
373
+ // 设置每日配额
374
+ await quotaService.setUserQuota('user-123', 200);
375
+
376
+ // 手动重置今日配额
377
+ await quotaService.resetUserQuota('user-123');
378
+ ```
379
+
380
+ ---
381
+
382
+ ### 速率限制
383
+
384
+ #### 基础用法
385
+
386
+ ```typescript
387
+ import { rateLimiter, RateLimitPresets } from './infrastructure/security/index.js';
388
+
389
+ // 使用预设配置
390
+ const result = await rateLimiter.checkLimit(
391
+ 'user-123', // 标识符(用户 ID、IP 地址等)
392
+ RateLimitPresets.api // 预设配置:100 请求/分钟
393
+ );
394
+
395
+ if (result.allowed) {
396
+ console.log('请求允许');
397
+ console.log('剩余配额:', result.remaining);
398
+ } else {
399
+ console.log('速率限制超出');
400
+ console.log('请于', result.resetTime, '后重试');
401
+ console.log('或等待', result.retryAfter, '秒');
402
+ }
403
+ ```
404
+
405
+ #### 自定义配置
406
+
407
+ ```typescript
408
+ const customConfig = {
409
+ limit: 50,
410
+ window: 60, // 60秒
411
+ };
412
+
413
+ const result = await rateLimiter.checkLimit(
414
+ 'user-123',
415
+ customConfig,
416
+ 'sliding-window' // 算法:sliding-window, token-bucket, fixed-window
417
+ );
418
+ ```
419
+
420
+ #### 令牌桶算法
421
+
422
+ ```typescript
423
+ const config = {
424
+ limit: 10,
425
+ window: 60,
426
+ burst: 20, // 突发容量
427
+ };
428
+
429
+ const result = await rateLimiter.checkLimit('user-123', config, 'token-bucket');
430
+ ```
431
+
432
+ ---
433
+
434
+ ## 监控和日志
435
+
436
+ ### Prometheus 指标
437
+
438
+ #### 暴露指标端点
439
+
440
+ ```typescript
441
+ import express from 'express';
442
+ import { metricsService } from './infrastructure/monitoring/index.js';
443
+
444
+ const app = express();
445
+
446
+ app.get('/metrics', async (req, res) => {
447
+ const metrics = await metricsService.getMetrics();
448
+ res.set('Content-Type', metricsService.getContentType());
449
+ res.end(metrics);
450
+ });
451
+
452
+ app.listen(9090, () => {
453
+ console.log('Metrics server listening on port 9090');
454
+ });
455
+ ```
456
+
457
+ #### 记录指标
458
+
459
+ ```typescript
460
+ // 任务指标
461
+ metricsService.recordTaskCreated('worker-1', 'async');
462
+ metricsService.recordTaskCompleted('worker-1', 'async', 35000);
463
+ metricsService.recordTaskFailed('worker-1', 'async', 'TimeoutError');
464
+
465
+ // LLM 指标
466
+ metricsService.recordLLMRequest('deepseek-chat', 'generation');
467
+ metricsService.recordLLMRequestDuration('deepseek-chat', 'generation', 2500);
468
+ metricsService.recordLLMTokenUsage('deepseek-chat', 'prompt', 1500);
469
+ metricsService.recordLLMTokenUsage('deepseek-chat', 'completion', 500);
470
+
471
+ // 缓存指标
472
+ metricsService.recordCacheHit('llm-response');
473
+ metricsService.recordCacheMiss('llm-response');
474
+ ```
475
+
476
+ ### Sentry 错误追踪
477
+
478
+ #### 捕获异常
479
+
480
+ ```typescript
481
+ import { sentryService } from './infrastructure/monitoring/index.js';
482
+
483
+ try {
484
+ // 业务逻辑
485
+ } catch (error) {
486
+ sentryService.captureException(error as Error, {
487
+ user: { id: 'user-123', email: 'user@example.com' },
488
+ tags: {
489
+ component: 'quality-check',
490
+ environment: 'production',
491
+ },
492
+ extra: {
493
+ taskId: 'task-456',
494
+ contentLength: content.length,
495
+ },
496
+ });
497
+ }
498
+ ```
499
+
500
+ #### 性能追踪
501
+
502
+ ```typescript
503
+ const transaction = sentryService.startTransaction({
504
+ op: 'quality-check',
505
+ name: 'Full Quality Check',
506
+ });
507
+
508
+ try {
509
+ // 执行操作
510
+ await performQualityCheck();
511
+ } finally {
512
+ transaction?.finish();
513
+ }
514
+ ```
515
+
516
+ ### 日志服务
517
+
518
+ #### 基础日志
519
+
520
+ ```typescript
521
+ import { loggingService } from './infrastructure/monitoring/index.js';
522
+
523
+ loggingService.debug('Debug message', { data: 'value' });
524
+ loggingService.info('Info message');
525
+ loggingService.warn('Warning message', { warning: 'details' });
526
+ loggingService.error('Error message', error, { context: 'details' });
527
+ ```
528
+
529
+ #### 性能日志
530
+
531
+ ```typescript
532
+ const startTime = Date.now();
533
+ await performOperation();
534
+ const duration = Date.now() - startTime;
535
+
536
+ loggingService.performance('operation-name', duration, {
537
+ taskId: 'task-123',
538
+ success: true,
539
+ });
540
+ ```
541
+
542
+ #### 子日志器
543
+
544
+ ```typescript
545
+ const logger = loggingService.child('QualityCheck');
546
+ logger.info('Quality check started', { taskId: 'task-123' });
547
+ ```
548
+
549
+ ---
550
+
551
+ ## 常见问题
552
+
553
+ ### Q1: Redis 连接失败怎么办?
554
+
555
+ **A**: 检查 Redis 是否正在运行:
556
+
557
+ ```bash
558
+ redis-cli ping
559
+ # 应该返回 PONG
560
+ ```
561
+
562
+ 如果 Redis 未运行,启动它:
563
+
564
+ ```bash
565
+ # macOS
566
+ brew services start redis
567
+
568
+ # Linux
569
+ sudo systemctl start redis
570
+ ```
571
+
572
+ ### Q2: Sentry 不上报错误?
573
+
574
+ **A**: 确保:
575
+ 1. 已设置 `SENTRY_DSN` 环境变量
576
+ 2. 已调用 `sentryService.initialize()`
577
+ 3. 检查网络连接
578
+
579
+ ### Q3: 缓存命中率低怎么办?
580
+
581
+ **A**: 优化策略:
582
+ 1. 增加 TTL 时间
583
+ 2. 使用更精确的缓存键
584
+ 3. 分析缓存未命中的原因
585
+ 4. 考虑预热缓存
586
+
587
+ ### Q4: 速率限制太严格?
588
+
589
+ **A**: 调整配置:
590
+
591
+ ```typescript
592
+ const customConfig = {
593
+ limit: 200, // 增加限制
594
+ window: 60,
595
+ };
596
+ ```
597
+
598
+ ### Q5: 如何测试这些服务?
599
+
600
+ **A**: 编写单元测试:
601
+
602
+ ```typescript
603
+ import { describe, it, expect } from 'vitest';
604
+ import { hardRuleChecker } from './services/quality/index.js';
605
+
606
+ describe('HardRuleChecker', () => {
607
+ it('should check word count', () => {
608
+ const content = 'This is a test content.';
609
+ const result = hardRuleChecker.check(content, {
610
+ minWords: 3,
611
+ maxWords: 10,
612
+ });
613
+
614
+ expect(result.passed).toBe(true);
615
+ });
616
+ });
617
+ ```
618
+
619
+ ---
620
+
621
+ ## 下一步
622
+
623
+ 1. ✅ 阅读 [阶段4完成总结](./phase-4-completion-summary.md)
624
+ 2. ✅ 运行数据库迁移
625
+ 3. ✅ 编写测试用例
626
+ 4. ✅ 部署到测试环境
627
+ 5. ✅ 监控和优化
628
+
629
+ ---
630
+
631
+ **文档版本**: 1.0.0
632
+ **更新日期**: 2026-01-19