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

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