@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
@@ -26,7 +26,7 @@ describe('computeEntityChangeStatusForEditor', () => {
26
26
  beforeEach(() => {
27
27
  jest.clearAllMocks();
28
28
  mockDetectFirstFeature.mockReturnValue(false);
29
- mockScanPageFilePaths.mockReturnValue({});
29
+ mockScanPageFilePaths.mockReturnValue({ map: {}, allFiles: [] });
30
30
  mockGetGitStatus.mockReturnValue([]);
31
31
  mockInitEnv.mockResolvedValue(undefined);
32
32
  mockLoadEntities.mockResolvedValue([]);
@@ -74,8 +74,11 @@ describe('computeEntityChangeStatusForEditor', () => {
74
74
  });
75
75
  it('should include page entity names from scanned pages', async () => {
76
76
  mockScanPageFilePaths.mockReturnValue({
77
- Home: 'app/page.tsx',
78
- Drinks: 'app/drinks/page.tsx',
77
+ map: {
78
+ Home: 'app/page.tsx',
79
+ Drinks: 'app/drinks/page.tsx',
80
+ },
81
+ allFiles: ['app/page.tsx', 'app/drinks/page.tsx'],
79
82
  });
80
83
  mockGetGitStatus.mockReturnValue([
81
84
  { path: 'app/page.tsx', status: 'modified' },
@@ -117,5 +120,75 @@ describe('computeEntityChangeStatusForEditor', () => {
117
120
  formatDate: { status: 'edited' },
118
121
  });
119
122
  });
123
+ describe('pre-computed parameter deduplication', () => {
124
+ it('should use pre-computed scanPageFilePaths result instead of calling it', async () => {
125
+ const precomputed = {
126
+ map: { Home: 'app/page.tsx' },
127
+ allFiles: ['app/page.tsx'],
128
+ };
129
+ mockGetGitStatus.mockReturnValue([
130
+ { path: 'app/page.tsx', status: 'modified' },
131
+ ]);
132
+ mockLoadEntities.mockResolvedValue([]);
133
+ const result = await computeEntityChangeStatusForEditor({
134
+ projectRoot: '/test',
135
+ scenarioInputs: [{ url: '/' }],
136
+ precomputedPageFilePaths: precomputed,
137
+ });
138
+ expect(mockScanPageFilePaths).not.toHaveBeenCalled();
139
+ expect(result.pageEntityNames).toContain('Home');
140
+ expect(result.entityChangeStatus['Home']).toEqual({ status: 'edited' });
141
+ });
142
+ it('should use pre-computed gitFiles instead of calling getGitStatusForProject', async () => {
143
+ const precomputedGitFiles = [{ path: 'src/Card.tsx', status: 'modified' }];
144
+ const result = await computeEntityChangeStatusForEditor({
145
+ projectRoot: '/test',
146
+ scenarioInputs: [
147
+ { componentName: 'Card', componentPath: 'src/Card.tsx' },
148
+ ],
149
+ precomputedGitFiles,
150
+ });
151
+ expect(mockGetGitStatus).not.toHaveBeenCalled();
152
+ expect(result.entityChangeStatus).toEqual({
153
+ Card: { status: 'edited' },
154
+ });
155
+ });
156
+ it('should use pre-computed entities instead of calling initializeEnvironment + loadEntities', async () => {
157
+ const precomputedEntities = [
158
+ {
159
+ name: 'Button',
160
+ filePath: 'src/Button.tsx',
161
+ importedExports: [{ name: 'Icon', filePath: 'src/Icon.tsx' }],
162
+ },
163
+ ];
164
+ mockGetGitStatus.mockReturnValue([
165
+ { path: 'src/Icon.tsx', status: 'modified' },
166
+ ]);
167
+ const result = await computeEntityChangeStatusForEditor({
168
+ projectRoot: '/test',
169
+ scenarioInputs: [
170
+ { componentName: 'Button', componentPath: 'src/Button.tsx' },
171
+ ],
172
+ precomputedEntities,
173
+ });
174
+ expect(mockInitEnv).not.toHaveBeenCalled();
175
+ expect(mockLoadEntities).not.toHaveBeenCalled();
176
+ });
177
+ it('should fall back to computing values when pre-computed params not provided', async () => {
178
+ mockScanPageFilePaths.mockReturnValue({ map: {}, allFiles: [] });
179
+ mockGetGitStatus.mockReturnValue([
180
+ { path: 'src/X.tsx', status: 'added' },
181
+ ]);
182
+ mockLoadEntities.mockResolvedValue([]);
183
+ await computeEntityChangeStatusForEditor({
184
+ projectRoot: '/test',
185
+ scenarioInputs: [{ componentName: 'X', componentPath: 'src/X.tsx' }],
186
+ });
187
+ expect(mockScanPageFilePaths).toHaveBeenCalled();
188
+ expect(mockGetGitStatus).toHaveBeenCalled();
189
+ expect(mockInitEnv).toHaveBeenCalled();
190
+ expect(mockLoadEntities).toHaveBeenCalled();
191
+ });
192
+ });
120
193
  });
121
194
  //# sourceMappingURL=editorEntityChangeStatus.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"editorEntityChangeStatus.test.js","sourceRoot":"","sources":["../../../../../src/utils/__tests__/editorEntityChangeStatus.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"editorEntityChangeStatus.test.js","sourceRoot":"","sources":["../../../../../src/utils/__tests__/editorEntityChangeStatus.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,381 @@
1
+ import { groupScenarios, buildEntityShaMap, isEntityComplete, findBrokenEntities, resolveClientFocusedEntity, buildEntityNamesFromImportGraph, } from "../editorEntityHelpers.js";
2
+ function makeScenario(overrides) {
3
+ return {
4
+ id: overrides.id || `id-${overrides.name}`,
5
+ name: overrides.name,
6
+ description: '',
7
+ componentName: null,
8
+ componentPath: null,
9
+ screenshotPath: null,
10
+ url: null,
11
+ type: null,
12
+ viewportWidth: null,
13
+ viewportHeight: null,
14
+ dimensions: null,
15
+ screenshotPaths: null,
16
+ pageFilePath: null,
17
+ entitySha: null,
18
+ displayName: null,
19
+ updatedAt: null,
20
+ ...overrides,
21
+ };
22
+ }
23
+ describe('groupScenarios', () => {
24
+ it('should group component scenarios by componentName', () => {
25
+ const scenarios = [
26
+ makeScenario({ name: 'NavBar - Active', componentName: 'NavBar' }),
27
+ makeScenario({ name: 'NavBar - Idle', componentName: 'NavBar' }),
28
+ makeScenario({ name: 'Button - Default', componentName: 'Button' }),
29
+ ];
30
+ const { pageGroups, componentGroups } = groupScenarios(scenarios);
31
+ expect(pageGroups.size).toBe(0);
32
+ expect(componentGroups.get('NavBar')?.length).toBe(2);
33
+ expect(componentGroups.get('Button')?.length).toBe(1);
34
+ });
35
+ it('should group page scenarios by displayName from DB', () => {
36
+ const scenarios = [
37
+ makeScenario({
38
+ name: 'Home - Default',
39
+ url: '/',
40
+ displayName: 'Home',
41
+ }),
42
+ makeScenario({
43
+ name: 'Home - Full',
44
+ url: '/',
45
+ displayName: 'Home',
46
+ }),
47
+ ];
48
+ const { pageGroups } = groupScenarios(scenarios);
49
+ expect(pageGroups.get('Home')?.length).toBe(2);
50
+ });
51
+ it('should fall back to pageNameFromUrl when displayName is null', () => {
52
+ const scenarios = [makeScenario({ name: 'Home - Default', url: '/' })];
53
+ const { pageGroups } = groupScenarios(scenarios);
54
+ expect(pageGroups.has('Home')).toBe(true);
55
+ });
56
+ it('should use routeDisplayName for Next.js pageFilePath', () => {
57
+ const scenarios = [
58
+ makeScenario({
59
+ name: 'About',
60
+ url: '/about',
61
+ pageFilePath: 'app/about/page.tsx',
62
+ }),
63
+ ];
64
+ const { pageGroups } = groupScenarios(scenarios);
65
+ expect(pageGroups.has('About')).toBe(true);
66
+ });
67
+ it('should not use pageFilePath for non-app/ files', () => {
68
+ const scenarios = [
69
+ makeScenario({
70
+ name: 'Home - Default',
71
+ url: '/',
72
+ pageFilePath: 'src/App.tsx',
73
+ }),
74
+ ];
75
+ const { pageGroups } = groupScenarios(scenarios);
76
+ // Should use pageNameFromUrl('/') = 'Home', not buildRoutePattern('src/App.tsx')
77
+ expect(pageGroups.has('Home')).toBe(true);
78
+ });
79
+ it('should group non-app/ pages by displayName, not collapse to Home', () => {
80
+ // Margo bug: Chrome extension has popup at "/" (src/popup/App.tsx) and
81
+ // full-page library at "/library.html" (src/library/FullPageLibrary.tsx).
82
+ // Without displayName, buildRoutePattern collapses both non-app/ paths to "/",
83
+ // so both end up under "Home". With displayName they should be separate groups.
84
+ const scenarios = [
85
+ makeScenario({
86
+ name: 'First Launch',
87
+ url: '/',
88
+ pageFilePath: 'src/popup/App.tsx',
89
+ displayName: 'Home',
90
+ }),
91
+ makeScenario({
92
+ name: 'Full Page Library',
93
+ url: '/library.html',
94
+ pageFilePath: 'src/library/FullPageLibrary.tsx',
95
+ displayName: 'Library',
96
+ }),
97
+ ];
98
+ const { pageGroups } = groupScenarios(scenarios);
99
+ expect(pageGroups.has('Home')).toBe(true);
100
+ expect(pageGroups.has('Library')).toBe(true);
101
+ expect(pageGroups.get('Home')?.length).toBe(1);
102
+ expect(pageGroups.get('Library')?.length).toBe(1);
103
+ });
104
+ it('should fall back to pageNameFromUrl for non-app/ files without displayName', () => {
105
+ // When displayName is not set, "/library.html" should still produce "Library"
106
+ // via pageNameFromUrl, not "Home" via buildRoutePattern
107
+ const scenarios = [
108
+ makeScenario({
109
+ name: 'Full Page Library',
110
+ url: '/library.html',
111
+ pageFilePath: 'src/library/FullPageLibrary.tsx',
112
+ }),
113
+ ];
114
+ const { pageGroups } = groupScenarios(scenarios);
115
+ expect(pageGroups.has('Library')).toBe(true);
116
+ expect(pageGroups.has('Home')).toBe(false);
117
+ });
118
+ it('should sort component groups alphabetically', () => {
119
+ const scenarios = [
120
+ makeScenario({ name: 'Z - Default', componentName: 'Zebra' }),
121
+ makeScenario({ name: 'A - Default', componentName: 'Apple' }),
122
+ ];
123
+ const { componentGroups } = groupScenarios(scenarios);
124
+ const keys = [...componentGroups.keys()];
125
+ expect(keys).toEqual(['Apple', 'Zebra']);
126
+ });
127
+ });
128
+ describe('buildEntityShaMap', () => {
129
+ it('should map group names to entity SHAs from scenarios', () => {
130
+ const pageGroups = new Map([
131
+ [
132
+ 'Home',
133
+ [makeScenario({ name: 'Home - Default', entitySha: 'sha-home' })],
134
+ ],
135
+ ]);
136
+ const componentGroups = new Map([
137
+ [
138
+ 'NavBar',
139
+ [makeScenario({ name: 'NavBar - Default', entitySha: 'sha-nav' })],
140
+ ],
141
+ ]);
142
+ const map = buildEntityShaMap(pageGroups, componentGroups);
143
+ expect(map.get('Home')).toBe('sha-home');
144
+ expect(map.get('NavBar')).toBe('sha-nav');
145
+ });
146
+ it('should skip groups where no scenario has entitySha', () => {
147
+ const pageGroups = new Map([
148
+ ['Home', [makeScenario({ name: 'Home - Default' })]],
149
+ ]);
150
+ const map = buildEntityShaMap(pageGroups, new Map());
151
+ expect(map.has('Home')).toBe(false);
152
+ });
153
+ });
154
+ describe('isEntityComplete', () => {
155
+ const allEntities = [
156
+ {
157
+ sha: 'sha-a',
158
+ name: 'App',
159
+ entityType: 'visual',
160
+ filePath: 'src/App.tsx',
161
+ },
162
+ {
163
+ sha: 'sha-b',
164
+ name: 'Lib',
165
+ entityType: 'visual',
166
+ filePath: 'src/Lib.tsx',
167
+ },
168
+ ];
169
+ it('should return true if SHA is in analyzedShas', () => {
170
+ const analyzedShas = new Set(['sha-a']);
171
+ const namesWithImports = new Set();
172
+ expect(isEntityComplete('sha-a', analyzedShas, allEntities, namesWithImports)).toBe(true);
173
+ });
174
+ it('should return true if entity name has imports', () => {
175
+ const analyzedShas = new Set();
176
+ const namesWithImports = new Set(['App']);
177
+ expect(isEntityComplete('sha-a', analyzedShas, allEntities, namesWithImports)).toBe(true);
178
+ });
179
+ it('should return false if entity has no analysis and no imports', () => {
180
+ const analyzedShas = new Set();
181
+ const namesWithImports = new Set();
182
+ expect(isEntityComplete('sha-b', analyzedShas, allEntities, namesWithImports)).toBe(false);
183
+ });
184
+ it('should return false for unknown SHA', () => {
185
+ expect(isEntityComplete('unknown', new Set(), allEntities, new Set())).toBe(false);
186
+ });
187
+ });
188
+ describe('buildEntityNamesFromImportGraph', () => {
189
+ it('should include entities that import others (keys)', () => {
190
+ const entityImports = {
191
+ Dashboard: ['Button', 'Header'],
192
+ };
193
+ const names = buildEntityNamesFromImportGraph(entityImports);
194
+ expect(names.has('Dashboard')).toBe(true);
195
+ });
196
+ it('should include entities that ARE imported (values)', () => {
197
+ // Bug repro: ExternalLinkIcon is imported by OpenLibraryButton but
198
+ // doesn't import anything itself. Using only keys misses it entirely.
199
+ const entityImports = {
200
+ OpenLibraryButton: ['Button', 'ExternalLinkIcon'],
201
+ EmptyLibrary: ['PopupShell', 'OpenLibraryButton'],
202
+ };
203
+ const names = buildEntityNamesFromImportGraph(entityImports);
204
+ expect(names.has('ExternalLinkIcon')).toBe(true);
205
+ expect(names.has('Button')).toBe(true);
206
+ expect(names.has('PopupShell')).toBe(true);
207
+ });
208
+ it('should return empty set for empty import graph', () => {
209
+ const names = buildEntityNamesFromImportGraph({});
210
+ expect(names.size).toBe(0);
211
+ });
212
+ it('leaf entity without analyses should be complete via import graph', () => {
213
+ // End-to-end: a leaf entity (no analyses, not an importer) should
214
+ // be recognized as complete if it appears in the import graph as
215
+ // a dependency of another entity.
216
+ const entities = [
217
+ {
218
+ sha: 'sha-lib',
219
+ name: 'EmptyLibrary',
220
+ entityType: 'visual',
221
+ filePath: 'src/EmptyLibrary.tsx',
222
+ },
223
+ {
224
+ sha: 'sha-icon',
225
+ name: 'ExternalLinkIcon',
226
+ entityType: 'visual',
227
+ filePath: 'src/ExternalLinkIcon.tsx',
228
+ },
229
+ ];
230
+ const entityImports = {
231
+ EmptyLibrary: ['OpenLibraryButton'],
232
+ OpenLibraryButton: ['Button', 'ExternalLinkIcon'],
233
+ };
234
+ const names = buildEntityNamesFromImportGraph(entityImports);
235
+ // ExternalLinkIcon has no analyses
236
+ const analyzedShas = new Set(['sha-lib']); // only EmptyLibrary analyzed
237
+ // ExternalLinkIcon should be complete because it's in the import graph
238
+ expect(isEntityComplete('sha-icon', analyzedShas, entities, names)).toBe(true);
239
+ });
240
+ });
241
+ describe('findBrokenEntities', () => {
242
+ it('should flag groups without entitySha as missing', () => {
243
+ const pageGroups = new Map([
244
+ ['Home', [makeScenario({ name: 'Home - Default' })]],
245
+ ]);
246
+ const entityShaMap = new Map();
247
+ const broken = findBrokenEntities(pageGroups, new Map(), entityShaMap, () => true);
248
+ expect(broken).toEqual([
249
+ { name: 'Home', scenarios: expect.any(Array), reason: 'missing' },
250
+ ]);
251
+ });
252
+ it('should flag groups with SHA but incomplete entity as incomplete', () => {
253
+ const scenarios = [
254
+ makeScenario({ name: 'Home - Default', entitySha: 'sha-a' }),
255
+ ];
256
+ const pageGroups = new Map([['Home', scenarios]]);
257
+ const entityShaMap = new Map([['Home', 'sha-a']]);
258
+ const broken = findBrokenEntities(pageGroups, new Map(), entityShaMap, () => false);
259
+ expect(broken).toEqual([{ name: 'Home', scenarios, reason: 'incomplete' }]);
260
+ });
261
+ it('should return empty for complete entities', () => {
262
+ const scenarios = [
263
+ makeScenario({ name: 'Home - Default', entitySha: 'sha-a' }),
264
+ ];
265
+ const pageGroups = new Map([['Home', scenarios]]);
266
+ const entityShaMap = new Map([['Home', 'sha-a']]);
267
+ const broken = findBrokenEntities(pageGroups, new Map(), entityShaMap, () => true);
268
+ expect(broken).toEqual([]);
269
+ });
270
+ });
271
+ describe('resolveClientFocusedEntity', () => {
272
+ const allEntities = [
273
+ {
274
+ sha: 'sha-app',
275
+ name: 'App',
276
+ entityType: 'visual',
277
+ filePath: 'src/App.tsx',
278
+ },
279
+ {
280
+ sha: 'sha-lib',
281
+ name: 'LibraryPage',
282
+ entityType: 'visual',
283
+ filePath: 'src/library/LibraryPage.tsx',
284
+ },
285
+ ];
286
+ it('should return null for null SHA', () => {
287
+ expect(resolveClientFocusedEntity(null, allEntities, [])).toBeNull();
288
+ });
289
+ it('should resolve entity by SHA', () => {
290
+ const result = resolveClientFocusedEntity('sha-app', allEntities, []);
291
+ expect(result?.name).toBe('App');
292
+ expect(result?.filePath).toBe('src/App.tsx');
293
+ expect(result?.sha).toBe('sha-app');
294
+ });
295
+ it('should use entity name as displayName, not scenario displayName', () => {
296
+ const scenarios = [
297
+ makeScenario({
298
+ name: 'Home - Default',
299
+ entitySha: 'sha-app',
300
+ displayName: 'Home',
301
+ }),
302
+ ];
303
+ const result = resolveClientFocusedEntity('sha-app', allEntities, scenarios);
304
+ // Entity page should show the entity's own name, not the scenario's display name
305
+ expect(result?.displayName).toBe('App');
306
+ });
307
+ it('should use entity name as displayName when no scenarios exist', () => {
308
+ const result = resolveClientFocusedEntity('sha-lib', allEntities, []);
309
+ expect(result?.displayName).toBe('LibraryPage');
310
+ });
311
+ it('should return null for unknown SHA', () => {
312
+ expect(resolveClientFocusedEntity('unknown', allEntities, [])).toBeNull();
313
+ });
314
+ });
315
+ // ── Stale entity SHA detection ────────────────────────────────────────
316
+ describe('findBrokenEntities — stale entity SHA', () => {
317
+ it('should detect entity as broken when scenario points to old SHA not in analyzedShas', () => {
318
+ // Scenario: Library page was edited → file watcher created new entity version
319
+ // (sha-library-v2). Scenario still points to old version (sha-library-v1).
320
+ // analyzedEntities only contains sha-library-v2 (latest via getAllEntities).
321
+ // The old sha-library-v1 has analyses in the DB but isn't in the UI's
322
+ // analyzedShas set → isEntityComplete returns false → "missing data".
323
+ const scenario = makeScenario({
324
+ name: 'Library - Rich Data',
325
+ pageFilePath: 'app/library/page.tsx',
326
+ url: '/library',
327
+ displayName: 'Library',
328
+ entitySha: 'sha-library-v1', // OLD version
329
+ });
330
+ const { pageGroups, componentGroups } = groupScenarios([scenario]);
331
+ const entityShaMap = buildEntityShaMap(pageGroups, componentGroups);
332
+ // analyzedShas only has the latest version
333
+ const analyzedShas = new Set(['sha-library-v2']);
334
+ // allEntities has the latest version
335
+ const allEntities = [
336
+ {
337
+ sha: 'sha-library-v2',
338
+ name: 'LibraryPage',
339
+ entityType: 'visual',
340
+ filePath: 'app/library/page.tsx',
341
+ },
342
+ ];
343
+ // Import graph has the entity name
344
+ const entityNamesWithImports = buildEntityNamesFromImportGraph({
345
+ LibraryPage: ['ArticleTable', 'LibrarySidebar'],
346
+ });
347
+ const isComplete = (sha) => isEntityComplete(sha, analyzedShas, allEntities, entityNamesWithImports);
348
+ const broken = findBrokenEntities(pageGroups, componentGroups, entityShaMap, isComplete);
349
+ // The old SHA isn't in analyzedShas, and there's no allEntities entry
350
+ // for sha-library-v1, so isEntityComplete can't resolve the name →
351
+ // falls through → entity is "incomplete"
352
+ expect(broken.length).toBe(1);
353
+ expect(broken[0].name).toBe('Library');
354
+ expect(broken[0].reason).toBe('incomplete');
355
+ });
356
+ it('should NOT detect entity as broken when scenario SHA matches latest version', () => {
357
+ const scenario = makeScenario({
358
+ name: 'Library - Rich Data',
359
+ pageFilePath: 'app/library/page.tsx',
360
+ url: '/library',
361
+ displayName: 'Library',
362
+ entitySha: 'sha-library-v2', // CURRENT version
363
+ });
364
+ const { pageGroups, componentGroups } = groupScenarios([scenario]);
365
+ const entityShaMap = buildEntityShaMap(pageGroups, componentGroups);
366
+ const analyzedShas = new Set(['sha-library-v2']);
367
+ const allEntities = [
368
+ {
369
+ sha: 'sha-library-v2',
370
+ name: 'LibraryPage',
371
+ entityType: 'visual',
372
+ filePath: 'app/library/page.tsx',
373
+ },
374
+ ];
375
+ const entityNamesWithImports = new Set();
376
+ const isComplete = (sha) => isEntityComplete(sha, analyzedShas, allEntities, entityNamesWithImports);
377
+ const broken = findBrokenEntities(pageGroups, componentGroups, entityShaMap, isComplete);
378
+ expect(broken.length).toBe(0);
379
+ });
380
+ });
381
+ //# sourceMappingURL=editorEntityHelpers.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editorEntityHelpers.test.js","sourceRoot":"","sources":["../../../../../src/utils/__tests__/editorEntityHelpers.test.ts"],"names":[],"mappings":"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"}