@codeyam/codeyam-cli 0.1.0-staging.15d0f46 → 0.1.0-staging.1669d45

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 (625) hide show
  1. package/analyzer-template/.build-info.json +7 -7
  2. package/analyzer-template/common/execAsync.ts +1 -1
  3. package/analyzer-template/log.txt +3 -3
  4. package/analyzer-template/package.json +9 -5
  5. package/analyzer-template/packages/ai/index.ts +5 -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 +152 -6
  9. package/analyzer-template/packages/ai/src/lib/astScopes/astScopeAnalyzer.ts +107 -1
  10. package/analyzer-template/packages/ai/src/lib/astScopes/conditionalEffectsExtractor.ts +644 -0
  11. package/analyzer-template/packages/ai/src/lib/astScopes/methodSemantics.ts +42 -0
  12. package/analyzer-template/packages/ai/src/lib/astScopes/patterns/ifStatementHandler.ts +18 -0
  13. package/analyzer-template/packages/ai/src/lib/astScopes/patterns/switchStatementHandler.ts +38 -1
  14. package/analyzer-template/packages/ai/src/lib/astScopes/patterns/variableDeclarationHandler.ts +301 -1
  15. package/analyzer-template/packages/ai/src/lib/astScopes/processExpression.ts +972 -106
  16. package/analyzer-template/packages/ai/src/lib/astScopes/types.ts +232 -0
  17. package/analyzer-template/packages/ai/src/lib/checkAllAttributes.ts +29 -10
  18. package/analyzer-template/packages/ai/src/lib/completionCall.ts +18 -2
  19. package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +1409 -138
  20. package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.ts +2 -1
  21. package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.ts +771 -0
  22. package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.ts +233 -75
  23. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.ts +19 -1
  24. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.ts +39 -4
  25. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.ts +23 -0
  26. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertNullToUndefinedBySchema.ts +98 -0
  27. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.ts +42 -2
  28. package/analyzer-template/packages/ai/src/lib/deepEqual.ts +30 -0
  29. package/analyzer-template/packages/ai/src/lib/generateChangesEntityScenarioData.ts +74 -7
  30. package/analyzer-template/packages/ai/src/lib/generateChangesEntityScenarios.ts +89 -112
  31. package/analyzer-template/packages/ai/src/lib/generateEntityDataStructure.ts +6 -0
  32. package/analyzer-template/packages/ai/src/lib/generateEntityScenarioData.ts +486 -86
  33. package/analyzer-template/packages/ai/src/lib/generateEntityScenarios.ts +182 -104
  34. package/analyzer-template/packages/ai/src/lib/generateExecutionFlows.ts +201 -0
  35. package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionalEffects.ts +528 -0
  36. package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionals.ts +1019 -0
  37. package/analyzer-template/packages/ai/src/lib/getConditionalUsagesFromCode.ts +143 -31
  38. package/analyzer-template/packages/ai/src/lib/guessScenarioDataFromDescription.ts +8 -2
  39. package/analyzer-template/packages/ai/src/lib/isolateScopes.ts +276 -3
  40. package/analyzer-template/packages/ai/src/lib/mergeStatements.ts +33 -3
  41. package/analyzer-template/packages/ai/src/lib/promptGenerators/gatherAttributesMap.ts +7 -0
  42. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateChangesEntityScenarioDataGenerator.ts +1 -1
  43. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.ts +32 -102
  44. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.ts +71 -4
  45. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.ts +14 -53
  46. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateMissingKeysPrompt.ts +58 -0
  47. package/analyzer-template/packages/ai/src/lib/promptGenerators/guessNewScenarioDataFromDescriptionGenerator.ts +28 -2
  48. package/analyzer-template/packages/ai/src/lib/resolvePathToControllable.ts +690 -0
  49. package/analyzer-template/packages/ai/src/lib/splitOutsideParentheses.ts +5 -1
  50. package/analyzer-template/packages/ai/src/lib/validateExecutionFlowPaths.ts +531 -0
  51. package/analyzer-template/packages/ai/src/lib/worker/SerializableDataStructure.ts +102 -0
  52. package/analyzer-template/packages/ai/src/lib/worker/analyzeScopeWorker.ts +8 -1
  53. package/analyzer-template/packages/analyze/src/lib/FileAnalyzer.ts +14 -0
  54. package/analyzer-template/packages/analyze/src/lib/asts/nodes/index.ts +1 -0
  55. package/analyzer-template/packages/analyze/src/lib/asts/nodes/isAsyncFunction.ts +67 -0
  56. package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.ts +458 -267
  57. package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities.ts +18 -0
  58. package/analyzer-template/packages/analyze/src/lib/files/analyze/findOrCreateEntity.ts +3 -0
  59. package/analyzer-template/packages/analyze/src/lib/files/analyzeChange.ts +31 -15
  60. package/analyzer-template/packages/analyze/src/lib/files/analyzeEntity.ts +11 -7
  61. package/analyzer-template/packages/analyze/src/lib/files/analyzeInitial.ts +11 -12
  62. package/analyzer-template/packages/analyze/src/lib/files/enums/steps.ts +1 -1
  63. package/analyzer-template/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.ts +196 -0
  64. package/analyzer-template/packages/analyze/src/lib/files/scenarios/enrichUnknownTypesFromSourceEquivalencies.ts +102 -0
  65. package/analyzer-template/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.ts +588 -52
  66. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateChangesScenarioData.ts +1 -1
  67. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateChangesScenarios.ts +28 -62
  68. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +299 -133
  69. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.ts +156 -0
  70. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateScenarioData.ts +78 -83
  71. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateScenarios.ts +4 -8
  72. package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +384 -94
  73. package/analyzer-template/packages/aws/codebuild/index.ts +1 -0
  74. package/analyzer-template/packages/aws/dist/src/lib/codebuild/waitForBuild.d.ts +11 -1
  75. package/analyzer-template/packages/aws/dist/src/lib/codebuild/waitForBuild.d.ts.map +1 -1
  76. package/analyzer-template/packages/aws/dist/src/lib/codebuild/waitForBuild.js +29 -18
  77. package/analyzer-template/packages/aws/dist/src/lib/codebuild/waitForBuild.js.map +1 -1
  78. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsDefineContainer.d.ts +2 -2
  79. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsDefineContainer.d.ts.map +1 -1
  80. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsDefineContainer.js +2 -2
  81. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsDefineContainer.js.map +1 -1
  82. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsTaskFactory.d.ts +8 -18
  83. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsTaskFactory.d.ts.map +1 -1
  84. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsTaskFactory.js +17 -61
  85. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsTaskFactory.js.map +1 -1
  86. package/analyzer-template/packages/aws/dist/src/lib/s3/checkS3ObjectExists.d.ts +15 -0
  87. package/analyzer-template/packages/aws/dist/src/lib/s3/checkS3ObjectExists.d.ts.map +1 -0
  88. package/analyzer-template/packages/aws/dist/src/lib/s3/checkS3ObjectExists.js +31 -0
  89. package/analyzer-template/packages/aws/dist/src/lib/s3/checkS3ObjectExists.js.map +1 -0
  90. package/analyzer-template/packages/aws/dist/src/lib/s3/uploadFileToS3.d.ts.map +1 -1
  91. package/analyzer-template/packages/aws/dist/src/lib/s3/uploadFileToS3.js +8 -1
  92. package/analyzer-template/packages/aws/dist/src/lib/s3/uploadFileToS3.js.map +1 -1
  93. package/analyzer-template/packages/aws/package.json +2 -2
  94. package/analyzer-template/packages/aws/s3/index.ts +1 -0
  95. package/analyzer-template/packages/aws/src/lib/codebuild/waitForBuild.ts +43 -19
  96. package/analyzer-template/packages/aws/src/lib/ecs/ecsDefineContainer.ts +3 -3
  97. package/analyzer-template/packages/aws/src/lib/ecs/ecsTaskFactory.ts +17 -69
  98. package/analyzer-template/packages/aws/src/lib/s3/checkS3ObjectExists.ts +47 -0
  99. package/analyzer-template/packages/aws/src/lib/s3/uploadFileToS3.ts +8 -1
  100. package/analyzer-template/packages/database/src/lib/kysely/db.ts +4 -4
  101. package/analyzer-template/packages/database/src/lib/kysely/tableRelations.ts +2 -2
  102. package/analyzer-template/packages/database/src/lib/kysely/tables/debugReportsTable.ts +36 -9
  103. package/analyzer-template/packages/database/src/lib/loadReadyToBeCapturedAnalyses.ts +7 -3
  104. package/analyzer-template/packages/generate/index.ts +3 -0
  105. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/componentScenarioPageNext.ts +17 -1
  106. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.ts +193 -0
  107. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.ts +73 -0
  108. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.ts +9 -4
  109. package/analyzer-template/packages/generate/src/lib/deepMerge.ts +26 -1
  110. package/analyzer-template/packages/generate/src/lib/scenarioComponentForServer.ts +114 -0
  111. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts +2 -2
  112. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js +2 -2
  113. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tableRelations.d.ts +2 -2
  114. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/analysesTable.d.ts +1 -11
  115. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/analysesTable.d.ts.map +1 -1
  116. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.d.ts +30 -7
  117. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.d.ts.map +1 -1
  118. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.js +9 -3
  119. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.js.map +1 -1
  120. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/entitiesTable.d.ts +1 -0
  121. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/entitiesTable.d.ts.map +1 -1
  122. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts +2 -6
  123. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts.map +1 -1
  124. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.d.ts.map +1 -1
  125. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.js +7 -4
  126. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.js.map +1 -1
  127. package/analyzer-template/packages/github/dist/generate/index.d.ts +3 -0
  128. package/analyzer-template/packages/github/dist/generate/index.d.ts.map +1 -1
  129. package/analyzer-template/packages/github/dist/generate/index.js +3 -0
  130. package/analyzer-template/packages/github/dist/generate/index.js.map +1 -1
  131. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/componentScenarioPageNext.d.ts.map +1 -1
  132. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/componentScenarioPageNext.js +16 -1
  133. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/componentScenarioPageNext.js.map +1 -1
  134. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.d.ts +9 -0
  135. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.d.ts.map +1 -0
  136. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js +189 -0
  137. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js.map +1 -0
  138. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.d.ts +20 -0
  139. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.d.ts.map +1 -0
  140. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.js +53 -0
  141. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.js.map +1 -0
  142. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.d.ts.map +1 -1
  143. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +8 -4
  144. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
  145. package/analyzer-template/packages/github/dist/generate/src/lib/deepMerge.d.ts.map +1 -1
  146. package/analyzer-template/packages/github/dist/generate/src/lib/deepMerge.js +27 -1
  147. package/analyzer-template/packages/github/dist/generate/src/lib/deepMerge.js.map +1 -1
  148. package/analyzer-template/packages/github/dist/generate/src/lib/scenarioComponentForServer.d.ts +8 -0
  149. package/analyzer-template/packages/github/dist/generate/src/lib/scenarioComponentForServer.d.ts.map +1 -0
  150. package/analyzer-template/packages/github/dist/generate/src/lib/scenarioComponentForServer.js +89 -0
  151. package/analyzer-template/packages/github/dist/generate/src/lib/scenarioComponentForServer.js.map +1 -0
  152. package/analyzer-template/packages/github/dist/github/src/lib/loadOrCreateCommit.d.ts.map +1 -1
  153. package/analyzer-template/packages/github/dist/github/src/lib/loadOrCreateCommit.js +10 -0
  154. package/analyzer-template/packages/github/dist/github/src/lib/loadOrCreateCommit.js.map +1 -1
  155. package/analyzer-template/packages/github/dist/github/src/lib/syncPrimaryBranch.d.ts.map +1 -1
  156. package/analyzer-template/packages/github/dist/github/src/lib/syncPrimaryBranch.js +3 -0
  157. package/analyzer-template/packages/github/dist/github/src/lib/syncPrimaryBranch.js.map +1 -1
  158. package/analyzer-template/packages/github/dist/types/index.d.ts +2 -2
  159. package/analyzer-template/packages/github/dist/types/index.d.ts.map +1 -1
  160. package/analyzer-template/packages/github/dist/types/index.js.map +1 -1
  161. package/analyzer-template/packages/github/dist/types/src/types/Analysis.d.ts +63 -13
  162. package/analyzer-template/packages/github/dist/types/src/types/Analysis.d.ts.map +1 -1
  163. package/analyzer-template/packages/github/dist/types/src/types/Entity.d.ts +2 -0
  164. package/analyzer-template/packages/github/dist/types/src/types/Entity.d.ts.map +1 -1
  165. package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts +11 -6
  166. package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts.map +1 -1
  167. package/analyzer-template/packages/github/dist/types/src/types/ScenariosDataStructure.d.ts +146 -0
  168. package/analyzer-template/packages/github/dist/types/src/types/ScenariosDataStructure.d.ts.map +1 -1
  169. package/analyzer-template/packages/github/dist/types/src/types/StatementInfo.d.ts +2 -0
  170. package/analyzer-template/packages/github/dist/types/src/types/StatementInfo.d.ts.map +1 -1
  171. package/analyzer-template/packages/github/src/lib/loadOrCreateCommit.ts +14 -0
  172. package/analyzer-template/packages/github/src/lib/syncPrimaryBranch.ts +2 -0
  173. package/analyzer-template/packages/process/index.ts +2 -0
  174. package/analyzer-template/packages/process/package.json +12 -0
  175. package/analyzer-template/packages/process/tsconfig.json +8 -0
  176. package/analyzer-template/packages/types/index.ts +4 -0
  177. package/analyzer-template/packages/types/src/types/Analysis.ts +79 -13
  178. package/analyzer-template/packages/types/src/types/Entity.ts +2 -0
  179. package/analyzer-template/packages/types/src/types/Scenario.ts +11 -10
  180. package/analyzer-template/packages/types/src/types/ScenariosDataStructure.ts +161 -0
  181. package/analyzer-template/packages/types/src/types/StatementInfo.ts +2 -0
  182. package/analyzer-template/packages/utils/dist/types/index.d.ts +2 -2
  183. package/analyzer-template/packages/utils/dist/types/index.d.ts.map +1 -1
  184. package/analyzer-template/packages/utils/dist/types/index.js.map +1 -1
  185. package/analyzer-template/packages/utils/dist/types/src/types/Analysis.d.ts +63 -13
  186. package/analyzer-template/packages/utils/dist/types/src/types/Analysis.d.ts.map +1 -1
  187. package/analyzer-template/packages/utils/dist/types/src/types/Entity.d.ts +2 -0
  188. package/analyzer-template/packages/utils/dist/types/src/types/Entity.d.ts.map +1 -1
  189. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts +11 -6
  190. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts.map +1 -1
  191. package/analyzer-template/packages/utils/dist/types/src/types/ScenariosDataStructure.d.ts +146 -0
  192. package/analyzer-template/packages/utils/dist/types/src/types/ScenariosDataStructure.d.ts.map +1 -1
  193. package/analyzer-template/packages/utils/dist/types/src/types/StatementInfo.d.ts +2 -0
  194. package/analyzer-template/packages/utils/dist/types/src/types/StatementInfo.d.ts.map +1 -1
  195. package/analyzer-template/playwright/capture.ts +37 -18
  196. package/analyzer-template/playwright/getCodeYamInfo.ts +12 -7
  197. package/analyzer-template/playwright/takeElementScreenshot.ts +26 -11
  198. package/analyzer-template/playwright/waitForServer.ts +21 -6
  199. package/analyzer-template/project/analyzeBaselineCommit.ts +4 -0
  200. package/analyzer-template/project/analyzeBranchCommit.ts +4 -0
  201. package/analyzer-template/project/analyzeFileEntities.ts +4 -0
  202. package/analyzer-template/project/analyzeRegularCommit.ts +4 -0
  203. package/analyzer-template/project/constructMockCode.ts +868 -132
  204. package/analyzer-template/project/controller/startController.ts +16 -1
  205. package/analyzer-template/project/executeLibraryFunctionDirect.ts +7 -3
  206. package/analyzer-template/project/mocks/analyzeFileMock.ts +8 -7
  207. package/analyzer-template/project/orchestrateCapture/KyselyAnalysisLoader.ts +3 -6
  208. package/analyzer-template/project/orchestrateCapture/SequentialCaptureTaskRunner.ts +49 -33
  209. package/analyzer-template/project/orchestrateCapture.ts +10 -3
  210. package/analyzer-template/project/reconcileMockDataKeys.ts +102 -2
  211. package/analyzer-template/project/runAnalysis.ts +7 -0
  212. package/analyzer-template/project/serverOnlyModules.ts +127 -2
  213. package/analyzer-template/project/start.ts +26 -4
  214. package/analyzer-template/project/startScenarioCapture.ts +72 -40
  215. package/analyzer-template/project/writeMockDataTsx.ts +118 -55
  216. package/analyzer-template/project/writeScenarioClientWrapper.ts +21 -0
  217. package/analyzer-template/project/writeScenarioComponents.ts +263 -92
  218. package/analyzer-template/project/writeScenarioFiles.ts +26 -0
  219. package/analyzer-template/project/writeSimpleRoot.ts +13 -15
  220. package/analyzer-template/scripts/comboWorkerLoop.cjs +1 -0
  221. package/analyzer-template/scripts/defaultCmd.sh +9 -0
  222. package/analyzer-template/tsconfig.json +2 -1
  223. package/background/src/lib/local/createLocalAnalyzer.js +1 -29
  224. package/background/src/lib/local/createLocalAnalyzer.js.map +1 -1
  225. package/background/src/lib/local/execAsync.js +1 -1
  226. package/background/src/lib/local/execAsync.js.map +1 -1
  227. package/background/src/lib/virtualized/common/execAsync.js +1 -1
  228. package/background/src/lib/virtualized/common/execAsync.js.map +1 -1
  229. package/background/src/lib/virtualized/project/analyzeBaselineCommit.js +2 -1
  230. package/background/src/lib/virtualized/project/analyzeBaselineCommit.js.map +1 -1
  231. package/background/src/lib/virtualized/project/analyzeBranchCommit.js +2 -1
  232. package/background/src/lib/virtualized/project/analyzeBranchCommit.js.map +1 -1
  233. package/background/src/lib/virtualized/project/analyzeFileEntities.js +2 -1
  234. package/background/src/lib/virtualized/project/analyzeFileEntities.js.map +1 -1
  235. package/background/src/lib/virtualized/project/analyzeRegularCommit.js +2 -1
  236. package/background/src/lib/virtualized/project/analyzeRegularCommit.js.map +1 -1
  237. package/background/src/lib/virtualized/project/constructMockCode.js +799 -121
  238. package/background/src/lib/virtualized/project/constructMockCode.js.map +1 -1
  239. package/background/src/lib/virtualized/project/controller/startController.js +11 -1
  240. package/background/src/lib/virtualized/project/controller/startController.js.map +1 -1
  241. package/background/src/lib/virtualized/project/executeLibraryFunctionDirect.js +6 -3
  242. package/background/src/lib/virtualized/project/executeLibraryFunctionDirect.js.map +1 -1
  243. package/background/src/lib/virtualized/project/mocks/analyzeFileMock.js +7 -7
  244. package/background/src/lib/virtualized/project/mocks/analyzeFileMock.js.map +1 -1
  245. package/background/src/lib/virtualized/project/orchestrateCapture/KyselyAnalysisLoader.js +3 -2
  246. package/background/src/lib/virtualized/project/orchestrateCapture/KyselyAnalysisLoader.js.map +1 -1
  247. package/background/src/lib/virtualized/project/orchestrateCapture/SequentialCaptureTaskRunner.js +42 -28
  248. package/background/src/lib/virtualized/project/orchestrateCapture/SequentialCaptureTaskRunner.js.map +1 -1
  249. package/background/src/lib/virtualized/project/orchestrateCapture.js +7 -4
  250. package/background/src/lib/virtualized/project/orchestrateCapture.js.map +1 -1
  251. package/background/src/lib/virtualized/project/reconcileMockDataKeys.js +87 -2
  252. package/background/src/lib/virtualized/project/reconcileMockDataKeys.js.map +1 -1
  253. package/background/src/lib/virtualized/project/runAnalysis.js +6 -0
  254. package/background/src/lib/virtualized/project/runAnalysis.js.map +1 -1
  255. package/background/src/lib/virtualized/project/serverOnlyModules.js +106 -3
  256. package/background/src/lib/virtualized/project/serverOnlyModules.js.map +1 -1
  257. package/background/src/lib/virtualized/project/start.js +21 -4
  258. package/background/src/lib/virtualized/project/start.js.map +1 -1
  259. package/background/src/lib/virtualized/project/startScenarioCapture.js +56 -30
  260. package/background/src/lib/virtualized/project/startScenarioCapture.js.map +1 -1
  261. package/background/src/lib/virtualized/project/writeMockDataTsx.js +110 -48
  262. package/background/src/lib/virtualized/project/writeMockDataTsx.js.map +1 -1
  263. package/background/src/lib/virtualized/project/writeScenarioClientWrapper.js +15 -0
  264. package/background/src/lib/virtualized/project/writeScenarioClientWrapper.js.map +1 -0
  265. package/background/src/lib/virtualized/project/writeScenarioComponents.js +211 -75
  266. package/background/src/lib/virtualized/project/writeScenarioComponents.js.map +1 -1
  267. package/background/src/lib/virtualized/project/writeScenarioFiles.js +19 -0
  268. package/background/src/lib/virtualized/project/writeScenarioFiles.js.map +1 -1
  269. package/background/src/lib/virtualized/project/writeSimpleRoot.js +13 -13
  270. package/background/src/lib/virtualized/project/writeSimpleRoot.js.map +1 -1
  271. package/codeyam-cli/src/cli.js +5 -1
  272. package/codeyam-cli/src/cli.js.map +1 -1
  273. package/codeyam-cli/src/commands/analyze.js +1 -1
  274. package/codeyam-cli/src/commands/analyze.js.map +1 -1
  275. package/codeyam-cli/src/commands/baseline.js +174 -0
  276. package/codeyam-cli/src/commands/baseline.js.map +1 -0
  277. package/codeyam-cli/src/commands/debug.js +28 -18
  278. package/codeyam-cli/src/commands/debug.js.map +1 -1
  279. package/codeyam-cli/src/commands/default.js +0 -15
  280. package/codeyam-cli/src/commands/default.js.map +1 -1
  281. package/codeyam-cli/src/commands/recapture.js +44 -23
  282. package/codeyam-cli/src/commands/recapture.js.map +1 -1
  283. package/codeyam-cli/src/commands/report.js +72 -24
  284. package/codeyam-cli/src/commands/report.js.map +1 -1
  285. package/codeyam-cli/src/commands/start.js +8 -12
  286. package/codeyam-cli/src/commands/start.js.map +1 -1
  287. package/codeyam-cli/src/commands/status.js +23 -1
  288. package/codeyam-cli/src/commands/status.js.map +1 -1
  289. package/codeyam-cli/src/commands/test-startup.js +1 -1
  290. package/codeyam-cli/src/commands/test-startup.js.map +1 -1
  291. package/codeyam-cli/src/commands/wipe.js +108 -0
  292. package/codeyam-cli/src/commands/wipe.js.map +1 -0
  293. package/codeyam-cli/src/utils/__tests__/serverVersionStaleness.test.js +81 -0
  294. package/codeyam-cli/src/utils/__tests__/serverVersionStaleness.test.js.map +1 -0
  295. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +27 -27
  296. package/codeyam-cli/src/utils/analysisRunner.js +8 -13
  297. package/codeyam-cli/src/utils/analysisRunner.js.map +1 -1
  298. package/codeyam-cli/src/utils/backgroundServer.js +12 -2
  299. package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
  300. package/codeyam-cli/src/utils/database.js +91 -5
  301. package/codeyam-cli/src/utils/database.js.map +1 -1
  302. package/codeyam-cli/src/utils/generateReport.js +253 -106
  303. package/codeyam-cli/src/utils/generateReport.js.map +1 -1
  304. package/codeyam-cli/src/utils/git.js +79 -0
  305. package/codeyam-cli/src/utils/git.js.map +1 -0
  306. package/codeyam-cli/src/utils/install-skills.js +11 -11
  307. package/codeyam-cli/src/utils/install-skills.js.map +1 -1
  308. package/codeyam-cli/src/utils/queue/__tests__/manager.test.js +38 -0
  309. package/codeyam-cli/src/utils/queue/__tests__/manager.test.js.map +1 -1
  310. package/codeyam-cli/src/utils/queue/job.js +239 -16
  311. package/codeyam-cli/src/utils/queue/job.js.map +1 -1
  312. package/codeyam-cli/src/utils/queue/manager.js +19 -7
  313. package/codeyam-cli/src/utils/queue/manager.js.map +1 -1
  314. package/codeyam-cli/src/utils/queue/persistence.js.map +1 -1
  315. package/codeyam-cli/src/utils/serverState.js.map +1 -1
  316. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +5 -5
  317. package/codeyam-cli/src/utils/versionInfo.js +25 -19
  318. package/codeyam-cli/src/utils/versionInfo.js.map +1 -1
  319. package/codeyam-cli/src/utils/wipe.js +128 -0
  320. package/codeyam-cli/src/utils/wipe.js.map +1 -0
  321. package/codeyam-cli/src/webserver/app/lib/database.js +96 -0
  322. package/codeyam-cli/src/webserver/app/lib/database.js.map +1 -1
  323. package/codeyam-cli/src/webserver/app/lib/dbNotifier.js.map +1 -1
  324. package/codeyam-cli/src/webserver/backgroundServer.js +2 -5
  325. package/codeyam-cli/src/webserver/backgroundServer.js.map +1 -1
  326. package/codeyam-cli/src/webserver/build/client/assets/EntityItem-vauWK972.js +1 -0
  327. package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeBadge-DKdsUF7Y.js → EntityTypeBadge-COi5OvsN.js} +1 -1
  328. package/codeyam-cli/src/webserver/build/client/assets/EntityTypeIcon-BwdQv49w.js +41 -0
  329. package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-CEleMv_j.js +34 -0
  330. package/codeyam-cli/src/webserver/build/client/assets/InteractivePreview-D68KarMg.js +25 -0
  331. package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-L75Wvqgw.js +3 -0
  332. package/codeyam-cli/src/webserver/build/client/assets/LoadingDots-C53WM8qn.js +6 -0
  333. package/codeyam-cli/src/webserver/build/client/assets/LogViewer-CrNkmy4i.js +3 -0
  334. package/codeyam-cli/src/webserver/build/client/assets/ReportIssueModal-DzJRkCkr.js +11 -0
  335. package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-CQifa1n-.js +1 -0
  336. package/codeyam-cli/src/webserver/build/client/assets/ScenarioViewer-CyaBFX7l.js +20 -0
  337. package/codeyam-cli/src/webserver/build/client/assets/{TruncatedFilePath-CWjSsLqY.js → TruncatedFilePath-D36O1rzU.js} +1 -1
  338. package/codeyam-cli/src/webserver/build/client/assets/_index-Be83mo_j.js +11 -0
  339. package/codeyam-cli/src/webserver/build/client/assets/activity.(_tab)-BN6wu6Y-.js +37 -0
  340. package/codeyam-cli/src/webserver/build/client/assets/chevron-down-DgTPh8H-.js +6 -0
  341. package/codeyam-cli/src/webserver/build/client/assets/chunk-EPOLDU6W-DdQKK6on.js +51 -0
  342. package/codeyam-cli/src/webserver/build/client/assets/circle-check-Dmr2bb1R.js +6 -0
  343. package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-Do4ZLUYa.js +21 -0
  344. package/codeyam-cli/src/webserver/build/client/assets/{cy-logo-cli-C1gnJVOL.svg → cy-logo-cli-CCKUIm0S.svg} +2 -2
  345. package/codeyam-cli/src/webserver/build/client/assets/cy-logo-cli-DcX-ZS3p.js +1 -0
  346. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-Bn6aCAy_.js +1 -0
  347. package/codeyam-cli/src/webserver/build/client/assets/entity._sha._-CbdFyxZh.js +23 -0
  348. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-B4iCfs5M.js +6 -0
  349. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-wDWZZO1W.js +6 -0
  350. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.edit._scenarioId-BMbl7MeQ.js +5 -0
  351. package/codeyam-cli/src/webserver/build/client/assets/entry.client-5wRKRIH9.js +29 -0
  352. package/codeyam-cli/src/webserver/build/client/assets/executionFlowCoverage-BWhdfn70.js +1 -0
  353. package/codeyam-cli/src/webserver/build/client/assets/fileTableUtils-DD3SDH7t.js +1 -0
  354. package/codeyam-cli/src/webserver/build/client/assets/files-DKyMFI90.js +1 -0
  355. package/codeyam-cli/src/webserver/build/client/assets/git-zXjT7J0G.js +15 -0
  356. package/codeyam-cli/src/webserver/build/client/assets/globals-DTTQ3gY7.css +1 -0
  357. package/codeyam-cli/src/webserver/build/client/assets/html2canvas-pro.esm-fmIEn3Bc.js +9 -0
  358. package/codeyam-cli/src/webserver/build/client/assets/index-DLbXwndH.js +9 -0
  359. package/codeyam-cli/src/webserver/build/client/assets/index-gPZ-lad1.js +3 -0
  360. package/codeyam-cli/src/webserver/build/client/assets/loader-circle-BsPXJ81F.js +6 -0
  361. package/codeyam-cli/src/webserver/build/client/assets/manifest-22590fcf.js +1 -0
  362. package/codeyam-cli/src/webserver/build/client/assets/preload-helper-ckwbz45p.js +1 -0
  363. package/codeyam-cli/src/webserver/build/client/assets/root-BsAarjAM.js +57 -0
  364. package/codeyam-cli/src/webserver/build/client/assets/scenarioStatus-B_8jpV3e.js +1 -0
  365. package/codeyam-cli/src/webserver/build/client/assets/search-P2FKIUql.js +6 -0
  366. package/codeyam-cli/src/webserver/build/client/assets/settings-B2eDuBj8.js +1 -0
  367. package/codeyam-cli/src/webserver/build/client/assets/simulations-L18M6-kN.js +1 -0
  368. package/codeyam-cli/src/webserver/build/client/assets/triangle-alert-BDz7kbVA.js +6 -0
  369. package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-29dDmbH8.js +1 -0
  370. package/codeyam-cli/src/webserver/build/client/assets/{useLastLogLine-CmrTPlIB.js → useLastLogLine-BUm0UVJm.js} +1 -1
  371. package/codeyam-cli/src/webserver/build/client/assets/useReportContext-CkIOKTrZ.js +1 -0
  372. package/codeyam-cli/src/webserver/build/client/assets/{useToast-C1ig_BmP.js → useToast-KKw5kTn-.js} +1 -1
  373. package/codeyam-cli/src/webserver/build/server/assets/index-BND5I5fv.js +1 -0
  374. package/codeyam-cli/src/webserver/build/server/assets/server-build-CFXnd7MG.js +228 -0
  375. package/codeyam-cli/src/webserver/build/server/index.js +1 -1
  376. package/codeyam-cli/src/webserver/build-info.json +5 -5
  377. package/codeyam-cli/src/webserver/devServer.js +1 -3
  378. package/codeyam-cli/src/webserver/devServer.js.map +1 -1
  379. package/codeyam-cli/src/webserver/server.js +35 -25
  380. package/codeyam-cli/src/webserver/server.js.map +1 -1
  381. package/codeyam-cli/templates/{codeyam-debug-skill.md → codeyam:debug.md} +1 -1
  382. package/codeyam-cli/templates/codeyam:diagnose.md +625 -0
  383. package/codeyam-cli/templates/{codeyam-setup-skill.md → codeyam:setup.md} +139 -4
  384. package/codeyam-cli/templates/{codeyam-sim-skill.md → codeyam:sim.md} +1 -1
  385. package/codeyam-cli/templates/{codeyam-test-skill.md → codeyam:test.md} +1 -1
  386. package/codeyam-cli/templates/{codeyam-verify-skill.md → codeyam:verify.md} +1 -1
  387. package/package.json +8 -8
  388. package/packages/ai/index.js +2 -4
  389. package/packages/ai/index.js.map +1 -1
  390. package/packages/ai/src/lib/analyzeScope.js +107 -0
  391. package/packages/ai/src/lib/analyzeScope.js.map +1 -1
  392. package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js +76 -1
  393. package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js.map +1 -1
  394. package/packages/ai/src/lib/astScopes/conditionalEffectsExtractor.js +435 -0
  395. package/packages/ai/src/lib/astScopes/conditionalEffectsExtractor.js.map +1 -0
  396. package/packages/ai/src/lib/astScopes/methodSemantics.js +29 -0
  397. package/packages/ai/src/lib/astScopes/methodSemantics.js.map +1 -1
  398. package/packages/ai/src/lib/astScopes/patterns/ifStatementHandler.js +8 -0
  399. package/packages/ai/src/lib/astScopes/patterns/ifStatementHandler.js.map +1 -1
  400. package/packages/ai/src/lib/astScopes/patterns/switchStatementHandler.js +23 -0
  401. package/packages/ai/src/lib/astScopes/patterns/switchStatementHandler.js.map +1 -1
  402. package/packages/ai/src/lib/astScopes/patterns/variableDeclarationHandler.js +239 -1
  403. package/packages/ai/src/lib/astScopes/patterns/variableDeclarationHandler.js.map +1 -1
  404. package/packages/ai/src/lib/astScopes/processExpression.js +728 -87
  405. package/packages/ai/src/lib/astScopes/processExpression.js.map +1 -1
  406. package/packages/ai/src/lib/checkAllAttributes.js +24 -9
  407. package/packages/ai/src/lib/checkAllAttributes.js.map +1 -1
  408. package/packages/ai/src/lib/completionCall.js +17 -1
  409. package/packages/ai/src/lib/completionCall.js.map +1 -1
  410. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +1126 -82
  411. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
  412. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.js +2 -1
  413. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.js.map +1 -1
  414. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.js +482 -0
  415. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.js.map +1 -0
  416. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.js +173 -55
  417. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.js.map +1 -1
  418. package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js +16 -1
  419. package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js.map +1 -1
  420. package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js +35 -2
  421. package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js.map +1 -1
  422. package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js +20 -0
  423. package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js.map +1 -1
  424. package/packages/ai/src/lib/dataStructure/helpers/convertNullToUndefinedBySchema.js +86 -0
  425. package/packages/ai/src/lib/dataStructure/helpers/convertNullToUndefinedBySchema.js.map +1 -0
  426. package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js +34 -3
  427. package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js.map +1 -1
  428. package/packages/ai/src/lib/deepEqual.js +32 -0
  429. package/packages/ai/src/lib/deepEqual.js.map +1 -0
  430. package/packages/ai/src/lib/generateChangesEntityScenarioData.js +62 -5
  431. package/packages/ai/src/lib/generateChangesEntityScenarioData.js.map +1 -1
  432. package/packages/ai/src/lib/generateChangesEntityScenarios.js +81 -90
  433. package/packages/ai/src/lib/generateChangesEntityScenarios.js.map +1 -1
  434. package/packages/ai/src/lib/generateEntityDataStructure.js +5 -0
  435. package/packages/ai/src/lib/generateEntityDataStructure.js.map +1 -1
  436. package/packages/ai/src/lib/generateEntityScenarioData.js +398 -81
  437. package/packages/ai/src/lib/generateEntityScenarioData.js.map +1 -1
  438. package/packages/ai/src/lib/generateEntityScenarios.js +168 -82
  439. package/packages/ai/src/lib/generateEntityScenarios.js.map +1 -1
  440. package/packages/ai/src/lib/generateExecutionFlows.js +123 -0
  441. package/packages/ai/src/lib/generateExecutionFlows.js.map +1 -0
  442. package/packages/ai/src/lib/generateExecutionFlowsFromConditionalEffects.js +380 -0
  443. package/packages/ai/src/lib/generateExecutionFlowsFromConditionalEffects.js.map +1 -0
  444. package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js +742 -0
  445. package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js.map +1 -0
  446. package/packages/ai/src/lib/getConditionalUsagesFromCode.js +84 -14
  447. package/packages/ai/src/lib/getConditionalUsagesFromCode.js.map +1 -1
  448. package/packages/ai/src/lib/guessScenarioDataFromDescription.js +2 -1
  449. package/packages/ai/src/lib/guessScenarioDataFromDescription.js.map +1 -1
  450. package/packages/ai/src/lib/isolateScopes.js +231 -4
  451. package/packages/ai/src/lib/isolateScopes.js.map +1 -1
  452. package/packages/ai/src/lib/mergeStatements.js +26 -3
  453. package/packages/ai/src/lib/mergeStatements.js.map +1 -1
  454. package/packages/ai/src/lib/promptGenerators/gatherAttributesMap.js +6 -0
  455. package/packages/ai/src/lib/promptGenerators/gatherAttributesMap.js.map +1 -1
  456. package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenarioDataGenerator.js +1 -1
  457. package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenarioDataGenerator.js.map +1 -1
  458. package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.js +21 -64
  459. package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.js.map +1 -1
  460. package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js +58 -4
  461. package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js.map +1 -1
  462. package/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.js +10 -34
  463. package/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.js.map +1 -1
  464. package/packages/ai/src/lib/promptGenerators/generateMissingKeysPrompt.js +45 -0
  465. package/packages/ai/src/lib/promptGenerators/generateMissingKeysPrompt.js.map +1 -0
  466. package/packages/ai/src/lib/promptGenerators/guessNewScenarioDataFromDescriptionGenerator.js +16 -3
  467. package/packages/ai/src/lib/promptGenerators/guessNewScenarioDataFromDescriptionGenerator.js.map +1 -1
  468. package/packages/ai/src/lib/resolvePathToControllable.js +563 -0
  469. package/packages/ai/src/lib/resolvePathToControllable.js.map +1 -0
  470. package/packages/ai/src/lib/splitOutsideParentheses.js +3 -1
  471. package/packages/ai/src/lib/splitOutsideParentheses.js.map +1 -1
  472. package/packages/ai/src/lib/worker/SerializableDataStructure.js +22 -0
  473. package/packages/ai/src/lib/worker/SerializableDataStructure.js.map +1 -1
  474. package/packages/ai/src/lib/worker/analyzeScopeWorker.js +4 -0
  475. package/packages/ai/src/lib/worker/analyzeScopeWorker.js.map +1 -1
  476. package/packages/analyze/src/lib/FileAnalyzer.js +15 -0
  477. package/packages/analyze/src/lib/FileAnalyzer.js.map +1 -1
  478. package/packages/analyze/src/lib/asts/nodes/index.js +1 -0
  479. package/packages/analyze/src/lib/asts/nodes/index.js.map +1 -1
  480. package/packages/analyze/src/lib/asts/nodes/isAsyncFunction.js +52 -0
  481. package/packages/analyze/src/lib/asts/nodes/isAsyncFunction.js.map +1 -0
  482. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js +214 -50
  483. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js.map +1 -1
  484. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js +10 -0
  485. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js.map +1 -1
  486. package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js +2 -0
  487. package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js.map +1 -1
  488. package/packages/analyze/src/lib/files/analyzeChange.js +21 -11
  489. package/packages/analyze/src/lib/files/analyzeChange.js.map +1 -1
  490. package/packages/analyze/src/lib/files/analyzeEntity.js +9 -8
  491. package/packages/analyze/src/lib/files/analyzeEntity.js.map +1 -1
  492. package/packages/analyze/src/lib/files/analyzeInitial.js +9 -10
  493. package/packages/analyze/src/lib/files/analyzeInitial.js.map +1 -1
  494. package/packages/analyze/src/lib/files/enums/steps.js +1 -1
  495. package/packages/analyze/src/lib/files/enums/steps.js.map +1 -1
  496. package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js +159 -0
  497. package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js.map +1 -0
  498. package/packages/analyze/src/lib/files/scenarios/enrichUnknownTypesFromSourceEquivalencies.js +85 -0
  499. package/packages/analyze/src/lib/files/scenarios/enrichUnknownTypesFromSourceEquivalencies.js.map +1 -0
  500. package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js +458 -48
  501. package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js.map +1 -1
  502. package/packages/analyze/src/lib/files/scenarios/generateChangesScenarioData.js +1 -1
  503. package/packages/analyze/src/lib/files/scenarios/generateChangesScenarioData.js.map +1 -1
  504. package/packages/analyze/src/lib/files/scenarios/generateChangesScenarios.js +29 -34
  505. package/packages/analyze/src/lib/files/scenarios/generateChangesScenarios.js.map +1 -1
  506. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +235 -81
  507. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
  508. package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js +96 -0
  509. package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js.map +1 -0
  510. package/packages/analyze/src/lib/files/scenarios/generateScenarioData.js +56 -69
  511. package/packages/analyze/src/lib/files/scenarios/generateScenarioData.js.map +1 -1
  512. package/packages/analyze/src/lib/files/scenarios/generateScenarios.js +4 -8
  513. package/packages/analyze/src/lib/files/scenarios/generateScenarios.js.map +1 -1
  514. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +307 -89
  515. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js.map +1 -1
  516. package/packages/aws/src/lib/ecs/ecsDefineContainer.js +2 -2
  517. package/packages/aws/src/lib/ecs/ecsDefineContainer.js.map +1 -1
  518. package/packages/aws/src/lib/ecs/ecsTaskFactory.js +17 -61
  519. package/packages/aws/src/lib/ecs/ecsTaskFactory.js.map +1 -1
  520. package/packages/database/src/lib/kysely/db.js +2 -2
  521. package/packages/database/src/lib/kysely/tables/debugReportsTable.js +9 -3
  522. package/packages/database/src/lib/kysely/tables/debugReportsTable.js.map +1 -1
  523. package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.js +7 -4
  524. package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.js.map +1 -1
  525. package/packages/generate/index.js +3 -0
  526. package/packages/generate/index.js.map +1 -1
  527. package/packages/generate/src/lib/componentScenarioPage/componentScenarioPageNext.js +16 -1
  528. package/packages/generate/src/lib/componentScenarioPage/componentScenarioPageNext.js.map +1 -1
  529. package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js +189 -0
  530. package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js.map +1 -0
  531. package/packages/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.js +53 -0
  532. package/packages/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.js.map +1 -0
  533. package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +8 -4
  534. package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
  535. package/packages/generate/src/lib/deepMerge.js +27 -1
  536. package/packages/generate/src/lib/deepMerge.js.map +1 -1
  537. package/packages/generate/src/lib/scenarioComponentForServer.js +89 -0
  538. package/packages/generate/src/lib/scenarioComponentForServer.js.map +1 -0
  539. package/packages/github/src/lib/loadOrCreateCommit.js +10 -0
  540. package/packages/github/src/lib/loadOrCreateCommit.js.map +1 -1
  541. package/packages/github/src/lib/syncPrimaryBranch.js +3 -0
  542. package/packages/github/src/lib/syncPrimaryBranch.js.map +1 -1
  543. package/packages/process/index.js +3 -0
  544. package/packages/process/index.js.map +1 -0
  545. package/packages/process/src/GlobalProcessManager.js.map +1 -0
  546. package/{background/src/lib/process → packages/process/src}/ProcessManager.js +1 -1
  547. package/packages/process/src/ProcessManager.js.map +1 -0
  548. package/packages/process/src/index.js.map +1 -0
  549. package/packages/process/src/managedExecAsync.js.map +1 -0
  550. package/packages/types/index.js.map +1 -1
  551. package/scripts/finalize-analyzer.cjs +3 -1
  552. package/analyzer-template/packages/ai/src/lib/findMatchingAttribute.ts +0 -102
  553. package/analyzer-template/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.ts +0 -197
  554. package/analyzer-template/packages/ai/src/lib/generateChangesEntityKeyAttributes.ts +0 -271
  555. package/analyzer-template/packages/ai/src/lib/generateEntityKeyAttributes.ts +0 -294
  556. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityKeyAttributesGenerator.ts +0 -67
  557. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.ts +0 -115
  558. package/analyzer-template/process/INTEGRATION_COMPLETE.md +0 -333
  559. package/analyzer-template/process/INTEGRATION_EXAMPLE.md +0 -525
  560. package/analyzer-template/process/README.md +0 -507
  561. package/background/src/lib/process/GlobalProcessManager.js.map +0 -1
  562. package/background/src/lib/process/ProcessManager.js.map +0 -1
  563. package/background/src/lib/process/index.js.map +0 -1
  564. package/background/src/lib/process/managedExecAsync.js.map +0 -1
  565. package/codeyam-cli/scripts/fixtures/cal.com/universal-mocks/packages/prisma/index.js +0 -238
  566. package/codeyam-cli/scripts/fixtures/cal.com/universal-mocks/packages/prisma/index.js.map +0 -1
  567. package/codeyam-cli/src/webserver/build/client/assets/EntityItem-D0VW1-W7.js +0 -1
  568. package/codeyam-cli/src/webserver/build/client/assets/EntityTypeIcon-BAk4S4pI.js +0 -1
  569. package/codeyam-cli/src/webserver/build/client/assets/InteractivePreview-Y756iZxZ.js +0 -25
  570. package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-zzrrjW1p.js +0 -3
  571. package/codeyam-cli/src/webserver/build/client/assets/LogViewer-QMn7bJg6.js +0 -3
  572. package/codeyam-cli/src/webserver/build/client/assets/ReportIssueModal-DmP5mRxX.js +0 -1
  573. package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-BXwvsbLw.js +0 -1
  574. package/codeyam-cli/src/webserver/build/client/assets/ScenarioViewer-DAmUX_1y.js +0 -5
  575. package/codeyam-cli/src/webserver/build/client/assets/_index-Df-nk4J5.js +0 -1
  576. package/codeyam-cli/src/webserver/build/client/assets/activity.(_tab)-_ZUyFdie.js +0 -7
  577. package/codeyam-cli/src/webserver/build/client/assets/chevron-down-Eoh0PhcW.js +0 -1
  578. package/codeyam-cli/src/webserver/build/client/assets/chunk-WWGJGFF6-CZgPLy5i.js +0 -26
  579. package/codeyam-cli/src/webserver/build/client/assets/circle-check-DI-p9ZLZ.js +0 -1
  580. package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-DvyV2x6y.js +0 -1
  581. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-DURu2qlF.js +0 -1
  582. package/codeyam-cli/src/webserver/build/client/assets/entity._sha._-DDobn9Xh.js +0 -16
  583. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-CGdWnLD_.js +0 -1
  584. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.edit._scenarioId-DgMmzrKs.js +0 -5
  585. package/codeyam-cli/src/webserver/build/client/assets/entry.client-DEVXuhkn.js +0 -13
  586. package/codeyam-cli/src/webserver/build/client/assets/fileTableUtils-WPRQyc68.js +0 -1
  587. package/codeyam-cli/src/webserver/build/client/assets/files-B9u3lJer.js +0 -1
  588. package/codeyam-cli/src/webserver/build/client/assets/git-YGnKIuHU.js +0 -11
  589. package/codeyam-cli/src/webserver/build/client/assets/globals-28lrWTTo.css +0 -1
  590. package/codeyam-cli/src/webserver/build/client/assets/html2canvas-pro.esm-XQCGvadH.js +0 -5
  591. package/codeyam-cli/src/webserver/build/client/assets/index-CJ0uPJjV.js +0 -1
  592. package/codeyam-cli/src/webserver/build/client/assets/index-CfqeA2XG.js +0 -3
  593. package/codeyam-cli/src/webserver/build/client/assets/loader-circle-DIjSvh6B.js +0 -1
  594. package/codeyam-cli/src/webserver/build/client/assets/manifest-8125c15c.js +0 -1
  595. package/codeyam-cli/src/webserver/build/client/assets/preload-helper-BXl3LOEh.js +0 -1
  596. package/codeyam-cli/src/webserver/build/client/assets/root-C-g286WP.js +0 -16
  597. package/codeyam-cli/src/webserver/build/client/assets/search-xBKWfOxd.js +0 -1
  598. package/codeyam-cli/src/webserver/build/client/assets/settings-DVY_wGOx.js +0 -1
  599. package/codeyam-cli/src/webserver/build/client/assets/simulations-Be1pJo5A.js +0 -1
  600. package/codeyam-cli/src/webserver/build/client/assets/triangle-alert-CR-FkSvx.js +0 -1
  601. package/codeyam-cli/src/webserver/build/client/assets/useReportContext-DABetnSj.js +0 -1
  602. package/codeyam-cli/src/webserver/build/server/assets/index-DcR7DH9q.js +0 -1
  603. package/codeyam-cli/src/webserver/build/server/assets/server-build-BDBrfp7e.js +0 -175
  604. package/codeyam-cli/templates/debug-codeyam.md +0 -527
  605. package/packages/ai/src/lib/findMatchingAttribute.js +0 -77
  606. package/packages/ai/src/lib/findMatchingAttribute.js.map +0 -1
  607. package/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.js +0 -136
  608. package/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.js.map +0 -1
  609. package/packages/ai/src/lib/generateChangesEntityKeyAttributes.js +0 -220
  610. package/packages/ai/src/lib/generateChangesEntityKeyAttributes.js.map +0 -1
  611. package/packages/ai/src/lib/generateEntityKeyAttributes.js +0 -241
  612. package/packages/ai/src/lib/generateEntityKeyAttributes.js.map +0 -1
  613. package/packages/ai/src/lib/isFrontend.js +0 -5
  614. package/packages/ai/src/lib/isFrontend.js.map +0 -1
  615. package/packages/ai/src/lib/promptGenerators/generateEntityKeyAttributesGenerator.js +0 -40
  616. package/packages/ai/src/lib/promptGenerators/generateEntityKeyAttributesGenerator.js.map +0 -1
  617. package/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.js +0 -72
  618. package/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.js.map +0 -1
  619. /package/analyzer-template/{process → packages/process/src}/GlobalProcessManager.ts +0 -0
  620. /package/analyzer-template/{process → packages/process/src}/ProcessManager.ts +0 -0
  621. /package/analyzer-template/{process → packages/process/src}/index.ts +0 -0
  622. /package/analyzer-template/{process → packages/process/src}/managedExecAsync.ts +0 -0
  623. /package/{background/src/lib/process → packages/process/src}/GlobalProcessManager.js +0 -0
  624. /package/{background/src/lib/process → packages/process/src}/index.js +0 -0
  625. /package/{background/src/lib/process → packages/process/src}/managedExecAsync.js +0 -0
@@ -208,10 +208,12 @@ export default function fillInSchemaGapsAndUnknowns(
208
208
  export function fillInDirectSchemaGapsAndUnknowns({
209
209
  scopeName,
210
210
  schema,
211
+ mergedSchema,
211
212
  attempts = 0,
212
213
  }: {
213
214
  scopeName?: string;
214
215
  schema: Record<string, string>;
216
+ mergedSchema?: Record<string, string>;
215
217
  attempts?: number;
216
218
  }) {
217
219
  try {
@@ -245,7 +247,9 @@ export function fillInDirectSchemaGapsAndUnknowns({
245
247
  const guessTypeForPath = (path: string, defaultType = 'string') => {
246
248
  let knownType = checkIfKnownType(path, functionKeysMapping);
247
249
  if (!knownType) {
248
- knownType = checkIfObjectOrFunction(path, schema);
250
+ // Use mergedSchema for type inference if available (has more complete nested paths)
251
+ // Fall back to schema if mergedSchema is not provided
252
+ knownType = checkIfObjectOrFunction(path, mergedSchema ?? schema);
249
253
  }
250
254
 
251
255
  if (knownType && schema[path] !== knownType) {
@@ -303,7 +307,14 @@ export function fillInDirectSchemaGapsAndUnknowns({
303
307
  cleanOutBoundary(lastSubPathPart).match(/\[\d*\]/) &&
304
308
  !lastSubPathPart.match(/signature\[\d+\]/)
305
309
  ) {
306
- if (schema[previousSubPath] !== 'array') {
310
+ // Fix 39: Don't overwrite explicit 'object' types with 'array'
311
+ // This handles spurious [] paths from components like JsonNode that handle
312
+ // both arrays and objects. When metadata is explicitly typed as 'object',
313
+ // paths like metadata[] (from dynamic iteration) should not change it.
314
+ if (
315
+ schema[previousSubPath] !== 'array' &&
316
+ schema[previousSubPath] !== 'object'
317
+ ) {
307
318
  schema[previousSubPath] = 'array';
308
319
  changeMade = true;
309
320
  }
@@ -373,10 +384,39 @@ export function fillInDirectSchemaGapsAndUnknowns({
373
384
  fillInDirectSchemaGapsAndUnknowns({
374
385
  scopeName,
375
386
  schema,
387
+ mergedSchema,
376
388
  attempts: ++attempts,
377
389
  });
378
390
  }
379
391
 
392
+ // Remove .length paths when the parent is typed as 'array' or 'string' (or nullable variants).
393
+ // These are built-in properties that were used for type inference but shouldn't appear
394
+ // in the final schema (they create { length: N } objects instead of proper arrays).
395
+ // However, if the parent could be an 'object' or other type, keep .length as it may be
396
+ // a custom property.
397
+ for (const key of Object.keys(schema)) {
398
+ const parts = splitOutsideParenthesesAndArrays(key);
399
+ if (parts[parts.length - 1] === 'length') {
400
+ const parentPath = joinParenthesesAndArrays(parts.slice(0, -1));
401
+ const parentType = schema[parentPath];
402
+ if (parentType) {
403
+ // Split union types and filter out nullable parts
404
+ const typeParts = parentType.split(' | ').map((t) => t.trim());
405
+ const nonNullableTypes = typeParts.filter(
406
+ (t) => t !== 'undefined' && t !== 'null',
407
+ );
408
+ // Only remove if ALL non-nullable types are array or string
409
+ // This ensures we don't remove .length from potential custom objects
410
+ if (
411
+ nonNullableTypes.length > 0 &&
412
+ nonNullableTypes.every((t) => t === 'array' || t === 'string')
413
+ ) {
414
+ delete schema[key];
415
+ }
416
+ }
417
+ }
418
+ }
419
+
380
420
  return schema;
381
421
  } catch (error) {
382
422
  console.info(
@@ -0,0 +1,30 @@
1
+ export default function deepEqual(obj1: unknown, obj2: unknown): boolean {
2
+ // Handle primitive types and null/undefined
3
+ if (obj1 === obj2) return true;
4
+ if (obj1 == null || obj2 == null) return false;
5
+ if (typeof obj1 !== 'object' || typeof obj2 !== 'object') return false;
6
+
7
+ // Handle Date objects
8
+ if (obj1 instanceof Date && obj2 instanceof Date) {
9
+ return obj1.getTime() === obj2.getTime();
10
+ }
11
+
12
+ // Handle Array objects
13
+ if (Array.isArray(obj1) && Array.isArray(obj2)) {
14
+ if (obj1.length !== obj2.length) return false;
15
+ return obj1.every((item, index) => deepEqual(item, obj2[index]));
16
+ }
17
+
18
+ // Handle regular objects
19
+ const keys1 = Object.keys(obj1);
20
+ const keys2 = Object.keys(obj2);
21
+
22
+ if (keys1.length !== keys2.length) return false;
23
+
24
+ return keys1.every((key) => {
25
+ if (!Object.prototype.hasOwnProperty.call(obj2, key)) return false;
26
+ const obj1AsAny = obj1 as any;
27
+ const obj2AsAny = obj2 as any;
28
+ return deepEqual(obj1AsAny[key], obj2AsAny[key]);
29
+ });
30
+ }
@@ -16,6 +16,8 @@ import type {
16
16
  import { LlmCall } from '~codeyam/types';
17
17
  import validateJson from './validateJson';
18
18
  import checkAllAttributes from './checkAllAttributes';
19
+ import convertNullToUndefinedBySchema from './dataStructure/helpers/convertNullToUndefinedBySchema';
20
+ import deepEqual from './deepEqual';
19
21
  import { awsLog } from '~codeyam/utils';
20
22
  import { AI, parseJsonSafe } from '~codeyam/ai';
21
23
 
@@ -59,12 +61,14 @@ async function generateChangesDataForScenario({
59
61
  llmCalls: LlmCall[];
60
62
  }> {
61
63
  if (
62
- structure === existingStructure &&
63
- scenario.metadata.keyAttributeInstructions ===
64
- existingScenario.metadata.keyAttributeInstructions
64
+ deepEqual(structure, existingStructure) &&
65
+ deepEqual(
66
+ scenario.metadata?.coveredFlows,
67
+ existingScenario?.metadata?.coveredFlows,
68
+ )
65
69
  ) {
66
70
  console.log(
67
- "CodeYam: No changes in scenario's structure or keyAttributeInstructions - returning existing scenario data",
71
+ "CodeYam: No changes in scenario's structure or coveredFlows - returning existing scenario data",
68
72
  {
69
73
  analysisId: scenario.analysisId,
70
74
  scenarioId: scenario.id,
@@ -95,6 +99,7 @@ async function generateChangesDataForScenario({
95
99
  prompt = generateEntityScenarioDataGenerator(
96
100
  structure,
97
101
  scenario,
102
+ undefined, // executionFlows - not available in changes context
98
103
  defaultScenarioData,
99
104
  incompleteResponse,
100
105
  );
@@ -219,8 +224,8 @@ async function generateChangesDataForScenario({
219
224
  if (!Array.isArray(argumentsData)) {
220
225
  argumentsData = [];
221
226
  }
222
- fullScenarioData.data.argumentsData = argumentsData.map((arg) =>
223
- checkAllAttributes(arg),
227
+ fullScenarioData.data.argumentsData = argumentsData.map(
228
+ (arg) => checkAllAttributes(arg) as { [key: string]: unknown },
224
229
  );
225
230
 
226
231
  if (structure.dataForMocks && !fullScenarioData.data.mockData) {
@@ -232,7 +237,28 @@ async function generateChangesDataForScenario({
232
237
  }
233
238
  fullScenarioData.data.mockData = checkAllAttributes(
234
239
  fullScenarioData.data.mockData,
235
- );
240
+ ) as { [key: string]: unknown };
241
+
242
+ // Convert null values to undefined based on schema type constraints.
243
+ // LLM uses null for "no value" (JSON doesn't support undefined), but TypeScript
244
+ // types like "string | undefined" don't accept null. This converts null→undefined
245
+ // for fields typed as "T | undefined" (but preserves null for "T | null").
246
+ if (structure.dataForMocks && fullScenarioData.data.mockData) {
247
+ convertNullToUndefinedBySchema(
248
+ fullScenarioData.data.mockData,
249
+ structure.dataForMocks,
250
+ );
251
+ }
252
+ if (structure.arguments && fullScenarioData.data.argumentsData) {
253
+ for (let i = 0; i < fullScenarioData.data.argumentsData.length; i++) {
254
+ if (structure.arguments[i]) {
255
+ convertNullToUndefinedBySchema(
256
+ fullScenarioData.data.argumentsData[i],
257
+ structure.arguments[i],
258
+ );
259
+ }
260
+ }
261
+ }
236
262
 
237
263
  return {
238
264
  llmCalls: [{ name: scenario.name, id: llmCall.id }],
@@ -346,6 +372,47 @@ NEVER include "error" fields in responses. Skip them entirely.
346
372
  - If structure has \`{ data: {...}, error: {...} }\`, only fill \`data\`
347
373
  - Leave out any attribute named "error"—do not set to null, omit entirely
348
374
 
375
+ ## CRITICAL: Preserve Exact Structure
376
+ Your response MUST mirror the EXACT nested structure provided in mockData Structure.
377
+ - Do NOT reorganize, split, or create duplicate keys
378
+ - The hierarchy of nested objects must match exactly what was provided
379
+ - Only change the leaf VALUES (replacing type descriptions like "string" with actual data like "hello")
380
+ - Arrays should have 3-5 items to provide realistic test data variety
381
+
382
+ **Example** - if given this structure:
383
+ \`\`\`json
384
+ {
385
+ "createClient()": {
386
+ "from(\\"users\\")": {
387
+ "select(\\"*\\")": { "data": [{ "id": "string", "name": "string" }] },
388
+ "delete()": { "eq(\\"id\\", id)": {} }
389
+ }
390
+ }
391
+ }
392
+ \`\`\`
393
+
394
+ Return ONE \`from("users")\` key containing BOTH \`select("*")\` and \`delete()\`:
395
+ \`\`\`json
396
+ {
397
+ "createClient()": {
398
+ "from(\\"users\\")": {
399
+ "select(\\"*\\")": { "data": [{ "id": "user-1", "name": "Alice" }, { "id": "user-2", "name": "Bob" }] },
400
+ "delete()": { "eq(\\"id\\", \\"user-1\\")": {} }
401
+ }
402
+ }
403
+ }
404
+ \`\`\`
405
+
406
+ **WRONG** - do NOT create duplicate keys like this:
407
+ \`\`\`json
408
+ {
409
+ "createClient()": {
410
+ "from(\\"users\\")": { "select(\\"*\\")": { ... } },
411
+ "from(\\"users\\")": { "delete()": { ... } }
412
+ }
413
+ }
414
+ \`\`\`
415
+
349
416
  ## Special Markers
350
417
 
351
418
  ### Dynamic Dates (\`~~codeyam-code~~\`)
@@ -5,21 +5,19 @@ import generateChangesEntityScenariosGenerator from './promptGenerators/generate
5
5
  import {
6
6
  Analysis,
7
7
  Entity,
8
+ ExecutionFlow,
8
9
  ReadonlyAnalysisMap,
9
10
  Scenario,
10
11
  } from '~codeyam/types';
11
12
  import { ScenarioResult } from './generateEntityScenarios';
12
- import findMatchingAttribute from './findMatchingAttribute';
13
13
  import { awsLog } from '~codeyam/utils';
14
14
  import { sanitizePlaywrightInstructions } from './validatePlaywrightInstructions';
15
- import gatherRelevantDependentKeyAttributes from './gatherRelevantDependentKeyAttributes';
16
15
  import { AI, DEFAULT_LARGER_MODEL, parseJsonSafe } from '~codeyam/ai';
17
16
 
18
17
  interface GenerateChangesEntityScenariosArgs {
19
18
  entity: Entity;
20
- keyAttributes: Analysis['metadata']['keyAttributes'];
21
- addedKeyAttributes: Analysis['metadata']['keyAttributes'];
22
- removedKeyAttributes: Analysis['metadata']['keyAttributes'];
19
+ executionFlows?: ExecutionFlow[];
20
+ previousExecutionFlows?: ExecutionFlow[];
23
21
  dependentAnalyses?: ReadonlyAnalysisMap;
24
22
  existingScenarios: Scenario[];
25
23
  commitDiff: string;
@@ -33,10 +31,8 @@ const DEFAULT_SCENARIO_NAME = 'Default Scenario';
33
31
 
34
32
  export default async function generateChangesEntityScenarios({
35
33
  entity,
36
- keyAttributes,
37
- addedKeyAttributes,
38
- removedKeyAttributes,
39
- dependentAnalyses,
34
+ executionFlows,
35
+ previousExecutionFlows,
40
36
  existingScenarios,
41
37
  commitDiff,
42
38
  analysis,
@@ -44,16 +40,22 @@ export default async function generateChangesEntityScenarios({
44
40
  model,
45
41
  changedDataStructureFields = [],
46
42
  }: GenerateChangesEntityScenariosArgs) {
47
- const relevantDependentKeyAttributes = gatherRelevantDependentKeyAttributes(
48
- entity,
49
- analysis.metadata.mergedDataStructure,
50
- dependentAnalyses,
43
+ // Determine added/removed flows
44
+ const currentFlowIds = new Set((executionFlows ?? []).map((f) => f.id));
45
+ const previousFlowIds = new Set(
46
+ (previousExecutionFlows ?? []).map((f) => f.id),
51
47
  );
48
+
49
+ const addedFlows =
50
+ executionFlows?.filter((f) => !previousFlowIds.has(f.id)) ?? [];
51
+ const removedFlows =
52
+ previousExecutionFlows?.filter((f) => !currentFlowIds.has(f.id)) ?? [];
53
+
54
+ // If no changes, return existing scenarios
52
55
  if (
53
- (!addedKeyAttributes || addedKeyAttributes.length === 0) &&
54
- (!removedKeyAttributes || removedKeyAttributes.length === 0) &&
55
- !existingScenarios.some((s) => s.metadata?.playwrightInstructions) &&
56
- Object.keys(relevantDependentKeyAttributes).length === 0
56
+ addedFlows.length === 0 &&
57
+ removedFlows.length === 0 &&
58
+ !existingScenarios.some((s) => s.metadata?.playwrightInstructions)
57
59
  ) {
58
60
  return { scenarios: existingScenarios };
59
61
  }
@@ -62,21 +64,20 @@ export default async function generateChangesEntityScenarios({
62
64
  `CodeYam: Generating ${error ? 'error ' : ''}changes entity scenarios`,
63
65
  {
64
66
  filePath: entity.filePath,
65
- entityNam: entity.name,
66
- analysis: analysis.id,
67
- keyAttributes: keyAttributes.map((a) => a.externalPath),
68
- addedKeyAttributes: addedKeyAttributes?.map((a) => a.externalPath),
69
- removedKeyAttributes: removedKeyAttributes?.map((a) => a.externalPath),
67
+ entityName: entity.name,
68
+ analysisId: analysis.id,
69
+ currentFlowCount: executionFlows?.length ?? 0,
70
+ addedFlows: addedFlows.map((f) => f.id),
71
+ removedFlows: removedFlows.map((f) => f.id),
70
72
  },
71
73
  );
72
74
 
73
75
  const prompt = generateChangesEntityScenariosGenerator({
74
76
  entity,
75
77
  mergedDataStructure: analysis.metadata.mergedDataStructure,
76
- keyAttributes,
77
- addedKeyAttributes,
78
- removedKeyAttributes,
79
- dependentAnalyses,
78
+ executionFlows,
79
+ addedFlows,
80
+ removedFlows,
80
81
  existingScenarios,
81
82
  commitDiff,
82
83
  error,
@@ -93,7 +94,7 @@ export default async function generateChangesEntityScenarios({
93
94
  type: `generate${error ? 'Error' : ''}ChangesEntityScenarios`,
94
95
  systemMessage: error
95
96
  ? ERROR_SYSTEM_MESSAGE
96
- : generateChangesSystemMessage(context, scenarioCount, false),
97
+ : generateChangesSystemMessage(context, scenarioCount),
97
98
  prompt,
98
99
  model: model ?? DEFAULT_LARGER_MODEL,
99
100
  });
@@ -111,32 +112,17 @@ export default async function generateChangesEntityScenarios({
111
112
  path: entity.file.path,
112
113
  },
113
114
  },
114
- keyAttributes,
115
- addedKeyAttributes,
116
- removedKeyAttributes,
117
- dependentAnalyses: Object.fromEntries(
118
- Object.entries(dependentAnalyses ?? {}).map(([path, analyses]) => [
119
- path,
120
- Object.fromEntries(
121
- Object.entries(analyses).map(([name, analysis]) => [
122
- name,
123
- {
124
- metadata: {
125
- keyAttributes: analysis.metadata?.keyAttributes,
126
- },
127
- },
128
- ]),
129
- ),
130
- ]),
131
- ),
115
+ executionFlows,
116
+ addedFlows,
117
+ removedFlows,
132
118
  existingScenarios: existingScenarios.map((s) => ({
133
119
  id: s.id,
134
120
  name: s.name,
135
121
  description: s.description,
136
122
  metadata: {
137
- error: s.metadata.error,
138
- keyAttributeInstructions: s.metadata.keyAttributeInstructions,
139
- playwrightInstructions: s.metadata.playwrightInstructions,
123
+ error: s.metadata?.error,
124
+ coveredFlows: s.metadata?.coveredFlows,
125
+ playwrightInstructions: s.metadata?.playwrightInstructions,
140
126
  },
141
127
  })),
142
128
  commitDiff,
@@ -146,7 +132,7 @@ export default async function generateChangesEntityScenarios({
146
132
  isolatedDataStructure: {
147
133
  equivalentSignatureVariables:
148
134
  entity.metadata.isolatedDataStructure
149
- .equivalentSignatureVariables,
135
+ ?.equivalentSignatureVariables,
150
136
  },
151
137
  },
152
138
  },
@@ -191,7 +177,7 @@ export default async function generateChangesEntityScenarios({
191
177
  );
192
178
 
193
179
  const revisedFromPreviousVersion = previousVersion
194
- ? !!scenarioInfo.keyAttributeInstructions
180
+ ? !!scenarioInfo.coveredFlows
195
181
  : undefined;
196
182
  const useScenarioData = !previousVersion || revisedFromPreviousVersion;
197
183
 
@@ -204,58 +190,42 @@ export default async function generateChangesEntityScenarios({
204
190
  : previousVersion.description,
205
191
  metadata: {
206
192
  testName:
207
- useScenarioData || !previousVersion.metadata.testName
193
+ useScenarioData || !previousVersion?.metadata?.testName
208
194
  ? scenarioInfo.testName
209
195
  : previousVersion.metadata.testName,
210
196
  error,
211
197
  revisedFromPreviousVersion,
212
198
  codeSnippet: useScenarioData
213
199
  ? scenarioInfo.codeSnippet
214
- : previousVersion.metadata.codeSnippet,
215
- fix: useScenarioData ? scenarioInfo.fix : previousVersion.metadata.fix,
200
+ : previousVersion?.metadata?.codeSnippet,
201
+ fix: useScenarioData
202
+ ? scenarioInfo.fix
203
+ : previousVersion?.metadata?.fix,
216
204
  fixSnippet: useScenarioData
217
205
  ? scenarioInfo.fixSnippet
218
- : previousVersion.metadata.fixSnippet,
206
+ : previousVersion?.metadata?.fixSnippet,
219
207
  likelihood: useScenarioData
220
208
  ? scenarioInfo.likelihood
221
- : previousVersion.metadata.likelihood,
209
+ : previousVersion?.metadata?.likelihood,
222
210
  likelihoodDescription: useScenarioData
223
211
  ? scenarioInfo.likelihoodDescription
224
- : previousVersion.metadata.likelihoodDescription,
212
+ : previousVersion?.metadata?.likelihoodDescription,
225
213
  severity: useScenarioData
226
214
  ? scenarioInfo.severity
227
- : previousVersion.metadata.severity,
215
+ : previousVersion?.metadata?.severity,
228
216
  severityDescription: useScenarioData
229
217
  ? scenarioInfo.severityDescription
230
- : previousVersion.metadata.severityDescription,
231
- dataMapping: useScenarioData
232
- ? scenarioInfo.dataMapping
233
- : previousVersion.metadata.dataMapping,
234
- keyAttributeInstructions: useScenarioData
235
- ? Object.keys(scenarioInfo.keyAttributeInstructions).reduce(
236
- (acc: any, key) => {
237
- const attributesList = keyAttributes.map(
238
- (attr) => attr.internalPath,
239
- );
240
- const matchingKey = findMatchingAttribute(
241
- key,
242
- attributesList,
243
- entity.metadata.isolatedDataStructure
244
- .equivalentSignatureVariables,
245
- );
246
- acc[matchingKey] = scenarioInfo.keyAttributeInstructions[key];
247
- return acc;
248
- },
249
- {},
250
- )
251
- : previousVersion.metadata.keyAttributeInstructions,
218
+ : previousVersion?.metadata?.severityDescription,
219
+ coveredFlows: useScenarioData
220
+ ? scenarioInfo.coveredFlows || []
221
+ : previousVersion?.metadata?.coveredFlows || [],
252
222
  playwrightInstructions: useScenarioData
253
223
  ? sanitizePlaywrightInstructions(
254
224
  scenarioInfo.playwrightInstructions || [],
255
225
  entity.name,
256
226
  scenarioInfo.name,
257
227
  )
258
- : previousVersion.metadata.playwrightInstructions,
228
+ : previousVersion?.metadata?.playwrightInstructions,
259
229
  },
260
230
  previousVersionId: previousVersion?.id,
261
231
  });
@@ -271,7 +241,6 @@ export default async function generateChangesEntityScenarios({
271
241
  function generateChangesSystemMessage(
272
242
  context?: string,
273
243
  scenarioCount?: number,
274
- _isError?: boolean,
275
244
  ): string {
276
245
  const contextSection = context
277
246
  ? `## Business Context
@@ -288,27 +257,35 @@ Focus scenario updates on demonstrating this change.${scenarioCount ? ` Generate
288
257
 
289
258
  return `You are updating data scenarios after a code change. Determine which existing scenarios need updating, which should be removed, and if new ones are needed.
290
259
 
291
- ${contextSection}## Update Rules
260
+ ${contextSection}## Your Goal: Maintain Full Execution Flow Coverage
261
+
262
+ You are given:
263
+ - \`executionFlows\`: All current distinct outcomes/behaviors this component can produce
264
+ - \`addedFlows\`: New flows that didn't exist before
265
+ - \`removedFlows\`: Flows that no longer exist
266
+ - \`existingScenarios\`: Current scenarios with their coveredFlows
267
+
268
+ **Your job**: Update scenarios to maintain coverage of ALL current execution flows.
292
269
 
293
- ### Removed Key Attributes
294
- - Update scenarios using removed attributes—replace with new attributes or remove if no longer relevant
295
- - CRITICAL: "${DEFAULT_SCENARIO_NAME}" must NEVER contain removed attributes—update or replace them
296
- - Try to maintain 3+ scenarios; create replacements if removing too many
270
+ ## Update Rules
297
271
 
298
- ### Added Key Attributes
299
- - Create or update scenarios to demonstrate new behavior
272
+ ### Removed Flows
273
+ - If an existing scenario only covers removed flows, remove the scenario
274
+ - If a scenario covers both removed and current flows, update its coveredFlows to remove the deleted ones
300
275
 
301
- ### Playwright Instructions
302
- - Validate existing instructions still work after code changes
303
- - Update any that reference changed UI elements
276
+ ### Added Flows
277
+ - Create new scenarios or update existing ones to cover new flows
278
+ - Follow the same rules as initial scenario generation:
279
+ - Blocking flows (blocksOtherFlows: true) get their own dedicated scenarios
280
+ - Non-blocking flows can be combined with compatible existing scenarios
304
281
 
305
282
  ### Unchanged Scenarios
306
- - Return name only (no other fields needed)
283
+ - Return name only (no other fields needed) if the scenario's covered flows are all still valid
307
284
 
308
285
  ### Default Scenario
309
286
  - First scenario must be "${DEFAULT_SCENARIO_NAME}" (exact name)
310
287
  - NEVER include playwrightInstructions—captures initial state only
311
- - Must include all current key attributes with valid values
288
+ - Should cover as many non-blocking, non-error flows as possible
312
289
 
313
290
  ## Response Format
314
291
 
@@ -326,27 +303,31 @@ Otherwise:
326
303
  "overview": "Added empty state scenario for new display behavior.",
327
304
  "dataScenarios": [
328
305
  { "name": "${DEFAULT_SCENARIO_NAME}" },
329
- { "name": "Many notifications" },
306
+ { "name": "Settings Modal" },
330
307
  {
331
- "name": "No notifications",
332
- "testName": "it(\\"shows empty message when no notifications\\")",
333
- "description": "User has no notifications.",
334
- "keyAttributeInstructions": {
335
- "notifications[]": { "localVariable": "notifications[]", "instruction": "Empty array" }
336
- }
308
+ "name": "Empty State",
309
+ "testName": "it(\\"shows empty message when no items\\")",
310
+ "description": "User has no items to display.",
311
+ "coveredFlows": ["empty-list"]
337
312
  }
338
313
  ]
339
314
  }
340
315
  \`\`\`
341
316
 
317
+ ## Field Descriptions
318
+
319
+ - **name**: Human-readable scenario name (letters, numbers, spaces only)
320
+ - **testName**: Jest-style test description (only for new/updated scenarios)
321
+ - **description**: What the user sees (only for new/updated scenarios)
322
+ - **coveredFlows**: Array of execution flow IDs this scenario covers (only for new/updated scenarios)
323
+ - **playwrightInstructions**: User interactions needed (only for new/updated scenarios that require interaction)
324
+
342
325
  ## Rules
343
326
  - Scenario names: letters, numbers, spaces only
344
327
  - testName: Jest style with specific expectations
345
- - Use values from \`validValueOptions\` in key attributes list
346
- - Include dependency key attributes if dependencies involved
347
- - React elements: simple only (\`<div>\`, \`<span>\`)
348
- - No external library references—plain JS/TS values
349
- - Relative dates OK: "today", "tomorrow", "last month"
328
+ - All values must be valid JSON
329
+ - EVERY execution flow must be covered by at least one scenario
330
+ - Blocking flows get dedicated scenarios
350
331
  `;
351
332
  }
352
333
 
@@ -381,27 +362,23 @@ Be conservative with high scores.
381
362
  - No external library references—mock with plain JS
382
363
  - Each scenario causes a DISTINCT error type
383
364
 
384
- Note: In JS/TS, any non-zero value satisfies a boolean check—this won't error.
385
-
386
365
  ## Response Format
387
366
  \`\`\`json
388
367
  {
389
368
  "errorDataScenarios": [
390
369
  { "name": "Existing valid error" },
391
370
  {
392
- "dataMapping": { "notifications array": "props.notifications" },
393
371
  "name": "Non-utf8 encoding error",
394
- "codeSnippet": "const encoded = encodeURIComponent(message);",
372
+ "testName": "it(\\"throws on non-utf8 characters\\")",
395
373
  "description": "encodeURIComponent throws on non-utf8 characters",
374
+ "codeSnippet": "const encoded = encodeURIComponent(message);",
396
375
  "fix": "Wrap in try/catch",
397
376
  "fixSnippet": "try { encoded = encodeURIComponent(message); } catch (e) { ... }",
398
377
  "likelihood": 7,
399
378
  "likelihoodDescription": "International users may input non-utf8 characters",
400
379
  "severity": 2,
401
380
  "severityDescription": "Function throws uncaught error",
402
- "keyAttributeInstructions": {
403
- "notifications[]": "Array with message containing non-utf8 characters"
404
- }
381
+ "coveredFlows": []
405
382
  }
406
383
  ]
407
384
  }
@@ -3,6 +3,7 @@ import isolateScopes from './isolateScopes';
3
3
  import analyzeScope from './analyzeScope';
4
4
  import { FileAnalyzer } from '~codeyam/analyze';
5
5
  import { AI, SerializableDataStructure } from '~codeyam/ai';
6
+ import { resetScopeDataStructureMetrics } from './dataStructure/ScopeDataStructure';
6
7
 
7
8
  // import { awsLog } from '~codeyam/utils';
8
9
 
@@ -17,6 +18,10 @@ export default async function generateEntityDataStructure({
17
18
  fileAnalyzer,
18
19
  model,
19
20
  }: GenerateEntityDataStructureArgs): Promise<SerializableDataStructure> {
21
+ // Reset metrics counters to prevent false "infinite loop" detection when
22
+ // processing multiple entities in the same run
23
+ resetScopeDataStructureMetrics();
24
+
20
25
  // awsLog('CodeYam: Generating entity data structure', {
21
26
  // filePath: entity.filePath,
22
27
  // entityName: entity.name,
@@ -28,6 +33,7 @@ export default async function generateEntityDataStructure({
28
33
  const fileText = fileAnalyzer.sourceFile.getFullText();
29
34
  const fileScope = isolateScopes(fileText, {
30
35
  entityNames: [entity.name],
36
+ jsxLimit: 10, // Enable gating condition extraction for child component flow merging
31
37
  });
32
38
 
33
39
  let entityScope =