@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
@@ -13,8 +13,8 @@ export enum ControllerPhase {
13
13
  Startup = 'STARTUP',
14
14
  RepoCheckout = 'REPO_CHECKOUT',
15
15
  Analysis = 'ANALYSIS',
16
+ AnalysisProducing = 'ANALYSIS_PRODUCING',
16
17
  Serving = 'SERVING',
17
- Orchestrating = 'ORCHESTRATING',
18
18
  Complete = 'COMPLETE',
19
19
  }
20
20
 
@@ -30,6 +30,7 @@ type ControllerContext =
30
30
  | { phase: ControllerPhase.Startup; info: null }
31
31
  | { phase: ControllerPhase.RepoCheckout; info: null }
32
32
  | { phase: ControllerPhase.Analysis; info: null }
33
+ | { phase: ControllerPhase.AnalysisProducing; info: null }
33
34
  | { phase: ControllerPhase.Serving; info: ServingCodeYamInfo }
34
35
  | { phase: ControllerPhase.Complete; info: null };
35
36
 
@@ -100,6 +101,11 @@ export class Controller extends EventEmitter {
100
101
  this.setPhase({ phase: ControllerPhase.Analysis, info: null });
101
102
  }
102
103
 
104
+ setAnalysisProducingPhase(): void {
105
+ this.setPhase({ phase: ControllerPhase.AnalysisProducing, info: null });
106
+ this.emit('analysisProducing');
107
+ }
108
+
103
109
  setServingPhase(info: ServingCodeYamInfo): void {
104
110
  this.setPhase({ phase: ControllerPhase.Serving, info });
105
111
  }
@@ -116,6 +122,15 @@ export class Controller extends EventEmitter {
116
122
  );
117
123
  }
118
124
 
125
+ hasStartedProducing(): boolean {
126
+ // Analysis is producing once we've moved past the Analysis phase
127
+ return (
128
+ this.context.phase === ControllerPhase.AnalysisProducing ||
129
+ this.context.phase === ControllerPhase.Serving ||
130
+ this.context.phase === ControllerPhase.Complete
131
+ );
132
+ }
133
+
119
134
  async close(): Promise<void> {
120
135
  if (!this.server) return;
121
136
 
@@ -33,11 +33,15 @@ export default async function executeLibraryFunctionDirect(
33
33
  // Generate the execution script
34
34
  const script = directExecutionScript(file, entity, analysis, scenario);
35
35
 
36
+ // Use .ts extension for TypeScript source files so tsx can resolve TS imports
37
+ const isTypeScript = file.path.endsWith('.ts') || file.path.endsWith('.tsx');
38
+ const scriptExtension = isTypeScript ? '.ts' : '.mjs';
39
+
36
40
  // Write the script to a temporary file
37
41
  const scriptPath = path.join(
38
42
  PROJECT_RELATIVE_PATH,
39
43
  '.codeyam-execution',
40
- `${entity.sha}_${scenario.id}.mjs`,
44
+ `${entity.sha}_${scenario.id}${scriptExtension}`,
41
45
  );
42
46
 
43
47
  await writeFile(scriptPath, script);
@@ -54,10 +58,10 @@ export default async function executeLibraryFunctionDirect(
54
58
  command: 'npx',
55
59
  args: ['tsx', scriptPath],
56
60
  workingDir: PROJECT_RELATIVE_PATH,
57
- onData: async (data) => {
61
+ onData: (data) => {
58
62
  stdout += data;
59
63
  },
60
- onError: async (data) => {
64
+ onError: (data) => {
61
65
  stderr += data;
62
66
  },
63
67
  processName: 'library-function-execution',
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @typescript-eslint/require-await */
1
2
  import {
2
3
  Analysis,
3
4
  AnalysisMap,
@@ -47,7 +48,7 @@ const standaloneComponentAnalysis = {
47
48
  'The counter is initialized at 0, with the ability to increment and decrement the count.',
48
49
  metadata: {
49
50
  dataMapping: {},
50
- keyAttributeInstructions: {},
51
+ coveredFlows: [],
51
52
  data: {
52
53
  argumentsData: [],
53
54
  mockData: {},
@@ -221,7 +222,7 @@ async function analyzeReturnsSimplePropsFile(): Promise<{
221
222
  'A user who is under 18 years old and is currently active.',
222
223
  metadata: {
223
224
  dataMapping: {},
224
- keyAttributeInstructions: {},
225
+ coveredFlows: [],
225
226
  data: {
226
227
  argumentsData: [
227
228
  {
@@ -242,7 +243,7 @@ async function analyzeReturnsSimplePropsFile(): Promise<{
242
243
  'A user who is between 18 and 39 years old and is currently active.',
243
244
  metadata: {
244
245
  dataMapping: {},
245
- keyAttributeInstructions: {},
246
+ coveredFlows: [],
246
247
  data: {
247
248
  argumentsData: [
248
249
  {
@@ -263,7 +264,7 @@ async function analyzeReturnsSimplePropsFile(): Promise<{
263
264
  'A user who is 40 years or older and is currently active.',
264
265
  metadata: {
265
266
  dataMapping: {},
266
- keyAttributeInstructions: {},
267
+ coveredFlows: [],
267
268
  data: {
268
269
  argumentsData: [
269
270
  {
@@ -284,7 +285,7 @@ async function analyzeReturnsSimplePropsFile(): Promise<{
284
285
  'A user who is under 18 years old and is currently inactive.',
285
286
  metadata: {
286
287
  dataMapping: {},
287
- keyAttributeInstructions: {},
288
+ coveredFlows: [],
288
289
  data: {
289
290
  argumentsData: [
290
291
  {
@@ -305,7 +306,7 @@ async function analyzeReturnsSimplePropsFile(): Promise<{
305
306
  'A user who is between 18 and 39 years old and is currently inactive.',
306
307
  metadata: {
307
308
  dataMapping: {},
308
- keyAttributeInstructions: {},
309
+ coveredFlows: [],
309
310
  data: {
310
311
  argumentsData: [
311
312
  {
@@ -378,7 +379,7 @@ async function analyzeReturnsImportedComponentsFile(): Promise<{
378
379
  description: 'Default scenario description',
379
380
  metadata: {
380
381
  dataMapping: {},
381
- keyAttributeInstructions: {},
382
+ coveredFlows: [],
382
383
  data: {
383
384
  argumentsData: [],
384
385
  mockData: {},
@@ -46,13 +46,10 @@ export default class KyselyAnalysisLoader implements AnalysisLoader {
46
46
  'status',
47
47
  ])
48
48
  // Base condition: readyToBeCaptured = true
49
- // Use json_extract for SQLite (returns 1 for boolean true)
49
+ // Use -> operator which works in both PostgreSQL and SQLite
50
+ // Both return a value that compares equal to string 'true'
50
51
  .where((eb) =>
51
- eb(
52
- sql`json_extract(${sql.ref('status')}, '$.readyToBeCaptured')`,
53
- '=',
54
- sql`1`,
55
- ),
52
+ eb(sql`${sql.ref('status')} -> 'readyToBeCaptured'`, '=', 'true'),
56
53
  )
57
54
  // Project filter (always required)
58
55
  .where('project_id', '=', this.config.project.id);
@@ -94,7 +94,13 @@ export default class SequentialCaptureTaskRunner implements CaptureTaskRunner {
94
94
 
95
95
  // In CAPTURE_ONLY mode, run directly from the main project folder (skip rsync)
96
96
  // This preserves any manual edits made to generated files
97
- const captureOnly = process.env.CAPTURE_ONLY === 'true';
97
+ const captureOnlyEnvValue = process.env.CAPTURE_ONLY;
98
+ const captureOnly = captureOnlyEnvValue === 'true';
99
+
100
+ console.log(
101
+ `CodeYam: CAPTURE_ONLY env = ${captureOnlyEnvValue === undefined ? 'undefined' : `"${captureOnlyEnvValue}"`}`,
102
+ );
103
+
98
104
  const capturerPath = captureOnly
99
105
  ? parentDir
100
106
  : path.normalize(path.join(parentDir, 'capturer-1'));
@@ -50,6 +50,9 @@ interface OrchestrateCaptureArgs {
50
50
  taskRunner: CaptureTaskRunner;
51
51
  analysisLoader?: AnalysisLoader;
52
52
  pollingInterval?: number;
53
+ // Optional commit for metadata/progress tracking only (not filtering).
54
+ // Use when full=true but you still want capture progress updates on a commit.
55
+ metadataCommit?: Commit | null;
53
56
  }
54
57
 
55
58
  export default async function orchestrateCapture({
@@ -62,6 +65,7 @@ export default async function orchestrateCapture({
62
65
  taskRunner,
63
66
  analysisLoader,
64
67
  pollingInterval = POLLING_INTERVAL,
68
+ metadataCommit,
65
69
  }: OrchestrateCaptureArgs) {
66
70
  if (!full && !analysisIds && !commit && !entityShas) {
67
71
  throw new Error(
@@ -318,9 +322,12 @@ export default async function orchestrateCapture({
318
322
  // console.log(
319
323
  // `Codeyam Debug: All known analyses: ${Array.from(knownAnalyses).join(', ')}`,
320
324
  // );
321
- if (commit) {
322
- commit.metadata = await updateCommitMetadata({
323
- commitId: commit.id,
325
+ // Use metadataCommit if provided, otherwise fall back to commit.
326
+ // This allows progress tracking even when commit is null (e.g., full=true mode).
327
+ const trackingCommit = metadataCommit ?? commit;
328
+ if (trackingCommit) {
329
+ trackingCommit.metadata = await updateCommitMetadata({
330
+ commitId: trackingCommit.id,
324
331
  runStatusUpdate: {
325
332
  readyToBeCaptured: knownAnalyses.size,
326
333
  capturesAttempted: capturedAnalysisIds.length + abandoned.length,
@@ -348,6 +355,32 @@ export default async function orchestrateCapture({
348
355
  }
349
356
  }
350
357
 
358
+ // Early exit when all enqueued work is settled (captured or abandoned)
359
+ // This avoids waiting for the 20-minute ANALYSIS_TIMEOUT when capture is complete
360
+ // IMPORTANT: Only check this when isDraining (analysis phase complete) to avoid
361
+ // exiting while slow-running analyses are still in progress
362
+ if (
363
+ isDraining &&
364
+ !firstLoop &&
365
+ enqueuedAnalyses.size > 0 &&
366
+ inFlight.size === 0 &&
367
+ remaining.length === 0 &&
368
+ toRetry.length === 0
369
+ ) {
370
+ const allAnalysesSettled = Array.from(enqueuedAnalyses).every((id) => {
371
+ const captured = !allReadyAnalysisIds.includes(id);
372
+ const abandoned = (attemptCount.get(id) || 0) >= maxAttempts;
373
+ return captured || abandoned;
374
+ });
375
+
376
+ if (allAnalysesSettled) {
377
+ console.log(
378
+ 'CodeYam Capture: All enqueued analyses settled (captured or abandoned), exiting early',
379
+ );
380
+ break;
381
+ }
382
+ }
383
+
351
384
  if (isDraining) {
352
385
  // Exit if analysis complete but no entities ready for capture
353
386
  // Only check this after at least one poll (not firstLoop) to ensure we've
@@ -5,51 +5,49 @@
5
5
  * (e.g., "eq('user_id', 'user-12345')") when the mock code expects variable
6
6
  * references (e.g., "eq('user_id', user.id)").
7
7
  *
8
- * This function also handles canonical key format (EntityName::hookName::index)
9
- * and remaps old variable-based keys (variableName <- functionName) to canonical keys.
8
+ * Keys are now original call signatures (e.g., "useFetcher<User>()", "db.select(query)").
9
+ *
10
+ * Also handles flat dotted keys (e.g., "trpc.fastener.getAttributeValues.useQuery(...)")
11
+ * by converting them to nested structure.
10
12
  *
11
13
  * @param mockData The mock data object to reconcile
12
14
  * @param expectedKeys The expected keys from the structure
13
- * @param entityName Optional entity name for canonical key remapping
14
15
  */
15
16
  export function reconcileMockDataKeys(
16
17
  mockData: Record<string, unknown>,
17
18
  expectedKeys: string[],
18
- entityName?: string,
19
19
  ): Record<string, unknown> {
20
20
  const result: Record<string, unknown> = {};
21
- // Track which canonical keys have been used for multiple calls to same hook
22
- const usedCanonicalKeys = new Set<string>();
23
21
 
24
22
  for (const [key, value] of Object.entries(mockData)) {
25
23
  // Recursively reconcile nested objects
26
24
  const reconciledValue =
27
25
  value && typeof value === 'object' && !Array.isArray(value)
28
- ? reconcileMockDataKeys(
29
- value as Record<string, unknown>,
30
- expectedKeys,
31
- entityName,
32
- )
26
+ ? reconcileMockDataKeys(value as Record<string, unknown>, expectedKeys)
33
27
  : value;
34
28
 
35
29
  // Check if key matches an expected key exactly
36
30
  if (expectedKeys.includes(key)) {
37
31
  result[key] = reconciledValue;
38
- usedCanonicalKeys.add(key);
39
32
  continue;
40
33
  }
41
34
 
42
- // Try to remap variable-based key to canonical key
43
- if (entityName) {
44
- const canonicalKey = remapToCanonicalKey(
45
- key,
46
- expectedKeys,
47
- entityName,
48
- usedCanonicalKeys,
35
+ // Check if this is a flat dotted key that should be converted to nested structure
36
+ // e.g., "trpc.fastener.getAttributeValues.useQuery({ ... })"
37
+ const flatKeyParts = parseFlatDottedKey(key);
38
+ if (flatKeyParts && flatKeyParts.length > 1) {
39
+ // Check if the parts match expected keys (indicating this should be nested)
40
+ const partsMatchExpected = flatKeyParts.some((part) =>
41
+ expectedKeys.includes(part),
49
42
  );
50
- if (canonicalKey) {
51
- result[canonicalKey] = reconciledValue;
52
- usedCanonicalKeys.add(canonicalKey);
43
+ if (partsMatchExpected) {
44
+ // Convert flat key to nested structure and merge
45
+ deepMergeIntoResult(
46
+ result,
47
+ flatKeyParts,
48
+ reconciledValue,
49
+ expectedKeys,
50
+ );
53
51
  continue;
54
52
  }
55
53
  }
@@ -68,76 +66,91 @@ export function reconcileMockDataKeys(
68
66
  }
69
67
 
70
68
  /**
71
- * Attempt to remap a variable-based key to a canonical key.
72
- *
73
- * Variable-based format: "variableName <- functionName"
74
- * Canonical format: "EntityName::hookName::index"
69
+ * Parse a flat dotted key into path segments.
70
+ * Handles keys like "trpc.fastener.getAttributeValues.useQuery({ ... })"
71
+ * where the last part might contain parentheses with function arguments.
75
72
  *
76
- * @example
77
- * remapToCanonicalKey("currentCommit <- useLoaderData", ["DashboardPage::useLoaderData::0"], "DashboardPage", new Set())
78
- * // returns "DashboardPage::useLoaderData::0"
73
+ * Returns null if the key doesn't look like a dotted path.
79
74
  */
80
- function remapToCanonicalKey(
81
- key: string,
82
- expectedCanonicalKeys: string[],
83
- entityName: string,
84
- usedKeys: Set<string>,
85
- ): string | null {
86
- // Check if key is in variable-based format: "varName <- functionName"
87
- const arrowMatch = key.match(/<-\s*(\w+)/);
88
- if (!arrowMatch) {
89
- // Not a variable-based key, try other patterns
90
- // Check if it's a simple function call like "useLoaderData()"
91
- const funcCallMatch = key.match(/^(\w+)\(\)/);
92
- if (funcCallMatch) {
93
- const hookName = funcCallMatch[1];
94
- return findMatchingCanonicalKey(
95
- hookName,
96
- entityName,
97
- expectedCanonicalKeys,
98
- usedKeys,
99
- );
75
+ function parseFlatDottedKey(key: string): string[] | null {
76
+ // Don't treat keys that start with a function call as dotted paths
77
+ // e.g., "useQuery({ id: 123 })" should not be parsed
78
+ if (key.match(/^[a-zA-Z_][a-zA-Z0-9_]*\s*\(/)) {
79
+ // Check if there's a dot BEFORE the first parenthesis
80
+ const parenIndex = key.indexOf('(');
81
+ const dotBeforeParen = key.slice(0, parenIndex).includes('.');
82
+ if (!dotBeforeParen) {
83
+ return null;
100
84
  }
85
+ }
86
+
87
+ // Must contain a dot to be a dotted path
88
+ if (!key.includes('.')) {
101
89
  return null;
102
90
  }
103
91
 
104
- const hookName = arrowMatch[1];
92
+ const parts: string[] = [];
93
+ let current = '';
94
+ let depth = 0;
95
+
96
+ for (let i = 0; i < key.length; i++) {
97
+ const char = key[i];
105
98
 
106
- return findMatchingCanonicalKey(
107
- hookName,
108
- entityName,
109
- expectedCanonicalKeys,
110
- usedKeys,
111
- );
99
+ if (char === '(' || char === '{' || char === '[') {
100
+ depth++;
101
+ current += char;
102
+ } else if (char === ')' || char === '}' || char === ']') {
103
+ depth--;
104
+ current += char;
105
+ } else if (char === '.' && depth === 0) {
106
+ if (current) {
107
+ parts.push(current);
108
+ }
109
+ current = '';
110
+ } else {
111
+ current += char;
112
+ }
113
+ }
114
+
115
+ if (current) {
116
+ parts.push(current);
117
+ }
118
+
119
+ // Need at least 2 parts for it to be a meaningful dotted path
120
+ return parts.length >= 2 ? parts : null;
112
121
  }
113
122
 
114
123
  /**
115
- * Find a matching canonical key for a hook name within an entity.
124
+ * Deep merge a value into the result object following the path segments.
125
+ * Reconciles the leaf key against expected keys.
116
126
  */
117
- function findMatchingCanonicalKey(
118
- hookName: string,
119
- entityName: string,
120
- expectedCanonicalKeys: string[],
121
- usedKeys: Set<string>,
122
- ): string | null {
123
- // Find all canonical keys for this entity and hook
124
- const candidatePrefix = `${entityName}::${hookName}::`;
125
- const candidates = expectedCanonicalKeys.filter(
126
- (k) => k.startsWith(candidatePrefix) && !usedKeys.has(k),
127
- );
127
+ function deepMergeIntoResult(
128
+ result: Record<string, unknown>,
129
+ parts: string[],
130
+ value: unknown,
131
+ expectedKeys: string[],
132
+ ): void {
133
+ let current = result;
128
134
 
129
- if (candidates.length === 0) {
130
- return null;
135
+ // Navigate/create path for all but the last part
136
+ for (let i = 0; i < parts.length - 1; i++) {
137
+ const part = parts[i];
138
+ if (!(part in current)) {
139
+ current[part] = {};
140
+ }
141
+ const next = current[part];
142
+ if (next && typeof next === 'object' && !Array.isArray(next)) {
143
+ current = next as Record<string, unknown>;
144
+ } else {
145
+ // Can't traverse further, structure mismatch
146
+ return;
147
+ }
131
148
  }
132
149
 
133
- // Sort by index to prefer lower indices
134
- candidates.sort((a, b) => {
135
- const aIndex = parseInt(a.split('::')[2], 10);
136
- const bIndex = parseInt(b.split('::')[2], 10);
137
- return aIndex - bIndex;
138
- });
139
-
140
- return candidates[0];
150
+ // Handle the leaf key
151
+ const leafKey = parts[parts.length - 1];
152
+ const closestLeafKey = findClosestKey(leafKey, expectedKeys) || leafKey;
153
+ current[closestLeafKey] = value;
141
154
  }
142
155
 
143
156
  /**
@@ -148,9 +161,15 @@ function findMatchingCanonicalKey(
148
161
  * - Ignore the last argument value (could be literal or variable)
149
162
  * - Match based on the common prefix
150
163
  * - If key has no parentheses, try matching with "()" appended
164
+ * - If key is "funcName()" (empty args), match expected key "funcName({...})" by function name
165
+ * - If key has object arguments (like useQuery({...})), match by function name
166
+ * - If key has single argument with literal value, match by function name
151
167
  *
152
168
  * e.g., "eq('user_id', 'user-12345')" matches "eq('user_id', user.id)"
153
169
  * e.g., "getAll" matches "getAll()"
170
+ * e.g., "getSurveysAction()" matches "getSurveysAction({ environmentId, ... })"
171
+ * e.g., "useQuery({ id: 123 })" matches "useQuery({ id: Number(id) })"
172
+ * e.g., "useCustomSizes('example-slug')" matches "useCustomSizes(projectSlug)"
154
173
  */
155
174
  function findClosestKey(key: string, expectedKeys: string[]): string | null {
156
175
  const keyBase = extractKeyBase(key);
@@ -174,9 +193,132 @@ function findClosestKey(key: string, expectedKeys: string[]): string | null {
174
193
  }
175
194
  }
176
195
 
196
+ // If key is "funcName()" (empty args), try matching expected key "funcName({...})"
197
+ // This handles the case where LLM generates "getSurveysAction()" but expected key
198
+ // is "getSurveysAction({ environmentId, limit, ... })" with an object argument
199
+ const emptyArgsMatch = key.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\(\)$/);
200
+ if (emptyArgsMatch) {
201
+ const funcName = emptyArgsMatch[1];
202
+ for (const expected of expectedKeys) {
203
+ // Match if expected key starts with the same function name and has args
204
+ const expectedMatch = expected.match(
205
+ new RegExp(`^${escapeRegExp(funcName)}\\([^)]+\\)$`),
206
+ );
207
+ if (expectedMatch) {
208
+ return expected;
209
+ }
210
+ }
211
+ }
212
+
213
+ // If key has object literal arguments (like "useQuery({ id: 123, ... })"),
214
+ // try matching expected keys with the same function path AND first object property.
215
+ // This handles cases where LLM generates literal values but expected keys have variable references.
216
+ // e.g., "useQuery({ attributes: ['a', 'b'] })" matches "useQuery({ attributes: items || [] })"
217
+ // e.g., "trpc.users.getById.useQuery({ userId: 'user-123' })" matches "trpc.users.getById.useQuery({ userId })"
218
+ // Uses first property matching when multiple candidates exist for disambiguation.
219
+ const objectArgMatch = key.match(/^([a-zA-Z_][a-zA-Z0-9_.]*)\s*\(\s*\{/);
220
+ if (objectArgMatch) {
221
+ const funcPath = objectArgMatch[1]; // Can be "funcName" or "path.to.funcName"
222
+ // Extract the first property name from the object argument
223
+ const firstPropMatch = key.match(
224
+ /\(\s*\{\s*\n?\s*([a-zA-Z_][a-zA-Z0-9_]*)\s*:/,
225
+ );
226
+ const firstProp = firstPropMatch ? firstPropMatch[1] : null;
227
+
228
+ // Collect all matching candidates
229
+ const candidates: string[] = [];
230
+ for (const expected of expectedKeys) {
231
+ // Match if expected key has the same function path and starts with object argument
232
+ const expectedObjArgMatch = expected.match(
233
+ new RegExp(`^${escapeRegExp(funcPath)}\\s*\\(\\s*\\{`),
234
+ );
235
+ if (expectedObjArgMatch) {
236
+ candidates.push(expected);
237
+ }
238
+ }
239
+
240
+ // If we have a first property, prefer matching by property name
241
+ if (firstProp && candidates.length > 1) {
242
+ // Look for a candidate with the same first property
243
+ const propRegex = new RegExp(
244
+ `\\(\\s*\\{[\\s\\n]*${escapeRegExp(firstProp)}\\s*:`,
245
+ );
246
+ const propMatch = candidates.find((c) => propRegex.test(c));
247
+ if (propMatch) {
248
+ return propMatch;
249
+ }
250
+ }
251
+
252
+ // Fall back to first candidate if no property match found
253
+ if (candidates.length > 0) {
254
+ return candidates[0];
255
+ }
256
+ }
257
+
258
+ // If key has a single argument (literal value OR variable reference),
259
+ // try matching expected keys with the same function name but different argument.
260
+ // This handles cases where:
261
+ // - LLM generates "useCustomSizes('example-slug')" but expected key is "useCustomSizes(projectSlug)"
262
+ // - LLM generates "useCustomSizes(someProjectSlug)" but expected key is "useCustomSizes(projectSlug)"
263
+ //
264
+ // The second case is important because when LLM generates multiple keys with different
265
+ // variable names (e.g., "useCustomSizes(someProjectSlug)" and "useCustomSizes(projectSlug)"),
266
+ // without reconciliation, normalizeMockData merges them into "useCustomSizes()" which
267
+ // doesn't match the expected key "useCustomSizes(projectSlug)", causing undefined data access.
268
+ const singleArgMatch = key.match(
269
+ /^([a-zA-Z_][a-zA-Z0-9_.]*)\s*\(([^,)]+)\)$/,
270
+ );
271
+ if (singleArgMatch) {
272
+ const funcPath = singleArgMatch[1];
273
+ const arg = singleArgMatch[2].trim();
274
+ // Apply this matching if the argument is a literal OR a simple variable reference
275
+ const isLiteralArg = /^['"`].*['"`]$/.test(arg) || /^\d+$/.test(arg);
276
+ const isVariableRef = /^[a-zA-Z_][a-zA-Z0-9_]*$/.test(arg);
277
+ if (isLiteralArg || isVariableRef) {
278
+ for (const expected of expectedKeys) {
279
+ // Match if expected key has the same function path with a single argument
280
+ const expectedSingleArgMatch = expected.match(
281
+ new RegExp(`^${escapeRegExp(funcPath)}\\s*\\([^,)]+\\)$`),
282
+ );
283
+ if (expectedSingleArgMatch) {
284
+ return expected;
285
+ }
286
+ }
287
+ }
288
+ }
289
+
290
+ // If key has multiple arguments where one contains a literal value,
291
+ // try matching expected keys with the same function name and argument count.
292
+ // This handles cases like "getScenarioDisplayState(scenario, undefined, undefined, 'entitysha123', undefined)"
293
+ // matching "getScenarioDisplayState(scenario, undefined, undefined, entitySha, undefined)"
294
+ const multiArgWithLiteralMatch = key.match(
295
+ /^([a-zA-Z_][a-zA-Z0-9_.]*)\s*\((.+)\)$/,
296
+ );
297
+ if (multiArgWithLiteralMatch) {
298
+ const funcPath = multiArgWithLiteralMatch[1];
299
+ const argsStr = multiArgWithLiteralMatch[2];
300
+ // Check if any argument is a string literal
301
+ const hasLiteralArg = /'[^']*'|"[^"]*"/.test(argsStr);
302
+ if (hasLiteralArg) {
303
+ for (const expected of expectedKeys) {
304
+ // Match if expected key starts with the same function path
305
+ if (expected.startsWith(funcPath + '(')) {
306
+ return expected;
307
+ }
308
+ }
309
+ }
310
+ }
311
+
177
312
  return null;
178
313
  }
179
314
 
315
+ /**
316
+ * Escape special regex characters in a string.
317
+ */
318
+ function escapeRegExp(str: string): string {
319
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
320
+ }
321
+
180
322
  /**
181
323
  * Normalize quotes in a string: convert double quotes to single quotes.
182
324
  * This handles cases where the LLM generates keys with double quotes
@@ -215,6 +215,11 @@ export default async function runAnalysis({
215
215
  entityShas,
216
216
  branchName: branch?.name,
217
217
  });
218
+
219
+ // Propagate the fallback branch to branchCommit so downstream code can use it
220
+ if (branchCommit && branch) {
221
+ branchCommit.branch = branch;
222
+ }
218
223
  }
219
224
 
220
225
  // After this block, 'commit' is the union of a regular or baseline commit
@@ -308,6 +313,10 @@ export default async function runAnalysis({
308
313
  // Route to appropriate analyzer
309
314
  try {
310
315
  if (runReadyToBeCapturedPath) {
316
+ // Signal that analysis can produce captures immediately since analyses are already ready.
317
+ // This is needed for recapture to work - orchestration waits for the 'analysisProducing' event.
318
+ controller?.setAnalysisProducingPhase();
319
+
311
320
  return await analyzeReadyToBeCaptured({
312
321
  project,
313
322
  projectAnalyzer,
@@ -330,6 +339,7 @@ export default async function runAnalysis({
330
339
  desiredAnalyses,
331
340
  force,
332
341
  fileStore,
342
+ onAnalysisProducing: () => controller?.setAnalysisProducingPhase(),
333
343
  });
334
344
  }
335
345
 
@@ -350,6 +360,7 @@ export default async function runAnalysis({
350
360
  backgroundJob,
351
361
  desiredAnalyses,
352
362
  fileStore,
363
+ onAnalysisProducing: () => controller?.setAnalysisProducingPhase(),
353
364
  });
354
365
  } catch (e) {
355
366
  awsLog('CodeYam Error: Analysis failed', {