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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (645) hide show
  1. package/analyzer-template/.build-info.json +8 -8
  2. package/analyzer-template/common/execAsync.ts +1 -1
  3. package/analyzer-template/log.txt +3 -3
  4. package/analyzer-template/package.json +9 -6
  5. package/analyzer-template/packages/ai/index.ts +10 -3
  6. package/analyzer-template/packages/ai/package.json +1 -1
  7. package/analyzer-template/packages/ai/src/lib/__mocks__/completionCall.ts +122 -0
  8. package/analyzer-template/packages/ai/src/lib/analyzeScope.ts +126 -6
  9. package/analyzer-template/packages/ai/src/lib/astScopes/arrayDerivationDetector.ts +199 -0
  10. package/analyzer-template/packages/ai/src/lib/astScopes/astScopeAnalyzer.ts +116 -1
  11. package/analyzer-template/packages/ai/src/lib/astScopes/conditionalEffectsExtractor.ts +644 -0
  12. package/analyzer-template/packages/ai/src/lib/astScopes/methodSemantics.ts +140 -6
  13. package/analyzer-template/packages/ai/src/lib/astScopes/patterns/ifStatementHandler.ts +18 -0
  14. package/analyzer-template/packages/ai/src/lib/astScopes/patterns/switchStatementHandler.ts +15 -0
  15. package/analyzer-template/packages/ai/src/lib/astScopes/patterns/variableDeclarationHandler.ts +181 -1
  16. package/analyzer-template/packages/ai/src/lib/astScopes/processExpression.ts +849 -9
  17. package/analyzer-template/packages/ai/src/lib/astScopes/types.ts +244 -0
  18. package/analyzer-template/packages/ai/src/lib/checkAllAttributes.ts +29 -10
  19. package/analyzer-template/packages/ai/src/lib/completionCall.ts +216 -36
  20. package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +892 -117
  21. package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.ts +2 -1
  22. package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.ts +296 -35
  23. package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.ts +120 -76
  24. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.ts +80 -5
  25. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertNullToUndefinedBySchema.ts +98 -0
  26. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.ts +8 -1
  27. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/fixNullIdsBySchema.ts +129 -0
  28. package/analyzer-template/packages/ai/src/lib/dataStructureChunking.ts +156 -0
  29. package/analyzer-template/packages/ai/src/lib/deepEqual.ts +30 -0
  30. package/analyzer-template/packages/ai/src/lib/e2eDataTracking.ts +334 -0
  31. package/analyzer-template/packages/ai/src/lib/extractCriticalDataKeys.ts +120 -0
  32. package/analyzer-template/packages/ai/src/lib/generateChangesEntityScenarioData.ts +74 -7
  33. package/analyzer-template/packages/ai/src/lib/generateChangesEntityScenarios.ts +86 -142
  34. package/analyzer-template/packages/ai/src/lib/generateEntityDataStructure.ts +1 -0
  35. package/analyzer-template/packages/ai/src/lib/generateEntityScenarioData.ts +1111 -87
  36. package/analyzer-template/packages/ai/src/lib/generateEntityScenarios.ts +191 -191
  37. package/analyzer-template/packages/ai/src/lib/generateExecutionFlows.ts +570 -0
  38. package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionalEffects.ts +528 -0
  39. package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionals.ts +1977 -0
  40. package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromJsxUsages.ts +239 -0
  41. package/analyzer-template/packages/ai/src/lib/guessScenarioDataFromDescription.ts +5 -5
  42. package/analyzer-template/packages/ai/src/lib/isolateScopes.ts +276 -3
  43. package/analyzer-template/packages/ai/src/lib/mergeStatements.ts +33 -3
  44. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateChangesEntityScenarioDataGenerator.ts +1 -1
  45. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.ts +32 -142
  46. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateChunkPrompt.ts +82 -0
  47. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateCriticalKeysPrompt.ts +103 -0
  48. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.ts +90 -6
  49. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.ts +14 -89
  50. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateMissingKeysPrompt.ts +58 -0
  51. package/analyzer-template/packages/ai/src/lib/promptGenerators/guessNewScenarioDataFromDescriptionGenerator.ts +11 -11
  52. package/analyzer-template/packages/ai/src/lib/promptGenerators/simplifyKeysForLLM.ts +391 -0
  53. package/analyzer-template/packages/ai/src/lib/resolvePathToControllable.ts +812 -0
  54. package/analyzer-template/packages/ai/src/lib/splitOutsideParentheses.ts +5 -1
  55. package/analyzer-template/packages/ai/src/lib/validateExecutionFlowPaths.ts +531 -0
  56. package/analyzer-template/packages/ai/src/lib/worker/SerializableDataStructure.ts +118 -0
  57. package/analyzer-template/packages/analyze/src/lib/FileAnalyzer.ts +14 -0
  58. package/analyzer-template/packages/analyze/src/lib/analysisContext.ts +44 -4
  59. package/analyzer-template/packages/analyze/src/lib/asts/nodes/index.ts +1 -0
  60. package/analyzer-template/packages/analyze/src/lib/asts/nodes/isAsyncFunction.ts +67 -0
  61. package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.ts +381 -265
  62. package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities.ts +18 -0
  63. package/analyzer-template/packages/analyze/src/lib/files/analyze/findOrCreateEntity.ts +3 -0
  64. package/analyzer-template/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.ts +33 -7
  65. package/analyzer-template/packages/analyze/src/lib/files/analyzeChange.ts +31 -15
  66. package/analyzer-template/packages/analyze/src/lib/files/analyzeEntity.ts +11 -7
  67. package/analyzer-template/packages/analyze/src/lib/files/analyzeInitial.ts +11 -12
  68. package/analyzer-template/packages/analyze/src/lib/files/enums/steps.ts +1 -1
  69. package/analyzer-template/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.ts +148 -41
  70. package/analyzer-template/packages/analyze/src/lib/files/scenarios/enrichUnknownTypesFromSourceEquivalencies.ts +102 -0
  71. package/analyzer-template/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.ts +506 -59
  72. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateChangesScenarios.ts +28 -62
  73. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +157 -74
  74. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.ts +156 -0
  75. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateScenarioData.ts +35 -129
  76. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateScenarios.ts +2 -3
  77. package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +420 -87
  78. package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeValidatedDataStructures.ts +56 -11
  79. package/analyzer-template/packages/aws/codebuild/index.ts +1 -0
  80. package/analyzer-template/packages/aws/dist/src/lib/codebuild/waitForBuild.d.ts +11 -1
  81. package/analyzer-template/packages/aws/dist/src/lib/codebuild/waitForBuild.d.ts.map +1 -1
  82. package/analyzer-template/packages/aws/dist/src/lib/codebuild/waitForBuild.js +29 -18
  83. package/analyzer-template/packages/aws/dist/src/lib/codebuild/waitForBuild.js.map +1 -1
  84. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsDefineContainer.d.ts +2 -2
  85. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsDefineContainer.d.ts.map +1 -1
  86. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsDefineContainer.js +2 -2
  87. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsDefineContainer.js.map +1 -1
  88. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsTaskFactory.d.ts +8 -18
  89. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsTaskFactory.d.ts.map +1 -1
  90. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsTaskFactory.js +17 -61
  91. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsTaskFactory.js.map +1 -1
  92. package/analyzer-template/packages/aws/dist/src/lib/s3/uploadFileToS3.d.ts.map +1 -1
  93. package/analyzer-template/packages/aws/dist/src/lib/s3/uploadFileToS3.js +8 -1
  94. package/analyzer-template/packages/aws/dist/src/lib/s3/uploadFileToS3.js.map +1 -1
  95. package/analyzer-template/packages/aws/package.json +3 -3
  96. package/analyzer-template/packages/aws/src/lib/codebuild/waitForBuild.ts +43 -19
  97. package/analyzer-template/packages/aws/src/lib/ecs/ecsDefineContainer.ts +3 -3
  98. package/analyzer-template/packages/aws/src/lib/ecs/ecsTaskFactory.ts +17 -69
  99. package/analyzer-template/packages/aws/src/lib/s3/uploadFileToS3.ts +8 -1
  100. package/analyzer-template/packages/database/src/lib/kysely/tables/debugReportsTable.ts +17 -1
  101. package/analyzer-template/packages/database/src/lib/loadAnalyses.ts +58 -1
  102. package/analyzer-template/packages/database/src/lib/loadCommits.ts +16 -0
  103. package/analyzer-template/packages/database/src/lib/loadEntities.ts +26 -3
  104. package/analyzer-template/packages/database/src/lib/loadReadyToBeCapturedAnalyses.ts +7 -3
  105. package/analyzer-template/packages/generate/index.ts +3 -0
  106. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/componentScenarioPageNext.ts +17 -1
  107. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.ts +193 -0
  108. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.ts +73 -0
  109. package/analyzer-template/packages/generate/src/lib/scenarioComponentForServer.ts +114 -0
  110. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/analysesTable.d.ts +1 -18
  111. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/analysesTable.d.ts.map +1 -1
  112. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.d.ts +17 -1
  113. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.d.ts.map +1 -1
  114. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.js.map +1 -1
  115. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/entitiesTable.d.ts +1 -0
  116. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/entitiesTable.d.ts.map +1 -1
  117. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts +2 -6
  118. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts.map +1 -1
  119. package/analyzer-template/packages/github/dist/database/src/lib/loadAnalyses.d.ts +2 -0
  120. package/analyzer-template/packages/github/dist/database/src/lib/loadAnalyses.d.ts.map +1 -1
  121. package/analyzer-template/packages/github/dist/database/src/lib/loadAnalyses.js +45 -2
  122. package/analyzer-template/packages/github/dist/database/src/lib/loadAnalyses.js.map +1 -1
  123. package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.d.ts +3 -1
  124. package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.d.ts.map +1 -1
  125. package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.js +13 -1
  126. package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.js.map +1 -1
  127. package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.d.ts +3 -1
  128. package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.d.ts.map +1 -1
  129. package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.js +23 -4
  130. package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.js.map +1 -1
  131. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.d.ts.map +1 -1
  132. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.js +7 -4
  133. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.js.map +1 -1
  134. package/analyzer-template/packages/github/dist/generate/index.d.ts +3 -0
  135. package/analyzer-template/packages/github/dist/generate/index.d.ts.map +1 -1
  136. package/analyzer-template/packages/github/dist/generate/index.js +3 -0
  137. package/analyzer-template/packages/github/dist/generate/index.js.map +1 -1
  138. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/componentScenarioPageNext.d.ts.map +1 -1
  139. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/componentScenarioPageNext.js +16 -1
  140. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/componentScenarioPageNext.js.map +1 -1
  141. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.d.ts +9 -0
  142. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.d.ts.map +1 -0
  143. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js +189 -0
  144. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js.map +1 -0
  145. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.d.ts +20 -0
  146. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.d.ts.map +1 -0
  147. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.js +53 -0
  148. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.js.map +1 -0
  149. package/analyzer-template/packages/github/dist/generate/src/lib/scenarioComponentForServer.d.ts +8 -0
  150. package/analyzer-template/packages/github/dist/generate/src/lib/scenarioComponentForServer.d.ts.map +1 -0
  151. package/analyzer-template/packages/github/dist/generate/src/lib/scenarioComponentForServer.js +89 -0
  152. package/analyzer-template/packages/github/dist/generate/src/lib/scenarioComponentForServer.js.map +1 -0
  153. package/analyzer-template/packages/github/dist/github/src/lib/loadOrCreateCommit.d.ts.map +1 -1
  154. package/analyzer-template/packages/github/dist/github/src/lib/loadOrCreateCommit.js +10 -0
  155. package/analyzer-template/packages/github/dist/github/src/lib/loadOrCreateCommit.js.map +1 -1
  156. package/analyzer-template/packages/github/dist/github/src/lib/syncPrimaryBranch.d.ts.map +1 -1
  157. package/analyzer-template/packages/github/dist/github/src/lib/syncPrimaryBranch.js +3 -0
  158. package/analyzer-template/packages/github/dist/github/src/lib/syncPrimaryBranch.js.map +1 -1
  159. package/analyzer-template/packages/github/dist/types/index.d.ts +3 -4
  160. package/analyzer-template/packages/github/dist/types/index.d.ts.map +1 -1
  161. package/analyzer-template/packages/github/dist/types/index.js +0 -1
  162. package/analyzer-template/packages/github/dist/types/index.js.map +1 -1
  163. package/analyzer-template/packages/github/dist/types/src/types/Analysis.d.ts +71 -27
  164. package/analyzer-template/packages/github/dist/types/src/types/Analysis.d.ts.map +1 -1
  165. package/analyzer-template/packages/github/dist/types/src/types/Entity.d.ts +2 -0
  166. package/analyzer-template/packages/github/dist/types/src/types/Entity.d.ts.map +1 -1
  167. package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts +9 -54
  168. package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts.map +1 -1
  169. package/analyzer-template/packages/github/dist/types/src/types/Scenario.js +1 -21
  170. package/analyzer-template/packages/github/dist/types/src/types/Scenario.js.map +1 -1
  171. package/analyzer-template/packages/github/dist/types/src/types/ScenariosDataStructure.d.ts +148 -0
  172. package/analyzer-template/packages/github/dist/types/src/types/ScenariosDataStructure.d.ts.map +1 -1
  173. package/analyzer-template/packages/github/dist/types/src/types/StatementInfo.d.ts +2 -0
  174. package/analyzer-template/packages/github/dist/types/src/types/StatementInfo.d.ts.map +1 -1
  175. package/analyzer-template/packages/github/dist/utils/src/lib/safeFileName.d.ts +9 -1
  176. package/analyzer-template/packages/github/dist/utils/src/lib/safeFileName.d.ts.map +1 -1
  177. package/analyzer-template/packages/github/dist/utils/src/lib/safeFileName.js +29 -3
  178. package/analyzer-template/packages/github/dist/utils/src/lib/safeFileName.js.map +1 -1
  179. package/analyzer-template/packages/github/src/lib/loadOrCreateCommit.ts +14 -0
  180. package/analyzer-template/packages/github/src/lib/syncPrimaryBranch.ts +2 -0
  181. package/analyzer-template/packages/process/index.ts +2 -0
  182. package/analyzer-template/packages/process/package.json +12 -0
  183. package/analyzer-template/packages/process/tsconfig.json +8 -0
  184. package/analyzer-template/packages/types/index.ts +3 -6
  185. package/analyzer-template/packages/types/src/types/Analysis.ts +87 -27
  186. package/analyzer-template/packages/types/src/types/Entity.ts +2 -0
  187. package/analyzer-template/packages/types/src/types/Scenario.ts +9 -77
  188. package/analyzer-template/packages/types/src/types/ScenariosDataStructure.ts +175 -0
  189. package/analyzer-template/packages/types/src/types/StatementInfo.ts +2 -0
  190. package/analyzer-template/packages/utils/dist/types/index.d.ts +3 -4
  191. package/analyzer-template/packages/utils/dist/types/index.d.ts.map +1 -1
  192. package/analyzer-template/packages/utils/dist/types/index.js +0 -1
  193. package/analyzer-template/packages/utils/dist/types/index.js.map +1 -1
  194. package/analyzer-template/packages/utils/dist/types/src/types/Analysis.d.ts +71 -27
  195. package/analyzer-template/packages/utils/dist/types/src/types/Analysis.d.ts.map +1 -1
  196. package/analyzer-template/packages/utils/dist/types/src/types/Entity.d.ts +2 -0
  197. package/analyzer-template/packages/utils/dist/types/src/types/Entity.d.ts.map +1 -1
  198. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts +9 -54
  199. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts.map +1 -1
  200. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.js +1 -21
  201. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.js.map +1 -1
  202. package/analyzer-template/packages/utils/dist/types/src/types/ScenariosDataStructure.d.ts +148 -0
  203. package/analyzer-template/packages/utils/dist/types/src/types/ScenariosDataStructure.d.ts.map +1 -1
  204. package/analyzer-template/packages/utils/dist/types/src/types/StatementInfo.d.ts +2 -0
  205. package/analyzer-template/packages/utils/dist/types/src/types/StatementInfo.d.ts.map +1 -1
  206. package/analyzer-template/packages/utils/dist/utils/src/lib/safeFileName.d.ts +9 -1
  207. package/analyzer-template/packages/utils/dist/utils/src/lib/safeFileName.d.ts.map +1 -1
  208. package/analyzer-template/packages/utils/dist/utils/src/lib/safeFileName.js +29 -3
  209. package/analyzer-template/packages/utils/dist/utils/src/lib/safeFileName.js.map +1 -1
  210. package/analyzer-template/packages/utils/src/lib/safeFileName.ts +48 -3
  211. package/analyzer-template/playwright/capture.ts +37 -18
  212. package/analyzer-template/playwright/getCodeYamInfo.ts +12 -7
  213. package/analyzer-template/playwright/waitForServer.ts +21 -6
  214. package/analyzer-template/project/analyzeBaselineCommit.ts +4 -0
  215. package/analyzer-template/project/analyzeBranchCommit.ts +4 -0
  216. package/analyzer-template/project/analyzeFileEntities.ts +4 -0
  217. package/analyzer-template/project/analyzeRegularCommit.ts +4 -0
  218. package/analyzer-template/project/constructMockCode.ts +1112 -169
  219. package/analyzer-template/project/controller/startController.ts +16 -1
  220. package/analyzer-template/project/executeLibraryFunctionDirect.ts +7 -3
  221. package/analyzer-template/project/mocks/analyzeFileMock.ts +8 -7
  222. package/analyzer-template/project/orchestrateCapture/KyselyAnalysisLoader.ts +3 -6
  223. package/analyzer-template/project/orchestrateCapture/SequentialCaptureTaskRunner.ts +7 -1
  224. package/analyzer-template/project/orchestrateCapture.ts +36 -3
  225. package/analyzer-template/project/reconcileMockDataKeys.ts +220 -78
  226. package/analyzer-template/project/runAnalysis.ts +11 -0
  227. package/analyzer-template/project/serverOnlyModules.ts +127 -2
  228. package/analyzer-template/project/start.ts +16 -4
  229. package/analyzer-template/project/startScenarioCapture.ts +6 -0
  230. package/analyzer-template/project/writeMockDataTsx.ts +164 -24
  231. package/analyzer-template/project/writeScenarioClientWrapper.ts +21 -0
  232. package/analyzer-template/project/writeScenarioComponents.ts +304 -112
  233. package/analyzer-template/project/writeScenarioFiles.ts +26 -0
  234. package/analyzer-template/project/writeSimpleRoot.ts +11 -35
  235. package/analyzer-template/scripts/comboWorkerLoop.cjs +1 -0
  236. package/analyzer-template/scripts/defaultCmd.sh +9 -0
  237. package/analyzer-template/tsconfig.json +2 -1
  238. package/background/src/lib/local/createLocalAnalyzer.js +1 -29
  239. package/background/src/lib/local/createLocalAnalyzer.js.map +1 -1
  240. package/background/src/lib/local/execAsync.js +1 -1
  241. package/background/src/lib/local/execAsync.js.map +1 -1
  242. package/background/src/lib/virtualized/common/execAsync.js +1 -1
  243. package/background/src/lib/virtualized/common/execAsync.js.map +1 -1
  244. package/background/src/lib/virtualized/project/analyzeBaselineCommit.js +2 -1
  245. package/background/src/lib/virtualized/project/analyzeBaselineCommit.js.map +1 -1
  246. package/background/src/lib/virtualized/project/analyzeBranchCommit.js +2 -1
  247. package/background/src/lib/virtualized/project/analyzeBranchCommit.js.map +1 -1
  248. package/background/src/lib/virtualized/project/analyzeFileEntities.js +2 -1
  249. package/background/src/lib/virtualized/project/analyzeFileEntities.js.map +1 -1
  250. package/background/src/lib/virtualized/project/analyzeRegularCommit.js +2 -1
  251. package/background/src/lib/virtualized/project/analyzeRegularCommit.js.map +1 -1
  252. package/background/src/lib/virtualized/project/constructMockCode.js +987 -130
  253. package/background/src/lib/virtualized/project/constructMockCode.js.map +1 -1
  254. package/background/src/lib/virtualized/project/controller/startController.js +11 -1
  255. package/background/src/lib/virtualized/project/controller/startController.js.map +1 -1
  256. package/background/src/lib/virtualized/project/executeLibraryFunctionDirect.js +6 -3
  257. package/background/src/lib/virtualized/project/executeLibraryFunctionDirect.js.map +1 -1
  258. package/background/src/lib/virtualized/project/mocks/analyzeFileMock.js +7 -7
  259. package/background/src/lib/virtualized/project/mocks/analyzeFileMock.js.map +1 -1
  260. package/background/src/lib/virtualized/project/orchestrateCapture/KyselyAnalysisLoader.js +3 -2
  261. package/background/src/lib/virtualized/project/orchestrateCapture/KyselyAnalysisLoader.js.map +1 -1
  262. package/background/src/lib/virtualized/project/orchestrateCapture/SequentialCaptureTaskRunner.js +3 -1
  263. package/background/src/lib/virtualized/project/orchestrateCapture/SequentialCaptureTaskRunner.js.map +1 -1
  264. package/background/src/lib/virtualized/project/orchestrateCapture.js +27 -4
  265. package/background/src/lib/virtualized/project/orchestrateCapture.js.map +1 -1
  266. package/background/src/lib/virtualized/project/reconcileMockDataKeys.js +188 -47
  267. package/background/src/lib/virtualized/project/reconcileMockDataKeys.js.map +1 -1
  268. package/background/src/lib/virtualized/project/runAnalysis.js +9 -0
  269. package/background/src/lib/virtualized/project/runAnalysis.js.map +1 -1
  270. package/background/src/lib/virtualized/project/serverOnlyModules.js +106 -3
  271. package/background/src/lib/virtualized/project/serverOnlyModules.js.map +1 -1
  272. package/background/src/lib/virtualized/project/start.js +15 -4
  273. package/background/src/lib/virtualized/project/start.js.map +1 -1
  274. package/background/src/lib/virtualized/project/startScenarioCapture.js +7 -0
  275. package/background/src/lib/virtualized/project/startScenarioCapture.js.map +1 -1
  276. package/background/src/lib/virtualized/project/writeMockDataTsx.js +139 -23
  277. package/background/src/lib/virtualized/project/writeMockDataTsx.js.map +1 -1
  278. package/background/src/lib/virtualized/project/writeScenarioClientWrapper.js +15 -0
  279. package/background/src/lib/virtualized/project/writeScenarioClientWrapper.js.map +1 -0
  280. package/background/src/lib/virtualized/project/writeScenarioComponents.js +228 -95
  281. package/background/src/lib/virtualized/project/writeScenarioComponents.js.map +1 -1
  282. package/background/src/lib/virtualized/project/writeScenarioFiles.js +19 -0
  283. package/background/src/lib/virtualized/project/writeScenarioFiles.js.map +1 -1
  284. package/background/src/lib/virtualized/project/writeSimpleRoot.js +11 -34
  285. package/background/src/lib/virtualized/project/writeSimpleRoot.js.map +1 -1
  286. package/codeyam-cli/src/cli.js +5 -1
  287. package/codeyam-cli/src/cli.js.map +1 -1
  288. package/codeyam-cli/src/commands/analyze.js +1 -1
  289. package/codeyam-cli/src/commands/analyze.js.map +1 -1
  290. package/codeyam-cli/src/commands/baseline.js +174 -0
  291. package/codeyam-cli/src/commands/baseline.js.map +1 -0
  292. package/codeyam-cli/src/commands/debug.js +28 -18
  293. package/codeyam-cli/src/commands/debug.js.map +1 -1
  294. package/codeyam-cli/src/commands/default.js +0 -15
  295. package/codeyam-cli/src/commands/default.js.map +1 -1
  296. package/codeyam-cli/src/commands/recapture.js +29 -18
  297. package/codeyam-cli/src/commands/recapture.js.map +1 -1
  298. package/codeyam-cli/src/commands/report.js +46 -1
  299. package/codeyam-cli/src/commands/report.js.map +1 -1
  300. package/codeyam-cli/src/commands/start.js +8 -12
  301. package/codeyam-cli/src/commands/start.js.map +1 -1
  302. package/codeyam-cli/src/commands/status.js +23 -1
  303. package/codeyam-cli/src/commands/status.js.map +1 -1
  304. package/codeyam-cli/src/commands/test-startup.js +1 -1
  305. package/codeyam-cli/src/commands/test-startup.js.map +1 -1
  306. package/codeyam-cli/src/commands/wipe.js +108 -0
  307. package/codeyam-cli/src/commands/wipe.js.map +1 -0
  308. package/codeyam-cli/src/utils/__tests__/serverVersionStaleness.test.js +81 -0
  309. package/codeyam-cli/src/utils/__tests__/serverVersionStaleness.test.js.map +1 -0
  310. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +31 -27
  311. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js.map +1 -1
  312. package/codeyam-cli/src/utils/analysisRunner.js +28 -14
  313. package/codeyam-cli/src/utils/analysisRunner.js.map +1 -1
  314. package/codeyam-cli/src/utils/backgroundServer.js +12 -2
  315. package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
  316. package/codeyam-cli/src/utils/database.js +91 -5
  317. package/codeyam-cli/src/utils/database.js.map +1 -1
  318. package/codeyam-cli/src/utils/generateReport.js +4 -3
  319. package/codeyam-cli/src/utils/generateReport.js.map +1 -1
  320. package/codeyam-cli/src/utils/git.js +79 -0
  321. package/codeyam-cli/src/utils/git.js.map +1 -0
  322. package/codeyam-cli/src/utils/install-skills.js +31 -17
  323. package/codeyam-cli/src/utils/install-skills.js.map +1 -1
  324. package/codeyam-cli/src/utils/queue/job.js +105 -0
  325. package/codeyam-cli/src/utils/queue/job.js.map +1 -1
  326. package/codeyam-cli/src/utils/queue/manager.js +6 -0
  327. package/codeyam-cli/src/utils/queue/manager.js.map +1 -1
  328. package/codeyam-cli/src/utils/queue/persistence.js.map +1 -1
  329. package/codeyam-cli/src/utils/serverState.js.map +1 -1
  330. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +7 -5
  331. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js.map +1 -1
  332. package/codeyam-cli/src/utils/versionInfo.js +25 -19
  333. package/codeyam-cli/src/utils/versionInfo.js.map +1 -1
  334. package/codeyam-cli/src/utils/wipe.js +128 -0
  335. package/codeyam-cli/src/utils/wipe.js.map +1 -0
  336. package/codeyam-cli/src/webserver/app/lib/database.js +73 -20
  337. package/codeyam-cli/src/webserver/app/lib/database.js.map +1 -1
  338. package/codeyam-cli/src/webserver/bootstrap.js +40 -0
  339. package/codeyam-cli/src/webserver/bootstrap.js.map +1 -1
  340. package/codeyam-cli/src/webserver/build/client/assets/EntityItem-BXhEawa3.js +1 -0
  341. package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeBadge-CzGX-miz.js → EntityTypeBadge-DLqD3qNt.js} +1 -1
  342. package/codeyam-cli/src/webserver/build/client/assets/EntityTypeIcon-Ba2JVPzP.js +41 -0
  343. package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-C8lyxW9k.js +34 -0
  344. package/codeyam-cli/src/webserver/build/client/assets/InteractivePreview-aht4aafF.js +25 -0
  345. package/codeyam-cli/src/webserver/build/client/assets/{LibraryFunctionPreview-CBQPrpT0.js → LibraryFunctionPreview-CVtiBnY5.js} +1 -1
  346. package/codeyam-cli/src/webserver/build/client/assets/{LoadingDots-D1CdlbrV.js → LoadingDots-B0GLXMsr.js} +1 -1
  347. package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-wDPcZNKx.js → LogViewer-xgeCVgSM.js} +1 -1
  348. package/codeyam-cli/src/webserver/build/client/assets/ReportIssueModal-D4TZhLuw.js +21 -0
  349. package/codeyam-cli/src/webserver/build/client/assets/{SafeScreenshot-BfmDgXxG.js → SafeScreenshot-DuDvi0jm.js} +1 -1
  350. package/codeyam-cli/src/webserver/build/client/assets/ScenarioViewer-DEx02QDa.js +10 -0
  351. package/codeyam-cli/src/webserver/build/client/assets/{TruncatedFilePath-6J7zDUD5.js → TruncatedFilePath-DyFZkK0l.js} +1 -1
  352. package/codeyam-cli/src/webserver/build/client/assets/_index-BwqWJOgH.js +11 -0
  353. package/codeyam-cli/src/webserver/build/client/assets/activity.(_tab)-DoLIqZX2.js +37 -0
  354. package/codeyam-cli/src/webserver/build/client/assets/{chevron-down-BYimnrHg.js → chevron-down-Cx24_aWc.js} +1 -1
  355. package/codeyam-cli/src/webserver/build/client/assets/chunk-EPOLDU6W-CXRTFQ3F.js +51 -0
  356. package/codeyam-cli/src/webserver/build/client/assets/{circle-check-CaVsIRxt.js → circle-check-BOARzkeR.js} +1 -1
  357. package/codeyam-cli/src/webserver/build/client/assets/{createLucideIcon-CgUsG7ib.js → createLucideIcon-BdhJEx6B.js} +1 -1
  358. package/codeyam-cli/src/webserver/build/client/assets/{cy-logo-cli-C1gnJVOL.svg → cy-logo-cli-CCKUIm0S.svg} +2 -2
  359. package/codeyam-cli/src/webserver/build/client/assets/cy-logo-cli-DcX-ZS3p.js +1 -0
  360. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-BRb-0kQl.js +1 -0
  361. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-zUEpfPsu.js → entity._sha._-C2N4Op8e.js} +12 -12
  362. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-DavjRmOY.js +6 -0
  363. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-D1T4TGjf.js +6 -0
  364. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.edit._scenarioId-CfLCUi9S.js → entity._sha_.edit._scenarioId-CTBG2mmz.js} +1 -1
  365. package/codeyam-cli/src/webserver/build/client/assets/{entry.client-DKJyZfAY.js → entry.client-CS2cb_eZ.js} +6 -6
  366. package/codeyam-cli/src/webserver/build/client/assets/executionFlowCoverage-BWhdfn70.js +1 -0
  367. package/codeyam-cli/src/webserver/build/client/assets/{fileTableUtils-DAtOlaWE.js → fileTableUtils-DMJ7zii9.js} +1 -1
  368. package/codeyam-cli/src/webserver/build/client/assets/files-Cs4MdYtv.js +1 -0
  369. package/codeyam-cli/src/webserver/build/client/assets/{git-D62Lxxmv.js → git-B4RJRvYB.js} +2 -2
  370. package/codeyam-cli/src/webserver/build/client/assets/git-commit-horizontal-CysbcZxi.js +6 -0
  371. package/codeyam-cli/src/webserver/build/client/assets/globals-DMUaGAqV.css +1 -0
  372. package/codeyam-cli/src/webserver/build/client/assets/{index-CzNNiTkw.js → index-B1h680n5.js} +1 -1
  373. package/codeyam-cli/src/webserver/build/client/assets/{index-BosqDOlH.js → index-lzqtyFU8.js} +1 -1
  374. package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-CNp9QFCX.js → loader-circle-B7B9V-bu.js} +1 -1
  375. package/codeyam-cli/src/webserver/build/client/assets/manifest-f874c610.js +1 -0
  376. package/codeyam-cli/src/webserver/build/client/assets/root-Bz5TunQg.js +57 -0
  377. package/codeyam-cli/src/webserver/build/client/assets/rules-hEkvVw2-.js +97 -0
  378. package/codeyam-cli/src/webserver/build/client/assets/{search-DDGjYAMJ.js → search-CxXUmBSd.js} +1 -1
  379. package/codeyam-cli/src/webserver/build/client/assets/settings-CS5f3WzT.js +1 -0
  380. package/codeyam-cli/src/webserver/build/client/assets/simulations-DwFIBT09.js +1 -0
  381. package/codeyam-cli/src/webserver/build/client/assets/{triangle-alert-CBc5dE1s.js → triangle-alert-B6LgvRJg.js} +1 -1
  382. package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-C1v1PQzo.js +1 -0
  383. package/codeyam-cli/src/webserver/build/client/assets/{useLastLogLine-BqPPNjAl.js → useLastLogLine-aSv48UbS.js} +1 -1
  384. package/codeyam-cli/src/webserver/build/client/assets/useReportContext-DYxHZQuP.js +1 -0
  385. package/codeyam-cli/src/webserver/build/client/assets/{useToast-DWHcCcl1.js → useToast-mBRpZPiu.js} +1 -1
  386. package/codeyam-cli/src/webserver/build/server/assets/index-uNNbimct.js +1 -0
  387. package/codeyam-cli/src/webserver/build/server/assets/server-build-B08qC4Y7.js +257 -0
  388. package/codeyam-cli/src/webserver/build/server/index.js +1 -1
  389. package/codeyam-cli/src/webserver/build-info.json +5 -5
  390. package/codeyam-cli/src/webserver/server.js +35 -25
  391. package/codeyam-cli/src/webserver/server.js.map +1 -1
  392. package/codeyam-cli/templates/codeyam-power-rules-hook.sh +200 -0
  393. package/codeyam-cli/templates/{codeyam-debug-skill.md → codeyam:debug.md} +48 -4
  394. package/codeyam-cli/templates/{debug-codeyam.md → codeyam:diagnose.md} +185 -23
  395. package/codeyam-cli/templates/codeyam:new-rule.md +13 -0
  396. package/codeyam-cli/templates/codeyam:power-rules.md +449 -0
  397. package/codeyam-cli/templates/{codeyam-setup-skill.md → codeyam:setup.md} +139 -4
  398. package/codeyam-cli/templates/{codeyam-sim-skill.md → codeyam:sim.md} +1 -1
  399. package/codeyam-cli/templates/{codeyam-test-skill.md → codeyam:test.md} +1 -1
  400. package/codeyam-cli/templates/{codeyam-verify-skill.md → codeyam:verify.md} +1 -1
  401. package/package.json +6 -5
  402. package/packages/ai/index.js +5 -4
  403. package/packages/ai/index.js.map +1 -1
  404. package/packages/ai/src/lib/analyzeScope.js +97 -0
  405. package/packages/ai/src/lib/analyzeScope.js.map +1 -1
  406. package/packages/ai/src/lib/astScopes/arrayDerivationDetector.js +150 -0
  407. package/packages/ai/src/lib/astScopes/arrayDerivationDetector.js.map +1 -0
  408. package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js +84 -1
  409. package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js.map +1 -1
  410. package/packages/ai/src/lib/astScopes/conditionalEffectsExtractor.js +435 -0
  411. package/packages/ai/src/lib/astScopes/conditionalEffectsExtractor.js.map +1 -0
  412. package/packages/ai/src/lib/astScopes/methodSemantics.js +97 -6
  413. package/packages/ai/src/lib/astScopes/methodSemantics.js.map +1 -1
  414. package/packages/ai/src/lib/astScopes/patterns/ifStatementHandler.js +8 -0
  415. package/packages/ai/src/lib/astScopes/patterns/ifStatementHandler.js.map +1 -1
  416. package/packages/ai/src/lib/astScopes/patterns/switchStatementHandler.js +7 -0
  417. package/packages/ai/src/lib/astScopes/patterns/switchStatementHandler.js.map +1 -1
  418. package/packages/ai/src/lib/astScopes/patterns/variableDeclarationHandler.js +138 -1
  419. package/packages/ai/src/lib/astScopes/patterns/variableDeclarationHandler.js.map +1 -1
  420. package/packages/ai/src/lib/astScopes/processExpression.js +654 -13
  421. package/packages/ai/src/lib/astScopes/processExpression.js.map +1 -1
  422. package/packages/ai/src/lib/checkAllAttributes.js +24 -9
  423. package/packages/ai/src/lib/checkAllAttributes.js.map +1 -1
  424. package/packages/ai/src/lib/completionCall.js +178 -31
  425. package/packages/ai/src/lib/completionCall.js.map +1 -1
  426. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +715 -64
  427. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
  428. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.js +2 -1
  429. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.js.map +1 -1
  430. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.js +230 -23
  431. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.js.map +1 -1
  432. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.js +77 -55
  433. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.js.map +1 -1
  434. package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js +67 -3
  435. package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js.map +1 -1
  436. package/packages/ai/src/lib/dataStructure/helpers/convertNullToUndefinedBySchema.js +86 -0
  437. package/packages/ai/src/lib/dataStructure/helpers/convertNullToUndefinedBySchema.js.map +1 -0
  438. package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js +6 -1
  439. package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js.map +1 -1
  440. package/packages/ai/src/lib/dataStructure/helpers/fixNullIdsBySchema.js +107 -0
  441. package/packages/ai/src/lib/dataStructure/helpers/fixNullIdsBySchema.js.map +1 -0
  442. package/packages/ai/src/lib/dataStructureChunking.js +111 -0
  443. package/packages/ai/src/lib/dataStructureChunking.js.map +1 -0
  444. package/packages/ai/src/lib/deepEqual.js +32 -0
  445. package/packages/ai/src/lib/deepEqual.js.map +1 -0
  446. package/packages/ai/src/lib/e2eDataTracking.js +241 -0
  447. package/packages/ai/src/lib/e2eDataTracking.js.map +1 -0
  448. package/packages/ai/src/lib/extractCriticalDataKeys.js +96 -0
  449. package/packages/ai/src/lib/extractCriticalDataKeys.js.map +1 -0
  450. package/packages/ai/src/lib/generateChangesEntityScenarioData.js +62 -5
  451. package/packages/ai/src/lib/generateChangesEntityScenarioData.js.map +1 -1
  452. package/packages/ai/src/lib/generateChangesEntityScenarios.js +78 -120
  453. package/packages/ai/src/lib/generateChangesEntityScenarios.js.map +1 -1
  454. package/packages/ai/src/lib/generateEntityDataStructure.js +1 -0
  455. package/packages/ai/src/lib/generateEntityDataStructure.js.map +1 -1
  456. package/packages/ai/src/lib/generateEntityScenarioData.js +906 -82
  457. package/packages/ai/src/lib/generateEntityScenarioData.js.map +1 -1
  458. package/packages/ai/src/lib/generateEntityScenarios.js +170 -162
  459. package/packages/ai/src/lib/generateEntityScenarios.js.map +1 -1
  460. package/packages/ai/src/lib/generateExecutionFlows.js +392 -0
  461. package/packages/ai/src/lib/generateExecutionFlows.js.map +1 -0
  462. package/packages/ai/src/lib/generateExecutionFlowsFromConditionalEffects.js +380 -0
  463. package/packages/ai/src/lib/generateExecutionFlowsFromConditionalEffects.js.map +1 -0
  464. package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js +1440 -0
  465. package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js.map +1 -0
  466. package/packages/ai/src/lib/generateExecutionFlowsFromJsxUsages.js +194 -0
  467. package/packages/ai/src/lib/generateExecutionFlowsFromJsxUsages.js.map +1 -0
  468. package/packages/ai/src/lib/guessScenarioDataFromDescription.js +2 -2
  469. package/packages/ai/src/lib/guessScenarioDataFromDescription.js.map +1 -1
  470. package/packages/ai/src/lib/isolateScopes.js +231 -4
  471. package/packages/ai/src/lib/isolateScopes.js.map +1 -1
  472. package/packages/ai/src/lib/mergeStatements.js +26 -3
  473. package/packages/ai/src/lib/mergeStatements.js.map +1 -1
  474. package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenarioDataGenerator.js +1 -1
  475. package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenarioDataGenerator.js.map +1 -1
  476. package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.js +21 -100
  477. package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.js.map +1 -1
  478. package/packages/ai/src/lib/promptGenerators/generateChunkPrompt.js +54 -0
  479. package/packages/ai/src/lib/promptGenerators/generateChunkPrompt.js.map +1 -0
  480. package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js +68 -6
  481. package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js.map +1 -1
  482. package/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.js +10 -70
  483. package/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.js.map +1 -1
  484. package/packages/ai/src/lib/promptGenerators/generateMissingKeysPrompt.js +45 -0
  485. package/packages/ai/src/lib/promptGenerators/generateMissingKeysPrompt.js.map +1 -0
  486. package/packages/ai/src/lib/promptGenerators/guessNewScenarioDataFromDescriptionGenerator.js +9 -9
  487. package/packages/ai/src/lib/promptGenerators/guessNewScenarioDataFromDescriptionGenerator.js.map +1 -1
  488. package/packages/ai/src/lib/promptGenerators/simplifyKeysForLLM.js +335 -0
  489. package/packages/ai/src/lib/promptGenerators/simplifyKeysForLLM.js.map +1 -0
  490. package/packages/ai/src/lib/resolvePathToControllable.js +667 -0
  491. package/packages/ai/src/lib/resolvePathToControllable.js.map +1 -0
  492. package/packages/ai/src/lib/splitOutsideParentheses.js +3 -1
  493. package/packages/ai/src/lib/splitOutsideParentheses.js.map +1 -1
  494. package/packages/ai/src/lib/worker/SerializableDataStructure.js +29 -0
  495. package/packages/ai/src/lib/worker/SerializableDataStructure.js.map +1 -1
  496. package/packages/analyze/src/lib/FileAnalyzer.js +15 -0
  497. package/packages/analyze/src/lib/FileAnalyzer.js.map +1 -1
  498. package/packages/analyze/src/lib/analysisContext.js +30 -5
  499. package/packages/analyze/src/lib/analysisContext.js.map +1 -1
  500. package/packages/analyze/src/lib/asts/nodes/index.js +1 -0
  501. package/packages/analyze/src/lib/asts/nodes/index.js.map +1 -1
  502. package/packages/analyze/src/lib/asts/nodes/isAsyncFunction.js +52 -0
  503. package/packages/analyze/src/lib/asts/nodes/isAsyncFunction.js.map +1 -0
  504. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js +151 -52
  505. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js.map +1 -1
  506. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js +10 -0
  507. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js.map +1 -1
  508. package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js +2 -0
  509. package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js.map +1 -1
  510. package/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.js +31 -7
  511. package/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.js.map +1 -1
  512. package/packages/analyze/src/lib/files/analyzeChange.js +21 -11
  513. package/packages/analyze/src/lib/files/analyzeChange.js.map +1 -1
  514. package/packages/analyze/src/lib/files/analyzeEntity.js +9 -8
  515. package/packages/analyze/src/lib/files/analyzeEntity.js.map +1 -1
  516. package/packages/analyze/src/lib/files/analyzeInitial.js +9 -10
  517. package/packages/analyze/src/lib/files/analyzeInitial.js.map +1 -1
  518. package/packages/analyze/src/lib/files/enums/steps.js +1 -1
  519. package/packages/analyze/src/lib/files/enums/steps.js.map +1 -1
  520. package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js +121 -37
  521. package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js.map +1 -1
  522. package/packages/analyze/src/lib/files/scenarios/enrichUnknownTypesFromSourceEquivalencies.js +85 -0
  523. package/packages/analyze/src/lib/files/scenarios/enrichUnknownTypesFromSourceEquivalencies.js.map +1 -0
  524. package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js +410 -55
  525. package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js.map +1 -1
  526. package/packages/analyze/src/lib/files/scenarios/generateChangesScenarios.js +29 -34
  527. package/packages/analyze/src/lib/files/scenarios/generateChangesScenarios.js.map +1 -1
  528. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +126 -57
  529. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
  530. package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js +96 -0
  531. package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js.map +1 -0
  532. package/packages/analyze/src/lib/files/scenarios/generateScenarioData.js +27 -98
  533. package/packages/analyze/src/lib/files/scenarios/generateScenarioData.js.map +1 -1
  534. package/packages/analyze/src/lib/files/scenarios/generateScenarios.js +2 -3
  535. package/packages/analyze/src/lib/files/scenarios/generateScenarios.js.map +1 -1
  536. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +342 -83
  537. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js.map +1 -1
  538. package/packages/analyze/src/lib/files/scenarios/mergeValidatedDataStructures.js +46 -9
  539. package/packages/analyze/src/lib/files/scenarios/mergeValidatedDataStructures.js.map +1 -1
  540. package/packages/aws/src/lib/ecs/ecsDefineContainer.js +2 -2
  541. package/packages/aws/src/lib/ecs/ecsDefineContainer.js.map +1 -1
  542. package/packages/aws/src/lib/ecs/ecsTaskFactory.js +17 -61
  543. package/packages/aws/src/lib/ecs/ecsTaskFactory.js.map +1 -1
  544. package/packages/database/src/lib/kysely/tables/debugReportsTable.js.map +1 -1
  545. package/packages/database/src/lib/loadAnalyses.js +45 -2
  546. package/packages/database/src/lib/loadAnalyses.js.map +1 -1
  547. package/packages/database/src/lib/loadCommits.js +13 -1
  548. package/packages/database/src/lib/loadCommits.js.map +1 -1
  549. package/packages/database/src/lib/loadEntities.js +23 -4
  550. package/packages/database/src/lib/loadEntities.js.map +1 -1
  551. package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.js +7 -4
  552. package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.js.map +1 -1
  553. package/packages/generate/index.js +3 -0
  554. package/packages/generate/index.js.map +1 -1
  555. package/packages/generate/src/lib/componentScenarioPage/componentScenarioPageNext.js +16 -1
  556. package/packages/generate/src/lib/componentScenarioPage/componentScenarioPageNext.js.map +1 -1
  557. package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js +189 -0
  558. package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js.map +1 -0
  559. package/packages/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.js +53 -0
  560. package/packages/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.js.map +1 -0
  561. package/packages/generate/src/lib/scenarioComponentForServer.js +89 -0
  562. package/packages/generate/src/lib/scenarioComponentForServer.js.map +1 -0
  563. package/packages/github/src/lib/loadOrCreateCommit.js +10 -0
  564. package/packages/github/src/lib/loadOrCreateCommit.js.map +1 -1
  565. package/packages/github/src/lib/syncPrimaryBranch.js +3 -0
  566. package/packages/github/src/lib/syncPrimaryBranch.js.map +1 -1
  567. package/packages/process/index.js +3 -0
  568. package/packages/process/index.js.map +1 -0
  569. package/packages/process/src/GlobalProcessManager.js.map +1 -0
  570. package/{background/src/lib/process → packages/process/src}/ProcessManager.js +1 -1
  571. package/packages/process/src/ProcessManager.js.map +1 -0
  572. package/packages/process/src/index.js.map +1 -0
  573. package/packages/process/src/managedExecAsync.js.map +1 -0
  574. package/packages/types/index.js +0 -1
  575. package/packages/types/index.js.map +1 -1
  576. package/packages/types/src/types/Scenario.js +1 -21
  577. package/packages/types/src/types/Scenario.js.map +1 -1
  578. package/packages/utils/src/lib/safeFileName.js +29 -3
  579. package/packages/utils/src/lib/safeFileName.js.map +1 -1
  580. package/scripts/finalize-analyzer.cjs +3 -3
  581. package/analyzer-template/packages/ai/src/lib/findMatchingAttribute.ts +0 -102
  582. package/analyzer-template/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.ts +0 -409
  583. package/analyzer-template/packages/ai/src/lib/generateChangesEntityKeyAttributes.ts +0 -288
  584. package/analyzer-template/packages/ai/src/lib/generateEntityKeyAttributes.ts +0 -495
  585. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityKeyAttributesGenerator.ts +0 -67
  586. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.ts +0 -120
  587. package/analyzer-template/process/INTEGRATION_COMPLETE.md +0 -333
  588. package/analyzer-template/process/INTEGRATION_EXAMPLE.md +0 -525
  589. package/analyzer-template/process/README.md +0 -507
  590. package/background/src/lib/process/GlobalProcessManager.js.map +0 -1
  591. package/background/src/lib/process/ProcessManager.js.map +0 -1
  592. package/background/src/lib/process/index.js.map +0 -1
  593. package/background/src/lib/process/managedExecAsync.js.map +0 -1
  594. package/codeyam-cli/scripts/fixtures/cal.com/universal-mocks/packages/prisma/index.js +0 -238
  595. package/codeyam-cli/scripts/fixtures/cal.com/universal-mocks/packages/prisma/index.js.map +0 -1
  596. package/codeyam-cli/scripts/fixtures/formbricks/universal-mocks/apps/web/lib/instance/service.js +0 -7
  597. package/codeyam-cli/scripts/fixtures/formbricks/universal-mocks/apps/web/lib/instance/service.js.map +0 -1
  598. package/codeyam-cli/src/webserver/build/client/assets/EntityItem-wXL1Z2Aq.js +0 -1
  599. package/codeyam-cli/src/webserver/build/client/assets/EntityTypeIcon-CXFKsCOD.js +0 -41
  600. package/codeyam-cli/src/webserver/build/client/assets/InteractivePreview-D-9pXIaY.js +0 -25
  601. package/codeyam-cli/src/webserver/build/client/assets/ReportIssueModal-4lcOlid-.js +0 -11
  602. package/codeyam-cli/src/webserver/build/client/assets/ScenarioViewer-CUxUNEEC.js +0 -15
  603. package/codeyam-cli/src/webserver/build/client/assets/_index-DHImXdXq.js +0 -11
  604. package/codeyam-cli/src/webserver/build/client/assets/activity.(_tab)-2mG6mjVb.js +0 -32
  605. package/codeyam-cli/src/webserver/build/client/assets/chunk-JMJ3UQ3L-BambyYE_.js +0 -51
  606. package/codeyam-cli/src/webserver/build/client/assets/cy-logo-cli-CKnwPCDr.js +0 -1
  607. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-DW_hdGUc.js +0 -1
  608. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-DyB90fWk.js +0 -1
  609. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-D_3ero5o.js +0 -1
  610. package/codeyam-cli/src/webserver/build/client/assets/files-ClR0d32A.js +0 -1
  611. package/codeyam-cli/src/webserver/build/client/assets/globals-C6vQASxy.css +0 -1
  612. package/codeyam-cli/src/webserver/build/client/assets/keyAttributeCoverage-CTlFMihX.js +0 -1
  613. package/codeyam-cli/src/webserver/build/client/assets/manifest-09d684be.js +0 -1
  614. package/codeyam-cli/src/webserver/build/client/assets/root-BxJUvKau.js +0 -56
  615. package/codeyam-cli/src/webserver/build/client/assets/settings-DgTyB-Wg.js +0 -1
  616. package/codeyam-cli/src/webserver/build/client/assets/simulations-CoNWGt0K.js +0 -1
  617. package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-BMIGFP-m.js +0 -1
  618. package/codeyam-cli/src/webserver/build/client/assets/useInteractiveMode-Dk_FQqWJ.js +0 -1
  619. package/codeyam-cli/src/webserver/build/client/assets/useReportContext-DsJbgMY9.js +0 -1
  620. package/codeyam-cli/src/webserver/build/server/assets/index-CV6i1S1A.js +0 -1
  621. package/codeyam-cli/src/webserver/build/server/assets/server-build-BDlyhfrv.js +0 -175
  622. package/packages/ai/src/lib/findMatchingAttribute.js +0 -77
  623. package/packages/ai/src/lib/findMatchingAttribute.js.map +0 -1
  624. package/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.js +0 -298
  625. package/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.js.map +0 -1
  626. package/packages/ai/src/lib/generateChangesEntityKeyAttributes.js +0 -226
  627. package/packages/ai/src/lib/generateChangesEntityKeyAttributes.js.map +0 -1
  628. package/packages/ai/src/lib/generateEntityKeyAttributes.js +0 -408
  629. package/packages/ai/src/lib/generateEntityKeyAttributes.js.map +0 -1
  630. package/packages/ai/src/lib/isFrontend.js +0 -5
  631. package/packages/ai/src/lib/isFrontend.js.map +0 -1
  632. package/packages/ai/src/lib/promptGenerators/generateEntityKeyAttributesGenerator.js +0 -40
  633. package/packages/ai/src/lib/promptGenerators/generateEntityKeyAttributesGenerator.js.map +0 -1
  634. package/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.js +0 -77
  635. package/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.js.map +0 -1
  636. /package/analyzer-template/{process → packages/process/src}/GlobalProcessManager.ts +0 -0
  637. /package/analyzer-template/{process → packages/process/src}/ProcessManager.ts +0 -0
  638. /package/analyzer-template/{process → packages/process/src}/index.ts +0 -0
  639. /package/analyzer-template/{process → packages/process/src}/managedExecAsync.ts +0 -0
  640. /package/codeyam-cli/src/webserver/build/client/assets/{api.link-scenario-value-l0sNRNKZ.js → api.health-l0sNRNKZ.js} +0 -0
  641. /package/codeyam-cli/src/webserver/build/client/assets/{api.update-key-attributes-l0sNRNKZ.js → api.restart-server-l0sNRNKZ.js} +0 -0
  642. /package/codeyam-cli/src/webserver/build/client/assets/{api.update-valid-values-l0sNRNKZ.js → api.rules-l0sNRNKZ.js} +0 -0
  643. /package/{background/src/lib/process → packages/process/src}/GlobalProcessManager.js +0 -0
  644. /package/{background/src/lib/process → packages/process/src}/index.js +0 -0
  645. /package/{background/src/lib/process → packages/process/src}/managedExecAsync.js +0 -0
@@ -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,254 +38,251 @@ export default async function prepareEntityDataStructures(
31
38
  projectAnalyzer: ProjectAnalyzer,
32
39
  options: AnalysisOptions,
33
40
  ): Promise<void> {
34
- // Process entities in parallel for speed
35
- await Promise.all(
36
- Array.from(allEntities).map(async (entity) => {
37
- // Check if already has cached data structure (unless force is set)
38
- const hasCache = !!entity.metadata?.isolatedDataStructure;
39
- const shouldRegenerateDataStructure =
40
- !hasCache || options.force || options.forceAll;
41
-
42
- // PHASE 1: Generate data structure (only for non-cached entities or when forced)
43
- // Wrapped in its own try-catch so PHASE 2 always runs even if this fails
44
- if (shouldRegenerateDataStructure) {
45
- try {
46
- const fileAnalyzer = projectAnalyzer.getFileAnalyzerByPath(
47
- 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
+ },
48
61
  );
49
- if (!fileAnalyzer) {
50
- awsLog(
51
- `CodeYam: prepareEntityDataStructures: FileAnalyzer not found`,
52
- {
53
- entityFilePath: entity.filePath,
54
- entityName: entity.name,
55
- },
56
- );
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
+ }
57
79
  // Still continue to PHASE 2 for server-only detection
58
80
  } else {
59
- const dataStructureInfo =
60
- await getEntityDataStructureAndFunctionCalls({
61
- entity,
62
- fileAnalyzer,
63
- });
64
-
65
- if (!dataStructureInfo?.isolatedDataStructure) {
66
- // Data structure generation failed - entity will proceed with empty schemas
67
- // This is okay - the entity can still be analyzed, just without detailed type info
68
- if (['visual', 'library'].includes(entity.entityType)) {
69
- // we'd really expect these to have data structures
70
- awsLog(
71
- `CodeYam: prepareEntityDataStructures: Failed to generate data structure for ${entity.filePath}:${entity.name}`,
72
- );
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
+ };
73
105
  }
74
- // Still continue to PHASE 2 for server-only detection
75
- } else {
76
- const {
77
- isolatedDataStructure,
78
- functionCalls,
79
- callVariableNames,
80
- } = dataStructureInfo;
81
-
82
- // Store data structure in entity metadata
83
- entity.metadata ||= {};
84
-
85
- // Deep clone dependencySchemas to avoid shared references
86
- // We need to clone because getReturnValue() returns direct references to schema objects
87
- // and multiple entities might reference the same dependency
88
- const clonedDependencySchemas: typeof isolatedDataStructure.dependencySchemas =
89
- {};
90
- for (const filePath in isolatedDataStructure.dependencySchemas) {
91
- clonedDependencySchemas[filePath] = {};
92
- for (const entityName in isolatedDataStructure
93
- .dependencySchemas[filePath]) {
94
- const depSchema =
95
- isolatedDataStructure.dependencySchemas[filePath][
96
- entityName
97
- ];
98
- clonedDependencySchemas[filePath][entityName] = {
99
- signatureSchema: { ...depSchema.signatureSchema },
100
- returnValueSchema: { ...depSchema.returnValueSchema },
101
- usageEquivalencies: depSchema.usageEquivalencies,
102
- sourceEquivalencies: depSchema.sourceEquivalencies,
103
- };
104
- }
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}`);
105
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
+ };
106
141
 
107
- entity.metadata.isolatedDataStructure = {
108
- signatureSchema: deduplicateFunctionSchemas(
109
- isolatedDataStructure.signatureSchema,
110
- ),
111
- returnValueSchema: deduplicateFunctionSchemas(
112
- isolatedDataStructure.returnValueSchema,
113
- ),
114
- equivalentSignatureVariables:
115
- isolatedDataStructure.equivalentSignatureVariables,
116
- dependencySchemas: clonedDependencySchemas,
117
- environmentVariables:
118
- isolatedDataStructure.environmentVariables,
119
- // Use enriched conditional usages with source tracing from analysis
120
- conditionalUsages: isolatedDataStructure.conditionalUsages,
121
- // Include root entity's equivalencies for merge step
122
- usageEquivalencies: isolatedDataStructure.usageEquivalencies,
123
- sourceEquivalencies: isolatedDataStructure.sourceEquivalencies,
124
- };
125
-
126
- // Detect wrapper requirements (Context providers, etc.)
127
- const wrapperRequirements = detectWrapperRequirements({
128
- entity,
129
- fileAnalyzer,
130
- });
131
- if (wrapperRequirements.length > 0) {
132
- entity.metadata.wrapperRequirements = wrapperRequirements;
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
+ }
150
+
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;
157
+ }
158
+ const relevantVariableNames =
159
+ callVariableNames[importedExport.name];
160
+ if (relevantVariableNames) {
161
+ importedExport.callVariableNames = relevantVariableNames;
133
162
  }
163
+ }
134
164
 
135
- // Annotate imported exports with function call information
136
- const importedExports = entity.metadata.importedExports ?? [];
137
- for (const importedExport of importedExports) {
138
- 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];
139
171
  if (relevantCalls) {
140
- importedExport.calls = relevantCalls;
172
+ info.calls = relevantCalls;
141
173
  }
142
- const relevantVariableNames =
143
- callVariableNames[importedExport.name];
174
+ const relevantVariableNames = callVariableNames[info.name];
144
175
  if (relevantVariableNames) {
145
- importedExport.callVariableNames = relevantVariableNames;
146
- }
147
- }
148
-
149
- // Annotate node module imports with function call information
150
- for (const [path, infos] of Object.entries(
151
- entity.metadata.nodeModuleImports ?? {},
152
- )) {
153
- for (const info of infos) {
154
- const relevantCalls = functionCalls[info.name];
155
- if (relevantCalls) {
156
- info.calls = relevantCalls;
157
- }
158
- const relevantVariableNames = callVariableNames[info.name];
159
- if (relevantVariableNames) {
160
- info.callVariableNames = relevantVariableNames;
161
- }
176
+ info.callVariableNames = relevantVariableNames;
162
177
  }
163
178
  }
164
179
  }
165
180
  }
166
- } catch (phase1Error) {
167
- console.warn(
168
- `CodeYam: prepareEntityDataStructures: PHASE 1 error for ${entity.filePath}:${entity.name}:`,
169
- phase1Error,
170
- );
171
- // Continue to PHASE 2 - server-only detection should still run
172
181
  }
182
+ } catch (phase1Error) {
183
+ console.warn(
184
+ `CodeYam: prepareEntityDataStructures: PHASE 1 error for ${entity.filePath}:${entity.name}:`,
185
+ phase1Error,
186
+ );
187
+ // Continue to PHASE 2 - server-only detection should still run
173
188
  }
189
+ }
174
190
 
175
- try {
176
- // PHASE 2: Server-only detection and isMocked determination
177
- // This runs for ALL entities, even those with cached data structures
178
- // because server-only detection may have been added after the entity was cached
179
- const importedExports = entity.metadata?.importedExports ?? [];
180
- const mockedDependencies = determineMockedDependencies(entity);
181
- for (const importedExport of importedExports) {
182
- // Skip if already has a definitive isMocked value (true or false, not null)
183
- // But re-check if isMocked is null or undefined - this handles previously cached entities
184
- if (
185
- importedExport.isMocked === true ||
186
- importedExport.isMocked === false
187
- ) {
188
- console.log(
189
- `CodeYam: [${entity.name}] SKIP ${importedExport.name} - already has isMocked=${importedExport.isMocked}`,
190
- );
191
- continue;
192
- }
193
-
194
- // Never mock visual components - they render UI and should use real implementation
195
- if (importedExport.entityType === 'visual') {
196
- console.log(
197
- `CodeYam: [${entity.name}] SKIP ${importedExport.name} - visual component, setting isMocked=false`,
198
- );
199
- importedExport.isMocked = false;
200
- continue;
201
- }
202
-
203
- // Always mock imports from server-only files ("use server" or import "server-only")
204
- // These files contain Server Actions or server-only code that cannot run on the client
205
- const importedFilePath =
206
- importedExport.resolvedFilePath ?? importedExport.filePath;
207
- const importedFileAnalyzer =
208
- projectAnalyzer.getFileAnalyzerByPath(importedFilePath);
209
- // Use sourceFile.getText() which is always available, unlike file.content which is lazy-loaded
210
- const importedFileContent =
211
- importedFileAnalyzer?.sourceFile?.getText();
212
-
213
- const isServerOnly = importedFileContent
214
- ? isServerOnlyFile(importedFileContent)
215
- : false;
216
- console.log(
217
- `CodeYam: [${entity.name}] CHECK ${importedExport.name} from ${importedFilePath}:`,
218
- {
219
- hasFileAnalyzer: !!importedFileAnalyzer,
220
- hasSourceFile: !!importedFileAnalyzer?.sourceFile,
221
- hasFileContent: !!importedFileContent,
222
- contentFirst50Chars: importedFileContent
223
- ?.substring(0, 50)
224
- ?.replace(/\n/g, '\\n'),
225
- isServerOnly,
226
- },
227
- );
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
+ }
228
206
 
229
- if (importedFileContent && isServerOnly) {
230
- console.log(
231
- `CodeYam: [${entity.name}] ✓ MARKING ${importedExport.name} as isMocked=true (server-only file detected)`,
232
- );
233
- importedExport.isMocked = true;
234
- continue;
235
- }
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
+ }
236
212
 
237
- const matchesMockedDep = mockedDependencies.some(
238
- (dep) =>
239
- dep.filePath === importedExport.filePath &&
240
- dep.entityName === importedExport.name,
241
- );
242
- importedExport.isMocked = matchesMockedDep;
243
- console.log(
244
- `CodeYam: [${entity.name}] ${importedExport.name} isMocked=${matchesMockedDep} (from mockedDependencies)`,
245
- );
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;
246
229
  }
247
230
 
248
- // Browser globals that should always be mocked (they make network calls)
249
- const alwaysMockedBrowserGlobals = ['fetch', 'EventSource'];
250
-
251
- for (const [path, infos] of Object.entries(
252
- entity.metadata?.nodeModuleImports ?? {},
253
- )) {
254
- for (const info of infos) {
255
- if (info.isMocked === undefined || info.isMocked === null) {
256
- // Browser globals should always be mocked
257
- if (alwaysMockedBrowserGlobals.includes(path)) {
258
- info.isMocked = true;
259
- } else {
260
- // Check if this dependency should be mocked
261
- // Match both exact entityName and variable-qualified entityNames
262
- // e.g., "useFetcher" matches "useFetcher" OR "useFetcher::userFetcher"
263
- info.isMocked = mockedDependencies.some(
264
- (dep) =>
265
- dep.filePath === path &&
266
- (dep.entityName === info.name ||
267
- dep.entityName.startsWith(info.name + '::')),
268
- );
269
- }
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
+ );
270
260
  }
271
261
  }
272
262
  }
273
- } catch (error) {
274
- console.warn(
275
- `CodeYam: prepareEntityDataStructures: Error preparing ${entity.filePath}:${entity.name}:`,
276
- error,
277
- );
278
- // Continue with other entities - this one will have empty schemas
279
263
  }
280
- }),
281
- );
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
+ }
282
286
  }
283
287
 
284
288
  /**
@@ -328,19 +332,21 @@ async function getEntityDataStructureAndFunctionCalls({
328
332
  functionName: importedExport.name,
329
333
  });
330
334
 
331
- // If no signature found, this function doesn't exist in the analysis
332
- if (!signatureSchema) {
333
- return acc;
334
- }
335
-
336
335
  const returnValueSchema = getReturnValue(dataStructure, {
337
336
  functionName: importedExport.name,
338
337
  });
339
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
+
340
346
  // Clone schemas before deduplication to avoid mutating shared references
341
347
  // getReturnValue() and getFunctionSignature() return direct references, so we need
342
348
  // to clone them before passing to deduplicateFunctionSchemas (which may mutate)
343
- const clonedSignatureSchema = { ...signatureSchema };
349
+ const clonedSignatureSchema = { ...(signatureSchema ?? {}) };
344
350
  const clonedReturnValueSchema = { ...(returnValueSchema ?? {}) };
345
351
 
346
352
  acc[importedExport.filePath] ||= {};
@@ -365,32 +371,105 @@ async function getEntityDataStructureAndFunctionCalls({
365
371
  fc.name.startsWith(importedExport.name + '<'),
366
372
  );
367
373
 
368
- // Track how many times each variable name has been seen across ALL matching calls
369
- // This handles the case where multiple parameterized calls (e.g., useFetcher<ConfigData>,
370
- // useFetcher<SettingsData>) assign to the same variable name
371
- const varNameCounts: Record<string, number> = {};
372
-
373
374
  for (const efc of matchingCalls) {
374
- // Check if this call has perVariableSchemas (multiple calls with same signature)
375
+ // Check if this call has perVariableSchemas (multiple calls with variable tracking)
375
376
  if (efc?.perVariableSchemas) {
376
- for (const [varName, perVarSchema] of Object.entries(
377
- efc.perVariableSchemas,
378
- )) {
379
- // Track occurrences of this variable name
380
- const occurrence = varNameCounts[varName] ?? 0;
381
- varNameCounts[varName] = occurrence + 1;
382
-
383
- // Use indexed key if variable name is reused (e.g., fetcher, fetcher[1])
384
- const indexedVarName =
385
- occurrence === 0 ? varName : `${varName}[${occurrence}]`;
386
- const qualifiedKey = `${importedExport.name}::${indexedVarName}`;
387
- acc[importedExport.filePath][qualifiedKey] = {
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] = {
388
467
  signatureSchema: deduplicateFunctionSchemas({
389
468
  ...signatureSchema,
390
469
  }),
391
- returnValueSchema: deduplicateFunctionSchemas({
392
- ...perVarSchema,
393
- }),
470
+ returnValueSchema: deduplicateFunctionSchemas(
471
+ mergedReturnValueSchema,
472
+ ),
394
473
  usageEquivalencies:
395
474
  getUsageEquivalencies(dataStructure, importedExport.name) ?? {},
396
475
  sourceEquivalencies:
@@ -400,18 +479,11 @@ async function getEntityDataStructureAndFunctionCalls({
400
479
  }
401
480
  } else if (efc?.receivingVariableNames?.length === 1) {
402
481
  // For parameterized calls like useFetcher<UserData>(), each is a separate entry
403
- // with a single receivingVariableName. Create a variable-qualified entry using
404
- // the specific return value for this parameterized call.
482
+ // with a single receivingVariableName. Use the call signature as the key.
405
483
  const varName = efc.receivingVariableNames[0];
406
484
 
407
- // Track occurrences of this variable name across all efc entries
408
- const occurrence = varNameCounts[varName] ?? 0;
409
- varNameCounts[varName] = occurrence + 1;
410
-
411
- // Use indexed key if variable name is reused (e.g., fetcher, fetcher[1])
412
- const indexedVarName =
413
- occurrence === 0 ? varName : `${varName}[${occurrence}]`;
414
- const qualifiedKey = `${importedExport.name}::${indexedVarName}`;
485
+ // Use the call signature as the key (e.g., "useFetcher<UserData>()")
486
+ const callSignatureKey = efc.callSignature;
415
487
 
416
488
  // PREFER perVariableSchemas over getReturnValue() when available
417
489
  // perVariableSchemas has the SPECIFIC schema for this parameterized call,
@@ -434,7 +506,7 @@ async function getEntityDataStructureAndFunctionCalls({
434
506
  parameterizedReturnValue &&
435
507
  Object.keys(parameterizedReturnValue).length > 0
436
508
  ) {
437
- acc[importedExport.filePath][qualifiedKey] = {
509
+ acc[importedExport.filePath][callSignatureKey] = {
438
510
  signatureSchema: deduplicateFunctionSchemas({
439
511
  ...signatureSchema,
440
512
  }),
@@ -483,9 +555,21 @@ async function getEntityDataStructureAndFunctionCalls({
483
555
  // Get enriched conditional usages with source tracing
484
556
  const conditionalUsages = getConditionalUsages(dataStructure);
485
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);
486
563
  const rawUsageEquivalencies = getUsageEquivalencies(dataStructure);
487
564
  const rawSourceEquivalencies = getSourceEquivalencies(dataStructure);
488
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
+
489
573
  const isolatedDataStructure = {
490
574
  signatureSchema: deduplicateFunctionSchemas(clonedRawSignature),
491
575
  returnValueSchema: deduplicateFunctionSchemas(clonedRawReturnValue),
@@ -495,11 +579,28 @@ async function getEntityDataStructureAndFunctionCalls({
495
579
  environmentVariables: dataStructure.environmentVariables,
496
580
  conditionalUsages:
497
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,
498
589
  // Include root entity's equivalencies so they can be used during merge.
499
590
  // These show how the parent's data flows to/from child components.
500
591
  // E.g., for SurveysList, usageEquivalencies shows surveys[] → SurveyCard().signature[0].survey
501
592
  usageEquivalencies: rawUsageEquivalencies ?? {},
502
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,
503
604
  };
504
605
 
505
606
  const functionCalls: Record<string, string[]> = {};
@@ -557,6 +658,7 @@ async function getEntityDataStructureAndFunctionCalls({
557
658
  ) {
558
659
  variableNames.push(...aggregatedReceivingVariableNames);
559
660
  }
661
+
560
662
  if (variableNames.length > 0) {
561
663
  callVariableNames[entityName] = variableNames;
562
664
  }
@@ -776,14 +878,28 @@ export function determineMockedDependencies(entity: Entity) {
776
878
  entityReturnValueSchema,
777
879
  );
778
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
+
779
886
  const entityShouldBeMocked =
780
887
  !onlyHasJsxComponents &&
781
888
  (isValidationFn ||
782
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) ||
783
899
  ((signatureHasFunctions || returnValueHasFunctions) &&
784
900
  hasReturnValue &&
785
- ((emptySignature && hasReturnValue) ||
786
- (!complexSignature && complexReturnValue))));
901
+ !complexSignature &&
902
+ complexReturnValue));
787
903
 
788
904
  if (entityShouldBeMocked) {
789
905
  mockedEntities.push({