@codeyam/codeyam-cli 0.1.0-staging.596f0eb → 0.1.0-staging.6e699e5

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 (696) hide show
  1. package/analyzer-template/.build-info.json +8 -8
  2. package/analyzer-template/common/execAsync.ts +1 -1
  3. package/analyzer-template/log.txt +3 -3
  4. package/analyzer-template/package.json +10 -6
  5. package/analyzer-template/packages/ai/index.ts +10 -3
  6. package/analyzer-template/packages/ai/package.json +1 -1
  7. package/analyzer-template/packages/ai/src/lib/__mocks__/completionCall.ts +122 -0
  8. package/analyzer-template/packages/ai/src/lib/analyzeScope.ts +128 -6
  9. package/analyzer-template/packages/ai/src/lib/astScopes/arrayDerivationDetector.ts +199 -0
  10. package/analyzer-template/packages/ai/src/lib/astScopes/astScopeAnalyzer.ts +138 -1
  11. package/analyzer-template/packages/ai/src/lib/astScopes/conditionalEffectsExtractor.ts +644 -0
  12. package/analyzer-template/packages/ai/src/lib/astScopes/methodSemantics.ts +140 -6
  13. package/analyzer-template/packages/ai/src/lib/astScopes/patterns/ifStatementHandler.ts +18 -0
  14. package/analyzer-template/packages/ai/src/lib/astScopes/patterns/switchStatementHandler.ts +38 -1
  15. package/analyzer-template/packages/ai/src/lib/astScopes/patterns/variableDeclarationHandler.ts +181 -1
  16. package/analyzer-template/packages/ai/src/lib/astScopes/processExpression.ts +1239 -104
  17. package/analyzer-template/packages/ai/src/lib/astScopes/types.ts +304 -0
  18. package/analyzer-template/packages/ai/src/lib/checkAllAttributes.ts +29 -10
  19. package/analyzer-template/packages/ai/src/lib/completionCall.ts +216 -36
  20. package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +1501 -138
  21. package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.ts +2 -1
  22. package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.ts +976 -0
  23. package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.ts +243 -77
  24. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.ts +19 -1
  25. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.ts +103 -6
  26. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.ts +23 -0
  27. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertNullToUndefinedBySchema.ts +98 -0
  28. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.ts +42 -2
  29. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/fixNullIdsBySchema.ts +129 -0
  30. package/analyzer-template/packages/ai/src/lib/dataStructureChunking.ts +156 -0
  31. package/analyzer-template/packages/ai/src/lib/deepEqual.ts +30 -0
  32. package/analyzer-template/packages/ai/src/lib/e2eDataTracking.ts +334 -0
  33. package/analyzer-template/packages/ai/src/lib/extractCriticalDataKeys.ts +120 -0
  34. package/analyzer-template/packages/ai/src/lib/generateChangesEntityScenarioData.ts +74 -7
  35. package/analyzer-template/packages/ai/src/lib/generateChangesEntityScenarios.ts +89 -112
  36. package/analyzer-template/packages/ai/src/lib/generateEntityDataStructure.ts +6 -0
  37. package/analyzer-template/packages/ai/src/lib/generateEntityScenarioData.ts +1111 -91
  38. package/analyzer-template/packages/ai/src/lib/generateEntityScenarios.ts +207 -104
  39. package/analyzer-template/packages/ai/src/lib/generateExecutionFlows.ts +570 -0
  40. package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionalEffects.ts +528 -0
  41. package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionals.ts +1977 -0
  42. package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromJsxUsages.ts +239 -0
  43. package/analyzer-template/packages/ai/src/lib/getConditionalUsagesFromCode.ts +143 -31
  44. package/analyzer-template/packages/ai/src/lib/guessScenarioDataFromDescription.ts +8 -2
  45. package/analyzer-template/packages/ai/src/lib/isolateScopes.ts +276 -3
  46. package/analyzer-template/packages/ai/src/lib/mergeStatements.ts +33 -3
  47. package/analyzer-template/packages/ai/src/lib/promptGenerators/gatherAttributesMap.ts +7 -0
  48. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateChangesEntityScenarioDataGenerator.ts +1 -1
  49. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.ts +32 -102
  50. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateChunkPrompt.ts +82 -0
  51. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateCriticalKeysPrompt.ts +103 -0
  52. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.ts +90 -6
  53. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.ts +14 -53
  54. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateMissingKeysPrompt.ts +58 -0
  55. package/analyzer-template/packages/ai/src/lib/promptGenerators/guessNewScenarioDataFromDescriptionGenerator.ts +28 -2
  56. package/analyzer-template/packages/ai/src/lib/promptGenerators/simplifyKeysForLLM.ts +391 -0
  57. package/analyzer-template/packages/ai/src/lib/resolvePathToControllable.ts +812 -0
  58. package/analyzer-template/packages/ai/src/lib/splitOutsideParentheses.ts +5 -1
  59. package/analyzer-template/packages/ai/src/lib/validateExecutionFlowPaths.ts +531 -0
  60. package/analyzer-template/packages/ai/src/lib/worker/SerializableDataStructure.ts +123 -0
  61. package/analyzer-template/packages/ai/src/lib/worker/analyzeScopeWorker.ts +8 -1
  62. package/analyzer-template/packages/analyze/src/lib/FileAnalyzer.ts +14 -0
  63. package/analyzer-template/packages/analyze/src/lib/analysisContext.ts +44 -4
  64. package/analyzer-template/packages/analyze/src/lib/asts/nodes/index.ts +1 -0
  65. package/analyzer-template/packages/analyze/src/lib/asts/nodes/isAsyncFunction.ts +67 -0
  66. package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.ts +455 -267
  67. package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities.ts +18 -0
  68. package/analyzer-template/packages/analyze/src/lib/files/analyze/findOrCreateEntity.ts +3 -0
  69. package/analyzer-template/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.ts +33 -7
  70. package/analyzer-template/packages/analyze/src/lib/files/analyzeChange.ts +31 -15
  71. package/analyzer-template/packages/analyze/src/lib/files/analyzeEntity.ts +11 -7
  72. package/analyzer-template/packages/analyze/src/lib/files/analyzeInitial.ts +11 -12
  73. package/analyzer-template/packages/analyze/src/lib/files/enums/steps.ts +1 -1
  74. package/analyzer-template/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.ts +265 -0
  75. package/analyzer-template/packages/analyze/src/lib/files/scenarios/enrichUnknownTypesFromSourceEquivalencies.ts +102 -0
  76. package/analyzer-template/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.ts +588 -52
  77. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateChangesScenarioData.ts +1 -1
  78. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateChangesScenarios.ts +28 -62
  79. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +336 -133
  80. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.ts +156 -0
  81. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateScenarioData.ts +78 -83
  82. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateScenarios.ts +4 -8
  83. package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +461 -94
  84. package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeValidatedDataStructures.ts +56 -11
  85. package/analyzer-template/packages/aws/codebuild/index.ts +1 -0
  86. package/analyzer-template/packages/aws/dist/src/lib/codebuild/waitForBuild.d.ts +11 -1
  87. package/analyzer-template/packages/aws/dist/src/lib/codebuild/waitForBuild.d.ts.map +1 -1
  88. package/analyzer-template/packages/aws/dist/src/lib/codebuild/waitForBuild.js +29 -18
  89. package/analyzer-template/packages/aws/dist/src/lib/codebuild/waitForBuild.js.map +1 -1
  90. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsDefineContainer.d.ts +2 -2
  91. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsDefineContainer.d.ts.map +1 -1
  92. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsDefineContainer.js +2 -2
  93. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsDefineContainer.js.map +1 -1
  94. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsTaskFactory.d.ts +8 -18
  95. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsTaskFactory.d.ts.map +1 -1
  96. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsTaskFactory.js +17 -61
  97. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsTaskFactory.js.map +1 -1
  98. package/analyzer-template/packages/aws/dist/src/lib/s3/checkS3ObjectExists.d.ts +15 -0
  99. package/analyzer-template/packages/aws/dist/src/lib/s3/checkS3ObjectExists.d.ts.map +1 -0
  100. package/analyzer-template/packages/aws/dist/src/lib/s3/checkS3ObjectExists.js +31 -0
  101. package/analyzer-template/packages/aws/dist/src/lib/s3/checkS3ObjectExists.js.map +1 -0
  102. package/analyzer-template/packages/aws/dist/src/lib/s3/uploadFileToS3.d.ts.map +1 -1
  103. package/analyzer-template/packages/aws/dist/src/lib/s3/uploadFileToS3.js +8 -1
  104. package/analyzer-template/packages/aws/dist/src/lib/s3/uploadFileToS3.js.map +1 -1
  105. package/analyzer-template/packages/aws/package.json +3 -3
  106. package/analyzer-template/packages/aws/s3/index.ts +1 -0
  107. package/analyzer-template/packages/aws/src/lib/codebuild/waitForBuild.ts +43 -19
  108. package/analyzer-template/packages/aws/src/lib/ecs/ecsDefineContainer.ts +3 -3
  109. package/analyzer-template/packages/aws/src/lib/ecs/ecsTaskFactory.ts +17 -69
  110. package/analyzer-template/packages/aws/src/lib/s3/checkS3ObjectExists.ts +47 -0
  111. package/analyzer-template/packages/aws/src/lib/s3/uploadFileToS3.ts +8 -1
  112. package/analyzer-template/packages/database/src/lib/kysely/db.ts +4 -4
  113. package/analyzer-template/packages/database/src/lib/kysely/tableRelations.ts +2 -2
  114. package/analyzer-template/packages/database/src/lib/kysely/tables/debugReportsTable.ts +36 -9
  115. package/analyzer-template/packages/database/src/lib/loadReadyToBeCapturedAnalyses.ts +7 -3
  116. package/analyzer-template/packages/generate/index.ts +3 -0
  117. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/componentScenarioPageNext.ts +17 -1
  118. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.ts +193 -0
  119. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.ts +73 -0
  120. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.ts +9 -4
  121. package/analyzer-template/packages/generate/src/lib/deepMerge.ts +26 -1
  122. package/analyzer-template/packages/generate/src/lib/scenarioComponentForServer.ts +114 -0
  123. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts +2 -2
  124. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js +2 -2
  125. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tableRelations.d.ts +2 -2
  126. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/analysesTable.d.ts +1 -11
  127. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/analysesTable.d.ts.map +1 -1
  128. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.d.ts +30 -7
  129. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.d.ts.map +1 -1
  130. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.js +9 -3
  131. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.js.map +1 -1
  132. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/entitiesTable.d.ts +1 -0
  133. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/entitiesTable.d.ts.map +1 -1
  134. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts +2 -6
  135. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts.map +1 -1
  136. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.d.ts.map +1 -1
  137. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.js +7 -4
  138. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.js.map +1 -1
  139. package/analyzer-template/packages/github/dist/generate/index.d.ts +3 -0
  140. package/analyzer-template/packages/github/dist/generate/index.d.ts.map +1 -1
  141. package/analyzer-template/packages/github/dist/generate/index.js +3 -0
  142. package/analyzer-template/packages/github/dist/generate/index.js.map +1 -1
  143. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/componentScenarioPageNext.d.ts.map +1 -1
  144. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/componentScenarioPageNext.js +16 -1
  145. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/componentScenarioPageNext.js.map +1 -1
  146. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.d.ts +9 -0
  147. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.d.ts.map +1 -0
  148. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js +189 -0
  149. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js.map +1 -0
  150. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.d.ts +20 -0
  151. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.d.ts.map +1 -0
  152. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.js +53 -0
  153. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.js.map +1 -0
  154. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.d.ts.map +1 -1
  155. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +8 -4
  156. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
  157. package/analyzer-template/packages/github/dist/generate/src/lib/deepMerge.d.ts.map +1 -1
  158. package/analyzer-template/packages/github/dist/generate/src/lib/deepMerge.js +27 -1
  159. package/analyzer-template/packages/github/dist/generate/src/lib/deepMerge.js.map +1 -1
  160. package/analyzer-template/packages/github/dist/generate/src/lib/scenarioComponentForServer.d.ts +8 -0
  161. package/analyzer-template/packages/github/dist/generate/src/lib/scenarioComponentForServer.d.ts.map +1 -0
  162. package/analyzer-template/packages/github/dist/generate/src/lib/scenarioComponentForServer.js +89 -0
  163. package/analyzer-template/packages/github/dist/generate/src/lib/scenarioComponentForServer.js.map +1 -0
  164. package/analyzer-template/packages/github/dist/github/src/lib/loadOrCreateCommit.d.ts.map +1 -1
  165. package/analyzer-template/packages/github/dist/github/src/lib/loadOrCreateCommit.js +10 -0
  166. package/analyzer-template/packages/github/dist/github/src/lib/loadOrCreateCommit.js.map +1 -1
  167. package/analyzer-template/packages/github/dist/github/src/lib/syncPrimaryBranch.d.ts.map +1 -1
  168. package/analyzer-template/packages/github/dist/github/src/lib/syncPrimaryBranch.js +3 -0
  169. package/analyzer-template/packages/github/dist/github/src/lib/syncPrimaryBranch.js.map +1 -1
  170. package/analyzer-template/packages/github/dist/types/index.d.ts +2 -2
  171. package/analyzer-template/packages/github/dist/types/index.d.ts.map +1 -1
  172. package/analyzer-template/packages/github/dist/types/index.js.map +1 -1
  173. package/analyzer-template/packages/github/dist/types/src/types/Analysis.d.ts +87 -13
  174. package/analyzer-template/packages/github/dist/types/src/types/Analysis.d.ts.map +1 -1
  175. package/analyzer-template/packages/github/dist/types/src/types/Entity.d.ts +2 -0
  176. package/analyzer-template/packages/github/dist/types/src/types/Entity.d.ts.map +1 -1
  177. package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts +11 -6
  178. package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts.map +1 -1
  179. package/analyzer-template/packages/github/dist/types/src/types/ScenariosDataStructure.d.ts +196 -0
  180. package/analyzer-template/packages/github/dist/types/src/types/ScenariosDataStructure.d.ts.map +1 -1
  181. package/analyzer-template/packages/github/dist/types/src/types/StatementInfo.d.ts +2 -0
  182. package/analyzer-template/packages/github/dist/types/src/types/StatementInfo.d.ts.map +1 -1
  183. package/analyzer-template/packages/github/dist/utils/src/lib/lightweightEntityExtractor.d.ts.map +1 -1
  184. package/analyzer-template/packages/github/dist/utils/src/lib/lightweightEntityExtractor.js +25 -0
  185. package/analyzer-template/packages/github/dist/utils/src/lib/lightweightEntityExtractor.js.map +1 -1
  186. package/analyzer-template/packages/github/dist/utils/src/lib/safeFileName.d.ts +9 -1
  187. package/analyzer-template/packages/github/dist/utils/src/lib/safeFileName.d.ts.map +1 -1
  188. package/analyzer-template/packages/github/dist/utils/src/lib/safeFileName.js +29 -3
  189. package/analyzer-template/packages/github/dist/utils/src/lib/safeFileName.js.map +1 -1
  190. package/analyzer-template/packages/github/src/lib/loadOrCreateCommit.ts +14 -0
  191. package/analyzer-template/packages/github/src/lib/syncPrimaryBranch.ts +2 -0
  192. package/analyzer-template/packages/process/index.ts +2 -0
  193. package/analyzer-template/packages/process/package.json +12 -0
  194. package/analyzer-template/packages/process/tsconfig.json +8 -0
  195. package/analyzer-template/packages/types/index.ts +5 -0
  196. package/analyzer-template/packages/types/src/types/Analysis.ts +104 -13
  197. package/analyzer-template/packages/types/src/types/Entity.ts +2 -0
  198. package/analyzer-template/packages/types/src/types/Scenario.ts +11 -10
  199. package/analyzer-template/packages/types/src/types/ScenariosDataStructure.ts +224 -0
  200. package/analyzer-template/packages/types/src/types/StatementInfo.ts +2 -0
  201. package/analyzer-template/packages/ui-components/src/components/ScenarioDetailInteractiveView.tsx +23 -7
  202. package/analyzer-template/packages/utils/dist/types/index.d.ts +2 -2
  203. package/analyzer-template/packages/utils/dist/types/index.d.ts.map +1 -1
  204. package/analyzer-template/packages/utils/dist/types/index.js.map +1 -1
  205. package/analyzer-template/packages/utils/dist/types/src/types/Analysis.d.ts +87 -13
  206. package/analyzer-template/packages/utils/dist/types/src/types/Analysis.d.ts.map +1 -1
  207. package/analyzer-template/packages/utils/dist/types/src/types/Entity.d.ts +2 -0
  208. package/analyzer-template/packages/utils/dist/types/src/types/Entity.d.ts.map +1 -1
  209. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts +11 -6
  210. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts.map +1 -1
  211. package/analyzer-template/packages/utils/dist/types/src/types/ScenariosDataStructure.d.ts +196 -0
  212. package/analyzer-template/packages/utils/dist/types/src/types/ScenariosDataStructure.d.ts.map +1 -1
  213. package/analyzer-template/packages/utils/dist/types/src/types/StatementInfo.d.ts +2 -0
  214. package/analyzer-template/packages/utils/dist/types/src/types/StatementInfo.d.ts.map +1 -1
  215. package/analyzer-template/packages/utils/dist/utils/src/lib/lightweightEntityExtractor.d.ts.map +1 -1
  216. package/analyzer-template/packages/utils/dist/utils/src/lib/lightweightEntityExtractor.js +25 -0
  217. package/analyzer-template/packages/utils/dist/utils/src/lib/lightweightEntityExtractor.js.map +1 -1
  218. package/analyzer-template/packages/utils/dist/utils/src/lib/safeFileName.d.ts +9 -1
  219. package/analyzer-template/packages/utils/dist/utils/src/lib/safeFileName.d.ts.map +1 -1
  220. package/analyzer-template/packages/utils/dist/utils/src/lib/safeFileName.js +29 -3
  221. package/analyzer-template/packages/utils/dist/utils/src/lib/safeFileName.js.map +1 -1
  222. package/analyzer-template/packages/utils/src/lib/lightweightEntityExtractor.ts +27 -0
  223. package/analyzer-template/packages/utils/src/lib/safeFileName.ts +48 -3
  224. package/analyzer-template/playwright/capture.ts +37 -18
  225. package/analyzer-template/playwright/getCodeYamInfo.ts +12 -7
  226. package/analyzer-template/playwright/takeElementScreenshot.ts +26 -11
  227. package/analyzer-template/playwright/takeScreenshot.ts +9 -7
  228. package/analyzer-template/playwright/waitForServer.ts +21 -6
  229. package/analyzer-template/project/analyzeBaselineCommit.ts +4 -0
  230. package/analyzer-template/project/analyzeBranchCommit.ts +4 -0
  231. package/analyzer-template/project/analyzeFileEntities.ts +4 -0
  232. package/analyzer-template/project/analyzeRegularCommit.ts +4 -0
  233. package/analyzer-template/project/constructMockCode.ts +1181 -160
  234. package/analyzer-template/project/controller/startController.ts +16 -1
  235. package/analyzer-template/project/executeLibraryFunctionDirect.ts +7 -3
  236. package/analyzer-template/project/mocks/analyzeFileMock.ts +8 -7
  237. package/analyzer-template/project/orchestrateCapture/KyselyAnalysisLoader.ts +3 -6
  238. package/analyzer-template/project/orchestrateCapture/SequentialCaptureTaskRunner.ts +82 -36
  239. package/analyzer-template/project/orchestrateCapture.ts +36 -3
  240. package/analyzer-template/project/reconcileMockDataKeys.ts +245 -2
  241. package/analyzer-template/project/runAnalysis.ts +11 -0
  242. package/analyzer-template/project/runMultiScenarioServer.ts +11 -10
  243. package/analyzer-template/project/serverOnlyModules.ts +194 -21
  244. package/analyzer-template/project/start.ts +26 -4
  245. package/analyzer-template/project/startScenarioCapture.ts +79 -41
  246. package/analyzer-template/project/writeMockDataTsx.ts +232 -57
  247. package/analyzer-template/project/writeScenarioClientWrapper.ts +21 -0
  248. package/analyzer-template/project/writeScenarioComponents.ts +769 -181
  249. package/analyzer-template/project/writeScenarioFiles.ts +26 -0
  250. package/analyzer-template/project/writeSimpleRoot.ts +13 -15
  251. package/analyzer-template/scripts/comboWorkerLoop.cjs +1 -0
  252. package/analyzer-template/scripts/defaultCmd.sh +9 -0
  253. package/analyzer-template/tsconfig.json +2 -1
  254. package/background/src/lib/local/createLocalAnalyzer.js +1 -29
  255. package/background/src/lib/local/createLocalAnalyzer.js.map +1 -1
  256. package/background/src/lib/local/execAsync.js +1 -1
  257. package/background/src/lib/local/execAsync.js.map +1 -1
  258. package/background/src/lib/virtualized/common/execAsync.js +1 -1
  259. package/background/src/lib/virtualized/common/execAsync.js.map +1 -1
  260. package/background/src/lib/virtualized/project/analyzeBaselineCommit.js +2 -1
  261. package/background/src/lib/virtualized/project/analyzeBaselineCommit.js.map +1 -1
  262. package/background/src/lib/virtualized/project/analyzeBranchCommit.js +2 -1
  263. package/background/src/lib/virtualized/project/analyzeBranchCommit.js.map +1 -1
  264. package/background/src/lib/virtualized/project/analyzeFileEntities.js +2 -1
  265. package/background/src/lib/virtualized/project/analyzeFileEntities.js.map +1 -1
  266. package/background/src/lib/virtualized/project/analyzeRegularCommit.js +2 -1
  267. package/background/src/lib/virtualized/project/analyzeRegularCommit.js.map +1 -1
  268. package/background/src/lib/virtualized/project/constructMockCode.js +1053 -124
  269. package/background/src/lib/virtualized/project/constructMockCode.js.map +1 -1
  270. package/background/src/lib/virtualized/project/controller/startController.js +11 -1
  271. package/background/src/lib/virtualized/project/controller/startController.js.map +1 -1
  272. package/background/src/lib/virtualized/project/executeLibraryFunctionDirect.js +6 -3
  273. package/background/src/lib/virtualized/project/executeLibraryFunctionDirect.js.map +1 -1
  274. package/background/src/lib/virtualized/project/mocks/analyzeFileMock.js +7 -7
  275. package/background/src/lib/virtualized/project/mocks/analyzeFileMock.js.map +1 -1
  276. package/background/src/lib/virtualized/project/orchestrateCapture/KyselyAnalysisLoader.js +3 -2
  277. package/background/src/lib/virtualized/project/orchestrateCapture/KyselyAnalysisLoader.js.map +1 -1
  278. package/background/src/lib/virtualized/project/orchestrateCapture/SequentialCaptureTaskRunner.js +69 -32
  279. package/background/src/lib/virtualized/project/orchestrateCapture/SequentialCaptureTaskRunner.js.map +1 -1
  280. package/background/src/lib/virtualized/project/orchestrateCapture.js +27 -4
  281. package/background/src/lib/virtualized/project/orchestrateCapture.js.map +1 -1
  282. package/background/src/lib/virtualized/project/reconcileMockDataKeys.js +204 -2
  283. package/background/src/lib/virtualized/project/reconcileMockDataKeys.js.map +1 -1
  284. package/background/src/lib/virtualized/project/runAnalysis.js +9 -0
  285. package/background/src/lib/virtualized/project/runAnalysis.js.map +1 -1
  286. package/background/src/lib/virtualized/project/runMultiScenarioServer.js +11 -9
  287. package/background/src/lib/virtualized/project/runMultiScenarioServer.js.map +1 -1
  288. package/background/src/lib/virtualized/project/serverOnlyModules.js +163 -23
  289. package/background/src/lib/virtualized/project/serverOnlyModules.js.map +1 -1
  290. package/background/src/lib/virtualized/project/start.js +21 -4
  291. package/background/src/lib/virtualized/project/start.js.map +1 -1
  292. package/background/src/lib/virtualized/project/startScenarioCapture.js +61 -31
  293. package/background/src/lib/virtualized/project/startScenarioCapture.js.map +1 -1
  294. package/background/src/lib/virtualized/project/writeMockDataTsx.js +199 -50
  295. package/background/src/lib/virtualized/project/writeMockDataTsx.js.map +1 -1
  296. package/background/src/lib/virtualized/project/writeScenarioClientWrapper.js +15 -0
  297. package/background/src/lib/virtualized/project/writeScenarioClientWrapper.js.map +1 -0
  298. package/background/src/lib/virtualized/project/writeScenarioComponents.js +552 -125
  299. package/background/src/lib/virtualized/project/writeScenarioComponents.js.map +1 -1
  300. package/background/src/lib/virtualized/project/writeScenarioFiles.js +19 -0
  301. package/background/src/lib/virtualized/project/writeScenarioFiles.js.map +1 -1
  302. package/background/src/lib/virtualized/project/writeSimpleRoot.js +13 -13
  303. package/background/src/lib/virtualized/project/writeSimpleRoot.js.map +1 -1
  304. package/codeyam-cli/src/cli.js +7 -1
  305. package/codeyam-cli/src/cli.js.map +1 -1
  306. package/codeyam-cli/src/commands/analyze.js +1 -1
  307. package/codeyam-cli/src/commands/analyze.js.map +1 -1
  308. package/codeyam-cli/src/commands/baseline.js +174 -0
  309. package/codeyam-cli/src/commands/baseline.js.map +1 -0
  310. package/codeyam-cli/src/commands/debug.js +40 -18
  311. package/codeyam-cli/src/commands/debug.js.map +1 -1
  312. package/codeyam-cli/src/commands/default.js +0 -15
  313. package/codeyam-cli/src/commands/default.js.map +1 -1
  314. package/codeyam-cli/src/commands/recapture.js +226 -0
  315. package/codeyam-cli/src/commands/recapture.js.map +1 -0
  316. package/codeyam-cli/src/commands/report.js +72 -24
  317. package/codeyam-cli/src/commands/report.js.map +1 -1
  318. package/codeyam-cli/src/commands/start.js +8 -12
  319. package/codeyam-cli/src/commands/start.js.map +1 -1
  320. package/codeyam-cli/src/commands/status.js +23 -1
  321. package/codeyam-cli/src/commands/status.js.map +1 -1
  322. package/codeyam-cli/src/commands/test-startup.js +1 -1
  323. package/codeyam-cli/src/commands/test-startup.js.map +1 -1
  324. package/codeyam-cli/src/commands/wipe.js +108 -0
  325. package/codeyam-cli/src/commands/wipe.js.map +1 -0
  326. package/codeyam-cli/src/utils/__tests__/serverVersionStaleness.test.js +81 -0
  327. package/codeyam-cli/src/utils/__tests__/serverVersionStaleness.test.js.map +1 -0
  328. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +31 -27
  329. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js.map +1 -1
  330. package/codeyam-cli/src/utils/analysisRunner.js +8 -13
  331. package/codeyam-cli/src/utils/analysisRunner.js.map +1 -1
  332. package/codeyam-cli/src/utils/backgroundServer.js +14 -4
  333. package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
  334. package/codeyam-cli/src/utils/database.js +91 -5
  335. package/codeyam-cli/src/utils/database.js.map +1 -1
  336. package/codeyam-cli/src/utils/generateReport.js +253 -106
  337. package/codeyam-cli/src/utils/generateReport.js.map +1 -1
  338. package/codeyam-cli/src/utils/git.js +79 -0
  339. package/codeyam-cli/src/utils/git.js.map +1 -0
  340. package/codeyam-cli/src/utils/install-skills.js +31 -17
  341. package/codeyam-cli/src/utils/install-skills.js.map +1 -1
  342. package/codeyam-cli/src/utils/queue/__tests__/manager.test.js +38 -0
  343. package/codeyam-cli/src/utils/queue/__tests__/manager.test.js.map +1 -1
  344. package/codeyam-cli/src/utils/queue/job.js +245 -16
  345. package/codeyam-cli/src/utils/queue/job.js.map +1 -1
  346. package/codeyam-cli/src/utils/queue/manager.js +25 -7
  347. package/codeyam-cli/src/utils/queue/manager.js.map +1 -1
  348. package/codeyam-cli/src/utils/queue/persistence.js.map +1 -1
  349. package/codeyam-cli/src/utils/serverState.js.map +1 -1
  350. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +7 -5
  351. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js.map +1 -1
  352. package/codeyam-cli/src/utils/versionInfo.js +25 -19
  353. package/codeyam-cli/src/utils/versionInfo.js.map +1 -1
  354. package/codeyam-cli/src/utils/wipe.js +128 -0
  355. package/codeyam-cli/src/utils/wipe.js.map +1 -0
  356. package/codeyam-cli/src/webserver/app/lib/database.js +98 -1
  357. package/codeyam-cli/src/webserver/app/lib/database.js.map +1 -1
  358. package/codeyam-cli/src/webserver/app/lib/dbNotifier.js.map +1 -1
  359. package/codeyam-cli/src/webserver/backgroundServer.js +5 -10
  360. package/codeyam-cli/src/webserver/backgroundServer.js.map +1 -1
  361. package/codeyam-cli/src/webserver/bootstrap.js +49 -0
  362. package/codeyam-cli/src/webserver/bootstrap.js.map +1 -0
  363. package/codeyam-cli/src/webserver/build/client/assets/EntityItem-BXhEawa3.js +1 -0
  364. package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeBadge-efWKDYMr.js → EntityTypeBadge-DLqD3qNt.js} +1 -1
  365. package/codeyam-cli/src/webserver/build/client/assets/EntityTypeIcon-Ba2JVPzP.js +41 -0
  366. package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-C8lyxW9k.js +34 -0
  367. package/codeyam-cli/src/webserver/build/client/assets/InteractivePreview-aht4aafF.js +25 -0
  368. package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-CVtiBnY5.js +3 -0
  369. package/codeyam-cli/src/webserver/build/client/assets/LoadingDots-B0GLXMsr.js +6 -0
  370. package/codeyam-cli/src/webserver/build/client/assets/LogViewer-xgeCVgSM.js +3 -0
  371. package/codeyam-cli/src/webserver/build/client/assets/ReportIssueModal-D4TZhLuw.js +21 -0
  372. package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-DuDvi0jm.js +1 -0
  373. package/codeyam-cli/src/webserver/build/client/assets/ScenarioViewer-DEx02QDa.js +10 -0
  374. package/codeyam-cli/src/webserver/build/client/assets/{TruncatedFilePath-COPstp9J.js → TruncatedFilePath-DyFZkK0l.js} +1 -1
  375. package/codeyam-cli/src/webserver/build/client/assets/_index-BwqWJOgH.js +11 -0
  376. package/codeyam-cli/src/webserver/build/client/assets/activity.(_tab)-DoLIqZX2.js +37 -0
  377. package/codeyam-cli/src/webserver/build/client/assets/api.health-l0sNRNKZ.js +1 -0
  378. package/codeyam-cli/src/webserver/build/client/assets/api.restart-server-l0sNRNKZ.js +1 -0
  379. package/codeyam-cli/src/webserver/build/client/assets/api.rules-l0sNRNKZ.js +1 -0
  380. package/codeyam-cli/src/webserver/build/client/assets/chevron-down-Cx24_aWc.js +6 -0
  381. package/codeyam-cli/src/webserver/build/client/assets/chunk-EPOLDU6W-CXRTFQ3F.js +51 -0
  382. package/codeyam-cli/src/webserver/build/client/assets/circle-check-BOARzkeR.js +6 -0
  383. package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-BdhJEx6B.js +21 -0
  384. package/codeyam-cli/src/webserver/build/client/assets/{cy-logo-cli-C1gnJVOL.svg → cy-logo-cli-CCKUIm0S.svg} +2 -2
  385. package/codeyam-cli/src/webserver/build/client/assets/cy-logo-cli-DcX-ZS3p.js +1 -0
  386. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-BRb-0kQl.js +1 -0
  387. package/codeyam-cli/src/webserver/build/client/assets/entity._sha._-C2N4Op8e.js +23 -0
  388. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-DavjRmOY.js +6 -0
  389. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-D1T4TGjf.js +6 -0
  390. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.edit._scenarioId-CTBG2mmz.js +5 -0
  391. package/codeyam-cli/src/webserver/build/client/assets/entry.client-CS2cb_eZ.js +29 -0
  392. package/codeyam-cli/src/webserver/build/client/assets/executionFlowCoverage-BWhdfn70.js +1 -0
  393. package/codeyam-cli/src/webserver/build/client/assets/fileTableUtils-DMJ7zii9.js +1 -0
  394. package/codeyam-cli/src/webserver/build/client/assets/files-Cs4MdYtv.js +1 -0
  395. package/codeyam-cli/src/webserver/build/client/assets/git-B4RJRvYB.js +15 -0
  396. package/codeyam-cli/src/webserver/build/client/assets/git-commit-horizontal-CysbcZxi.js +6 -0
  397. package/codeyam-cli/src/webserver/build/client/assets/globals-DMUaGAqV.css +1 -0
  398. package/codeyam-cli/src/webserver/build/client/assets/html2canvas-pro.esm-fmIEn3Bc.js +9 -0
  399. package/codeyam-cli/src/webserver/build/client/assets/index-B1h680n5.js +9 -0
  400. package/codeyam-cli/src/webserver/build/client/assets/index-lzqtyFU8.js +3 -0
  401. package/codeyam-cli/src/webserver/build/client/assets/loader-circle-B7B9V-bu.js +6 -0
  402. package/codeyam-cli/src/webserver/build/client/assets/manifest-f874c610.js +1 -0
  403. package/codeyam-cli/src/webserver/build/client/assets/preload-helper-ckwbz45p.js +1 -0
  404. package/codeyam-cli/src/webserver/build/client/assets/root-Bz5TunQg.js +57 -0
  405. package/codeyam-cli/src/webserver/build/client/assets/rules-hEkvVw2-.js +97 -0
  406. package/codeyam-cli/src/webserver/build/client/assets/scenarioStatus-B_8jpV3e.js +1 -0
  407. package/codeyam-cli/src/webserver/build/client/assets/search-CxXUmBSd.js +6 -0
  408. package/codeyam-cli/src/webserver/build/client/assets/settings-CS5f3WzT.js +1 -0
  409. package/codeyam-cli/src/webserver/build/client/assets/simulations-DwFIBT09.js +1 -0
  410. package/codeyam-cli/src/webserver/build/client/assets/triangle-alert-B6LgvRJg.js +6 -0
  411. package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-C1v1PQzo.js +1 -0
  412. package/codeyam-cli/src/webserver/build/client/assets/{useLastLogLine-3pmpUQB-.js → useLastLogLine-aSv48UbS.js} +1 -1
  413. package/codeyam-cli/src/webserver/build/client/assets/useReportContext-DYxHZQuP.js +1 -0
  414. package/codeyam-cli/src/webserver/build/client/assets/{useToast-DEyawJ8r.js → useToast-mBRpZPiu.js} +1 -1
  415. package/codeyam-cli/src/webserver/build/server/assets/index-967OuJoF.js +1 -0
  416. package/codeyam-cli/src/webserver/build/server/assets/server-build-DRTmerg9.js +257 -0
  417. package/codeyam-cli/src/webserver/build/server/index.js +1 -1
  418. package/codeyam-cli/src/webserver/build-info.json +5 -5
  419. package/codeyam-cli/src/webserver/devServer.js +1 -3
  420. package/codeyam-cli/src/webserver/devServer.js.map +1 -1
  421. package/codeyam-cli/src/webserver/server.js +35 -25
  422. package/codeyam-cli/src/webserver/server.js.map +1 -1
  423. package/codeyam-cli/templates/codeyam-power-rules-hook.sh +200 -0
  424. package/codeyam-cli/templates/{codeyam-debug-skill.md → codeyam:debug.md} +48 -4
  425. package/codeyam-cli/templates/codeyam:diagnose.md +650 -0
  426. package/codeyam-cli/templates/codeyam:new-rule.md +13 -0
  427. package/codeyam-cli/templates/codeyam:power-rules.md +447 -0
  428. package/codeyam-cli/templates/{codeyam-setup-skill.md → codeyam:setup.md} +139 -4
  429. package/codeyam-cli/templates/{codeyam-sim-skill.md → codeyam:sim.md} +1 -1
  430. package/codeyam-cli/templates/{codeyam-test-skill.md → codeyam:test.md} +1 -1
  431. package/codeyam-cli/templates/{codeyam-verify-skill.md → codeyam:verify.md} +1 -1
  432. package/package.json +17 -16
  433. package/packages/ai/index.js +5 -4
  434. package/packages/ai/index.js.map +1 -1
  435. package/packages/ai/src/lib/analyzeScope.js +99 -0
  436. package/packages/ai/src/lib/analyzeScope.js.map +1 -1
  437. package/packages/ai/src/lib/astScopes/arrayDerivationDetector.js +150 -0
  438. package/packages/ai/src/lib/astScopes/arrayDerivationDetector.js.map +1 -0
  439. package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js +100 -1
  440. package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js.map +1 -1
  441. package/packages/ai/src/lib/astScopes/conditionalEffectsExtractor.js +435 -0
  442. package/packages/ai/src/lib/astScopes/conditionalEffectsExtractor.js.map +1 -0
  443. package/packages/ai/src/lib/astScopes/methodSemantics.js +97 -6
  444. package/packages/ai/src/lib/astScopes/methodSemantics.js.map +1 -1
  445. package/packages/ai/src/lib/astScopes/patterns/ifStatementHandler.js +8 -0
  446. package/packages/ai/src/lib/astScopes/patterns/ifStatementHandler.js.map +1 -1
  447. package/packages/ai/src/lib/astScopes/patterns/switchStatementHandler.js +23 -0
  448. package/packages/ai/src/lib/astScopes/patterns/switchStatementHandler.js.map +1 -1
  449. package/packages/ai/src/lib/astScopes/patterns/variableDeclarationHandler.js +138 -1
  450. package/packages/ai/src/lib/astScopes/patterns/variableDeclarationHandler.js.map +1 -1
  451. package/packages/ai/src/lib/astScopes/processExpression.js +945 -87
  452. package/packages/ai/src/lib/astScopes/processExpression.js.map +1 -1
  453. package/packages/ai/src/lib/checkAllAttributes.js +24 -9
  454. package/packages/ai/src/lib/checkAllAttributes.js.map +1 -1
  455. package/packages/ai/src/lib/completionCall.js +178 -31
  456. package/packages/ai/src/lib/completionCall.js.map +1 -1
  457. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +1198 -82
  458. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
  459. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.js +2 -1
  460. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.js.map +1 -1
  461. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.js +661 -0
  462. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.js.map +1 -0
  463. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.js +180 -56
  464. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.js.map +1 -1
  465. package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js +16 -1
  466. package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js.map +1 -1
  467. package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js +86 -4
  468. package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js.map +1 -1
  469. package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js +20 -0
  470. package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js.map +1 -1
  471. package/packages/ai/src/lib/dataStructure/helpers/convertNullToUndefinedBySchema.js +86 -0
  472. package/packages/ai/src/lib/dataStructure/helpers/convertNullToUndefinedBySchema.js.map +1 -0
  473. package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js +34 -3
  474. package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js.map +1 -1
  475. package/packages/ai/src/lib/dataStructure/helpers/fixNullIdsBySchema.js +107 -0
  476. package/packages/ai/src/lib/dataStructure/helpers/fixNullIdsBySchema.js.map +1 -0
  477. package/packages/ai/src/lib/dataStructureChunking.js +111 -0
  478. package/packages/ai/src/lib/dataStructureChunking.js.map +1 -0
  479. package/packages/ai/src/lib/deepEqual.js +32 -0
  480. package/packages/ai/src/lib/deepEqual.js.map +1 -0
  481. package/packages/ai/src/lib/e2eDataTracking.js +241 -0
  482. package/packages/ai/src/lib/e2eDataTracking.js.map +1 -0
  483. package/packages/ai/src/lib/extractCriticalDataKeys.js +96 -0
  484. package/packages/ai/src/lib/extractCriticalDataKeys.js.map +1 -0
  485. package/packages/ai/src/lib/generateChangesEntityScenarioData.js +62 -5
  486. package/packages/ai/src/lib/generateChangesEntityScenarioData.js.map +1 -1
  487. package/packages/ai/src/lib/generateChangesEntityScenarios.js +81 -90
  488. package/packages/ai/src/lib/generateChangesEntityScenarios.js.map +1 -1
  489. package/packages/ai/src/lib/generateEntityDataStructure.js +5 -0
  490. package/packages/ai/src/lib/generateEntityDataStructure.js.map +1 -1
  491. package/packages/ai/src/lib/generateEntityScenarioData.js +904 -84
  492. package/packages/ai/src/lib/generateEntityScenarioData.js.map +1 -1
  493. package/packages/ai/src/lib/generateEntityScenarios.js +186 -82
  494. package/packages/ai/src/lib/generateEntityScenarios.js.map +1 -1
  495. package/packages/ai/src/lib/generateExecutionFlows.js +392 -0
  496. package/packages/ai/src/lib/generateExecutionFlows.js.map +1 -0
  497. package/packages/ai/src/lib/generateExecutionFlowsFromConditionalEffects.js +380 -0
  498. package/packages/ai/src/lib/generateExecutionFlowsFromConditionalEffects.js.map +1 -0
  499. package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js +1440 -0
  500. package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js.map +1 -0
  501. package/packages/ai/src/lib/generateExecutionFlowsFromJsxUsages.js +194 -0
  502. package/packages/ai/src/lib/generateExecutionFlowsFromJsxUsages.js.map +1 -0
  503. package/packages/ai/src/lib/getConditionalUsagesFromCode.js +84 -14
  504. package/packages/ai/src/lib/getConditionalUsagesFromCode.js.map +1 -1
  505. package/packages/ai/src/lib/guessScenarioDataFromDescription.js +2 -1
  506. package/packages/ai/src/lib/guessScenarioDataFromDescription.js.map +1 -1
  507. package/packages/ai/src/lib/isolateScopes.js +231 -4
  508. package/packages/ai/src/lib/isolateScopes.js.map +1 -1
  509. package/packages/ai/src/lib/mergeStatements.js +26 -3
  510. package/packages/ai/src/lib/mergeStatements.js.map +1 -1
  511. package/packages/ai/src/lib/promptGenerators/gatherAttributesMap.js +6 -0
  512. package/packages/ai/src/lib/promptGenerators/gatherAttributesMap.js.map +1 -1
  513. package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenarioDataGenerator.js +1 -1
  514. package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenarioDataGenerator.js.map +1 -1
  515. package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.js +21 -64
  516. package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.js.map +1 -1
  517. package/packages/ai/src/lib/promptGenerators/generateChunkPrompt.js +54 -0
  518. package/packages/ai/src/lib/promptGenerators/generateChunkPrompt.js.map +1 -0
  519. package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js +68 -6
  520. package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js.map +1 -1
  521. package/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.js +10 -34
  522. package/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.js.map +1 -1
  523. package/packages/ai/src/lib/promptGenerators/generateMissingKeysPrompt.js +45 -0
  524. package/packages/ai/src/lib/promptGenerators/generateMissingKeysPrompt.js.map +1 -0
  525. package/packages/ai/src/lib/promptGenerators/guessNewScenarioDataFromDescriptionGenerator.js +16 -3
  526. package/packages/ai/src/lib/promptGenerators/guessNewScenarioDataFromDescriptionGenerator.js.map +1 -1
  527. package/packages/ai/src/lib/promptGenerators/simplifyKeysForLLM.js +335 -0
  528. package/packages/ai/src/lib/promptGenerators/simplifyKeysForLLM.js.map +1 -0
  529. package/packages/ai/src/lib/resolvePathToControllable.js +667 -0
  530. package/packages/ai/src/lib/resolvePathToControllable.js.map +1 -0
  531. package/packages/ai/src/lib/splitOutsideParentheses.js +3 -1
  532. package/packages/ai/src/lib/splitOutsideParentheses.js.map +1 -1
  533. package/packages/ai/src/lib/worker/SerializableDataStructure.js +29 -0
  534. package/packages/ai/src/lib/worker/SerializableDataStructure.js.map +1 -1
  535. package/packages/ai/src/lib/worker/analyzeScopeWorker.js +4 -0
  536. package/packages/ai/src/lib/worker/analyzeScopeWorker.js.map +1 -1
  537. package/packages/analyze/src/lib/FileAnalyzer.js +15 -0
  538. package/packages/analyze/src/lib/FileAnalyzer.js.map +1 -1
  539. package/packages/analyze/src/lib/analysisContext.js +30 -5
  540. package/packages/analyze/src/lib/analysisContext.js.map +1 -1
  541. package/packages/analyze/src/lib/asts/nodes/index.js +1 -0
  542. package/packages/analyze/src/lib/asts/nodes/index.js.map +1 -1
  543. package/packages/analyze/src/lib/asts/nodes/isAsyncFunction.js +52 -0
  544. package/packages/analyze/src/lib/asts/nodes/isAsyncFunction.js.map +1 -0
  545. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js +218 -50
  546. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js.map +1 -1
  547. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js +10 -0
  548. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js.map +1 -1
  549. package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js +2 -0
  550. package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js.map +1 -1
  551. package/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.js +31 -7
  552. package/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.js.map +1 -1
  553. package/packages/analyze/src/lib/files/analyzeChange.js +21 -11
  554. package/packages/analyze/src/lib/files/analyzeChange.js.map +1 -1
  555. package/packages/analyze/src/lib/files/analyzeEntity.js +9 -8
  556. package/packages/analyze/src/lib/files/analyzeEntity.js.map +1 -1
  557. package/packages/analyze/src/lib/files/analyzeInitial.js +9 -10
  558. package/packages/analyze/src/lib/files/analyzeInitial.js.map +1 -1
  559. package/packages/analyze/src/lib/files/enums/steps.js +1 -1
  560. package/packages/analyze/src/lib/files/enums/steps.js.map +1 -1
  561. package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js +209 -0
  562. package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js.map +1 -0
  563. package/packages/analyze/src/lib/files/scenarios/enrichUnknownTypesFromSourceEquivalencies.js +85 -0
  564. package/packages/analyze/src/lib/files/scenarios/enrichUnknownTypesFromSourceEquivalencies.js.map +1 -0
  565. package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js +458 -48
  566. package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js.map +1 -1
  567. package/packages/analyze/src/lib/files/scenarios/generateChangesScenarioData.js +1 -1
  568. package/packages/analyze/src/lib/files/scenarios/generateChangesScenarioData.js.map +1 -1
  569. package/packages/analyze/src/lib/files/scenarios/generateChangesScenarios.js +29 -34
  570. package/packages/analyze/src/lib/files/scenarios/generateChangesScenarios.js.map +1 -1
  571. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +264 -78
  572. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
  573. package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js +96 -0
  574. package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js.map +1 -0
  575. package/packages/analyze/src/lib/files/scenarios/generateScenarioData.js +56 -69
  576. package/packages/analyze/src/lib/files/scenarios/generateScenarioData.js.map +1 -1
  577. package/packages/analyze/src/lib/files/scenarios/generateScenarios.js +4 -8
  578. package/packages/analyze/src/lib/files/scenarios/generateScenarios.js.map +1 -1
  579. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +372 -89
  580. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js.map +1 -1
  581. package/packages/analyze/src/lib/files/scenarios/mergeValidatedDataStructures.js +46 -9
  582. package/packages/analyze/src/lib/files/scenarios/mergeValidatedDataStructures.js.map +1 -1
  583. package/packages/aws/src/lib/ecs/ecsDefineContainer.js +2 -2
  584. package/packages/aws/src/lib/ecs/ecsDefineContainer.js.map +1 -1
  585. package/packages/aws/src/lib/ecs/ecsTaskFactory.js +17 -61
  586. package/packages/aws/src/lib/ecs/ecsTaskFactory.js.map +1 -1
  587. package/packages/database/src/lib/kysely/db.js +2 -2
  588. package/packages/database/src/lib/kysely/tables/debugReportsTable.js +9 -3
  589. package/packages/database/src/lib/kysely/tables/debugReportsTable.js.map +1 -1
  590. package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.js +7 -4
  591. package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.js.map +1 -1
  592. package/packages/generate/index.js +3 -0
  593. package/packages/generate/index.js.map +1 -1
  594. package/packages/generate/src/lib/componentScenarioPage/componentScenarioPageNext.js +16 -1
  595. package/packages/generate/src/lib/componentScenarioPage/componentScenarioPageNext.js.map +1 -1
  596. package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js +189 -0
  597. package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js.map +1 -0
  598. package/packages/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.js +53 -0
  599. package/packages/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.js.map +1 -0
  600. package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +8 -4
  601. package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
  602. package/packages/generate/src/lib/deepMerge.js +27 -1
  603. package/packages/generate/src/lib/deepMerge.js.map +1 -1
  604. package/packages/generate/src/lib/scenarioComponentForServer.js +89 -0
  605. package/packages/generate/src/lib/scenarioComponentForServer.js.map +1 -0
  606. package/packages/github/src/lib/loadOrCreateCommit.js +10 -0
  607. package/packages/github/src/lib/loadOrCreateCommit.js.map +1 -1
  608. package/packages/github/src/lib/syncPrimaryBranch.js +3 -0
  609. package/packages/github/src/lib/syncPrimaryBranch.js.map +1 -1
  610. package/packages/process/index.js +3 -0
  611. package/packages/process/index.js.map +1 -0
  612. package/packages/process/src/GlobalProcessManager.js.map +1 -0
  613. package/{background/src/lib/process → packages/process/src}/ProcessManager.js +1 -1
  614. package/packages/process/src/ProcessManager.js.map +1 -0
  615. package/packages/process/src/index.js.map +1 -0
  616. package/packages/process/src/managedExecAsync.js.map +1 -0
  617. package/packages/types/index.js.map +1 -1
  618. package/packages/utils/src/lib/lightweightEntityExtractor.js +25 -0
  619. package/packages/utils/src/lib/lightweightEntityExtractor.js.map +1 -1
  620. package/packages/utils/src/lib/safeFileName.js +29 -3
  621. package/packages/utils/src/lib/safeFileName.js.map +1 -1
  622. package/scripts/finalize-analyzer.cjs +6 -4
  623. package/analyzer-template/packages/ai/src/lib/findMatchingAttribute.ts +0 -102
  624. package/analyzer-template/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.ts +0 -197
  625. package/analyzer-template/packages/ai/src/lib/generateChangesEntityKeyAttributes.ts +0 -271
  626. package/analyzer-template/packages/ai/src/lib/generateEntityKeyAttributes.ts +0 -294
  627. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityKeyAttributesGenerator.ts +0 -67
  628. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.ts +0 -115
  629. package/analyzer-template/process/INTEGRATION_COMPLETE.md +0 -333
  630. package/analyzer-template/process/INTEGRATION_EXAMPLE.md +0 -525
  631. package/analyzer-template/process/README.md +0 -507
  632. package/background/src/lib/process/GlobalProcessManager.js.map +0 -1
  633. package/background/src/lib/process/ProcessManager.js.map +0 -1
  634. package/background/src/lib/process/index.js.map +0 -1
  635. package/background/src/lib/process/managedExecAsync.js.map +0 -1
  636. package/codeyam-cli/scripts/fixtures/cal.com/universal-mocks/packages/prisma/index.js +0 -238
  637. package/codeyam-cli/scripts/fixtures/cal.com/universal-mocks/packages/prisma/index.js.map +0 -1
  638. package/codeyam-cli/src/webserver/build/client/assets/EntityItem-CVbSvOjo.js +0 -1
  639. package/codeyam-cli/src/webserver/build/client/assets/EntityTypeIcon-DcwcHyl5.js +0 -1
  640. package/codeyam-cli/src/webserver/build/client/assets/InteractivePreview-WgwC1GfJ.js +0 -26
  641. package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-IEKom9O2.js +0 -3
  642. package/codeyam-cli/src/webserver/build/client/assets/LogViewer-BYnfxbUG.js +0 -3
  643. package/codeyam-cli/src/webserver/build/client/assets/ReportIssueModal-_lBPJCzG.js +0 -1
  644. package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-lHVhvsu_.js +0 -1
  645. package/codeyam-cli/src/webserver/build/client/assets/ScenarioViewer-d_TBk4GQ.js +0 -5
  646. package/codeyam-cli/src/webserver/build/client/assets/_index-kGT7VUqj.js +0 -1
  647. package/codeyam-cli/src/webserver/build/client/assets/activity.(_tab)-DDGmhu7P.js +0 -7
  648. package/codeyam-cli/src/webserver/build/client/assets/chevron-down-n_HPRfM_.js +0 -1
  649. package/codeyam-cli/src/webserver/build/client/assets/chunk-WWGJGFF6-CbVoyx1U.js +0 -26
  650. package/codeyam-cli/src/webserver/build/client/assets/circle-check-D1VOYveA.js +0 -1
  651. package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-YR8jjAlu.js +0 -1
  652. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-B8vP3V_s.js +0 -1
  653. package/codeyam-cli/src/webserver/build/client/assets/entity._sha._-CN6aLCT1.js +0 -16
  654. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-DA5Jeu2P.js +0 -1
  655. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.edit._scenarioId-BTeitalf.js +0 -5
  656. package/codeyam-cli/src/webserver/build/client/assets/entry.client-du6UEYD-.js +0 -13
  657. package/codeyam-cli/src/webserver/build/client/assets/fileTableUtils-BpjkhMoi.js +0 -1
  658. package/codeyam-cli/src/webserver/build/client/assets/files-BQGvk4lJ.js +0 -1
  659. package/codeyam-cli/src/webserver/build/client/assets/git-DVdYRT-I.js +0 -12
  660. package/codeyam-cli/src/webserver/build/client/assets/globals-CO-U8Bpo.css +0 -1
  661. package/codeyam-cli/src/webserver/build/client/assets/html2canvas-pro.esm-XQCGvadH.js +0 -5
  662. package/codeyam-cli/src/webserver/build/client/assets/index-DCG-vks0.js +0 -1
  663. package/codeyam-cli/src/webserver/build/client/assets/loader-circle-GazdNeLl.js +0 -1
  664. package/codeyam-cli/src/webserver/build/client/assets/manifest-0b694d28.js +0 -1
  665. package/codeyam-cli/src/webserver/build/client/assets/root-D3tQP7hx.js +0 -16
  666. package/codeyam-cli/src/webserver/build/client/assets/search-CIY6XmtE.js +0 -1
  667. package/codeyam-cli/src/webserver/build/client/assets/server-build-CMKNK2uU.css +0 -1
  668. package/codeyam-cli/src/webserver/build/client/assets/settings-CoMDgElu.js +0 -1
  669. package/codeyam-cli/src/webserver/build/client/assets/simulations-agkniXp2.js +0 -1
  670. package/codeyam-cli/src/webserver/build/client/assets/triangle-alert-B2VUcygF.js +0 -1
  671. package/codeyam-cli/src/webserver/build/client/assets/useReportContext-EvdK-zXP.js +0 -1
  672. package/codeyam-cli/src/webserver/build/server/assets/index-DGVHQEXD.js +0 -1
  673. package/codeyam-cli/src/webserver/build/server/assets/server-build-CghkTkIL.js +0 -166
  674. package/codeyam-cli/templates/debug-command.md +0 -303
  675. package/packages/ai/src/lib/findMatchingAttribute.js +0 -77
  676. package/packages/ai/src/lib/findMatchingAttribute.js.map +0 -1
  677. package/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.js +0 -136
  678. package/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.js.map +0 -1
  679. package/packages/ai/src/lib/generateChangesEntityKeyAttributes.js +0 -220
  680. package/packages/ai/src/lib/generateChangesEntityKeyAttributes.js.map +0 -1
  681. package/packages/ai/src/lib/generateEntityKeyAttributes.js +0 -241
  682. package/packages/ai/src/lib/generateEntityKeyAttributes.js.map +0 -1
  683. package/packages/ai/src/lib/isFrontend.js +0 -5
  684. package/packages/ai/src/lib/isFrontend.js.map +0 -1
  685. package/packages/ai/src/lib/promptGenerators/generateEntityKeyAttributesGenerator.js +0 -40
  686. package/packages/ai/src/lib/promptGenerators/generateEntityKeyAttributesGenerator.js.map +0 -1
  687. package/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.js +0 -72
  688. package/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.js.map +0 -1
  689. /package/analyzer-template/{process → packages/process/src}/GlobalProcessManager.ts +0 -0
  690. /package/analyzer-template/{process → packages/process/src}/ProcessManager.ts +0 -0
  691. /package/analyzer-template/{process → packages/process/src}/index.ts +0 -0
  692. /package/analyzer-template/{process → packages/process/src}/managedExecAsync.ts +0 -0
  693. /package/codeyam-cli/src/webserver/build/client/assets/{InteractivePreview-CMKNK2uU.css → styles-CMKNK2uU.css} +0 -0
  694. /package/{background/src/lib/process → packages/process/src}/GlobalProcessManager.js +0 -0
  695. /package/{background/src/lib/process → packages/process/src}/index.js +0 -0
  696. /package/{background/src/lib/process → packages/process/src}/managedExecAsync.js +0 -0
@@ -4,19 +4,26 @@ import { awsLog, awsLogDebugLevel } from '~codeyam/utils';
4
4
  import measureAndReportExecutionTime from '../../../utils/measureAndReportExecutionTime';
5
5
 
6
6
  import {
7
+ deduplicateFunctionSchemas,
8
+ detectWrapperRequirements,
7
9
  fillInDirectSchemaGapsAndUnknowns,
8
10
  generateEntityDataStructure,
9
- deduplicateFunctionSchemas,
11
+ getConditionalUsages,
10
12
  getEquivalentSignatureVariables,
11
13
  getFunctionSignature,
12
14
  getReturnValue,
13
15
  getSourceEquivalencies,
14
16
  getUsageEquivalencies,
15
- getConditionalUsages,
16
- detectWrapperRequirements,
17
+ getConditionalEffects,
18
+ getCompoundConditionals,
19
+ getChildBoundaryGatingConditions,
20
+ getJsxRenderingUsages,
17
21
  } from '~codeyam/ai';
18
22
  import type { AnalysisOptions } from '../analyzeEntities';
19
23
 
24
+ // Set to true to process entities one at a time for easier debugging.
25
+ const DEBUG_SEQUENTIAL_EXECUTION = false;
26
+
20
27
  // VERSION MARKER: server-only-detection-v2 (2025-12-28)
21
28
  // This version includes automatic detection of "use server" and "server-only" files
22
29
  // and runs server-only detection even for cached entities
@@ -31,263 +38,251 @@ export default async function prepareEntityDataStructures(
31
38
  projectAnalyzer: ProjectAnalyzer,
32
39
  options: AnalysisOptions,
33
40
  ): Promise<void> {
34
- console.log(
35
- 'CodeYam: prepareEntityDataStructures RUNNING (server-only-detection-v3)',
36
- );
37
- console.log(
38
- `CodeYam: prepareEntityDataStructures processing ${allEntities.size} entities`,
39
- );
40
-
41
- // Log all entity names for debugging
42
- const entityNames = Array.from(allEntities).map((e) => e.name);
43
- console.log(
44
- `CodeYam: prepareEntityDataStructures entity names: ${entityNames.join(', ')}`,
45
- );
46
-
47
- // Process entities in parallel for speed
48
- await Promise.all(
49
- Array.from(allEntities).map(async (entity) => {
50
- // Check if already has cached data structure (unless force is set)
51
- const hasCache = !!entity.metadata?.isolatedDataStructure;
52
- const shouldRegenerateDataStructure =
53
- !hasCache || options.force || options.forceAll;
54
-
55
- // PHASE 1: Generate data structure (only for non-cached entities or when forced)
56
- // Wrapped in its own try-catch so PHASE 2 always runs even if this fails
57
- if (shouldRegenerateDataStructure) {
58
- try {
59
- const fileAnalyzer = projectAnalyzer.getFileAnalyzerByPath(
60
- entity.resolvedFilePath ?? entity.filePath,
41
+ const processEntity = async (entity: Entity) => {
42
+ // Check if already has cached data structure (unless force is set)
43
+ const hasCache = !!entity.metadata?.isolatedDataStructure;
44
+ const shouldRegenerateDataStructure =
45
+ !hasCache || options.force || options.forceAll;
46
+
47
+ // PHASE 1: Generate data structure (only for non-cached entities or when forced)
48
+ // Wrapped in its own try-catch so PHASE 2 always runs even if this fails
49
+ if (shouldRegenerateDataStructure) {
50
+ try {
51
+ const fileAnalyzer = projectAnalyzer.getFileAnalyzerByPath(
52
+ entity.resolvedFilePath ?? entity.filePath,
53
+ );
54
+ if (!fileAnalyzer) {
55
+ awsLog(
56
+ `CodeYam: prepareEntityDataStructures: FileAnalyzer not found`,
57
+ {
58
+ entityFilePath: entity.filePath,
59
+ entityName: entity.name,
60
+ },
61
61
  );
62
- if (!fileAnalyzer) {
63
- awsLog(
64
- `CodeYam: prepareEntityDataStructures: FileAnalyzer not found`,
65
- {
66
- entityFilePath: entity.filePath,
67
- entityName: entity.name,
68
- },
69
- );
62
+ // Still continue to PHASE 2 for server-only detection
63
+ } else {
64
+ const dataStructureInfo =
65
+ await getEntityDataStructureAndFunctionCalls({
66
+ entity,
67
+ fileAnalyzer,
68
+ });
69
+
70
+ if (!dataStructureInfo?.isolatedDataStructure) {
71
+ // Data structure generation failed - entity will proceed with empty schemas
72
+ // This is okay - the entity can still be analyzed, just without detailed type info
73
+ if (['visual', 'library'].includes(entity.entityType)) {
74
+ // we'd really expect these to have data structures
75
+ awsLog(
76
+ `CodeYam: prepareEntityDataStructures: Failed to generate data structure for ${entity.filePath}:${entity.name}`,
77
+ );
78
+ }
70
79
  // Still continue to PHASE 2 for server-only detection
71
80
  } else {
72
- const dataStructureInfo =
73
- await getEntityDataStructureAndFunctionCalls({
74
- entity,
75
- fileAnalyzer,
76
- });
77
-
78
- if (!dataStructureInfo?.isolatedDataStructure) {
79
- // Data structure generation failed - entity will proceed with empty schemas
80
- // This is okay - the entity can still be analyzed, just without detailed type info
81
- if (['visual', 'library'].includes(entity.entityType)) {
82
- // we'd really expect these to have data structures
83
- awsLog(
84
- `CodeYam: prepareEntityDataStructures: Failed to generate data structure for ${entity.filePath}:${entity.name}`,
85
- );
81
+ const { isolatedDataStructure, functionCalls, callVariableNames } =
82
+ dataStructureInfo;
83
+
84
+ // Store data structure in entity metadata
85
+ entity.metadata ||= {};
86
+
87
+ // Deep clone dependencySchemas to avoid shared references
88
+ // We need to clone because getReturnValue() returns direct references to schema objects
89
+ // and multiple entities might reference the same dependency
90
+ const clonedDependencySchemas: typeof isolatedDataStructure.dependencySchemas =
91
+ {};
92
+ for (const filePath in isolatedDataStructure.dependencySchemas) {
93
+ clonedDependencySchemas[filePath] = {};
94
+ for (const entityName in isolatedDataStructure.dependencySchemas[
95
+ filePath
96
+ ]) {
97
+ const depSchema =
98
+ isolatedDataStructure.dependencySchemas[filePath][entityName];
99
+ clonedDependencySchemas[filePath][entityName] = {
100
+ signatureSchema: { ...depSchema.signatureSchema },
101
+ returnValueSchema: { ...depSchema.returnValueSchema },
102
+ usageEquivalencies: depSchema.usageEquivalencies,
103
+ sourceEquivalencies: depSchema.sourceEquivalencies,
104
+ };
86
105
  }
87
- // Still continue to PHASE 2 for server-only detection
88
- } else {
89
- const {
90
- isolatedDataStructure,
91
- functionCalls,
92
- callVariableNames,
93
- } = dataStructureInfo;
94
-
95
- // Store data structure in entity metadata
96
- entity.metadata ||= {};
97
-
98
- // Deep clone dependencySchemas to avoid shared references
99
- // We need to clone because getReturnValue() returns direct references to schema objects
100
- // and multiple entities might reference the same dependency
101
- const clonedDependencySchemas: typeof isolatedDataStructure.dependencySchemas =
102
- {};
103
- for (const filePath in isolatedDataStructure.dependencySchemas) {
104
- clonedDependencySchemas[filePath] = {};
105
- for (const entityName in isolatedDataStructure
106
- .dependencySchemas[filePath]) {
107
- const depSchema =
108
- isolatedDataStructure.dependencySchemas[filePath][
109
- entityName
110
- ];
111
- clonedDependencySchemas[filePath][entityName] = {
112
- signatureSchema: { ...depSchema.signatureSchema },
113
- returnValueSchema: { ...depSchema.returnValueSchema },
114
- usageEquivalencies: depSchema.usageEquivalencies,
115
- sourceEquivalencies: depSchema.sourceEquivalencies,
116
- };
117
- }
106
+ }
107
+
108
+ // LOGGING: Track dependencySchemas entity names for debugging :: format issues
109
+ const allEntityNames: string[] = [];
110
+ for (const filePath in clonedDependencySchemas) {
111
+ for (const entityName in clonedDependencySchemas[filePath]) {
112
+ allEntityNames.push(`${filePath}:${entityName}`);
118
113
  }
114
+ }
115
+ entity.metadata.isolatedDataStructure = {
116
+ signatureSchema: deduplicateFunctionSchemas(
117
+ isolatedDataStructure.signatureSchema,
118
+ ),
119
+ returnValueSchema: deduplicateFunctionSchemas(
120
+ isolatedDataStructure.returnValueSchema,
121
+ ),
122
+ equivalentSignatureVariables:
123
+ isolatedDataStructure.equivalentSignatureVariables,
124
+ dependencySchemas: clonedDependencySchemas,
125
+ environmentVariables: isolatedDataStructure.environmentVariables,
126
+ // Use enriched conditional usages with source tracing from analysis
127
+ conditionalUsages: isolatedDataStructure.conditionalUsages,
128
+ // Include conditional effects for execution flow generation
129
+ conditionalEffects: isolatedDataStructure.conditionalEffects,
130
+ // Include compound conditionals for complete execution flow generation
131
+ compoundConditionals: isolatedDataStructure.compoundConditionals,
132
+ // Include root entity's equivalencies for merge step
133
+ usageEquivalencies: isolatedDataStructure.usageEquivalencies,
134
+ sourceEquivalencies: isolatedDataStructure.sourceEquivalencies,
135
+ // Include child boundary gating conditions for child component flow merging
136
+ childBoundaryGatingConditions:
137
+ isolatedDataStructure.childBoundaryGatingConditions,
138
+ // Include JSX rendering usages for array size and text length flow generation
139
+ jsxRenderingUsages: isolatedDataStructure.jsxRenderingUsages,
140
+ };
141
+
142
+ // Detect wrapper requirements (Context providers, etc.)
143
+ const wrapperRequirements = detectWrapperRequirements({
144
+ entity,
145
+ fileAnalyzer,
146
+ });
147
+ if (wrapperRequirements.length > 0) {
148
+ entity.metadata.wrapperRequirements = wrapperRequirements;
149
+ }
119
150
 
120
- entity.metadata.isolatedDataStructure = {
121
- signatureSchema: deduplicateFunctionSchemas(
122
- isolatedDataStructure.signatureSchema,
123
- ),
124
- returnValueSchema: deduplicateFunctionSchemas(
125
- isolatedDataStructure.returnValueSchema,
126
- ),
127
- equivalentSignatureVariables:
128
- isolatedDataStructure.equivalentSignatureVariables,
129
- dependencySchemas: clonedDependencySchemas,
130
- environmentVariables:
131
- isolatedDataStructure.environmentVariables,
132
- // Use enriched conditional usages with source tracing from analysis
133
- conditionalUsages: isolatedDataStructure.conditionalUsages,
134
- };
135
-
136
- // Detect wrapper requirements (Context providers, etc.)
137
- const wrapperRequirements = detectWrapperRequirements({
138
- entity,
139
- fileAnalyzer,
140
- });
141
- if (wrapperRequirements.length > 0) {
142
- entity.metadata.wrapperRequirements = wrapperRequirements;
151
+ // Annotate imported exports with function call information
152
+ const importedExports = entity.metadata.importedExports ?? [];
153
+ for (const importedExport of importedExports) {
154
+ const relevantCalls = functionCalls[importedExport.name];
155
+ if (relevantCalls) {
156
+ importedExport.calls = relevantCalls;
143
157
  }
158
+ const relevantVariableNames =
159
+ callVariableNames[importedExport.name];
160
+ if (relevantVariableNames) {
161
+ importedExport.callVariableNames = relevantVariableNames;
162
+ }
163
+ }
144
164
 
145
- // Annotate imported exports with function call information
146
- const importedExports = entity.metadata.importedExports ?? [];
147
- for (const importedExport of importedExports) {
148
- const relevantCalls = functionCalls[importedExport.name];
165
+ // Annotate node module imports with function call information
166
+ for (const [path, infos] of Object.entries(
167
+ entity.metadata.nodeModuleImports ?? {},
168
+ )) {
169
+ for (const info of infos) {
170
+ const relevantCalls = functionCalls[info.name];
149
171
  if (relevantCalls) {
150
- importedExport.calls = relevantCalls;
172
+ info.calls = relevantCalls;
151
173
  }
152
- const relevantVariableNames =
153
- callVariableNames[importedExport.name];
174
+ const relevantVariableNames = callVariableNames[info.name];
154
175
  if (relevantVariableNames) {
155
- importedExport.callVariableNames = relevantVariableNames;
156
- }
157
- }
158
-
159
- // Annotate node module imports with function call information
160
- for (const [path, infos] of Object.entries(
161
- entity.metadata.nodeModuleImports ?? {},
162
- )) {
163
- for (const info of infos) {
164
- const relevantCalls = functionCalls[info.name];
165
- if (relevantCalls) {
166
- info.calls = relevantCalls;
167
- }
168
- const relevantVariableNames = callVariableNames[info.name];
169
- if (relevantVariableNames) {
170
- info.callVariableNames = relevantVariableNames;
171
- }
176
+ info.callVariableNames = relevantVariableNames;
172
177
  }
173
178
  }
174
179
  }
175
180
  }
176
- } catch (phase1Error) {
177
- console.warn(
178
- `CodeYam: prepareEntityDataStructures: PHASE 1 error for ${entity.filePath}:${entity.name}:`,
179
- phase1Error,
180
- );
181
- // Continue to PHASE 2 - server-only detection should still run
182
181
  }
183
- }
184
-
185
- try {
186
- // PHASE 2: Server-only detection and isMocked determination
187
- // This runs for ALL entities, even those with cached data structures
188
- // because server-only detection may have been added after the entity was cached
189
- const importedExports = entity.metadata?.importedExports ?? [];
190
- console.log(
191
- `CodeYam: [${entity.name}] Processing ${importedExports.length} importedExports for isMocked determination (cached: ${hasCache})`,
182
+ } catch (phase1Error) {
183
+ console.warn(
184
+ `CodeYam: prepareEntityDataStructures: PHASE 1 error for ${entity.filePath}:${entity.name}:`,
185
+ phase1Error,
192
186
  );
187
+ // Continue to PHASE 2 - server-only detection should still run
188
+ }
189
+ }
193
190
 
194
- const mockedDependencies = determineMockedDependencies(entity);
195
- for (const importedExport of importedExports) {
196
- // Skip if already has a definitive isMocked value (true or false, not null)
197
- // But re-check if isMocked is null or undefined - this handles previously cached entities
198
- if (
199
- importedExport.isMocked === true ||
200
- importedExport.isMocked === false
201
- ) {
202
- console.log(
203
- `CodeYam: [${entity.name}] SKIP ${importedExport.name} - already has isMocked=${importedExport.isMocked}`,
204
- );
205
- continue;
206
- }
207
-
208
- // Never mock visual components - they render UI and should use real implementation
209
- if (importedExport.entityType === 'visual') {
210
- console.log(
211
- `CodeYam: [${entity.name}] SKIP ${importedExport.name} - visual component, setting isMocked=false`,
212
- );
213
- importedExport.isMocked = false;
214
- continue;
215
- }
216
-
217
- // Always mock imports from server-only files ("use server" or import "server-only")
218
- // These files contain Server Actions or server-only code that cannot run on the client
219
- const importedFilePath =
220
- importedExport.resolvedFilePath ?? importedExport.filePath;
221
- const importedFileAnalyzer =
222
- projectAnalyzer.getFileAnalyzerByPath(importedFilePath);
223
- // Use sourceFile.getText() which is always available, unlike file.content which is lazy-loaded
224
- const importedFileContent =
225
- importedFileAnalyzer?.sourceFile?.getText();
226
-
227
- const isServerOnly = importedFileContent
228
- ? isServerOnlyFile(importedFileContent)
229
- : false;
230
- console.log(
231
- `CodeYam: [${entity.name}] CHECK ${importedExport.name} from ${importedFilePath}:`,
232
- {
233
- hasFileAnalyzer: !!importedFileAnalyzer,
234
- hasSourceFile: !!importedFileAnalyzer?.sourceFile,
235
- hasFileContent: !!importedFileContent,
236
- contentFirst50Chars: importedFileContent
237
- ?.substring(0, 50)
238
- ?.replace(/\n/g, '\\n'),
239
- isServerOnly,
240
- },
241
- );
191
+ try {
192
+ // PHASE 2: Server-only detection and isMocked determination
193
+ // This runs for ALL entities, even those with cached data structures
194
+ // because server-only detection may have been added after the entity was cached
195
+ const importedExports = entity.metadata?.importedExports ?? [];
196
+ const mockedDependencies = determineMockedDependencies(entity);
197
+ for (const importedExport of importedExports) {
198
+ // Skip if already has a definitive isMocked value (true or false, not null)
199
+ // But re-check if isMocked is null or undefined - this handles previously cached entities
200
+ if (
201
+ importedExport.isMocked === true ||
202
+ importedExport.isMocked === false
203
+ ) {
204
+ continue;
205
+ }
242
206
 
243
- if (importedFileContent && isServerOnly) {
244
- console.log(
245
- `CodeYam: [${entity.name}] ✓ MARKING ${importedExport.name} as isMocked=true (server-only file detected)`,
246
- );
247
- importedExport.isMocked = true;
248
- continue;
249
- }
207
+ // Never mock visual components - they render UI and should use real implementation
208
+ if (importedExport.entityType === 'visual') {
209
+ importedExport.isMocked = false;
210
+ continue;
211
+ }
250
212
 
251
- const matchesMockedDep = mockedDependencies.some(
252
- (dep) =>
253
- dep.filePath === importedExport.filePath &&
254
- dep.entityName === importedExport.name,
255
- );
256
- importedExport.isMocked = matchesMockedDep;
257
- console.log(
258
- `CodeYam: [${entity.name}] ${importedExport.name} isMocked=${matchesMockedDep} (from mockedDependencies)`,
259
- );
213
+ // Always mock imports from server-only files ("use server" or import "server-only")
214
+ // These files contain Server Actions or server-only code that cannot run on the client
215
+ const importedFilePath =
216
+ importedExport.resolvedFilePath ?? importedExport.filePath;
217
+ const importedFileAnalyzer =
218
+ projectAnalyzer.getFileAnalyzerByPath(importedFilePath);
219
+ // Use sourceFile.getText() which is always available, unlike file.content which is lazy-loaded
220
+ const importedFileContent = importedFileAnalyzer?.sourceFile?.getText();
221
+
222
+ const isServerOnly = importedFileContent
223
+ ? isServerOnlyFile(importedFileContent)
224
+ : false;
225
+
226
+ if (importedFileContent && isServerOnly) {
227
+ importedExport.isMocked = true;
228
+ continue;
260
229
  }
261
230
 
262
- // Browser globals that should always be mocked (they make network calls)
263
- const alwaysMockedBrowserGlobals = ['fetch', 'EventSource'];
264
-
265
- for (const [path, infos] of Object.entries(
266
- entity.metadata?.nodeModuleImports ?? {},
267
- )) {
268
- for (const info of infos) {
269
- if (info.isMocked === undefined || info.isMocked === null) {
270
- // Browser globals should always be mocked
271
- if (alwaysMockedBrowserGlobals.includes(path)) {
272
- info.isMocked = true;
273
- } else {
274
- info.isMocked = mockedDependencies.some(
275
- (dep) =>
276
- dep.filePath === path && dep.entityName === info.name,
277
- );
278
- }
231
+ const matchesMockedDep = mockedDependencies.some(
232
+ (dep) =>
233
+ dep.filePath === importedExport.filePath &&
234
+ dep.entityName === importedExport.name,
235
+ );
236
+ importedExport.isMocked = matchesMockedDep;
237
+ }
238
+
239
+ // Browser globals that should always be mocked (they make network calls)
240
+ const alwaysMockedBrowserGlobals = ['fetch', 'EventSource'];
241
+
242
+ for (const [path, infos] of Object.entries(
243
+ entity.metadata?.nodeModuleImports ?? {},
244
+ )) {
245
+ for (const info of infos) {
246
+ if (info.isMocked === undefined || info.isMocked === null) {
247
+ // Browser globals should always be mocked
248
+ if (alwaysMockedBrowserGlobals.includes(path)) {
249
+ info.isMocked = true;
250
+ } else {
251
+ // Check if this dependency should be mocked
252
+ // Match both exact entityName and variable-qualified entityNames
253
+ // e.g., "useFetcher" matches "useFetcher" OR "useFetcher::userFetcher"
254
+ info.isMocked = mockedDependencies.some(
255
+ (dep) =>
256
+ dep.filePath === path &&
257
+ (dep.entityName === info.name ||
258
+ dep.entityName.startsWith(info.name + '::')),
259
+ );
279
260
  }
280
261
  }
281
262
  }
282
- } catch (error) {
283
- console.warn(
284
- `CodeYam: prepareEntityDataStructures: Error preparing ${entity.filePath}:${entity.name}:`,
285
- error,
286
- );
287
- // Continue with other entities - this one will have empty schemas
288
263
  }
289
- }),
290
- );
264
+ } catch (error) {
265
+ console.warn(
266
+ `CodeYam: prepareEntityDataStructures: Error preparing ${entity.filePath}:${entity.name}:`,
267
+ error,
268
+ );
269
+ // Continue with other entities - this one will have empty schemas
270
+ }
271
+ };
272
+
273
+ const entities = Array.from(allEntities);
274
+ const sequential =
275
+ DEBUG_SEQUENTIAL_EXECUTION || options.sequentialDataStructurePrep;
276
+
277
+ if (sequential) {
278
+ // Sequential execution for debugging - process one entity at a time
279
+ for (const entity of entities) {
280
+ await processEntity(entity);
281
+ }
282
+ } else {
283
+ // Parallel execution for speed
284
+ await Promise.all(entities.map(processEntity));
285
+ }
291
286
  }
292
287
 
293
288
  /**
@@ -337,19 +332,21 @@ async function getEntityDataStructureAndFunctionCalls({
337
332
  functionName: importedExport.name,
338
333
  });
339
334
 
340
- // If no signature found, this function doesn't exist in the analysis
341
- if (!signatureSchema) {
342
- return acc;
343
- }
344
-
345
335
  const returnValueSchema = getReturnValue(dataStructure, {
346
336
  functionName: importedExport.name,
347
337
  });
348
338
 
339
+ // If neither signature nor return value found, this function doesn't exist in the analysis.
340
+ // We need to check BOTH because hooks like useParams() have no signature (no arguments)
341
+ // but DO have a return value that needs to be mocked.
342
+ if (!signatureSchema && !returnValueSchema) {
343
+ return acc;
344
+ }
345
+
349
346
  // Clone schemas before deduplication to avoid mutating shared references
350
347
  // getReturnValue() and getFunctionSignature() return direct references, so we need
351
348
  // to clone them before passing to deduplicateFunctionSchemas (which may mutate)
352
- const clonedSignatureSchema = { ...signatureSchema };
349
+ const clonedSignatureSchema = { ...(signatureSchema ?? {}) };
353
350
  const clonedReturnValueSchema = { ...(returnValueSchema ?? {}) };
354
351
 
355
352
  acc[importedExport.filePath] ||= {};
@@ -362,6 +359,170 @@ async function getEntityDataStructureAndFunctionCalls({
362
359
  getSourceEquivalencies(dataStructure, importedExport.name) ?? {},
363
360
  };
364
361
 
362
+ // Also create variable-qualified entries to preserve distinct return type schemas
363
+ // when the same function is called multiple times with different type parameters
364
+ // (e.g., useFetcher<UserData>() vs useFetcher<ReportData>()).
365
+ //
366
+ // Each parameterized call is a SEPARATE entry in externalFunctionCalls, so we need
367
+ // to iterate over ALL matching calls (not just the first one).
368
+ const matchingCalls = dataStructure.externalFunctionCalls.filter(
369
+ (fc) =>
370
+ fc.name === importedExport.name ||
371
+ fc.name.startsWith(importedExport.name + '<'),
372
+ );
373
+
374
+ for (const efc of matchingCalls) {
375
+ // Check if this call has perVariableSchemas (multiple calls with variable tracking)
376
+ if (efc?.perVariableSchemas) {
377
+ // Check if perVariableSchemas has indexed keys (e.g., "fetcher[1]") which indicates
378
+ // variable reuse with DIFFERENT call signatures (e.g., let fetcher = useFetcher<A>(); fetcher = useFetcher<B>();)
379
+ // In this case, we need to create SEPARATE entries for each call signature.
380
+ const perVarKeys = Object.keys(efc.perVariableSchemas);
381
+ const hasIndexedKeys = perVarKeys.some((key) => /\[\d+\]$/.test(key));
382
+
383
+ if (
384
+ hasIndexedKeys &&
385
+ efc.callSignatureToVariable &&
386
+ efc.allCallSignatures
387
+ ) {
388
+ // Variable reuse case: create separate entries for each call signature
389
+ // Map from call signature to its variable key in perVariableSchemas
390
+ // e.g., useFetcher<ConfigData>() -> 'fetcher', useFetcher<SettingsData>() -> 'fetcher[1]'
391
+ const varNameCounts: Record<string, number> = {};
392
+ for (const callSig of efc.allCallSignatures) {
393
+ const varName = efc.callSignatureToVariable[callSig];
394
+ if (!varName) continue;
395
+
396
+ // Track occurrence count for this variable name
397
+ const occurrence = varNameCounts[varName] ?? 0;
398
+ varNameCounts[varName] = occurrence + 1;
399
+
400
+ // Get the key in perVariableSchemas (indexed if reused)
401
+ const perVarKey =
402
+ occurrence === 0 ? varName : `${varName}[${occurrence}]`;
403
+ const varSchema = efc.perVariableSchemas[perVarKey];
404
+
405
+ if (varSchema && Object.keys(varSchema).length > 0) {
406
+ // Create entry with this call signature as the key
407
+ const rewrittenSchema: Record<string, string> = {};
408
+ rewrittenSchema[`${callSig}.functionCallReturnValue`] =
409
+ 'object';
410
+
411
+ for (const [path, type] of Object.entries(varSchema)) {
412
+ const rewrittenPath = path.startsWith(callSig)
413
+ ? path
414
+ : `${callSig}.${path}`;
415
+ rewrittenSchema[rewrittenPath] = type;
416
+ }
417
+
418
+ acc[importedExport.filePath][callSig] = {
419
+ signatureSchema: deduplicateFunctionSchemas({
420
+ ...signatureSchema,
421
+ }),
422
+ returnValueSchema:
423
+ deduplicateFunctionSchemas(rewrittenSchema),
424
+ usageEquivalencies:
425
+ getUsageEquivalencies(dataStructure, importedExport.name) ??
426
+ {},
427
+ sourceEquivalencies:
428
+ getSourceEquivalencies(
429
+ dataStructure,
430
+ importedExport.name,
431
+ ) ?? {},
432
+ };
433
+ }
434
+ }
435
+ } else {
436
+ // Destructuring case: const { a, b, c } = useLoaderData()
437
+ // Merge all variable schemas into a single entry with the call signature as key
438
+ const callSignatureKey = efc.callSignature;
439
+
440
+ // Merge all variable schemas by prepending the call signature to each path.
441
+ // perVariableSchemas paths are like "functionCallReturnValue.entities.sha"
442
+ // We need to prefix them with the call signature to get:
443
+ // "useLoaderData<typeof loader>().functionCallReturnValue.entities.sha"
444
+ const mergedReturnValueSchema: Record<string, string> = {};
445
+
446
+ // Set the top-level return value as object since it contains named properties
447
+ mergedReturnValueSchema[
448
+ `${callSignatureKey}.functionCallReturnValue`
449
+ ] = 'object';
450
+
451
+ for (const [varName, perVarSchema] of Object.entries(
452
+ efc.perVariableSchemas,
453
+ )) {
454
+ for (const [path, type] of Object.entries(perVarSchema)) {
455
+ // Only prepend the call signature if the path doesn't already have it.
456
+ // perVariableSchemas paths may already include the call signature prefix
457
+ // (e.g., "useCustomSizes(projectSlug).functionCallReturnValue.customSizes")
458
+ // depending on how they were built. If so, use the path as-is.
459
+ const rewrittenPath = path.startsWith(callSignatureKey)
460
+ ? path
461
+ : `${callSignatureKey}.${path}`;
462
+ mergedReturnValueSchema[rewrittenPath] = type;
463
+ }
464
+ }
465
+
466
+ acc[importedExport.filePath][callSignatureKey] = {
467
+ signatureSchema: deduplicateFunctionSchemas({
468
+ ...signatureSchema,
469
+ }),
470
+ returnValueSchema: deduplicateFunctionSchemas(
471
+ mergedReturnValueSchema,
472
+ ),
473
+ usageEquivalencies:
474
+ getUsageEquivalencies(dataStructure, importedExport.name) ?? {},
475
+ sourceEquivalencies:
476
+ getSourceEquivalencies(dataStructure, importedExport.name) ??
477
+ {},
478
+ };
479
+ }
480
+ } else if (efc?.receivingVariableNames?.length === 1) {
481
+ // For parameterized calls like useFetcher<UserData>(), each is a separate entry
482
+ // with a single receivingVariableName. Use the call signature as the key.
483
+ const varName = efc.receivingVariableNames[0];
484
+
485
+ // Use the call signature as the key (e.g., "useFetcher<UserData>()")
486
+ const callSignatureKey = efc.callSignature;
487
+
488
+ // PREFER perVariableSchemas over getReturnValue() when available
489
+ // perVariableSchemas has the SPECIFIC schema for this parameterized call,
490
+ // while getReturnValue() may return merged schemas from multiple calls
491
+ let parameterizedReturnValue: Record<string, string> | null = null;
492
+
493
+ if (efc.perVariableSchemas && efc.perVariableSchemas[varName]) {
494
+ // Use the specific schema from perVariableSchemas
495
+ parameterizedReturnValue = efc.perVariableSchemas[varName] ?? null;
496
+ }
497
+
498
+ // Fallback to getReturnValue if perCallSignatureSchemas not available
499
+ if (!parameterizedReturnValue) {
500
+ parameterizedReturnValue = getReturnValue(dataStructure, {
501
+ functionName: efc.name, // Use the full parameterized name
502
+ });
503
+ }
504
+
505
+ if (
506
+ parameterizedReturnValue &&
507
+ Object.keys(parameterizedReturnValue).length > 0
508
+ ) {
509
+ acc[importedExport.filePath][callSignatureKey] = {
510
+ signatureSchema: deduplicateFunctionSchemas({
511
+ ...signatureSchema,
512
+ }),
513
+ returnValueSchema: deduplicateFunctionSchemas({
514
+ ...parameterizedReturnValue,
515
+ }),
516
+ usageEquivalencies:
517
+ getUsageEquivalencies(dataStructure, importedExport.name) ?? {},
518
+ sourceEquivalencies:
519
+ getSourceEquivalencies(dataStructure, importedExport.name) ??
520
+ {},
521
+ };
522
+ }
523
+ }
524
+ }
525
+
365
526
  return acc;
366
527
  },
367
528
  {} as {
@@ -394,6 +555,21 @@ async function getEntityDataStructureAndFunctionCalls({
394
555
  // Get enriched conditional usages with source tracing
395
556
  const conditionalUsages = getConditionalUsages(dataStructure);
396
557
 
558
+ // Get conditional effects (setter calls inside conditionals)
559
+ const conditionalEffects = getConditionalEffects(dataStructure);
560
+
561
+ // Get compound conditionals (grouped conditions that must all be true)
562
+ const compoundConditionals = getCompoundConditionals(dataStructure);
563
+ const rawUsageEquivalencies = getUsageEquivalencies(dataStructure);
564
+ const rawSourceEquivalencies = getSourceEquivalencies(dataStructure);
565
+
566
+ // Get child boundary gating conditions for child component flow merging
567
+ const childBoundaryGatingConditions =
568
+ getChildBoundaryGatingConditions(dataStructure);
569
+
570
+ // Get JSX rendering usages for array size and text length flow generation
571
+ const jsxRenderingUsages = getJsxRenderingUsages(dataStructure);
572
+
397
573
  const isolatedDataStructure = {
398
574
  signatureSchema: deduplicateFunctionSchemas(clonedRawSignature),
399
575
  returnValueSchema: deduplicateFunctionSchemas(clonedRawReturnValue),
@@ -403,6 +579,28 @@ async function getEntityDataStructureAndFunctionCalls({
403
579
  environmentVariables: dataStructure.environmentVariables,
404
580
  conditionalUsages:
405
581
  Object.keys(conditionalUsages).length > 0 ? conditionalUsages : undefined,
582
+ // Include conditional effects for execution flow generation
583
+ conditionalEffects:
584
+ conditionalEffects.length > 0 ? conditionalEffects : undefined,
585
+ // Include compound conditionals for complete execution flow generation
586
+ // These capture grouped conditions like (a || b) && !c && !d
587
+ compoundConditionals:
588
+ compoundConditionals.length > 0 ? compoundConditionals : undefined,
589
+ // Include root entity's equivalencies so they can be used during merge.
590
+ // These show how the parent's data flows to/from child components.
591
+ // E.g., for SurveysList, usageEquivalencies shows surveys[] → SurveyCard().signature[0].survey
592
+ usageEquivalencies: rawUsageEquivalencies ?? {},
593
+ sourceEquivalencies: rawSourceEquivalencies ?? {},
594
+ // Include child boundary gating conditions for child component flow merging
595
+ // Maps child component names to the conditions that must be true for them to render
596
+ childBoundaryGatingConditions:
597
+ Object.keys(childBoundaryGatingConditions).length > 0
598
+ ? childBoundaryGatingConditions
599
+ : undefined,
600
+ // Include JSX rendering usages for array size and text length flow generation
601
+ // These track arrays rendered via .map() and strings interpolated in JSX
602
+ jsxRenderingUsages:
603
+ jsxRenderingUsages.length > 0 ? jsxRenderingUsages : undefined,
406
604
  };
407
605
 
408
606
  const functionCalls: Record<string, string[]> = {};
@@ -415,31 +613,6 @@ async function getEntityDataStructureAndFunctionCalls({
415
613
  efc.callSignature.startsWith(entityName),
416
614
  );
417
615
 
418
- // DEBUG: Log external function calls info for useFetcher
419
- if (entityName === 'useFetcher' || entityName.includes('Fetcher')) {
420
- console.log(
421
- 'CodeYam DEBUG prepareDataStructures:',
422
- JSON.stringify(
423
- {
424
- entityName,
425
- filePath,
426
- totalExternalFunctionCalls:
427
- dataStructure.externalFunctionCalls.length,
428
- matchingCallsCount: matchingCalls.length,
429
- matchingCalls: matchingCalls.map((efc) => ({
430
- name: efc.name,
431
- callSignature: efc.callSignature,
432
- allCallSignatures: efc.allCallSignatures,
433
- receivingVariableNames: efc.receivingVariableNames,
434
- callSignatureToVariable: efc.callSignatureToVariable,
435
- })),
436
- },
437
- null,
438
- 2,
439
- ),
440
- );
441
- }
442
-
443
616
  // Collect all call signatures from all matching efc entries
444
617
  // Each efc may have just one callSignature, or allCallSignatures if merged
445
618
  const allSignatures: string[] = [];
@@ -485,6 +658,7 @@ async function getEntityDataStructureAndFunctionCalls({
485
658
  ) {
486
659
  variableNames.push(...aggregatedReceivingVariableNames);
487
660
  }
661
+
488
662
  if (variableNames.length > 0) {
489
663
  callVariableNames[entityName] = variableNames;
490
664
  }
@@ -704,14 +878,28 @@ export function determineMockedDependencies(entity: Entity) {
704
878
  entityReturnValueSchema,
705
879
  );
706
880
 
881
+ // Check if returnValueSchema is completely empty (no traced calls at all)
882
+ // This indicates a side-effect function that we couldn't trace
883
+ const returnValueSchemaEmpty =
884
+ Object.keys(entityReturnValueSchema ?? {}).length === 0;
885
+
707
886
  const entityShouldBeMocked =
708
887
  !onlyHasJsxComponents &&
709
888
  (isValidationFn ||
710
889
  hasChainedCallsWithNoReturn ||
890
+ // If entity takes no args AND has return value, it reads from external source
891
+ // Examples: useParams(), useAuth(), getConfig()
892
+ (emptySignature && hasReturnValue) ||
893
+ // If entity takes no args AND returnValueSchema is completely empty,
894
+ // it's a side-effect function calling external services
895
+ // Examples: logPageView(), initializeAnalytics(), trackEvent()
896
+ // NOTE: We don't mock entities that have function markers but no return value
897
+ // (like React components: FileProvider() has 'function' type but no return data)
898
+ (emptySignature && returnValueSchemaEmpty) ||
711
899
  ((signatureHasFunctions || returnValueHasFunctions) &&
712
900
  hasReturnValue &&
713
- ((emptySignature && hasReturnValue) ||
714
- (!complexSignature && complexReturnValue))));
901
+ !complexSignature &&
902
+ complexReturnValue));
715
903
 
716
904
  if (entityShouldBeMocked) {
717
905
  mockedEntities.push({