@codeyam/codeyam-cli 0.1.0-staging.8778565 → 0.1.0-staging.87dd4be

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 (310) 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 +2 -2
  4. package/analyzer-template/packages/ai/package.json +1 -1
  5. package/analyzer-template/packages/aws/package.json +1 -1
  6. package/analyzer-template/packages/database/package.json +1 -1
  7. package/analyzer-template/packages/database/src/lib/kysely/tables/editorScenariosTable.ts +82 -0
  8. package/analyzer-template/packages/database/src/lib/loadEntities.ts +0 -6
  9. package/analyzer-template/packages/database/src/lib/updateCommitMetadata.ts +0 -65
  10. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.d.ts +5 -0
  11. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.d.ts.map +1 -1
  12. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.js +84 -0
  13. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -1
  14. package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.d.ts.map +1 -1
  15. package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.js +0 -6
  16. package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.js.map +1 -1
  17. package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.d.ts.map +1 -1
  18. package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js +0 -25
  19. package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js.map +1 -1
  20. package/codeyam-cli/src/cli.js +9 -0
  21. package/codeyam-cli/src/cli.js.map +1 -1
  22. package/codeyam-cli/src/commands/__tests__/editor.isolateArgs.test.js +51 -0
  23. package/codeyam-cli/src/commands/__tests__/editor.isolateArgs.test.js.map +1 -0
  24. package/codeyam-cli/src/commands/__tests__/editor.stepDispatch.test.js +56 -0
  25. package/codeyam-cli/src/commands/__tests__/editor.stepDispatch.test.js.map +1 -0
  26. package/codeyam-cli/src/commands/__tests__/init.gitignore.test.js +101 -47
  27. package/codeyam-cli/src/commands/__tests__/init.gitignore.test.js.map +1 -1
  28. package/codeyam-cli/src/commands/editor.js +2369 -346
  29. package/codeyam-cli/src/commands/editor.js.map +1 -1
  30. package/codeyam-cli/src/commands/editorIsolateArgs.js +25 -0
  31. package/codeyam-cli/src/commands/editorIsolateArgs.js.map +1 -0
  32. package/codeyam-cli/src/commands/init.js +69 -34
  33. package/codeyam-cli/src/commands/init.js.map +1 -1
  34. package/codeyam-cli/src/commands/telemetry.js +37 -0
  35. package/codeyam-cli/src/commands/telemetry.js.map +1 -0
  36. package/codeyam-cli/src/utils/__tests__/analyzerFinalization.test.js +173 -0
  37. package/codeyam-cli/src/utils/__tests__/analyzerFinalization.test.js.map +1 -0
  38. package/codeyam-cli/src/utils/__tests__/editorApi.test.js +18 -8
  39. package/codeyam-cli/src/utils/__tests__/editorApi.test.js.map +1 -1
  40. package/codeyam-cli/src/utils/__tests__/editorAudit.test.js +2046 -1
  41. package/codeyam-cli/src/utils/__tests__/editorAudit.test.js.map +1 -1
  42. package/codeyam-cli/src/utils/__tests__/editorBroadcastViewport.test.js +76 -0
  43. package/codeyam-cli/src/utils/__tests__/editorBroadcastViewport.test.js.map +1 -0
  44. package/codeyam-cli/src/utils/__tests__/editorCaptureScenarioSeeding.test.js +137 -0
  45. package/codeyam-cli/src/utils/__tests__/editorCaptureScenarioSeeding.test.js.map +1 -0
  46. package/codeyam-cli/src/utils/__tests__/editorDeleteScenario.test.js +100 -0
  47. package/codeyam-cli/src/utils/__tests__/editorDeleteScenario.test.js.map +1 -0
  48. package/codeyam-cli/src/utils/__tests__/editorEntityChangeStatus.test.js +76 -3
  49. package/codeyam-cli/src/utils/__tests__/editorEntityChangeStatus.test.js.map +1 -1
  50. package/codeyam-cli/src/utils/__tests__/editorEntityHelpers.test.js +381 -0
  51. package/codeyam-cli/src/utils/__tests__/editorEntityHelpers.test.js.map +1 -0
  52. package/codeyam-cli/src/utils/__tests__/editorLoaderHelpers.test.js +202 -1
  53. package/codeyam-cli/src/utils/__tests__/editorLoaderHelpers.test.js.map +1 -1
  54. package/codeyam-cli/src/utils/__tests__/editorMigration.test.js +435 -0
  55. package/codeyam-cli/src/utils/__tests__/editorMigration.test.js.map +1 -0
  56. package/codeyam-cli/src/utils/__tests__/editorPreview.test.js +88 -1
  57. package/codeyam-cli/src/utils/__tests__/editorPreview.test.js.map +1 -1
  58. package/codeyam-cli/src/utils/__tests__/editorProxySession.test.js +47 -1
  59. package/codeyam-cli/src/utils/__tests__/editorProxySession.test.js.map +1 -1
  60. package/codeyam-cli/src/utils/__tests__/editorScenarioSwitch.test.js +70 -0
  61. package/codeyam-cli/src/utils/__tests__/editorScenarioSwitch.test.js.map +1 -1
  62. package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js +1335 -1
  63. package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js.map +1 -1
  64. package/codeyam-cli/src/utils/__tests__/editorSeedAdapter.test.js +67 -0
  65. package/codeyam-cli/src/utils/__tests__/editorSeedAdapter.test.js.map +1 -1
  66. package/codeyam-cli/src/utils/__tests__/editorSeedAdapterPrismaValidation.test.js +143 -0
  67. package/codeyam-cli/src/utils/__tests__/editorSeedAdapterPrismaValidation.test.js.map +1 -0
  68. package/codeyam-cli/src/utils/__tests__/editorSessionFilter.test.js +66 -0
  69. package/codeyam-cli/src/utils/__tests__/editorSessionFilter.test.js.map +1 -0
  70. package/codeyam-cli/src/utils/__tests__/editorShouldRevalidate.test.js +53 -0
  71. package/codeyam-cli/src/utils/__tests__/editorShouldRevalidate.test.js.map +1 -0
  72. package/codeyam-cli/src/utils/__tests__/entityChangeStatus.test.js +363 -11
  73. package/codeyam-cli/src/utils/__tests__/entityChangeStatus.test.js.map +1 -1
  74. package/codeyam-cli/src/utils/__tests__/glossaryAdd.test.js +177 -0
  75. package/codeyam-cli/src/utils/__tests__/glossaryAdd.test.js.map +1 -0
  76. package/codeyam-cli/src/utils/__tests__/parseRegisterArg.test.js +30 -2
  77. package/codeyam-cli/src/utils/__tests__/parseRegisterArg.test.js.map +1 -1
  78. package/codeyam-cli/src/utils/__tests__/routePatternMatching.test.js +118 -0
  79. package/codeyam-cli/src/utils/__tests__/routePatternMatching.test.js.map +1 -0
  80. package/codeyam-cli/src/utils/__tests__/scenarioCoverage.test.js +284 -0
  81. package/codeyam-cli/src/utils/__tests__/scenarioCoverage.test.js.map +1 -0
  82. package/codeyam-cli/src/utils/__tests__/scenariosManifest.test.js +649 -223
  83. package/codeyam-cli/src/utils/__tests__/scenariosManifest.test.js.map +1 -1
  84. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +1 -0
  85. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js.map +1 -1
  86. package/codeyam-cli/src/utils/__tests__/telemetry.test.js +159 -0
  87. package/codeyam-cli/src/utils/__tests__/telemetry.test.js.map +1 -0
  88. package/codeyam-cli/src/utils/analysisRunner.js +3 -1
  89. package/codeyam-cli/src/utils/analysisRunner.js.map +1 -1
  90. package/codeyam-cli/src/utils/analyzer.js +9 -0
  91. package/codeyam-cli/src/utils/analyzer.js.map +1 -1
  92. package/codeyam-cli/src/utils/analyzerFinalization.js +100 -0
  93. package/codeyam-cli/src/utils/analyzerFinalization.js.map +1 -0
  94. package/codeyam-cli/src/utils/backgroundServer.js +3 -9
  95. package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
  96. package/codeyam-cli/src/utils/database.js +37 -2
  97. package/codeyam-cli/src/utils/database.js.map +1 -1
  98. package/codeyam-cli/src/utils/editorApi.js +11 -5
  99. package/codeyam-cli/src/utils/editorApi.js.map +1 -1
  100. package/codeyam-cli/src/utils/editorAudit.js +372 -5
  101. package/codeyam-cli/src/utils/editorAudit.js.map +1 -1
  102. package/codeyam-cli/src/utils/editorBroadcastViewport.js +26 -0
  103. package/codeyam-cli/src/utils/editorBroadcastViewport.js.map +1 -0
  104. package/codeyam-cli/src/utils/editorDeleteScenario.js +67 -0
  105. package/codeyam-cli/src/utils/editorDeleteScenario.js.map +1 -0
  106. package/codeyam-cli/src/utils/editorEntityChangeStatus.js +13 -7
  107. package/codeyam-cli/src/utils/editorEntityChangeStatus.js.map +1 -1
  108. package/codeyam-cli/src/utils/editorEntityHelpers.js +144 -0
  109. package/codeyam-cli/src/utils/editorEntityHelpers.js.map +1 -0
  110. package/codeyam-cli/src/utils/editorLoaderHelpers.js +72 -1
  111. package/codeyam-cli/src/utils/editorLoaderHelpers.js.map +1 -1
  112. package/codeyam-cli/src/utils/editorMigration.js +224 -0
  113. package/codeyam-cli/src/utils/editorMigration.js.map +1 -0
  114. package/codeyam-cli/src/utils/editorPreview.js +31 -0
  115. package/codeyam-cli/src/utils/editorPreview.js.map +1 -1
  116. package/codeyam-cli/src/utils/editorRecapture.js +109 -0
  117. package/codeyam-cli/src/utils/editorRecapture.js.map +1 -0
  118. package/codeyam-cli/src/utils/editorScenarioSwitch.js +24 -2
  119. package/codeyam-cli/src/utils/editorScenarioSwitch.js.map +1 -1
  120. package/codeyam-cli/src/utils/editorScenarios.js +458 -0
  121. package/codeyam-cli/src/utils/editorScenarios.js.map +1 -1
  122. package/codeyam-cli/src/utils/editorSeedAdapter.js +253 -4
  123. package/codeyam-cli/src/utils/editorSeedAdapter.js.map +1 -1
  124. package/codeyam-cli/src/utils/editorShouldRevalidate.js +21 -0
  125. package/codeyam-cli/src/utils/editorShouldRevalidate.js.map +1 -0
  126. package/codeyam-cli/src/utils/entityChangeStatus.js +53 -6
  127. package/codeyam-cli/src/utils/entityChangeStatus.js.map +1 -1
  128. package/codeyam-cli/src/utils/entityChangeStatus.server.js +41 -3
  129. package/codeyam-cli/src/utils/entityChangeStatus.server.js.map +1 -1
  130. package/codeyam-cli/src/utils/fileWatcher.js +38 -0
  131. package/codeyam-cli/src/utils/fileWatcher.js.map +1 -1
  132. package/codeyam-cli/src/utils/glossaryAdd.js +74 -0
  133. package/codeyam-cli/src/utils/glossaryAdd.js.map +1 -0
  134. package/codeyam-cli/src/utils/install-skills.js +14 -0
  135. package/codeyam-cli/src/utils/install-skills.js.map +1 -1
  136. package/codeyam-cli/src/utils/parseRegisterArg.js.map +1 -1
  137. package/codeyam-cli/src/utils/progress.js +2 -2
  138. package/codeyam-cli/src/utils/progress.js.map +1 -1
  139. package/codeyam-cli/src/utils/routePatternMatching.js +129 -0
  140. package/codeyam-cli/src/utils/routePatternMatching.js.map +1 -0
  141. package/codeyam-cli/src/utils/scenarioCoverage.js +77 -0
  142. package/codeyam-cli/src/utils/scenarioCoverage.js.map +1 -0
  143. package/codeyam-cli/src/utils/scenariosManifest.js +269 -74
  144. package/codeyam-cli/src/utils/scenariosManifest.js.map +1 -1
  145. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +1 -0
  146. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js.map +1 -1
  147. package/codeyam-cli/src/utils/simulationGateMiddleware.js +8 -1
  148. package/codeyam-cli/src/utils/simulationGateMiddleware.js.map +1 -1
  149. package/codeyam-cli/src/utils/slugUtils.js +25 -0
  150. package/codeyam-cli/src/utils/slugUtils.js.map +1 -0
  151. package/codeyam-cli/src/utils/syncMocksMiddleware.js +2 -2
  152. package/codeyam-cli/src/utils/syncMocksMiddleware.js.map +1 -1
  153. package/codeyam-cli/src/utils/telemetry.js +106 -0
  154. package/codeyam-cli/src/utils/telemetry.js.map +1 -0
  155. package/codeyam-cli/src/utils/telemetryMiddleware.js +22 -0
  156. package/codeyam-cli/src/utils/telemetryMiddleware.js.map +1 -0
  157. package/codeyam-cli/src/webserver/__tests__/buildPtyEnv.test.js +35 -0
  158. package/codeyam-cli/src/webserver/__tests__/buildPtyEnv.test.js.map +1 -0
  159. package/codeyam-cli/src/webserver/__tests__/clientErrors.test.js +80 -0
  160. package/codeyam-cli/src/webserver/__tests__/clientErrors.test.js.map +1 -0
  161. package/codeyam-cli/src/webserver/__tests__/editorProxy.test.js +218 -0
  162. package/codeyam-cli/src/webserver/__tests__/editorProxy.test.js.map +1 -1
  163. package/codeyam-cli/src/webserver/__tests__/idleDetector.test.js +217 -0
  164. package/codeyam-cli/src/webserver/__tests__/idleDetector.test.js.map +1 -0
  165. package/codeyam-cli/src/webserver/app/lib/clientErrors.js +71 -0
  166. package/codeyam-cli/src/webserver/app/lib/clientErrors.js.map +1 -0
  167. package/codeyam-cli/src/webserver/app/lib/git.js +3 -2
  168. package/codeyam-cli/src/webserver/app/lib/git.js.map +1 -1
  169. package/codeyam-cli/src/webserver/app/types/editor.js +8 -0
  170. package/codeyam-cli/src/webserver/app/types/editor.js.map +1 -0
  171. package/codeyam-cli/src/webserver/backgroundServer.js +60 -61
  172. package/codeyam-cli/src/webserver/backgroundServer.js.map +1 -1
  173. package/codeyam-cli/src/webserver/build/client/assets/CopyButton-CLe80MMu.js +1 -0
  174. package/codeyam-cli/src/webserver/build/client/assets/{EntityItem-BcgbViKV.js → EntityItem-Crt_KN_U.js} +3 -3
  175. package/codeyam-cli/src/webserver/build/client/assets/EntityTypeBadge-CQgyEGV-.js +1 -0
  176. package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeIcon-CQIG2qda.js → EntityTypeIcon-CD7lGABo.js} +1 -1
  177. package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-CgTNOhnu.js +1 -0
  178. package/codeyam-cli/src/webserver/build/client/assets/InteractivePreview-CKeQT5Ty.js +25 -0
  179. package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-D3s1MFkb.js +3 -0
  180. package/codeyam-cli/src/webserver/build/client/assets/{LoadingDots-BU_OAEMP.js → LoadingDots-By5zI316.js} +1 -1
  181. package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-ceAyBX-H.js → LogViewer-CM5zg40N.js} +3 -3
  182. package/codeyam-cli/src/webserver/build/client/assets/{ReportIssueModal-BzHcG7SE.js → ReportIssueModal-C2PLkej3.js} +2 -2
  183. package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-DanvyBPb.js +1 -0
  184. package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-0DY_NKil.js → ScenarioViewer-DUMfcNVK.js} +3 -3
  185. package/codeyam-cli/src/webserver/build/client/assets/Spinner-D0LgAaSa.js +34 -0
  186. package/codeyam-cli/src/webserver/build/client/assets/TruncatedFilePath-CK7-NaPZ.js +1 -0
  187. package/codeyam-cli/src/webserver/build/client/assets/ViewportInspectBar-BA_Ry-rs.js +1 -0
  188. package/codeyam-cli/src/webserver/build/client/assets/{_index-DLxKhri3.js → _index-BAWd-Xjf.js} +2 -2
  189. package/codeyam-cli/src/webserver/build/client/assets/{activity.(_tab)-BcY3q6nt.js → activity.(_tab)-BOARiB-g.js} +3 -3
  190. package/codeyam-cli/src/webserver/build/client/assets/{addon-web-links-Duc5hnl7.js → addon-web-links-CHx25PAe.js} +1 -1
  191. package/codeyam-cli/src/webserver/build/client/assets/{agent-transcripts-Bni3iiUj.js → agent-transcripts-Bg3e7q4S.js} +3 -3
  192. package/codeyam-cli/src/webserver/build/client/assets/api.editor-recapture-stale-l0sNRNKZ.js +1 -0
  193. package/codeyam-cli/src/webserver/build/client/assets/api.editor-rename-scenario-l0sNRNKZ.js +1 -0
  194. package/codeyam-cli/src/webserver/build/client/assets/api.editor-save-seed-state-l0sNRNKZ.js +1 -0
  195. package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-coverage-l0sNRNKZ.js +1 -0
  196. package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-prompt-l0sNRNKZ.js +1 -0
  197. package/codeyam-cli/src/webserver/build/client/assets/api.editor-session-l0sNRNKZ.js +1 -0
  198. package/codeyam-cli/src/webserver/build/client/assets/{book-open-BYOypzCa.js → book-open-CL-lMgHh.js} +1 -1
  199. package/codeyam-cli/src/webserver/build/client/assets/{chevron-down-C_Pmso5S.js → chevron-down-GmAjGS9-.js} +1 -1
  200. package/codeyam-cli/src/webserver/build/client/assets/chunk-JZWAC4HX-BAdwhyCx.js +43 -0
  201. package/codeyam-cli/src/webserver/build/client/assets/{circle-check-BVMi9VA5.js → circle-check-DFcQkN5j.js} +1 -1
  202. package/codeyam-cli/src/webserver/build/client/assets/{copy-n2FB0_Sw.js → copy-C6iF61Xs.js} +1 -1
  203. package/codeyam-cli/src/webserver/build/client/assets/{createLucideIcon-CC6AbExI.js → createLucideIcon-4ImjHTVC.js} +1 -1
  204. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-C8y4mmyv.js +1 -0
  205. package/codeyam-cli/src/webserver/build/client/assets/editor._tab-Gbk_i5Js.js +1 -0
  206. package/codeyam-cli/src/webserver/build/client/assets/editor.entity.(_sha)-Bnx7yUP0.js +58 -0
  207. package/codeyam-cli/src/webserver/build/client/assets/editorPreview-oepecPae.js +41 -0
  208. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-BF4oLwaE.js → entity._sha._-Blfy9UlN.js} +2 -2
  209. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.dev-KTQuL0aj.js +6 -0
  210. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-C6eeL24i.js +6 -0
  211. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-DQM8E7L4.js +6 -0
  212. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.edit._scenarioId-BMvVHNXU.js → entity._sha_.edit._scenarioId-CAoXLsQr.js} +2 -2
  213. package/codeyam-cli/src/webserver/build/client/assets/{entry.client-DTvKq3TY.js → entry.client-SuW9syRS.js} +6 -6
  214. package/codeyam-cli/src/webserver/build/client/assets/fileTableUtils-Daa96Fr1.js +1 -0
  215. package/codeyam-cli/src/webserver/build/client/assets/files-D-xGrg29.js +1 -0
  216. package/codeyam-cli/src/webserver/build/client/assets/git-Bq_fbXP5.js +1 -0
  217. package/codeyam-cli/src/webserver/build/client/assets/globals-fAqOD9ex.css +1 -0
  218. package/codeyam-cli/src/webserver/build/client/assets/{index-BcvgDzbZ.js → index-Bp1l4hSv.js} +1 -1
  219. package/codeyam-cli/src/webserver/build/client/assets/{index-10oVnAAH.js → index-CWV9XZiG.js} +1 -1
  220. package/codeyam-cli/src/webserver/build/client/assets/{index-yHOVb4rc.js → index-DE3jI_dv.js} +1 -1
  221. package/codeyam-cli/src/webserver/build/client/assets/jsx-runtime-D_zvdyIk.js +9 -0
  222. package/codeyam-cli/src/webserver/build/client/assets/labs-B_IX45ih.js +1 -0
  223. package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-DaAZ_H2w.js → loader-circle-De-7qQ2u.js} +1 -1
  224. package/codeyam-cli/src/webserver/build/client/assets/manifest-b9d4d267.js +1 -0
  225. package/codeyam-cli/src/webserver/build/client/assets/memory-Cx2xEx7s.js +101 -0
  226. package/codeyam-cli/src/webserver/build/client/assets/{pause-f5-1lKBt.js → pause-CFxEKL1u.js} +1 -1
  227. package/codeyam-cli/src/webserver/build/client/assets/root-DB3O9_9j.js +67 -0
  228. package/codeyam-cli/src/webserver/build/client/assets/{search-Di64LWVb.js → search-BdBb5aqc.js} +1 -1
  229. package/codeyam-cli/src/webserver/build/client/assets/settings-DdE-Untf.js +1 -0
  230. package/codeyam-cli/src/webserver/build/client/assets/simulations-DSCdE99u.js +1 -0
  231. package/codeyam-cli/src/webserver/build/client/assets/{terminal-Br7MOqts.js → terminal-CrplD4b1.js} +1 -1
  232. package/codeyam-cli/src/webserver/build/client/assets/{triangle-alert-BLdiCuG-.js → triangle-alert-DqJ0j69l.js} +1 -1
  233. package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-DhXHbEjP.js +1 -0
  234. package/codeyam-cli/src/webserver/build/client/assets/{useLastLogLine-C14nCb1q.js → useLastLogLine-BNd5hYuW.js} +1 -1
  235. package/codeyam-cli/src/webserver/build/client/assets/useReportContext-Cy5Qg_UR.js +1 -0
  236. package/codeyam-cli/src/webserver/build/client/assets/useToast-5HR2j9ZE.js +1 -0
  237. package/codeyam-cli/src/webserver/build/client/sound-test.html +98 -0
  238. package/codeyam-cli/src/webserver/build/server/assets/analysisRunner-CGwTN3V2.js +13 -0
  239. package/codeyam-cli/src/webserver/build/server/assets/index-D4meMKy3.js +1 -0
  240. package/codeyam-cli/src/webserver/build/server/assets/init-odGJ_c2-.js +10 -0
  241. package/codeyam-cli/src/webserver/build/server/assets/progress-CHTtrxFG.js +1 -0
  242. package/codeyam-cli/src/webserver/build/server/assets/server-build-TmPfF7pT.js +552 -0
  243. package/codeyam-cli/src/webserver/build/server/index.js +1 -1
  244. package/codeyam-cli/src/webserver/build-info.json +5 -5
  245. package/codeyam-cli/src/webserver/editorProxy.js +208 -17
  246. package/codeyam-cli/src/webserver/editorProxy.js.map +1 -1
  247. package/codeyam-cli/src/webserver/idleDetector.js +106 -0
  248. package/codeyam-cli/src/webserver/idleDetector.js.map +1 -0
  249. package/codeyam-cli/src/webserver/mockStateEvents.js +28 -0
  250. package/codeyam-cli/src/webserver/mockStateEvents.js.map +1 -0
  251. package/codeyam-cli/src/webserver/public/sound-test.html +98 -0
  252. package/codeyam-cli/src/webserver/scripts/journalCapture.ts +36 -0
  253. package/codeyam-cli/src/webserver/server.js +87 -4
  254. package/codeyam-cli/src/webserver/server.js.map +1 -1
  255. package/codeyam-cli/src/webserver/terminalServer.js +140 -35
  256. package/codeyam-cli/src/webserver/terminalServer.js.map +1 -1
  257. package/codeyam-cli/templates/chrome-extension-react/README.md +46 -0
  258. package/codeyam-cli/templates/chrome-extension-react/package.json +1 -0
  259. package/codeyam-cli/templates/codeyam-editor-claude.md +84 -5
  260. package/codeyam-cli/templates/codeyam-editor-reference.md +214 -0
  261. package/codeyam-cli/templates/editor-step-hook.py +114 -24
  262. package/codeyam-cli/templates/expo-react-native/README.md +41 -0
  263. package/codeyam-cli/templates/expo-react-native/package.json +1 -0
  264. package/codeyam-cli/templates/nextjs-prisma-sqlite/DATABASE.md +14 -0
  265. package/codeyam-cli/templates/nextjs-prisma-sqlite/README.md +53 -0
  266. package/codeyam-cli/templates/nextjs-prisma-sqlite/package.json +2 -1
  267. package/codeyam-cli/templates/nextjs-prisma-sqlite/seed-adapter.ts +42 -7
  268. package/codeyam-cli/templates/nextjs-prisma-supabase/README.md +52 -0
  269. package/codeyam-cli/templates/nextjs-prisma-supabase/package.json +2 -1
  270. package/codeyam-cli/templates/seed-adapters/supabase.ts +282 -0
  271. package/codeyam-cli/templates/skills/codeyam-dev-mode/SKILL.md +1 -1
  272. package/codeyam-cli/templates/skills/codeyam-editor/SKILL.md +76 -10
  273. package/package.json +2 -1
  274. package/packages/database/src/lib/kysely/tables/editorScenariosTable.js +84 -0
  275. package/packages/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -1
  276. package/packages/database/src/lib/loadEntities.js +0 -6
  277. package/packages/database/src/lib/loadEntities.js.map +1 -1
  278. package/packages/database/src/lib/updateCommitMetadata.js +0 -25
  279. package/packages/database/src/lib/updateCommitMetadata.js.map +1 -1
  280. package/codeyam-cli/src/webserver/build/client/assets/CopyButton-BPXZwM4t.js +0 -1
  281. package/codeyam-cli/src/webserver/build/client/assets/EntityTypeBadge-g3saevPb.js +0 -1
  282. package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-Bu6c6aDe.js +0 -1
  283. package/codeyam-cli/src/webserver/build/client/assets/InteractivePreview-DYFW3lDD.js +0 -25
  284. package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-DLeucoVX.js +0 -3
  285. package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-BED4B6sP.js +0 -1
  286. package/codeyam-cli/src/webserver/build/client/assets/Spinner-Bb5uFQ5V.js +0 -34
  287. package/codeyam-cli/src/webserver/build/client/assets/TruncatedFilePath-C8OKAR5x.js +0 -1
  288. package/codeyam-cli/src/webserver/build/client/assets/ViewportInspectBar-oAf2Kqsf.js +0 -1
  289. package/codeyam-cli/src/webserver/build/client/assets/chunk-JZWAC4HX-C4pqxYJB.js +0 -51
  290. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-Csi0_PMl.js +0 -1
  291. package/codeyam-cli/src/webserver/build/client/assets/editor-DgN1LTTt.js +0 -10
  292. package/codeyam-cli/src/webserver/build/client/assets/editorPreview-BLQMSKZa.js +0 -41
  293. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.dev-C7YX6r3H.js +0 -6
  294. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-CF164ouH.js +0 -6
  295. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-p9hhkjJM.js +0 -6
  296. package/codeyam-cli/src/webserver/build/client/assets/fileTableUtils-cPo8LiG3.js +0 -1
  297. package/codeyam-cli/src/webserver/build/client/assets/files-BZrlFE1F.js +0 -1
  298. package/codeyam-cli/src/webserver/build/client/assets/git-DdZcvjGh.js +0 -1
  299. package/codeyam-cli/src/webserver/build/client/assets/globals-BkWJ_UNc.css +0 -1
  300. package/codeyam-cli/src/webserver/build/client/assets/labs-Zk7ryIM1.js +0 -1
  301. package/codeyam-cli/src/webserver/build/client/assets/manifest-c26eb85b.js +0 -1
  302. package/codeyam-cli/src/webserver/build/client/assets/memory-Bl2rpw8u.js +0 -96
  303. package/codeyam-cli/src/webserver/build/client/assets/root-ClvYBUSA.js +0 -67
  304. package/codeyam-cli/src/webserver/build/client/assets/settings-0OrEMU6J.js +0 -1
  305. package/codeyam-cli/src/webserver/build/client/assets/simulations-DWT-CvLy.js +0 -1
  306. package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-CrAK28Bc.js +0 -1
  307. package/codeyam-cli/src/webserver/build/client/assets/useReportContext-O-jkvSPx.js +0 -1
  308. package/codeyam-cli/src/webserver/build/client/assets/useToast-9FIWuYfK.js +0 -1
  309. package/codeyam-cli/src/webserver/build/server/assets/index-DflIr5SD.js +0 -1
  310. package/codeyam-cli/src/webserver/build/server/assets/server-build-OhKy839M.js +0 -416
@@ -6,6 +6,9 @@
6
6
  */
7
7
  import fs from 'fs';
8
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";
9
12
  /**
10
13
  * Generic Map-based deduplication that keeps the last item for each key.
11
14
  * Items are iterated in order, so later entries overwrite earlier ones.
@@ -25,6 +28,17 @@ export function deduplicateByName(items, keyFn) {
25
28
  export function generateScenarioSlug(name) {
26
29
  return name.replace(/[^a-zA-Z0-9_]+/g, '_');
27
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
+ }
28
42
  /**
29
43
  * Convert an ISO 8601 timestamp (e.g. "2026-02-28T19:00:00.000Z") to
30
44
  * SQLite-compatible format (e.g. "2026-02-28 19:00:00").
@@ -35,6 +49,75 @@ export function generateScenarioSlug(name) {
35
49
  export function convertIsoToSqliteTimestamp(iso) {
36
50
  return iso.replace('T', ' ').replace(/\.\d{3}Z$/, '');
37
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
+ ];
75
+ /**
76
+ * Read user-configured properties from an existing config.json that should be
77
+ * preserved when `codeyam init --force` overwrites the file.
78
+ *
79
+ * Returns only the properties listed in PRESERVED_CONFIG_KEYS.
80
+ * Returns an empty object if the file doesn't exist or can't be parsed.
81
+ */
82
+ export function readPreservedConfigProperties(configPath) {
83
+ try {
84
+ const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
85
+ const preserved = {};
86
+ for (const key of PRESERVED_CONFIG_KEYS) {
87
+ if (config[key] !== undefined) {
88
+ preserved[key] = config[key];
89
+ }
90
+ }
91
+ return preserved;
92
+ }
93
+ catch {
94
+ return {};
95
+ }
96
+ }
97
+ /**
98
+ * Validate that a step transition is allowed.
99
+ *
100
+ * Rules:
101
+ * - Step 1 is always allowed (starts a new feature).
102
+ * - Steps 2–13 require the current state step to be at least (requestedStep - 1),
103
+ * i.e. you can advance one step at a time or re-run the current step, but
104
+ * you cannot skip ahead.
105
+ *
106
+ * Returns null if valid, or an error message string if invalid.
107
+ */
108
+ export function validateStepTransition(requestedStep, currentStep) {
109
+ // Step 1 always allowed — it starts or restarts a feature
110
+ if (requestedStep === 1)
111
+ return null;
112
+ // No state at all — must start from step 1
113
+ if (currentStep === null) {
114
+ return `Cannot jump to step ${requestedStep} — no feature in progress. Run step 1 first.`;
115
+ }
116
+ // Allow re-running the current step or advancing to the next step
117
+ if (requestedStep <= currentStep + 1)
118
+ return null;
119
+ return `Cannot jump from step ${currentStep} to step ${requestedStep}. Complete step ${currentStep + 1} first.`;
120
+ }
38
121
  /**
39
122
  * Resolve which URL to use for Playwright screenshot capture.
40
123
  *
@@ -113,6 +196,31 @@ export function readDefaultScreenSize(codeyamRoot) {
113
196
  }
114
197
  return null;
115
198
  }
199
+ /**
200
+ * Read named screen sizes from .codeyam/config.json.
201
+ * Returns a map of name → { width, height }, or empty object if not configured.
202
+ *
203
+ * Config format:
204
+ * "screenSizes": {
205
+ * "Desktop": { "width": 1440, "height": 900 },
206
+ * "Mobile": { "width": 375, "height": 667 }
207
+ * }
208
+ */
209
+ export function readScreenSizes(codeyamRoot) {
210
+ try {
211
+ const configPath = path.join(codeyamRoot, '.codeyam', 'config.json');
212
+ const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
213
+ if (config.screenSizes &&
214
+ typeof config.screenSizes === 'object' &&
215
+ !Array.isArray(config.screenSizes)) {
216
+ return config.screenSizes;
217
+ }
218
+ }
219
+ catch {
220
+ // Non-fatal
221
+ }
222
+ return {};
223
+ }
116
224
  /**
117
225
  * Resolve the viewport dimensions for a scenario capture.
118
226
  * Priority: explicit body values > project default > hardcoded fallback (1280×720).
@@ -123,4 +231,354 @@ export function resolveScenarioViewport(params) {
123
231
  height: params.bodyHeight || params.projectDefault?.height || 720,
124
232
  };
125
233
  }
234
+ /**
235
+ * Resolve viewport dimensions by reading the project config.
236
+ *
237
+ * Priority chain:
238
+ * 1. Explicit bodyWidth/bodyHeight (highest)
239
+ * 2. Named dimension → lookup in config screenSizes map
240
+ * 3. Project defaultScreenSize from config
241
+ * 4. 1280×720 hardcoded fallback (lowest)
242
+ *
243
+ * Use this in any capture endpoint that needs viewport resolution.
244
+ */
245
+ export function resolveViewportWithProjectDefault(params) {
246
+ // Look up named dimension from screenSizes if provided
247
+ let dimensionSize = null;
248
+ if (params.dimension) {
249
+ const screenSizes = readScreenSizes(params.codeyamRoot);
250
+ const entry = screenSizes[params.dimension];
251
+ if (entry?.width && entry?.height) {
252
+ dimensionSize = { width: entry.width, height: entry.height };
253
+ }
254
+ }
255
+ const projectDefault = dimensionSize || readDefaultScreenSize(params.codeyamRoot);
256
+ return resolveScenarioViewport({
257
+ bodyWidth: params.bodyWidth,
258
+ bodyHeight: params.bodyHeight,
259
+ projectDefault,
260
+ });
261
+ }
262
+ /**
263
+ * Insert or update an editor scenario by name + project.
264
+ *
265
+ * When a scenario with the same name already exists for the project:
266
+ * - Reuses the most recent row's ID (so data files at that path get overwritten naturally)
267
+ * - Updates the row with the new values
268
+ * - Deletes any additional duplicate rows that accumulated from past always-insert behavior
269
+ *
270
+ * When no existing scenario matches: inserts a new row with a fresh UUID.
271
+ */
272
+ export async function upsertEditorScenario(db, params) {
273
+ // Serialize multi-dimension fields for storage
274
+ const dimensionsJson = params.dimensions
275
+ ? JSON.stringify(params.dimensions)
276
+ : null;
277
+ const screenshotPathsJson = params.screenshotPaths
278
+ ? JSON.stringify(params.screenshotPaths)
279
+ : null;
280
+ // Find all existing scenarios with the same name + project
281
+ const existing = await db
282
+ .selectFrom('editor_scenarios')
283
+ .selectAll()
284
+ .where('name', '=', params.name)
285
+ .where('project_id', '=', params.projectId)
286
+ .orderBy('created_at', 'desc')
287
+ .execute();
288
+ if (existing.length > 0) {
289
+ // Reuse the most recent row's ID
290
+ const latest = existing[0];
291
+ const scenarioId = latest.id;
292
+ // Update the existing row with new values
293
+ const updateSet = {
294
+ description: params.description,
295
+ component_name: params.componentName,
296
+ component_path: params.componentPath,
297
+ url: params.url,
298
+ type: params.type,
299
+ viewport_width: params.viewportWidth,
300
+ viewport_height: params.viewportHeight,
301
+ updated_at: new Date()
302
+ .toISOString()
303
+ .replace('T', ' ')
304
+ .replace(/\.\d{3}Z$/, ''),
305
+ };
306
+ if (params.dimensions !== undefined) {
307
+ updateSet.dimensions = dimensionsJson;
308
+ updateSet.screenshot_paths = screenshotPathsJson;
309
+ }
310
+ if (params.pageFilePath !== undefined) {
311
+ updateSet.page_file_path = params.pageFilePath;
312
+ }
313
+ if (params.entitySha !== undefined) {
314
+ updateSet.entity_sha = params.entitySha;
315
+ }
316
+ if (params.displayName !== undefined) {
317
+ updateSet.display_name = params.displayName;
318
+ }
319
+ await db
320
+ .updateTable('editor_scenarios')
321
+ .set(updateSet)
322
+ .where('id', '=', scenarioId)
323
+ .execute();
324
+ // Delete duplicate rows (all except the latest)
325
+ const duplicateIds = existing.slice(1).map((r) => r.id);
326
+ if (duplicateIds.length > 0) {
327
+ await db
328
+ .deleteFrom('editor_scenarios')
329
+ .where('id', 'in', duplicateIds)
330
+ .execute();
331
+ }
332
+ return { scenarioId, isNew: false, cleanedUpIds: duplicateIds };
333
+ }
334
+ // No existing scenario — insert new
335
+ // Use globalThis.crypto (Web Crypto API) to avoid pulling Node's crypto
336
+ // module into the Vite client bundle (this file is also imported client-side
337
+ // for deduplicateByName).
338
+ const scenarioId = globalThis.crypto.randomUUID();
339
+ const insertValues = {
340
+ id: scenarioId,
341
+ project_id: params.projectId,
342
+ name: params.name,
343
+ description: params.description,
344
+ component_name: params.componentName,
345
+ component_path: params.componentPath,
346
+ url: params.url,
347
+ type: params.type,
348
+ viewport_width: params.viewportWidth,
349
+ viewport_height: params.viewportHeight,
350
+ };
351
+ if (params.dimensions !== undefined) {
352
+ insertValues.dimensions = dimensionsJson;
353
+ insertValues.screenshot_paths = screenshotPathsJson;
354
+ }
355
+ if (params.pageFilePath !== undefined) {
356
+ insertValues.page_file_path = params.pageFilePath;
357
+ }
358
+ if (params.entitySha !== undefined) {
359
+ insertValues.entity_sha = params.entitySha;
360
+ }
361
+ if (params.displayName !== undefined) {
362
+ insertValues.display_name = params.displayName;
363
+ }
364
+ await db.insertInto('editor_scenarios').values(insertValues).execute();
365
+ return { scenarioId, isNew: true, cleanedUpIds: [] };
366
+ }
367
+ /**
368
+ * Delete data files (.json, .seed.json) and screenshots for a list of scenario IDs.
369
+ * Used to clean up orphaned files after deduplication.
370
+ */
371
+ export function cleanupScenarioFiles(codeyamRoot, scenarioIds) {
372
+ const scenariosDir = path.join(codeyamRoot, '.codeyam', 'editor-scenarios');
373
+ const screenshotsDir = path.join(scenariosDir, 'screenshots');
374
+ for (const id of scenarioIds) {
375
+ for (const file of [
376
+ `${id}.json`,
377
+ `${id}.seed.json`,
378
+ path.join('screenshots', `${id}.png`),
379
+ ]) {
380
+ try {
381
+ fs.unlinkSync(path.join(scenariosDir, file));
382
+ }
383
+ catch {
384
+ // File doesn't exist, that's fine
385
+ }
386
+ }
387
+ // Also clean up multi-dimension screenshots ({id}--{slug}.png)
388
+ try {
389
+ const files = fs.readdirSync(screenshotsDir);
390
+ for (const file of files) {
391
+ if (file.startsWith(`${id}--`) && file.endsWith('.png')) {
392
+ try {
393
+ fs.unlinkSync(path.join(screenshotsDir, file));
394
+ }
395
+ catch {
396
+ // File doesn't exist, that's fine
397
+ }
398
+ }
399
+ }
400
+ }
401
+ catch {
402
+ // Screenshots directory may not exist
403
+ }
404
+ }
405
+ }
406
+ /**
407
+ * Validate that an app/user scenario's file path has a glossary entry.
408
+ * For component-type scenarios, validation is skipped (they use a different flow).
409
+ *
410
+ * Returns:
411
+ * - { valid: true } if validation passes or is skipped
412
+ * - { valid: true, needsAnalysis: true } if in glossary but entity not yet created
413
+ * - { valid: false, error: "..." } if the file is not in the glossary
414
+ */
415
+ export function validateEntityLinkageForAppScenario(params) {
416
+ const { lookupFilePath, scenarioType, projectRoot } = params;
417
+ // Only validate for application/user scenarios
418
+ if (scenarioType !== 'application' && scenarioType !== 'user') {
419
+ return { valid: true };
420
+ }
421
+ // Nothing to validate if no file path
422
+ if (!lookupFilePath) {
423
+ return { valid: true };
424
+ }
425
+ // Read and parse the glossary
426
+ const glossaryPath = path.join(projectRoot, '.codeyam', 'glossary.json');
427
+ let glossaryEntries = [];
428
+ try {
429
+ const raw = JSON.parse(fs.readFileSync(glossaryPath, 'utf8'));
430
+ glossaryEntries = sanitizeGlossaryEntries(raw);
431
+ }
432
+ catch {
433
+ // Glossary doesn't exist or can't be parsed — file not in glossary
434
+ }
435
+ const inGlossary = glossaryEntries.some((entry) => entry.filePath === lookupFilePath);
436
+ if (!inGlossary) {
437
+ const hint = glossaryEntries.length === 0
438
+ ? ` glossary.json is empty or could not be parsed. It must be a JSON array: [{"name": "...", "filePath": "${lookupFilePath}", ...}]`
439
+ : ` Found ${glossaryEntries.length} entries but none with filePath "${lookupFilePath}".`;
440
+ return {
441
+ valid: false,
442
+ error: `No glossary entry found for '${lookupFilePath}'.${hint} Add this file to .codeyam/glossary.json before registering app scenarios.`,
443
+ };
444
+ }
445
+ // In glossary but entity doesn't exist yet — caller needs to run analyze-imports
446
+ return { valid: true, needsAnalysis: true };
447
+ }
448
+ /**
449
+ * Validate that a scenario's componentName and URL are consistent.
450
+ *
451
+ * Component scenarios must use isolation URLs (/isolated-components/ or /codeyam-isolate/).
452
+ * A componentName paired with a regular page URL (e.g., /library) is a miscategorization —
453
+ * the scenario will be audited as a component but screenshot a full page.
454
+ *
455
+ * Returns { valid: true } when OK, or { valid: false, error } with an actionable message.
456
+ */
457
+ export function validateScenarioCategorization(params) {
458
+ const { componentName, url } = params;
459
+ // Only validate when both componentName and url are set
460
+ if (!componentName || !url) {
461
+ return { valid: true };
462
+ }
463
+ // If the URL is an isolation route, categorization is correct
464
+ if (isIsolationUrl(url)) {
465
+ return { valid: true };
466
+ }
467
+ return {
468
+ valid: false,
469
+ error: `Scenario has componentName "${componentName}" but URL "${url}" is not an isolation route. ` +
470
+ `Component scenarios must use an isolation URL like /isolated-components/${componentName}?s=ScenarioName ` +
471
+ `or /codeyam-isolate/${componentName}?s=ScenarioName. ` +
472
+ `Either change the URL to an isolation route, or remove componentName to register as an application scenario.`,
473
+ };
474
+ }
475
+ /**
476
+ * Count scenarios that have null entity_sha but do have a file path
477
+ * (component_path or page_file_path) — these need entity backfill.
478
+ */
479
+ export async function countScenariosNeedingEntityBackfill(db) {
480
+ const result = await db
481
+ .selectFrom('editor_scenarios')
482
+ .select(db.fn.countAll().as('count'))
483
+ .where('entity_sha', 'is', null)
484
+ .where((eb) => eb.or([
485
+ eb('component_path', 'is not', null),
486
+ eb('page_file_path', 'is not', null),
487
+ ]))
488
+ .executeTakeFirstOrThrow();
489
+ return Number(result.count);
490
+ }
491
+ /**
492
+ * Backfill entity_sha (and display_name) on scenarios that were registered
493
+ * before analyze-imports created the entity records in the DB.
494
+ *
495
+ * Matches scenarios by component_path or page_file_path against the entities
496
+ * array. Uses the same display_name derivation as the register route.
497
+ */
498
+ /**
499
+ * Sync scenario entity_sha values to match the latest entity versions.
500
+ *
501
+ * Called proactively when entity versions change (file watcher) and during
502
+ * registration/audit. Updates scenarios with NULL or stale entity SHAs to
503
+ * point to the latest entity version. Safe because journals preserve
504
+ * screenshots and everything is version-controlled in git.
505
+ *
506
+ * @deprecated Use syncScenarioEntityShas — backfillEntityShaOnScenarios is the legacy name
507
+ */
508
+ export const backfillEntityShaOnScenarios = syncScenarioEntityShas;
509
+ export async function syncScenarioEntityShas(db, entities) {
510
+ // Build lookup maps: name+path for precise component matching,
511
+ // path-only as fallback for page scenarios (no component_name).
512
+ // A single file can export multiple entities (e.g., FullPageLibrary.tsx
513
+ // exports FullPageLibrary, FullPageEmptyState, FullPageArticleCard).
514
+ // For page scenarios, prefer the default export since app-level scenarios
515
+ // represent the file's main component.
516
+ const entityByNameAndPath = new Map();
517
+ const entityByPath = new Map();
518
+ for (const entity of entities) {
519
+ if (entity.filePath) {
520
+ entityByNameAndPath.set(`${entity.name}::${entity.filePath}`, entity);
521
+ const existing = entityByPath.get(entity.filePath);
522
+ // Always prefer the latest entity version (last in array, since callers
523
+ // pass entities in creation order). Only skip overwrite when the existing
524
+ // entry is a default export and the new one isn't — default exports
525
+ // represent the file's main component for page scenario matching.
526
+ if (!existing || !existing.isDefaultExport || entity.isDefaultExport) {
527
+ entityByPath.set(entity.filePath, entity);
528
+ }
529
+ }
530
+ }
531
+ // Query scenarios that need updating: either NULL entity_sha or stale
532
+ // (pointing to an older entity version). Journals preserve screenshots
533
+ // and everything is version-controlled, so keeping scenarios on the
534
+ // latest entity SHA is always correct.
535
+ const rows = await db
536
+ .selectFrom('editor_scenarios')
537
+ .selectAll()
538
+ .where((eb) => eb.or([
539
+ eb('component_path', 'is not', null),
540
+ eb('page_file_path', 'is not', null),
541
+ ]))
542
+ .execute();
543
+ if (rows.length === 0)
544
+ return { updated: 0 };
545
+ let updated = 0;
546
+ for (const row of rows) {
547
+ const r = row;
548
+ const lookupPath = r.component_path || r.page_file_path;
549
+ if (!lookupPath)
550
+ continue;
551
+ // Prefer name+path match for component scenarios (handles multi-entity files).
552
+ // Fall back to path-only for page scenarios or when name doesn't match.
553
+ const entity = (r.component_name &&
554
+ entityByNameAndPath.get(`${r.component_name}::${lookupPath}`)) ||
555
+ entityByPath.get(lookupPath);
556
+ if (!entity)
557
+ continue;
558
+ // Skip if already pointing to the latest SHA
559
+ if (r.entity_sha === entity.sha)
560
+ continue;
561
+ // Derive display_name using same logic as register route
562
+ let displayName = null;
563
+ if (r.component_name) {
564
+ displayName = r.component_name;
565
+ }
566
+ else if (r.page_file_path && r.page_file_path.startsWith('app/')) {
567
+ displayName = routeDisplayName(buildRoutePattern(r.page_file_path));
568
+ }
569
+ else if (r.url) {
570
+ displayName = pageNameFromUrl(r.url);
571
+ }
572
+ await db
573
+ .updateTable('editor_scenarios')
574
+ .set({
575
+ entity_sha: entity.sha,
576
+ ...(displayName ? { display_name: displayName } : {}),
577
+ })
578
+ .where('id', '=', r.id)
579
+ .execute();
580
+ updated++;
581
+ }
582
+ return { updated };
583
+ }
126
584
  //# sourceMappingURL=editorScenarios.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"editorScenarios.js","sourceRoot":"","sources":["../../../../src/utils/editorScenarios.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAU,EACV,KAA0B;IAE1B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAa,CAAC;IACnC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,2BAA2B,CAAC,GAAW;IACrD,OAAO,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AACxD,CAAC;AAED;;;;;;;GAOG;AACH;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,YAAuC,EACvC,WAAsC;IAEtC,IAAI,YAAY;QAAE,OAAO,YAAY,CAAC;IACtC,IAAI,WAAW;QAAE,OAAO,WAAW,CAAC;IACpC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,kBAAkB,CAAC,CAAC;IAClE,IAAI,CAAC;QACH,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,kCAAkC;IACpC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,wBAAwB,CAAC,CAAC;IACzE,IAAI,CAAC;QACH,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,kCAAkC;IACpC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,GAA8B,EAC9B,QAAuB,EACvB,YAA2B;IAE3B,MAAM,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAE1C,IAAI,MAAM,IAAI,QAAQ,EAAE,CAAC;QACvB,OAAO,GAAG,QAAQ,GAAG,GAAG,EAAE,CAAC;IAC7B,CAAC;SAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC1B,OAAO,GAAG,CAAC;IACb,CAAC;SAAM,CAAC;QACN,OAAO,QAAQ,IAAI,YAAY,IAAI,IAAI,CAAC;IAC1C,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,WAAmB;IAEnB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;QAC/D,IAAI,MAAM,CAAC,iBAAiB,EAAE,KAAK,IAAI,MAAM,CAAC,iBAAiB,EAAE,MAAM,EAAE,CAAC;YACxE,OAAO;gBACL,KAAK,EAAE,MAAM,CAAC,iBAAiB,CAAC,KAAK;gBACrC,MAAM,EAAE,MAAM,CAAC,iBAAiB,CAAC,MAAM;aACxC,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,YAAY;IACd,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAIvC;IACC,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,cAAc,EAAE,KAAK,IAAI,IAAI;QAC/D,MAAM,EAAE,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,cAAc,EAAE,MAAM,IAAI,GAAG;KAClE,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"editorScenarios.js","sourceRoot":"","sources":["../../../../src/utils/editorScenarios.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE;;;;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;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,IAAI;SACR,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AAC7B,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;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACnC,GAA+D,EAC/D,eAAuB;IAEvB,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,IAAI,eAAe;QAAE,OAAO,IAAI,CAAC;IACrE,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,IAAI,eAAe;QAAE,OAAO,IAAI,CAAC;IACrE,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,qBAAqB,GAAG;IAC5B,mBAAmB;IACnB,aAAa;IACb,cAAc;IACd,oBAAoB;CACZ,CAAC;AAEX;;;;;;GAMG;AACH,MAAM,UAAU,6BAA6B,CAC3C,UAAkB;IAElB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;QAC/D,MAAM,SAAS,GAA4B,EAAE,CAAC;QAC9C,KAAK,MAAM,GAAG,IAAI,qBAAqB,EAAE,CAAC;YACxC,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC9B,SAAS,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CACpC,aAAqB,EACrB,WAA0B;IAE1B,0DAA0D;IAC1D,IAAI,aAAa,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAErC,2CAA2C;IAC3C,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QACzB,OAAO,uBAAuB,aAAa,8CAA8C,CAAC;IAC5F,CAAC;IAED,kEAAkE;IAClE,IAAI,aAAa,IAAI,WAAW,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAElD,OAAO,yBAAyB,WAAW,YAAY,aAAa,mBAAmB,WAAW,GAAG,CAAC,SAAS,CAAC;AAClH,CAAC;AAED;;;;;;;GAOG;AACH;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,YAAuC,EACvC,WAAsC;IAEtC,IAAI,YAAY;QAAE,OAAO,YAAY,CAAC;IACtC,IAAI,WAAW;QAAE,OAAO,WAAW,CAAC;IACpC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,kBAAkB,CAAC,CAAC;IAClE,IAAI,CAAC;QACH,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,kCAAkC;IACpC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,wBAAwB,CAAC,CAAC;IACzE,IAAI,CAAC;QACH,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,kCAAkC;IACpC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,GAA8B,EAC9B,QAAuB,EACvB,YAA2B;IAE3B,MAAM,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAE1C,IAAI,MAAM,IAAI,QAAQ,EAAE,CAAC;QACvB,OAAO,GAAG,QAAQ,GAAG,GAAG,EAAE,CAAC;IAC7B,CAAC;SAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC1B,OAAO,GAAG,CAAC;IACb,CAAC;SAAM,CAAC;QACN,OAAO,QAAQ,IAAI,YAAY,IAAI,IAAI,CAAC;IAC1C,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,WAAmB;IAEnB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;QAC/D,IAAI,MAAM,CAAC,iBAAiB,EAAE,KAAK,IAAI,MAAM,CAAC,iBAAiB,EAAE,MAAM,EAAE,CAAC;YACxE,OAAO;gBACL,KAAK,EAAE,MAAM,CAAC,iBAAiB,CAAC,KAAK;gBACrC,MAAM,EAAE,MAAM,CAAC,iBAAiB,CAAC,MAAM;aACxC,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,YAAY;IACd,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAC7B,WAAmB;IAEnB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;QAC/D,IACE,MAAM,CAAC,WAAW;YAClB,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ;YACtC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,EAClC,CAAC;YACD,OAAO,MAAM,CAAC,WAAW,CAAC;QAC5B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,YAAY;IACd,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAIvC;IACC,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,cAAc,EAAE,KAAK,IAAI,IAAI;QAC/D,MAAM,EAAE,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,cAAc,EAAE,MAAM,IAAI,GAAG;KAClE,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iCAAiC,CAAC,MAKjD;IACC,uDAAuD;IACvD,IAAI,aAAa,GAA6C,IAAI,CAAC;IACnE,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,MAAM,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,KAAK,EAAE,KAAK,IAAI,KAAK,EAAE,MAAM,EAAE,CAAC;YAClC,aAAa,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,MAAM,cAAc,GAClB,aAAa,IAAI,qBAAqB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC7D,OAAO,uBAAuB,CAAC;QAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,cAAc;KACf,CAAC,CAAC;AACL,CAAC;AAcD;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,EAAe,EACf,MAoBC;IAED,+CAA+C;IAC/C,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU;QACtC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC;QACnC,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,mBAAmB,GAAG,MAAM,CAAC,eAAe;QAChD,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,eAAe,CAAC;QACxC,CAAC,CAAC,IAAI,CAAC;IAET,2DAA2D;IAC3D,MAAM,QAAQ,GAAG,MAAM,EAAE;SACtB,UAAU,CAAC,kBAAkB,CAAC;SAC9B,SAAS,EAAE;SACX,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC;SAC/B,KAAK,CAAC,YAAY,EAAE,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC;SAC1C,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC;SAC7B,OAAO,EAAE,CAAC;IAEb,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,iCAAiC;QACjC,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAQ,CAAC;QAClC,MAAM,UAAU,GAAW,MAAM,CAAC,EAAE,CAAC;QAErC,0CAA0C;QAC1C,MAAM,SAAS,GAAwB;YACrC,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,cAAc,EAAE,MAAM,CAAC,aAAa;YACpC,cAAc,EAAE,MAAM,CAAC,aAAa;YACpC,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,cAAc,EAAE,MAAM,CAAC,aAAa;YACpC,eAAe,EAAE,MAAM,CAAC,cAAc;YACtC,UAAU,EAAE,IAAI,IAAI,EAAE;iBACnB,WAAW,EAAE;iBACb,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;iBACjB,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;SAC5B,CAAC;QACF,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACpC,SAAS,CAAC,UAAU,GAAG,cAAc,CAAC;YACtC,SAAS,CAAC,gBAAgB,GAAG,mBAAmB,CAAC;QACnD,CAAC;QACD,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YACtC,SAAS,CAAC,cAAc,GAAG,MAAM,CAAC,YAAY,CAAC;QACjD,CAAC;QACD,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACnC,SAAS,CAAC,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC;QAC1C,CAAC;QACD,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACrC,SAAS,CAAC,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC;QAC9C,CAAC;QACD,MAAM,EAAE;aACL,WAAW,CAAC,kBAAkB,CAAC;aAC/B,GAAG,CAAC,SAAS,CAAC;aACd,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,CAAC;aAC5B,OAAO,EAAE,CAAC;QAEb,gDAAgD;QAChD,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAY,CAAC,CAAC;QACvE,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,EAAE;iBACL,UAAU,CAAC,kBAAkB,CAAC;iBAC9B,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC;iBAC/B,OAAO,EAAE,CAAC;QACf,CAAC;QAED,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC;IAClE,CAAC;IAED,oCAAoC;IACpC,wEAAwE;IACxE,6EAA6E;IAC7E,0BAA0B;IAC1B,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;IAClD,MAAM,YAAY,GAAwB;QACxC,EAAE,EAAE,UAAU;QACd,UAAU,EAAE,MAAM,CAAC,SAAS;QAC5B,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,cAAc,EAAE,MAAM,CAAC,aAAa;QACpC,cAAc,EAAE,MAAM,CAAC,aAAa;QACpC,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,cAAc,EAAE,MAAM,CAAC,aAAa;QACpC,eAAe,EAAE,MAAM,CAAC,cAAc;KACvC,CAAC;IACF,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACpC,YAAY,CAAC,UAAU,GAAG,cAAc,CAAC;QACzC,YAAY,CAAC,gBAAgB,GAAG,mBAAmB,CAAC;IACtD,CAAC;IACD,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACtC,YAAY,CAAC,cAAc,GAAG,MAAM,CAAC,YAAY,CAAC;IACpD,CAAC;IACD,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACnC,YAAY,CAAC,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC;IAC7C,CAAC;IACD,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACrC,YAAY,CAAC,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC;IACjD,CAAC;IACD,MAAM,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,CAAC;IAEvE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;AACvD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,WAAmB,EACnB,WAAqB;IAErB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,kBAAkB,CAAC,CAAC;IAC5E,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;IAC9D,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;QAC7B,KAAK,MAAM,IAAI,IAAI;YACjB,GAAG,EAAE,OAAO;YACZ,GAAG,EAAE,YAAY;YACjB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE,MAAM,CAAC;SACtC,EAAE,CAAC;YACF,IAAI,CAAC;gBACH,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;YAC/C,CAAC;YAAC,MAAM,CAAC;gBACP,kCAAkC;YACpC,CAAC;QACH,CAAC;QACD,+DAA+D;QAC/D,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;YAC7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBACxD,IAAI,CAAC;wBACH,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC;oBACjD,CAAC;oBAAC,MAAM,CAAC;wBACP,kCAAkC;oBACpC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,sCAAsC;QACxC,CAAC;IACH,CAAC;AACH,CAAC;AAQD;;;;;;;;GAQG;AACH,MAAM,UAAU,mCAAmC,CAAC,MAInD;IACC,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IAE7D,+CAA+C;IAC/C,IAAI,YAAY,KAAK,aAAa,IAAI,YAAY,KAAK,MAAM,EAAE,CAAC;QAC9D,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,sCAAsC;IACtC,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,8BAA8B;IAC9B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;IACzE,IAAI,eAAe,GAAiC,EAAE,CAAC;IACvD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;QAC9D,eAAe,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,mEAAmE;IACrE,CAAC;IAED,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CACrC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,cAAc,CAC7C,CAAC;IAEF,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,GACR,eAAe,CAAC,MAAM,KAAK,CAAC;YAC1B,CAAC,CAAC,0GAA0G,cAAc,UAAU;YACpI,CAAC,CAAC,UAAU,eAAe,CAAC,MAAM,oCAAoC,cAAc,IAAI,CAAC;QAC7F,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,gCAAgC,cAAc,KAAK,IAAI,4EAA4E;SAC3I,CAAC;IACJ,CAAC;IAED,iFAAiF;IACjF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AAC9C,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,8BAA8B,CAAC,MAI9C;IACC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC;IAEtC,wDAAwD;IACxD,IAAI,CAAC,aAAa,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,8DAA8D;IAC9D,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,OAAO;QACL,KAAK,EAAE,KAAK;QACZ,KAAK,EACH,+BAA+B,aAAa,cAAc,GAAG,+BAA+B;YAC5F,2EAA2E,aAAa,kBAAkB;YAC1G,uBAAuB,aAAa,mBAAmB;YACvD,8GAA8G;KACjH,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mCAAmC,CACvD,EAAe;IAEf,MAAM,MAAM,GAAG,MAAM,EAAE;SACpB,UAAU,CAAC,kBAAkB,CAAC;SAC9B,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;SACpC,KAAK,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC;SAC/B,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,CACZ,EAAE,CAAC,EAAE,CAAC;QACJ,EAAE,CAAC,gBAAgB,EAAE,QAAQ,EAAE,IAAI,CAAC;QACpC,EAAE,CAAC,gBAAgB,EAAE,QAAQ,EAAE,IAAI,CAAC;KACrC,CAAC,CACH;SACA,uBAAuB,EAAE,CAAC;IAE7B,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED;;;;;;GAMG;AACH;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,sBAAsB,CAAC;AAEnE,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,EAAe,EACf,QAKE;IAEF,+DAA+D;IAC/D,gEAAgE;IAChE,wEAAwE;IACxE,qEAAqE;IACrE,0EAA0E;IAC1E,uCAAuC;IACvC,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAgC,CAAC;IACpE,MAAM,YAAY,GAAG,IAAI,GAAG,EAAgC,CAAC;IAC7D,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,mBAAmB,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,CAAC;YACtE,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACnD,wEAAwE;YACxE,0EAA0E;YAC1E,oEAAoE;YACpE,kEAAkE;YAClE,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,eAAe,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;gBACrE,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;IACH,CAAC;IAED,sEAAsE;IACtE,uEAAuE;IACvE,oEAAoE;IACpE,uCAAuC;IACvC,MAAM,IAAI,GAAG,MAAM,EAAE;SAClB,UAAU,CAAC,kBAAkB,CAAC;SAC9B,SAAS,EAAE;SACX,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,CACZ,EAAE,CAAC,EAAE,CAAC;QACJ,EAAE,CAAC,gBAAgB,EAAE,QAAQ,EAAE,IAAI,CAAC;QACpC,EAAE,CAAC,gBAAgB,EAAE,QAAQ,EAAE,IAAI,CAAC;KACrC,CAAC,CACH;SACA,OAAO,EAAE,CAAC;IAEb,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IAE7C,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,GAAU,CAAC;QACrB,MAAM,UAAU,GAAkB,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,cAAc,CAAC;QACvE,IAAI,CAAC,UAAU;YAAE,SAAS;QAE1B,+EAA+E;QAC/E,wEAAwE;QACxE,MAAM,MAAM,GACV,CAAC,CAAC,CAAC,cAAc;YACf,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,cAAc,KAAK,UAAU,EAAE,CAAC,CAAC;YAChE,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC/B,IAAI,CAAC,MAAM;YAAE,SAAS;QAEtB,6CAA6C;QAC7C,IAAI,CAAC,CAAC,UAAU,KAAK,MAAM,CAAC,GAAG;YAAE,SAAS;QAE1C,yDAAyD;QACzD,IAAI,WAAW,GAAkB,IAAI,CAAC;QACtC,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;YACrB,WAAW,GAAG,CAAC,CAAC,cAAc,CAAC;QACjC,CAAC;aAAM,IAAI,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACnE,WAAW,GAAG,gBAAgB,CAAC,iBAAiB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;QACtE,CAAC;aAAM,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;YACjB,WAAW,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACvC,CAAC;QAED,MAAM,EAAE;aACL,WAAW,CAAC,kBAAkB,CAAC;aAC/B,GAAG,CAAC;YACH,UAAU,EAAE,MAAM,CAAC,GAAG;YACtB,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtD,CAAC;aACD,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;aACtB,OAAO,EAAE,CAAC;QAEb,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,CAAC;AACrB,CAAC"}