@codeyam/codeyam-cli 0.1.0-staging.62d4615 → 0.1.0-staging.693b02d

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 (1011) hide show
  1. package/analyzer-template/.build-info.json +8 -8
  2. package/analyzer-template/log.txt +3 -3
  3. package/analyzer-template/package.json +24 -24
  4. package/analyzer-template/packages/ai/index.ts +1 -0
  5. package/analyzer-template/packages/ai/package.json +3 -3
  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/methodSemantics.ts +135 -0
  9. package/analyzer-template/packages/ai/src/lib/astScopes/nodeToSource.ts +19 -0
  10. package/analyzer-template/packages/ai/src/lib/astScopes/paths.ts +11 -4
  11. package/analyzer-template/packages/ai/src/lib/astScopes/processExpression.ts +101 -0
  12. package/analyzer-template/packages/ai/src/lib/astScopes/sharedPatterns.ts +28 -0
  13. package/analyzer-template/packages/ai/src/lib/astScopes/types.ts +6 -0
  14. package/analyzer-template/packages/ai/src/lib/completionCall.ts +114 -113
  15. package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +471 -22
  16. package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/ParentScopeManager.ts +10 -3
  17. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.ts +16 -6
  18. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/coercePrimitivesToArraysBySchema.ts +62 -0
  19. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.ts +70 -13
  20. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/stripNullableMarkers.ts +35 -0
  21. package/analyzer-template/packages/ai/src/lib/dataStructureChunking.ts +40 -13
  22. package/analyzer-template/packages/ai/src/lib/generateEntityScenarioData.ts +110 -7
  23. package/analyzer-template/packages/ai/src/lib/generateExecutionFlows.ts +101 -2
  24. package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionals.ts +359 -142
  25. package/analyzer-template/packages/ai/src/lib/mergeJsonTypeDefinitions.ts +5 -0
  26. package/analyzer-template/packages/ai/src/lib/promptGenerators/collapseNullableObjects.ts +118 -0
  27. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.ts +24 -4
  28. package/analyzer-template/packages/analyze/index.ts +4 -1
  29. package/analyzer-template/packages/analyze/src/lib/ProjectAnalyzer.ts +19 -7
  30. package/analyzer-template/packages/analyze/src/lib/asts/index.ts +7 -2
  31. package/analyzer-template/packages/analyze/src/lib/asts/nodes/getNodeType.ts +1 -0
  32. package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.ts +46 -2
  33. package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities.ts +14 -37
  34. package/analyzer-template/packages/analyze/src/lib/files/analyze/dependencyResolver.ts +0 -6
  35. package/analyzer-template/packages/analyze/src/lib/files/analyze/findOrCreateEntity.ts +22 -6
  36. package/analyzer-template/packages/analyze/src/lib/files/analyze/gatherEntityMap.ts +9 -12
  37. package/analyzer-template/packages/analyze/src/lib/files/analyze/trackEntityCircularDependencies.ts +21 -0
  38. package/analyzer-template/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.ts +82 -10
  39. package/analyzer-template/packages/analyze/src/lib/files/analyzeChange.ts +4 -0
  40. package/analyzer-template/packages/analyze/src/lib/files/analyzeInitial.ts +4 -0
  41. package/analyzer-template/packages/analyze/src/lib/files/analyzeNextRoute.ts +8 -3
  42. package/analyzer-template/packages/analyze/src/lib/files/scenarios/TransformationTracer.ts +65 -28
  43. package/analyzer-template/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.ts +50 -25
  44. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +322 -58
  45. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.ts +0 -98
  46. package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +1712 -1394
  47. package/analyzer-template/packages/aws/package.json +10 -10
  48. package/analyzer-template/packages/database/index.ts +1 -0
  49. package/analyzer-template/packages/database/package.json +4 -4
  50. package/analyzer-template/packages/database/src/lib/analysisBranchToDb.ts +1 -1
  51. package/analyzer-template/packages/database/src/lib/analysisToDb.ts +1 -1
  52. package/analyzer-template/packages/database/src/lib/branchToDb.ts +1 -1
  53. package/analyzer-template/packages/database/src/lib/commitBranchToDb.ts +1 -1
  54. package/analyzer-template/packages/database/src/lib/commitToDb.ts +1 -1
  55. package/analyzer-template/packages/database/src/lib/fileToDb.ts +1 -1
  56. package/analyzer-template/packages/database/src/lib/kysely/db.ts +14 -0
  57. package/analyzer-template/packages/database/src/lib/kysely/tables/debugReportsTable.ts +1 -1
  58. package/analyzer-template/packages/database/src/lib/kysely/tables/editorScenariosTable.ts +164 -0
  59. package/analyzer-template/packages/database/src/lib/kysely/tables/labsRequestsTable.ts +52 -0
  60. package/analyzer-template/packages/database/src/lib/loadAnalysis.ts +25 -15
  61. package/analyzer-template/packages/database/src/lib/loadCommits.ts +31 -20
  62. package/analyzer-template/packages/database/src/lib/loadEntities.ts +0 -6
  63. package/analyzer-template/packages/database/src/lib/loadEntity.ts +19 -8
  64. package/analyzer-template/packages/database/src/lib/loadReadyToBeCapturedAnalyses.ts +0 -5
  65. package/analyzer-template/packages/database/src/lib/projectToDb.ts +1 -1
  66. package/analyzer-template/packages/database/src/lib/saveFiles.ts +1 -1
  67. package/analyzer-template/packages/database/src/lib/scenarioToDb.ts +1 -1
  68. package/analyzer-template/packages/database/src/lib/updateCommitMetadata.ts +94 -143
  69. package/analyzer-template/packages/database/src/lib/updateFreshAnalysisStatus.ts +58 -42
  70. package/analyzer-template/packages/database/src/lib/updateFreshAnalysisStatusWithScenarios.ts +81 -65
  71. package/analyzer-template/packages/database/src/lib/userScenarioToDb.ts +1 -1
  72. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.ts +29 -1
  73. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.ts +33 -5
  74. package/analyzer-template/packages/github/dist/database/index.d.ts +1 -0
  75. package/analyzer-template/packages/github/dist/database/index.d.ts.map +1 -1
  76. package/analyzer-template/packages/github/dist/database/index.js +1 -0
  77. package/analyzer-template/packages/github/dist/database/index.js.map +1 -1
  78. package/analyzer-template/packages/github/dist/database/src/lib/analysisBranchToDb.js +1 -1
  79. package/analyzer-template/packages/github/dist/database/src/lib/analysisBranchToDb.js.map +1 -1
  80. package/analyzer-template/packages/github/dist/database/src/lib/analysisToDb.js +1 -1
  81. package/analyzer-template/packages/github/dist/database/src/lib/analysisToDb.js.map +1 -1
  82. package/analyzer-template/packages/github/dist/database/src/lib/branchToDb.js +1 -1
  83. package/analyzer-template/packages/github/dist/database/src/lib/branchToDb.js.map +1 -1
  84. package/analyzer-template/packages/github/dist/database/src/lib/commitBranchToDb.js +1 -1
  85. package/analyzer-template/packages/github/dist/database/src/lib/commitBranchToDb.js.map +1 -1
  86. package/analyzer-template/packages/github/dist/database/src/lib/commitToDb.js +1 -1
  87. package/analyzer-template/packages/github/dist/database/src/lib/commitToDb.js.map +1 -1
  88. package/analyzer-template/packages/github/dist/database/src/lib/fileToDb.js +1 -1
  89. package/analyzer-template/packages/github/dist/database/src/lib/fileToDb.js.map +1 -1
  90. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts +4 -0
  91. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts.map +1 -1
  92. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js +8 -0
  93. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js.map +1 -1
  94. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.d.ts +1 -1
  95. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.d.ts +29 -0
  96. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.d.ts.map +1 -0
  97. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.js +149 -0
  98. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -0
  99. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/labsRequestsTable.d.ts +23 -0
  100. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/labsRequestsTable.d.ts.map +1 -0
  101. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/labsRequestsTable.js +35 -0
  102. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/labsRequestsTable.js.map +1 -0
  103. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts +5 -0
  104. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts.map +1 -1
  105. package/analyzer-template/packages/github/dist/database/src/lib/loadAnalysis.d.ts.map +1 -1
  106. package/analyzer-template/packages/github/dist/database/src/lib/loadAnalysis.js +7 -1
  107. package/analyzer-template/packages/github/dist/database/src/lib/loadAnalysis.js.map +1 -1
  108. package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.d.ts.map +1 -1
  109. package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.js +23 -13
  110. package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.js.map +1 -1
  111. package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.d.ts.map +1 -1
  112. package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.js +0 -6
  113. package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.js.map +1 -1
  114. package/analyzer-template/packages/github/dist/database/src/lib/loadEntity.d.ts +4 -1
  115. package/analyzer-template/packages/github/dist/database/src/lib/loadEntity.d.ts.map +1 -1
  116. package/analyzer-template/packages/github/dist/database/src/lib/loadEntity.js +5 -5
  117. package/analyzer-template/packages/github/dist/database/src/lib/loadEntity.js.map +1 -1
  118. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.d.ts.map +1 -1
  119. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.js +1 -4
  120. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.js.map +1 -1
  121. package/analyzer-template/packages/github/dist/database/src/lib/projectToDb.js +1 -1
  122. package/analyzer-template/packages/github/dist/database/src/lib/projectToDb.js.map +1 -1
  123. package/analyzer-template/packages/github/dist/database/src/lib/saveFiles.js +1 -1
  124. package/analyzer-template/packages/github/dist/database/src/lib/saveFiles.js.map +1 -1
  125. package/analyzer-template/packages/github/dist/database/src/lib/scenarioToDb.js +1 -1
  126. package/analyzer-template/packages/github/dist/database/src/lib/scenarioToDb.js.map +1 -1
  127. package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.d.ts.map +1 -1
  128. package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js +76 -90
  129. package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js.map +1 -1
  130. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatus.d.ts.map +1 -1
  131. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatus.js +41 -30
  132. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatus.js.map +1 -1
  133. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatusWithScenarios.d.ts.map +1 -1
  134. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatusWithScenarios.js +68 -57
  135. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatusWithScenarios.js.map +1 -1
  136. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.d.ts.map +1 -1
  137. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js +29 -1
  138. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js.map +1 -1
  139. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.d.ts.map +1 -1
  140. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +33 -5
  141. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
  142. package/analyzer-template/packages/github/dist/types/src/enums/ProjectFramework.d.ts +2 -0
  143. package/analyzer-template/packages/github/dist/types/src/enums/ProjectFramework.d.ts.map +1 -1
  144. package/analyzer-template/packages/github/dist/types/src/enums/ProjectFramework.js +2 -0
  145. package/analyzer-template/packages/github/dist/types/src/enums/ProjectFramework.js.map +1 -1
  146. package/analyzer-template/packages/github/dist/types/src/types/ProjectMetadata.d.ts +5 -0
  147. package/analyzer-template/packages/github/dist/types/src/types/ProjectMetadata.d.ts.map +1 -1
  148. package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts +10 -0
  149. package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts.map +1 -1
  150. package/analyzer-template/packages/github/package.json +1 -1
  151. package/analyzer-template/packages/types/src/enums/ProjectFramework.ts +2 -0
  152. package/analyzer-template/packages/types/src/types/ProjectMetadata.ts +8 -1
  153. package/analyzer-template/packages/types/src/types/Scenario.ts +10 -0
  154. package/analyzer-template/packages/ui-components/package.json +1 -1
  155. package/analyzer-template/packages/utils/dist/types/src/enums/ProjectFramework.d.ts +2 -0
  156. package/analyzer-template/packages/utils/dist/types/src/enums/ProjectFramework.d.ts.map +1 -1
  157. package/analyzer-template/packages/utils/dist/types/src/enums/ProjectFramework.js +2 -0
  158. package/analyzer-template/packages/utils/dist/types/src/enums/ProjectFramework.js.map +1 -1
  159. package/analyzer-template/packages/utils/dist/types/src/types/ProjectMetadata.d.ts +5 -0
  160. package/analyzer-template/packages/utils/dist/types/src/types/ProjectMetadata.d.ts.map +1 -1
  161. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts +10 -0
  162. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts.map +1 -1
  163. package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.d.ts +3 -1
  164. package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.d.ts.map +1 -1
  165. package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.js +120 -4
  166. package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.js.map +1 -1
  167. package/analyzer-template/packages/utils/src/lib/fs/rsyncCopy.ts +148 -3
  168. package/analyzer-template/playwright/captureFromUrl.ts +89 -82
  169. package/analyzer-template/project/analyzeFileEntities.ts +26 -0
  170. package/analyzer-template/project/constructMockCode.ts +170 -50
  171. package/analyzer-template/project/orchestrateCapture.ts +4 -1
  172. package/analyzer-template/project/reconcileMockDataKeys.ts +19 -14
  173. package/analyzer-template/project/runMultiScenarioServer.ts +26 -3
  174. package/analyzer-template/project/start.ts +3 -0
  175. package/analyzer-template/project/startScenarioCapture.ts +9 -0
  176. package/analyzer-template/project/writeClientLogRoute.ts +125 -0
  177. package/analyzer-template/project/writeMockDataTsx.ts +31 -6
  178. package/analyzer-template/project/writeScenarioComponents.ts +110 -17
  179. package/analyzer-template/tsconfig.json +13 -1
  180. package/background/src/lib/local/createLocalAnalyzer.js +1 -1
  181. package/background/src/lib/local/createLocalAnalyzer.js.map +1 -1
  182. package/background/src/lib/virtualized/project/analyzeFileEntities.js +22 -0
  183. package/background/src/lib/virtualized/project/analyzeFileEntities.js.map +1 -1
  184. package/background/src/lib/virtualized/project/constructMockCode.js +145 -41
  185. package/background/src/lib/virtualized/project/constructMockCode.js.map +1 -1
  186. package/background/src/lib/virtualized/project/orchestrateCapture.js +4 -1
  187. package/background/src/lib/virtualized/project/orchestrateCapture.js.map +1 -1
  188. package/background/src/lib/virtualized/project/reconcileMockDataKeys.js +17 -11
  189. package/background/src/lib/virtualized/project/reconcileMockDataKeys.js.map +1 -1
  190. package/background/src/lib/virtualized/project/runMultiScenarioServer.js +23 -3
  191. package/background/src/lib/virtualized/project/runMultiScenarioServer.js.map +1 -1
  192. package/background/src/lib/virtualized/project/start.js +2 -0
  193. package/background/src/lib/virtualized/project/start.js.map +1 -1
  194. package/background/src/lib/virtualized/project/startScenarioCapture.js +5 -0
  195. package/background/src/lib/virtualized/project/startScenarioCapture.js.map +1 -1
  196. package/background/src/lib/virtualized/project/writeClientLogRoute.js +110 -0
  197. package/background/src/lib/virtualized/project/writeClientLogRoute.js.map +1 -0
  198. package/background/src/lib/virtualized/project/writeMockDataTsx.js +25 -6
  199. package/background/src/lib/virtualized/project/writeMockDataTsx.js.map +1 -1
  200. package/background/src/lib/virtualized/project/writeScenarioComponents.js +83 -12
  201. package/background/src/lib/virtualized/project/writeScenarioComponents.js.map +1 -1
  202. package/codeyam-cli/scripts/apply-setup.js +209 -12
  203. package/codeyam-cli/scripts/apply-setup.js.map +1 -1
  204. package/codeyam-cli/src/__tests__/memory-scripts/filter-session.test.js +196 -0
  205. package/codeyam-cli/src/__tests__/memory-scripts/filter-session.test.js.map +1 -0
  206. package/codeyam-cli/src/__tests__/memory-scripts/read-json-field.test.js +114 -0
  207. package/codeyam-cli/src/__tests__/memory-scripts/read-json-field.test.js.map +1 -0
  208. package/codeyam-cli/src/__tests__/memory-scripts/ripgrep-fallback.test.js +149 -0
  209. package/codeyam-cli/src/__tests__/memory-scripts/ripgrep-fallback.test.js.map +1 -0
  210. package/codeyam-cli/src/cli.js +57 -24
  211. package/codeyam-cli/src/cli.js.map +1 -1
  212. package/codeyam-cli/src/codeyam-cli.js +18 -2
  213. package/codeyam-cli/src/codeyam-cli.js.map +1 -1
  214. package/codeyam-cli/src/commands/__tests__/editor.analyzeImportsArgs.test.js +47 -0
  215. package/codeyam-cli/src/commands/__tests__/editor.analyzeImportsArgs.test.js.map +1 -0
  216. package/codeyam-cli/src/commands/__tests__/editor.auditNoAutoAnalysis.test.js +71 -0
  217. package/codeyam-cli/src/commands/__tests__/editor.auditNoAutoAnalysis.test.js.map +1 -0
  218. package/codeyam-cli/src/commands/__tests__/editor.designSystem.test.js +30 -0
  219. package/codeyam-cli/src/commands/__tests__/editor.designSystem.test.js.map +1 -0
  220. package/codeyam-cli/src/commands/__tests__/editor.isolateArgs.test.js +51 -0
  221. package/codeyam-cli/src/commands/__tests__/editor.isolateArgs.test.js.map +1 -0
  222. package/codeyam-cli/src/commands/__tests__/editor.statePersistence.test.js +55 -0
  223. package/codeyam-cli/src/commands/__tests__/editor.statePersistence.test.js.map +1 -0
  224. package/codeyam-cli/src/commands/__tests__/editor.stepDispatch.test.js +56 -0
  225. package/codeyam-cli/src/commands/__tests__/editor.stepDispatch.test.js.map +1 -0
  226. package/codeyam-cli/src/commands/__tests__/init.gitignore.test.js +137 -47
  227. package/codeyam-cli/src/commands/__tests__/init.gitignore.test.js.map +1 -1
  228. package/codeyam-cli/src/commands/analyze.js +21 -9
  229. package/codeyam-cli/src/commands/analyze.js.map +1 -1
  230. package/codeyam-cli/src/commands/baseline.js +2 -0
  231. package/codeyam-cli/src/commands/baseline.js.map +1 -1
  232. package/codeyam-cli/src/commands/debug.js +2 -0
  233. package/codeyam-cli/src/commands/debug.js.map +1 -1
  234. package/codeyam-cli/src/commands/default.js +44 -21
  235. package/codeyam-cli/src/commands/default.js.map +1 -1
  236. package/codeyam-cli/src/commands/editor.js +6313 -0
  237. package/codeyam-cli/src/commands/editor.js.map +1 -0
  238. package/codeyam-cli/src/commands/editorAnalyzeImportsArgs.js +23 -0
  239. package/codeyam-cli/src/commands/editorAnalyzeImportsArgs.js.map +1 -0
  240. package/codeyam-cli/src/commands/editorIsolateArgs.js +25 -0
  241. package/codeyam-cli/src/commands/editorIsolateArgs.js.map +1 -0
  242. package/codeyam-cli/src/commands/init.js +168 -292
  243. package/codeyam-cli/src/commands/init.js.map +1 -1
  244. package/codeyam-cli/src/commands/memory.js +95 -81
  245. package/codeyam-cli/src/commands/memory.js.map +1 -1
  246. package/codeyam-cli/src/commands/recapture.js +2 -0
  247. package/codeyam-cli/src/commands/recapture.js.map +1 -1
  248. package/codeyam-cli/src/commands/setup-sandbox.js +2 -0
  249. package/codeyam-cli/src/commands/setup-sandbox.js.map +1 -1
  250. package/codeyam-cli/src/commands/setup-simulations.js +284 -0
  251. package/codeyam-cli/src/commands/setup-simulations.js.map +1 -0
  252. package/codeyam-cli/src/commands/telemetry.js +37 -0
  253. package/codeyam-cli/src/commands/telemetry.js.map +1 -0
  254. package/codeyam-cli/src/commands/test-startup.js +2 -0
  255. package/codeyam-cli/src/commands/test-startup.js.map +1 -1
  256. package/codeyam-cli/src/commands/verify.js +14 -2
  257. package/codeyam-cli/src/commands/verify.js.map +1 -1
  258. package/codeyam-cli/src/data/designSystems.js +27 -0
  259. package/codeyam-cli/src/data/designSystems.js.map +1 -0
  260. package/codeyam-cli/src/data/techStacks.js +77 -0
  261. package/codeyam-cli/src/data/techStacks.js.map +1 -0
  262. package/codeyam-cli/src/utils/__tests__/analyzerFinalization.test.js +173 -0
  263. package/codeyam-cli/src/utils/__tests__/analyzerFinalization.test.js.map +1 -0
  264. package/codeyam-cli/src/utils/__tests__/backgroundServer.test.js +46 -0
  265. package/codeyam-cli/src/utils/__tests__/backgroundServer.test.js.map +1 -0
  266. package/codeyam-cli/src/utils/__tests__/devServerState.test.js +226 -0
  267. package/codeyam-cli/src/utils/__tests__/devServerState.test.js.map +1 -0
  268. package/codeyam-cli/src/utils/__tests__/editorApi.test.js +181 -0
  269. package/codeyam-cli/src/utils/__tests__/editorApi.test.js.map +1 -0
  270. package/codeyam-cli/src/utils/__tests__/editorAudit.test.js +4160 -0
  271. package/codeyam-cli/src/utils/__tests__/editorAudit.test.js.map +1 -0
  272. package/codeyam-cli/src/utils/__tests__/editorBroadcastViewport.test.js +76 -0
  273. package/codeyam-cli/src/utils/__tests__/editorBroadcastViewport.test.js.map +1 -0
  274. package/codeyam-cli/src/utils/__tests__/editorCapture.test.js +93 -0
  275. package/codeyam-cli/src/utils/__tests__/editorCapture.test.js.map +1 -0
  276. package/codeyam-cli/src/utils/__tests__/editorCaptureScenarioSeeding.test.js +137 -0
  277. package/codeyam-cli/src/utils/__tests__/editorCaptureScenarioSeeding.test.js.map +1 -0
  278. package/codeyam-cli/src/utils/__tests__/editorDeleteScenario.test.js +100 -0
  279. package/codeyam-cli/src/utils/__tests__/editorDeleteScenario.test.js.map +1 -0
  280. package/codeyam-cli/src/utils/__tests__/editorDevServer.test.js +304 -0
  281. package/codeyam-cli/src/utils/__tests__/editorDevServer.test.js.map +1 -0
  282. package/codeyam-cli/src/utils/__tests__/editorEntityChangeStatus.test.js +194 -0
  283. package/codeyam-cli/src/utils/__tests__/editorEntityChangeStatus.test.js.map +1 -0
  284. package/codeyam-cli/src/utils/__tests__/editorEntityHelpers.test.js +381 -0
  285. package/codeyam-cli/src/utils/__tests__/editorEntityHelpers.test.js.map +1 -0
  286. package/codeyam-cli/src/utils/__tests__/editorGuardMiddleware.test.js +67 -0
  287. package/codeyam-cli/src/utils/__tests__/editorGuardMiddleware.test.js.map +1 -0
  288. package/codeyam-cli/src/utils/__tests__/editorImageVerifier.test.js +294 -0
  289. package/codeyam-cli/src/utils/__tests__/editorImageVerifier.test.js.map +1 -0
  290. package/codeyam-cli/src/utils/__tests__/editorJournal.test.js +542 -0
  291. package/codeyam-cli/src/utils/__tests__/editorJournal.test.js.map +1 -0
  292. package/codeyam-cli/src/utils/__tests__/editorLoaderHelpers.test.js +594 -0
  293. package/codeyam-cli/src/utils/__tests__/editorLoaderHelpers.test.js.map +1 -0
  294. package/codeyam-cli/src/utils/__tests__/editorMigration.test.js +435 -0
  295. package/codeyam-cli/src/utils/__tests__/editorMigration.test.js.map +1 -0
  296. package/codeyam-cli/src/utils/__tests__/editorMockState.test.js +270 -0
  297. package/codeyam-cli/src/utils/__tests__/editorMockState.test.js.map +1 -0
  298. package/codeyam-cli/src/utils/__tests__/editorPreloadHelpers.test.js +217 -0
  299. package/codeyam-cli/src/utils/__tests__/editorPreloadHelpers.test.js.map +1 -0
  300. package/codeyam-cli/src/utils/__tests__/editorPreview.test.js +361 -0
  301. package/codeyam-cli/src/utils/__tests__/editorPreview.test.js.map +1 -0
  302. package/codeyam-cli/src/utils/__tests__/editorProxySession.test.js +250 -0
  303. package/codeyam-cli/src/utils/__tests__/editorProxySession.test.js.map +1 -0
  304. package/codeyam-cli/src/utils/__tests__/editorRoadmap.test.js +1108 -0
  305. package/codeyam-cli/src/utils/__tests__/editorRoadmap.test.js.map +1 -0
  306. package/codeyam-cli/src/utils/__tests__/editorScenarioLookup.test.js +139 -0
  307. package/codeyam-cli/src/utils/__tests__/editorScenarioLookup.test.js.map +1 -0
  308. package/codeyam-cli/src/utils/__tests__/editorScenarioSwitch.test.js +411 -0
  309. package/codeyam-cli/src/utils/__tests__/editorScenarioSwitch.test.js.map +1 -0
  310. package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js +1768 -0
  311. package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js.map +1 -0
  312. package/codeyam-cli/src/utils/__tests__/editorSeedAdapter.test.js +413 -0
  313. package/codeyam-cli/src/utils/__tests__/editorSeedAdapter.test.js.map +1 -0
  314. package/codeyam-cli/src/utils/__tests__/editorSeedAdapterPrismaValidation.test.js +143 -0
  315. package/codeyam-cli/src/utils/__tests__/editorSeedAdapterPrismaValidation.test.js.map +1 -0
  316. package/codeyam-cli/src/utils/__tests__/editorSessionFilter.test.js +66 -0
  317. package/codeyam-cli/src/utils/__tests__/editorSessionFilter.test.js.map +1 -0
  318. package/codeyam-cli/src/utils/__tests__/editorShouldRevalidate.test.js +53 -0
  319. package/codeyam-cli/src/utils/__tests__/editorShouldRevalidate.test.js.map +1 -0
  320. package/codeyam-cli/src/utils/__tests__/entityChangeStatus.test.js +2121 -0
  321. package/codeyam-cli/src/utils/__tests__/entityChangeStatus.test.js.map +1 -0
  322. package/codeyam-cli/src/utils/__tests__/envFile.test.js +125 -0
  323. package/codeyam-cli/src/utils/__tests__/envFile.test.js.map +1 -0
  324. package/codeyam-cli/src/utils/__tests__/git.editor.test.js +134 -0
  325. package/codeyam-cli/src/utils/__tests__/git.editor.test.js.map +1 -0
  326. package/codeyam-cli/src/utils/__tests__/glossaryAdd.test.js +177 -0
  327. package/codeyam-cli/src/utils/__tests__/glossaryAdd.test.js.map +1 -0
  328. package/codeyam-cli/src/utils/__tests__/handoffContext.test.js +500 -0
  329. package/codeyam-cli/src/utils/__tests__/handoffContext.test.js.map +1 -0
  330. package/codeyam-cli/src/utils/__tests__/journalCaptureStabilization.test.js +122 -0
  331. package/codeyam-cli/src/utils/__tests__/journalCaptureStabilization.test.js.map +1 -0
  332. package/codeyam-cli/src/utils/__tests__/manualEntityAnalysis.test.js +302 -0
  333. package/codeyam-cli/src/utils/__tests__/manualEntityAnalysis.test.js.map +1 -0
  334. package/codeyam-cli/src/utils/__tests__/npmVersionCheck.test.js +185 -0
  335. package/codeyam-cli/src/utils/__tests__/npmVersionCheck.test.js.map +1 -0
  336. package/codeyam-cli/src/utils/__tests__/parseRegisterArg.test.js +129 -0
  337. package/codeyam-cli/src/utils/__tests__/parseRegisterArg.test.js.map +1 -0
  338. package/codeyam-cli/src/utils/__tests__/pathIgnoring.test.js +9 -0
  339. package/codeyam-cli/src/utils/__tests__/pathIgnoring.test.js.map +1 -1
  340. package/codeyam-cli/src/utils/__tests__/project.test.js +65 -0
  341. package/codeyam-cli/src/utils/__tests__/project.test.js.map +1 -0
  342. package/codeyam-cli/src/utils/__tests__/registerScenarioResult.test.js +127 -0
  343. package/codeyam-cli/src/utils/__tests__/registerScenarioResult.test.js.map +1 -0
  344. package/codeyam-cli/src/utils/__tests__/routePatternMatching.test.js +118 -0
  345. package/codeyam-cli/src/utils/__tests__/routePatternMatching.test.js.map +1 -0
  346. package/codeyam-cli/src/utils/__tests__/scenarioCoverage.test.js +284 -0
  347. package/codeyam-cli/src/utils/__tests__/scenarioCoverage.test.js.map +1 -0
  348. package/codeyam-cli/src/utils/__tests__/scenarioMarkers.test.js +121 -0
  349. package/codeyam-cli/src/utils/__tests__/scenarioMarkers.test.js.map +1 -0
  350. package/codeyam-cli/src/utils/__tests__/scenariosManifest.test.js +672 -0
  351. package/codeyam-cli/src/utils/__tests__/scenariosManifest.test.js.map +1 -0
  352. package/codeyam-cli/src/utils/__tests__/screenshotHash.test.js +84 -0
  353. package/codeyam-cli/src/utils/__tests__/screenshotHash.test.js.map +1 -0
  354. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +175 -86
  355. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js.map +1 -1
  356. package/codeyam-cli/src/utils/__tests__/telemetry.test.js +159 -0
  357. package/codeyam-cli/src/utils/__tests__/telemetry.test.js.map +1 -0
  358. package/codeyam-cli/src/utils/__tests__/templateConsistency.test.js +51 -0
  359. package/codeyam-cli/src/utils/__tests__/templateConsistency.test.js.map +1 -0
  360. package/codeyam-cli/src/utils/__tests__/testRunner.test.js +216 -0
  361. package/codeyam-cli/src/utils/__tests__/testRunner.test.js.map +1 -0
  362. package/codeyam-cli/src/utils/__tests__/webappDetection.test.js +148 -0
  363. package/codeyam-cli/src/utils/__tests__/webappDetection.test.js.map +1 -0
  364. package/codeyam-cli/src/utils/analysisRunner.js +39 -8
  365. package/codeyam-cli/src/utils/analysisRunner.js.map +1 -1
  366. package/codeyam-cli/src/utils/analyzer.js +26 -0
  367. package/codeyam-cli/src/utils/analyzer.js.map +1 -1
  368. package/codeyam-cli/src/utils/analyzerFinalization.js +100 -0
  369. package/codeyam-cli/src/utils/analyzerFinalization.js.map +1 -0
  370. package/codeyam-cli/src/utils/backgroundServer.js +193 -34
  371. package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
  372. package/codeyam-cli/src/utils/buildFlags.js +4 -0
  373. package/codeyam-cli/src/utils/buildFlags.js.map +1 -0
  374. package/codeyam-cli/src/utils/database.js +37 -2
  375. package/codeyam-cli/src/utils/database.js.map +1 -1
  376. package/codeyam-cli/src/utils/designSystemShowcase.js +810 -0
  377. package/codeyam-cli/src/utils/designSystemShowcase.js.map +1 -0
  378. package/codeyam-cli/src/utils/devModeEvents.js +40 -0
  379. package/codeyam-cli/src/utils/devModeEvents.js.map +1 -0
  380. package/codeyam-cli/src/utils/devServerState.js +103 -0
  381. package/codeyam-cli/src/utils/devServerState.js.map +1 -0
  382. package/codeyam-cli/src/utils/editorApi.js +95 -0
  383. package/codeyam-cli/src/utils/editorApi.js.map +1 -0
  384. package/codeyam-cli/src/utils/editorAudit.js +849 -0
  385. package/codeyam-cli/src/utils/editorAudit.js.map +1 -0
  386. package/codeyam-cli/src/utils/editorBroadcastViewport.js +26 -0
  387. package/codeyam-cli/src/utils/editorBroadcastViewport.js.map +1 -0
  388. package/codeyam-cli/src/utils/editorCapture.js +102 -0
  389. package/codeyam-cli/src/utils/editorCapture.js.map +1 -0
  390. package/codeyam-cli/src/utils/editorDeleteScenario.js +67 -0
  391. package/codeyam-cli/src/utils/editorDeleteScenario.js.map +1 -0
  392. package/codeyam-cli/src/utils/editorDevServer.js +197 -0
  393. package/codeyam-cli/src/utils/editorDevServer.js.map +1 -0
  394. package/codeyam-cli/src/utils/editorEntityChangeStatus.js +50 -0
  395. package/codeyam-cli/src/utils/editorEntityChangeStatus.js.map +1 -0
  396. package/codeyam-cli/src/utils/editorEntityHelpers.js +144 -0
  397. package/codeyam-cli/src/utils/editorEntityHelpers.js.map +1 -0
  398. package/codeyam-cli/src/utils/editorGuard.js +36 -0
  399. package/codeyam-cli/src/utils/editorGuard.js.map +1 -0
  400. package/codeyam-cli/src/utils/editorImageVerifier.js +155 -0
  401. package/codeyam-cli/src/utils/editorImageVerifier.js.map +1 -0
  402. package/codeyam-cli/src/utils/editorJournal.js +225 -0
  403. package/codeyam-cli/src/utils/editorJournal.js.map +1 -0
  404. package/codeyam-cli/src/utils/editorLoaderHelpers.js +152 -0
  405. package/codeyam-cli/src/utils/editorLoaderHelpers.js.map +1 -0
  406. package/codeyam-cli/src/utils/editorMigration.js +224 -0
  407. package/codeyam-cli/src/utils/editorMigration.js.map +1 -0
  408. package/codeyam-cli/src/utils/editorMockState.js +248 -0
  409. package/codeyam-cli/src/utils/editorMockState.js.map +1 -0
  410. package/codeyam-cli/src/utils/editorPreloadHelpers.js +135 -0
  411. package/codeyam-cli/src/utils/editorPreloadHelpers.js.map +1 -0
  412. package/codeyam-cli/src/utils/editorPreview.js +139 -0
  413. package/codeyam-cli/src/utils/editorPreview.js.map +1 -0
  414. package/codeyam-cli/src/utils/editorRecapture.js +109 -0
  415. package/codeyam-cli/src/utils/editorRecapture.js.map +1 -0
  416. package/codeyam-cli/src/utils/editorRoadmap.js +574 -0
  417. package/codeyam-cli/src/utils/editorRoadmap.js.map +1 -0
  418. package/codeyam-cli/src/utils/editorScenarioSwitch.js +149 -0
  419. package/codeyam-cli/src/utils/editorScenarioSwitch.js.map +1 -0
  420. package/codeyam-cli/src/utils/editorScenarios.js +687 -0
  421. package/codeyam-cli/src/utils/editorScenarios.js.map +1 -0
  422. package/codeyam-cli/src/utils/editorSeedAdapter.js +475 -0
  423. package/codeyam-cli/src/utils/editorSeedAdapter.js.map +1 -0
  424. package/codeyam-cli/src/utils/editorShouldRevalidate.js +21 -0
  425. package/codeyam-cli/src/utils/editorShouldRevalidate.js.map +1 -0
  426. package/codeyam-cli/src/utils/entityChangeStatus.js +394 -0
  427. package/codeyam-cli/src/utils/entityChangeStatus.js.map +1 -0
  428. package/codeyam-cli/src/utils/entityChangeStatus.server.js +227 -0
  429. package/codeyam-cli/src/utils/entityChangeStatus.server.js.map +1 -0
  430. package/codeyam-cli/src/utils/envFile.js +90 -0
  431. package/codeyam-cli/src/utils/envFile.js.map +1 -0
  432. package/codeyam-cli/src/utils/fileMetadata.js +5 -0
  433. package/codeyam-cli/src/utils/fileMetadata.js.map +1 -1
  434. package/codeyam-cli/src/utils/fileWatcher.js +63 -9
  435. package/codeyam-cli/src/utils/fileWatcher.js.map +1 -1
  436. package/codeyam-cli/src/utils/generateReport.js +2 -2
  437. package/codeyam-cli/src/utils/git.js +103 -0
  438. package/codeyam-cli/src/utils/git.js.map +1 -1
  439. package/codeyam-cli/src/utils/glossaryAdd.js +74 -0
  440. package/codeyam-cli/src/utils/glossaryAdd.js.map +1 -0
  441. package/codeyam-cli/src/utils/handoffContext.js +257 -0
  442. package/codeyam-cli/src/utils/handoffContext.js.map +1 -0
  443. package/codeyam-cli/src/utils/install-skills.js +131 -65
  444. package/codeyam-cli/src/utils/install-skills.js.map +1 -1
  445. package/codeyam-cli/src/utils/interactiveSyncWatcher.js +126 -0
  446. package/codeyam-cli/src/utils/interactiveSyncWatcher.js.map +1 -0
  447. package/codeyam-cli/src/utils/labsAutoCheck.js +19 -0
  448. package/codeyam-cli/src/utils/labsAutoCheck.js.map +1 -0
  449. package/codeyam-cli/src/utils/manualEntityAnalysis.js +196 -0
  450. package/codeyam-cli/src/utils/manualEntityAnalysis.js.map +1 -0
  451. package/codeyam-cli/src/utils/npmVersionCheck.js +76 -0
  452. package/codeyam-cli/src/utils/npmVersionCheck.js.map +1 -0
  453. package/codeyam-cli/src/utils/parseRegisterArg.js +31 -0
  454. package/codeyam-cli/src/utils/parseRegisterArg.js.map +1 -0
  455. package/codeyam-cli/src/utils/pathIgnoring.js +19 -7
  456. package/codeyam-cli/src/utils/pathIgnoring.js.map +1 -1
  457. package/codeyam-cli/src/utils/progress.js +8 -1
  458. package/codeyam-cli/src/utils/progress.js.map +1 -1
  459. package/codeyam-cli/src/utils/project.js +15 -5
  460. package/codeyam-cli/src/utils/project.js.map +1 -1
  461. package/codeyam-cli/src/utils/queue/__tests__/heartbeat.test.js +11 -11
  462. package/codeyam-cli/src/utils/queue/__tests__/heartbeat.test.js.map +1 -1
  463. package/codeyam-cli/src/utils/queue/__tests__/job.interactiveStart.test.js +159 -0
  464. package/codeyam-cli/src/utils/queue/__tests__/job.interactiveStart.test.js.map +1 -0
  465. package/codeyam-cli/src/utils/queue/__tests__/manager.test.js +22 -0
  466. package/codeyam-cli/src/utils/queue/__tests__/manager.test.js.map +1 -1
  467. package/codeyam-cli/src/utils/queue/heartbeat.js +13 -5
  468. package/codeyam-cli/src/utils/queue/heartbeat.js.map +1 -1
  469. package/codeyam-cli/src/utils/queue/job.js +105 -7
  470. package/codeyam-cli/src/utils/queue/job.js.map +1 -1
  471. package/codeyam-cli/src/utils/queue/manager.js +7 -6
  472. package/codeyam-cli/src/utils/queue/manager.js.map +1 -1
  473. package/codeyam-cli/src/utils/registerScenarioResult.js +52 -0
  474. package/codeyam-cli/src/utils/registerScenarioResult.js.map +1 -0
  475. package/codeyam-cli/src/utils/requireSimulations.js +10 -0
  476. package/codeyam-cli/src/utils/requireSimulations.js.map +1 -0
  477. package/codeyam-cli/src/utils/routePatternMatching.js +129 -0
  478. package/codeyam-cli/src/utils/routePatternMatching.js.map +1 -0
  479. package/codeyam-cli/src/utils/ruleReflection/__tests__/contextBuilder.test.js +109 -8
  480. package/codeyam-cli/src/utils/ruleReflection/__tests__/contextBuilder.test.js.map +1 -1
  481. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/assertRules.js +1 -1
  482. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/assertRules.js.map +1 -1
  483. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/setupTempProject.js +0 -1
  484. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/setupTempProject.js.map +1 -1
  485. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/ruleReflectionE2E.test.js +97 -6
  486. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/ruleReflectionE2E.test.js.map +1 -1
  487. package/codeyam-cli/src/utils/ruleReflection/__tests__/promptBuilder.test.js +37 -7
  488. package/codeyam-cli/src/utils/ruleReflection/__tests__/promptBuilder.test.js.map +1 -1
  489. package/codeyam-cli/src/utils/ruleReflection/contextBuilder.js +23 -3
  490. package/codeyam-cli/src/utils/ruleReflection/contextBuilder.js.map +1 -1
  491. package/codeyam-cli/src/utils/ruleReflection/index.js +2 -2
  492. package/codeyam-cli/src/utils/ruleReflection/index.js.map +1 -1
  493. package/codeyam-cli/src/utils/ruleReflection/promptBuilder.js +11 -0
  494. package/codeyam-cli/src/utils/ruleReflection/promptBuilder.js.map +1 -1
  495. package/codeyam-cli/src/utils/rules/__tests__/parser.test.js +83 -0
  496. package/codeyam-cli/src/utils/rules/__tests__/parser.test.js.map +1 -0
  497. package/codeyam-cli/src/utils/rules/__tests__/pathMatcher.test.js +118 -0
  498. package/codeyam-cli/src/utils/rules/__tests__/pathMatcher.test.js.map +1 -0
  499. package/codeyam-cli/src/utils/rules/__tests__/rulePlacement.test.js +72 -0
  500. package/codeyam-cli/src/utils/rules/__tests__/rulePlacement.test.js.map +1 -0
  501. package/codeyam-cli/src/utils/rules/__tests__/ruleState.test.js +23 -23
  502. package/codeyam-cli/src/utils/rules/__tests__/ruleState.test.js.map +1 -1
  503. package/codeyam-cli/src/utils/rules/__tests__/sourceFiles.test.js +76 -0
  504. package/codeyam-cli/src/utils/rules/__tests__/sourceFiles.test.js.map +1 -0
  505. package/codeyam-cli/src/utils/rules/index.js +1 -0
  506. package/codeyam-cli/src/utils/rules/index.js.map +1 -1
  507. package/codeyam-cli/src/utils/rules/parser.js +19 -4
  508. package/codeyam-cli/src/utils/rules/parser.js.map +1 -1
  509. package/codeyam-cli/src/utils/rules/pathMatcher.js +34 -3
  510. package/codeyam-cli/src/utils/rules/pathMatcher.js.map +1 -1
  511. package/codeyam-cli/src/utils/rules/rulePlacement.js +65 -0
  512. package/codeyam-cli/src/utils/rules/rulePlacement.js.map +1 -0
  513. package/codeyam-cli/src/utils/rules/ruleState.js +10 -10
  514. package/codeyam-cli/src/utils/rules/ruleState.js.map +1 -1
  515. package/codeyam-cli/src/utils/rules/sourceFiles.js +43 -0
  516. package/codeyam-cli/src/utils/rules/sourceFiles.js.map +1 -0
  517. package/codeyam-cli/src/utils/rules/staleness.js +6 -6
  518. package/codeyam-cli/src/utils/rules/staleness.js.map +1 -1
  519. package/codeyam-cli/src/utils/scenarioCoverage.js +77 -0
  520. package/codeyam-cli/src/utils/scenarioCoverage.js.map +1 -0
  521. package/codeyam-cli/src/utils/scenarioMarkers.js +134 -0
  522. package/codeyam-cli/src/utils/scenarioMarkers.js.map +1 -0
  523. package/codeyam-cli/src/utils/scenariosManifest.js +313 -0
  524. package/codeyam-cli/src/utils/scenariosManifest.js.map +1 -0
  525. package/codeyam-cli/src/utils/screenshotHash.js +26 -0
  526. package/codeyam-cli/src/utils/screenshotHash.js.map +1 -0
  527. package/codeyam-cli/src/utils/serverState.js +94 -12
  528. package/codeyam-cli/src/utils/serverState.js.map +1 -1
  529. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +96 -47
  530. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js.map +1 -1
  531. package/codeyam-cli/src/utils/simulationGateMiddleware.js +175 -0
  532. package/codeyam-cli/src/utils/simulationGateMiddleware.js.map +1 -0
  533. package/codeyam-cli/src/utils/slugUtils.js +25 -0
  534. package/codeyam-cli/src/utils/slugUtils.js.map +1 -0
  535. package/codeyam-cli/src/utils/syncMocksMiddleware.js +7 -26
  536. package/codeyam-cli/src/utils/syncMocksMiddleware.js.map +1 -1
  537. package/codeyam-cli/src/utils/techStackConfig.js +38 -0
  538. package/codeyam-cli/src/utils/techStackConfig.js.map +1 -0
  539. package/codeyam-cli/src/utils/techStackConfig.test.js +85 -0
  540. package/codeyam-cli/src/utils/techStackConfig.test.js.map +1 -0
  541. package/codeyam-cli/src/utils/telemetry.js +106 -0
  542. package/codeyam-cli/src/utils/telemetry.js.map +1 -0
  543. package/codeyam-cli/src/utils/telemetryMiddleware.js +22 -0
  544. package/codeyam-cli/src/utils/telemetryMiddleware.js.map +1 -0
  545. package/codeyam-cli/src/utils/testResultCache.js +53 -0
  546. package/codeyam-cli/src/utils/testResultCache.js.map +1 -0
  547. package/codeyam-cli/src/utils/testResultCache.server.js +81 -0
  548. package/codeyam-cli/src/utils/testResultCache.server.js.map +1 -0
  549. package/codeyam-cli/src/utils/testResultCache.server.test.js +187 -0
  550. package/codeyam-cli/src/utils/testResultCache.server.test.js.map +1 -0
  551. package/codeyam-cli/src/utils/testResultCache.test.js +230 -0
  552. package/codeyam-cli/src/utils/testResultCache.test.js.map +1 -0
  553. package/codeyam-cli/src/utils/testRunner.js +350 -0
  554. package/codeyam-cli/src/utils/testRunner.js.map +1 -0
  555. package/codeyam-cli/src/utils/transcriptPruning.js +67 -0
  556. package/codeyam-cli/src/utils/transcriptPruning.js.map +1 -0
  557. package/codeyam-cli/src/utils/versionInfo.js +46 -0
  558. package/codeyam-cli/src/utils/versionInfo.js.map +1 -1
  559. package/codeyam-cli/src/utils/webappDetection.js +38 -3
  560. package/codeyam-cli/src/utils/webappDetection.js.map +1 -1
  561. package/codeyam-cli/src/webserver/__tests__/api.interactive-switch-scenario.test.js +99 -0
  562. package/codeyam-cli/src/webserver/__tests__/api.interactive-switch-scenario.test.js.map +1 -0
  563. package/codeyam-cli/src/webserver/__tests__/buildPtyEnv.test.js +153 -0
  564. package/codeyam-cli/src/webserver/__tests__/buildPtyEnv.test.js.map +1 -0
  565. package/codeyam-cli/src/webserver/__tests__/clientErrors.test.js +107 -0
  566. package/codeyam-cli/src/webserver/__tests__/clientErrors.test.js.map +1 -0
  567. package/codeyam-cli/src/webserver/__tests__/dependency-smoke.test.js +66 -0
  568. package/codeyam-cli/src/webserver/__tests__/dependency-smoke.test.js.map +1 -0
  569. package/codeyam-cli/src/webserver/__tests__/editorProxy.test.js +1000 -0
  570. package/codeyam-cli/src/webserver/__tests__/editorProxy.test.js.map +1 -0
  571. package/codeyam-cli/src/webserver/__tests__/idleDetector.test.js +315 -0
  572. package/codeyam-cli/src/webserver/__tests__/idleDetector.test.js.map +1 -0
  573. package/codeyam-cli/src/webserver/__tests__/stripClaudeCommand.test.js +135 -0
  574. package/codeyam-cli/src/webserver/__tests__/stripClaudeCommand.test.js.map +1 -0
  575. package/codeyam-cli/src/webserver/app/lib/clientErrors.js +86 -0
  576. package/codeyam-cli/src/webserver/app/lib/clientErrors.js.map +1 -0
  577. package/codeyam-cli/src/webserver/app/lib/database.js +55 -30
  578. package/codeyam-cli/src/webserver/app/lib/database.js.map +1 -1
  579. package/codeyam-cli/src/webserver/app/lib/dbNotifier.js.map +1 -1
  580. package/codeyam-cli/src/webserver/app/lib/git.js +397 -0
  581. package/codeyam-cli/src/webserver/app/lib/git.js.map +1 -0
  582. package/codeyam-cli/src/webserver/app/routes/api.interactive-switch-scenario.js +34 -0
  583. package/codeyam-cli/src/webserver/app/routes/api.interactive-switch-scenario.js.map +1 -0
  584. package/codeyam-cli/src/webserver/app/types/editor.js +8 -0
  585. package/codeyam-cli/src/webserver/app/types/editor.js.map +1 -0
  586. package/codeyam-cli/src/webserver/backgroundServer.js +186 -37
  587. package/codeyam-cli/src/webserver/backgroundServer.js.map +1 -1
  588. package/codeyam-cli/src/webserver/bootstrap.js +11 -0
  589. package/codeyam-cli/src/webserver/bootstrap.js.map +1 -1
  590. package/codeyam-cli/src/webserver/build/client/assets/CopyButton-DTBZZfSk.js +1 -0
  591. package/codeyam-cli/src/webserver/build/client/assets/{EntityItem-B86KKU7e.js → EntityItem-BxclONWq.js} +5 -5
  592. package/codeyam-cli/src/webserver/build/client/assets/EntityTypeBadge-CQgyEGV-.js +1 -0
  593. package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeIcon-BqY8gDAW.js → EntityTypeIcon-BsnEOJZ_.js} +9 -9
  594. package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-ByaELMbv.js +1 -0
  595. package/codeyam-cli/src/webserver/build/client/assets/InteractivePreview-6WjVfhxX.js +25 -0
  596. package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-ChX-Hp7W.js +3 -0
  597. package/codeyam-cli/src/webserver/build/client/assets/{LoadingDots-Bs7Nn1Jr.js → LoadingDots-By5zI316.js} +1 -1
  598. package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-Bm3PmcCz.js → LogViewer-C-9zQdXg.js} +3 -3
  599. package/codeyam-cli/src/webserver/build/client/assets/MiniClaudeChat-Bs2_Oua4.js +36 -0
  600. package/codeyam-cli/src/webserver/build/client/assets/{ReportIssueModal-C6PKeMYR.js → ReportIssueModal-DQsceHVv.js} +4 -4
  601. package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-DThcm_9M.js +1 -0
  602. package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-BNLaXBHR.js → ScenarioViewer-Cl4oOA3A.js} +3 -3
  603. package/codeyam-cli/src/webserver/build/client/assets/Spinner-CIil5-gb.js +34 -0
  604. package/codeyam-cli/src/webserver/build/client/assets/TruncatedFilePath-CK7-NaPZ.js +1 -0
  605. package/codeyam-cli/src/webserver/build/client/assets/ViewportInspectBar-BqkA9zyZ.js +1 -0
  606. package/codeyam-cli/src/webserver/build/client/assets/{_index-B3TDXxnk.js → _index-DnOgyseQ.js} +4 -4
  607. package/codeyam-cli/src/webserver/build/client/assets/{activity.(_tab)-DD1r_QU0.js → activity.(_tab)-DqM9hbNE.js} +10 -10
  608. package/codeyam-cli/src/webserver/build/client/assets/addon-canvas-DpzMmAy5.js +1 -0
  609. package/codeyam-cli/src/webserver/build/client/assets/addon-fit-YJmn1quW.js +12 -0
  610. package/codeyam-cli/src/webserver/build/client/assets/addon-web-links-C58dYPwR.js +1 -0
  611. package/codeyam-cli/src/webserver/build/client/assets/addon-webgl-DI8QOUvO.js +58 -0
  612. package/codeyam-cli/src/webserver/build/client/assets/agent-transcripts-B8NCeOrm.js +22 -0
  613. package/codeyam-cli/src/webserver/build/client/assets/api.dev-mode-events-l0sNRNKZ.js +1 -0
  614. package/codeyam-cli/src/webserver/build/client/assets/api.editor-audit-l0sNRNKZ.js +1 -0
  615. package/codeyam-cli/src/webserver/build/client/assets/api.editor-capture-scenario-l0sNRNKZ.js +1 -0
  616. package/codeyam-cli/src/webserver/build/client/assets/api.editor-client-errors-l0sNRNKZ.js +1 -0
  617. package/codeyam-cli/src/webserver/build/client/assets/api.editor-commit-l0sNRNKZ.js +1 -0
  618. package/codeyam-cli/src/webserver/build/client/assets/api.editor-database-verify-l0sNRNKZ.js +1 -0
  619. package/codeyam-cli/src/webserver/build/client/assets/api.editor-dev-server-l0sNRNKZ.js +1 -0
  620. package/codeyam-cli/src/webserver/build/client/assets/api.editor-entity-status-l0sNRNKZ.js +1 -0
  621. package/codeyam-cli/src/webserver/build/client/assets/api.editor-file-diff-l0sNRNKZ.js +1 -0
  622. package/codeyam-cli/src/webserver/build/client/assets/api.editor-file-l0sNRNKZ.js +1 -0
  623. package/codeyam-cli/src/webserver/build/client/assets/api.editor-github-verify-l0sNRNKZ.js +1 -0
  624. package/codeyam-cli/src/webserver/build/client/assets/api.editor-handoff-l0sNRNKZ.js +1 -0
  625. package/codeyam-cli/src/webserver/build/client/assets/api.editor-hosting-verify-l0sNRNKZ.js +1 -0
  626. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-entry-l0sNRNKZ.js +1 -0
  627. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-image._-l0sNRNKZ.js +1 -0
  628. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-l0sNRNKZ.js +1 -0
  629. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-screenshot-l0sNRNKZ.js +1 -0
  630. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-update-l0sNRNKZ.js +1 -0
  631. package/codeyam-cli/src/webserver/build/client/assets/api.editor-load-commit-l0sNRNKZ.js +1 -0
  632. package/codeyam-cli/src/webserver/build/client/assets/api.editor-project-info-l0sNRNKZ.js +1 -0
  633. package/codeyam-cli/src/webserver/build/client/assets/api.editor-recapture-stale-l0sNRNKZ.js +1 -0
  634. package/codeyam-cli/src/webserver/build/client/assets/api.editor-refresh-l0sNRNKZ.js +1 -0
  635. package/codeyam-cli/src/webserver/build/client/assets/api.editor-register-scenario-l0sNRNKZ.js +1 -0
  636. package/codeyam-cli/src/webserver/build/client/assets/api.editor-rename-scenario-l0sNRNKZ.js +1 -0
  637. package/codeyam-cli/src/webserver/build/client/assets/api.editor-roadmap-l0sNRNKZ.js +1 -0
  638. package/codeyam-cli/src/webserver/build/client/assets/api.editor-save-scenario-data-l0sNRNKZ.js +1 -0
  639. package/codeyam-cli/src/webserver/build/client/assets/api.editor-save-seed-state-l0sNRNKZ.js +1 -0
  640. package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-coverage-l0sNRNKZ.js +1 -0
  641. package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-data-l0sNRNKZ.js +1 -0
  642. package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-image._-l0sNRNKZ.js +1 -0
  643. package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-prompt-l0sNRNKZ.js +1 -0
  644. package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenarios-l0sNRNKZ.js +1 -0
  645. package/codeyam-cli/src/webserver/build/client/assets/api.editor-schema-l0sNRNKZ.js +1 -0
  646. package/codeyam-cli/src/webserver/build/client/assets/api.editor-session-l0sNRNKZ.js +1 -0
  647. package/codeyam-cli/src/webserver/build/client/assets/api.editor-switch-scenario-l0sNRNKZ.js +1 -0
  648. package/codeyam-cli/src/webserver/build/client/assets/api.editor-test-results-l0sNRNKZ.js +1 -0
  649. package/codeyam-cli/src/webserver/build/client/assets/api.editor-verify-routes-l0sNRNKZ.js +1 -0
  650. package/codeyam-cli/src/webserver/build/client/assets/api.interactive-switch-scenario-l0sNRNKZ.js +1 -0
  651. package/codeyam-cli/src/webserver/build/client/assets/api.labs-unlock-l0sNRNKZ.js +1 -0
  652. package/codeyam-cli/src/webserver/build/client/assets/api.rule-path-l0sNRNKZ.js +1 -0
  653. package/codeyam-cli/src/webserver/build/client/assets/{book-open-PttOB2SF.js → book-open-BFSIqZgO.js} +2 -2
  654. package/codeyam-cli/src/webserver/build/client/assets/{chevron-down-TJp6ofnp.js → chevron-down-B9fDzFVh.js} +2 -2
  655. package/codeyam-cli/src/webserver/build/client/assets/chunk-UVKPFVEO-Bmq2apuh.js +43 -0
  656. package/codeyam-cli/src/webserver/build/client/assets/{circle-check-CXhHQYrI.js → circle-check-DLPObLUx.js} +2 -2
  657. package/codeyam-cli/src/webserver/build/client/assets/{copy-6y9ALfGT.js → copy-DXEmO0TD.js} +3 -3
  658. package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-BwyFiRot.js +41 -0
  659. package/codeyam-cli/src/webserver/build/client/assets/cy-logo-cli-Coe5NhbS.js +1 -0
  660. package/codeyam-cli/src/webserver/build/client/assets/{cy-logo-cli-CCKUIm0S.svg → cy-logo-cli-DoA97ML3.svg} +2 -2
  661. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-iRhRIFlp.js +1 -0
  662. package/codeyam-cli/src/webserver/build/client/assets/editor._tab-BZPBzV73.js +1 -0
  663. package/codeyam-cli/src/webserver/build/client/assets/editor.entity.(_sha)-DhtVC4aI.js +161 -0
  664. package/codeyam-cli/src/webserver/build/client/assets/editorPreview-C6fEYHrh.js +41 -0
  665. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-n38keI1k.js → entity._sha._-pc-vc6wO.js} +14 -13
  666. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.dev-C8AyYgYT.js +6 -0
  667. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-DziaVQX1.js +6 -0
  668. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-BTcpgIpC.js +6 -0
  669. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.edit._scenarioId-38yPijoD.js → entity._sha_.edit._scenarioId-D_O_ajfZ.js} +2 -2
  670. package/codeyam-cli/src/webserver/build/client/assets/{entry.client-BSHEfydn.js → entry.client-j1Vi0bco.js} +6 -6
  671. package/codeyam-cli/src/webserver/build/client/assets/fileTableUtils-Daa96Fr1.js +1 -0
  672. package/codeyam-cli/src/webserver/build/client/assets/files-kuny2Q_s.js +1 -0
  673. package/codeyam-cli/src/webserver/build/client/assets/git-DgCZPMie.js +1 -0
  674. package/codeyam-cli/src/webserver/build/client/assets/globals-L-aUIeux.css +1 -0
  675. package/codeyam-cli/src/webserver/build/client/assets/{index-CcsFv748.js → index-BliGSSpl.js} +1 -1
  676. package/codeyam-cli/src/webserver/build/client/assets/index-SqjQKTdH.js +15 -0
  677. package/codeyam-cli/src/webserver/build/client/assets/{index-ChN9-fAY.js → index-vyrZD2g4.js} +1 -1
  678. package/codeyam-cli/src/webserver/build/client/assets/jsx-runtime-D_zvdyIk.js +9 -0
  679. package/codeyam-cli/src/webserver/build/client/assets/labs-c3yLxSEp.js +1 -0
  680. package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-CTqLEAGU.js → loader-circle-D-q28GLF.js} +2 -2
  681. package/codeyam-cli/src/webserver/build/client/assets/manifest-79d0d81a.js +1 -0
  682. package/codeyam-cli/src/webserver/build/client/assets/memory-CEWIUC4t.js +101 -0
  683. package/codeyam-cli/src/webserver/build/client/assets/{pause-D6vreykR.js → pause-BP6fitdh.js} +3 -3
  684. package/codeyam-cli/src/webserver/build/client/assets/root-L2V0jea7.js +80 -0
  685. package/codeyam-cli/src/webserver/build/client/assets/{search-B8VUL8nl.js → search-BooqacKS.js} +2 -2
  686. package/codeyam-cli/src/webserver/build/client/assets/settings-BM0nbryO.js +1 -0
  687. package/codeyam-cli/src/webserver/build/client/assets/simulations-ovy6FjRY.js +1 -0
  688. package/codeyam-cli/src/webserver/build/client/assets/{terminal-BrCP7uQo.js → terminal-DHemCJIs.js} +3 -3
  689. package/codeyam-cli/src/webserver/build/client/assets/{triangle-alert-BZz2NjYa.js → triangle-alert-D87ekDl8.js} +2 -2
  690. package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-Dk0Tciqg.js +1 -0
  691. package/codeyam-cli/src/webserver/build/client/assets/useLastLogLine-C8QvIe05.js +2 -0
  692. package/codeyam-cli/src/webserver/build/client/assets/useReportContext-jkCytuYz.js +1 -0
  693. package/codeyam-cli/src/webserver/build/client/assets/useToast-BgqkixU9.js +1 -0
  694. package/codeyam-cli/src/webserver/build/client/assets/xterm-BqvuqXEL.js +27 -0
  695. package/codeyam-cli/src/webserver/build/client/sound-test.html +98 -0
  696. package/codeyam-cli/src/webserver/build/server/assets/analysisRunner-QgInFGdU.js +16 -0
  697. package/codeyam-cli/src/webserver/build/server/assets/index-zblh9auj.js +1 -0
  698. package/codeyam-cli/src/webserver/build/server/assets/init-DaE0CBjk.js +14 -0
  699. package/codeyam-cli/src/webserver/build/server/assets/progress-CHTtrxFG.js +1 -0
  700. package/codeyam-cli/src/webserver/build/server/assets/server-build-CNvgz1cC.js +853 -0
  701. package/codeyam-cli/src/webserver/build/server/index.js +1 -1
  702. package/codeyam-cli/src/webserver/build-info.json +5 -5
  703. package/codeyam-cli/src/webserver/devServer.js +39 -5
  704. package/codeyam-cli/src/webserver/devServer.js.map +1 -1
  705. package/codeyam-cli/src/webserver/editorProxy.js +1263 -0
  706. package/codeyam-cli/src/webserver/editorProxy.js.map +1 -0
  707. package/codeyam-cli/src/webserver/idleDetector.js +130 -0
  708. package/codeyam-cli/src/webserver/idleDetector.js.map +1 -0
  709. package/codeyam-cli/src/webserver/mockStateEvents.js +28 -0
  710. package/codeyam-cli/src/webserver/mockStateEvents.js.map +1 -0
  711. package/codeyam-cli/src/webserver/public/sound-test.html +98 -0
  712. package/codeyam-cli/src/webserver/scripts/codeyam-preload.mjs +414 -0
  713. package/codeyam-cli/src/webserver/scripts/journalCapture.ts +283 -0
  714. package/codeyam-cli/src/webserver/server.js +446 -1
  715. package/codeyam-cli/src/webserver/server.js.map +1 -1
  716. package/codeyam-cli/src/webserver/terminalServer.js +1043 -0
  717. package/codeyam-cli/src/webserver/terminalServer.js.map +1 -0
  718. package/codeyam-cli/templates/__tests__/editor-step-hook.prompt-capture.test.ts +118 -0
  719. package/codeyam-cli/templates/chrome-extension-react/EXTENSION_SETUP.md +75 -0
  720. package/codeyam-cli/templates/chrome-extension-react/README.md +46 -0
  721. package/codeyam-cli/templates/chrome-extension-react/gitignore +15 -0
  722. package/codeyam-cli/templates/chrome-extension-react/index.html +12 -0
  723. package/codeyam-cli/templates/chrome-extension-react/package.json +27 -0
  724. package/codeyam-cli/templates/chrome-extension-react/popup.html +12 -0
  725. package/codeyam-cli/templates/chrome-extension-react/public/manifest.json +15 -0
  726. package/codeyam-cli/templates/chrome-extension-react/src/background/service-worker.ts +7 -0
  727. package/codeyam-cli/templates/chrome-extension-react/src/globals.css +6 -0
  728. package/codeyam-cli/templates/chrome-extension-react/src/lib/storage.ts +37 -0
  729. package/codeyam-cli/templates/chrome-extension-react/src/popup/App.tsx +12 -0
  730. package/codeyam-cli/templates/chrome-extension-react/src/popup/main.tsx +10 -0
  731. package/codeyam-cli/templates/chrome-extension-react/tsconfig.json +24 -0
  732. package/codeyam-cli/templates/chrome-extension-react/vite.config.ts +41 -0
  733. package/codeyam-cli/templates/codeyam-editor-claude.md +149 -0
  734. package/codeyam-cli/templates/codeyam-editor-codex.md +61 -0
  735. package/codeyam-cli/templates/codeyam-editor-gemini.md +59 -0
  736. package/codeyam-cli/templates/codeyam-editor-reference.md +216 -0
  737. package/codeyam-cli/templates/codeyam-memory-hook.sh +14 -14
  738. package/codeyam-cli/templates/commands/codeyam-diagnose.md +481 -0
  739. package/codeyam-cli/templates/design-systems/clean-dashboard-design-system.md +255 -0
  740. package/codeyam-cli/templates/design-systems/editorial-design-system.md +267 -0
  741. package/codeyam-cli/templates/design-systems/mono-brutalist-design-system.md +256 -0
  742. package/codeyam-cli/templates/design-systems/neo-brutalist-design-system.md +294 -0
  743. package/codeyam-cli/templates/editor-step-hook.py +368 -0
  744. package/codeyam-cli/templates/expo-react-native/MOBILE_SETUP.md +288 -0
  745. package/codeyam-cli/templates/expo-react-native/README.md +41 -0
  746. package/codeyam-cli/templates/expo-react-native/__tests__/.gitkeep +0 -0
  747. package/codeyam-cli/templates/expo-react-native/app/_layout.tsx +15 -0
  748. package/codeyam-cli/templates/expo-react-native/app/index.tsx +36 -0
  749. package/codeyam-cli/templates/expo-react-native/app.json +29 -0
  750. package/codeyam-cli/templates/expo-react-native/babel.config.js +10 -0
  751. package/codeyam-cli/templates/expo-react-native/gitignore +14 -0
  752. package/codeyam-cli/templates/expo-react-native/global.css +10 -0
  753. package/codeyam-cli/templates/expo-react-native/lib/storage.ts +32 -0
  754. package/codeyam-cli/templates/expo-react-native/lib/theme.ts +73 -0
  755. package/codeyam-cli/templates/expo-react-native/metro.config.js +6 -0
  756. package/codeyam-cli/templates/expo-react-native/nativewind-env.d.ts +1 -0
  757. package/codeyam-cli/templates/expo-react-native/package.json +54 -0
  758. package/codeyam-cli/templates/expo-react-native/patches/expo-modules-autolinking+3.0.24.patch +29 -0
  759. package/codeyam-cli/templates/expo-react-native/tailwind.config.js +10 -0
  760. package/codeyam-cli/templates/expo-react-native/tsconfig.json +10 -0
  761. package/codeyam-cli/templates/hooks/staleness-check.sh +43 -0
  762. package/codeyam-cli/templates/isolation-route/expo-router.tsx.template +54 -0
  763. package/codeyam-cli/templates/isolation-route/next-app.tsx.template +80 -0
  764. package/codeyam-cli/templates/isolation-route/next-pages.tsx.template +79 -0
  765. package/codeyam-cli/templates/isolation-route/vite-react.tsx.template +78 -0
  766. package/codeyam-cli/templates/msw/browser-setup.ts.template +47 -0
  767. package/codeyam-cli/templates/msw/handler-router.ts.template +47 -0
  768. package/codeyam-cli/templates/msw/server-setup.ts.template +52 -0
  769. package/codeyam-cli/templates/nextjs-prisma-sqlite/AUTH_PATTERNS.md +308 -0
  770. package/codeyam-cli/templates/nextjs-prisma-sqlite/AUTH_UPGRADE.md +304 -0
  771. package/codeyam-cli/templates/nextjs-prisma-sqlite/DATABASE.md +126 -0
  772. package/codeyam-cli/templates/nextjs-prisma-sqlite/FEATURE_PATTERNS.md +37 -0
  773. package/codeyam-cli/templates/nextjs-prisma-sqlite/README.md +53 -0
  774. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/api/todos/route.ts +17 -0
  775. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/codeyam-isolate/layout.tsx +12 -0
  776. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/globals.css +26 -0
  777. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/layout.tsx +34 -0
  778. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/lib/prisma.ts +24 -0
  779. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/page.tsx +10 -0
  780. package/codeyam-cli/templates/nextjs-prisma-sqlite/env +4 -0
  781. package/codeyam-cli/templates/nextjs-prisma-sqlite/eslint.config.mjs +11 -0
  782. package/codeyam-cli/templates/nextjs-prisma-sqlite/gitignore +65 -0
  783. package/codeyam-cli/templates/nextjs-prisma-sqlite/next.config.ts +14 -0
  784. package/codeyam-cli/templates/nextjs-prisma-sqlite/package.json +39 -0
  785. package/codeyam-cli/templates/nextjs-prisma-sqlite/postcss.config.mjs +7 -0
  786. package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma/schema.prisma +27 -0
  787. package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma/seed.ts +40 -0
  788. package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma.config.ts +12 -0
  789. package/codeyam-cli/templates/nextjs-prisma-sqlite/seed-adapter.ts +140 -0
  790. package/codeyam-cli/templates/nextjs-prisma-sqlite/tsconfig.json +34 -0
  791. package/codeyam-cli/templates/nextjs-prisma-sqlite/vitest.config.ts +13 -0
  792. package/codeyam-cli/templates/nextjs-prisma-supabase/README.md +52 -0
  793. package/codeyam-cli/templates/nextjs-prisma-supabase/SUPABASE_SETUP.md +104 -0
  794. package/codeyam-cli/templates/nextjs-prisma-supabase/app/api/todos/route.ts +17 -0
  795. package/codeyam-cli/templates/nextjs-prisma-supabase/app/globals.css +26 -0
  796. package/codeyam-cli/templates/nextjs-prisma-supabase/app/layout.tsx +34 -0
  797. package/codeyam-cli/templates/nextjs-prisma-supabase/app/lib/prisma.ts +20 -0
  798. package/codeyam-cli/templates/nextjs-prisma-supabase/app/lib/supabase.ts +12 -0
  799. package/codeyam-cli/templates/nextjs-prisma-supabase/app/page.tsx +10 -0
  800. package/codeyam-cli/templates/nextjs-prisma-supabase/env +9 -0
  801. package/codeyam-cli/templates/nextjs-prisma-supabase/eslint.config.mjs +11 -0
  802. package/codeyam-cli/templates/nextjs-prisma-supabase/gitignore +40 -0
  803. package/codeyam-cli/templates/nextjs-prisma-supabase/next.config.ts +11 -0
  804. package/codeyam-cli/templates/nextjs-prisma-supabase/package.json +37 -0
  805. package/codeyam-cli/templates/nextjs-prisma-supabase/postcss.config.mjs +7 -0
  806. package/codeyam-cli/templates/nextjs-prisma-supabase/prisma/schema.prisma +27 -0
  807. package/codeyam-cli/templates/nextjs-prisma-supabase/prisma/seed.ts +39 -0
  808. package/codeyam-cli/templates/nextjs-prisma-supabase/prisma.config.ts +12 -0
  809. package/codeyam-cli/templates/nextjs-prisma-supabase/tsconfig.json +34 -0
  810. package/codeyam-cli/templates/prompts/conversation-guidance.txt +44 -0
  811. package/codeyam-cli/templates/prompts/conversation-prompt.txt +28 -0
  812. package/codeyam-cli/templates/prompts/interruption-prompt.txt +31 -0
  813. package/codeyam-cli/templates/prompts/stale-rules-prompt.txt +24 -0
  814. package/codeyam-cli/templates/rule-notification-hook.py +47 -18
  815. package/codeyam-cli/templates/rule-reflection-hook.py +287 -68
  816. package/codeyam-cli/templates/rules-instructions.md +45 -90
  817. package/codeyam-cli/templates/seed-adapters/supabase.ts +475 -0
  818. package/codeyam-cli/templates/{codeyam:debug.md → skills/codeyam-debug/SKILL.md} +1 -1
  819. package/codeyam-cli/templates/skills/codeyam-dev-mode/SKILL.md +237 -0
  820. package/codeyam-cli/templates/skills/codeyam-editor/SKILL.md +244 -0
  821. package/codeyam-cli/templates/{codeyam:memory.md → skills/codeyam-memory/SKILL.md} +231 -24
  822. package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/deprecated-prompt.md +100 -0
  823. package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/detect-deprecated-patterns.mjs +139 -0
  824. package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/find-exports.mjs +52 -0
  825. package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/misleading-api-prompt.md +117 -0
  826. package/codeyam-cli/templates/skills/codeyam-memory/scripts/lib/read-json-field.mjs +61 -0
  827. package/codeyam-cli/templates/skills/codeyam-memory/scripts/lib/ripgrep-fallback.mjs +155 -0
  828. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/analyze-prompt.md +46 -0
  829. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/cleanup.mjs +13 -0
  830. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/filter-session.mjs +95 -0
  831. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/preprocess.mjs +160 -0
  832. package/codeyam-cli/templates/{codeyam:new-rule.md → skills/codeyam-new-rule/SKILL.md} +1 -3
  833. package/codeyam-cli/templates/{codeyam:setup.md → skills/codeyam-setup/SKILL.md} +13 -1
  834. package/codeyam-cli/templates/{codeyam:sim.md → skills/codeyam-sim/SKILL.md} +1 -1
  835. package/codeyam-cli/templates/{codeyam:test.md → skills/codeyam-test/SKILL.md} +1 -1
  836. package/codeyam-cli/templates/{codeyam:verify.md → skills/codeyam-verify/SKILL.md} +1 -1
  837. package/package.json +28 -20
  838. package/packages/ai/index.js +1 -1
  839. package/packages/ai/index.js.map +1 -1
  840. package/packages/ai/src/lib/analyzeScope.js +14 -0
  841. package/packages/ai/src/lib/analyzeScope.js.map +1 -1
  842. package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js +22 -4
  843. package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js.map +1 -1
  844. package/packages/ai/src/lib/astScopes/methodSemantics.js +99 -0
  845. package/packages/ai/src/lib/astScopes/methodSemantics.js.map +1 -1
  846. package/packages/ai/src/lib/astScopes/nodeToSource.js +16 -0
  847. package/packages/ai/src/lib/astScopes/nodeToSource.js.map +1 -1
  848. package/packages/ai/src/lib/astScopes/paths.js +12 -3
  849. package/packages/ai/src/lib/astScopes/paths.js.map +1 -1
  850. package/packages/ai/src/lib/astScopes/processExpression.js +78 -1
  851. package/packages/ai/src/lib/astScopes/processExpression.js.map +1 -1
  852. package/packages/ai/src/lib/astScopes/sharedPatterns.js +25 -0
  853. package/packages/ai/src/lib/astScopes/sharedPatterns.js.map +1 -1
  854. package/packages/ai/src/lib/completionCall.js +10 -7
  855. package/packages/ai/src/lib/completionCall.js.map +1 -1
  856. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +389 -20
  857. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
  858. package/packages/ai/src/lib/dataStructure/equivalencyManagers/ParentScopeManager.js +9 -2
  859. package/packages/ai/src/lib/dataStructure/equivalencyManagers/ParentScopeManager.js.map +1 -1
  860. package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js +14 -4
  861. package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js.map +1 -1
  862. package/packages/ai/src/lib/dataStructure/helpers/coercePrimitivesToArraysBySchema.js +54 -0
  863. package/packages/ai/src/lib/dataStructure/helpers/coercePrimitivesToArraysBySchema.js.map +1 -0
  864. package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js +59 -11
  865. package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js.map +1 -1
  866. package/packages/ai/src/lib/dataStructure/helpers/stripNullableMarkers.js +34 -0
  867. package/packages/ai/src/lib/dataStructure/helpers/stripNullableMarkers.js.map +1 -0
  868. package/packages/ai/src/lib/dataStructureChunking.js +30 -11
  869. package/packages/ai/src/lib/dataStructureChunking.js.map +1 -1
  870. package/packages/ai/src/lib/generateEntityScenarioData.js +79 -5
  871. package/packages/ai/src/lib/generateEntityScenarioData.js.map +1 -1
  872. package/packages/ai/src/lib/generateExecutionFlows.js +86 -2
  873. package/packages/ai/src/lib/generateExecutionFlows.js.map +1 -1
  874. package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js +242 -81
  875. package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js.map +1 -1
  876. package/packages/ai/src/lib/mergeJsonTypeDefinitions.js +5 -0
  877. package/packages/ai/src/lib/mergeJsonTypeDefinitions.js.map +1 -1
  878. package/packages/ai/src/lib/promptGenerators/collapseNullableObjects.js +97 -0
  879. package/packages/ai/src/lib/promptGenerators/collapseNullableObjects.js.map +1 -0
  880. package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js +17 -2
  881. package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js.map +1 -1
  882. package/packages/analyze/index.js +1 -1
  883. package/packages/analyze/index.js.map +1 -1
  884. package/packages/analyze/src/lib/ProjectAnalyzer.js +13 -4
  885. package/packages/analyze/src/lib/ProjectAnalyzer.js.map +1 -1
  886. package/packages/analyze/src/lib/asts/index.js +4 -2
  887. package/packages/analyze/src/lib/asts/index.js.map +1 -1
  888. package/packages/analyze/src/lib/asts/nodes/getNodeType.js +1 -0
  889. package/packages/analyze/src/lib/asts/nodes/getNodeType.js.map +1 -1
  890. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js +27 -3
  891. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js.map +1 -1
  892. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js +14 -27
  893. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js.map +1 -1
  894. package/packages/analyze/src/lib/files/analyze/dependencyResolver.js +0 -5
  895. package/packages/analyze/src/lib/files/analyze/dependencyResolver.js.map +1 -1
  896. package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js +12 -2
  897. package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js.map +1 -1
  898. package/packages/analyze/src/lib/files/analyze/gatherEntityMap.js +9 -7
  899. package/packages/analyze/src/lib/files/analyze/gatherEntityMap.js.map +1 -1
  900. package/packages/analyze/src/lib/files/analyze/trackEntityCircularDependencies.js +14 -0
  901. package/packages/analyze/src/lib/files/analyze/trackEntityCircularDependencies.js.map +1 -1
  902. package/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.js +44 -11
  903. package/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.js.map +1 -1
  904. package/packages/analyze/src/lib/files/analyzeChange.js +1 -0
  905. package/packages/analyze/src/lib/files/analyzeChange.js.map +1 -1
  906. package/packages/analyze/src/lib/files/analyzeInitial.js +1 -0
  907. package/packages/analyze/src/lib/files/analyzeInitial.js.map +1 -1
  908. package/packages/analyze/src/lib/files/analyzeNextRoute.js +5 -1
  909. package/packages/analyze/src/lib/files/analyzeNextRoute.js.map +1 -1
  910. package/packages/analyze/src/lib/files/scenarios/TransformationTracer.js +54 -27
  911. package/packages/analyze/src/lib/files/scenarios/TransformationTracer.js.map +1 -1
  912. package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js +42 -13
  913. package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js.map +1 -1
  914. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +185 -28
  915. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
  916. package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js +0 -40
  917. package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js.map +1 -1
  918. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +1388 -1143
  919. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js.map +1 -1
  920. package/packages/database/index.js +1 -0
  921. package/packages/database/index.js.map +1 -1
  922. package/packages/database/src/lib/analysisBranchToDb.js +1 -1
  923. package/packages/database/src/lib/analysisBranchToDb.js.map +1 -1
  924. package/packages/database/src/lib/analysisToDb.js +1 -1
  925. package/packages/database/src/lib/analysisToDb.js.map +1 -1
  926. package/packages/database/src/lib/branchToDb.js +1 -1
  927. package/packages/database/src/lib/branchToDb.js.map +1 -1
  928. package/packages/database/src/lib/commitBranchToDb.js +1 -1
  929. package/packages/database/src/lib/commitBranchToDb.js.map +1 -1
  930. package/packages/database/src/lib/commitToDb.js +1 -1
  931. package/packages/database/src/lib/commitToDb.js.map +1 -1
  932. package/packages/database/src/lib/fileToDb.js +1 -1
  933. package/packages/database/src/lib/fileToDb.js.map +1 -1
  934. package/packages/database/src/lib/kysely/db.js +8 -0
  935. package/packages/database/src/lib/kysely/db.js.map +1 -1
  936. package/packages/database/src/lib/kysely/tables/editorScenariosTable.js +149 -0
  937. package/packages/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -0
  938. package/packages/database/src/lib/kysely/tables/labsRequestsTable.js +35 -0
  939. package/packages/database/src/lib/kysely/tables/labsRequestsTable.js.map +1 -0
  940. package/packages/database/src/lib/loadAnalysis.js +7 -1
  941. package/packages/database/src/lib/loadAnalysis.js.map +1 -1
  942. package/packages/database/src/lib/loadCommits.js +23 -13
  943. package/packages/database/src/lib/loadCommits.js.map +1 -1
  944. package/packages/database/src/lib/loadEntities.js +0 -6
  945. package/packages/database/src/lib/loadEntities.js.map +1 -1
  946. package/packages/database/src/lib/loadEntity.js +5 -5
  947. package/packages/database/src/lib/loadEntity.js.map +1 -1
  948. package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.js +1 -4
  949. package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.js.map +1 -1
  950. package/packages/database/src/lib/projectToDb.js +1 -1
  951. package/packages/database/src/lib/projectToDb.js.map +1 -1
  952. package/packages/database/src/lib/saveFiles.js +1 -1
  953. package/packages/database/src/lib/saveFiles.js.map +1 -1
  954. package/packages/database/src/lib/scenarioToDb.js +1 -1
  955. package/packages/database/src/lib/scenarioToDb.js.map +1 -1
  956. package/packages/database/src/lib/updateCommitMetadata.js +76 -90
  957. package/packages/database/src/lib/updateCommitMetadata.js.map +1 -1
  958. package/packages/database/src/lib/updateFreshAnalysisStatus.js +41 -30
  959. package/packages/database/src/lib/updateFreshAnalysisStatus.js.map +1 -1
  960. package/packages/database/src/lib/updateFreshAnalysisStatusWithScenarios.js +68 -57
  961. package/packages/database/src/lib/updateFreshAnalysisStatusWithScenarios.js.map +1 -1
  962. package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js +29 -1
  963. package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js.map +1 -1
  964. package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +33 -5
  965. package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
  966. package/packages/types/src/enums/ProjectFramework.js +2 -0
  967. package/packages/types/src/enums/ProjectFramework.js.map +1 -1
  968. package/packages/utils/src/lib/fs/rsyncCopy.js +120 -4
  969. package/packages/utils/src/lib/fs/rsyncCopy.js.map +1 -1
  970. package/scripts/npm-post-install.cjs +34 -0
  971. package/codeyam-cli/src/commands/detect-universal-mocks.js +0 -118
  972. package/codeyam-cli/src/commands/detect-universal-mocks.js.map +0 -1
  973. package/codeyam-cli/src/commands/list.js +0 -31
  974. package/codeyam-cli/src/commands/list.js.map +0 -1
  975. package/codeyam-cli/src/commands/webapp-info.js +0 -146
  976. package/codeyam-cli/src/commands/webapp-info.js.map +0 -1
  977. package/codeyam-cli/src/utils/universal-mocks.js +0 -152
  978. package/codeyam-cli/src/utils/universal-mocks.js.map +0 -1
  979. package/codeyam-cli/src/webserver/build/client/assets/CopyButton-CA3JxPb7.js +0 -1
  980. package/codeyam-cli/src/webserver/build/client/assets/EntityTypeBadge-B5ctlSYt.js +0 -1
  981. package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-ClaLpuOo.js +0 -34
  982. package/codeyam-cli/src/webserver/build/client/assets/InteractivePreview-BDhPilK7.js +0 -25
  983. package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-VeqEBv9v.js +0 -3
  984. package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-Gq3Ocjo6.js +0 -1
  985. package/codeyam-cli/src/webserver/build/client/assets/TruncatedFilePath-CiwXDxLh.js +0 -1
  986. package/codeyam-cli/src/webserver/build/client/assets/agent-transcripts-DfKzxuoe.js +0 -11
  987. package/codeyam-cli/src/webserver/build/client/assets/chunk-JZWAC4HX-JE9ZIoBl.js +0 -51
  988. package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-Ca9fAY46.js +0 -21
  989. package/codeyam-cli/src/webserver/build/client/assets/cy-logo-cli-DcX-ZS3p.js +0 -1
  990. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-C5lqplTC.js +0 -1
  991. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-CBoafmVs.js +0 -6
  992. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-DGgZjdFg.js +0 -6
  993. package/codeyam-cli/src/webserver/build/client/assets/fileTableUtils-DCPhhSMo.js +0 -1
  994. package/codeyam-cli/src/webserver/build/client/assets/files-Dk8wkAS7.js +0 -1
  995. package/codeyam-cli/src/webserver/build/client/assets/git-DXnyr8uP.js +0 -15
  996. package/codeyam-cli/src/webserver/build/client/assets/globals-Bh6jH0cL.css +0 -1
  997. package/codeyam-cli/src/webserver/build/client/assets/labs-BUvfJMNR.js +0 -1
  998. package/codeyam-cli/src/webserver/build/client/assets/manifest-d4e77269.js +0 -1
  999. package/codeyam-cli/src/webserver/build/client/assets/memory-DCHBwHou.js +0 -76
  1000. package/codeyam-cli/src/webserver/build/client/assets/root-D6oziHts.js +0 -62
  1001. package/codeyam-cli/src/webserver/build/client/assets/settings-B2X7lJgQ.js +0 -1
  1002. package/codeyam-cli/src/webserver/build/client/assets/simulations-CPoAg7Zo.js +0 -1
  1003. package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-DNwUduNu.js +0 -1
  1004. package/codeyam-cli/src/webserver/build/client/assets/useLastLogLine-COky1GVF.js +0 -2
  1005. package/codeyam-cli/src/webserver/build/client/assets/useReportContext-CpZgwliL.js +0 -1
  1006. package/codeyam-cli/src/webserver/build/client/assets/useToast-Bv9JFvUO.js +0 -1
  1007. package/codeyam-cli/src/webserver/build/server/assets/index-C0KrUQp-.js +0 -1
  1008. package/codeyam-cli/src/webserver/build/server/assets/server-build-C2h1v1XD.js +0 -260
  1009. package/codeyam-cli/templates/codeyam-stop-hook.sh +0 -284
  1010. package/codeyam-cli/templates/codeyam:diagnose.md +0 -803
  1011. package/scripts/finalize-analyzer.cjs +0 -81
@@ -2,11 +2,13 @@
2
2
  """
3
3
  Rule reflection hook for Claude Code.
4
4
 
5
- Two responsibilities, now split into independent agents:
6
- 1. Check for stale rules (files changed since rule was last reviewed) and prompt review
7
- 2. Review conversation for confusion signals (mistakes, corrections, interruptions)
5
+ Handles two hook events:
6
+ 1. Stop Reviews completed turns for stale rules and conversation confusion signals
7
+ 2. UserPromptSubmit Detects user interruptions (Escape/Ctrl+C) by checking if the
8
+ Stop hook's marker file is stale, then spawns a rule-reflection agent focused on
9
+ the interruption signal
8
10
 
9
- Each fires as a separate `claude -p` invocation so the LLM can focus on one task at a time.
11
+ Each review fires as a separate `claude -p` invocation so the LLM can focus on one task at a time.
10
12
  Stays silent if there's nothing to review.
11
13
 
12
14
  Prompt text lives in templates/prompts/*.txt (single source of truth shared with TypeScript tests).
@@ -16,6 +18,7 @@ import json
16
18
  import os
17
19
  import subprocess
18
20
  import sys
21
+ from datetime import datetime
19
22
  from pathlib import Path
20
23
 
21
24
  MIN_USER_TURNS = 3 # Minimum user turns before checking for confusion
@@ -117,6 +120,51 @@ def read_rule_content(rule_name):
117
120
  return text
118
121
 
119
122
 
123
+ def get_project_slug():
124
+ """
125
+ Derive project slug from .codeyam/config.json (matching getProjectSlug() on the TS side).
126
+ Falls back to os.path.basename(project_dir) if config is absent or malformed.
127
+ """
128
+ project_dir = os.environ.get('CLAUDE_PROJECT_DIR', os.getcwd())
129
+ try:
130
+ config_path = os.path.join(project_dir, '.codeyam', 'config.json')
131
+ with open(config_path, 'r') as f:
132
+ config = json.load(f)
133
+ slug = config.get('projectSlug', '')
134
+ if slug:
135
+ return slug
136
+ except (IOError, json.JSONDecodeError, KeyError):
137
+ pass
138
+ return os.path.basename(project_dir)
139
+
140
+
141
+ def load_memory_settings():
142
+ """
143
+ Load memory settings from .codeyam/config.json.
144
+ Returns dict with safe defaults when absent or malformed.
145
+ """
146
+ defaults = {
147
+ 'conversationReflection': True,
148
+ 'ruleMaintenance': True,
149
+ 'promptModel': 'haiku',
150
+ }
151
+ try:
152
+ project_dir = os.environ.get('CLAUDE_PROJECT_DIR', os.getcwd())
153
+ config_path = os.path.join(project_dir, '.codeyam', 'config.json')
154
+ with open(config_path, 'r') as f:
155
+ config = json.load(f)
156
+ memory = config.get('memory', {})
157
+ if not isinstance(memory, dict):
158
+ return defaults
159
+ return {
160
+ 'conversationReflection': memory.get('conversationReflection', True),
161
+ 'ruleMaintenance': memory.get('ruleMaintenance', True),
162
+ 'promptModel': memory.get('promptModel', 'haiku'),
163
+ }
164
+ except (IOError, json.JSONDecodeError, KeyError):
165
+ return defaults
166
+
167
+
120
168
  def get_stale_rules():
121
169
  """
122
170
  Run `codeyam memory status` and parse the output to find stale rules.
@@ -154,8 +202,8 @@ def get_stale_rules():
154
202
  # Look for the next few lines for details
155
203
  for j in range(i + 1, min(i + 4, len(lines))):
156
204
  detail = lines[j].strip()
157
- if detail.startswith('Rule timestamp:'):
158
- rule_info['rule_timestamp'] = detail.replace('Rule timestamp:', '').strip()
205
+ if detail.startswith('Last audited:'):
206
+ rule_info['last_audited'] = detail.replace('Last audited:', '').strip()
159
207
  elif detail.startswith('Newest file:'):
160
208
  rule_info['newest_file'] = detail.replace('Newest file:', '').strip()
161
209
  elif detail.startswith('File modified:'):
@@ -250,6 +298,28 @@ def get_conversation_context(transcript_path, last_line):
250
298
  return user_turn_count, conversation_snippets, modified_files, current_line_count
251
299
 
252
300
 
301
+ def has_assistant_messages(transcript_path, start_line):
302
+ """
303
+ Check if there are any assistant messages in the transcript after start_line.
304
+ Used to confirm Claude actually started responding before treating a gap as an interruption.
305
+ """
306
+ try:
307
+ with open(transcript_path, 'r') as f:
308
+ all_lines = f.readlines()
309
+ except IOError:
310
+ return False
311
+
312
+ for line in all_lines[start_line:]:
313
+ try:
314
+ obj = json.loads(line)
315
+ if obj.get('type') == 'assistant':
316
+ return True
317
+ except (json.JSONDecodeError, KeyError):
318
+ continue
319
+
320
+ return False
321
+
322
+
253
323
  def build_stale_rules_context(stale_rules):
254
324
  """Build context content for stale rules review."""
255
325
  parts = []
@@ -261,7 +331,7 @@ def build_stale_rules_context(stale_rules):
261
331
  parts.append("For each rule, review the rule content and the diff of changes, then:")
262
332
  parts.append("1. Determine if the rule content needs updating based on the code changes")
263
333
  parts.append("2. Update the rule if needed")
264
- parts.append("3. ALWAYS update the timestamp (run `codeyam memory touch`)\n")
334
+ parts.append("3. Run `codeyam memory touch <rule-path1> <rule-path2> ...` with the SPECIFIC rule paths you reviewed to mark them as audited\n")
265
335
 
266
336
  for rule in stale_rules:
267
337
  parts.append(f"### {rule['name']}")
@@ -273,8 +343,8 @@ def build_stale_rules_context(stale_rules):
273
343
  parts.append(f" Changed file: {rule['newest_file']}")
274
344
  if rule.get('file_modified'):
275
345
  parts.append(f" File modified: {rule['file_modified']}")
276
- if rule.get('rule_timestamp'):
277
- parts.append(f" Rule timestamp: {rule['rule_timestamp']}")
346
+ if rule.get('last_audited'):
347
+ parts.append(f" Last audited: {rule['last_audited']}")
278
348
  if rule.get('diff'):
279
349
  parts.append(f" Changes:")
280
350
  for line in rule['diff'].split('\n'):
@@ -314,7 +384,41 @@ def build_conversation_context(conversation_snippets, modified_files):
314
384
  return '\n'.join(parts)
315
385
 
316
386
 
317
- def spawn_claude_agent(prompt, log_file, project_dir):
387
+ def build_interruption_context(conversation_snippets, follow_up_prompt, modified_files):
388
+ """Build context content for an interrupted session review."""
389
+ parts = []
390
+ parts.append("## Interruption Review\n")
391
+ parts.append(
392
+ "The user interrupted Claude mid-response — a strong signal of confusion or misunderstanding. "
393
+ "Review the interrupted conversation and the user's follow-up to identify rule-worthy learnings.\n"
394
+ )
395
+
396
+ # Load guidance from shared template file
397
+ guidance = (PROMPTS_DIR / 'conversation-guidance.txt').read_text()
398
+ parts.append(guidance)
399
+
400
+ if modified_files:
401
+ parts.append("Files modified this session:")
402
+ for file_path, tool_name in sorted(modified_files):
403
+ parts.append(f"- {file_path} ({tool_name})")
404
+ parts.append("")
405
+
406
+ parts.append("### Session transcript\n")
407
+ summary_lines = []
408
+ for snippet in conversation_snippets:
409
+ role = snippet['role']
410
+ content = snippet['content'].replace('\n', ' ')
411
+ summary_lines.append(f"[{role}]: {content}")
412
+ parts.append('\n'.join(summary_lines))
413
+
414
+ parts.append("")
415
+ parts.append("### User's follow-up after interruption\n")
416
+ parts.append(follow_up_prompt)
417
+
418
+ return '\n'.join(parts)
419
+
420
+
421
+ def spawn_claude_agent(prompt, log_file, project_dir, model='haiku'):
318
422
  """Spawn a detached claude -p agent as a background process."""
319
423
  try:
320
424
  log_fh = open(log_file, 'w')
@@ -322,7 +426,8 @@ def spawn_claude_agent(prompt, log_file, project_dir):
322
426
  env['CODEYAM_RULE_AGENT'] = '1'
323
427
  subprocess.Popen(
324
428
  ['claude', '-p', prompt,
325
- '--model', 'haiku',
429
+ '--model', model,
430
+ '--no-session-persistence',
326
431
  '--output-format', 'stream-json', '--verbose',
327
432
  '--allowedTools', 'Read,Edit,Write,Bash,Glob,Grep'],
328
433
  cwd=project_dir,
@@ -335,81 +440,69 @@ def spawn_claude_agent(prompt, log_file, project_dir):
335
440
  pass # claude CLI not available, skip silently
336
441
 
337
442
 
338
- def main():
339
- # Read hook input from stdin
340
- try:
341
- hook_input = json.load(sys.stdin)
342
- except json.JSONDecodeError:
343
- return
443
+ def read_marker(marker_file):
444
+ """
445
+ Read marker file. Returns (last_line, written_by_stop).
446
+ Format: "<line_count>" or "<line_count> stop" — the suffix distinguishes
447
+ whether the Stop hook wrote this marker (normal completion) vs the
448
+ UserPromptSubmit handler (interruption detection).
449
+ """
450
+ if marker_file.exists():
451
+ try:
452
+ text = marker_file.read_text().strip()
453
+ parts = text.split()
454
+ line_count = int(parts[0])
455
+ was_stop = len(parts) > 1 and parts[1] == 'stop'
456
+ return line_count, was_stop
457
+ except (ValueError, IOError):
458
+ pass
459
+ return 0, False
460
+
461
+
462
+ def write_marker(marker_file, line_count, source='submit'):
463
+ """Write marker with source tag. source is 'stop' or 'submit'."""
464
+ marker_file.write_text(f'{line_count} {source}')
465
+
466
+
467
+ def handle_stop(hook_input):
468
+ """
469
+ Handle the Stop hook event.
470
+ Reviews completed turns for stale rules and conversation confusion signals.
471
+
472
+ Important: the fast work (transcript parsing, marker update, conversation
473
+ agent spawn) runs first. The slow `get_stale_rules()` call (~10s) runs last
474
+ so the hook timeout doesn't kill us before the critical work is done.
475
+ """
476
+ settings = load_memory_settings()
344
477
 
345
478
  session_id = hook_input.get('session_id', '')
346
479
  transcript_path = hook_input.get('transcript_path', '')
347
- stop_hook_active = hook_input.get('stop_hook_active', False)
348
-
349
- # Prevent infinite loops — stop_hook_active covers same-process recursion,
350
- # env var covers spawned subagent sessions triggering the hook on exit
351
- if stop_hook_active or os.environ.get('CODEYAM_RULE_AGENT'):
352
- return
353
480
 
354
481
  if not session_id or not transcript_path:
355
482
  return
356
483
 
357
- marker_dir = Path('/tmp/claude-rule-markers')
358
- marker_dir.mkdir(exist_ok=True)
484
+ slug = get_project_slug()
485
+ marker_dir = Path('/tmp/claude-rule-markers') / slug
486
+ marker_dir.mkdir(parents=True, exist_ok=True)
359
487
  marker_file = marker_dir / f'{session_id}.marker'
360
488
 
361
- # Read last checked line
362
- last_line = 0
363
- if marker_file.exists():
364
- try:
365
- last_line = int(marker_file.read_text().strip())
366
- except (ValueError, IOError):
367
- last_line = 0
368
-
369
- # Check for stale rules
370
- stale_rules = get_stale_rules()
489
+ last_line, _ = read_marker(marker_file)
371
490
 
372
- # Get conversation context
491
+ # Fast: parse transcript for conversation context
373
492
  user_turn_count, conversation_snippets, modified_files, current_line_count = get_conversation_context(
374
493
  transcript_path, last_line
375
494
  )
376
495
 
377
- # Determine what to include in review
378
- has_stale_rules = len(stale_rules) > 0
379
- has_conversation = len(conversation_snippets) > 0
380
-
381
- # Only fire if there's something to review
382
- if not has_stale_rules and not has_conversation:
383
- return
384
-
385
- # Update marker
386
- marker_file.write_text(str(current_line_count))
496
+ # Update marker immediately so UserPromptSubmit knows Stop ran,
497
+ # even if we get killed during the slow stale rules check below
498
+ write_marker(marker_file, current_line_count, 'stop')
387
499
 
388
500
  project_dir = os.environ.get('CLAUDE_PROJECT_DIR', os.getcwd())
389
-
390
- # Unique suffix per invocation so each Stop produces a distinct transcript
391
- from datetime import datetime
392
501
  invocation_ts = datetime.now().strftime('%Y%m%d-%H%M%S')
393
502
  invocation_id = f'{session_id}-{invocation_ts}'
394
503
 
395
- # Spawn independent agent for stale rules review
396
- if has_stale_rules:
397
- stale_context = build_stale_rules_context(stale_rules)
398
- stale_context_file = marker_dir / f'{invocation_id}-stale.context'
399
- stale_context_file.write_text(stale_context)
400
-
401
- stale_log_file = marker_dir / f'{invocation_id}-stale.log'
402
- stale_notification_file = marker_dir / 'rule-notification-stale.md'
403
- stale_prompt = load_prompt_template(
404
- 'stale-rules-prompt.txt',
405
- CONTEXT_FILE=str(stale_context_file),
406
- NOTIFICATION_FILE=str(stale_notification_file),
407
- PROJECT_DIR=project_dir,
408
- )
409
- spawn_claude_agent(stale_prompt, stale_log_file, project_dir)
410
-
411
- # Spawn independent agent for conversation review
412
- if has_conversation:
504
+ # Fast: spawn conversation review agent first (if enabled)
505
+ if settings['conversationReflection'] and len(conversation_snippets) > 0:
413
506
  conv_context = build_conversation_context(conversation_snippets, modified_files)
414
507
  conv_context_file = marker_dir / f'{invocation_id}-conversation.context'
415
508
  conv_context_file.write_text(conv_context)
@@ -422,7 +515,133 @@ def main():
422
515
  NOTIFICATION_FILE=str(conv_notification_file),
423
516
  PROJECT_DIR=project_dir,
424
517
  )
425
- spawn_claude_agent(conv_prompt, conv_log_file, project_dir)
518
+ spawn_claude_agent(conv_prompt, conv_log_file, project_dir, model=settings['promptModel'])
519
+
520
+ # Slow (~10s): check for stale rules last — if the hook timeout kills us
521
+ # here, the conversation agent and marker are already handled
522
+ if settings['ruleMaintenance']:
523
+ stale_rules = get_stale_rules()
524
+
525
+ if len(stale_rules) > 0:
526
+ stale_context = build_stale_rules_context(stale_rules)
527
+ stale_context_file = marker_dir / f'{invocation_id}-stale.context'
528
+ stale_context_file.write_text(stale_context)
529
+
530
+ stale_log_file = marker_dir / f'{invocation_id}-stale.log'
531
+ stale_notification_file = marker_dir / 'rule-notification-stale.md'
532
+ stale_prompt = load_prompt_template(
533
+ 'stale-rules-prompt.txt',
534
+ CONTEXT_FILE=str(stale_context_file),
535
+ NOTIFICATION_FILE=str(stale_notification_file),
536
+ PROJECT_DIR=project_dir,
537
+ )
538
+ spawn_claude_agent(stale_prompt, stale_log_file, project_dir, model=settings['promptModel'])
539
+
540
+
541
+ def handle_user_prompt_submit(hook_input):
542
+ """
543
+ Handle the UserPromptSubmit hook event.
544
+ Detects whether the previous turn was interrupted by checking if the Stop hook's
545
+ marker file is stale (transcript has lines beyond the marker). If so, spawns a
546
+ rule-reflection agent focused on the interruption.
547
+ """
548
+ settings = load_memory_settings()
549
+
550
+ # Interruption detection is part of conversation reflection
551
+ if not settings['conversationReflection']:
552
+ return
553
+
554
+ session_id = hook_input.get('session_id', '')
555
+ transcript_path = hook_input.get('transcript_path', '')
556
+ follow_up_prompt = hook_input.get('prompt', '')
557
+
558
+ if not session_id or not transcript_path:
559
+ return
560
+
561
+ slug = get_project_slug()
562
+ marker_dir = Path('/tmp/claude-rule-markers') / slug
563
+ marker_dir.mkdir(parents=True, exist_ok=True)
564
+ marker_file = marker_dir / f'{session_id}.marker'
565
+
566
+ last_line, was_stop = read_marker(marker_file)
567
+
568
+ # If the Stop hook already ran for the previous turn, this is a normal
569
+ # completion — not an interruption. The Stop hook tags the marker with
570
+ # 'stop' when it writes it.
571
+ if was_stop:
572
+ return
573
+
574
+ # Count current transcript lines
575
+ try:
576
+ with open(transcript_path, 'r') as f:
577
+ current_line_count = sum(1 for _ in f)
578
+ except IOError:
579
+ return
580
+
581
+ # Quick exit: if nothing new since the marker, definitely no interruption
582
+ if current_line_count <= last_line:
583
+ return
584
+
585
+ # Verify Claude actually started responding in the unprocessed lines.
586
+ # Guards against false positives on first prompt (no assistant yet) or
587
+ # if the user hit Escape before Claude produced any output.
588
+ if not has_assistant_messages(transcript_path, last_line):
589
+ return
590
+
591
+ # Interruption detected! Build context and spawn agent.
592
+ _, conversation_snippets, modified_files, _ = get_conversation_context(
593
+ transcript_path, last_line
594
+ )
595
+
596
+ if not conversation_snippets:
597
+ return
598
+
599
+ # Update marker so we don't re-process these lines
600
+ write_marker(marker_file, current_line_count, 'submit')
601
+
602
+ project_dir = os.environ.get('CLAUDE_PROJECT_DIR', os.getcwd())
603
+
604
+ invocation_ts = datetime.now().strftime('%Y%m%d-%H%M%S')
605
+ invocation_id = f'{session_id}-{invocation_ts}'
606
+
607
+ interruption_context = build_interruption_context(
608
+ conversation_snippets, follow_up_prompt, modified_files
609
+ )
610
+ context_file = marker_dir / f'{invocation_id}-interruption.context'
611
+ context_file.write_text(interruption_context)
612
+
613
+ log_file = marker_dir / f'{invocation_id}-interruption.log'
614
+ notification_file = marker_dir / 'rule-notification-interruption.md'
615
+ prompt = load_prompt_template(
616
+ 'interruption-prompt.txt',
617
+ CONTEXT_FILE=str(context_file),
618
+ NOTIFICATION_FILE=str(notification_file),
619
+ PROJECT_DIR=project_dir,
620
+ )
621
+ spawn_claude_agent(prompt, log_file, project_dir, model=settings['promptModel'])
622
+
623
+
624
+ def main():
625
+ # Read hook input from stdin
626
+ try:
627
+ hook_input = json.load(sys.stdin)
628
+ except json.JSONDecodeError:
629
+ return
630
+
631
+ stop_hook_active = hook_input.get('stop_hook_active', False)
632
+
633
+ # Prevent infinite loops — stop_hook_active covers same-process recursion,
634
+ # env var covers spawned subagent sessions triggering the hook on exit
635
+ if stop_hook_active or os.environ.get('CODEYAM_RULE_AGENT'):
636
+ return
637
+
638
+ # Detect event type: UserPromptSubmit has a 'prompt' field, Stop does not
639
+ is_user_prompt = 'prompt' in hook_input
640
+ if is_user_prompt:
641
+ handle_user_prompt_submit(hook_input)
642
+ else:
643
+ handle_stop(hook_input)
644
+
426
645
 
427
646
  if __name__ == '__main__':
428
647
  main()
@@ -4,120 +4,75 @@ Rules provide context-specific guidance when working in files matching their `pa
4
4
 
5
5
  ## Core Principles
6
6
 
7
- 1. **One concept per rule** - Each rule should cover a single topic. If you're documenting two unrelated things, create two rules.
8
- 2. **Paths must match content scope** - A rule about one specific file should have that file in `paths`, not a broad `**/*.ts` pattern.
9
- 3. **Be concise** - Every word costs context. Use bullets and tables.
7
+ 1. **One concept per rule** If you're documenting two unrelated things, create two rules.
8
+ 2. **Paths must match content scope** A rule about one file should have that file in `paths`, not a broad `**/*.ts` pattern.
9
+ 3. **Keep rules SHORT** Most rules should be **1-4 bullets**. Only complex multi-file architectures should exceed ~10 lines.
10
10
 
11
- ## When to Create a New Rule
11
+ **Example** a typical rule:
12
12
 
13
- Create a new rule when:
14
-
15
- - You learn something non-obvious about the codebase
16
- - You make a mistake and want to prevent it in the future
17
- - The user explains something that isn't clear from the code
18
- - An existing rule is covering multiple unrelated topics (split it)
19
-
20
- ## Before Creating: The Confusion Test
21
-
22
- Only create rules that document genuinely confusing aspects—not things Claude can figure out by reading code and will likely come up again in future sessions.
23
-
24
- **Ask yourself:**
25
-
26
- 1. **Could Claude figure this out by reading the code?**
27
- - If YES → don't create the rule
28
- - If NO → proceed
29
-
30
- 2. **Does this explain "why" not just "what"?**
31
- - Good: Historical context, gotchas, non-obvious behavior, non-obvious architectural decisions
32
- - Bad: Bug fixes, Limitations (unless the user requests the limitation be noted), What functions do (unless providing a high-level architectural overview)
33
-
34
- 3. **Would this have prevented a past mistake?**
35
- - If you can point to a bug or confusion this would have prevented → create it
36
- - If it's just "nice to know" → skip it
37
-
38
- ### Examples
39
-
40
- **✅ Worth documenting:**
41
-
42
- - Where to add new functionality
43
- - An overview of all files, classes, functions, etc used in a particular part of the repo
44
- - Debugging strategies for a particular area of the repo
45
- - "Use `pnpm test` to run tests" (if there is more than one way to run tests and this way is preferred)
46
-
47
- **❌ Not worth documenting:**
48
-
49
- - "The auth module handles authentication" (obvious from reading code)
50
- - "This function takes X and returns Y" (Claude can read the signature)
13
+ ```markdown
14
+ ---
15
+ paths:
16
+ - 'packages/ai/src/lib/generateMockData.ts'
17
+ ---
51
18
 
52
- ## Path Specificity
19
+ # Mock Data Generation
53
20
 
54
- The `paths` field controls when the rule is shown. Match the scope of your content:
21
+ - Entry point: `generateMockData()` in `generateMockData.ts`
22
+ - Uses `convertDotNotation` to transform flat schema into nested objects
23
+ - Schema entry ORDER matters — `key[]` must come before `key[].property` or arrays get overwritten
24
+ - Test with exact ordering from database, not just same entries
25
+ ```
55
26
 
56
- | Content Scope | Path Pattern | Example |
57
- | ------------- | ----------------------- | ------------------------------------------------------ |
58
- | Single file | `'path/to/file.ts'` | Rule about `processExpression.ts` specifically |
59
- | Related files | `'path/to/feature*.ts'` | Rule about `generateExecutionFlows*.ts` files |
60
- | Directory | `'path/to/dir/**/*.ts'` | Rule about the queue system in `utils/queue/` |
61
- | Cross-cutting | Multiple specific paths | Testing rule with paths to test configs and test files |
27
+ ## When to Create a Rule
62
28
 
63
- **Anti-pattern**: Don't use `'**/*.ts'` for a rule about one specific feature.
29
+ Create a rule when you learn something that **reading the code alone wouldn't reveal**:
64
30
 
65
- ## File Structure
31
+ - Non-obvious gotchas or behavior that caused real confusion or bugs
32
+ - Architecture, file relationships, or data flows that take time to piece together
33
+ - Debugging strategies for a tricky area of the codebase
34
+ - Preferred commands or workflows when multiple options exist (e.g. "Use `pnpm test` to run tests")
35
+ - User corrections or explanations that aren't captured in the code itself
66
36
 
67
- Rules mirror the source code structure:
37
+ **Skip** rules that restate what the code says — function signatures, type definitions, "this module handles X." Claude can read the code.
68
38
 
69
- | Source Location | Rule Location |
70
- | -------------------- | --------------------------------------- |
71
- | `src/api/auth.ts` | `.claude/rules/src/api/auth.md` |
72
- | `src/utils/queue/**` | `.claude/rules/src/utils/queue.md` |
73
- | Test configuration | `.claude/rules/testing/jest-configs.md` |
39
+ ## Frontmatter & Paths
74
40
 
75
- ## Required Frontmatter
41
+ Every rule needs a `paths` frontmatter field. Be specific to avoid loading rules unnecessarily:
76
42
 
77
43
  ```yaml
78
44
  ---
79
45
  paths:
80
46
  - 'specific/path/to/file.ts'
81
47
  - 'another/specific/path/*.ts'
82
- timestamp: 2026-01-30T00:00:00Z
83
48
  ---
84
49
  ```
85
50
 
86
- | Field | Purpose |
87
- | ----------- | ---------------------------------------------------------------- |
88
- | `paths` | Glob patterns - be specific to avoid loading rules unnecessarily |
89
- | `timestamp` | ISO 8601 - update when rule is reviewed |
90
-
91
- ## Content Guidelines
92
-
93
- ### Be Actionable
94
-
95
- - Good: "Run `pnpm test:api` for API tests"
96
- - Bad: "Make sure to run the appropriate tests"
51
+ | Content Scope | Path Pattern | Example |
52
+ | ------------- | ----------------------- | ---------------------------------------------- |
53
+ | Single file | `'path/to/file.ts'` | Rule about `processExpression.ts` specifically |
54
+ | Related files | `'path/to/feature*.ts'` | Rule about `generateExecutionFlows*.ts` files |
55
+ | Directory | `'path/to/dir/**/*.ts'` | Rule about the queue system in `utils/queue/` |
56
+ | Cross-cutting | Multiple specific paths | Testing rule spanning test configs and tests |
97
57
 
98
- ### Focus on What, Not What Not
58
+ Audit dates live in `.claude/codeyam-rule-state.json` (managed by `codeyam memory touch`). Keep frontmatter limited to `paths`.
99
59
 
100
- - Good: "Auth tokens are stored in httpOnly cookies via `src/auth/cookies.ts`"
101
- - Bad: "WARNING: Don't store tokens in localStorage!"
60
+ ## File Placement
102
61
 
103
- ### Keep Rules Short
62
+ Rules must be written to `.claude/rules/`, NOT `.codeyam/rules/`. The instructions file lives in `.codeyam/` but actual rule files go in `.claude/rules/`.
104
63
 
105
- - Target 30-50 lines
106
- - If a rule exceeds 60 lines, consider splitting it
64
+ Use `codeyam memory rule-path` to compute the correct directory from your frontmatter paths:
107
65
 
108
- ## Categories
109
-
110
- **architecture** - Design decisions, file relationships, data flow
111
-
112
- - "These three files must change together because..."
113
- - "Data flows from X → Y → Z"
114
-
115
- **testing** - Test commands, mock patterns, fixtures
66
+ ```
67
+ $ codeyam memory rule-path packages/ai/src/lib/foo.ts packages/ai/src/utils/bar.ts
68
+ {"result":".claude/rules/packages/ai/src/"}
69
+ ```
116
70
 
117
- - "Run tests with: `pnpm test path/to/test.ts`"
118
- - "Must run `pnpm pretest` first because..."
71
+ The command computes the deepest common directory shared by all paths and returns the `.claude/rules/` subdirectory where the rule file should live. Reserve the top level of `.claude/rules/` for rules whose paths genuinely span the entire repo.
119
72
 
120
- **faq** - Gotchas, workarounds, common questions
73
+ ## Content Guidelines
121
74
 
122
- - "If you see error X, it means Y"
123
- - "This looks wrong but is intentional because..."
75
+ - **Be actionable** — "Run `pnpm test:api` for API tests" not "Make sure to run the appropriate tests"
76
+ - **Focus on why, not what** Gotchas, non-obvious behavior, architectural decisions. The code already shows "what."
77
+ - **Point to specifics** — "Auth tokens are stored in httpOnly cookies via `src/auth/cookies.ts`" beats a vague description.
78
+ - **Be short!** - Context window space is precious! Do not ramble, use bullets, focus on providing clear actionable information.