@codeyam/codeyam-cli 0.1.0-staging.62d4615 → 0.1.0-staging.6c65c6a

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 (1011) hide show
  1. package/analyzer-template/.build-info.json +8 -8
  2. package/analyzer-template/log.txt +3 -3
  3. package/analyzer-template/package.json +24 -24
  4. package/analyzer-template/packages/ai/index.ts +1 -0
  5. package/analyzer-template/packages/ai/package.json +3 -3
  6. package/analyzer-template/packages/ai/src/lib/analyzeScope.ts +14 -0
  7. package/analyzer-template/packages/ai/src/lib/astScopes/astScopeAnalyzer.ts +34 -3
  8. package/analyzer-template/packages/ai/src/lib/astScopes/methodSemantics.ts +135 -0
  9. package/analyzer-template/packages/ai/src/lib/astScopes/nodeToSource.ts +19 -0
  10. package/analyzer-template/packages/ai/src/lib/astScopes/paths.ts +11 -4
  11. package/analyzer-template/packages/ai/src/lib/astScopes/processExpression.ts +101 -0
  12. package/analyzer-template/packages/ai/src/lib/astScopes/sharedPatterns.ts +28 -0
  13. package/analyzer-template/packages/ai/src/lib/astScopes/types.ts +6 -0
  14. package/analyzer-template/packages/ai/src/lib/completionCall.ts +114 -113
  15. package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +471 -22
  16. package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/ParentScopeManager.ts +10 -3
  17. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.ts +16 -6
  18. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/coercePrimitivesToArraysBySchema.ts +62 -0
  19. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.ts +70 -13
  20. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/stripNullableMarkers.ts +35 -0
  21. package/analyzer-template/packages/ai/src/lib/dataStructureChunking.ts +40 -13
  22. package/analyzer-template/packages/ai/src/lib/generateEntityScenarioData.ts +110 -7
  23. package/analyzer-template/packages/ai/src/lib/generateExecutionFlows.ts +101 -2
  24. package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionals.ts +359 -142
  25. package/analyzer-template/packages/ai/src/lib/mergeJsonTypeDefinitions.ts +5 -0
  26. package/analyzer-template/packages/ai/src/lib/promptGenerators/collapseNullableObjects.ts +118 -0
  27. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.ts +24 -4
  28. package/analyzer-template/packages/analyze/index.ts +4 -1
  29. package/analyzer-template/packages/analyze/src/lib/ProjectAnalyzer.ts +19 -7
  30. package/analyzer-template/packages/analyze/src/lib/asts/index.ts +7 -2
  31. package/analyzer-template/packages/analyze/src/lib/asts/nodes/getNodeType.ts +1 -0
  32. package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.ts +46 -2
  33. package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities.ts +14 -37
  34. package/analyzer-template/packages/analyze/src/lib/files/analyze/dependencyResolver.ts +0 -6
  35. package/analyzer-template/packages/analyze/src/lib/files/analyze/findOrCreateEntity.ts +22 -6
  36. package/analyzer-template/packages/analyze/src/lib/files/analyze/gatherEntityMap.ts +9 -12
  37. package/analyzer-template/packages/analyze/src/lib/files/analyze/trackEntityCircularDependencies.ts +21 -0
  38. package/analyzer-template/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.ts +82 -10
  39. package/analyzer-template/packages/analyze/src/lib/files/analyzeChange.ts +4 -0
  40. package/analyzer-template/packages/analyze/src/lib/files/analyzeInitial.ts +4 -0
  41. package/analyzer-template/packages/analyze/src/lib/files/analyzeNextRoute.ts +8 -3
  42. package/analyzer-template/packages/analyze/src/lib/files/scenarios/TransformationTracer.ts +65 -28
  43. package/analyzer-template/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.ts +50 -25
  44. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +322 -58
  45. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.ts +0 -98
  46. package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +1712 -1394
  47. package/analyzer-template/packages/aws/package.json +10 -10
  48. package/analyzer-template/packages/database/index.ts +1 -0
  49. package/analyzer-template/packages/database/package.json +4 -4
  50. package/analyzer-template/packages/database/src/lib/analysisBranchToDb.ts +1 -1
  51. package/analyzer-template/packages/database/src/lib/analysisToDb.ts +1 -1
  52. package/analyzer-template/packages/database/src/lib/branchToDb.ts +1 -1
  53. package/analyzer-template/packages/database/src/lib/commitBranchToDb.ts +1 -1
  54. package/analyzer-template/packages/database/src/lib/commitToDb.ts +1 -1
  55. package/analyzer-template/packages/database/src/lib/fileToDb.ts +1 -1
  56. package/analyzer-template/packages/database/src/lib/kysely/db.ts +14 -0
  57. package/analyzer-template/packages/database/src/lib/kysely/tables/debugReportsTable.ts +1 -1
  58. package/analyzer-template/packages/database/src/lib/kysely/tables/editorScenariosTable.ts +164 -0
  59. package/analyzer-template/packages/database/src/lib/kysely/tables/labsRequestsTable.ts +52 -0
  60. package/analyzer-template/packages/database/src/lib/loadAnalysis.ts +25 -15
  61. package/analyzer-template/packages/database/src/lib/loadCommits.ts +31 -20
  62. package/analyzer-template/packages/database/src/lib/loadEntities.ts +0 -6
  63. package/analyzer-template/packages/database/src/lib/loadEntity.ts +19 -8
  64. package/analyzer-template/packages/database/src/lib/loadReadyToBeCapturedAnalyses.ts +0 -5
  65. package/analyzer-template/packages/database/src/lib/projectToDb.ts +1 -1
  66. package/analyzer-template/packages/database/src/lib/saveFiles.ts +1 -1
  67. package/analyzer-template/packages/database/src/lib/scenarioToDb.ts +1 -1
  68. package/analyzer-template/packages/database/src/lib/updateCommitMetadata.ts +94 -143
  69. package/analyzer-template/packages/database/src/lib/updateFreshAnalysisStatus.ts +58 -42
  70. package/analyzer-template/packages/database/src/lib/updateFreshAnalysisStatusWithScenarios.ts +81 -65
  71. package/analyzer-template/packages/database/src/lib/userScenarioToDb.ts +1 -1
  72. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.ts +29 -1
  73. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.ts +33 -5
  74. package/analyzer-template/packages/github/dist/database/index.d.ts +1 -0
  75. package/analyzer-template/packages/github/dist/database/index.d.ts.map +1 -1
  76. package/analyzer-template/packages/github/dist/database/index.js +1 -0
  77. package/analyzer-template/packages/github/dist/database/index.js.map +1 -1
  78. package/analyzer-template/packages/github/dist/database/src/lib/analysisBranchToDb.js +1 -1
  79. package/analyzer-template/packages/github/dist/database/src/lib/analysisBranchToDb.js.map +1 -1
  80. package/analyzer-template/packages/github/dist/database/src/lib/analysisToDb.js +1 -1
  81. package/analyzer-template/packages/github/dist/database/src/lib/analysisToDb.js.map +1 -1
  82. package/analyzer-template/packages/github/dist/database/src/lib/branchToDb.js +1 -1
  83. package/analyzer-template/packages/github/dist/database/src/lib/branchToDb.js.map +1 -1
  84. package/analyzer-template/packages/github/dist/database/src/lib/commitBranchToDb.js +1 -1
  85. package/analyzer-template/packages/github/dist/database/src/lib/commitBranchToDb.js.map +1 -1
  86. package/analyzer-template/packages/github/dist/database/src/lib/commitToDb.js +1 -1
  87. package/analyzer-template/packages/github/dist/database/src/lib/commitToDb.js.map +1 -1
  88. package/analyzer-template/packages/github/dist/database/src/lib/fileToDb.js +1 -1
  89. package/analyzer-template/packages/github/dist/database/src/lib/fileToDb.js.map +1 -1
  90. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts +4 -0
  91. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts.map +1 -1
  92. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js +8 -0
  93. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js.map +1 -1
  94. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.d.ts +1 -1
  95. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.d.ts +29 -0
  96. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.d.ts.map +1 -0
  97. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.js +149 -0
  98. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -0
  99. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/labsRequestsTable.d.ts +23 -0
  100. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/labsRequestsTable.d.ts.map +1 -0
  101. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/labsRequestsTable.js +35 -0
  102. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/labsRequestsTable.js.map +1 -0
  103. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts +5 -0
  104. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts.map +1 -1
  105. package/analyzer-template/packages/github/dist/database/src/lib/loadAnalysis.d.ts.map +1 -1
  106. package/analyzer-template/packages/github/dist/database/src/lib/loadAnalysis.js +7 -1
  107. package/analyzer-template/packages/github/dist/database/src/lib/loadAnalysis.js.map +1 -1
  108. package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.d.ts.map +1 -1
  109. package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.js +23 -13
  110. package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.js.map +1 -1
  111. package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.d.ts.map +1 -1
  112. package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.js +0 -6
  113. package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.js.map +1 -1
  114. package/analyzer-template/packages/github/dist/database/src/lib/loadEntity.d.ts +4 -1
  115. package/analyzer-template/packages/github/dist/database/src/lib/loadEntity.d.ts.map +1 -1
  116. package/analyzer-template/packages/github/dist/database/src/lib/loadEntity.js +5 -5
  117. package/analyzer-template/packages/github/dist/database/src/lib/loadEntity.js.map +1 -1
  118. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.d.ts.map +1 -1
  119. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.js +1 -4
  120. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.js.map +1 -1
  121. package/analyzer-template/packages/github/dist/database/src/lib/projectToDb.js +1 -1
  122. package/analyzer-template/packages/github/dist/database/src/lib/projectToDb.js.map +1 -1
  123. package/analyzer-template/packages/github/dist/database/src/lib/saveFiles.js +1 -1
  124. package/analyzer-template/packages/github/dist/database/src/lib/saveFiles.js.map +1 -1
  125. package/analyzer-template/packages/github/dist/database/src/lib/scenarioToDb.js +1 -1
  126. package/analyzer-template/packages/github/dist/database/src/lib/scenarioToDb.js.map +1 -1
  127. package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.d.ts.map +1 -1
  128. package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js +76 -90
  129. package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js.map +1 -1
  130. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatus.d.ts.map +1 -1
  131. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatus.js +41 -30
  132. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatus.js.map +1 -1
  133. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatusWithScenarios.d.ts.map +1 -1
  134. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatusWithScenarios.js +68 -57
  135. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatusWithScenarios.js.map +1 -1
  136. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.d.ts.map +1 -1
  137. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js +29 -1
  138. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js.map +1 -1
  139. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.d.ts.map +1 -1
  140. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +33 -5
  141. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
  142. package/analyzer-template/packages/github/dist/types/src/enums/ProjectFramework.d.ts +2 -0
  143. package/analyzer-template/packages/github/dist/types/src/enums/ProjectFramework.d.ts.map +1 -1
  144. package/analyzer-template/packages/github/dist/types/src/enums/ProjectFramework.js +2 -0
  145. package/analyzer-template/packages/github/dist/types/src/enums/ProjectFramework.js.map +1 -1
  146. package/analyzer-template/packages/github/dist/types/src/types/ProjectMetadata.d.ts +5 -0
  147. package/analyzer-template/packages/github/dist/types/src/types/ProjectMetadata.d.ts.map +1 -1
  148. package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts +10 -0
  149. package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts.map +1 -1
  150. package/analyzer-template/packages/github/package.json +1 -1
  151. package/analyzer-template/packages/types/src/enums/ProjectFramework.ts +2 -0
  152. package/analyzer-template/packages/types/src/types/ProjectMetadata.ts +8 -1
  153. package/analyzer-template/packages/types/src/types/Scenario.ts +10 -0
  154. package/analyzer-template/packages/ui-components/package.json +1 -1
  155. package/analyzer-template/packages/utils/dist/types/src/enums/ProjectFramework.d.ts +2 -0
  156. package/analyzer-template/packages/utils/dist/types/src/enums/ProjectFramework.d.ts.map +1 -1
  157. package/analyzer-template/packages/utils/dist/types/src/enums/ProjectFramework.js +2 -0
  158. package/analyzer-template/packages/utils/dist/types/src/enums/ProjectFramework.js.map +1 -1
  159. package/analyzer-template/packages/utils/dist/types/src/types/ProjectMetadata.d.ts +5 -0
  160. package/analyzer-template/packages/utils/dist/types/src/types/ProjectMetadata.d.ts.map +1 -1
  161. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts +10 -0
  162. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts.map +1 -1
  163. package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.d.ts +3 -1
  164. package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.d.ts.map +1 -1
  165. package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.js +120 -4
  166. package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.js.map +1 -1
  167. package/analyzer-template/packages/utils/src/lib/fs/rsyncCopy.ts +148 -3
  168. package/analyzer-template/playwright/captureFromUrl.ts +89 -82
  169. package/analyzer-template/project/analyzeFileEntities.ts +26 -0
  170. package/analyzer-template/project/constructMockCode.ts +170 -50
  171. package/analyzer-template/project/orchestrateCapture.ts +4 -1
  172. package/analyzer-template/project/reconcileMockDataKeys.ts +19 -14
  173. package/analyzer-template/project/runMultiScenarioServer.ts +26 -3
  174. package/analyzer-template/project/start.ts +3 -0
  175. package/analyzer-template/project/startScenarioCapture.ts +9 -0
  176. package/analyzer-template/project/writeClientLogRoute.ts +125 -0
  177. package/analyzer-template/project/writeMockDataTsx.ts +31 -6
  178. package/analyzer-template/project/writeScenarioComponents.ts +110 -17
  179. package/analyzer-template/tsconfig.json +13 -1
  180. package/background/src/lib/local/createLocalAnalyzer.js +1 -1
  181. package/background/src/lib/local/createLocalAnalyzer.js.map +1 -1
  182. package/background/src/lib/virtualized/project/analyzeFileEntities.js +22 -0
  183. package/background/src/lib/virtualized/project/analyzeFileEntities.js.map +1 -1
  184. package/background/src/lib/virtualized/project/constructMockCode.js +145 -41
  185. package/background/src/lib/virtualized/project/constructMockCode.js.map +1 -1
  186. package/background/src/lib/virtualized/project/orchestrateCapture.js +4 -1
  187. package/background/src/lib/virtualized/project/orchestrateCapture.js.map +1 -1
  188. package/background/src/lib/virtualized/project/reconcileMockDataKeys.js +17 -11
  189. package/background/src/lib/virtualized/project/reconcileMockDataKeys.js.map +1 -1
  190. package/background/src/lib/virtualized/project/runMultiScenarioServer.js +23 -3
  191. package/background/src/lib/virtualized/project/runMultiScenarioServer.js.map +1 -1
  192. package/background/src/lib/virtualized/project/start.js +2 -0
  193. package/background/src/lib/virtualized/project/start.js.map +1 -1
  194. package/background/src/lib/virtualized/project/startScenarioCapture.js +5 -0
  195. package/background/src/lib/virtualized/project/startScenarioCapture.js.map +1 -1
  196. package/background/src/lib/virtualized/project/writeClientLogRoute.js +110 -0
  197. package/background/src/lib/virtualized/project/writeClientLogRoute.js.map +1 -0
  198. package/background/src/lib/virtualized/project/writeMockDataTsx.js +25 -6
  199. package/background/src/lib/virtualized/project/writeMockDataTsx.js.map +1 -1
  200. package/background/src/lib/virtualized/project/writeScenarioComponents.js +83 -12
  201. package/background/src/lib/virtualized/project/writeScenarioComponents.js.map +1 -1
  202. package/codeyam-cli/scripts/apply-setup.js +209 -12
  203. package/codeyam-cli/scripts/apply-setup.js.map +1 -1
  204. package/codeyam-cli/src/__tests__/memory-scripts/filter-session.test.js +196 -0
  205. package/codeyam-cli/src/__tests__/memory-scripts/filter-session.test.js.map +1 -0
  206. package/codeyam-cli/src/__tests__/memory-scripts/read-json-field.test.js +114 -0
  207. package/codeyam-cli/src/__tests__/memory-scripts/read-json-field.test.js.map +1 -0
  208. package/codeyam-cli/src/__tests__/memory-scripts/ripgrep-fallback.test.js +149 -0
  209. package/codeyam-cli/src/__tests__/memory-scripts/ripgrep-fallback.test.js.map +1 -0
  210. package/codeyam-cli/src/cli.js +57 -24
  211. package/codeyam-cli/src/cli.js.map +1 -1
  212. package/codeyam-cli/src/codeyam-cli.js +18 -2
  213. package/codeyam-cli/src/codeyam-cli.js.map +1 -1
  214. package/codeyam-cli/src/commands/__tests__/editor.analyzeImportsArgs.test.js +47 -0
  215. package/codeyam-cli/src/commands/__tests__/editor.analyzeImportsArgs.test.js.map +1 -0
  216. package/codeyam-cli/src/commands/__tests__/editor.auditNoAutoAnalysis.test.js +71 -0
  217. package/codeyam-cli/src/commands/__tests__/editor.auditNoAutoAnalysis.test.js.map +1 -0
  218. package/codeyam-cli/src/commands/__tests__/editor.designSystem.test.js +30 -0
  219. package/codeyam-cli/src/commands/__tests__/editor.designSystem.test.js.map +1 -0
  220. package/codeyam-cli/src/commands/__tests__/editor.isolateArgs.test.js +51 -0
  221. package/codeyam-cli/src/commands/__tests__/editor.isolateArgs.test.js.map +1 -0
  222. package/codeyam-cli/src/commands/__tests__/editor.statePersistence.test.js +55 -0
  223. package/codeyam-cli/src/commands/__tests__/editor.statePersistence.test.js.map +1 -0
  224. package/codeyam-cli/src/commands/__tests__/editor.stepDispatch.test.js +56 -0
  225. package/codeyam-cli/src/commands/__tests__/editor.stepDispatch.test.js.map +1 -0
  226. package/codeyam-cli/src/commands/__tests__/init.gitignore.test.js +137 -47
  227. package/codeyam-cli/src/commands/__tests__/init.gitignore.test.js.map +1 -1
  228. package/codeyam-cli/src/commands/analyze.js +21 -9
  229. package/codeyam-cli/src/commands/analyze.js.map +1 -1
  230. package/codeyam-cli/src/commands/baseline.js +2 -0
  231. package/codeyam-cli/src/commands/baseline.js.map +1 -1
  232. package/codeyam-cli/src/commands/debug.js +2 -0
  233. package/codeyam-cli/src/commands/debug.js.map +1 -1
  234. package/codeyam-cli/src/commands/default.js +44 -21
  235. package/codeyam-cli/src/commands/default.js.map +1 -1
  236. package/codeyam-cli/src/commands/editor.js +6313 -0
  237. package/codeyam-cli/src/commands/editor.js.map +1 -0
  238. package/codeyam-cli/src/commands/editorAnalyzeImportsArgs.js +23 -0
  239. package/codeyam-cli/src/commands/editorAnalyzeImportsArgs.js.map +1 -0
  240. package/codeyam-cli/src/commands/editorIsolateArgs.js +25 -0
  241. package/codeyam-cli/src/commands/editorIsolateArgs.js.map +1 -0
  242. package/codeyam-cli/src/commands/init.js +168 -292
  243. package/codeyam-cli/src/commands/init.js.map +1 -1
  244. package/codeyam-cli/src/commands/memory.js +95 -81
  245. package/codeyam-cli/src/commands/memory.js.map +1 -1
  246. package/codeyam-cli/src/commands/recapture.js +2 -0
  247. package/codeyam-cli/src/commands/recapture.js.map +1 -1
  248. package/codeyam-cli/src/commands/setup-sandbox.js +2 -0
  249. package/codeyam-cli/src/commands/setup-sandbox.js.map +1 -1
  250. package/codeyam-cli/src/commands/setup-simulations.js +284 -0
  251. package/codeyam-cli/src/commands/setup-simulations.js.map +1 -0
  252. package/codeyam-cli/src/commands/telemetry.js +37 -0
  253. package/codeyam-cli/src/commands/telemetry.js.map +1 -0
  254. package/codeyam-cli/src/commands/test-startup.js +2 -0
  255. package/codeyam-cli/src/commands/test-startup.js.map +1 -1
  256. package/codeyam-cli/src/commands/verify.js +14 -2
  257. package/codeyam-cli/src/commands/verify.js.map +1 -1
  258. package/codeyam-cli/src/data/designSystems.js +27 -0
  259. package/codeyam-cli/src/data/designSystems.js.map +1 -0
  260. package/codeyam-cli/src/data/techStacks.js +77 -0
  261. package/codeyam-cli/src/data/techStacks.js.map +1 -0
  262. package/codeyam-cli/src/utils/__tests__/analyzerFinalization.test.js +173 -0
  263. package/codeyam-cli/src/utils/__tests__/analyzerFinalization.test.js.map +1 -0
  264. package/codeyam-cli/src/utils/__tests__/backgroundServer.test.js +46 -0
  265. package/codeyam-cli/src/utils/__tests__/backgroundServer.test.js.map +1 -0
  266. package/codeyam-cli/src/utils/__tests__/devServerState.test.js +226 -0
  267. package/codeyam-cli/src/utils/__tests__/devServerState.test.js.map +1 -0
  268. package/codeyam-cli/src/utils/__tests__/editorApi.test.js +181 -0
  269. package/codeyam-cli/src/utils/__tests__/editorApi.test.js.map +1 -0
  270. package/codeyam-cli/src/utils/__tests__/editorAudit.test.js +4160 -0
  271. package/codeyam-cli/src/utils/__tests__/editorAudit.test.js.map +1 -0
  272. package/codeyam-cli/src/utils/__tests__/editorBroadcastViewport.test.js +76 -0
  273. package/codeyam-cli/src/utils/__tests__/editorBroadcastViewport.test.js.map +1 -0
  274. package/codeyam-cli/src/utils/__tests__/editorCapture.test.js +93 -0
  275. package/codeyam-cli/src/utils/__tests__/editorCapture.test.js.map +1 -0
  276. package/codeyam-cli/src/utils/__tests__/editorCaptureScenarioSeeding.test.js +137 -0
  277. package/codeyam-cli/src/utils/__tests__/editorCaptureScenarioSeeding.test.js.map +1 -0
  278. package/codeyam-cli/src/utils/__tests__/editorDeleteScenario.test.js +100 -0
  279. package/codeyam-cli/src/utils/__tests__/editorDeleteScenario.test.js.map +1 -0
  280. package/codeyam-cli/src/utils/__tests__/editorDevServer.test.js +304 -0
  281. package/codeyam-cli/src/utils/__tests__/editorDevServer.test.js.map +1 -0
  282. package/codeyam-cli/src/utils/__tests__/editorEntityChangeStatus.test.js +194 -0
  283. package/codeyam-cli/src/utils/__tests__/editorEntityChangeStatus.test.js.map +1 -0
  284. package/codeyam-cli/src/utils/__tests__/editorEntityHelpers.test.js +381 -0
  285. package/codeyam-cli/src/utils/__tests__/editorEntityHelpers.test.js.map +1 -0
  286. package/codeyam-cli/src/utils/__tests__/editorGuardMiddleware.test.js +67 -0
  287. package/codeyam-cli/src/utils/__tests__/editorGuardMiddleware.test.js.map +1 -0
  288. package/codeyam-cli/src/utils/__tests__/editorImageVerifier.test.js +294 -0
  289. package/codeyam-cli/src/utils/__tests__/editorImageVerifier.test.js.map +1 -0
  290. package/codeyam-cli/src/utils/__tests__/editorJournal.test.js +542 -0
  291. package/codeyam-cli/src/utils/__tests__/editorJournal.test.js.map +1 -0
  292. package/codeyam-cli/src/utils/__tests__/editorLoaderHelpers.test.js +594 -0
  293. package/codeyam-cli/src/utils/__tests__/editorLoaderHelpers.test.js.map +1 -0
  294. package/codeyam-cli/src/utils/__tests__/editorMigration.test.js +435 -0
  295. package/codeyam-cli/src/utils/__tests__/editorMigration.test.js.map +1 -0
  296. package/codeyam-cli/src/utils/__tests__/editorMockState.test.js +270 -0
  297. package/codeyam-cli/src/utils/__tests__/editorMockState.test.js.map +1 -0
  298. package/codeyam-cli/src/utils/__tests__/editorPreloadHelpers.test.js +217 -0
  299. package/codeyam-cli/src/utils/__tests__/editorPreloadHelpers.test.js.map +1 -0
  300. package/codeyam-cli/src/utils/__tests__/editorPreview.test.js +361 -0
  301. package/codeyam-cli/src/utils/__tests__/editorPreview.test.js.map +1 -0
  302. package/codeyam-cli/src/utils/__tests__/editorProxySession.test.js +250 -0
  303. package/codeyam-cli/src/utils/__tests__/editorProxySession.test.js.map +1 -0
  304. package/codeyam-cli/src/utils/__tests__/editorRoadmap.test.js +1108 -0
  305. package/codeyam-cli/src/utils/__tests__/editorRoadmap.test.js.map +1 -0
  306. package/codeyam-cli/src/utils/__tests__/editorScenarioLookup.test.js +139 -0
  307. package/codeyam-cli/src/utils/__tests__/editorScenarioLookup.test.js.map +1 -0
  308. package/codeyam-cli/src/utils/__tests__/editorScenarioSwitch.test.js +411 -0
  309. package/codeyam-cli/src/utils/__tests__/editorScenarioSwitch.test.js.map +1 -0
  310. package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js +1768 -0
  311. package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js.map +1 -0
  312. package/codeyam-cli/src/utils/__tests__/editorSeedAdapter.test.js +413 -0
  313. package/codeyam-cli/src/utils/__tests__/editorSeedAdapter.test.js.map +1 -0
  314. package/codeyam-cli/src/utils/__tests__/editorSeedAdapterPrismaValidation.test.js +143 -0
  315. package/codeyam-cli/src/utils/__tests__/editorSeedAdapterPrismaValidation.test.js.map +1 -0
  316. package/codeyam-cli/src/utils/__tests__/editorSessionFilter.test.js +66 -0
  317. package/codeyam-cli/src/utils/__tests__/editorSessionFilter.test.js.map +1 -0
  318. package/codeyam-cli/src/utils/__tests__/editorShouldRevalidate.test.js +53 -0
  319. package/codeyam-cli/src/utils/__tests__/editorShouldRevalidate.test.js.map +1 -0
  320. package/codeyam-cli/src/utils/__tests__/entityChangeStatus.test.js +2121 -0
  321. package/codeyam-cli/src/utils/__tests__/entityChangeStatus.test.js.map +1 -0
  322. package/codeyam-cli/src/utils/__tests__/envFile.test.js +125 -0
  323. package/codeyam-cli/src/utils/__tests__/envFile.test.js.map +1 -0
  324. package/codeyam-cli/src/utils/__tests__/git.editor.test.js +134 -0
  325. package/codeyam-cli/src/utils/__tests__/git.editor.test.js.map +1 -0
  326. package/codeyam-cli/src/utils/__tests__/glossaryAdd.test.js +177 -0
  327. package/codeyam-cli/src/utils/__tests__/glossaryAdd.test.js.map +1 -0
  328. package/codeyam-cli/src/utils/__tests__/handoffContext.test.js +500 -0
  329. package/codeyam-cli/src/utils/__tests__/handoffContext.test.js.map +1 -0
  330. package/codeyam-cli/src/utils/__tests__/journalCaptureStabilization.test.js +122 -0
  331. package/codeyam-cli/src/utils/__tests__/journalCaptureStabilization.test.js.map +1 -0
  332. package/codeyam-cli/src/utils/__tests__/manualEntityAnalysis.test.js +302 -0
  333. package/codeyam-cli/src/utils/__tests__/manualEntityAnalysis.test.js.map +1 -0
  334. package/codeyam-cli/src/utils/__tests__/npmVersionCheck.test.js +185 -0
  335. package/codeyam-cli/src/utils/__tests__/npmVersionCheck.test.js.map +1 -0
  336. package/codeyam-cli/src/utils/__tests__/parseRegisterArg.test.js +129 -0
  337. package/codeyam-cli/src/utils/__tests__/parseRegisterArg.test.js.map +1 -0
  338. package/codeyam-cli/src/utils/__tests__/pathIgnoring.test.js +9 -0
  339. package/codeyam-cli/src/utils/__tests__/pathIgnoring.test.js.map +1 -1
  340. package/codeyam-cli/src/utils/__tests__/project.test.js +65 -0
  341. package/codeyam-cli/src/utils/__tests__/project.test.js.map +1 -0
  342. package/codeyam-cli/src/utils/__tests__/registerScenarioResult.test.js +127 -0
  343. package/codeyam-cli/src/utils/__tests__/registerScenarioResult.test.js.map +1 -0
  344. package/codeyam-cli/src/utils/__tests__/routePatternMatching.test.js +118 -0
  345. package/codeyam-cli/src/utils/__tests__/routePatternMatching.test.js.map +1 -0
  346. package/codeyam-cli/src/utils/__tests__/scenarioCoverage.test.js +284 -0
  347. package/codeyam-cli/src/utils/__tests__/scenarioCoverage.test.js.map +1 -0
  348. package/codeyam-cli/src/utils/__tests__/scenarioMarkers.test.js +121 -0
  349. package/codeyam-cli/src/utils/__tests__/scenarioMarkers.test.js.map +1 -0
  350. package/codeyam-cli/src/utils/__tests__/scenariosManifest.test.js +672 -0
  351. package/codeyam-cli/src/utils/__tests__/scenariosManifest.test.js.map +1 -0
  352. package/codeyam-cli/src/utils/__tests__/screenshotHash.test.js +84 -0
  353. package/codeyam-cli/src/utils/__tests__/screenshotHash.test.js.map +1 -0
  354. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +175 -86
  355. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js.map +1 -1
  356. package/codeyam-cli/src/utils/__tests__/telemetry.test.js +159 -0
  357. package/codeyam-cli/src/utils/__tests__/telemetry.test.js.map +1 -0
  358. package/codeyam-cli/src/utils/__tests__/templateConsistency.test.js +51 -0
  359. package/codeyam-cli/src/utils/__tests__/templateConsistency.test.js.map +1 -0
  360. package/codeyam-cli/src/utils/__tests__/testRunner.test.js +216 -0
  361. package/codeyam-cli/src/utils/__tests__/testRunner.test.js.map +1 -0
  362. package/codeyam-cli/src/utils/__tests__/webappDetection.test.js +148 -0
  363. package/codeyam-cli/src/utils/__tests__/webappDetection.test.js.map +1 -0
  364. package/codeyam-cli/src/utils/analysisRunner.js +39 -8
  365. package/codeyam-cli/src/utils/analysisRunner.js.map +1 -1
  366. package/codeyam-cli/src/utils/analyzer.js +26 -0
  367. package/codeyam-cli/src/utils/analyzer.js.map +1 -1
  368. package/codeyam-cli/src/utils/analyzerFinalization.js +100 -0
  369. package/codeyam-cli/src/utils/analyzerFinalization.js.map +1 -0
  370. package/codeyam-cli/src/utils/backgroundServer.js +193 -34
  371. package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
  372. package/codeyam-cli/src/utils/buildFlags.js +4 -0
  373. package/codeyam-cli/src/utils/buildFlags.js.map +1 -0
  374. package/codeyam-cli/src/utils/database.js +37 -2
  375. package/codeyam-cli/src/utils/database.js.map +1 -1
  376. package/codeyam-cli/src/utils/designSystemShowcase.js +810 -0
  377. package/codeyam-cli/src/utils/designSystemShowcase.js.map +1 -0
  378. package/codeyam-cli/src/utils/devModeEvents.js +40 -0
  379. package/codeyam-cli/src/utils/devModeEvents.js.map +1 -0
  380. package/codeyam-cli/src/utils/devServerState.js +103 -0
  381. package/codeyam-cli/src/utils/devServerState.js.map +1 -0
  382. package/codeyam-cli/src/utils/editorApi.js +95 -0
  383. package/codeyam-cli/src/utils/editorApi.js.map +1 -0
  384. package/codeyam-cli/src/utils/editorAudit.js +849 -0
  385. package/codeyam-cli/src/utils/editorAudit.js.map +1 -0
  386. package/codeyam-cli/src/utils/editorBroadcastViewport.js +26 -0
  387. package/codeyam-cli/src/utils/editorBroadcastViewport.js.map +1 -0
  388. package/codeyam-cli/src/utils/editorCapture.js +102 -0
  389. package/codeyam-cli/src/utils/editorCapture.js.map +1 -0
  390. package/codeyam-cli/src/utils/editorDeleteScenario.js +67 -0
  391. package/codeyam-cli/src/utils/editorDeleteScenario.js.map +1 -0
  392. package/codeyam-cli/src/utils/editorDevServer.js +197 -0
  393. package/codeyam-cli/src/utils/editorDevServer.js.map +1 -0
  394. package/codeyam-cli/src/utils/editorEntityChangeStatus.js +50 -0
  395. package/codeyam-cli/src/utils/editorEntityChangeStatus.js.map +1 -0
  396. package/codeyam-cli/src/utils/editorEntityHelpers.js +144 -0
  397. package/codeyam-cli/src/utils/editorEntityHelpers.js.map +1 -0
  398. package/codeyam-cli/src/utils/editorGuard.js +36 -0
  399. package/codeyam-cli/src/utils/editorGuard.js.map +1 -0
  400. package/codeyam-cli/src/utils/editorImageVerifier.js +155 -0
  401. package/codeyam-cli/src/utils/editorImageVerifier.js.map +1 -0
  402. package/codeyam-cli/src/utils/editorJournal.js +225 -0
  403. package/codeyam-cli/src/utils/editorJournal.js.map +1 -0
  404. package/codeyam-cli/src/utils/editorLoaderHelpers.js +152 -0
  405. package/codeyam-cli/src/utils/editorLoaderHelpers.js.map +1 -0
  406. package/codeyam-cli/src/utils/editorMigration.js +224 -0
  407. package/codeyam-cli/src/utils/editorMigration.js.map +1 -0
  408. package/codeyam-cli/src/utils/editorMockState.js +248 -0
  409. package/codeyam-cli/src/utils/editorMockState.js.map +1 -0
  410. package/codeyam-cli/src/utils/editorPreloadHelpers.js +135 -0
  411. package/codeyam-cli/src/utils/editorPreloadHelpers.js.map +1 -0
  412. package/codeyam-cli/src/utils/editorPreview.js +139 -0
  413. package/codeyam-cli/src/utils/editorPreview.js.map +1 -0
  414. package/codeyam-cli/src/utils/editorRecapture.js +109 -0
  415. package/codeyam-cli/src/utils/editorRecapture.js.map +1 -0
  416. package/codeyam-cli/src/utils/editorRoadmap.js +574 -0
  417. package/codeyam-cli/src/utils/editorRoadmap.js.map +1 -0
  418. package/codeyam-cli/src/utils/editorScenarioSwitch.js +149 -0
  419. package/codeyam-cli/src/utils/editorScenarioSwitch.js.map +1 -0
  420. package/codeyam-cli/src/utils/editorScenarios.js +687 -0
  421. package/codeyam-cli/src/utils/editorScenarios.js.map +1 -0
  422. package/codeyam-cli/src/utils/editorSeedAdapter.js +475 -0
  423. package/codeyam-cli/src/utils/editorSeedAdapter.js.map +1 -0
  424. package/codeyam-cli/src/utils/editorShouldRevalidate.js +21 -0
  425. package/codeyam-cli/src/utils/editorShouldRevalidate.js.map +1 -0
  426. package/codeyam-cli/src/utils/entityChangeStatus.js +394 -0
  427. package/codeyam-cli/src/utils/entityChangeStatus.js.map +1 -0
  428. package/codeyam-cli/src/utils/entityChangeStatus.server.js +227 -0
  429. package/codeyam-cli/src/utils/entityChangeStatus.server.js.map +1 -0
  430. package/codeyam-cli/src/utils/envFile.js +90 -0
  431. package/codeyam-cli/src/utils/envFile.js.map +1 -0
  432. package/codeyam-cli/src/utils/fileMetadata.js +5 -0
  433. package/codeyam-cli/src/utils/fileMetadata.js.map +1 -1
  434. package/codeyam-cli/src/utils/fileWatcher.js +63 -9
  435. package/codeyam-cli/src/utils/fileWatcher.js.map +1 -1
  436. package/codeyam-cli/src/utils/generateReport.js +2 -2
  437. package/codeyam-cli/src/utils/git.js +103 -0
  438. package/codeyam-cli/src/utils/git.js.map +1 -1
  439. package/codeyam-cli/src/utils/glossaryAdd.js +74 -0
  440. package/codeyam-cli/src/utils/glossaryAdd.js.map +1 -0
  441. package/codeyam-cli/src/utils/handoffContext.js +257 -0
  442. package/codeyam-cli/src/utils/handoffContext.js.map +1 -0
  443. package/codeyam-cli/src/utils/install-skills.js +131 -65
  444. package/codeyam-cli/src/utils/install-skills.js.map +1 -1
  445. package/codeyam-cli/src/utils/interactiveSyncWatcher.js +126 -0
  446. package/codeyam-cli/src/utils/interactiveSyncWatcher.js.map +1 -0
  447. package/codeyam-cli/src/utils/labsAutoCheck.js +19 -0
  448. package/codeyam-cli/src/utils/labsAutoCheck.js.map +1 -0
  449. package/codeyam-cli/src/utils/manualEntityAnalysis.js +196 -0
  450. package/codeyam-cli/src/utils/manualEntityAnalysis.js.map +1 -0
  451. package/codeyam-cli/src/utils/npmVersionCheck.js +76 -0
  452. package/codeyam-cli/src/utils/npmVersionCheck.js.map +1 -0
  453. package/codeyam-cli/src/utils/parseRegisterArg.js +31 -0
  454. package/codeyam-cli/src/utils/parseRegisterArg.js.map +1 -0
  455. package/codeyam-cli/src/utils/pathIgnoring.js +19 -7
  456. package/codeyam-cli/src/utils/pathIgnoring.js.map +1 -1
  457. package/codeyam-cli/src/utils/progress.js +8 -1
  458. package/codeyam-cli/src/utils/progress.js.map +1 -1
  459. package/codeyam-cli/src/utils/project.js +15 -5
  460. package/codeyam-cli/src/utils/project.js.map +1 -1
  461. package/codeyam-cli/src/utils/queue/__tests__/heartbeat.test.js +11 -11
  462. package/codeyam-cli/src/utils/queue/__tests__/heartbeat.test.js.map +1 -1
  463. package/codeyam-cli/src/utils/queue/__tests__/job.interactiveStart.test.js +159 -0
  464. package/codeyam-cli/src/utils/queue/__tests__/job.interactiveStart.test.js.map +1 -0
  465. package/codeyam-cli/src/utils/queue/__tests__/manager.test.js +22 -0
  466. package/codeyam-cli/src/utils/queue/__tests__/manager.test.js.map +1 -1
  467. package/codeyam-cli/src/utils/queue/heartbeat.js +13 -5
  468. package/codeyam-cli/src/utils/queue/heartbeat.js.map +1 -1
  469. package/codeyam-cli/src/utils/queue/job.js +105 -7
  470. package/codeyam-cli/src/utils/queue/job.js.map +1 -1
  471. package/codeyam-cli/src/utils/queue/manager.js +7 -6
  472. package/codeyam-cli/src/utils/queue/manager.js.map +1 -1
  473. package/codeyam-cli/src/utils/registerScenarioResult.js +52 -0
  474. package/codeyam-cli/src/utils/registerScenarioResult.js.map +1 -0
  475. package/codeyam-cli/src/utils/requireSimulations.js +10 -0
  476. package/codeyam-cli/src/utils/requireSimulations.js.map +1 -0
  477. package/codeyam-cli/src/utils/routePatternMatching.js +129 -0
  478. package/codeyam-cli/src/utils/routePatternMatching.js.map +1 -0
  479. package/codeyam-cli/src/utils/ruleReflection/__tests__/contextBuilder.test.js +109 -8
  480. package/codeyam-cli/src/utils/ruleReflection/__tests__/contextBuilder.test.js.map +1 -1
  481. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/assertRules.js +1 -1
  482. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/assertRules.js.map +1 -1
  483. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/setupTempProject.js +0 -1
  484. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/setupTempProject.js.map +1 -1
  485. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/ruleReflectionE2E.test.js +97 -6
  486. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/ruleReflectionE2E.test.js.map +1 -1
  487. package/codeyam-cli/src/utils/ruleReflection/__tests__/promptBuilder.test.js +37 -7
  488. package/codeyam-cli/src/utils/ruleReflection/__tests__/promptBuilder.test.js.map +1 -1
  489. package/codeyam-cli/src/utils/ruleReflection/contextBuilder.js +23 -3
  490. package/codeyam-cli/src/utils/ruleReflection/contextBuilder.js.map +1 -1
  491. package/codeyam-cli/src/utils/ruleReflection/index.js +2 -2
  492. package/codeyam-cli/src/utils/ruleReflection/index.js.map +1 -1
  493. package/codeyam-cli/src/utils/ruleReflection/promptBuilder.js +11 -0
  494. package/codeyam-cli/src/utils/ruleReflection/promptBuilder.js.map +1 -1
  495. package/codeyam-cli/src/utils/rules/__tests__/parser.test.js +83 -0
  496. package/codeyam-cli/src/utils/rules/__tests__/parser.test.js.map +1 -0
  497. package/codeyam-cli/src/utils/rules/__tests__/pathMatcher.test.js +118 -0
  498. package/codeyam-cli/src/utils/rules/__tests__/pathMatcher.test.js.map +1 -0
  499. package/codeyam-cli/src/utils/rules/__tests__/rulePlacement.test.js +72 -0
  500. package/codeyam-cli/src/utils/rules/__tests__/rulePlacement.test.js.map +1 -0
  501. package/codeyam-cli/src/utils/rules/__tests__/ruleState.test.js +23 -23
  502. package/codeyam-cli/src/utils/rules/__tests__/ruleState.test.js.map +1 -1
  503. package/codeyam-cli/src/utils/rules/__tests__/sourceFiles.test.js +76 -0
  504. package/codeyam-cli/src/utils/rules/__tests__/sourceFiles.test.js.map +1 -0
  505. package/codeyam-cli/src/utils/rules/index.js +1 -0
  506. package/codeyam-cli/src/utils/rules/index.js.map +1 -1
  507. package/codeyam-cli/src/utils/rules/parser.js +19 -4
  508. package/codeyam-cli/src/utils/rules/parser.js.map +1 -1
  509. package/codeyam-cli/src/utils/rules/pathMatcher.js +34 -3
  510. package/codeyam-cli/src/utils/rules/pathMatcher.js.map +1 -1
  511. package/codeyam-cli/src/utils/rules/rulePlacement.js +65 -0
  512. package/codeyam-cli/src/utils/rules/rulePlacement.js.map +1 -0
  513. package/codeyam-cli/src/utils/rules/ruleState.js +10 -10
  514. package/codeyam-cli/src/utils/rules/ruleState.js.map +1 -1
  515. package/codeyam-cli/src/utils/rules/sourceFiles.js +43 -0
  516. package/codeyam-cli/src/utils/rules/sourceFiles.js.map +1 -0
  517. package/codeyam-cli/src/utils/rules/staleness.js +6 -6
  518. package/codeyam-cli/src/utils/rules/staleness.js.map +1 -1
  519. package/codeyam-cli/src/utils/scenarioCoverage.js +77 -0
  520. package/codeyam-cli/src/utils/scenarioCoverage.js.map +1 -0
  521. package/codeyam-cli/src/utils/scenarioMarkers.js +134 -0
  522. package/codeyam-cli/src/utils/scenarioMarkers.js.map +1 -0
  523. package/codeyam-cli/src/utils/scenariosManifest.js +313 -0
  524. package/codeyam-cli/src/utils/scenariosManifest.js.map +1 -0
  525. package/codeyam-cli/src/utils/screenshotHash.js +26 -0
  526. package/codeyam-cli/src/utils/screenshotHash.js.map +1 -0
  527. package/codeyam-cli/src/utils/serverState.js +94 -12
  528. package/codeyam-cli/src/utils/serverState.js.map +1 -1
  529. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +96 -47
  530. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js.map +1 -1
  531. package/codeyam-cli/src/utils/simulationGateMiddleware.js +175 -0
  532. package/codeyam-cli/src/utils/simulationGateMiddleware.js.map +1 -0
  533. package/codeyam-cli/src/utils/slugUtils.js +25 -0
  534. package/codeyam-cli/src/utils/slugUtils.js.map +1 -0
  535. package/codeyam-cli/src/utils/syncMocksMiddleware.js +7 -26
  536. package/codeyam-cli/src/utils/syncMocksMiddleware.js.map +1 -1
  537. package/codeyam-cli/src/utils/techStackConfig.js +38 -0
  538. package/codeyam-cli/src/utils/techStackConfig.js.map +1 -0
  539. package/codeyam-cli/src/utils/techStackConfig.test.js +85 -0
  540. package/codeyam-cli/src/utils/techStackConfig.test.js.map +1 -0
  541. package/codeyam-cli/src/utils/telemetry.js +106 -0
  542. package/codeyam-cli/src/utils/telemetry.js.map +1 -0
  543. package/codeyam-cli/src/utils/telemetryMiddleware.js +22 -0
  544. package/codeyam-cli/src/utils/telemetryMiddleware.js.map +1 -0
  545. package/codeyam-cli/src/utils/testResultCache.js +53 -0
  546. package/codeyam-cli/src/utils/testResultCache.js.map +1 -0
  547. package/codeyam-cli/src/utils/testResultCache.server.js +81 -0
  548. package/codeyam-cli/src/utils/testResultCache.server.js.map +1 -0
  549. package/codeyam-cli/src/utils/testResultCache.server.test.js +187 -0
  550. package/codeyam-cli/src/utils/testResultCache.server.test.js.map +1 -0
  551. package/codeyam-cli/src/utils/testResultCache.test.js +230 -0
  552. package/codeyam-cli/src/utils/testResultCache.test.js.map +1 -0
  553. package/codeyam-cli/src/utils/testRunner.js +350 -0
  554. package/codeyam-cli/src/utils/testRunner.js.map +1 -0
  555. package/codeyam-cli/src/utils/transcriptPruning.js +67 -0
  556. package/codeyam-cli/src/utils/transcriptPruning.js.map +1 -0
  557. package/codeyam-cli/src/utils/versionInfo.js +46 -0
  558. package/codeyam-cli/src/utils/versionInfo.js.map +1 -1
  559. package/codeyam-cli/src/utils/webappDetection.js +38 -3
  560. package/codeyam-cli/src/utils/webappDetection.js.map +1 -1
  561. package/codeyam-cli/src/webserver/__tests__/api.interactive-switch-scenario.test.js +99 -0
  562. package/codeyam-cli/src/webserver/__tests__/api.interactive-switch-scenario.test.js.map +1 -0
  563. package/codeyam-cli/src/webserver/__tests__/buildPtyEnv.test.js +153 -0
  564. package/codeyam-cli/src/webserver/__tests__/buildPtyEnv.test.js.map +1 -0
  565. package/codeyam-cli/src/webserver/__tests__/clientErrors.test.js +107 -0
  566. package/codeyam-cli/src/webserver/__tests__/clientErrors.test.js.map +1 -0
  567. package/codeyam-cli/src/webserver/__tests__/dependency-smoke.test.js +66 -0
  568. package/codeyam-cli/src/webserver/__tests__/dependency-smoke.test.js.map +1 -0
  569. package/codeyam-cli/src/webserver/__tests__/editorProxy.test.js +1000 -0
  570. package/codeyam-cli/src/webserver/__tests__/editorProxy.test.js.map +1 -0
  571. package/codeyam-cli/src/webserver/__tests__/idleDetector.test.js +315 -0
  572. package/codeyam-cli/src/webserver/__tests__/idleDetector.test.js.map +1 -0
  573. package/codeyam-cli/src/webserver/__tests__/stripClaudeCommand.test.js +135 -0
  574. package/codeyam-cli/src/webserver/__tests__/stripClaudeCommand.test.js.map +1 -0
  575. package/codeyam-cli/src/webserver/app/lib/clientErrors.js +86 -0
  576. package/codeyam-cli/src/webserver/app/lib/clientErrors.js.map +1 -0
  577. package/codeyam-cli/src/webserver/app/lib/database.js +55 -30
  578. package/codeyam-cli/src/webserver/app/lib/database.js.map +1 -1
  579. package/codeyam-cli/src/webserver/app/lib/dbNotifier.js.map +1 -1
  580. package/codeyam-cli/src/webserver/app/lib/git.js +397 -0
  581. package/codeyam-cli/src/webserver/app/lib/git.js.map +1 -0
  582. package/codeyam-cli/src/webserver/app/routes/api.interactive-switch-scenario.js +34 -0
  583. package/codeyam-cli/src/webserver/app/routes/api.interactive-switch-scenario.js.map +1 -0
  584. package/codeyam-cli/src/webserver/app/types/editor.js +8 -0
  585. package/codeyam-cli/src/webserver/app/types/editor.js.map +1 -0
  586. package/codeyam-cli/src/webserver/backgroundServer.js +186 -37
  587. package/codeyam-cli/src/webserver/backgroundServer.js.map +1 -1
  588. package/codeyam-cli/src/webserver/bootstrap.js +11 -0
  589. package/codeyam-cli/src/webserver/bootstrap.js.map +1 -1
  590. package/codeyam-cli/src/webserver/build/client/assets/CopyButton-DTBZZfSk.js +1 -0
  591. package/codeyam-cli/src/webserver/build/client/assets/{EntityItem-B86KKU7e.js → EntityItem-BxclONWq.js} +5 -5
  592. package/codeyam-cli/src/webserver/build/client/assets/EntityTypeBadge-CQgyEGV-.js +1 -0
  593. package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeIcon-BqY8gDAW.js → EntityTypeIcon-BsnEOJZ_.js} +9 -9
  594. package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-ByaELMbv.js +1 -0
  595. package/codeyam-cli/src/webserver/build/client/assets/InteractivePreview-6WjVfhxX.js +25 -0
  596. package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-ChX-Hp7W.js +3 -0
  597. package/codeyam-cli/src/webserver/build/client/assets/{LoadingDots-Bs7Nn1Jr.js → LoadingDots-By5zI316.js} +1 -1
  598. package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-Bm3PmcCz.js → LogViewer-C-9zQdXg.js} +3 -3
  599. package/codeyam-cli/src/webserver/build/client/assets/MiniClaudeChat-Bs2_Oua4.js +36 -0
  600. package/codeyam-cli/src/webserver/build/client/assets/{ReportIssueModal-C6PKeMYR.js → ReportIssueModal-DQsceHVv.js} +4 -4
  601. package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-DThcm_9M.js +1 -0
  602. package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-BNLaXBHR.js → ScenarioViewer-Cl4oOA3A.js} +3 -3
  603. package/codeyam-cli/src/webserver/build/client/assets/Spinner-CIil5-gb.js +34 -0
  604. package/codeyam-cli/src/webserver/build/client/assets/TruncatedFilePath-CK7-NaPZ.js +1 -0
  605. package/codeyam-cli/src/webserver/build/client/assets/ViewportInspectBar-BqkA9zyZ.js +1 -0
  606. package/codeyam-cli/src/webserver/build/client/assets/{_index-B3TDXxnk.js → _index-DnOgyseQ.js} +4 -4
  607. package/codeyam-cli/src/webserver/build/client/assets/{activity.(_tab)-DD1r_QU0.js → activity.(_tab)-DqM9hbNE.js} +10 -10
  608. package/codeyam-cli/src/webserver/build/client/assets/addon-canvas-DpzMmAy5.js +1 -0
  609. package/codeyam-cli/src/webserver/build/client/assets/addon-fit-YJmn1quW.js +12 -0
  610. package/codeyam-cli/src/webserver/build/client/assets/addon-web-links-C58dYPwR.js +1 -0
  611. package/codeyam-cli/src/webserver/build/client/assets/addon-webgl-DI8QOUvO.js +58 -0
  612. package/codeyam-cli/src/webserver/build/client/assets/agent-transcripts-B8NCeOrm.js +22 -0
  613. package/codeyam-cli/src/webserver/build/client/assets/api.dev-mode-events-l0sNRNKZ.js +1 -0
  614. package/codeyam-cli/src/webserver/build/client/assets/api.editor-audit-l0sNRNKZ.js +1 -0
  615. package/codeyam-cli/src/webserver/build/client/assets/api.editor-capture-scenario-l0sNRNKZ.js +1 -0
  616. package/codeyam-cli/src/webserver/build/client/assets/api.editor-client-errors-l0sNRNKZ.js +1 -0
  617. package/codeyam-cli/src/webserver/build/client/assets/api.editor-commit-l0sNRNKZ.js +1 -0
  618. package/codeyam-cli/src/webserver/build/client/assets/api.editor-database-verify-l0sNRNKZ.js +1 -0
  619. package/codeyam-cli/src/webserver/build/client/assets/api.editor-dev-server-l0sNRNKZ.js +1 -0
  620. package/codeyam-cli/src/webserver/build/client/assets/api.editor-entity-status-l0sNRNKZ.js +1 -0
  621. package/codeyam-cli/src/webserver/build/client/assets/api.editor-file-diff-l0sNRNKZ.js +1 -0
  622. package/codeyam-cli/src/webserver/build/client/assets/api.editor-file-l0sNRNKZ.js +1 -0
  623. package/codeyam-cli/src/webserver/build/client/assets/api.editor-github-verify-l0sNRNKZ.js +1 -0
  624. package/codeyam-cli/src/webserver/build/client/assets/api.editor-handoff-l0sNRNKZ.js +1 -0
  625. package/codeyam-cli/src/webserver/build/client/assets/api.editor-hosting-verify-l0sNRNKZ.js +1 -0
  626. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-entry-l0sNRNKZ.js +1 -0
  627. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-image._-l0sNRNKZ.js +1 -0
  628. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-l0sNRNKZ.js +1 -0
  629. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-screenshot-l0sNRNKZ.js +1 -0
  630. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-update-l0sNRNKZ.js +1 -0
  631. package/codeyam-cli/src/webserver/build/client/assets/api.editor-load-commit-l0sNRNKZ.js +1 -0
  632. package/codeyam-cli/src/webserver/build/client/assets/api.editor-project-info-l0sNRNKZ.js +1 -0
  633. package/codeyam-cli/src/webserver/build/client/assets/api.editor-recapture-stale-l0sNRNKZ.js +1 -0
  634. package/codeyam-cli/src/webserver/build/client/assets/api.editor-refresh-l0sNRNKZ.js +1 -0
  635. package/codeyam-cli/src/webserver/build/client/assets/api.editor-register-scenario-l0sNRNKZ.js +1 -0
  636. package/codeyam-cli/src/webserver/build/client/assets/api.editor-rename-scenario-l0sNRNKZ.js +1 -0
  637. package/codeyam-cli/src/webserver/build/client/assets/api.editor-roadmap-l0sNRNKZ.js +1 -0
  638. package/codeyam-cli/src/webserver/build/client/assets/api.editor-save-scenario-data-l0sNRNKZ.js +1 -0
  639. package/codeyam-cli/src/webserver/build/client/assets/api.editor-save-seed-state-l0sNRNKZ.js +1 -0
  640. package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-coverage-l0sNRNKZ.js +1 -0
  641. package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-data-l0sNRNKZ.js +1 -0
  642. package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-image._-l0sNRNKZ.js +1 -0
  643. package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-prompt-l0sNRNKZ.js +1 -0
  644. package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenarios-l0sNRNKZ.js +1 -0
  645. package/codeyam-cli/src/webserver/build/client/assets/api.editor-schema-l0sNRNKZ.js +1 -0
  646. package/codeyam-cli/src/webserver/build/client/assets/api.editor-session-l0sNRNKZ.js +1 -0
  647. package/codeyam-cli/src/webserver/build/client/assets/api.editor-switch-scenario-l0sNRNKZ.js +1 -0
  648. package/codeyam-cli/src/webserver/build/client/assets/api.editor-test-results-l0sNRNKZ.js +1 -0
  649. package/codeyam-cli/src/webserver/build/client/assets/api.editor-verify-routes-l0sNRNKZ.js +1 -0
  650. package/codeyam-cli/src/webserver/build/client/assets/api.interactive-switch-scenario-l0sNRNKZ.js +1 -0
  651. package/codeyam-cli/src/webserver/build/client/assets/api.labs-unlock-l0sNRNKZ.js +1 -0
  652. package/codeyam-cli/src/webserver/build/client/assets/api.rule-path-l0sNRNKZ.js +1 -0
  653. package/codeyam-cli/src/webserver/build/client/assets/{book-open-PttOB2SF.js → book-open-BFSIqZgO.js} +2 -2
  654. package/codeyam-cli/src/webserver/build/client/assets/{chevron-down-TJp6ofnp.js → chevron-down-B9fDzFVh.js} +2 -2
  655. package/codeyam-cli/src/webserver/build/client/assets/chunk-UVKPFVEO-Bmq2apuh.js +43 -0
  656. package/codeyam-cli/src/webserver/build/client/assets/{circle-check-CXhHQYrI.js → circle-check-DLPObLUx.js} +2 -2
  657. package/codeyam-cli/src/webserver/build/client/assets/{copy-6y9ALfGT.js → copy-DXEmO0TD.js} +3 -3
  658. package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-BwyFiRot.js +41 -0
  659. package/codeyam-cli/src/webserver/build/client/assets/cy-logo-cli-Coe5NhbS.js +1 -0
  660. package/codeyam-cli/src/webserver/build/client/assets/{cy-logo-cli-CCKUIm0S.svg → cy-logo-cli-DoA97ML3.svg} +2 -2
  661. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-iRhRIFlp.js +1 -0
  662. package/codeyam-cli/src/webserver/build/client/assets/editor._tab-BZPBzV73.js +1 -0
  663. package/codeyam-cli/src/webserver/build/client/assets/editor.entity.(_sha)-DhtVC4aI.js +161 -0
  664. package/codeyam-cli/src/webserver/build/client/assets/editorPreview-C6fEYHrh.js +41 -0
  665. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-n38keI1k.js → entity._sha._-pc-vc6wO.js} +14 -13
  666. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.dev-C8AyYgYT.js +6 -0
  667. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-DziaVQX1.js +6 -0
  668. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-BTcpgIpC.js +6 -0
  669. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.edit._scenarioId-38yPijoD.js → entity._sha_.edit._scenarioId-D_O_ajfZ.js} +2 -2
  670. package/codeyam-cli/src/webserver/build/client/assets/{entry.client-BSHEfydn.js → entry.client-j1Vi0bco.js} +6 -6
  671. package/codeyam-cli/src/webserver/build/client/assets/fileTableUtils-Daa96Fr1.js +1 -0
  672. package/codeyam-cli/src/webserver/build/client/assets/files-kuny2Q_s.js +1 -0
  673. package/codeyam-cli/src/webserver/build/client/assets/git-DgCZPMie.js +1 -0
  674. package/codeyam-cli/src/webserver/build/client/assets/globals-L-aUIeux.css +1 -0
  675. package/codeyam-cli/src/webserver/build/client/assets/{index-CcsFv748.js → index-BliGSSpl.js} +1 -1
  676. package/codeyam-cli/src/webserver/build/client/assets/index-SqjQKTdH.js +15 -0
  677. package/codeyam-cli/src/webserver/build/client/assets/{index-ChN9-fAY.js → index-vyrZD2g4.js} +1 -1
  678. package/codeyam-cli/src/webserver/build/client/assets/jsx-runtime-D_zvdyIk.js +9 -0
  679. package/codeyam-cli/src/webserver/build/client/assets/labs-c3yLxSEp.js +1 -0
  680. package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-CTqLEAGU.js → loader-circle-D-q28GLF.js} +2 -2
  681. package/codeyam-cli/src/webserver/build/client/assets/manifest-79d0d81a.js +1 -0
  682. package/codeyam-cli/src/webserver/build/client/assets/memory-CEWIUC4t.js +101 -0
  683. package/codeyam-cli/src/webserver/build/client/assets/{pause-D6vreykR.js → pause-BP6fitdh.js} +3 -3
  684. package/codeyam-cli/src/webserver/build/client/assets/root-L2V0jea7.js +80 -0
  685. package/codeyam-cli/src/webserver/build/client/assets/{search-B8VUL8nl.js → search-BooqacKS.js} +2 -2
  686. package/codeyam-cli/src/webserver/build/client/assets/settings-BM0nbryO.js +1 -0
  687. package/codeyam-cli/src/webserver/build/client/assets/simulations-ovy6FjRY.js +1 -0
  688. package/codeyam-cli/src/webserver/build/client/assets/{terminal-BrCP7uQo.js → terminal-DHemCJIs.js} +3 -3
  689. package/codeyam-cli/src/webserver/build/client/assets/{triangle-alert-BZz2NjYa.js → triangle-alert-D87ekDl8.js} +2 -2
  690. package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-Dk0Tciqg.js +1 -0
  691. package/codeyam-cli/src/webserver/build/client/assets/useLastLogLine-C8QvIe05.js +2 -0
  692. package/codeyam-cli/src/webserver/build/client/assets/useReportContext-jkCytuYz.js +1 -0
  693. package/codeyam-cli/src/webserver/build/client/assets/useToast-BgqkixU9.js +1 -0
  694. package/codeyam-cli/src/webserver/build/client/assets/xterm-BqvuqXEL.js +27 -0
  695. package/codeyam-cli/src/webserver/build/client/sound-test.html +98 -0
  696. package/codeyam-cli/src/webserver/build/server/assets/analysisRunner-QgInFGdU.js +16 -0
  697. package/codeyam-cli/src/webserver/build/server/assets/index-zblh9auj.js +1 -0
  698. package/codeyam-cli/src/webserver/build/server/assets/init-DaE0CBjk.js +14 -0
  699. package/codeyam-cli/src/webserver/build/server/assets/progress-CHTtrxFG.js +1 -0
  700. package/codeyam-cli/src/webserver/build/server/assets/server-build-CNvgz1cC.js +853 -0
  701. package/codeyam-cli/src/webserver/build/server/index.js +1 -1
  702. package/codeyam-cli/src/webserver/build-info.json +5 -5
  703. package/codeyam-cli/src/webserver/devServer.js +39 -5
  704. package/codeyam-cli/src/webserver/devServer.js.map +1 -1
  705. package/codeyam-cli/src/webserver/editorProxy.js +1263 -0
  706. package/codeyam-cli/src/webserver/editorProxy.js.map +1 -0
  707. package/codeyam-cli/src/webserver/idleDetector.js +130 -0
  708. package/codeyam-cli/src/webserver/idleDetector.js.map +1 -0
  709. package/codeyam-cli/src/webserver/mockStateEvents.js +28 -0
  710. package/codeyam-cli/src/webserver/mockStateEvents.js.map +1 -0
  711. package/codeyam-cli/src/webserver/public/sound-test.html +98 -0
  712. package/codeyam-cli/src/webserver/scripts/codeyam-preload.mjs +414 -0
  713. package/codeyam-cli/src/webserver/scripts/journalCapture.ts +283 -0
  714. package/codeyam-cli/src/webserver/server.js +446 -1
  715. package/codeyam-cli/src/webserver/server.js.map +1 -1
  716. package/codeyam-cli/src/webserver/terminalServer.js +1043 -0
  717. package/codeyam-cli/src/webserver/terminalServer.js.map +1 -0
  718. package/codeyam-cli/templates/__tests__/editor-step-hook.prompt-capture.test.ts +118 -0
  719. package/codeyam-cli/templates/chrome-extension-react/EXTENSION_SETUP.md +75 -0
  720. package/codeyam-cli/templates/chrome-extension-react/README.md +46 -0
  721. package/codeyam-cli/templates/chrome-extension-react/gitignore +15 -0
  722. package/codeyam-cli/templates/chrome-extension-react/index.html +12 -0
  723. package/codeyam-cli/templates/chrome-extension-react/package.json +27 -0
  724. package/codeyam-cli/templates/chrome-extension-react/popup.html +12 -0
  725. package/codeyam-cli/templates/chrome-extension-react/public/manifest.json +15 -0
  726. package/codeyam-cli/templates/chrome-extension-react/src/background/service-worker.ts +7 -0
  727. package/codeyam-cli/templates/chrome-extension-react/src/globals.css +6 -0
  728. package/codeyam-cli/templates/chrome-extension-react/src/lib/storage.ts +37 -0
  729. package/codeyam-cli/templates/chrome-extension-react/src/popup/App.tsx +12 -0
  730. package/codeyam-cli/templates/chrome-extension-react/src/popup/main.tsx +10 -0
  731. package/codeyam-cli/templates/chrome-extension-react/tsconfig.json +24 -0
  732. package/codeyam-cli/templates/chrome-extension-react/vite.config.ts +41 -0
  733. package/codeyam-cli/templates/codeyam-editor-claude.md +149 -0
  734. package/codeyam-cli/templates/codeyam-editor-codex.md +61 -0
  735. package/codeyam-cli/templates/codeyam-editor-gemini.md +59 -0
  736. package/codeyam-cli/templates/codeyam-editor-reference.md +216 -0
  737. package/codeyam-cli/templates/codeyam-memory-hook.sh +14 -14
  738. package/codeyam-cli/templates/commands/codeyam-diagnose.md +481 -0
  739. package/codeyam-cli/templates/design-systems/clean-dashboard-design-system.md +255 -0
  740. package/codeyam-cli/templates/design-systems/editorial-design-system.md +267 -0
  741. package/codeyam-cli/templates/design-systems/mono-brutalist-design-system.md +256 -0
  742. package/codeyam-cli/templates/design-systems/neo-brutalist-design-system.md +294 -0
  743. package/codeyam-cli/templates/editor-step-hook.py +368 -0
  744. package/codeyam-cli/templates/expo-react-native/MOBILE_SETUP.md +288 -0
  745. package/codeyam-cli/templates/expo-react-native/README.md +41 -0
  746. package/codeyam-cli/templates/expo-react-native/__tests__/.gitkeep +0 -0
  747. package/codeyam-cli/templates/expo-react-native/app/_layout.tsx +15 -0
  748. package/codeyam-cli/templates/expo-react-native/app/index.tsx +36 -0
  749. package/codeyam-cli/templates/expo-react-native/app.json +29 -0
  750. package/codeyam-cli/templates/expo-react-native/babel.config.js +10 -0
  751. package/codeyam-cli/templates/expo-react-native/gitignore +14 -0
  752. package/codeyam-cli/templates/expo-react-native/global.css +10 -0
  753. package/codeyam-cli/templates/expo-react-native/lib/storage.ts +32 -0
  754. package/codeyam-cli/templates/expo-react-native/lib/theme.ts +73 -0
  755. package/codeyam-cli/templates/expo-react-native/metro.config.js +6 -0
  756. package/codeyam-cli/templates/expo-react-native/nativewind-env.d.ts +1 -0
  757. package/codeyam-cli/templates/expo-react-native/package.json +54 -0
  758. package/codeyam-cli/templates/expo-react-native/patches/expo-modules-autolinking+3.0.24.patch +29 -0
  759. package/codeyam-cli/templates/expo-react-native/tailwind.config.js +10 -0
  760. package/codeyam-cli/templates/expo-react-native/tsconfig.json +10 -0
  761. package/codeyam-cli/templates/hooks/staleness-check.sh +43 -0
  762. package/codeyam-cli/templates/isolation-route/expo-router.tsx.template +54 -0
  763. package/codeyam-cli/templates/isolation-route/next-app.tsx.template +80 -0
  764. package/codeyam-cli/templates/isolation-route/next-pages.tsx.template +79 -0
  765. package/codeyam-cli/templates/isolation-route/vite-react.tsx.template +78 -0
  766. package/codeyam-cli/templates/msw/browser-setup.ts.template +47 -0
  767. package/codeyam-cli/templates/msw/handler-router.ts.template +47 -0
  768. package/codeyam-cli/templates/msw/server-setup.ts.template +52 -0
  769. package/codeyam-cli/templates/nextjs-prisma-sqlite/AUTH_PATTERNS.md +308 -0
  770. package/codeyam-cli/templates/nextjs-prisma-sqlite/AUTH_UPGRADE.md +304 -0
  771. package/codeyam-cli/templates/nextjs-prisma-sqlite/DATABASE.md +126 -0
  772. package/codeyam-cli/templates/nextjs-prisma-sqlite/FEATURE_PATTERNS.md +37 -0
  773. package/codeyam-cli/templates/nextjs-prisma-sqlite/README.md +53 -0
  774. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/api/todos/route.ts +17 -0
  775. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/codeyam-isolate/layout.tsx +12 -0
  776. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/globals.css +26 -0
  777. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/layout.tsx +34 -0
  778. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/lib/prisma.ts +24 -0
  779. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/page.tsx +10 -0
  780. package/codeyam-cli/templates/nextjs-prisma-sqlite/env +4 -0
  781. package/codeyam-cli/templates/nextjs-prisma-sqlite/eslint.config.mjs +11 -0
  782. package/codeyam-cli/templates/nextjs-prisma-sqlite/gitignore +65 -0
  783. package/codeyam-cli/templates/nextjs-prisma-sqlite/next.config.ts +14 -0
  784. package/codeyam-cli/templates/nextjs-prisma-sqlite/package.json +39 -0
  785. package/codeyam-cli/templates/nextjs-prisma-sqlite/postcss.config.mjs +7 -0
  786. package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma/schema.prisma +27 -0
  787. package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma/seed.ts +40 -0
  788. package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma.config.ts +12 -0
  789. package/codeyam-cli/templates/nextjs-prisma-sqlite/seed-adapter.ts +140 -0
  790. package/codeyam-cli/templates/nextjs-prisma-sqlite/tsconfig.json +34 -0
  791. package/codeyam-cli/templates/nextjs-prisma-sqlite/vitest.config.ts +13 -0
  792. package/codeyam-cli/templates/nextjs-prisma-supabase/README.md +52 -0
  793. package/codeyam-cli/templates/nextjs-prisma-supabase/SUPABASE_SETUP.md +104 -0
  794. package/codeyam-cli/templates/nextjs-prisma-supabase/app/api/todos/route.ts +17 -0
  795. package/codeyam-cli/templates/nextjs-prisma-supabase/app/globals.css +26 -0
  796. package/codeyam-cli/templates/nextjs-prisma-supabase/app/layout.tsx +34 -0
  797. package/codeyam-cli/templates/nextjs-prisma-supabase/app/lib/prisma.ts +20 -0
  798. package/codeyam-cli/templates/nextjs-prisma-supabase/app/lib/supabase.ts +12 -0
  799. package/codeyam-cli/templates/nextjs-prisma-supabase/app/page.tsx +10 -0
  800. package/codeyam-cli/templates/nextjs-prisma-supabase/env +9 -0
  801. package/codeyam-cli/templates/nextjs-prisma-supabase/eslint.config.mjs +11 -0
  802. package/codeyam-cli/templates/nextjs-prisma-supabase/gitignore +40 -0
  803. package/codeyam-cli/templates/nextjs-prisma-supabase/next.config.ts +11 -0
  804. package/codeyam-cli/templates/nextjs-prisma-supabase/package.json +37 -0
  805. package/codeyam-cli/templates/nextjs-prisma-supabase/postcss.config.mjs +7 -0
  806. package/codeyam-cli/templates/nextjs-prisma-supabase/prisma/schema.prisma +27 -0
  807. package/codeyam-cli/templates/nextjs-prisma-supabase/prisma/seed.ts +39 -0
  808. package/codeyam-cli/templates/nextjs-prisma-supabase/prisma.config.ts +12 -0
  809. package/codeyam-cli/templates/nextjs-prisma-supabase/tsconfig.json +34 -0
  810. package/codeyam-cli/templates/prompts/conversation-guidance.txt +44 -0
  811. package/codeyam-cli/templates/prompts/conversation-prompt.txt +28 -0
  812. package/codeyam-cli/templates/prompts/interruption-prompt.txt +31 -0
  813. package/codeyam-cli/templates/prompts/stale-rules-prompt.txt +24 -0
  814. package/codeyam-cli/templates/rule-notification-hook.py +47 -18
  815. package/codeyam-cli/templates/rule-reflection-hook.py +287 -68
  816. package/codeyam-cli/templates/rules-instructions.md +45 -90
  817. package/codeyam-cli/templates/seed-adapters/supabase.ts +475 -0
  818. package/codeyam-cli/templates/{codeyam:debug.md → skills/codeyam-debug/SKILL.md} +1 -1
  819. package/codeyam-cli/templates/skills/codeyam-dev-mode/SKILL.md +237 -0
  820. package/codeyam-cli/templates/skills/codeyam-editor/SKILL.md +244 -0
  821. package/codeyam-cli/templates/{codeyam:memory.md → skills/codeyam-memory/SKILL.md} +231 -24
  822. package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/deprecated-prompt.md +100 -0
  823. package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/detect-deprecated-patterns.mjs +139 -0
  824. package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/find-exports.mjs +52 -0
  825. package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/misleading-api-prompt.md +117 -0
  826. package/codeyam-cli/templates/skills/codeyam-memory/scripts/lib/read-json-field.mjs +61 -0
  827. package/codeyam-cli/templates/skills/codeyam-memory/scripts/lib/ripgrep-fallback.mjs +155 -0
  828. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/analyze-prompt.md +46 -0
  829. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/cleanup.mjs +13 -0
  830. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/filter-session.mjs +95 -0
  831. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/preprocess.mjs +160 -0
  832. package/codeyam-cli/templates/{codeyam:new-rule.md → skills/codeyam-new-rule/SKILL.md} +1 -3
  833. package/codeyam-cli/templates/{codeyam:setup.md → skills/codeyam-setup/SKILL.md} +13 -1
  834. package/codeyam-cli/templates/{codeyam:sim.md → skills/codeyam-sim/SKILL.md} +1 -1
  835. package/codeyam-cli/templates/{codeyam:test.md → skills/codeyam-test/SKILL.md} +1 -1
  836. package/codeyam-cli/templates/{codeyam:verify.md → skills/codeyam-verify/SKILL.md} +1 -1
  837. package/package.json +28 -20
  838. package/packages/ai/index.js +1 -1
  839. package/packages/ai/index.js.map +1 -1
  840. package/packages/ai/src/lib/analyzeScope.js +14 -0
  841. package/packages/ai/src/lib/analyzeScope.js.map +1 -1
  842. package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js +22 -4
  843. package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js.map +1 -1
  844. package/packages/ai/src/lib/astScopes/methodSemantics.js +99 -0
  845. package/packages/ai/src/lib/astScopes/methodSemantics.js.map +1 -1
  846. package/packages/ai/src/lib/astScopes/nodeToSource.js +16 -0
  847. package/packages/ai/src/lib/astScopes/nodeToSource.js.map +1 -1
  848. package/packages/ai/src/lib/astScopes/paths.js +12 -3
  849. package/packages/ai/src/lib/astScopes/paths.js.map +1 -1
  850. package/packages/ai/src/lib/astScopes/processExpression.js +78 -1
  851. package/packages/ai/src/lib/astScopes/processExpression.js.map +1 -1
  852. package/packages/ai/src/lib/astScopes/sharedPatterns.js +25 -0
  853. package/packages/ai/src/lib/astScopes/sharedPatterns.js.map +1 -1
  854. package/packages/ai/src/lib/completionCall.js +10 -7
  855. package/packages/ai/src/lib/completionCall.js.map +1 -1
  856. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +389 -20
  857. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
  858. package/packages/ai/src/lib/dataStructure/equivalencyManagers/ParentScopeManager.js +9 -2
  859. package/packages/ai/src/lib/dataStructure/equivalencyManagers/ParentScopeManager.js.map +1 -1
  860. package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js +14 -4
  861. package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js.map +1 -1
  862. package/packages/ai/src/lib/dataStructure/helpers/coercePrimitivesToArraysBySchema.js +54 -0
  863. package/packages/ai/src/lib/dataStructure/helpers/coercePrimitivesToArraysBySchema.js.map +1 -0
  864. package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js +59 -11
  865. package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js.map +1 -1
  866. package/packages/ai/src/lib/dataStructure/helpers/stripNullableMarkers.js +34 -0
  867. package/packages/ai/src/lib/dataStructure/helpers/stripNullableMarkers.js.map +1 -0
  868. package/packages/ai/src/lib/dataStructureChunking.js +30 -11
  869. package/packages/ai/src/lib/dataStructureChunking.js.map +1 -1
  870. package/packages/ai/src/lib/generateEntityScenarioData.js +79 -5
  871. package/packages/ai/src/lib/generateEntityScenarioData.js.map +1 -1
  872. package/packages/ai/src/lib/generateExecutionFlows.js +86 -2
  873. package/packages/ai/src/lib/generateExecutionFlows.js.map +1 -1
  874. package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js +242 -81
  875. package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js.map +1 -1
  876. package/packages/ai/src/lib/mergeJsonTypeDefinitions.js +5 -0
  877. package/packages/ai/src/lib/mergeJsonTypeDefinitions.js.map +1 -1
  878. package/packages/ai/src/lib/promptGenerators/collapseNullableObjects.js +97 -0
  879. package/packages/ai/src/lib/promptGenerators/collapseNullableObjects.js.map +1 -0
  880. package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js +17 -2
  881. package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js.map +1 -1
  882. package/packages/analyze/index.js +1 -1
  883. package/packages/analyze/index.js.map +1 -1
  884. package/packages/analyze/src/lib/ProjectAnalyzer.js +13 -4
  885. package/packages/analyze/src/lib/ProjectAnalyzer.js.map +1 -1
  886. package/packages/analyze/src/lib/asts/index.js +4 -2
  887. package/packages/analyze/src/lib/asts/index.js.map +1 -1
  888. package/packages/analyze/src/lib/asts/nodes/getNodeType.js +1 -0
  889. package/packages/analyze/src/lib/asts/nodes/getNodeType.js.map +1 -1
  890. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js +27 -3
  891. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js.map +1 -1
  892. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js +14 -27
  893. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js.map +1 -1
  894. package/packages/analyze/src/lib/files/analyze/dependencyResolver.js +0 -5
  895. package/packages/analyze/src/lib/files/analyze/dependencyResolver.js.map +1 -1
  896. package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js +12 -2
  897. package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js.map +1 -1
  898. package/packages/analyze/src/lib/files/analyze/gatherEntityMap.js +9 -7
  899. package/packages/analyze/src/lib/files/analyze/gatherEntityMap.js.map +1 -1
  900. package/packages/analyze/src/lib/files/analyze/trackEntityCircularDependencies.js +14 -0
  901. package/packages/analyze/src/lib/files/analyze/trackEntityCircularDependencies.js.map +1 -1
  902. package/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.js +44 -11
  903. package/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.js.map +1 -1
  904. package/packages/analyze/src/lib/files/analyzeChange.js +1 -0
  905. package/packages/analyze/src/lib/files/analyzeChange.js.map +1 -1
  906. package/packages/analyze/src/lib/files/analyzeInitial.js +1 -0
  907. package/packages/analyze/src/lib/files/analyzeInitial.js.map +1 -1
  908. package/packages/analyze/src/lib/files/analyzeNextRoute.js +5 -1
  909. package/packages/analyze/src/lib/files/analyzeNextRoute.js.map +1 -1
  910. package/packages/analyze/src/lib/files/scenarios/TransformationTracer.js +54 -27
  911. package/packages/analyze/src/lib/files/scenarios/TransformationTracer.js.map +1 -1
  912. package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js +42 -13
  913. package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js.map +1 -1
  914. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +185 -28
  915. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
  916. package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js +0 -40
  917. package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js.map +1 -1
  918. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +1388 -1143
  919. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js.map +1 -1
  920. package/packages/database/index.js +1 -0
  921. package/packages/database/index.js.map +1 -1
  922. package/packages/database/src/lib/analysisBranchToDb.js +1 -1
  923. package/packages/database/src/lib/analysisBranchToDb.js.map +1 -1
  924. package/packages/database/src/lib/analysisToDb.js +1 -1
  925. package/packages/database/src/lib/analysisToDb.js.map +1 -1
  926. package/packages/database/src/lib/branchToDb.js +1 -1
  927. package/packages/database/src/lib/branchToDb.js.map +1 -1
  928. package/packages/database/src/lib/commitBranchToDb.js +1 -1
  929. package/packages/database/src/lib/commitBranchToDb.js.map +1 -1
  930. package/packages/database/src/lib/commitToDb.js +1 -1
  931. package/packages/database/src/lib/commitToDb.js.map +1 -1
  932. package/packages/database/src/lib/fileToDb.js +1 -1
  933. package/packages/database/src/lib/fileToDb.js.map +1 -1
  934. package/packages/database/src/lib/kysely/db.js +8 -0
  935. package/packages/database/src/lib/kysely/db.js.map +1 -1
  936. package/packages/database/src/lib/kysely/tables/editorScenariosTable.js +149 -0
  937. package/packages/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -0
  938. package/packages/database/src/lib/kysely/tables/labsRequestsTable.js +35 -0
  939. package/packages/database/src/lib/kysely/tables/labsRequestsTable.js.map +1 -0
  940. package/packages/database/src/lib/loadAnalysis.js +7 -1
  941. package/packages/database/src/lib/loadAnalysis.js.map +1 -1
  942. package/packages/database/src/lib/loadCommits.js +23 -13
  943. package/packages/database/src/lib/loadCommits.js.map +1 -1
  944. package/packages/database/src/lib/loadEntities.js +0 -6
  945. package/packages/database/src/lib/loadEntities.js.map +1 -1
  946. package/packages/database/src/lib/loadEntity.js +5 -5
  947. package/packages/database/src/lib/loadEntity.js.map +1 -1
  948. package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.js +1 -4
  949. package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.js.map +1 -1
  950. package/packages/database/src/lib/projectToDb.js +1 -1
  951. package/packages/database/src/lib/projectToDb.js.map +1 -1
  952. package/packages/database/src/lib/saveFiles.js +1 -1
  953. package/packages/database/src/lib/saveFiles.js.map +1 -1
  954. package/packages/database/src/lib/scenarioToDb.js +1 -1
  955. package/packages/database/src/lib/scenarioToDb.js.map +1 -1
  956. package/packages/database/src/lib/updateCommitMetadata.js +76 -90
  957. package/packages/database/src/lib/updateCommitMetadata.js.map +1 -1
  958. package/packages/database/src/lib/updateFreshAnalysisStatus.js +41 -30
  959. package/packages/database/src/lib/updateFreshAnalysisStatus.js.map +1 -1
  960. package/packages/database/src/lib/updateFreshAnalysisStatusWithScenarios.js +68 -57
  961. package/packages/database/src/lib/updateFreshAnalysisStatusWithScenarios.js.map +1 -1
  962. package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js +29 -1
  963. package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js.map +1 -1
  964. package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +33 -5
  965. package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
  966. package/packages/types/src/enums/ProjectFramework.js +2 -0
  967. package/packages/types/src/enums/ProjectFramework.js.map +1 -1
  968. package/packages/utils/src/lib/fs/rsyncCopy.js +120 -4
  969. package/packages/utils/src/lib/fs/rsyncCopy.js.map +1 -1
  970. package/scripts/npm-post-install.cjs +34 -0
  971. package/codeyam-cli/src/commands/detect-universal-mocks.js +0 -118
  972. package/codeyam-cli/src/commands/detect-universal-mocks.js.map +0 -1
  973. package/codeyam-cli/src/commands/list.js +0 -31
  974. package/codeyam-cli/src/commands/list.js.map +0 -1
  975. package/codeyam-cli/src/commands/webapp-info.js +0 -146
  976. package/codeyam-cli/src/commands/webapp-info.js.map +0 -1
  977. package/codeyam-cli/src/utils/universal-mocks.js +0 -152
  978. package/codeyam-cli/src/utils/universal-mocks.js.map +0 -1
  979. package/codeyam-cli/src/webserver/build/client/assets/CopyButton-CA3JxPb7.js +0 -1
  980. package/codeyam-cli/src/webserver/build/client/assets/EntityTypeBadge-B5ctlSYt.js +0 -1
  981. package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-ClaLpuOo.js +0 -34
  982. package/codeyam-cli/src/webserver/build/client/assets/InteractivePreview-BDhPilK7.js +0 -25
  983. package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-VeqEBv9v.js +0 -3
  984. package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-Gq3Ocjo6.js +0 -1
  985. package/codeyam-cli/src/webserver/build/client/assets/TruncatedFilePath-CiwXDxLh.js +0 -1
  986. package/codeyam-cli/src/webserver/build/client/assets/agent-transcripts-DfKzxuoe.js +0 -11
  987. package/codeyam-cli/src/webserver/build/client/assets/chunk-JZWAC4HX-JE9ZIoBl.js +0 -51
  988. package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-Ca9fAY46.js +0 -21
  989. package/codeyam-cli/src/webserver/build/client/assets/cy-logo-cli-DcX-ZS3p.js +0 -1
  990. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-C5lqplTC.js +0 -1
  991. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-CBoafmVs.js +0 -6
  992. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-DGgZjdFg.js +0 -6
  993. package/codeyam-cli/src/webserver/build/client/assets/fileTableUtils-DCPhhSMo.js +0 -1
  994. package/codeyam-cli/src/webserver/build/client/assets/files-Dk8wkAS7.js +0 -1
  995. package/codeyam-cli/src/webserver/build/client/assets/git-DXnyr8uP.js +0 -15
  996. package/codeyam-cli/src/webserver/build/client/assets/globals-Bh6jH0cL.css +0 -1
  997. package/codeyam-cli/src/webserver/build/client/assets/labs-BUvfJMNR.js +0 -1
  998. package/codeyam-cli/src/webserver/build/client/assets/manifest-d4e77269.js +0 -1
  999. package/codeyam-cli/src/webserver/build/client/assets/memory-DCHBwHou.js +0 -76
  1000. package/codeyam-cli/src/webserver/build/client/assets/root-D6oziHts.js +0 -62
  1001. package/codeyam-cli/src/webserver/build/client/assets/settings-B2X7lJgQ.js +0 -1
  1002. package/codeyam-cli/src/webserver/build/client/assets/simulations-CPoAg7Zo.js +0 -1
  1003. package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-DNwUduNu.js +0 -1
  1004. package/codeyam-cli/src/webserver/build/client/assets/useLastLogLine-COky1GVF.js +0 -2
  1005. package/codeyam-cli/src/webserver/build/client/assets/useReportContext-CpZgwliL.js +0 -1
  1006. package/codeyam-cli/src/webserver/build/client/assets/useToast-Bv9JFvUO.js +0 -1
  1007. package/codeyam-cli/src/webserver/build/server/assets/index-C0KrUQp-.js +0 -1
  1008. package/codeyam-cli/src/webserver/build/server/assets/server-build-C2h1v1XD.js +0 -260
  1009. package/codeyam-cli/templates/codeyam-stop-hook.sh +0 -284
  1010. package/codeyam-cli/templates/codeyam:diagnose.md +0 -803
  1011. package/scripts/finalize-analyzer.cjs +0 -81
@@ -397,6 +397,8 @@ const SILENTLY_IGNORED_EQUIVALENCY_REASONS = new Set([
397
397
  'transformed non-object function equivalency - implicit parent equivalency - rerouted via useCallback',
398
398
  'transformed non-object function equivalency - Array.from() equivalency',
399
399
  'Spread operator equivalency key update: Explicit array deconstruction equivalency value',
400
+ // 'transformed non-object function equivalency - Explicit array deconstruction equivalency value',
401
+ 'useState setter call equivalency (direct)',
400
402
  ]);
401
403
 
402
404
  export class ScopeDataStructure {
@@ -1047,9 +1049,38 @@ export class ScopeDataStructure {
1047
1049
  equivalencyValueChain?: EquivalencyValueChainItem[],
1048
1050
  traceId?: number,
1049
1051
  ) {
1052
+ // Fast early exits that don't count toward the limit.
1053
+ // These are "no-op" calls that would be caught further below anyway,
1054
+ // but checking them first prevents counter inflation from redundant calls
1055
+ // generated by managers and followEquivalencies during scope processing.
1056
+
1057
+ // Skip silently-ignored reasons before counting
1058
+ if (SILENTLY_IGNORED_EQUIVALENCY_REASONS.has(equivalencyReason)) {
1059
+ return;
1060
+ }
1061
+
1062
+ // Skip exact duplicates before counting (Phase 1 only — Phase 2 needs
1063
+ // to process duplicates for database chain tracking)
1064
+ if (this.onlyEquivalencies) {
1065
+ const existing = scopeNode.equivalencies[path];
1066
+ if (
1067
+ existing?.some(
1068
+ (v) =>
1069
+ v.schemaPath === equivalentPath &&
1070
+ v.scopeNodeName === equivalentScopeName,
1071
+ )
1072
+ ) {
1073
+ return;
1074
+ }
1075
+ }
1076
+
1050
1077
  addEquivalencyCallCount++;
1051
1078
 
1052
- if (addEquivalencyCallCount > 50000) {
1079
+ const limit =
1080
+ typeof (globalThis as any).__CODEYAM_EQUIVALENCY_LIMIT === 'number'
1081
+ ? (globalThis as any).__CODEYAM_EQUIVALENCY_LIMIT
1082
+ : 50000;
1083
+ if (addEquivalencyCallCount > limit) {
1053
1084
  console.error('INFINITE LOOP DETECTED in addEquivalency', {
1054
1085
  callCount: addEquivalencyCallCount,
1055
1086
  path,
@@ -1064,14 +1095,11 @@ export class ScopeDataStructure {
1064
1095
  }
1065
1096
  // Filter equivalency reasons - use pre-computed Sets for O(1) lookup
1066
1097
  if (!ALLOWED_EQUIVALENCY_REASONS.has(equivalencyReason)) {
1067
- if (SILENTLY_IGNORED_EQUIVALENCY_REASONS.has(equivalencyReason)) {
1068
- return;
1069
- } else {
1070
- // Log and skip - if an equivalency reason isn't in ALLOWED or SILENTLY_IGNORED,
1071
- // it shouldn't be stored (was previously missing the return)
1072
- console.info('Not tracked equivalency reason', { equivalencyReason });
1073
- return;
1074
- }
1098
+ // Silently-ignored reasons already handled above
1099
+ // Log and skip - if an equivalency reason isn't in ALLOWED or SILENTLY_IGNORED,
1100
+ // it shouldn't be stored (was previously missing the return)
1101
+ console.info('Not tracked equivalency reason', { equivalencyReason });
1102
+ return;
1075
1103
  }
1076
1104
 
1077
1105
  // Skip self-referential equivalencies that would create infinite loops.
@@ -1107,6 +1135,33 @@ export class ScopeDataStructure {
1107
1135
  return;
1108
1136
  }
1109
1137
 
1138
+ // Case 3: Circular reference through scope-suffixed names (____cyScope pattern)
1139
+ // When a named arrow function is defined inside a scope (e.g., useEffect callback):
1140
+ // const identifyUser = async () => { ... };
1141
+ // identifyUser();
1142
+ // This creates a variable "identifyUser" and a scope "identifyUser____cyScope9F".
1143
+ // Mutual equivalencies between these cause infinite loops in Phase 2 because
1144
+ // processing one triggers addToSchema → followEquivalencies → addEquivalency
1145
+ // on the reverse, which repeats indefinitely.
1146
+ // Only block when the REVERSE direction already exists (creating a cycle).
1147
+ // The initial one-directional equivalency is necessary for scope resolution.
1148
+ if (
1149
+ path &&
1150
+ equivalentPath &&
1151
+ (equivalentPath.startsWith(path + '____') ||
1152
+ path.startsWith(equivalentPath + '____'))
1153
+ ) {
1154
+ // Check if the reverse equivalency already exists
1155
+ const reverseEquivalencies =
1156
+ scopeNode.equivalencies[equivalentPath] || [];
1157
+ const reverseExists = reverseEquivalencies.some(
1158
+ (v) => v.schemaPath === path,
1159
+ );
1160
+ if (reverseExists) {
1161
+ return;
1162
+ }
1163
+ }
1164
+
1110
1165
  if (!equivalentScopeName) {
1111
1166
  console.error(
1112
1167
  'CodeYam Error: Missing equivalent scope name - FULL CONTEXT:',
@@ -2797,6 +2852,8 @@ export class ScopeDataStructure {
2797
2852
  usageEquivalency.scopeNodeName,
2798
2853
  ) as ScopeNode;
2799
2854
 
2855
+ if (!usageScopeNode) continue;
2856
+
2800
2857
  // Guard against infinite recursion by tracking which paths we've already
2801
2858
  // added from addComplexSourcePathVariables
2802
2859
  if (
@@ -2876,6 +2933,8 @@ export class ScopeDataStructure {
2876
2933
  usageEquivalency.scopeNodeName,
2877
2934
  ) as ScopeNode;
2878
2935
 
2936
+ if (!usageScopeNode) continue;
2937
+
2879
2938
  // This is put in place to avoid propagating array functions like 'filter' through complex equivalencies
2880
2939
  // but may cause problems if the funtion call is not on a known object (e.g. string or array)
2881
2940
  if (
@@ -3355,6 +3414,22 @@ export class ScopeDataStructure {
3355
3414
  * ensure all sub-paths of that variable are reflected under signature[N].
3356
3415
  */
3357
3416
  private propagateParameterToSignaturePaths(scopeNode: ScopeNode) {
3417
+ // Helper: check if a type is a concrete scalar that cannot have sub-properties.
3418
+ const SCALAR_TYPES = new Set([
3419
+ 'string',
3420
+ 'number',
3421
+ 'boolean',
3422
+ 'bigint',
3423
+ 'symbol',
3424
+ 'void',
3425
+ 'never',
3426
+ ]);
3427
+ const isDefinitelyScalar = (type: string): boolean => {
3428
+ const parts = type.split('|').map((s) => s.trim());
3429
+ const base = parts.filter((s) => s !== 'undefined' && s !== 'null');
3430
+ return base.length > 0 && base.every((b) => SCALAR_TYPES.has(b));
3431
+ };
3432
+
3358
3433
  // Find variable → signature[N] equivalencies
3359
3434
  for (const [varName, equivalencies] of Object.entries(
3360
3435
  scopeNode.equivalencies,
@@ -3385,7 +3460,38 @@ export class ScopeDataStructure {
3385
3460
 
3386
3461
  // Only add if the signature path doesn't already exist
3387
3462
  if (!scopeNode.schema[sigKey]) {
3388
- scopeNode.schema[sigKey] = scopeNode.schema[key];
3463
+ // Check if this path represents variable conflation:
3464
+ // When a standalone variable (e.g., showWorkoutForm from useState)
3465
+ // appears as a sub-property of a scalar-typed ancestor (e.g.,
3466
+ // activity_type = "string"), it's from scope conflation, not real
3467
+ // property access. Block these while allowing legitimate built-in
3468
+ // accesses like string.length or string.slice.
3469
+ let isConflatedPath = false;
3470
+ let checkPos = signaturePath.length;
3471
+ while (true) {
3472
+ checkPos = sigKey.indexOf('.', checkPos + 1);
3473
+ if (checkPos === -1) break;
3474
+ const ancestorPath = sigKey.substring(0, checkPos);
3475
+ const ancestorType = scopeNode.schema[ancestorPath];
3476
+ if (ancestorType && isDefinitelyScalar(ancestorType)) {
3477
+ // Ancestor is scalar — check if the immediate sub-property
3478
+ // is also a standalone variable (indicating conflation)
3479
+ const afterDot = sigKey.substring(checkPos + 1);
3480
+ const nextSep = afterDot.search(/[.\[]/);
3481
+ const subPropName =
3482
+ nextSep === -1
3483
+ ? afterDot
3484
+ : afterDot.substring(0, nextSep);
3485
+ if (scopeNode.schema[subPropName] !== undefined) {
3486
+ isConflatedPath = true;
3487
+ break;
3488
+ }
3489
+ }
3490
+ }
3491
+
3492
+ if (!isConflatedPath) {
3493
+ scopeNode.schema[sigKey] = scopeNode.schema[key];
3494
+ }
3389
3495
  }
3390
3496
  }
3391
3497
  }
@@ -3898,25 +4004,116 @@ export class ScopeDataStructure {
3898
4004
  return [source];
3899
4005
  };
3900
4006
 
3901
- return entries.reduce(
3902
- (acc, entry) => {
3903
- if (entry.sourceCandidates.length === 0) return acc;
4007
+ const acc = entries.reduce(
4008
+ (result, entry) => {
4009
+ if (entry.sourceCandidates.length === 0) return result;
3904
4010
  const usages = entry.usages.filter(usageMatchesScope);
3905
4011
  for (const usage of usages) {
3906
- acc[usage.schemaPath] ||= [];
4012
+ result[usage.schemaPath] ||= [];
3907
4013
  // Resolve each source candidate through the equivalency chain
3908
4014
  for (const source of entry.sourceCandidates) {
3909
4015
  const resolvedSources = resolveToSignature(source, new Set());
3910
- acc[usage.schemaPath].push(...resolvedSources);
4016
+ result[usage.schemaPath].push(...resolvedSources);
3911
4017
  }
3912
4018
  }
3913
- return acc;
4019
+ return result;
3914
4020
  },
3915
4021
  {} as Record<
3916
4022
  string,
3917
4023
  Pick<ScopeVariable, 'scopeNodeName' | 'schemaPath'>[]
3918
4024
  >,
3919
4025
  );
4026
+
4027
+ // Post-processing: enrich useState-backed sources with co-located external
4028
+ // function calls. When a useState value resolves to a setter variable that
4029
+ // lives in the same scope as a fetch/API call, that fetch is a data source.
4030
+ this.enrichUseStateSourcesWithCoLocatedCalls(acc);
4031
+
4032
+ return acc;
4033
+ }
4034
+
4035
+ /**
4036
+ * For each source that ends at a useState path, check if the setter was called
4037
+ * from a scope that also contains external function calls (like fetch).
4038
+ * If so, add those external calls as additional source candidates.
4039
+ */
4040
+ private enrichUseStateSourcesWithCoLocatedCalls(
4041
+ acc: Record<string, Pick<ScopeVariable, 'scopeNodeName' | 'schemaPath'>[]>,
4042
+ ) {
4043
+ const rootScopeName = this.scopeTreeManager.getRootName();
4044
+ const rootScope = this.scopeNodes[rootScopeName];
4045
+ if (!rootScope) return;
4046
+
4047
+ // Collect all descendants for each scope node
4048
+ const getAllDescendants = (
4049
+ node: import('./helpers/ScopeTreeManager').ScopeTreeNode,
4050
+ ): Set<string> => {
4051
+ const names = new Set<string>([node.name]);
4052
+ for (const child of node.children) {
4053
+ for (const name of getAllDescendants(child)) {
4054
+ names.add(name);
4055
+ }
4056
+ }
4057
+ return names;
4058
+ };
4059
+
4060
+ for (const [usagePath, sources] of Object.entries(acc)) {
4061
+ const additionalSources: Pick<
4062
+ ScopeVariable,
4063
+ 'scopeNodeName' | 'schemaPath'
4064
+ >[] = [];
4065
+
4066
+ for (const source of sources) {
4067
+ // Check if this source is a useState-related terminal path
4068
+ // (e.g., useState(X).functionCallReturnValue[1] or useState(X).signature[0])
4069
+ if (!source.schemaPath.match(/^useState\([^)]*\)\./)) continue;
4070
+
4071
+ // Find the useState call from the source path
4072
+ const useStateCallMatch = source.schemaPath.match(
4073
+ /^(useState\([^)]*\))\./,
4074
+ );
4075
+ if (!useStateCallMatch) continue;
4076
+ const useStateCall = useStateCallMatch[1];
4077
+
4078
+ // Look in the root scope for the useState value equivalency
4079
+ // which tells us where the setter was called from
4080
+ const valuePath = `${useStateCall}.functionCallReturnValue[0]`;
4081
+ const valueEquivs = rootScope.equivalencies[valuePath];
4082
+ if (!valueEquivs) continue;
4083
+
4084
+ for (const equiv of valueEquivs) {
4085
+ // Find the scope where the setter was called
4086
+ const setterScopeName = equiv.scopeNodeName;
4087
+ const setterScopeTree =
4088
+ this.scopeTreeManager.findNode(setterScopeName);
4089
+ if (!setterScopeTree) continue;
4090
+
4091
+ // Get all descendant scope names from the setter scope
4092
+ const relatedScopes = getAllDescendants(setterScopeTree);
4093
+
4094
+ // Find external function calls in those scopes whose return values
4095
+ // are actually consumed (assigned to a variable). This excludes
4096
+ // fire-and-forget calls like analytics.track() or console.log().
4097
+ const coLocatedCalls = this.externalFunctionCalls.filter(
4098
+ (efc) =>
4099
+ relatedScopes.has(efc.callScope) &&
4100
+ efc.receivingVariableNames &&
4101
+ efc.receivingVariableNames.length > 0,
4102
+ );
4103
+
4104
+ for (const call of coLocatedCalls) {
4105
+ additionalSources.push({
4106
+ scopeNodeName: call.callScope,
4107
+ schemaPath: `${call.callSignature}.functionCallReturnValue`,
4108
+ });
4109
+ }
4110
+ }
4111
+ }
4112
+
4113
+ if (additionalSources.length > 0) {
4114
+ acc[usagePath].push(...additionalSources);
4115
+ }
4116
+ }
3920
4117
  }
3921
4118
 
3922
4119
  getUsageEquivalencies(functionName?: string) {
@@ -4069,6 +4266,24 @@ export class ScopeDataStructure {
4069
4266
  }
4070
4267
  }
4071
4268
 
4269
+ // Helper: check if a type is a concrete scalar that cannot have sub-properties.
4270
+ // e.g., "string", "number | undefined", "boolean | null" are scalar.
4271
+ // "object", "array", "function", "unknown", "Workout", etc. are NOT scalar.
4272
+ const SCALAR_TYPES = new Set([
4273
+ 'string',
4274
+ 'number',
4275
+ 'boolean',
4276
+ 'bigint',
4277
+ 'symbol',
4278
+ 'void',
4279
+ 'never',
4280
+ ]);
4281
+ const isDefinitelyScalarType = (type: string): boolean => {
4282
+ const parts = type.split('|').map((s) => s.trim());
4283
+ const base = parts.filter((s) => s !== 'undefined' && s !== 'null');
4284
+ return base.length > 0 && base.every((b) => SCALAR_TYPES.has(b));
4285
+ };
4286
+
4072
4287
  // Propagate nested paths from variables to their signature equivalents
4073
4288
  // e.g., if workouts = signature[0].workouts, then workouts[].title becomes
4074
4289
  // signature[0].workouts[].title
@@ -4093,7 +4308,69 @@ export class ScopeDataStructure {
4093
4308
 
4094
4309
  // Add to schema if not already present
4095
4310
  if (!tempScopeNode.schema[signatureKey]) {
4096
- tempScopeNode.schema[signatureKey] = schema[schemaKey];
4311
+ // Check if this path represents variable conflation:
4312
+ // When a standalone variable (e.g., showWorkoutForm from useState)
4313
+ // appears as a sub-property of a scalar-typed ancestor (e.g.,
4314
+ // activity_type = "string"), it's from scope conflation, not real
4315
+ // property access. Block these while allowing legitimate built-in
4316
+ // accesses like string.length or string.slice.
4317
+ let isConflatedPath = false;
4318
+ let checkPos = signaturePath.length;
4319
+ while (true) {
4320
+ checkPos = signatureKey.indexOf('.', checkPos + 1);
4321
+ if (checkPos === -1) break;
4322
+ const ancestorPath = signatureKey.substring(0, checkPos);
4323
+ const ancestorType = tempScopeNode.schema[ancestorPath];
4324
+ if (ancestorType && isDefinitelyScalarType(ancestorType)) {
4325
+ // Ancestor is scalar — check if the immediate sub-property
4326
+ // is also a standalone variable (indicating conflation)
4327
+ const afterDot = signatureKey.substring(checkPos + 1);
4328
+ const nextSep = afterDot.search(/[.\[]/);
4329
+ const subPropName =
4330
+ nextSep === -1 ? afterDot : afterDot.substring(0, nextSep);
4331
+ if (schema[subPropName] !== undefined) {
4332
+ isConflatedPath = true;
4333
+ break;
4334
+ }
4335
+ }
4336
+ }
4337
+
4338
+ if (!isConflatedPath) {
4339
+ tempScopeNode.schema[signatureKey] = schema[schemaKey];
4340
+ }
4341
+ }
4342
+ }
4343
+ }
4344
+ }
4345
+
4346
+ // Post-process: filter out conflated signature paths.
4347
+ // During phase 2 scope analysis, useState(false) conflation can create
4348
+ // bad paths like signature[0].mockWorkouts[].activity_type.showWorkoutForm
4349
+ // directly in scopeNode.schema. These flow through signatureInSchema into
4350
+ // tempScopeNode.schema without any guard. Filter them out here by checking:
4351
+ // 1. An ancestor in the path has a concrete scalar type (string, number, boolean, etc.)
4352
+ // 2. The immediate sub-property of that scalar ancestor is also a standalone
4353
+ // variable in the schema (indicating conflation, not a real property access)
4354
+ for (const key of Object.keys(tempScopeNode.schema)) {
4355
+ if (!key.startsWith('signature[')) continue;
4356
+
4357
+ // Walk through the path looking for scalar-typed ancestors
4358
+ let pos = 0;
4359
+ while (true) {
4360
+ pos = key.indexOf('.', pos + 1);
4361
+ if (pos === -1) break;
4362
+ const ancestorPath = key.substring(0, pos);
4363
+ const ancestorType = tempScopeNode.schema[ancestorPath];
4364
+ if (ancestorType && isDefinitelyScalarType(ancestorType)) {
4365
+ // Found a scalar ancestor — check if the sub-property name
4366
+ // is a standalone variable in the getSchema() result
4367
+ const afterDot = key.substring(pos + 1);
4368
+ const nextSep = afterDot.search(/[.\[]/);
4369
+ const subPropName =
4370
+ nextSep === -1 ? afterDot : afterDot.substring(0, nextSep);
4371
+ if (schema[subPropName] !== undefined) {
4372
+ delete tempScopeNode.schema[key];
4373
+ break;
4097
4374
  }
4098
4375
  }
4099
4376
  }
@@ -4423,6 +4700,15 @@ export class ScopeDataStructure {
4423
4700
  !equivalentValue.schemaPath.startsWith('signature[') && // not a signature path
4424
4701
  !equivalentValue.schemaPath.endsWith('.functionCallReturnValue') // not already handled above
4425
4702
  ) {
4703
+ // Skip bare "returnValue" from child scopes — this is the child's return value,
4704
+ // not a meaningful data source path in the parent scope
4705
+ if (
4706
+ equivalentValue.schemaPath === 'returnValue' &&
4707
+ equivalentValue.scopeNodeName !==
4708
+ this.scopeTreeManager.getRootName()
4709
+ ) {
4710
+ continue;
4711
+ }
4426
4712
  // Add equivalency (will accumulate if multiple values for OR expressions)
4427
4713
  addEquivalency(path, equivalentValue.schemaPath);
4428
4714
  }
@@ -4824,9 +5110,109 @@ export class ScopeDataStructure {
4824
5110
  // Replace cyScope placeholders in all external function call data
4825
5111
  // This ensures call signatures and schema paths use actual callback text
4826
5112
  // instead of internal cyScope names, preventing mock data merge conflicts.
4827
- return this.externalFunctionCalls.map((efc) =>
4828
- this.cleanCyScopeFromFunctionCallInfo(efc),
4829
- );
5113
+ const rootScopeName = this.scopeTreeManager.getRootName();
5114
+ const rootSchema = this.scopeNodes[rootScopeName]?.schema ?? {};
5115
+
5116
+ return this.externalFunctionCalls.map((efc) => {
5117
+ const cleaned = this.cleanCyScopeFromFunctionCallInfo(efc);
5118
+ return this.filterConflatedExternalPaths(cleaned, rootSchema);
5119
+ });
5120
+ }
5121
+
5122
+ /**
5123
+ * Filters out conflated paths from external function call schemas.
5124
+ *
5125
+ * When multiple useState(false) calls create equivalency conflation during
5126
+ * Phase 1 analysis, standalone boolean state variables (like showWorkoutForm,
5127
+ * showGoalForm) can bleed into external function call schemas as sub-properties
5128
+ * of unrelated data fields (like data[].activity_type.showWorkoutForm).
5129
+ *
5130
+ * Detection: group sub-properties by parent path. If 2+ sub-properties of
5131
+ * the same parent all match standalone root scope variable names, treat them
5132
+ * as conflation artifacts and remove them.
5133
+ */
5134
+ private filterConflatedExternalPaths(
5135
+ efc: FunctionCallInfo,
5136
+ rootSchema: Record<string, string>,
5137
+ ): FunctionCallInfo {
5138
+ // Build a set of top-level root scope variable names (simple names, no dots/brackets)
5139
+ const topLevelRootVars = new Set<string>();
5140
+ for (const key of Object.keys(rootSchema)) {
5141
+ if (!key.includes('.') && !key.includes('[')) {
5142
+ topLevelRootVars.add(key);
5143
+ }
5144
+ }
5145
+
5146
+ if (topLevelRootVars.size === 0) return efc;
5147
+
5148
+ // Group sub-property matches by their parent path.
5149
+ // For a path like "...data[].activity_type.showWorkoutForm",
5150
+ // parent = "...data[].activity_type", child = "showWorkoutForm"
5151
+ const parentToConflatedKeys = new Map<string, string[]>();
5152
+
5153
+ for (const key of Object.keys(efc.schema)) {
5154
+ const lastDot = key.lastIndexOf('.');
5155
+ if (lastDot === -1) continue;
5156
+
5157
+ const parent = key.substring(0, lastDot);
5158
+ const child = key.substring(lastDot + 1);
5159
+
5160
+ // Skip array access or function call patterns
5161
+ if (child.includes('[') || child.includes('(')) continue;
5162
+
5163
+ // Only consider paths inside array element chains (contains []).
5164
+ // Direct children of functionCallReturnValue are legitimate destructured
5165
+ // return values, not conflation. Conflation happens deeper in the chain
5166
+ // when array element fields get corrupted sub-properties.
5167
+ if (!parent.includes('[')) continue;
5168
+
5169
+ if (topLevelRootVars.has(child)) {
5170
+ if (!parentToConflatedKeys.has(parent)) {
5171
+ parentToConflatedKeys.set(parent, []);
5172
+ }
5173
+ parentToConflatedKeys.get(parent)!.push(key);
5174
+ }
5175
+ }
5176
+
5177
+ // Only filter when 2+ sub-properties of the same parent match root scope vars.
5178
+ // This threshold avoids false positives from coincidental name matches.
5179
+ const keysToRemove = new Set<string>();
5180
+ const parentsToRestore = new Set<string>();
5181
+
5182
+ for (const [parent, conflatedKeys] of parentToConflatedKeys) {
5183
+ if (conflatedKeys.length >= 2) {
5184
+ for (const key of conflatedKeys) {
5185
+ keysToRemove.add(key);
5186
+ }
5187
+ parentsToRestore.add(parent);
5188
+ }
5189
+ }
5190
+
5191
+ if (keysToRemove.size === 0) return efc;
5192
+
5193
+ // Create a new schema without the conflated paths
5194
+ const newSchema: Record<string, string> = {};
5195
+ for (const [key, value] of Object.entries(efc.schema)) {
5196
+ if (keysToRemove.has(key)) continue;
5197
+
5198
+ // Restore parent type: if it was changed to "object" because of conflated
5199
+ // sub-properties, and now all those sub-properties are removed, change it
5200
+ // back to "unknown" (we don't know the original type)
5201
+ if (parentsToRestore.has(key) && value === 'object') {
5202
+ // Check if there are any remaining sub-properties
5203
+ const hasRemainingSubProps = Object.keys(efc.schema).some(
5204
+ (k) =>
5205
+ !keysToRemove.has(k) &&
5206
+ k !== key &&
5207
+ (k.startsWith(key + '.') || k.startsWith(key + '[')),
5208
+ );
5209
+ newSchema[key] = hasRemainingSubProps ? value : 'unknown';
5210
+ } else {
5211
+ newSchema[key] = value;
5212
+ }
5213
+ }
5214
+
5215
+ return { ...efc, schema: newSchema };
4830
5216
  }
4831
5217
 
4832
5218
  /**
@@ -5119,6 +5505,10 @@ export class ScopeDataStructure {
5119
5505
  getEnrichedConditionalUsages(): Record<string, EnrichedConditionalUsage[]> {
5120
5506
  const enriched: Record<string, EnrichedConditionalUsage[]> = {};
5121
5507
 
5508
+ console.log(
5509
+ `[getEnrichedConditionalUsages] Processing ${Object.keys(this.rawConditionalUsages).length} conditional paths: [${Object.keys(this.rawConditionalUsages).join(', ')}]`,
5510
+ );
5511
+
5122
5512
  for (const [path, usages] of Object.entries(this.rawConditionalUsages)) {
5123
5513
  // Try to trace this path back to a data source
5124
5514
  // First, try the root scope
@@ -5127,10 +5517,69 @@ export class ScopeDataStructure {
5127
5517
 
5128
5518
  let sourceDataPath: string | undefined;
5129
5519
  if (explanation.source) {
5130
- // Build the full data path: scopeName.path
5131
- sourceDataPath = `${explanation.source.scope}.${explanation.source.path}`;
5520
+ const { scope, path: sourcePath } = explanation.source;
5521
+
5522
+ // Build initial path — avoid redundant prefix when path already contains the scope call
5523
+ let fullPath: string;
5524
+ if (sourcePath.startsWith(`${scope}(`)) {
5525
+ fullPath = sourcePath;
5526
+ } else {
5527
+ fullPath = `${scope}.${sourcePath}`;
5528
+ }
5529
+
5530
+ sourceDataPath = fullPath;
5531
+ console.log(
5532
+ `[getEnrichedConditionalUsages] "${path}" explainPath → scope="${scope}", sourcePath="${sourcePath}" → sourceDataPath="${sourceDataPath}"`,
5533
+ );
5534
+ } else {
5535
+ console.log(
5536
+ `[getEnrichedConditionalUsages] "${path}" explainPath → no source found`,
5537
+ );
5538
+ }
5539
+
5540
+ // If explainPath didn't find a useful external source (e.g., it traced to
5541
+ // useState or just to the component scope itself), check sourceEquivalencies
5542
+ // for an external function call source like a fetch call
5543
+ const hasExternalSource = sourceDataPath?.includes(
5544
+ '.functionCallReturnValue',
5545
+ );
5546
+ if (!hasExternalSource) {
5547
+ console.log(
5548
+ `[getEnrichedConditionalUsages] "${path}" no external source (sourceDataPath="${sourceDataPath}"), checking sourceEquivalencies fallback...`,
5549
+ );
5550
+ const sourceEquiv = this.getSourceEquivalencies();
5551
+ const returnValueKey = `returnValue.${path}`;
5552
+ const sources = sourceEquiv[returnValueKey];
5553
+ if (sources) {
5554
+ console.log(
5555
+ `[getEnrichedConditionalUsages] "${path}" sourceEquivalencies["${returnValueKey}"] has ${sources.length} sources: [${sources.map((s: { schemaPath: string }) => s.schemaPath).join(', ')}]`,
5556
+ );
5557
+ const externalSource = sources.find(
5558
+ (s: { schemaPath: string }) =>
5559
+ s.schemaPath.includes('.functionCallReturnValue') &&
5560
+ !s.schemaPath.startsWith('useState('),
5561
+ );
5562
+ if (externalSource) {
5563
+ console.log(
5564
+ `[getEnrichedConditionalUsages] "${path}" sourceEquivalencies fallback found external source: "${externalSource.schemaPath}"`,
5565
+ );
5566
+ sourceDataPath = externalSource.schemaPath;
5567
+ } else {
5568
+ console.log(
5569
+ `[getEnrichedConditionalUsages] "${path}" sourceEquivalencies fallback found no external function call source`,
5570
+ );
5571
+ }
5572
+ } else {
5573
+ console.log(
5574
+ `[getEnrichedConditionalUsages] "${path}" sourceEquivalencies["${returnValueKey}"] not found`,
5575
+ );
5576
+ }
5132
5577
  }
5133
5578
 
5579
+ console.log(
5580
+ `[getEnrichedConditionalUsages] "${path}" FINAL sourceDataPath="${sourceDataPath ?? '(none)'}" (${usages.length} usages)`,
5581
+ );
5582
+
5134
5583
  enriched[path] = usages.map((usage) => ({
5135
5584
  ...usage,
5136
5585
  sourceDataPath,
@@ -97,6 +97,16 @@ export default class ParentScopeManager implements EquivalencyManager {
97
97
  }
98
98
 
99
99
  if (instantiatedInParent || returnValueFromChildScope) {
100
+ // Skip if we've already propagated this variable to the parent scope.
101
+ // Without this guard, nested scopes trigger redundant addEquivalency calls
102
+ // for the same variable on every addToSchema pass (e.g., 'a' and 'b' in sort
103
+ // callbacks get propagated 30+ times per scope instead of once).
104
+ this.addedToParent[scopeNode.name] ||= new Set<string>();
105
+ if (this.addedToParent[scopeNode.name].has(rootPath)) {
106
+ return false;
107
+ }
108
+ this.addedToParent[scopeNode.name].add(rootPath);
109
+
100
110
  if (traceId && debugLevel > 0) {
101
111
  console.info(
102
112
  'Debug Propagation: parentScope executed',
@@ -114,9 +124,6 @@ export default class ParentScopeManager implements EquivalencyManager {
114
124
  );
115
125
  }
116
126
 
117
- this.addedToParent[scopeNode.name] ||= new Set<string>();
118
- this.addedToParent[scopeNode.name].add(rootPath);
119
-
120
127
  scopeDataStructure.addEquivalency(
121
128
  rootPath,
122
129
  rootPath,
@@ -6,7 +6,7 @@ import { ScopeNode, ScopeDataStructure } from '../ScopeDataStructure';
6
6
 
7
7
  type PrimitiveKind = 'array' | 'string' | 'number' | 'boolean' | 'date';
8
8
 
9
- const IGNORE_CLASSES_AND_OBJECTS = [
9
+ const IGNORE_CLASSES_AND_OBJECTS_SET = new Set([
10
10
  'Math',
11
11
  'JSON',
12
12
  'Reflect',
@@ -22,7 +22,7 @@ const IGNORE_CLASSES_AND_OBJECTS = [
22
22
  'useContext',
23
23
  'useReducer',
24
24
  'useLayoutEffect',
25
- ];
25
+ ]);
26
26
 
27
27
  /** cache the tokenised representation of every path we touch */
28
28
  const partsCache = new Map<string, string[]>();
@@ -147,16 +147,26 @@ function scrub(
147
147
  rootTable: Map<string, PrimitiveKind>,
148
148
  onRemove: (key: string) => void,
149
149
  ): void {
150
- const sortedKeys = Object.keys(mapping).sort((a, b) => a.localeCompare(b));
150
+ // Early exit: if no primitive types exist in the schema, there are no
151
+ // built-in methods to clean. Saves sorting + walking 10K+ keys.
152
+ if (rootTable.size === 0) return;
153
+
154
+ // Use direct comparison instead of localeCompare (3-5x faster for large arrays)
155
+ const sortedKeys = Object.keys(mapping).sort((a, b) =>
156
+ a < b ? -1 : a > b ? 1 : 0,
157
+ );
151
158
 
152
159
  for (const keyPath of sortedKeys) {
153
160
  const keyParts = getParts(keyPath);
154
161
  const prefixParts = buildPrefixParts(keyParts);
155
162
 
163
+ const firstPart = keyParts[0];
164
+ const firstPartBase = firstPart.includes('(')
165
+ ? firstPart.split('(')[0]
166
+ : firstPart;
156
167
  if (
157
- IGNORE_CLASSES_AND_OBJECTS.find(
158
- (m) => keyParts[0] === m || keyParts[0].startsWith(`${m}(`),
159
- )
168
+ IGNORE_CLASSES_AND_OBJECTS_SET.has(firstPart) ||
169
+ IGNORE_CLASSES_AND_OBJECTS_SET.has(firstPartBase)
160
170
  ) {
161
171
  delete mapping[keyPath];
162
172
  continue;