@codeyam/codeyam-cli 0.1.0-staging.b8a55ba → 0.1.0-staging.c90f8c9

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 (645) hide show
  1. package/analyzer-template/.build-info.json +8 -8
  2. package/analyzer-template/common/execAsync.ts +1 -1
  3. package/analyzer-template/log.txt +3 -3
  4. package/analyzer-template/package.json +9 -6
  5. package/analyzer-template/packages/ai/index.ts +10 -3
  6. package/analyzer-template/packages/ai/package.json +1 -1
  7. package/analyzer-template/packages/ai/src/lib/__mocks__/completionCall.ts +122 -0
  8. package/analyzer-template/packages/ai/src/lib/analyzeScope.ts +126 -6
  9. package/analyzer-template/packages/ai/src/lib/astScopes/arrayDerivationDetector.ts +199 -0
  10. package/analyzer-template/packages/ai/src/lib/astScopes/astScopeAnalyzer.ts +116 -1
  11. package/analyzer-template/packages/ai/src/lib/astScopes/conditionalEffectsExtractor.ts +644 -0
  12. package/analyzer-template/packages/ai/src/lib/astScopes/methodSemantics.ts +140 -6
  13. package/analyzer-template/packages/ai/src/lib/astScopes/patterns/ifStatementHandler.ts +18 -0
  14. package/analyzer-template/packages/ai/src/lib/astScopes/patterns/switchStatementHandler.ts +15 -0
  15. package/analyzer-template/packages/ai/src/lib/astScopes/patterns/variableDeclarationHandler.ts +181 -1
  16. package/analyzer-template/packages/ai/src/lib/astScopes/processExpression.ts +849 -9
  17. package/analyzer-template/packages/ai/src/lib/astScopes/types.ts +244 -0
  18. package/analyzer-template/packages/ai/src/lib/checkAllAttributes.ts +29 -10
  19. package/analyzer-template/packages/ai/src/lib/completionCall.ts +216 -36
  20. package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +892 -117
  21. package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.ts +2 -1
  22. package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.ts +296 -35
  23. package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.ts +120 -76
  24. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.ts +80 -5
  25. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertNullToUndefinedBySchema.ts +98 -0
  26. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.ts +8 -1
  27. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/fixNullIdsBySchema.ts +129 -0
  28. package/analyzer-template/packages/ai/src/lib/dataStructureChunking.ts +156 -0
  29. package/analyzer-template/packages/ai/src/lib/deepEqual.ts +30 -0
  30. package/analyzer-template/packages/ai/src/lib/e2eDataTracking.ts +334 -0
  31. package/analyzer-template/packages/ai/src/lib/extractCriticalDataKeys.ts +120 -0
  32. package/analyzer-template/packages/ai/src/lib/generateChangesEntityScenarioData.ts +74 -7
  33. package/analyzer-template/packages/ai/src/lib/generateChangesEntityScenarios.ts +86 -142
  34. package/analyzer-template/packages/ai/src/lib/generateEntityDataStructure.ts +1 -0
  35. package/analyzer-template/packages/ai/src/lib/generateEntityScenarioData.ts +1111 -87
  36. package/analyzer-template/packages/ai/src/lib/generateEntityScenarios.ts +191 -191
  37. package/analyzer-template/packages/ai/src/lib/generateExecutionFlows.ts +570 -0
  38. package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionalEffects.ts +528 -0
  39. package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionals.ts +1977 -0
  40. package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromJsxUsages.ts +239 -0
  41. package/analyzer-template/packages/ai/src/lib/guessScenarioDataFromDescription.ts +5 -5
  42. package/analyzer-template/packages/ai/src/lib/isolateScopes.ts +276 -3
  43. package/analyzer-template/packages/ai/src/lib/mergeStatements.ts +33 -3
  44. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateChangesEntityScenarioDataGenerator.ts +1 -1
  45. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.ts +32 -142
  46. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateChunkPrompt.ts +82 -0
  47. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateCriticalKeysPrompt.ts +103 -0
  48. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.ts +90 -6
  49. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.ts +14 -89
  50. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateMissingKeysPrompt.ts +58 -0
  51. package/analyzer-template/packages/ai/src/lib/promptGenerators/guessNewScenarioDataFromDescriptionGenerator.ts +11 -11
  52. package/analyzer-template/packages/ai/src/lib/promptGenerators/simplifyKeysForLLM.ts +391 -0
  53. package/analyzer-template/packages/ai/src/lib/resolvePathToControllable.ts +812 -0
  54. package/analyzer-template/packages/ai/src/lib/splitOutsideParentheses.ts +5 -1
  55. package/analyzer-template/packages/ai/src/lib/validateExecutionFlowPaths.ts +531 -0
  56. package/analyzer-template/packages/ai/src/lib/worker/SerializableDataStructure.ts +118 -0
  57. package/analyzer-template/packages/analyze/src/lib/FileAnalyzer.ts +14 -0
  58. package/analyzer-template/packages/analyze/src/lib/analysisContext.ts +44 -4
  59. package/analyzer-template/packages/analyze/src/lib/asts/nodes/index.ts +1 -0
  60. package/analyzer-template/packages/analyze/src/lib/asts/nodes/isAsyncFunction.ts +67 -0
  61. package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.ts +381 -265
  62. package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities.ts +18 -0
  63. package/analyzer-template/packages/analyze/src/lib/files/analyze/findOrCreateEntity.ts +3 -0
  64. package/analyzer-template/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.ts +33 -7
  65. package/analyzer-template/packages/analyze/src/lib/files/analyzeChange.ts +31 -15
  66. package/analyzer-template/packages/analyze/src/lib/files/analyzeEntity.ts +11 -7
  67. package/analyzer-template/packages/analyze/src/lib/files/analyzeInitial.ts +11 -12
  68. package/analyzer-template/packages/analyze/src/lib/files/enums/steps.ts +1 -1
  69. package/analyzer-template/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.ts +148 -41
  70. package/analyzer-template/packages/analyze/src/lib/files/scenarios/enrichUnknownTypesFromSourceEquivalencies.ts +102 -0
  71. package/analyzer-template/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.ts +506 -59
  72. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateChangesScenarios.ts +28 -62
  73. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +157 -74
  74. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.ts +156 -0
  75. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateScenarioData.ts +35 -129
  76. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateScenarios.ts +2 -3
  77. package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +420 -87
  78. package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeValidatedDataStructures.ts +56 -11
  79. package/analyzer-template/packages/aws/codebuild/index.ts +1 -0
  80. package/analyzer-template/packages/aws/dist/src/lib/codebuild/waitForBuild.d.ts +11 -1
  81. package/analyzer-template/packages/aws/dist/src/lib/codebuild/waitForBuild.d.ts.map +1 -1
  82. package/analyzer-template/packages/aws/dist/src/lib/codebuild/waitForBuild.js +29 -18
  83. package/analyzer-template/packages/aws/dist/src/lib/codebuild/waitForBuild.js.map +1 -1
  84. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsDefineContainer.d.ts +2 -2
  85. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsDefineContainer.d.ts.map +1 -1
  86. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsDefineContainer.js +2 -2
  87. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsDefineContainer.js.map +1 -1
  88. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsTaskFactory.d.ts +8 -18
  89. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsTaskFactory.d.ts.map +1 -1
  90. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsTaskFactory.js +17 -61
  91. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsTaskFactory.js.map +1 -1
  92. package/analyzer-template/packages/aws/dist/src/lib/s3/uploadFileToS3.d.ts.map +1 -1
  93. package/analyzer-template/packages/aws/dist/src/lib/s3/uploadFileToS3.js +8 -1
  94. package/analyzer-template/packages/aws/dist/src/lib/s3/uploadFileToS3.js.map +1 -1
  95. package/analyzer-template/packages/aws/package.json +3 -3
  96. package/analyzer-template/packages/aws/src/lib/codebuild/waitForBuild.ts +43 -19
  97. package/analyzer-template/packages/aws/src/lib/ecs/ecsDefineContainer.ts +3 -3
  98. package/analyzer-template/packages/aws/src/lib/ecs/ecsTaskFactory.ts +17 -69
  99. package/analyzer-template/packages/aws/src/lib/s3/uploadFileToS3.ts +8 -1
  100. package/analyzer-template/packages/database/src/lib/kysely/tables/debugReportsTable.ts +17 -1
  101. package/analyzer-template/packages/database/src/lib/loadAnalyses.ts +58 -1
  102. package/analyzer-template/packages/database/src/lib/loadCommits.ts +16 -0
  103. package/analyzer-template/packages/database/src/lib/loadEntities.ts +26 -3
  104. package/analyzer-template/packages/database/src/lib/loadReadyToBeCapturedAnalyses.ts +7 -3
  105. package/analyzer-template/packages/generate/index.ts +3 -0
  106. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/componentScenarioPageNext.ts +17 -1
  107. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.ts +193 -0
  108. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.ts +73 -0
  109. package/analyzer-template/packages/generate/src/lib/scenarioComponentForServer.ts +114 -0
  110. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/analysesTable.d.ts +1 -18
  111. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/analysesTable.d.ts.map +1 -1
  112. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.d.ts +17 -1
  113. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.d.ts.map +1 -1
  114. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.js.map +1 -1
  115. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/entitiesTable.d.ts +1 -0
  116. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/entitiesTable.d.ts.map +1 -1
  117. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts +2 -6
  118. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts.map +1 -1
  119. package/analyzer-template/packages/github/dist/database/src/lib/loadAnalyses.d.ts +2 -0
  120. package/analyzer-template/packages/github/dist/database/src/lib/loadAnalyses.d.ts.map +1 -1
  121. package/analyzer-template/packages/github/dist/database/src/lib/loadAnalyses.js +45 -2
  122. package/analyzer-template/packages/github/dist/database/src/lib/loadAnalyses.js.map +1 -1
  123. package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.d.ts +3 -1
  124. package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.d.ts.map +1 -1
  125. package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.js +13 -1
  126. package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.js.map +1 -1
  127. package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.d.ts +3 -1
  128. package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.d.ts.map +1 -1
  129. package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.js +23 -4
  130. package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.js.map +1 -1
  131. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.d.ts.map +1 -1
  132. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.js +7 -4
  133. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.js.map +1 -1
  134. package/analyzer-template/packages/github/dist/generate/index.d.ts +3 -0
  135. package/analyzer-template/packages/github/dist/generate/index.d.ts.map +1 -1
  136. package/analyzer-template/packages/github/dist/generate/index.js +3 -0
  137. package/analyzer-template/packages/github/dist/generate/index.js.map +1 -1
  138. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/componentScenarioPageNext.d.ts.map +1 -1
  139. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/componentScenarioPageNext.js +16 -1
  140. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/componentScenarioPageNext.js.map +1 -1
  141. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.d.ts +9 -0
  142. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.d.ts.map +1 -0
  143. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js +189 -0
  144. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js.map +1 -0
  145. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.d.ts +20 -0
  146. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.d.ts.map +1 -0
  147. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.js +53 -0
  148. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.js.map +1 -0
  149. package/analyzer-template/packages/github/dist/generate/src/lib/scenarioComponentForServer.d.ts +8 -0
  150. package/analyzer-template/packages/github/dist/generate/src/lib/scenarioComponentForServer.d.ts.map +1 -0
  151. package/analyzer-template/packages/github/dist/generate/src/lib/scenarioComponentForServer.js +89 -0
  152. package/analyzer-template/packages/github/dist/generate/src/lib/scenarioComponentForServer.js.map +1 -0
  153. package/analyzer-template/packages/github/dist/github/src/lib/loadOrCreateCommit.d.ts.map +1 -1
  154. package/analyzer-template/packages/github/dist/github/src/lib/loadOrCreateCommit.js +10 -0
  155. package/analyzer-template/packages/github/dist/github/src/lib/loadOrCreateCommit.js.map +1 -1
  156. package/analyzer-template/packages/github/dist/github/src/lib/syncPrimaryBranch.d.ts.map +1 -1
  157. package/analyzer-template/packages/github/dist/github/src/lib/syncPrimaryBranch.js +3 -0
  158. package/analyzer-template/packages/github/dist/github/src/lib/syncPrimaryBranch.js.map +1 -1
  159. package/analyzer-template/packages/github/dist/types/index.d.ts +3 -4
  160. package/analyzer-template/packages/github/dist/types/index.d.ts.map +1 -1
  161. package/analyzer-template/packages/github/dist/types/index.js +0 -1
  162. package/analyzer-template/packages/github/dist/types/index.js.map +1 -1
  163. package/analyzer-template/packages/github/dist/types/src/types/Analysis.d.ts +71 -27
  164. package/analyzer-template/packages/github/dist/types/src/types/Analysis.d.ts.map +1 -1
  165. package/analyzer-template/packages/github/dist/types/src/types/Entity.d.ts +2 -0
  166. package/analyzer-template/packages/github/dist/types/src/types/Entity.d.ts.map +1 -1
  167. package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts +9 -54
  168. package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts.map +1 -1
  169. package/analyzer-template/packages/github/dist/types/src/types/Scenario.js +1 -21
  170. package/analyzer-template/packages/github/dist/types/src/types/Scenario.js.map +1 -1
  171. package/analyzer-template/packages/github/dist/types/src/types/ScenariosDataStructure.d.ts +148 -0
  172. package/analyzer-template/packages/github/dist/types/src/types/ScenariosDataStructure.d.ts.map +1 -1
  173. package/analyzer-template/packages/github/dist/types/src/types/StatementInfo.d.ts +2 -0
  174. package/analyzer-template/packages/github/dist/types/src/types/StatementInfo.d.ts.map +1 -1
  175. package/analyzer-template/packages/github/dist/utils/src/lib/safeFileName.d.ts +9 -1
  176. package/analyzer-template/packages/github/dist/utils/src/lib/safeFileName.d.ts.map +1 -1
  177. package/analyzer-template/packages/github/dist/utils/src/lib/safeFileName.js +29 -3
  178. package/analyzer-template/packages/github/dist/utils/src/lib/safeFileName.js.map +1 -1
  179. package/analyzer-template/packages/github/src/lib/loadOrCreateCommit.ts +14 -0
  180. package/analyzer-template/packages/github/src/lib/syncPrimaryBranch.ts +2 -0
  181. package/analyzer-template/packages/process/index.ts +2 -0
  182. package/analyzer-template/packages/process/package.json +12 -0
  183. package/analyzer-template/packages/process/tsconfig.json +8 -0
  184. package/analyzer-template/packages/types/index.ts +3 -6
  185. package/analyzer-template/packages/types/src/types/Analysis.ts +87 -27
  186. package/analyzer-template/packages/types/src/types/Entity.ts +2 -0
  187. package/analyzer-template/packages/types/src/types/Scenario.ts +9 -77
  188. package/analyzer-template/packages/types/src/types/ScenariosDataStructure.ts +175 -0
  189. package/analyzer-template/packages/types/src/types/StatementInfo.ts +2 -0
  190. package/analyzer-template/packages/utils/dist/types/index.d.ts +3 -4
  191. package/analyzer-template/packages/utils/dist/types/index.d.ts.map +1 -1
  192. package/analyzer-template/packages/utils/dist/types/index.js +0 -1
  193. package/analyzer-template/packages/utils/dist/types/index.js.map +1 -1
  194. package/analyzer-template/packages/utils/dist/types/src/types/Analysis.d.ts +71 -27
  195. package/analyzer-template/packages/utils/dist/types/src/types/Analysis.d.ts.map +1 -1
  196. package/analyzer-template/packages/utils/dist/types/src/types/Entity.d.ts +2 -0
  197. package/analyzer-template/packages/utils/dist/types/src/types/Entity.d.ts.map +1 -1
  198. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts +9 -54
  199. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts.map +1 -1
  200. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.js +1 -21
  201. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.js.map +1 -1
  202. package/analyzer-template/packages/utils/dist/types/src/types/ScenariosDataStructure.d.ts +148 -0
  203. package/analyzer-template/packages/utils/dist/types/src/types/ScenariosDataStructure.d.ts.map +1 -1
  204. package/analyzer-template/packages/utils/dist/types/src/types/StatementInfo.d.ts +2 -0
  205. package/analyzer-template/packages/utils/dist/types/src/types/StatementInfo.d.ts.map +1 -1
  206. package/analyzer-template/packages/utils/dist/utils/src/lib/safeFileName.d.ts +9 -1
  207. package/analyzer-template/packages/utils/dist/utils/src/lib/safeFileName.d.ts.map +1 -1
  208. package/analyzer-template/packages/utils/dist/utils/src/lib/safeFileName.js +29 -3
  209. package/analyzer-template/packages/utils/dist/utils/src/lib/safeFileName.js.map +1 -1
  210. package/analyzer-template/packages/utils/src/lib/safeFileName.ts +48 -3
  211. package/analyzer-template/playwright/capture.ts +37 -18
  212. package/analyzer-template/playwright/getCodeYamInfo.ts +12 -7
  213. package/analyzer-template/playwright/waitForServer.ts +21 -6
  214. package/analyzer-template/project/analyzeBaselineCommit.ts +4 -0
  215. package/analyzer-template/project/analyzeBranchCommit.ts +4 -0
  216. package/analyzer-template/project/analyzeFileEntities.ts +4 -0
  217. package/analyzer-template/project/analyzeRegularCommit.ts +4 -0
  218. package/analyzer-template/project/constructMockCode.ts +1112 -169
  219. package/analyzer-template/project/controller/startController.ts +16 -1
  220. package/analyzer-template/project/executeLibraryFunctionDirect.ts +7 -3
  221. package/analyzer-template/project/mocks/analyzeFileMock.ts +8 -7
  222. package/analyzer-template/project/orchestrateCapture/KyselyAnalysisLoader.ts +3 -6
  223. package/analyzer-template/project/orchestrateCapture/SequentialCaptureTaskRunner.ts +7 -1
  224. package/analyzer-template/project/orchestrateCapture.ts +36 -3
  225. package/analyzer-template/project/reconcileMockDataKeys.ts +220 -78
  226. package/analyzer-template/project/runAnalysis.ts +11 -0
  227. package/analyzer-template/project/serverOnlyModules.ts +127 -2
  228. package/analyzer-template/project/start.ts +16 -4
  229. package/analyzer-template/project/startScenarioCapture.ts +6 -0
  230. package/analyzer-template/project/writeMockDataTsx.ts +164 -24
  231. package/analyzer-template/project/writeScenarioClientWrapper.ts +21 -0
  232. package/analyzer-template/project/writeScenarioComponents.ts +304 -112
  233. package/analyzer-template/project/writeScenarioFiles.ts +26 -0
  234. package/analyzer-template/project/writeSimpleRoot.ts +11 -35
  235. package/analyzer-template/scripts/comboWorkerLoop.cjs +1 -0
  236. package/analyzer-template/scripts/defaultCmd.sh +9 -0
  237. package/analyzer-template/tsconfig.json +2 -1
  238. package/background/src/lib/local/createLocalAnalyzer.js +1 -29
  239. package/background/src/lib/local/createLocalAnalyzer.js.map +1 -1
  240. package/background/src/lib/local/execAsync.js +1 -1
  241. package/background/src/lib/local/execAsync.js.map +1 -1
  242. package/background/src/lib/virtualized/common/execAsync.js +1 -1
  243. package/background/src/lib/virtualized/common/execAsync.js.map +1 -1
  244. package/background/src/lib/virtualized/project/analyzeBaselineCommit.js +2 -1
  245. package/background/src/lib/virtualized/project/analyzeBaselineCommit.js.map +1 -1
  246. package/background/src/lib/virtualized/project/analyzeBranchCommit.js +2 -1
  247. package/background/src/lib/virtualized/project/analyzeBranchCommit.js.map +1 -1
  248. package/background/src/lib/virtualized/project/analyzeFileEntities.js +2 -1
  249. package/background/src/lib/virtualized/project/analyzeFileEntities.js.map +1 -1
  250. package/background/src/lib/virtualized/project/analyzeRegularCommit.js +2 -1
  251. package/background/src/lib/virtualized/project/analyzeRegularCommit.js.map +1 -1
  252. package/background/src/lib/virtualized/project/constructMockCode.js +987 -130
  253. package/background/src/lib/virtualized/project/constructMockCode.js.map +1 -1
  254. package/background/src/lib/virtualized/project/controller/startController.js +11 -1
  255. package/background/src/lib/virtualized/project/controller/startController.js.map +1 -1
  256. package/background/src/lib/virtualized/project/executeLibraryFunctionDirect.js +6 -3
  257. package/background/src/lib/virtualized/project/executeLibraryFunctionDirect.js.map +1 -1
  258. package/background/src/lib/virtualized/project/mocks/analyzeFileMock.js +7 -7
  259. package/background/src/lib/virtualized/project/mocks/analyzeFileMock.js.map +1 -1
  260. package/background/src/lib/virtualized/project/orchestrateCapture/KyselyAnalysisLoader.js +3 -2
  261. package/background/src/lib/virtualized/project/orchestrateCapture/KyselyAnalysisLoader.js.map +1 -1
  262. package/background/src/lib/virtualized/project/orchestrateCapture/SequentialCaptureTaskRunner.js +3 -1
  263. package/background/src/lib/virtualized/project/orchestrateCapture/SequentialCaptureTaskRunner.js.map +1 -1
  264. package/background/src/lib/virtualized/project/orchestrateCapture.js +27 -4
  265. package/background/src/lib/virtualized/project/orchestrateCapture.js.map +1 -1
  266. package/background/src/lib/virtualized/project/reconcileMockDataKeys.js +188 -47
  267. package/background/src/lib/virtualized/project/reconcileMockDataKeys.js.map +1 -1
  268. package/background/src/lib/virtualized/project/runAnalysis.js +9 -0
  269. package/background/src/lib/virtualized/project/runAnalysis.js.map +1 -1
  270. package/background/src/lib/virtualized/project/serverOnlyModules.js +106 -3
  271. package/background/src/lib/virtualized/project/serverOnlyModules.js.map +1 -1
  272. package/background/src/lib/virtualized/project/start.js +15 -4
  273. package/background/src/lib/virtualized/project/start.js.map +1 -1
  274. package/background/src/lib/virtualized/project/startScenarioCapture.js +7 -0
  275. package/background/src/lib/virtualized/project/startScenarioCapture.js.map +1 -1
  276. package/background/src/lib/virtualized/project/writeMockDataTsx.js +139 -23
  277. package/background/src/lib/virtualized/project/writeMockDataTsx.js.map +1 -1
  278. package/background/src/lib/virtualized/project/writeScenarioClientWrapper.js +15 -0
  279. package/background/src/lib/virtualized/project/writeScenarioClientWrapper.js.map +1 -0
  280. package/background/src/lib/virtualized/project/writeScenarioComponents.js +228 -95
  281. package/background/src/lib/virtualized/project/writeScenarioComponents.js.map +1 -1
  282. package/background/src/lib/virtualized/project/writeScenarioFiles.js +19 -0
  283. package/background/src/lib/virtualized/project/writeScenarioFiles.js.map +1 -1
  284. package/background/src/lib/virtualized/project/writeSimpleRoot.js +11 -34
  285. package/background/src/lib/virtualized/project/writeSimpleRoot.js.map +1 -1
  286. package/codeyam-cli/src/cli.js +5 -1
  287. package/codeyam-cli/src/cli.js.map +1 -1
  288. package/codeyam-cli/src/commands/analyze.js +1 -1
  289. package/codeyam-cli/src/commands/analyze.js.map +1 -1
  290. package/codeyam-cli/src/commands/baseline.js +174 -0
  291. package/codeyam-cli/src/commands/baseline.js.map +1 -0
  292. package/codeyam-cli/src/commands/debug.js +28 -18
  293. package/codeyam-cli/src/commands/debug.js.map +1 -1
  294. package/codeyam-cli/src/commands/default.js +0 -15
  295. package/codeyam-cli/src/commands/default.js.map +1 -1
  296. package/codeyam-cli/src/commands/recapture.js +29 -18
  297. package/codeyam-cli/src/commands/recapture.js.map +1 -1
  298. package/codeyam-cli/src/commands/report.js +46 -1
  299. package/codeyam-cli/src/commands/report.js.map +1 -1
  300. package/codeyam-cli/src/commands/start.js +8 -12
  301. package/codeyam-cli/src/commands/start.js.map +1 -1
  302. package/codeyam-cli/src/commands/status.js +23 -1
  303. package/codeyam-cli/src/commands/status.js.map +1 -1
  304. package/codeyam-cli/src/commands/test-startup.js +1 -1
  305. package/codeyam-cli/src/commands/test-startup.js.map +1 -1
  306. package/codeyam-cli/src/commands/wipe.js +108 -0
  307. package/codeyam-cli/src/commands/wipe.js.map +1 -0
  308. package/codeyam-cli/src/utils/__tests__/serverVersionStaleness.test.js +81 -0
  309. package/codeyam-cli/src/utils/__tests__/serverVersionStaleness.test.js.map +1 -0
  310. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +31 -27
  311. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js.map +1 -1
  312. package/codeyam-cli/src/utils/analysisRunner.js +28 -14
  313. package/codeyam-cli/src/utils/analysisRunner.js.map +1 -1
  314. package/codeyam-cli/src/utils/backgroundServer.js +12 -2
  315. package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
  316. package/codeyam-cli/src/utils/database.js +91 -5
  317. package/codeyam-cli/src/utils/database.js.map +1 -1
  318. package/codeyam-cli/src/utils/generateReport.js +4 -3
  319. package/codeyam-cli/src/utils/generateReport.js.map +1 -1
  320. package/codeyam-cli/src/utils/git.js +79 -0
  321. package/codeyam-cli/src/utils/git.js.map +1 -0
  322. package/codeyam-cli/src/utils/install-skills.js +31 -17
  323. package/codeyam-cli/src/utils/install-skills.js.map +1 -1
  324. package/codeyam-cli/src/utils/queue/job.js +105 -0
  325. package/codeyam-cli/src/utils/queue/job.js.map +1 -1
  326. package/codeyam-cli/src/utils/queue/manager.js +6 -0
  327. package/codeyam-cli/src/utils/queue/manager.js.map +1 -1
  328. package/codeyam-cli/src/utils/queue/persistence.js.map +1 -1
  329. package/codeyam-cli/src/utils/serverState.js.map +1 -1
  330. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +7 -5
  331. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js.map +1 -1
  332. package/codeyam-cli/src/utils/versionInfo.js +25 -19
  333. package/codeyam-cli/src/utils/versionInfo.js.map +1 -1
  334. package/codeyam-cli/src/utils/wipe.js +128 -0
  335. package/codeyam-cli/src/utils/wipe.js.map +1 -0
  336. package/codeyam-cli/src/webserver/app/lib/database.js +73 -20
  337. package/codeyam-cli/src/webserver/app/lib/database.js.map +1 -1
  338. package/codeyam-cli/src/webserver/bootstrap.js +40 -0
  339. package/codeyam-cli/src/webserver/bootstrap.js.map +1 -1
  340. package/codeyam-cli/src/webserver/build/client/assets/EntityItem-BXhEawa3.js +1 -0
  341. package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeBadge-CzGX-miz.js → EntityTypeBadge-DLqD3qNt.js} +1 -1
  342. package/codeyam-cli/src/webserver/build/client/assets/EntityTypeIcon-Ba2JVPzP.js +41 -0
  343. package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-C8lyxW9k.js +34 -0
  344. package/codeyam-cli/src/webserver/build/client/assets/InteractivePreview-aht4aafF.js +25 -0
  345. package/codeyam-cli/src/webserver/build/client/assets/{LibraryFunctionPreview-CBQPrpT0.js → LibraryFunctionPreview-CVtiBnY5.js} +1 -1
  346. package/codeyam-cli/src/webserver/build/client/assets/{LoadingDots-D1CdlbrV.js → LoadingDots-B0GLXMsr.js} +1 -1
  347. package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-wDPcZNKx.js → LogViewer-xgeCVgSM.js} +1 -1
  348. package/codeyam-cli/src/webserver/build/client/assets/ReportIssueModal-D4TZhLuw.js +21 -0
  349. package/codeyam-cli/src/webserver/build/client/assets/{SafeScreenshot-BfmDgXxG.js → SafeScreenshot-DuDvi0jm.js} +1 -1
  350. package/codeyam-cli/src/webserver/build/client/assets/ScenarioViewer-DEx02QDa.js +10 -0
  351. package/codeyam-cli/src/webserver/build/client/assets/{TruncatedFilePath-6J7zDUD5.js → TruncatedFilePath-DyFZkK0l.js} +1 -1
  352. package/codeyam-cli/src/webserver/build/client/assets/_index-BwqWJOgH.js +11 -0
  353. package/codeyam-cli/src/webserver/build/client/assets/activity.(_tab)-DoLIqZX2.js +37 -0
  354. package/codeyam-cli/src/webserver/build/client/assets/{chevron-down-BYimnrHg.js → chevron-down-Cx24_aWc.js} +1 -1
  355. package/codeyam-cli/src/webserver/build/client/assets/chunk-EPOLDU6W-CXRTFQ3F.js +51 -0
  356. package/codeyam-cli/src/webserver/build/client/assets/{circle-check-CaVsIRxt.js → circle-check-BOARzkeR.js} +1 -1
  357. package/codeyam-cli/src/webserver/build/client/assets/{createLucideIcon-CgUsG7ib.js → createLucideIcon-BdhJEx6B.js} +1 -1
  358. package/codeyam-cli/src/webserver/build/client/assets/{cy-logo-cli-C1gnJVOL.svg → cy-logo-cli-CCKUIm0S.svg} +2 -2
  359. package/codeyam-cli/src/webserver/build/client/assets/cy-logo-cli-DcX-ZS3p.js +1 -0
  360. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-BRb-0kQl.js +1 -0
  361. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-zUEpfPsu.js → entity._sha._-C2N4Op8e.js} +12 -12
  362. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-DavjRmOY.js +6 -0
  363. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-D1T4TGjf.js +6 -0
  364. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.edit._scenarioId-CfLCUi9S.js → entity._sha_.edit._scenarioId-CTBG2mmz.js} +1 -1
  365. package/codeyam-cli/src/webserver/build/client/assets/{entry.client-DKJyZfAY.js → entry.client-CS2cb_eZ.js} +6 -6
  366. package/codeyam-cli/src/webserver/build/client/assets/executionFlowCoverage-BWhdfn70.js +1 -0
  367. package/codeyam-cli/src/webserver/build/client/assets/{fileTableUtils-DAtOlaWE.js → fileTableUtils-DMJ7zii9.js} +1 -1
  368. package/codeyam-cli/src/webserver/build/client/assets/files-Cs4MdYtv.js +1 -0
  369. package/codeyam-cli/src/webserver/build/client/assets/{git-D62Lxxmv.js → git-B4RJRvYB.js} +2 -2
  370. package/codeyam-cli/src/webserver/build/client/assets/git-commit-horizontal-CysbcZxi.js +6 -0
  371. package/codeyam-cli/src/webserver/build/client/assets/globals-DMUaGAqV.css +1 -0
  372. package/codeyam-cli/src/webserver/build/client/assets/{index-CzNNiTkw.js → index-B1h680n5.js} +1 -1
  373. package/codeyam-cli/src/webserver/build/client/assets/{index-BosqDOlH.js → index-lzqtyFU8.js} +1 -1
  374. package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-CNp9QFCX.js → loader-circle-B7B9V-bu.js} +1 -1
  375. package/codeyam-cli/src/webserver/build/client/assets/manifest-f874c610.js +1 -0
  376. package/codeyam-cli/src/webserver/build/client/assets/root-Bz5TunQg.js +57 -0
  377. package/codeyam-cli/src/webserver/build/client/assets/rules-hEkvVw2-.js +97 -0
  378. package/codeyam-cli/src/webserver/build/client/assets/{search-DDGjYAMJ.js → search-CxXUmBSd.js} +1 -1
  379. package/codeyam-cli/src/webserver/build/client/assets/settings-CS5f3WzT.js +1 -0
  380. package/codeyam-cli/src/webserver/build/client/assets/simulations-DwFIBT09.js +1 -0
  381. package/codeyam-cli/src/webserver/build/client/assets/{triangle-alert-CBc5dE1s.js → triangle-alert-B6LgvRJg.js} +1 -1
  382. package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-C1v1PQzo.js +1 -0
  383. package/codeyam-cli/src/webserver/build/client/assets/{useLastLogLine-BqPPNjAl.js → useLastLogLine-aSv48UbS.js} +1 -1
  384. package/codeyam-cli/src/webserver/build/client/assets/useReportContext-DYxHZQuP.js +1 -0
  385. package/codeyam-cli/src/webserver/build/client/assets/{useToast-DWHcCcl1.js → useToast-mBRpZPiu.js} +1 -1
  386. package/codeyam-cli/src/webserver/build/server/assets/index-uNNbimct.js +1 -0
  387. package/codeyam-cli/src/webserver/build/server/assets/server-build-B08qC4Y7.js +257 -0
  388. package/codeyam-cli/src/webserver/build/server/index.js +1 -1
  389. package/codeyam-cli/src/webserver/build-info.json +5 -5
  390. package/codeyam-cli/src/webserver/server.js +35 -25
  391. package/codeyam-cli/src/webserver/server.js.map +1 -1
  392. package/codeyam-cli/templates/codeyam-power-rules-hook.sh +200 -0
  393. package/codeyam-cli/templates/{codeyam-debug-skill.md → codeyam:debug.md} +48 -4
  394. package/codeyam-cli/templates/{debug-codeyam.md → codeyam:diagnose.md} +185 -23
  395. package/codeyam-cli/templates/codeyam:new-rule.md +13 -0
  396. package/codeyam-cli/templates/codeyam:power-rules.md +449 -0
  397. package/codeyam-cli/templates/{codeyam-setup-skill.md → codeyam:setup.md} +139 -4
  398. package/codeyam-cli/templates/{codeyam-sim-skill.md → codeyam:sim.md} +1 -1
  399. package/codeyam-cli/templates/{codeyam-test-skill.md → codeyam:test.md} +1 -1
  400. package/codeyam-cli/templates/{codeyam-verify-skill.md → codeyam:verify.md} +1 -1
  401. package/package.json +6 -5
  402. package/packages/ai/index.js +5 -4
  403. package/packages/ai/index.js.map +1 -1
  404. package/packages/ai/src/lib/analyzeScope.js +97 -0
  405. package/packages/ai/src/lib/analyzeScope.js.map +1 -1
  406. package/packages/ai/src/lib/astScopes/arrayDerivationDetector.js +150 -0
  407. package/packages/ai/src/lib/astScopes/arrayDerivationDetector.js.map +1 -0
  408. package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js +84 -1
  409. package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js.map +1 -1
  410. package/packages/ai/src/lib/astScopes/conditionalEffectsExtractor.js +435 -0
  411. package/packages/ai/src/lib/astScopes/conditionalEffectsExtractor.js.map +1 -0
  412. package/packages/ai/src/lib/astScopes/methodSemantics.js +97 -6
  413. package/packages/ai/src/lib/astScopes/methodSemantics.js.map +1 -1
  414. package/packages/ai/src/lib/astScopes/patterns/ifStatementHandler.js +8 -0
  415. package/packages/ai/src/lib/astScopes/patterns/ifStatementHandler.js.map +1 -1
  416. package/packages/ai/src/lib/astScopes/patterns/switchStatementHandler.js +7 -0
  417. package/packages/ai/src/lib/astScopes/patterns/switchStatementHandler.js.map +1 -1
  418. package/packages/ai/src/lib/astScopes/patterns/variableDeclarationHandler.js +138 -1
  419. package/packages/ai/src/lib/astScopes/patterns/variableDeclarationHandler.js.map +1 -1
  420. package/packages/ai/src/lib/astScopes/processExpression.js +654 -13
  421. package/packages/ai/src/lib/astScopes/processExpression.js.map +1 -1
  422. package/packages/ai/src/lib/checkAllAttributes.js +24 -9
  423. package/packages/ai/src/lib/checkAllAttributes.js.map +1 -1
  424. package/packages/ai/src/lib/completionCall.js +178 -31
  425. package/packages/ai/src/lib/completionCall.js.map +1 -1
  426. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +715 -64
  427. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
  428. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.js +2 -1
  429. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.js.map +1 -1
  430. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.js +230 -23
  431. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.js.map +1 -1
  432. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.js +77 -55
  433. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.js.map +1 -1
  434. package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js +67 -3
  435. package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js.map +1 -1
  436. package/packages/ai/src/lib/dataStructure/helpers/convertNullToUndefinedBySchema.js +86 -0
  437. package/packages/ai/src/lib/dataStructure/helpers/convertNullToUndefinedBySchema.js.map +1 -0
  438. package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js +6 -1
  439. package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js.map +1 -1
  440. package/packages/ai/src/lib/dataStructure/helpers/fixNullIdsBySchema.js +107 -0
  441. package/packages/ai/src/lib/dataStructure/helpers/fixNullIdsBySchema.js.map +1 -0
  442. package/packages/ai/src/lib/dataStructureChunking.js +111 -0
  443. package/packages/ai/src/lib/dataStructureChunking.js.map +1 -0
  444. package/packages/ai/src/lib/deepEqual.js +32 -0
  445. package/packages/ai/src/lib/deepEqual.js.map +1 -0
  446. package/packages/ai/src/lib/e2eDataTracking.js +241 -0
  447. package/packages/ai/src/lib/e2eDataTracking.js.map +1 -0
  448. package/packages/ai/src/lib/extractCriticalDataKeys.js +96 -0
  449. package/packages/ai/src/lib/extractCriticalDataKeys.js.map +1 -0
  450. package/packages/ai/src/lib/generateChangesEntityScenarioData.js +62 -5
  451. package/packages/ai/src/lib/generateChangesEntityScenarioData.js.map +1 -1
  452. package/packages/ai/src/lib/generateChangesEntityScenarios.js +78 -120
  453. package/packages/ai/src/lib/generateChangesEntityScenarios.js.map +1 -1
  454. package/packages/ai/src/lib/generateEntityDataStructure.js +1 -0
  455. package/packages/ai/src/lib/generateEntityDataStructure.js.map +1 -1
  456. package/packages/ai/src/lib/generateEntityScenarioData.js +906 -82
  457. package/packages/ai/src/lib/generateEntityScenarioData.js.map +1 -1
  458. package/packages/ai/src/lib/generateEntityScenarios.js +170 -162
  459. package/packages/ai/src/lib/generateEntityScenarios.js.map +1 -1
  460. package/packages/ai/src/lib/generateExecutionFlows.js +392 -0
  461. package/packages/ai/src/lib/generateExecutionFlows.js.map +1 -0
  462. package/packages/ai/src/lib/generateExecutionFlowsFromConditionalEffects.js +380 -0
  463. package/packages/ai/src/lib/generateExecutionFlowsFromConditionalEffects.js.map +1 -0
  464. package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js +1440 -0
  465. package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js.map +1 -0
  466. package/packages/ai/src/lib/generateExecutionFlowsFromJsxUsages.js +194 -0
  467. package/packages/ai/src/lib/generateExecutionFlowsFromJsxUsages.js.map +1 -0
  468. package/packages/ai/src/lib/guessScenarioDataFromDescription.js +2 -2
  469. package/packages/ai/src/lib/guessScenarioDataFromDescription.js.map +1 -1
  470. package/packages/ai/src/lib/isolateScopes.js +231 -4
  471. package/packages/ai/src/lib/isolateScopes.js.map +1 -1
  472. package/packages/ai/src/lib/mergeStatements.js +26 -3
  473. package/packages/ai/src/lib/mergeStatements.js.map +1 -1
  474. package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenarioDataGenerator.js +1 -1
  475. package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenarioDataGenerator.js.map +1 -1
  476. package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.js +21 -100
  477. package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.js.map +1 -1
  478. package/packages/ai/src/lib/promptGenerators/generateChunkPrompt.js +54 -0
  479. package/packages/ai/src/lib/promptGenerators/generateChunkPrompt.js.map +1 -0
  480. package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js +68 -6
  481. package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js.map +1 -1
  482. package/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.js +10 -70
  483. package/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.js.map +1 -1
  484. package/packages/ai/src/lib/promptGenerators/generateMissingKeysPrompt.js +45 -0
  485. package/packages/ai/src/lib/promptGenerators/generateMissingKeysPrompt.js.map +1 -0
  486. package/packages/ai/src/lib/promptGenerators/guessNewScenarioDataFromDescriptionGenerator.js +9 -9
  487. package/packages/ai/src/lib/promptGenerators/guessNewScenarioDataFromDescriptionGenerator.js.map +1 -1
  488. package/packages/ai/src/lib/promptGenerators/simplifyKeysForLLM.js +335 -0
  489. package/packages/ai/src/lib/promptGenerators/simplifyKeysForLLM.js.map +1 -0
  490. package/packages/ai/src/lib/resolvePathToControllable.js +667 -0
  491. package/packages/ai/src/lib/resolvePathToControllable.js.map +1 -0
  492. package/packages/ai/src/lib/splitOutsideParentheses.js +3 -1
  493. package/packages/ai/src/lib/splitOutsideParentheses.js.map +1 -1
  494. package/packages/ai/src/lib/worker/SerializableDataStructure.js +29 -0
  495. package/packages/ai/src/lib/worker/SerializableDataStructure.js.map +1 -1
  496. package/packages/analyze/src/lib/FileAnalyzer.js +15 -0
  497. package/packages/analyze/src/lib/FileAnalyzer.js.map +1 -1
  498. package/packages/analyze/src/lib/analysisContext.js +30 -5
  499. package/packages/analyze/src/lib/analysisContext.js.map +1 -1
  500. package/packages/analyze/src/lib/asts/nodes/index.js +1 -0
  501. package/packages/analyze/src/lib/asts/nodes/index.js.map +1 -1
  502. package/packages/analyze/src/lib/asts/nodes/isAsyncFunction.js +52 -0
  503. package/packages/analyze/src/lib/asts/nodes/isAsyncFunction.js.map +1 -0
  504. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js +151 -52
  505. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js.map +1 -1
  506. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js +10 -0
  507. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js.map +1 -1
  508. package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js +2 -0
  509. package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js.map +1 -1
  510. package/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.js +31 -7
  511. package/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.js.map +1 -1
  512. package/packages/analyze/src/lib/files/analyzeChange.js +21 -11
  513. package/packages/analyze/src/lib/files/analyzeChange.js.map +1 -1
  514. package/packages/analyze/src/lib/files/analyzeEntity.js +9 -8
  515. package/packages/analyze/src/lib/files/analyzeEntity.js.map +1 -1
  516. package/packages/analyze/src/lib/files/analyzeInitial.js +9 -10
  517. package/packages/analyze/src/lib/files/analyzeInitial.js.map +1 -1
  518. package/packages/analyze/src/lib/files/enums/steps.js +1 -1
  519. package/packages/analyze/src/lib/files/enums/steps.js.map +1 -1
  520. package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js +121 -37
  521. package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js.map +1 -1
  522. package/packages/analyze/src/lib/files/scenarios/enrichUnknownTypesFromSourceEquivalencies.js +85 -0
  523. package/packages/analyze/src/lib/files/scenarios/enrichUnknownTypesFromSourceEquivalencies.js.map +1 -0
  524. package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js +410 -55
  525. package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js.map +1 -1
  526. package/packages/analyze/src/lib/files/scenarios/generateChangesScenarios.js +29 -34
  527. package/packages/analyze/src/lib/files/scenarios/generateChangesScenarios.js.map +1 -1
  528. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +126 -57
  529. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
  530. package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js +96 -0
  531. package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js.map +1 -0
  532. package/packages/analyze/src/lib/files/scenarios/generateScenarioData.js +27 -98
  533. package/packages/analyze/src/lib/files/scenarios/generateScenarioData.js.map +1 -1
  534. package/packages/analyze/src/lib/files/scenarios/generateScenarios.js +2 -3
  535. package/packages/analyze/src/lib/files/scenarios/generateScenarios.js.map +1 -1
  536. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +342 -83
  537. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js.map +1 -1
  538. package/packages/analyze/src/lib/files/scenarios/mergeValidatedDataStructures.js +46 -9
  539. package/packages/analyze/src/lib/files/scenarios/mergeValidatedDataStructures.js.map +1 -1
  540. package/packages/aws/src/lib/ecs/ecsDefineContainer.js +2 -2
  541. package/packages/aws/src/lib/ecs/ecsDefineContainer.js.map +1 -1
  542. package/packages/aws/src/lib/ecs/ecsTaskFactory.js +17 -61
  543. package/packages/aws/src/lib/ecs/ecsTaskFactory.js.map +1 -1
  544. package/packages/database/src/lib/kysely/tables/debugReportsTable.js.map +1 -1
  545. package/packages/database/src/lib/loadAnalyses.js +45 -2
  546. package/packages/database/src/lib/loadAnalyses.js.map +1 -1
  547. package/packages/database/src/lib/loadCommits.js +13 -1
  548. package/packages/database/src/lib/loadCommits.js.map +1 -1
  549. package/packages/database/src/lib/loadEntities.js +23 -4
  550. package/packages/database/src/lib/loadEntities.js.map +1 -1
  551. package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.js +7 -4
  552. package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.js.map +1 -1
  553. package/packages/generate/index.js +3 -0
  554. package/packages/generate/index.js.map +1 -1
  555. package/packages/generate/src/lib/componentScenarioPage/componentScenarioPageNext.js +16 -1
  556. package/packages/generate/src/lib/componentScenarioPage/componentScenarioPageNext.js.map +1 -1
  557. package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js +189 -0
  558. package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js.map +1 -0
  559. package/packages/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.js +53 -0
  560. package/packages/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.js.map +1 -0
  561. package/packages/generate/src/lib/scenarioComponentForServer.js +89 -0
  562. package/packages/generate/src/lib/scenarioComponentForServer.js.map +1 -0
  563. package/packages/github/src/lib/loadOrCreateCommit.js +10 -0
  564. package/packages/github/src/lib/loadOrCreateCommit.js.map +1 -1
  565. package/packages/github/src/lib/syncPrimaryBranch.js +3 -0
  566. package/packages/github/src/lib/syncPrimaryBranch.js.map +1 -1
  567. package/packages/process/index.js +3 -0
  568. package/packages/process/index.js.map +1 -0
  569. package/packages/process/src/GlobalProcessManager.js.map +1 -0
  570. package/{background/src/lib/process → packages/process/src}/ProcessManager.js +1 -1
  571. package/packages/process/src/ProcessManager.js.map +1 -0
  572. package/packages/process/src/index.js.map +1 -0
  573. package/packages/process/src/managedExecAsync.js.map +1 -0
  574. package/packages/types/index.js +0 -1
  575. package/packages/types/index.js.map +1 -1
  576. package/packages/types/src/types/Scenario.js +1 -21
  577. package/packages/types/src/types/Scenario.js.map +1 -1
  578. package/packages/utils/src/lib/safeFileName.js +29 -3
  579. package/packages/utils/src/lib/safeFileName.js.map +1 -1
  580. package/scripts/finalize-analyzer.cjs +3 -3
  581. package/analyzer-template/packages/ai/src/lib/findMatchingAttribute.ts +0 -102
  582. package/analyzer-template/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.ts +0 -409
  583. package/analyzer-template/packages/ai/src/lib/generateChangesEntityKeyAttributes.ts +0 -288
  584. package/analyzer-template/packages/ai/src/lib/generateEntityKeyAttributes.ts +0 -495
  585. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityKeyAttributesGenerator.ts +0 -67
  586. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.ts +0 -120
  587. package/analyzer-template/process/INTEGRATION_COMPLETE.md +0 -333
  588. package/analyzer-template/process/INTEGRATION_EXAMPLE.md +0 -525
  589. package/analyzer-template/process/README.md +0 -507
  590. package/background/src/lib/process/GlobalProcessManager.js.map +0 -1
  591. package/background/src/lib/process/ProcessManager.js.map +0 -1
  592. package/background/src/lib/process/index.js.map +0 -1
  593. package/background/src/lib/process/managedExecAsync.js.map +0 -1
  594. package/codeyam-cli/scripts/fixtures/cal.com/universal-mocks/packages/prisma/index.js +0 -238
  595. package/codeyam-cli/scripts/fixtures/cal.com/universal-mocks/packages/prisma/index.js.map +0 -1
  596. package/codeyam-cli/scripts/fixtures/formbricks/universal-mocks/apps/web/lib/instance/service.js +0 -7
  597. package/codeyam-cli/scripts/fixtures/formbricks/universal-mocks/apps/web/lib/instance/service.js.map +0 -1
  598. package/codeyam-cli/src/webserver/build/client/assets/EntityItem-wXL1Z2Aq.js +0 -1
  599. package/codeyam-cli/src/webserver/build/client/assets/EntityTypeIcon-CXFKsCOD.js +0 -41
  600. package/codeyam-cli/src/webserver/build/client/assets/InteractivePreview-D-9pXIaY.js +0 -25
  601. package/codeyam-cli/src/webserver/build/client/assets/ReportIssueModal-4lcOlid-.js +0 -11
  602. package/codeyam-cli/src/webserver/build/client/assets/ScenarioViewer-CUxUNEEC.js +0 -15
  603. package/codeyam-cli/src/webserver/build/client/assets/_index-DHImXdXq.js +0 -11
  604. package/codeyam-cli/src/webserver/build/client/assets/activity.(_tab)-2mG6mjVb.js +0 -32
  605. package/codeyam-cli/src/webserver/build/client/assets/chunk-JMJ3UQ3L-BambyYE_.js +0 -51
  606. package/codeyam-cli/src/webserver/build/client/assets/cy-logo-cli-CKnwPCDr.js +0 -1
  607. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-DW_hdGUc.js +0 -1
  608. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-DyB90fWk.js +0 -1
  609. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-D_3ero5o.js +0 -1
  610. package/codeyam-cli/src/webserver/build/client/assets/files-ClR0d32A.js +0 -1
  611. package/codeyam-cli/src/webserver/build/client/assets/globals-C6vQASxy.css +0 -1
  612. package/codeyam-cli/src/webserver/build/client/assets/keyAttributeCoverage-CTlFMihX.js +0 -1
  613. package/codeyam-cli/src/webserver/build/client/assets/manifest-09d684be.js +0 -1
  614. package/codeyam-cli/src/webserver/build/client/assets/root-BxJUvKau.js +0 -56
  615. package/codeyam-cli/src/webserver/build/client/assets/settings-DgTyB-Wg.js +0 -1
  616. package/codeyam-cli/src/webserver/build/client/assets/simulations-CoNWGt0K.js +0 -1
  617. package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-BMIGFP-m.js +0 -1
  618. package/codeyam-cli/src/webserver/build/client/assets/useInteractiveMode-Dk_FQqWJ.js +0 -1
  619. package/codeyam-cli/src/webserver/build/client/assets/useReportContext-DsJbgMY9.js +0 -1
  620. package/codeyam-cli/src/webserver/build/server/assets/index-CV6i1S1A.js +0 -1
  621. package/codeyam-cli/src/webserver/build/server/assets/server-build-BDlyhfrv.js +0 -175
  622. package/packages/ai/src/lib/findMatchingAttribute.js +0 -77
  623. package/packages/ai/src/lib/findMatchingAttribute.js.map +0 -1
  624. package/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.js +0 -298
  625. package/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.js.map +0 -1
  626. package/packages/ai/src/lib/generateChangesEntityKeyAttributes.js +0 -226
  627. package/packages/ai/src/lib/generateChangesEntityKeyAttributes.js.map +0 -1
  628. package/packages/ai/src/lib/generateEntityKeyAttributes.js +0 -408
  629. package/packages/ai/src/lib/generateEntityKeyAttributes.js.map +0 -1
  630. package/packages/ai/src/lib/isFrontend.js +0 -5
  631. package/packages/ai/src/lib/isFrontend.js.map +0 -1
  632. package/packages/ai/src/lib/promptGenerators/generateEntityKeyAttributesGenerator.js +0 -40
  633. package/packages/ai/src/lib/promptGenerators/generateEntityKeyAttributesGenerator.js.map +0 -1
  634. package/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.js +0 -77
  635. package/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.js.map +0 -1
  636. /package/analyzer-template/{process → packages/process/src}/GlobalProcessManager.ts +0 -0
  637. /package/analyzer-template/{process → packages/process/src}/ProcessManager.ts +0 -0
  638. /package/analyzer-template/{process → packages/process/src}/index.ts +0 -0
  639. /package/analyzer-template/{process → packages/process/src}/managedExecAsync.ts +0 -0
  640. /package/codeyam-cli/src/webserver/build/client/assets/{api.link-scenario-value-l0sNRNKZ.js → api.health-l0sNRNKZ.js} +0 -0
  641. /package/codeyam-cli/src/webserver/build/client/assets/{api.update-key-attributes-l0sNRNKZ.js → api.restart-server-l0sNRNKZ.js} +0 -0
  642. /package/codeyam-cli/src/webserver/build/client/assets/{api.update-valid-values-l0sNRNKZ.js → api.rules-l0sNRNKZ.js} +0 -0
  643. /package/{background/src/lib/process → packages/process/src}/GlobalProcessManager.js +0 -0
  644. /package/{background/src/lib/process → packages/process/src}/index.js +0 -0
  645. /package/{background/src/lib/process → packages/process/src}/managedExecAsync.js +0 -0
@@ -1,55 +1,45 @@
1
1
  import completionCall from './completionCall';
2
2
  import { saveLlmCall } from '~codeyam/aws/dynamodb';
3
3
  import generateEntityScenariosGenerator from './promptGenerators/generateEntityScenariosGenerator';
4
+ import { getFlowsForScenarioGeneration } from './generateExecutionFlows';
4
5
 
5
6
  import {
6
7
  Analysis,
7
8
  Entity,
9
+ ExecutionFlow,
8
10
  PlaywrightInstruction,
9
- ReadonlyAnalysisMap,
10
11
  Scenario,
11
- ValueOptionRef,
12
12
  } from '~codeyam/types';
13
- // import findMatchingAttribute from './findMatchingAttribute';
14
13
  import { awsLog } from '~codeyam/utils';
15
14
  import { sanitizePlaywrightInstructions } from './validatePlaywrightInstructions';
16
15
  import { AI, DEFAULT_LARGER_MODEL, parseJsonSafe } from '~codeyam/ai';
17
16
 
17
+ /**
18
+ * Maximum number of execution flows to send to the LLM for scenario generation.
19
+ * When there are more flows than this threshold, we filter to the top N
20
+ * highest priority flows to avoid overwhelming the LLM and wasting tokens.
21
+ */
22
+ const MAX_FLOWS_FOR_SCENARIO_GENERATION = 30;
23
+
18
24
  export interface ScenarioResult {
19
25
  name: string;
20
26
  testName: string;
21
27
  description: string;
22
- /**
23
- * Key attribute instructions with structured value references.
24
- * Format: { dataStructurePath: { localVariable, instruction, valueOptionRef? } }
25
- */
26
- keyAttributeInstructions: {
27
- [key: string]:
28
- | string
29
- | {
30
- localVariable: string;
31
- instruction: string;
32
- /** Reference to validValueOption index for tracking coverage */
33
- valueOptionRef?: ValueOptionRef;
34
- /** Reference to errorValueOption index for error scenarios */
35
- errorOptionRef?: ValueOptionRef;
36
- };
37
- };
38
- codeSnippet: string;
39
- fix: string;
40
- fixSnippet: string;
41
- likelihood: number;
42
- likelihoodDescription: string;
43
- severity: number;
44
- severityDescription: string;
45
- dataMapping: { [key: string]: string };
28
+ /** IDs of execution flows this scenario covers */
29
+ coveredFlows: string[];
30
+ codeSnippet?: string;
31
+ fix?: string;
32
+ fixSnippet?: string;
33
+ likelihood?: number;
34
+ likelihoodDescription?: string;
35
+ severity?: number;
36
+ severityDescription?: string;
46
37
  playwrightInstructions?: PlaywrightInstruction[];
47
38
  }
48
39
 
49
40
  interface GenerateEntityScenariosArgs {
50
41
  entity: Pick<Entity, 'projectId' | 'filePath' | 'name' | 'code' | 'metadata'>;
51
- keyAttributes: Analysis['metadata']['keyAttributes'];
52
- dependentAnalyses?: ReadonlyAnalysisMap;
42
+ executionFlows?: ExecutionFlow[];
53
43
  analysis: Analysis;
54
44
  error?: boolean;
55
45
  model?: AI.Model;
@@ -59,7 +49,7 @@ const DEFAULT_SCENARIO_NAME = 'Default Scenario';
59
49
 
60
50
  export default async function generateEntityScenarios({
61
51
  entity,
62
- keyAttributes,
52
+ executionFlows,
63
53
  analysis,
64
54
  error,
65
55
  model,
@@ -69,9 +59,50 @@ export default async function generateEntityScenarios({
69
59
  entityName: entity.name,
70
60
  });
71
61
 
62
+ // If no execution flows are available (and not generating error scenarios),
63
+ // return only the Default Scenario without calling LLM
64
+ if (!error && (!executionFlows || executionFlows.length === 0)) {
65
+ console.log(
66
+ `CodeYam: No execution flows available for ${entity.filePath} ${entity.name}, creating Default Scenario only`,
67
+ );
68
+ const defaultScenario: Scenario = {
69
+ projectId: entity.projectId,
70
+ analysisId: analysis.id,
71
+ name: DEFAULT_SCENARIO_NAME,
72
+ description: 'Default component rendering with standard data',
73
+ metadata: {
74
+ testName: 'it("renders the component with default data")',
75
+ error: false,
76
+ coveredFlows: [],
77
+ playwrightInstructions: [],
78
+ },
79
+ };
80
+ return {
81
+ scenarios: [defaultScenario],
82
+ llmCall: null,
83
+ };
84
+ }
85
+
86
+ // Filter execution flows to top N highest priority when there are many flows
87
+ // This prevents overwhelming the LLM and wasting tokens on low-priority flows
88
+ let filteredFlows = executionFlows;
89
+ if (
90
+ executionFlows &&
91
+ executionFlows.length > MAX_FLOWS_FOR_SCENARIO_GENERATION
92
+ ) {
93
+ filteredFlows = getFlowsForScenarioGeneration(executionFlows, {
94
+ maxFlows: MAX_FLOWS_FOR_SCENARIO_GENERATION,
95
+ ensureGroupDiversity: true,
96
+ }) as ExecutionFlow[];
97
+
98
+ console.log(
99
+ `CodeYam: Filtered ${executionFlows.length} flows to ${filteredFlows.length} for scenario generation`,
100
+ );
101
+ }
102
+
72
103
  const prompt = generateEntityScenariosGenerator({
73
104
  entity,
74
- keyAttributes,
105
+ executionFlows: filteredFlows,
75
106
  error,
76
107
  });
77
108
 
@@ -100,14 +131,14 @@ export default async function generateEntityScenarios({
100
131
  filePath: entity.filePath,
101
132
  code: entity.code,
102
133
  },
103
- keyAttributes,
134
+ executionFlows,
104
135
  analysis: {
105
136
  id: analysis.id,
106
137
  metadata: {
107
138
  isolatedDataStructure: {
108
139
  equivalentSignatureVariables:
109
140
  entity.metadata.isolatedDataStructure
110
- .equivalentSignatureVariables,
141
+ ?.equivalentSignatureVariables,
111
142
  },
112
143
  },
113
144
  },
@@ -166,23 +197,7 @@ export default async function generateEntityScenarios({
166
197
  likelihoodDescription: scenarioInfo.likelihoodDescription,
167
198
  severity: scenarioInfo.severity,
168
199
  severityDescription: scenarioInfo.severityDescription,
169
- dataMapping: scenarioInfo.dataMapping,
170
- keyAttributeInstructions: scenarioInfo.keyAttributeInstructions,
171
- // Object.keys(
172
- // scenarioInfo.keyAttributeInstructions,
173
- // ).reduce((acc, key) => {
174
- // const attributesList = keyAttributes.map(
175
- // (attr) => attr.internalPath,
176
- // );
177
- // const matchingKey = findMatchingAttribute(
178
- // key,
179
- // attributesList,
180
- // entity.metadata.isolatedDataStructure
181
- // .equivalentSignatureVariables,
182
- // );
183
- // acc[matchingKey] = scenarioInfo.keyAttributeInstructions[key];
184
- // return acc;
185
- // }, {}),
200
+ coveredFlows: scenarioInfo.coveredFlows || [],
186
201
  playwrightInstructions: sanitizePlaywrightInstructions(
187
202
  scenarioInfo.playwrightInstructions || [],
188
203
  entity.name,
@@ -204,7 +219,7 @@ function generateSystemMessage(
204
219
  ): string {
205
220
  const scenarioCountText = scenarioCount
206
221
  ? `Generate exactly ${scenarioCount} scenario${scenarioCount > 1 ? 's' : ''}.`
207
- : 'Generate 1-4 scenarios.';
222
+ : 'Generate 3-6 scenarios MAXIMUM. Do NOT exceed 6 scenarios.';
208
223
 
209
224
  const contextSection = context
210
225
  ? `## Business Context
@@ -215,92 +230,136 @@ Focus scenarios on demonstrating this specific behavior change.
215
230
  `
216
231
  : '';
217
232
 
218
- return `You are a test scenario designer. Generate data scenarios that demonstrate a function's behavior.
233
+ return `You are a test scenario designer. Generate data scenarios that demonstrate a function's behavior by covering its execution flows.
219
234
 
220
235
  ${contextSection}${scenarioCountText}
221
236
 
222
- ## Coverage Goals (IMPORTANT)
223
- Your primary goal is to MAXIMIZE coverage of key attributes across all scenarios:
237
+ ## Your Primary Goal: Cover ALL Execution Flows EFFICIENTLY
224
238
 
225
- 1. **Use ALL validValueOptions**: Each key attribute has indexed \`validValueOptions\`. Across your scenarios, try to use EVERY option at least once. If an attribute has 3 options (indices 0, 1, 2), create scenarios that collectively cover all 3.
239
+ You are given \`executionFlows\` - all the distinct outcomes/behaviors this component can produce. Each flow has:
240
+ - \`id\`: Unique identifier
241
+ - \`name\`: Human-readable name (e.g., "Modal visible", "Loading state")
242
+ - \`description\`: What the user sees or what behavior occurs
243
+ - \`requiredValues\`: Attribute values needed to produce this outcome
244
+ - \`impact\`: Visual/behavioral importance ("high", "medium", "low")
245
+ - \`blocksOtherFlows\`: If true, this outcome hides other content (modals, overlays)
246
+ - \`isError\`: If true, this represents an error/exception scenario
247
+ - \`exclusiveGroup\`: If set, flows with the same group are MUTUALLY EXCLUSIVE (only one can be active)
226
248
 
227
- 2. **Prioritize attributes with dependencies**: Key attributes with a \`dependencies\` array are HIGH PRIORITY - they control conditionally-rendered content. Create scenarios that satisfy these dependencies to reveal gated UI/behavior.
249
+ **Your job**: Create the MINIMUM number of scenarios that cover ALL execution flows.
228
250
 
229
- 3. **Cover conditional branches**: Use \`codeUsages\` to identify all conditional paths. If code shows \`status === 'active'\` and \`status === 'pending'\`, ensure scenarios cover BOTH values.
251
+ ## CRITICAL: Understanding Exclusive Groups
230
252
 
231
- 4. **Vary values strategically**: Don't repeat the same validValueOption across scenarios unless necessary. Use different indices to maximize coverage.
253
+ Flows with the same \`exclusiveGroup\` are MUTUALLY EXCLUSIVE - only ONE can be active at a time.
232
254
 
233
- ## Default Scenario Rules
234
- The FIRST scenario MUST be named exactly "${DEFAULT_SCENARIO_NAME}" (case-sensitive).
235
- - Fill ALL key attributes using values from their \`validValueOptions\` list
236
- - If "children" is an argument, populate it (otherwise output may be blank)
237
- - Ignore error-related attributes (set to null)
238
- - NEVER include \`playwrightInstructions\` - we need a screenshot BEFORE any user interaction
239
- - Do NOT add playwrightInstructions even if the component has forms/buttons - default shows initial state only
240
- - **For attributes WITH dependencies**: The Default scenario should satisfy ALL dependencies so the attribute's effect is visible
255
+ **Example exclusive groups:**
256
+ - \`"status-badge"\`: loading, success, error, pending - only ONE badge shows
257
+ - \`"active-tab"\`: users, settings, profile - only ONE tab is visible
258
+ - \`"modal"\`: settings-modal, confirm-modal - only ONE modal at a time
241
259
 
242
- ## Other Scenarios
243
- - Each produces DISTINCT output (visual: different screenshot; backend: different return/side-effect)
244
- - **Use DIFFERENT validValueOptions** than the Default scenario - this is how we achieve coverage
245
- - Only specify attributes that DIFFER from default
246
- - Target uncovered validValueOptions: check which indices you haven't used yet
247
- - May include \`playwrightInstructions\` for user interactions (clicks, form fills)
260
+ 5. **Maximize visual diversity**: For attributes that control what content is displayed (rather than just styling), vary values across scenarios so screenshots show meaningfully different views:
261
+ - Don't use the same display-controlling value in every scenario
262
+ - Ensure at least one scenario shows the primary content view
263
+ - Other scenarios can demonstrate alternative display states
248
264
 
249
- ## Using codeUsages for Branch Coverage
250
- Key attributes may include a \`codeUsages\` array showing exactly where they're used in conditionals:
251
- \`\`\`json
252
- {
253
- "codeUsages": [
254
- { "line": 45, "code": "if (status === 'active')", "context": "Used in if statement (comparison check)" }
255
- ]
256
- }
257
- \`\`\`
258
- Use this to ensure scenarios cover all conditional branches. If you see \`status === 'active'\`, create scenarios for both active AND non-active states.
265
+ **Key insight**: You don't need a separate scenario for each flow in an exclusive group!
266
+ - Pick the PRIMARY/DEFAULT option for the Default Scenario
267
+ - Only create additional scenarios for IMPORTANT alternative states (e.g., error states, loading states)
268
+ - Skip scenarios for minor variations within a group
269
+
270
+ ## Scenario Strategy
271
+
272
+ ### 1. Default Scenario (REQUIRED - must be first, named exactly "${DEFAULT_SCENARIO_NAME}")
273
+ - For each exclusive group, pick the PRIMARY/HAPPY-PATH option:
274
+ - Status: "success" or "ready" (not loading, not error)
275
+ - Tabs: The main/first tab
276
+ - View modes: The default view
277
+ - Combine as many NON-BLOCKING, NON-ERROR, NON-EXCLUSIVE-CONFLICT flows as possible
278
+ - AVOID flows with \`blocksOtherFlows: true\`
279
+ - NEVER include \`playwrightInstructions\`
280
+
281
+ ### 2. Blocking Flow Scenarios (ONE per blocking flow)
282
+ Each flow with \`blocksOtherFlows: true\` gets its OWN scenario.
283
+ - Modals, overlays, drawers hide other content
284
+ - Don't combine blocking flows
285
+
286
+ ### 3. Important Alternative States (SELECTIVE)
287
+ Only create scenarios for IMPORTANT alternatives within exclusive groups:
288
+ - ✅ Loading state (if exists) - important UX state
289
+ - ✅ Error state (if exists) - important UX state
290
+ - ✅ Empty state (if exists) - important UX state
291
+ - ❌ Each individual tab - NOT needed (tabs are just navigation)
292
+ - ❌ Each status badge variant - just pick the important ones
293
+
294
+ ### 4. CRITICAL: Skip Low-Value Scenarios
295
+ Do NOT create separate scenarios for:
296
+ - **Different tabs** - Tabs are just navigation. The Default Scenario covers the main tab. SKIP others.
297
+ - **Status badge variants** - Only need: Default (success/ready) + Loading + Error. SKIP queued, pending, etc.
298
+ - **Banner variants** - Pick ONE important banner if any. SKIP creating a scenario for each banner type.
299
+ - **Minor variations** - If two flows show essentially the same UI with small differences, combine them or skip one.
300
+
301
+ **Remember**: Including a flow in the Default Scenario COUNTS as covering it. You don't need a dedicated scenario for each flow.
302
+
303
+ ## Combining Flows
259
304
 
260
- ## Handling Dependencies (Compound Conditionals) - HIGH PRIORITY
261
- Key attributes with \`dependencies\` are the MOST IMPORTANT to cover because they reveal conditionally-gated content that only appears when multiple conditions are satisfied together.
305
+ Flows can combine if:
306
+ 1. They have DIFFERENT \`exclusiveGroup\` values (or no exclusiveGroup)
307
+ 2. Their \`requiredValues\` don't conflict on the same attribute
262
308
 
263
- **Why this matters**: If you see \`items.length > 0 && !isLoading && !hasError\`, the content only renders when ALL THREE conditions are true. Missing even one dependency means the UI won't show.
309
+ Flows CANNOT combine if:
310
+ 1. They have the SAME \`exclusiveGroup\` - they're mutually exclusive
311
+ 2. Their \`requiredValues\` conflict (same attribute, different required value)
264
312
 
265
- **Strategy for dependent attributes**:
266
- 1. **Default scenario**: MUST satisfy ALL dependencies of the highest-impact key attributes
267
- 2. **Other scenarios**: Can vary the dependent values to show alternative states (e.g., what happens when isLoading=true)
313
+ When combining flows, the scenario's mock data must satisfy ALL the requiredValues from ALL covered flows.
314
+
315
+ ## Output Format
268
316
 
269
- When a key attribute has dependencies like:
270
317
  \`\`\`json
271
318
  {
272
- "dependencies": [
273
- { "path": "signature[0].isLoading", "requiredValue": false },
274
- { "path": "signature[0].hasError", "requiredValue": false }
319
+ "dataScenarios": [
320
+ {
321
+ "name": "${DEFAULT_SCENARIO_NAME}",
322
+ "testName": "it(\\"displays primary content with all features visible\\")",
323
+ "description": "Main content view: success status, main tab selected, user logged in",
324
+ "coveredFlows": ["status-success", "tab-main", "user-authenticated", "content-loaded"]
325
+ },
326
+ {
327
+ "name": "Loading State",
328
+ "testName": "it(\\"shows loading spinner while fetching data\\")",
329
+ "description": "Data is being loaded, loading badge visible",
330
+ "coveredFlows": ["status-loading", "tab-main"]
331
+ },
332
+ {
333
+ "name": "Empty State",
334
+ "testName": "it(\\"shows empty message when no items\\")",
335
+ "description": "No items to display, empty state UI shown",
336
+ "coveredFlows": ["status-success", "tab-main", "empty-list"]
337
+ },
338
+ {
339
+ "name": "Settings Modal",
340
+ "testName": "it(\\"displays settings modal overlay\\")",
341
+ "description": "Settings modal is open and visible",
342
+ "coveredFlows": ["modal-settings"]
343
+ }
275
344
  ]
276
345
  }
277
346
  \`\`\`
278
- The Default scenario MUST set BOTH dependent attributes to their required values so the key attribute's effect is visible.
279
347
 
280
- **Creating scenarios for dependent pathways**:
281
- - Create at least one scenario where ALL dependencies are satisfied (usually Default)
282
- - Consider creating additional scenarios that intentionally break dependencies to show the "hidden" state
348
+ **Note:** This example has ~20 flows but only 4 scenarios because:
349
+ - Exclusive groups (status, tabs) only need ONE representative in Default Scenario
350
+ - We don't create scenarios for every tab - they're just navigation
351
+ - Only important states (loading, empty, modal) get dedicated scenarios
283
352
 
284
- ## keyAttributeInstructions Format
285
- Use \`dataStructurePath\` as key. Include variable name, instruction, AND a valueOptionRef that references which validValueOption you're using:
286
- \`\`\`json
287
- {
288
- "useDiffModal().diffView": {
289
- "localVariable": "diffView",
290
- "instruction": "Set to 'split' mode",
291
- "valueOptionRef": { "index": 0, "refType": "exact" }
292
- }
293
- }
294
- \`\`\`
353
+ ## Field Descriptions
295
354
 
296
- ### valueOptionRef Types
297
- - \`"exact"\`: Uses the validValueOption at this index exactly
298
- - \`"derived"\`: Based on this validValueOption but modified (include \`derivation\` field explaining how)
299
- - \`"custom"\`: Value not from validValueOptions list (use sparingly)
355
+ - **name**: Human-readable scenario name (letters, numbers, spaces only - no special characters)
356
+ - **testName**: Jest-style test description, e.g. \`it("displays error when email invalid")\`
357
+ - **description**: What the user sees or what behavior occurs in this scenario
358
+ - **coveredFlows**: Array of execution flow IDs this scenario covers (from the executionFlows list)
359
+ - **playwrightInstructions**: (optional) User interactions needed to reach this state
300
360
 
301
- The \`index\` refers to the validValueOptions array position (0 = first option).
361
+ ## playwrightInstructions Format (when needed)
302
362
 
303
- ## playwrightInstructions (optional, non-default only)
304
363
  \`\`\`json
305
364
  {
306
365
  "playwrightInstructions": [
@@ -311,84 +370,27 @@ The \`index\` refers to the validValueOptions array position (0 = first option).
311
370
  \`\`\`
312
371
  Note: selectorArgs values must be JSON strings, not JavaScript regex literals.
313
372
 
314
- Use when: data only appears after user action (button click, form submit), or key attribute isn't in data structure.
315
-
316
373
  ## Rules
317
- - Relative dates OK in instructions: "today", "tomorrow", "last month"
318
- - React elements: use simple elements (\`<div>\`, \`<span>\`) - no custom JSX
319
- - No external library references - plain JS/TS values only
320
- - Scenario names: letters, numbers, spaces only (no special characters)
321
- - testName: Jest style with specific expectations, e.g. \`it("displays error when email invalid")\`
322
- - All values must be valid JSON (strings, numbers, booleans, arrays, objects) - no JavaScript literals like regex
323
374
 
324
- ## Response Format
325
- \`\`\`json
326
- {
327
- "dataScenarios": [
328
- {
329
- "name": "${DEFAULT_SCENARIO_NAME}",
330
- "testName": "it(\"displays items list with data\")",
331
- "description": "Shows item list when data is loaded and no errors",
332
- "keyAttributeInstructions": {
333
- "useData().items[]": {
334
- "localVariable": "items[]",
335
- "instruction": "Array with 3 items",
336
- "valueOptionRef": { "index": 0, "refType": "exact" }
337
- },
338
- "useData().isLoading": {
339
- "localVariable": "isLoading",
340
- "instruction": "false - satisfies dependency for items to show",
341
- "valueOptionRef": { "index": 1, "refType": "exact" }
342
- },
343
- "useData().status": {
344
- "localVariable": "status",
345
- "instruction": "Set to 'success'",
346
- "valueOptionRef": { "index": 0, "refType": "exact" }
347
- }
348
- }
349
- },
350
- {
351
- "name": "Loading state",
352
- "testName": "it(\"shows spinner when loading\")",
353
- "description": "Data is loading - items hidden, spinner shown",
354
- "keyAttributeInstructions": {
355
- "useData().isLoading": {
356
- "localVariable": "isLoading",
357
- "instruction": "true - breaks dependency, items won't show",
358
- "valueOptionRef": { "index": 0, "refType": "exact" }
359
- },
360
- "useData().status": {
361
- "localVariable": "status",
362
- "instruction": "Set to 'loading' for coverage of loading state",
363
- "valueOptionRef": { "index": 1, "refType": "exact" }
364
- }
365
- }
366
- },
367
- {
368
- "name": "Empty state",
369
- "testName": "it(\"shows empty message when no items\")",
370
- "description": "No items to display",
371
- "keyAttributeInstructions": {
372
- "useData().items[]": {
373
- "localVariable": "items[]",
374
- "instruction": "Empty array [] to show empty state",
375
- "valueOptionRef": { "index": 1, "refType": "exact" }
376
- }
377
- }
378
- }
379
- ]
380
- }
381
- \`\`\`
382
- Note how the example:
383
- - Default satisfies ALL dependencies (isLoading=false) so items content shows
384
- - "Loading state" uses a different valueOptionRef for status to cover that code path
385
- - "Empty state" covers the empty array case to maximize coverage
386
- - Instructions describe the VALUE, not the index (e.g., "Empty array []" not "uses index 1")
375
+ 1. **HARD LIMIT: 3-6 scenarios only** - If you generate more than 6 scenarios, you're doing it wrong. Aim for the minimum that covers important states.
376
+ 2. **${DEFAULT_SCENARIO_NAME}** must be first and named exactly that (case-sensitive)
377
+ 3. **Exclusive groups**: Pick ONE flow per group for Default Scenario. DON'T create scenarios for each option.
378
+ 4. **Blocking flows** (blocksOtherFlows: true) get dedicated scenarios
379
+ 5. **Only 2-3 additional scenarios**: Loading State, Empty State, maybe one Error or Modal
380
+ 6. **DO NOT cover every flow** - Many flows are fine being represented only in the Default Scenario
381
+ 7. Scenario names: letters, numbers, spaces only (no special characters)
382
+ 8. All values must be valid JSON
383
+
384
+ **Example for a component with 27 flows:**
385
+ - Default Scenario (covers 10+ flows including: success status, main tab, content loaded, etc.)
386
+ - Loading State (covers loading flow)
387
+ - Empty State (covers empty flow)
388
+ - Modal Open (if there's an important modal)
389
+ - Error State (if there's a critical error state)
390
+ = 4-5 scenarios total, NOT 27
387
391
  `;
388
392
  }
389
393
 
390
- const SYSTEM_MESSAGE = generateSystemMessage();
391
-
392
394
  const ERROR_SYSTEM_MESSAGE = `You are a security/reliability analyst. Identify data inputs that will cause UNCAUGHT ERRORS in this function.
393
395
 
394
396
  ## What Qualifies as an Error Scenario
@@ -423,19 +425,17 @@ Note: In JS/TS, any non-zero value satisfies a boolean check—this won't error.
423
425
  {
424
426
  "errorDataScenarios": [
425
427
  {
426
- "dataMapping": { "notifications array": "arguments - notifications" },
427
428
  "name": "Non-utf8 message encoding",
428
- "codeSnippet": "const encoded = encodeURIComponent(message);",
429
+ "testName": "it(\\"throws on non-utf8 characters\\")",
429
430
  "description": "encodeURIComponent throws on non-utf8 characters",
431
+ "codeSnippet": "const encoded = encodeURIComponent(message);",
430
432
  "fix": "Wrap in try/catch",
431
433
  "fixSnippet": "try {\\n encoded = encodeURIComponent(message);\\n} catch (e) {\\n // handle\\n}",
432
434
  "likelihood": 7,
433
435
  "likelihoodDescription": "International users may input non-utf8 characters",
434
436
  "severity": 2,
435
437
  "severityDescription": "Function throws uncaught error",
436
- "keyAttributeInstructions": {
437
- "notifications[]": "Array with message containing non-utf8 characters"
438
- }
438
+ "coveredFlows": []
439
439
  }
440
440
  ]
441
441
  }