@codeyam/codeyam-cli 0.1.0-staging.036391e → 0.1.0-staging.039fa00

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 (588) hide show
  1. package/analyzer-template/.build-info.json +7 -7
  2. package/analyzer-template/log.txt +3 -3
  3. package/analyzer-template/package.json +19 -19
  4. package/analyzer-template/packages/ai/index.ts +1 -0
  5. package/analyzer-template/packages/ai/package.json +2 -2
  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/processExpression.ts +101 -0
  9. package/analyzer-template/packages/ai/src/lib/astScopes/sharedPatterns.ts +28 -0
  10. package/analyzer-template/packages/ai/src/lib/astScopes/types.ts +6 -0
  11. package/analyzer-template/packages/ai/src/lib/completionCall.ts +114 -113
  12. package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +435 -13
  13. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/coercePrimitivesToArraysBySchema.ts +62 -0
  14. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.ts +70 -19
  15. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/stripNullableMarkers.ts +35 -0
  16. package/analyzer-template/packages/ai/src/lib/dataStructureChunking.ts +40 -13
  17. package/analyzer-template/packages/ai/src/lib/generateEntityScenarioData.ts +110 -7
  18. package/analyzer-template/packages/ai/src/lib/generateExecutionFlows.ts +134 -2
  19. package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionals.ts +359 -142
  20. package/analyzer-template/packages/ai/src/lib/mergeJsonTypeDefinitions.ts +5 -0
  21. package/analyzer-template/packages/ai/src/lib/promptGenerators/collapseNullableObjects.ts +118 -0
  22. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.ts +24 -4
  23. package/analyzer-template/packages/analyze/src/lib/ProjectAnalyzer.ts +6 -0
  24. package/analyzer-template/packages/analyze/src/lib/asts/nodes/getNodeType.ts +1 -0
  25. package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.ts +18 -0
  26. package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities.ts +9 -1
  27. package/analyzer-template/packages/analyze/src/lib/files/analyze/dependencyResolver.ts +0 -6
  28. package/analyzer-template/packages/analyze/src/lib/files/analyze/findOrCreateEntity.ts +12 -0
  29. package/analyzer-template/packages/analyze/src/lib/files/scenarios/TransformationTracer.ts +65 -28
  30. package/analyzer-template/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.ts +50 -25
  31. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +83 -0
  32. package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +176 -80
  33. package/analyzer-template/packages/aws/package.json +10 -10
  34. package/analyzer-template/packages/database/index.ts +1 -0
  35. package/analyzer-template/packages/database/package.json +3 -3
  36. package/analyzer-template/packages/database/src/lib/analysisBranchToDb.ts +1 -1
  37. package/analyzer-template/packages/database/src/lib/analysisToDb.ts +1 -1
  38. package/analyzer-template/packages/database/src/lib/branchToDb.ts +1 -1
  39. package/analyzer-template/packages/database/src/lib/commitBranchToDb.ts +1 -1
  40. package/analyzer-template/packages/database/src/lib/commitToDb.ts +1 -1
  41. package/analyzer-template/packages/database/src/lib/fileToDb.ts +1 -1
  42. package/analyzer-template/packages/database/src/lib/kysely/db.ts +8 -0
  43. package/analyzer-template/packages/database/src/lib/kysely/tables/debugReportsTable.ts +1 -1
  44. package/analyzer-template/packages/database/src/lib/kysely/tables/editorScenariosTable.ts +62 -0
  45. package/analyzer-template/packages/database/src/lib/loadCommits.ts +31 -20
  46. package/analyzer-template/packages/database/src/lib/loadReadyToBeCapturedAnalyses.ts +0 -5
  47. package/analyzer-template/packages/database/src/lib/projectToDb.ts +1 -1
  48. package/analyzer-template/packages/database/src/lib/saveFiles.ts +1 -1
  49. package/analyzer-template/packages/database/src/lib/scenarioToDb.ts +1 -1
  50. package/analyzer-template/packages/database/src/lib/updateCommitMetadata.ts +151 -135
  51. package/analyzer-template/packages/database/src/lib/updateFreshAnalysisStatus.ts +58 -42
  52. package/analyzer-template/packages/database/src/lib/updateFreshAnalysisStatusWithScenarios.ts +81 -65
  53. package/analyzer-template/packages/database/src/lib/userScenarioToDb.ts +1 -1
  54. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.ts +29 -1
  55. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.ts +33 -5
  56. package/analyzer-template/packages/github/dist/database/index.d.ts +1 -0
  57. package/analyzer-template/packages/github/dist/database/index.d.ts.map +1 -1
  58. package/analyzer-template/packages/github/dist/database/index.js +1 -0
  59. package/analyzer-template/packages/github/dist/database/index.js.map +1 -1
  60. package/analyzer-template/packages/github/dist/database/src/lib/analysisBranchToDb.js +1 -1
  61. package/analyzer-template/packages/github/dist/database/src/lib/analysisBranchToDb.js.map +1 -1
  62. package/analyzer-template/packages/github/dist/database/src/lib/analysisToDb.js +1 -1
  63. package/analyzer-template/packages/github/dist/database/src/lib/analysisToDb.js.map +1 -1
  64. package/analyzer-template/packages/github/dist/database/src/lib/branchToDb.js +1 -1
  65. package/analyzer-template/packages/github/dist/database/src/lib/branchToDb.js.map +1 -1
  66. package/analyzer-template/packages/github/dist/database/src/lib/commitBranchToDb.js +1 -1
  67. package/analyzer-template/packages/github/dist/database/src/lib/commitBranchToDb.js.map +1 -1
  68. package/analyzer-template/packages/github/dist/database/src/lib/commitToDb.js +1 -1
  69. package/analyzer-template/packages/github/dist/database/src/lib/commitToDb.js.map +1 -1
  70. package/analyzer-template/packages/github/dist/database/src/lib/fileToDb.js +1 -1
  71. package/analyzer-template/packages/github/dist/database/src/lib/fileToDb.js.map +1 -1
  72. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts +2 -0
  73. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts.map +1 -1
  74. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js +5 -0
  75. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js.map +1 -1
  76. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.d.ts +1 -1
  77. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.d.ts +20 -0
  78. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.d.ts.map +1 -0
  79. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.js +45 -0
  80. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -0
  81. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts +5 -0
  82. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts.map +1 -1
  83. package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.d.ts.map +1 -1
  84. package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.js +23 -13
  85. package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.js.map +1 -1
  86. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.d.ts.map +1 -1
  87. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.js +1 -4
  88. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.js.map +1 -1
  89. package/analyzer-template/packages/github/dist/database/src/lib/projectToDb.js +1 -1
  90. package/analyzer-template/packages/github/dist/database/src/lib/projectToDb.js.map +1 -1
  91. package/analyzer-template/packages/github/dist/database/src/lib/saveFiles.js +1 -1
  92. package/analyzer-template/packages/github/dist/database/src/lib/saveFiles.js.map +1 -1
  93. package/analyzer-template/packages/github/dist/database/src/lib/scenarioToDb.js +1 -1
  94. package/analyzer-template/packages/github/dist/database/src/lib/scenarioToDb.js.map +1 -1
  95. package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.d.ts.map +1 -1
  96. package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js +100 -89
  97. package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js.map +1 -1
  98. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatus.d.ts.map +1 -1
  99. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatus.js +41 -30
  100. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatus.js.map +1 -1
  101. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatusWithScenarios.d.ts.map +1 -1
  102. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatusWithScenarios.js +68 -57
  103. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatusWithScenarios.js.map +1 -1
  104. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.d.ts.map +1 -1
  105. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js +29 -1
  106. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js.map +1 -1
  107. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.d.ts.map +1 -1
  108. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +33 -5
  109. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
  110. package/analyzer-template/packages/github/dist/types/src/types/ProjectMetadata.d.ts +1 -0
  111. package/analyzer-template/packages/github/dist/types/src/types/ProjectMetadata.d.ts.map +1 -1
  112. package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts +10 -0
  113. package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts.map +1 -1
  114. package/analyzer-template/packages/github/package.json +1 -1
  115. package/analyzer-template/packages/types/src/types/ProjectMetadata.ts +1 -0
  116. package/analyzer-template/packages/types/src/types/Scenario.ts +10 -0
  117. package/analyzer-template/packages/utils/dist/types/src/types/ProjectMetadata.d.ts +1 -0
  118. package/analyzer-template/packages/utils/dist/types/src/types/ProjectMetadata.d.ts.map +1 -1
  119. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts +10 -0
  120. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts.map +1 -1
  121. package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.d.ts.map +1 -1
  122. package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.js +98 -3
  123. package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.js.map +1 -1
  124. package/analyzer-template/packages/utils/src/lib/fs/rsyncCopy.ts +121 -3
  125. package/analyzer-template/playwright/captureFromUrl.ts +89 -82
  126. package/analyzer-template/project/constructMockCode.ts +170 -50
  127. package/analyzer-template/project/orchestrateCapture.ts +4 -1
  128. package/analyzer-template/project/reconcileMockDataKeys.ts +19 -14
  129. package/analyzer-template/project/start.ts +3 -0
  130. package/analyzer-template/project/startScenarioCapture.ts +9 -0
  131. package/analyzer-template/project/writeClientLogRoute.ts +125 -0
  132. package/analyzer-template/project/writeMockDataTsx.ts +17 -0
  133. package/analyzer-template/project/writeScenarioComponents.ts +110 -17
  134. package/analyzer-template/tsconfig.json +13 -1
  135. package/background/src/lib/local/createLocalAnalyzer.js +1 -1
  136. package/background/src/lib/local/createLocalAnalyzer.js.map +1 -1
  137. package/background/src/lib/virtualized/project/constructMockCode.js +145 -41
  138. package/background/src/lib/virtualized/project/constructMockCode.js.map +1 -1
  139. package/background/src/lib/virtualized/project/orchestrateCapture.js +4 -1
  140. package/background/src/lib/virtualized/project/orchestrateCapture.js.map +1 -1
  141. package/background/src/lib/virtualized/project/reconcileMockDataKeys.js +17 -11
  142. package/background/src/lib/virtualized/project/reconcileMockDataKeys.js.map +1 -1
  143. package/background/src/lib/virtualized/project/start.js +2 -0
  144. package/background/src/lib/virtualized/project/start.js.map +1 -1
  145. package/background/src/lib/virtualized/project/startScenarioCapture.js +5 -0
  146. package/background/src/lib/virtualized/project/startScenarioCapture.js.map +1 -1
  147. package/background/src/lib/virtualized/project/writeClientLogRoute.js +110 -0
  148. package/background/src/lib/virtualized/project/writeClientLogRoute.js.map +1 -0
  149. package/background/src/lib/virtualized/project/writeMockDataTsx.js +12 -0
  150. package/background/src/lib/virtualized/project/writeMockDataTsx.js.map +1 -1
  151. package/background/src/lib/virtualized/project/writeScenarioComponents.js +83 -12
  152. package/background/src/lib/virtualized/project/writeScenarioComponents.js.map +1 -1
  153. package/codeyam-cli/scripts/apply-setup.js +209 -12
  154. package/codeyam-cli/scripts/apply-setup.js.map +1 -1
  155. package/codeyam-cli/src/cli.js +33 -24
  156. package/codeyam-cli/src/cli.js.map +1 -1
  157. package/codeyam-cli/src/codeyam-cli.js +18 -2
  158. package/codeyam-cli/src/codeyam-cli.js.map +1 -1
  159. package/codeyam-cli/src/commands/analyze.js +21 -9
  160. package/codeyam-cli/src/commands/analyze.js.map +1 -1
  161. package/codeyam-cli/src/commands/baseline.js +2 -0
  162. package/codeyam-cli/src/commands/baseline.js.map +1 -1
  163. package/codeyam-cli/src/commands/debug.js +2 -0
  164. package/codeyam-cli/src/commands/debug.js.map +1 -1
  165. package/codeyam-cli/src/commands/default.js +87 -21
  166. package/codeyam-cli/src/commands/default.js.map +1 -1
  167. package/codeyam-cli/src/commands/editor.js +1839 -0
  168. package/codeyam-cli/src/commands/editor.js.map +1 -0
  169. package/codeyam-cli/src/commands/init.js +81 -260
  170. package/codeyam-cli/src/commands/init.js.map +1 -1
  171. package/codeyam-cli/src/commands/memory.js +95 -81
  172. package/codeyam-cli/src/commands/memory.js.map +1 -1
  173. package/codeyam-cli/src/commands/recapture.js +2 -0
  174. package/codeyam-cli/src/commands/recapture.js.map +1 -1
  175. package/codeyam-cli/src/commands/setup-sandbox.js +2 -0
  176. package/codeyam-cli/src/commands/setup-sandbox.js.map +1 -1
  177. package/codeyam-cli/src/commands/setup-simulations.js +284 -0
  178. package/codeyam-cli/src/commands/setup-simulations.js.map +1 -0
  179. package/codeyam-cli/src/commands/test-startup.js +2 -0
  180. package/codeyam-cli/src/commands/test-startup.js.map +1 -1
  181. package/codeyam-cli/src/commands/verify.js +14 -2
  182. package/codeyam-cli/src/commands/verify.js.map +1 -1
  183. package/codeyam-cli/src/utils/__tests__/editorAudit.test.js +246 -0
  184. package/codeyam-cli/src/utils/__tests__/editorAudit.test.js.map +1 -0
  185. package/codeyam-cli/src/utils/__tests__/editorDevServer.test.js +126 -0
  186. package/codeyam-cli/src/utils/__tests__/editorDevServer.test.js.map +1 -0
  187. package/codeyam-cli/src/utils/__tests__/editorJournal.test.js +295 -0
  188. package/codeyam-cli/src/utils/__tests__/editorJournal.test.js.map +1 -0
  189. package/codeyam-cli/src/utils/__tests__/editorMockState.test.js +270 -0
  190. package/codeyam-cli/src/utils/__tests__/editorMockState.test.js.map +1 -0
  191. package/codeyam-cli/src/utils/__tests__/editorPreloadHelpers.test.js +100 -0
  192. package/codeyam-cli/src/utils/__tests__/editorPreloadHelpers.test.js.map +1 -0
  193. package/codeyam-cli/src/utils/__tests__/editorPreview.test.js +147 -0
  194. package/codeyam-cli/src/utils/__tests__/editorPreview.test.js.map +1 -0
  195. package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js +76 -0
  196. package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js.map +1 -0
  197. package/codeyam-cli/src/utils/__tests__/git.editor.test.js +134 -0
  198. package/codeyam-cli/src/utils/__tests__/git.editor.test.js.map +1 -0
  199. package/codeyam-cli/src/utils/__tests__/npmVersionCheck.test.js +185 -0
  200. package/codeyam-cli/src/utils/__tests__/npmVersionCheck.test.js.map +1 -0
  201. package/codeyam-cli/src/utils/__tests__/pathIgnoring.test.js +9 -0
  202. package/codeyam-cli/src/utils/__tests__/pathIgnoring.test.js.map +1 -1
  203. package/codeyam-cli/src/utils/__tests__/project.test.js +65 -0
  204. package/codeyam-cli/src/utils/__tests__/project.test.js.map +1 -0
  205. package/codeyam-cli/src/utils/__tests__/scenarioMarkers.test.js +121 -0
  206. package/codeyam-cli/src/utils/__tests__/scenarioMarkers.test.js.map +1 -0
  207. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +154 -86
  208. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js.map +1 -1
  209. package/codeyam-cli/src/utils/analyzer.js +7 -0
  210. package/codeyam-cli/src/utils/analyzer.js.map +1 -1
  211. package/codeyam-cli/src/utils/backgroundServer.js +109 -26
  212. package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
  213. package/codeyam-cli/src/utils/buildFlags.js +4 -0
  214. package/codeyam-cli/src/utils/buildFlags.js.map +1 -0
  215. package/codeyam-cli/src/utils/devModeEvents.js +40 -0
  216. package/codeyam-cli/src/utils/devModeEvents.js.map +1 -0
  217. package/codeyam-cli/src/utils/editorAudit.js +82 -0
  218. package/codeyam-cli/src/utils/editorAudit.js.map +1 -0
  219. package/codeyam-cli/src/utils/editorDevServer.js +98 -0
  220. package/codeyam-cli/src/utils/editorDevServer.js.map +1 -0
  221. package/codeyam-cli/src/utils/editorJournal.js +137 -0
  222. package/codeyam-cli/src/utils/editorJournal.js.map +1 -0
  223. package/codeyam-cli/src/utils/editorMockState.js +248 -0
  224. package/codeyam-cli/src/utils/editorMockState.js.map +1 -0
  225. package/codeyam-cli/src/utils/editorPreloadHelpers.js +64 -0
  226. package/codeyam-cli/src/utils/editorPreloadHelpers.js.map +1 -0
  227. package/codeyam-cli/src/utils/editorPreview.js +66 -0
  228. package/codeyam-cli/src/utils/editorPreview.js.map +1 -0
  229. package/codeyam-cli/src/utils/editorScenarios.js +56 -0
  230. package/codeyam-cli/src/utils/editorScenarios.js.map +1 -0
  231. package/codeyam-cli/src/utils/fileMetadata.js +5 -0
  232. package/codeyam-cli/src/utils/fileMetadata.js.map +1 -1
  233. package/codeyam-cli/src/utils/fileWatcher.js +25 -9
  234. package/codeyam-cli/src/utils/fileWatcher.js.map +1 -1
  235. package/codeyam-cli/src/utils/generateReport.js +2 -2
  236. package/codeyam-cli/src/utils/git.js +103 -0
  237. package/codeyam-cli/src/utils/git.js.map +1 -1
  238. package/codeyam-cli/src/utils/install-skills.js +87 -65
  239. package/codeyam-cli/src/utils/install-skills.js.map +1 -1
  240. package/codeyam-cli/src/utils/interactiveSyncWatcher.js +126 -0
  241. package/codeyam-cli/src/utils/interactiveSyncWatcher.js.map +1 -0
  242. package/codeyam-cli/src/utils/labsAutoCheck.js +0 -29
  243. package/codeyam-cli/src/utils/labsAutoCheck.js.map +1 -1
  244. package/codeyam-cli/src/utils/npmVersionCheck.js +76 -0
  245. package/codeyam-cli/src/utils/npmVersionCheck.js.map +1 -0
  246. package/codeyam-cli/src/utils/pathIgnoring.js +19 -7
  247. package/codeyam-cli/src/utils/pathIgnoring.js.map +1 -1
  248. package/codeyam-cli/src/utils/progress.js +7 -0
  249. package/codeyam-cli/src/utils/progress.js.map +1 -1
  250. package/codeyam-cli/src/utils/project.js +15 -5
  251. package/codeyam-cli/src/utils/project.js.map +1 -1
  252. package/codeyam-cli/src/utils/queue/__tests__/heartbeat.test.js +11 -11
  253. package/codeyam-cli/src/utils/queue/__tests__/heartbeat.test.js.map +1 -1
  254. package/codeyam-cli/src/utils/queue/__tests__/manager.test.js +22 -0
  255. package/codeyam-cli/src/utils/queue/__tests__/manager.test.js.map +1 -1
  256. package/codeyam-cli/src/utils/queue/heartbeat.js +13 -5
  257. package/codeyam-cli/src/utils/queue/heartbeat.js.map +1 -1
  258. package/codeyam-cli/src/utils/queue/job.js +70 -1
  259. package/codeyam-cli/src/utils/queue/job.js.map +1 -1
  260. package/codeyam-cli/src/utils/queue/manager.js +7 -6
  261. package/codeyam-cli/src/utils/queue/manager.js.map +1 -1
  262. package/codeyam-cli/src/utils/requireSimulations.js +10 -0
  263. package/codeyam-cli/src/utils/requireSimulations.js.map +1 -0
  264. package/codeyam-cli/src/utils/ruleReflection/__tests__/contextBuilder.test.js +7 -8
  265. package/codeyam-cli/src/utils/ruleReflection/__tests__/contextBuilder.test.js.map +1 -1
  266. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/assertRules.js +1 -1
  267. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/assertRules.js.map +1 -1
  268. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/setupTempProject.js +0 -1
  269. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/setupTempProject.js.map +1 -1
  270. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/ruleReflectionE2E.test.js +97 -6
  271. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/ruleReflectionE2E.test.js.map +1 -1
  272. package/codeyam-cli/src/utils/ruleReflection/__tests__/promptBuilder.test.js +4 -6
  273. package/codeyam-cli/src/utils/ruleReflection/__tests__/promptBuilder.test.js.map +1 -1
  274. package/codeyam-cli/src/utils/ruleReflection/contextBuilder.js +3 -3
  275. package/codeyam-cli/src/utils/ruleReflection/contextBuilder.js.map +1 -1
  276. package/codeyam-cli/src/utils/rules/__tests__/parser.test.js +83 -0
  277. package/codeyam-cli/src/utils/rules/__tests__/parser.test.js.map +1 -0
  278. package/codeyam-cli/src/utils/rules/__tests__/pathMatcher.test.js +118 -0
  279. package/codeyam-cli/src/utils/rules/__tests__/pathMatcher.test.js.map +1 -0
  280. package/codeyam-cli/src/utils/rules/__tests__/rulePlacement.test.js +72 -0
  281. package/codeyam-cli/src/utils/rules/__tests__/rulePlacement.test.js.map +1 -0
  282. package/codeyam-cli/src/utils/rules/__tests__/ruleState.test.js +23 -23
  283. package/codeyam-cli/src/utils/rules/__tests__/ruleState.test.js.map +1 -1
  284. package/codeyam-cli/src/utils/rules/__tests__/sourceFiles.test.js +76 -0
  285. package/codeyam-cli/src/utils/rules/__tests__/sourceFiles.test.js.map +1 -0
  286. package/codeyam-cli/src/utils/rules/index.js +1 -0
  287. package/codeyam-cli/src/utils/rules/index.js.map +1 -1
  288. package/codeyam-cli/src/utils/rules/parser.js +19 -4
  289. package/codeyam-cli/src/utils/rules/parser.js.map +1 -1
  290. package/codeyam-cli/src/utils/rules/pathMatcher.js +34 -3
  291. package/codeyam-cli/src/utils/rules/pathMatcher.js.map +1 -1
  292. package/codeyam-cli/src/utils/rules/rulePlacement.js +65 -0
  293. package/codeyam-cli/src/utils/rules/rulePlacement.js.map +1 -0
  294. package/codeyam-cli/src/utils/rules/ruleState.js +10 -10
  295. package/codeyam-cli/src/utils/rules/ruleState.js.map +1 -1
  296. package/codeyam-cli/src/utils/rules/sourceFiles.js +43 -0
  297. package/codeyam-cli/src/utils/rules/sourceFiles.js.map +1 -0
  298. package/codeyam-cli/src/utils/rules/staleness.js +6 -6
  299. package/codeyam-cli/src/utils/rules/staleness.js.map +1 -1
  300. package/codeyam-cli/src/utils/scenarioMarkers.js +134 -0
  301. package/codeyam-cli/src/utils/scenarioMarkers.js.map +1 -0
  302. package/codeyam-cli/src/utils/serverState.js +64 -12
  303. package/codeyam-cli/src/utils/serverState.js.map +1 -1
  304. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +61 -43
  305. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js.map +1 -1
  306. package/codeyam-cli/src/utils/simulationGateMiddleware.js +159 -0
  307. package/codeyam-cli/src/utils/simulationGateMiddleware.js.map +1 -0
  308. package/codeyam-cli/src/utils/syncMocksMiddleware.js +5 -24
  309. package/codeyam-cli/src/utils/syncMocksMiddleware.js.map +1 -1
  310. package/codeyam-cli/src/utils/testRunner.js +158 -0
  311. package/codeyam-cli/src/utils/testRunner.js.map +1 -0
  312. package/codeyam-cli/src/utils/transcriptPruning.js +67 -0
  313. package/codeyam-cli/src/utils/transcriptPruning.js.map +1 -0
  314. package/codeyam-cli/src/utils/versionInfo.js +46 -0
  315. package/codeyam-cli/src/utils/versionInfo.js.map +1 -1
  316. package/codeyam-cli/src/utils/webappDetection.js +14 -2
  317. package/codeyam-cli/src/utils/webappDetection.js.map +1 -1
  318. package/codeyam-cli/src/webserver/__tests__/dependency-smoke.test.js +66 -0
  319. package/codeyam-cli/src/webserver/__tests__/dependency-smoke.test.js.map +1 -0
  320. package/codeyam-cli/src/webserver/app/lib/database.js +55 -30
  321. package/codeyam-cli/src/webserver/app/lib/database.js.map +1 -1
  322. package/codeyam-cli/src/webserver/app/lib/dbNotifier.js.map +1 -1
  323. package/codeyam-cli/src/webserver/backgroundServer.js +144 -25
  324. package/codeyam-cli/src/webserver/backgroundServer.js.map +1 -1
  325. package/codeyam-cli/src/webserver/bootstrap.js +11 -0
  326. package/codeyam-cli/src/webserver/bootstrap.js.map +1 -1
  327. package/codeyam-cli/src/webserver/build/client/assets/{CopyButton-CA3JxPb7.js → CopyButton-DmJveP3T.js} +1 -1
  328. package/codeyam-cli/src/webserver/build/client/assets/{EntityItem-B86KKU7e.js → EntityItem-C76mRRiF.js} +1 -1
  329. package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeBadge-B5ctlSYt.js → EntityTypeBadge-g3saevPb.js} +1 -1
  330. package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeIcon-BqY8gDAW.js → EntityTypeIcon-CobE682z.js} +1 -1
  331. package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-Bu6c6aDe.js +1 -0
  332. package/codeyam-cli/src/webserver/build/client/assets/{InteractivePreview-BDhPilK7.js → InteractivePreview-DYFW3lDD.js} +3 -3
  333. package/codeyam-cli/src/webserver/build/client/assets/{LibraryFunctionPreview-VeqEBv9v.js → LibraryFunctionPreview-DLeucoVX.js} +1 -1
  334. package/codeyam-cli/src/webserver/build/client/assets/{LoadingDots-Bs7Nn1Jr.js → LoadingDots-BU_OAEMP.js} +1 -1
  335. package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-Bm3PmcCz.js → LogViewer-ceAyBX-H.js} +1 -1
  336. package/codeyam-cli/src/webserver/build/client/assets/{ReportIssueModal-C6PKeMYR.js → ReportIssueModal-djPLI-WV.js} +2 -2
  337. package/codeyam-cli/src/webserver/build/client/assets/{SafeScreenshot-Gq3Ocjo6.js → SafeScreenshot-BED4B6sP.js} +1 -1
  338. package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-BNLaXBHR.js → ScenarioViewer-B76aig_2.js} +2 -2
  339. package/codeyam-cli/src/webserver/build/client/assets/Spinner-Bb5uFQ5V.js +34 -0
  340. package/codeyam-cli/src/webserver/build/client/assets/Terminal-Dnj5CY9R.js +41 -0
  341. package/codeyam-cli/src/webserver/build/client/assets/{TruncatedFilePath-CiwXDxLh.js → TruncatedFilePath-C8OKAR5x.js} +1 -1
  342. package/codeyam-cli/src/webserver/build/client/assets/{_index-B3TDXxnk.js → _index-C96V0n15.js} +1 -1
  343. package/codeyam-cli/src/webserver/build/client/assets/{activity.(_tab)-BtBFH820.js → activity.(_tab)-BpKzcsJz.js} +1 -1
  344. package/codeyam-cli/src/webserver/build/client/assets/addon-fit-CUXOrorO.js +1 -0
  345. package/codeyam-cli/src/webserver/build/client/assets/addon-web-links-Duc5hnl7.js +1 -0
  346. package/codeyam-cli/src/webserver/build/client/assets/agent-transcripts-D9hemwl6.js +22 -0
  347. package/codeyam-cli/src/webserver/build/client/assets/api.editor-audit-l0sNRNKZ.js +1 -0
  348. package/codeyam-cli/src/webserver/build/client/assets/api.editor-capture-scenario-l0sNRNKZ.js +1 -0
  349. package/codeyam-cli/src/webserver/build/client/assets/api.editor-client-errors-l0sNRNKZ.js +1 -0
  350. package/codeyam-cli/src/webserver/build/client/assets/api.editor-commit-l0sNRNKZ.js +1 -0
  351. package/codeyam-cli/src/webserver/build/client/assets/api.editor-dev-server-l0sNRNKZ.js +1 -0
  352. package/codeyam-cli/src/webserver/build/client/assets/api.editor-entity-status-l0sNRNKZ.js +1 -0
  353. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-entry-l0sNRNKZ.js +1 -0
  354. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-image._-l0sNRNKZ.js +1 -0
  355. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-l0sNRNKZ.js +1 -0
  356. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-screenshot-l0sNRNKZ.js +1 -0
  357. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-update-l0sNRNKZ.js +1 -0
  358. package/codeyam-cli/src/webserver/build/client/assets/api.editor-load-commit-l0sNRNKZ.js +1 -0
  359. package/codeyam-cli/src/webserver/build/client/assets/api.editor-refresh-l0sNRNKZ.js +1 -0
  360. package/codeyam-cli/src/webserver/build/client/assets/api.editor-register-scenario-l0sNRNKZ.js +1 -0
  361. package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-data-l0sNRNKZ.js +1 -0
  362. package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-image._-l0sNRNKZ.js +1 -0
  363. package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenarios-l0sNRNKZ.js +1 -0
  364. package/codeyam-cli/src/webserver/build/client/assets/api.editor-switch-scenario-l0sNRNKZ.js +1 -0
  365. package/codeyam-cli/src/webserver/build/client/assets/api.editor-test-results-l0sNRNKZ.js +1 -0
  366. package/codeyam-cli/src/webserver/build/client/assets/api.rule-path-l0sNRNKZ.js +1 -0
  367. package/codeyam-cli/src/webserver/build/client/assets/{book-open-PttOB2SF.js → book-open-D_nMCFmP.js} +1 -1
  368. package/codeyam-cli/src/webserver/build/client/assets/{chevron-down-TJp6ofnp.js → chevron-down-BH2h1Ea2.js} +1 -1
  369. package/codeyam-cli/src/webserver/build/client/assets/{chunk-JZWAC4HX-JE9ZIoBl.js → chunk-JZWAC4HX-C4pqxYJB.js} +9 -9
  370. package/codeyam-cli/src/webserver/build/client/assets/{circle-check-CXhHQYrI.js → circle-check-DyIKORY6.js} +1 -1
  371. package/codeyam-cli/src/webserver/build/client/assets/{copy-6y9ALfGT.js → copy-NDbZjXao.js} +1 -1
  372. package/codeyam-cli/src/webserver/build/client/assets/{createLucideIcon-Ca9fAY46.js → createLucideIcon-CMT1jU2q.js} +1 -1
  373. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-BiM6z3Do.js +1 -0
  374. package/codeyam-cli/src/webserver/build/client/assets/editor-D1DAKXtT.js +8 -0
  375. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-n38keI1k.js → entity._sha._-CrjR3zZW.js} +10 -10
  376. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.dev-DkzqFzFj.js +6 -0
  377. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-C28BiQzt.js +6 -0
  378. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-p9hhkjJM.js +6 -0
  379. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.edit._scenarioId-38yPijoD.js → entity._sha_.edit._scenarioId-BMvVHNXU.js} +2 -2
  380. package/codeyam-cli/src/webserver/build/client/assets/{entry.client-BSHEfydn.js → entry.client-DTvKq3TY.js} +1 -1
  381. package/codeyam-cli/src/webserver/build/client/assets/{fileTableUtils-DCPhhSMo.js → fileTableUtils-cPo8LiG3.js} +1 -1
  382. package/codeyam-cli/src/webserver/build/client/assets/{files-0N0YJQv7.js → files-DO4CZ16O.js} +1 -1
  383. package/codeyam-cli/src/webserver/build/client/assets/{git-DXnyr8uP.js → git-CFCTYk9I.js} +1 -1
  384. package/codeyam-cli/src/webserver/build/client/assets/globals-B17TBSS6.css +1 -0
  385. package/codeyam-cli/src/webserver/build/client/assets/{index-ChN9-fAY.js → index-10oVnAAH.js} +1 -1
  386. package/codeyam-cli/src/webserver/build/client/assets/{index-CcsFv748.js → index-BcvgDzbZ.js} +1 -1
  387. package/codeyam-cli/src/webserver/build/client/assets/labs-Zk7ryIM1.js +1 -0
  388. package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-CTqLEAGU.js → loader-circle-BAXYRVEO.js} +1 -1
  389. package/codeyam-cli/src/webserver/build/client/assets/manifest-a632de18.js +1 -0
  390. package/codeyam-cli/src/webserver/build/client/assets/memory-Dg0mvYrI.js +96 -0
  391. package/codeyam-cli/src/webserver/build/client/assets/{pause-D6vreykR.js → pause-DTAcYxBt.js} +1 -1
  392. package/codeyam-cli/src/webserver/build/client/assets/root-DUKqhFlb.js +67 -0
  393. package/codeyam-cli/src/webserver/build/client/assets/{search-B8VUL8nl.js → search-fKo7v0Zo.js} +1 -1
  394. package/codeyam-cli/src/webserver/build/client/assets/settings-DfuTtcJP.js +1 -0
  395. package/codeyam-cli/src/webserver/build/client/assets/{simulations-CPoAg7Zo.js → simulations-B3aOzpCZ.js} +1 -1
  396. package/codeyam-cli/src/webserver/build/client/assets/{terminal-BrCP7uQo.js → terminal-BG4heKCG.js} +1 -1
  397. package/codeyam-cli/src/webserver/build/client/assets/{triangle-alert-BZz2NjYa.js → triangle-alert-DtSmdtM4.js} +1 -1
  398. package/codeyam-cli/src/webserver/build/client/assets/{useCustomSizes-DNwUduNu.js → useCustomSizes-ByhSyh0W.js} +1 -1
  399. package/codeyam-cli/src/webserver/build/client/assets/useLastLogLine-C14nCb1q.js +2 -0
  400. package/codeyam-cli/src/webserver/build/client/assets/{useReportContext-CpZgwliL.js → useReportContext-O-jkvSPx.js} +1 -1
  401. package/codeyam-cli/src/webserver/build/client/assets/{useToast-Bv9JFvUO.js → useToast-9FIWuYfK.js} +1 -1
  402. package/codeyam-cli/src/webserver/build/client/assets/xterm-BqvuqXEL.js +27 -0
  403. package/codeyam-cli/src/webserver/build/server/assets/index-HfLydfDq.js +1 -0
  404. package/codeyam-cli/src/webserver/build/server/assets/server-build-CUu_F-oo.js +366 -0
  405. package/codeyam-cli/src/webserver/build/server/index.js +1 -1
  406. package/codeyam-cli/src/webserver/build-info.json +5 -5
  407. package/codeyam-cli/src/webserver/devServer.js +39 -5
  408. package/codeyam-cli/src/webserver/devServer.js.map +1 -1
  409. package/codeyam-cli/src/webserver/editorProxy.js +440 -0
  410. package/codeyam-cli/src/webserver/editorProxy.js.map +1 -0
  411. package/codeyam-cli/src/webserver/scripts/codeyam-preload.mjs +175 -0
  412. package/codeyam-cli/src/webserver/scripts/journalCapture.ts +140 -0
  413. package/codeyam-cli/src/webserver/server.js +226 -1
  414. package/codeyam-cli/src/webserver/server.js.map +1 -1
  415. package/codeyam-cli/src/webserver/terminalServer.js +698 -0
  416. package/codeyam-cli/src/webserver/terminalServer.js.map +1 -0
  417. package/codeyam-cli/templates/codeyam-editor-claude.md +68 -0
  418. package/codeyam-cli/templates/codeyam-memory-hook.sh +14 -14
  419. package/codeyam-cli/templates/commands/codeyam-diagnose.md +481 -0
  420. package/codeyam-cli/templates/editor-step-hook.py +147 -0
  421. package/codeyam-cli/templates/hooks/staleness-check.sh +43 -0
  422. package/codeyam-cli/templates/isolation-route/next-app.tsx.template +80 -0
  423. package/codeyam-cli/templates/isolation-route/next-pages.tsx.template +79 -0
  424. package/codeyam-cli/templates/isolation-route/vite-react.tsx.template +78 -0
  425. package/codeyam-cli/templates/msw/browser-setup.ts.template +47 -0
  426. package/codeyam-cli/templates/msw/handler-router.ts.template +47 -0
  427. package/codeyam-cli/templates/msw/server-setup.ts.template +52 -0
  428. package/codeyam-cli/templates/nextjs-prisma-sqlite/PRISMA_SETUP.md +84 -0
  429. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/api/todos/route.ts +17 -0
  430. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/globals.css +26 -0
  431. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/layout.tsx +34 -0
  432. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/lib/prisma.ts +19 -0
  433. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/page.tsx +10 -0
  434. package/codeyam-cli/templates/nextjs-prisma-sqlite/eslint.config.mjs +11 -0
  435. package/codeyam-cli/templates/nextjs-prisma-sqlite/gitignore +43 -0
  436. package/codeyam-cli/templates/nextjs-prisma-sqlite/next.config.ts +14 -0
  437. package/codeyam-cli/templates/nextjs-prisma-sqlite/package.json +35 -0
  438. package/codeyam-cli/templates/nextjs-prisma-sqlite/postcss.config.mjs +7 -0
  439. package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma/schema.prisma +27 -0
  440. package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma/seed.ts +37 -0
  441. package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma.config.ts +12 -0
  442. package/codeyam-cli/templates/nextjs-prisma-sqlite/tsconfig.json +34 -0
  443. package/codeyam-cli/templates/prompts/conversation-guidance.txt +44 -0
  444. package/codeyam-cli/templates/prompts/conversation-prompt.txt +28 -0
  445. package/codeyam-cli/templates/prompts/interruption-prompt.txt +31 -0
  446. package/codeyam-cli/templates/prompts/stale-rules-prompt.txt +24 -0
  447. package/codeyam-cli/templates/rule-notification-hook.py +44 -17
  448. package/codeyam-cli/templates/rule-reflection-hook.py +88 -31
  449. package/codeyam-cli/templates/rules-instructions.md +45 -90
  450. package/codeyam-cli/templates/{codeyam:debug.md → skills/codeyam-debug/SKILL.md} +1 -1
  451. package/codeyam-cli/templates/skills/codeyam-dev-mode/SKILL.md +237 -0
  452. package/codeyam-cli/templates/skills/codeyam-editor/SKILL.md +69 -0
  453. package/codeyam-cli/templates/{codeyam:memory.md → skills/codeyam-memory/SKILL.md} +231 -24
  454. package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/deprecated-prompt.md +100 -0
  455. package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/detect-deprecated-patterns.sh +108 -0
  456. package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/find-exports.sh +69 -0
  457. package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/misleading-api-prompt.md +117 -0
  458. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/analyze-prompt.md +46 -0
  459. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/cleanup.sh +12 -0
  460. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/filter.jq +45 -0
  461. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/preprocess.sh +139 -0
  462. package/codeyam-cli/templates/{codeyam:new-rule.md → skills/codeyam-new-rule/SKILL.md} +1 -3
  463. package/codeyam-cli/templates/{codeyam:setup.md → skills/codeyam-setup/SKILL.md} +13 -1
  464. package/codeyam-cli/templates/{codeyam:sim.md → skills/codeyam-sim/SKILL.md} +1 -1
  465. package/codeyam-cli/templates/{codeyam:test.md → skills/codeyam-test/SKILL.md} +1 -1
  466. package/codeyam-cli/templates/{codeyam:verify.md → skills/codeyam-verify/SKILL.md} +1 -1
  467. package/package.json +15 -13
  468. package/packages/ai/index.js +1 -1
  469. package/packages/ai/index.js.map +1 -1
  470. package/packages/ai/src/lib/analyzeScope.js +14 -0
  471. package/packages/ai/src/lib/analyzeScope.js.map +1 -1
  472. package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js +22 -4
  473. package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js.map +1 -1
  474. package/packages/ai/src/lib/astScopes/processExpression.js +78 -1
  475. package/packages/ai/src/lib/astScopes/processExpression.js.map +1 -1
  476. package/packages/ai/src/lib/astScopes/sharedPatterns.js +25 -0
  477. package/packages/ai/src/lib/astScopes/sharedPatterns.js.map +1 -1
  478. package/packages/ai/src/lib/completionCall.js +10 -7
  479. package/packages/ai/src/lib/completionCall.js.map +1 -1
  480. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +362 -10
  481. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
  482. package/packages/ai/src/lib/dataStructure/helpers/coercePrimitivesToArraysBySchema.js +54 -0
  483. package/packages/ai/src/lib/dataStructure/helpers/coercePrimitivesToArraysBySchema.js.map +1 -0
  484. package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js +59 -17
  485. package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js.map +1 -1
  486. package/packages/ai/src/lib/dataStructure/helpers/stripNullableMarkers.js +34 -0
  487. package/packages/ai/src/lib/dataStructure/helpers/stripNullableMarkers.js.map +1 -0
  488. package/packages/ai/src/lib/dataStructureChunking.js +30 -11
  489. package/packages/ai/src/lib/dataStructureChunking.js.map +1 -1
  490. package/packages/ai/src/lib/generateEntityScenarioData.js +79 -5
  491. package/packages/ai/src/lib/generateEntityScenarioData.js.map +1 -1
  492. package/packages/ai/src/lib/generateExecutionFlows.js +97 -2
  493. package/packages/ai/src/lib/generateExecutionFlows.js.map +1 -1
  494. package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js +242 -81
  495. package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js.map +1 -1
  496. package/packages/ai/src/lib/mergeJsonTypeDefinitions.js +5 -0
  497. package/packages/ai/src/lib/mergeJsonTypeDefinitions.js.map +1 -1
  498. package/packages/ai/src/lib/promptGenerators/collapseNullableObjects.js +97 -0
  499. package/packages/ai/src/lib/promptGenerators/collapseNullableObjects.js.map +1 -0
  500. package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js +17 -2
  501. package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js.map +1 -1
  502. package/packages/analyze/src/lib/ProjectAnalyzer.js +3 -0
  503. package/packages/analyze/src/lib/ProjectAnalyzer.js.map +1 -1
  504. package/packages/analyze/src/lib/asts/nodes/getNodeType.js +1 -0
  505. package/packages/analyze/src/lib/asts/nodes/getNodeType.js.map +1 -1
  506. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js +11 -1
  507. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js.map +1 -1
  508. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js +8 -1
  509. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js.map +1 -1
  510. package/packages/analyze/src/lib/files/analyze/dependencyResolver.js +0 -5
  511. package/packages/analyze/src/lib/files/analyze/dependencyResolver.js.map +1 -1
  512. package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js +9 -0
  513. package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js.map +1 -1
  514. package/packages/analyze/src/lib/files/scenarios/TransformationTracer.js +54 -27
  515. package/packages/analyze/src/lib/files/scenarios/TransformationTracer.js.map +1 -1
  516. package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js +42 -13
  517. package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js.map +1 -1
  518. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +65 -0
  519. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
  520. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +141 -71
  521. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js.map +1 -1
  522. package/packages/database/index.js +1 -0
  523. package/packages/database/index.js.map +1 -1
  524. package/packages/database/src/lib/analysisBranchToDb.js +1 -1
  525. package/packages/database/src/lib/analysisBranchToDb.js.map +1 -1
  526. package/packages/database/src/lib/analysisToDb.js +1 -1
  527. package/packages/database/src/lib/analysisToDb.js.map +1 -1
  528. package/packages/database/src/lib/branchToDb.js +1 -1
  529. package/packages/database/src/lib/branchToDb.js.map +1 -1
  530. package/packages/database/src/lib/commitBranchToDb.js +1 -1
  531. package/packages/database/src/lib/commitBranchToDb.js.map +1 -1
  532. package/packages/database/src/lib/commitToDb.js +1 -1
  533. package/packages/database/src/lib/commitToDb.js.map +1 -1
  534. package/packages/database/src/lib/fileToDb.js +1 -1
  535. package/packages/database/src/lib/fileToDb.js.map +1 -1
  536. package/packages/database/src/lib/kysely/db.js +5 -0
  537. package/packages/database/src/lib/kysely/db.js.map +1 -1
  538. package/packages/database/src/lib/kysely/tables/editorScenariosTable.js +45 -0
  539. package/packages/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -0
  540. package/packages/database/src/lib/loadCommits.js +23 -13
  541. package/packages/database/src/lib/loadCommits.js.map +1 -1
  542. package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.js +1 -4
  543. package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.js.map +1 -1
  544. package/packages/database/src/lib/projectToDb.js +1 -1
  545. package/packages/database/src/lib/projectToDb.js.map +1 -1
  546. package/packages/database/src/lib/saveFiles.js +1 -1
  547. package/packages/database/src/lib/saveFiles.js.map +1 -1
  548. package/packages/database/src/lib/scenarioToDb.js +1 -1
  549. package/packages/database/src/lib/scenarioToDb.js.map +1 -1
  550. package/packages/database/src/lib/updateCommitMetadata.js +100 -89
  551. package/packages/database/src/lib/updateCommitMetadata.js.map +1 -1
  552. package/packages/database/src/lib/updateFreshAnalysisStatus.js +41 -30
  553. package/packages/database/src/lib/updateFreshAnalysisStatus.js.map +1 -1
  554. package/packages/database/src/lib/updateFreshAnalysisStatusWithScenarios.js +68 -57
  555. package/packages/database/src/lib/updateFreshAnalysisStatusWithScenarios.js.map +1 -1
  556. package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js +29 -1
  557. package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js.map +1 -1
  558. package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +33 -5
  559. package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
  560. package/packages/utils/src/lib/fs/rsyncCopy.js +98 -3
  561. package/packages/utils/src/lib/fs/rsyncCopy.js.map +1 -1
  562. package/scripts/npm-post-install.cjs +34 -0
  563. package/codeyam-cli/src/commands/detect-universal-mocks.js +0 -118
  564. package/codeyam-cli/src/commands/detect-universal-mocks.js.map +0 -1
  565. package/codeyam-cli/src/commands/list.js +0 -31
  566. package/codeyam-cli/src/commands/list.js.map +0 -1
  567. package/codeyam-cli/src/commands/webapp-info.js +0 -146
  568. package/codeyam-cli/src/commands/webapp-info.js.map +0 -1
  569. package/codeyam-cli/src/utils/universal-mocks.js +0 -152
  570. package/codeyam-cli/src/utils/universal-mocks.js.map +0 -1
  571. package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-ClaLpuOo.js +0 -34
  572. package/codeyam-cli/src/webserver/build/client/assets/agent-transcripts-DfKzxuoe.js +0 -11
  573. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-C5lqplTC.js +0 -1
  574. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-CBoafmVs.js +0 -6
  575. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-DGgZjdFg.js +0 -6
  576. package/codeyam-cli/src/webserver/build/client/assets/globals-DoeDFXZN.css +0 -1
  577. package/codeyam-cli/src/webserver/build/client/assets/labs-CmBYA0PH.js +0 -1
  578. package/codeyam-cli/src/webserver/build/client/assets/manifest-76786b8e.js +0 -1
  579. package/codeyam-cli/src/webserver/build/client/assets/memory-CrNQfdMO.js +0 -76
  580. package/codeyam-cli/src/webserver/build/client/assets/root-QAY34PIo.js +0 -62
  581. package/codeyam-cli/src/webserver/build/client/assets/settings-eBI36Yv5.js +0 -1
  582. package/codeyam-cli/src/webserver/build/client/assets/useLastLogLine-COky1GVF.js +0 -2
  583. package/codeyam-cli/src/webserver/build/server/assets/index-DV1ykEI6.js +0 -1
  584. package/codeyam-cli/src/webserver/build/server/assets/server-build-BrcVrUEv.js +0 -260
  585. package/codeyam-cli/templates/codeyam-stop-hook.sh +0 -284
  586. package/codeyam-cli/templates/codeyam:diagnose.md +0 -805
  587. package/scripts/finalize-analyzer.cjs +0 -81
  588. /package/codeyam-cli/src/webserver/build/client/assets/{api.labs-survey-l0sNRNKZ.js → api.dev-mode-events-l0sNRNKZ.js} +0 -0
@@ -1,10 +1,10 @@
1
1
  {
2
- "buildTimestamp": "2026-02-10T15:50:47.182Z",
3
- "buildTime": 1770738647182,
4
- "gitCommit": "036391eb81237d8a0486ab9278a421ced43f450d",
2
+ "buildTimestamp": "2026-03-03T21:19:59.670Z",
3
+ "buildTime": 1772572799670,
4
+ "gitCommit": "039fa008b3ad2590b664e75f0e4cb7d82bc35159",
5
5
  "nodeVersion": "v20.20.0",
6
- "contentHash": "3686880009968bee7de4a1974c22f64d417de53b5e8d46a51d7e88a017d4f2cc",
7
- "buildNumber": 599,
8
- "semanticVersion": "0.1.599",
9
- "version": "0.1.599 (2026-02-10T15:50+3686880)"
6
+ "contentHash": "56095f026fcf9575b86866f4fe3d3d61b9466cf70e4d3f16001752fd1febd7c2",
7
+ "buildNumber": 829,
8
+ "semanticVersion": "0.1.829",
9
+ "version": "0.1.829 (2026-03-03T21:19+56095f0)"
10
10
  }
@@ -1,7 +1,7 @@
1
1
 
2
- [2/10/2026, 3:50:47 PM] > codeyam-combo@1.0.0 mergeDependencies
3
- [2/10/2026, 3:50:47 PM] > node ./scripts/mergePackageJsonFiles.cjs
2
+ [3/3/2026, 9:19:59 PM] > codeyam-combo@1.0.0 mergeDependencies
3
+ [3/3/2026, 9:19:59 PM] > node ./scripts/mergePackageJsonFiles.cjs
4
4
 
5
5
 
6
- [2/10/2026, 3:50:47 PM] Merged dependencies into root package.json
6
+ [3/3/2026, 9:19:59 PM] Merged dependencies into root package.json
7
7
 
@@ -7,18 +7,18 @@
7
7
  "build": "tsc && node ./scripts/postbuild.cjs"
8
8
  },
9
9
  "dependencies": {
10
- "@aws-sdk/client-cloudwatch-logs": "^3.980.0",
11
- "@aws-sdk/client-cloudfront": "^3.966.0",
12
- "@aws-sdk/client-codebuild": "^3.948.0",
13
- "@aws-sdk/client-dynamodb": "^3.956.0",
14
- "@aws-sdk/client-ec2": "^3.899.0",
15
- "@aws-sdk/client-ecr": "^3.948.0",
16
- "@aws-sdk/client-ecs": "^3.956.0",
17
- "@aws-sdk/client-s3": "^3.940.0",
18
- "@aws-sdk/client-sqs": "^3.956.0",
19
- "@aws-sdk/lib-storage": "^3.975.0",
20
- "@aws-sdk/util-dynamodb": "^3.971.0",
21
- "@octokit/auth-app": "^8.1.0",
10
+ "@aws-sdk/client-cloudwatch-logs": "^3.990.0",
11
+ "@aws-sdk/client-cloudfront": "^3.990.0",
12
+ "@aws-sdk/client-codebuild": "^3.990.0",
13
+ "@aws-sdk/client-dynamodb": "^3.990.0",
14
+ "@aws-sdk/client-ec2": "^3.990.0",
15
+ "@aws-sdk/client-ecr": "^3.990.0",
16
+ "@aws-sdk/client-ecs": "^3.990.0",
17
+ "@aws-sdk/client-s3": "^3.990.0",
18
+ "@aws-sdk/client-sqs": "^3.990.0",
19
+ "@aws-sdk/lib-storage": "^3.990.0",
20
+ "@aws-sdk/util-dynamodb": "^3.990.0",
21
+ "@octokit/auth-app": "^8.2.0",
22
22
  "@octokit/rest": "^22.0.0",
23
23
  "@sendgrid/mail": "^8.1.4",
24
24
  "@supabase/supabase-js": "2.88.0",
@@ -26,13 +26,13 @@
26
26
  "dotenv": "^17.2.3",
27
27
  "express": "^5.2.1",
28
28
  "get-port": "^7.1.0",
29
- "htmlparser2": "^10.0.0",
29
+ "htmlparser2": "^10.1.0",
30
30
  "jest": "^30.2.0",
31
31
  "jsdom": "^27.4.0",
32
32
  "jsonc-parser": "^3.2.1",
33
33
  "lru-cache": "^11.2.5",
34
34
  "openai": "^6.16.0",
35
- "p-queue": "^8.1.0",
35
+ "p-queue": "^9.1.0",
36
36
  "p-retry": "^7.1.1",
37
37
  "piscina": "^5.1.4",
38
38
  "pixelmatch": "^5.3.0",
@@ -44,12 +44,12 @@
44
44
  "pluralize": "^8.0.0",
45
45
  "yargs": "^18.0.0",
46
46
  "json5": "^2.2.3",
47
- "@anthropic-ai/sdk": "^0.74.0",
48
- "@aws-sdk/s3-request-presigner": "^3.940.0",
49
- "better-sqlite3": "^12.4.1",
47
+ "@anthropic-ai/sdk": "^0.78.0",
48
+ "@aws-sdk/s3-request-presigner": "^3.990.0",
49
+ "better-sqlite3": "^12.6.2",
50
50
  "fetch-retry": "^6.0.0",
51
51
  "kysely": "^0.28.11",
52
- "pg": "^8.16.3",
52
+ "pg": "^8.19.0",
53
53
  "@octokit/request": "^10.0.3",
54
54
  "lucide-react": "^0.556.0",
55
55
  "react-resizable": "^3.0.5"
@@ -62,7 +62,7 @@
62
62
  "@types/jsdom": "^27.0.0",
63
63
  "@types/better-sqlite3": "^7.6.13",
64
64
  "@types/jest": "^30.0.0",
65
- "@types/pg": "^8.15.5",
65
+ "@types/pg": "^8.18.0",
66
66
  "@types/ws": "^8.18.1",
67
67
  "@octokit/types": "^16.0.0",
68
68
  "@types/react": "^19.2.7",
@@ -43,6 +43,7 @@ export { default as isolateScopes } from './src/lib/isolateScopes';
43
43
  export {
44
44
  default as analyzeScope,
45
45
  destroyWorkerPool,
46
+ skipWorkerPool,
46
47
  } from './src/lib/analyzeScope';
47
48
  export { default as logOrderedMap } from './src/lib/logOrderedMap';
48
49
  export {
@@ -9,9 +9,9 @@
9
9
  "author": "",
10
10
  "license": "ISC",
11
11
  "dependencies": {
12
- "@anthropic-ai/sdk": "^0.74.0",
12
+ "@anthropic-ai/sdk": "^0.78.0",
13
13
  "jsdom": "^27.4.0",
14
- "p-queue": "^8.1.0",
14
+ "p-queue": "^9.1.0",
15
15
  "p-retry": "^7.1.1",
16
16
  "piscina": "^5.1.4",
17
17
  "lru-cache": "^11.2.5"
@@ -50,6 +50,19 @@ let workerPool: Piscina<
50
50
  AnalyzeScopeWorkerOutput
51
51
  > | null = null;
52
52
  let workerPoolDestroyed = false;
53
+ let workerPoolSkipped = false;
54
+
55
+ /**
56
+ * Skip worker pool initialization for the current session.
57
+ *
58
+ * The worker thread creates its own ProjectAnalyzer (ts.Program), which takes
59
+ * 50-70s — far longer than the actual entity processing (<2s for typical batches).
60
+ * When the entity count is small, running analyzeScopeLocal on the main thread
61
+ * reuses the existing ProjectAnalyzer and avoids this overhead entirely.
62
+ */
63
+ export function skipWorkerPool() {
64
+ workerPoolSkipped = true;
65
+ }
53
66
 
54
67
  /**
55
68
  * Check if we're in Node.js main thread
@@ -108,6 +121,7 @@ function ensureWorkerPool() {
108
121
  'analyzeScope should not be called after data structure preparation completes.',
109
122
  );
110
123
  }
124
+ if (workerPoolSkipped) return;
111
125
  if (workerPool !== null) return;
112
126
 
113
127
  // Only initialize worker pool in Node.js environment
@@ -909,11 +909,42 @@ export class ASTScopeAnalyzer {
909
909
  if (tsType.flags & ts.TypeFlags.Union) {
910
910
  const unionType = tsType as ts.UnionType;
911
911
 
912
- // Check if it's a string literal union
913
- const isAllStringLiterals = unionType.types.every(
912
+ // Check if it's a string literal union (optionally with null/undefined).
913
+ // Preserve literal values so the LLM knows which values are valid when
914
+ // generating mock data. Without this, types like
915
+ // 'suggestion' | 'warning' | 'achievement' | 'tip' become just 'string'
916
+ // and the LLM generates invalid values (e.g. "Motivational").
917
+ const stringLiterals = unionType.types.filter(
914
918
  (t) => (t.flags & ts.TypeFlags.StringLiteral) !== 0,
915
919
  );
916
- if (isAllStringLiterals) return 'string';
920
+ const nullishTypes = unionType.types.filter(
921
+ (t) =>
922
+ (t.flags & ts.TypeFlags.Undefined) !== 0 ||
923
+ (t.flags & ts.TypeFlags.Null) !== 0,
924
+ );
925
+
926
+ if (
927
+ stringLiterals.length > 0 &&
928
+ stringLiterals.length + nullishTypes.length === unionType.types.length
929
+ ) {
930
+ const literalValues = stringLiterals.map(
931
+ (t) => `'${(t as ts.LiteralType).value}'`,
932
+ );
933
+ const literalUnion = literalValues.join(' | ');
934
+
935
+ if (nullishTypes.length > 0) {
936
+ const nullishParts: string[] = [];
937
+ if (nullishTypes.some((t) => (t.flags & ts.TypeFlags.Null) !== 0))
938
+ nullishParts.push('null');
939
+ if (
940
+ nullishTypes.some((t) => (t.flags & ts.TypeFlags.Undefined) !== 0)
941
+ )
942
+ nullishParts.push('undefined');
943
+ return `${literalUnion} | ${nullishParts.join(' | ')}`;
944
+ }
945
+
946
+ return literalUnion;
947
+ }
917
948
 
918
949
  // Check if it's a number literal union
919
950
  const isAllNumberLiterals = unionType.types.every(
@@ -9,6 +9,7 @@ import { StructuredPath } from './paths';
9
9
  import { nodeToSource } from './nodeToSource';
10
10
  import { methodRegistry, ArrayPushSemantics } from './methodSemantics';
11
11
  import {
12
+ getComparisonOperatorString,
12
13
  isArithmeticOperator,
13
14
  isAssignmentOperator,
14
15
  isBitwiseCompoundOperator,
@@ -25,6 +26,74 @@ import {
25
26
  } from './conditionalEffectsExtractor';
26
27
  import { detectArrayDerivedPattern } from './arrayDerivationDetector';
27
28
 
29
+ /**
30
+ * Recursively extracts root variable names from an expression AST node.
31
+ * Used to identify which variables flow into JSX expression children,
32
+ * so we can link them to the return value schema.
33
+ *
34
+ * Examples:
35
+ * - `filteredTopPaths.map(...)` → ['filteredTopPaths']
36
+ * - `a && b` → ['a', 'b']
37
+ * - `condition ? x : y` → ['condition', 'x', 'y']
38
+ */
39
+ function extractRootVariableNames(node: ts.Expression): string[] {
40
+ const ignoredIdentifiers = new Set([
41
+ 'undefined',
42
+ 'null',
43
+ 'true',
44
+ 'false',
45
+ 'NaN',
46
+ 'Infinity',
47
+ ]);
48
+
49
+ if (ts.isIdentifier(node)) {
50
+ const name = node.text;
51
+ return ignoredIdentifiers.has(name) ? [] : [name];
52
+ }
53
+
54
+ if (ts.isPropertyAccessExpression(node)) {
55
+ return extractRootVariableNames(node.expression);
56
+ }
57
+
58
+ if (ts.isCallExpression(node)) {
59
+ return extractRootVariableNames(node.expression);
60
+ }
61
+
62
+ if (ts.isBinaryExpression(node)) {
63
+ return [
64
+ ...extractRootVariableNames(node.left),
65
+ ...extractRootVariableNames(node.right),
66
+ ];
67
+ }
68
+
69
+ if (ts.isPrefixUnaryExpression(node)) {
70
+ return extractRootVariableNames(node.operand);
71
+ }
72
+
73
+ if (ts.isConditionalExpression(node)) {
74
+ return [
75
+ ...extractRootVariableNames(node.condition),
76
+ ...extractRootVariableNames(node.whenTrue),
77
+ ...extractRootVariableNames(node.whenFalse),
78
+ ];
79
+ }
80
+
81
+ if (ts.isParenthesizedExpression(node)) {
82
+ return extractRootVariableNames(node.expression);
83
+ }
84
+
85
+ // Stop recursion at JSX elements and other terminal nodes
86
+ if (
87
+ ts.isJsxElement(node) ||
88
+ ts.isJsxFragment(node) ||
89
+ ts.isJsxSelfClosingElement(node)
90
+ ) {
91
+ return [];
92
+ }
93
+
94
+ return [];
95
+ }
96
+
28
97
  /**
29
98
  * Checks if a JSX element has props that reference variables from the parent scope.
30
99
  * This is used to detect unconditionally-rendered children that should have their
@@ -1294,6 +1363,11 @@ export function extractConditionalUsage(
1294
1363
  return literalValue;
1295
1364
  };
1296
1365
 
1366
+ // Get the comparison operator string for the compound condition
1367
+ const comparisonOperator = getComparisonOperatorString(
1368
+ unwrapped.operatorToken.kind,
1369
+ );
1370
+
1297
1371
  // Helper to add a condition
1298
1372
  const addCondition = (
1299
1373
  path: string,
@@ -1338,6 +1412,7 @@ export function extractConditionalUsage(
1338
1412
  comparedValues,
1339
1413
  isNegated,
1340
1414
  requiredValue,
1415
+ ...(comparisonOperator && { comparisonOperator }),
1341
1416
  ...(chainInfo.currentOrGroupId && {
1342
1417
  orGroupId: chainInfo.currentOrGroupId,
1343
1418
  }),
@@ -3334,6 +3409,19 @@ export function processExpression({
3334
3409
  for (const child of unwrappedNode.children) {
3335
3410
  // Process expressions in JSX children: <div>{expr}</div>
3336
3411
  if (ts.isJsxExpression(child) && child.expression) {
3412
+ // When processing return value JSX, link root variables to return value schema
3413
+ if (targetPath && targetPath.base !== '') {
3414
+ const varNames = [
3415
+ ...new Set(extractRootVariableNames(child.expression)),
3416
+ ];
3417
+ for (const varName of varNames) {
3418
+ context.addEquivalence(
3419
+ targetPath.withProperty(varName),
3420
+ StructuredPath.fromBase(varName),
3421
+ );
3422
+ }
3423
+ }
3424
+
3337
3425
  // Process the expression with StructuredPath.empty() as targetPath
3338
3426
  // to trigger type registration without imposing prefix
3339
3427
  processExpression({
@@ -3368,6 +3456,19 @@ export function processExpression({
3368
3456
  for (const child of unwrappedNode.children) {
3369
3457
  // Process expressions in JSX children: <>{expr}</>
3370
3458
  if (ts.isJsxExpression(child) && child.expression) {
3459
+ // When processing return value JSX, link root variables to return value schema
3460
+ if (targetPath && targetPath.base !== '') {
3461
+ const varNames = [
3462
+ ...new Set(extractRootVariableNames(child.expression)),
3463
+ ];
3464
+ for (const varName of varNames) {
3465
+ context.addEquivalence(
3466
+ targetPath.withProperty(varName),
3467
+ StructuredPath.fromBase(varName),
3468
+ );
3469
+ }
3470
+ }
3471
+
3371
3472
  // Process the expression to extract structure
3372
3473
  processExpression({
3373
3474
  node: child.expression,
@@ -71,6 +71,34 @@ export function isComparisonOperator(kind: ts.SyntaxKind): boolean {
71
71
  );
72
72
  }
73
73
 
74
+ /**
75
+ * Returns the string representation of a comparison operator token.
76
+ */
77
+ export function getComparisonOperatorString(
78
+ kind: ts.SyntaxKind,
79
+ ): string | undefined {
80
+ switch (kind) {
81
+ case ts.SyntaxKind.EqualsEqualsToken:
82
+ return '==';
83
+ case ts.SyntaxKind.EqualsEqualsEqualsToken:
84
+ return '===';
85
+ case ts.SyntaxKind.ExclamationEqualsToken:
86
+ return '!=';
87
+ case ts.SyntaxKind.ExclamationEqualsEqualsToken:
88
+ return '!==';
89
+ case ts.SyntaxKind.LessThanToken:
90
+ return '<';
91
+ case ts.SyntaxKind.LessThanEqualsToken:
92
+ return '<=';
93
+ case ts.SyntaxKind.GreaterThanToken:
94
+ return '>';
95
+ case ts.SyntaxKind.GreaterThanEqualsToken:
96
+ return '>=';
97
+ default:
98
+ return undefined;
99
+ }
100
+ }
101
+
74
102
  /**
75
103
  * Checks if an operator is an arithmetic operator
76
104
  */
@@ -433,6 +433,12 @@ export interface CompoundConditional {
433
433
  isNegated: boolean;
434
434
  /** Required value for this condition to be true */
435
435
  requiredValue?: string | boolean;
436
+ /**
437
+ * The comparison operator used (e.g., '>', '<', '>=', '<=', '===', '!==').
438
+ * Preserves the original operator so flow generation can distinguish
439
+ * `length > 0` from `length === 0`.
440
+ */
441
+ comparisonOperator?: string;
436
442
  /**
437
443
  * When conditions are part of an OR expression within an && chain,
438
444
  * they share the same orGroupId. Conditions with the same orGroupId
@@ -36,7 +36,6 @@ interface CompletionCallProps {
36
36
  const queue = new PQueue({
37
37
  concurrency: 100,
38
38
  timeout: 20 * 60 * 1000, // 20 minutes
39
- throwOnTimeout: true,
40
39
  autoStart: true,
41
40
  });
42
41
 
@@ -135,62 +134,63 @@ export default async function completionCall({
135
134
  };
136
135
  const params = lib.openai.chatRequestToOpenAIChatParams(chatRequest);
137
136
 
138
- const chatCompletion = await queue.add(
139
- () => {
140
- queueEndTime = Date.now();
141
- return PRetry(
142
- async () => {
143
- const callStartTime = Date.now();
144
- const waitingMessages = [
145
- 'Waiting for LLM response',
146
- 'Still waiting for LLM response',
147
- 'LLM call in progress',
148
- 'Processing LLM request',
149
- 'Awaiting LLM completion',
150
- ];
151
-
152
- const logInterval = setInterval(() => {
153
- const elapsedSeconds = Math.floor(
154
- (Date.now() - callStartTime) / 1000,
155
- );
156
- const messageIndex =
157
- Math.floor(elapsedSeconds / 10) % waitingMessages.length;
158
- awsLogDebugLevel(
159
- 1,
160
- `${waitingMessages[messageIndex]} [type=${type}, model=${model}, elapsed=${elapsedSeconds}s]`,
161
- );
162
- }, 10000);
137
+ const chatCompletionResult = await queue.add(() => {
138
+ queueEndTime = Date.now();
139
+ return PRetry(
140
+ async () => {
141
+ const callStartTime = Date.now();
142
+ const waitingMessages = [
143
+ 'Waiting for LLM response',
144
+ 'Still waiting for LLM response',
145
+ 'LLM call in progress',
146
+ 'Processing LLM request',
147
+ 'Awaiting LLM completion',
148
+ ];
149
+
150
+ const logInterval = setInterval(() => {
151
+ const elapsedSeconds = Math.floor(
152
+ (Date.now() - callStartTime) / 1000,
153
+ );
154
+ const messageIndex =
155
+ Math.floor(elapsedSeconds / 10) % waitingMessages.length;
156
+ awsLogDebugLevel(
157
+ 1,
158
+ `${waitingMessages[messageIndex]} [type=${type}, model=${model}, elapsed=${elapsedSeconds}s]`,
159
+ );
160
+ }, 10000);
163
161
 
164
- try {
165
- return await openai.chat.completions.create(params, {
166
- timeout: 5 * 60 * 1000, // 5 minute timeout
167
- });
168
- } finally {
169
- clearInterval(logInterval);
170
- }
171
- },
172
- {
173
- ...defaultRetryOptions,
174
- onFailedAttempt: (error) => {
175
- retryCount++;
176
- console.log(
177
- `CodeYam Error: Completion call failed [model=${model}]`,
178
- {
179
- error,
180
- prompt,
181
- systemMessage,
182
- attempts,
183
- retryCount,
184
- },
185
- );
186
- },
162
+ try {
163
+ return await openai.chat.completions.create(params, {
164
+ timeout: 5 * 60 * 1000, // 5 minute timeout
165
+ });
166
+ } finally {
167
+ clearInterval(logInterval);
168
+ }
169
+ },
170
+ {
171
+ ...defaultRetryOptions,
172
+ onFailedAttempt: (error) => {
173
+ retryCount++;
174
+ console.log(
175
+ `CodeYam Error: Completion call failed [model=${model}]`,
176
+ {
177
+ error,
178
+ prompt,
179
+ systemMessage,
180
+ attempts,
181
+ retryCount,
182
+ },
183
+ );
187
184
  },
188
- );
189
- },
190
- {
191
- throwOnTimeout: true,
192
- },
193
- );
185
+ },
186
+ );
187
+ });
188
+
189
+ if (!chatCompletionResult) {
190
+ throw new Error('Completion call returned no result');
191
+ }
192
+
193
+ const chatCompletion = chatCompletionResult;
194
194
  const endTime = Date.now();
195
195
 
196
196
  const llmCallStats = getLLMCallStats({
@@ -310,65 +310,66 @@ ${completion}
310
310
 
311
311
  Please provide a corrected version with valid JSON only. Do not include any explanatory text, just the valid JSON object.`;
312
312
 
313
- const correctionChatCompletion = await queue.add(
314
- () => {
315
- return PRetry(
316
- async () => {
317
- const correctionStartTime = Date.now();
318
- const waitingMessages = [
319
- 'Waiting for LLM correction response',
320
- 'Still waiting for LLM correction',
321
- 'LLM correction in progress',
322
- 'Processing LLM correction request',
323
- 'Awaiting LLM correction completion',
324
- ];
325
-
326
- const logInterval = setInterval(() => {
327
- const elapsedSeconds = Math.floor(
328
- (Date.now() - correctionStartTime) / 1000,
329
- );
330
- const messageIndex =
331
- Math.floor(elapsedSeconds / 10) % waitingMessages.length;
332
- awsLogDebugLevel(
333
- 1,
334
- `${waitingMessages[messageIndex]} [type=${type}, model=${model}, elapsed=${elapsedSeconds}s]`,
335
- );
336
- }, 10000);
337
-
338
- try {
339
- return await openai.chat.completions.create(
340
- {
341
- ...params,
342
- messages: [
343
- { role: 'system', content: systemMessage },
344
- { role: 'user', content: prompt },
345
- { role: 'assistant', content: completion },
346
- { role: 'user', content: correctionPrompt },
347
- ],
348
- },
349
- {
350
- timeout: 5 * 60 * 1000,
351
- },
352
- );
353
- } finally {
354
- clearInterval(logInterval);
355
- }
313
+ const correctionChatCompletionResult = await queue.add(() => {
314
+ return PRetry(
315
+ async () => {
316
+ const correctionStartTime = Date.now();
317
+ const waitingMessages = [
318
+ 'Waiting for LLM correction response',
319
+ 'Still waiting for LLM correction',
320
+ 'LLM correction in progress',
321
+ 'Processing LLM correction request',
322
+ 'Awaiting LLM correction completion',
323
+ ];
324
+
325
+ const logInterval = setInterval(() => {
326
+ const elapsedSeconds = Math.floor(
327
+ (Date.now() - correctionStartTime) / 1000,
328
+ );
329
+ const messageIndex =
330
+ Math.floor(elapsedSeconds / 10) % waitingMessages.length;
331
+ awsLogDebugLevel(
332
+ 1,
333
+ `${waitingMessages[messageIndex]} [type=${type}, model=${model}, elapsed=${elapsedSeconds}s]`,
334
+ );
335
+ }, 10000);
336
+
337
+ try {
338
+ return await openai.chat.completions.create(
339
+ {
340
+ ...params,
341
+ messages: [
342
+ { role: 'system', content: systemMessage },
343
+ { role: 'user', content: prompt },
344
+ { role: 'assistant', content: completion },
345
+ { role: 'user', content: correctionPrompt },
346
+ ],
347
+ },
348
+ {
349
+ timeout: 5 * 60 * 1000,
350
+ },
351
+ );
352
+ } finally {
353
+ clearInterval(logInterval);
354
+ }
355
+ },
356
+ {
357
+ ...defaultRetryOptions,
358
+ onFailedAttempt: (error) => {
359
+ console.log('CodeYam Error: Correction call failed', {
360
+ error,
361
+ attempts,
362
+ });
356
363
  },
357
- {
358
- ...defaultRetryOptions,
359
- onFailedAttempt: (error) => {
360
- console.log('CodeYam Error: Correction call failed', {
361
- error,
362
- attempts,
363
- });
364
- },
365
- },
366
- );
367
- },
368
- {
369
- throwOnTimeout: true,
370
- },
371
- );
364
+ },
365
+ );
366
+ });
367
+
368
+ if (!correctionChatCompletionResult) {
369
+ throw new Error('Correction call returned no result');
370
+ }
371
+
372
+ const correctionChatCompletion = correctionChatCompletionResult;
372
373
 
373
374
  const correctedRawCompletion =
374
375
  correctionChatCompletion.choices?.[0]?.message?.content;