@codeyam/codeyam-cli 0.1.0-staging.036391e → 0.1.0-staging.07d8f7b

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 (532) hide show
  1. package/analyzer-template/.build-info.json +7 -7
  2. package/analyzer-template/log.txt +3 -3
  3. package/analyzer-template/package.json +14 -14
  4. package/analyzer-template/packages/ai/index.ts +1 -0
  5. package/analyzer-template/packages/ai/package.json +1 -1
  6. package/analyzer-template/packages/ai/src/lib/analyzeScope.ts +14 -0
  7. package/analyzer-template/packages/ai/src/lib/astScopes/astScopeAnalyzer.ts +34 -3
  8. package/analyzer-template/packages/ai/src/lib/astScopes/processExpression.ts +101 -0
  9. package/analyzer-template/packages/ai/src/lib/astScopes/sharedPatterns.ts +28 -0
  10. package/analyzer-template/packages/ai/src/lib/astScopes/types.ts +6 -0
  11. package/analyzer-template/packages/ai/src/lib/completionCall.ts +114 -113
  12. package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +435 -13
  13. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/coercePrimitivesToArraysBySchema.ts +62 -0
  14. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.ts +70 -19
  15. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/stripNullableMarkers.ts +35 -0
  16. package/analyzer-template/packages/ai/src/lib/dataStructureChunking.ts +40 -13
  17. package/analyzer-template/packages/ai/src/lib/generateEntityScenarioData.ts +110 -7
  18. package/analyzer-template/packages/ai/src/lib/generateExecutionFlows.ts +134 -2
  19. package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionals.ts +359 -142
  20. package/analyzer-template/packages/ai/src/lib/mergeJsonTypeDefinitions.ts +5 -0
  21. package/analyzer-template/packages/ai/src/lib/promptGenerators/collapseNullableObjects.ts +118 -0
  22. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.ts +24 -4
  23. package/analyzer-template/packages/analyze/src/lib/ProjectAnalyzer.ts +6 -0
  24. package/analyzer-template/packages/analyze/src/lib/asts/nodes/getNodeType.ts +1 -0
  25. package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.ts +18 -0
  26. package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities.ts +9 -1
  27. package/analyzer-template/packages/analyze/src/lib/files/analyze/dependencyResolver.ts +0 -6
  28. package/analyzer-template/packages/analyze/src/lib/files/analyze/findOrCreateEntity.ts +12 -0
  29. package/analyzer-template/packages/analyze/src/lib/files/scenarios/TransformationTracer.ts +65 -28
  30. package/analyzer-template/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.ts +50 -25
  31. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +83 -0
  32. package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +176 -80
  33. package/analyzer-template/packages/aws/package.json +10 -10
  34. package/analyzer-template/packages/database/index.ts +1 -0
  35. package/analyzer-template/packages/database/src/lib/analysisBranchToDb.ts +1 -1
  36. package/analyzer-template/packages/database/src/lib/analysisToDb.ts +1 -1
  37. package/analyzer-template/packages/database/src/lib/branchToDb.ts +1 -1
  38. package/analyzer-template/packages/database/src/lib/commitBranchToDb.ts +1 -1
  39. package/analyzer-template/packages/database/src/lib/commitToDb.ts +1 -1
  40. package/analyzer-template/packages/database/src/lib/fileToDb.ts +1 -1
  41. package/analyzer-template/packages/database/src/lib/kysely/db.ts +8 -0
  42. package/analyzer-template/packages/database/src/lib/kysely/tables/debugReportsTable.ts +1 -1
  43. package/analyzer-template/packages/database/src/lib/kysely/tables/editorScenariosTable.ts +62 -0
  44. package/analyzer-template/packages/database/src/lib/loadCommits.ts +31 -20
  45. package/analyzer-template/packages/database/src/lib/loadReadyToBeCapturedAnalyses.ts +0 -5
  46. package/analyzer-template/packages/database/src/lib/projectToDb.ts +1 -1
  47. package/analyzer-template/packages/database/src/lib/saveFiles.ts +1 -1
  48. package/analyzer-template/packages/database/src/lib/scenarioToDb.ts +1 -1
  49. package/analyzer-template/packages/database/src/lib/updateCommitMetadata.ts +151 -135
  50. package/analyzer-template/packages/database/src/lib/updateFreshAnalysisStatus.ts +58 -42
  51. package/analyzer-template/packages/database/src/lib/updateFreshAnalysisStatusWithScenarios.ts +81 -65
  52. package/analyzer-template/packages/database/src/lib/userScenarioToDb.ts +1 -1
  53. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.ts +29 -1
  54. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.ts +33 -5
  55. package/analyzer-template/packages/github/dist/database/index.d.ts +1 -0
  56. package/analyzer-template/packages/github/dist/database/index.d.ts.map +1 -1
  57. package/analyzer-template/packages/github/dist/database/index.js +1 -0
  58. package/analyzer-template/packages/github/dist/database/index.js.map +1 -1
  59. package/analyzer-template/packages/github/dist/database/src/lib/analysisBranchToDb.js +1 -1
  60. package/analyzer-template/packages/github/dist/database/src/lib/analysisBranchToDb.js.map +1 -1
  61. package/analyzer-template/packages/github/dist/database/src/lib/analysisToDb.js +1 -1
  62. package/analyzer-template/packages/github/dist/database/src/lib/analysisToDb.js.map +1 -1
  63. package/analyzer-template/packages/github/dist/database/src/lib/branchToDb.js +1 -1
  64. package/analyzer-template/packages/github/dist/database/src/lib/branchToDb.js.map +1 -1
  65. package/analyzer-template/packages/github/dist/database/src/lib/commitBranchToDb.js +1 -1
  66. package/analyzer-template/packages/github/dist/database/src/lib/commitBranchToDb.js.map +1 -1
  67. package/analyzer-template/packages/github/dist/database/src/lib/commitToDb.js +1 -1
  68. package/analyzer-template/packages/github/dist/database/src/lib/commitToDb.js.map +1 -1
  69. package/analyzer-template/packages/github/dist/database/src/lib/fileToDb.js +1 -1
  70. package/analyzer-template/packages/github/dist/database/src/lib/fileToDb.js.map +1 -1
  71. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts +2 -0
  72. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts.map +1 -1
  73. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js +5 -0
  74. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js.map +1 -1
  75. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.d.ts +1 -1
  76. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.d.ts +20 -0
  77. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.d.ts.map +1 -0
  78. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.js +45 -0
  79. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -0
  80. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts +5 -0
  81. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts.map +1 -1
  82. package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.d.ts.map +1 -1
  83. package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.js +23 -13
  84. package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.js.map +1 -1
  85. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.d.ts.map +1 -1
  86. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.js +1 -4
  87. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.js.map +1 -1
  88. package/analyzer-template/packages/github/dist/database/src/lib/projectToDb.js +1 -1
  89. package/analyzer-template/packages/github/dist/database/src/lib/projectToDb.js.map +1 -1
  90. package/analyzer-template/packages/github/dist/database/src/lib/saveFiles.js +1 -1
  91. package/analyzer-template/packages/github/dist/database/src/lib/saveFiles.js.map +1 -1
  92. package/analyzer-template/packages/github/dist/database/src/lib/scenarioToDb.js +1 -1
  93. package/analyzer-template/packages/github/dist/database/src/lib/scenarioToDb.js.map +1 -1
  94. package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.d.ts.map +1 -1
  95. package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js +100 -89
  96. package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js.map +1 -1
  97. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatus.d.ts.map +1 -1
  98. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatus.js +41 -30
  99. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatus.js.map +1 -1
  100. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatusWithScenarios.d.ts.map +1 -1
  101. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatusWithScenarios.js +68 -57
  102. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatusWithScenarios.js.map +1 -1
  103. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.d.ts.map +1 -1
  104. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js +29 -1
  105. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js.map +1 -1
  106. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.d.ts.map +1 -1
  107. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +33 -5
  108. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
  109. package/analyzer-template/packages/github/dist/types/src/types/ProjectMetadata.d.ts +1 -0
  110. package/analyzer-template/packages/github/dist/types/src/types/ProjectMetadata.d.ts.map +1 -1
  111. package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts +10 -0
  112. package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts.map +1 -1
  113. package/analyzer-template/packages/types/src/types/ProjectMetadata.ts +1 -0
  114. package/analyzer-template/packages/types/src/types/Scenario.ts +10 -0
  115. package/analyzer-template/packages/utils/dist/types/src/types/ProjectMetadata.d.ts +1 -0
  116. package/analyzer-template/packages/utils/dist/types/src/types/ProjectMetadata.d.ts.map +1 -1
  117. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts +10 -0
  118. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts.map +1 -1
  119. package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.d.ts.map +1 -1
  120. package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.js +98 -3
  121. package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.js.map +1 -1
  122. package/analyzer-template/packages/utils/src/lib/fs/rsyncCopy.ts +121 -3
  123. package/analyzer-template/playwright/captureFromUrl.ts +89 -82
  124. package/analyzer-template/project/constructMockCode.ts +170 -50
  125. package/analyzer-template/project/orchestrateCapture.ts +4 -1
  126. package/analyzer-template/project/reconcileMockDataKeys.ts +19 -14
  127. package/analyzer-template/project/start.ts +3 -0
  128. package/analyzer-template/project/startScenarioCapture.ts +9 -0
  129. package/analyzer-template/project/writeClientLogRoute.ts +125 -0
  130. package/analyzer-template/project/writeMockDataTsx.ts +17 -0
  131. package/analyzer-template/project/writeScenarioComponents.ts +110 -17
  132. package/analyzer-template/tsconfig.json +13 -1
  133. package/background/src/lib/local/createLocalAnalyzer.js +1 -1
  134. package/background/src/lib/local/createLocalAnalyzer.js.map +1 -1
  135. package/background/src/lib/virtualized/project/constructMockCode.js +145 -41
  136. package/background/src/lib/virtualized/project/constructMockCode.js.map +1 -1
  137. package/background/src/lib/virtualized/project/orchestrateCapture.js +4 -1
  138. package/background/src/lib/virtualized/project/orchestrateCapture.js.map +1 -1
  139. package/background/src/lib/virtualized/project/reconcileMockDataKeys.js +17 -11
  140. package/background/src/lib/virtualized/project/reconcileMockDataKeys.js.map +1 -1
  141. package/background/src/lib/virtualized/project/start.js +2 -0
  142. package/background/src/lib/virtualized/project/start.js.map +1 -1
  143. package/background/src/lib/virtualized/project/startScenarioCapture.js +5 -0
  144. package/background/src/lib/virtualized/project/startScenarioCapture.js.map +1 -1
  145. package/background/src/lib/virtualized/project/writeClientLogRoute.js +110 -0
  146. package/background/src/lib/virtualized/project/writeClientLogRoute.js.map +1 -0
  147. package/background/src/lib/virtualized/project/writeMockDataTsx.js +12 -0
  148. package/background/src/lib/virtualized/project/writeMockDataTsx.js.map +1 -1
  149. package/background/src/lib/virtualized/project/writeScenarioComponents.js +83 -12
  150. package/background/src/lib/virtualized/project/writeScenarioComponents.js.map +1 -1
  151. package/codeyam-cli/scripts/apply-setup.js +209 -12
  152. package/codeyam-cli/scripts/apply-setup.js.map +1 -1
  153. package/codeyam-cli/src/cli.js +33 -24
  154. package/codeyam-cli/src/cli.js.map +1 -1
  155. package/codeyam-cli/src/codeyam-cli.js +18 -2
  156. package/codeyam-cli/src/codeyam-cli.js.map +1 -1
  157. package/codeyam-cli/src/commands/analyze.js +21 -9
  158. package/codeyam-cli/src/commands/analyze.js.map +1 -1
  159. package/codeyam-cli/src/commands/baseline.js +2 -0
  160. package/codeyam-cli/src/commands/baseline.js.map +1 -1
  161. package/codeyam-cli/src/commands/debug.js +2 -0
  162. package/codeyam-cli/src/commands/debug.js.map +1 -1
  163. package/codeyam-cli/src/commands/default.js +87 -21
  164. package/codeyam-cli/src/commands/default.js.map +1 -1
  165. package/codeyam-cli/src/commands/editor.js +697 -0
  166. package/codeyam-cli/src/commands/editor.js.map +1 -0
  167. package/codeyam-cli/src/commands/init.js +75 -259
  168. package/codeyam-cli/src/commands/init.js.map +1 -1
  169. package/codeyam-cli/src/commands/memory.js +95 -81
  170. package/codeyam-cli/src/commands/memory.js.map +1 -1
  171. package/codeyam-cli/src/commands/recapture.js +2 -0
  172. package/codeyam-cli/src/commands/recapture.js.map +1 -1
  173. package/codeyam-cli/src/commands/setup-sandbox.js +2 -0
  174. package/codeyam-cli/src/commands/setup-sandbox.js.map +1 -1
  175. package/codeyam-cli/src/commands/setup-simulations.js +284 -0
  176. package/codeyam-cli/src/commands/setup-simulations.js.map +1 -0
  177. package/codeyam-cli/src/commands/test-startup.js +2 -0
  178. package/codeyam-cli/src/commands/test-startup.js.map +1 -1
  179. package/codeyam-cli/src/commands/verify.js +14 -2
  180. package/codeyam-cli/src/commands/verify.js.map +1 -1
  181. package/codeyam-cli/src/utils/__tests__/npmVersionCheck.test.js +185 -0
  182. package/codeyam-cli/src/utils/__tests__/npmVersionCheck.test.js.map +1 -0
  183. package/codeyam-cli/src/utils/__tests__/pathIgnoring.test.js +9 -0
  184. package/codeyam-cli/src/utils/__tests__/pathIgnoring.test.js.map +1 -1
  185. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +154 -86
  186. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js.map +1 -1
  187. package/codeyam-cli/src/utils/analyzer.js +7 -0
  188. package/codeyam-cli/src/utils/analyzer.js.map +1 -1
  189. package/codeyam-cli/src/utils/backgroundServer.js +109 -26
  190. package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
  191. package/codeyam-cli/src/utils/devModeEvents.js +40 -0
  192. package/codeyam-cli/src/utils/devModeEvents.js.map +1 -0
  193. package/codeyam-cli/src/utils/fileMetadata.js +5 -0
  194. package/codeyam-cli/src/utils/fileMetadata.js.map +1 -1
  195. package/codeyam-cli/src/utils/fileWatcher.js +25 -9
  196. package/codeyam-cli/src/utils/fileWatcher.js.map +1 -1
  197. package/codeyam-cli/src/utils/generateReport.js +2 -2
  198. package/codeyam-cli/src/utils/git.js +52 -0
  199. package/codeyam-cli/src/utils/git.js.map +1 -1
  200. package/codeyam-cli/src/utils/install-skills.js +74 -63
  201. package/codeyam-cli/src/utils/install-skills.js.map +1 -1
  202. package/codeyam-cli/src/utils/interactiveSyncWatcher.js +126 -0
  203. package/codeyam-cli/src/utils/interactiveSyncWatcher.js.map +1 -0
  204. package/codeyam-cli/src/utils/labsAutoCheck.js +0 -29
  205. package/codeyam-cli/src/utils/labsAutoCheck.js.map +1 -1
  206. package/codeyam-cli/src/utils/npmVersionCheck.js +76 -0
  207. package/codeyam-cli/src/utils/npmVersionCheck.js.map +1 -0
  208. package/codeyam-cli/src/utils/pathIgnoring.js +19 -7
  209. package/codeyam-cli/src/utils/pathIgnoring.js.map +1 -1
  210. package/codeyam-cli/src/utils/progress.js +7 -0
  211. package/codeyam-cli/src/utils/progress.js.map +1 -1
  212. package/codeyam-cli/src/utils/queue/__tests__/heartbeat.test.js +11 -11
  213. package/codeyam-cli/src/utils/queue/__tests__/heartbeat.test.js.map +1 -1
  214. package/codeyam-cli/src/utils/queue/__tests__/manager.test.js +22 -0
  215. package/codeyam-cli/src/utils/queue/__tests__/manager.test.js.map +1 -1
  216. package/codeyam-cli/src/utils/queue/heartbeat.js +13 -5
  217. package/codeyam-cli/src/utils/queue/heartbeat.js.map +1 -1
  218. package/codeyam-cli/src/utils/queue/job.js +70 -1
  219. package/codeyam-cli/src/utils/queue/job.js.map +1 -1
  220. package/codeyam-cli/src/utils/queue/manager.js +7 -6
  221. package/codeyam-cli/src/utils/queue/manager.js.map +1 -1
  222. package/codeyam-cli/src/utils/requireSimulations.js +10 -0
  223. package/codeyam-cli/src/utils/requireSimulations.js.map +1 -0
  224. package/codeyam-cli/src/utils/ruleReflection/__tests__/contextBuilder.test.js +7 -8
  225. package/codeyam-cli/src/utils/ruleReflection/__tests__/contextBuilder.test.js.map +1 -1
  226. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/assertRules.js +1 -1
  227. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/assertRules.js.map +1 -1
  228. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/setupTempProject.js +0 -1
  229. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/setupTempProject.js.map +1 -1
  230. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/ruleReflectionE2E.test.js +97 -6
  231. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/ruleReflectionE2E.test.js.map +1 -1
  232. package/codeyam-cli/src/utils/ruleReflection/__tests__/promptBuilder.test.js +4 -6
  233. package/codeyam-cli/src/utils/ruleReflection/__tests__/promptBuilder.test.js.map +1 -1
  234. package/codeyam-cli/src/utils/ruleReflection/contextBuilder.js +3 -3
  235. package/codeyam-cli/src/utils/ruleReflection/contextBuilder.js.map +1 -1
  236. package/codeyam-cli/src/utils/rules/__tests__/parser.test.js +83 -0
  237. package/codeyam-cli/src/utils/rules/__tests__/parser.test.js.map +1 -0
  238. package/codeyam-cli/src/utils/rules/__tests__/pathMatcher.test.js +118 -0
  239. package/codeyam-cli/src/utils/rules/__tests__/pathMatcher.test.js.map +1 -0
  240. package/codeyam-cli/src/utils/rules/__tests__/rulePlacement.test.js +72 -0
  241. package/codeyam-cli/src/utils/rules/__tests__/rulePlacement.test.js.map +1 -0
  242. package/codeyam-cli/src/utils/rules/__tests__/ruleState.test.js +23 -23
  243. package/codeyam-cli/src/utils/rules/__tests__/ruleState.test.js.map +1 -1
  244. package/codeyam-cli/src/utils/rules/__tests__/sourceFiles.test.js +76 -0
  245. package/codeyam-cli/src/utils/rules/__tests__/sourceFiles.test.js.map +1 -0
  246. package/codeyam-cli/src/utils/rules/index.js +1 -0
  247. package/codeyam-cli/src/utils/rules/index.js.map +1 -1
  248. package/codeyam-cli/src/utils/rules/parser.js +19 -4
  249. package/codeyam-cli/src/utils/rules/parser.js.map +1 -1
  250. package/codeyam-cli/src/utils/rules/pathMatcher.js +34 -3
  251. package/codeyam-cli/src/utils/rules/pathMatcher.js.map +1 -1
  252. package/codeyam-cli/src/utils/rules/rulePlacement.js +65 -0
  253. package/codeyam-cli/src/utils/rules/rulePlacement.js.map +1 -0
  254. package/codeyam-cli/src/utils/rules/ruleState.js +10 -10
  255. package/codeyam-cli/src/utils/rules/ruleState.js.map +1 -1
  256. package/codeyam-cli/src/utils/rules/sourceFiles.js +43 -0
  257. package/codeyam-cli/src/utils/rules/sourceFiles.js.map +1 -0
  258. package/codeyam-cli/src/utils/rules/staleness.js +6 -6
  259. package/codeyam-cli/src/utils/rules/staleness.js.map +1 -1
  260. package/codeyam-cli/src/utils/serverState.js +64 -12
  261. package/codeyam-cli/src/utils/serverState.js.map +1 -1
  262. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +61 -43
  263. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js.map +1 -1
  264. package/codeyam-cli/src/utils/simulationGateMiddleware.js +159 -0
  265. package/codeyam-cli/src/utils/simulationGateMiddleware.js.map +1 -0
  266. package/codeyam-cli/src/utils/syncMocksMiddleware.js +5 -24
  267. package/codeyam-cli/src/utils/syncMocksMiddleware.js.map +1 -1
  268. package/codeyam-cli/src/utils/testRunner.js +158 -0
  269. package/codeyam-cli/src/utils/testRunner.js.map +1 -0
  270. package/codeyam-cli/src/utils/transcriptPruning.js +67 -0
  271. package/codeyam-cli/src/utils/transcriptPruning.js.map +1 -0
  272. package/codeyam-cli/src/utils/versionInfo.js +46 -0
  273. package/codeyam-cli/src/utils/versionInfo.js.map +1 -1
  274. package/codeyam-cli/src/utils/webappDetection.js +14 -2
  275. package/codeyam-cli/src/utils/webappDetection.js.map +1 -1
  276. package/codeyam-cli/src/webserver/__tests__/dependency-smoke.test.js +66 -0
  277. package/codeyam-cli/src/webserver/__tests__/dependency-smoke.test.js.map +1 -0
  278. package/codeyam-cli/src/webserver/app/lib/database.js +55 -30
  279. package/codeyam-cli/src/webserver/app/lib/database.js.map +1 -1
  280. package/codeyam-cli/src/webserver/app/lib/dbNotifier.js.map +1 -1
  281. package/codeyam-cli/src/webserver/backgroundServer.js +144 -25
  282. package/codeyam-cli/src/webserver/backgroundServer.js.map +1 -1
  283. package/codeyam-cli/src/webserver/bootstrap.js +11 -0
  284. package/codeyam-cli/src/webserver/bootstrap.js.map +1 -1
  285. package/codeyam-cli/src/webserver/build/client/assets/{CopyButton-CA3JxPb7.js → CopyButton-DmJveP3T.js} +1 -1
  286. package/codeyam-cli/src/webserver/build/client/assets/{EntityItem-B86KKU7e.js → EntityItem-C76mRRiF.js} +1 -1
  287. package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeBadge-B5ctlSYt.js → EntityTypeBadge-g3saevPb.js} +1 -1
  288. package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeIcon-BqY8gDAW.js → EntityTypeIcon-CobE682z.js} +1 -1
  289. package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-Bu6c6aDe.js +1 -0
  290. package/codeyam-cli/src/webserver/build/client/assets/{InteractivePreview-BDhPilK7.js → InteractivePreview-DYFW3lDD.js} +3 -3
  291. package/codeyam-cli/src/webserver/build/client/assets/{LibraryFunctionPreview-VeqEBv9v.js → LibraryFunctionPreview-DLeucoVX.js} +1 -1
  292. package/codeyam-cli/src/webserver/build/client/assets/{LoadingDots-Bs7Nn1Jr.js → LoadingDots-BU_OAEMP.js} +1 -1
  293. package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-Bm3PmcCz.js → LogViewer-ceAyBX-H.js} +1 -1
  294. package/codeyam-cli/src/webserver/build/client/assets/{ReportIssueModal-C6PKeMYR.js → ReportIssueModal-djPLI-WV.js} +2 -2
  295. package/codeyam-cli/src/webserver/build/client/assets/{SafeScreenshot-Gq3Ocjo6.js → SafeScreenshot-BED4B6sP.js} +1 -1
  296. package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-BNLaXBHR.js → ScenarioViewer-B76aig_2.js} +2 -2
  297. package/codeyam-cli/src/webserver/build/client/assets/Spinner-Bb5uFQ5V.js +34 -0
  298. package/codeyam-cli/src/webserver/build/client/assets/Terminal-BaIiqg_w.js +41 -0
  299. package/codeyam-cli/src/webserver/build/client/assets/{TruncatedFilePath-CiwXDxLh.js → TruncatedFilePath-C8OKAR5x.js} +1 -1
  300. package/codeyam-cli/src/webserver/build/client/assets/{_index-B3TDXxnk.js → _index-C96V0n15.js} +1 -1
  301. package/codeyam-cli/src/webserver/build/client/assets/{activity.(_tab)-BtBFH820.js → activity.(_tab)-BpKzcsJz.js} +1 -1
  302. package/codeyam-cli/src/webserver/build/client/assets/addon-fit-CUXOrorO.js +1 -0
  303. package/codeyam-cli/src/webserver/build/client/assets/addon-web-links-Duc5hnl7.js +1 -0
  304. package/codeyam-cli/src/webserver/build/client/assets/agent-transcripts-D9hemwl6.js +22 -0
  305. package/codeyam-cli/src/webserver/build/client/assets/api.editor-capture-scenario-l0sNRNKZ.js +1 -0
  306. package/codeyam-cli/src/webserver/build/client/assets/api.editor-client-errors-l0sNRNKZ.js +1 -0
  307. package/codeyam-cli/src/webserver/build/client/assets/api.editor-commit-l0sNRNKZ.js +1 -0
  308. package/codeyam-cli/src/webserver/build/client/assets/api.editor-dev-server-l0sNRNKZ.js +1 -0
  309. package/codeyam-cli/src/webserver/build/client/assets/api.editor-entity-status-l0sNRNKZ.js +1 -0
  310. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-entry-l0sNRNKZ.js +1 -0
  311. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-image._-l0sNRNKZ.js +1 -0
  312. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-l0sNRNKZ.js +1 -0
  313. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-screenshot-l0sNRNKZ.js +1 -0
  314. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-update-l0sNRNKZ.js +1 -0
  315. package/codeyam-cli/src/webserver/build/client/assets/api.editor-refresh-l0sNRNKZ.js +1 -0
  316. package/codeyam-cli/src/webserver/build/client/assets/api.editor-register-scenario-l0sNRNKZ.js +1 -0
  317. package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-data-l0sNRNKZ.js +1 -0
  318. package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-image._-l0sNRNKZ.js +1 -0
  319. package/codeyam-cli/src/webserver/build/client/assets/api.editor-switch-scenario-l0sNRNKZ.js +1 -0
  320. package/codeyam-cli/src/webserver/build/client/assets/api.editor-test-results-l0sNRNKZ.js +1 -0
  321. package/codeyam-cli/src/webserver/build/client/assets/api.rule-path-l0sNRNKZ.js +1 -0
  322. package/codeyam-cli/src/webserver/build/client/assets/{book-open-PttOB2SF.js → book-open-D_nMCFmP.js} +1 -1
  323. package/codeyam-cli/src/webserver/build/client/assets/{chevron-down-TJp6ofnp.js → chevron-down-BH2h1Ea2.js} +1 -1
  324. package/codeyam-cli/src/webserver/build/client/assets/{chunk-JZWAC4HX-JE9ZIoBl.js → chunk-JZWAC4HX-C4pqxYJB.js} +9 -9
  325. package/codeyam-cli/src/webserver/build/client/assets/{circle-check-CXhHQYrI.js → circle-check-DyIKORY6.js} +1 -1
  326. package/codeyam-cli/src/webserver/build/client/assets/{copy-6y9ALfGT.js → copy-NDbZjXao.js} +1 -1
  327. package/codeyam-cli/src/webserver/build/client/assets/{createLucideIcon-Ca9fAY46.js → createLucideIcon-CMT1jU2q.js} +1 -1
  328. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-BiM6z3Do.js +1 -0
  329. package/codeyam-cli/src/webserver/build/client/assets/editor-Ba0jejiv.js +7 -0
  330. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-n38keI1k.js → entity._sha._-CrjR3zZW.js} +10 -10
  331. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.dev-DloHYjtt.js +6 -0
  332. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-C28BiQzt.js +6 -0
  333. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-p9hhkjJM.js +6 -0
  334. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.edit._scenarioId-38yPijoD.js → entity._sha_.edit._scenarioId-BMvVHNXU.js} +2 -2
  335. package/codeyam-cli/src/webserver/build/client/assets/{entry.client-BSHEfydn.js → entry.client-DTvKq3TY.js} +1 -1
  336. package/codeyam-cli/src/webserver/build/client/assets/{fileTableUtils-DCPhhSMo.js → fileTableUtils-cPo8LiG3.js} +1 -1
  337. package/codeyam-cli/src/webserver/build/client/assets/{files-0N0YJQv7.js → files-DO4CZ16O.js} +1 -1
  338. package/codeyam-cli/src/webserver/build/client/assets/{git-DXnyr8uP.js → git-CFCTYk9I.js} +1 -1
  339. package/codeyam-cli/src/webserver/build/client/assets/globals-BH6uYxPM.css +1 -0
  340. package/codeyam-cli/src/webserver/build/client/assets/{index-ChN9-fAY.js → index-10oVnAAH.js} +1 -1
  341. package/codeyam-cli/src/webserver/build/client/assets/{index-CcsFv748.js → index-BcvgDzbZ.js} +1 -1
  342. package/codeyam-cli/src/webserver/build/client/assets/labs-Zk7ryIM1.js +1 -0
  343. package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-CTqLEAGU.js → loader-circle-BAXYRVEO.js} +1 -1
  344. package/codeyam-cli/src/webserver/build/client/assets/manifest-dcea65f8.js +1 -0
  345. package/codeyam-cli/src/webserver/build/client/assets/memory-FweZHj5U.js +93 -0
  346. package/codeyam-cli/src/webserver/build/client/assets/{pause-D6vreykR.js → pause-DTAcYxBt.js} +1 -1
  347. package/codeyam-cli/src/webserver/build/client/assets/root-Dzn8nIkU.js +67 -0
  348. package/codeyam-cli/src/webserver/build/client/assets/{search-B8VUL8nl.js → search-fKo7v0Zo.js} +1 -1
  349. package/codeyam-cli/src/webserver/build/client/assets/settings-DfuTtcJP.js +1 -0
  350. package/codeyam-cli/src/webserver/build/client/assets/{simulations-CPoAg7Zo.js → simulations-B3aOzpCZ.js} +1 -1
  351. package/codeyam-cli/src/webserver/build/client/assets/{terminal-BrCP7uQo.js → terminal-BG4heKCG.js} +1 -1
  352. package/codeyam-cli/src/webserver/build/client/assets/{triangle-alert-BZz2NjYa.js → triangle-alert-DtSmdtM4.js} +1 -1
  353. package/codeyam-cli/src/webserver/build/client/assets/{useCustomSizes-DNwUduNu.js → useCustomSizes-ByhSyh0W.js} +1 -1
  354. package/codeyam-cli/src/webserver/build/client/assets/useLastLogLine-C14nCb1q.js +2 -0
  355. package/codeyam-cli/src/webserver/build/client/assets/{useReportContext-CpZgwliL.js → useReportContext-O-jkvSPx.js} +1 -1
  356. package/codeyam-cli/src/webserver/build/client/assets/{useToast-Bv9JFvUO.js → useToast-9FIWuYfK.js} +1 -1
  357. package/codeyam-cli/src/webserver/build/client/assets/xterm-DMSzMhqy.js +9 -0
  358. package/codeyam-cli/src/webserver/build/server/assets/index-mE6GlU_8.js +1 -0
  359. package/codeyam-cli/src/webserver/build/server/assets/server-build-BApEk7IO.js +362 -0
  360. package/codeyam-cli/src/webserver/build/server/index.js +1 -1
  361. package/codeyam-cli/src/webserver/build-info.json +5 -5
  362. package/codeyam-cli/src/webserver/devServer.js +39 -5
  363. package/codeyam-cli/src/webserver/devServer.js.map +1 -1
  364. package/codeyam-cli/src/webserver/editorProxy.js +272 -0
  365. package/codeyam-cli/src/webserver/editorProxy.js.map +1 -0
  366. package/codeyam-cli/src/webserver/scripts/journalCapture.ts +121 -0
  367. package/codeyam-cli/src/webserver/server.js +177 -1
  368. package/codeyam-cli/src/webserver/server.js.map +1 -1
  369. package/codeyam-cli/src/webserver/terminalServer.js +606 -0
  370. package/codeyam-cli/src/webserver/terminalServer.js.map +1 -0
  371. package/codeyam-cli/templates/{codeyam:debug.md → codeyam-debug.md} +1 -1
  372. package/codeyam-cli/templates/codeyam-dev-mode.md +237 -0
  373. package/codeyam-cli/templates/codeyam-diagnose.md +481 -0
  374. package/codeyam-cli/templates/codeyam-editor-claude.md +68 -0
  375. package/codeyam-cli/templates/codeyam-editor.md +67 -0
  376. package/codeyam-cli/templates/codeyam-memory-hook.sh +14 -14
  377. package/codeyam-cli/templates/{codeyam:memory.md → codeyam-memory.md} +16 -24
  378. package/codeyam-cli/templates/{codeyam:new-rule.md → codeyam-new-rule.md} +1 -3
  379. package/codeyam-cli/templates/{codeyam:setup.md → codeyam-setup.md} +13 -1
  380. package/codeyam-cli/templates/{codeyam:sim.md → codeyam-sim.md} +1 -1
  381. package/codeyam-cli/templates/{codeyam:test.md → codeyam-test.md} +1 -1
  382. package/codeyam-cli/templates/{codeyam:verify.md → codeyam-verify.md} +1 -1
  383. package/codeyam-cli/templates/editor-step-hook.py +143 -0
  384. package/codeyam-cli/templates/hooks/staleness-check.sh +43 -0
  385. package/codeyam-cli/templates/isolation-route/next-app.tsx.template +80 -0
  386. package/codeyam-cli/templates/isolation-route/next-pages.tsx.template +79 -0
  387. package/codeyam-cli/templates/isolation-route/vite-react.tsx.template +78 -0
  388. package/codeyam-cli/templates/msw/browser-setup.ts.template +47 -0
  389. package/codeyam-cli/templates/msw/handler-router.ts.template +47 -0
  390. package/codeyam-cli/templates/msw/server-setup.ts.template +52 -0
  391. package/codeyam-cli/templates/nextjs-prisma-sqlite/PRISMA_SETUP.md +84 -0
  392. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/api/todos/route.ts +17 -0
  393. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/globals.css +26 -0
  394. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/layout.tsx +34 -0
  395. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/lib/prisma.ts +19 -0
  396. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/page.tsx +10 -0
  397. package/codeyam-cli/templates/nextjs-prisma-sqlite/eslint.config.mjs +11 -0
  398. package/codeyam-cli/templates/nextjs-prisma-sqlite/next.config.ts +14 -0
  399. package/codeyam-cli/templates/nextjs-prisma-sqlite/package.json +35 -0
  400. package/codeyam-cli/templates/nextjs-prisma-sqlite/postcss.config.mjs +7 -0
  401. package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma/schema.prisma +27 -0
  402. package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma/seed.ts +37 -0
  403. package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma.config.ts +12 -0
  404. package/codeyam-cli/templates/nextjs-prisma-sqlite/tsconfig.json +34 -0
  405. package/codeyam-cli/templates/prompts/conversation-guidance.txt +44 -0
  406. package/codeyam-cli/templates/prompts/conversation-prompt.txt +28 -0
  407. package/codeyam-cli/templates/prompts/interruption-prompt.txt +31 -0
  408. package/codeyam-cli/templates/prompts/stale-rules-prompt.txt +24 -0
  409. package/codeyam-cli/templates/rule-notification-hook.py +44 -17
  410. package/codeyam-cli/templates/rule-reflection-hook.py +88 -31
  411. package/codeyam-cli/templates/rules-instructions.md +45 -90
  412. package/package.json +15 -13
  413. package/packages/ai/index.js +1 -1
  414. package/packages/ai/index.js.map +1 -1
  415. package/packages/ai/src/lib/analyzeScope.js +14 -0
  416. package/packages/ai/src/lib/analyzeScope.js.map +1 -1
  417. package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js +22 -4
  418. package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js.map +1 -1
  419. package/packages/ai/src/lib/astScopes/processExpression.js +78 -1
  420. package/packages/ai/src/lib/astScopes/processExpression.js.map +1 -1
  421. package/packages/ai/src/lib/astScopes/sharedPatterns.js +25 -0
  422. package/packages/ai/src/lib/astScopes/sharedPatterns.js.map +1 -1
  423. package/packages/ai/src/lib/completionCall.js +10 -7
  424. package/packages/ai/src/lib/completionCall.js.map +1 -1
  425. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +362 -10
  426. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
  427. package/packages/ai/src/lib/dataStructure/helpers/coercePrimitivesToArraysBySchema.js +54 -0
  428. package/packages/ai/src/lib/dataStructure/helpers/coercePrimitivesToArraysBySchema.js.map +1 -0
  429. package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js +59 -17
  430. package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js.map +1 -1
  431. package/packages/ai/src/lib/dataStructure/helpers/stripNullableMarkers.js +34 -0
  432. package/packages/ai/src/lib/dataStructure/helpers/stripNullableMarkers.js.map +1 -0
  433. package/packages/ai/src/lib/dataStructureChunking.js +30 -11
  434. package/packages/ai/src/lib/dataStructureChunking.js.map +1 -1
  435. package/packages/ai/src/lib/generateEntityScenarioData.js +79 -5
  436. package/packages/ai/src/lib/generateEntityScenarioData.js.map +1 -1
  437. package/packages/ai/src/lib/generateExecutionFlows.js +97 -2
  438. package/packages/ai/src/lib/generateExecutionFlows.js.map +1 -1
  439. package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js +242 -81
  440. package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js.map +1 -1
  441. package/packages/ai/src/lib/mergeJsonTypeDefinitions.js +5 -0
  442. package/packages/ai/src/lib/mergeJsonTypeDefinitions.js.map +1 -1
  443. package/packages/ai/src/lib/promptGenerators/collapseNullableObjects.js +97 -0
  444. package/packages/ai/src/lib/promptGenerators/collapseNullableObjects.js.map +1 -0
  445. package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js +17 -2
  446. package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js.map +1 -1
  447. package/packages/analyze/src/lib/ProjectAnalyzer.js +3 -0
  448. package/packages/analyze/src/lib/ProjectAnalyzer.js.map +1 -1
  449. package/packages/analyze/src/lib/asts/nodes/getNodeType.js +1 -0
  450. package/packages/analyze/src/lib/asts/nodes/getNodeType.js.map +1 -1
  451. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js +11 -1
  452. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js.map +1 -1
  453. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js +8 -1
  454. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js.map +1 -1
  455. package/packages/analyze/src/lib/files/analyze/dependencyResolver.js +0 -5
  456. package/packages/analyze/src/lib/files/analyze/dependencyResolver.js.map +1 -1
  457. package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js +9 -0
  458. package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js.map +1 -1
  459. package/packages/analyze/src/lib/files/scenarios/TransformationTracer.js +54 -27
  460. package/packages/analyze/src/lib/files/scenarios/TransformationTracer.js.map +1 -1
  461. package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js +42 -13
  462. package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js.map +1 -1
  463. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +65 -0
  464. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
  465. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +141 -71
  466. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js.map +1 -1
  467. package/packages/database/index.js +1 -0
  468. package/packages/database/index.js.map +1 -1
  469. package/packages/database/src/lib/analysisBranchToDb.js +1 -1
  470. package/packages/database/src/lib/analysisBranchToDb.js.map +1 -1
  471. package/packages/database/src/lib/analysisToDb.js +1 -1
  472. package/packages/database/src/lib/analysisToDb.js.map +1 -1
  473. package/packages/database/src/lib/branchToDb.js +1 -1
  474. package/packages/database/src/lib/branchToDb.js.map +1 -1
  475. package/packages/database/src/lib/commitBranchToDb.js +1 -1
  476. package/packages/database/src/lib/commitBranchToDb.js.map +1 -1
  477. package/packages/database/src/lib/commitToDb.js +1 -1
  478. package/packages/database/src/lib/commitToDb.js.map +1 -1
  479. package/packages/database/src/lib/fileToDb.js +1 -1
  480. package/packages/database/src/lib/fileToDb.js.map +1 -1
  481. package/packages/database/src/lib/kysely/db.js +5 -0
  482. package/packages/database/src/lib/kysely/db.js.map +1 -1
  483. package/packages/database/src/lib/kysely/tables/editorScenariosTable.js +45 -0
  484. package/packages/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -0
  485. package/packages/database/src/lib/loadCommits.js +23 -13
  486. package/packages/database/src/lib/loadCommits.js.map +1 -1
  487. package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.js +1 -4
  488. package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.js.map +1 -1
  489. package/packages/database/src/lib/projectToDb.js +1 -1
  490. package/packages/database/src/lib/projectToDb.js.map +1 -1
  491. package/packages/database/src/lib/saveFiles.js +1 -1
  492. package/packages/database/src/lib/saveFiles.js.map +1 -1
  493. package/packages/database/src/lib/scenarioToDb.js +1 -1
  494. package/packages/database/src/lib/scenarioToDb.js.map +1 -1
  495. package/packages/database/src/lib/updateCommitMetadata.js +100 -89
  496. package/packages/database/src/lib/updateCommitMetadata.js.map +1 -1
  497. package/packages/database/src/lib/updateFreshAnalysisStatus.js +41 -30
  498. package/packages/database/src/lib/updateFreshAnalysisStatus.js.map +1 -1
  499. package/packages/database/src/lib/updateFreshAnalysisStatusWithScenarios.js +68 -57
  500. package/packages/database/src/lib/updateFreshAnalysisStatusWithScenarios.js.map +1 -1
  501. package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js +29 -1
  502. package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js.map +1 -1
  503. package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +33 -5
  504. package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
  505. package/packages/utils/src/lib/fs/rsyncCopy.js +98 -3
  506. package/packages/utils/src/lib/fs/rsyncCopy.js.map +1 -1
  507. package/scripts/finalize-analyzer.cjs +8 -76
  508. package/codeyam-cli/src/commands/detect-universal-mocks.js +0 -118
  509. package/codeyam-cli/src/commands/detect-universal-mocks.js.map +0 -1
  510. package/codeyam-cli/src/commands/list.js +0 -31
  511. package/codeyam-cli/src/commands/list.js.map +0 -1
  512. package/codeyam-cli/src/commands/webapp-info.js +0 -146
  513. package/codeyam-cli/src/commands/webapp-info.js.map +0 -1
  514. package/codeyam-cli/src/utils/universal-mocks.js +0 -152
  515. package/codeyam-cli/src/utils/universal-mocks.js.map +0 -1
  516. package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-ClaLpuOo.js +0 -34
  517. package/codeyam-cli/src/webserver/build/client/assets/agent-transcripts-DfKzxuoe.js +0 -11
  518. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-C5lqplTC.js +0 -1
  519. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-CBoafmVs.js +0 -6
  520. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-DGgZjdFg.js +0 -6
  521. package/codeyam-cli/src/webserver/build/client/assets/globals-DoeDFXZN.css +0 -1
  522. package/codeyam-cli/src/webserver/build/client/assets/labs-CmBYA0PH.js +0 -1
  523. package/codeyam-cli/src/webserver/build/client/assets/manifest-76786b8e.js +0 -1
  524. package/codeyam-cli/src/webserver/build/client/assets/memory-CrNQfdMO.js +0 -76
  525. package/codeyam-cli/src/webserver/build/client/assets/root-QAY34PIo.js +0 -62
  526. package/codeyam-cli/src/webserver/build/client/assets/settings-eBI36Yv5.js +0 -1
  527. package/codeyam-cli/src/webserver/build/client/assets/useLastLogLine-COky1GVF.js +0 -2
  528. package/codeyam-cli/src/webserver/build/server/assets/index-DV1ykEI6.js +0 -1
  529. package/codeyam-cli/src/webserver/build/server/assets/server-build-BrcVrUEv.js +0 -260
  530. package/codeyam-cli/templates/codeyam-stop-hook.sh +0 -284
  531. package/codeyam-cli/templates/codeyam:diagnose.md +0 -805
  532. /package/codeyam-cli/src/webserver/build/client/assets/{api.labs-survey-l0sNRNKZ.js → api.dev-mode-events-l0sNRNKZ.js} +0 -0
@@ -3,7 +3,7 @@
3
3
  # Ensures rules are reviewed when associated code changes
4
4
  #
5
5
  # This hook checks that rules with matching `paths` patterns have been reviewed
6
- # (indicated by an updated timestamp in .claude/codeyam-rule-state.json) when associated code files are modified.
6
+ # (indicated by an updated lastAuditedAt in .claude/codeyam-rule-state.json) when associated code files are modified.
7
7
 
8
8
  set -e
9
9
 
@@ -21,9 +21,9 @@ if [ -z "$STAGED_FILES" ]; then
21
21
  exit 0
22
22
  fi
23
23
 
24
- # Function to convert ISO 8601 timestamp to epoch seconds
24
+ # Function to convert ISO 8601 date string to epoch seconds
25
25
  # Handles both macOS and Linux date commands
26
- timestamp_to_epoch() {
26
+ iso_to_epoch() {
27
27
  local ts="$1"
28
28
  # Remove trailing Z if present
29
29
  ts="${ts%Z}"
@@ -84,14 +84,14 @@ matches_pattern() {
84
84
  echo "$file" | grep -qE "$regex_pattern" 2>/dev/null
85
85
  }
86
86
 
87
- # Read timestamp from .claude/codeyam-rule-state.json
87
+ # Read lastAuditedAt from .claude/codeyam-rule-state.json
88
88
  RULE_STATE_FILE=".claude/codeyam-rule-state.json"
89
- get_rule_timestamp() {
89
+ get_rule_last_audited_at() {
90
90
  local rule_file="$1"
91
91
  # Extract relative path from .claude/rules/
92
92
  local rule_name="${rule_file#.claude/rules/}"
93
93
  if [ ! -f "$RULE_STATE_FILE" ]; then echo ""; return; fi
94
- node -e "try{const d=JSON.parse(require('fs').readFileSync('$RULE_STATE_FILE','utf-8'));console.log((d.rules&&d.rules['$rule_name']&&d.rules['$rule_name'].timestamp)||'')}catch{console.log('')}"
94
+ node -e "try{const d=JSON.parse(require('fs').readFileSync('$RULE_STATE_FILE','utf-8'));console.log((d.rules&&d.rules['$rule_name']&&d.rules['$rule_name'].lastAuditedAt)||'')}catch{console.log('')}"
95
95
  }
96
96
 
97
97
  # Parse paths from YAML frontmatter
@@ -117,14 +117,14 @@ while IFS= read -r rule_file; do
117
117
  fi
118
118
  CHECKED_RULES="$CHECKED_RULES $rule_file"
119
119
 
120
- rule_timestamp=$(get_rule_timestamp "$rule_file")
120
+ rule_last_audited=$(get_rule_last_audited_at "$rule_file")
121
121
 
122
- # Skip rules without timestamp
123
- if [ -z "$rule_timestamp" ]; then
122
+ # Skip rules without lastAuditedAt
123
+ if [ -z "$rule_last_audited" ]; then
124
124
  continue
125
125
  fi
126
126
 
127
- rule_epoch=$(timestamp_to_epoch "$rule_timestamp")
127
+ rule_epoch=$(iso_to_epoch "$rule_last_audited")
128
128
 
129
129
  if [ "$rule_epoch" = "0" ]; then
130
130
  continue
@@ -155,7 +155,7 @@ while IFS= read -r rule_file; do
155
155
  # Get file modification time
156
156
  file_epoch=$(get_file_mtime "$staged_file")
157
157
 
158
- # If file is newer than rule timestamp, flag it
158
+ # If file is newer than rule's lastAuditedAt, flag it
159
159
  if [ "$file_epoch" -gt "$rule_epoch" ]; then
160
160
  rule_is_outdated=true
161
161
  matched_file="$staged_file"
@@ -179,13 +179,13 @@ if [ -n "$OUTDATED_RULES" ]; then
179
179
  echo " Claude Rules (Codeyam Memory): Outdated Documentation Detected"
180
180
  echo "================================================================"
181
181
  echo ""
182
- echo " The following rules have timestamps older than the code"
183
- echo " files they cover:"
182
+ echo " The following rules were last audited before recent code"
183
+ echo " changes to the files they cover:"
184
184
  echo "$OUTDATED_RULES"
185
185
  echo ""
186
186
  echo " To proceed:"
187
187
  echo " 1. Review each rule to ensure it's still accurate"
188
- echo " 2. Run 'codeyam memory touch' to update timestamps"
188
+ echo " 2. Run 'codeyam memory touch' to mark them as audited"
189
189
  echo " 3. Stage the updated .claude/codeyam-rule-state.json"
190
190
  echo " 4. Commit again"
191
191
  echo ""
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: codeyam:memory
2
+ name: codeyam-memory
3
3
  autoApprove: true
4
4
  description: |
5
5
  Generate and maintain Claude Rules for your codebase based on thorough analysis.
@@ -13,19 +13,14 @@ This skill helps you generate and maintain Claude Rules (`.claude/rules/`) that
13
13
 
14
14
  ## Core Principle: Document Confusion, Not Information
15
15
 
16
- **Good rules** explain things that are NOT obvious from reading the code:
16
+ **Valuable rules** capture knowledge that reading the code alone wouldn't reveal:
17
17
 
18
18
  - Historical context (why code evolved this way)
19
19
  - Hidden relationships (files that must change together)
20
20
  - Gotchas that caused bugs
21
21
  - Non-obvious conventions
22
22
 
23
- **Bad rules** document things Claude can easily ascertain:
24
-
25
- - What functions do (Claude can read the code)
26
- - Type definitions (Claude can see them)
27
- - Directory structure (Claude can explore it)
28
- - Basic patterns (Claude knows common patterns)
23
+ Skip documenting things Claude can determine by reading code: function signatures, type definitions, directory structure, and common patterns.
29
24
 
30
25
  ## When to Use This Skill
31
26
 
@@ -41,7 +36,9 @@ Check if this is the first time running memory.
41
36
 
42
37
  ### 1A. Add Documentation Section to CLAUDE.md
43
38
 
44
- If CLAUDE.md doesn't contain a "When Confused / With Mistakes" section, add close to the top:
39
+ If CLAUDE.md already contains a "Documenting Confusion / Mistakes" section, skip this step entirely.
40
+
41
+ Otherwise, add **only** the section below — do not modify or add any other content to CLAUDE.md. If CLAUDE.md doesn't exist, create it with just a `# Project` heading followed by this section:
45
42
 
46
43
  ```markdown
47
44
  ## Continuous Documentation
@@ -61,6 +58,8 @@ It is very important to document any tribal knowledge, complex architectural dec
61
58
  Please see `.codeyam/rules/instructions.md` for guidance.
62
59
  ```
63
60
 
61
+ **Important:** Do not add project descriptions, architecture summaries, or any other content to CLAUDE.md. Only add the exact section above.
62
+
64
63
  ### 1B. Verify Instructions File
65
64
 
66
65
  Check that `.codeyam/rules/instructions.md` exists (it should be created during `codeyam init`). If missing, copy it from `codeyam-cli/templates/rules-instructions.md`.
@@ -275,7 +274,7 @@ Before generating each rule, verify it passes these tests:
275
274
 
276
275
  **2. Code-derivable check**: Read the files the rule will cover. Could the rule's content be determined by reading those files alone?
277
276
 
278
- - If YES → rule probably not needed (Claude can read the code)
277
+ - If YES → the code is its own documentation prefer keeping rules for non-derivable insights
279
278
  - If NO (historical context, edge cases, non-obvious behavior) → rule is valuable
280
279
 
281
280
  **3. Prevention check**: Would this rule have prevented one of the confusion commits you found?
@@ -301,7 +300,7 @@ This caused a bug where `entity` matched `entityCode` (siblings, not parent-chil
301
300
  - Not code-derivable: Code doesn't explain why boundary checking matters
302
301
  - Prevention: Would prevent future prefix-matching bugs
303
302
 
304
- **❌ Bad rule** (fails tests):
303
+ **Compare with a weaker alternative** (fails the checks):
305
304
 
306
305
  ```markdown
307
306
  ## Running Tests
@@ -309,9 +308,7 @@ This caused a bug where `entity` matched `entityCode` (siblings, not parent-chil
309
308
  Use `pnpm jest` to run tests. Configuration is in `jest.config.ts`.
310
309
  ```
311
310
 
312
- - No confusion evidence (no commits showing people struggled with this)
313
- - Code-derivable: Anyone can see `jest.config.ts` exists
314
- - Doesn't prevent any confusion
311
+ - No confusion evidence, code-derivable, and wouldn't prevent future mistakes
315
312
 
316
313
  ### 5B. Rule File Guidelines
317
314
 
@@ -319,17 +316,13 @@ Use `pnpm jest` to run tests. Configuration is in `jest.config.ts`.
319
316
  - Rule for `src/api/` → `.claude/rules/src/api/architecture.md`
320
317
  - Rule for testing patterns → `.claude/rules/testing-patterns.md`
321
318
 
322
- 2. **Paths must be specific**
323
- - Good: `paths: ['src/api/**/*.ts']`
324
- - Bad: `paths: ['**/*.ts']` (too broad, wastes context)
319
+ 2. **Paths must be specific** — use `paths: ['src/api/**/*.ts']` rather than `'**/*.ts'` (too broad wastes context)
325
320
 
326
321
  3. **Content should explain "why" not just "what"**
327
322
  - Focus on the reasoning, history, or gotcha
328
323
  - Be concise - every word costs context
329
324
 
330
- 4. **Timestamp must be current**
331
- - Use ISO 8601 format: `2026-01-27T15:30:00Z`
332
- - This enables the pre-commit hook enforcement
325
+ 4. **Audit dates live in `.claude/codeyam-rule-state.json`** (managed by `codeyam memory touch`). Keep rule frontmatter limited to `paths`.
333
326
 
334
327
  ### Rule Template
335
328
 
@@ -337,7 +330,6 @@ Use `pnpm jest` to run tests. Configuration is in `jest.config.ts`.
337
330
  ---
338
331
  paths:
339
332
  - 'specific/path/**/*.ts'
340
- timestamp: [CURRENT_ISO_TIMESTAMP]
341
333
  ---
342
334
 
343
335
  ## [Clear, Descriptive Title]
@@ -374,7 +366,7 @@ After generating rules based on your analysis and user answers:
374
366
  5. **Remind the user** to commit the new rules:
375
367
  ```
376
368
  git add .claude/rules/ .codeyam/rules/
377
- git commit -m "Add rules for Claude Code (generated via /codeyam:memory)"
369
+ git commit -m "Add rules for Claude Code (generated via /codeyam-memory)"
378
370
  ```
379
371
 
380
372
  ---
@@ -394,11 +386,11 @@ After generating rules based on your analysis and user answers:
394
386
  The pre-commit hook **blocks commits** when:
395
387
 
396
388
  - Code files matching a rule's `paths` are modified
397
- - The rule's `timestamp` is older than the code changes
389
+ - The rule's `lastAuditedAt` in `.claude/codeyam-rule-state.json` is older than the code changes
398
390
 
399
391
  To proceed:
400
392
 
401
393
  1. Review the flagged rule(s)
402
394
  2. Update content if needed
403
- 3. Update the `timestamp` to current time
395
+ 3. Run `codeyam memory touch` to mark rules as audited in `.claude/codeyam-rule-state.json`
404
396
  4. Stage and commit
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: codeyam:new-rule
2
+ name: codeyam-new-rule
3
3
  autoApprove: true
4
4
  description: |
5
5
  Create a new Claude Rule for documenting codebase patterns.
@@ -9,5 +9,3 @@ description: |
9
9
  # Create New Claude Rule
10
10
 
11
11
  Read `.codeyam/rules/instructions.md` for detailed guidance on structure and formatting.
12
-
13
- If the instructions file doesn't exist, copy it from `codeyam-cli/templates/rules-instructions.md`.
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: codeyam:setup
2
+ name: codeyam-setup
3
3
  autoApprove: true
4
4
  description: |
5
5
  Use this skill when the user asks to "setup CodeYam" or needs to configure CodeYam for their project.
@@ -52,6 +52,18 @@ codeyam validate-mock .codeyam/universal-mocks/{path-to-your-mock}
52
52
 
53
53
  ## Setup Workflow
54
54
 
55
+ ### Step 0: Ensure Simulation Infrastructure
56
+
57
+ Before configuring the dev server or mocks, ensure the simulation infrastructure is installed.
58
+
59
+ ```bash
60
+ codeyam setup-simulations
61
+ ```
62
+
63
+ This is **idempotent** — if already set up, each step is detected and skipped. On first run it installs analyzer dependencies, Playwright chromium, and creates baseline entities (several minutes). Subsequent runs complete in seconds.
64
+
65
+ If it fails with "No web applications found", the project doesn't support simulations — inform the user and stop.
66
+
55
67
  ### Step 1: Configure Webapp Start Command
56
68
 
57
69
  **ACTION 1:** Read configuration files:
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: codeyam:sim
2
+ name: codeyam-sim
3
3
  autoApprove: true
4
4
  description: |
5
5
  Use this skill to create interactive simulations of components and functions using CodeYam's analysis.
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: codeyam:test
2
+ name: codeyam-test
3
3
  autoApprove: true
4
4
  description: |
5
5
  Use this skill to write comprehensive unit and integration tests using CodeYam's mock generation.
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: codeyam:verify
2
+ name: codeyam-verify
3
3
  autoApprove: true
4
4
  description: |
5
5
  Use this skill after making code changes that impact application functionality.
@@ -0,0 +1,143 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ PostToolUse + Stop hook for editor mode step tracking.
4
+
5
+ Reads .codeyam/editor-step.json and prints a reminder about the current step.
6
+ Logs each firing to .codeyam/logs/editor-log.jsonl.
7
+ If no state file exists, outputs nothing (not in editor mode or between features).
8
+ """
9
+
10
+ import json
11
+ import os
12
+ import sys
13
+ from datetime import datetime, timezone
14
+
15
+
16
+ STEP_LABELS = {
17
+ 1: "Plan",
18
+ 2: "Prototype",
19
+ 3: "Confirm",
20
+ 4: "Deconstruct",
21
+ 5: "Glossary",
22
+ 6: "Analyze",
23
+ 7: "App Scenarios",
24
+ 8: "User Scenarios",
25
+ 9: "Verify",
26
+ 10: "Review",
27
+ }
28
+
29
+ STEP_RESTRICTIONS = {
30
+ 1: "Do NOT write any code. Plan and describe only. Wait for user confirmation.",
31
+ 2: "Do NOT create scenarios or run codeyam analyze. Build fast — working prototype with real data.",
32
+ 3: "Present a selection menu (AskUserQuestion) for confirmation. Do NOT refactor or create scenarios until approved.",
33
+ 4: "Do NOT create scenarios. Write a failing test FIRST, then extract. TDD only.",
34
+ 5: "Do NOT write application code or scenarios. Update the glossary only.",
35
+ 6: "Run codeyam analyze for each file. Verify all pass. Fix any failures before proceeding.",
36
+ 7: "Do NOT modify application code. Create and register app-level scenarios only.",
37
+ 8: "Do NOT modify application code. Create user-persona scenarios only (or skip if no users).",
38
+ 9: "Verify entity screenshots (/api/editor-entity-status) AND editor scenarios. After ANY code fix, re-run codeyam analyze on affected files. Fix only — do NOT add features.",
39
+ 10: "Verify ALL screenshots exist and NO client-side errors (/api/editor-client-errors), then present selection menu (AskUserQuestion): Save or make changes.",
40
+ }
41
+
42
+
43
+ def log_event(project_dir, event, data=None):
44
+ """Append a JSONL entry to .codeyam/logs/editor-log.jsonl."""
45
+ try:
46
+ logs_dir = os.path.join(project_dir, ".codeyam", "logs")
47
+ os.makedirs(logs_dir, exist_ok=True)
48
+ log_path = os.path.join(logs_dir, "editor-log.jsonl")
49
+ entry = {"ts": datetime.now(timezone.utc).isoformat(), "event": event}
50
+ if data:
51
+ entry.update(data)
52
+ with open(log_path, "a") as f:
53
+ f.write(json.dumps(entry) + "\n")
54
+ except Exception:
55
+ pass # Logging is best-effort
56
+
57
+
58
+ def detect_event():
59
+ """Detect whether this is a PostToolUse or Stop hook from stdin."""
60
+ try:
61
+ raw = sys.stdin.read()
62
+ if not raw.strip():
63
+ return "unknown", {}
64
+ data = json.loads(raw)
65
+ # PostToolUse has tool_name; Stop has stop_hook_active
66
+ if "tool_name" in data:
67
+ return "post_tool_use", data
68
+ elif "stop_hook_active" in data:
69
+ return "stop", data
70
+ return "unknown", data
71
+ except Exception:
72
+ return "unknown", {}
73
+
74
+
75
+ def main():
76
+ project_dir = os.environ.get("CLAUDE_PROJECT_DIR", os.getcwd())
77
+ state_path = os.path.join(project_dir, ".codeyam", "editor-step.json")
78
+
79
+ if not os.path.exists(state_path):
80
+ return
81
+
82
+ try:
83
+ with open(state_path, "r") as f:
84
+ state = json.load(f)
85
+ except (json.JSONDecodeError, IOError):
86
+ return
87
+
88
+ step = state.get("step")
89
+ label = state.get("label", "Unknown")
90
+ feature = state.get("feature", "")
91
+
92
+ if not step:
93
+ return
94
+
95
+ event_type, event_data = detect_event()
96
+
97
+ # Log the hook firing
98
+ log_data = {"step": step, "label": label, "feature": feature, "hook": event_type}
99
+ if event_type == "post_tool_use":
100
+ log_data["tool"] = event_data.get("tool_name", "")
101
+ log_event(project_dir, "hook", log_data)
102
+
103
+ restriction = STEP_RESTRICTIONS.get(step, "")
104
+ next_cmd = f"codeyam editor {step + 1}" if step < 10 else "codeyam editor 1"
105
+
106
+ lines = [
107
+ f'Editor Mode \u2014 Step {step} ({label}): "{feature}"',
108
+ ]
109
+ if restriction:
110
+ lines.append(restriction)
111
+
112
+ if event_type == "stop":
113
+ # Build colored progress tracker using ANSI escape codes
114
+ GREEN = "\033[32m"
115
+ BOLD_CYAN = "\033[1;36m"
116
+ DIM = "\033[2m"
117
+ RESET = "\033[0m"
118
+ tracker = [f"{DIM} \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510{RESET}"]
119
+ for i in range(1, 11):
120
+ lbl = STEP_LABELS[i].ljust(28)
121
+ num = f" {i}" if i < 10 else f"{i}"
122
+ content = f"{num}. {lbl}"
123
+ if i < step:
124
+ tracker.append(f"{DIM} \u2502{RESET}{GREEN} \u2713 {content}{RESET}{DIM}\u2502{RESET}")
125
+ elif i == step:
126
+ tracker.append(f"{DIM} \u2502{RESET}{BOLD_CYAN} \u2192 {content}{RESET}{DIM}\u2502{RESET}")
127
+ else:
128
+ tracker.append(f"{DIM} \u2502 \u25cb {content}\u2502{RESET}")
129
+ tracker.append(f"{DIM} \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518{RESET}")
130
+ lines.append("Present this progress tracker to the user (copy verbatim):")
131
+ lines.extend(tracker)
132
+ lines.append(
133
+ "For the CURRENT step (\u2192), show each checklist item with "
134
+ "\u2713 (done) or \u2717 (skipped + reason)."
135
+ )
136
+
137
+ lines.append(f"When this step is complete, run: {next_cmd}")
138
+
139
+ print("\n".join(lines))
140
+
141
+
142
+ if __name__ == "__main__":
143
+ main()
@@ -0,0 +1,43 @@
1
+ #!/bin/bash
2
+ # Staleness check hook - runs after file edits to check if related rules need review
3
+ # Receives JSON input via stdin with tool info
4
+
5
+ set -e
6
+
7
+ # Read the input JSON
8
+ INPUT=$(cat)
9
+
10
+ # Extract the file path that was edited
11
+ FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path // .tool_input.path // empty' 2>/dev/null)
12
+
13
+ if [ -z "$FILE_PATH" ]; then
14
+ exit 0 # No file path, nothing to check
15
+ fi
16
+
17
+ # Find rules that match this file path
18
+ RULES_DIR="${CLAUDE_PROJECT_DIR}/.claude/rules"
19
+
20
+ if [ ! -d "$RULES_DIR" ]; then
21
+ exit 0 # No rules directory
22
+ fi
23
+
24
+ # Search for rules whose paths might match the edited file
25
+ MATCHING_RULES=""
26
+ while IFS= read -r -d '' rule_file; do
27
+ # Extract paths from frontmatter
28
+ PATHS=$(sed -n '/^---$/,/^---$/p' "$rule_file" | grep -E "^\s*-\s*'" | sed "s/.*'\(.*\)'.*/\1/")
29
+
30
+ for pattern in $PATHS; do
31
+ # Simple check if the file might match the pattern
32
+ if [[ "$FILE_PATH" == *"${pattern%%\**}"* ]]; then
33
+ MATCHING_RULES="$MATCHING_RULES\n- $(basename "$rule_file")"
34
+ break
35
+ fi
36
+ done
37
+ done < <(find "$RULES_DIR" -name "*.md" -print0 2>/dev/null)
38
+
39
+ if [ -n "$MATCHING_RULES" ]; then
40
+ echo "📋 Modified file may have related rules that need review:$MATCHING_RULES"
41
+ fi
42
+
43
+ exit 0
@@ -0,0 +1,80 @@
1
+ /**
2
+ * CodeYam Isolation Route — Next.js App Router
3
+ *
4
+ * Place this file at: app/__codeyam__/[component]/[scenario]/page.tsx
5
+ *
6
+ * This route dynamically imports a component and renders it with mock data
7
+ * from the specified scenario, enabling isolated component preview.
8
+ *
9
+ * Usage: http://localhost:3000/__codeyam__/TaskCard/Default
10
+ */
11
+ 'use client';
12
+
13
+ import { useEffect, useState } from 'react';
14
+ import { useParams } from 'next/navigation';
15
+
16
+ interface ScenarioData {
17
+ mockData: Record<string, unknown>;
18
+ }
19
+
20
+ export default function CodeYamIsolationPage() {
21
+ const params = useParams();
22
+ const componentName = params.component as string;
23
+ const scenarioSlug = params.scenario as string;
24
+
25
+ const [Component, setComponent] = useState<React.ComponentType<any> | null>(null);
26
+ const [mockData, setMockData] = useState<Record<string, unknown> | null>(null);
27
+ const [error, setError] = useState<string | null>(null);
28
+
29
+ useEffect(() => {
30
+ async function loadComponent() {
31
+ try {
32
+ // Fetch scenario data from CodeYam API
33
+ const res = await fetch(
34
+ `http://localhost:${process.env.NEXT_PUBLIC_CODEYAM_PORT || '3111'}/api/editor-scenario-data?component=${componentName}&scenario=${scenarioSlug}`
35
+ );
36
+ if (res.ok) {
37
+ const data: ScenarioData = await res.json();
38
+ setMockData(data.mockData);
39
+ }
40
+
41
+ // Try to dynamically import the component
42
+ // Claude should update this mapping when adding new components
43
+ const componentModules: Record<string, () => Promise<any>> = {
44
+ // Example: 'TaskCard': () => import('@/components/TaskCard'),
45
+ };
46
+
47
+ const loader = componentModules[componentName];
48
+ if (loader) {
49
+ const mod = await loader();
50
+ setComponent(() => mod.default || mod[componentName]);
51
+ } else {
52
+ setError(`Component "${componentName}" not registered in isolation route`);
53
+ }
54
+ } catch (err) {
55
+ setError(`Failed to load component: ${err}`);
56
+ }
57
+ }
58
+
59
+ void loadComponent();
60
+ }, [componentName, scenarioSlug]);
61
+
62
+ if (error) {
63
+ return (
64
+ <div style={{ padding: 24, fontFamily: 'monospace', color: '#e74c3c' }}>
65
+ <h2>CodeYam Isolation Error</h2>
66
+ <p>{error}</p>
67
+ </div>
68
+ );
69
+ }
70
+
71
+ if (!Component || !mockData) {
72
+ return (
73
+ <div style={{ padding: 24, fontFamily: 'monospace', color: '#666' }}>
74
+ Loading {componentName} / {scenarioSlug}...
75
+ </div>
76
+ );
77
+ }
78
+
79
+ return <Component {...mockData} />;
80
+ }
@@ -0,0 +1,79 @@
1
+ /**
2
+ * CodeYam Isolation Route — Next.js Pages Router
3
+ *
4
+ * Place this file at: pages/__codeyam__/[component]/[scenario].tsx
5
+ *
6
+ * This route dynamically imports a component and renders it with mock data
7
+ * from the specified scenario, enabling isolated component preview.
8
+ *
9
+ * Usage: http://localhost:3000/__codeyam__/TaskCard/Default
10
+ */
11
+ import { useRouter } from 'next/router';
12
+ import { useEffect, useState } from 'react';
13
+
14
+ interface ScenarioData {
15
+ mockData: Record<string, unknown>;
16
+ }
17
+
18
+ export default function CodeYamIsolationPage() {
19
+ const router = useRouter();
20
+ const { component: componentName, scenario: scenarioSlug } = router.query;
21
+
22
+ const [Component, setComponent] = useState<React.ComponentType<any> | null>(null);
23
+ const [mockData, setMockData] = useState<Record<string, unknown> | null>(null);
24
+ const [error, setError] = useState<string | null>(null);
25
+
26
+ useEffect(() => {
27
+ if (!componentName || !scenarioSlug) return;
28
+
29
+ async function loadComponent() {
30
+ try {
31
+ // Fetch scenario data from CodeYam API
32
+ const res = await fetch(
33
+ `http://localhost:${process.env.NEXT_PUBLIC_CODEYAM_PORT || '3111'}/api/editor-scenario-data?component=${componentName}&scenario=${scenarioSlug}`
34
+ );
35
+ if (res.ok) {
36
+ const data: ScenarioData = await res.json();
37
+ setMockData(data.mockData);
38
+ }
39
+
40
+ // Try to dynamically import the component
41
+ // Claude should update this mapping when adding new components
42
+ const componentModules: Record<string, () => Promise<any>> = {
43
+ // Example: 'TaskCard': () => import('../components/TaskCard'),
44
+ };
45
+
46
+ const loader = componentModules[componentName as string];
47
+ if (loader) {
48
+ const mod = await loader();
49
+ setComponent(() => mod.default || mod[componentName as string]);
50
+ } else {
51
+ setError(`Component "${componentName}" not registered in isolation route`);
52
+ }
53
+ } catch (err) {
54
+ setError(`Failed to load component: ${err}`);
55
+ }
56
+ }
57
+
58
+ void loadComponent();
59
+ }, [componentName, scenarioSlug]);
60
+
61
+ if (error) {
62
+ return (
63
+ <div style={{ padding: 24, fontFamily: 'monospace', color: '#e74c3c' }}>
64
+ <h2>CodeYam Isolation Error</h2>
65
+ <p>{error}</p>
66
+ </div>
67
+ );
68
+ }
69
+
70
+ if (!Component || !mockData) {
71
+ return (
72
+ <div style={{ padding: 24, fontFamily: 'monospace', color: '#666' }}>
73
+ Loading {componentName} / {scenarioSlug}...
74
+ </div>
75
+ );
76
+ }
77
+
78
+ return <Component {...mockData} />;
79
+ }