@autobe/agent 0.30.0-dev.20260315 → 0.30.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 (466) hide show
  1. package/LICENSE +661 -661
  2. package/lib/constants/AutoBeTemplateFileConstant.d.ts +1 -1
  3. package/lib/factory/consentFunctionCall.js +4 -4
  4. package/lib/factory/createAutoBeContext.js +24 -24
  5. package/lib/factory/createAutoBeMessageContent.js +6 -6
  6. package/lib/index.mjs +41 -41
  7. package/lib/orchestrate/analyze/histories/transformAnalyzeScenarioHistory.js +18 -18
  8. package/lib/orchestrate/analyze/histories/transformAnalyzeScenarioReviewHistory.js +13 -13
  9. package/lib/orchestrate/analyze/histories/transformAnalyzeSectionCrossFileReviewHistory.js +47 -47
  10. package/lib/orchestrate/analyze/histories/transformAnalyzeSectionReviewHistory.js +66 -66
  11. package/lib/orchestrate/analyze/histories/transformAnalyzeWriteSectionHistory.js +91 -91
  12. package/lib/orchestrate/analyze/histories/transformAnalyzeWriteSectionPatchHistory.js +46 -46
  13. package/lib/orchestrate/analyze/histories/transformAnalyzeWriteUnitHistory.js +72 -72
  14. package/lib/orchestrate/analyze/orchestrateAnalyzeScenario.js +1 -1
  15. package/lib/orchestrate/analyze/orchestrateAnalyzeSectionCrossFileReview.js +1 -1
  16. package/lib/orchestrate/analyze/orchestrateAnalyzeSectionReview.js +1 -1
  17. package/lib/orchestrate/analyze/orchestrateAnalyzeWriteSection.js +1 -1
  18. package/lib/orchestrate/analyze/orchestrateAnalyzeWriteSectionPatch.js +1 -1
  19. package/lib/orchestrate/analyze/orchestrateAnalyzeWriteUnit.js +1 -1
  20. package/lib/orchestrate/common/histories/transformCommonCorrectCastingHistory.js +5 -5
  21. package/lib/orchestrate/common/histories/transformPreliminaryHistory.js +44 -44
  22. package/lib/orchestrate/common/histories/transformPreviousAndLatestCorrectHistory.js +44 -44
  23. package/lib/orchestrate/common/internal/fixPrelminaryApplication.js +22 -22
  24. package/lib/orchestrate/common/internal/validatePreliminary.js +116 -116
  25. package/lib/orchestrate/facade/createAutoBeFacadeController.js +3 -3
  26. package/lib/orchestrate/facade/structures/transformFacadeStateMessage.js +20 -20
  27. package/lib/orchestrate/interface/histories/transformInterfaceActionEndpointReviewHistory.js +34 -34
  28. package/lib/orchestrate/interface/histories/transformInterfaceActionEndpointWriteHistory.js +37 -37
  29. package/lib/orchestrate/interface/histories/transformInterfaceAuthorizationHistory.js +56 -56
  30. package/lib/orchestrate/interface/histories/transformInterfaceBaseEndpointReviewHistory.js +26 -26
  31. package/lib/orchestrate/interface/histories/transformInterfaceBaseEndpointWriteHistory.js +28 -28
  32. package/lib/orchestrate/interface/histories/transformInterfaceEndpointAuthorizationSection.js +11 -11
  33. package/lib/orchestrate/interface/histories/transformInterfaceGroupHistory.js +38 -38
  34. package/lib/orchestrate/interface/histories/transformInterfaceOperationHistory.js +29 -29
  35. package/lib/orchestrate/interface/histories/transformInterfaceOperationParameterHistory.js +15 -15
  36. package/lib/orchestrate/interface/histories/transformInterfaceOperationReviewHistory.js +6 -6
  37. package/lib/orchestrate/interface/histories/transformInterfacePrerequisiteHistory.js +25 -25
  38. package/lib/orchestrate/interface/histories/transformInterfaceSchemaCastingHistory.js +67 -67
  39. package/lib/orchestrate/interface/histories/transformInterfaceSchemaComplementHistory.js +60 -60
  40. package/lib/orchestrate/interface/histories/transformInterfaceSchemaRefineHistory.js +83 -83
  41. package/lib/orchestrate/interface/histories/transformInterfaceSchemaRenameHistory.js +29 -29
  42. package/lib/orchestrate/interface/histories/transformInterfaceSchemaReviewHistory.js +74 -74
  43. package/lib/orchestrate/interface/histories/transformInterfaceSchemaWriteHistory.js +46 -46
  44. package/lib/orchestrate/interface/orchestrateInterfaceAuthorization.js +1 -1
  45. package/lib/orchestrate/interface/orchestrateInterfaceEndpointReview.js +1 -1
  46. package/lib/orchestrate/interface/orchestrateInterfaceEndpointWrite.js +1 -1
  47. package/lib/orchestrate/interface/orchestrateInterfaceGroup.js +9 -9
  48. package/lib/orchestrate/interface/orchestrateInterfaceOperation.js +1 -1
  49. package/lib/orchestrate/interface/orchestrateInterfaceOperationReview.js +1 -1
  50. package/lib/orchestrate/interface/orchestrateInterfacePrerequisite.js +4 -4
  51. package/lib/orchestrate/interface/orchestrateInterfaceSchemaCasting.js +1 -1
  52. package/lib/orchestrate/interface/orchestrateInterfaceSchemaComplement.js +5 -5
  53. package/lib/orchestrate/interface/orchestrateInterfaceSchemaRefine.js +1 -1
  54. package/lib/orchestrate/interface/orchestrateInterfaceSchemaReview.js +1 -1
  55. package/lib/orchestrate/interface/orchestrateInterfaceSchemaWrite.js +1 -1
  56. package/lib/orchestrate/interface/programmers/AutoBeInterfaceAuthorizationProgrammer.js +90 -90
  57. package/lib/orchestrate/interface/programmers/AutoBeInterfaceEndpointProgrammer.js +6 -6
  58. package/lib/orchestrate/interface/programmers/AutoBeInterfaceEndpointReviewProgrammer.js +25 -25
  59. package/lib/orchestrate/interface/programmers/AutoBeInterfaceOperationProgrammer.js +71 -71
  60. package/lib/orchestrate/interface/programmers/AutoBeInterfacePrerequisiteProgrammer.js +162 -162
  61. package/lib/orchestrate/interface/programmers/AutoBeInterfaceSchemaProgrammer.js +11 -11
  62. package/lib/orchestrate/interface/programmers/AutoBeInterfaceSchemaPropertyReviseProgrammer.js +73 -73
  63. package/lib/orchestrate/interface/programmers/AutoBeInterfaceSchemaRefineProgrammer.js +35 -35
  64. package/lib/orchestrate/interface/programmers/AutoBeInterfaceSchemaReviewProgrammer.js +11 -11
  65. package/lib/orchestrate/interface/utils/AutoBeJsonSchemaFactory.js +4 -4
  66. package/lib/orchestrate/interface/utils/AutoBeJsonSchemaValidator.js +283 -283
  67. package/lib/orchestrate/interface/utils/fulfillJsonSchemaErrorMessages.js +76 -76
  68. package/lib/orchestrate/prisma/histories/transformPrismaAuthorizationHistory.js +76 -76
  69. package/lib/orchestrate/prisma/histories/transformPrismaAuthorizationReviewHistory.js +51 -51
  70. package/lib/orchestrate/prisma/histories/transformPrismaComponentReviewHistory.js +54 -54
  71. package/lib/orchestrate/prisma/histories/transformPrismaComponentsHistory.js +83 -83
  72. package/lib/orchestrate/prisma/histories/transformPrismaCorrectHistory.js +6 -6
  73. package/lib/orchestrate/prisma/histories/transformPrismaGroupHistory.js +22 -22
  74. package/lib/orchestrate/prisma/histories/transformPrismaGroupReviewHistory.js +41 -41
  75. package/lib/orchestrate/prisma/histories/transformPrismaSchemaHistory.js +39 -39
  76. package/lib/orchestrate/prisma/histories/transformPrismaSchemaReviewHistory.js +41 -41
  77. package/lib/orchestrate/prisma/orchestratePrismaAuthorization.js +1 -1
  78. package/lib/orchestrate/prisma/orchestratePrismaAuthorizationReview.js +1 -1
  79. package/lib/orchestrate/prisma/orchestratePrismaComponent.js +1 -1
  80. package/lib/orchestrate/prisma/orchestratePrismaComponentReview.js +1 -1
  81. package/lib/orchestrate/prisma/orchestratePrismaCorrect.js +1 -1
  82. package/lib/orchestrate/prisma/orchestratePrismaGroup.js +1 -1
  83. package/lib/orchestrate/prisma/orchestratePrismaGroupReview.js +1 -1
  84. package/lib/orchestrate/prisma/orchestratePrismaSchema.js +1 -1
  85. package/lib/orchestrate/prisma/orchestratePrismaSchemaReview.js +1 -1
  86. package/lib/orchestrate/prisma/programmers/AutoBeDatabaseAuthorizationProgrammer.js +23 -23
  87. package/lib/orchestrate/prisma/programmers/AutoBeDatabaseAuthorizationReviewProgrammer.js +7 -7
  88. package/lib/orchestrate/prisma/programmers/AutoBeDatabaseComponentProgrammer.js +5 -5
  89. package/lib/orchestrate/prisma/programmers/AutoBeDatabaseComponentReviewProgrammer.js +20 -20
  90. package/lib/orchestrate/prisma/programmers/AutoBeDatabaseGroupProgrammer.js +13 -13
  91. package/lib/orchestrate/prisma/programmers/AutoBeDatabaseGroupReviewProgrammer.js +51 -51
  92. package/lib/orchestrate/prisma/programmers/AutoBeDatabaseSchemaProgrammer.js +25 -25
  93. package/lib/orchestrate/realize/histories/transformRealizeAuthorizationCorrectHistory.js +28 -28
  94. package/lib/orchestrate/realize/histories/transformRealizeAuthorizationWriteHistory.js +14 -14
  95. package/lib/orchestrate/realize/histories/transformRealizeCollectorCorrectHistory.js +42 -42
  96. package/lib/orchestrate/realize/histories/transformRealizeCollectorPlanHistory.js +27 -27
  97. package/lib/orchestrate/realize/histories/transformRealizeCollectorWriteHistory.js +57 -57
  98. package/lib/orchestrate/realize/histories/transformRealizeCorrectCastingHistory.js +35 -35
  99. package/lib/orchestrate/realize/histories/transformRealizeOperationCorrectHistory.js +14 -14
  100. package/lib/orchestrate/realize/histories/transformRealizeOperationWriteHistory.js +37 -37
  101. package/lib/orchestrate/realize/histories/transformRealizeOperationWriteHistory.js.map +1 -1
  102. package/lib/orchestrate/realize/histories/transformRealizeTransformerCorrectHistory.js +47 -47
  103. package/lib/orchestrate/realize/histories/transformRealizeTransformerPlanHistory.js +27 -27
  104. package/lib/orchestrate/realize/histories/transformRealizeTransformerWriteHistory.js +51 -51
  105. package/lib/orchestrate/realize/orchestrateRealizeAuthorizationCorrect.js +1 -1
  106. package/lib/orchestrate/realize/orchestrateRealizeAuthorizationWrite.js +1 -1
  107. package/lib/orchestrate/realize/orchestrateRealizeCollectorCorrectOverall.js +1 -1
  108. package/lib/orchestrate/realize/orchestrateRealizeCollectorPlan.js +11 -11
  109. package/lib/orchestrate/realize/orchestrateRealizeCollectorWrite.js +1 -1
  110. package/lib/orchestrate/realize/orchestrateRealizeOperationCorrectOverall.js +1 -1
  111. package/lib/orchestrate/realize/orchestrateRealizeOperationWrite.js +1 -1
  112. package/lib/orchestrate/realize/orchestrateRealizeTransformerCorrectOverall.js +1 -1
  113. package/lib/orchestrate/realize/orchestrateRealizeTransformerPlan.js +11 -11
  114. package/lib/orchestrate/realize/orchestrateRealizeTransformerWrite.js +1 -1
  115. package/lib/orchestrate/realize/programmers/AutoBeRealizeCollectorProgrammer.js +41 -41
  116. package/lib/orchestrate/realize/programmers/AutoBeRealizeOperationProgrammer.js +21 -21
  117. package/lib/orchestrate/realize/programmers/AutoBeRealizeTransformerProgrammer.js +57 -57
  118. package/lib/orchestrate/realize/utils/getRealizeWriteInputType.js +3 -3
  119. package/lib/orchestrate/realize/utils/printErrorHints.js +5 -5
  120. package/lib/orchestrate/test/compile/getTestImportStatements.js +9 -9
  121. package/lib/orchestrate/test/histories/transformTestAuthorizeWriteHistory.js +38 -38
  122. package/lib/orchestrate/test/histories/transformTestGenerationWriteHistory.js +79 -79
  123. package/lib/orchestrate/test/histories/transformTestOperationWriteHistory.js +162 -162
  124. package/lib/orchestrate/test/histories/transformTestPrepareWriteHistory.js +54 -54
  125. package/lib/orchestrate/test/histories/transformTestScenarioHistory.js +31 -31
  126. package/lib/orchestrate/test/histories/transformTestScenarioReviewHistory.js +27 -27
  127. package/lib/orchestrate/test/orchestrateTestScenario.js +1 -1
  128. package/lib/orchestrate/test/orchestrateTestScenarioReview.js +1 -1
  129. package/lib/orchestrate/test/programmers/AutoBeTestAuthorizeProgrammer.js +31 -31
  130. package/lib/orchestrate/test/programmers/AutoBeTestGenerateProgrammer.js +23 -23
  131. package/lib/orchestrate/test/programmers/AutoBeTestOperationProgrammer.js +6 -6
  132. package/lib/orchestrate/test/programmers/AutoBeTestPrepareProgrammer.js +34 -34
  133. package/lib/orchestrate/test/programmers/AutoBeTestScenarioProgrammer.js +39 -39
  134. package/lib/utils/predicateStateMessage.js +19 -19
  135. package/lib/utils/validateEmptyCode.js +16 -16
  136. package/package.json +5 -5
  137. package/src/AutoBeAgent.ts +374 -374
  138. package/src/AutoBeAgentBase.ts +126 -126
  139. package/src/AutoBeMockAgent.ts +254 -254
  140. package/src/constants/AutoBeConfigConstant.ts +173 -173
  141. package/src/constants/AutoBeTemplateFileConstant.ts +1 -1
  142. package/src/context/AutoBeContext.ts +107 -107
  143. package/src/context/AutoBeState.ts +66 -66
  144. package/src/context/AutoBeTokenUsage.ts +307 -307
  145. package/src/context/AutoBeTokenUsageComponent.ts +227 -227
  146. package/src/describe/describe.ts +47 -47
  147. package/src/describe/image/histories/transformImageDescribeDraftHistories.ts +16 -16
  148. package/src/describe/image/orchestrateImageDescribeDraft.ts +200 -200
  149. package/src/describe/image/structures/IAutoBeImageDescribeDraftApplication.ts +92 -92
  150. package/src/describe/imageDescribe.ts +64 -64
  151. package/src/factory/consentFunctionCall.ts +141 -141
  152. package/src/factory/createAgenticaHistory.ts +71 -71
  153. package/src/factory/createAutoBeContext.ts +584 -584
  154. package/src/factory/createAutoBeMessageContent.ts +36 -36
  155. package/src/factory/createAutoBeState.ts +20 -20
  156. package/src/factory/getAutoBeGenerated.ts +317 -317
  157. package/src/factory/getAutoBeRealizeGenerated.ts +31 -31
  158. package/src/factory/getCriticalCompiler.ts +52 -52
  159. package/src/factory/index.ts +1 -1
  160. package/src/factory/mergeSystemMessages.ts +60 -60
  161. package/src/factory/supportFunctionCallFallback.ts +214 -214
  162. package/src/factory/supportMistral.ts +138 -138
  163. package/src/index.ts +16 -16
  164. package/src/orchestrate/analyze/fillTocDeterministic.ts +280 -280
  165. package/src/orchestrate/analyze/histories/transformAnalyzeScenarioHistory.ts +55 -55
  166. package/src/orchestrate/analyze/histories/transformAnalyzeScenarioReviewHistory.ts +74 -74
  167. package/src/orchestrate/analyze/histories/transformAnalyzeSectionCrossFileReviewHistory.ts +179 -179
  168. package/src/orchestrate/analyze/histories/transformAnalyzeSectionReviewHistory.ts +163 -163
  169. package/src/orchestrate/analyze/histories/transformAnalyzeWriteSectionHistory.ts +191 -191
  170. package/src/orchestrate/analyze/histories/transformAnalyzeWriteSectionPatchHistory.ts +122 -122
  171. package/src/orchestrate/analyze/histories/transformAnalyzeWriteUnitHistory.ts +161 -161
  172. package/src/orchestrate/analyze/index.ts +7 -7
  173. package/src/orchestrate/analyze/orchestrateAnalyze.ts +1693 -1693
  174. package/src/orchestrate/analyze/orchestrateAnalyzeScenario.ts +267 -267
  175. package/src/orchestrate/analyze/orchestrateAnalyzeScenarioReview.ts +122 -122
  176. package/src/orchestrate/analyze/orchestrateAnalyzeSectionCrossFileReview.ts +146 -146
  177. package/src/orchestrate/analyze/orchestrateAnalyzeSectionReview.ts +154 -154
  178. package/src/orchestrate/analyze/orchestrateAnalyzeWriteSection.ts +388 -388
  179. package/src/orchestrate/analyze/orchestrateAnalyzeWriteSectionPatch.ts +407 -407
  180. package/src/orchestrate/analyze/orchestrateAnalyzeWriteUnit.ts +348 -348
  181. package/src/orchestrate/analyze/programmers/AutoBeAnalyzeProgrammer.ts +149 -149
  182. package/src/orchestrate/analyze/structures/FixedAnalyzeTemplate.ts +961 -961
  183. package/src/orchestrate/analyze/structures/IAutoBeAnalyzeScenarioApplication.ts +141 -141
  184. package/src/orchestrate/analyze/structures/IAutoBeAnalyzeScenarioReviewApplication.ts +96 -96
  185. package/src/orchestrate/analyze/structures/IAutoBeAnalyzeSectionCrossFileReviewApplication.ts +160 -160
  186. package/src/orchestrate/analyze/structures/IAutoBeAnalyzeSectionReviewApplication.ts +192 -192
  187. package/src/orchestrate/analyze/structures/IAutoBeAnalyzeWriteSectionApplication.ts +142 -142
  188. package/src/orchestrate/analyze/structures/IAutoBeAnalyzeWriteUnitApplication.ts +123 -123
  189. package/src/orchestrate/analyze/utils/buildConstraintConsistencyReport.ts +813 -813
  190. package/src/orchestrate/analyze/utils/buildErrorCodeRegistry.ts +324 -324
  191. package/src/orchestrate/analyze/utils/buildHardValidators.ts +88 -88
  192. package/src/orchestrate/analyze/utils/detectInventedEntities.ts +87 -87
  193. package/src/orchestrate/analyze/utils/detectProseConstraintConflicts.ts +319 -319
  194. package/src/orchestrate/analyze/utils/repairSectionReviewUtils.ts +181 -181
  195. package/src/orchestrate/analyze/utils/repairUtils.ts +60 -60
  196. package/src/orchestrate/analyze/utils/validateScenarioBasics.ts +104 -104
  197. package/src/orchestrate/common/AutoBePreliminaryController.ts +400 -400
  198. package/src/orchestrate/common/histories/transformCommonCorrectCastingHistory.ts +32 -32
  199. package/src/orchestrate/common/histories/transformPreliminaryHistory.ts +742 -742
  200. package/src/orchestrate/common/histories/transformPreviousAndLatestCorrectHistory.ts +77 -77
  201. package/src/orchestrate/common/internal/complementPreliminaryCollection.ts +263 -263
  202. package/src/orchestrate/common/internal/convertToSectionEntries.ts +57 -57
  203. package/src/orchestrate/common/internal/createPreliminaryCollection.ts +76 -76
  204. package/src/orchestrate/common/internal/fixPrelminaryApplication.ts +346 -346
  205. package/src/orchestrate/common/internal/validatePreliminary.ts +671 -671
  206. package/src/orchestrate/common/orchestrateCommonCorrectCasting.ts +223 -223
  207. package/src/orchestrate/common/orchestratePreliminary.ts +610 -610
  208. package/src/orchestrate/common/structures/AutoBePreliminaryRequest.ts +42 -42
  209. package/src/orchestrate/common/structures/IAnalysisSectionEntry.ts +35 -35
  210. package/src/orchestrate/common/structures/IAutoBeCommonCorrectCastingApplication.ts +72 -72
  211. package/src/orchestrate/common/structures/IAutoBeOrchestrateResult.ts +28 -28
  212. package/src/orchestrate/common/structures/IAutoBePreliminaryCollection.ts +52 -52
  213. package/src/orchestrate/common/structures/IAutoBePreliminaryGetAnalysisSections.ts +34 -34
  214. package/src/orchestrate/common/structures/IAutoBePreliminaryGetDatabaseSchemas.ts +31 -31
  215. package/src/orchestrate/common/structures/IAutoBePreliminaryGetInterfaceOperations.ts +32 -32
  216. package/src/orchestrate/common/structures/IAutoBePreliminaryGetInterfaceSchemas.ts +31 -31
  217. package/src/orchestrate/common/structures/IAutoBePreliminaryGetPreviousAnalysisSections.ts +28 -28
  218. package/src/orchestrate/common/structures/IAutoBePreliminaryGetPreviousDatabaseSchemas.ts +88 -88
  219. package/src/orchestrate/common/structures/IAutoBePreliminaryGetPreviousInterfaceOperations.ts +102 -102
  220. package/src/orchestrate/common/structures/IAutoBePreliminaryGetPreviousInterfaceSchemas.ts +105 -105
  221. package/src/orchestrate/common/structures/IAutoBePreliminaryGetRealizeCollectors.ts +32 -32
  222. package/src/orchestrate/common/structures/IAutoBePreliminaryGetRealizeTransformers.ts +32 -32
  223. package/src/orchestrate/facade/createAutoBeFacadeController.ts +118 -118
  224. package/src/orchestrate/facade/histories/IAutoBeFacadeApplication.ts +139 -139
  225. package/src/orchestrate/facade/histories/IAutoBeFacadeApplicationProps.ts +8 -8
  226. package/src/orchestrate/facade/histories/IAutoBeFacadeApplicationResult.ts +9 -9
  227. package/src/orchestrate/facade/structures/transformFacadeStateMessage.ts +59 -59
  228. package/src/orchestrate/index.ts +5 -5
  229. package/src/orchestrate/interface/histories/transformInterfaceActionEndpointReviewHistory.ts +83 -83
  230. package/src/orchestrate/interface/histories/transformInterfaceActionEndpointWriteHistory.ts +78 -78
  231. package/src/orchestrate/interface/histories/transformInterfaceAuthorizationHistory.ts +129 -129
  232. package/src/orchestrate/interface/histories/transformInterfaceBaseEndpointReviewHistory.ts +74 -74
  233. package/src/orchestrate/interface/histories/transformInterfaceBaseEndpointWriteHistory.ts +68 -68
  234. package/src/orchestrate/interface/histories/transformInterfaceCommonHistory.ts +64 -64
  235. package/src/orchestrate/interface/histories/transformInterfaceEndpointAuthorizationSection.ts +42 -42
  236. package/src/orchestrate/interface/histories/transformInterfaceGroupHistory.ts +103 -103
  237. package/src/orchestrate/interface/histories/transformInterfaceOperationHistory.ts +81 -81
  238. package/src/orchestrate/interface/histories/transformInterfaceOperationParameterHistory.ts +53 -53
  239. package/src/orchestrate/interface/histories/transformInterfaceOperationReviewHistory.ts +49 -49
  240. package/src/orchestrate/interface/histories/transformInterfacePrerequisiteHistory.ts +94 -94
  241. package/src/orchestrate/interface/histories/transformInterfaceSchemaCastingHistory.ts +122 -122
  242. package/src/orchestrate/interface/histories/transformInterfaceSchemaComplementHistory.ts +192 -192
  243. package/src/orchestrate/interface/histories/transformInterfaceSchemaRefineHistory.ts +189 -189
  244. package/src/orchestrate/interface/histories/transformInterfaceSchemaRenameHistory.ts +63 -63
  245. package/src/orchestrate/interface/histories/transformInterfaceSchemaReviewHistory.ts +173 -173
  246. package/src/orchestrate/interface/histories/transformInterfaceSchemaWriteHistory.ts +88 -88
  247. package/src/orchestrate/interface/index.ts +6 -6
  248. package/src/orchestrate/interface/orchestrateInterface.ts +118 -118
  249. package/src/orchestrate/interface/orchestrateInterfaceActionEndpoint.ts +58 -58
  250. package/src/orchestrate/interface/orchestrateInterfaceAuthorization.ts +208 -208
  251. package/src/orchestrate/interface/orchestrateInterfaceBaseEndpoint.ts +55 -55
  252. package/src/orchestrate/interface/orchestrateInterfaceEndpoint.ts +67 -67
  253. package/src/orchestrate/interface/orchestrateInterfaceEndpointOverall.ts +80 -80
  254. package/src/orchestrate/interface/orchestrateInterfaceEndpointReview.ts +212 -212
  255. package/src/orchestrate/interface/orchestrateInterfaceEndpointWrite.ts +236 -236
  256. package/src/orchestrate/interface/orchestrateInterfaceGroup.ts +166 -166
  257. package/src/orchestrate/interface/orchestrateInterfaceOperation.ts +322 -322
  258. package/src/orchestrate/interface/orchestrateInterfaceOperationReview.ts +245 -245
  259. package/src/orchestrate/interface/orchestrateInterfacePrerequisite.ts +240 -240
  260. package/src/orchestrate/interface/orchestrateInterfaceSchema.ts +191 -191
  261. package/src/orchestrate/interface/orchestrateInterfaceSchemaCasting.ts +274 -274
  262. package/src/orchestrate/interface/orchestrateInterfaceSchemaComplement.ts +329 -329
  263. package/src/orchestrate/interface/orchestrateInterfaceSchemaRefine.ts +292 -292
  264. package/src/orchestrate/interface/orchestrateInterfaceSchemaRename.ts +266 -266
  265. package/src/orchestrate/interface/orchestrateInterfaceSchemaReview.ts +310 -310
  266. package/src/orchestrate/interface/orchestrateInterfaceSchemaWrite.ts +283 -283
  267. package/src/orchestrate/interface/programmers/AutoBeInterfaceAuthorizationProgrammer.ts +260 -260
  268. package/src/orchestrate/interface/programmers/AutoBeInterfaceEndpointProgrammer.ts +155 -155
  269. package/src/orchestrate/interface/programmers/AutoBeInterfaceEndpointReviewProgrammer.ts +139 -139
  270. package/src/orchestrate/interface/programmers/AutoBeInterfaceOperationProgrammer.ts +277 -277
  271. package/src/orchestrate/interface/programmers/AutoBeInterfacePrerequisiteProgrammer.ts +259 -259
  272. package/src/orchestrate/interface/programmers/AutoBeInterfaceSchemaProgrammer.ts +152 -152
  273. package/src/orchestrate/interface/programmers/AutoBeInterfaceSchemaPropertyReviseProgrammer.ts +347 -347
  274. package/src/orchestrate/interface/programmers/AutoBeInterfaceSchemaRefineProgrammer.ts +183 -183
  275. package/src/orchestrate/interface/programmers/AutoBeInterfaceSchemaReviewProgrammer.ts +263 -263
  276. package/src/orchestrate/interface/structures/IAutoBeInterfaceAuthorizationApplication.ts +135 -135
  277. package/src/orchestrate/interface/structures/IAutoBeInterfaceEndpointReviewApplication.ts +128 -128
  278. package/src/orchestrate/interface/structures/IAutoBeInterfaceEndpointWriteApplication.ts +133 -133
  279. package/src/orchestrate/interface/structures/IAutoBeInterfaceGroupApplication.ts +122 -122
  280. package/src/orchestrate/interface/structures/IAutoBeInterfaceOperationApplication.ts +178 -178
  281. package/src/orchestrate/interface/structures/IAutoBeInterfaceOperationReviewApplication.ts +175 -175
  282. package/src/orchestrate/interface/structures/IAutoBeInterfacePrerequisiteApplication.ts +130 -130
  283. package/src/orchestrate/interface/structures/IAutoBeInterfaceSchemaApplication.ts +121 -121
  284. package/src/orchestrate/interface/structures/IAutoBeInterfaceSchemaCastingApplication.ts +153 -153
  285. package/src/orchestrate/interface/structures/IAutoBeInterfaceSchemaComplementApplication.ts +123 -123
  286. package/src/orchestrate/interface/structures/IAutoBeInterfaceSchemaRefineApplication.ts +181 -181
  287. package/src/orchestrate/interface/structures/IAutoBeInterfaceSchemaRenameApplication.ts +45 -45
  288. package/src/orchestrate/interface/structures/IAutoBeInterfaceSchemaReviewApplication.ts +108 -108
  289. package/src/orchestrate/interface/utils/AutoBeJsonSchemaCollection.ts +42 -42
  290. package/src/orchestrate/interface/utils/AutoBeJsonSchemaFactory.ts +714 -714
  291. package/src/orchestrate/interface/utils/AutoBeJsonSchemaNamingConvention.ts +86 -86
  292. package/src/orchestrate/interface/utils/AutoBeJsonSchemaValidator.ts +725 -725
  293. package/src/orchestrate/interface/utils/fulfillJsonSchemaErrorMessages.ts +219 -219
  294. package/src/orchestrate/prisma/histories/transformPrismaAuthorizationHistory.ts +144 -144
  295. package/src/orchestrate/prisma/histories/transformPrismaAuthorizationReviewHistory.ts +104 -104
  296. package/src/orchestrate/prisma/histories/transformPrismaComponentReviewHistory.ts +97 -97
  297. package/src/orchestrate/prisma/histories/transformPrismaComponentsHistory.ts +136 -136
  298. package/src/orchestrate/prisma/histories/transformPrismaCorrectHistory.ts +41 -41
  299. package/src/orchestrate/prisma/histories/transformPrismaGroupHistory.ts +63 -63
  300. package/src/orchestrate/prisma/histories/transformPrismaGroupReviewHistory.ts +79 -79
  301. package/src/orchestrate/prisma/histories/transformPrismaSchemaHistory.ts +97 -97
  302. package/src/orchestrate/prisma/histories/transformPrismaSchemaReviewHistory.ts +126 -126
  303. package/src/orchestrate/prisma/index.ts +7 -7
  304. package/src/orchestrate/prisma/orchestratePrisma.ts +296 -296
  305. package/src/orchestrate/prisma/orchestratePrismaAuthorization.ts +173 -173
  306. package/src/orchestrate/prisma/orchestratePrismaAuthorizationReview.ts +183 -183
  307. package/src/orchestrate/prisma/orchestratePrismaComponent.ts +205 -205
  308. package/src/orchestrate/prisma/orchestratePrismaComponentReview.ts +205 -205
  309. package/src/orchestrate/prisma/orchestratePrismaCorrect.ts +265 -265
  310. package/src/orchestrate/prisma/orchestratePrismaGroup.ts +121 -121
  311. package/src/orchestrate/prisma/orchestratePrismaGroupReview.ts +141 -141
  312. package/src/orchestrate/prisma/orchestratePrismaSchema.ts +218 -218
  313. package/src/orchestrate/prisma/orchestratePrismaSchemaReview.ts +220 -220
  314. package/src/orchestrate/prisma/programmers/AutoBeDatabaseAuthorizationProgrammer.ts +86 -86
  315. package/src/orchestrate/prisma/programmers/AutoBeDatabaseAuthorizationReviewProgrammer.ts +103 -103
  316. package/src/orchestrate/prisma/programmers/AutoBeDatabaseComponentProgrammer.ts +80 -80
  317. package/src/orchestrate/prisma/programmers/AutoBeDatabaseComponentReviewProgrammer.ts +168 -168
  318. package/src/orchestrate/prisma/programmers/AutoBeDatabaseGroupProgrammer.ts +63 -63
  319. package/src/orchestrate/prisma/programmers/AutoBeDatabaseGroupReviewProgrammer.ts +210 -210
  320. package/src/orchestrate/prisma/programmers/AutoBeDatabaseModelProgrammer.ts +57 -57
  321. package/src/orchestrate/prisma/programmers/AutoBeDatabaseSchemaProgrammer.ts +92 -92
  322. package/src/orchestrate/prisma/structures/IAutoBeDatabaseAuthorizationApplication.ts +147 -147
  323. package/src/orchestrate/prisma/structures/IAutoBeDatabaseAuthorizationReviewApplication.ts +153 -153
  324. package/src/orchestrate/prisma/structures/IAutoBeDatabaseComponentApplication.ts +142 -142
  325. package/src/orchestrate/prisma/structures/IAutoBeDatabaseComponentReviewApplication.ts +151 -151
  326. package/src/orchestrate/prisma/structures/IAutoBeDatabaseCorrectApplication.ts +157 -157
  327. package/src/orchestrate/prisma/structures/IAutoBeDatabaseGroupApplication.ts +117 -117
  328. package/src/orchestrate/prisma/structures/IAutoBeDatabaseGroupReviewApplication.ts +154 -154
  329. package/src/orchestrate/prisma/structures/IAutoBeDatabaseSchemaApplication.ts +144 -144
  330. package/src/orchestrate/prisma/structures/IAutoBeDatabaseSchemaReviewApplication.ts +138 -138
  331. package/src/orchestrate/realize/histories/transformRealizeAuthorizationCorrectHistory.ts +89 -89
  332. package/src/orchestrate/realize/histories/transformRealizeAuthorizationWriteHistory.ts +45 -45
  333. package/src/orchestrate/realize/histories/transformRealizeCollectorCorrectHistory.ts +137 -137
  334. package/src/orchestrate/realize/histories/transformRealizeCollectorPlanHistory.ts +64 -64
  335. package/src/orchestrate/realize/histories/transformRealizeCollectorWriteHistory.ts +147 -147
  336. package/src/orchestrate/realize/histories/transformRealizeCorrectCastingHistory.ts +69 -69
  337. package/src/orchestrate/realize/histories/transformRealizeOperationCorrectHistory.ts +94 -94
  338. package/src/orchestrate/realize/histories/transformRealizeOperationWriteHistory.ts +127 -127
  339. package/src/orchestrate/realize/histories/transformRealizeTransformerCorrectHistory.ts +147 -147
  340. package/src/orchestrate/realize/histories/transformRealizeTransformerPlanHistory.ts +61 -61
  341. package/src/orchestrate/realize/histories/transformRealizeTransformerWriteHistory.ts +133 -133
  342. package/src/orchestrate/realize/histories/transformRealizeWriteMembershipHistory.ts +30 -30
  343. package/src/orchestrate/realize/index.ts +3 -3
  344. package/src/orchestrate/realize/internal/orchestrateRealizeCorrectCasting.ts +444 -444
  345. package/src/orchestrate/realize/internal/orchestrateRealizeCorrectOverall.ts +449 -449
  346. package/src/orchestrate/realize/orchestrateRealize.ts +143 -143
  347. package/src/orchestrate/realize/orchestrateRealizeAuthorizationCorrect.ts +207 -207
  348. package/src/orchestrate/realize/orchestrateRealizeAuthorizationWrite.ts +209 -209
  349. package/src/orchestrate/realize/orchestrateRealizeCollector.ts +41 -41
  350. package/src/orchestrate/realize/orchestrateRealizeCollectorCorrectCasting.ts +43 -43
  351. package/src/orchestrate/realize/orchestrateRealizeCollectorCorrectOverall.ts +157 -157
  352. package/src/orchestrate/realize/orchestrateRealizeCollectorPlan.ts +264 -264
  353. package/src/orchestrate/realize/orchestrateRealizeCollectorWrite.ts +225 -225
  354. package/src/orchestrate/realize/orchestrateRealizeOperation.ts +48 -48
  355. package/src/orchestrate/realize/orchestrateRealizeOperationCorrectCasting.ts +69 -69
  356. package/src/orchestrate/realize/orchestrateRealizeOperationCorrectOverall.ts +173 -173
  357. package/src/orchestrate/realize/orchestrateRealizeOperationWrite.ts +262 -262
  358. package/src/orchestrate/realize/orchestrateRealizeTransformer.ts +41 -41
  359. package/src/orchestrate/realize/orchestrateRealizeTransformerCorrectCasting.ts +38 -38
  360. package/src/orchestrate/realize/orchestrateRealizeTransformerCorrectOverall.ts +160 -160
  361. package/src/orchestrate/realize/orchestrateRealizeTransformerPlan.ts +254 -254
  362. package/src/orchestrate/realize/orchestrateRealizeTransformerWrite.ts +226 -226
  363. package/src/orchestrate/realize/programmers/AutoBeRealizeCollectorProgrammer.ts +424 -424
  364. package/src/orchestrate/realize/programmers/AutoBeRealizeOperationProgrammer.ts +409 -409
  365. package/src/orchestrate/realize/programmers/AutoBeRealizeTransformerProgrammer.ts +451 -451
  366. package/src/orchestrate/realize/programmers/compileRealizeFiles.ts +65 -65
  367. package/src/orchestrate/realize/structures/IAutoBeRealizeAuthorizationCorrectApplication.ts +119 -119
  368. package/src/orchestrate/realize/structures/IAutoBeRealizeAuthorizationWriteApplication.ts +167 -167
  369. package/src/orchestrate/realize/structures/IAutoBeRealizeCollectorCorrectApplication.ts +191 -191
  370. package/src/orchestrate/realize/structures/IAutoBeRealizeCollectorPlanApplication.ts +177 -177
  371. package/src/orchestrate/realize/structures/IAutoBeRealizeCollectorWriteApplication.ts +207 -207
  372. package/src/orchestrate/realize/structures/IAutoBeRealizeFunctionFailure.ts +11 -11
  373. package/src/orchestrate/realize/structures/IAutoBeRealizeOperationCorrectApplication.ts +134 -134
  374. package/src/orchestrate/realize/structures/IAutoBeRealizeOperationWriteApplication.ts +138 -138
  375. package/src/orchestrate/realize/structures/IAutoBeRealizeScenarioResult.ts +32 -32
  376. package/src/orchestrate/realize/structures/IAutoBeRealizeTransformerCorrectApplication.ts +248 -248
  377. package/src/orchestrate/realize/structures/IAutoBeRealizeTransformerPlanApplication.ts +150 -150
  378. package/src/orchestrate/realize/structures/IAutoBeRealizeTransformerWriteApplication.ts +278 -278
  379. package/src/orchestrate/realize/utils/AuthorizationFileSystem.ts +10 -10
  380. package/src/orchestrate/realize/utils/AutoBeRealizeAuthorizationFileSystem.ts +9 -9
  381. package/src/orchestrate/realize/utils/AutoBeRealizeAuthorizationReplaceImport.ts +62 -62
  382. package/src/orchestrate/realize/utils/InternalFileSystem.ts +12 -12
  383. package/src/orchestrate/realize/utils/ProviderFileSystem.ts +4 -4
  384. package/src/orchestrate/realize/utils/filterDiagnostics.ts +25 -25
  385. package/src/orchestrate/realize/utils/generateTS2339Hints.ts +54 -54
  386. package/src/orchestrate/realize/utils/getRealizeWriteImportStatements.ts +42 -42
  387. package/src/orchestrate/realize/utils/getRealizeWriteInputType.ts +88 -88
  388. package/src/orchestrate/realize/utils/printErrorHints.ts +54 -54
  389. package/src/orchestrate/test/compile/getTestArtifacts.ts +124 -124
  390. package/src/orchestrate/test/compile/getTestExternalDeclarations.ts +39 -39
  391. package/src/orchestrate/test/compile/getTestImportStatements.ts +27 -27
  392. package/src/orchestrate/test/experimental/orchestrateTestCorrect.ast +237 -237
  393. package/src/orchestrate/test/experimental/orchestrateTestWrite.ast +322 -322
  394. package/src/orchestrate/test/experimental/transformTestCorrectHistories.ast +52 -52
  395. package/src/orchestrate/test/histories/transformTestAuthorizeWriteHistory.ts +80 -80
  396. package/src/orchestrate/test/histories/transformTestCorrectOverallHistory.ts +116 -116
  397. package/src/orchestrate/test/histories/transformTestGenerationWriteHistory.ts +118 -118
  398. package/src/orchestrate/test/histories/transformTestOperationWriteHistory.ts +287 -287
  399. package/src/orchestrate/test/histories/transformTestPrepareWriteHistory.ts +95 -95
  400. package/src/orchestrate/test/histories/transformTestScenarioHistory.ts +120 -120
  401. package/src/orchestrate/test/histories/transformTestScenarioReviewHistory.ts +99 -99
  402. package/src/orchestrate/test/histories/transformTestValidateEvent.ts +11 -11
  403. package/src/orchestrate/test/index.ts +5 -5
  404. package/src/orchestrate/test/internal/orchestrateTestCorrectCasting.ts +96 -96
  405. package/src/orchestrate/test/internal/orchestrateTestCorrectOverall.ts +219 -219
  406. package/src/orchestrate/test/internal/orchestrateTestCorrectRequest.ts +206 -206
  407. package/src/orchestrate/test/orchestrateTest.ts +161 -161
  408. package/src/orchestrate/test/orchestrateTestAuthorize.ts +125 -125
  409. package/src/orchestrate/test/orchestrateTestAuthorizeWrite.ts +263 -263
  410. package/src/orchestrate/test/orchestrateTestGenerate.ts +121 -121
  411. package/src/orchestrate/test/orchestrateTestGenerateWrite.ts +211 -211
  412. package/src/orchestrate/test/orchestrateTestOperation.ts +133 -133
  413. package/src/orchestrate/test/orchestrateTestOperationWrite.ts +221 -221
  414. package/src/orchestrate/test/orchestrateTestPrepare.ts +117 -117
  415. package/src/orchestrate/test/orchestrateTestPrepareWrite.ts +264 -264
  416. package/src/orchestrate/test/orchestrateTestScenario.ts +290 -290
  417. package/src/orchestrate/test/orchestrateTestScenarioReview.ts +262 -262
  418. package/src/orchestrate/test/programmers/AutoBeTestAuthorizeProgrammer.ts +149 -149
  419. package/src/orchestrate/test/programmers/AutoBeTestFunctionProgrammer.ts +90 -90
  420. package/src/orchestrate/test/programmers/AutoBeTestGenerateProgrammer.ts +170 -170
  421. package/src/orchestrate/test/programmers/AutoBeTestOperationProgrammer.ts +168 -168
  422. package/src/orchestrate/test/programmers/AutoBeTestPrepareProgrammer.ts +261 -261
  423. package/src/orchestrate/test/programmers/AutoBeTestScenarioProgrammer.ts +316 -316
  424. package/src/orchestrate/test/structures/IAutoBeTestArtifacts.ts +8 -8
  425. package/src/orchestrate/test/structures/IAutoBeTestAuthorizationWriteApplication.ts +113 -113
  426. package/src/orchestrate/test/structures/IAutoBeTestAuthorizeWriteResult.ts +10 -10
  427. package/src/orchestrate/test/structures/IAutoBeTestCorrectOverallApplication.ts +134 -134
  428. package/src/orchestrate/test/structures/IAutoBeTestCorrectRequestApplication.ts +152 -152
  429. package/src/orchestrate/test/structures/IAutoBeTestFunction.ts +10 -10
  430. package/src/orchestrate/test/structures/IAutoBeTestFunctionFailure.ts +10 -10
  431. package/src/orchestrate/test/structures/IAutoBeTestGenerateProcedure.ts +15 -15
  432. package/src/orchestrate/test/structures/IAutoBeTestGenerationWriteApplication.ts +145 -145
  433. package/src/orchestrate/test/structures/IAutoBeTestOperationProcedure.ts +17 -17
  434. package/src/orchestrate/test/structures/IAutoBeTestOperationWriteApplication.ts +162 -162
  435. package/src/orchestrate/test/structures/IAutoBeTestPrepareCorrectOverallApplication.ts +194 -194
  436. package/src/orchestrate/test/structures/IAutoBeTestPrepareProcedure.ts +8 -8
  437. package/src/orchestrate/test/structures/IAutoBeTestPrepareWriteApplication.ts +147 -147
  438. package/src/orchestrate/test/structures/IAutoBeTestProcedure.ts +10 -10
  439. package/src/orchestrate/test/structures/IAutoBeTestScenarioApplication.ts +105 -105
  440. package/src/orchestrate/test/structures/IAutoBeTestScenarioArtifacts.ts +8 -8
  441. package/src/orchestrate/test/structures/IAutoBeTestScenarioAuthorizationActor.ts +7 -7
  442. package/src/orchestrate/test/structures/IAutoBeTestScenarioReviewApplication.ts +133 -133
  443. package/src/orchestrate/test/utils/getPrerequisites.ts +51 -51
  444. package/src/orchestrate/test/utils/getReferenceIds.ts +26 -26
  445. package/src/orchestrate/test/utils/insertScriptToTestResult.ts +14 -14
  446. package/src/structures/IAutoBeConfig.ts +110 -110
  447. package/src/structures/IAutoBeOrchestrateHistory.ts +44 -44
  448. package/src/structures/IAutoBeProps.ts +102 -102
  449. package/src/structures/IAutoBeVendor.ts +113 -113
  450. package/src/utils/AutoBePreliminaryExhaustedError.ts +30 -30
  451. package/src/utils/AutoBeTimeoutError.ts +35 -35
  452. package/src/utils/EmbeddingProvider.ts +4 -4
  453. package/src/utils/LocalEmbeddingProvider.ts +145 -145
  454. package/src/utils/RAGRetrieval.ts +411 -411
  455. package/src/utils/TimedConversation.ts +125 -125
  456. package/src/utils/backoffRetry.ts +169 -169
  457. package/src/utils/divideArray.ts +35 -35
  458. package/src/utils/emplaceMap.ts +31 -31
  459. package/src/utils/executeCachedBatch.ts +67 -67
  460. package/src/utils/forceRetry.ts +15 -15
  461. package/src/utils/getEmbedder.ts +16 -16
  462. package/src/utils/parseTextFunctionCall.ts +437 -437
  463. package/src/utils/predicateStateMessage.ts +131 -131
  464. package/src/utils/validateEmptyCode.ts +73 -73
  465. package/src/utils/validateEnglishOnly.ts +224 -224
  466. package/README.md +0 -261
@@ -1,961 +1,961 @@
1
- import { AutoBeAnalyze } from "@autobe/interface";
2
-
3
- /**
4
- * Fixed 6-category SRS document structure template.
5
- *
6
- * Defines the authoritative structure for all analysis documents. LLM is no
7
- * longer responsible for deciding file count, file names, or module/unit
8
- * layout. Instead, it focuses solely on content generation within this fixed
9
- * skeleton.
10
- *
11
- * Hierarchy: Category (file) -> Module (#) -> Unit (##) -> Section (###)
12
- *
13
- * @author Juntak
14
- */
15
-
16
- // ─────────────────────────────────────────────
17
- // Types
18
- // ─────────────────────────────────────────────
19
-
20
- export type FixedAnalyzeTemplateCategoryId =
21
- | "00-toc"
22
- | "01-actors-and-auth"
23
- | "02-domain-model"
24
- | "03-functional-requirements"
25
- | "04-business-rules"
26
- | "05-non-functional";
27
-
28
- export interface FixedAnalyzeTemplateFileTemplate {
29
- categoryId: FixedAnalyzeTemplateCategoryId;
30
- /** Currently equals categoryId; reserved for future per-category splits. */
31
- fileId: string;
32
- filename: `${string}.md`;
33
- documentType: string;
34
- description: string;
35
- downstreamPhase: string;
36
- modules: FixedAnalyzeTemplateModuleTemplate[];
37
- /** Regex patterns that must NOT appear in this file's sections. */
38
- forbiddenPatterns: RegExp[];
39
- }
40
-
41
- export interface FixedAnalyzeTemplateModuleTemplate {
42
- index: number;
43
- title: string;
44
- purpose: string;
45
- unitStrategy: FixedAnalyzeTemplateUnitStrategy;
46
- }
47
-
48
- export type FixedAnalyzeTemplateUnitStrategy =
49
- | FixedAnalyzeTemplateFixedUnits
50
- | FixedAnalyzeTemplatePerEntityUnits
51
- | FixedAnalyzeTemplatePerActorUnits
52
- | FixedAnalyzeTemplatePerEntityGroupUnits;
53
-
54
- export interface FixedAnalyzeTemplateFixedUnits {
55
- type: "fixed";
56
- units: FixedAnalyzeTemplateUnitTemplate[];
57
- }
58
- export interface FixedAnalyzeTemplatePerEntityUnits {
59
- type: "perEntity";
60
- unitTemplate: FixedAnalyzeTemplateUnitTemplate;
61
- }
62
- export interface FixedAnalyzeTemplatePerActorUnits {
63
- type: "perActor";
64
- unitTemplate: FixedAnalyzeTemplateUnitTemplate;
65
- }
66
- export interface FixedAnalyzeTemplatePerEntityGroupUnits {
67
- type: "perEntityGroup";
68
- unitTemplate: FixedAnalyzeTemplateUnitTemplate;
69
- }
70
-
71
- export interface FixedAnalyzeTemplateUnitTemplate {
72
- titlePattern: string;
73
- purposePattern: string;
74
- keywords: string[];
75
- }
76
-
77
- // ─────────────────────────────────────────────
78
- // Feature types (conditional module activation)
79
- // ─────────────────────────────────────────────
80
-
81
- export type FixedAnalyzeTemplateFeatureId =
82
- | "real-time"
83
- | "external-integration"
84
- | "file-storage";
85
-
86
- export interface FixedAnalyzeTemplateFeature {
87
- id: FixedAnalyzeTemplateFeatureId;
88
- /** Provider names for external-integration (e.g., ["stripe", "sendgrid"]) */
89
- providers?: string[];
90
- }
91
-
92
- // ─────────────────────────────────────────────
93
- // Canonical source mapping
94
- // ─────────────────────────────────────────────
95
-
96
- export const FIXED_ANALYZE_TEMPLATE_CANONICAL_SOURCE: Record<
97
- string,
98
- FixedAnalyzeTemplateCategoryId
99
- > = {
100
- "domain-concepts": "02-domain-model",
101
- "error-conditions": "04-business-rules",
102
- permissions: "01-actors-and-auth",
103
- };
104
-
105
- // ─────────────────────────────────────────────
106
- // 6-file template definition
107
- // ─────────────────────────────────────────────
108
-
109
- export const FIXED_ANALYZE_TEMPLATE: FixedAnalyzeTemplateFileTemplate[] = [
110
- // ── 00-toc ──
111
- {
112
- categoryId: "00-toc",
113
- fileId: "00-toc",
114
- filename: "00-toc.md",
115
- documentType: "overview",
116
- description: "Project summary, scope, glossary, and assumptions",
117
- downstreamPhase: "project-setup",
118
- forbiddenPatterns: [],
119
- modules: [
120
- {
121
- index: 0,
122
- title: "Project Summary",
123
- purpose: "High-level vision, goals, and scope of the project.",
124
- unitStrategy: {
125
- type: "fixed",
126
- units: [
127
- {
128
- titlePattern: "Vision and Goals",
129
- purposePattern:
130
- "Define the project vision, business objectives, and success criteria.",
131
- keywords: [
132
- "vision",
133
- "goals",
134
- "objectives",
135
- "success-criteria",
136
- "business-value",
137
- ],
138
- },
139
- {
140
- titlePattern: "Scope Definition",
141
- purposePattern:
142
- "Define what is in-scope and out-of-scope for this project.",
143
- keywords: [
144
- "scope",
145
- "boundaries",
146
- "in-scope",
147
- "out-of-scope",
148
- "constraints",
149
- ],
150
- },
151
- ],
152
- },
153
- },
154
- {
155
- index: 1,
156
- title: "Document Map and Canonical Sources",
157
- purpose:
158
- "Navigation index and authoritative source declarations for cross-file references.",
159
- unitStrategy: {
160
- type: "fixed",
161
- units: [
162
- {
163
- titlePattern: "Document Map",
164
- purposePattern:
165
- "Hyperlinked file index with role summaries and downstream phase mapping.",
166
- keywords: [
167
- "document-map",
168
- "navigation",
169
- "file-index",
170
- "hyperlink",
171
- ],
172
- },
173
- {
174
- titlePattern: "Canonical Source Declaration",
175
- purposePattern:
176
- "Declare which file is the authoritative source for each data type and the required reference format.",
177
- keywords: [
178
- "canonical-source",
179
- "reference-format",
180
- "backtick",
181
- "authority",
182
- ],
183
- },
184
- ],
185
- },
186
- },
187
- {
188
- index: 2,
189
- title: "Glossary and Assumptions",
190
- purpose: "Domain terminology definitions and project assumptions.",
191
- unitStrategy: {
192
- type: "fixed",
193
- units: [
194
- {
195
- titlePattern: "Domain Glossary",
196
- purposePattern:
197
- "Define domain-specific terms used throughout the documents.",
198
- keywords: [
199
- "glossary",
200
- "terminology",
201
- "definitions",
202
- "domain-language",
203
- ],
204
- },
205
- {
206
- titlePattern: "Assumptions and Constraints",
207
- purposePattern:
208
- "List project assumptions and environmental constraints.",
209
- keywords: [
210
- "assumptions",
211
- "constraints",
212
- "prerequisites",
213
- "limitations",
214
- ],
215
- },
216
- ],
217
- },
218
- },
219
- ],
220
- },
221
-
222
- // ── 01-actors-and-auth ──
223
- {
224
- categoryId: "01-actors-and-auth",
225
- fileId: "01-actors-and-auth",
226
- filename: "01-actors-and-auth.md",
227
- documentType: "actors-and-auth",
228
- description:
229
- "Actor definitions, permission matrix, authentication, session, account lifecycle",
230
- downstreamPhase: "auth-middleware",
231
- forbiddenPatterns: [
232
- /\|\s*(?:type|required|default|constraint)\s*\|/i, // Entity attribute tables → 02
233
- /```yaml\s*\n\s*entity:/i, // Entity YAML specs → 02
234
- ],
235
- modules: [
236
- {
237
- index: 0,
238
- title: "Actor Definitions",
239
- purpose:
240
- "Define all user actor types with their identity, permissions, and access boundaries.",
241
- unitStrategy: {
242
- type: "perActor",
243
- unitTemplate: {
244
- titlePattern: "{name} Actor",
245
- purposePattern:
246
- "Define the {name} actor's identity, permissions, and access boundaries. Do NOT describe specific operations (03), data isolation policies (05), or domain concepts (02).",
247
- keywords: ["actor", "role", "permissions", "access-boundary"],
248
- },
249
- },
250
- },
251
- {
252
- index: 1,
253
- title: "Authentication Flows",
254
- purpose:
255
- "Registration, login, logout, and session management from a user perspective.",
256
- unitStrategy: {
257
- type: "fixed",
258
- units: [
259
- {
260
- titlePattern: "Registration and Login",
261
- purposePattern:
262
- "Define user registration and login flows including validation and error handling.",
263
- keywords: ["registration", "login", "authentication"],
264
- },
265
- {
266
- titlePattern: "Session and Logout",
267
- purposePattern:
268
- "Define session behavior and logout from a user perspective.",
269
- keywords: ["session", "logout", "account-security"],
270
- },
271
- ],
272
- },
273
- },
274
- {
275
- index: 2,
276
- title: "Account Lifecycle",
277
- purpose: "Account creation, deletion, and password management.",
278
- unitStrategy: {
279
- type: "fixed",
280
- units: [
281
- {
282
- titlePattern: "Account Management",
283
- purposePattern:
284
- "Define how users create accounts, delete accounts, and change passwords.",
285
- keywords: [
286
- "account-creation",
287
- "account-deletion",
288
- "password-change",
289
- ],
290
- },
291
- ],
292
- },
293
- },
294
- ],
295
- },
296
-
297
- // ── 02-domain-model ──
298
- {
299
- categoryId: "02-domain-model",
300
- fileId: "02-domain-model",
301
- filename: "02-domain-model.md",
302
- documentType: "domain-model",
303
- description:
304
- "Business concepts, relationships, and states from user perspective",
305
- downstreamPhase: "database-design",
306
- forbiddenPatterns: [
307
- /\b(?:GET|POST|PUT|PATCH|DELETE)\s+\/\w+/i, // API endpoint defs → 03
308
- /\bRequest\s+Body\b/i,
309
- /\bResponse\s+(?:Body|Schema)\b/i,
310
- ],
311
- modules: [
312
- {
313
- index: 0,
314
- title: "Domain Concepts",
315
- purpose:
316
- "Describe what each concept means in the business domain and its key attributes.",
317
- unitStrategy: {
318
- type: "perEntity",
319
- unitTemplate: {
320
- titlePattern: "{name} Concept",
321
- purposePattern:
322
- "Describe what {name} represents in the business domain and its key attributes. Do NOT describe operations or workflows — those belong in 03-functional-requirements.",
323
- keywords: ["concept", "domain", "business-meaning", "attributes"],
324
- },
325
- },
326
- },
327
- {
328
- index: 1,
329
- title: "Domain Relationships",
330
- purpose:
331
- "Describe how concepts relate to each other from a business perspective.",
332
- unitStrategy: {
333
- type: "fixed",
334
- units: [
335
- {
336
- titlePattern: "Conceptual Relationships",
337
- purposePattern:
338
- "Describe how concepts relate to each other in business terms.",
339
- keywords: [
340
- "relationship",
341
- "association",
342
- "belongs-to",
343
- "has-many",
344
- "ownership",
345
- ],
346
- },
347
- {
348
- titlePattern: "Lifecycle and Retention",
349
- purposePattern:
350
- "Describe concept lifecycle states and transitions only. Detailed retention/recovery policies belong in 05-non-functional. Operation details belong in 03-functional-requirements.",
351
- keywords: [
352
- "lifecycle",
353
- "retention",
354
- "archival",
355
- "deletion-policy",
356
- "recovery",
357
- ],
358
- },
359
- ],
360
- },
361
- },
362
- {
363
- index: 2,
364
- title: "Business Categories and State Flows",
365
- purpose:
366
- "Business category classifications and state flow definitions.",
367
- unitStrategy: {
368
- type: "fixed",
369
- units: [
370
- {
371
- titlePattern: "Business Category Definitions",
372
- purposePattern:
373
- "Define all business category classifications with their allowed values and descriptions.",
374
- keywords: [
375
- "business-category",
376
- "classification",
377
- "allowed-values",
378
- "status-type",
379
- ],
380
- },
381
- {
382
- titlePattern: "State Transitions",
383
- purposePattern:
384
- "Define valid state transition paths for stateful concepts.",
385
- keywords: [
386
- "state-flow",
387
- "transition",
388
- "workflow",
389
- "status-change",
390
- ],
391
- },
392
- ],
393
- },
394
- },
395
- ],
396
- },
397
-
398
- // ── 03-functional-requirements ──
399
- {
400
- categoryId: "03-functional-requirements",
401
- fileId: "03-functional-requirements",
402
- filename: "03-functional-requirements.md",
403
- documentType: "functional-requirements",
404
- description:
405
- "What operations users can perform, use cases, business workflows",
406
- downstreamPhase: "interface-design",
407
- forbiddenPatterns: [
408
- /\b(?:GET|POST|PUT|PATCH|DELETE)\s+\/\w+/i, // API endpoint defs FORBIDDEN in requirements
409
- /\bHTTP\s+[1-5]\d{2}\b/i, // HTTP status codes FORBIDDEN
410
- /\bRequest\s+(?:Body|Example)\b/i, // Request schemas FORBIDDEN
411
- /\bResponse\s+(?:Body|Example|Schema)\b/i, // Response schemas FORBIDDEN
412
- /```json\s*\n\s*\{/i, // JSON examples FORBIDDEN
413
- /\b(?:CREATE\s+)?(?:UNIQUE\s+)?INDEX\b/i, // Index defs → 02
414
- /\bON\s+DELETE\s+(?:CASCADE|SET\s+NULL|RESTRICT)\b/i, // Cascade rules → 02
415
- /```yaml\s*\n\s*errors:/i, // Error catalog YAML → 04
416
- ],
417
- modules: [
418
- {
419
- index: 0,
420
- title: "Core Business Operations",
421
- purpose: "What the system must do for each business concept.",
422
- unitStrategy: {
423
- type: "perEntity",
424
- unitTemplate: {
425
- titlePattern: "{name} Operations",
426
- purposePattern:
427
- "Define business operations for {name}: what create, read, update, delete, and list operations must accomplish from a business perspective.",
428
- keywords: [
429
- "operation",
430
- "business-logic",
431
- "use-case",
432
- "requirement",
433
- "behavior",
434
- "functionality",
435
- ],
436
- },
437
- },
438
- },
439
- {
440
- index: 1,
441
- title: "Error Scenarios and Edge Cases",
442
- purpose:
443
- "Business-level error scenarios, edge case coverage, and expected system behaviors for exceptional conditions.",
444
- unitStrategy: {
445
- type: "perEntity",
446
- unitTemplate: {
447
- titlePattern: "{name} Error Scenarios",
448
- purposePattern:
449
- "Define business error conditions, edge cases, and expected system behaviors for all {name} operations.",
450
- keywords: [
451
- "error-scenario",
452
- "edge-case",
453
- "validation-rule",
454
- "conflict-resolution",
455
- "boundary-condition",
456
- ],
457
- },
458
- },
459
- },
460
- {
461
- index: 2,
462
- title: "End-to-End User Scenarios",
463
- purpose:
464
- "Cross-domain user scenarios that span multiple concepts, describing complete user journeys.",
465
- unitStrategy: {
466
- type: "fixed",
467
- units: [
468
- {
469
- titlePattern: "Cross-Domain User Scenarios",
470
- purposePattern:
471
- "Define end-to-end user scenarios that span multiple concepts, describing complete user journeys from start to finish.",
472
- keywords: [
473
- "user-scenario",
474
- "end-to-end",
475
- "multi-step",
476
- "user-journey",
477
- ],
478
- },
479
- ],
480
- },
481
- },
482
- ],
483
- },
484
-
485
- // ── 04-business-rules ──
486
- {
487
- categoryId: "04-business-rules",
488
- fileId: "04-business-rules",
489
- filename: "04-business-rules.md",
490
- documentType: "business-rules",
491
- description:
492
- "Business rules, validation constraints, data browsing expectations, error scenarios",
493
- downstreamPhase: "service-layer",
494
- forbiddenPatterns: [
495
- /```yaml\s*\n\s*entity:/i, // Entity YAML specs → 02
496
- /\b(?:GET|POST|PUT|PATCH|DELETE)\s+\/\w+/i, // API endpoint defs → 03
497
- ],
498
- modules: [
499
- {
500
- index: 0,
501
- title: "Domain Business Rules",
502
- purpose:
503
- "Per-concept business rules, validation logic, and domain constraints.",
504
- unitStrategy: {
505
- type: "perEntity",
506
- unitTemplate: {
507
- titlePattern: "{name} Rules",
508
- purposePattern:
509
- "Define validation rules and domain constraints for {name}. Do NOT repeat data isolation (05), lifecycle states (02), or operation flows (03).",
510
- keywords: [
511
- "business-rule",
512
- "validation",
513
- "constraint",
514
- "domain-logic",
515
- ],
516
- },
517
- },
518
- },
519
- {
520
- index: 1,
521
- title: "Data Browsing Expectations",
522
- purpose:
523
- "Business expectations for how users browse, find, and navigate through lists of data.",
524
- unitStrategy: {
525
- type: "fixed",
526
- units: [
527
- {
528
- titlePattern: "List Browsing Expectations",
529
- purposePattern:
530
- "Define business expectations for how users find, filter, and browse lists.",
531
- keywords: ["filtering", "sorting", "pagination"],
532
- },
533
- ],
534
- },
535
- },
536
- {
537
- index: 2,
538
- title: "Error Conditions",
539
- purpose: "Business error scenarios and how the system should respond.",
540
- unitStrategy: {
541
- type: "fixed",
542
- units: [
543
- {
544
- titlePattern: "Error Scenarios",
545
- purposePattern:
546
- "Describe error conditions and expected system responses in natural language.",
547
- keywords: [
548
- "error-scenario",
549
- "rejection",
550
- "failure-case",
551
- "exception",
552
- ],
553
- },
554
- ],
555
- },
556
- },
557
- ],
558
- },
559
-
560
- // ── 05-non-functional ──
561
- {
562
- categoryId: "05-non-functional",
563
- fileId: "05-non-functional",
564
- filename: "05-non-functional.md",
565
- documentType: "non-functional",
566
- description: "Data ownership, privacy, retention, and recovery policies",
567
- downstreamPhase: "test-infra",
568
- forbiddenPatterns: [
569
- /\b(?:GET|POST|PUT|PATCH|DELETE)\s+\/\w+/i, // API endpoint defs → 03
570
- /```yaml\s*\n\s*entity:/i, // Entity YAML specs → 02
571
- ],
572
- modules: [
573
- {
574
- index: 0,
575
- title: "Data Policies",
576
- purpose:
577
- "Data ownership, privacy, retention, and recovery policies from a business perspective.",
578
- unitStrategy: {
579
- type: "fixed",
580
- units: [
581
- {
582
- titlePattern: "Data Ownership and Privacy",
583
- purposePattern:
584
- "Define who owns what data, who can access it, and privacy boundaries between users.",
585
- keywords: [
586
- "data-isolation",
587
- "ownership",
588
- "access-control",
589
- "privacy",
590
- ],
591
- },
592
- {
593
- titlePattern: "Data Retention and Recovery",
594
- purposePattern:
595
- "Define what happens to deleted data, how long it is retained, and how users can recover it.",
596
- keywords: [
597
- "soft-delete",
598
- "retention",
599
- "recovery",
600
- "permanent-deletion",
601
- ],
602
- },
603
- ],
604
- },
605
- },
606
- ],
607
- },
608
- ];
609
-
610
- // ─────────────────────────────────────────────
611
- // Conditional modules (activated by features)
612
- // ─────────────────────────────────────────────
613
-
614
- export const FIXED_ANALYZE_TEMPLATE_CONDITIONAL_MODULES: Record<
615
- FixedAnalyzeTemplateFeatureId,
616
- Array<{
617
- targetCategory: FixedAnalyzeTemplateCategoryId;
618
- module: FixedAnalyzeTemplateModuleTemplate;
619
- }>
620
- > = {
621
- "real-time": [
622
- {
623
- targetCategory: "03-functional-requirements",
624
- module: {
625
- index: 100, // appended after base modules
626
- title: "Real-time Events",
627
- purpose:
628
- "WebSocket/SSE event definitions and subscription specifications.",
629
- unitStrategy: {
630
- type: "perEntity",
631
- unitTemplate: {
632
- titlePattern: "{name} Events",
633
- purposePattern:
634
- "Define real-time events for {name} changes, including event payload and subscription rules.",
635
- keywords: [
636
- "websocket",
637
- "sse",
638
- "event",
639
- "subscription",
640
- "real-time",
641
- ],
642
- },
643
- },
644
- },
645
- },
646
- {
647
- targetCategory: "05-non-functional",
648
- module: {
649
- index: 100,
650
- title: "Real-time Communication",
651
- purpose:
652
- "WebSocket/SSE connection policies and performance requirements.",
653
- unitStrategy: {
654
- type: "fixed",
655
- units: [
656
- {
657
- titlePattern: "WebSocket Security and Performance",
658
- purposePattern:
659
- "Define connection limits, heartbeat intervals, reconnection policies, and security requirements for real-time communication.",
660
- keywords: [
661
- "websocket-security",
662
- "connection-limit",
663
- "heartbeat",
664
- "reconnection",
665
- ],
666
- },
667
- ],
668
- },
669
- },
670
- },
671
- ],
672
- "external-integration": [
673
- {
674
- targetCategory: "03-functional-requirements",
675
- module: {
676
- index: 101,
677
- title: "External Integrations",
678
- purpose:
679
- "Third-party API contracts, webhook handlers, and integration specifications.",
680
- unitStrategy: {
681
- type: "fixed",
682
- units: [
683
- {
684
- titlePattern: "Integration Contracts",
685
- purposePattern:
686
- "Define external API dependencies, authentication methods, request/response formats, and error handling for third-party integrations.",
687
- keywords: [
688
- "integration",
689
- "third-party",
690
- "webhook",
691
- "oauth-provider",
692
- "payment",
693
- ],
694
- },
695
- ],
696
- },
697
- },
698
- },
699
- {
700
- targetCategory: "04-business-rules",
701
- module: {
702
- index: 100,
703
- title: "Integration Error Handling",
704
- purpose: "Error handling and retry policies for external integrations.",
705
- unitStrategy: {
706
- type: "fixed",
707
- units: [
708
- {
709
- titlePattern: "Integration Failure Policies",
710
- purposePattern:
711
- "Define retry strategies, circuit breaker policies, fallback behavior, and error escalation for external service failures.",
712
- keywords: [
713
- "retry",
714
- "circuit-breaker",
715
- "fallback",
716
- "integration-error",
717
- ],
718
- },
719
- ],
720
- },
721
- },
722
- },
723
- {
724
- targetCategory: "05-non-functional",
725
- module: {
726
- index: 101,
727
- title: "External Dependency SLOs",
728
- purpose:
729
- "Service level objectives for external dependency availability.",
730
- unitStrategy: {
731
- type: "fixed",
732
- units: [
733
- {
734
- titlePattern: "External Dependency SLOs",
735
- purposePattern:
736
- "Define availability expectations, timeout thresholds, and degradation policies for external service dependencies.",
737
- keywords: [
738
- "dependency-slo",
739
- "timeout",
740
- "degradation",
741
- "external-availability",
742
- ],
743
- },
744
- ],
745
- },
746
- },
747
- },
748
- ],
749
- "file-storage": [
750
- {
751
- targetCategory: "03-functional-requirements",
752
- module: {
753
- index: 103,
754
- title: "File Storage",
755
- purpose:
756
- "File upload capabilities, media processing, and storage requirements.",
757
- unitStrategy: {
758
- type: "fixed",
759
- units: [
760
- {
761
- titlePattern: "File Upload and Management",
762
- purposePattern:
763
- "Define file upload capabilities, supported formats, processing requirements, and access control for stored files.",
764
- keywords: ["file-upload", "media", "storage", "attachment"],
765
- },
766
- ],
767
- },
768
- },
769
- },
770
- {
771
- targetCategory: "04-business-rules",
772
- module: {
773
- index: 102,
774
- title: "File Validation Rules",
775
- purpose: "Validation rules and policies for file uploads and storage.",
776
- unitStrategy: {
777
- type: "fixed",
778
- units: [
779
- {
780
- titlePattern: "File Validation and Policies",
781
- purposePattern:
782
- "Define file type restrictions, virus scanning requirements, content validation, and retention policies for uploaded files.",
783
- keywords: [
784
- "file-validation",
785
- "virus-scan",
786
- "content-type",
787
- "retention",
788
- ],
789
- },
790
- ],
791
- },
792
- },
793
- },
794
- {
795
- targetCategory: "05-non-functional",
796
- module: {
797
- index: 103,
798
- title: "Storage Capacity",
799
- purpose: "Storage capacity planning and CDN requirements.",
800
- unitStrategy: {
801
- type: "fixed",
802
- units: [
803
- {
804
- titlePattern: "Storage Capacity Requirements",
805
- purposePattern:
806
- "Define storage requirements and capacity planning for file storage.",
807
- keywords: ["storage-capacity", "cdn", "capacity"],
808
- },
809
- ],
810
- },
811
- },
812
- },
813
- ],
814
- };
815
-
816
- // ─────────────────────────────────────────────
817
- // Helper functions
818
- // ─────────────────────────────────────────────
819
-
820
- /**
821
- * Expand a module's unit strategy into concrete unit templates based on the
822
- * domain's entities and actors.
823
- */
824
- export const expandFixedAnalyzeTemplateUnits = (
825
- module: FixedAnalyzeTemplateModuleTemplate,
826
- entities: Array<{ name: string }>,
827
- actors: Array<{ name: string }>,
828
- ): FixedAnalyzeTemplateUnitTemplate[] => {
829
- const strategy = module.unitStrategy;
830
- switch (strategy.type) {
831
- case "fixed":
832
- return strategy.units;
833
- case "perEntity":
834
- return entities.map((e) => ({
835
- titlePattern: strategy.unitTemplate.titlePattern.replace(
836
- "{name}",
837
- e.name,
838
- ),
839
- purposePattern: strategy.unitTemplate.purposePattern.replace(
840
- "{name}",
841
- e.name,
842
- ),
843
- keywords: [...strategy.unitTemplate.keywords, e.name.toLowerCase()],
844
- }));
845
- case "perActor":
846
- return actors.map((a) => ({
847
- titlePattern: strategy.unitTemplate.titlePattern.replace(
848
- "{name}",
849
- a.name,
850
- ),
851
- purposePattern: strategy.unitTemplate.purposePattern.replace(
852
- "{name}",
853
- a.name,
854
- ),
855
- keywords: [...strategy.unitTemplate.keywords, a.name.toLowerCase()],
856
- }));
857
- case "perEntityGroup":
858
- // For now, entity groups = entities; can be refined later
859
- return entities.map((e) => ({
860
- titlePattern: strategy.unitTemplate.titlePattern.replace(
861
- "{name}",
862
- e.name,
863
- ),
864
- purposePattern: strategy.unitTemplate.purposePattern.replace(
865
- "{name}",
866
- e.name,
867
- ),
868
- keywords: [...strategy.unitTemplate.keywords, e.name.toLowerCase()],
869
- }));
870
- }
871
- };
872
-
873
- /**
874
- * Build an expanded template by merging base TEMPLATE with conditional modules
875
- * activated by the given features.
876
- *
877
- * Module indices are renumbered sequentially per file after merging.
878
- */
879
- export const buildFixedAnalyzeExpandedTemplate = (
880
- features: FixedAnalyzeTemplateFeature[],
881
- ): FixedAnalyzeTemplateFileTemplate[] => {
882
- if (features.length === 0) return FIXED_ANALYZE_TEMPLATE;
883
-
884
- const activeFeatureIds = new Set(features.map((f) => f.id));
885
- const extraModules = new Map<
886
- FixedAnalyzeTemplateCategoryId,
887
- FixedAnalyzeTemplateModuleTemplate[]
888
- >();
889
-
890
- for (const featureId of activeFeatureIds) {
891
- const conditionals = FIXED_ANALYZE_TEMPLATE_CONDITIONAL_MODULES[featureId];
892
- for (const { targetCategory, module } of conditionals) {
893
- const existing = extraModules.get(targetCategory) ?? [];
894
- existing.push(module);
895
- extraModules.set(targetCategory, existing);
896
- }
897
- }
898
-
899
- return FIXED_ANALYZE_TEMPLATE.map((fileTemplate) => {
900
- const extras = extraModules.get(fileTemplate.categoryId);
901
- if (!extras || extras.length === 0) return fileTemplate;
902
-
903
- const mergedModules = [...fileTemplate.modules, ...extras].map((m, i) => ({
904
- ...m,
905
- index: i,
906
- }));
907
-
908
- return { ...fileTemplate, modules: mergedModules };
909
- });
910
- };
911
-
912
- /**
913
- * Generate AutoBeAnalyze.IFile.Scenario objects from the fixed template,
914
- * optionally expanded with conditional modules based on features. Called after
915
- * LLM returns actors/entities/features in the scenario phase.
916
- */
917
- export const buildFixedAnalyzeScenarioFiles = (
918
- _prefix: string,
919
- features: FixedAnalyzeTemplateFeature[] = [],
920
- ): AutoBeAnalyze.IFileScenario[] =>
921
- buildFixedAnalyzeExpandedTemplate(features).map((t) => ({
922
- reason: `Fixed SRS structure: ${t.description}`,
923
- filename: t.filename,
924
- documentType: t.documentType,
925
- outline: t.modules.map((m) => m.title),
926
- audience: "general",
927
- detailLevel: "detailed specification",
928
- constraints: [
929
- `File scope: ${t.description}`,
930
- `Downstream phase: ${t.downstreamPhase}`,
931
- ],
932
- }));
933
-
934
- /** Deterministically generate the Document Map unit content for 00-toc. */
935
- export const buildFixedAnalyzeDocumentMapContent = (
936
- files: FixedAnalyzeTemplateFileTemplate[],
937
- ): string => {
938
- const rows = files
939
- .map(
940
- (f) =>
941
- `| [${f.filename}](./${f.filename}) | ${f.description} | ${f.downstreamPhase} |`,
942
- )
943
- .join("\n");
944
- return `| File | Role | Downstream |\n|------|------|------------|\n${rows}`;
945
- };
946
-
947
- /** Deterministically generate the Canonical Source Declaration unit content. */
948
- export const buildFixedAnalyzeCanonicalSourceContent = (): string => {
949
- const header = `Each type of information has one authoritative location. Other files should reference these canonical sources.\n`;
950
- const table = [
951
- "| Information Type | Canonical File |",
952
- "|------------------|---------------|",
953
- "| Domain concepts | [02-domain-model.md](./02-domain-model.md) |",
954
- "| Error conditions | [04-business-rules.md](./04-business-rules.md) |",
955
- "| Permissions | [01-actors-and-auth.md](./01-actors-and-auth.md) |",
956
- "| Actor definitions | [01-actors-and-auth.md](./01-actors-and-auth.md) |",
957
- "| Filtering/pagination rules | [04-business-rules.md](./04-business-rules.md) |",
958
- "| Data retention/recovery | [05-non-functional.md](./05-non-functional.md) |",
959
- ].join("\n");
960
- return `${header}\n${table}`;
961
- };
1
+ import { AutoBeAnalyze } from "@autobe/interface";
2
+
3
+ /**
4
+ * Fixed 6-category SRS document structure template.
5
+ *
6
+ * Defines the authoritative structure for all analysis documents. LLM is no
7
+ * longer responsible for deciding file count, file names, or module/unit
8
+ * layout. Instead, it focuses solely on content generation within this fixed
9
+ * skeleton.
10
+ *
11
+ * Hierarchy: Category (file) -> Module (#) -> Unit (##) -> Section (###)
12
+ *
13
+ * @author Juntak
14
+ */
15
+
16
+ // ─────────────────────────────────────────────
17
+ // Types
18
+ // ─────────────────────────────────────────────
19
+
20
+ export type FixedAnalyzeTemplateCategoryId =
21
+ | "00-toc"
22
+ | "01-actors-and-auth"
23
+ | "02-domain-model"
24
+ | "03-functional-requirements"
25
+ | "04-business-rules"
26
+ | "05-non-functional";
27
+
28
+ export interface FixedAnalyzeTemplateFileTemplate {
29
+ categoryId: FixedAnalyzeTemplateCategoryId;
30
+ /** Currently equals categoryId; reserved for future per-category splits. */
31
+ fileId: string;
32
+ filename: `${string}.md`;
33
+ documentType: string;
34
+ description: string;
35
+ downstreamPhase: string;
36
+ modules: FixedAnalyzeTemplateModuleTemplate[];
37
+ /** Regex patterns that must NOT appear in this file's sections. */
38
+ forbiddenPatterns: RegExp[];
39
+ }
40
+
41
+ export interface FixedAnalyzeTemplateModuleTemplate {
42
+ index: number;
43
+ title: string;
44
+ purpose: string;
45
+ unitStrategy: FixedAnalyzeTemplateUnitStrategy;
46
+ }
47
+
48
+ export type FixedAnalyzeTemplateUnitStrategy =
49
+ | FixedAnalyzeTemplateFixedUnits
50
+ | FixedAnalyzeTemplatePerEntityUnits
51
+ | FixedAnalyzeTemplatePerActorUnits
52
+ | FixedAnalyzeTemplatePerEntityGroupUnits;
53
+
54
+ export interface FixedAnalyzeTemplateFixedUnits {
55
+ type: "fixed";
56
+ units: FixedAnalyzeTemplateUnitTemplate[];
57
+ }
58
+ export interface FixedAnalyzeTemplatePerEntityUnits {
59
+ type: "perEntity";
60
+ unitTemplate: FixedAnalyzeTemplateUnitTemplate;
61
+ }
62
+ export interface FixedAnalyzeTemplatePerActorUnits {
63
+ type: "perActor";
64
+ unitTemplate: FixedAnalyzeTemplateUnitTemplate;
65
+ }
66
+ export interface FixedAnalyzeTemplatePerEntityGroupUnits {
67
+ type: "perEntityGroup";
68
+ unitTemplate: FixedAnalyzeTemplateUnitTemplate;
69
+ }
70
+
71
+ export interface FixedAnalyzeTemplateUnitTemplate {
72
+ titlePattern: string;
73
+ purposePattern: string;
74
+ keywords: string[];
75
+ }
76
+
77
+ // ─────────────────────────────────────────────
78
+ // Feature types (conditional module activation)
79
+ // ─────────────────────────────────────────────
80
+
81
+ export type FixedAnalyzeTemplateFeatureId =
82
+ | "real-time"
83
+ | "external-integration"
84
+ | "file-storage";
85
+
86
+ export interface FixedAnalyzeTemplateFeature {
87
+ id: FixedAnalyzeTemplateFeatureId;
88
+ /** Provider names for external-integration (e.g., ["stripe", "sendgrid"]) */
89
+ providers?: string[];
90
+ }
91
+
92
+ // ─────────────────────────────────────────────
93
+ // Canonical source mapping
94
+ // ─────────────────────────────────────────────
95
+
96
+ export const FIXED_ANALYZE_TEMPLATE_CANONICAL_SOURCE: Record<
97
+ string,
98
+ FixedAnalyzeTemplateCategoryId
99
+ > = {
100
+ "domain-concepts": "02-domain-model",
101
+ "error-conditions": "04-business-rules",
102
+ permissions: "01-actors-and-auth",
103
+ };
104
+
105
+ // ─────────────────────────────────────────────
106
+ // 6-file template definition
107
+ // ─────────────────────────────────────────────
108
+
109
+ export const FIXED_ANALYZE_TEMPLATE: FixedAnalyzeTemplateFileTemplate[] = [
110
+ // ── 00-toc ──
111
+ {
112
+ categoryId: "00-toc",
113
+ fileId: "00-toc",
114
+ filename: "00-toc.md",
115
+ documentType: "overview",
116
+ description: "Project summary, scope, glossary, and assumptions",
117
+ downstreamPhase: "project-setup",
118
+ forbiddenPatterns: [],
119
+ modules: [
120
+ {
121
+ index: 0,
122
+ title: "Project Summary",
123
+ purpose: "High-level vision, goals, and scope of the project.",
124
+ unitStrategy: {
125
+ type: "fixed",
126
+ units: [
127
+ {
128
+ titlePattern: "Vision and Goals",
129
+ purposePattern:
130
+ "Define the project vision, business objectives, and success criteria.",
131
+ keywords: [
132
+ "vision",
133
+ "goals",
134
+ "objectives",
135
+ "success-criteria",
136
+ "business-value",
137
+ ],
138
+ },
139
+ {
140
+ titlePattern: "Scope Definition",
141
+ purposePattern:
142
+ "Define what is in-scope and out-of-scope for this project.",
143
+ keywords: [
144
+ "scope",
145
+ "boundaries",
146
+ "in-scope",
147
+ "out-of-scope",
148
+ "constraints",
149
+ ],
150
+ },
151
+ ],
152
+ },
153
+ },
154
+ {
155
+ index: 1,
156
+ title: "Document Map and Canonical Sources",
157
+ purpose:
158
+ "Navigation index and authoritative source declarations for cross-file references.",
159
+ unitStrategy: {
160
+ type: "fixed",
161
+ units: [
162
+ {
163
+ titlePattern: "Document Map",
164
+ purposePattern:
165
+ "Hyperlinked file index with role summaries and downstream phase mapping.",
166
+ keywords: [
167
+ "document-map",
168
+ "navigation",
169
+ "file-index",
170
+ "hyperlink",
171
+ ],
172
+ },
173
+ {
174
+ titlePattern: "Canonical Source Declaration",
175
+ purposePattern:
176
+ "Declare which file is the authoritative source for each data type and the required reference format.",
177
+ keywords: [
178
+ "canonical-source",
179
+ "reference-format",
180
+ "backtick",
181
+ "authority",
182
+ ],
183
+ },
184
+ ],
185
+ },
186
+ },
187
+ {
188
+ index: 2,
189
+ title: "Glossary and Assumptions",
190
+ purpose: "Domain terminology definitions and project assumptions.",
191
+ unitStrategy: {
192
+ type: "fixed",
193
+ units: [
194
+ {
195
+ titlePattern: "Domain Glossary",
196
+ purposePattern:
197
+ "Define domain-specific terms used throughout the documents.",
198
+ keywords: [
199
+ "glossary",
200
+ "terminology",
201
+ "definitions",
202
+ "domain-language",
203
+ ],
204
+ },
205
+ {
206
+ titlePattern: "Assumptions and Constraints",
207
+ purposePattern:
208
+ "List project assumptions and environmental constraints.",
209
+ keywords: [
210
+ "assumptions",
211
+ "constraints",
212
+ "prerequisites",
213
+ "limitations",
214
+ ],
215
+ },
216
+ ],
217
+ },
218
+ },
219
+ ],
220
+ },
221
+
222
+ // ── 01-actors-and-auth ──
223
+ {
224
+ categoryId: "01-actors-and-auth",
225
+ fileId: "01-actors-and-auth",
226
+ filename: "01-actors-and-auth.md",
227
+ documentType: "actors-and-auth",
228
+ description:
229
+ "Actor definitions, permission matrix, authentication, session, account lifecycle",
230
+ downstreamPhase: "auth-middleware",
231
+ forbiddenPatterns: [
232
+ /\|\s*(?:type|required|default|constraint)\s*\|/i, // Entity attribute tables → 02
233
+ /```yaml\s*\n\s*entity:/i, // Entity YAML specs → 02
234
+ ],
235
+ modules: [
236
+ {
237
+ index: 0,
238
+ title: "Actor Definitions",
239
+ purpose:
240
+ "Define all user actor types with their identity, permissions, and access boundaries.",
241
+ unitStrategy: {
242
+ type: "perActor",
243
+ unitTemplate: {
244
+ titlePattern: "{name} Actor",
245
+ purposePattern:
246
+ "Define the {name} actor's identity, permissions, and access boundaries. Do NOT describe specific operations (03), data isolation policies (05), or domain concepts (02).",
247
+ keywords: ["actor", "role", "permissions", "access-boundary"],
248
+ },
249
+ },
250
+ },
251
+ {
252
+ index: 1,
253
+ title: "Authentication Flows",
254
+ purpose:
255
+ "Registration, login, logout, and session management from a user perspective.",
256
+ unitStrategy: {
257
+ type: "fixed",
258
+ units: [
259
+ {
260
+ titlePattern: "Registration and Login",
261
+ purposePattern:
262
+ "Define user registration and login flows including validation and error handling.",
263
+ keywords: ["registration", "login", "authentication"],
264
+ },
265
+ {
266
+ titlePattern: "Session and Logout",
267
+ purposePattern:
268
+ "Define session behavior and logout from a user perspective.",
269
+ keywords: ["session", "logout", "account-security"],
270
+ },
271
+ ],
272
+ },
273
+ },
274
+ {
275
+ index: 2,
276
+ title: "Account Lifecycle",
277
+ purpose: "Account creation, deletion, and password management.",
278
+ unitStrategy: {
279
+ type: "fixed",
280
+ units: [
281
+ {
282
+ titlePattern: "Account Management",
283
+ purposePattern:
284
+ "Define how users create accounts, delete accounts, and change passwords.",
285
+ keywords: [
286
+ "account-creation",
287
+ "account-deletion",
288
+ "password-change",
289
+ ],
290
+ },
291
+ ],
292
+ },
293
+ },
294
+ ],
295
+ },
296
+
297
+ // ── 02-domain-model ──
298
+ {
299
+ categoryId: "02-domain-model",
300
+ fileId: "02-domain-model",
301
+ filename: "02-domain-model.md",
302
+ documentType: "domain-model",
303
+ description:
304
+ "Business concepts, relationships, and states from user perspective",
305
+ downstreamPhase: "database-design",
306
+ forbiddenPatterns: [
307
+ /\b(?:GET|POST|PUT|PATCH|DELETE)\s+\/\w+/i, // API endpoint defs → 03
308
+ /\bRequest\s+Body\b/i,
309
+ /\bResponse\s+(?:Body|Schema)\b/i,
310
+ ],
311
+ modules: [
312
+ {
313
+ index: 0,
314
+ title: "Domain Concepts",
315
+ purpose:
316
+ "Describe what each concept means in the business domain and its key attributes.",
317
+ unitStrategy: {
318
+ type: "perEntity",
319
+ unitTemplate: {
320
+ titlePattern: "{name} Concept",
321
+ purposePattern:
322
+ "Describe what {name} represents in the business domain and its key attributes. Do NOT describe operations or workflows — those belong in 03-functional-requirements.",
323
+ keywords: ["concept", "domain", "business-meaning", "attributes"],
324
+ },
325
+ },
326
+ },
327
+ {
328
+ index: 1,
329
+ title: "Domain Relationships",
330
+ purpose:
331
+ "Describe how concepts relate to each other from a business perspective.",
332
+ unitStrategy: {
333
+ type: "fixed",
334
+ units: [
335
+ {
336
+ titlePattern: "Conceptual Relationships",
337
+ purposePattern:
338
+ "Describe how concepts relate to each other in business terms.",
339
+ keywords: [
340
+ "relationship",
341
+ "association",
342
+ "belongs-to",
343
+ "has-many",
344
+ "ownership",
345
+ ],
346
+ },
347
+ {
348
+ titlePattern: "Lifecycle and Retention",
349
+ purposePattern:
350
+ "Describe concept lifecycle states and transitions only. Detailed retention/recovery policies belong in 05-non-functional. Operation details belong in 03-functional-requirements.",
351
+ keywords: [
352
+ "lifecycle",
353
+ "retention",
354
+ "archival",
355
+ "deletion-policy",
356
+ "recovery",
357
+ ],
358
+ },
359
+ ],
360
+ },
361
+ },
362
+ {
363
+ index: 2,
364
+ title: "Business Categories and State Flows",
365
+ purpose:
366
+ "Business category classifications and state flow definitions.",
367
+ unitStrategy: {
368
+ type: "fixed",
369
+ units: [
370
+ {
371
+ titlePattern: "Business Category Definitions",
372
+ purposePattern:
373
+ "Define all business category classifications with their allowed values and descriptions.",
374
+ keywords: [
375
+ "business-category",
376
+ "classification",
377
+ "allowed-values",
378
+ "status-type",
379
+ ],
380
+ },
381
+ {
382
+ titlePattern: "State Transitions",
383
+ purposePattern:
384
+ "Define valid state transition paths for stateful concepts.",
385
+ keywords: [
386
+ "state-flow",
387
+ "transition",
388
+ "workflow",
389
+ "status-change",
390
+ ],
391
+ },
392
+ ],
393
+ },
394
+ },
395
+ ],
396
+ },
397
+
398
+ // ── 03-functional-requirements ──
399
+ {
400
+ categoryId: "03-functional-requirements",
401
+ fileId: "03-functional-requirements",
402
+ filename: "03-functional-requirements.md",
403
+ documentType: "functional-requirements",
404
+ description:
405
+ "What operations users can perform, use cases, business workflows",
406
+ downstreamPhase: "interface-design",
407
+ forbiddenPatterns: [
408
+ /\b(?:GET|POST|PUT|PATCH|DELETE)\s+\/\w+/i, // API endpoint defs FORBIDDEN in requirements
409
+ /\bHTTP\s+[1-5]\d{2}\b/i, // HTTP status codes FORBIDDEN
410
+ /\bRequest\s+(?:Body|Example)\b/i, // Request schemas FORBIDDEN
411
+ /\bResponse\s+(?:Body|Example|Schema)\b/i, // Response schemas FORBIDDEN
412
+ /```json\s*\n\s*\{/i, // JSON examples FORBIDDEN
413
+ /\b(?:CREATE\s+)?(?:UNIQUE\s+)?INDEX\b/i, // Index defs → 02
414
+ /\bON\s+DELETE\s+(?:CASCADE|SET\s+NULL|RESTRICT)\b/i, // Cascade rules → 02
415
+ /```yaml\s*\n\s*errors:/i, // Error catalog YAML → 04
416
+ ],
417
+ modules: [
418
+ {
419
+ index: 0,
420
+ title: "Core Business Operations",
421
+ purpose: "What the system must do for each business concept.",
422
+ unitStrategy: {
423
+ type: "perEntity",
424
+ unitTemplate: {
425
+ titlePattern: "{name} Operations",
426
+ purposePattern:
427
+ "Define business operations for {name}: what create, read, update, delete, and list operations must accomplish from a business perspective.",
428
+ keywords: [
429
+ "operation",
430
+ "business-logic",
431
+ "use-case",
432
+ "requirement",
433
+ "behavior",
434
+ "functionality",
435
+ ],
436
+ },
437
+ },
438
+ },
439
+ {
440
+ index: 1,
441
+ title: "Error Scenarios and Edge Cases",
442
+ purpose:
443
+ "Business-level error scenarios, edge case coverage, and expected system behaviors for exceptional conditions.",
444
+ unitStrategy: {
445
+ type: "perEntity",
446
+ unitTemplate: {
447
+ titlePattern: "{name} Error Scenarios",
448
+ purposePattern:
449
+ "Define business error conditions, edge cases, and expected system behaviors for all {name} operations.",
450
+ keywords: [
451
+ "error-scenario",
452
+ "edge-case",
453
+ "validation-rule",
454
+ "conflict-resolution",
455
+ "boundary-condition",
456
+ ],
457
+ },
458
+ },
459
+ },
460
+ {
461
+ index: 2,
462
+ title: "End-to-End User Scenarios",
463
+ purpose:
464
+ "Cross-domain user scenarios that span multiple concepts, describing complete user journeys.",
465
+ unitStrategy: {
466
+ type: "fixed",
467
+ units: [
468
+ {
469
+ titlePattern: "Cross-Domain User Scenarios",
470
+ purposePattern:
471
+ "Define end-to-end user scenarios that span multiple concepts, describing complete user journeys from start to finish.",
472
+ keywords: [
473
+ "user-scenario",
474
+ "end-to-end",
475
+ "multi-step",
476
+ "user-journey",
477
+ ],
478
+ },
479
+ ],
480
+ },
481
+ },
482
+ ],
483
+ },
484
+
485
+ // ── 04-business-rules ──
486
+ {
487
+ categoryId: "04-business-rules",
488
+ fileId: "04-business-rules",
489
+ filename: "04-business-rules.md",
490
+ documentType: "business-rules",
491
+ description:
492
+ "Business rules, validation constraints, data browsing expectations, error scenarios",
493
+ downstreamPhase: "service-layer",
494
+ forbiddenPatterns: [
495
+ /```yaml\s*\n\s*entity:/i, // Entity YAML specs → 02
496
+ /\b(?:GET|POST|PUT|PATCH|DELETE)\s+\/\w+/i, // API endpoint defs → 03
497
+ ],
498
+ modules: [
499
+ {
500
+ index: 0,
501
+ title: "Domain Business Rules",
502
+ purpose:
503
+ "Per-concept business rules, validation logic, and domain constraints.",
504
+ unitStrategy: {
505
+ type: "perEntity",
506
+ unitTemplate: {
507
+ titlePattern: "{name} Rules",
508
+ purposePattern:
509
+ "Define validation rules and domain constraints for {name}. Do NOT repeat data isolation (05), lifecycle states (02), or operation flows (03).",
510
+ keywords: [
511
+ "business-rule",
512
+ "validation",
513
+ "constraint",
514
+ "domain-logic",
515
+ ],
516
+ },
517
+ },
518
+ },
519
+ {
520
+ index: 1,
521
+ title: "Data Browsing Expectations",
522
+ purpose:
523
+ "Business expectations for how users browse, find, and navigate through lists of data.",
524
+ unitStrategy: {
525
+ type: "fixed",
526
+ units: [
527
+ {
528
+ titlePattern: "List Browsing Expectations",
529
+ purposePattern:
530
+ "Define business expectations for how users find, filter, and browse lists.",
531
+ keywords: ["filtering", "sorting", "pagination"],
532
+ },
533
+ ],
534
+ },
535
+ },
536
+ {
537
+ index: 2,
538
+ title: "Error Conditions",
539
+ purpose: "Business error scenarios and how the system should respond.",
540
+ unitStrategy: {
541
+ type: "fixed",
542
+ units: [
543
+ {
544
+ titlePattern: "Error Scenarios",
545
+ purposePattern:
546
+ "Describe error conditions and expected system responses in natural language.",
547
+ keywords: [
548
+ "error-scenario",
549
+ "rejection",
550
+ "failure-case",
551
+ "exception",
552
+ ],
553
+ },
554
+ ],
555
+ },
556
+ },
557
+ ],
558
+ },
559
+
560
+ // ── 05-non-functional ──
561
+ {
562
+ categoryId: "05-non-functional",
563
+ fileId: "05-non-functional",
564
+ filename: "05-non-functional.md",
565
+ documentType: "non-functional",
566
+ description: "Data ownership, privacy, retention, and recovery policies",
567
+ downstreamPhase: "test-infra",
568
+ forbiddenPatterns: [
569
+ /\b(?:GET|POST|PUT|PATCH|DELETE)\s+\/\w+/i, // API endpoint defs → 03
570
+ /```yaml\s*\n\s*entity:/i, // Entity YAML specs → 02
571
+ ],
572
+ modules: [
573
+ {
574
+ index: 0,
575
+ title: "Data Policies",
576
+ purpose:
577
+ "Data ownership, privacy, retention, and recovery policies from a business perspective.",
578
+ unitStrategy: {
579
+ type: "fixed",
580
+ units: [
581
+ {
582
+ titlePattern: "Data Ownership and Privacy",
583
+ purposePattern:
584
+ "Define who owns what data, who can access it, and privacy boundaries between users.",
585
+ keywords: [
586
+ "data-isolation",
587
+ "ownership",
588
+ "access-control",
589
+ "privacy",
590
+ ],
591
+ },
592
+ {
593
+ titlePattern: "Data Retention and Recovery",
594
+ purposePattern:
595
+ "Define what happens to deleted data, how long it is retained, and how users can recover it.",
596
+ keywords: [
597
+ "soft-delete",
598
+ "retention",
599
+ "recovery",
600
+ "permanent-deletion",
601
+ ],
602
+ },
603
+ ],
604
+ },
605
+ },
606
+ ],
607
+ },
608
+ ];
609
+
610
+ // ─────────────────────────────────────────────
611
+ // Conditional modules (activated by features)
612
+ // ─────────────────────────────────────────────
613
+
614
+ export const FIXED_ANALYZE_TEMPLATE_CONDITIONAL_MODULES: Record<
615
+ FixedAnalyzeTemplateFeatureId,
616
+ Array<{
617
+ targetCategory: FixedAnalyzeTemplateCategoryId;
618
+ module: FixedAnalyzeTemplateModuleTemplate;
619
+ }>
620
+ > = {
621
+ "real-time": [
622
+ {
623
+ targetCategory: "03-functional-requirements",
624
+ module: {
625
+ index: 100, // appended after base modules
626
+ title: "Real-time Events",
627
+ purpose:
628
+ "WebSocket/SSE event definitions and subscription specifications.",
629
+ unitStrategy: {
630
+ type: "perEntity",
631
+ unitTemplate: {
632
+ titlePattern: "{name} Events",
633
+ purposePattern:
634
+ "Define real-time events for {name} changes, including event payload and subscription rules.",
635
+ keywords: [
636
+ "websocket",
637
+ "sse",
638
+ "event",
639
+ "subscription",
640
+ "real-time",
641
+ ],
642
+ },
643
+ },
644
+ },
645
+ },
646
+ {
647
+ targetCategory: "05-non-functional",
648
+ module: {
649
+ index: 100,
650
+ title: "Real-time Communication",
651
+ purpose:
652
+ "WebSocket/SSE connection policies and performance requirements.",
653
+ unitStrategy: {
654
+ type: "fixed",
655
+ units: [
656
+ {
657
+ titlePattern: "WebSocket Security and Performance",
658
+ purposePattern:
659
+ "Define connection limits, heartbeat intervals, reconnection policies, and security requirements for real-time communication.",
660
+ keywords: [
661
+ "websocket-security",
662
+ "connection-limit",
663
+ "heartbeat",
664
+ "reconnection",
665
+ ],
666
+ },
667
+ ],
668
+ },
669
+ },
670
+ },
671
+ ],
672
+ "external-integration": [
673
+ {
674
+ targetCategory: "03-functional-requirements",
675
+ module: {
676
+ index: 101,
677
+ title: "External Integrations",
678
+ purpose:
679
+ "Third-party API contracts, webhook handlers, and integration specifications.",
680
+ unitStrategy: {
681
+ type: "fixed",
682
+ units: [
683
+ {
684
+ titlePattern: "Integration Contracts",
685
+ purposePattern:
686
+ "Define external API dependencies, authentication methods, request/response formats, and error handling for third-party integrations.",
687
+ keywords: [
688
+ "integration",
689
+ "third-party",
690
+ "webhook",
691
+ "oauth-provider",
692
+ "payment",
693
+ ],
694
+ },
695
+ ],
696
+ },
697
+ },
698
+ },
699
+ {
700
+ targetCategory: "04-business-rules",
701
+ module: {
702
+ index: 100,
703
+ title: "Integration Error Handling",
704
+ purpose: "Error handling and retry policies for external integrations.",
705
+ unitStrategy: {
706
+ type: "fixed",
707
+ units: [
708
+ {
709
+ titlePattern: "Integration Failure Policies",
710
+ purposePattern:
711
+ "Define retry strategies, circuit breaker policies, fallback behavior, and error escalation for external service failures.",
712
+ keywords: [
713
+ "retry",
714
+ "circuit-breaker",
715
+ "fallback",
716
+ "integration-error",
717
+ ],
718
+ },
719
+ ],
720
+ },
721
+ },
722
+ },
723
+ {
724
+ targetCategory: "05-non-functional",
725
+ module: {
726
+ index: 101,
727
+ title: "External Dependency SLOs",
728
+ purpose:
729
+ "Service level objectives for external dependency availability.",
730
+ unitStrategy: {
731
+ type: "fixed",
732
+ units: [
733
+ {
734
+ titlePattern: "External Dependency SLOs",
735
+ purposePattern:
736
+ "Define availability expectations, timeout thresholds, and degradation policies for external service dependencies.",
737
+ keywords: [
738
+ "dependency-slo",
739
+ "timeout",
740
+ "degradation",
741
+ "external-availability",
742
+ ],
743
+ },
744
+ ],
745
+ },
746
+ },
747
+ },
748
+ ],
749
+ "file-storage": [
750
+ {
751
+ targetCategory: "03-functional-requirements",
752
+ module: {
753
+ index: 103,
754
+ title: "File Storage",
755
+ purpose:
756
+ "File upload capabilities, media processing, and storage requirements.",
757
+ unitStrategy: {
758
+ type: "fixed",
759
+ units: [
760
+ {
761
+ titlePattern: "File Upload and Management",
762
+ purposePattern:
763
+ "Define file upload capabilities, supported formats, processing requirements, and access control for stored files.",
764
+ keywords: ["file-upload", "media", "storage", "attachment"],
765
+ },
766
+ ],
767
+ },
768
+ },
769
+ },
770
+ {
771
+ targetCategory: "04-business-rules",
772
+ module: {
773
+ index: 102,
774
+ title: "File Validation Rules",
775
+ purpose: "Validation rules and policies for file uploads and storage.",
776
+ unitStrategy: {
777
+ type: "fixed",
778
+ units: [
779
+ {
780
+ titlePattern: "File Validation and Policies",
781
+ purposePattern:
782
+ "Define file type restrictions, virus scanning requirements, content validation, and retention policies for uploaded files.",
783
+ keywords: [
784
+ "file-validation",
785
+ "virus-scan",
786
+ "content-type",
787
+ "retention",
788
+ ],
789
+ },
790
+ ],
791
+ },
792
+ },
793
+ },
794
+ {
795
+ targetCategory: "05-non-functional",
796
+ module: {
797
+ index: 103,
798
+ title: "Storage Capacity",
799
+ purpose: "Storage capacity planning and CDN requirements.",
800
+ unitStrategy: {
801
+ type: "fixed",
802
+ units: [
803
+ {
804
+ titlePattern: "Storage Capacity Requirements",
805
+ purposePattern:
806
+ "Define storage requirements and capacity planning for file storage.",
807
+ keywords: ["storage-capacity", "cdn", "capacity"],
808
+ },
809
+ ],
810
+ },
811
+ },
812
+ },
813
+ ],
814
+ };
815
+
816
+ // ─────────────────────────────────────────────
817
+ // Helper functions
818
+ // ─────────────────────────────────────────────
819
+
820
+ /**
821
+ * Expand a module's unit strategy into concrete unit templates based on the
822
+ * domain's entities and actors.
823
+ */
824
+ export const expandFixedAnalyzeTemplateUnits = (
825
+ module: FixedAnalyzeTemplateModuleTemplate,
826
+ entities: Array<{ name: string }>,
827
+ actors: Array<{ name: string }>,
828
+ ): FixedAnalyzeTemplateUnitTemplate[] => {
829
+ const strategy = module.unitStrategy;
830
+ switch (strategy.type) {
831
+ case "fixed":
832
+ return strategy.units;
833
+ case "perEntity":
834
+ return entities.map((e) => ({
835
+ titlePattern: strategy.unitTemplate.titlePattern.replace(
836
+ "{name}",
837
+ e.name,
838
+ ),
839
+ purposePattern: strategy.unitTemplate.purposePattern.replace(
840
+ "{name}",
841
+ e.name,
842
+ ),
843
+ keywords: [...strategy.unitTemplate.keywords, e.name.toLowerCase()],
844
+ }));
845
+ case "perActor":
846
+ return actors.map((a) => ({
847
+ titlePattern: strategy.unitTemplate.titlePattern.replace(
848
+ "{name}",
849
+ a.name,
850
+ ),
851
+ purposePattern: strategy.unitTemplate.purposePattern.replace(
852
+ "{name}",
853
+ a.name,
854
+ ),
855
+ keywords: [...strategy.unitTemplate.keywords, a.name.toLowerCase()],
856
+ }));
857
+ case "perEntityGroup":
858
+ // For now, entity groups = entities; can be refined later
859
+ return entities.map((e) => ({
860
+ titlePattern: strategy.unitTemplate.titlePattern.replace(
861
+ "{name}",
862
+ e.name,
863
+ ),
864
+ purposePattern: strategy.unitTemplate.purposePattern.replace(
865
+ "{name}",
866
+ e.name,
867
+ ),
868
+ keywords: [...strategy.unitTemplate.keywords, e.name.toLowerCase()],
869
+ }));
870
+ }
871
+ };
872
+
873
+ /**
874
+ * Build an expanded template by merging base TEMPLATE with conditional modules
875
+ * activated by the given features.
876
+ *
877
+ * Module indices are renumbered sequentially per file after merging.
878
+ */
879
+ export const buildFixedAnalyzeExpandedTemplate = (
880
+ features: FixedAnalyzeTemplateFeature[],
881
+ ): FixedAnalyzeTemplateFileTemplate[] => {
882
+ if (features.length === 0) return FIXED_ANALYZE_TEMPLATE;
883
+
884
+ const activeFeatureIds = new Set(features.map((f) => f.id));
885
+ const extraModules = new Map<
886
+ FixedAnalyzeTemplateCategoryId,
887
+ FixedAnalyzeTemplateModuleTemplate[]
888
+ >();
889
+
890
+ for (const featureId of activeFeatureIds) {
891
+ const conditionals = FIXED_ANALYZE_TEMPLATE_CONDITIONAL_MODULES[featureId];
892
+ for (const { targetCategory, module } of conditionals) {
893
+ const existing = extraModules.get(targetCategory) ?? [];
894
+ existing.push(module);
895
+ extraModules.set(targetCategory, existing);
896
+ }
897
+ }
898
+
899
+ return FIXED_ANALYZE_TEMPLATE.map((fileTemplate) => {
900
+ const extras = extraModules.get(fileTemplate.categoryId);
901
+ if (!extras || extras.length === 0) return fileTemplate;
902
+
903
+ const mergedModules = [...fileTemplate.modules, ...extras].map((m, i) => ({
904
+ ...m,
905
+ index: i,
906
+ }));
907
+
908
+ return { ...fileTemplate, modules: mergedModules };
909
+ });
910
+ };
911
+
912
+ /**
913
+ * Generate AutoBeAnalyze.IFile.Scenario objects from the fixed template,
914
+ * optionally expanded with conditional modules based on features. Called after
915
+ * LLM returns actors/entities/features in the scenario phase.
916
+ */
917
+ export const buildFixedAnalyzeScenarioFiles = (
918
+ _prefix: string,
919
+ features: FixedAnalyzeTemplateFeature[] = [],
920
+ ): AutoBeAnalyze.IFileScenario[] =>
921
+ buildFixedAnalyzeExpandedTemplate(features).map((t) => ({
922
+ reason: `Fixed SRS structure: ${t.description}`,
923
+ filename: t.filename,
924
+ documentType: t.documentType,
925
+ outline: t.modules.map((m) => m.title),
926
+ audience: "general",
927
+ detailLevel: "detailed specification",
928
+ constraints: [
929
+ `File scope: ${t.description}`,
930
+ `Downstream phase: ${t.downstreamPhase}`,
931
+ ],
932
+ }));
933
+
934
+ /** Deterministically generate the Document Map unit content for 00-toc. */
935
+ export const buildFixedAnalyzeDocumentMapContent = (
936
+ files: FixedAnalyzeTemplateFileTemplate[],
937
+ ): string => {
938
+ const rows = files
939
+ .map(
940
+ (f) =>
941
+ `| [${f.filename}](./${f.filename}) | ${f.description} | ${f.downstreamPhase} |`,
942
+ )
943
+ .join("\n");
944
+ return `| File | Role | Downstream |\n|------|------|------------|\n${rows}`;
945
+ };
946
+
947
+ /** Deterministically generate the Canonical Source Declaration unit content. */
948
+ export const buildFixedAnalyzeCanonicalSourceContent = (): string => {
949
+ const header = `Each type of information has one authoritative location. Other files should reference these canonical sources.\n`;
950
+ const table = [
951
+ "| Information Type | Canonical File |",
952
+ "|------------------|---------------|",
953
+ "| Domain concepts | [02-domain-model.md](./02-domain-model.md) |",
954
+ "| Error conditions | [04-business-rules.md](./04-business-rules.md) |",
955
+ "| Permissions | [01-actors-and-auth.md](./01-actors-and-auth.md) |",
956
+ "| Actor definitions | [01-actors-and-auth.md](./01-actors-and-auth.md) |",
957
+ "| Filtering/pagination rules | [04-business-rules.md](./04-business-rules.md) |",
958
+ "| Data retention/recovery | [05-non-functional.md](./05-non-functional.md) |",
959
+ ].join("\n");
960
+ return `${header}\n${table}`;
961
+ };