@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
@@ -21,6 +21,25 @@ function cleanFunctionName(functionName: string) {
21
21
  return functionName?.split('<')[0];
22
22
  }
23
23
 
24
+ // Extract the type parameter from a function name, e.g., 'useFetcher<{ data: UserData }>()' -> '{ data: UserData }'
25
+ function getTypeParameter(functionName: string): string | null {
26
+ if (!functionName) return null;
27
+ const openBracket = functionName.indexOf('<');
28
+ if (openBracket === -1) return null;
29
+ // Find matching closing bracket, accounting for nested brackets
30
+ let depth = 0;
31
+ for (let i = openBracket; i < functionName.length; i++) {
32
+ if (functionName[i] === '<') depth++;
33
+ else if (functionName[i] === '>') {
34
+ depth--;
35
+ if (depth === 0) {
36
+ return functionName.slice(openBracket + 1, i);
37
+ }
38
+ }
39
+ }
40
+ return null;
41
+ }
42
+
24
43
  // Check if schemaPathPart matches or is a function call variant of pathPart
25
44
  // e.g., 'isEntityBeingAnalyzed(entity.sha)' matches 'isEntityBeingAnalyzed'
26
45
  function pathPartMatches(pathPart: string, schemaPathPart: string): boolean {
@@ -74,47 +93,6 @@ export default function mergeInDependentDataStructure({
74
93
  };
75
94
  };
76
95
  }) {
77
- // writeFile(
78
- // 'mergeInDependentDataStructure-debug.json',
79
- // JSON.stringify(
80
- // {
81
- // importedExports: importedExports.map((d) => ({
82
- // filePath: d.filePath,
83
- // name: d.name,
84
- // isMocked: d.isMocked,
85
- // })),
86
- // dependentAnalyses: Object.keys(dependentAnalyses).reduce(
87
- // (pathAcc: Record<string, any>, filePath) => {
88
- // pathAcc[filePath] = Object.keys(dependentAnalyses[filePath]).reduce(
89
- // (nameAcc, name) => {
90
- // nameAcc[name] = {
91
- // metadata: {
92
- // mergedDataStructure:
93
- // dependentAnalyses[filePath][name].metadata
94
- // .mergedDataStructure,
95
- // },
96
- // };
97
- // return nameAcc;
98
- // },
99
- // {} as { [name: string]: {
100
- // metadata?: {
101
- // mergedDataStructure?: ReadonlyAnalysis['metadata']['mergedDataStructure'];
102
- // };
103
- // } },
104
- // );
105
- // return pathAcc;
106
- // },
107
- // {},
108
- // ),
109
- // rootScopeName,
110
- // dataStructure,
111
- // dependencySchemas,
112
- // },
113
- // null,
114
- // 2,
115
- // ),
116
- // ).catch(() => {});
117
-
118
96
  const mergedDataStructure: Omit<
119
97
  DataStructure,
120
98
  'equivalentSignatureVariables'
@@ -127,6 +105,44 @@ export default function mergeInDependentDataStructure({
127
105
  environmentVariables: [...(dataStructure.environmentVariables || [])],
128
106
  };
129
107
 
108
+ // Build a set of functions that have multiple DIFFERENT type parameters.
109
+ // For these functions, we must NOT normalize paths to avoid merging different schemas.
110
+ // e.g., if we have both useFetcher<{ data: UserData }>() and useFetcher<{ data: ConfigData }>(),
111
+ // they must stay separate and not both become 'returnValue'.
112
+ const functionsWithMultipleTypeParams = new Set<string>();
113
+ const typeParamsByFunction: Record<string, Set<string>> = {};
114
+
115
+ // Helper to scan a schema for type parameters
116
+ const scanSchemaForTypeParams = (schema: { [key: string]: string }) => {
117
+ for (const schemaPath of Object.keys(schema ?? {})) {
118
+ const parts = splitOutsideParenthesesAndArrays(schemaPath);
119
+ if (parts.length > 0) {
120
+ const firstPart = parts[0];
121
+ const typeParam = getTypeParameter(firstPart);
122
+ if (typeParam) {
123
+ const baseName = cleanFunctionName(firstPart);
124
+ typeParamsByFunction[baseName] ||= new Set();
125
+ typeParamsByFunction[baseName].add(typeParam);
126
+ if (typeParamsByFunction[baseName].size > 1) {
127
+ functionsWithMultipleTypeParams.add(baseName);
128
+ }
129
+ }
130
+ }
131
+ }
132
+ };
133
+
134
+ // Scan the root entity's schema
135
+ scanSchemaForTypeParams(dataStructure.returnValueSchema);
136
+
137
+ // Also scan all dependency schemas for type parameters
138
+ for (const filePath of Object.keys(dependencySchemas ?? {})) {
139
+ for (const name of Object.keys(dependencySchemas[filePath] ?? {})) {
140
+ scanSchemaForTypeParams(
141
+ dependencySchemas[filePath][name]?.returnValueSchema,
142
+ );
143
+ }
144
+ }
145
+
130
146
  let equivalentSchemaPaths: {
131
147
  equivalentRoots: {
132
148
  schemaRootPath: string;
@@ -185,6 +201,15 @@ export default function mergeInDependentDataStructure({
185
201
  const pathParts = splitOutsideParenthesesAndArrays(path);
186
202
  if (pathParts.length > 1) {
187
203
  if (pathParts[1].startsWith('functionCallReturnValue')) {
204
+ // Check if this function has multiple DIFFERENT type parameters.
205
+ // If so, DON'T normalize to returnValue - keep the full path to avoid
206
+ // merging different type-parameterized variants together.
207
+ // e.g., useFetcher<{ data: UserData }>().functionCallReturnValue.data
208
+ // should NOT be merged with useFetcher<{ data: ConfigData }>().functionCallReturnValue.data
209
+ const baseName = cleanFunctionName(pathParts[0]);
210
+ if (functionsWithMultipleTypeParams.has(baseName)) {
211
+ return path; // Keep the original path with type parameters
212
+ }
188
213
  // functionCallReturnValue immediately follows - normalize to returnValue
189
214
  // e.g., useAuth().functionCallReturnValue.user -> returnValue.user
190
215
  return joinParenthesesAndArrays([
@@ -280,19 +305,176 @@ export default function mergeInDependentDataStructure({
280
305
  return equivalentSchemaPathsEntry;
281
306
  };
282
307
 
283
- for (const equivalencies of [
308
+ // Helper to extract function name from a path that starts with a function call.
309
+ // e.g., 'ScenarioViewer().signature[0].scenario' -> 'ScenarioViewer'
310
+ // Returns undefined if the path doesn't start with a function call or the function isn't a dependency.
311
+ const extractFunctionNameFromPath = (path: string): string | undefined => {
312
+ const parts = splitOutsideParenthesesAndArrays(path);
313
+ if (parts.length > 0 && parts[0].endsWith(')')) {
314
+ // Extract the function name without the () suffix and type params
315
+ const funcCallPart = parts[0];
316
+ const funcName = cleanFunctionName(funcCallPart.replace(/\(\)$/, ''));
317
+ // Check if this function is a dependency
318
+ if (findRelevantDependency(funcName)) {
319
+ return funcName;
320
+ }
321
+ }
322
+ return undefined;
323
+ };
324
+
325
+ const allEquivalencies = [
284
326
  sourceAndUsageEquivalencies.usageEquivalencies,
285
327
  sourceAndUsageEquivalencies.sourceEquivalencies,
286
- ].filter(Boolean)) {
287
- for (const [schemaPath, usages] of Object.entries(equivalencies)) {
328
+ ].filter(Boolean);
329
+
330
+ for (const equivalencies of allEquivalencies) {
331
+ const schemaPathEntries = Object.entries(equivalencies);
332
+ for (const [schemaPath, usages] of schemaPathEntries) {
333
+ // First, check if the raw schemaPath starts with a function call to a dependency.
334
+ // If so, use that dependency name for translation (so translatePath can strip the prefix).
335
+ const extractedFuncName = extractFunctionNameFromPath(schemaPath);
336
+ const effectiveFunctionName = extractedFuncName || functionName;
337
+ const translatedPath = translatePath(schemaPath, effectiveFunctionName);
338
+
288
339
  const allPaths: { path: string; functionName?: string }[] = [
289
- { path: translatePath(schemaPath, functionName), functionName },
340
+ { path: translatedPath, functionName: effectiveFunctionName },
290
341
  ...usages.map((u) => ({
291
342
  path: translatePath(u.schemaPath, u.scopeNodeName),
292
343
  functionName: u.scopeNodeName,
293
344
  })),
294
345
  ].filter((pathInfo) => !pathInfo.path.includes('.map('));
295
346
 
347
+ // Fix 38: Derive base paths from property access paths.
348
+ // When we have equivalent paths like:
349
+ // Parent: signature[0].scenarios[].name
350
+ // Child: signature[0].selectedScenario.name
351
+ // We want to derive the base paths by finding the common suffix:
352
+ // Common suffix: .name
353
+ // Parent base: signature[0].scenarios[]
354
+ // Child base: signature[0].selectedScenario
355
+ // This allows the merge to find nested child schema fields under the base prop.
356
+
357
+ // Find child signature paths (paths from child components)
358
+ const childPaths = allPaths.filter(
359
+ (p) =>
360
+ p.functionName &&
361
+ p.functionName !== rootScopeName &&
362
+ p.functionName !== effectiveFunctionName,
363
+ );
364
+ // Find parent paths (paths from this component)
365
+ const parentPaths = allPaths.filter(
366
+ (p) =>
367
+ !p.functionName ||
368
+ p.functionName === rootScopeName ||
369
+ p.functionName === effectiveFunctionName,
370
+ );
371
+
372
+ const derivedBasePaths: { path: string; functionName?: string }[] = [];
373
+
374
+ // For each child path, find its equivalent parent path and derive bases
375
+ for (const childPathInfo of childPaths) {
376
+ const childParts = splitOutsideParenthesesAndArrays(
377
+ childPathInfo.path,
378
+ );
379
+
380
+ // Look for a parent path that shares a common suffix with this child path
381
+ for (const parentPathInfo of parentPaths) {
382
+ const parentParts = splitOutsideParenthesesAndArrays(
383
+ parentPathInfo.path,
384
+ );
385
+
386
+ // Find the common suffix (from the end)
387
+ let commonSuffixLength = 0;
388
+ const minLen = Math.min(childParts.length, parentParts.length);
389
+ for (let i = 1; i <= minLen; i++) {
390
+ if (
391
+ childParts[childParts.length - i] ===
392
+ parentParts[parentParts.length - i]
393
+ ) {
394
+ commonSuffixLength = i;
395
+ } else {
396
+ break;
397
+ }
398
+ }
399
+
400
+ // If there's a common suffix and both paths have more parts than the suffix
401
+ if (
402
+ commonSuffixLength > 0 &&
403
+ childParts.length > commonSuffixLength &&
404
+ parentParts.length > commonSuffixLength
405
+ ) {
406
+ const childBaseParts = childParts.slice(
407
+ 0,
408
+ childParts.length - commonSuffixLength,
409
+ );
410
+ const parentBaseParts = parentParts.slice(
411
+ 0,
412
+ parentParts.length - commonSuffixLength,
413
+ );
414
+
415
+ // Only derive if BOTH paths look like signature paths.
416
+ // This ensures we're handling JSX child-to-parent prop mappings,
417
+ // not other complex equivalencies like function call returns.
418
+ const isChildSignaturePath =
419
+ childBaseParts[0]?.startsWith('signature[') ||
420
+ (childBaseParts[0]?.endsWith(')') &&
421
+ childBaseParts[1]?.startsWith('signature['));
422
+ const isParentSignaturePath =
423
+ parentBaseParts[0]?.startsWith('signature[');
424
+
425
+ if (isChildSignaturePath && isParentSignaturePath) {
426
+ const childBase = joinParenthesesAndArrays(childBaseParts);
427
+ const parentBase = joinParenthesesAndArrays(parentBaseParts);
428
+
429
+ // Only derive if:
430
+ // 1. Parent has array iteration (e.g., scenarios[]) and child does NOT
431
+ // 2. Bases are different
432
+ // 3. Child base is NOT just "signature[N]" (too generic - every component has this)
433
+ // We only want specific prop paths like "signature[0].selectedScenario"
434
+ // This targets array-to-object mappings like scenarios[] -> selectedScenario
435
+ const parentHasArrayIterator = parentBase.includes('[]');
436
+ const childHasArrayIterator = childBase.includes('[]');
437
+
438
+ // Skip if child base is just the generic signature marker (e.g., "signature[0]")
439
+ const childBaseIsGenericSignature = /^signature\[\d+\]$/.test(
440
+ childBase,
441
+ );
442
+
443
+ if (
444
+ childBase !== parentBase &&
445
+ parentHasArrayIterator &&
446
+ !childHasArrayIterator &&
447
+ !childBaseIsGenericSignature
448
+ ) {
449
+ // Add child base if not already present
450
+ const childBaseExists =
451
+ allPaths.some((p) => p.path === childBase) ||
452
+ derivedBasePaths.some((p) => p.path === childBase);
453
+ if (!childBaseExists) {
454
+ derivedBasePaths.push({
455
+ path: childBase,
456
+ functionName: childPathInfo.functionName,
457
+ });
458
+ }
459
+
460
+ // Add parent base if not already present
461
+ const parentBaseExists =
462
+ allPaths.some((p) => p.path === parentBase) ||
463
+ derivedBasePaths.some((p) => p.path === parentBase);
464
+ if (!parentBaseExists) {
465
+ derivedBasePaths.push({
466
+ path: parentBase,
467
+ functionName: parentPathInfo.functionName,
468
+ });
469
+ }
470
+ }
471
+ }
472
+ }
473
+ }
474
+ }
475
+
476
+ allPaths.push(...derivedBasePaths);
477
+
296
478
  const entry = findOrCreateEquivalentSchemaPathsEntry(allPaths);
297
479
  for (const equivalentRoot of entry.equivalentRoots) {
298
480
  const dataStructures =
@@ -308,26 +490,52 @@ export default function mergeInDependentDataStructure({
308
490
  ]
309
491
  : [dataStructure];
310
492
 
493
+ // Determine if this is a signature schema path.
494
+ // The path might be 'signature[0]...' directly, or 'FuncName().signature[0]...' if it has a function prefix.
495
+ const schemaRootParts = splitOutsideParenthesesAndArrays(
496
+ equivalentRoot.schemaRootPath,
497
+ );
498
+ const isSignaturePath =
499
+ equivalentRoot.schemaRootPath.startsWith('signature[') ||
500
+ (schemaRootParts[0]?.endsWith(')') &&
501
+ schemaRootParts[1]?.startsWith('signature['));
502
+
311
503
  const schemas = dataStructures.map((dataStructure) =>
312
- equivalentRoot.schemaRootPath.startsWith('signature[')
504
+ isSignaturePath
313
505
  ? dataStructure?.signatureSchema
314
506
  : dataStructure?.returnValueSchema,
315
507
  );
316
508
 
317
- const pathParts = splitOutsideParenthesesAndArrays(
509
+ let pathParts = splitOutsideParenthesesAndArrays(
318
510
  equivalentRoot.schemaRootPath,
319
511
  );
320
512
 
513
+ // Fix: When processing a child component's schema, the schemaRootPath has the function
514
+ // prefix (e.g., 'ScenarioViewer().signature[0].scenario'), but the child's schema paths
515
+ // don't have that prefix (e.g., 'signature[0].scenario.metadata.screenshotPaths').
516
+ // Strip the function prefix from pathParts so they can match.
517
+ if (
518
+ equivalentRoot.function &&
519
+ pathParts[0].endsWith(')') &&
520
+ pathParts[1]?.startsWith('signature[')
521
+ ) {
522
+ pathParts = pathParts.slice(1);
523
+ }
524
+
321
525
  for (const schema of schemas) {
322
526
  for (const schemaPath in schema) {
323
527
  let schemaPathParts =
324
528
  splitOutsideParenthesesAndArrays(schemaPath);
325
529
 
326
530
  if (schemaPathParts[0].startsWith(functionName)) {
327
- schemaPathParts =
328
- schemaPathParts[1] === 'functionCallReturnValue'
329
- ? ['returnValue', ...schemaPathParts.slice(2)]
330
- : schemaPathParts.slice(1);
531
+ // Only normalize if the function doesn't have multiple different type parameters
532
+ const baseName = cleanFunctionName(schemaPathParts[0]);
533
+ if (!functionsWithMultipleTypeParams.has(baseName)) {
534
+ schemaPathParts =
535
+ schemaPathParts[1] === 'functionCallReturnValue'
536
+ ? ['returnValue', ...schemaPathParts.slice(2)]
537
+ : schemaPathParts.slice(1);
538
+ }
331
539
  }
332
540
 
333
541
  if (schemaPathParts.length < pathParts.length) continue;
@@ -662,9 +870,10 @@ export default function mergeInDependentDataStructure({
662
870
  continue;
663
871
  }
664
872
 
665
- const mergedDataStructure =
873
+ const childMergedDataStructure =
666
874
  dependentAnalyses[filePath][name].metadata?.mergedDataStructure || {};
667
- gatherAllEquivalentSchemaPaths(name, mergedDataStructure);
875
+
876
+ gatherAllEquivalentSchemaPaths(name, childMergedDataStructure as any);
668
877
  }
669
878
  }
670
879
 
@@ -925,6 +1134,164 @@ export default function mergeInDependentDataStructure({
925
1134
  }
926
1135
 
927
1136
  cleanSchema(depSchema.returnValueSchema);
1137
+
1138
+ // Pull signature requirements from downstream functions into the mocked return value.
1139
+ // When a mocked function's return flows into another function's signature (via usageEquivalencies),
1140
+ // we need to include that function's signature requirements in the mock.
1141
+ //
1142
+ // Example: fromE5() returns a currency object that flows to calculateTotalPrice(price, quantity).
1143
+ // calculateTotalPrice's signatureSchema shows signature[0].multiply() is required.
1144
+ // We need to add multiply() to fromE5's mock return value.
1145
+ const usageEquivalencies = srcSchema.usageEquivalencies ?? {};
1146
+ for (const [returnPath, equivalencies] of Object.entries(
1147
+ usageEquivalencies,
1148
+ )) {
1149
+ // Only process return value paths (functionCallReturnValue)
1150
+ if (!returnPath.includes('.functionCallReturnValue')) continue;
1151
+
1152
+ for (const equiv of equivalencies) {
1153
+ // Check if this equivalency points to a signature path
1154
+ const signatureMatch = equiv.schemaPath.match(/\.signature\[(\d+)\]$/);
1155
+ if (!signatureMatch) continue;
1156
+
1157
+ const targetFunctionName = cleanFunctionName(equiv.scopeNodeName);
1158
+ const signatureIndex = signatureMatch[1];
1159
+
1160
+ // Look up the target function's analysis to get its signature requirements
1161
+ // First try dependentAnalyses, then dependencySchemas
1162
+ let targetSignatureSchema: Record<string, string> | undefined;
1163
+
1164
+ // Check dependentAnalyses first (has the full merged analysis)
1165
+ for (const depFilePath in dependentAnalyses) {
1166
+ const analysis = dependentAnalyses[depFilePath]?.[targetFunctionName];
1167
+ if (analysis?.metadata?.mergedDataStructure?.signatureSchema) {
1168
+ targetSignatureSchema =
1169
+ analysis.metadata.mergedDataStructure.signatureSchema;
1170
+ break;
1171
+ }
1172
+ }
1173
+
1174
+ // Fallback to dependencySchemas if not found
1175
+ if (!targetSignatureSchema) {
1176
+ for (const depFilePath in dependencySchemas) {
1177
+ const schema = dependencySchemas[depFilePath]?.[targetFunctionName];
1178
+ if (schema?.signatureSchema) {
1179
+ targetSignatureSchema = schema.signatureSchema;
1180
+ break;
1181
+ }
1182
+ }
1183
+ }
1184
+
1185
+ if (!targetSignatureSchema) continue;
1186
+
1187
+ // Find all paths in the target's signatureSchema that extend from signature[N]
1188
+ // e.g., signature[0].multiply(quantity) -> .multiply(quantity)
1189
+ const signaturePrefix = `signature[${signatureIndex}]`;
1190
+ for (const [sigPath, sigType] of Object.entries(
1191
+ targetSignatureSchema,
1192
+ )) {
1193
+ if (!sigPath.startsWith(signaturePrefix)) continue;
1194
+
1195
+ // Skip the base signature[N] path itself - we only want the method/property extensions
1196
+ if (sigPath === signaturePrefix) continue;
1197
+
1198
+ // Extract the suffix after signature[N] (e.g., ".multiply(quantity)")
1199
+ const suffix = sigPath.slice(signaturePrefix.length);
1200
+
1201
+ // Build the path for the mocked return value
1202
+ // e.g., fromE5(priceE5).functionCallReturnValue.multiply(quantity)
1203
+ const returnValuePath = returnPath + suffix;
1204
+
1205
+ // Add to the mocked dependency's return value schema if not already present
1206
+ if (!(returnValuePath in depSchema.returnValueSchema)) {
1207
+ depSchema.returnValueSchema[returnValuePath] = sigType;
1208
+ }
1209
+ }
1210
+ }
1211
+ }
1212
+
1213
+ cleanSchema(depSchema.returnValueSchema);
1214
+ }
1215
+
1216
+ // Process the input dependencySchemas FIRST (before child dependentAnalyses).
1217
+ // This ensures the parent entity's direct usage of dependencies takes precedence.
1218
+ // When both parent and child use the same dependency (e.g., useLoaderData),
1219
+ // the parent's schema paths are preserved, and child's paths are merged in later.
1220
+ //
1221
+ // Some dependencies (like .d.ts type declaration files) may not have:
1222
+ // - Equivalencies with the root scope
1223
+ // - A dependent analysis (they're just type declarations)
1224
+ // - Be marked as mocked
1225
+ // Without this, their schemas would be lost entirely.
1226
+ for (const filePath in dependencySchemas) {
1227
+ for (const name in dependencySchemas[filePath]) {
1228
+ const srcSchema = dependencySchemas[filePath][name];
1229
+ if (!srcSchema) continue;
1230
+
1231
+ // Skip mocked dependencies - they were already processed above with path normalization
1232
+ if (mockedDependencies.has(`${filePath}::${name}`)) {
1233
+ continue;
1234
+ }
1235
+
1236
+ // Check if this dependency was already processed by equivalencies
1237
+ const existingSchema =
1238
+ mergedDataStructure.dependencySchemas[filePath]?.[name];
1239
+
1240
+ // Only add if no existing schema (equivalencies didn't process it)
1241
+ if (!existingSchema) {
1242
+ const depSchema = findOrCreateDependentSchemas({ filePath, name });
1243
+ for (const path in srcSchema.returnValueSchema) {
1244
+ depSchema.returnValueSchema[path] = srcSchema.returnValueSchema[path];
1245
+ }
1246
+ for (const path in srcSchema.signatureSchema) {
1247
+ depSchema.signatureSchema[path] = srcSchema.signatureSchema[path];
1248
+ }
1249
+
1250
+ // Clean known object functions (like String.prototype.replace, Array.prototype.map)
1251
+ // from the copied schema. Without this, method call paths on primitives like
1252
+ // "projectSlug.replace(...)" would cause convertDotNotation to create nested
1253
+ // object structures instead of preserving the primitive type.
1254
+ cleanSchema(depSchema.returnValueSchema);
1255
+ }
1256
+
1257
+ // For functions with multiple different type parameters, also create separate entries
1258
+ // for each type-parameterized variant. This allows gatherDataForMocks to look up
1259
+ // the specific schema for each call signature.
1260
+ // This runs regardless of whether the base entry already existed, since we need
1261
+ // the separate variant entries for proper schema lookup.
1262
+ const baseName = cleanFunctionName(name);
1263
+ if (functionsWithMultipleTypeParams.has(baseName)) {
1264
+ // Find all unique type-parameterized call signatures in the schema
1265
+ const typeParamVariants = new Set<string>();
1266
+ for (const path of Object.keys(srcSchema.returnValueSchema)) {
1267
+ const parts = splitOutsideParenthesesAndArrays(path);
1268
+ if (
1269
+ parts.length > 0 &&
1270
+ parts[0].includes('<') &&
1271
+ parts[0].endsWith(')')
1272
+ ) {
1273
+ typeParamVariants.add(parts[0]);
1274
+ }
1275
+ }
1276
+
1277
+ // Create a separate entry for each type-parameterized variant
1278
+ for (const variant of typeParamVariants) {
1279
+ const variantSchema = findOrCreateDependentSchemas({
1280
+ filePath,
1281
+ name: variant,
1282
+ });
1283
+
1284
+ // Copy only paths that belong to this variant
1285
+ for (const path in srcSchema.returnValueSchema) {
1286
+ if (path.startsWith(variant)) {
1287
+ variantSchema.returnValueSchema[path] =
1288
+ srcSchema.returnValueSchema[path];
1289
+ }
1290
+ }
1291
+ cleanSchema(variantSchema.returnValueSchema);
1292
+ }
1293
+ }
1294
+ }
928
1295
  }
929
1296
 
930
1297
  // Ensure ALL dependencies from dependentAnalyses are included in dependencySchemas,
@@ -1002,39 +1369,5 @@ export default function mergeInDependentDataStructure({
1002
1369
  }
1003
1370
  }
1004
1371
 
1005
- // Ensure ALL dependencies from the input dependencySchemas are preserved.
1006
- // Some dependencies (like .d.ts type declaration files) may not have:
1007
- // - Equivalencies with the root scope
1008
- // - A dependent analysis (they're just type declarations)
1009
- // - Be marked as mocked
1010
- // Without this, their schemas would be lost entirely.
1011
- //
1012
- // IMPORTANT: Only add schemas for dependencies that weren't already processed.
1013
- // If a dependency has an existing schema (even an empty one), it means the
1014
- // existing processing (mocked dependencies, equivalencies, dependentAnalyses)
1015
- // has already handled it and may have intentionally filtered out certain paths.
1016
- for (const filePath in dependencySchemas) {
1017
- for (const name in dependencySchemas[filePath]) {
1018
- const srcSchema = dependencySchemas[filePath][name];
1019
- if (!srcSchema) continue;
1020
-
1021
- // Check if this dependency was already processed by any other mechanism
1022
- const existingSchema =
1023
- mergedDataStructure.dependencySchemas[filePath]?.[name];
1024
-
1025
- // Only add if no existing schema at all - this means the dependency
1026
- // wasn't processed through equivalencies, mocked dependencies, or dependentAnalyses
1027
- if (!existingSchema) {
1028
- const depSchema = findOrCreateDependentSchemas({ filePath, name });
1029
- for (const path in srcSchema.returnValueSchema) {
1030
- depSchema.returnValueSchema[path] = srcSchema.returnValueSchema[path];
1031
- }
1032
- for (const path in srcSchema.signatureSchema) {
1033
- depSchema.signatureSchema[path] = srcSchema.signatureSchema[path];
1034
- }
1035
- }
1036
- }
1037
- }
1038
-
1039
1372
  return mergedDataStructure;
1040
1373
  }
@@ -2,6 +2,49 @@ import { splitOutsideParenthesesAndArrays } from '~codeyam/ai';
2
2
  import { JsonTypeDefinition, ReadonlyAnalysisMap } from '~codeyam/types';
3
3
  import { awsLog } from '~codeyam/utils';
4
4
 
5
+ /**
6
+ * Deep merge for JsonTypeDefinition schemas.
7
+ * Only recursively merges when BOTH sides are plain objects (not arrays, not primitives).
8
+ * This is different from the general deepMerge which is designed for data values -
9
+ * here we're merging type schemas where leaf values are strings like "boolean" or "function".
10
+ *
11
+ * When types are incompatible (e.g., array vs object), prefer keeping the base value
12
+ * since it was set first from the root entity's validatedVariables.
13
+ */
14
+ function deepMergeSchemas(
15
+ base: JsonTypeDefinition,
16
+ override: JsonTypeDefinition,
17
+ ): JsonTypeDefinition {
18
+ // If override is null/undefined, return base
19
+ if (override === null || override === undefined) return base;
20
+ // If base is null/undefined, return override
21
+ if (base === null || base === undefined) return override;
22
+
23
+ // Only recursively merge if BOTH are plain objects (not arrays, not primitives)
24
+ const baseIsPlainObject =
25
+ typeof base === 'object' && !Array.isArray(base) && base !== null;
26
+ const overrideIsPlainObject =
27
+ typeof override === 'object' &&
28
+ !Array.isArray(override) &&
29
+ override !== null;
30
+
31
+ if (baseIsPlainObject && overrideIsPlainObject) {
32
+ const result: JsonTypeDefinition = { ...base };
33
+ for (const key in override) {
34
+ result[key] = deepMergeSchemas(
35
+ base[key] as JsonTypeDefinition,
36
+ override[key] as JsonTypeDefinition,
37
+ );
38
+ }
39
+ return result;
40
+ }
41
+
42
+ // For incompatible types (array vs object, string vs object, etc.), keep base
43
+ // This ensures the root entity's structure is preserved when a dependency
44
+ // has a different view of the same mock
45
+ return base;
46
+ }
47
+
5
48
  export function mergeInStructure(
6
49
  name: string | number,
7
50
  key: string | number,
@@ -155,10 +198,10 @@ export default function mergeValidatedDataStructures({
155
198
  }
156
199
  activeValidatedParts = validatedVariables[usedName] as JsonTypeDefinition;
157
200
  }
158
- dataForMocks = {
159
- ...dataForMocks,
160
- ...validatedData,
161
- };
201
+ // Use deep merge instead of shallow spread to preserve previously merged
202
+ // dependency data. This fixes Issue #15 where multiple dependencies with
203
+ // the same top-level key (e.g., trpc) would overwrite each other.
204
+ dataForMocks = deepMergeSchemas(dataForMocks, validatedData);
162
205
  };
163
206
 
164
207
  for (const dependency of relevantDependencies) {
@@ -181,13 +224,15 @@ export default function mergeValidatedDataStructures({
181
224
  for (const mockName in dependencyDataForMocks) {
182
225
  addMockDataForEntity(mockName);
183
226
 
184
- // If addMockDataForEntity didn't find matching entries in validatedVariables,
185
- // copy the dependency's value directly. This handles cases like usePathname()
186
- // which returns a simple "string" type but isn't in the root's validatedVariables.
187
- if (dataForMocks[mockName] === undefined) {
188
- dataForMocks[mockName] = dependencyDataForMocks[
189
- mockName
190
- ] as JsonTypeDefinition;
227
+ // Always deep merge the dependency's value to preserve nested structures.
228
+ // This handles cases like usePathname() which returns a simple "string" type,
229
+ // AND cases like trpc where both root and dependency have nested data that
230
+ // needs to be combined (e.g., trpc.quote from root + trpc.fastener.getAttributeValues
231
+ // from dependency).
232
+ if (dependencyDataForMocks[mockName] !== undefined) {
233
+ dataForMocks = deepMergeSchemas(dataForMocks, {
234
+ [mockName]: dependencyDataForMocks[mockName],
235
+ } as JsonTypeDefinition);
191
236
  }
192
237
  }
193
238
  }
@@ -4,3 +4,4 @@ export { default as codebuildCheckProject } from '../src/lib/codebuild/checkForC
4
4
  export { default as codebuildCreateProject } from '../src/lib/codebuild/createCodeBuildProject';
5
5
  export { default as codebuildTrigger } from '../src/lib/codebuild/triggerCodeBuild';
6
6
  export { default as codebuildWaitForBuild } from '../src/lib/codebuild/waitForBuild';
7
+ export type { BuildResult } from '../src/lib/codebuild/waitForBuild';