@codeyam/codeyam-cli 0.1.0-staging.eb21b2f → 0.1.0-staging.f3b710d

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 (882) hide show
  1. package/analyzer-template/.build-info.json +8 -8
  2. package/analyzer-template/log.txt +3 -3
  3. package/analyzer-template/package.json +24 -24
  4. package/analyzer-template/packages/ai/package.json +3 -3
  5. package/analyzer-template/packages/ai/src/lib/astScopes/astScopeAnalyzer.ts +34 -3
  6. package/analyzer-template/packages/ai/src/lib/astScopes/methodSemantics.ts +135 -0
  7. package/analyzer-template/packages/ai/src/lib/astScopes/nodeToSource.ts +19 -0
  8. package/analyzer-template/packages/ai/src/lib/astScopes/paths.ts +11 -4
  9. package/analyzer-template/packages/ai/src/lib/completionCall.ts +114 -113
  10. package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +295 -14
  11. package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/ParentScopeManager.ts +10 -3
  12. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.ts +16 -6
  13. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/coercePrimitivesToArraysBySchema.ts +62 -0
  14. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/stripNullableMarkers.ts +35 -0
  15. package/analyzer-template/packages/ai/src/lib/generateEntityScenarioData.ts +78 -2
  16. package/analyzer-template/packages/ai/src/lib/generateExecutionFlows.ts +0 -33
  17. package/analyzer-template/packages/analyze/index.ts +4 -1
  18. package/analyzer-template/packages/analyze/src/lib/ProjectAnalyzer.ts +19 -7
  19. package/analyzer-template/packages/analyze/src/lib/asts/index.ts +7 -2
  20. package/analyzer-template/packages/analyze/src/lib/asts/nodes/getNodeType.ts +1 -0
  21. package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.ts +28 -2
  22. package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities.ts +14 -37
  23. package/analyzer-template/packages/analyze/src/lib/files/analyze/dependencyResolver.ts +0 -6
  24. package/analyzer-template/packages/analyze/src/lib/files/analyze/findOrCreateEntity.ts +22 -6
  25. package/analyzer-template/packages/analyze/src/lib/files/analyze/gatherEntityMap.ts +9 -12
  26. package/analyzer-template/packages/analyze/src/lib/files/analyze/trackEntityCircularDependencies.ts +21 -0
  27. package/analyzer-template/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.ts +82 -10
  28. package/analyzer-template/packages/analyze/src/lib/files/analyzeChange.ts +4 -0
  29. package/analyzer-template/packages/analyze/src/lib/files/analyzeInitial.ts +4 -0
  30. package/analyzer-template/packages/analyze/src/lib/files/analyzeNextRoute.ts +8 -3
  31. package/analyzer-template/packages/analyze/src/lib/files/scenarios/TransformationTracer.ts +65 -28
  32. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +322 -58
  33. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.ts +0 -98
  34. package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +1707 -1466
  35. package/analyzer-template/packages/aws/package.json +10 -10
  36. package/analyzer-template/packages/database/index.ts +1 -0
  37. package/analyzer-template/packages/database/package.json +4 -4
  38. package/analyzer-template/packages/database/src/lib/kysely/db.ts +8 -0
  39. package/analyzer-template/packages/database/src/lib/kysely/tables/editorScenariosTable.ts +164 -0
  40. package/analyzer-template/packages/database/src/lib/loadAnalysis.ts +25 -15
  41. package/analyzer-template/packages/database/src/lib/loadCommits.ts +31 -20
  42. package/analyzer-template/packages/database/src/lib/loadEntities.ts +0 -6
  43. package/analyzer-template/packages/database/src/lib/loadEntity.ts +19 -8
  44. package/analyzer-template/packages/database/src/lib/loadReadyToBeCapturedAnalyses.ts +0 -5
  45. package/analyzer-template/packages/database/src/lib/updateCommitMetadata.ts +94 -143
  46. package/analyzer-template/packages/database/src/lib/updateFreshAnalysisStatus.ts +58 -42
  47. package/analyzer-template/packages/database/src/lib/updateFreshAnalysisStatusWithScenarios.ts +81 -65
  48. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.ts +29 -1
  49. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.ts +33 -5
  50. package/analyzer-template/packages/github/dist/database/index.d.ts +1 -0
  51. package/analyzer-template/packages/github/dist/database/index.d.ts.map +1 -1
  52. package/analyzer-template/packages/github/dist/database/index.js +1 -0
  53. package/analyzer-template/packages/github/dist/database/index.js.map +1 -1
  54. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts +2 -0
  55. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts.map +1 -1
  56. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js +5 -0
  57. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js.map +1 -1
  58. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.d.ts +29 -0
  59. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.d.ts.map +1 -0
  60. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.js +149 -0
  61. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -0
  62. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts +5 -0
  63. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts.map +1 -1
  64. package/analyzer-template/packages/github/dist/database/src/lib/loadAnalysis.d.ts.map +1 -1
  65. package/analyzer-template/packages/github/dist/database/src/lib/loadAnalysis.js +7 -1
  66. package/analyzer-template/packages/github/dist/database/src/lib/loadAnalysis.js.map +1 -1
  67. package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.d.ts.map +1 -1
  68. package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.js +23 -13
  69. package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.js.map +1 -1
  70. package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.d.ts.map +1 -1
  71. package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.js +0 -6
  72. package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.js.map +1 -1
  73. package/analyzer-template/packages/github/dist/database/src/lib/loadEntity.d.ts +4 -1
  74. package/analyzer-template/packages/github/dist/database/src/lib/loadEntity.d.ts.map +1 -1
  75. package/analyzer-template/packages/github/dist/database/src/lib/loadEntity.js +5 -5
  76. package/analyzer-template/packages/github/dist/database/src/lib/loadEntity.js.map +1 -1
  77. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.d.ts.map +1 -1
  78. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.js +1 -4
  79. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.js.map +1 -1
  80. package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.d.ts.map +1 -1
  81. package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js +76 -90
  82. package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js.map +1 -1
  83. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatus.d.ts.map +1 -1
  84. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatus.js +41 -30
  85. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatus.js.map +1 -1
  86. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatusWithScenarios.d.ts.map +1 -1
  87. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatusWithScenarios.js +68 -57
  88. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatusWithScenarios.js.map +1 -1
  89. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.d.ts.map +1 -1
  90. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js +29 -1
  91. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js.map +1 -1
  92. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.d.ts.map +1 -1
  93. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +33 -5
  94. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
  95. package/analyzer-template/packages/github/dist/types/src/enums/ProjectFramework.d.ts +2 -0
  96. package/analyzer-template/packages/github/dist/types/src/enums/ProjectFramework.d.ts.map +1 -1
  97. package/analyzer-template/packages/github/dist/types/src/enums/ProjectFramework.js +2 -0
  98. package/analyzer-template/packages/github/dist/types/src/enums/ProjectFramework.js.map +1 -1
  99. package/analyzer-template/packages/github/dist/types/src/types/ProjectMetadata.d.ts +1 -0
  100. package/analyzer-template/packages/github/dist/types/src/types/ProjectMetadata.d.ts.map +1 -1
  101. package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts +10 -0
  102. package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts.map +1 -1
  103. package/analyzer-template/packages/github/package.json +1 -1
  104. package/analyzer-template/packages/types/src/enums/ProjectFramework.ts +2 -0
  105. package/analyzer-template/packages/types/src/types/ProjectMetadata.ts +1 -0
  106. package/analyzer-template/packages/types/src/types/Scenario.ts +10 -0
  107. package/analyzer-template/packages/ui-components/package.json +1 -1
  108. package/analyzer-template/packages/utils/dist/types/src/enums/ProjectFramework.d.ts +2 -0
  109. package/analyzer-template/packages/utils/dist/types/src/enums/ProjectFramework.d.ts.map +1 -1
  110. package/analyzer-template/packages/utils/dist/types/src/enums/ProjectFramework.js +2 -0
  111. package/analyzer-template/packages/utils/dist/types/src/enums/ProjectFramework.js.map +1 -1
  112. package/analyzer-template/packages/utils/dist/types/src/types/ProjectMetadata.d.ts +1 -0
  113. package/analyzer-template/packages/utils/dist/types/src/types/ProjectMetadata.d.ts.map +1 -1
  114. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts +10 -0
  115. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts.map +1 -1
  116. package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.d.ts +3 -1
  117. package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.d.ts.map +1 -1
  118. package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.js +28 -3
  119. package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.js.map +1 -1
  120. package/analyzer-template/packages/utils/src/lib/fs/rsyncCopy.ts +41 -2
  121. package/analyzer-template/playwright/captureFromUrl.ts +89 -82
  122. package/analyzer-template/project/analyzeFileEntities.ts +26 -0
  123. package/analyzer-template/project/constructMockCode.ts +168 -48
  124. package/analyzer-template/project/orchestrateCapture.ts +4 -1
  125. package/analyzer-template/project/reconcileMockDataKeys.ts +19 -14
  126. package/analyzer-template/project/runMultiScenarioServer.ts +26 -3
  127. package/analyzer-template/project/start.ts +3 -0
  128. package/analyzer-template/project/startScenarioCapture.ts +9 -0
  129. package/analyzer-template/project/writeClientLogRoute.ts +125 -0
  130. package/analyzer-template/project/writeMockDataTsx.ts +17 -0
  131. package/analyzer-template/project/writeScenarioComponents.ts +96 -17
  132. package/analyzer-template/tsconfig.json +13 -1
  133. package/background/src/lib/virtualized/project/analyzeFileEntities.js +22 -0
  134. package/background/src/lib/virtualized/project/analyzeFileEntities.js.map +1 -1
  135. package/background/src/lib/virtualized/project/constructMockCode.js +143 -39
  136. package/background/src/lib/virtualized/project/constructMockCode.js.map +1 -1
  137. package/background/src/lib/virtualized/project/orchestrateCapture.js +4 -1
  138. package/background/src/lib/virtualized/project/orchestrateCapture.js.map +1 -1
  139. package/background/src/lib/virtualized/project/reconcileMockDataKeys.js +17 -11
  140. package/background/src/lib/virtualized/project/reconcileMockDataKeys.js.map +1 -1
  141. package/background/src/lib/virtualized/project/runMultiScenarioServer.js +23 -3
  142. package/background/src/lib/virtualized/project/runMultiScenarioServer.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 +73 -12
  152. package/background/src/lib/virtualized/project/writeScenarioComponents.js.map +1 -1
  153. package/codeyam-cli/scripts/apply-setup.js +208 -11
  154. package/codeyam-cli/scripts/apply-setup.js.map +1 -1
  155. package/codeyam-cli/src/__tests__/memory-scripts/filter-session.test.js +196 -0
  156. package/codeyam-cli/src/__tests__/memory-scripts/filter-session.test.js.map +1 -0
  157. package/codeyam-cli/src/__tests__/memory-scripts/read-json-field.test.js +114 -0
  158. package/codeyam-cli/src/__tests__/memory-scripts/read-json-field.test.js.map +1 -0
  159. package/codeyam-cli/src/__tests__/memory-scripts/ripgrep-fallback.test.js +149 -0
  160. package/codeyam-cli/src/__tests__/memory-scripts/ripgrep-fallback.test.js.map +1 -0
  161. package/codeyam-cli/src/cli.js +56 -25
  162. package/codeyam-cli/src/cli.js.map +1 -1
  163. package/codeyam-cli/src/commands/__tests__/editor.analyzeImportsArgs.test.js +47 -0
  164. package/codeyam-cli/src/commands/__tests__/editor.analyzeImportsArgs.test.js.map +1 -0
  165. package/codeyam-cli/src/commands/__tests__/editor.auditNoAutoAnalysis.test.js +71 -0
  166. package/codeyam-cli/src/commands/__tests__/editor.auditNoAutoAnalysis.test.js.map +1 -0
  167. package/codeyam-cli/src/commands/__tests__/editor.designSystem.test.js +30 -0
  168. package/codeyam-cli/src/commands/__tests__/editor.designSystem.test.js.map +1 -0
  169. package/codeyam-cli/src/commands/__tests__/editor.isolateArgs.test.js +51 -0
  170. package/codeyam-cli/src/commands/__tests__/editor.isolateArgs.test.js.map +1 -0
  171. package/codeyam-cli/src/commands/__tests__/editor.statePersistence.test.js +55 -0
  172. package/codeyam-cli/src/commands/__tests__/editor.statePersistence.test.js.map +1 -0
  173. package/codeyam-cli/src/commands/__tests__/editor.stepDispatch.test.js +56 -0
  174. package/codeyam-cli/src/commands/__tests__/editor.stepDispatch.test.js.map +1 -0
  175. package/codeyam-cli/src/commands/__tests__/init.gitignore.test.js +137 -47
  176. package/codeyam-cli/src/commands/__tests__/init.gitignore.test.js.map +1 -1
  177. package/codeyam-cli/src/commands/analyze.js +17 -7
  178. package/codeyam-cli/src/commands/analyze.js.map +1 -1
  179. package/codeyam-cli/src/commands/default.js +14 -2
  180. package/codeyam-cli/src/commands/default.js.map +1 -1
  181. package/codeyam-cli/src/commands/editor.js +6313 -0
  182. package/codeyam-cli/src/commands/editor.js.map +1 -0
  183. package/codeyam-cli/src/commands/editorAnalyzeImportsArgs.js +23 -0
  184. package/codeyam-cli/src/commands/editorAnalyzeImportsArgs.js.map +1 -0
  185. package/codeyam-cli/src/commands/editorIsolateArgs.js +25 -0
  186. package/codeyam-cli/src/commands/editorIsolateArgs.js.map +1 -0
  187. package/codeyam-cli/src/commands/init.js +129 -45
  188. package/codeyam-cli/src/commands/init.js.map +1 -1
  189. package/codeyam-cli/src/commands/memory.js +29 -58
  190. package/codeyam-cli/src/commands/memory.js.map +1 -1
  191. package/codeyam-cli/src/commands/telemetry.js +37 -0
  192. package/codeyam-cli/src/commands/telemetry.js.map +1 -0
  193. package/codeyam-cli/src/data/designSystems.js +27 -0
  194. package/codeyam-cli/src/data/designSystems.js.map +1 -0
  195. package/codeyam-cli/src/data/techStacks.js +77 -0
  196. package/codeyam-cli/src/data/techStacks.js.map +1 -0
  197. package/codeyam-cli/src/utils/__tests__/analyzerFinalization.test.js +173 -0
  198. package/codeyam-cli/src/utils/__tests__/analyzerFinalization.test.js.map +1 -0
  199. package/codeyam-cli/src/utils/__tests__/backgroundServer.test.js +46 -0
  200. package/codeyam-cli/src/utils/__tests__/backgroundServer.test.js.map +1 -0
  201. package/codeyam-cli/src/utils/__tests__/devServerState.test.js +226 -0
  202. package/codeyam-cli/src/utils/__tests__/devServerState.test.js.map +1 -0
  203. package/codeyam-cli/src/utils/__tests__/editorApi.test.js +181 -0
  204. package/codeyam-cli/src/utils/__tests__/editorApi.test.js.map +1 -0
  205. package/codeyam-cli/src/utils/__tests__/editorAudit.test.js +4160 -0
  206. package/codeyam-cli/src/utils/__tests__/editorAudit.test.js.map +1 -0
  207. package/codeyam-cli/src/utils/__tests__/editorBroadcastViewport.test.js +76 -0
  208. package/codeyam-cli/src/utils/__tests__/editorBroadcastViewport.test.js.map +1 -0
  209. package/codeyam-cli/src/utils/__tests__/editorCapture.test.js +93 -0
  210. package/codeyam-cli/src/utils/__tests__/editorCapture.test.js.map +1 -0
  211. package/codeyam-cli/src/utils/__tests__/editorCaptureScenarioSeeding.test.js +137 -0
  212. package/codeyam-cli/src/utils/__tests__/editorCaptureScenarioSeeding.test.js.map +1 -0
  213. package/codeyam-cli/src/utils/__tests__/editorDeleteScenario.test.js +100 -0
  214. package/codeyam-cli/src/utils/__tests__/editorDeleteScenario.test.js.map +1 -0
  215. package/codeyam-cli/src/utils/__tests__/editorDevServer.test.js +304 -0
  216. package/codeyam-cli/src/utils/__tests__/editorDevServer.test.js.map +1 -0
  217. package/codeyam-cli/src/utils/__tests__/editorEntityChangeStatus.test.js +194 -0
  218. package/codeyam-cli/src/utils/__tests__/editorEntityChangeStatus.test.js.map +1 -0
  219. package/codeyam-cli/src/utils/__tests__/editorEntityHelpers.test.js +381 -0
  220. package/codeyam-cli/src/utils/__tests__/editorEntityHelpers.test.js.map +1 -0
  221. package/codeyam-cli/src/utils/__tests__/editorGuardMiddleware.test.js +67 -0
  222. package/codeyam-cli/src/utils/__tests__/editorGuardMiddleware.test.js.map +1 -0
  223. package/codeyam-cli/src/utils/__tests__/editorImageVerifier.test.js +294 -0
  224. package/codeyam-cli/src/utils/__tests__/editorImageVerifier.test.js.map +1 -0
  225. package/codeyam-cli/src/utils/__tests__/editorJournal.test.js +542 -0
  226. package/codeyam-cli/src/utils/__tests__/editorJournal.test.js.map +1 -0
  227. package/codeyam-cli/src/utils/__tests__/editorLoaderHelpers.test.js +594 -0
  228. package/codeyam-cli/src/utils/__tests__/editorLoaderHelpers.test.js.map +1 -0
  229. package/codeyam-cli/src/utils/__tests__/editorMigration.test.js +435 -0
  230. package/codeyam-cli/src/utils/__tests__/editorMigration.test.js.map +1 -0
  231. package/codeyam-cli/src/utils/__tests__/editorMockState.test.js +270 -0
  232. package/codeyam-cli/src/utils/__tests__/editorMockState.test.js.map +1 -0
  233. package/codeyam-cli/src/utils/__tests__/editorPreloadHelpers.test.js +217 -0
  234. package/codeyam-cli/src/utils/__tests__/editorPreloadHelpers.test.js.map +1 -0
  235. package/codeyam-cli/src/utils/__tests__/editorPreview.test.js +361 -0
  236. package/codeyam-cli/src/utils/__tests__/editorPreview.test.js.map +1 -0
  237. package/codeyam-cli/src/utils/__tests__/editorProxySession.test.js +250 -0
  238. package/codeyam-cli/src/utils/__tests__/editorProxySession.test.js.map +1 -0
  239. package/codeyam-cli/src/utils/__tests__/editorRoadmap.test.js +1108 -0
  240. package/codeyam-cli/src/utils/__tests__/editorRoadmap.test.js.map +1 -0
  241. package/codeyam-cli/src/utils/__tests__/editorScenarioLookup.test.js +139 -0
  242. package/codeyam-cli/src/utils/__tests__/editorScenarioLookup.test.js.map +1 -0
  243. package/codeyam-cli/src/utils/__tests__/editorScenarioSwitch.test.js +411 -0
  244. package/codeyam-cli/src/utils/__tests__/editorScenarioSwitch.test.js.map +1 -0
  245. package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js +1768 -0
  246. package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js.map +1 -0
  247. package/codeyam-cli/src/utils/__tests__/editorSeedAdapter.test.js +413 -0
  248. package/codeyam-cli/src/utils/__tests__/editorSeedAdapter.test.js.map +1 -0
  249. package/codeyam-cli/src/utils/__tests__/editorSeedAdapterPrismaValidation.test.js +143 -0
  250. package/codeyam-cli/src/utils/__tests__/editorSeedAdapterPrismaValidation.test.js.map +1 -0
  251. package/codeyam-cli/src/utils/__tests__/editorSessionFilter.test.js +66 -0
  252. package/codeyam-cli/src/utils/__tests__/editorSessionFilter.test.js.map +1 -0
  253. package/codeyam-cli/src/utils/__tests__/editorShouldRevalidate.test.js +53 -0
  254. package/codeyam-cli/src/utils/__tests__/editorShouldRevalidate.test.js.map +1 -0
  255. package/codeyam-cli/src/utils/__tests__/entityChangeStatus.test.js +2121 -0
  256. package/codeyam-cli/src/utils/__tests__/entityChangeStatus.test.js.map +1 -0
  257. package/codeyam-cli/src/utils/__tests__/envFile.test.js +125 -0
  258. package/codeyam-cli/src/utils/__tests__/envFile.test.js.map +1 -0
  259. package/codeyam-cli/src/utils/__tests__/git.editor.test.js +134 -0
  260. package/codeyam-cli/src/utils/__tests__/git.editor.test.js.map +1 -0
  261. package/codeyam-cli/src/utils/__tests__/glossaryAdd.test.js +177 -0
  262. package/codeyam-cli/src/utils/__tests__/glossaryAdd.test.js.map +1 -0
  263. package/codeyam-cli/src/utils/__tests__/handoffContext.test.js +500 -0
  264. package/codeyam-cli/src/utils/__tests__/handoffContext.test.js.map +1 -0
  265. package/codeyam-cli/src/utils/__tests__/journalCaptureStabilization.test.js +122 -0
  266. package/codeyam-cli/src/utils/__tests__/journalCaptureStabilization.test.js.map +1 -0
  267. package/codeyam-cli/src/utils/__tests__/manualEntityAnalysis.test.js +302 -0
  268. package/codeyam-cli/src/utils/__tests__/manualEntityAnalysis.test.js.map +1 -0
  269. package/codeyam-cli/src/utils/__tests__/npmVersionCheck.test.js +6 -0
  270. package/codeyam-cli/src/utils/__tests__/npmVersionCheck.test.js.map +1 -1
  271. package/codeyam-cli/src/utils/__tests__/parseRegisterArg.test.js +129 -0
  272. package/codeyam-cli/src/utils/__tests__/parseRegisterArg.test.js.map +1 -0
  273. package/codeyam-cli/src/utils/__tests__/pathIgnoring.test.js +9 -0
  274. package/codeyam-cli/src/utils/__tests__/pathIgnoring.test.js.map +1 -1
  275. package/codeyam-cli/src/utils/__tests__/project.test.js +65 -0
  276. package/codeyam-cli/src/utils/__tests__/project.test.js.map +1 -0
  277. package/codeyam-cli/src/utils/__tests__/registerScenarioResult.test.js +127 -0
  278. package/codeyam-cli/src/utils/__tests__/registerScenarioResult.test.js.map +1 -0
  279. package/codeyam-cli/src/utils/__tests__/routePatternMatching.test.js +118 -0
  280. package/codeyam-cli/src/utils/__tests__/routePatternMatching.test.js.map +1 -0
  281. package/codeyam-cli/src/utils/__tests__/scenarioCoverage.test.js +284 -0
  282. package/codeyam-cli/src/utils/__tests__/scenarioCoverage.test.js.map +1 -0
  283. package/codeyam-cli/src/utils/__tests__/scenarioMarkers.test.js +121 -0
  284. package/codeyam-cli/src/utils/__tests__/scenarioMarkers.test.js.map +1 -0
  285. package/codeyam-cli/src/utils/__tests__/scenariosManifest.test.js +672 -0
  286. package/codeyam-cli/src/utils/__tests__/scenariosManifest.test.js.map +1 -0
  287. package/codeyam-cli/src/utils/__tests__/screenshotHash.test.js +84 -0
  288. package/codeyam-cli/src/utils/__tests__/screenshotHash.test.js.map +1 -0
  289. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +51 -4
  290. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js.map +1 -1
  291. package/codeyam-cli/src/utils/__tests__/telemetry.test.js +159 -0
  292. package/codeyam-cli/src/utils/__tests__/telemetry.test.js.map +1 -0
  293. package/codeyam-cli/src/utils/__tests__/templateConsistency.test.js +51 -0
  294. package/codeyam-cli/src/utils/__tests__/templateConsistency.test.js.map +1 -0
  295. package/codeyam-cli/src/utils/__tests__/testRunner.test.js +216 -0
  296. package/codeyam-cli/src/utils/__tests__/testRunner.test.js.map +1 -0
  297. package/codeyam-cli/src/utils/__tests__/webappDetection.test.js +148 -0
  298. package/codeyam-cli/src/utils/__tests__/webappDetection.test.js.map +1 -0
  299. package/codeyam-cli/src/utils/analysisRunner.js +39 -8
  300. package/codeyam-cli/src/utils/analysisRunner.js.map +1 -1
  301. package/codeyam-cli/src/utils/analyzer.js +19 -0
  302. package/codeyam-cli/src/utils/analyzer.js.map +1 -1
  303. package/codeyam-cli/src/utils/analyzerFinalization.js +100 -0
  304. package/codeyam-cli/src/utils/analyzerFinalization.js.map +1 -0
  305. package/codeyam-cli/src/utils/backgroundServer.js +105 -13
  306. package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
  307. package/codeyam-cli/src/utils/buildFlags.js +4 -0
  308. package/codeyam-cli/src/utils/buildFlags.js.map +1 -0
  309. package/codeyam-cli/src/utils/database.js +37 -2
  310. package/codeyam-cli/src/utils/database.js.map +1 -1
  311. package/codeyam-cli/src/utils/designSystemShowcase.js +810 -0
  312. package/codeyam-cli/src/utils/designSystemShowcase.js.map +1 -0
  313. package/codeyam-cli/src/utils/devModeEvents.js +40 -0
  314. package/codeyam-cli/src/utils/devModeEvents.js.map +1 -0
  315. package/codeyam-cli/src/utils/devServerState.js +103 -0
  316. package/codeyam-cli/src/utils/devServerState.js.map +1 -0
  317. package/codeyam-cli/src/utils/editorApi.js +95 -0
  318. package/codeyam-cli/src/utils/editorApi.js.map +1 -0
  319. package/codeyam-cli/src/utils/editorAudit.js +849 -0
  320. package/codeyam-cli/src/utils/editorAudit.js.map +1 -0
  321. package/codeyam-cli/src/utils/editorBroadcastViewport.js +26 -0
  322. package/codeyam-cli/src/utils/editorBroadcastViewport.js.map +1 -0
  323. package/codeyam-cli/src/utils/editorCapture.js +102 -0
  324. package/codeyam-cli/src/utils/editorCapture.js.map +1 -0
  325. package/codeyam-cli/src/utils/editorDeleteScenario.js +67 -0
  326. package/codeyam-cli/src/utils/editorDeleteScenario.js.map +1 -0
  327. package/codeyam-cli/src/utils/editorDevServer.js +197 -0
  328. package/codeyam-cli/src/utils/editorDevServer.js.map +1 -0
  329. package/codeyam-cli/src/utils/editorEntityChangeStatus.js +50 -0
  330. package/codeyam-cli/src/utils/editorEntityChangeStatus.js.map +1 -0
  331. package/codeyam-cli/src/utils/editorEntityHelpers.js +144 -0
  332. package/codeyam-cli/src/utils/editorEntityHelpers.js.map +1 -0
  333. package/codeyam-cli/src/utils/editorGuard.js +36 -0
  334. package/codeyam-cli/src/utils/editorGuard.js.map +1 -0
  335. package/codeyam-cli/src/utils/editorImageVerifier.js +155 -0
  336. package/codeyam-cli/src/utils/editorImageVerifier.js.map +1 -0
  337. package/codeyam-cli/src/utils/editorJournal.js +225 -0
  338. package/codeyam-cli/src/utils/editorJournal.js.map +1 -0
  339. package/codeyam-cli/src/utils/editorLoaderHelpers.js +152 -0
  340. package/codeyam-cli/src/utils/editorLoaderHelpers.js.map +1 -0
  341. package/codeyam-cli/src/utils/editorMigration.js +224 -0
  342. package/codeyam-cli/src/utils/editorMigration.js.map +1 -0
  343. package/codeyam-cli/src/utils/editorMockState.js +248 -0
  344. package/codeyam-cli/src/utils/editorMockState.js.map +1 -0
  345. package/codeyam-cli/src/utils/editorPreloadHelpers.js +135 -0
  346. package/codeyam-cli/src/utils/editorPreloadHelpers.js.map +1 -0
  347. package/codeyam-cli/src/utils/editorPreview.js +139 -0
  348. package/codeyam-cli/src/utils/editorPreview.js.map +1 -0
  349. package/codeyam-cli/src/utils/editorRecapture.js +109 -0
  350. package/codeyam-cli/src/utils/editorRecapture.js.map +1 -0
  351. package/codeyam-cli/src/utils/editorRoadmap.js +574 -0
  352. package/codeyam-cli/src/utils/editorRoadmap.js.map +1 -0
  353. package/codeyam-cli/src/utils/editorScenarioSwitch.js +149 -0
  354. package/codeyam-cli/src/utils/editorScenarioSwitch.js.map +1 -0
  355. package/codeyam-cli/src/utils/editorScenarios.js +687 -0
  356. package/codeyam-cli/src/utils/editorScenarios.js.map +1 -0
  357. package/codeyam-cli/src/utils/editorSeedAdapter.js +475 -0
  358. package/codeyam-cli/src/utils/editorSeedAdapter.js.map +1 -0
  359. package/codeyam-cli/src/utils/editorShouldRevalidate.js +21 -0
  360. package/codeyam-cli/src/utils/editorShouldRevalidate.js.map +1 -0
  361. package/codeyam-cli/src/utils/entityChangeStatus.js +394 -0
  362. package/codeyam-cli/src/utils/entityChangeStatus.js.map +1 -0
  363. package/codeyam-cli/src/utils/entityChangeStatus.server.js +227 -0
  364. package/codeyam-cli/src/utils/entityChangeStatus.server.js.map +1 -0
  365. package/codeyam-cli/src/utils/envFile.js +90 -0
  366. package/codeyam-cli/src/utils/envFile.js.map +1 -0
  367. package/codeyam-cli/src/utils/fileMetadata.js +5 -0
  368. package/codeyam-cli/src/utils/fileMetadata.js.map +1 -1
  369. package/codeyam-cli/src/utils/fileWatcher.js +63 -9
  370. package/codeyam-cli/src/utils/fileWatcher.js.map +1 -1
  371. package/codeyam-cli/src/utils/git.js +103 -0
  372. package/codeyam-cli/src/utils/git.js.map +1 -1
  373. package/codeyam-cli/src/utils/glossaryAdd.js +74 -0
  374. package/codeyam-cli/src/utils/glossaryAdd.js.map +1 -0
  375. package/codeyam-cli/src/utils/handoffContext.js +257 -0
  376. package/codeyam-cli/src/utils/handoffContext.js.map +1 -0
  377. package/codeyam-cli/src/utils/install-skills.js +101 -15
  378. package/codeyam-cli/src/utils/install-skills.js.map +1 -1
  379. package/codeyam-cli/src/utils/interactiveSyncWatcher.js +126 -0
  380. package/codeyam-cli/src/utils/interactiveSyncWatcher.js.map +1 -0
  381. package/codeyam-cli/src/utils/manualEntityAnalysis.js +196 -0
  382. package/codeyam-cli/src/utils/manualEntityAnalysis.js.map +1 -0
  383. package/codeyam-cli/src/utils/npmVersionCheck.js +2 -2
  384. package/codeyam-cli/src/utils/npmVersionCheck.js.map +1 -1
  385. package/codeyam-cli/src/utils/parseRegisterArg.js +31 -0
  386. package/codeyam-cli/src/utils/parseRegisterArg.js.map +1 -0
  387. package/codeyam-cli/src/utils/pathIgnoring.js +19 -7
  388. package/codeyam-cli/src/utils/pathIgnoring.js.map +1 -1
  389. package/codeyam-cli/src/utils/progress.js +2 -2
  390. package/codeyam-cli/src/utils/progress.js.map +1 -1
  391. package/codeyam-cli/src/utils/project.js +15 -5
  392. package/codeyam-cli/src/utils/project.js.map +1 -1
  393. package/codeyam-cli/src/utils/queue/__tests__/heartbeat.test.js +11 -11
  394. package/codeyam-cli/src/utils/queue/__tests__/heartbeat.test.js.map +1 -1
  395. package/codeyam-cli/src/utils/queue/__tests__/job.interactiveStart.test.js +159 -0
  396. package/codeyam-cli/src/utils/queue/__tests__/job.interactiveStart.test.js.map +1 -0
  397. package/codeyam-cli/src/utils/queue/__tests__/manager.test.js +22 -0
  398. package/codeyam-cli/src/utils/queue/__tests__/manager.test.js.map +1 -1
  399. package/codeyam-cli/src/utils/queue/heartbeat.js +13 -5
  400. package/codeyam-cli/src/utils/queue/heartbeat.js.map +1 -1
  401. package/codeyam-cli/src/utils/queue/job.js +105 -7
  402. package/codeyam-cli/src/utils/queue/job.js.map +1 -1
  403. package/codeyam-cli/src/utils/queue/manager.js +7 -6
  404. package/codeyam-cli/src/utils/queue/manager.js.map +1 -1
  405. package/codeyam-cli/src/utils/registerScenarioResult.js +52 -0
  406. package/codeyam-cli/src/utils/registerScenarioResult.js.map +1 -0
  407. package/codeyam-cli/src/utils/requireSimulations.js +1 -1
  408. package/codeyam-cli/src/utils/requireSimulations.js.map +1 -1
  409. package/codeyam-cli/src/utils/routePatternMatching.js +129 -0
  410. package/codeyam-cli/src/utils/routePatternMatching.js.map +1 -0
  411. package/codeyam-cli/src/utils/ruleReflection/__tests__/contextBuilder.test.js +5 -6
  412. package/codeyam-cli/src/utils/ruleReflection/__tests__/contextBuilder.test.js.map +1 -1
  413. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/assertRules.js +1 -1
  414. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/assertRules.js.map +1 -1
  415. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/setupTempProject.js +0 -1
  416. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/setupTempProject.js.map +1 -1
  417. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/ruleReflectionE2E.test.js +2 -4
  418. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/ruleReflectionE2E.test.js.map +1 -1
  419. package/codeyam-cli/src/utils/ruleReflection/__tests__/promptBuilder.test.js +2 -5
  420. package/codeyam-cli/src/utils/ruleReflection/__tests__/promptBuilder.test.js.map +1 -1
  421. package/codeyam-cli/src/utils/rules/__tests__/parser.test.js +83 -0
  422. package/codeyam-cli/src/utils/rules/__tests__/parser.test.js.map +1 -0
  423. package/codeyam-cli/src/utils/rules/__tests__/pathMatcher.test.js +118 -0
  424. package/codeyam-cli/src/utils/rules/__tests__/pathMatcher.test.js.map +1 -0
  425. package/codeyam-cli/src/utils/rules/__tests__/rulePlacement.test.js +72 -0
  426. package/codeyam-cli/src/utils/rules/__tests__/rulePlacement.test.js.map +1 -0
  427. package/codeyam-cli/src/utils/rules/__tests__/sourceFiles.test.js +76 -0
  428. package/codeyam-cli/src/utils/rules/__tests__/sourceFiles.test.js.map +1 -0
  429. package/codeyam-cli/src/utils/rules/index.js +1 -0
  430. package/codeyam-cli/src/utils/rules/index.js.map +1 -1
  431. package/codeyam-cli/src/utils/rules/parser.js +14 -4
  432. package/codeyam-cli/src/utils/rules/parser.js.map +1 -1
  433. package/codeyam-cli/src/utils/rules/pathMatcher.js +34 -3
  434. package/codeyam-cli/src/utils/rules/pathMatcher.js.map +1 -1
  435. package/codeyam-cli/src/utils/rules/rulePlacement.js +65 -0
  436. package/codeyam-cli/src/utils/rules/rulePlacement.js.map +1 -0
  437. package/codeyam-cli/src/utils/rules/sourceFiles.js +43 -0
  438. package/codeyam-cli/src/utils/rules/sourceFiles.js.map +1 -0
  439. package/codeyam-cli/src/utils/scenarioCoverage.js +77 -0
  440. package/codeyam-cli/src/utils/scenarioCoverage.js.map +1 -0
  441. package/codeyam-cli/src/utils/scenarioMarkers.js +134 -0
  442. package/codeyam-cli/src/utils/scenarioMarkers.js.map +1 -0
  443. package/codeyam-cli/src/utils/scenariosManifest.js +313 -0
  444. package/codeyam-cli/src/utils/scenariosManifest.js.map +1 -0
  445. package/codeyam-cli/src/utils/screenshotHash.js +26 -0
  446. package/codeyam-cli/src/utils/screenshotHash.js.map +1 -0
  447. package/codeyam-cli/src/utils/serverState.js +57 -2
  448. package/codeyam-cli/src/utils/serverState.js.map +1 -1
  449. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +83 -11
  450. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js.map +1 -1
  451. package/codeyam-cli/src/utils/simulationGateMiddleware.js +175 -0
  452. package/codeyam-cli/src/utils/simulationGateMiddleware.js.map +1 -0
  453. package/codeyam-cli/src/utils/slugUtils.js +25 -0
  454. package/codeyam-cli/src/utils/slugUtils.js.map +1 -0
  455. package/codeyam-cli/src/utils/syncMocksMiddleware.js +7 -26
  456. package/codeyam-cli/src/utils/syncMocksMiddleware.js.map +1 -1
  457. package/codeyam-cli/src/utils/techStackConfig.js +38 -0
  458. package/codeyam-cli/src/utils/techStackConfig.js.map +1 -0
  459. package/codeyam-cli/src/utils/techStackConfig.test.js +85 -0
  460. package/codeyam-cli/src/utils/techStackConfig.test.js.map +1 -0
  461. package/codeyam-cli/src/utils/telemetry.js +106 -0
  462. package/codeyam-cli/src/utils/telemetry.js.map +1 -0
  463. package/codeyam-cli/src/utils/telemetryMiddleware.js +22 -0
  464. package/codeyam-cli/src/utils/telemetryMiddleware.js.map +1 -0
  465. package/codeyam-cli/src/utils/testResultCache.js +53 -0
  466. package/codeyam-cli/src/utils/testResultCache.js.map +1 -0
  467. package/codeyam-cli/src/utils/testResultCache.server.js +81 -0
  468. package/codeyam-cli/src/utils/testResultCache.server.js.map +1 -0
  469. package/codeyam-cli/src/utils/testResultCache.server.test.js +187 -0
  470. package/codeyam-cli/src/utils/testResultCache.server.test.js.map +1 -0
  471. package/codeyam-cli/src/utils/testResultCache.test.js +230 -0
  472. package/codeyam-cli/src/utils/testResultCache.test.js.map +1 -0
  473. package/codeyam-cli/src/utils/testRunner.js +350 -0
  474. package/codeyam-cli/src/utils/testRunner.js.map +1 -0
  475. package/codeyam-cli/src/utils/transcriptPruning.js +67 -0
  476. package/codeyam-cli/src/utils/transcriptPruning.js.map +1 -0
  477. package/codeyam-cli/src/utils/versionInfo.js +21 -0
  478. package/codeyam-cli/src/utils/versionInfo.js.map +1 -1
  479. package/codeyam-cli/src/utils/webappDetection.js +38 -3
  480. package/codeyam-cli/src/utils/webappDetection.js.map +1 -1
  481. package/codeyam-cli/src/webserver/__tests__/api.interactive-switch-scenario.test.js +99 -0
  482. package/codeyam-cli/src/webserver/__tests__/api.interactive-switch-scenario.test.js.map +1 -0
  483. package/codeyam-cli/src/webserver/__tests__/buildPtyEnv.test.js +153 -0
  484. package/codeyam-cli/src/webserver/__tests__/buildPtyEnv.test.js.map +1 -0
  485. package/codeyam-cli/src/webserver/__tests__/clientErrors.test.js +107 -0
  486. package/codeyam-cli/src/webserver/__tests__/clientErrors.test.js.map +1 -0
  487. package/codeyam-cli/src/webserver/__tests__/editorProxy.test.js +1000 -0
  488. package/codeyam-cli/src/webserver/__tests__/editorProxy.test.js.map +1 -0
  489. package/codeyam-cli/src/webserver/__tests__/idleDetector.test.js +315 -0
  490. package/codeyam-cli/src/webserver/__tests__/idleDetector.test.js.map +1 -0
  491. package/codeyam-cli/src/webserver/__tests__/stripClaudeCommand.test.js +135 -0
  492. package/codeyam-cli/src/webserver/__tests__/stripClaudeCommand.test.js.map +1 -0
  493. package/codeyam-cli/src/webserver/app/lib/clientErrors.js +86 -0
  494. package/codeyam-cli/src/webserver/app/lib/clientErrors.js.map +1 -0
  495. package/codeyam-cli/src/webserver/app/lib/database.js +41 -27
  496. package/codeyam-cli/src/webserver/app/lib/database.js.map +1 -1
  497. package/codeyam-cli/src/webserver/app/lib/dbNotifier.js.map +1 -1
  498. package/codeyam-cli/src/webserver/app/lib/git.js +397 -0
  499. package/codeyam-cli/src/webserver/app/lib/git.js.map +1 -0
  500. package/codeyam-cli/src/webserver/app/routes/api.interactive-switch-scenario.js +34 -0
  501. package/codeyam-cli/src/webserver/app/routes/api.interactive-switch-scenario.js.map +1 -0
  502. package/codeyam-cli/src/webserver/app/types/editor.js +8 -0
  503. package/codeyam-cli/src/webserver/app/types/editor.js.map +1 -0
  504. package/codeyam-cli/src/webserver/backgroundServer.js +141 -42
  505. package/codeyam-cli/src/webserver/backgroundServer.js.map +1 -1
  506. package/codeyam-cli/src/webserver/build/client/assets/CopyButton-DTBZZfSk.js +1 -0
  507. package/codeyam-cli/src/webserver/build/client/assets/{EntityItem-bwuHPyTa.js → EntityItem-BxclONWq.js} +5 -5
  508. package/codeyam-cli/src/webserver/build/client/assets/EntityTypeBadge-CQgyEGV-.js +1 -0
  509. package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeIcon-BH0XDim7.js → EntityTypeIcon-BsnEOJZ_.js} +9 -9
  510. package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-ByaELMbv.js +1 -0
  511. package/codeyam-cli/src/webserver/build/client/assets/InteractivePreview-6WjVfhxX.js +25 -0
  512. package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-ChX-Hp7W.js +3 -0
  513. package/codeyam-cli/src/webserver/build/client/assets/{LoadingDots-BvMu2i-g.js → LoadingDots-By5zI316.js} +1 -1
  514. package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-kgBTLoJD.js → LogViewer-C-9zQdXg.js} +3 -3
  515. package/codeyam-cli/src/webserver/build/client/assets/MiniClaudeChat-Bs2_Oua4.js +36 -0
  516. package/codeyam-cli/src/webserver/build/client/assets/{ReportIssueModal-BzPgx-xO.js → ReportIssueModal-DQsceHVv.js} +4 -4
  517. package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-DThcm_9M.js +1 -0
  518. package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-BX2Ny2Qj.js → ScenarioViewer-Cl4oOA3A.js} +3 -3
  519. package/codeyam-cli/src/webserver/build/client/assets/Spinner-CIil5-gb.js +34 -0
  520. package/codeyam-cli/src/webserver/build/client/assets/TruncatedFilePath-CK7-NaPZ.js +1 -0
  521. package/codeyam-cli/src/webserver/build/client/assets/ViewportInspectBar-BqkA9zyZ.js +1 -0
  522. package/codeyam-cli/src/webserver/build/client/assets/{_index-BRx8ZGZo.js → _index-DnOgyseQ.js} +4 -4
  523. package/codeyam-cli/src/webserver/build/client/assets/{activity.(_tab)-4S4yPfFw.js → activity.(_tab)-DqM9hbNE.js} +8 -8
  524. package/codeyam-cli/src/webserver/build/client/assets/addon-canvas-DpzMmAy5.js +1 -0
  525. package/codeyam-cli/src/webserver/build/client/assets/addon-fit-YJmn1quW.js +12 -0
  526. package/codeyam-cli/src/webserver/build/client/assets/addon-web-links-C58dYPwR.js +1 -0
  527. package/codeyam-cli/src/webserver/build/client/assets/addon-webgl-DI8QOUvO.js +58 -0
  528. package/codeyam-cli/src/webserver/build/client/assets/agent-transcripts-B8NCeOrm.js +22 -0
  529. package/codeyam-cli/src/webserver/build/client/assets/api.dev-mode-events-l0sNRNKZ.js +1 -0
  530. package/codeyam-cli/src/webserver/build/client/assets/api.editor-audit-l0sNRNKZ.js +1 -0
  531. package/codeyam-cli/src/webserver/build/client/assets/api.editor-capture-scenario-l0sNRNKZ.js +1 -0
  532. package/codeyam-cli/src/webserver/build/client/assets/api.editor-client-errors-l0sNRNKZ.js +1 -0
  533. package/codeyam-cli/src/webserver/build/client/assets/api.editor-commit-l0sNRNKZ.js +1 -0
  534. package/codeyam-cli/src/webserver/build/client/assets/api.editor-database-verify-l0sNRNKZ.js +1 -0
  535. package/codeyam-cli/src/webserver/build/client/assets/api.editor-dev-server-l0sNRNKZ.js +1 -0
  536. package/codeyam-cli/src/webserver/build/client/assets/api.editor-entity-status-l0sNRNKZ.js +1 -0
  537. package/codeyam-cli/src/webserver/build/client/assets/api.editor-file-diff-l0sNRNKZ.js +1 -0
  538. package/codeyam-cli/src/webserver/build/client/assets/api.editor-file-l0sNRNKZ.js +1 -0
  539. package/codeyam-cli/src/webserver/build/client/assets/api.editor-github-verify-l0sNRNKZ.js +1 -0
  540. package/codeyam-cli/src/webserver/build/client/assets/api.editor-handoff-l0sNRNKZ.js +1 -0
  541. package/codeyam-cli/src/webserver/build/client/assets/api.editor-hosting-verify-l0sNRNKZ.js +1 -0
  542. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-entry-l0sNRNKZ.js +1 -0
  543. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-image._-l0sNRNKZ.js +1 -0
  544. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-l0sNRNKZ.js +1 -0
  545. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-screenshot-l0sNRNKZ.js +1 -0
  546. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-update-l0sNRNKZ.js +1 -0
  547. package/codeyam-cli/src/webserver/build/client/assets/api.editor-load-commit-l0sNRNKZ.js +1 -0
  548. package/codeyam-cli/src/webserver/build/client/assets/api.editor-project-info-l0sNRNKZ.js +1 -0
  549. package/codeyam-cli/src/webserver/build/client/assets/api.editor-recapture-stale-l0sNRNKZ.js +1 -0
  550. package/codeyam-cli/src/webserver/build/client/assets/api.editor-refresh-l0sNRNKZ.js +1 -0
  551. package/codeyam-cli/src/webserver/build/client/assets/api.editor-register-scenario-l0sNRNKZ.js +1 -0
  552. package/codeyam-cli/src/webserver/build/client/assets/api.editor-rename-scenario-l0sNRNKZ.js +1 -0
  553. package/codeyam-cli/src/webserver/build/client/assets/api.editor-roadmap-l0sNRNKZ.js +1 -0
  554. package/codeyam-cli/src/webserver/build/client/assets/api.editor-save-scenario-data-l0sNRNKZ.js +1 -0
  555. package/codeyam-cli/src/webserver/build/client/assets/api.editor-save-seed-state-l0sNRNKZ.js +1 -0
  556. package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-coverage-l0sNRNKZ.js +1 -0
  557. package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-data-l0sNRNKZ.js +1 -0
  558. package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-image._-l0sNRNKZ.js +1 -0
  559. package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-prompt-l0sNRNKZ.js +1 -0
  560. package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenarios-l0sNRNKZ.js +1 -0
  561. package/codeyam-cli/src/webserver/build/client/assets/api.editor-schema-l0sNRNKZ.js +1 -0
  562. package/codeyam-cli/src/webserver/build/client/assets/api.editor-session-l0sNRNKZ.js +1 -0
  563. package/codeyam-cli/src/webserver/build/client/assets/api.editor-switch-scenario-l0sNRNKZ.js +1 -0
  564. package/codeyam-cli/src/webserver/build/client/assets/api.editor-test-results-l0sNRNKZ.js +1 -0
  565. package/codeyam-cli/src/webserver/build/client/assets/api.editor-verify-routes-l0sNRNKZ.js +1 -0
  566. package/codeyam-cli/src/webserver/build/client/assets/api.interactive-switch-scenario-l0sNRNKZ.js +1 -0
  567. package/codeyam-cli/src/webserver/build/client/assets/api.rule-path-l0sNRNKZ.js +1 -0
  568. package/codeyam-cli/src/webserver/build/client/assets/{book-open-D4IPYH_y.js → book-open-BFSIqZgO.js} +2 -2
  569. package/codeyam-cli/src/webserver/build/client/assets/{chevron-down-CG65viiV.js → chevron-down-B9fDzFVh.js} +2 -2
  570. package/codeyam-cli/src/webserver/build/client/assets/chunk-UVKPFVEO-Bmq2apuh.js +43 -0
  571. package/codeyam-cli/src/webserver/build/client/assets/{circle-check-igfMr5DY.js → circle-check-DLPObLUx.js} +2 -2
  572. package/codeyam-cli/src/webserver/build/client/assets/{copy-Coc4o_8c.js → copy-DXEmO0TD.js} +3 -3
  573. package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-BwyFiRot.js +41 -0
  574. package/codeyam-cli/src/webserver/build/client/assets/cy-logo-cli-Coe5NhbS.js +1 -0
  575. package/codeyam-cli/src/webserver/build/client/assets/{cy-logo-cli-CCKUIm0S.svg → cy-logo-cli-DoA97ML3.svg} +2 -2
  576. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-iRhRIFlp.js +1 -0
  577. package/codeyam-cli/src/webserver/build/client/assets/editor._tab-BZPBzV73.js +1 -0
  578. package/codeyam-cli/src/webserver/build/client/assets/editor.entity.(_sha)-DhtVC4aI.js +161 -0
  579. package/codeyam-cli/src/webserver/build/client/assets/editorPreview-C6fEYHrh.js +41 -0
  580. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-B0h9AqE6.js → entity._sha._-pc-vc6wO.js} +14 -13
  581. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.dev-C8AyYgYT.js +6 -0
  582. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-DziaVQX1.js +6 -0
  583. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-BTcpgIpC.js +6 -0
  584. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.edit._scenarioId-PePWg17F.js → entity._sha_.edit._scenarioId-D_O_ajfZ.js} +2 -2
  585. package/codeyam-cli/src/webserver/build/client/assets/{entry.client-I-Wo99C_.js → entry.client-j1Vi0bco.js} +6 -6
  586. package/codeyam-cli/src/webserver/build/client/assets/fileTableUtils-Daa96Fr1.js +1 -0
  587. package/codeyam-cli/src/webserver/build/client/assets/files-kuny2Q_s.js +1 -0
  588. package/codeyam-cli/src/webserver/build/client/assets/git-DgCZPMie.js +1 -0
  589. package/codeyam-cli/src/webserver/build/client/assets/globals-L-aUIeux.css +1 -0
  590. package/codeyam-cli/src/webserver/build/client/assets/{index-_417gcQW.js → index-BliGSSpl.js} +1 -1
  591. package/codeyam-cli/src/webserver/build/client/assets/index-SqjQKTdH.js +15 -0
  592. package/codeyam-cli/src/webserver/build/client/assets/{index-CUM5iXwc.js → index-vyrZD2g4.js} +1 -1
  593. package/codeyam-cli/src/webserver/build/client/assets/jsx-runtime-D_zvdyIk.js +9 -0
  594. package/codeyam-cli/src/webserver/build/client/assets/labs-c3yLxSEp.js +1 -0
  595. package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-TzRHMVog.js → loader-circle-D-q28GLF.js} +2 -2
  596. package/codeyam-cli/src/webserver/build/client/assets/manifest-79d0d81a.js +1 -0
  597. package/codeyam-cli/src/webserver/build/client/assets/memory-CEWIUC4t.js +101 -0
  598. package/codeyam-cli/src/webserver/build/client/assets/{pause-hjzB7t2z.js → pause-BP6fitdh.js} +3 -3
  599. package/codeyam-cli/src/webserver/build/client/assets/root-L2V0jea7.js +80 -0
  600. package/codeyam-cli/src/webserver/build/client/assets/{search-DcAwD_Ln.js → search-BooqacKS.js} +2 -2
  601. package/codeyam-cli/src/webserver/build/client/assets/settings-BM0nbryO.js +1 -0
  602. package/codeyam-cli/src/webserver/build/client/assets/simulations-ovy6FjRY.js +1 -0
  603. package/codeyam-cli/src/webserver/build/client/assets/{terminal-DbEAHMbA.js → terminal-DHemCJIs.js} +3 -3
  604. package/codeyam-cli/src/webserver/build/client/assets/{triangle-alert-CAD5b1o_.js → triangle-alert-D87ekDl8.js} +2 -2
  605. package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-Dk0Tciqg.js +1 -0
  606. package/codeyam-cli/src/webserver/build/client/assets/useLastLogLine-C8QvIe05.js +2 -0
  607. package/codeyam-cli/src/webserver/build/client/assets/useReportContext-jkCytuYz.js +1 -0
  608. package/codeyam-cli/src/webserver/build/client/assets/useToast-BgqkixU9.js +1 -0
  609. package/codeyam-cli/src/webserver/build/client/assets/xterm-BqvuqXEL.js +27 -0
  610. package/codeyam-cli/src/webserver/build/client/sound-test.html +98 -0
  611. package/codeyam-cli/src/webserver/build/server/assets/analysisRunner-QgInFGdU.js +16 -0
  612. package/codeyam-cli/src/webserver/build/server/assets/index-zblh9auj.js +1 -0
  613. package/codeyam-cli/src/webserver/build/server/assets/init-DaE0CBjk.js +14 -0
  614. package/codeyam-cli/src/webserver/build/server/assets/progress-CHTtrxFG.js +1 -0
  615. package/codeyam-cli/src/webserver/build/server/assets/server-build-CNvgz1cC.js +853 -0
  616. package/codeyam-cli/src/webserver/build/server/index.js +1 -1
  617. package/codeyam-cli/src/webserver/build-info.json +5 -5
  618. package/codeyam-cli/src/webserver/devServer.js +39 -5
  619. package/codeyam-cli/src/webserver/devServer.js.map +1 -1
  620. package/codeyam-cli/src/webserver/editorProxy.js +1263 -0
  621. package/codeyam-cli/src/webserver/editorProxy.js.map +1 -0
  622. package/codeyam-cli/src/webserver/idleDetector.js +130 -0
  623. package/codeyam-cli/src/webserver/idleDetector.js.map +1 -0
  624. package/codeyam-cli/src/webserver/mockStateEvents.js +28 -0
  625. package/codeyam-cli/src/webserver/mockStateEvents.js.map +1 -0
  626. package/codeyam-cli/src/webserver/public/sound-test.html +98 -0
  627. package/codeyam-cli/src/webserver/scripts/codeyam-preload.mjs +414 -0
  628. package/codeyam-cli/src/webserver/scripts/journalCapture.ts +283 -0
  629. package/codeyam-cli/src/webserver/server.js +446 -1
  630. package/codeyam-cli/src/webserver/server.js.map +1 -1
  631. package/codeyam-cli/src/webserver/terminalServer.js +1043 -0
  632. package/codeyam-cli/src/webserver/terminalServer.js.map +1 -0
  633. package/codeyam-cli/templates/__tests__/editor-step-hook.prompt-capture.test.ts +118 -0
  634. package/codeyam-cli/templates/chrome-extension-react/EXTENSION_SETUP.md +75 -0
  635. package/codeyam-cli/templates/chrome-extension-react/README.md +46 -0
  636. package/codeyam-cli/templates/chrome-extension-react/gitignore +15 -0
  637. package/codeyam-cli/templates/chrome-extension-react/index.html +12 -0
  638. package/codeyam-cli/templates/chrome-extension-react/package.json +27 -0
  639. package/codeyam-cli/templates/chrome-extension-react/popup.html +12 -0
  640. package/codeyam-cli/templates/chrome-extension-react/public/manifest.json +15 -0
  641. package/codeyam-cli/templates/chrome-extension-react/src/background/service-worker.ts +7 -0
  642. package/codeyam-cli/templates/chrome-extension-react/src/globals.css +6 -0
  643. package/codeyam-cli/templates/chrome-extension-react/src/lib/storage.ts +37 -0
  644. package/codeyam-cli/templates/chrome-extension-react/src/popup/App.tsx +12 -0
  645. package/codeyam-cli/templates/chrome-extension-react/src/popup/main.tsx +10 -0
  646. package/codeyam-cli/templates/chrome-extension-react/tsconfig.json +24 -0
  647. package/codeyam-cli/templates/chrome-extension-react/vite.config.ts +41 -0
  648. package/codeyam-cli/templates/codeyam-editor-claude.md +149 -0
  649. package/codeyam-cli/templates/codeyam-editor-codex.md +61 -0
  650. package/codeyam-cli/templates/codeyam-editor-gemini.md +59 -0
  651. package/codeyam-cli/templates/codeyam-editor-reference.md +216 -0
  652. package/codeyam-cli/templates/design-systems/clean-dashboard-design-system.md +255 -0
  653. package/codeyam-cli/templates/design-systems/editorial-design-system.md +267 -0
  654. package/codeyam-cli/templates/design-systems/mono-brutalist-design-system.md +256 -0
  655. package/codeyam-cli/templates/design-systems/neo-brutalist-design-system.md +294 -0
  656. package/codeyam-cli/templates/editor-step-hook.py +368 -0
  657. package/codeyam-cli/templates/expo-react-native/MOBILE_SETUP.md +288 -0
  658. package/codeyam-cli/templates/expo-react-native/README.md +41 -0
  659. package/codeyam-cli/templates/expo-react-native/__tests__/.gitkeep +0 -0
  660. package/codeyam-cli/templates/expo-react-native/app/_layout.tsx +15 -0
  661. package/codeyam-cli/templates/expo-react-native/app/index.tsx +36 -0
  662. package/codeyam-cli/templates/expo-react-native/app.json +29 -0
  663. package/codeyam-cli/templates/expo-react-native/babel.config.js +10 -0
  664. package/codeyam-cli/templates/expo-react-native/gitignore +14 -0
  665. package/codeyam-cli/templates/expo-react-native/global.css +10 -0
  666. package/codeyam-cli/templates/expo-react-native/lib/storage.ts +32 -0
  667. package/codeyam-cli/templates/expo-react-native/lib/theme.ts +73 -0
  668. package/codeyam-cli/templates/expo-react-native/metro.config.js +6 -0
  669. package/codeyam-cli/templates/expo-react-native/nativewind-env.d.ts +1 -0
  670. package/codeyam-cli/templates/expo-react-native/package.json +54 -0
  671. package/codeyam-cli/templates/expo-react-native/patches/expo-modules-autolinking+3.0.24.patch +29 -0
  672. package/codeyam-cli/templates/expo-react-native/tailwind.config.js +10 -0
  673. package/codeyam-cli/templates/expo-react-native/tsconfig.json +10 -0
  674. package/codeyam-cli/templates/hooks/staleness-check.sh +43 -0
  675. package/codeyam-cli/templates/isolation-route/expo-router.tsx.template +54 -0
  676. package/codeyam-cli/templates/isolation-route/next-app.tsx.template +80 -0
  677. package/codeyam-cli/templates/isolation-route/next-pages.tsx.template +79 -0
  678. package/codeyam-cli/templates/isolation-route/vite-react.tsx.template +78 -0
  679. package/codeyam-cli/templates/msw/browser-setup.ts.template +47 -0
  680. package/codeyam-cli/templates/msw/handler-router.ts.template +47 -0
  681. package/codeyam-cli/templates/msw/server-setup.ts.template +52 -0
  682. package/codeyam-cli/templates/nextjs-prisma-sqlite/AUTH_PATTERNS.md +308 -0
  683. package/codeyam-cli/templates/nextjs-prisma-sqlite/AUTH_UPGRADE.md +304 -0
  684. package/codeyam-cli/templates/nextjs-prisma-sqlite/DATABASE.md +126 -0
  685. package/codeyam-cli/templates/nextjs-prisma-sqlite/FEATURE_PATTERNS.md +37 -0
  686. package/codeyam-cli/templates/nextjs-prisma-sqlite/README.md +53 -0
  687. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/api/todos/route.ts +17 -0
  688. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/codeyam-isolate/layout.tsx +12 -0
  689. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/globals.css +26 -0
  690. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/layout.tsx +34 -0
  691. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/lib/prisma.ts +24 -0
  692. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/page.tsx +10 -0
  693. package/codeyam-cli/templates/nextjs-prisma-sqlite/env +4 -0
  694. package/codeyam-cli/templates/nextjs-prisma-sqlite/eslint.config.mjs +11 -0
  695. package/codeyam-cli/templates/nextjs-prisma-sqlite/gitignore +65 -0
  696. package/codeyam-cli/templates/nextjs-prisma-sqlite/next.config.ts +14 -0
  697. package/codeyam-cli/templates/nextjs-prisma-sqlite/package.json +39 -0
  698. package/codeyam-cli/templates/nextjs-prisma-sqlite/postcss.config.mjs +7 -0
  699. package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma/schema.prisma +27 -0
  700. package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma/seed.ts +40 -0
  701. package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma.config.ts +12 -0
  702. package/codeyam-cli/templates/nextjs-prisma-sqlite/seed-adapter.ts +140 -0
  703. package/codeyam-cli/templates/nextjs-prisma-sqlite/tsconfig.json +34 -0
  704. package/codeyam-cli/templates/nextjs-prisma-sqlite/vitest.config.ts +13 -0
  705. package/codeyam-cli/templates/nextjs-prisma-supabase/README.md +52 -0
  706. package/codeyam-cli/templates/nextjs-prisma-supabase/SUPABASE_SETUP.md +104 -0
  707. package/codeyam-cli/templates/nextjs-prisma-supabase/app/api/todos/route.ts +17 -0
  708. package/codeyam-cli/templates/nextjs-prisma-supabase/app/globals.css +26 -0
  709. package/codeyam-cli/templates/nextjs-prisma-supabase/app/layout.tsx +34 -0
  710. package/codeyam-cli/templates/nextjs-prisma-supabase/app/lib/prisma.ts +20 -0
  711. package/codeyam-cli/templates/nextjs-prisma-supabase/app/lib/supabase.ts +12 -0
  712. package/codeyam-cli/templates/nextjs-prisma-supabase/app/page.tsx +10 -0
  713. package/codeyam-cli/templates/nextjs-prisma-supabase/env +9 -0
  714. package/codeyam-cli/templates/nextjs-prisma-supabase/eslint.config.mjs +11 -0
  715. package/codeyam-cli/templates/nextjs-prisma-supabase/gitignore +40 -0
  716. package/codeyam-cli/templates/nextjs-prisma-supabase/next.config.ts +11 -0
  717. package/codeyam-cli/templates/nextjs-prisma-supabase/package.json +37 -0
  718. package/codeyam-cli/templates/nextjs-prisma-supabase/postcss.config.mjs +7 -0
  719. package/codeyam-cli/templates/nextjs-prisma-supabase/prisma/schema.prisma +27 -0
  720. package/codeyam-cli/templates/nextjs-prisma-supabase/prisma/seed.ts +39 -0
  721. package/codeyam-cli/templates/nextjs-prisma-supabase/prisma.config.ts +12 -0
  722. package/codeyam-cli/templates/nextjs-prisma-supabase/tsconfig.json +34 -0
  723. package/codeyam-cli/templates/prompts/conversation-guidance.txt +44 -0
  724. package/codeyam-cli/templates/prompts/conversation-prompt.txt +28 -0
  725. package/codeyam-cli/templates/prompts/interruption-prompt.txt +31 -0
  726. package/codeyam-cli/templates/prompts/stale-rules-prompt.txt +24 -0
  727. package/codeyam-cli/templates/rule-notification-hook.py +44 -17
  728. package/codeyam-cli/templates/rule-reflection-hook.py +24 -4
  729. package/codeyam-cli/templates/rules-instructions.md +34 -88
  730. package/codeyam-cli/templates/seed-adapters/supabase.ts +475 -0
  731. package/codeyam-cli/templates/skills/codeyam-dev-mode/SKILL.md +237 -0
  732. package/codeyam-cli/templates/skills/codeyam-editor/SKILL.md +244 -0
  733. package/codeyam-cli/templates/{codeyam-memory.md → skills/codeyam-memory/SKILL.md} +215 -0
  734. package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/deprecated-prompt.md +100 -0
  735. package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/detect-deprecated-patterns.mjs +139 -0
  736. package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/find-exports.mjs +52 -0
  737. package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/misleading-api-prompt.md +117 -0
  738. package/codeyam-cli/templates/skills/codeyam-memory/scripts/lib/read-json-field.mjs +61 -0
  739. package/codeyam-cli/templates/skills/codeyam-memory/scripts/lib/ripgrep-fallback.mjs +155 -0
  740. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/analyze-prompt.md +46 -0
  741. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/cleanup.mjs +13 -0
  742. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/filter-session.mjs +95 -0
  743. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/preprocess.mjs +160 -0
  744. package/codeyam-cli/templates/{codeyam-new-rule.md → skills/codeyam-new-rule/SKILL.md} +0 -2
  745. package/package.json +22 -14
  746. package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js +22 -4
  747. package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js.map +1 -1
  748. package/packages/ai/src/lib/astScopes/methodSemantics.js +99 -0
  749. package/packages/ai/src/lib/astScopes/methodSemantics.js.map +1 -1
  750. package/packages/ai/src/lib/astScopes/nodeToSource.js +16 -0
  751. package/packages/ai/src/lib/astScopes/nodeToSource.js.map +1 -1
  752. package/packages/ai/src/lib/astScopes/paths.js +12 -3
  753. package/packages/ai/src/lib/astScopes/paths.js.map +1 -1
  754. package/packages/ai/src/lib/completionCall.js +10 -7
  755. package/packages/ai/src/lib/completionCall.js.map +1 -1
  756. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +261 -13
  757. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
  758. package/packages/ai/src/lib/dataStructure/equivalencyManagers/ParentScopeManager.js +9 -2
  759. package/packages/ai/src/lib/dataStructure/equivalencyManagers/ParentScopeManager.js.map +1 -1
  760. package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js +14 -4
  761. package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js.map +1 -1
  762. package/packages/ai/src/lib/dataStructure/helpers/coercePrimitivesToArraysBySchema.js +54 -0
  763. package/packages/ai/src/lib/dataStructure/helpers/coercePrimitivesToArraysBySchema.js.map +1 -0
  764. package/packages/ai/src/lib/dataStructure/helpers/stripNullableMarkers.js +34 -0
  765. package/packages/ai/src/lib/dataStructure/helpers/stripNullableMarkers.js.map +1 -0
  766. package/packages/ai/src/lib/generateEntityScenarioData.js +57 -2
  767. package/packages/ai/src/lib/generateEntityScenarioData.js.map +1 -1
  768. package/packages/ai/src/lib/generateExecutionFlows.js +0 -11
  769. package/packages/ai/src/lib/generateExecutionFlows.js.map +1 -1
  770. package/packages/analyze/index.js +1 -1
  771. package/packages/analyze/index.js.map +1 -1
  772. package/packages/analyze/src/lib/ProjectAnalyzer.js +13 -4
  773. package/packages/analyze/src/lib/ProjectAnalyzer.js.map +1 -1
  774. package/packages/analyze/src/lib/asts/index.js +4 -2
  775. package/packages/analyze/src/lib/asts/index.js.map +1 -1
  776. package/packages/analyze/src/lib/asts/nodes/getNodeType.js +1 -0
  777. package/packages/analyze/src/lib/asts/nodes/getNodeType.js.map +1 -1
  778. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js +16 -2
  779. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js.map +1 -1
  780. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js +14 -27
  781. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js.map +1 -1
  782. package/packages/analyze/src/lib/files/analyze/dependencyResolver.js +0 -5
  783. package/packages/analyze/src/lib/files/analyze/dependencyResolver.js.map +1 -1
  784. package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js +12 -2
  785. package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js.map +1 -1
  786. package/packages/analyze/src/lib/files/analyze/gatherEntityMap.js +9 -7
  787. package/packages/analyze/src/lib/files/analyze/gatherEntityMap.js.map +1 -1
  788. package/packages/analyze/src/lib/files/analyze/trackEntityCircularDependencies.js +14 -0
  789. package/packages/analyze/src/lib/files/analyze/trackEntityCircularDependencies.js.map +1 -1
  790. package/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.js +44 -11
  791. package/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.js.map +1 -1
  792. package/packages/analyze/src/lib/files/analyzeChange.js +1 -0
  793. package/packages/analyze/src/lib/files/analyzeChange.js.map +1 -1
  794. package/packages/analyze/src/lib/files/analyzeInitial.js +1 -0
  795. package/packages/analyze/src/lib/files/analyzeInitial.js.map +1 -1
  796. package/packages/analyze/src/lib/files/analyzeNextRoute.js +5 -1
  797. package/packages/analyze/src/lib/files/analyzeNextRoute.js.map +1 -1
  798. package/packages/analyze/src/lib/files/scenarios/TransformationTracer.js +54 -27
  799. package/packages/analyze/src/lib/files/scenarios/TransformationTracer.js.map +1 -1
  800. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +185 -28
  801. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
  802. package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js +0 -40
  803. package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js.map +1 -1
  804. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +1386 -1197
  805. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js.map +1 -1
  806. package/packages/database/index.js +1 -0
  807. package/packages/database/index.js.map +1 -1
  808. package/packages/database/src/lib/kysely/db.js +5 -0
  809. package/packages/database/src/lib/kysely/db.js.map +1 -1
  810. package/packages/database/src/lib/kysely/tables/editorScenariosTable.js +149 -0
  811. package/packages/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -0
  812. package/packages/database/src/lib/loadAnalysis.js +7 -1
  813. package/packages/database/src/lib/loadAnalysis.js.map +1 -1
  814. package/packages/database/src/lib/loadCommits.js +23 -13
  815. package/packages/database/src/lib/loadCommits.js.map +1 -1
  816. package/packages/database/src/lib/loadEntities.js +0 -6
  817. package/packages/database/src/lib/loadEntities.js.map +1 -1
  818. package/packages/database/src/lib/loadEntity.js +5 -5
  819. package/packages/database/src/lib/loadEntity.js.map +1 -1
  820. package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.js +1 -4
  821. package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.js.map +1 -1
  822. package/packages/database/src/lib/updateCommitMetadata.js +76 -90
  823. package/packages/database/src/lib/updateCommitMetadata.js.map +1 -1
  824. package/packages/database/src/lib/updateFreshAnalysisStatus.js +41 -30
  825. package/packages/database/src/lib/updateFreshAnalysisStatus.js.map +1 -1
  826. package/packages/database/src/lib/updateFreshAnalysisStatusWithScenarios.js +68 -57
  827. package/packages/database/src/lib/updateFreshAnalysisStatusWithScenarios.js.map +1 -1
  828. package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js +29 -1
  829. package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js.map +1 -1
  830. package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +33 -5
  831. package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
  832. package/packages/types/src/enums/ProjectFramework.js +2 -0
  833. package/packages/types/src/enums/ProjectFramework.js.map +1 -1
  834. package/packages/utils/src/lib/fs/rsyncCopy.js +28 -3
  835. package/packages/utils/src/lib/fs/rsyncCopy.js.map +1 -1
  836. package/scripts/npm-post-install.cjs +34 -0
  837. package/codeyam-cli/src/commands/detect-universal-mocks.js +0 -120
  838. package/codeyam-cli/src/commands/detect-universal-mocks.js.map +0 -1
  839. package/codeyam-cli/src/commands/list.js +0 -31
  840. package/codeyam-cli/src/commands/list.js.map +0 -1
  841. package/codeyam-cli/src/commands/webapp-info.js +0 -146
  842. package/codeyam-cli/src/commands/webapp-info.js.map +0 -1
  843. package/codeyam-cli/src/utils/universal-mocks.js +0 -152
  844. package/codeyam-cli/src/utils/universal-mocks.js.map +0 -1
  845. package/codeyam-cli/src/webserver/build/client/assets/CopyButton-jNYXRRNI.js +0 -1
  846. package/codeyam-cli/src/webserver/build/client/assets/EntityTypeBadge-CvzqMxcu.js +0 -1
  847. package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-EhOseatT.js +0 -34
  848. package/codeyam-cli/src/webserver/build/client/assets/InteractivePreview-yjIHlOGa.js +0 -25
  849. package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-Cq5o8jL4.js +0 -3
  850. package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-CwZrv-Ok.js +0 -1
  851. package/codeyam-cli/src/webserver/build/client/assets/TruncatedFilePath-CDpEprKa.js +0 -1
  852. package/codeyam-cli/src/webserver/build/client/assets/agent-transcripts-DHKuQSmR.js +0 -17
  853. package/codeyam-cli/src/webserver/build/client/assets/chunk-JZWAC4HX-DB3aFuEO.js +0 -51
  854. package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-D1zB-pYc.js +0 -21
  855. package/codeyam-cli/src/webserver/build/client/assets/cy-logo-cli-DcX-ZS3p.js +0 -1
  856. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-JTAjQ54M.js +0 -1
  857. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-DjLxr2JB.js +0 -6
  858. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-CtYowLOt.js +0 -6
  859. package/codeyam-cli/src/webserver/build/client/assets/fileTableUtils-9sMMAiWJ.js +0 -1
  860. package/codeyam-cli/src/webserver/build/client/assets/files-Co65J0s3.js +0 -1
  861. package/codeyam-cli/src/webserver/build/client/assets/git-BdHOxVfg.js +0 -15
  862. package/codeyam-cli/src/webserver/build/client/assets/globals-CCgBKWy4.css +0 -1
  863. package/codeyam-cli/src/webserver/build/client/assets/labs-BK0C1H1T.js +0 -1
  864. package/codeyam-cli/src/webserver/build/client/assets/manifest-390cb8fa.js +0 -1
  865. package/codeyam-cli/src/webserver/build/client/assets/memory-CzZySbBE.js +0 -78
  866. package/codeyam-cli/src/webserver/build/client/assets/root-DnbDhvTU.js +0 -62
  867. package/codeyam-cli/src/webserver/build/client/assets/settings-CclxrcPK.js +0 -1
  868. package/codeyam-cli/src/webserver/build/client/assets/simulations-DVNJVQgD.js +0 -1
  869. package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-BqgrAzs3.js +0 -1
  870. package/codeyam-cli/src/webserver/build/client/assets/useLastLogLine-DAFqfEDH.js +0 -2
  871. package/codeyam-cli/src/webserver/build/client/assets/useReportContext-DZlYx2c4.js +0 -1
  872. package/codeyam-cli/src/webserver/build/client/assets/useToast-ihdMtlf6.js +0 -1
  873. package/codeyam-cli/src/webserver/build/server/assets/index-CXfuiwt3.js +0 -1
  874. package/codeyam-cli/src/webserver/build/server/assets/server-build-BSvme_Ao.js +0 -259
  875. package/codeyam-cli/templates/codeyam-stop-hook.sh +0 -284
  876. package/scripts/finalize-analyzer.cjs +0 -13
  877. /package/codeyam-cli/templates/{codeyam-diagnose.md → commands/codeyam-diagnose.md} +0 -0
  878. /package/codeyam-cli/templates/{codeyam-debug.md → skills/codeyam-debug/SKILL.md} +0 -0
  879. /package/codeyam-cli/templates/{codeyam-setup.md → skills/codeyam-setup/SKILL.md} +0 -0
  880. /package/codeyam-cli/templates/{codeyam-sim.md → skills/codeyam-sim/SKILL.md} +0 -0
  881. /package/codeyam-cli/templates/{codeyam-test.md → skills/codeyam-test/SKILL.md} +0 -0
  882. /package/codeyam-cli/templates/{codeyam-verify.md → skills/codeyam-verify/SKILL.md} +0 -0
@@ -0,0 +1,687 @@
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
+ import { buildRoutePattern, routeDisplayName } from "./routePatternMatching.js";
10
+ import { pageNameFromUrl, isIsolationUrl } from "./entityChangeStatus.js";
11
+ import { sanitizeGlossaryEntries } from "./editorLoaderHelpers.js";
12
+ /**
13
+ * Generic Map-based deduplication that keeps the last item for each key.
14
+ * Items are iterated in order, so later entries overwrite earlier ones.
15
+ * Map preserves insertion order of first appearance.
16
+ */
17
+ export function deduplicateByName(items, keyFn) {
18
+ const byKey = new Map();
19
+ for (const item of items) {
20
+ byKey.set(keyFn(item), item);
21
+ }
22
+ return [...byKey.values()];
23
+ }
24
+ /**
25
+ * Convert a scenario name to a URL-safe slug.
26
+ * Replaces any run of non-alphanumeric, non-underscore characters with a single underscore.
27
+ */
28
+ export function generateScenarioSlug(name) {
29
+ return name.replace(/[^a-zA-Z0-9_]+/g, '_');
30
+ }
31
+ /**
32
+ * Convert a dimension name to a filename-safe slug for screenshot paths.
33
+ * Lowercase, spaces→hyphens, strip non-alphanumeric, collapse multiple hyphens.
34
+ * "Extension Popup" → "extension-popup"
35
+ */
36
+ export function slugifyDimension(name) {
37
+ return name
38
+ .toLowerCase()
39
+ .replace(/[^a-z0-9]+/g, '-')
40
+ .replace(/^-+|-+$/g, '');
41
+ }
42
+ /**
43
+ * Convert an ISO 8601 timestamp (e.g. "2026-02-28T19:00:00.000Z") to
44
+ * SQLite-compatible format (e.g. "2026-02-28 19:00:00").
45
+ *
46
+ * SQLite's CURRENT_TIMESTAMP uses space-separated "YYYY-MM-DD HH:MM:SS" format,
47
+ * so we need this conversion for date comparisons.
48
+ */
49
+ export function convertIsoToSqliteTimestamp(iso) {
50
+ return iso.replace('T', ' ').replace(/\.\d{3}Z$/, '');
51
+ }
52
+ /**
53
+ * Check whether a scenario row belongs to the current feature session.
54
+ * A row belongs if it was created OR updated after the session start —
55
+ * re-registering a scenario updates `updated_at` but preserves `created_at`.
56
+ */
57
+ export function isRowInFeatureSession(row, sqliteTimestamp) {
58
+ if (row.created_at && row.created_at >= sqliteTimestamp)
59
+ return true;
60
+ if (row.updated_at && row.updated_at >= sqliteTimestamp)
61
+ return true;
62
+ return false;
63
+ }
64
+ /**
65
+ * Properties in config.json that are user-configured and must survive a re-init.
66
+ * Auto-detected properties (projectSlug, packageManager, webapps, createdAt, etc.)
67
+ * are intentionally NOT preserved — init should re-detect them.
68
+ */
69
+ const PRESERVED_CONFIG_KEYS = [
70
+ 'defaultScreenSize',
71
+ 'screenSizes',
72
+ 'projectTitle',
73
+ 'projectDescription',
74
+ 'appFormats',
75
+ ];
76
+ /**
77
+ * Read user-configured properties from an existing config.json that should be
78
+ * preserved when `codeyam init --force` overwrites the file.
79
+ *
80
+ * Returns only the properties listed in PRESERVED_CONFIG_KEYS.
81
+ * Returns an empty object if the file doesn't exist or can't be parsed.
82
+ */
83
+ export function readPreservedConfigProperties(configPath) {
84
+ try {
85
+ const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
86
+ const preserved = {};
87
+ for (const key of PRESERVED_CONFIG_KEYS) {
88
+ if (config[key] !== undefined) {
89
+ preserved[key] = config[key];
90
+ }
91
+ }
92
+ return preserved;
93
+ }
94
+ catch {
95
+ return {};
96
+ }
97
+ }
98
+ /**
99
+ * Validate that a step transition is allowed.
100
+ *
101
+ * Rules:
102
+ * - Step 1 is always allowed (starts a new feature).
103
+ * - Steps 2–15 require the current state step to be at least (requestedStep - 1),
104
+ * i.e. you can advance one step at a time or re-run the current step, but
105
+ * you cannot skip ahead.
106
+ *
107
+ * Returns null if valid, or an error message string if invalid.
108
+ */
109
+ export function validateStepTransition(requestedStep, currentStep, startedAt, projectRoot) {
110
+ // Step 1 always allowed — it starts or restarts a feature
111
+ if (requestedStep === 1)
112
+ return null;
113
+ // No state at all — must start from step 1
114
+ if (currentStep === null) {
115
+ return `Cannot jump to step ${requestedStep} — no feature in progress. Run step 1 first.`;
116
+ }
117
+ // Allow re-running the current step or advancing to the next step
118
+ if (requestedStep > currentStep + 1) {
119
+ return `Cannot jump from step ${currentStep} to step ${requestedStep}. Complete step ${currentStep + 1} first.`;
120
+ }
121
+ // Prevent rapid-fire step advances (e.g. for-loop with `| head -2`).
122
+ // Each step has a checklist that takes real work — advancing in under
123
+ // 3 seconds means the instructions weren't read or followed.
124
+ if (requestedStep === currentStep + 1 && startedAt && currentStep >= 2) {
125
+ const elapsed = Date.now() - new Date(startedAt).getTime();
126
+ const MIN_STEP_DURATION_MS = 3000;
127
+ if (elapsed < MIN_STEP_DURATION_MS) {
128
+ const remaining = Math.ceil((MIN_STEP_DURATION_MS - elapsed) / 1000);
129
+ return (`Step ${currentStep} was started only ${Math.round(elapsed / 1000)}s ago. ` +
130
+ `Each step has a checklist that must be completed before advancing. ` +
131
+ `Read the FULL output of \`codeyam editor ${currentStep}\` and complete every checklist item. ` +
132
+ `You cannot advance for another ${remaining}s.`);
133
+ }
134
+ }
135
+ // Task creation gate: when advancing from step 2+, a task must have been
136
+ // created for the current step. If not, block and require `codeyam editor task-ontrack`.
137
+ if (requestedStep === currentStep + 1 && currentStep >= 2 && projectRoot) {
138
+ try {
139
+ const trackingPath = path.join(projectRoot, '.codeyam', 'editor-task-tracking.json');
140
+ if (fs.existsSync(trackingPath)) {
141
+ const tracking = JSON.parse(fs.readFileSync(trackingPath, 'utf8'));
142
+ if (tracking.step === currentStep && tracking.taskCreated === false) {
143
+ return (`BLOCKED: You did not create a task for step ${currentStep}. ` +
144
+ `Run \`codeyam editor task-ontrack\` to get back on track.`);
145
+ }
146
+ }
147
+ }
148
+ catch {
149
+ // Non-fatal — don't block if tracking file is unreadable
150
+ }
151
+ }
152
+ return null;
153
+ }
154
+ /**
155
+ * Resolve which URL to use for Playwright screenshot capture.
156
+ *
157
+ * Priority:
158
+ * 1. Path-based URL + proxy → combine (component isolation with API interception)
159
+ * 2. Full URL → use directly (legacy)
160
+ * 3. No URL → proxy root or dev server root (page scenarios)
161
+ */
162
+ /**
163
+ * Resolve the navigation path for preview refresh.
164
+ * Priority: explicit path > scenario URL from DB > undefined (plain refresh).
165
+ */
166
+ export function resolvePreviewNavPath(explicitPath, scenarioUrl) {
167
+ if (explicitPath)
168
+ return explicitPath;
169
+ if (scenarioUrl)
170
+ return scenarioUrl;
171
+ return undefined;
172
+ }
173
+ /**
174
+ * Clear the editor step state file (for starting a new feature).
175
+ * This should NOT touch the user prompt file — the prompt is captured
176
+ * by the hook before step 1 runs, so deleting it here would lose it.
177
+ */
178
+ export function clearEditorState(root) {
179
+ const statePath = path.join(root, '.codeyam', 'editor-step.json');
180
+ try {
181
+ fs.unlinkSync(statePath);
182
+ }
183
+ catch {
184
+ // File doesn't exist, that's fine
185
+ }
186
+ }
187
+ /**
188
+ * Clear the user prompt file so the hook can capture the next feature request.
189
+ * Call this after a feature is committed, not during step 1.
190
+ */
191
+ export function clearEditorUserPrompt(root) {
192
+ const promptPath = path.join(root, '.codeyam', 'editor-user-prompt.txt');
193
+ try {
194
+ fs.unlinkSync(promptPath);
195
+ }
196
+ catch {
197
+ // File doesn't exist, that's fine
198
+ }
199
+ }
200
+ export function determineCaptureUrl(url, proxyUrl, devServerUrl) {
201
+ const isPath = url && url.startsWith('/');
202
+ if (isPath && proxyUrl) {
203
+ return `${proxyUrl}${url}`;
204
+ }
205
+ else if (url && !isPath) {
206
+ return url;
207
+ }
208
+ else {
209
+ return proxyUrl || devServerUrl || null;
210
+ }
211
+ }
212
+ /**
213
+ * Read the project's default screen size from .codeyam/config.json.
214
+ * Returns { width, height } or null if not configured.
215
+ */
216
+ export function readDefaultScreenSize(codeyamRoot) {
217
+ try {
218
+ const configPath = path.join(codeyamRoot, '.codeyam', 'config.json');
219
+ const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
220
+ // New format: screenSizes entry with `default: true`
221
+ if (config.screenSizes && typeof config.screenSizes === 'object') {
222
+ for (const entry of Object.values(config.screenSizes)) {
223
+ const s = entry;
224
+ if (s.default && s.width && s.height) {
225
+ return { width: s.width, height: s.height };
226
+ }
227
+ }
228
+ }
229
+ // Old format: explicit defaultScreenSize field
230
+ if (config.defaultScreenSize?.width && config.defaultScreenSize?.height) {
231
+ return {
232
+ width: config.defaultScreenSize.width,
233
+ height: config.defaultScreenSize.height,
234
+ };
235
+ }
236
+ }
237
+ catch {
238
+ // Non-fatal
239
+ }
240
+ return null;
241
+ }
242
+ /**
243
+ * Read named screen sizes from .codeyam/config.json.
244
+ * Returns a map of name → { width, height }, or empty object if not configured.
245
+ *
246
+ * Config format:
247
+ * "screenSizes": {
248
+ * "Desktop": { "width": 1440, "height": 900 },
249
+ * "Mobile": { "width": 375, "height": 667 }
250
+ * }
251
+ */
252
+ export function readScreenSizes(codeyamRoot) {
253
+ try {
254
+ const configPath = path.join(codeyamRoot, '.codeyam', 'config.json');
255
+ const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
256
+ if (config.screenSizes &&
257
+ typeof config.screenSizes === 'object' &&
258
+ !Array.isArray(config.screenSizes)) {
259
+ return config.screenSizes;
260
+ }
261
+ }
262
+ catch {
263
+ // Non-fatal
264
+ }
265
+ return {};
266
+ }
267
+ /**
268
+ * Resolve the viewport dimensions for a scenario capture.
269
+ * Priority: explicit body values > project default > hardcoded fallback (1280×720).
270
+ */
271
+ export function resolveScenarioViewport(params) {
272
+ return {
273
+ width: params.bodyWidth || params.projectDefault?.width || 1280,
274
+ height: params.bodyHeight || params.projectDefault?.height || 720,
275
+ };
276
+ }
277
+ /**
278
+ * Resolve viewport dimensions by reading the project config.
279
+ *
280
+ * Priority chain:
281
+ * 1. Explicit bodyWidth/bodyHeight (highest)
282
+ * 2. Named dimension → lookup in config screenSizes map
283
+ * 3. Project defaultScreenSize from config
284
+ * 4. 1280×720 hardcoded fallback (lowest)
285
+ *
286
+ * Use this in any capture endpoint that needs viewport resolution.
287
+ */
288
+ export function resolveViewportWithProjectDefault(params) {
289
+ // Look up named dimension from screenSizes if provided
290
+ let dimensionSize = null;
291
+ if (params.dimension) {
292
+ const screenSizes = readScreenSizes(params.codeyamRoot);
293
+ const entry = screenSizes[params.dimension];
294
+ if (entry?.width && entry?.height) {
295
+ dimensionSize = { width: entry.width, height: entry.height };
296
+ }
297
+ }
298
+ const projectDefault = dimensionSize || readDefaultScreenSize(params.codeyamRoot);
299
+ return resolveScenarioViewport({
300
+ bodyWidth: params.bodyWidth,
301
+ bodyHeight: params.bodyHeight,
302
+ projectDefault,
303
+ });
304
+ }
305
+ /**
306
+ * Insert or update an editor scenario by name + project.
307
+ *
308
+ * When a scenario with the same name already exists for the project:
309
+ * - Reuses the most recent row's ID (so data files at that path get overwritten naturally)
310
+ * - Updates the row with the new values
311
+ * - Deletes any additional duplicate rows that accumulated from past always-insert behavior
312
+ *
313
+ * When no existing scenario matches: inserts a new row with a fresh UUID.
314
+ */
315
+ export async function upsertEditorScenario(db, params) {
316
+ // Serialize multi-dimension fields for storage
317
+ const dimensionsJson = params.dimensions
318
+ ? JSON.stringify(params.dimensions)
319
+ : null;
320
+ const screenshotPathsJson = params.screenshotPaths
321
+ ? JSON.stringify(params.screenshotPaths)
322
+ : null;
323
+ // Find all existing scenarios with the same name + project
324
+ const existing = await db
325
+ .selectFrom('editor_scenarios')
326
+ .selectAll()
327
+ .where('name', '=', params.name)
328
+ .where('project_id', '=', params.projectId)
329
+ .orderBy('created_at', 'desc')
330
+ .execute();
331
+ if (existing.length > 0) {
332
+ // Reuse the most recent row's ID
333
+ const latest = existing[0];
334
+ const scenarioId = latest.id;
335
+ // Update the existing row with new values
336
+ const updateSet = {
337
+ description: params.description,
338
+ component_name: params.componentName,
339
+ component_path: params.componentPath,
340
+ url: params.url,
341
+ type: params.type,
342
+ viewport_width: params.viewportWidth,
343
+ viewport_height: params.viewportHeight,
344
+ updated_at: new Date()
345
+ .toISOString()
346
+ .replace('T', ' ')
347
+ .replace(/\.\d{3}Z$/, ''),
348
+ };
349
+ if (params.dimensions !== undefined) {
350
+ updateSet.dimensions = dimensionsJson;
351
+ updateSet.screenshot_paths = screenshotPathsJson;
352
+ }
353
+ if (params.pageFilePath !== undefined) {
354
+ updateSet.page_file_path = params.pageFilePath;
355
+ }
356
+ if (params.entitySha !== undefined) {
357
+ updateSet.entity_sha = params.entitySha;
358
+ }
359
+ if (params.displayName !== undefined) {
360
+ updateSet.display_name = params.displayName;
361
+ }
362
+ await db
363
+ .updateTable('editor_scenarios')
364
+ .set(updateSet)
365
+ .where('id', '=', scenarioId)
366
+ .execute();
367
+ // Delete duplicate rows (all except the latest)
368
+ const duplicateIds = existing.slice(1).map((r) => r.id);
369
+ if (duplicateIds.length > 0) {
370
+ await db
371
+ .deleteFrom('editor_scenarios')
372
+ .where('id', 'in', duplicateIds)
373
+ .execute();
374
+ }
375
+ return { scenarioId, isNew: false, cleanedUpIds: duplicateIds };
376
+ }
377
+ // No existing scenario — insert new
378
+ // Use globalThis.crypto (Web Crypto API) to avoid pulling Node's crypto
379
+ // module into the Vite client bundle (this file is also imported client-side
380
+ // for deduplicateByName).
381
+ const scenarioId = globalThis.crypto.randomUUID();
382
+ const insertValues = {
383
+ id: scenarioId,
384
+ project_id: params.projectId,
385
+ name: params.name,
386
+ description: params.description,
387
+ component_name: params.componentName,
388
+ component_path: params.componentPath,
389
+ url: params.url,
390
+ type: params.type,
391
+ viewport_width: params.viewportWidth,
392
+ viewport_height: params.viewportHeight,
393
+ };
394
+ if (params.dimensions !== undefined) {
395
+ insertValues.dimensions = dimensionsJson;
396
+ insertValues.screenshot_paths = screenshotPathsJson;
397
+ }
398
+ if (params.pageFilePath !== undefined) {
399
+ insertValues.page_file_path = params.pageFilePath;
400
+ }
401
+ if (params.entitySha !== undefined) {
402
+ insertValues.entity_sha = params.entitySha;
403
+ }
404
+ if (params.displayName !== undefined) {
405
+ insertValues.display_name = params.displayName;
406
+ }
407
+ await db.insertInto('editor_scenarios').values(insertValues).execute();
408
+ return { scenarioId, isNew: true, cleanedUpIds: [] };
409
+ }
410
+ /**
411
+ * Delete data files (.json, .seed.json) and screenshots for a list of scenario IDs.
412
+ * Used to clean up orphaned files after deduplication.
413
+ */
414
+ export function cleanupScenarioFiles(codeyamRoot, scenarioIds) {
415
+ const scenariosDir = path.join(codeyamRoot, '.codeyam', 'editor-scenarios');
416
+ const screenshotsDir = path.join(scenariosDir, 'screenshots');
417
+ for (const id of scenarioIds) {
418
+ for (const file of [
419
+ `${id}.json`,
420
+ `${id}.seed.json`,
421
+ path.join('screenshots', `${id}.png`),
422
+ ]) {
423
+ try {
424
+ fs.unlinkSync(path.join(scenariosDir, file));
425
+ }
426
+ catch {
427
+ // File doesn't exist, that's fine
428
+ }
429
+ }
430
+ // Also clean up multi-dimension screenshots ({id}--{slug}.png)
431
+ try {
432
+ const files = fs.readdirSync(screenshotsDir);
433
+ for (const file of files) {
434
+ if (file.startsWith(`${id}--`) && file.endsWith('.png')) {
435
+ try {
436
+ fs.unlinkSync(path.join(screenshotsDir, file));
437
+ }
438
+ catch {
439
+ // File doesn't exist, that's fine
440
+ }
441
+ }
442
+ }
443
+ }
444
+ catch {
445
+ // Screenshots directory may not exist
446
+ }
447
+ }
448
+ }
449
+ /**
450
+ * Validate that an app/user scenario's file path has a glossary entry.
451
+ * For component-type scenarios, validation is skipped (they use a different flow).
452
+ *
453
+ * Returns:
454
+ * - { valid: true } if validation passes or is skipped
455
+ * - { valid: true, needsAnalysis: true } if in glossary but entity not yet created
456
+ * - { valid: false, error: "..." } if the file is not in the glossary
457
+ */
458
+ export function validateEntityLinkageForAppScenario(params) {
459
+ const { lookupFilePath, scenarioType, projectRoot } = params;
460
+ // Only validate for application/user scenarios
461
+ if (scenarioType !== 'application' && scenarioType !== 'user') {
462
+ return { valid: true };
463
+ }
464
+ // Nothing to validate if no file path
465
+ if (!lookupFilePath) {
466
+ return { valid: true };
467
+ }
468
+ // Read and parse the glossary
469
+ const glossaryPath = path.join(projectRoot, '.codeyam', 'glossary.json');
470
+ let glossaryEntries = [];
471
+ try {
472
+ const raw = JSON.parse(fs.readFileSync(glossaryPath, 'utf8'));
473
+ glossaryEntries = sanitizeGlossaryEntries(raw);
474
+ }
475
+ catch {
476
+ // Glossary doesn't exist or can't be parsed — file not in glossary
477
+ }
478
+ const inGlossary = glossaryEntries.some((entry) => entry.filePath === lookupFilePath);
479
+ if (!inGlossary) {
480
+ const hint = glossaryEntries.length === 0
481
+ ? ` glossary.json is empty or could not be parsed. It must be a JSON array: [{"name": "...", "filePath": "${lookupFilePath}", ...}]`
482
+ : ` Found ${glossaryEntries.length} entries but none with filePath "${lookupFilePath}".`;
483
+ return {
484
+ valid: false,
485
+ error: `No glossary entry found for '${lookupFilePath}'.${hint} Add this file to .codeyam/glossary.json before registering app scenarios.`,
486
+ };
487
+ }
488
+ // In glossary but entity doesn't exist yet — caller needs to run analyze-imports
489
+ return { valid: true, needsAnalysis: true };
490
+ }
491
+ /**
492
+ * Validate that a scenario's componentName and URL are consistent.
493
+ *
494
+ * Component scenarios must use isolation URLs (/isolated-components/ or /codeyam-isolate/).
495
+ * A componentName paired with a regular page URL (e.g., /library) is a miscategorization —
496
+ * the scenario will be audited as a component but screenshot a full page.
497
+ *
498
+ * Returns { valid: true } when OK, or { valid: false, error } with an actionable message.
499
+ */
500
+ export function validateScenarioCategorization(params) {
501
+ const { componentName, url } = params;
502
+ // Only validate when both componentName and url are set
503
+ if (!componentName || !url) {
504
+ return { valid: true };
505
+ }
506
+ // If the URL is an isolation route, categorization is correct
507
+ if (isIsolationUrl(url)) {
508
+ return { valid: true };
509
+ }
510
+ return {
511
+ valid: false,
512
+ error: `Scenario has componentName "${componentName}" but URL "${url}" is not an isolation route. ` +
513
+ `Component scenarios must use an isolation URL like /isolated-components/${componentName}?s=ScenarioName ` +
514
+ `or /codeyam-isolate/${componentName}?s=ScenarioName. ` +
515
+ `Either change the URL to an isolation route, or remove componentName to register as an application scenario.`,
516
+ };
517
+ }
518
+ /**
519
+ * Count scenarios that have null entity_sha but do have a file path
520
+ * (component_path or page_file_path) — these need entity backfill.
521
+ */
522
+ export async function countScenariosNeedingEntityBackfill(db) {
523
+ const result = await db
524
+ .selectFrom('editor_scenarios')
525
+ .select(db.fn.countAll().as('count'))
526
+ .where('entity_sha', 'is', null)
527
+ .where((eb) => eb.or([
528
+ eb('component_path', 'is not', null),
529
+ eb('page_file_path', 'is not', null),
530
+ ]))
531
+ .executeTakeFirstOrThrow();
532
+ return Number(result.count);
533
+ }
534
+ /**
535
+ * Backfill entity_sha (and display_name) on scenarios that were registered
536
+ * before analyze-imports created the entity records in the DB.
537
+ *
538
+ * Matches scenarios by component_path or page_file_path against the entities
539
+ * array. Uses the same display_name derivation as the register route.
540
+ */
541
+ /**
542
+ * Sync scenario entity_sha values to match the latest entity versions.
543
+ *
544
+ * Called proactively when entity versions change (file watcher) and during
545
+ * registration/audit. Updates scenarios with NULL or stale entity SHAs to
546
+ * point to the latest entity version. Safe because journals preserve
547
+ * screenshots and everything is version-controlled in git.
548
+ *
549
+ * @deprecated Use syncScenarioEntityShas — backfillEntityShaOnScenarios is the legacy name
550
+ */
551
+ export const backfillEntityShaOnScenarios = syncScenarioEntityShas;
552
+ export async function syncScenarioEntityShas(db, entities) {
553
+ // Build lookup maps: name+path for precise component matching,
554
+ // path-only as fallback for page scenarios (no component_name).
555
+ // A single file can export multiple entities (e.g., FullPageLibrary.tsx
556
+ // exports FullPageLibrary, FullPageEmptyState, FullPageArticleCard).
557
+ // For page scenarios, prefer the default export since app-level scenarios
558
+ // represent the file's main component.
559
+ const entityByNameAndPath = new Map();
560
+ const entityByPath = new Map();
561
+ for (const entity of entities) {
562
+ if (entity.filePath) {
563
+ entityByNameAndPath.set(`${entity.name}::${entity.filePath}`, entity);
564
+ const existing = entityByPath.get(entity.filePath);
565
+ // Always prefer the latest entity version (last in array, since callers
566
+ // pass entities in creation order). Only skip overwrite when the existing
567
+ // entry is a default export and the new one isn't — default exports
568
+ // represent the file's main component for page scenario matching.
569
+ if (!existing || !existing.isDefaultExport || entity.isDefaultExport) {
570
+ entityByPath.set(entity.filePath, entity);
571
+ }
572
+ }
573
+ }
574
+ // Query scenarios that need updating: either NULL entity_sha or stale
575
+ // (pointing to an older entity version). Journals preserve screenshots
576
+ // and everything is version-controlled, so keeping scenarios on the
577
+ // latest entity SHA is always correct.
578
+ const rows = await db
579
+ .selectFrom('editor_scenarios')
580
+ .selectAll()
581
+ .where((eb) => eb.or([
582
+ eb('component_path', 'is not', null),
583
+ eb('page_file_path', 'is not', null),
584
+ ]))
585
+ .execute();
586
+ if (rows.length === 0)
587
+ return { updated: 0 };
588
+ let updated = 0;
589
+ for (const row of rows) {
590
+ const r = row;
591
+ const lookupPath = r.component_path || r.page_file_path;
592
+ if (!lookupPath)
593
+ continue;
594
+ // Prefer name+path match for component scenarios (handles multi-entity files).
595
+ // Fall back to path-only for page scenarios or when name doesn't match.
596
+ const entity = (r.component_name &&
597
+ entityByNameAndPath.get(`${r.component_name}::${lookupPath}`)) ||
598
+ entityByPath.get(lookupPath);
599
+ if (!entity)
600
+ continue;
601
+ // Skip if already pointing to the latest SHA
602
+ if (r.entity_sha === entity.sha)
603
+ continue;
604
+ // Derive display_name using same logic as register route
605
+ let displayName = null;
606
+ if (r.component_name) {
607
+ displayName = r.component_name;
608
+ }
609
+ else if (r.page_file_path && r.page_file_path.startsWith('app/')) {
610
+ displayName = routeDisplayName(buildRoutePattern(r.page_file_path));
611
+ }
612
+ else if (r.url) {
613
+ displayName = pageNameFromUrl(r.url);
614
+ }
615
+ await db
616
+ .updateTable('editor_scenarios')
617
+ .set({
618
+ entity_sha: entity.sha,
619
+ ...(displayName ? { display_name: displayName } : {}),
620
+ })
621
+ .where('id', '=', r.id)
622
+ .execute();
623
+ updated++;
624
+ }
625
+ return { updated };
626
+ }
627
+ /**
628
+ * Resolve seed data from another scenario, referenced by ID or name.
629
+ *
630
+ * Lookup order:
631
+ * 1. Try `ref` as a scenario ID — read `{ref}.seed.json` directly
632
+ * 2. If no seed file by ID, try `{ref}.json` data file for inline seed
633
+ * 3. If neither works, look up `ref` as a scenario name in the DB,
634
+ * then read the resolved ID's seed files
635
+ *
636
+ * Returns the seed data object, or null if not found.
637
+ */
638
+ export async function resolveSeedFrom(codeyamRoot, db, ref) {
639
+ const scenariosDir = path.join(codeyamRoot, '.codeyam', 'editor-scenarios');
640
+ // Helper: try to read seed data for a given scenario ID
641
+ const readSeedForId = (id) => {
642
+ // Prefer the dedicated .seed.json file
643
+ const seedPath = path.join(scenariosDir, `${id}.seed.json`);
644
+ if (fs.existsSync(seedPath)) {
645
+ try {
646
+ return JSON.parse(fs.readFileSync(seedPath, 'utf-8'));
647
+ }
648
+ catch {
649
+ return null;
650
+ }
651
+ }
652
+ // Fall back to the seed field inside the scenario data file
653
+ const dataPath = path.join(scenariosDir, `${id}.json`);
654
+ if (fs.existsSync(dataPath)) {
655
+ try {
656
+ const data = JSON.parse(fs.readFileSync(dataPath, 'utf-8'));
657
+ return data.seed || null;
658
+ }
659
+ catch {
660
+ return null;
661
+ }
662
+ }
663
+ return null;
664
+ };
665
+ // 1. Try ref as a direct scenario ID
666
+ const directResult = readSeedForId(ref);
667
+ if (directResult)
668
+ return directResult;
669
+ // 2. Look up ref as a scenario name in the DB
670
+ try {
671
+ const row = await db
672
+ .selectFrom('editor_scenarios')
673
+ .select('id')
674
+ .where('name', '=', ref)
675
+ .orderBy('created_at', 'desc')
676
+ .limit(1)
677
+ .executeTakeFirst();
678
+ if (row) {
679
+ return readSeedForId(row.id);
680
+ }
681
+ }
682
+ catch {
683
+ // DB lookup failed — fall through
684
+ }
685
+ return null;
686
+ }
687
+ //# sourceMappingURL=editorScenarios.js.map