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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (625) hide show
  1. package/analyzer-template/.build-info.json +7 -7
  2. package/analyzer-template/common/execAsync.ts +1 -1
  3. package/analyzer-template/log.txt +3 -3
  4. package/analyzer-template/package.json +9 -5
  5. package/analyzer-template/packages/ai/index.ts +5 -3
  6. package/analyzer-template/packages/ai/package.json +1 -1
  7. package/analyzer-template/packages/ai/src/lib/__mocks__/completionCall.ts +122 -0
  8. package/analyzer-template/packages/ai/src/lib/analyzeScope.ts +152 -6
  9. package/analyzer-template/packages/ai/src/lib/astScopes/astScopeAnalyzer.ts +107 -1
  10. package/analyzer-template/packages/ai/src/lib/astScopes/conditionalEffectsExtractor.ts +644 -0
  11. package/analyzer-template/packages/ai/src/lib/astScopes/methodSemantics.ts +42 -0
  12. package/analyzer-template/packages/ai/src/lib/astScopes/patterns/ifStatementHandler.ts +18 -0
  13. package/analyzer-template/packages/ai/src/lib/astScopes/patterns/switchStatementHandler.ts +38 -1
  14. package/analyzer-template/packages/ai/src/lib/astScopes/patterns/variableDeclarationHandler.ts +301 -1
  15. package/analyzer-template/packages/ai/src/lib/astScopes/processExpression.ts +972 -106
  16. package/analyzer-template/packages/ai/src/lib/astScopes/types.ts +232 -0
  17. package/analyzer-template/packages/ai/src/lib/checkAllAttributes.ts +29 -10
  18. package/analyzer-template/packages/ai/src/lib/completionCall.ts +18 -2
  19. package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +1409 -138
  20. package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.ts +2 -1
  21. package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.ts +771 -0
  22. package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.ts +233 -75
  23. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.ts +19 -1
  24. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.ts +39 -4
  25. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.ts +23 -0
  26. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertNullToUndefinedBySchema.ts +98 -0
  27. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.ts +42 -2
  28. package/analyzer-template/packages/ai/src/lib/deepEqual.ts +30 -0
  29. package/analyzer-template/packages/ai/src/lib/generateChangesEntityScenarioData.ts +74 -7
  30. package/analyzer-template/packages/ai/src/lib/generateChangesEntityScenarios.ts +89 -112
  31. package/analyzer-template/packages/ai/src/lib/generateEntityDataStructure.ts +6 -0
  32. package/analyzer-template/packages/ai/src/lib/generateEntityScenarioData.ts +486 -86
  33. package/analyzer-template/packages/ai/src/lib/generateEntityScenarios.ts +182 -104
  34. package/analyzer-template/packages/ai/src/lib/generateExecutionFlows.ts +201 -0
  35. package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionalEffects.ts +528 -0
  36. package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionals.ts +1019 -0
  37. package/analyzer-template/packages/ai/src/lib/getConditionalUsagesFromCode.ts +143 -31
  38. package/analyzer-template/packages/ai/src/lib/guessScenarioDataFromDescription.ts +8 -2
  39. package/analyzer-template/packages/ai/src/lib/isolateScopes.ts +276 -3
  40. package/analyzer-template/packages/ai/src/lib/mergeStatements.ts +33 -3
  41. package/analyzer-template/packages/ai/src/lib/promptGenerators/gatherAttributesMap.ts +7 -0
  42. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateChangesEntityScenarioDataGenerator.ts +1 -1
  43. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.ts +32 -102
  44. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.ts +71 -4
  45. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.ts +14 -53
  46. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateMissingKeysPrompt.ts +58 -0
  47. package/analyzer-template/packages/ai/src/lib/promptGenerators/guessNewScenarioDataFromDescriptionGenerator.ts +28 -2
  48. package/analyzer-template/packages/ai/src/lib/resolvePathToControllable.ts +690 -0
  49. package/analyzer-template/packages/ai/src/lib/splitOutsideParentheses.ts +5 -1
  50. package/analyzer-template/packages/ai/src/lib/validateExecutionFlowPaths.ts +531 -0
  51. package/analyzer-template/packages/ai/src/lib/worker/SerializableDataStructure.ts +102 -0
  52. package/analyzer-template/packages/ai/src/lib/worker/analyzeScopeWorker.ts +8 -1
  53. package/analyzer-template/packages/analyze/src/lib/FileAnalyzer.ts +14 -0
  54. package/analyzer-template/packages/analyze/src/lib/asts/nodes/index.ts +1 -0
  55. package/analyzer-template/packages/analyze/src/lib/asts/nodes/isAsyncFunction.ts +67 -0
  56. package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.ts +458 -267
  57. package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities.ts +18 -0
  58. package/analyzer-template/packages/analyze/src/lib/files/analyze/findOrCreateEntity.ts +3 -0
  59. package/analyzer-template/packages/analyze/src/lib/files/analyzeChange.ts +31 -15
  60. package/analyzer-template/packages/analyze/src/lib/files/analyzeEntity.ts +11 -7
  61. package/analyzer-template/packages/analyze/src/lib/files/analyzeInitial.ts +11 -12
  62. package/analyzer-template/packages/analyze/src/lib/files/enums/steps.ts +1 -1
  63. package/analyzer-template/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.ts +196 -0
  64. package/analyzer-template/packages/analyze/src/lib/files/scenarios/enrichUnknownTypesFromSourceEquivalencies.ts +102 -0
  65. package/analyzer-template/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.ts +588 -52
  66. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateChangesScenarioData.ts +1 -1
  67. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateChangesScenarios.ts +28 -62
  68. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +299 -133
  69. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.ts +156 -0
  70. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateScenarioData.ts +78 -83
  71. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateScenarios.ts +4 -8
  72. package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +384 -94
  73. package/analyzer-template/packages/aws/codebuild/index.ts +1 -0
  74. package/analyzer-template/packages/aws/dist/src/lib/codebuild/waitForBuild.d.ts +11 -1
  75. package/analyzer-template/packages/aws/dist/src/lib/codebuild/waitForBuild.d.ts.map +1 -1
  76. package/analyzer-template/packages/aws/dist/src/lib/codebuild/waitForBuild.js +29 -18
  77. package/analyzer-template/packages/aws/dist/src/lib/codebuild/waitForBuild.js.map +1 -1
  78. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsDefineContainer.d.ts +2 -2
  79. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsDefineContainer.d.ts.map +1 -1
  80. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsDefineContainer.js +2 -2
  81. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsDefineContainer.js.map +1 -1
  82. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsTaskFactory.d.ts +8 -18
  83. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsTaskFactory.d.ts.map +1 -1
  84. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsTaskFactory.js +17 -61
  85. package/analyzer-template/packages/aws/dist/src/lib/ecs/ecsTaskFactory.js.map +1 -1
  86. package/analyzer-template/packages/aws/dist/src/lib/s3/checkS3ObjectExists.d.ts +15 -0
  87. package/analyzer-template/packages/aws/dist/src/lib/s3/checkS3ObjectExists.d.ts.map +1 -0
  88. package/analyzer-template/packages/aws/dist/src/lib/s3/checkS3ObjectExists.js +31 -0
  89. package/analyzer-template/packages/aws/dist/src/lib/s3/checkS3ObjectExists.js.map +1 -0
  90. package/analyzer-template/packages/aws/dist/src/lib/s3/uploadFileToS3.d.ts.map +1 -1
  91. package/analyzer-template/packages/aws/dist/src/lib/s3/uploadFileToS3.js +8 -1
  92. package/analyzer-template/packages/aws/dist/src/lib/s3/uploadFileToS3.js.map +1 -1
  93. package/analyzer-template/packages/aws/package.json +2 -2
  94. package/analyzer-template/packages/aws/s3/index.ts +1 -0
  95. package/analyzer-template/packages/aws/src/lib/codebuild/waitForBuild.ts +43 -19
  96. package/analyzer-template/packages/aws/src/lib/ecs/ecsDefineContainer.ts +3 -3
  97. package/analyzer-template/packages/aws/src/lib/ecs/ecsTaskFactory.ts +17 -69
  98. package/analyzer-template/packages/aws/src/lib/s3/checkS3ObjectExists.ts +47 -0
  99. package/analyzer-template/packages/aws/src/lib/s3/uploadFileToS3.ts +8 -1
  100. package/analyzer-template/packages/database/src/lib/kysely/db.ts +4 -4
  101. package/analyzer-template/packages/database/src/lib/kysely/tableRelations.ts +2 -2
  102. package/analyzer-template/packages/database/src/lib/kysely/tables/debugReportsTable.ts +36 -9
  103. package/analyzer-template/packages/database/src/lib/loadReadyToBeCapturedAnalyses.ts +7 -3
  104. package/analyzer-template/packages/generate/index.ts +3 -0
  105. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/componentScenarioPageNext.ts +17 -1
  106. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.ts +193 -0
  107. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.ts +73 -0
  108. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.ts +9 -4
  109. package/analyzer-template/packages/generate/src/lib/deepMerge.ts +26 -1
  110. package/analyzer-template/packages/generate/src/lib/scenarioComponentForServer.ts +114 -0
  111. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts +2 -2
  112. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js +2 -2
  113. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tableRelations.d.ts +2 -2
  114. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/analysesTable.d.ts +1 -11
  115. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/analysesTable.d.ts.map +1 -1
  116. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.d.ts +30 -7
  117. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.d.ts.map +1 -1
  118. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.js +9 -3
  119. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.js.map +1 -1
  120. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/entitiesTable.d.ts +1 -0
  121. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/entitiesTable.d.ts.map +1 -1
  122. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts +2 -6
  123. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts.map +1 -1
  124. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.d.ts.map +1 -1
  125. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.js +7 -4
  126. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.js.map +1 -1
  127. package/analyzer-template/packages/github/dist/generate/index.d.ts +3 -0
  128. package/analyzer-template/packages/github/dist/generate/index.d.ts.map +1 -1
  129. package/analyzer-template/packages/github/dist/generate/index.js +3 -0
  130. package/analyzer-template/packages/github/dist/generate/index.js.map +1 -1
  131. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/componentScenarioPageNext.d.ts.map +1 -1
  132. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/componentScenarioPageNext.js +16 -1
  133. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/componentScenarioPageNext.js.map +1 -1
  134. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.d.ts +9 -0
  135. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.d.ts.map +1 -0
  136. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js +189 -0
  137. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js.map +1 -0
  138. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.d.ts +20 -0
  139. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.d.ts.map +1 -0
  140. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.js +53 -0
  141. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.js.map +1 -0
  142. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.d.ts.map +1 -1
  143. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +8 -4
  144. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
  145. package/analyzer-template/packages/github/dist/generate/src/lib/deepMerge.d.ts.map +1 -1
  146. package/analyzer-template/packages/github/dist/generate/src/lib/deepMerge.js +27 -1
  147. package/analyzer-template/packages/github/dist/generate/src/lib/deepMerge.js.map +1 -1
  148. package/analyzer-template/packages/github/dist/generate/src/lib/scenarioComponentForServer.d.ts +8 -0
  149. package/analyzer-template/packages/github/dist/generate/src/lib/scenarioComponentForServer.d.ts.map +1 -0
  150. package/analyzer-template/packages/github/dist/generate/src/lib/scenarioComponentForServer.js +89 -0
  151. package/analyzer-template/packages/github/dist/generate/src/lib/scenarioComponentForServer.js.map +1 -0
  152. package/analyzer-template/packages/github/dist/github/src/lib/loadOrCreateCommit.d.ts.map +1 -1
  153. package/analyzer-template/packages/github/dist/github/src/lib/loadOrCreateCommit.js +10 -0
  154. package/analyzer-template/packages/github/dist/github/src/lib/loadOrCreateCommit.js.map +1 -1
  155. package/analyzer-template/packages/github/dist/github/src/lib/syncPrimaryBranch.d.ts.map +1 -1
  156. package/analyzer-template/packages/github/dist/github/src/lib/syncPrimaryBranch.js +3 -0
  157. package/analyzer-template/packages/github/dist/github/src/lib/syncPrimaryBranch.js.map +1 -1
  158. package/analyzer-template/packages/github/dist/types/index.d.ts +2 -2
  159. package/analyzer-template/packages/github/dist/types/index.d.ts.map +1 -1
  160. package/analyzer-template/packages/github/dist/types/index.js.map +1 -1
  161. package/analyzer-template/packages/github/dist/types/src/types/Analysis.d.ts +63 -13
  162. package/analyzer-template/packages/github/dist/types/src/types/Analysis.d.ts.map +1 -1
  163. package/analyzer-template/packages/github/dist/types/src/types/Entity.d.ts +2 -0
  164. package/analyzer-template/packages/github/dist/types/src/types/Entity.d.ts.map +1 -1
  165. package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts +11 -6
  166. package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts.map +1 -1
  167. package/analyzer-template/packages/github/dist/types/src/types/ScenariosDataStructure.d.ts +146 -0
  168. package/analyzer-template/packages/github/dist/types/src/types/ScenariosDataStructure.d.ts.map +1 -1
  169. package/analyzer-template/packages/github/dist/types/src/types/StatementInfo.d.ts +2 -0
  170. package/analyzer-template/packages/github/dist/types/src/types/StatementInfo.d.ts.map +1 -1
  171. package/analyzer-template/packages/github/src/lib/loadOrCreateCommit.ts +14 -0
  172. package/analyzer-template/packages/github/src/lib/syncPrimaryBranch.ts +2 -0
  173. package/analyzer-template/packages/process/index.ts +2 -0
  174. package/analyzer-template/packages/process/package.json +12 -0
  175. package/analyzer-template/packages/process/tsconfig.json +8 -0
  176. package/analyzer-template/packages/types/index.ts +4 -0
  177. package/analyzer-template/packages/types/src/types/Analysis.ts +79 -13
  178. package/analyzer-template/packages/types/src/types/Entity.ts +2 -0
  179. package/analyzer-template/packages/types/src/types/Scenario.ts +11 -10
  180. package/analyzer-template/packages/types/src/types/ScenariosDataStructure.ts +161 -0
  181. package/analyzer-template/packages/types/src/types/StatementInfo.ts +2 -0
  182. package/analyzer-template/packages/utils/dist/types/index.d.ts +2 -2
  183. package/analyzer-template/packages/utils/dist/types/index.d.ts.map +1 -1
  184. package/analyzer-template/packages/utils/dist/types/index.js.map +1 -1
  185. package/analyzer-template/packages/utils/dist/types/src/types/Analysis.d.ts +63 -13
  186. package/analyzer-template/packages/utils/dist/types/src/types/Analysis.d.ts.map +1 -1
  187. package/analyzer-template/packages/utils/dist/types/src/types/Entity.d.ts +2 -0
  188. package/analyzer-template/packages/utils/dist/types/src/types/Entity.d.ts.map +1 -1
  189. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts +11 -6
  190. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts.map +1 -1
  191. package/analyzer-template/packages/utils/dist/types/src/types/ScenariosDataStructure.d.ts +146 -0
  192. package/analyzer-template/packages/utils/dist/types/src/types/ScenariosDataStructure.d.ts.map +1 -1
  193. package/analyzer-template/packages/utils/dist/types/src/types/StatementInfo.d.ts +2 -0
  194. package/analyzer-template/packages/utils/dist/types/src/types/StatementInfo.d.ts.map +1 -1
  195. package/analyzer-template/playwright/capture.ts +37 -18
  196. package/analyzer-template/playwright/getCodeYamInfo.ts +12 -7
  197. package/analyzer-template/playwright/takeElementScreenshot.ts +26 -11
  198. package/analyzer-template/playwright/waitForServer.ts +21 -6
  199. package/analyzer-template/project/analyzeBaselineCommit.ts +4 -0
  200. package/analyzer-template/project/analyzeBranchCommit.ts +4 -0
  201. package/analyzer-template/project/analyzeFileEntities.ts +4 -0
  202. package/analyzer-template/project/analyzeRegularCommit.ts +4 -0
  203. package/analyzer-template/project/constructMockCode.ts +868 -132
  204. package/analyzer-template/project/controller/startController.ts +16 -1
  205. package/analyzer-template/project/executeLibraryFunctionDirect.ts +7 -3
  206. package/analyzer-template/project/mocks/analyzeFileMock.ts +8 -7
  207. package/analyzer-template/project/orchestrateCapture/KyselyAnalysisLoader.ts +3 -6
  208. package/analyzer-template/project/orchestrateCapture/SequentialCaptureTaskRunner.ts +49 -33
  209. package/analyzer-template/project/orchestrateCapture.ts +10 -3
  210. package/analyzer-template/project/reconcileMockDataKeys.ts +102 -2
  211. package/analyzer-template/project/runAnalysis.ts +7 -0
  212. package/analyzer-template/project/serverOnlyModules.ts +127 -2
  213. package/analyzer-template/project/start.ts +26 -4
  214. package/analyzer-template/project/startScenarioCapture.ts +72 -40
  215. package/analyzer-template/project/writeMockDataTsx.ts +118 -55
  216. package/analyzer-template/project/writeScenarioClientWrapper.ts +21 -0
  217. package/analyzer-template/project/writeScenarioComponents.ts +263 -92
  218. package/analyzer-template/project/writeScenarioFiles.ts +26 -0
  219. package/analyzer-template/project/writeSimpleRoot.ts +13 -15
  220. package/analyzer-template/scripts/comboWorkerLoop.cjs +1 -0
  221. package/analyzer-template/scripts/defaultCmd.sh +9 -0
  222. package/analyzer-template/tsconfig.json +2 -1
  223. package/background/src/lib/local/createLocalAnalyzer.js +1 -29
  224. package/background/src/lib/local/createLocalAnalyzer.js.map +1 -1
  225. package/background/src/lib/local/execAsync.js +1 -1
  226. package/background/src/lib/local/execAsync.js.map +1 -1
  227. package/background/src/lib/virtualized/common/execAsync.js +1 -1
  228. package/background/src/lib/virtualized/common/execAsync.js.map +1 -1
  229. package/background/src/lib/virtualized/project/analyzeBaselineCommit.js +2 -1
  230. package/background/src/lib/virtualized/project/analyzeBaselineCommit.js.map +1 -1
  231. package/background/src/lib/virtualized/project/analyzeBranchCommit.js +2 -1
  232. package/background/src/lib/virtualized/project/analyzeBranchCommit.js.map +1 -1
  233. package/background/src/lib/virtualized/project/analyzeFileEntities.js +2 -1
  234. package/background/src/lib/virtualized/project/analyzeFileEntities.js.map +1 -1
  235. package/background/src/lib/virtualized/project/analyzeRegularCommit.js +2 -1
  236. package/background/src/lib/virtualized/project/analyzeRegularCommit.js.map +1 -1
  237. package/background/src/lib/virtualized/project/constructMockCode.js +799 -121
  238. package/background/src/lib/virtualized/project/constructMockCode.js.map +1 -1
  239. package/background/src/lib/virtualized/project/controller/startController.js +11 -1
  240. package/background/src/lib/virtualized/project/controller/startController.js.map +1 -1
  241. package/background/src/lib/virtualized/project/executeLibraryFunctionDirect.js +6 -3
  242. package/background/src/lib/virtualized/project/executeLibraryFunctionDirect.js.map +1 -1
  243. package/background/src/lib/virtualized/project/mocks/analyzeFileMock.js +7 -7
  244. package/background/src/lib/virtualized/project/mocks/analyzeFileMock.js.map +1 -1
  245. package/background/src/lib/virtualized/project/orchestrateCapture/KyselyAnalysisLoader.js +3 -2
  246. package/background/src/lib/virtualized/project/orchestrateCapture/KyselyAnalysisLoader.js.map +1 -1
  247. package/background/src/lib/virtualized/project/orchestrateCapture/SequentialCaptureTaskRunner.js +42 -28
  248. package/background/src/lib/virtualized/project/orchestrateCapture/SequentialCaptureTaskRunner.js.map +1 -1
  249. package/background/src/lib/virtualized/project/orchestrateCapture.js +7 -4
  250. package/background/src/lib/virtualized/project/orchestrateCapture.js.map +1 -1
  251. package/background/src/lib/virtualized/project/reconcileMockDataKeys.js +87 -2
  252. package/background/src/lib/virtualized/project/reconcileMockDataKeys.js.map +1 -1
  253. package/background/src/lib/virtualized/project/runAnalysis.js +6 -0
  254. package/background/src/lib/virtualized/project/runAnalysis.js.map +1 -1
  255. package/background/src/lib/virtualized/project/serverOnlyModules.js +106 -3
  256. package/background/src/lib/virtualized/project/serverOnlyModules.js.map +1 -1
  257. package/background/src/lib/virtualized/project/start.js +21 -4
  258. package/background/src/lib/virtualized/project/start.js.map +1 -1
  259. package/background/src/lib/virtualized/project/startScenarioCapture.js +56 -30
  260. package/background/src/lib/virtualized/project/startScenarioCapture.js.map +1 -1
  261. package/background/src/lib/virtualized/project/writeMockDataTsx.js +110 -48
  262. package/background/src/lib/virtualized/project/writeMockDataTsx.js.map +1 -1
  263. package/background/src/lib/virtualized/project/writeScenarioClientWrapper.js +15 -0
  264. package/background/src/lib/virtualized/project/writeScenarioClientWrapper.js.map +1 -0
  265. package/background/src/lib/virtualized/project/writeScenarioComponents.js +211 -75
  266. package/background/src/lib/virtualized/project/writeScenarioComponents.js.map +1 -1
  267. package/background/src/lib/virtualized/project/writeScenarioFiles.js +19 -0
  268. package/background/src/lib/virtualized/project/writeScenarioFiles.js.map +1 -1
  269. package/background/src/lib/virtualized/project/writeSimpleRoot.js +13 -13
  270. package/background/src/lib/virtualized/project/writeSimpleRoot.js.map +1 -1
  271. package/codeyam-cli/src/cli.js +5 -1
  272. package/codeyam-cli/src/cli.js.map +1 -1
  273. package/codeyam-cli/src/commands/analyze.js +1 -1
  274. package/codeyam-cli/src/commands/analyze.js.map +1 -1
  275. package/codeyam-cli/src/commands/baseline.js +174 -0
  276. package/codeyam-cli/src/commands/baseline.js.map +1 -0
  277. package/codeyam-cli/src/commands/debug.js +28 -18
  278. package/codeyam-cli/src/commands/debug.js.map +1 -1
  279. package/codeyam-cli/src/commands/default.js +0 -15
  280. package/codeyam-cli/src/commands/default.js.map +1 -1
  281. package/codeyam-cli/src/commands/recapture.js +44 -23
  282. package/codeyam-cli/src/commands/recapture.js.map +1 -1
  283. package/codeyam-cli/src/commands/report.js +72 -24
  284. package/codeyam-cli/src/commands/report.js.map +1 -1
  285. package/codeyam-cli/src/commands/start.js +8 -12
  286. package/codeyam-cli/src/commands/start.js.map +1 -1
  287. package/codeyam-cli/src/commands/status.js +23 -1
  288. package/codeyam-cli/src/commands/status.js.map +1 -1
  289. package/codeyam-cli/src/commands/test-startup.js +1 -1
  290. package/codeyam-cli/src/commands/test-startup.js.map +1 -1
  291. package/codeyam-cli/src/commands/wipe.js +108 -0
  292. package/codeyam-cli/src/commands/wipe.js.map +1 -0
  293. package/codeyam-cli/src/utils/__tests__/serverVersionStaleness.test.js +81 -0
  294. package/codeyam-cli/src/utils/__tests__/serverVersionStaleness.test.js.map +1 -0
  295. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +27 -27
  296. package/codeyam-cli/src/utils/analysisRunner.js +8 -13
  297. package/codeyam-cli/src/utils/analysisRunner.js.map +1 -1
  298. package/codeyam-cli/src/utils/backgroundServer.js +12 -2
  299. package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
  300. package/codeyam-cli/src/utils/database.js +91 -5
  301. package/codeyam-cli/src/utils/database.js.map +1 -1
  302. package/codeyam-cli/src/utils/generateReport.js +253 -106
  303. package/codeyam-cli/src/utils/generateReport.js.map +1 -1
  304. package/codeyam-cli/src/utils/git.js +79 -0
  305. package/codeyam-cli/src/utils/git.js.map +1 -0
  306. package/codeyam-cli/src/utils/install-skills.js +11 -11
  307. package/codeyam-cli/src/utils/install-skills.js.map +1 -1
  308. package/codeyam-cli/src/utils/queue/__tests__/manager.test.js +38 -0
  309. package/codeyam-cli/src/utils/queue/__tests__/manager.test.js.map +1 -1
  310. package/codeyam-cli/src/utils/queue/job.js +239 -16
  311. package/codeyam-cli/src/utils/queue/job.js.map +1 -1
  312. package/codeyam-cli/src/utils/queue/manager.js +19 -7
  313. package/codeyam-cli/src/utils/queue/manager.js.map +1 -1
  314. package/codeyam-cli/src/utils/queue/persistence.js.map +1 -1
  315. package/codeyam-cli/src/utils/serverState.js.map +1 -1
  316. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +5 -5
  317. package/codeyam-cli/src/utils/versionInfo.js +25 -19
  318. package/codeyam-cli/src/utils/versionInfo.js.map +1 -1
  319. package/codeyam-cli/src/utils/wipe.js +128 -0
  320. package/codeyam-cli/src/utils/wipe.js.map +1 -0
  321. package/codeyam-cli/src/webserver/app/lib/database.js +96 -0
  322. package/codeyam-cli/src/webserver/app/lib/database.js.map +1 -1
  323. package/codeyam-cli/src/webserver/app/lib/dbNotifier.js.map +1 -1
  324. package/codeyam-cli/src/webserver/backgroundServer.js +2 -5
  325. package/codeyam-cli/src/webserver/backgroundServer.js.map +1 -1
  326. package/codeyam-cli/src/webserver/build/client/assets/EntityItem-vauWK972.js +1 -0
  327. package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeBadge-DKdsUF7Y.js → EntityTypeBadge-COi5OvsN.js} +1 -1
  328. package/codeyam-cli/src/webserver/build/client/assets/EntityTypeIcon-BwdQv49w.js +41 -0
  329. package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-CEleMv_j.js +34 -0
  330. package/codeyam-cli/src/webserver/build/client/assets/InteractivePreview-D68KarMg.js +25 -0
  331. package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-L75Wvqgw.js +3 -0
  332. package/codeyam-cli/src/webserver/build/client/assets/LoadingDots-C53WM8qn.js +6 -0
  333. package/codeyam-cli/src/webserver/build/client/assets/LogViewer-CrNkmy4i.js +3 -0
  334. package/codeyam-cli/src/webserver/build/client/assets/ReportIssueModal-DzJRkCkr.js +11 -0
  335. package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-CQifa1n-.js +1 -0
  336. package/codeyam-cli/src/webserver/build/client/assets/ScenarioViewer-CyaBFX7l.js +20 -0
  337. package/codeyam-cli/src/webserver/build/client/assets/{TruncatedFilePath-CWjSsLqY.js → TruncatedFilePath-D36O1rzU.js} +1 -1
  338. package/codeyam-cli/src/webserver/build/client/assets/_index-Be83mo_j.js +11 -0
  339. package/codeyam-cli/src/webserver/build/client/assets/activity.(_tab)-BN6wu6Y-.js +37 -0
  340. package/codeyam-cli/src/webserver/build/client/assets/chevron-down-DgTPh8H-.js +6 -0
  341. package/codeyam-cli/src/webserver/build/client/assets/chunk-EPOLDU6W-DdQKK6on.js +51 -0
  342. package/codeyam-cli/src/webserver/build/client/assets/circle-check-Dmr2bb1R.js +6 -0
  343. package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-Do4ZLUYa.js +21 -0
  344. package/codeyam-cli/src/webserver/build/client/assets/{cy-logo-cli-C1gnJVOL.svg → cy-logo-cli-CCKUIm0S.svg} +2 -2
  345. package/codeyam-cli/src/webserver/build/client/assets/cy-logo-cli-DcX-ZS3p.js +1 -0
  346. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-Bn6aCAy_.js +1 -0
  347. package/codeyam-cli/src/webserver/build/client/assets/entity._sha._-CbdFyxZh.js +23 -0
  348. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-B4iCfs5M.js +6 -0
  349. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-wDWZZO1W.js +6 -0
  350. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.edit._scenarioId-BMbl7MeQ.js +5 -0
  351. package/codeyam-cli/src/webserver/build/client/assets/entry.client-5wRKRIH9.js +29 -0
  352. package/codeyam-cli/src/webserver/build/client/assets/executionFlowCoverage-BWhdfn70.js +1 -0
  353. package/codeyam-cli/src/webserver/build/client/assets/fileTableUtils-DD3SDH7t.js +1 -0
  354. package/codeyam-cli/src/webserver/build/client/assets/files-DKyMFI90.js +1 -0
  355. package/codeyam-cli/src/webserver/build/client/assets/git-zXjT7J0G.js +15 -0
  356. package/codeyam-cli/src/webserver/build/client/assets/globals-DTTQ3gY7.css +1 -0
  357. package/codeyam-cli/src/webserver/build/client/assets/html2canvas-pro.esm-fmIEn3Bc.js +9 -0
  358. package/codeyam-cli/src/webserver/build/client/assets/index-DLbXwndH.js +9 -0
  359. package/codeyam-cli/src/webserver/build/client/assets/index-gPZ-lad1.js +3 -0
  360. package/codeyam-cli/src/webserver/build/client/assets/loader-circle-BsPXJ81F.js +6 -0
  361. package/codeyam-cli/src/webserver/build/client/assets/manifest-22590fcf.js +1 -0
  362. package/codeyam-cli/src/webserver/build/client/assets/preload-helper-ckwbz45p.js +1 -0
  363. package/codeyam-cli/src/webserver/build/client/assets/root-BsAarjAM.js +57 -0
  364. package/codeyam-cli/src/webserver/build/client/assets/scenarioStatus-B_8jpV3e.js +1 -0
  365. package/codeyam-cli/src/webserver/build/client/assets/search-P2FKIUql.js +6 -0
  366. package/codeyam-cli/src/webserver/build/client/assets/settings-B2eDuBj8.js +1 -0
  367. package/codeyam-cli/src/webserver/build/client/assets/simulations-L18M6-kN.js +1 -0
  368. package/codeyam-cli/src/webserver/build/client/assets/triangle-alert-BDz7kbVA.js +6 -0
  369. package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-29dDmbH8.js +1 -0
  370. package/codeyam-cli/src/webserver/build/client/assets/{useLastLogLine-CmrTPlIB.js → useLastLogLine-BUm0UVJm.js} +1 -1
  371. package/codeyam-cli/src/webserver/build/client/assets/useReportContext-CkIOKTrZ.js +1 -0
  372. package/codeyam-cli/src/webserver/build/client/assets/{useToast-C1ig_BmP.js → useToast-KKw5kTn-.js} +1 -1
  373. package/codeyam-cli/src/webserver/build/server/assets/index-BND5I5fv.js +1 -0
  374. package/codeyam-cli/src/webserver/build/server/assets/server-build-CFXnd7MG.js +228 -0
  375. package/codeyam-cli/src/webserver/build/server/index.js +1 -1
  376. package/codeyam-cli/src/webserver/build-info.json +5 -5
  377. package/codeyam-cli/src/webserver/devServer.js +1 -3
  378. package/codeyam-cli/src/webserver/devServer.js.map +1 -1
  379. package/codeyam-cli/src/webserver/server.js +35 -25
  380. package/codeyam-cli/src/webserver/server.js.map +1 -1
  381. package/codeyam-cli/templates/{codeyam-debug-skill.md → codeyam:debug.md} +1 -1
  382. package/codeyam-cli/templates/codeyam:diagnose.md +625 -0
  383. package/codeyam-cli/templates/{codeyam-setup-skill.md → codeyam:setup.md} +139 -4
  384. package/codeyam-cli/templates/{codeyam-sim-skill.md → codeyam:sim.md} +1 -1
  385. package/codeyam-cli/templates/{codeyam-test-skill.md → codeyam:test.md} +1 -1
  386. package/codeyam-cli/templates/{codeyam-verify-skill.md → codeyam:verify.md} +1 -1
  387. package/package.json +8 -8
  388. package/packages/ai/index.js +2 -4
  389. package/packages/ai/index.js.map +1 -1
  390. package/packages/ai/src/lib/analyzeScope.js +107 -0
  391. package/packages/ai/src/lib/analyzeScope.js.map +1 -1
  392. package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js +76 -1
  393. package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js.map +1 -1
  394. package/packages/ai/src/lib/astScopes/conditionalEffectsExtractor.js +435 -0
  395. package/packages/ai/src/lib/astScopes/conditionalEffectsExtractor.js.map +1 -0
  396. package/packages/ai/src/lib/astScopes/methodSemantics.js +29 -0
  397. package/packages/ai/src/lib/astScopes/methodSemantics.js.map +1 -1
  398. package/packages/ai/src/lib/astScopes/patterns/ifStatementHandler.js +8 -0
  399. package/packages/ai/src/lib/astScopes/patterns/ifStatementHandler.js.map +1 -1
  400. package/packages/ai/src/lib/astScopes/patterns/switchStatementHandler.js +23 -0
  401. package/packages/ai/src/lib/astScopes/patterns/switchStatementHandler.js.map +1 -1
  402. package/packages/ai/src/lib/astScopes/patterns/variableDeclarationHandler.js +239 -1
  403. package/packages/ai/src/lib/astScopes/patterns/variableDeclarationHandler.js.map +1 -1
  404. package/packages/ai/src/lib/astScopes/processExpression.js +728 -87
  405. package/packages/ai/src/lib/astScopes/processExpression.js.map +1 -1
  406. package/packages/ai/src/lib/checkAllAttributes.js +24 -9
  407. package/packages/ai/src/lib/checkAllAttributes.js.map +1 -1
  408. package/packages/ai/src/lib/completionCall.js +17 -1
  409. package/packages/ai/src/lib/completionCall.js.map +1 -1
  410. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +1126 -82
  411. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
  412. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.js +2 -1
  413. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.js.map +1 -1
  414. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.js +482 -0
  415. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.js.map +1 -0
  416. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.js +173 -55
  417. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.js.map +1 -1
  418. package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js +16 -1
  419. package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js.map +1 -1
  420. package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js +35 -2
  421. package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js.map +1 -1
  422. package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js +20 -0
  423. package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js.map +1 -1
  424. package/packages/ai/src/lib/dataStructure/helpers/convertNullToUndefinedBySchema.js +86 -0
  425. package/packages/ai/src/lib/dataStructure/helpers/convertNullToUndefinedBySchema.js.map +1 -0
  426. package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js +34 -3
  427. package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js.map +1 -1
  428. package/packages/ai/src/lib/deepEqual.js +32 -0
  429. package/packages/ai/src/lib/deepEqual.js.map +1 -0
  430. package/packages/ai/src/lib/generateChangesEntityScenarioData.js +62 -5
  431. package/packages/ai/src/lib/generateChangesEntityScenarioData.js.map +1 -1
  432. package/packages/ai/src/lib/generateChangesEntityScenarios.js +81 -90
  433. package/packages/ai/src/lib/generateChangesEntityScenarios.js.map +1 -1
  434. package/packages/ai/src/lib/generateEntityDataStructure.js +5 -0
  435. package/packages/ai/src/lib/generateEntityDataStructure.js.map +1 -1
  436. package/packages/ai/src/lib/generateEntityScenarioData.js +398 -81
  437. package/packages/ai/src/lib/generateEntityScenarioData.js.map +1 -1
  438. package/packages/ai/src/lib/generateEntityScenarios.js +168 -82
  439. package/packages/ai/src/lib/generateEntityScenarios.js.map +1 -1
  440. package/packages/ai/src/lib/generateExecutionFlows.js +123 -0
  441. package/packages/ai/src/lib/generateExecutionFlows.js.map +1 -0
  442. package/packages/ai/src/lib/generateExecutionFlowsFromConditionalEffects.js +380 -0
  443. package/packages/ai/src/lib/generateExecutionFlowsFromConditionalEffects.js.map +1 -0
  444. package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js +742 -0
  445. package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js.map +1 -0
  446. package/packages/ai/src/lib/getConditionalUsagesFromCode.js +84 -14
  447. package/packages/ai/src/lib/getConditionalUsagesFromCode.js.map +1 -1
  448. package/packages/ai/src/lib/guessScenarioDataFromDescription.js +2 -1
  449. package/packages/ai/src/lib/guessScenarioDataFromDescription.js.map +1 -1
  450. package/packages/ai/src/lib/isolateScopes.js +231 -4
  451. package/packages/ai/src/lib/isolateScopes.js.map +1 -1
  452. package/packages/ai/src/lib/mergeStatements.js +26 -3
  453. package/packages/ai/src/lib/mergeStatements.js.map +1 -1
  454. package/packages/ai/src/lib/promptGenerators/gatherAttributesMap.js +6 -0
  455. package/packages/ai/src/lib/promptGenerators/gatherAttributesMap.js.map +1 -1
  456. package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenarioDataGenerator.js +1 -1
  457. package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenarioDataGenerator.js.map +1 -1
  458. package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.js +21 -64
  459. package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.js.map +1 -1
  460. package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js +58 -4
  461. package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js.map +1 -1
  462. package/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.js +10 -34
  463. package/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.js.map +1 -1
  464. package/packages/ai/src/lib/promptGenerators/generateMissingKeysPrompt.js +45 -0
  465. package/packages/ai/src/lib/promptGenerators/generateMissingKeysPrompt.js.map +1 -0
  466. package/packages/ai/src/lib/promptGenerators/guessNewScenarioDataFromDescriptionGenerator.js +16 -3
  467. package/packages/ai/src/lib/promptGenerators/guessNewScenarioDataFromDescriptionGenerator.js.map +1 -1
  468. package/packages/ai/src/lib/resolvePathToControllable.js +563 -0
  469. package/packages/ai/src/lib/resolvePathToControllable.js.map +1 -0
  470. package/packages/ai/src/lib/splitOutsideParentheses.js +3 -1
  471. package/packages/ai/src/lib/splitOutsideParentheses.js.map +1 -1
  472. package/packages/ai/src/lib/worker/SerializableDataStructure.js +22 -0
  473. package/packages/ai/src/lib/worker/SerializableDataStructure.js.map +1 -1
  474. package/packages/ai/src/lib/worker/analyzeScopeWorker.js +4 -0
  475. package/packages/ai/src/lib/worker/analyzeScopeWorker.js.map +1 -1
  476. package/packages/analyze/src/lib/FileAnalyzer.js +15 -0
  477. package/packages/analyze/src/lib/FileAnalyzer.js.map +1 -1
  478. package/packages/analyze/src/lib/asts/nodes/index.js +1 -0
  479. package/packages/analyze/src/lib/asts/nodes/index.js.map +1 -1
  480. package/packages/analyze/src/lib/asts/nodes/isAsyncFunction.js +52 -0
  481. package/packages/analyze/src/lib/asts/nodes/isAsyncFunction.js.map +1 -0
  482. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js +214 -50
  483. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js.map +1 -1
  484. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js +10 -0
  485. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js.map +1 -1
  486. package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js +2 -0
  487. package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js.map +1 -1
  488. package/packages/analyze/src/lib/files/analyzeChange.js +21 -11
  489. package/packages/analyze/src/lib/files/analyzeChange.js.map +1 -1
  490. package/packages/analyze/src/lib/files/analyzeEntity.js +9 -8
  491. package/packages/analyze/src/lib/files/analyzeEntity.js.map +1 -1
  492. package/packages/analyze/src/lib/files/analyzeInitial.js +9 -10
  493. package/packages/analyze/src/lib/files/analyzeInitial.js.map +1 -1
  494. package/packages/analyze/src/lib/files/enums/steps.js +1 -1
  495. package/packages/analyze/src/lib/files/enums/steps.js.map +1 -1
  496. package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js +159 -0
  497. package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js.map +1 -0
  498. package/packages/analyze/src/lib/files/scenarios/enrichUnknownTypesFromSourceEquivalencies.js +85 -0
  499. package/packages/analyze/src/lib/files/scenarios/enrichUnknownTypesFromSourceEquivalencies.js.map +1 -0
  500. package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js +458 -48
  501. package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js.map +1 -1
  502. package/packages/analyze/src/lib/files/scenarios/generateChangesScenarioData.js +1 -1
  503. package/packages/analyze/src/lib/files/scenarios/generateChangesScenarioData.js.map +1 -1
  504. package/packages/analyze/src/lib/files/scenarios/generateChangesScenarios.js +29 -34
  505. package/packages/analyze/src/lib/files/scenarios/generateChangesScenarios.js.map +1 -1
  506. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +235 -81
  507. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
  508. package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js +96 -0
  509. package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js.map +1 -0
  510. package/packages/analyze/src/lib/files/scenarios/generateScenarioData.js +56 -69
  511. package/packages/analyze/src/lib/files/scenarios/generateScenarioData.js.map +1 -1
  512. package/packages/analyze/src/lib/files/scenarios/generateScenarios.js +4 -8
  513. package/packages/analyze/src/lib/files/scenarios/generateScenarios.js.map +1 -1
  514. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +307 -89
  515. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js.map +1 -1
  516. package/packages/aws/src/lib/ecs/ecsDefineContainer.js +2 -2
  517. package/packages/aws/src/lib/ecs/ecsDefineContainer.js.map +1 -1
  518. package/packages/aws/src/lib/ecs/ecsTaskFactory.js +17 -61
  519. package/packages/aws/src/lib/ecs/ecsTaskFactory.js.map +1 -1
  520. package/packages/database/src/lib/kysely/db.js +2 -2
  521. package/packages/database/src/lib/kysely/tables/debugReportsTable.js +9 -3
  522. package/packages/database/src/lib/kysely/tables/debugReportsTable.js.map +1 -1
  523. package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.js +7 -4
  524. package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.js.map +1 -1
  525. package/packages/generate/index.js +3 -0
  526. package/packages/generate/index.js.map +1 -1
  527. package/packages/generate/src/lib/componentScenarioPage/componentScenarioPageNext.js +16 -1
  528. package/packages/generate/src/lib/componentScenarioPage/componentScenarioPageNext.js.map +1 -1
  529. package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js +189 -0
  530. package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js.map +1 -0
  531. package/packages/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.js +53 -0
  532. package/packages/generate/src/lib/componentScenarioPage/generateScenarioServerComponent.js.map +1 -0
  533. package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +8 -4
  534. package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
  535. package/packages/generate/src/lib/deepMerge.js +27 -1
  536. package/packages/generate/src/lib/deepMerge.js.map +1 -1
  537. package/packages/generate/src/lib/scenarioComponentForServer.js +89 -0
  538. package/packages/generate/src/lib/scenarioComponentForServer.js.map +1 -0
  539. package/packages/github/src/lib/loadOrCreateCommit.js +10 -0
  540. package/packages/github/src/lib/loadOrCreateCommit.js.map +1 -1
  541. package/packages/github/src/lib/syncPrimaryBranch.js +3 -0
  542. package/packages/github/src/lib/syncPrimaryBranch.js.map +1 -1
  543. package/packages/process/index.js +3 -0
  544. package/packages/process/index.js.map +1 -0
  545. package/packages/process/src/GlobalProcessManager.js.map +1 -0
  546. package/{background/src/lib/process → packages/process/src}/ProcessManager.js +1 -1
  547. package/packages/process/src/ProcessManager.js.map +1 -0
  548. package/packages/process/src/index.js.map +1 -0
  549. package/packages/process/src/managedExecAsync.js.map +1 -0
  550. package/packages/types/index.js.map +1 -1
  551. package/scripts/finalize-analyzer.cjs +3 -1
  552. package/analyzer-template/packages/ai/src/lib/findMatchingAttribute.ts +0 -102
  553. package/analyzer-template/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.ts +0 -197
  554. package/analyzer-template/packages/ai/src/lib/generateChangesEntityKeyAttributes.ts +0 -271
  555. package/analyzer-template/packages/ai/src/lib/generateEntityKeyAttributes.ts +0 -294
  556. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityKeyAttributesGenerator.ts +0 -67
  557. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.ts +0 -115
  558. package/analyzer-template/process/INTEGRATION_COMPLETE.md +0 -333
  559. package/analyzer-template/process/INTEGRATION_EXAMPLE.md +0 -525
  560. package/analyzer-template/process/README.md +0 -507
  561. package/background/src/lib/process/GlobalProcessManager.js.map +0 -1
  562. package/background/src/lib/process/ProcessManager.js.map +0 -1
  563. package/background/src/lib/process/index.js.map +0 -1
  564. package/background/src/lib/process/managedExecAsync.js.map +0 -1
  565. package/codeyam-cli/scripts/fixtures/cal.com/universal-mocks/packages/prisma/index.js +0 -238
  566. package/codeyam-cli/scripts/fixtures/cal.com/universal-mocks/packages/prisma/index.js.map +0 -1
  567. package/codeyam-cli/src/webserver/build/client/assets/EntityItem-D0VW1-W7.js +0 -1
  568. package/codeyam-cli/src/webserver/build/client/assets/EntityTypeIcon-BAk4S4pI.js +0 -1
  569. package/codeyam-cli/src/webserver/build/client/assets/InteractivePreview-Y756iZxZ.js +0 -25
  570. package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-zzrrjW1p.js +0 -3
  571. package/codeyam-cli/src/webserver/build/client/assets/LogViewer-QMn7bJg6.js +0 -3
  572. package/codeyam-cli/src/webserver/build/client/assets/ReportIssueModal-DmP5mRxX.js +0 -1
  573. package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-BXwvsbLw.js +0 -1
  574. package/codeyam-cli/src/webserver/build/client/assets/ScenarioViewer-DAmUX_1y.js +0 -5
  575. package/codeyam-cli/src/webserver/build/client/assets/_index-Df-nk4J5.js +0 -1
  576. package/codeyam-cli/src/webserver/build/client/assets/activity.(_tab)-_ZUyFdie.js +0 -7
  577. package/codeyam-cli/src/webserver/build/client/assets/chevron-down-Eoh0PhcW.js +0 -1
  578. package/codeyam-cli/src/webserver/build/client/assets/chunk-WWGJGFF6-CZgPLy5i.js +0 -26
  579. package/codeyam-cli/src/webserver/build/client/assets/circle-check-DI-p9ZLZ.js +0 -1
  580. package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-DvyV2x6y.js +0 -1
  581. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-DURu2qlF.js +0 -1
  582. package/codeyam-cli/src/webserver/build/client/assets/entity._sha._-DDobn9Xh.js +0 -16
  583. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-CGdWnLD_.js +0 -1
  584. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.edit._scenarioId-DgMmzrKs.js +0 -5
  585. package/codeyam-cli/src/webserver/build/client/assets/entry.client-DEVXuhkn.js +0 -13
  586. package/codeyam-cli/src/webserver/build/client/assets/fileTableUtils-WPRQyc68.js +0 -1
  587. package/codeyam-cli/src/webserver/build/client/assets/files-B9u3lJer.js +0 -1
  588. package/codeyam-cli/src/webserver/build/client/assets/git-YGnKIuHU.js +0 -11
  589. package/codeyam-cli/src/webserver/build/client/assets/globals-28lrWTTo.css +0 -1
  590. package/codeyam-cli/src/webserver/build/client/assets/html2canvas-pro.esm-XQCGvadH.js +0 -5
  591. package/codeyam-cli/src/webserver/build/client/assets/index-CJ0uPJjV.js +0 -1
  592. package/codeyam-cli/src/webserver/build/client/assets/index-CfqeA2XG.js +0 -3
  593. package/codeyam-cli/src/webserver/build/client/assets/loader-circle-DIjSvh6B.js +0 -1
  594. package/codeyam-cli/src/webserver/build/client/assets/manifest-8125c15c.js +0 -1
  595. package/codeyam-cli/src/webserver/build/client/assets/preload-helper-BXl3LOEh.js +0 -1
  596. package/codeyam-cli/src/webserver/build/client/assets/root-C-g286WP.js +0 -16
  597. package/codeyam-cli/src/webserver/build/client/assets/search-xBKWfOxd.js +0 -1
  598. package/codeyam-cli/src/webserver/build/client/assets/settings-DVY_wGOx.js +0 -1
  599. package/codeyam-cli/src/webserver/build/client/assets/simulations-Be1pJo5A.js +0 -1
  600. package/codeyam-cli/src/webserver/build/client/assets/triangle-alert-CR-FkSvx.js +0 -1
  601. package/codeyam-cli/src/webserver/build/client/assets/useReportContext-DABetnSj.js +0 -1
  602. package/codeyam-cli/src/webserver/build/server/assets/index-DcR7DH9q.js +0 -1
  603. package/codeyam-cli/src/webserver/build/server/assets/server-build-BDBrfp7e.js +0 -175
  604. package/codeyam-cli/templates/debug-codeyam.md +0 -527
  605. package/packages/ai/src/lib/findMatchingAttribute.js +0 -77
  606. package/packages/ai/src/lib/findMatchingAttribute.js.map +0 -1
  607. package/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.js +0 -136
  608. package/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.js.map +0 -1
  609. package/packages/ai/src/lib/generateChangesEntityKeyAttributes.js +0 -220
  610. package/packages/ai/src/lib/generateChangesEntityKeyAttributes.js.map +0 -1
  611. package/packages/ai/src/lib/generateEntityKeyAttributes.js +0 -241
  612. package/packages/ai/src/lib/generateEntityKeyAttributes.js.map +0 -1
  613. package/packages/ai/src/lib/isFrontend.js +0 -5
  614. package/packages/ai/src/lib/isFrontend.js.map +0 -1
  615. package/packages/ai/src/lib/promptGenerators/generateEntityKeyAttributesGenerator.js +0 -40
  616. package/packages/ai/src/lib/promptGenerators/generateEntityKeyAttributesGenerator.js.map +0 -1
  617. package/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.js +0 -72
  618. package/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.js.map +0 -1
  619. /package/analyzer-template/{process → packages/process/src}/GlobalProcessManager.ts +0 -0
  620. /package/analyzer-template/{process → packages/process/src}/ProcessManager.ts +0 -0
  621. /package/analyzer-template/{process → packages/process/src}/index.ts +0 -0
  622. /package/analyzer-template/{process → packages/process/src}/managedExecAsync.ts +0 -0
  623. /package/{background/src/lib/process → packages/process/src}/GlobalProcessManager.js +0 -0
  624. /package/{background/src/lib/process → packages/process/src}/index.js +0 -0
  625. /package/{background/src/lib/process → packages/process/src}/managedExecAsync.js +0 -0
@@ -0,0 +1,690 @@
1
+ /**
2
+ * Resolves a local variable path to a controllable data source path.
3
+ *
4
+ * This is used for deterministic execution flow generation from static analysis.
5
+ * A path is "controllable" if it maps to an entry in attributesMap, meaning
6
+ * we can mock that data during scenario simulation.
7
+ *
8
+ * Resolution strategy:
9
+ * 1. Direct match in attributesMap
10
+ * 2. Normalized match (array indices [N] → [])
11
+ * 3. Full-to-short map lookup
12
+ * 4. Equivalent variable resolution (trace local vars to data sources)
13
+ */
14
+
15
+ import {
16
+ splitOutsideParenthesesAndArrays,
17
+ joinParenthesesAndArrays,
18
+ } from './splitOutsideParentheses';
19
+ import cleanPathOfNonTransformingFunctions from './dataStructure/helpers/cleanPathOfNonTransformingFunctions';
20
+
21
+ export interface PathResolutionResult {
22
+ /** The resolved controllable path, or null if not controllable */
23
+ resolvedPath: string | null;
24
+ /** Chain showing how the path was resolved (for debugging) */
25
+ resolutionChain: string[];
26
+ /** Whether this path is controllable (can be mocked) */
27
+ isControllable: boolean;
28
+ }
29
+
30
+ /**
31
+ * Extract the local variable name from a path.
32
+ *
33
+ * Handles patterns like:
34
+ * - "debugFetcher.state" → "debugFetcher"
35
+ * - "EntityDetail.showModal" → "showModal" (strips component prefix)
36
+ * - "isLoading" → "isLoading"
37
+ */
38
+ function extractLocalVariableName(path: string): string {
39
+ const parts = path.split('.');
40
+
41
+ if (parts.length >= 2) {
42
+ // Check if first part looks like a component name (PascalCase)
43
+ const firstPart = parts[0];
44
+ if (/^[A-Z][a-zA-Z0-9]*$/.test(firstPart)) {
45
+ // Return the second part as the variable name
46
+ return parts[1];
47
+ }
48
+ }
49
+
50
+ // Otherwise return the first part
51
+ return parts[0];
52
+ }
53
+
54
+ /**
55
+ * Resolve a compound path by replacing the local variable with its data source.
56
+ *
57
+ * When the data source is a function call (ends with `()`), we insert
58
+ * `.functionCallReturnValue.` to match how paths are stored in the data structure.
59
+ *
60
+ * Examples:
61
+ * - ("debugFetcher.state", "debugFetcher", "useFetcher<...>()")
62
+ * → "useFetcher<...>().functionCallReturnValue.state"
63
+ * - ("debugFetcher.data.success", "debugFetcher", "useFetcher<...>()")
64
+ * → "useFetcher<...>().functionCallReturnValue.data.success"
65
+ */
66
+ function resolveCompoundPath(
67
+ originalPath: string,
68
+ localVarName: string,
69
+ dataSourceBase: string,
70
+ ): string {
71
+ // Find where the local variable appears in the path
72
+ const varIndex = originalPath.indexOf(localVarName);
73
+ if (varIndex === -1) {
74
+ // If the data source is a function call, we need .functionCallReturnValue
75
+ if (dataSourceBase.endsWith('()')) {
76
+ return dataSourceBase + '.functionCallReturnValue';
77
+ }
78
+ return dataSourceBase;
79
+ }
80
+
81
+ // Get the suffix after the local variable name
82
+ const afterVar = originalPath.slice(varIndex + localVarName.length);
83
+
84
+ // If the data source is a function call, insert .functionCallReturnValue
85
+ if (dataSourceBase.endsWith('()')) {
86
+ return dataSourceBase + '.functionCallReturnValue' + afterVar;
87
+ }
88
+
89
+ // If there's no suffix, just return the data source
90
+ if (!afterVar || afterVar === '') {
91
+ return dataSourceBase;
92
+ }
93
+
94
+ // Otherwise just combine them directly
95
+ return dataSourceBase + afterVar;
96
+ }
97
+
98
+ /**
99
+ * Check if a type indicates an array.
100
+ * Returns true for "array", "Array", or types ending with "[]" like "User[]"
101
+ */
102
+ function isArrayType(type: string): boolean {
103
+ return (
104
+ type === 'array' ||
105
+ type === 'Array' ||
106
+ type.endsWith('[]') ||
107
+ type.startsWith('Array<')
108
+ );
109
+ }
110
+
111
+ /**
112
+ * Check if a path is an array.length access and return the base array path if so.
113
+ * Returns null if not an array.length pattern.
114
+ *
115
+ * Fix 27: Also checks via fullToShortPathMap for translated child paths.
116
+ * Uses path splitting utilities instead of string matching for robustness.
117
+ */
118
+ function getArrayBaseIfLengthAccess(
119
+ path: string,
120
+ attributesMap: Record<string, string>,
121
+ fullToShortPathMap?: Record<string, string>,
122
+ ): string | null {
123
+ // Use path splitting to detect .length access properly
124
+ const pathParts = splitOutsideParenthesesAndArrays(path);
125
+ if (pathParts.length === 0 || pathParts[pathParts.length - 1] !== 'length') {
126
+ return null;
127
+ }
128
+
129
+ // Get the base path (everything except the last 'length' part)
130
+ const basePath = joinParenthesesAndArrays(pathParts.slice(0, -1));
131
+
132
+ // Clean the base path of non-transforming functions (e.g., .filter())
133
+ // This handles cases like scenarios.filter(cyScope()).length
134
+ const cleanedBasePath = cleanPathOfNonTransformingFunctions(basePath);
135
+
136
+ // Helper to check if a path is in attributesMap with array type
137
+ const checkArrayInAttributesMap = (pathToCheck: string): string | null => {
138
+ // Direct match
139
+ if (pathToCheck in attributesMap) {
140
+ const type = attributesMap[pathToCheck];
141
+ if (isArrayType(type)) {
142
+ return pathToCheck;
143
+ }
144
+ }
145
+ // Normalized match (array indices [N] → [])
146
+ const normalizedPath = pathToCheck.replace(/\[\d+\]/g, '[]');
147
+ if (normalizedPath !== pathToCheck && normalizedPath in attributesMap) {
148
+ const type = attributesMap[normalizedPath];
149
+ if (isArrayType(type)) {
150
+ return normalizedPath;
151
+ }
152
+ }
153
+ // Try with [] suffix (for filter/sort/etc methods that operate on arrays)
154
+ // cleanPathOfNonTransformingFunctions may strip the method but not add []
155
+ if (!pathToCheck.endsWith('[]')) {
156
+ const pathWithArray = pathToCheck + '[]';
157
+ if (pathWithArray in attributesMap) {
158
+ const type = attributesMap[pathWithArray];
159
+ if (isArrayType(type)) {
160
+ return pathWithArray;
161
+ }
162
+ }
163
+ }
164
+ return null;
165
+ };
166
+
167
+ // Check base path directly
168
+ const directResult = checkArrayInAttributesMap(basePath);
169
+ if (directResult) return directResult;
170
+
171
+ // Check cleaned path (with non-transforming functions removed)
172
+ if (cleanedBasePath !== basePath) {
173
+ const cleanedResult = checkArrayInAttributesMap(cleanedBasePath);
174
+ if (cleanedResult) return cleanedResult;
175
+ }
176
+
177
+ // Fix 27: Check via fullToShortPathMap
178
+ if (fullToShortPathMap) {
179
+ // Try both basePath and cleanedBasePath
180
+ const pathsToTry = [basePath];
181
+ if (cleanedBasePath !== basePath) {
182
+ pathsToTry.push(cleanedBasePath);
183
+ }
184
+
185
+ for (const pathToCheck of pathsToTry) {
186
+ // Direct match in fullToShortPathMap
187
+ if (pathToCheck in fullToShortPathMap) {
188
+ const shortPath = fullToShortPathMap[pathToCheck];
189
+ const shortResult = checkArrayInAttributesMap(shortPath);
190
+ if (shortResult) return basePath; // Return original basePath for context
191
+ }
192
+
193
+ // Fix 30: Find prefix match in fullToShortPathMap
194
+ const fullPathKeys = Object.keys(fullToShortPathMap);
195
+ for (const fullPath of fullPathKeys) {
196
+ if (pathToCheck.startsWith(fullPath + '.')) {
197
+ const suffix = pathToCheck.slice(fullPath.length);
198
+ const shortBase = fullToShortPathMap[fullPath];
199
+ const shortPath = shortBase + suffix;
200
+
201
+ const shortResult = checkArrayInAttributesMap(shortPath);
202
+ if (shortResult) return basePath; // Return original basePath for context
203
+ }
204
+ }
205
+ }
206
+ }
207
+
208
+ return null;
209
+ }
210
+
211
+ /**
212
+ * Check if a path exists in the attributes map (directly or normalized).
213
+ */
214
+ function findInAttributesMap(
215
+ path: string,
216
+ attributesMap: Record<string, string>,
217
+ ): string | null {
218
+ // Direct match
219
+ if (path in attributesMap) {
220
+ return path;
221
+ }
222
+
223
+ // Normalized match (array indices [N] → [])
224
+ const normalizedPath = path.replace(/\[\d+\]/g, '[]');
225
+ if (normalizedPath !== path && normalizedPath in attributesMap) {
226
+ return normalizedPath;
227
+ }
228
+
229
+ // Fix 33: If path ends with [] (array element access), check if base path is an array
230
+ // This handles cases like `segments[]` where `segments` is in attributesMap as an array
231
+ if (path.endsWith('[]')) {
232
+ const basePath = path.slice(0, -2); // Remove trailing []
233
+ if (basePath in attributesMap) {
234
+ const type = attributesMap[basePath];
235
+ // Check if the base is an array type
236
+ if (isArrayType(type) || type === 'unknown' || type === 'string') {
237
+ // For arrays/strings, element access is controllable
238
+ return path;
239
+ }
240
+ }
241
+ }
242
+
243
+ // Fix 33: If path ends with [N] (specific array index), check if base path is an array
244
+ // This handles cases like `segments[0]` where `segments` is in attributesMap as an array
245
+ const arrayIndexMatch = path.match(/^(.+)\[\d+\]$/);
246
+ if (arrayIndexMatch) {
247
+ const basePath = arrayIndexMatch[1];
248
+ if (basePath in attributesMap) {
249
+ const type = attributesMap[basePath];
250
+ // Check if the base is an array type
251
+ if (isArrayType(type) || type === 'unknown' || type === 'string') {
252
+ // For arrays/strings, element access is controllable
253
+ // Return the normalized path for consistency
254
+ return normalizedPath;
255
+ }
256
+ }
257
+ }
258
+
259
+ return null;
260
+ }
261
+
262
+ /**
263
+ * Fix 35: Check if a path is controllable because a PREFIX of it is controllable.
264
+ *
265
+ * When child components access nested properties on a prop passed from parent,
266
+ * the parent's attributesMap might only contain the base path (e.g., "scenarios[]")
267
+ * but the child uses a nested path (e.g., "scenarios[].metadata.screenshotPaths[]").
268
+ *
269
+ * Since nested properties of controllable objects are also controllable,
270
+ * we should recognize that "scenarios[].metadata.screenshotPaths[]" is controllable
271
+ * if "scenarios[]" is controllable with an object/array type.
272
+ *
273
+ * @param path - The full path to check (e.g., "scenarios[].metadata.screenshotPaths[]")
274
+ * @param attributesMap - Map of controllable paths to their types
275
+ * @param fullToShortPathMap - Map from full paths to short paths
276
+ * @returns The full path if controllable via prefix, null otherwise
277
+ */
278
+ function findControllablePrefix(
279
+ path: string,
280
+ attributesMap: Record<string, string>,
281
+ fullToShortPathMap?: Record<string, string>,
282
+ ): string | null {
283
+ // Normalize array indices for matching
284
+ const normalizedPath = path.replace(/\[\d+\]/g, '[]');
285
+
286
+ // First, try to find a short version of the path using fullToShortPathMap
287
+ // The path might be "useLoaderData...scenarios[].metadata.screenshotPaths[]"
288
+ // We need to find "currentEntityAnalysis.scenarios[]" in attributesMap
289
+
290
+ // Try to find the longest matching prefix in fullToShortPathMap
291
+ let shortenedPath = normalizedPath;
292
+ if (fullToShortPathMap) {
293
+ for (const [fullPath, shortPath] of Object.entries(fullToShortPathMap)) {
294
+ // Check if normalizedPath starts with this fullPath
295
+ if (normalizedPath.startsWith(fullPath)) {
296
+ // Replace the prefix with the short version
297
+ const suffix = normalizedPath.slice(fullPath.length);
298
+ shortenedPath = shortPath + suffix;
299
+ break;
300
+ }
301
+ }
302
+ }
303
+
304
+ // Now check prefixes on the shortened path
305
+ const pathToCheck = shortenedPath;
306
+
307
+ // Split the path into parts by . and []
308
+ // e.g., "scenarios[].metadata.screenshotPaths[]" → ["scenarios[]", "metadata", "screenshotPaths[]"]
309
+ const parts: string[] = [];
310
+ let current = '';
311
+ for (let i = 0; i < pathToCheck.length; i++) {
312
+ const char = pathToCheck[i];
313
+ if (char === '.') {
314
+ if (current) parts.push(current);
315
+ current = '';
316
+ } else if (char === '[') {
317
+ // Include the bracket notation in the current part
318
+ const bracketEnd = pathToCheck.indexOf(']', i);
319
+ if (bracketEnd !== -1) {
320
+ current += pathToCheck.slice(i, bracketEnd + 1);
321
+ i = bracketEnd;
322
+ } else {
323
+ current += char;
324
+ }
325
+ } else {
326
+ current += char;
327
+ }
328
+ }
329
+ if (current) parts.push(current);
330
+
331
+ // Try progressively shorter prefixes
332
+ // e.g., "scenarios[].metadata.screenshotPaths[]" → "scenarios[].metadata" → "scenarios[]"
333
+ for (let i = parts.length - 1; i >= 1; i--) {
334
+ const prefix = parts.slice(0, i).join('.');
335
+
336
+ // Check direct match in attributesMap
337
+ if (prefix in attributesMap) {
338
+ const type = attributesMap[prefix];
339
+ // For objects, arrays, or unknown types, nested property access is controllable
340
+ if (
341
+ isArrayType(type) ||
342
+ type === 'object' ||
343
+ type === 'unknown' ||
344
+ type.endsWith('[]') ||
345
+ type.includes('<') // Generic types like Scenario[] or Record<...>
346
+ ) {
347
+ return path; // Return the original path (not normalized) as controllable
348
+ }
349
+ }
350
+ }
351
+
352
+ return null;
353
+ }
354
+
355
+ /**
356
+ * Fix 34: Find a controllable base path for derived paths.
357
+ *
358
+ * Paths like "useParams().functionCallReturnValue.*.split('/').filter(Boolean)[0]"
359
+ * are derived from "useParams().functionCallReturnValue.*" via string methods.
360
+ * This function strips string method calls to find the controllable base.
361
+ *
362
+ * String methods that create derived paths:
363
+ * - .split(...) → returns array of strings
364
+ * - .filter(...) → returns filtered array
365
+ * - .slice(...) → returns sliced array/string
366
+ * - .map(...) → returns transformed array
367
+ * - .find(...) → returns single element
368
+ * - .trim(), .toLowerCase(), .toUpperCase() → returns modified string
369
+ *
370
+ * @param path - The full derived path
371
+ * @param attributesMap - Map of controllable paths
372
+ * @returns The controllable base path if found, null otherwise
373
+ */
374
+ function findControllableBaseForDerivedPath(
375
+ path: string,
376
+ attributesMap: Record<string, string>,
377
+ ): string | null {
378
+ // Use cleanPathOfNonTransformingFunctions to strip non-transforming methods
379
+ // like .filter(), .sort(), .slice() etc. This handles all method calls generically
380
+ // without hardcoding specific method names.
381
+ const cleanedPath = cleanPathOfNonTransformingFunctions(path);
382
+
383
+ // If the path wasn't changed, there are no non-transforming functions to strip
384
+ if (cleanedPath === path) {
385
+ return null;
386
+ }
387
+
388
+ // Helper to check if a path is in attributesMap
389
+ const checkInAttributesMap = (pathToCheck: string): string | null => {
390
+ // Direct match
391
+ if (pathToCheck in attributesMap) {
392
+ return pathToCheck;
393
+ }
394
+
395
+ // Normalized match (array indices [N] → [])
396
+ const normalizedPath = pathToCheck.replace(/\[\d+\]/g, '[]');
397
+ if (normalizedPath !== pathToCheck && normalizedPath in attributesMap) {
398
+ return normalizedPath;
399
+ }
400
+
401
+ return null;
402
+ };
403
+
404
+ // Check the cleaned path directly
405
+ const directResult = checkInAttributesMap(cleanedPath);
406
+ if (directResult) {
407
+ return directResult;
408
+ }
409
+
410
+ // Extract the short path (after functionCallReturnValue) for attributesMap lookup
411
+ const functionReturnMatch = cleanedPath.match(
412
+ /\.functionCallReturnValue\.(.+)$/,
413
+ );
414
+ if (functionReturnMatch) {
415
+ const shortPath = functionReturnMatch[1];
416
+ const shortResult = checkInAttributesMap(shortPath);
417
+ if (shortResult) {
418
+ return shortResult;
419
+ }
420
+ }
421
+
422
+ return null;
423
+ }
424
+
425
+ /**
426
+ * Resolve a local variable path to a controllable data source path.
427
+ *
428
+ * @param localPath - The path to resolve (e.g., "isLoading", "debugFetcher.state")
429
+ * @param attributesMap - Map of controllable paths to their types
430
+ * @param equivalentSignatureVariables - Map from local variable names to data sources
431
+ * @param fullToShortPathMap - Map from full paths to short paths (for hooks)
432
+ * @returns Resolution result with the controllable path or null
433
+ */
434
+ export default function resolvePathToControllable(
435
+ localPath: string,
436
+ attributesMap: Record<string, string>,
437
+ equivalentSignatureVariables: Record<string, string>,
438
+ fullToShortPathMap: Record<string, string>,
439
+ ): PathResolutionResult {
440
+ const chain: string[] = [localPath];
441
+
442
+ // 1. Direct match in attributesMap
443
+ const directMatch = findInAttributesMap(localPath, attributesMap);
444
+ if (directMatch) {
445
+ chain.push(`direct match: ${directMatch}`);
446
+ return {
447
+ resolvedPath: directMatch,
448
+ resolutionChain: chain,
449
+ isControllable: true,
450
+ };
451
+ }
452
+
453
+ // 2. Array.length resolution (direct)
454
+ // If path ends with .length and base is an array, the .length is controllable
455
+ // Fix 27: Pass fullToShortPathMap for child path resolution
456
+ const arrayBase = getArrayBaseIfLengthAccess(
457
+ localPath,
458
+ attributesMap,
459
+ fullToShortPathMap,
460
+ );
461
+ if (arrayBase) {
462
+ chain.push(`array.length: base ${arrayBase} is array type`);
463
+ return {
464
+ resolvedPath: localPath,
465
+ resolutionChain: chain,
466
+ isControllable: true,
467
+ };
468
+ }
469
+
470
+ // 3. Full-to-short map lookup
471
+ if (localPath in fullToShortPathMap) {
472
+ const shortPath = fullToShortPathMap[localPath];
473
+ chain.push(`fullToShort: ${shortPath}`);
474
+ const shortMatch = findInAttributesMap(shortPath, attributesMap);
475
+ if (shortMatch) {
476
+ chain.push(`short match: ${shortMatch}`);
477
+ return {
478
+ resolvedPath: localPath, // Return the full path since that's what we'll use
479
+ resolutionChain: chain,
480
+ isControllable: true,
481
+ };
482
+ }
483
+ }
484
+
485
+ // 3b. Array element notation resolution (Fix 29)
486
+ // When a path ends with [] (array element access), the fullToShortPathMap
487
+ // may only have the base path (without []). Check if the base is mapped
488
+ // and then verify the short path with [] is in attributesMap.
489
+ if (localPath.endsWith('[]')) {
490
+ const basePath = localPath.slice(0, -2); // Remove trailing []
491
+ if (basePath in fullToShortPathMap) {
492
+ const baseShortPath = fullToShortPathMap[basePath];
493
+ const shortPathWithBrackets = baseShortPath + '[]';
494
+ chain.push(`fullToShort (base): ${basePath} → ${baseShortPath}`);
495
+ const shortMatch = findInAttributesMap(
496
+ shortPathWithBrackets,
497
+ attributesMap,
498
+ );
499
+ if (shortMatch) {
500
+ chain.push(`short match with []: ${shortMatch}`);
501
+ return {
502
+ resolvedPath: localPath,
503
+ resolutionChain: chain,
504
+ isControllable: true,
505
+ };
506
+ }
507
+ }
508
+ }
509
+
510
+ // 4. Equivalent variable resolution
511
+ const localVarName = extractLocalVariableName(localPath);
512
+ const dataSourceBase = equivalentSignatureVariables[localVarName];
513
+
514
+ if (dataSourceBase) {
515
+ chain.push(`equivalent var: ${localVarName} → ${dataSourceBase}`);
516
+
517
+ // Build the full resolved path
518
+ let fullResolvedPath = resolveCompoundPath(
519
+ localPath,
520
+ localVarName,
521
+ dataSourceBase,
522
+ );
523
+ chain.push(`resolved: ${fullResolvedPath}`);
524
+
525
+ // Fix 33: Handle transitive resolution for array access patterns
526
+ // When dataSourceBase is like "segments[0]" or "segments[]", we need to resolve "segments" first
527
+ // Then combine with the array access: segments -> useParams()... + [0] or []
528
+ const arrayMatch = fullResolvedPath.match(
529
+ /^([a-zA-Z_$][a-zA-Z0-9_$]*)(\[\d*\].*)$/,
530
+ );
531
+ if (arrayMatch) {
532
+ const baseVarName = arrayMatch[1]; // e.g., "segments"
533
+ const accessSuffix = arrayMatch[2]; // e.g., "[0]" or "[0].property"
534
+ if (
535
+ baseVarName in equivalentSignatureVariables &&
536
+ baseVarName !== localVarName
537
+ ) {
538
+ const baseDataSource = equivalentSignatureVariables[baseVarName];
539
+ chain.push(`transitive resolution: ${baseVarName} → ${baseDataSource}`);
540
+ // Append the array access suffix to the resolved base
541
+ if (baseDataSource.endsWith('()')) {
542
+ fullResolvedPath =
543
+ baseDataSource + '.functionCallReturnValue' + accessSuffix;
544
+ } else if (baseDataSource.endsWith('.functionCallReturnValue')) {
545
+ fullResolvedPath = baseDataSource + accessSuffix;
546
+ } else {
547
+ fullResolvedPath = baseDataSource + accessSuffix;
548
+ }
549
+ chain.push(`transitively resolved: ${fullResolvedPath}`);
550
+ }
551
+ }
552
+
553
+ // Check if resolved path is controllable
554
+ const resolvedMatch = findInAttributesMap(fullResolvedPath, attributesMap);
555
+ if (resolvedMatch) {
556
+ chain.push(`resolved match: ${resolvedMatch}`);
557
+ return {
558
+ resolvedPath: fullResolvedPath,
559
+ resolutionChain: chain,
560
+ isControllable: true,
561
+ };
562
+ }
563
+
564
+ // Check via fullToShortMap
565
+ if (fullResolvedPath in fullToShortPathMap) {
566
+ const shortPath = fullToShortPathMap[fullResolvedPath];
567
+ chain.push(`resolved fullToShort: ${shortPath}`);
568
+ const shortMatch = findInAttributesMap(shortPath, attributesMap);
569
+ if (shortMatch) {
570
+ chain.push(`short resolved match: ${shortMatch}`);
571
+ return {
572
+ resolvedPath: fullResolvedPath,
573
+ resolutionChain: chain,
574
+ isControllable: true,
575
+ };
576
+ }
577
+ }
578
+
579
+ // Array.length resolution (after equivalent variable resolution)
580
+ // If the resolved path ends with .length and base is an array, the .length is controllable
581
+ // Fix 27: Pass fullToShortPathMap for child path resolution
582
+ const resolvedArrayBase = getArrayBaseIfLengthAccess(
583
+ fullResolvedPath,
584
+ attributesMap,
585
+ fullToShortPathMap,
586
+ );
587
+ if (resolvedArrayBase) {
588
+ chain.push(`array.length: base ${resolvedArrayBase} is array type`);
589
+ return {
590
+ resolvedPath: fullResolvedPath,
591
+ resolutionChain: chain,
592
+ isControllable: true,
593
+ };
594
+ }
595
+
596
+ // Fix 34: Handle derived paths from controllable bases
597
+ // Paths like "useParams().functionCallReturnValue.*.split('/').filter(Boolean)[0]"
598
+ // are derived from "useParams().functionCallReturnValue.*" via string methods.
599
+ // If the base path is controllable, the derived path should also be controllable.
600
+ const derivedBaseResult = findControllableBaseForDerivedPath(
601
+ fullResolvedPath,
602
+ attributesMap,
603
+ );
604
+ if (derivedBaseResult) {
605
+ chain.push(`derived from controllable base: ${derivedBaseResult}`);
606
+ return {
607
+ resolvedPath: fullResolvedPath,
608
+ resolutionChain: chain,
609
+ isControllable: true,
610
+ };
611
+ }
612
+
613
+ // Fix 35: Handle nested property access on controllable paths
614
+ // When child components access nested properties like "scenarios[].metadata.screenshotPaths[]"
615
+ // but parent only has "scenarios[]" in attributesMap, the nested path should still be
616
+ // controllable since nested properties of controllable objects are also controllable.
617
+ const prefixResult = findControllablePrefix(
618
+ fullResolvedPath,
619
+ attributesMap,
620
+ fullToShortPathMap,
621
+ );
622
+ if (prefixResult) {
623
+ chain.push(`nested property of controllable prefix`);
624
+ return {
625
+ resolvedPath: fullResolvedPath,
626
+ resolutionChain: chain,
627
+ isControllable: true,
628
+ };
629
+ }
630
+ }
631
+
632
+ // 5. Fix 35: Check for controllable prefix on the local path directly
633
+ // This handles cases where the localPath itself (before any resolution)
634
+ // has a controllable prefix in attributesMap
635
+ const localPrefixResult = findControllablePrefix(
636
+ localPath,
637
+ attributesMap,
638
+ fullToShortPathMap,
639
+ );
640
+ if (localPrefixResult) {
641
+ chain.push(`nested property of controllable prefix (direct)`);
642
+ return {
643
+ resolvedPath: localPath,
644
+ resolutionChain: chain,
645
+ isControllable: true,
646
+ };
647
+ }
648
+
649
+ // 5b. Fix 36: Check for derived paths on localPath directly
650
+ // When localPath contains derivation methods like .filter(cyScope()), check if
651
+ // the base path (before .filter()) is controllable
652
+ const localDerivedResult = findControllableBaseForDerivedPath(
653
+ localPath,
654
+ attributesMap,
655
+ );
656
+ if (localDerivedResult) {
657
+ chain.push(
658
+ `derived from controllable base (direct): ${localDerivedResult}`,
659
+ );
660
+ return {
661
+ resolvedPath: localPath,
662
+ resolutionChain: chain,
663
+ isControllable: true,
664
+ };
665
+ }
666
+
667
+ // 5c. Fix 36: Also check .length on derived paths directly
668
+ // E.g., scenarios.filter(cyScope()).length where scenarios[] is controllable
669
+ const localArrayBase = getArrayBaseIfLengthAccess(
670
+ localPath,
671
+ attributesMap,
672
+ fullToShortPathMap,
673
+ );
674
+ if (localArrayBase) {
675
+ chain.push(`array.length on derived path: base ${localArrayBase}`);
676
+ return {
677
+ resolvedPath: localPath,
678
+ resolutionChain: chain,
679
+ isControllable: true,
680
+ };
681
+ }
682
+
683
+ // 6. Not controllable
684
+ chain.push('not controllable');
685
+ return {
686
+ resolvedPath: null,
687
+ resolutionChain: chain,
688
+ isControllable: false,
689
+ };
690
+ }
@@ -218,7 +218,11 @@ export function joinParenthesesAndArrays(parts: string[]): string {
218
218
 
219
219
  const noIndexParts: string[] = [];
220
220
  for (const part of parts) {
221
- if (noIndexParts.length > 0 && part.startsWith('[')) {
221
+ // Append array indices [x] and function call arguments (x) directly without a dot
222
+ if (
223
+ noIndexParts.length > 0 &&
224
+ (part.startsWith('[') || part.startsWith('('))
225
+ ) {
222
226
  noIndexParts[noIndexParts.length - 1] += part;
223
227
  } else {
224
228
  noIndexParts.push(part);