@codeyam/codeyam-cli 0.1.0-staging.ae0de75 → 0.1.0-staging.b6c4c78

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 (420) hide show
  1. package/analyzer-template/.build-info.json +7 -7
  2. package/analyzer-template/log.txt +3 -3
  3. package/analyzer-template/package.json +6 -6
  4. package/analyzer-template/packages/ai/package.json +1 -1
  5. package/analyzer-template/packages/ai/src/lib/generateExecutionFlows.ts +0 -33
  6. package/analyzer-template/packages/analyze/src/lib/ProjectAnalyzer.ts +13 -7
  7. package/analyzer-template/packages/analyze/src/lib/asts/index.ts +7 -2
  8. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.ts +0 -98
  9. package/analyzer-template/packages/aws/package.json +1 -1
  10. package/analyzer-template/packages/database/package.json +1 -1
  11. package/analyzer-template/packages/database/src/lib/kysely/tables/editorScenariosTable.ts +92 -0
  12. package/analyzer-template/packages/database/src/lib/loadEntities.ts +0 -6
  13. package/analyzer-template/packages/database/src/lib/updateCommitMetadata.ts +0 -65
  14. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.d.ts +10 -0
  15. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.d.ts.map +1 -1
  16. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.js +92 -0
  17. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -1
  18. package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.d.ts.map +1 -1
  19. package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.js +0 -6
  20. package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.js.map +1 -1
  21. package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.d.ts.map +1 -1
  22. package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js +0 -25
  23. package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js.map +1 -1
  24. package/analyzer-template/packages/github/dist/types/src/enums/ProjectFramework.d.ts +2 -0
  25. package/analyzer-template/packages/github/dist/types/src/enums/ProjectFramework.d.ts.map +1 -1
  26. package/analyzer-template/packages/github/dist/types/src/enums/ProjectFramework.js +2 -0
  27. package/analyzer-template/packages/github/dist/types/src/enums/ProjectFramework.js.map +1 -1
  28. package/analyzer-template/packages/types/src/enums/ProjectFramework.ts +2 -0
  29. package/analyzer-template/packages/ui-components/package.json +1 -1
  30. package/analyzer-template/packages/utils/dist/types/src/enums/ProjectFramework.d.ts +2 -0
  31. package/analyzer-template/packages/utils/dist/types/src/enums/ProjectFramework.d.ts.map +1 -1
  32. package/analyzer-template/packages/utils/dist/types/src/enums/ProjectFramework.js +2 -0
  33. package/analyzer-template/packages/utils/dist/types/src/enums/ProjectFramework.js.map +1 -1
  34. package/codeyam-cli/src/__tests__/memory-scripts/filter-session.test.js +196 -0
  35. package/codeyam-cli/src/__tests__/memory-scripts/filter-session.test.js.map +1 -0
  36. package/codeyam-cli/src/__tests__/memory-scripts/read-json-field.test.js +114 -0
  37. package/codeyam-cli/src/__tests__/memory-scripts/read-json-field.test.js.map +1 -0
  38. package/codeyam-cli/src/__tests__/memory-scripts/ripgrep-fallback.test.js +149 -0
  39. package/codeyam-cli/src/__tests__/memory-scripts/ripgrep-fallback.test.js.map +1 -0
  40. package/codeyam-cli/src/commands/__tests__/editor.stepDispatch.test.js +45 -0
  41. package/codeyam-cli/src/commands/__tests__/editor.stepDispatch.test.js.map +1 -0
  42. package/codeyam-cli/src/commands/__tests__/init.gitignore.test.js +101 -47
  43. package/codeyam-cli/src/commands/__tests__/init.gitignore.test.js.map +1 -1
  44. package/codeyam-cli/src/commands/default.js +3 -46
  45. package/codeyam-cli/src/commands/default.js.map +1 -1
  46. package/codeyam-cli/src/commands/editor.js +2629 -329
  47. package/codeyam-cli/src/commands/editor.js.map +1 -1
  48. package/codeyam-cli/src/commands/init.js +68 -34
  49. package/codeyam-cli/src/commands/init.js.map +1 -1
  50. package/codeyam-cli/src/data/techStacks.js +77 -0
  51. package/codeyam-cli/src/data/techStacks.js.map +1 -0
  52. package/codeyam-cli/src/utils/__tests__/analyzerFinalization.test.js +173 -0
  53. package/codeyam-cli/src/utils/__tests__/analyzerFinalization.test.js.map +1 -0
  54. package/codeyam-cli/src/utils/__tests__/backgroundServer.test.js +46 -0
  55. package/codeyam-cli/src/utils/__tests__/backgroundServer.test.js.map +1 -0
  56. package/codeyam-cli/src/utils/__tests__/devServerState.test.js +134 -0
  57. package/codeyam-cli/src/utils/__tests__/devServerState.test.js.map +1 -0
  58. package/codeyam-cli/src/utils/__tests__/editorApi.test.js +137 -0
  59. package/codeyam-cli/src/utils/__tests__/editorApi.test.js.map +1 -0
  60. package/codeyam-cli/src/utils/__tests__/editorAudit.test.js +742 -1
  61. package/codeyam-cli/src/utils/__tests__/editorAudit.test.js.map +1 -1
  62. package/codeyam-cli/src/utils/__tests__/editorBroadcastViewport.test.js +76 -0
  63. package/codeyam-cli/src/utils/__tests__/editorBroadcastViewport.test.js.map +1 -0
  64. package/codeyam-cli/src/utils/__tests__/editorCapture.test.js +93 -0
  65. package/codeyam-cli/src/utils/__tests__/editorCapture.test.js.map +1 -0
  66. package/codeyam-cli/src/utils/__tests__/editorDevServer.test.js +181 -3
  67. package/codeyam-cli/src/utils/__tests__/editorDevServer.test.js.map +1 -1
  68. package/codeyam-cli/src/utils/__tests__/editorEntityChangeStatus.test.js +124 -0
  69. package/codeyam-cli/src/utils/__tests__/editorEntityChangeStatus.test.js.map +1 -0
  70. package/codeyam-cli/src/utils/__tests__/editorEntityHelpers.test.js +223 -0
  71. package/codeyam-cli/src/utils/__tests__/editorEntityHelpers.test.js.map +1 -0
  72. package/codeyam-cli/src/utils/__tests__/editorImageVerifier.test.js +294 -0
  73. package/codeyam-cli/src/utils/__tests__/editorImageVerifier.test.js.map +1 -0
  74. package/codeyam-cli/src/utils/__tests__/editorJournal.test.js +249 -2
  75. package/codeyam-cli/src/utils/__tests__/editorJournal.test.js.map +1 -1
  76. package/codeyam-cli/src/utils/__tests__/editorLoaderHelpers.test.js +555 -0
  77. package/codeyam-cli/src/utils/__tests__/editorLoaderHelpers.test.js.map +1 -0
  78. package/codeyam-cli/src/utils/__tests__/editorMigration.test.js +430 -0
  79. package/codeyam-cli/src/utils/__tests__/editorMigration.test.js.map +1 -0
  80. package/codeyam-cli/src/utils/__tests__/editorPreloadHelpers.test.js +118 -1
  81. package/codeyam-cli/src/utils/__tests__/editorPreloadHelpers.test.js.map +1 -1
  82. package/codeyam-cli/src/utils/__tests__/editorPreview.test.js +209 -3
  83. package/codeyam-cli/src/utils/__tests__/editorPreview.test.js.map +1 -1
  84. package/codeyam-cli/src/utils/__tests__/editorProxySession.test.js +153 -0
  85. package/codeyam-cli/src/utils/__tests__/editorProxySession.test.js.map +1 -0
  86. package/codeyam-cli/src/utils/__tests__/editorScenarioLookup.test.js +139 -0
  87. package/codeyam-cli/src/utils/__tests__/editorScenarioLookup.test.js.map +1 -0
  88. package/codeyam-cli/src/utils/__tests__/editorScenarioSwitch.test.js +221 -0
  89. package/codeyam-cli/src/utils/__tests__/editorScenarioSwitch.test.js.map +1 -0
  90. package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js +1114 -2
  91. package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js.map +1 -1
  92. package/codeyam-cli/src/utils/__tests__/editorSeedAdapter.test.js +280 -0
  93. package/codeyam-cli/src/utils/__tests__/editorSeedAdapter.test.js.map +1 -0
  94. package/codeyam-cli/src/utils/__tests__/editorSessionFilter.test.js +66 -0
  95. package/codeyam-cli/src/utils/__tests__/editorSessionFilter.test.js.map +1 -0
  96. package/codeyam-cli/src/utils/__tests__/editorShouldRevalidate.test.js +53 -0
  97. package/codeyam-cli/src/utils/__tests__/editorShouldRevalidate.test.js.map +1 -0
  98. package/codeyam-cli/src/utils/__tests__/entityChangeStatus.test.js +1829 -0
  99. package/codeyam-cli/src/utils/__tests__/entityChangeStatus.test.js.map +1 -0
  100. package/codeyam-cli/src/utils/__tests__/journalCaptureStabilization.test.js +107 -0
  101. package/codeyam-cli/src/utils/__tests__/journalCaptureStabilization.test.js.map +1 -0
  102. package/codeyam-cli/src/utils/__tests__/parseRegisterArg.test.js +129 -0
  103. package/codeyam-cli/src/utils/__tests__/parseRegisterArg.test.js.map +1 -0
  104. package/codeyam-cli/src/utils/__tests__/routePatternMatching.test.js +118 -0
  105. package/codeyam-cli/src/utils/__tests__/routePatternMatching.test.js.map +1 -0
  106. package/codeyam-cli/src/utils/__tests__/scenarioCoverage.test.js +227 -0
  107. package/codeyam-cli/src/utils/__tests__/scenarioCoverage.test.js.map +1 -0
  108. package/codeyam-cli/src/utils/__tests__/scenariosManifest.test.js +454 -0
  109. package/codeyam-cli/src/utils/__tests__/scenariosManifest.test.js.map +1 -0
  110. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +26 -5
  111. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js.map +1 -1
  112. package/codeyam-cli/src/utils/__tests__/templateConsistency.test.js +51 -0
  113. package/codeyam-cli/src/utils/__tests__/templateConsistency.test.js.map +1 -0
  114. package/codeyam-cli/src/utils/__tests__/webappDetection.test.js +142 -0
  115. package/codeyam-cli/src/utils/__tests__/webappDetection.test.js.map +1 -0
  116. package/codeyam-cli/src/utils/analysisRunner.js +3 -1
  117. package/codeyam-cli/src/utils/analysisRunner.js.map +1 -1
  118. package/codeyam-cli/src/utils/analyzer.js +9 -0
  119. package/codeyam-cli/src/utils/analyzer.js.map +1 -1
  120. package/codeyam-cli/src/utils/analyzerFinalization.js +100 -0
  121. package/codeyam-cli/src/utils/analyzerFinalization.js.map +1 -0
  122. package/codeyam-cli/src/utils/backgroundServer.js +94 -18
  123. package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
  124. package/codeyam-cli/src/utils/database.js +37 -2
  125. package/codeyam-cli/src/utils/database.js.map +1 -1
  126. package/codeyam-cli/src/utils/devServerState.js +71 -0
  127. package/codeyam-cli/src/utils/devServerState.js.map +1 -0
  128. package/codeyam-cli/src/utils/editorApi.js +79 -0
  129. package/codeyam-cli/src/utils/editorApi.js.map +1 -0
  130. package/codeyam-cli/src/utils/editorAudit.js +135 -7
  131. package/codeyam-cli/src/utils/editorAudit.js.map +1 -1
  132. package/codeyam-cli/src/utils/editorBroadcastViewport.js +26 -0
  133. package/codeyam-cli/src/utils/editorBroadcastViewport.js.map +1 -0
  134. package/codeyam-cli/src/utils/editorCapture.js +102 -0
  135. package/codeyam-cli/src/utils/editorCapture.js.map +1 -0
  136. package/codeyam-cli/src/utils/editorDevServer.js +100 -1
  137. package/codeyam-cli/src/utils/editorDevServer.js.map +1 -1
  138. package/codeyam-cli/src/utils/editorEntityChangeStatus.js +44 -0
  139. package/codeyam-cli/src/utils/editorEntityChangeStatus.js.map +1 -0
  140. package/codeyam-cli/src/utils/editorEntityHelpers.js +129 -0
  141. package/codeyam-cli/src/utils/editorEntityHelpers.js.map +1 -0
  142. package/codeyam-cli/src/utils/editorImageVerifier.js +155 -0
  143. package/codeyam-cli/src/utils/editorImageVerifier.js.map +1 -0
  144. package/codeyam-cli/src/utils/editorJournal.js +92 -4
  145. package/codeyam-cli/src/utils/editorJournal.js.map +1 -1
  146. package/codeyam-cli/src/utils/editorLoaderHelpers.js +140 -0
  147. package/codeyam-cli/src/utils/editorLoaderHelpers.js.map +1 -0
  148. package/codeyam-cli/src/utils/editorMigration.js +224 -0
  149. package/codeyam-cli/src/utils/editorMigration.js.map +1 -0
  150. package/codeyam-cli/src/utils/editorMockState.js +1 -1
  151. package/codeyam-cli/src/utils/editorPreloadHelpers.js +72 -1
  152. package/codeyam-cli/src/utils/editorPreloadHelpers.js.map +1 -1
  153. package/codeyam-cli/src/utils/editorPreview.js +72 -1
  154. package/codeyam-cli/src/utils/editorPreview.js.map +1 -1
  155. package/codeyam-cli/src/utils/editorScenarioSwitch.js +112 -0
  156. package/codeyam-cli/src/utils/editorScenarioSwitch.js.map +1 -0
  157. package/codeyam-cli/src/utils/editorScenarios.js +349 -0
  158. package/codeyam-cli/src/utils/editorScenarios.js.map +1 -1
  159. package/codeyam-cli/src/utils/editorSeedAdapter.js +352 -0
  160. package/codeyam-cli/src/utils/editorSeedAdapter.js.map +1 -0
  161. package/codeyam-cli/src/utils/editorShouldRevalidate.js +21 -0
  162. package/codeyam-cli/src/utils/editorShouldRevalidate.js.map +1 -0
  163. package/codeyam-cli/src/utils/entityChangeStatus.js +360 -0
  164. package/codeyam-cli/src/utils/entityChangeStatus.js.map +1 -0
  165. package/codeyam-cli/src/utils/entityChangeStatus.server.js +196 -0
  166. package/codeyam-cli/src/utils/entityChangeStatus.server.js.map +1 -0
  167. package/codeyam-cli/src/utils/install-skills.js +10 -1
  168. package/codeyam-cli/src/utils/install-skills.js.map +1 -1
  169. package/codeyam-cli/src/utils/parseRegisterArg.js +31 -0
  170. package/codeyam-cli/src/utils/parseRegisterArg.js.map +1 -0
  171. package/codeyam-cli/src/utils/progress.js +2 -2
  172. package/codeyam-cli/src/utils/progress.js.map +1 -1
  173. package/codeyam-cli/src/utils/routePatternMatching.js +129 -0
  174. package/codeyam-cli/src/utils/routePatternMatching.js.map +1 -0
  175. package/codeyam-cli/src/utils/scenarioCoverage.js +74 -0
  176. package/codeyam-cli/src/utils/scenarioCoverage.js.map +1 -0
  177. package/codeyam-cli/src/utils/scenariosManifest.js +244 -0
  178. package/codeyam-cli/src/utils/scenariosManifest.js.map +1 -0
  179. package/codeyam-cli/src/utils/serverState.js +30 -0
  180. package/codeyam-cli/src/utils/serverState.js.map +1 -1
  181. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +47 -16
  182. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js.map +1 -1
  183. package/codeyam-cli/src/utils/simulationGateMiddleware.js +8 -1
  184. package/codeyam-cli/src/utils/simulationGateMiddleware.js.map +1 -1
  185. package/codeyam-cli/src/utils/slugUtils.js +25 -0
  186. package/codeyam-cli/src/utils/slugUtils.js.map +1 -0
  187. package/codeyam-cli/src/utils/syncMocksMiddleware.js +2 -2
  188. package/codeyam-cli/src/utils/syncMocksMiddleware.js.map +1 -1
  189. package/codeyam-cli/src/utils/webappDetection.js +21 -0
  190. package/codeyam-cli/src/utils/webappDetection.js.map +1 -1
  191. package/codeyam-cli/src/webserver/__tests__/clientErrors.test.js +40 -0
  192. package/codeyam-cli/src/webserver/__tests__/clientErrors.test.js.map +1 -0
  193. package/codeyam-cli/src/webserver/__tests__/editorProxy.test.js +567 -0
  194. package/codeyam-cli/src/webserver/__tests__/editorProxy.test.js.map +1 -0
  195. package/codeyam-cli/src/webserver/__tests__/idleDetector.test.js +146 -0
  196. package/codeyam-cli/src/webserver/__tests__/idleDetector.test.js.map +1 -0
  197. package/codeyam-cli/src/webserver/app/lib/clientErrors.js +65 -0
  198. package/codeyam-cli/src/webserver/app/lib/clientErrors.js.map +1 -0
  199. package/codeyam-cli/src/webserver/app/lib/git.js +397 -0
  200. package/codeyam-cli/src/webserver/app/lib/git.js.map +1 -0
  201. package/codeyam-cli/src/webserver/app/types/editor.js +8 -0
  202. package/codeyam-cli/src/webserver/app/types/editor.js.map +1 -0
  203. package/codeyam-cli/src/webserver/backgroundServer.js +18 -4
  204. package/codeyam-cli/src/webserver/backgroundServer.js.map +1 -1
  205. package/codeyam-cli/src/webserver/build/client/assets/CopyButton-CzTDWkF2.js +1 -0
  206. package/codeyam-cli/src/webserver/build/client/assets/{EntityItem-C76mRRiF.js → EntityItem-BFbq6iFk.js} +5 -5
  207. package/codeyam-cli/src/webserver/build/client/assets/EntityTypeBadge-CQgyEGV-.js +1 -0
  208. package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeIcon-CobE682z.js → EntityTypeIcon-B6OMi58N.js} +9 -9
  209. package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-DuYodzo1.js +1 -0
  210. package/codeyam-cli/src/webserver/build/client/assets/InteractivePreview-CXo9EeCl.js +25 -0
  211. package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-DYCNb2It.js +3 -0
  212. package/codeyam-cli/src/webserver/build/client/assets/{LoadingDots-BU_OAEMP.js → LoadingDots-By5zI316.js} +1 -1
  213. package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-ceAyBX-H.js → LogViewer-CZgY3sxX.js} +3 -3
  214. package/codeyam-cli/src/webserver/build/client/assets/{ReportIssueModal-djPLI-WV.js → ReportIssueModal-CnYYwRDw.js} +4 -4
  215. package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-CDoF7ZpU.js +1 -0
  216. package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-B76aig_2.js → ScenarioViewer-DrnfvaLL.js} +3 -3
  217. package/codeyam-cli/src/webserver/build/client/assets/Spinner-Df3UCi8k.js +34 -0
  218. package/codeyam-cli/src/webserver/build/client/assets/TruncatedFilePath-CK7-NaPZ.js +1 -0
  219. package/codeyam-cli/src/webserver/build/client/assets/ViewportInspectBar-DRKR9T0U.js +1 -0
  220. package/codeyam-cli/src/webserver/build/client/assets/{_index-C96V0n15.js → _index-ClR-g3tY.js} +4 -4
  221. package/codeyam-cli/src/webserver/build/client/assets/{activity.(_tab)-BpKzcsJz.js → activity.(_tab)-DTH6ydEA.js} +8 -8
  222. package/codeyam-cli/src/webserver/build/client/assets/addon-canvas-DpzMmAy5.js +1 -0
  223. package/codeyam-cli/src/webserver/build/client/assets/addon-fit-YJmn1quW.js +12 -0
  224. package/codeyam-cli/src/webserver/build/client/assets/{addon-web-links-Duc5hnl7.js → addon-web-links-74hnHF59.js} +1 -1
  225. package/codeyam-cli/src/webserver/build/client/assets/addon-webgl-DI8QOUvO.js +58 -0
  226. package/codeyam-cli/src/webserver/build/client/assets/{agent-transcripts-D9hemwl6.js → agent-transcripts-B8CYhCO9.js} +7 -7
  227. package/codeyam-cli/src/webserver/build/client/assets/api.editor-file-diff-l0sNRNKZ.js +1 -0
  228. package/codeyam-cli/src/webserver/build/client/assets/api.editor-file-l0sNRNKZ.js +1 -0
  229. package/codeyam-cli/src/webserver/build/client/assets/api.editor-project-info-l0sNRNKZ.js +1 -0
  230. package/codeyam-cli/src/webserver/build/client/assets/api.editor-rename-scenario-l0sNRNKZ.js +1 -0
  231. package/codeyam-cli/src/webserver/build/client/assets/api.editor-save-seed-state-l0sNRNKZ.js +1 -0
  232. package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-coverage-l0sNRNKZ.js +1 -0
  233. package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-prompt-l0sNRNKZ.js +1 -0
  234. package/codeyam-cli/src/webserver/build/client/assets/api.editor-session-l0sNRNKZ.js +1 -0
  235. package/codeyam-cli/src/webserver/build/client/assets/{book-open-D_nMCFmP.js → book-open-CLaoh4ac.js} +2 -2
  236. package/codeyam-cli/src/webserver/build/client/assets/{chevron-down-BH2h1Ea2.js → chevron-down-BZ2DZxbW.js} +2 -2
  237. package/codeyam-cli/src/webserver/build/client/assets/{chunk-JZWAC4HX-C4pqxYJB.js → chunk-JZWAC4HX-BBXArFPl.js} +13 -21
  238. package/codeyam-cli/src/webserver/build/client/assets/{circle-check-DyIKORY6.js → circle-check-CT4unAk-.js} +2 -2
  239. package/codeyam-cli/src/webserver/build/client/assets/{copy-NDbZjXao.js → copy-zK0B6Nu-.js} +3 -3
  240. package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-DJB0YQJL.js +41 -0
  241. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-CkXFP_i-.js +1 -0
  242. package/codeyam-cli/src/webserver/build/client/assets/editor._tab-DPw7NZHc.js +1 -0
  243. package/codeyam-cli/src/webserver/build/client/assets/editor.entity.(_sha)-y_5LB2iU.js +58 -0
  244. package/codeyam-cli/src/webserver/build/client/assets/editorPreview-DBa7T2FK.js +41 -0
  245. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-CrjR3zZW.js → entity._sha._-BqAN7hyG.js} +3 -3
  246. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.dev-BOi8kpwd.js +6 -0
  247. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-Dg1NhIms.js +6 -0
  248. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-CJX6kkkV.js +6 -0
  249. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.edit._scenarioId-BMvVHNXU.js → entity._sha_.edit._scenarioId-BhVjZhKg.js} +2 -2
  250. package/codeyam-cli/src/webserver/build/client/assets/{entry.client-DTvKq3TY.js → entry.client-_gzKltPN.js} +6 -6
  251. package/codeyam-cli/src/webserver/build/client/assets/fileTableUtils-Daa96Fr1.js +1 -0
  252. package/codeyam-cli/src/webserver/build/client/assets/files-CV_17tZS.js +1 -0
  253. package/codeyam-cli/src/webserver/build/client/assets/git-D-YXmMbR.js +1 -0
  254. package/codeyam-cli/src/webserver/build/client/assets/globals-BCTpZEY8.css +1 -0
  255. package/codeyam-cli/src/webserver/build/client/assets/index-Blo6EK8G.js +15 -0
  256. package/codeyam-cli/src/webserver/build/client/assets/{index-10oVnAAH.js → index-BsX0F-9C.js} +1 -1
  257. package/codeyam-cli/src/webserver/build/client/assets/{index-BcvgDzbZ.js → index-CCrgCshv.js} +1 -1
  258. package/codeyam-cli/src/webserver/build/client/assets/jsx-runtime-D_zvdyIk.js +9 -0
  259. package/codeyam-cli/src/webserver/build/client/assets/labs-Byazq8Pv.js +1 -0
  260. package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-BAXYRVEO.js → loader-circle-DVQ0oHR7.js} +2 -2
  261. package/codeyam-cli/src/webserver/build/client/assets/manifest-5f1c29f5.js +1 -0
  262. package/codeyam-cli/src/webserver/build/client/assets/memory-b-VmA2Vj.js +101 -0
  263. package/codeyam-cli/src/webserver/build/client/assets/{pause-DTAcYxBt.js → pause-DGcndCAa.js} +3 -3
  264. package/codeyam-cli/src/webserver/build/client/assets/root-BBCQJ_ZM.js +67 -0
  265. package/codeyam-cli/src/webserver/build/client/assets/{search-fKo7v0Zo.js → search-C0Uw0bcK.js} +2 -2
  266. package/codeyam-cli/src/webserver/build/client/assets/settings-OoNgHIfW.js +1 -0
  267. package/codeyam-cli/src/webserver/build/client/assets/simulations-Bcemfu8a.js +1 -0
  268. package/codeyam-cli/src/webserver/build/client/assets/{terminal-BG4heKCG.js → terminal-BgMmG7R9.js} +3 -3
  269. package/codeyam-cli/src/webserver/build/client/assets/{triangle-alert-DtSmdtM4.js → triangle-alert-Cs87hJYK.js} +2 -2
  270. package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-BR3Rs7JY.js +1 -0
  271. package/codeyam-cli/src/webserver/build/client/assets/{useLastLogLine-C14nCb1q.js → useLastLogLine-BxxP_XF9.js} +1 -1
  272. package/codeyam-cli/src/webserver/build/client/assets/useReportContext-BermyNU5.js +1 -0
  273. package/codeyam-cli/src/webserver/build/client/assets/useToast-a_QN_W9_.js +1 -0
  274. package/codeyam-cli/src/webserver/build/client/sound-test.html +98 -0
  275. package/codeyam-cli/src/webserver/build/server/assets/index-BLKsJR3o.js +1 -0
  276. package/codeyam-cli/src/webserver/build/server/assets/init-C2iMAqYu.js +10 -0
  277. package/codeyam-cli/src/webserver/build/server/assets/server-build-DR42Xd5a.js +489 -0
  278. package/codeyam-cli/src/webserver/build/server/index.js +1 -1
  279. package/codeyam-cli/src/webserver/build-info.json +5 -5
  280. package/codeyam-cli/src/webserver/editorProxy.js +511 -50
  281. package/codeyam-cli/src/webserver/editorProxy.js.map +1 -1
  282. package/codeyam-cli/src/webserver/idleDetector.js +73 -0
  283. package/codeyam-cli/src/webserver/idleDetector.js.map +1 -0
  284. package/codeyam-cli/src/webserver/mockStateEvents.js +28 -0
  285. package/codeyam-cli/src/webserver/mockStateEvents.js.map +1 -0
  286. package/codeyam-cli/src/webserver/public/sound-test.html +98 -0
  287. package/codeyam-cli/src/webserver/scripts/codeyam-preload.mjs +242 -3
  288. package/codeyam-cli/src/webserver/scripts/journalCapture.ts +94 -4
  289. package/codeyam-cli/src/webserver/server.js +99 -16
  290. package/codeyam-cli/src/webserver/server.js.map +1 -1
  291. package/codeyam-cli/src/webserver/terminalServer.js +186 -39
  292. package/codeyam-cli/src/webserver/terminalServer.js.map +1 -1
  293. package/codeyam-cli/templates/chrome-extension-react/EXTENSION_SETUP.md +75 -0
  294. package/codeyam-cli/templates/chrome-extension-react/README.md +46 -0
  295. package/codeyam-cli/templates/chrome-extension-react/gitignore +15 -0
  296. package/codeyam-cli/templates/chrome-extension-react/index.html +12 -0
  297. package/codeyam-cli/templates/chrome-extension-react/package.json +27 -0
  298. package/codeyam-cli/templates/chrome-extension-react/popup.html +12 -0
  299. package/codeyam-cli/templates/chrome-extension-react/public/manifest.json +15 -0
  300. package/codeyam-cli/templates/chrome-extension-react/src/background/service-worker.ts +7 -0
  301. package/codeyam-cli/templates/chrome-extension-react/src/globals.css +6 -0
  302. package/codeyam-cli/templates/chrome-extension-react/src/lib/storage.ts +37 -0
  303. package/codeyam-cli/templates/chrome-extension-react/src/popup/App.tsx +12 -0
  304. package/codeyam-cli/templates/chrome-extension-react/src/popup/main.tsx +10 -0
  305. package/codeyam-cli/templates/chrome-extension-react/tsconfig.json +24 -0
  306. package/codeyam-cli/templates/chrome-extension-react/vite.config.ts +41 -0
  307. package/codeyam-cli/templates/codeyam-editor-claude.md +84 -5
  308. package/codeyam-cli/templates/editor-step-hook.py +188 -21
  309. package/codeyam-cli/templates/expo-react-native/MOBILE_SETUP.md +89 -0
  310. package/codeyam-cli/templates/expo-react-native/README.md +41 -0
  311. package/codeyam-cli/templates/expo-react-native/app/(tabs)/_layout.tsx +33 -0
  312. package/codeyam-cli/templates/expo-react-native/app/(tabs)/index.tsx +12 -0
  313. package/codeyam-cli/templates/expo-react-native/app/(tabs)/settings.tsx +12 -0
  314. package/codeyam-cli/templates/expo-react-native/app/_layout.tsx +12 -0
  315. package/codeyam-cli/templates/expo-react-native/app.json +18 -0
  316. package/codeyam-cli/templates/expo-react-native/babel.config.js +9 -0
  317. package/codeyam-cli/templates/expo-react-native/gitignore +12 -0
  318. package/codeyam-cli/templates/expo-react-native/global.css +3 -0
  319. package/codeyam-cli/templates/expo-react-native/lib/storage.ts +32 -0
  320. package/codeyam-cli/templates/expo-react-native/metro.config.js +6 -0
  321. package/codeyam-cli/templates/expo-react-native/nativewind-env.d.ts +1 -0
  322. package/codeyam-cli/templates/expo-react-native/package.json +38 -0
  323. package/codeyam-cli/templates/expo-react-native/tailwind.config.js +10 -0
  324. package/codeyam-cli/templates/expo-react-native/tsconfig.json +10 -0
  325. package/codeyam-cli/templates/nextjs-prisma-sqlite/AUTH_PATTERNS.md +308 -0
  326. package/codeyam-cli/templates/nextjs-prisma-sqlite/AUTH_UPGRADE.md +304 -0
  327. package/codeyam-cli/templates/nextjs-prisma-sqlite/DATABASE.md +126 -0
  328. package/codeyam-cli/templates/nextjs-prisma-sqlite/FEATURE_PATTERNS.md +37 -0
  329. package/codeyam-cli/templates/nextjs-prisma-sqlite/README.md +53 -0
  330. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/codeyam-isolate/layout.tsx +12 -0
  331. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/lib/prisma.ts +9 -4
  332. package/codeyam-cli/templates/nextjs-prisma-sqlite/env +4 -0
  333. package/codeyam-cli/templates/nextjs-prisma-sqlite/gitignore +21 -0
  334. package/codeyam-cli/templates/nextjs-prisma-sqlite/package.json +5 -1
  335. package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma/seed.ts +4 -1
  336. package/codeyam-cli/templates/nextjs-prisma-sqlite/seed-adapter.ts +127 -0
  337. package/codeyam-cli/templates/nextjs-prisma-sqlite/vitest.config.ts +13 -0
  338. package/codeyam-cli/templates/nextjs-prisma-supabase/README.md +52 -0
  339. package/codeyam-cli/templates/{nextjs-prisma-sqlite/PRISMA_SETUP.md → nextjs-prisma-supabase/SUPABASE_SETUP.md} +37 -17
  340. package/codeyam-cli/templates/nextjs-prisma-supabase/app/api/todos/route.ts +17 -0
  341. package/codeyam-cli/templates/nextjs-prisma-supabase/app/globals.css +26 -0
  342. package/codeyam-cli/templates/nextjs-prisma-supabase/app/layout.tsx +34 -0
  343. package/codeyam-cli/templates/nextjs-prisma-supabase/app/lib/prisma.ts +20 -0
  344. package/codeyam-cli/templates/nextjs-prisma-supabase/app/lib/supabase.ts +12 -0
  345. package/codeyam-cli/templates/nextjs-prisma-supabase/app/page.tsx +10 -0
  346. package/codeyam-cli/templates/nextjs-prisma-supabase/env +9 -0
  347. package/codeyam-cli/templates/nextjs-prisma-supabase/eslint.config.mjs +11 -0
  348. package/codeyam-cli/templates/nextjs-prisma-supabase/gitignore +40 -0
  349. package/codeyam-cli/templates/nextjs-prisma-supabase/next.config.ts +11 -0
  350. package/codeyam-cli/templates/nextjs-prisma-supabase/package.json +37 -0
  351. package/codeyam-cli/templates/nextjs-prisma-supabase/postcss.config.mjs +7 -0
  352. package/codeyam-cli/templates/nextjs-prisma-supabase/prisma/schema.prisma +27 -0
  353. package/codeyam-cli/templates/nextjs-prisma-supabase/prisma/seed.ts +39 -0
  354. package/codeyam-cli/templates/nextjs-prisma-supabase/prisma.config.ts +12 -0
  355. package/codeyam-cli/templates/nextjs-prisma-supabase/tsconfig.json +34 -0
  356. package/codeyam-cli/templates/seed-adapters/supabase.ts +282 -0
  357. package/codeyam-cli/templates/skills/codeyam-dev-mode/SKILL.md +2 -2
  358. package/codeyam-cli/templates/skills/codeyam-editor/SKILL.md +159 -17
  359. package/codeyam-cli/templates/skills/codeyam-memory/SKILL.md +10 -10
  360. package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/detect-deprecated-patterns.mjs +139 -0
  361. package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/find-exports.mjs +52 -0
  362. package/codeyam-cli/templates/skills/codeyam-memory/scripts/lib/read-json-field.mjs +61 -0
  363. package/codeyam-cli/templates/skills/codeyam-memory/scripts/lib/ripgrep-fallback.mjs +155 -0
  364. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/cleanup.mjs +13 -0
  365. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/filter-session.mjs +95 -0
  366. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/preprocess.mjs +160 -0
  367. package/package.json +15 -10
  368. package/packages/ai/src/lib/generateExecutionFlows.js +0 -11
  369. package/packages/ai/src/lib/generateExecutionFlows.js.map +1 -1
  370. package/packages/analyze/src/lib/ProjectAnalyzer.js +10 -4
  371. package/packages/analyze/src/lib/ProjectAnalyzer.js.map +1 -1
  372. package/packages/analyze/src/lib/asts/index.js +4 -2
  373. package/packages/analyze/src/lib/asts/index.js.map +1 -1
  374. package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js +0 -40
  375. package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js.map +1 -1
  376. package/packages/database/src/lib/kysely/tables/editorScenariosTable.js +92 -0
  377. package/packages/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -1
  378. package/packages/database/src/lib/loadEntities.js +0 -6
  379. package/packages/database/src/lib/loadEntities.js.map +1 -1
  380. package/packages/database/src/lib/updateCommitMetadata.js +0 -25
  381. package/packages/database/src/lib/updateCommitMetadata.js.map +1 -1
  382. package/packages/types/src/enums/ProjectFramework.js +2 -0
  383. package/packages/types/src/enums/ProjectFramework.js.map +1 -1
  384. package/scripts/npm-post-install.cjs +22 -0
  385. package/codeyam-cli/src/webserver/build/client/assets/CopyButton-DmJveP3T.js +0 -1
  386. package/codeyam-cli/src/webserver/build/client/assets/EntityTypeBadge-g3saevPb.js +0 -1
  387. package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-Bu6c6aDe.js +0 -1
  388. package/codeyam-cli/src/webserver/build/client/assets/InteractivePreview-DYFW3lDD.js +0 -25
  389. package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-DLeucoVX.js +0 -3
  390. package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-BED4B6sP.js +0 -1
  391. package/codeyam-cli/src/webserver/build/client/assets/Spinner-Bb5uFQ5V.js +0 -34
  392. package/codeyam-cli/src/webserver/build/client/assets/Terminal-wkqC0AQk.js +0 -41
  393. package/codeyam-cli/src/webserver/build/client/assets/TruncatedFilePath-C8OKAR5x.js +0 -1
  394. package/codeyam-cli/src/webserver/build/client/assets/addon-fit-CUXOrorO.js +0 -1
  395. package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-CMT1jU2q.js +0 -21
  396. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-BiM6z3Do.js +0 -1
  397. package/codeyam-cli/src/webserver/build/client/assets/editor-CdjF_fX6.js +0 -8
  398. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.dev-D8ILZMR0.js +0 -6
  399. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-C28BiQzt.js +0 -6
  400. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-p9hhkjJM.js +0 -6
  401. package/codeyam-cli/src/webserver/build/client/assets/fileTableUtils-cPo8LiG3.js +0 -1
  402. package/codeyam-cli/src/webserver/build/client/assets/files-DO4CZ16O.js +0 -1
  403. package/codeyam-cli/src/webserver/build/client/assets/git-CFCTYk9I.js +0 -15
  404. package/codeyam-cli/src/webserver/build/client/assets/globals-B17TBSS6.css +0 -1
  405. package/codeyam-cli/src/webserver/build/client/assets/labs-Zk7ryIM1.js +0 -1
  406. package/codeyam-cli/src/webserver/build/client/assets/manifest-b8fd6b07.js +0 -1
  407. package/codeyam-cli/src/webserver/build/client/assets/memory-FweZHj5U.js +0 -93
  408. package/codeyam-cli/src/webserver/build/client/assets/root-DUKqhFlb.js +0 -67
  409. package/codeyam-cli/src/webserver/build/client/assets/settings-DfuTtcJP.js +0 -1
  410. package/codeyam-cli/src/webserver/build/client/assets/simulations-B3aOzpCZ.js +0 -1
  411. package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-ByhSyh0W.js +0 -1
  412. package/codeyam-cli/src/webserver/build/client/assets/useReportContext-O-jkvSPx.js +0 -1
  413. package/codeyam-cli/src/webserver/build/client/assets/useToast-9FIWuYfK.js +0 -1
  414. package/codeyam-cli/src/webserver/build/server/assets/index-BLhjL9Xi.js +0 -1
  415. package/codeyam-cli/src/webserver/build/server/assets/server-build-DyMuI5mU.js +0 -363
  416. package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/detect-deprecated-patterns.sh +0 -108
  417. package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/find-exports.sh +0 -69
  418. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/cleanup.sh +0 -12
  419. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/filter.jq +0 -45
  420. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/preprocess.sh +0 -139
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Shared scenario switching logic.
3
+ *
4
+ * Both `/api/dev-mode-preview` (Express, server.ts) and
5
+ * `/api/editor-switch-scenario` (React Router action) need to switch
6
+ * the active scenario. This module consolidates that logic so both
7
+ * code paths handle seed-based scenarios correctly.
8
+ */
9
+ import fs from 'fs';
10
+ import path from 'path';
11
+ import { runSeedAdapter, detectSeedAdapter } from "./editorSeedAdapter.js";
12
+ /**
13
+ * Track in-flight seed operations to deduplicate concurrent requests
14
+ * for the same scenario.
15
+ */
16
+ let activeSeedOperation = null;
17
+ /**
18
+ * Switch the active editor scenario.
19
+ *
20
+ * 1. Resolves the scenario type from the data file if not provided
21
+ * 2. Writes `active-scenario.json` (including `type`)
22
+ * 3. Runs the seed adapter for application/user scenarios
23
+ * 4. Returns the result (caller is responsible for cache invalidation and refresh)
24
+ */
25
+ export async function switchActiveScenario(params) {
26
+ const { scenarioId, projectRoot } = params;
27
+ const codeyamDir = path.join(projectRoot, '.codeyam');
28
+ const scenariosDir = path.join(codeyamDir, 'editor-scenarios');
29
+ // Resolve slug from data file if not provided
30
+ let effectiveSlug = params.scenarioSlug || null;
31
+ if (!effectiveSlug) {
32
+ try {
33
+ const dataFile = path.join(scenariosDir, `${scenarioId}.json`);
34
+ if (fs.existsSync(dataFile)) {
35
+ const data = JSON.parse(fs.readFileSync(dataFile, 'utf-8'));
36
+ effectiveSlug = data.name || scenarioId;
37
+ }
38
+ else {
39
+ effectiveSlug = scenarioId;
40
+ }
41
+ }
42
+ catch {
43
+ effectiveSlug = scenarioId;
44
+ }
45
+ }
46
+ // Resolve type: prefer explicit param, fall back to data file
47
+ let effectiveType = params.scenarioType || null;
48
+ if (!effectiveType) {
49
+ try {
50
+ const dataFile = path.join(scenariosDir, `${scenarioId}.json`);
51
+ if (fs.existsSync(dataFile)) {
52
+ const data = JSON.parse(fs.readFileSync(dataFile, 'utf-8'));
53
+ effectiveType = data.type || null;
54
+ }
55
+ }
56
+ catch {
57
+ // Non-fatal
58
+ }
59
+ }
60
+ // Write active-scenario.json — MUST include type so proxy is type-aware
61
+ const activeScenarioPath = path.join(codeyamDir, 'active-scenario.json');
62
+ fs.mkdirSync(codeyamDir, { recursive: true });
63
+ fs.writeFileSync(activeScenarioPath, JSON.stringify({
64
+ scenarioSlug: effectiveSlug,
65
+ scenarioName: params.scenarioName || effectiveSlug,
66
+ scenarioId,
67
+ type: effectiveType,
68
+ dataFile: `.codeyam/editor-scenarios/${scenarioId}.json`,
69
+ switchedAt: new Date().toISOString(),
70
+ }, null, 2));
71
+ // Run seed adapter for application/user scenarios
72
+ let seedResult = null;
73
+ const isSeedScenario = effectiveType === 'application' || effectiveType === 'user';
74
+ if (isSeedScenario) {
75
+ // Deduplicate concurrent seed requests for the same scenario
76
+ if (activeSeedOperation && activeSeedOperation.scenarioId === scenarioId) {
77
+ seedResult = await activeSeedOperation.promise;
78
+ }
79
+ else {
80
+ const adapterPath = detectSeedAdapter(projectRoot);
81
+ const seedDataPath = path.join(scenariosDir, `${scenarioId}.seed.json`);
82
+ if (adapterPath && fs.existsSync(seedDataPath)) {
83
+ const seedPromise = runSeedAdapter(adapterPath, seedDataPath).then((result) => ({
84
+ success: result.success,
85
+ error: result.error,
86
+ }));
87
+ activeSeedOperation = { scenarioId, promise: seedPromise };
88
+ try {
89
+ seedResult = await seedPromise;
90
+ }
91
+ finally {
92
+ if (activeSeedOperation &&
93
+ activeSeedOperation.scenarioId === scenarioId) {
94
+ activeSeedOperation = null;
95
+ }
96
+ }
97
+ }
98
+ else if (!adapterPath) {
99
+ seedResult = { success: false, error: 'No seed adapter found' };
100
+ }
101
+ }
102
+ }
103
+ return {
104
+ success: true,
105
+ scenarioSlug: effectiveSlug,
106
+ scenarioId,
107
+ type: effectiveType,
108
+ seeded: isSeedScenario,
109
+ ...(seedResult ? { seedResult } : {}),
110
+ };
111
+ }
112
+ //# sourceMappingURL=editorScenarioSwitch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editorScenarioSwitch.js","sourceRoot":"","sources":["../../../../src/utils/editorScenarioSwitch.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAmBxE;;;GAGG;AACH,IAAI,mBAAmB,GAGZ,IAAI,CAAC;AAEhB;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAA4B;IAE5B,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACtD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;IAE/D,8CAA8C;IAC9C,IAAI,aAAa,GAAG,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC;IAChD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,UAAU,OAAO,CAAC,CAAC;YAC/D,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC5D,aAAa,GAAG,IAAI,CAAC,IAAI,IAAI,UAAU,CAAC;YAC1C,CAAC;iBAAM,CAAC;gBACN,aAAa,GAAG,UAAU,CAAC;YAC7B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,aAAa,GAAG,UAAU,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,8DAA8D;IAC9D,IAAI,aAAa,GAAG,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC;IAChD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,UAAU,OAAO,CAAC,CAAC;YAC/D,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC5D,aAAa,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;YACpC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,YAAY;QACd,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,sBAAsB,CAAC,CAAC;IACzE,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,EAAE,CAAC,aAAa,CACd,kBAAkB,EAClB,IAAI,CAAC,SAAS,CACZ;QACE,YAAY,EAAE,aAAa;QAC3B,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,aAAa;QAClD,UAAU;QACV,IAAI,EAAE,aAAa;QACnB,QAAQ,EAAE,6BAA6B,UAAU,OAAO;QACxD,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACrC,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;IAEF,kDAAkD;IAClD,IAAI,UAAU,GAAgD,IAAI,CAAC;IACnE,MAAM,cAAc,GAClB,aAAa,KAAK,aAAa,IAAI,aAAa,KAAK,MAAM,CAAC;IAE9D,IAAI,cAAc,EAAE,CAAC;QACnB,6DAA6D;QAC7D,IAAI,mBAAmB,IAAI,mBAAmB,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;YACzE,UAAU,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,MAAM,WAAW,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;YACnD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,UAAU,YAAY,CAAC,CAAC;YAExE,IAAI,WAAW,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC/C,MAAM,WAAW,GAAG,cAAc,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,IAAI,CAChE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;oBACX,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,KAAK,EAAE,MAAM,CAAC,KAAK;iBACpB,CAAC,CACH,CAAC;gBAEF,mBAAmB,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;gBAC3D,IAAI,CAAC;oBACH,UAAU,GAAG,MAAM,WAAW,CAAC;gBACjC,CAAC;wBAAS,CAAC;oBACT,IACE,mBAAmB;wBACnB,mBAAmB,CAAC,UAAU,KAAK,UAAU,EAC7C,CAAC;wBACD,mBAAmB,GAAG,IAAI,CAAC;oBAC7B,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,IAAI,CAAC,WAAW,EAAE,CAAC;gBACxB,UAAU,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC;YAClE,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,YAAY,EAAE,aAAc;QAC5B,UAAU;QACV,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,cAAc;QACtB,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACtC,CAAC;AACJ,CAAC"}
@@ -4,6 +4,8 @@
4
4
  * Extracted from inline logic in editor.tsx, api.editor-journal-entry.ts,
5
5
  * and api.editor-register-scenario.ts.
6
6
  */
7
+ import fs from 'fs';
8
+ import path from 'path';
7
9
  /**
8
10
  * Generic Map-based deduplication that keeps the last item for each key.
9
11
  * Items are iterated in order, so later entries overwrite earlier ones.
@@ -23,6 +25,17 @@ export function deduplicateByName(items, keyFn) {
23
25
  export function generateScenarioSlug(name) {
24
26
  return name.replace(/[^a-zA-Z0-9_]+/g, '_');
25
27
  }
28
+ /**
29
+ * Convert a dimension name to a filename-safe slug for screenshot paths.
30
+ * Lowercase, spaces→hyphens, strip non-alphanumeric, collapse multiple hyphens.
31
+ * "Extension Popup" → "extension-popup"
32
+ */
33
+ export function slugifyDimension(name) {
34
+ return name
35
+ .toLowerCase()
36
+ .replace(/[^a-z0-9]+/g, '-')
37
+ .replace(/^-+|-+$/g, '');
38
+ }
26
39
  /**
27
40
  * Convert an ISO 8601 timestamp (e.g. "2026-02-28T19:00:00.000Z") to
28
41
  * SQLite-compatible format (e.g. "2026-02-28 19:00:00").
@@ -33,6 +46,75 @@ export function generateScenarioSlug(name) {
33
46
  export function convertIsoToSqliteTimestamp(iso) {
34
47
  return iso.replace('T', ' ').replace(/\.\d{3}Z$/, '');
35
48
  }
49
+ /**
50
+ * Check whether a scenario row belongs to the current feature session.
51
+ * A row belongs if it was created OR updated after the session start —
52
+ * re-registering a scenario updates `updated_at` but preserves `created_at`.
53
+ */
54
+ export function isRowInFeatureSession(row, sqliteTimestamp) {
55
+ if (row.created_at && row.created_at >= sqliteTimestamp)
56
+ return true;
57
+ if (row.updated_at && row.updated_at >= sqliteTimestamp)
58
+ return true;
59
+ return false;
60
+ }
61
+ /**
62
+ * Properties in config.json that are user-configured and must survive a re-init.
63
+ * Auto-detected properties (projectSlug, packageManager, webapps, createdAt, etc.)
64
+ * are intentionally NOT preserved — init should re-detect them.
65
+ */
66
+ const PRESERVED_CONFIG_KEYS = [
67
+ 'defaultScreenSize',
68
+ 'screenSizes',
69
+ 'projectTitle',
70
+ 'projectDescription',
71
+ ];
72
+ /**
73
+ * Read user-configured properties from an existing config.json that should be
74
+ * preserved when `codeyam init --force` overwrites the file.
75
+ *
76
+ * Returns only the properties listed in PRESERVED_CONFIG_KEYS.
77
+ * Returns an empty object if the file doesn't exist or can't be parsed.
78
+ */
79
+ export function readPreservedConfigProperties(configPath) {
80
+ try {
81
+ const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
82
+ const preserved = {};
83
+ for (const key of PRESERVED_CONFIG_KEYS) {
84
+ if (config[key] !== undefined) {
85
+ preserved[key] = config[key];
86
+ }
87
+ }
88
+ return preserved;
89
+ }
90
+ catch {
91
+ return {};
92
+ }
93
+ }
94
+ /**
95
+ * Validate that a step transition is allowed.
96
+ *
97
+ * Rules:
98
+ * - Step 1 is always allowed (starts a new feature).
99
+ * - Steps 2–13 require the current state step to be at least (requestedStep - 1),
100
+ * i.e. you can advance one step at a time or re-run the current step, but
101
+ * you cannot skip ahead.
102
+ *
103
+ * Returns null if valid, or an error message string if invalid.
104
+ */
105
+ export function validateStepTransition(requestedStep, currentStep) {
106
+ // Step 1 always allowed — it starts or restarts a feature
107
+ if (requestedStep === 1)
108
+ return null;
109
+ // No state at all — must start from step 1
110
+ if (currentStep === null) {
111
+ return `Cannot jump to step ${requestedStep} — no feature in progress. Run step 1 first.`;
112
+ }
113
+ // Allow re-running the current step or advancing to the next step
114
+ if (requestedStep <= currentStep + 1)
115
+ return null;
116
+ return `Cannot jump from step ${currentStep} to step ${requestedStep}. Complete step ${currentStep + 1} first.`;
117
+ }
36
118
  /**
37
119
  * Resolve which URL to use for Playwright screenshot capture.
38
120
  *
@@ -41,6 +123,44 @@ export function convertIsoToSqliteTimestamp(iso) {
41
123
  * 2. Full URL → use directly (legacy)
42
124
  * 3. No URL → proxy root or dev server root (page scenarios)
43
125
  */
126
+ /**
127
+ * Resolve the navigation path for preview refresh.
128
+ * Priority: explicit path > scenario URL from DB > undefined (plain refresh).
129
+ */
130
+ export function resolvePreviewNavPath(explicitPath, scenarioUrl) {
131
+ if (explicitPath)
132
+ return explicitPath;
133
+ if (scenarioUrl)
134
+ return scenarioUrl;
135
+ return undefined;
136
+ }
137
+ /**
138
+ * Clear the editor step state file (for starting a new feature).
139
+ * This should NOT touch the user prompt file — the prompt is captured
140
+ * by the hook before step 1 runs, so deleting it here would lose it.
141
+ */
142
+ export function clearEditorState(root) {
143
+ const statePath = path.join(root, '.codeyam', 'editor-step.json');
144
+ try {
145
+ fs.unlinkSync(statePath);
146
+ }
147
+ catch {
148
+ // File doesn't exist, that's fine
149
+ }
150
+ }
151
+ /**
152
+ * Clear the user prompt file so the hook can capture the next feature request.
153
+ * Call this after a feature is committed, not during step 1.
154
+ */
155
+ export function clearEditorUserPrompt(root) {
156
+ const promptPath = path.join(root, '.codeyam', 'editor-user-prompt.txt');
157
+ try {
158
+ fs.unlinkSync(promptPath);
159
+ }
160
+ catch {
161
+ // File doesn't exist, that's fine
162
+ }
163
+ }
44
164
  export function determineCaptureUrl(url, proxyUrl, devServerUrl) {
45
165
  const isPath = url && url.startsWith('/');
46
166
  if (isPath && proxyUrl) {
@@ -53,4 +173,233 @@ export function determineCaptureUrl(url, proxyUrl, devServerUrl) {
53
173
  return proxyUrl || devServerUrl || null;
54
174
  }
55
175
  }
176
+ /**
177
+ * Read the project's default screen size from .codeyam/config.json.
178
+ * Returns { width, height } or null if not configured.
179
+ */
180
+ export function readDefaultScreenSize(codeyamRoot) {
181
+ try {
182
+ const configPath = path.join(codeyamRoot, '.codeyam', 'config.json');
183
+ const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
184
+ if (config.defaultScreenSize?.width && config.defaultScreenSize?.height) {
185
+ return {
186
+ width: config.defaultScreenSize.width,
187
+ height: config.defaultScreenSize.height,
188
+ };
189
+ }
190
+ }
191
+ catch {
192
+ // Non-fatal
193
+ }
194
+ return null;
195
+ }
196
+ /**
197
+ * Read named screen sizes from .codeyam/config.json.
198
+ * Returns a map of name → { width, height }, or empty object if not configured.
199
+ *
200
+ * Config format:
201
+ * "screenSizes": {
202
+ * "Desktop": { "width": 1440, "height": 900 },
203
+ * "Mobile": { "width": 375, "height": 667 }
204
+ * }
205
+ */
206
+ export function readScreenSizes(codeyamRoot) {
207
+ try {
208
+ const configPath = path.join(codeyamRoot, '.codeyam', 'config.json');
209
+ const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
210
+ if (config.screenSizes &&
211
+ typeof config.screenSizes === 'object' &&
212
+ !Array.isArray(config.screenSizes)) {
213
+ return config.screenSizes;
214
+ }
215
+ }
216
+ catch {
217
+ // Non-fatal
218
+ }
219
+ return {};
220
+ }
221
+ /**
222
+ * Resolve the viewport dimensions for a scenario capture.
223
+ * Priority: explicit body values > project default > hardcoded fallback (1280×720).
224
+ */
225
+ export function resolveScenarioViewport(params) {
226
+ return {
227
+ width: params.bodyWidth || params.projectDefault?.width || 1280,
228
+ height: params.bodyHeight || params.projectDefault?.height || 720,
229
+ };
230
+ }
231
+ /**
232
+ * Resolve viewport dimensions by reading the project config.
233
+ *
234
+ * Priority chain:
235
+ * 1. Explicit bodyWidth/bodyHeight (highest)
236
+ * 2. Named dimension → lookup in config screenSizes map
237
+ * 3. Project defaultScreenSize from config
238
+ * 4. 1280×720 hardcoded fallback (lowest)
239
+ *
240
+ * Use this in any capture endpoint that needs viewport resolution.
241
+ */
242
+ export function resolveViewportWithProjectDefault(params) {
243
+ // Look up named dimension from screenSizes if provided
244
+ let dimensionSize = null;
245
+ if (params.dimension) {
246
+ const screenSizes = readScreenSizes(params.codeyamRoot);
247
+ const entry = screenSizes[params.dimension];
248
+ if (entry?.width && entry?.height) {
249
+ dimensionSize = { width: entry.width, height: entry.height };
250
+ }
251
+ }
252
+ const projectDefault = dimensionSize || readDefaultScreenSize(params.codeyamRoot);
253
+ return resolveScenarioViewport({
254
+ bodyWidth: params.bodyWidth,
255
+ bodyHeight: params.bodyHeight,
256
+ projectDefault,
257
+ });
258
+ }
259
+ /**
260
+ * Insert or update an editor scenario by name + project.
261
+ *
262
+ * When a scenario with the same name already exists for the project:
263
+ * - Reuses the most recent row's ID (so data files at that path get overwritten naturally)
264
+ * - Updates the row with the new values
265
+ * - Deletes any additional duplicate rows that accumulated from past always-insert behavior
266
+ *
267
+ * When no existing scenario matches: inserts a new row with a fresh UUID.
268
+ */
269
+ export async function upsertEditorScenario(db, params) {
270
+ // Serialize multi-dimension fields for storage
271
+ const dimensionsJson = params.dimensions
272
+ ? JSON.stringify(params.dimensions)
273
+ : null;
274
+ const screenshotPathsJson = params.screenshotPaths
275
+ ? JSON.stringify(params.screenshotPaths)
276
+ : null;
277
+ // Find all existing scenarios with the same name + project
278
+ const existing = await db
279
+ .selectFrom('editor_scenarios')
280
+ .selectAll()
281
+ .where('name', '=', params.name)
282
+ .where('project_id', '=', params.projectId)
283
+ .orderBy('created_at', 'desc')
284
+ .execute();
285
+ if (existing.length > 0) {
286
+ // Reuse the most recent row's ID
287
+ const latest = existing[0];
288
+ const scenarioId = latest.id;
289
+ // Update the existing row with new values
290
+ const updateSet = {
291
+ description: params.description,
292
+ component_name: params.componentName,
293
+ component_path: params.componentPath,
294
+ url: params.url,
295
+ type: params.type,
296
+ viewport_width: params.viewportWidth,
297
+ viewport_height: params.viewportHeight,
298
+ dimension: params.dimension,
299
+ updated_at: new Date()
300
+ .toISOString()
301
+ .replace('T', ' ')
302
+ .replace(/\.\d{3}Z$/, ''),
303
+ };
304
+ if (params.dimensions !== undefined) {
305
+ updateSet.dimensions = dimensionsJson;
306
+ updateSet.screenshot_paths = screenshotPathsJson;
307
+ }
308
+ if (params.pageFilePath !== undefined) {
309
+ updateSet.page_file_path = params.pageFilePath;
310
+ }
311
+ if (params.entitySha !== undefined) {
312
+ updateSet.entity_sha = params.entitySha;
313
+ }
314
+ if (params.displayName !== undefined) {
315
+ updateSet.display_name = params.displayName;
316
+ }
317
+ await db
318
+ .updateTable('editor_scenarios')
319
+ .set(updateSet)
320
+ .where('id', '=', scenarioId)
321
+ .execute();
322
+ // Delete duplicate rows (all except the latest)
323
+ const duplicateIds = existing.slice(1).map((r) => r.id);
324
+ if (duplicateIds.length > 0) {
325
+ await db
326
+ .deleteFrom('editor_scenarios')
327
+ .where('id', 'in', duplicateIds)
328
+ .execute();
329
+ }
330
+ return { scenarioId, isNew: false, cleanedUpIds: duplicateIds };
331
+ }
332
+ // No existing scenario — insert new
333
+ // Use globalThis.crypto (Web Crypto API) to avoid pulling Node's crypto
334
+ // module into the Vite client bundle (this file is also imported client-side
335
+ // for deduplicateByName).
336
+ const scenarioId = globalThis.crypto.randomUUID();
337
+ const insertValues = {
338
+ id: scenarioId,
339
+ project_id: params.projectId,
340
+ name: params.name,
341
+ description: params.description,
342
+ component_name: params.componentName,
343
+ component_path: params.componentPath,
344
+ url: params.url,
345
+ type: params.type,
346
+ viewport_width: params.viewportWidth,
347
+ viewport_height: params.viewportHeight,
348
+ dimension: params.dimension,
349
+ };
350
+ if (params.dimensions !== undefined) {
351
+ insertValues.dimensions = dimensionsJson;
352
+ insertValues.screenshot_paths = screenshotPathsJson;
353
+ }
354
+ if (params.pageFilePath !== undefined) {
355
+ insertValues.page_file_path = params.pageFilePath;
356
+ }
357
+ if (params.entitySha !== undefined) {
358
+ insertValues.entity_sha = params.entitySha;
359
+ }
360
+ if (params.displayName !== undefined) {
361
+ insertValues.display_name = params.displayName;
362
+ }
363
+ await db.insertInto('editor_scenarios').values(insertValues).execute();
364
+ return { scenarioId, isNew: true, cleanedUpIds: [] };
365
+ }
366
+ /**
367
+ * Delete data files (.json, .seed.json) and screenshots for a list of scenario IDs.
368
+ * Used to clean up orphaned files after deduplication.
369
+ */
370
+ export function cleanupScenarioFiles(codeyamRoot, scenarioIds) {
371
+ const scenariosDir = path.join(codeyamRoot, '.codeyam', 'editor-scenarios');
372
+ const screenshotsDir = path.join(scenariosDir, 'screenshots');
373
+ for (const id of scenarioIds) {
374
+ for (const file of [
375
+ `${id}.json`,
376
+ `${id}.seed.json`,
377
+ path.join('screenshots', `${id}.png`),
378
+ ]) {
379
+ try {
380
+ fs.unlinkSync(path.join(scenariosDir, file));
381
+ }
382
+ catch {
383
+ // File doesn't exist, that's fine
384
+ }
385
+ }
386
+ // Also clean up multi-dimension screenshots ({id}--{slug}.png)
387
+ try {
388
+ const files = fs.readdirSync(screenshotsDir);
389
+ for (const file of files) {
390
+ if (file.startsWith(`${id}--`) && file.endsWith('.png')) {
391
+ try {
392
+ fs.unlinkSync(path.join(screenshotsDir, file));
393
+ }
394
+ catch {
395
+ // File doesn't exist, that's fine
396
+ }
397
+ }
398
+ }
399
+ }
400
+ catch {
401
+ // Screenshots directory may not exist
402
+ }
403
+ }
404
+ }
56
405
  //# sourceMappingURL=editorScenarios.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"editorScenarios.js","sourceRoot":"","sources":["../../../../src/utils/editorScenarios.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAU,EACV,KAA0B;IAE1B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAa,CAAC;IACnC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,2BAA2B,CAAC,GAAW;IACrD,OAAO,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AACxD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CACjC,GAA8B,EAC9B,QAAuB,EACvB,YAA2B;IAE3B,MAAM,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAE1C,IAAI,MAAM,IAAI,QAAQ,EAAE,CAAC;QACvB,OAAO,GAAG,QAAQ,GAAG,GAAG,EAAE,CAAC;IAC7B,CAAC;SAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC1B,OAAO,GAAG,CAAC;IACb,CAAC;SAAM,CAAC;QACN,OAAO,QAAQ,IAAI,YAAY,IAAI,IAAI,CAAC;IAC1C,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"editorScenarios.js","sourceRoot":"","sources":["../../../../src/utils/editorScenarios.ts"],"names":[],"mappings":"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"}