@codeyam/codeyam-cli 0.1.0-staging.596f0eb → 0.1.0-staging.76566f9

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 (354) hide show
  1. package/analyzer-template/.build-info.json +7 -7
  2. package/analyzer-template/log.txt +3 -3
  3. package/analyzer-template/package.json +2 -1
  4. package/analyzer-template/packages/ai/src/lib/analyzeScope.ts +2 -0
  5. package/analyzer-template/packages/ai/src/lib/astScopes/astScopeAnalyzer.ts +22 -0
  6. package/analyzer-template/packages/ai/src/lib/astScopes/patterns/switchStatementHandler.ts +23 -1
  7. package/analyzer-template/packages/ai/src/lib/astScopes/processExpression.ts +401 -106
  8. package/analyzer-template/packages/ai/src/lib/astScopes/types.ts +60 -0
  9. package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +734 -45
  10. package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.ts +2 -1
  11. package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.ts +715 -0
  12. package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.ts +233 -75
  13. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.ts +19 -1
  14. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.ts +34 -1
  15. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.ts +23 -0
  16. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertNullToUndefinedBySchema.ts +98 -0
  17. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.ts +34 -1
  18. package/analyzer-template/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.ts +236 -24
  19. package/analyzer-template/packages/ai/src/lib/generateChangesEntityKeyAttributes.ts +18 -1
  20. package/analyzer-template/packages/ai/src/lib/generateChangesEntityScenarioData.ts +41 -0
  21. package/analyzer-template/packages/ai/src/lib/generateChangesEntityScenarios.ts +37 -4
  22. package/analyzer-template/packages/ai/src/lib/generateEntityDataStructure.ts +5 -0
  23. package/analyzer-template/packages/ai/src/lib/generateEntityKeyAttributes.ts +213 -12
  24. package/analyzer-template/packages/ai/src/lib/generateEntityScenarioData.ts +36 -25
  25. package/analyzer-template/packages/ai/src/lib/generateEntityScenarios.ts +114 -11
  26. package/analyzer-template/packages/ai/src/lib/getConditionalUsagesFromCode.ts +143 -31
  27. package/analyzer-template/packages/ai/src/lib/guessScenarioDataFromDescription.ts +8 -2
  28. package/analyzer-template/packages/ai/src/lib/promptGenerators/gatherAttributesMap.ts +7 -0
  29. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.ts +42 -2
  30. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.ts +38 -2
  31. package/analyzer-template/packages/ai/src/lib/promptGenerators/guessNewScenarioDataFromDescriptionGenerator.ts +28 -2
  32. package/analyzer-template/packages/ai/src/lib/worker/SerializableDataStructure.ts +5 -0
  33. package/analyzer-template/packages/ai/src/lib/worker/analyzeScopeWorker.ts +8 -1
  34. package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.ts +127 -43
  35. package/analyzer-template/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.ts +158 -0
  36. package/analyzer-template/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.ts +405 -45
  37. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateChangesScenarioData.ts +1 -1
  38. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +260 -133
  39. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.ts +10 -5
  40. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateScenarioData.ts +77 -83
  41. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateScenarios.ts +2 -5
  42. package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +196 -86
  43. package/analyzer-template/packages/aws/dist/src/lib/s3/checkS3ObjectExists.d.ts +15 -0
  44. package/analyzer-template/packages/aws/dist/src/lib/s3/checkS3ObjectExists.d.ts.map +1 -0
  45. package/analyzer-template/packages/aws/dist/src/lib/s3/checkS3ObjectExists.js +31 -0
  46. package/analyzer-template/packages/aws/dist/src/lib/s3/checkS3ObjectExists.js.map +1 -0
  47. package/analyzer-template/packages/aws/package.json +1 -1
  48. package/analyzer-template/packages/aws/s3/index.ts +1 -0
  49. package/analyzer-template/packages/aws/src/lib/s3/checkS3ObjectExists.ts +47 -0
  50. package/analyzer-template/packages/database/src/lib/kysely/db.ts +4 -4
  51. package/analyzer-template/packages/database/src/lib/kysely/tableRelations.ts +2 -2
  52. package/analyzer-template/packages/database/src/lib/kysely/tables/debugReportsTable.ts +20 -9
  53. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.ts +9 -4
  54. package/analyzer-template/packages/generate/src/lib/deepMerge.ts +26 -1
  55. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts +2 -2
  56. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js +2 -2
  57. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tableRelations.d.ts +2 -2
  58. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/analysesTable.d.ts +8 -1
  59. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/analysesTable.d.ts.map +1 -1
  60. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.d.ts +14 -7
  61. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.d.ts.map +1 -1
  62. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.js +9 -3
  63. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.js.map +1 -1
  64. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts +1 -1
  65. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts.map +1 -1
  66. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.d.ts.map +1 -1
  67. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +8 -4
  68. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
  69. package/analyzer-template/packages/github/dist/generate/src/lib/deepMerge.d.ts.map +1 -1
  70. package/analyzer-template/packages/github/dist/generate/src/lib/deepMerge.js +27 -1
  71. package/analyzer-template/packages/github/dist/generate/src/lib/deepMerge.js.map +1 -1
  72. package/analyzer-template/packages/github/dist/types/index.d.ts +4 -3
  73. package/analyzer-template/packages/github/dist/types/index.d.ts.map +1 -1
  74. package/analyzer-template/packages/github/dist/types/index.js +1 -0
  75. package/analyzer-template/packages/github/dist/types/index.js.map +1 -1
  76. package/analyzer-template/packages/github/dist/types/src/types/Analysis.d.ts +31 -1
  77. package/analyzer-template/packages/github/dist/types/src/types/Analysis.d.ts.map +1 -1
  78. package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts +51 -1
  79. package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts.map +1 -1
  80. package/analyzer-template/packages/github/dist/types/src/types/Scenario.js +21 -1
  81. package/analyzer-template/packages/github/dist/types/src/types/Scenario.js.map +1 -1
  82. package/analyzer-template/packages/github/dist/types/src/types/ScenariosDataStructure.d.ts +48 -0
  83. package/analyzer-template/packages/github/dist/types/src/types/ScenariosDataStructure.d.ts.map +1 -1
  84. package/analyzer-template/packages/github/dist/utils/src/lib/lightweightEntityExtractor.d.ts.map +1 -1
  85. package/analyzer-template/packages/github/dist/utils/src/lib/lightweightEntityExtractor.js +25 -0
  86. package/analyzer-template/packages/github/dist/utils/src/lib/lightweightEntityExtractor.js.map +1 -1
  87. package/analyzer-template/packages/types/index.ts +8 -0
  88. package/analyzer-template/packages/types/src/types/Analysis.ts +32 -1
  89. package/analyzer-template/packages/types/src/types/Scenario.ts +75 -6
  90. package/analyzer-template/packages/types/src/types/ScenariosDataStructure.ts +49 -0
  91. package/analyzer-template/packages/ui-components/src/components/ScenarioDetailInteractiveView.tsx +23 -7
  92. package/analyzer-template/packages/utils/dist/types/index.d.ts +4 -3
  93. package/analyzer-template/packages/utils/dist/types/index.d.ts.map +1 -1
  94. package/analyzer-template/packages/utils/dist/types/index.js +1 -0
  95. package/analyzer-template/packages/utils/dist/types/index.js.map +1 -1
  96. package/analyzer-template/packages/utils/dist/types/src/types/Analysis.d.ts +31 -1
  97. package/analyzer-template/packages/utils/dist/types/src/types/Analysis.d.ts.map +1 -1
  98. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts +51 -1
  99. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts.map +1 -1
  100. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.js +21 -1
  101. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.js.map +1 -1
  102. package/analyzer-template/packages/utils/dist/types/src/types/ScenariosDataStructure.d.ts +48 -0
  103. package/analyzer-template/packages/utils/dist/types/src/types/ScenariosDataStructure.d.ts.map +1 -1
  104. package/analyzer-template/packages/utils/dist/utils/src/lib/lightweightEntityExtractor.d.ts.map +1 -1
  105. package/analyzer-template/packages/utils/dist/utils/src/lib/lightweightEntityExtractor.js +25 -0
  106. package/analyzer-template/packages/utils/dist/utils/src/lib/lightweightEntityExtractor.js.map +1 -1
  107. package/analyzer-template/packages/utils/src/lib/lightweightEntityExtractor.ts +27 -0
  108. package/analyzer-template/playwright/takeElementScreenshot.ts +26 -11
  109. package/analyzer-template/playwright/takeScreenshot.ts +9 -7
  110. package/analyzer-template/project/constructMockCode.ts +286 -84
  111. package/analyzer-template/project/orchestrateCapture/SequentialCaptureTaskRunner.ts +77 -37
  112. package/analyzer-template/project/reconcileMockDataKeys.ts +5 -2
  113. package/analyzer-template/project/runMultiScenarioServer.ts +11 -10
  114. package/analyzer-template/project/serverOnlyModules.ts +71 -23
  115. package/analyzer-template/project/start.ts +10 -0
  116. package/analyzer-template/project/startScenarioCapture.ts +73 -41
  117. package/analyzer-template/project/writeMockDataTsx.ts +115 -54
  118. package/analyzer-template/project/writeScenarioComponents.ts +571 -162
  119. package/analyzer-template/project/writeSimpleRoot.ts +11 -13
  120. package/background/src/lib/virtualized/project/constructMockCode.js +265 -75
  121. package/background/src/lib/virtualized/project/constructMockCode.js.map +1 -1
  122. package/background/src/lib/virtualized/project/orchestrateCapture/SequentialCaptureTaskRunner.js +67 -32
  123. package/background/src/lib/virtualized/project/orchestrateCapture/SequentialCaptureTaskRunner.js.map +1 -1
  124. package/background/src/lib/virtualized/project/reconcileMockDataKeys.js +5 -2
  125. package/background/src/lib/virtualized/project/reconcileMockDataKeys.js.map +1 -1
  126. package/background/src/lib/virtualized/project/runMultiScenarioServer.js +11 -9
  127. package/background/src/lib/virtualized/project/runMultiScenarioServer.js.map +1 -1
  128. package/background/src/lib/virtualized/project/serverOnlyModules.js +62 -25
  129. package/background/src/lib/virtualized/project/serverOnlyModules.js.map +1 -1
  130. package/background/src/lib/virtualized/project/start.js +6 -0
  131. package/background/src/lib/virtualized/project/start.js.map +1 -1
  132. package/background/src/lib/virtualized/project/startScenarioCapture.js +54 -31
  133. package/background/src/lib/virtualized/project/startScenarioCapture.js.map +1 -1
  134. package/background/src/lib/virtualized/project/writeMockDataTsx.js +106 -46
  135. package/background/src/lib/virtualized/project/writeMockDataTsx.js.map +1 -1
  136. package/background/src/lib/virtualized/project/writeScenarioComponents.js +399 -106
  137. package/background/src/lib/virtualized/project/writeScenarioComponents.js.map +1 -1
  138. package/background/src/lib/virtualized/project/writeSimpleRoot.js +11 -11
  139. package/background/src/lib/virtualized/project/writeSimpleRoot.js.map +1 -1
  140. package/codeyam-cli/src/cli.js +2 -0
  141. package/codeyam-cli/src/cli.js.map +1 -1
  142. package/codeyam-cli/src/commands/debug.js +14 -2
  143. package/codeyam-cli/src/commands/debug.js.map +1 -1
  144. package/codeyam-cli/src/commands/recapture.js +215 -0
  145. package/codeyam-cli/src/commands/recapture.js.map +1 -0
  146. package/codeyam-cli/src/commands/report.js +26 -23
  147. package/codeyam-cli/src/commands/report.js.map +1 -1
  148. package/codeyam-cli/src/utils/backgroundServer.js +2 -2
  149. package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
  150. package/codeyam-cli/src/utils/generateReport.js +252 -106
  151. package/codeyam-cli/src/utils/generateReport.js.map +1 -1
  152. package/codeyam-cli/src/utils/install-skills.js +2 -2
  153. package/codeyam-cli/src/utils/install-skills.js.map +1 -1
  154. package/codeyam-cli/src/utils/queue/__tests__/manager.test.js +38 -0
  155. package/codeyam-cli/src/utils/queue/__tests__/manager.test.js.map +1 -1
  156. package/codeyam-cli/src/utils/queue/job.js +140 -16
  157. package/codeyam-cli/src/utils/queue/job.js.map +1 -1
  158. package/codeyam-cli/src/utils/queue/manager.js +19 -7
  159. package/codeyam-cli/src/utils/queue/manager.js.map +1 -1
  160. package/codeyam-cli/src/utils/queue/persistence.js.map +1 -1
  161. package/codeyam-cli/src/webserver/app/lib/database.js +47 -0
  162. package/codeyam-cli/src/webserver/app/lib/database.js.map +1 -1
  163. package/codeyam-cli/src/webserver/app/lib/dbNotifier.js.map +1 -1
  164. package/codeyam-cli/src/webserver/backgroundServer.js +5 -10
  165. package/codeyam-cli/src/webserver/backgroundServer.js.map +1 -1
  166. package/codeyam-cli/src/webserver/bootstrap.js +9 -0
  167. package/codeyam-cli/src/webserver/bootstrap.js.map +1 -0
  168. package/codeyam-cli/src/webserver/build/client/assets/EntityItem-wXL1Z2Aq.js +1 -0
  169. package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeBadge-efWKDYMr.js → EntityTypeBadge-CzGX-miz.js} +1 -1
  170. package/codeyam-cli/src/webserver/build/client/assets/EntityTypeIcon-CXFKsCOD.js +41 -0
  171. package/codeyam-cli/src/webserver/build/client/assets/InteractivePreview-D-9pXIaY.js +25 -0
  172. package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-CBQPrpT0.js +3 -0
  173. package/codeyam-cli/src/webserver/build/client/assets/LoadingDots-D1CdlbrV.js +6 -0
  174. package/codeyam-cli/src/webserver/build/client/assets/LogViewer-wDPcZNKx.js +3 -0
  175. package/codeyam-cli/src/webserver/build/client/assets/ReportIssueModal-4lcOlid-.js +11 -0
  176. package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-BfmDgXxG.js +1 -0
  177. package/codeyam-cli/src/webserver/build/client/assets/ScenarioViewer-CUxUNEEC.js +15 -0
  178. package/codeyam-cli/src/webserver/build/client/assets/{TruncatedFilePath-COPstp9J.js → TruncatedFilePath-6J7zDUD5.js} +1 -1
  179. package/codeyam-cli/src/webserver/build/client/assets/_index-DHImXdXq.js +11 -0
  180. package/codeyam-cli/src/webserver/build/client/assets/activity.(_tab)-CVP_WGQ3.js +32 -0
  181. package/codeyam-cli/src/webserver/build/client/assets/api.link-scenario-value-l0sNRNKZ.js +1 -0
  182. package/codeyam-cli/src/webserver/build/client/assets/api.update-key-attributes-l0sNRNKZ.js +1 -0
  183. package/codeyam-cli/src/webserver/build/client/assets/api.update-valid-values-l0sNRNKZ.js +1 -0
  184. package/codeyam-cli/src/webserver/build/client/assets/chevron-down-BYimnrHg.js +6 -0
  185. package/codeyam-cli/src/webserver/build/client/assets/chunk-JMJ3UQ3L-BambyYE_.js +51 -0
  186. package/codeyam-cli/src/webserver/build/client/assets/circle-check-CaVsIRxt.js +6 -0
  187. package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-CgUsG7ib.js +21 -0
  188. package/codeyam-cli/src/webserver/build/client/assets/cy-logo-cli-CKnwPCDr.js +1 -0
  189. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-DW_hdGUc.js +1 -0
  190. package/codeyam-cli/src/webserver/build/client/assets/entity._sha._-Dt-SjPsw.js +23 -0
  191. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-DyB90fWk.js +1 -0
  192. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-D_3ero5o.js +1 -0
  193. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.edit._scenarioId-CfLCUi9S.js +5 -0
  194. package/codeyam-cli/src/webserver/build/client/assets/entry.client-DKJyZfAY.js +29 -0
  195. package/codeyam-cli/src/webserver/build/client/assets/fileTableUtils-DAtOlaWE.js +1 -0
  196. package/codeyam-cli/src/webserver/build/client/assets/files-ClR0d32A.js +1 -0
  197. package/codeyam-cli/src/webserver/build/client/assets/git-D62Lxxmv.js +15 -0
  198. package/codeyam-cli/src/webserver/build/client/assets/globals-C9s7Lhdl.css +1 -0
  199. package/codeyam-cli/src/webserver/build/client/assets/html2canvas-pro.esm-fmIEn3Bc.js +9 -0
  200. package/codeyam-cli/src/webserver/build/client/assets/index-BosqDOlH.js +3 -0
  201. package/codeyam-cli/src/webserver/build/client/assets/index-CzNNiTkw.js +9 -0
  202. package/codeyam-cli/src/webserver/build/client/assets/keyAttributeCoverage-CTlFMihX.js +1 -0
  203. package/codeyam-cli/src/webserver/build/client/assets/loader-circle-CNp9QFCX.js +6 -0
  204. package/codeyam-cli/src/webserver/build/client/assets/manifest-0d27da29.js +1 -0
  205. package/codeyam-cli/src/webserver/build/client/assets/preload-helper-ckwbz45p.js +1 -0
  206. package/codeyam-cli/src/webserver/build/client/assets/root-B_wIKCIf.js +56 -0
  207. package/codeyam-cli/src/webserver/build/client/assets/scenarioStatus-B_8jpV3e.js +1 -0
  208. package/codeyam-cli/src/webserver/build/client/assets/search-DDGjYAMJ.js +6 -0
  209. package/codeyam-cli/src/webserver/build/client/assets/settings-DgTyB-Wg.js +1 -0
  210. package/codeyam-cli/src/webserver/build/client/assets/simulations-CoNWGt0K.js +1 -0
  211. package/codeyam-cli/src/webserver/build/client/assets/triangle-alert-CBc5dE1s.js +6 -0
  212. package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-BMIGFP-m.js +1 -0
  213. package/codeyam-cli/src/webserver/build/client/assets/useInteractiveMode-Dk_FQqWJ.js +1 -0
  214. package/codeyam-cli/src/webserver/build/client/assets/{useLastLogLine-3pmpUQB-.js → useLastLogLine-BqPPNjAl.js} +1 -1
  215. package/codeyam-cli/src/webserver/build/client/assets/useReportContext-DsJbgMY9.js +1 -0
  216. package/codeyam-cli/src/webserver/build/client/assets/{useToast-DEyawJ8r.js → useToast-DWHcCcl1.js} +1 -1
  217. package/codeyam-cli/src/webserver/build/server/assets/index-CU58-Ttc.js +1 -0
  218. package/codeyam-cli/src/webserver/build/server/assets/server-build-D35o2uae.js +175 -0
  219. package/codeyam-cli/src/webserver/build/server/index.js +1 -1
  220. package/codeyam-cli/src/webserver/build-info.json +5 -5
  221. package/codeyam-cli/src/webserver/devServer.js +1 -3
  222. package/codeyam-cli/src/webserver/devServer.js.map +1 -1
  223. package/codeyam-cli/templates/codeyam-setup-skill.md +138 -3
  224. package/codeyam-cli/templates/debug-codeyam.md +625 -0
  225. package/package.json +14 -14
  226. package/packages/ai/src/lib/analyzeScope.js +2 -0
  227. package/packages/ai/src/lib/analyzeScope.js.map +1 -1
  228. package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js +16 -0
  229. package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js.map +1 -1
  230. package/packages/ai/src/lib/astScopes/patterns/switchStatementHandler.js +16 -0
  231. package/packages/ai/src/lib/astScopes/patterns/switchStatementHandler.js.map +1 -1
  232. package/packages/ai/src/lib/astScopes/processExpression.js +305 -88
  233. package/packages/ai/src/lib/astScopes/processExpression.js.map +1 -1
  234. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +582 -41
  235. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
  236. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.js +2 -1
  237. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.js.map +1 -1
  238. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.js +454 -0
  239. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.js.map +1 -0
  240. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.js +173 -55
  241. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.js.map +1 -1
  242. package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js +16 -1
  243. package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js.map +1 -1
  244. package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js +30 -1
  245. package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js.map +1 -1
  246. package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js +20 -0
  247. package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js.map +1 -1
  248. package/packages/ai/src/lib/dataStructure/helpers/convertNullToUndefinedBySchema.js +86 -0
  249. package/packages/ai/src/lib/dataStructure/helpers/convertNullToUndefinedBySchema.js.map +1 -0
  250. package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js +28 -2
  251. package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js.map +1 -1
  252. package/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.js +179 -17
  253. package/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.js.map +1 -1
  254. package/packages/ai/src/lib/generateChangesEntityKeyAttributes.js +6 -0
  255. package/packages/ai/src/lib/generateChangesEntityKeyAttributes.js.map +1 -1
  256. package/packages/ai/src/lib/generateChangesEntityScenarioData.js +41 -0
  257. package/packages/ai/src/lib/generateChangesEntityScenarioData.js.map +1 -1
  258. package/packages/ai/src/lib/generateChangesEntityScenarios.js +37 -4
  259. package/packages/ai/src/lib/generateChangesEntityScenarios.js.map +1 -1
  260. package/packages/ai/src/lib/generateEntityDataStructure.js +4 -0
  261. package/packages/ai/src/lib/generateEntityDataStructure.js.map +1 -1
  262. package/packages/ai/src/lib/generateEntityKeyAttributes.js +176 -9
  263. package/packages/ai/src/lib/generateEntityKeyAttributes.js.map +1 -1
  264. package/packages/ai/src/lib/generateEntityScenarioData.js +29 -25
  265. package/packages/ai/src/lib/generateEntityScenarioData.js.map +1 -1
  266. package/packages/ai/src/lib/generateEntityScenarios.js +105 -9
  267. package/packages/ai/src/lib/generateEntityScenarios.js.map +1 -1
  268. package/packages/ai/src/lib/getConditionalUsagesFromCode.js +84 -14
  269. package/packages/ai/src/lib/getConditionalUsagesFromCode.js.map +1 -1
  270. package/packages/ai/src/lib/guessScenarioDataFromDescription.js +2 -1
  271. package/packages/ai/src/lib/guessScenarioDataFromDescription.js.map +1 -1
  272. package/packages/ai/src/lib/promptGenerators/gatherAttributesMap.js +6 -0
  273. package/packages/ai/src/lib/promptGenerators/gatherAttributesMap.js.map +1 -1
  274. package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.js +38 -2
  275. package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.js.map +1 -1
  276. package/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.js +38 -2
  277. package/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.js.map +1 -1
  278. package/packages/ai/src/lib/promptGenerators/guessNewScenarioDataFromDescriptionGenerator.js +16 -3
  279. package/packages/ai/src/lib/promptGenerators/guessNewScenarioDataFromDescriptionGenerator.js.map +1 -1
  280. package/packages/ai/src/lib/worker/SerializableDataStructure.js.map +1 -1
  281. package/packages/ai/src/lib/worker/analyzeScopeWorker.js +4 -0
  282. package/packages/ai/src/lib/worker/analyzeScopeWorker.js.map +1 -1
  283. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js +100 -23
  284. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js.map +1 -1
  285. package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js +125 -0
  286. package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js.map +1 -0
  287. package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js +298 -45
  288. package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js.map +1 -1
  289. package/packages/analyze/src/lib/files/scenarios/generateChangesScenarioData.js +1 -1
  290. package/packages/analyze/src/lib/files/scenarios/generateChangesScenarioData.js.map +1 -1
  291. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +201 -80
  292. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
  293. package/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.js +10 -5
  294. package/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.js.map +1 -1
  295. package/packages/analyze/src/lib/files/scenarios/generateScenarioData.js +55 -69
  296. package/packages/analyze/src/lib/files/scenarios/generateScenarioData.js.map +1 -1
  297. package/packages/analyze/src/lib/files/scenarios/generateScenarios.js +2 -5
  298. package/packages/analyze/src/lib/files/scenarios/generateScenarios.js.map +1 -1
  299. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +171 -81
  300. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js.map +1 -1
  301. package/packages/database/src/lib/kysely/db.js +2 -2
  302. package/packages/database/src/lib/kysely/tables/debugReportsTable.js +9 -3
  303. package/packages/database/src/lib/kysely/tables/debugReportsTable.js.map +1 -1
  304. package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +8 -4
  305. package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
  306. package/packages/generate/src/lib/deepMerge.js +27 -1
  307. package/packages/generate/src/lib/deepMerge.js.map +1 -1
  308. package/packages/types/index.js +1 -0
  309. package/packages/types/index.js.map +1 -1
  310. package/packages/types/src/types/Scenario.js +21 -1
  311. package/packages/types/src/types/Scenario.js.map +1 -1
  312. package/packages/utils/src/lib/lightweightEntityExtractor.js +25 -0
  313. package/packages/utils/src/lib/lightweightEntityExtractor.js.map +1 -1
  314. package/scripts/finalize-analyzer.cjs +3 -1
  315. package/codeyam-cli/scripts/fixtures/cal.com/universal-mocks/packages/prisma/index.js +0 -238
  316. package/codeyam-cli/scripts/fixtures/cal.com/universal-mocks/packages/prisma/index.js.map +0 -1
  317. package/codeyam-cli/src/webserver/build/client/assets/EntityItem-CVbSvOjo.js +0 -1
  318. package/codeyam-cli/src/webserver/build/client/assets/EntityTypeIcon-DcwcHyl5.js +0 -1
  319. package/codeyam-cli/src/webserver/build/client/assets/InteractivePreview-WgwC1GfJ.js +0 -26
  320. package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-IEKom9O2.js +0 -3
  321. package/codeyam-cli/src/webserver/build/client/assets/LogViewer-BYnfxbUG.js +0 -3
  322. package/codeyam-cli/src/webserver/build/client/assets/ReportIssueModal-_lBPJCzG.js +0 -1
  323. package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-lHVhvsu_.js +0 -1
  324. package/codeyam-cli/src/webserver/build/client/assets/ScenarioViewer-d_TBk4GQ.js +0 -5
  325. package/codeyam-cli/src/webserver/build/client/assets/_index-kGT7VUqj.js +0 -1
  326. package/codeyam-cli/src/webserver/build/client/assets/activity.(_tab)-DDGmhu7P.js +0 -7
  327. package/codeyam-cli/src/webserver/build/client/assets/chevron-down-n_HPRfM_.js +0 -1
  328. package/codeyam-cli/src/webserver/build/client/assets/chunk-WWGJGFF6-CbVoyx1U.js +0 -26
  329. package/codeyam-cli/src/webserver/build/client/assets/circle-check-D1VOYveA.js +0 -1
  330. package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-YR8jjAlu.js +0 -1
  331. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-B8vP3V_s.js +0 -1
  332. package/codeyam-cli/src/webserver/build/client/assets/entity._sha._-CN6aLCT1.js +0 -16
  333. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-DA5Jeu2P.js +0 -1
  334. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.edit._scenarioId-BTeitalf.js +0 -5
  335. package/codeyam-cli/src/webserver/build/client/assets/entry.client-du6UEYD-.js +0 -13
  336. package/codeyam-cli/src/webserver/build/client/assets/fileTableUtils-BpjkhMoi.js +0 -1
  337. package/codeyam-cli/src/webserver/build/client/assets/files-BQGvk4lJ.js +0 -1
  338. package/codeyam-cli/src/webserver/build/client/assets/git-DVdYRT-I.js +0 -12
  339. package/codeyam-cli/src/webserver/build/client/assets/globals-CO-U8Bpo.css +0 -1
  340. package/codeyam-cli/src/webserver/build/client/assets/html2canvas-pro.esm-XQCGvadH.js +0 -5
  341. package/codeyam-cli/src/webserver/build/client/assets/index-DCG-vks0.js +0 -1
  342. package/codeyam-cli/src/webserver/build/client/assets/loader-circle-GazdNeLl.js +0 -1
  343. package/codeyam-cli/src/webserver/build/client/assets/manifest-0b694d28.js +0 -1
  344. package/codeyam-cli/src/webserver/build/client/assets/root-D3tQP7hx.js +0 -16
  345. package/codeyam-cli/src/webserver/build/client/assets/search-CIY6XmtE.js +0 -1
  346. package/codeyam-cli/src/webserver/build/client/assets/server-build-CMKNK2uU.css +0 -1
  347. package/codeyam-cli/src/webserver/build/client/assets/settings-CoMDgElu.js +0 -1
  348. package/codeyam-cli/src/webserver/build/client/assets/simulations-agkniXp2.js +0 -1
  349. package/codeyam-cli/src/webserver/build/client/assets/triangle-alert-B2VUcygF.js +0 -1
  350. package/codeyam-cli/src/webserver/build/client/assets/useReportContext-EvdK-zXP.js +0 -1
  351. package/codeyam-cli/src/webserver/build/server/assets/index-DGVHQEXD.js +0 -1
  352. package/codeyam-cli/src/webserver/build/server/assets/server-build-CghkTkIL.js +0 -166
  353. package/codeyam-cli/templates/debug-command.md +0 -303
  354. /package/codeyam-cli/src/webserver/build/client/assets/{InteractivePreview-CMKNK2uU.css → styles-CMKNK2uU.css} +0 -0
@@ -82,37 +82,178 @@ export default function gatherRelevantDependentKeyAttributes(
82
82
  const signatureSchema = dependencySchema?.signatureSchema;
83
83
  if (!signatureSchema) return;
84
84
 
85
- const sourceEquivalencies = dependencySchema?.sourceEquivalencies ?? {};
85
+ // Get sourceEquivalencies from the dependent analysis's mergedDataStructure,
86
+ // not from dependencySchemas (which doesn't store them)
87
+ const sourceEquivalencies =
88
+ dependentAnalysis?.metadata?.mergedDataStructure?.sourceEquivalencies ??
89
+ {};
90
+
91
+ // Build a fallback mapping from parent's usageEquivalencies
92
+ // This helps when the child's sourceEquivalencies don't have a mapping
93
+ // For example, if parent passes `entity` to child's `signature[0]`,
94
+ // usageEquivalencies might have: entity -> [{schemaPath: 'signature[0]', scopeNodeName: entityName}]
95
+ const usageEquivalencies = mergedDataStructure?.usageEquivalencies ?? {};
96
+ const signatureToParentPath: Record<string, string> = {};
97
+
98
+ for (const parentPath in usageEquivalencies) {
99
+ const usages = usageEquivalencies[parentPath];
100
+ for (const usage of usages) {
101
+ if (usage.scopeNodeName !== entityName) continue;
102
+
103
+ // Extract signature path from schemaPath
104
+ // Format can be:
105
+ // 1. "functionName(args).signature[N]" or "functionName(args).signature[N].property" (real data)
106
+ // 2. "signature[N]" or "signature[N].property" (simplified/test format)
107
+ let signaturePath: string;
108
+ const signatureIndex = usage.schemaPath.indexOf('.signature[');
109
+ if (signatureIndex !== -1) {
110
+ // Full format: extract "signature[N]" or "signature[N].property" after the dot
111
+ signaturePath = usage.schemaPath.slice(signatureIndex + 1);
112
+ } else if (usage.schemaPath.startsWith('signature[')) {
113
+ // Simplified format: already starts with signature[
114
+ signaturePath = usage.schemaPath;
115
+ } else {
116
+ continue;
117
+ }
118
+
119
+ // Map child's signature path to parent's path
120
+ // e.g., 'signature[0]' -> 'entity'
121
+ signatureToParentPath[signaturePath] = parentPath;
122
+ }
123
+ }
86
124
 
87
125
  // If sourceEquivalencies is empty but the child has mocked imports,
88
- // propagate key attributes directly since they affect the parent's visual output
126
+ // only propagate key attributes that come from mocked data sources
127
+ // (not props that the parent passes to the child)
89
128
  if (Object.keys(sourceEquivalencies).length === 0) {
90
- // Check both importedExports and nodeModuleImports for mocked imports
129
+ // Collect names of mocked imports
91
130
  const importedExports =
92
131
  dependentAnalysis.entity?.metadata?.importedExports ?? [];
93
132
  const nodeModuleImports =
94
133
  dependentAnalysis.entity?.metadata?.nodeModuleImports ?? {};
95
134
 
96
- const hasMockedImportedExports = importedExports.some(
97
- (imp: { isMocked?: boolean }) => imp.isMocked,
98
- );
99
- const hasMockedNodeModuleImports = Object.values(
100
- nodeModuleImports,
101
- ).some((imports: any[]) =>
102
- imports?.some((imp: { isMocked?: boolean }) => imp.isMocked),
103
- );
135
+ const mockedImportNames = new Set<string>();
104
136
 
105
- const childHasMockedImports =
106
- hasMockedImportedExports || hasMockedNodeModuleImports;
137
+ // Collect mocked names from importedExports
138
+ for (const imp of importedExports) {
139
+ if ((imp as { isMocked?: boolean }).isMocked) {
140
+ mockedImportNames.add((imp as { name: string }).name);
141
+ }
142
+ }
107
143
 
108
- if (childHasMockedImports) {
144
+ // Collect mocked names from nodeModuleImports
145
+ for (const imports of Object.values(nodeModuleImports)) {
146
+ for (const imp of imports as any[]) {
147
+ if ((imp as { isMocked?: boolean }).isMocked) {
148
+ mockedImportNames.add((imp as { name: string }).name);
149
+ }
150
+ }
151
+ }
152
+
153
+ if (mockedImportNames.size > 0) {
109
154
  for (const dependentKeyAttribute of dependentKeyAtttributes) {
110
- relevantDependentKeyAttributes.push({
111
- ...dependentKeyAttribute,
112
- dependentEntityName: entityName,
113
- originalEntityName: entityName,
114
- filePath: path,
115
- } as any);
155
+ // Include key attributes that come from controllable data sources:
156
+ // 1. Mocked data sources (like getScenarioDisplayState())
157
+ // 2. Arguments/props passed to the child (signature[N].*)
158
+ // Exclude attributes that are clearly just the prop name itself (like "size")
159
+ const externalPath = dependentKeyAttribute.externalPath || '';
160
+ const dataStructurePath =
161
+ dependentKeyAttribute.dataStructurePath || '';
162
+
163
+ const comesFromMockedSource = Array.from(mockedImportNames).some(
164
+ (mockedName) =>
165
+ externalPath.includes(`${mockedName}(`) ||
166
+ externalPath.includes(`${mockedName}.`) ||
167
+ dataStructurePath.includes(`${mockedName}(`) ||
168
+ dataStructurePath.includes(`${mockedName}.`) ||
169
+ dataStructurePath.startsWith(mockedName),
170
+ );
171
+
172
+ // Check if it comes from an argument (signature[N].something.deeper)
173
+ // but not just a simple prop like "size" or "isOutdated"
174
+ const comesFromArgument =
175
+ externalPath.startsWith('signature[') &&
176
+ // Must have nested path (at least one dot after the prop name)
177
+ // e.g., signature[0].scenario.metadata.* is OK
178
+ // but signature[0].size is not (it's just a simple prop)
179
+ (externalPath.match(/\./g) || []).length >= 2;
180
+
181
+ if (comesFromMockedSource || comesFromArgument) {
182
+ relevantDependentKeyAttributes.push({
183
+ ...dependentKeyAttribute,
184
+ dependentEntityName: entityName,
185
+ originalEntityName: entityName,
186
+ filePath: path,
187
+ } as any);
188
+ }
189
+ }
190
+ return;
191
+ }
192
+
193
+ // No mocked imports, try usageEquivalencies fallback for direct argument usage
194
+ if (Object.keys(signatureToParentPath).length > 0) {
195
+ for (const dependentKeyAttribute of dependentKeyAtttributes) {
196
+ if (!dependentKeyAttribute.externalPath?.startsWith('signature['))
197
+ continue;
198
+
199
+ const dependentKeyAttributeExternalPathParts =
200
+ splitOutsideParenthesesAndArrays(
201
+ dependentKeyAttribute.externalPath,
202
+ );
203
+
204
+ // Try to find a matching signature path
205
+ for (
206
+ let i = dependentKeyAttributeExternalPathParts.length;
207
+ i > 0;
208
+ i--
209
+ ) {
210
+ const subExternalPath = joinParenthesesAndArrays(
211
+ dependentKeyAttributeExternalPathParts.slice(0, i),
212
+ );
213
+
214
+ if (signatureToParentPath[subExternalPath]) {
215
+ const parentPath = signatureToParentPath[subExternalPath];
216
+
217
+ // parentPath is already in parent's schema format (e.g., "signature[0].entity" or just "entity")
218
+ // We need to handle both cases
219
+ const parentPathStartsWithSignature =
220
+ parentPath.startsWith('signature[');
221
+ let externalPath = parentPathStartsWithSignature
222
+ ? parentPath
223
+ : `signature[0].${parentPath}`;
224
+
225
+ // internalPath is parentPath without the signature[N]. prefix
226
+ let internalPath: string | undefined =
227
+ parentPathStartsWithSignature
228
+ ? parentPath.replace(/^signature\[\d+\]\./, '')
229
+ : parentPath;
230
+
231
+ if (i < dependentKeyAttributeExternalPathParts.length) {
232
+ const remainingPath = joinParenthesesAndArrays(
233
+ dependentKeyAttributeExternalPathParts.slice(i),
234
+ );
235
+ externalPath = `${externalPath}.${remainingPath}`;
236
+ internalPath = `${internalPath}.${remainingPath}`;
237
+ }
238
+
239
+ // Look up in associationMap for proper internal path
240
+ if (associationMap[externalPath]) {
241
+ internalPath = associationMap[externalPath];
242
+ }
243
+
244
+ relevantDependentKeyAttributes.push({
245
+ ...dependentKeyAttribute,
246
+ dependentEntityName: entityName,
247
+ originalEntityName: entityName,
248
+ filePath: path,
249
+ internalPath,
250
+ externalPath,
251
+ dataStructurePath: internalPath,
252
+ } as any);
253
+
254
+ break;
255
+ }
256
+ }
116
257
  }
117
258
  }
118
259
  return;
@@ -123,6 +264,8 @@ export default function gatherRelevantDependentKeyAttributes(
123
264
  splitOutsideParenthesesAndArrays(dependentKeyAttribute.externalPath);
124
265
 
125
266
  let matchFound = false;
267
+
268
+ // First, try to match using child's sourceEquivalencies
126
269
  for (
127
270
  let i = dependentKeyAttributeExternalPathParts.length;
128
271
  i > 0;
@@ -132,8 +275,8 @@ export default function gatherRelevantDependentKeyAttributes(
132
275
  dependentKeyAttributeExternalPathParts.slice(0, i),
133
276
  );
134
277
 
135
- for (const sourceEquivalencyPath in dependencySchema?.sourceEquivalencies ??
136
- {}) {
278
+ // Use the sourceEquivalencies from the child's analysis
279
+ for (const sourceEquivalencyPath in sourceEquivalencies) {
137
280
  const sourceEquivalencyPathParts = splitOutsideParenthesesAndArrays(
138
281
  sourceEquivalencyPath,
139
282
  );
@@ -145,8 +288,7 @@ export default function gatherRelevantDependentKeyAttributes(
145
288
  if (relevantSourceEquivalencyPath !== subExternalPath) continue;
146
289
 
147
290
  const sourcePath =
148
- dependencySchema?.sourceEquivalencies[sourceEquivalencyPath][0]
149
- ?.schemaPath;
291
+ sourceEquivalencies[sourceEquivalencyPath][0]?.schemaPath;
150
292
 
151
293
  if (!sourcePath) continue;
152
294
 
@@ -181,6 +323,8 @@ export default function gatherRelevantDependentKeyAttributes(
181
323
  filePath: path, // File path for restructuring into nested format
182
324
  internalPath,
183
325
  externalPath,
326
+ // Transform dataStructurePath to parent's path structure
327
+ dataStructurePath: internalPath,
184
328
  } as any);
185
329
 
186
330
  matchFound = true;
@@ -189,6 +333,74 @@ export default function gatherRelevantDependentKeyAttributes(
189
333
 
190
334
  if (matchFound) break;
191
335
  }
336
+
337
+ // Fallback: if no sourceEquivalency match, try using parent's usageEquivalencies
338
+ // This handles direct argument usage like entity.entityType
339
+ if (
340
+ !matchFound &&
341
+ dependentKeyAttribute.externalPath?.startsWith('signature[')
342
+ ) {
343
+ // Try to find a matching signature path in the usageEquivalencies-derived map
344
+ for (
345
+ let i = dependentKeyAttributeExternalPathParts.length;
346
+ i > 0;
347
+ i--
348
+ ) {
349
+ const subExternalPath = joinParenthesesAndArrays(
350
+ dependentKeyAttributeExternalPathParts.slice(0, i),
351
+ );
352
+
353
+ if (signatureToParentPath[subExternalPath]) {
354
+ const parentPath = signatureToParentPath[subExternalPath];
355
+
356
+ // parentPath is already in parent's schema format (e.g., "signature[0].entity" or just "entity")
357
+ // We need to handle both cases
358
+ const parentPathStartsWithSignature =
359
+ parentPath.startsWith('signature[');
360
+ let externalPath = parentPathStartsWithSignature
361
+ ? parentPath
362
+ : `signature[0].${parentPath}`;
363
+
364
+ // internalPath is parentPath without the signature[N]. prefix
365
+ let internalPath: string | undefined =
366
+ parentPathStartsWithSignature
367
+ ? parentPath.replace(/^signature\[\d+\]\./, '')
368
+ : parentPath;
369
+
370
+ if (i < dependentKeyAttributeExternalPathParts.length) {
371
+ const remainingPath = joinParenthesesAndArrays(
372
+ dependentKeyAttributeExternalPathParts.slice(i),
373
+ );
374
+ externalPath = `${externalPath}.${remainingPath}`;
375
+ internalPath = `${internalPath}.${remainingPath}`;
376
+ }
377
+
378
+ // Look up the full external path in associationMap for proper internal path
379
+ const fullExternalPath = externalPath;
380
+ if (associationMap[fullExternalPath]) {
381
+ internalPath = associationMap[fullExternalPath];
382
+ }
383
+
384
+ const dependentEntityName =
385
+ dependentKeyAttribute.dependentEntityName
386
+ ? `${dependentKeyAttribute.dependentEntityName} (through ${entityName})`
387
+ : entityName;
388
+
389
+ relevantDependentKeyAttributes.push({
390
+ ...dependentKeyAttribute,
391
+ dependentEntityName,
392
+ originalEntityName: entityName,
393
+ filePath: path,
394
+ internalPath,
395
+ externalPath,
396
+ dataStructurePath: internalPath,
397
+ } as any);
398
+
399
+ matchFound = true;
400
+ break;
401
+ }
402
+ }
403
+ }
192
404
  }
193
405
  });
194
406
  });
@@ -1,11 +1,17 @@
1
1
  import completionCall from './completionCall';
2
2
  import { saveLlmCall } from '~codeyam/aws/dynamodb';
3
- import { Analysis, Entity } from '~codeyam/types';
3
+ import type {
4
+ Analysis,
5
+ CompoundConditional,
6
+ ConditionalUsage,
7
+ Entity,
8
+ } from '~codeyam/types';
4
9
  import generateEntityKeyAttributesGenerator from './promptGenerators/generateEntityKeyAttributesGenerator';
5
10
  import { awsLog } from '~codeyam/utils';
6
11
  import { AI, DEFAULT_LARGER_MODEL } from '~codeyam/ai';
7
12
  import isFrontend from './isFrontend';
8
13
  import { gatherAttributesMap } from './promptGenerators/gatherAttributesMap';
14
+ import { formatConditionalUsagesForPrompt } from './getConditionalUsagesFromCode';
9
15
 
10
16
  interface GenerateChangesEntityKeyAttributesArgs {
11
17
  entity: Entity;
@@ -41,11 +47,22 @@ export default async function generateChangesEntityKeyAttributes({
41
47
  true,
42
48
  );
43
49
 
50
+ // Use pre-computed conditional usages from metadata for static analysis context
51
+ const conditionalUsages: Record<string, ConditionalUsage[]> =
52
+ isolatedDataStructure?.conditionalUsages ?? {};
53
+ const compoundConditionals: CompoundConditional[] =
54
+ isolatedDataStructure?.compoundConditionals ?? [];
55
+ const staticAnalysisContext = formatConditionalUsagesForPrompt(
56
+ conditionalUsages,
57
+ compoundConditionals,
58
+ );
59
+
44
60
  const prompt = generateEntityKeyAttributesGenerator({
45
61
  code: entity.code,
46
62
  attributesMap,
47
63
  existingKeyAttributes,
48
64
  commitDiff,
65
+ staticAnalysisContext,
49
66
  });
50
67
 
51
68
  const response = await completionCall({
@@ -346,6 +346,47 @@ NEVER include "error" fields in responses. Skip them entirely.
346
346
  - If structure has \`{ data: {...}, error: {...} }\`, only fill \`data\`
347
347
  - Leave out any attribute named "error"—do not set to null, omit entirely
348
348
 
349
+ ## CRITICAL: Preserve Exact Structure
350
+ Your response MUST mirror the EXACT nested structure provided in mockData Structure.
351
+ - Do NOT reorganize, split, or create duplicate keys
352
+ - The hierarchy of nested objects must match exactly what was provided
353
+ - Only change the leaf VALUES (replacing type descriptions like "string" with actual data like "hello")
354
+ - Arrays should have 3-5 items to provide realistic test data variety
355
+
356
+ **Example** - if given this structure:
357
+ \`\`\`json
358
+ {
359
+ "createClient()": {
360
+ "from(\\"users\\")": {
361
+ "select(\\"*\\")": { "data": [{ "id": "string", "name": "string" }] },
362
+ "delete()": { "eq(\\"id\\", id)": {} }
363
+ }
364
+ }
365
+ }
366
+ \`\`\`
367
+
368
+ Return ONE \`from("users")\` key containing BOTH \`select("*")\` and \`delete()\`:
369
+ \`\`\`json
370
+ {
371
+ "createClient()": {
372
+ "from(\\"users\\")": {
373
+ "select(\\"*\\")": { "data": [{ "id": "user-1", "name": "Alice" }, { "id": "user-2", "name": "Bob" }] },
374
+ "delete()": { "eq(\\"id\\", \\"user-1\\")": {} }
375
+ }
376
+ }
377
+ }
378
+ \`\`\`
379
+
380
+ **WRONG** - do NOT create duplicate keys like this:
381
+ \`\`\`json
382
+ {
383
+ "createClient()": {
384
+ "from(\\"users\\")": { "select(\\"*\\")": { ... } },
385
+ "from(\\"users\\")": { "delete()": { ... } }
386
+ }
387
+ }
388
+ \`\`\`
389
+
349
390
  ## Special Markers
350
391
 
351
392
  ### Dynamic Dates (\`~~codeyam-code~~\`)
@@ -288,7 +288,16 @@ Focus scenario updates on demonstrating this change.${scenarioCount ? ` Generate
288
288
 
289
289
  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
290
 
291
- ${contextSection}## Update Rules
291
+ ${contextSection}## Coverage Goals (IMPORTANT)
292
+ Your primary goal is to MAXIMIZE coverage of key attributes across all scenarios:
293
+
294
+ 1. **Use indexed validValueOptions**: Each key attribute has indexed \`validValueOptions\` (with \`index\` and \`value\`). Reference these by index in your valueOptionRef.
295
+
296
+ 2. **Prioritize attributes with dependencies**: Key attributes with a \`dependencies\` array control conditionally-rendered content. Satisfy these dependencies to reveal gated UI/behavior.
297
+
298
+ 3. **Cover conditional branches**: Use \`codeUsages\` to identify all conditional paths that need coverage.
299
+
300
+ ## Update Rules
292
301
 
293
302
  ### Removed Key Attributes
294
303
  - Update scenarios using removed attributes—replace with new attributes or remove if no longer relevant
@@ -297,6 +306,7 @@ ${contextSection}## Update Rules
297
306
 
298
307
  ### Added Key Attributes
299
308
  - Create or update scenarios to demonstrate new behavior
309
+ - Use different validValueOption indices than existing scenarios to maximize coverage
300
310
 
301
311
  ### Playwright Instructions
302
312
  - Validate existing instructions still work after code changes
@@ -308,7 +318,26 @@ ${contextSection}## Update Rules
308
318
  ### Default Scenario
309
319
  - First scenario must be "${DEFAULT_SCENARIO_NAME}" (exact name)
310
320
  - NEVER include playwrightInstructions—captures initial state only
311
- - Must include all current key attributes with valid values
321
+ - Must include all current key attributes with valid values from their validValueOptions
322
+
323
+ ## keyAttributeInstructions Format
324
+ Use \`dataStructurePath\` as key. Include variable name, instruction, AND a valueOptionRef that references which validValueOption you're using:
325
+ \`\`\`json
326
+ {
327
+ "useStatus().status": {
328
+ "localVariable": "status",
329
+ "instruction": "Set to 'active' mode",
330
+ "valueOptionRef": { "index": 0, "refType": "exact" }
331
+ }
332
+ }
333
+ \`\`\`
334
+
335
+ ### valueOptionRef Types
336
+ - \`"exact"\`: Uses the validValueOption at this index exactly
337
+ - \`"derived"\`: Based on this validValueOption but modified (include \`derivation\` field explaining how)
338
+ - \`"custom"\`: Value not from validValueOptions list (use sparingly)
339
+
340
+ The \`index\` refers to the validValueOptions array position (0 = first option).
312
341
 
313
342
  ## Response Format
314
343
 
@@ -332,7 +361,11 @@ Otherwise:
332
361
  "testName": "it(\\"shows empty message when no notifications\\")",
333
362
  "description": "User has no notifications.",
334
363
  "keyAttributeInstructions": {
335
- "notifications[]": { "localVariable": "notifications[]", "instruction": "Empty array" }
364
+ "useData().notifications[]": {
365
+ "localVariable": "notifications[]",
366
+ "instruction": "Empty array [] to show empty state",
367
+ "valueOptionRef": { "index": 1, "refType": "exact" }
368
+ }
336
369
  }
337
370
  }
338
371
  ]
@@ -342,7 +375,7 @@ Otherwise:
342
375
  ## Rules
343
376
  - Scenario names: letters, numbers, spaces only
344
377
  - testName: Jest style with specific expectations
345
- - Use values from \`validValueOptions\` in key attributes list
378
+ - Use values from \`validValueOptions\` in key attributes list (reference by index)
346
379
  - Include dependency key attributes if dependencies involved
347
380
  - React elements: simple only (\`<div>\`, \`<span>\`)
348
381
  - No external library references—plain JS/TS values
@@ -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,