@codeyam/codeyam-cli 0.1.0-staging.2a88920 → 0.1.0-staging.2ea44f6

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 (719) 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 +23 -23
  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 +23 -1
  7. package/analyzer-template/packages/ai/src/lib/astScopes/astScopeAnalyzer.ts +34 -3
  8. package/analyzer-template/packages/ai/src/lib/astScopes/patterns/forInStatementHandler.ts +10 -17
  9. package/analyzer-template/packages/ai/src/lib/astScopes/processExpression.ts +101 -0
  10. package/analyzer-template/packages/ai/src/lib/astScopes/sharedPatterns.ts +28 -0
  11. package/analyzer-template/packages/ai/src/lib/astScopes/types.ts +6 -0
  12. package/analyzer-template/packages/ai/src/lib/completionCall.ts +114 -113
  13. package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +588 -13
  14. package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.ts +5 -1
  15. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.ts +11 -2
  16. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.ts +2 -2
  17. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/coerceObjectsToPrimitivesBySchema.ts +70 -0
  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 +140 -14
  20. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertTypeAnnotationsToValues.ts +20 -1
  21. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.ts +84 -19
  22. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/stripNullableMarkers.ts +35 -0
  23. package/analyzer-template/packages/ai/src/lib/dataStructureChunking.ts +40 -13
  24. package/analyzer-template/packages/ai/src/lib/generateEntityDataStructure.ts +58 -3
  25. package/analyzer-template/packages/ai/src/lib/generateEntityScenarioData.ts +377 -7
  26. package/analyzer-template/packages/ai/src/lib/generateExecutionFlows.ts +101 -2
  27. package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionals.ts +359 -142
  28. package/analyzer-template/packages/ai/src/lib/isolateScopes.ts +51 -3
  29. package/analyzer-template/packages/ai/src/lib/mergeJsonTypeDefinitions.ts +5 -0
  30. package/analyzer-template/packages/ai/src/lib/promptGenerators/collapseNullableObjects.ts +118 -0
  31. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.ts +24 -4
  32. package/analyzer-template/packages/analyze/index.ts +2 -0
  33. package/analyzer-template/packages/analyze/src/lib/ProjectAnalyzer.ts +19 -7
  34. package/analyzer-template/packages/analyze/src/lib/asts/index.ts +7 -2
  35. package/analyzer-template/packages/analyze/src/lib/asts/nodes/getNodeType.ts +1 -0
  36. package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.ts +69 -3
  37. package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities.ts +13 -0
  38. package/analyzer-template/packages/analyze/src/lib/files/analyze/dependencyResolver.ts +0 -6
  39. package/analyzer-template/packages/analyze/src/lib/files/analyze/findOrCreateEntity.ts +12 -0
  40. package/analyzer-template/packages/analyze/src/lib/files/scenarios/TransformationTracer.ts +1352 -0
  41. package/analyzer-template/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.ts +4 -0
  42. package/analyzer-template/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.ts +59 -26
  43. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +277 -15
  44. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.ts +0 -98
  45. package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +395 -61
  46. package/analyzer-template/packages/analyze/src/lib/index.ts +1 -0
  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 +65 -0
  59. package/analyzer-template/packages/database/src/lib/kysely/tables/labsRequestsTable.ts +52 -0
  60. package/analyzer-template/packages/database/src/lib/loadCommits.ts +31 -20
  61. package/analyzer-template/packages/database/src/lib/loadReadyToBeCapturedAnalyses.ts +0 -5
  62. package/analyzer-template/packages/database/src/lib/projectToDb.ts +1 -1
  63. package/analyzer-template/packages/database/src/lib/saveFiles.ts +1 -1
  64. package/analyzer-template/packages/database/src/lib/scenarioToDb.ts +1 -1
  65. package/analyzer-template/packages/database/src/lib/updateCommitMetadata.ts +151 -135
  66. package/analyzer-template/packages/database/src/lib/updateFreshAnalysisStatus.ts +58 -42
  67. package/analyzer-template/packages/database/src/lib/updateFreshAnalysisStatusWithScenarios.ts +81 -65
  68. package/analyzer-template/packages/database/src/lib/userScenarioToDb.ts +1 -1
  69. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.ts +29 -1
  70. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.ts +33 -5
  71. package/analyzer-template/packages/github/dist/database/index.d.ts +1 -0
  72. package/analyzer-template/packages/github/dist/database/index.d.ts.map +1 -1
  73. package/analyzer-template/packages/github/dist/database/index.js +1 -0
  74. package/analyzer-template/packages/github/dist/database/index.js.map +1 -1
  75. package/analyzer-template/packages/github/dist/database/src/lib/analysisBranchToDb.js +1 -1
  76. package/analyzer-template/packages/github/dist/database/src/lib/analysisBranchToDb.js.map +1 -1
  77. package/analyzer-template/packages/github/dist/database/src/lib/analysisToDb.js +1 -1
  78. package/analyzer-template/packages/github/dist/database/src/lib/analysisToDb.js.map +1 -1
  79. package/analyzer-template/packages/github/dist/database/src/lib/branchToDb.js +1 -1
  80. package/analyzer-template/packages/github/dist/database/src/lib/branchToDb.js.map +1 -1
  81. package/analyzer-template/packages/github/dist/database/src/lib/commitBranchToDb.js +1 -1
  82. package/analyzer-template/packages/github/dist/database/src/lib/commitBranchToDb.js.map +1 -1
  83. package/analyzer-template/packages/github/dist/database/src/lib/commitToDb.js +1 -1
  84. package/analyzer-template/packages/github/dist/database/src/lib/commitToDb.js.map +1 -1
  85. package/analyzer-template/packages/github/dist/database/src/lib/fileToDb.js +1 -1
  86. package/analyzer-template/packages/github/dist/database/src/lib/fileToDb.js.map +1 -1
  87. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts +4 -0
  88. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts.map +1 -1
  89. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js +8 -0
  90. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js.map +1 -1
  91. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.d.ts +1 -1
  92. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.d.ts +21 -0
  93. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.d.ts.map +1 -0
  94. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.js +48 -0
  95. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -0
  96. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/labsRequestsTable.d.ts +23 -0
  97. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/labsRequestsTable.d.ts.map +1 -0
  98. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/labsRequestsTable.js +35 -0
  99. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/labsRequestsTable.js.map +1 -0
  100. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts +5 -0
  101. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts.map +1 -1
  102. package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.d.ts.map +1 -1
  103. package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.js +23 -13
  104. package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.js.map +1 -1
  105. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.d.ts.map +1 -1
  106. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.js +1 -4
  107. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.js.map +1 -1
  108. package/analyzer-template/packages/github/dist/database/src/lib/projectToDb.js +1 -1
  109. package/analyzer-template/packages/github/dist/database/src/lib/projectToDb.js.map +1 -1
  110. package/analyzer-template/packages/github/dist/database/src/lib/saveFiles.js +1 -1
  111. package/analyzer-template/packages/github/dist/database/src/lib/saveFiles.js.map +1 -1
  112. package/analyzer-template/packages/github/dist/database/src/lib/scenarioToDb.js +1 -1
  113. package/analyzer-template/packages/github/dist/database/src/lib/scenarioToDb.js.map +1 -1
  114. package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.d.ts.map +1 -1
  115. package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js +100 -89
  116. package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js.map +1 -1
  117. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatus.d.ts.map +1 -1
  118. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatus.js +41 -30
  119. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatus.js.map +1 -1
  120. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatusWithScenarios.d.ts.map +1 -1
  121. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatusWithScenarios.js +68 -57
  122. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatusWithScenarios.js.map +1 -1
  123. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.d.ts.map +1 -1
  124. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js +29 -1
  125. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js.map +1 -1
  126. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.d.ts.map +1 -1
  127. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +33 -5
  128. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
  129. package/analyzer-template/packages/github/dist/types/src/types/ProjectMetadata.d.ts +8 -0
  130. package/analyzer-template/packages/github/dist/types/src/types/ProjectMetadata.d.ts.map +1 -1
  131. package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts +10 -0
  132. package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts.map +1 -1
  133. package/analyzer-template/packages/github/package.json +1 -1
  134. package/analyzer-template/packages/types/src/types/ProjectMetadata.ts +8 -0
  135. package/analyzer-template/packages/types/src/types/Scenario.ts +10 -0
  136. package/analyzer-template/packages/utils/dist/types/src/types/ProjectMetadata.d.ts +8 -0
  137. package/analyzer-template/packages/utils/dist/types/src/types/ProjectMetadata.d.ts.map +1 -1
  138. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts +10 -0
  139. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts.map +1 -1
  140. package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.d.ts.map +1 -1
  141. package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.js +98 -3
  142. package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.js.map +1 -1
  143. package/analyzer-template/packages/utils/src/lib/fs/rsyncCopy.ts +121 -3
  144. package/analyzer-template/playwright/captureFromUrl.ts +89 -82
  145. package/analyzer-template/project/constructMockCode.ts +206 -51
  146. package/analyzer-template/project/orchestrateCapture.ts +4 -1
  147. package/analyzer-template/project/reconcileMockDataKeys.ts +19 -14
  148. package/analyzer-template/project/start.ts +3 -0
  149. package/analyzer-template/project/startScenarioCapture.ts +9 -0
  150. package/analyzer-template/project/writeClientLogRoute.ts +125 -0
  151. package/analyzer-template/project/writeMockDataTsx.ts +191 -12
  152. package/analyzer-template/project/writeScenarioComponents.ts +170 -29
  153. package/analyzer-template/project/writeSimpleRoot.ts +21 -11
  154. package/analyzer-template/tsconfig.json +13 -1
  155. package/background/src/lib/local/createLocalAnalyzer.js +1 -1
  156. package/background/src/lib/local/createLocalAnalyzer.js.map +1 -1
  157. package/background/src/lib/virtualized/project/constructMockCode.js +175 -42
  158. package/background/src/lib/virtualized/project/constructMockCode.js.map +1 -1
  159. package/background/src/lib/virtualized/project/orchestrateCapture.js +4 -1
  160. package/background/src/lib/virtualized/project/orchestrateCapture.js.map +1 -1
  161. package/background/src/lib/virtualized/project/reconcileMockDataKeys.js +17 -11
  162. package/background/src/lib/virtualized/project/reconcileMockDataKeys.js.map +1 -1
  163. package/background/src/lib/virtualized/project/start.js +2 -0
  164. package/background/src/lib/virtualized/project/start.js.map +1 -1
  165. package/background/src/lib/virtualized/project/startScenarioCapture.js +5 -0
  166. package/background/src/lib/virtualized/project/startScenarioCapture.js.map +1 -1
  167. package/background/src/lib/virtualized/project/writeClientLogRoute.js +110 -0
  168. package/background/src/lib/virtualized/project/writeClientLogRoute.js.map +1 -0
  169. package/background/src/lib/virtualized/project/writeMockDataTsx.js +168 -8
  170. package/background/src/lib/virtualized/project/writeMockDataTsx.js.map +1 -1
  171. package/background/src/lib/virtualized/project/writeScenarioComponents.js +143 -27
  172. package/background/src/lib/virtualized/project/writeScenarioComponents.js.map +1 -1
  173. package/background/src/lib/virtualized/project/writeSimpleRoot.js +21 -11
  174. package/background/src/lib/virtualized/project/writeSimpleRoot.js.map +1 -1
  175. package/codeyam-cli/scripts/apply-setup.js +386 -9
  176. package/codeyam-cli/scripts/apply-setup.js.map +1 -1
  177. package/codeyam-cli/src/__tests__/memory-scripts/filter-session.test.js +196 -0
  178. package/codeyam-cli/src/__tests__/memory-scripts/filter-session.test.js.map +1 -0
  179. package/codeyam-cli/src/__tests__/memory-scripts/read-json-field.test.js +114 -0
  180. package/codeyam-cli/src/__tests__/memory-scripts/read-json-field.test.js.map +1 -0
  181. package/codeyam-cli/src/__tests__/memory-scripts/ripgrep-fallback.test.js +149 -0
  182. package/codeyam-cli/src/__tests__/memory-scripts/ripgrep-fallback.test.js.map +1 -0
  183. package/codeyam-cli/src/cli.js +33 -24
  184. package/codeyam-cli/src/cli.js.map +1 -1
  185. package/codeyam-cli/src/codeyam-cli.js +18 -2
  186. package/codeyam-cli/src/codeyam-cli.js.map +1 -1
  187. package/codeyam-cli/src/commands/analyze.js +21 -9
  188. package/codeyam-cli/src/commands/analyze.js.map +1 -1
  189. package/codeyam-cli/src/commands/baseline.js +2 -0
  190. package/codeyam-cli/src/commands/baseline.js.map +1 -1
  191. package/codeyam-cli/src/commands/debug.js +2 -0
  192. package/codeyam-cli/src/commands/debug.js.map +1 -1
  193. package/codeyam-cli/src/commands/default.js +44 -21
  194. package/codeyam-cli/src/commands/default.js.map +1 -1
  195. package/codeyam-cli/src/commands/editor.js +2322 -0
  196. package/codeyam-cli/src/commands/editor.js.map +1 -0
  197. package/codeyam-cli/src/commands/init.js +81 -260
  198. package/codeyam-cli/src/commands/init.js.map +1 -1
  199. package/codeyam-cli/src/commands/memory.js +97 -92
  200. package/codeyam-cli/src/commands/memory.js.map +1 -1
  201. package/codeyam-cli/src/commands/recapture.js +2 -0
  202. package/codeyam-cli/src/commands/recapture.js.map +1 -1
  203. package/codeyam-cli/src/commands/setup-sandbox.js +2 -0
  204. package/codeyam-cli/src/commands/setup-sandbox.js.map +1 -1
  205. package/codeyam-cli/src/commands/setup-simulations.js +284 -0
  206. package/codeyam-cli/src/commands/setup-simulations.js.map +1 -0
  207. package/codeyam-cli/src/commands/test-startup.js +2 -0
  208. package/codeyam-cli/src/commands/test-startup.js.map +1 -1
  209. package/codeyam-cli/src/commands/verify.js +14 -2
  210. package/codeyam-cli/src/commands/verify.js.map +1 -1
  211. package/codeyam-cli/src/utils/__tests__/devServerState.test.js +134 -0
  212. package/codeyam-cli/src/utils/__tests__/devServerState.test.js.map +1 -0
  213. package/codeyam-cli/src/utils/__tests__/editorApi.test.js +127 -0
  214. package/codeyam-cli/src/utils/__tests__/editorApi.test.js.map +1 -0
  215. package/codeyam-cli/src/utils/__tests__/editorAudit.test.js +480 -0
  216. package/codeyam-cli/src/utils/__tests__/editorAudit.test.js.map +1 -0
  217. package/codeyam-cli/src/utils/__tests__/editorCapture.test.js +93 -0
  218. package/codeyam-cli/src/utils/__tests__/editorCapture.test.js.map +1 -0
  219. package/codeyam-cli/src/utils/__tests__/editorDevServer.test.js +155 -0
  220. package/codeyam-cli/src/utils/__tests__/editorDevServer.test.js.map +1 -0
  221. package/codeyam-cli/src/utils/__tests__/editorEntityChangeStatus.test.js +121 -0
  222. package/codeyam-cli/src/utils/__tests__/editorEntityChangeStatus.test.js.map +1 -0
  223. package/codeyam-cli/src/utils/__tests__/editorImageVerifier.test.js +166 -0
  224. package/codeyam-cli/src/utils/__tests__/editorImageVerifier.test.js.map +1 -0
  225. package/codeyam-cli/src/utils/__tests__/editorJournal.test.js +306 -0
  226. package/codeyam-cli/src/utils/__tests__/editorJournal.test.js.map +1 -0
  227. package/codeyam-cli/src/utils/__tests__/editorLoaderHelpers.test.js +393 -0
  228. package/codeyam-cli/src/utils/__tests__/editorLoaderHelpers.test.js.map +1 -0
  229. package/codeyam-cli/src/utils/__tests__/editorMockState.test.js +270 -0
  230. package/codeyam-cli/src/utils/__tests__/editorMockState.test.js.map +1 -0
  231. package/codeyam-cli/src/utils/__tests__/editorPreloadHelpers.test.js +217 -0
  232. package/codeyam-cli/src/utils/__tests__/editorPreloadHelpers.test.js.map +1 -0
  233. package/codeyam-cli/src/utils/__tests__/editorPreview.test.js +167 -0
  234. package/codeyam-cli/src/utils/__tests__/editorPreview.test.js.map +1 -0
  235. package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js +174 -0
  236. package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js.map +1 -0
  237. package/codeyam-cli/src/utils/__tests__/entityChangeStatus.test.js +1493 -0
  238. package/codeyam-cli/src/utils/__tests__/entityChangeStatus.test.js.map +1 -0
  239. package/codeyam-cli/src/utils/__tests__/git.editor.test.js +134 -0
  240. package/codeyam-cli/src/utils/__tests__/git.editor.test.js.map +1 -0
  241. package/codeyam-cli/src/utils/__tests__/npmVersionCheck.test.js +185 -0
  242. package/codeyam-cli/src/utils/__tests__/npmVersionCheck.test.js.map +1 -0
  243. package/codeyam-cli/src/utils/__tests__/pathIgnoring.test.js +9 -0
  244. package/codeyam-cli/src/utils/__tests__/pathIgnoring.test.js.map +1 -1
  245. package/codeyam-cli/src/utils/__tests__/project.test.js +65 -0
  246. package/codeyam-cli/src/utils/__tests__/project.test.js.map +1 -0
  247. package/codeyam-cli/src/utils/__tests__/scenarioMarkers.test.js +121 -0
  248. package/codeyam-cli/src/utils/__tests__/scenarioMarkers.test.js.map +1 -0
  249. package/codeyam-cli/src/utils/__tests__/scenariosManifest.test.js +246 -0
  250. package/codeyam-cli/src/utils/__tests__/scenariosManifest.test.js.map +1 -0
  251. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +166 -86
  252. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js.map +1 -1
  253. package/codeyam-cli/src/utils/analyzer.js +7 -0
  254. package/codeyam-cli/src/utils/analyzer.js.map +1 -1
  255. package/codeyam-cli/src/utils/backgroundServer.js +109 -22
  256. package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
  257. package/codeyam-cli/src/utils/buildFlags.js +4 -0
  258. package/codeyam-cli/src/utils/buildFlags.js.map +1 -0
  259. package/codeyam-cli/src/utils/devModeEvents.js +40 -0
  260. package/codeyam-cli/src/utils/devModeEvents.js.map +1 -0
  261. package/codeyam-cli/src/utils/devServerState.js +71 -0
  262. package/codeyam-cli/src/utils/devServerState.js.map +1 -0
  263. package/codeyam-cli/src/utils/editorApi.js +73 -0
  264. package/codeyam-cli/src/utils/editorApi.js.map +1 -0
  265. package/codeyam-cli/src/utils/editorAudit.js +122 -0
  266. package/codeyam-cli/src/utils/editorAudit.js.map +1 -0
  267. package/codeyam-cli/src/utils/editorCapture.js +102 -0
  268. package/codeyam-cli/src/utils/editorCapture.js.map +1 -0
  269. package/codeyam-cli/src/utils/editorDevServer.js +109 -0
  270. package/codeyam-cli/src/utils/editorDevServer.js.map +1 -0
  271. package/codeyam-cli/src/utils/editorEntityChangeStatus.js +44 -0
  272. package/codeyam-cli/src/utils/editorEntityChangeStatus.js.map +1 -0
  273. package/codeyam-cli/src/utils/editorImageVerifier.js +120 -0
  274. package/codeyam-cli/src/utils/editorImageVerifier.js.map +1 -0
  275. package/codeyam-cli/src/utils/editorJournal.js +150 -0
  276. package/codeyam-cli/src/utils/editorJournal.js.map +1 -0
  277. package/codeyam-cli/src/utils/editorLoaderHelpers.js +81 -0
  278. package/codeyam-cli/src/utils/editorLoaderHelpers.js.map +1 -0
  279. package/codeyam-cli/src/utils/editorMockState.js +248 -0
  280. package/codeyam-cli/src/utils/editorMockState.js.map +1 -0
  281. package/codeyam-cli/src/utils/editorPreloadHelpers.js +135 -0
  282. package/codeyam-cli/src/utils/editorPreloadHelpers.js.map +1 -0
  283. package/codeyam-cli/src/utils/editorPreview.js +96 -0
  284. package/codeyam-cli/src/utils/editorPreview.js.map +1 -0
  285. package/codeyam-cli/src/utils/editorScenarios.js +96 -0
  286. package/codeyam-cli/src/utils/editorScenarios.js.map +1 -0
  287. package/codeyam-cli/src/utils/entityChangeStatus.js +326 -0
  288. package/codeyam-cli/src/utils/entityChangeStatus.js.map +1 -0
  289. package/codeyam-cli/src/utils/entityChangeStatus.server.js +107 -0
  290. package/codeyam-cli/src/utils/entityChangeStatus.server.js.map +1 -0
  291. package/codeyam-cli/src/utils/fileMetadata.js +5 -0
  292. package/codeyam-cli/src/utils/fileMetadata.js.map +1 -1
  293. package/codeyam-cli/src/utils/fileWatcher.js +25 -9
  294. package/codeyam-cli/src/utils/fileWatcher.js.map +1 -1
  295. package/codeyam-cli/src/utils/generateReport.js +2 -2
  296. package/codeyam-cli/src/utils/git.js +103 -0
  297. package/codeyam-cli/src/utils/git.js.map +1 -1
  298. package/codeyam-cli/src/utils/install-skills.js +101 -56
  299. package/codeyam-cli/src/utils/install-skills.js.map +1 -1
  300. package/codeyam-cli/src/utils/interactiveSyncWatcher.js +126 -0
  301. package/codeyam-cli/src/utils/interactiveSyncWatcher.js.map +1 -0
  302. package/codeyam-cli/src/utils/labsAutoCheck.js +19 -0
  303. package/codeyam-cli/src/utils/labsAutoCheck.js.map +1 -0
  304. package/codeyam-cli/src/utils/npmVersionCheck.js +76 -0
  305. package/codeyam-cli/src/utils/npmVersionCheck.js.map +1 -0
  306. package/codeyam-cli/src/utils/pathIgnoring.js +19 -7
  307. package/codeyam-cli/src/utils/pathIgnoring.js.map +1 -1
  308. package/codeyam-cli/src/utils/progress.js +7 -0
  309. package/codeyam-cli/src/utils/progress.js.map +1 -1
  310. package/codeyam-cli/src/utils/project.js +15 -5
  311. package/codeyam-cli/src/utils/project.js.map +1 -1
  312. package/codeyam-cli/src/utils/queue/__tests__/heartbeat.test.js +11 -11
  313. package/codeyam-cli/src/utils/queue/__tests__/heartbeat.test.js.map +1 -1
  314. package/codeyam-cli/src/utils/queue/__tests__/manager.test.js +22 -0
  315. package/codeyam-cli/src/utils/queue/__tests__/manager.test.js.map +1 -1
  316. package/codeyam-cli/src/utils/queue/heartbeat.js +13 -5
  317. package/codeyam-cli/src/utils/queue/heartbeat.js.map +1 -1
  318. package/codeyam-cli/src/utils/queue/job.js +74 -1
  319. package/codeyam-cli/src/utils/queue/job.js.map +1 -1
  320. package/codeyam-cli/src/utils/queue/manager.js +7 -6
  321. package/codeyam-cli/src/utils/queue/manager.js.map +1 -1
  322. package/codeyam-cli/src/utils/requireSimulations.js +10 -0
  323. package/codeyam-cli/src/utils/requireSimulations.js.map +1 -0
  324. package/codeyam-cli/src/utils/ruleReflection/__tests__/confusionDetector.test.js +82 -0
  325. package/codeyam-cli/src/utils/ruleReflection/__tests__/confusionDetector.test.js.map +1 -0
  326. package/codeyam-cli/src/utils/ruleReflection/__tests__/contextBuilder.test.js +229 -0
  327. package/codeyam-cli/src/utils/ruleReflection/__tests__/contextBuilder.test.js.map +1 -0
  328. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/assertRules.js +67 -0
  329. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/assertRules.js.map +1 -0
  330. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/captureFixture.js +105 -0
  331. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/captureFixture.js.map +1 -0
  332. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/loadCapturedFixture.js +34 -0
  333. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/loadCapturedFixture.js.map +1 -0
  334. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/runClaude.js +162 -0
  335. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/runClaude.js.map +1 -0
  336. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/setupTempProject.js +74 -0
  337. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/setupTempProject.js.map +1 -0
  338. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/ruleReflectionE2E.test.js +376 -0
  339. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/ruleReflectionE2E.test.js.map +1 -0
  340. package/codeyam-cli/src/utils/ruleReflection/__tests__/promptBuilder.test.js +113 -0
  341. package/codeyam-cli/src/utils/ruleReflection/__tests__/promptBuilder.test.js.map +1 -0
  342. package/codeyam-cli/src/utils/ruleReflection/__tests__/transcriptParser.test.js +127 -0
  343. package/codeyam-cli/src/utils/ruleReflection/__tests__/transcriptParser.test.js.map +1 -0
  344. package/codeyam-cli/src/utils/ruleReflection/confusionDetector.js +50 -0
  345. package/codeyam-cli/src/utils/ruleReflection/confusionDetector.js.map +1 -0
  346. package/codeyam-cli/src/utils/ruleReflection/contextBuilder.js +116 -0
  347. package/codeyam-cli/src/utils/ruleReflection/contextBuilder.js.map +1 -0
  348. package/codeyam-cli/src/utils/ruleReflection/index.js +5 -0
  349. package/codeyam-cli/src/utils/ruleReflection/index.js.map +1 -0
  350. package/codeyam-cli/src/utils/ruleReflection/promptBuilder.js +44 -0
  351. package/codeyam-cli/src/utils/ruleReflection/promptBuilder.js.map +1 -0
  352. package/codeyam-cli/src/utils/ruleReflection/transcriptParser.js +85 -0
  353. package/codeyam-cli/src/utils/ruleReflection/transcriptParser.js.map +1 -0
  354. package/codeyam-cli/src/utils/ruleReflection/types.js +5 -0
  355. package/codeyam-cli/src/utils/ruleReflection/types.js.map +1 -0
  356. package/codeyam-cli/src/utils/rules/__tests__/parser.test.js +83 -0
  357. package/codeyam-cli/src/utils/rules/__tests__/parser.test.js.map +1 -0
  358. package/codeyam-cli/src/utils/rules/__tests__/pathMatcher.test.js +118 -0
  359. package/codeyam-cli/src/utils/rules/__tests__/pathMatcher.test.js.map +1 -0
  360. package/codeyam-cli/src/utils/rules/__tests__/rulePlacement.test.js +72 -0
  361. package/codeyam-cli/src/utils/rules/__tests__/rulePlacement.test.js.map +1 -0
  362. package/codeyam-cli/src/utils/rules/__tests__/ruleState.test.js +293 -0
  363. package/codeyam-cli/src/utils/rules/__tests__/ruleState.test.js.map +1 -0
  364. package/codeyam-cli/src/utils/rules/__tests__/sourceFiles.test.js +76 -0
  365. package/codeyam-cli/src/utils/rules/__tests__/sourceFiles.test.js.map +1 -0
  366. package/codeyam-cli/src/utils/rules/index.js +2 -0
  367. package/codeyam-cli/src/utils/rules/index.js.map +1 -1
  368. package/codeyam-cli/src/utils/rules/parser.js +16 -29
  369. package/codeyam-cli/src/utils/rules/parser.js.map +1 -1
  370. package/codeyam-cli/src/utils/rules/pathMatcher.js +34 -3
  371. package/codeyam-cli/src/utils/rules/pathMatcher.js.map +1 -1
  372. package/codeyam-cli/src/utils/rules/rulePlacement.js +65 -0
  373. package/codeyam-cli/src/utils/rules/rulePlacement.js.map +1 -0
  374. package/codeyam-cli/src/utils/rules/ruleState.js +150 -0
  375. package/codeyam-cli/src/utils/rules/ruleState.js.map +1 -0
  376. package/codeyam-cli/src/utils/rules/sourceFiles.js +43 -0
  377. package/codeyam-cli/src/utils/rules/sourceFiles.js.map +1 -0
  378. package/codeyam-cli/src/utils/rules/staleness.js +16 -11
  379. package/codeyam-cli/src/utils/rules/staleness.js.map +1 -1
  380. package/codeyam-cli/src/utils/scenarioMarkers.js +134 -0
  381. package/codeyam-cli/src/utils/scenarioMarkers.js.map +1 -0
  382. package/codeyam-cli/src/utils/scenariosManifest.js +112 -0
  383. package/codeyam-cli/src/utils/scenariosManifest.js.map +1 -0
  384. package/codeyam-cli/src/utils/serverState.js +64 -12
  385. package/codeyam-cli/src/utils/serverState.js.map +1 -1
  386. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +83 -43
  387. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js.map +1 -1
  388. package/codeyam-cli/src/utils/simulationGateMiddleware.js +159 -0
  389. package/codeyam-cli/src/utils/simulationGateMiddleware.js.map +1 -0
  390. package/codeyam-cli/src/utils/syncMocksMiddleware.js +5 -24
  391. package/codeyam-cli/src/utils/syncMocksMiddleware.js.map +1 -1
  392. package/codeyam-cli/src/utils/testRunner.js +158 -0
  393. package/codeyam-cli/src/utils/testRunner.js.map +1 -0
  394. package/codeyam-cli/src/utils/transcriptPruning.js +67 -0
  395. package/codeyam-cli/src/utils/transcriptPruning.js.map +1 -0
  396. package/codeyam-cli/src/utils/versionInfo.js +46 -0
  397. package/codeyam-cli/src/utils/versionInfo.js.map +1 -1
  398. package/codeyam-cli/src/utils/webappDetection.js +14 -2
  399. package/codeyam-cli/src/utils/webappDetection.js.map +1 -1
  400. package/codeyam-cli/src/webserver/__tests__/dependency-smoke.test.js +66 -0
  401. package/codeyam-cli/src/webserver/__tests__/dependency-smoke.test.js.map +1 -0
  402. package/codeyam-cli/src/webserver/app/lib/database.js +56 -30
  403. package/codeyam-cli/src/webserver/app/lib/database.js.map +1 -1
  404. package/codeyam-cli/src/webserver/app/lib/dbNotifier.js.map +1 -1
  405. package/codeyam-cli/src/webserver/app/lib/git.js +396 -0
  406. package/codeyam-cli/src/webserver/app/lib/git.js.map +1 -0
  407. package/codeyam-cli/src/webserver/backgroundServer.js +166 -16
  408. package/codeyam-cli/src/webserver/backgroundServer.js.map +1 -1
  409. package/codeyam-cli/src/webserver/bootstrap.js +11 -0
  410. package/codeyam-cli/src/webserver/bootstrap.js.map +1 -1
  411. package/codeyam-cli/src/webserver/build/client/assets/CopyButton-DmJveP3T.js +1 -0
  412. package/codeyam-cli/src/webserver/build/client/assets/{EntityItem-DsN1wKrm.js → EntityItem-C76mRRiF.js} +1 -1
  413. package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeBadge-DLqD3qNt.js → EntityTypeBadge-g3saevPb.js} +1 -1
  414. package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeIcon-Ba2JVPzP.js → EntityTypeIcon-CobE682z.js} +1 -1
  415. package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-Bu6c6aDe.js +1 -0
  416. package/codeyam-cli/src/webserver/build/client/assets/{InteractivePreview-aht4aafF.js → InteractivePreview-DYFW3lDD.js} +3 -3
  417. package/codeyam-cli/src/webserver/build/client/assets/{LibraryFunctionPreview-CVtiBnY5.js → LibraryFunctionPreview-DLeucoVX.js} +1 -1
  418. package/codeyam-cli/src/webserver/build/client/assets/{LoadingDots-B0GLXMsr.js → LoadingDots-BU_OAEMP.js} +1 -1
  419. package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-xgeCVgSM.js → LogViewer-ceAyBX-H.js} +1 -1
  420. package/codeyam-cli/src/webserver/build/client/assets/{ReportIssueModal-OApQuNyq.js → ReportIssueModal-djPLI-WV.js} +3 -8
  421. package/codeyam-cli/src/webserver/build/client/assets/{SafeScreenshot-DuDvi0jm.js → SafeScreenshot-BED4B6sP.js} +1 -1
  422. package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-DzccYyI8.js → ScenarioViewer-ZlRKbhrq.js} +3 -3
  423. package/codeyam-cli/src/webserver/build/client/assets/Spinner-Bb5uFQ5V.js +34 -0
  424. package/codeyam-cli/src/webserver/build/client/assets/{TruncatedFilePath-DyFZkK0l.js → TruncatedFilePath-C8OKAR5x.js} +1 -1
  425. package/codeyam-cli/src/webserver/build/client/assets/ViewportInspectBar-oAf2Kqsf.js +1 -0
  426. package/codeyam-cli/src/webserver/build/client/assets/{_index-BwqWJOgH.js → _index-C96V0n15.js} +1 -1
  427. package/codeyam-cli/src/webserver/build/client/assets/{activity.(_tab)-BwavGCpm.js → activity.(_tab)-BpKzcsJz.js} +6 -11
  428. package/codeyam-cli/src/webserver/build/client/assets/addon-canvas-DpzMmAy5.js +1 -0
  429. package/codeyam-cli/src/webserver/build/client/assets/addon-fit-YJmn1quW.js +12 -0
  430. package/codeyam-cli/src/webserver/build/client/assets/addon-web-links-Duc5hnl7.js +1 -0
  431. package/codeyam-cli/src/webserver/build/client/assets/addon-webgl-DI8QOUvO.js +58 -0
  432. package/codeyam-cli/src/webserver/build/client/assets/agent-transcripts-D9hemwl6.js +22 -0
  433. package/codeyam-cli/src/webserver/build/client/assets/api.agent-transcripts-l0sNRNKZ.js +1 -0
  434. package/codeyam-cli/src/webserver/build/client/assets/api.dev-mode-events-l0sNRNKZ.js +1 -0
  435. package/codeyam-cli/src/webserver/build/client/assets/api.editor-audit-l0sNRNKZ.js +1 -0
  436. package/codeyam-cli/src/webserver/build/client/assets/api.editor-capture-scenario-l0sNRNKZ.js +1 -0
  437. package/codeyam-cli/src/webserver/build/client/assets/api.editor-client-errors-l0sNRNKZ.js +1 -0
  438. package/codeyam-cli/src/webserver/build/client/assets/api.editor-commit-l0sNRNKZ.js +1 -0
  439. package/codeyam-cli/src/webserver/build/client/assets/api.editor-dev-server-l0sNRNKZ.js +1 -0
  440. package/codeyam-cli/src/webserver/build/client/assets/api.editor-entity-status-l0sNRNKZ.js +1 -0
  441. package/codeyam-cli/src/webserver/build/client/assets/api.editor-file-diff-l0sNRNKZ.js +1 -0
  442. package/codeyam-cli/src/webserver/build/client/assets/api.editor-file-l0sNRNKZ.js +1 -0
  443. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-entry-l0sNRNKZ.js +1 -0
  444. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-image._-l0sNRNKZ.js +1 -0
  445. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-l0sNRNKZ.js +1 -0
  446. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-screenshot-l0sNRNKZ.js +1 -0
  447. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-update-l0sNRNKZ.js +1 -0
  448. package/codeyam-cli/src/webserver/build/client/assets/api.editor-load-commit-l0sNRNKZ.js +1 -0
  449. package/codeyam-cli/src/webserver/build/client/assets/api.editor-refresh-l0sNRNKZ.js +1 -0
  450. package/codeyam-cli/src/webserver/build/client/assets/api.editor-register-scenario-l0sNRNKZ.js +1 -0
  451. package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-data-l0sNRNKZ.js +1 -0
  452. package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-image._-l0sNRNKZ.js +1 -0
  453. package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenarios-l0sNRNKZ.js +1 -0
  454. package/codeyam-cli/src/webserver/build/client/assets/api.editor-switch-scenario-l0sNRNKZ.js +1 -0
  455. package/codeyam-cli/src/webserver/build/client/assets/api.editor-test-results-l0sNRNKZ.js +1 -0
  456. package/codeyam-cli/src/webserver/build/client/assets/api.labs-unlock-l0sNRNKZ.js +1 -0
  457. package/codeyam-cli/src/webserver/build/client/assets/api.rule-path-l0sNRNKZ.js +1 -0
  458. package/codeyam-cli/src/webserver/build/client/assets/api.save-fixture-l0sNRNKZ.js +1 -0
  459. package/codeyam-cli/src/webserver/build/client/assets/book-open-D_nMCFmP.js +6 -0
  460. package/codeyam-cli/src/webserver/build/client/assets/{chevron-down-Cx24_aWc.js → chevron-down-BH2h1Ea2.js} +1 -1
  461. package/codeyam-cli/src/webserver/build/client/assets/{chunk-EPOLDU6W-CXRTFQ3F.js → chunk-JZWAC4HX-C4pqxYJB.js} +12 -12
  462. package/codeyam-cli/src/webserver/build/client/assets/{circle-check-BOARzkeR.js → circle-check-DyIKORY6.js} +1 -1
  463. package/codeyam-cli/src/webserver/build/client/assets/copy-NDbZjXao.js +11 -0
  464. package/codeyam-cli/src/webserver/build/client/assets/{createLucideIcon-BdhJEx6B.js → createLucideIcon-CMT1jU2q.js} +1 -1
  465. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-CltMNppm.js +1 -0
  466. package/codeyam-cli/src/webserver/build/client/assets/editor-Rfq_y0VR.js +10 -0
  467. package/codeyam-cli/src/webserver/build/client/assets/editorPreview-GNwaLSmC.js +41 -0
  468. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-BJUiQqZF.js → entity._sha._-DItJnD8s.js} +11 -11
  469. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.dev-CCa2trIL.js +6 -0
  470. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-CF164ouH.js +6 -0
  471. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-p9hhkjJM.js +6 -0
  472. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.edit._scenarioId-CTBG2mmz.js → entity._sha_.edit._scenarioId-BMvVHNXU.js} +2 -2
  473. package/codeyam-cli/src/webserver/build/client/assets/{entry.client-CS2cb_eZ.js → entry.client-DTvKq3TY.js} +1 -1
  474. package/codeyam-cli/src/webserver/build/client/assets/{fileTableUtils-DMJ7zii9.js → fileTableUtils-cPo8LiG3.js} +1 -1
  475. package/codeyam-cli/src/webserver/build/client/assets/{files-CJ6lTdTA.js → files-DO4CZ16O.js} +1 -1
  476. package/codeyam-cli/src/webserver/build/client/assets/git-CdN8sCqs.js +1 -0
  477. package/codeyam-cli/src/webserver/build/client/assets/globals-Bd0cs8vw.css +1 -0
  478. package/codeyam-cli/src/webserver/build/client/assets/{index-B1h680n5.js → index-10oVnAAH.js} +1 -1
  479. package/codeyam-cli/src/webserver/build/client/assets/{index-lzqtyFU8.js → index-BcvgDzbZ.js} +1 -1
  480. package/codeyam-cli/src/webserver/build/client/assets/index-yHOVb4rc.js +15 -0
  481. package/codeyam-cli/src/webserver/build/client/assets/labs-Zk7ryIM1.js +1 -0
  482. package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-B7B9V-bu.js → loader-circle-BAXYRVEO.js} +1 -1
  483. package/codeyam-cli/src/webserver/build/client/assets/manifest-9ab0aba3.js +1 -0
  484. package/codeyam-cli/src/webserver/build/client/assets/memory-Dg0mvYrI.js +96 -0
  485. package/codeyam-cli/src/webserver/build/client/assets/pause-DTAcYxBt.js +11 -0
  486. package/codeyam-cli/src/webserver/build/client/assets/root-3ciuWk-c.js +67 -0
  487. package/codeyam-cli/src/webserver/build/client/assets/{search-CxXUmBSd.js → search-fKo7v0Zo.js} +1 -1
  488. package/codeyam-cli/src/webserver/build/client/assets/settings-DfuTtcJP.js +1 -0
  489. package/codeyam-cli/src/webserver/build/client/assets/{simulations-DwFIBT09.js → simulations-B3aOzpCZ.js} +1 -1
  490. package/codeyam-cli/src/webserver/build/client/assets/terminal-BG4heKCG.js +11 -0
  491. package/codeyam-cli/src/webserver/build/client/assets/{triangle-alert-B6LgvRJg.js → triangle-alert-DtSmdtM4.js} +1 -1
  492. package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-CrAK28Bc.js +1 -0
  493. package/codeyam-cli/src/webserver/build/client/assets/useLastLogLine-C14nCb1q.js +2 -0
  494. package/codeyam-cli/src/webserver/build/client/assets/{useReportContext-DYxHZQuP.js → useReportContext-O-jkvSPx.js} +1 -1
  495. package/codeyam-cli/src/webserver/build/client/assets/{useToast-mBRpZPiu.js → useToast-9FIWuYfK.js} +1 -1
  496. package/codeyam-cli/src/webserver/build/client/assets/xterm-BqvuqXEL.js +27 -0
  497. package/codeyam-cli/src/webserver/build/server/assets/index-DCxIbVvl.js +1 -0
  498. package/codeyam-cli/src/webserver/build/server/assets/server-build-E-peu3XZ.js +367 -0
  499. package/codeyam-cli/src/webserver/build/server/index.js +1 -1
  500. package/codeyam-cli/src/webserver/build-info.json +5 -5
  501. package/codeyam-cli/src/webserver/devServer.js +39 -5
  502. package/codeyam-cli/src/webserver/devServer.js.map +1 -1
  503. package/codeyam-cli/src/webserver/editorProxy.js +407 -0
  504. package/codeyam-cli/src/webserver/editorProxy.js.map +1 -0
  505. package/codeyam-cli/src/webserver/scripts/codeyam-preload.mjs +396 -0
  506. package/codeyam-cli/src/webserver/scripts/journalCapture.ts +140 -0
  507. package/codeyam-cli/src/webserver/server.js +275 -1
  508. package/codeyam-cli/src/webserver/server.js.map +1 -1
  509. package/codeyam-cli/src/webserver/terminalServer.js +703 -0
  510. package/codeyam-cli/src/webserver/terminalServer.js.map +1 -0
  511. package/codeyam-cli/templates/codeyam-editor-claude.md +68 -0
  512. package/codeyam-cli/templates/codeyam-memory-hook.sh +19 -20
  513. package/codeyam-cli/templates/commands/codeyam-diagnose.md +481 -0
  514. package/codeyam-cli/templates/editor-step-hook.py +208 -0
  515. package/codeyam-cli/templates/hooks/staleness-check.sh +43 -0
  516. package/codeyam-cli/templates/isolation-route/next-app.tsx.template +80 -0
  517. package/codeyam-cli/templates/isolation-route/next-pages.tsx.template +79 -0
  518. package/codeyam-cli/templates/isolation-route/vite-react.tsx.template +78 -0
  519. package/codeyam-cli/templates/msw/browser-setup.ts.template +47 -0
  520. package/codeyam-cli/templates/msw/handler-router.ts.template +47 -0
  521. package/codeyam-cli/templates/msw/server-setup.ts.template +52 -0
  522. package/codeyam-cli/templates/nextjs-prisma-sqlite/PRISMA_SETUP.md +84 -0
  523. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/api/todos/route.ts +17 -0
  524. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/codeyam-isolate/layout.tsx +12 -0
  525. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/globals.css +26 -0
  526. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/layout.tsx +34 -0
  527. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/lib/prisma.ts +19 -0
  528. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/page.tsx +10 -0
  529. package/codeyam-cli/templates/nextjs-prisma-sqlite/eslint.config.mjs +11 -0
  530. package/codeyam-cli/templates/nextjs-prisma-sqlite/gitignore +63 -0
  531. package/codeyam-cli/templates/nextjs-prisma-sqlite/next.config.ts +14 -0
  532. package/codeyam-cli/templates/nextjs-prisma-sqlite/package.json +38 -0
  533. package/codeyam-cli/templates/nextjs-prisma-sqlite/postcss.config.mjs +7 -0
  534. package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma/schema.prisma +27 -0
  535. package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma/seed.ts +37 -0
  536. package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma.config.ts +12 -0
  537. package/codeyam-cli/templates/nextjs-prisma-sqlite/tsconfig.json +34 -0
  538. package/codeyam-cli/templates/nextjs-prisma-sqlite/vitest.config.ts +13 -0
  539. package/codeyam-cli/templates/prompts/conversation-guidance.txt +44 -0
  540. package/codeyam-cli/templates/prompts/conversation-prompt.txt +28 -0
  541. package/codeyam-cli/templates/prompts/interruption-prompt.txt +31 -0
  542. package/codeyam-cli/templates/prompts/stale-rules-prompt.txt +24 -0
  543. package/codeyam-cli/templates/rule-notification-hook.py +83 -0
  544. package/codeyam-cli/templates/rule-reflection-hook.py +574 -87
  545. package/codeyam-cli/templates/rules-instructions.md +45 -60
  546. package/codeyam-cli/templates/{codeyam:debug.md → skills/codeyam-debug/SKILL.md} +1 -1
  547. package/codeyam-cli/templates/skills/codeyam-dev-mode/SKILL.md +237 -0
  548. package/codeyam-cli/templates/skills/codeyam-editor/SKILL.md +130 -0
  549. package/codeyam-cli/templates/skills/codeyam-memory/SKILL.md +611 -0
  550. package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/deprecated-prompt.md +100 -0
  551. package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/detect-deprecated-patterns.mjs +139 -0
  552. package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/find-exports.mjs +52 -0
  553. package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/misleading-api-prompt.md +117 -0
  554. package/codeyam-cli/templates/skills/codeyam-memory/scripts/lib/read-json-field.mjs +61 -0
  555. package/codeyam-cli/templates/skills/codeyam-memory/scripts/lib/ripgrep-fallback.mjs +155 -0
  556. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/analyze-prompt.md +46 -0
  557. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/cleanup.mjs +13 -0
  558. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/filter-session.mjs +95 -0
  559. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/preprocess.mjs +160 -0
  560. package/codeyam-cli/templates/skills/codeyam-new-rule/SKILL.md +11 -0
  561. package/codeyam-cli/templates/{codeyam:setup.md → skills/codeyam-setup/SKILL.md} +13 -1
  562. package/codeyam-cli/templates/{codeyam:sim.md → skills/codeyam-sim/SKILL.md} +1 -1
  563. package/codeyam-cli/templates/{codeyam:test.md → skills/codeyam-test/SKILL.md} +1 -1
  564. package/codeyam-cli/templates/{codeyam:verify.md → skills/codeyam-verify/SKILL.md} +1 -1
  565. package/package.json +28 -21
  566. package/packages/ai/index.js +1 -1
  567. package/packages/ai/index.js.map +1 -1
  568. package/packages/ai/src/lib/analyzeScope.js +21 -1
  569. package/packages/ai/src/lib/analyzeScope.js.map +1 -1
  570. package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js +22 -4
  571. package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js.map +1 -1
  572. package/packages/ai/src/lib/astScopes/patterns/forInStatementHandler.js +10 -14
  573. package/packages/ai/src/lib/astScopes/patterns/forInStatementHandler.js.map +1 -1
  574. package/packages/ai/src/lib/astScopes/processExpression.js +78 -1
  575. package/packages/ai/src/lib/astScopes/processExpression.js.map +1 -1
  576. package/packages/ai/src/lib/astScopes/sharedPatterns.js +25 -0
  577. package/packages/ai/src/lib/astScopes/sharedPatterns.js.map +1 -1
  578. package/packages/ai/src/lib/completionCall.js +10 -7
  579. package/packages/ai/src/lib/completionCall.js.map +1 -1
  580. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +495 -10
  581. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
  582. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.js +5 -1
  583. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.js.map +1 -1
  584. package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js +11 -2
  585. package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js.map +1 -1
  586. package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js +2 -2
  587. package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js.map +1 -1
  588. package/packages/ai/src/lib/dataStructure/helpers/coerceObjectsToPrimitivesBySchema.js +63 -0
  589. package/packages/ai/src/lib/dataStructure/helpers/coerceObjectsToPrimitivesBySchema.js.map +1 -0
  590. package/packages/ai/src/lib/dataStructure/helpers/coercePrimitivesToArraysBySchema.js +54 -0
  591. package/packages/ai/src/lib/dataStructure/helpers/coercePrimitivesToArraysBySchema.js.map +1 -0
  592. package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js +122 -12
  593. package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js.map +1 -1
  594. package/packages/ai/src/lib/dataStructure/helpers/convertTypeAnnotationsToValues.js +15 -1
  595. package/packages/ai/src/lib/dataStructure/helpers/convertTypeAnnotationsToValues.js.map +1 -1
  596. package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js +78 -17
  597. package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js.map +1 -1
  598. package/packages/ai/src/lib/dataStructure/helpers/stripNullableMarkers.js +34 -0
  599. package/packages/ai/src/lib/dataStructure/helpers/stripNullableMarkers.js.map +1 -0
  600. package/packages/ai/src/lib/dataStructureChunking.js +30 -11
  601. package/packages/ai/src/lib/dataStructureChunking.js.map +1 -1
  602. package/packages/ai/src/lib/generateEntityDataStructure.js +46 -2
  603. package/packages/ai/src/lib/generateEntityDataStructure.js.map +1 -1
  604. package/packages/ai/src/lib/generateEntityScenarioData.js +269 -5
  605. package/packages/ai/src/lib/generateEntityScenarioData.js.map +1 -1
  606. package/packages/ai/src/lib/generateExecutionFlows.js +86 -2
  607. package/packages/ai/src/lib/generateExecutionFlows.js.map +1 -1
  608. package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js +242 -81
  609. package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js.map +1 -1
  610. package/packages/ai/src/lib/isolateScopes.js +39 -3
  611. package/packages/ai/src/lib/isolateScopes.js.map +1 -1
  612. package/packages/ai/src/lib/mergeJsonTypeDefinitions.js +5 -0
  613. package/packages/ai/src/lib/mergeJsonTypeDefinitions.js.map +1 -1
  614. package/packages/ai/src/lib/promptGenerators/collapseNullableObjects.js +97 -0
  615. package/packages/ai/src/lib/promptGenerators/collapseNullableObjects.js.map +1 -0
  616. package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js +17 -2
  617. package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js.map +1 -1
  618. package/packages/analyze/index.js +1 -0
  619. package/packages/analyze/index.js.map +1 -1
  620. package/packages/analyze/src/lib/ProjectAnalyzer.js +13 -4
  621. package/packages/analyze/src/lib/ProjectAnalyzer.js.map +1 -1
  622. package/packages/analyze/src/lib/asts/index.js +4 -2
  623. package/packages/analyze/src/lib/asts/index.js.map +1 -1
  624. package/packages/analyze/src/lib/asts/nodes/getNodeType.js +1 -0
  625. package/packages/analyze/src/lib/asts/nodes/getNodeType.js.map +1 -1
  626. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js +52 -2
  627. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js.map +1 -1
  628. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js +10 -0
  629. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js.map +1 -1
  630. package/packages/analyze/src/lib/files/analyze/dependencyResolver.js +0 -5
  631. package/packages/analyze/src/lib/files/analyze/dependencyResolver.js.map +1 -1
  632. package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js +9 -0
  633. package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js.map +1 -1
  634. package/packages/analyze/src/lib/files/scenarios/TransformationTracer.js +907 -0
  635. package/packages/analyze/src/lib/files/scenarios/TransformationTracer.js.map +1 -0
  636. package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js +5 -1
  637. package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js.map +1 -1
  638. package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js +51 -14
  639. package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js.map +1 -1
  640. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +181 -13
  641. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
  642. package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js +0 -40
  643. package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js.map +1 -1
  644. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +328 -49
  645. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js.map +1 -1
  646. package/packages/analyze/src/lib/index.js +1 -0
  647. package/packages/analyze/src/lib/index.js.map +1 -1
  648. package/packages/database/index.js +1 -0
  649. package/packages/database/index.js.map +1 -1
  650. package/packages/database/src/lib/analysisBranchToDb.js +1 -1
  651. package/packages/database/src/lib/analysisBranchToDb.js.map +1 -1
  652. package/packages/database/src/lib/analysisToDb.js +1 -1
  653. package/packages/database/src/lib/analysisToDb.js.map +1 -1
  654. package/packages/database/src/lib/branchToDb.js +1 -1
  655. package/packages/database/src/lib/branchToDb.js.map +1 -1
  656. package/packages/database/src/lib/commitBranchToDb.js +1 -1
  657. package/packages/database/src/lib/commitBranchToDb.js.map +1 -1
  658. package/packages/database/src/lib/commitToDb.js +1 -1
  659. package/packages/database/src/lib/commitToDb.js.map +1 -1
  660. package/packages/database/src/lib/fileToDb.js +1 -1
  661. package/packages/database/src/lib/fileToDb.js.map +1 -1
  662. package/packages/database/src/lib/kysely/db.js +8 -0
  663. package/packages/database/src/lib/kysely/db.js.map +1 -1
  664. package/packages/database/src/lib/kysely/tables/editorScenariosTable.js +48 -0
  665. package/packages/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -0
  666. package/packages/database/src/lib/kysely/tables/labsRequestsTable.js +35 -0
  667. package/packages/database/src/lib/kysely/tables/labsRequestsTable.js.map +1 -0
  668. package/packages/database/src/lib/loadCommits.js +23 -13
  669. package/packages/database/src/lib/loadCommits.js.map +1 -1
  670. package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.js +1 -4
  671. package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.js.map +1 -1
  672. package/packages/database/src/lib/projectToDb.js +1 -1
  673. package/packages/database/src/lib/projectToDb.js.map +1 -1
  674. package/packages/database/src/lib/saveFiles.js +1 -1
  675. package/packages/database/src/lib/saveFiles.js.map +1 -1
  676. package/packages/database/src/lib/scenarioToDb.js +1 -1
  677. package/packages/database/src/lib/scenarioToDb.js.map +1 -1
  678. package/packages/database/src/lib/updateCommitMetadata.js +100 -89
  679. package/packages/database/src/lib/updateCommitMetadata.js.map +1 -1
  680. package/packages/database/src/lib/updateFreshAnalysisStatus.js +41 -30
  681. package/packages/database/src/lib/updateFreshAnalysisStatus.js.map +1 -1
  682. package/packages/database/src/lib/updateFreshAnalysisStatusWithScenarios.js +68 -57
  683. package/packages/database/src/lib/updateFreshAnalysisStatusWithScenarios.js.map +1 -1
  684. package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js +29 -1
  685. package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js.map +1 -1
  686. package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +33 -5
  687. package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
  688. package/packages/utils/src/lib/fs/rsyncCopy.js +98 -3
  689. package/packages/utils/src/lib/fs/rsyncCopy.js.map +1 -1
  690. package/scripts/npm-post-install.cjs +34 -0
  691. package/codeyam-cli/src/commands/detect-universal-mocks.js +0 -118
  692. package/codeyam-cli/src/commands/detect-universal-mocks.js.map +0 -1
  693. package/codeyam-cli/src/commands/list.js +0 -31
  694. package/codeyam-cli/src/commands/list.js.map +0 -1
  695. package/codeyam-cli/src/commands/webapp-info.js +0 -146
  696. package/codeyam-cli/src/commands/webapp-info.js.map +0 -1
  697. package/codeyam-cli/src/utils/universal-mocks.js +0 -152
  698. package/codeyam-cli/src/utils/universal-mocks.js.map +0 -1
  699. package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-C8lyxW9k.js +0 -34
  700. package/codeyam-cli/src/webserver/build/client/assets/copy-Bb-80kDT.js +0 -6
  701. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-BBnGWYga.js +0 -1
  702. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-DavjRmOY.js +0 -6
  703. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-D1T4TGjf.js +0 -6
  704. package/codeyam-cli/src/webserver/build/client/assets/file-code-Dhef1kWN.js +0 -6
  705. package/codeyam-cli/src/webserver/build/client/assets/git-CPTZZ-JZ.js +0 -15
  706. package/codeyam-cli/src/webserver/build/client/assets/globals-D3yhhV8x.css +0 -1
  707. package/codeyam-cli/src/webserver/build/client/assets/manifest-a78b90a2.js +0 -1
  708. package/codeyam-cli/src/webserver/build/client/assets/memory--GCbFsBE.js +0 -92
  709. package/codeyam-cli/src/webserver/build/client/assets/root-eVAaavTS.js +0 -62
  710. package/codeyam-cli/src/webserver/build/client/assets/settings-CS5f3WzT.js +0 -1
  711. package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-C1v1PQzo.js +0 -1
  712. package/codeyam-cli/src/webserver/build/client/assets/useLastLogLine-aSv48UbS.js +0 -2
  713. package/codeyam-cli/src/webserver/build/server/assets/index-BM6TDT1Y.js +0 -1
  714. package/codeyam-cli/src/webserver/build/server/assets/server-build-dYC34MHw.js +0 -257
  715. package/codeyam-cli/templates/codeyam-stop-hook.sh +0 -284
  716. package/codeyam-cli/templates/codeyam:diagnose.md +0 -803
  717. package/codeyam-cli/templates/codeyam:memory.md +0 -341
  718. package/codeyam-cli/templates/codeyam:new-rule.md +0 -13
  719. package/scripts/finalize-analyzer.cjs +0 -81
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Pure redirect and mock-matching functions for the Node.js preload module.
3
+ *
4
+ * Extracted so they can be unit-tested without loading the actual preload
5
+ * (which patches global fetch and http).
6
+ */
7
+ /**
8
+ * If `url` points to the dev server, return a redirected URL going through the proxy.
9
+ * Otherwise return the original URL unchanged.
10
+ */
11
+ export function redirectUrl(url, devServerUrl, proxyUrl) {
12
+ let parsed;
13
+ try {
14
+ parsed = new URL(url);
15
+ }
16
+ catch {
17
+ // Relative URL or invalid — pass through
18
+ return url;
19
+ }
20
+ const dev = new URL(devServerUrl);
21
+ const proxy = new URL(proxyUrl);
22
+ if (parsed.hostname === dev.hostname && parsed.port === dev.port) {
23
+ parsed.hostname = proxy.hostname;
24
+ parsed.port = proxy.port;
25
+ parsed.protocol = proxy.protocol;
26
+ return parsed.toString();
27
+ }
28
+ return url;
29
+ }
30
+ /**
31
+ * If http.request options target the dev server, patch them to go through the proxy.
32
+ * Returns the original options object if no redirect is needed.
33
+ */
34
+ export function redirectOptions(options, devServerUrl, proxyUrl) {
35
+ const dev = new URL(devServerUrl);
36
+ const proxy = new URL(proxyUrl);
37
+ const devPort = parseInt(dev.port, 10);
38
+ const proxyPort = parseInt(proxy.port, 10);
39
+ // Match on hostname + port
40
+ if (options.hostname &&
41
+ parseInt(String(options.port), 10) === devPort &&
42
+ options.hostname === dev.hostname) {
43
+ return {
44
+ ...options,
45
+ hostname: proxy.hostname,
46
+ port: proxyPort,
47
+ headers: options.headers
48
+ ? { ...options.headers, host: `${proxy.hostname}:${proxyPort}` }
49
+ : options.headers,
50
+ };
51
+ }
52
+ // Match on host field (hostname:port combined)
53
+ if (options.host) {
54
+ const expectedHost = `${dev.hostname}:${devPort}`;
55
+ if (options.host === expectedHost) {
56
+ return {
57
+ ...options,
58
+ host: `${proxy.hostname}:${proxyPort}`,
59
+ };
60
+ }
61
+ }
62
+ return options;
63
+ }
64
+ /**
65
+ * Match a request URL against scenario mock data routes.
66
+ *
67
+ * Supports:
68
+ * - Path-only routes: "/api/drinks" matches fetch("http://localhost:3000/api/drinks")
69
+ * - Full URL routes: "https://api.stripe.com/v1/charges" matches external API calls
70
+ * - Method-prefixed: "POST /api/drinks" matches POST requests only
71
+ *
72
+ * Returns the mock response if matched, or null if no match.
73
+ */
74
+ export function matchScenarioRoute(requestUrl, method, scenarioData) {
75
+ const routes = scenarioData.routes;
76
+ if (!routes || typeof routes !== 'object')
77
+ return null;
78
+ // Extract pathname from the request URL
79
+ let pathname;
80
+ try {
81
+ const parsed = new URL(requestUrl);
82
+ pathname = parsed.pathname;
83
+ }
84
+ catch {
85
+ // Relative URL — use as-is
86
+ pathname = requestUrl.split('?')[0];
87
+ }
88
+ const upperMethod = method.toUpperCase();
89
+ for (const [routeKey, routeValue] of Object.entries(routes)) {
90
+ if (!routeValue || typeof routeValue !== 'object')
91
+ continue;
92
+ const entry = routeValue;
93
+ // Check for method-prefixed route: "POST /api/drinks"
94
+ const spaceIdx = routeKey.indexOf(' ');
95
+ if (spaceIdx !== -1) {
96
+ const routeMethod = routeKey.slice(0, spaceIdx).toUpperCase();
97
+ const routePath = routeKey.slice(spaceIdx + 1);
98
+ if (routeMethod === upperMethod && routePath === pathname) {
99
+ return {
100
+ body: entry.body ?? routeValue,
101
+ status: typeof entry.status === 'number' ? entry.status : 200,
102
+ };
103
+ }
104
+ continue;
105
+ }
106
+ // Full URL route: "https://api.stripe.com/v1/charges"
107
+ if (routeKey.startsWith('http://') || routeKey.startsWith('https://')) {
108
+ try {
109
+ const routeParsed = new URL(routeKey);
110
+ const reqParsed = new URL(requestUrl);
111
+ if (routeParsed.hostname === reqParsed.hostname &&
112
+ routeParsed.port === reqParsed.port &&
113
+ routeParsed.pathname === reqParsed.pathname) {
114
+ return {
115
+ body: entry.body ?? routeValue,
116
+ status: typeof entry.status === 'number' ? entry.status : 200,
117
+ };
118
+ }
119
+ }
120
+ catch {
121
+ // Invalid URL in route key — skip
122
+ }
123
+ continue;
124
+ }
125
+ // Path-only route: "/api/drinks"
126
+ if (routeKey === pathname) {
127
+ return {
128
+ body: entry.body ?? routeValue,
129
+ status: typeof entry.status === 'number' ? entry.status : 200,
130
+ };
131
+ }
132
+ }
133
+ return null;
134
+ }
135
+ //# sourceMappingURL=editorPreloadHelpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editorPreloadHelpers.js","sourceRoot":"","sources":["../../../../src/utils/editorPreloadHelpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Preview URL construction and viewport scaling for the editor.
3
+ *
4
+ * Extracted from inline logic in editor.tsx (previewUrl useMemo and previewScale useMemo).
5
+ */
6
+ import { generateScenarioSlug } from "./editorScenarios.js";
7
+ /**
8
+ * Resolve the preview URL based on current editor state.
9
+ *
10
+ * Priority:
11
+ * 1. Analyzed scenario with interactive server URL
12
+ * 2. Active scenario with path-based URL → combine with proxy/dev server
13
+ * 3. Active scenario with full URL → use directly
14
+ * 4. Zoom component with scenario → __codeyam__ isolation URL
15
+ * 5. Base proxy/dev server URL
16
+ */
17
+ export function buildPreviewUrl(params) {
18
+ const { activeAnalyzedScenario, analyzedPreviewUrl, activeScenarioId, scenarios, proxyUrl, devServerUrl, zoomComponent, } = params;
19
+ // When viewing an analyzed scenario, use the interactive server URL
20
+ if (activeAnalyzedScenario && analyzedPreviewUrl) {
21
+ return analyzedPreviewUrl;
22
+ }
23
+ // If analyzed scenario is active but no URL, fall through to check other sources
24
+ // but if nothing else matches either, return null
25
+ if (activeAnalyzedScenario && !analyzedPreviewUrl) {
26
+ return null;
27
+ }
28
+ // Component isolation scenarios store a path (e.g. /codeyam-isolate/DrinkCard?s=Default)
29
+ if (activeScenarioId) {
30
+ const scenario = scenarios.find((s) => s.id === activeScenarioId);
31
+ if (scenario?.url) {
32
+ const base = proxyUrl || devServerUrl;
33
+ if (!base)
34
+ return null;
35
+ if (scenario.url.startsWith('/')) {
36
+ return `${base}${scenario.url}`;
37
+ }
38
+ return scenario.url;
39
+ }
40
+ }
41
+ const baseUrl = proxyUrl || devServerUrl;
42
+ if (!baseUrl)
43
+ return null;
44
+ if (zoomComponent && activeScenarioId) {
45
+ const scenario = scenarios.find((s) => s.id === activeScenarioId);
46
+ const scenarioSlug = scenario
47
+ ? generateScenarioSlug(scenario.name)
48
+ : 'Default';
49
+ return `${baseUrl}/__codeyam__/${zoomComponent}/${scenarioSlug}`;
50
+ }
51
+ return baseUrl;
52
+ }
53
+ /**
54
+ * Apply a navigation path override to a preview URL.
55
+ *
56
+ * Correctly handles paths with query strings (e.g. `/codeyam-isolate/DrinkCard?s=Default`)
57
+ * by parsing the path into pathname + search components instead of naively assigning
58
+ * to `URL.pathname` (which would URL-encode the `?`).
59
+ */
60
+ export function applyNavigatePath(previewUrl, navigatePath) {
61
+ if (!previewUrl)
62
+ return previewUrl;
63
+ if (!navigatePath)
64
+ return previewUrl;
65
+ try {
66
+ const base = new URL(previewUrl);
67
+ // Parse navigatePath to separate pathname from query string
68
+ const qIndex = navigatePath.indexOf('?');
69
+ if (qIndex >= 0) {
70
+ base.pathname = navigatePath.slice(0, qIndex);
71
+ base.search = navigatePath.slice(qIndex);
72
+ }
73
+ else {
74
+ base.pathname = navigatePath;
75
+ base.search = '';
76
+ }
77
+ return base.href;
78
+ }
79
+ catch {
80
+ return previewUrl;
81
+ }
82
+ }
83
+ /**
84
+ * Compute CSS scale factor to fit a viewport in a container.
85
+ * Returns 1 if the target fits, otherwise the smallest scale that fits both dimensions.
86
+ */
87
+ export function calculatePreviewScale(containerSize, targetSize) {
88
+ const targetW = targetSize.width;
89
+ const targetH = targetSize.height ?? 900;
90
+ const availW = containerSize.width;
91
+ const availH = containerSize.height;
92
+ if (targetW <= availW && targetH <= availH)
93
+ return 1;
94
+ return Math.min(availW / targetW, availH / targetH);
95
+ }
96
+ //# sourceMappingURL=editorPreview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editorPreview.js","sourceRoot":"","sources":["../../../../src/utils/editorPreview.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Shared scenario utilities used across editor routes and components.
3
+ *
4
+ * Extracted from inline logic in editor.tsx, api.editor-journal-entry.ts,
5
+ * and api.editor-register-scenario.ts.
6
+ */
7
+ import fs from 'fs';
8
+ import path from 'path';
9
+ /**
10
+ * Generic Map-based deduplication that keeps the last item for each key.
11
+ * Items are iterated in order, so later entries overwrite earlier ones.
12
+ * Map preserves insertion order of first appearance.
13
+ */
14
+ export function deduplicateByName(items, keyFn) {
15
+ const byKey = new Map();
16
+ for (const item of items) {
17
+ byKey.set(keyFn(item), item);
18
+ }
19
+ return [...byKey.values()];
20
+ }
21
+ /**
22
+ * Convert a scenario name to a URL-safe slug.
23
+ * Replaces any run of non-alphanumeric, non-underscore characters with a single underscore.
24
+ */
25
+ export function generateScenarioSlug(name) {
26
+ return name.replace(/[^a-zA-Z0-9_]+/g, '_');
27
+ }
28
+ /**
29
+ * Convert an ISO 8601 timestamp (e.g. "2026-02-28T19:00:00.000Z") to
30
+ * SQLite-compatible format (e.g. "2026-02-28 19:00:00").
31
+ *
32
+ * SQLite's CURRENT_TIMESTAMP uses space-separated "YYYY-MM-DD HH:MM:SS" format,
33
+ * so we need this conversion for date comparisons.
34
+ */
35
+ export function convertIsoToSqliteTimestamp(iso) {
36
+ return iso.replace('T', ' ').replace(/\.\d{3}Z$/, '');
37
+ }
38
+ /**
39
+ * Resolve which URL to use for Playwright screenshot capture.
40
+ *
41
+ * Priority:
42
+ * 1. Path-based URL + proxy → combine (component isolation with API interception)
43
+ * 2. Full URL → use directly (legacy)
44
+ * 3. No URL → proxy root or dev server root (page scenarios)
45
+ */
46
+ /**
47
+ * Resolve the navigation path for preview refresh.
48
+ * Priority: explicit path > scenario URL from DB > undefined (plain refresh).
49
+ */
50
+ export function resolvePreviewNavPath(explicitPath, scenarioUrl) {
51
+ if (explicitPath)
52
+ return explicitPath;
53
+ if (scenarioUrl)
54
+ return scenarioUrl;
55
+ return undefined;
56
+ }
57
+ /**
58
+ * Clear the editor step state file (for starting a new feature).
59
+ * This should NOT touch the user prompt file — the prompt is captured
60
+ * by the hook before step 1 runs, so deleting it here would lose it.
61
+ */
62
+ export function clearEditorState(root) {
63
+ const statePath = path.join(root, '.codeyam', 'editor-step.json');
64
+ try {
65
+ fs.unlinkSync(statePath);
66
+ }
67
+ catch {
68
+ // File doesn't exist, that's fine
69
+ }
70
+ }
71
+ /**
72
+ * Clear the user prompt file so the hook can capture the next feature request.
73
+ * Call this after a feature is committed, not during step 1.
74
+ */
75
+ export function clearEditorUserPrompt(root) {
76
+ const promptPath = path.join(root, '.codeyam', 'editor-user-prompt.txt');
77
+ try {
78
+ fs.unlinkSync(promptPath);
79
+ }
80
+ catch {
81
+ // File doesn't exist, that's fine
82
+ }
83
+ }
84
+ export function determineCaptureUrl(url, proxyUrl, devServerUrl) {
85
+ const isPath = url && url.startsWith('/');
86
+ if (isPath && proxyUrl) {
87
+ return `${proxyUrl}${url}`;
88
+ }
89
+ else if (url && !isPath) {
90
+ return url;
91
+ }
92
+ else {
93
+ return proxyUrl || devServerUrl || null;
94
+ }
95
+ }
96
+ //# sourceMappingURL=editorScenarios.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editorScenarios.js","sourceRoot":"","sources":["../../../../src/utils/editorScenarios.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAU,EACV,KAA0B;IAE1B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAa,CAAC;IACnC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,2BAA2B,CAAC,GAAW;IACrD,OAAO,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AACxD,CAAC;AAED;;;;;;;GAOG;AACH;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,YAAuC,EACvC,WAAsC;IAEtC,IAAI,YAAY;QAAE,OAAO,YAAY,CAAC;IACtC,IAAI,WAAW;QAAE,OAAO,WAAW,CAAC;IACpC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,kBAAkB,CAAC,CAAC;IAClE,IAAI,CAAC;QACH,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,kCAAkC;IACpC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,wBAAwB,CAAC,CAAC;IACzE,IAAI,CAAC;QACH,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,kCAAkC;IACpC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,GAA8B,EAC9B,QAAuB,EACvB,YAA2B;IAE3B,MAAM,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAE1C,IAAI,MAAM,IAAI,QAAQ,EAAE,CAAC;QACvB,OAAO,GAAG,QAAQ,GAAG,GAAG,EAAE,CAAC;IAC7B,CAAC;SAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC1B,OAAO,GAAG,CAAC;IACb,CAAC;SAAM,CAAC;QACN,OAAO,QAAQ,IAAI,YAAY,IAAI,IAAI,CAAC;IAC1C,CAAC;AACH,CAAC"}
@@ -0,0 +1,326 @@
1
+ /**
2
+ * Pure, deterministic computation of entity change status (new / edited / impacted).
3
+ *
4
+ * Uses pre-computed `importedBy` metadata from the entity DB table to trace
5
+ * transitive dependencies, showing which root-cause dependency triggered each impact.
6
+ *
7
+ * Shared by both the editor.tsx loader and the journal entry API.
8
+ */
9
+ /**
10
+ * Build the changedFiles map from git status entries.
11
+ *
12
+ * - `added` / `untracked` → 'new'
13
+ * - `modified` → 'edited'
14
+ * - `deleted` / `renamed` → ignored (not relevant for entity change status)
15
+ * - When `isFirstFeature` is true, ALL non-deleted files are treated as 'new'
16
+ * (scaffold commit is boilerplate, so everything the user built is new).
17
+ */
18
+ export function buildChangedFilesMap(gitFiles, isFirstFeature) {
19
+ const changedFiles = new Map();
20
+ for (const gf of gitFiles) {
21
+ if (gf.status === 'deleted')
22
+ continue;
23
+ if (isFirstFeature || gf.status === 'added' || gf.status === 'untracked') {
24
+ changedFiles.set(gf.path, 'new');
25
+ }
26
+ else if (gf.status === 'modified') {
27
+ changedFiles.set(gf.path, 'edited');
28
+ }
29
+ }
30
+ return changedFiles;
31
+ }
32
+ /**
33
+ * Derive a page entity name from a scenario URL.
34
+ * Returns 'Home' for root/null URLs, capitalized first segment otherwise.
35
+ *
36
+ * This is the canonical implementation — previously duplicated in 3+ components.
37
+ */
38
+ export function pageNameFromUrl(url) {
39
+ if (!url || url === '/')
40
+ return 'Home';
41
+ const path = url.split('?')[0].replace(/^\//, '');
42
+ const segment = path.split('/')[0];
43
+ return segment.charAt(0).toUpperCase() + segment.slice(1);
44
+ }
45
+ /**
46
+ * Build EntityInfo[] from editor scenarios + page file paths + entity metadata.
47
+ *
48
+ * This converts the heterogeneous scenario data (component scenarios with
49
+ * componentName/Path, page scenarios with URL) into a uniform EntityInfo[]
50
+ * that computeEntityChangeStatus can consume.
51
+ *
52
+ * - Component scenarios: use componentName + componentPath directly
53
+ * - Page scenarios: derive page name from URL, look up file path from pageFilePaths
54
+ * - Deduplicates by entity name (first occurrence wins)
55
+ * - Enriches each entity with importedBy metadata from the entity DB
56
+ */
57
+ export function buildEntityInfosFromScenarios(scenarios, pageFilePaths, entitiesWithMetadata) {
58
+ const entityInfos = [];
59
+ const seenNames = new Set();
60
+ for (const s of scenarios) {
61
+ let entityName = null;
62
+ let filePath = null;
63
+ if (s.componentName && s.componentPath) {
64
+ entityName = s.componentName;
65
+ filePath = s.componentPath;
66
+ }
67
+ else if (!s.componentName && s.url !== undefined) {
68
+ const pageName = pageNameFromUrl(s.url);
69
+ if (pageFilePaths[pageName]) {
70
+ entityName = pageName;
71
+ filePath = pageFilePaths[pageName];
72
+ }
73
+ }
74
+ if (entityName && filePath && !seenNames.has(entityName)) {
75
+ seenNames.add(entityName);
76
+ const metadataEntity = entitiesWithMetadata.find((e) => e.name === entityName);
77
+ entityInfos.push({
78
+ name: entityName,
79
+ filePath,
80
+ importedBy: metadataEntity?.metadata?.importedBy,
81
+ });
82
+ }
83
+ }
84
+ return entityInfos;
85
+ }
86
+ /**
87
+ * Build EntityInfo[] from glossary function entries.
88
+ *
89
+ * Glossary functions (library utilities with tests) need to participate in
90
+ * the change status graph so that the results panel and journal entries can
91
+ * filter them to only show new/edited/impacted functions.
92
+ *
93
+ * - Deduplicates by name (first occurrence wins)
94
+ * - Skips entries whose name is already in `existingNames` (e.g., from scenarios)
95
+ */
96
+ export function buildEntityInfosFromGlossary(glossaryEntries, existingNames) {
97
+ const entityInfos = [];
98
+ const seenNames = new Set(existingNames);
99
+ for (const entry of glossaryEntries) {
100
+ if (seenNames.has(entry.name))
101
+ continue;
102
+ seenNames.add(entry.name);
103
+ entityInfos.push({
104
+ name: entry.name,
105
+ filePath: entry.filePath,
106
+ });
107
+ }
108
+ return entityInfos;
109
+ }
110
+ // ── Filtering ────────────────────────────────────────────────────────────
111
+ /**
112
+ * Filter grouped entries to only show those with a change status.
113
+ * When entityChangeStatus is empty/undefined, returns all entries (safe fallback).
114
+ */
115
+ export function filterGroupsByChangeStatus(groups, entityChangeStatus) {
116
+ if (!entityChangeStatus || Object.keys(entityChangeStatus).length === 0) {
117
+ return groups;
118
+ }
119
+ return groups.filter(([name]) => entityChangeStatus[name]);
120
+ }
121
+ /**
122
+ * Filter glossary function entries to only show those with a change status.
123
+ * When entityChangeStatus is empty/undefined, returns all entries (safe fallback
124
+ * for first feature builds where everything is new).
125
+ */
126
+ export function filterGlossaryByChangeStatus(functions, entityChangeStatus) {
127
+ if (!entityChangeStatus || Object.keys(entityChangeStatus).length === 0) {
128
+ return functions;
129
+ }
130
+ return functions.filter((fn) => entityChangeStatus[fn.name]);
131
+ }
132
+ /**
133
+ * Filter scenario screenshots to only include those belonging to entities
134
+ * with a change status (new/edited/impacted).
135
+ *
136
+ * Screenshot names follow the pattern "ComponentName - Scenario" or just "Scenario"
137
+ * (app-level, no component prefix).
138
+ *
139
+ * `pageEntityNames` lists the entity names that represent pages (e.g., "Home", "Drinks").
140
+ * App-level screenshots (no component prefix) match if any page entity has a status.
141
+ *
142
+ * When entityChangeStatus is empty/undefined, returns all screenshots (safe fallback).
143
+ */
144
+ export function filterScenarioScreenshotsByChangeStatus(screenshots, entityChangeStatus, pageEntityNames) {
145
+ if (!entityChangeStatus || Object.keys(entityChangeStatus).length === 0) {
146
+ return screenshots;
147
+ }
148
+ // Check if any page entity has a change status
149
+ const anyPageChanged = pageEntityNames
150
+ ? [...pageEntityNames].some((name) => entityChangeStatus[name])
151
+ : false;
152
+ return screenshots.filter((ss) => {
153
+ const dashIdx = ss.name.indexOf(' - ');
154
+ if (dashIdx !== -1) {
155
+ const prefix = ss.name.slice(0, dashIdx);
156
+ // "App - Scenario" is a legacy page-level screenshot (backward compat)
157
+ if (prefix === 'App')
158
+ return anyPageChanged;
159
+ // Component screenshot: "ComponentName - Scenario"
160
+ return !!entityChangeStatus[prefix];
161
+ }
162
+ else {
163
+ // No prefix: app-level screenshot
164
+ return anyPageChanged;
165
+ }
166
+ });
167
+ }
168
+ // ── Graph Helpers ────────────────────────────────────────────────────────
169
+ /**
170
+ * Build a reverse dependency graph: entityName → Set of entity names that import it.
171
+ * Extracted from entity metadata.importedBy which has the shape:
172
+ * { [filePath]: { [importerName]: { shas: string[] } } }
173
+ */
174
+ export function buildReverseDependencyGraph(entities) {
175
+ const graph = new Map();
176
+ for (const entity of entities) {
177
+ const importedBy = entity.importedBy;
178
+ if (!importedBy || typeof importedBy !== 'object')
179
+ continue;
180
+ const importers = new Set();
181
+ for (const filePath of Object.keys(importedBy)) {
182
+ for (const importerName of Object.keys(importedBy[filePath])) {
183
+ importers.add(importerName);
184
+ }
185
+ }
186
+ if (importers.size > 0) {
187
+ graph.set(entity.name, importers);
188
+ }
189
+ }
190
+ return graph;
191
+ }
192
+ /**
193
+ * Classify entities as directly changed ('new' or 'edited') by matching
194
+ * entity file paths against the set of changed files.
195
+ */
196
+ export function classifyDirectChanges(changedFiles, entities) {
197
+ const result = new Map();
198
+ for (const entity of entities) {
199
+ const status = changedFiles.get(entity.filePath);
200
+ if (status) {
201
+ result.set(entity.name, status);
202
+ }
203
+ }
204
+ return result;
205
+ }
206
+ // ── Core ─────────────────────────────────────────────────────────────────
207
+ const DEFAULT_MAX_DEPTH = 20;
208
+ /**
209
+ * Compute change status for all entities.
210
+ *
211
+ * Algorithm (BFS with root-cause tracking):
212
+ * 1. Build reverseDepGraph from importedBy metadata
213
+ * 2. Classify direct changes by matching entity file paths to changedFiles
214
+ * 3. BFS from directly-changed entities through the reverse graph:
215
+ * - Root causes are tracked in a canonical map; the BFS reads from
216
+ * this map (not stale queue snapshots) for correct diamond propagation
217
+ * - Directly-changed entities act as pass-through: upstream root causes
218
+ * merge through them to downstream importers, but their own status stays
219
+ * - Nodes are re-enqueued when their root cause set grows (handles
220
+ * converging paths at different depths)
221
+ * - Phantom importers (not in entities list) are skipped
222
+ * - Termination: root cause sets only grow, bounded by |directChanges|;
223
+ * maxDepth provides additional safety
224
+ * 4. Return map with only new/edited/impacted entries (unchanged entities omitted)
225
+ */
226
+ export function computeEntityChangeStatus(changedFiles, entities, maxDepth = DEFAULT_MAX_DEPTH) {
227
+ const result = {};
228
+ if (entities.length === 0 || changedFiles.size === 0) {
229
+ return result;
230
+ }
231
+ // Build entity name → EntityInfo lookup
232
+ const entityByName = new Map();
233
+ for (const entity of entities) {
234
+ entityByName.set(entity.name, entity);
235
+ }
236
+ // Step 1: Build reverse dependency graph
237
+ const reverseDepGraph = buildReverseDependencyGraph(entities);
238
+ // Step 2: Classify direct changes
239
+ const directChanges = classifyDirectChanges(changedFiles, entities);
240
+ // Record direct changes in result
241
+ for (const [entityName, changeType] of directChanges) {
242
+ result[entityName] = { status: changeType };
243
+ }
244
+ // Step 3: BFS from directly-changed entities
245
+ // Track root causes for each impacted entity in a canonical map.
246
+ // The BFS reads from this map (not stale queue snapshots) so that
247
+ // root causes from multiple converging paths are fully propagated.
248
+ const rootCauses = new Map(); // entityName → Set<rootCauseEntityName>
249
+ // Seed: directly-changed entities carry themselves as root causes
250
+ for (const [entityName] of directChanges) {
251
+ rootCauses.set(entityName, new Set([entityName]));
252
+ }
253
+ const queue = [];
254
+ // Seed BFS with directly-changed entities at depth 0
255
+ for (const [entityName] of directChanges) {
256
+ queue.push({ name: entityName, depth: 0 });
257
+ }
258
+ while (queue.length > 0) {
259
+ const { name, depth } = queue.shift();
260
+ if (depth >= maxDepth)
261
+ continue;
262
+ // Read canonical root causes from the map — NOT a stale queue snapshot.
263
+ // For seeds this is {self}; for impacted nodes it's the fully-merged set
264
+ // from all paths that have been processed so far. BFS guarantees that
265
+ // all shorter paths are processed before longer ones, so the set is
266
+ // complete for same-depth convergence (the common case: diamond deps).
267
+ const currentRootCauses = rootCauses.get(name) || new Set();
268
+ // Find all entities that import this one
269
+ const importers = reverseDepGraph.get(name);
270
+ if (!importers)
271
+ continue;
272
+ for (const importerName of importers) {
273
+ // Skip phantom importers (referenced in importedBy but not in entities list)
274
+ if (!entityByName.has(importerName))
275
+ continue;
276
+ // Merge root causes into canonical map — even for directly-changed
277
+ // entities, so they can act as pass-through for downstream propagation.
278
+ // (Their status won't be overridden — step 4 skips directly-changed.)
279
+ if (!rootCauses.has(importerName)) {
280
+ rootCauses.set(importerName, new Set());
281
+ }
282
+ const existing = rootCauses.get(importerName);
283
+ let grew = false;
284
+ for (const rc of currentRootCauses) {
285
+ if (!existing.has(rc)) {
286
+ existing.add(rc);
287
+ grew = true;
288
+ }
289
+ }
290
+ // Enqueue if new root causes were added. This handles:
291
+ // - First visit: always enqueue
292
+ // - Later visit from a different path: re-enqueue so downstream
293
+ // importers receive the newly-merged root causes
294
+ if (grew) {
295
+ queue.push({ name: importerName, depth: depth + 1 });
296
+ }
297
+ }
298
+ }
299
+ // Step 4: Build impacted entries from root causes
300
+ // Skip directly-changed entities — they already have their status set and
301
+ // are only in rootCauses to serve as propagation seeds.
302
+ for (const [entityName, causes] of rootCauses) {
303
+ if (directChanges.has(entityName))
304
+ continue;
305
+ const impactedBy = [];
306
+ for (const causeName of causes) {
307
+ const causeEntity = entityByName.get(causeName);
308
+ const changeType = directChanges.get(causeName);
309
+ if (causeEntity && changeType) {
310
+ impactedBy.push({
311
+ name: causeName,
312
+ filePath: causeEntity.filePath,
313
+ changeType,
314
+ });
315
+ }
316
+ }
317
+ // Sort by name for deterministic output
318
+ impactedBy.sort((a, b) => a.name.localeCompare(b.name));
319
+ result[entityName] = {
320
+ status: 'impacted',
321
+ impactedBy: impactedBy.length > 0 ? impactedBy : undefined,
322
+ };
323
+ }
324
+ return result;
325
+ }
326
+ //# sourceMappingURL=entityChangeStatus.js.map