@codeyam/codeyam-cli 0.1.0-staging.d3e886e → 0.1.0-staging.dbc742d

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 (646) hide show
  1. package/analyzer-template/.build-info.json +7 -7
  2. package/analyzer-template/log.txt +3 -3
  3. package/analyzer-template/package.json +22 -22
  4. package/analyzer-template/packages/ai/package.json +2 -2
  5. package/analyzer-template/packages/ai/src/lib/astScopes/astScopeAnalyzer.ts +34 -3
  6. package/analyzer-template/packages/ai/src/lib/completionCall.ts +114 -113
  7. package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +259 -5
  8. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/coercePrimitivesToArraysBySchema.ts +62 -0
  9. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/stripNullableMarkers.ts +35 -0
  10. package/analyzer-template/packages/ai/src/lib/generateEntityScenarioData.ts +78 -2
  11. package/analyzer-template/packages/ai/src/lib/generateExecutionFlows.ts +0 -33
  12. package/analyzer-template/packages/analyze/src/lib/ProjectAnalyzer.ts +19 -7
  13. package/analyzer-template/packages/analyze/src/lib/asts/index.ts +7 -2
  14. package/analyzer-template/packages/analyze/src/lib/asts/nodes/getNodeType.ts +1 -0
  15. package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities.ts +9 -1
  16. package/analyzer-template/packages/analyze/src/lib/files/analyze/dependencyResolver.ts +0 -6
  17. package/analyzer-template/packages/analyze/src/lib/files/analyze/findOrCreateEntity.ts +12 -0
  18. package/analyzer-template/packages/analyze/src/lib/files/scenarios/TransformationTracer.ts +65 -28
  19. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +83 -0
  20. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.ts +0 -98
  21. package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +23 -4
  22. package/analyzer-template/packages/aws/package.json +10 -10
  23. package/analyzer-template/packages/database/index.ts +1 -0
  24. package/analyzer-template/packages/database/package.json +3 -3
  25. package/analyzer-template/packages/database/src/lib/kysely/db.ts +8 -0
  26. package/analyzer-template/packages/database/src/lib/kysely/tables/editorScenariosTable.ts +93 -0
  27. package/analyzer-template/packages/database/src/lib/loadCommits.ts +31 -20
  28. package/analyzer-template/packages/database/src/lib/loadEntities.ts +0 -6
  29. package/analyzer-template/packages/database/src/lib/loadReadyToBeCapturedAnalyses.ts +0 -5
  30. package/analyzer-template/packages/database/src/lib/updateCommitMetadata.ts +94 -143
  31. package/analyzer-template/packages/database/src/lib/updateFreshAnalysisStatus.ts +58 -42
  32. package/analyzer-template/packages/database/src/lib/updateFreshAnalysisStatusWithScenarios.ts +81 -65
  33. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.ts +29 -1
  34. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.ts +33 -5
  35. package/analyzer-template/packages/github/dist/database/index.d.ts +1 -0
  36. package/analyzer-template/packages/github/dist/database/index.d.ts.map +1 -1
  37. package/analyzer-template/packages/github/dist/database/index.js +1 -0
  38. package/analyzer-template/packages/github/dist/database/index.js.map +1 -1
  39. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts +2 -0
  40. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts.map +1 -1
  41. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js +5 -0
  42. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js.map +1 -1
  43. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.d.ts +25 -0
  44. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.d.ts.map +1 -0
  45. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.js +76 -0
  46. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -0
  47. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts +5 -0
  48. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts.map +1 -1
  49. package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.d.ts.map +1 -1
  50. package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.js +23 -13
  51. package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.js.map +1 -1
  52. package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.d.ts.map +1 -1
  53. package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.js +0 -6
  54. package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.js.map +1 -1
  55. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.d.ts.map +1 -1
  56. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.js +1 -4
  57. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.js.map +1 -1
  58. package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.d.ts.map +1 -1
  59. package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js +76 -90
  60. package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js.map +1 -1
  61. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatus.d.ts.map +1 -1
  62. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatus.js +41 -30
  63. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatus.js.map +1 -1
  64. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatusWithScenarios.d.ts.map +1 -1
  65. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatusWithScenarios.js +68 -57
  66. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatusWithScenarios.js.map +1 -1
  67. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.d.ts.map +1 -1
  68. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js +29 -1
  69. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js.map +1 -1
  70. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.d.ts.map +1 -1
  71. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +33 -5
  72. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
  73. package/analyzer-template/packages/github/dist/types/src/enums/ProjectFramework.d.ts +2 -0
  74. package/analyzer-template/packages/github/dist/types/src/enums/ProjectFramework.d.ts.map +1 -1
  75. package/analyzer-template/packages/github/dist/types/src/enums/ProjectFramework.js +2 -0
  76. package/analyzer-template/packages/github/dist/types/src/enums/ProjectFramework.js.map +1 -1
  77. package/analyzer-template/packages/github/dist/types/src/types/ProjectMetadata.d.ts +1 -0
  78. package/analyzer-template/packages/github/dist/types/src/types/ProjectMetadata.d.ts.map +1 -1
  79. package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts +10 -0
  80. package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts.map +1 -1
  81. package/analyzer-template/packages/github/package.json +1 -1
  82. package/analyzer-template/packages/types/src/enums/ProjectFramework.ts +2 -0
  83. package/analyzer-template/packages/types/src/types/ProjectMetadata.ts +1 -0
  84. package/analyzer-template/packages/types/src/types/Scenario.ts +10 -0
  85. package/analyzer-template/packages/ui-components/package.json +1 -1
  86. package/analyzer-template/packages/utils/dist/types/src/enums/ProjectFramework.d.ts +2 -0
  87. package/analyzer-template/packages/utils/dist/types/src/enums/ProjectFramework.d.ts.map +1 -1
  88. package/analyzer-template/packages/utils/dist/types/src/enums/ProjectFramework.js +2 -0
  89. package/analyzer-template/packages/utils/dist/types/src/enums/ProjectFramework.js.map +1 -1
  90. package/analyzer-template/packages/utils/dist/types/src/types/ProjectMetadata.d.ts +1 -0
  91. package/analyzer-template/packages/utils/dist/types/src/types/ProjectMetadata.d.ts.map +1 -1
  92. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts +10 -0
  93. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts.map +1 -1
  94. package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.d.ts.map +1 -1
  95. package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.js +6 -2
  96. package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.js.map +1 -1
  97. package/analyzer-template/packages/utils/src/lib/fs/rsyncCopy.ts +14 -2
  98. package/analyzer-template/playwright/captureFromUrl.ts +89 -82
  99. package/analyzer-template/project/constructMockCode.ts +168 -48
  100. package/analyzer-template/project/orchestrateCapture.ts +4 -1
  101. package/analyzer-template/project/reconcileMockDataKeys.ts +19 -14
  102. package/analyzer-template/project/start.ts +3 -0
  103. package/analyzer-template/project/startScenarioCapture.ts +9 -0
  104. package/analyzer-template/project/writeClientLogRoute.ts +125 -0
  105. package/analyzer-template/project/writeMockDataTsx.ts +17 -0
  106. package/analyzer-template/project/writeScenarioComponents.ts +96 -17
  107. package/analyzer-template/tsconfig.json +13 -1
  108. package/background/src/lib/virtualized/project/constructMockCode.js +143 -39
  109. package/background/src/lib/virtualized/project/constructMockCode.js.map +1 -1
  110. package/background/src/lib/virtualized/project/orchestrateCapture.js +4 -1
  111. package/background/src/lib/virtualized/project/orchestrateCapture.js.map +1 -1
  112. package/background/src/lib/virtualized/project/reconcileMockDataKeys.js +17 -11
  113. package/background/src/lib/virtualized/project/reconcileMockDataKeys.js.map +1 -1
  114. package/background/src/lib/virtualized/project/start.js +2 -0
  115. package/background/src/lib/virtualized/project/start.js.map +1 -1
  116. package/background/src/lib/virtualized/project/startScenarioCapture.js +5 -0
  117. package/background/src/lib/virtualized/project/startScenarioCapture.js.map +1 -1
  118. package/background/src/lib/virtualized/project/writeClientLogRoute.js +110 -0
  119. package/background/src/lib/virtualized/project/writeClientLogRoute.js.map +1 -0
  120. package/background/src/lib/virtualized/project/writeMockDataTsx.js +12 -0
  121. package/background/src/lib/virtualized/project/writeMockDataTsx.js.map +1 -1
  122. package/background/src/lib/virtualized/project/writeScenarioComponents.js +73 -12
  123. package/background/src/lib/virtualized/project/writeScenarioComponents.js.map +1 -1
  124. package/codeyam-cli/scripts/apply-setup.js +208 -11
  125. package/codeyam-cli/scripts/apply-setup.js.map +1 -1
  126. package/codeyam-cli/src/__tests__/memory-scripts/filter-session.test.js +196 -0
  127. package/codeyam-cli/src/__tests__/memory-scripts/filter-session.test.js.map +1 -0
  128. package/codeyam-cli/src/__tests__/memory-scripts/read-json-field.test.js +114 -0
  129. package/codeyam-cli/src/__tests__/memory-scripts/read-json-field.test.js.map +1 -0
  130. package/codeyam-cli/src/__tests__/memory-scripts/ripgrep-fallback.test.js +149 -0
  131. package/codeyam-cli/src/__tests__/memory-scripts/ripgrep-fallback.test.js.map +1 -0
  132. package/codeyam-cli/src/cli.js +32 -25
  133. package/codeyam-cli/src/cli.js.map +1 -1
  134. package/codeyam-cli/src/commands/__tests__/init.gitignore.test.js +101 -47
  135. package/codeyam-cli/src/commands/__tests__/init.gitignore.test.js.map +1 -1
  136. package/codeyam-cli/src/commands/analyze.js +17 -7
  137. package/codeyam-cli/src/commands/analyze.js.map +1 -1
  138. package/codeyam-cli/src/commands/default.js +14 -2
  139. package/codeyam-cli/src/commands/default.js.map +1 -1
  140. package/codeyam-cli/src/commands/editor.js +3118 -0
  141. package/codeyam-cli/src/commands/editor.js.map +1 -0
  142. package/codeyam-cli/src/commands/init.js +107 -45
  143. package/codeyam-cli/src/commands/init.js.map +1 -1
  144. package/codeyam-cli/src/commands/memory.js +89 -75
  145. package/codeyam-cli/src/commands/memory.js.map +1 -1
  146. package/codeyam-cli/src/data/techStacks.js +77 -0
  147. package/codeyam-cli/src/data/techStacks.js.map +1 -0
  148. package/codeyam-cli/src/utils/__tests__/backgroundServer.test.js +46 -0
  149. package/codeyam-cli/src/utils/__tests__/backgroundServer.test.js.map +1 -0
  150. package/codeyam-cli/src/utils/__tests__/devServerState.test.js +134 -0
  151. package/codeyam-cli/src/utils/__tests__/devServerState.test.js.map +1 -0
  152. package/codeyam-cli/src/utils/__tests__/editorApi.test.js +127 -0
  153. package/codeyam-cli/src/utils/__tests__/editorApi.test.js.map +1 -0
  154. package/codeyam-cli/src/utils/__tests__/editorAudit.test.js +635 -0
  155. package/codeyam-cli/src/utils/__tests__/editorAudit.test.js.map +1 -0
  156. package/codeyam-cli/src/utils/__tests__/editorCapture.test.js +93 -0
  157. package/codeyam-cli/src/utils/__tests__/editorCapture.test.js.map +1 -0
  158. package/codeyam-cli/src/utils/__tests__/editorDevServer.test.js +304 -0
  159. package/codeyam-cli/src/utils/__tests__/editorDevServer.test.js.map +1 -0
  160. package/codeyam-cli/src/utils/__tests__/editorEntityChangeStatus.test.js +121 -0
  161. package/codeyam-cli/src/utils/__tests__/editorEntityChangeStatus.test.js.map +1 -0
  162. package/codeyam-cli/src/utils/__tests__/editorImageVerifier.test.js +294 -0
  163. package/codeyam-cli/src/utils/__tests__/editorImageVerifier.test.js.map +1 -0
  164. package/codeyam-cli/src/utils/__tests__/editorJournal.test.js +542 -0
  165. package/codeyam-cli/src/utils/__tests__/editorJournal.test.js.map +1 -0
  166. package/codeyam-cli/src/utils/__tests__/editorLoaderHelpers.test.js +520 -0
  167. package/codeyam-cli/src/utils/__tests__/editorLoaderHelpers.test.js.map +1 -0
  168. package/codeyam-cli/src/utils/__tests__/editorMockState.test.js +270 -0
  169. package/codeyam-cli/src/utils/__tests__/editorMockState.test.js.map +1 -0
  170. package/codeyam-cli/src/utils/__tests__/editorPreloadHelpers.test.js +217 -0
  171. package/codeyam-cli/src/utils/__tests__/editorPreloadHelpers.test.js.map +1 -0
  172. package/codeyam-cli/src/utils/__tests__/editorPreview.test.js +289 -0
  173. package/codeyam-cli/src/utils/__tests__/editorPreview.test.js.map +1 -0
  174. package/codeyam-cli/src/utils/__tests__/editorProxySession.test.js +153 -0
  175. package/codeyam-cli/src/utils/__tests__/editorProxySession.test.js.map +1 -0
  176. package/codeyam-cli/src/utils/__tests__/editorScenarioLookup.test.js +139 -0
  177. package/codeyam-cli/src/utils/__tests__/editorScenarioLookup.test.js.map +1 -0
  178. package/codeyam-cli/src/utils/__tests__/editorScenarioSwitch.test.js +221 -0
  179. package/codeyam-cli/src/utils/__tests__/editorScenarioSwitch.test.js.map +1 -0
  180. package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js +841 -0
  181. package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js.map +1 -0
  182. package/codeyam-cli/src/utils/__tests__/editorSeedAdapter.test.js +213 -0
  183. package/codeyam-cli/src/utils/__tests__/editorSeedAdapter.test.js.map +1 -0
  184. package/codeyam-cli/src/utils/__tests__/entityChangeStatus.test.js +1742 -0
  185. package/codeyam-cli/src/utils/__tests__/entityChangeStatus.test.js.map +1 -0
  186. package/codeyam-cli/src/utils/__tests__/git.editor.test.js +134 -0
  187. package/codeyam-cli/src/utils/__tests__/git.editor.test.js.map +1 -0
  188. package/codeyam-cli/src/utils/__tests__/journalCaptureStabilization.test.js +107 -0
  189. package/codeyam-cli/src/utils/__tests__/journalCaptureStabilization.test.js.map +1 -0
  190. package/codeyam-cli/src/utils/__tests__/npmVersionCheck.test.js +26 -20
  191. package/codeyam-cli/src/utils/__tests__/npmVersionCheck.test.js.map +1 -1
  192. package/codeyam-cli/src/utils/__tests__/parseRegisterArg.test.js +101 -0
  193. package/codeyam-cli/src/utils/__tests__/parseRegisterArg.test.js.map +1 -0
  194. package/codeyam-cli/src/utils/__tests__/pathIgnoring.test.js +9 -0
  195. package/codeyam-cli/src/utils/__tests__/pathIgnoring.test.js.map +1 -1
  196. package/codeyam-cli/src/utils/__tests__/project.test.js +65 -0
  197. package/codeyam-cli/src/utils/__tests__/project.test.js.map +1 -0
  198. package/codeyam-cli/src/utils/__tests__/scenarioCoverage.test.js +227 -0
  199. package/codeyam-cli/src/utils/__tests__/scenarioCoverage.test.js.map +1 -0
  200. package/codeyam-cli/src/utils/__tests__/scenarioMarkers.test.js +121 -0
  201. package/codeyam-cli/src/utils/__tests__/scenarioMarkers.test.js.map +1 -0
  202. package/codeyam-cli/src/utils/__tests__/scenariosManifest.test.js +300 -0
  203. package/codeyam-cli/src/utils/__tests__/scenariosManifest.test.js.map +1 -0
  204. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +50 -4
  205. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js.map +1 -1
  206. package/codeyam-cli/src/utils/__tests__/templateConsistency.test.js +51 -0
  207. package/codeyam-cli/src/utils/__tests__/templateConsistency.test.js.map +1 -0
  208. package/codeyam-cli/src/utils/__tests__/webappDetection.test.js +142 -0
  209. package/codeyam-cli/src/utils/__tests__/webappDetection.test.js.map +1 -0
  210. package/codeyam-cli/src/utils/analyzer.js +9 -0
  211. package/codeyam-cli/src/utils/analyzer.js.map +1 -1
  212. package/codeyam-cli/src/utils/backgroundServer.js +104 -12
  213. package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
  214. package/codeyam-cli/src/utils/buildFlags.js +4 -0
  215. package/codeyam-cli/src/utils/buildFlags.js.map +1 -0
  216. package/codeyam-cli/src/utils/database.js +37 -2
  217. package/codeyam-cli/src/utils/database.js.map +1 -1
  218. package/codeyam-cli/src/utils/devModeEvents.js +40 -0
  219. package/codeyam-cli/src/utils/devModeEvents.js.map +1 -0
  220. package/codeyam-cli/src/utils/devServerState.js +71 -0
  221. package/codeyam-cli/src/utils/devServerState.js.map +1 -0
  222. package/codeyam-cli/src/utils/editorApi.js +73 -0
  223. package/codeyam-cli/src/utils/editorApi.js.map +1 -0
  224. package/codeyam-cli/src/utils/editorAudit.js +159 -0
  225. package/codeyam-cli/src/utils/editorAudit.js.map +1 -0
  226. package/codeyam-cli/src/utils/editorCapture.js +102 -0
  227. package/codeyam-cli/src/utils/editorCapture.js.map +1 -0
  228. package/codeyam-cli/src/utils/editorDevServer.js +197 -0
  229. package/codeyam-cli/src/utils/editorDevServer.js.map +1 -0
  230. package/codeyam-cli/src/utils/editorEntityChangeStatus.js +44 -0
  231. package/codeyam-cli/src/utils/editorEntityChangeStatus.js.map +1 -0
  232. package/codeyam-cli/src/utils/editorImageVerifier.js +155 -0
  233. package/codeyam-cli/src/utils/editorImageVerifier.js.map +1 -0
  234. package/codeyam-cli/src/utils/editorJournal.js +225 -0
  235. package/codeyam-cli/src/utils/editorJournal.js.map +1 -0
  236. package/codeyam-cli/src/utils/editorLoaderHelpers.js +113 -0
  237. package/codeyam-cli/src/utils/editorLoaderHelpers.js.map +1 -0
  238. package/codeyam-cli/src/utils/editorMockState.js +248 -0
  239. package/codeyam-cli/src/utils/editorMockState.js.map +1 -0
  240. package/codeyam-cli/src/utils/editorPreloadHelpers.js +135 -0
  241. package/codeyam-cli/src/utils/editorPreloadHelpers.js.map +1 -0
  242. package/codeyam-cli/src/utils/editorPreview.js +106 -0
  243. package/codeyam-cli/src/utils/editorPreview.js.map +1 -0
  244. package/codeyam-cli/src/utils/editorScenarioSwitch.js +112 -0
  245. package/codeyam-cli/src/utils/editorScenarioSwitch.js.map +1 -0
  246. package/codeyam-cli/src/utils/editorScenarios.js +328 -0
  247. package/codeyam-cli/src/utils/editorScenarios.js.map +1 -0
  248. package/codeyam-cli/src/utils/editorSeedAdapter.js +173 -0
  249. package/codeyam-cli/src/utils/editorSeedAdapter.js.map +1 -0
  250. package/codeyam-cli/src/utils/entityChangeStatus.js +349 -0
  251. package/codeyam-cli/src/utils/entityChangeStatus.js.map +1 -0
  252. package/codeyam-cli/src/utils/entityChangeStatus.server.js +158 -0
  253. package/codeyam-cli/src/utils/entityChangeStatus.server.js.map +1 -0
  254. package/codeyam-cli/src/utils/fileMetadata.js +5 -0
  255. package/codeyam-cli/src/utils/fileMetadata.js.map +1 -1
  256. package/codeyam-cli/src/utils/fileWatcher.js +25 -9
  257. package/codeyam-cli/src/utils/fileWatcher.js.map +1 -1
  258. package/codeyam-cli/src/utils/git.js +103 -0
  259. package/codeyam-cli/src/utils/git.js.map +1 -1
  260. package/codeyam-cli/src/utils/install-skills.js +57 -15
  261. package/codeyam-cli/src/utils/install-skills.js.map +1 -1
  262. package/codeyam-cli/src/utils/interactiveSyncWatcher.js +126 -0
  263. package/codeyam-cli/src/utils/interactiveSyncWatcher.js.map +1 -0
  264. package/codeyam-cli/src/utils/npmVersionCheck.js +2 -2
  265. package/codeyam-cli/src/utils/npmVersionCheck.js.map +1 -1
  266. package/codeyam-cli/src/utils/parseRegisterArg.js +31 -0
  267. package/codeyam-cli/src/utils/parseRegisterArg.js.map +1 -0
  268. package/codeyam-cli/src/utils/pathIgnoring.js +19 -7
  269. package/codeyam-cli/src/utils/pathIgnoring.js.map +1 -1
  270. package/codeyam-cli/src/utils/project.js +15 -5
  271. package/codeyam-cli/src/utils/project.js.map +1 -1
  272. package/codeyam-cli/src/utils/queue/__tests__/heartbeat.test.js +11 -11
  273. package/codeyam-cli/src/utils/queue/__tests__/heartbeat.test.js.map +1 -1
  274. package/codeyam-cli/src/utils/queue/__tests__/manager.test.js +22 -0
  275. package/codeyam-cli/src/utils/queue/__tests__/manager.test.js.map +1 -1
  276. package/codeyam-cli/src/utils/queue/heartbeat.js +13 -5
  277. package/codeyam-cli/src/utils/queue/heartbeat.js.map +1 -1
  278. package/codeyam-cli/src/utils/queue/job.js +70 -1
  279. package/codeyam-cli/src/utils/queue/job.js.map +1 -1
  280. package/codeyam-cli/src/utils/queue/manager.js +7 -6
  281. package/codeyam-cli/src/utils/queue/manager.js.map +1 -1
  282. package/codeyam-cli/src/utils/requireSimulations.js +1 -1
  283. package/codeyam-cli/src/utils/requireSimulations.js.map +1 -1
  284. package/codeyam-cli/src/utils/ruleReflection/__tests__/contextBuilder.test.js +5 -6
  285. package/codeyam-cli/src/utils/ruleReflection/__tests__/contextBuilder.test.js.map +1 -1
  286. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/assertRules.js +1 -1
  287. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/assertRules.js.map +1 -1
  288. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/setupTempProject.js +0 -1
  289. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/setupTempProject.js.map +1 -1
  290. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/ruleReflectionE2E.test.js +2 -4
  291. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/ruleReflectionE2E.test.js.map +1 -1
  292. package/codeyam-cli/src/utils/ruleReflection/__tests__/promptBuilder.test.js +4 -6
  293. package/codeyam-cli/src/utils/ruleReflection/__tests__/promptBuilder.test.js.map +1 -1
  294. package/codeyam-cli/src/utils/ruleReflection/contextBuilder.js +1 -1
  295. package/codeyam-cli/src/utils/ruleReflection/contextBuilder.js.map +1 -1
  296. package/codeyam-cli/src/utils/rules/__tests__/parser.test.js +83 -0
  297. package/codeyam-cli/src/utils/rules/__tests__/parser.test.js.map +1 -0
  298. package/codeyam-cli/src/utils/rules/__tests__/pathMatcher.test.js +118 -0
  299. package/codeyam-cli/src/utils/rules/__tests__/pathMatcher.test.js.map +1 -0
  300. package/codeyam-cli/src/utils/rules/__tests__/rulePlacement.test.js +72 -0
  301. package/codeyam-cli/src/utils/rules/__tests__/rulePlacement.test.js.map +1 -0
  302. package/codeyam-cli/src/utils/rules/__tests__/sourceFiles.test.js +76 -0
  303. package/codeyam-cli/src/utils/rules/__tests__/sourceFiles.test.js.map +1 -0
  304. package/codeyam-cli/src/utils/rules/index.js +1 -0
  305. package/codeyam-cli/src/utils/rules/index.js.map +1 -1
  306. package/codeyam-cli/src/utils/rules/parser.js +14 -4
  307. package/codeyam-cli/src/utils/rules/parser.js.map +1 -1
  308. package/codeyam-cli/src/utils/rules/pathMatcher.js +34 -3
  309. package/codeyam-cli/src/utils/rules/pathMatcher.js.map +1 -1
  310. package/codeyam-cli/src/utils/rules/rulePlacement.js +65 -0
  311. package/codeyam-cli/src/utils/rules/rulePlacement.js.map +1 -0
  312. package/codeyam-cli/src/utils/rules/sourceFiles.js +43 -0
  313. package/codeyam-cli/src/utils/rules/sourceFiles.js.map +1 -0
  314. package/codeyam-cli/src/utils/scenarioCoverage.js +75 -0
  315. package/codeyam-cli/src/utils/scenarioCoverage.js.map +1 -0
  316. package/codeyam-cli/src/utils/scenarioMarkers.js +134 -0
  317. package/codeyam-cli/src/utils/scenarioMarkers.js.map +1 -0
  318. package/codeyam-cli/src/utils/scenariosManifest.js +159 -0
  319. package/codeyam-cli/src/utils/scenariosManifest.js.map +1 -0
  320. package/codeyam-cli/src/utils/serverState.js +57 -2
  321. package/codeyam-cli/src/utils/serverState.js.map +1 -1
  322. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +82 -11
  323. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js.map +1 -1
  324. package/codeyam-cli/src/utils/simulationGateMiddleware.js +166 -0
  325. package/codeyam-cli/src/utils/simulationGateMiddleware.js.map +1 -0
  326. package/codeyam-cli/src/utils/slugUtils.js +25 -0
  327. package/codeyam-cli/src/utils/slugUtils.js.map +1 -0
  328. package/codeyam-cli/src/utils/syncMocksMiddleware.js +7 -26
  329. package/codeyam-cli/src/utils/syncMocksMiddleware.js.map +1 -1
  330. package/codeyam-cli/src/utils/testRunner.js +158 -0
  331. package/codeyam-cli/src/utils/testRunner.js.map +1 -0
  332. package/codeyam-cli/src/utils/transcriptPruning.js +67 -0
  333. package/codeyam-cli/src/utils/transcriptPruning.js.map +1 -0
  334. package/codeyam-cli/src/utils/versionInfo.js +46 -0
  335. package/codeyam-cli/src/utils/versionInfo.js.map +1 -1
  336. package/codeyam-cli/src/utils/webappDetection.js +35 -2
  337. package/codeyam-cli/src/utils/webappDetection.js.map +1 -1
  338. package/codeyam-cli/src/webserver/__tests__/clientErrors.test.js +40 -0
  339. package/codeyam-cli/src/webserver/__tests__/clientErrors.test.js.map +1 -0
  340. package/codeyam-cli/src/webserver/__tests__/editorProxy.test.js +550 -0
  341. package/codeyam-cli/src/webserver/__tests__/editorProxy.test.js.map +1 -0
  342. package/codeyam-cli/src/webserver/app/lib/clientErrors.js +65 -0
  343. package/codeyam-cli/src/webserver/app/lib/clientErrors.js.map +1 -0
  344. package/codeyam-cli/src/webserver/app/lib/database.js +41 -27
  345. package/codeyam-cli/src/webserver/app/lib/database.js.map +1 -1
  346. package/codeyam-cli/src/webserver/app/lib/dbNotifier.js.map +1 -1
  347. package/codeyam-cli/src/webserver/app/lib/git.js +396 -0
  348. package/codeyam-cli/src/webserver/app/lib/git.js.map +1 -0
  349. package/codeyam-cli/src/webserver/backgroundServer.js +118 -18
  350. package/codeyam-cli/src/webserver/backgroundServer.js.map +1 -1
  351. package/codeyam-cli/src/webserver/build/client/assets/{CopyButton-jNYXRRNI.js → CopyButton-BPXZwM4t.js} +1 -1
  352. package/codeyam-cli/src/webserver/build/client/assets/{EntityItem-bwuHPyTa.js → EntityItem-BcgbViKV.js} +3 -3
  353. package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeBadge-CvzqMxcu.js → EntityTypeBadge-g3saevPb.js} +1 -1
  354. package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeIcon-BH0XDim7.js → EntityTypeIcon-CQIG2qda.js} +9 -9
  355. package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-Bu6c6aDe.js +1 -0
  356. package/codeyam-cli/src/webserver/build/client/assets/{InteractivePreview-yjIHlOGa.js → InteractivePreview-DYFW3lDD.js} +3 -3
  357. package/codeyam-cli/src/webserver/build/client/assets/{LibraryFunctionPreview-Cq5o8jL4.js → LibraryFunctionPreview-DLeucoVX.js} +1 -1
  358. package/codeyam-cli/src/webserver/build/client/assets/{LoadingDots-BvMu2i-g.js → LoadingDots-BU_OAEMP.js} +1 -1
  359. package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-kgBTLoJD.js → LogViewer-ceAyBX-H.js} +1 -1
  360. package/codeyam-cli/src/webserver/build/client/assets/{ReportIssueModal-BzPgx-xO.js → ReportIssueModal-BzHcG7SE.js} +3 -3
  361. package/codeyam-cli/src/webserver/build/client/assets/{SafeScreenshot-CwZrv-Ok.js → SafeScreenshot-BED4B6sP.js} +1 -1
  362. package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-BX2Ny2Qj.js → ScenarioViewer-0DY_NKil.js} +3 -3
  363. package/codeyam-cli/src/webserver/build/client/assets/Spinner-Bb5uFQ5V.js +34 -0
  364. package/codeyam-cli/src/webserver/build/client/assets/{TruncatedFilePath-CDpEprKa.js → TruncatedFilePath-C8OKAR5x.js} +1 -1
  365. package/codeyam-cli/src/webserver/build/client/assets/ViewportInspectBar-oAf2Kqsf.js +1 -0
  366. package/codeyam-cli/src/webserver/build/client/assets/{_index-BRx8ZGZo.js → _index-DLxKhri3.js} +3 -3
  367. package/codeyam-cli/src/webserver/build/client/assets/{activity.(_tab)-4S4yPfFw.js → activity.(_tab)-BcY3q6nt.js} +6 -6
  368. package/codeyam-cli/src/webserver/build/client/assets/addon-canvas-DpzMmAy5.js +1 -0
  369. package/codeyam-cli/src/webserver/build/client/assets/addon-fit-YJmn1quW.js +12 -0
  370. package/codeyam-cli/src/webserver/build/client/assets/addon-web-links-Duc5hnl7.js +1 -0
  371. package/codeyam-cli/src/webserver/build/client/assets/addon-webgl-DI8QOUvO.js +58 -0
  372. package/codeyam-cli/src/webserver/build/client/assets/agent-transcripts-Bni3iiUj.js +22 -0
  373. package/codeyam-cli/src/webserver/build/client/assets/api.dev-mode-events-l0sNRNKZ.js +1 -0
  374. package/codeyam-cli/src/webserver/build/client/assets/api.editor-audit-l0sNRNKZ.js +1 -0
  375. package/codeyam-cli/src/webserver/build/client/assets/api.editor-capture-scenario-l0sNRNKZ.js +1 -0
  376. package/codeyam-cli/src/webserver/build/client/assets/api.editor-client-errors-l0sNRNKZ.js +1 -0
  377. package/codeyam-cli/src/webserver/build/client/assets/api.editor-commit-l0sNRNKZ.js +1 -0
  378. package/codeyam-cli/src/webserver/build/client/assets/api.editor-dev-server-l0sNRNKZ.js +1 -0
  379. package/codeyam-cli/src/webserver/build/client/assets/api.editor-entity-status-l0sNRNKZ.js +1 -0
  380. package/codeyam-cli/src/webserver/build/client/assets/api.editor-file-diff-l0sNRNKZ.js +1 -0
  381. package/codeyam-cli/src/webserver/build/client/assets/api.editor-file-l0sNRNKZ.js +1 -0
  382. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-entry-l0sNRNKZ.js +1 -0
  383. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-image._-l0sNRNKZ.js +1 -0
  384. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-l0sNRNKZ.js +1 -0
  385. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-screenshot-l0sNRNKZ.js +1 -0
  386. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-update-l0sNRNKZ.js +1 -0
  387. package/codeyam-cli/src/webserver/build/client/assets/api.editor-load-commit-l0sNRNKZ.js +1 -0
  388. package/codeyam-cli/src/webserver/build/client/assets/api.editor-project-info-l0sNRNKZ.js +1 -0
  389. package/codeyam-cli/src/webserver/build/client/assets/api.editor-refresh-l0sNRNKZ.js +1 -0
  390. package/codeyam-cli/src/webserver/build/client/assets/api.editor-register-scenario-l0sNRNKZ.js +1 -0
  391. package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-coverage-l0sNRNKZ.js +1 -0
  392. package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-data-l0sNRNKZ.js +1 -0
  393. package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-image._-l0sNRNKZ.js +1 -0
  394. package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenarios-l0sNRNKZ.js +1 -0
  395. package/codeyam-cli/src/webserver/build/client/assets/api.editor-switch-scenario-l0sNRNKZ.js +1 -0
  396. package/codeyam-cli/src/webserver/build/client/assets/api.editor-test-results-l0sNRNKZ.js +1 -0
  397. package/codeyam-cli/src/webserver/build/client/assets/api.rule-path-l0sNRNKZ.js +1 -0
  398. package/codeyam-cli/src/webserver/build/client/assets/{book-open-D4IPYH_y.js → book-open-BYOypzCa.js} +2 -2
  399. package/codeyam-cli/src/webserver/build/client/assets/{chevron-down-CG65viiV.js → chevron-down-C_Pmso5S.js} +2 -2
  400. package/codeyam-cli/src/webserver/build/client/assets/{chunk-JZWAC4HX-DB3aFuEO.js → chunk-JZWAC4HX-C4pqxYJB.js} +1 -1
  401. package/codeyam-cli/src/webserver/build/client/assets/{circle-check-igfMr5DY.js → circle-check-BVMi9VA5.js} +2 -2
  402. package/codeyam-cli/src/webserver/build/client/assets/{copy-Coc4o_8c.js → copy-n2FB0_Sw.js} +3 -3
  403. package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-CC6AbExI.js +41 -0
  404. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-Csi0_PMl.js +1 -0
  405. package/codeyam-cli/src/webserver/build/client/assets/editor-BBAGP_mE.js +10 -0
  406. package/codeyam-cli/src/webserver/build/client/assets/editorPreview-BLQMSKZa.js +41 -0
  407. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-B0h9AqE6.js → entity._sha._-BF4oLwaE.js} +11 -11
  408. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.dev-C7YX6r3H.js +6 -0
  409. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-CF164ouH.js +6 -0
  410. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-p9hhkjJM.js +6 -0
  411. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.edit._scenarioId-PePWg17F.js → entity._sha_.edit._scenarioId-BMvVHNXU.js} +2 -2
  412. package/codeyam-cli/src/webserver/build/client/assets/{entry.client-I-Wo99C_.js → entry.client-DTvKq3TY.js} +1 -1
  413. package/codeyam-cli/src/webserver/build/client/assets/{fileTableUtils-9sMMAiWJ.js → fileTableUtils-cPo8LiG3.js} +1 -1
  414. package/codeyam-cli/src/webserver/build/client/assets/{files-Co65J0s3.js → files-BZrlFE1F.js} +1 -1
  415. package/codeyam-cli/src/webserver/build/client/assets/git-DdZcvjGh.js +1 -0
  416. package/codeyam-cli/src/webserver/build/client/assets/globals-COUSHTyZ.css +1 -0
  417. package/codeyam-cli/src/webserver/build/client/assets/{index-CUM5iXwc.js → index-10oVnAAH.js} +1 -1
  418. package/codeyam-cli/src/webserver/build/client/assets/{index-_417gcQW.js → index-BcvgDzbZ.js} +1 -1
  419. package/codeyam-cli/src/webserver/build/client/assets/index-yHOVb4rc.js +15 -0
  420. package/codeyam-cli/src/webserver/build/client/assets/labs-Zk7ryIM1.js +1 -0
  421. package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-TzRHMVog.js → loader-circle-DaAZ_H2w.js} +2 -2
  422. package/codeyam-cli/src/webserver/build/client/assets/manifest-9c70d1f3.js +1 -0
  423. package/codeyam-cli/src/webserver/build/client/assets/memory-9gnxSZlb.js +101 -0
  424. package/codeyam-cli/src/webserver/build/client/assets/{pause-hjzB7t2z.js → pause-f5-1lKBt.js} +3 -3
  425. package/codeyam-cli/src/webserver/build/client/assets/root-CHOdrM6Y.js +67 -0
  426. package/codeyam-cli/src/webserver/build/client/assets/{search-DcAwD_Ln.js → search-Di64LWVb.js} +2 -2
  427. package/codeyam-cli/src/webserver/build/client/assets/settings-0OrEMU6J.js +1 -0
  428. package/codeyam-cli/src/webserver/build/client/assets/{simulations-DVNJVQgD.js → simulations-DWT-CvLy.js} +1 -1
  429. package/codeyam-cli/src/webserver/build/client/assets/{terminal-DbEAHMbA.js → terminal-Br7MOqts.js} +3 -3
  430. package/codeyam-cli/src/webserver/build/client/assets/{triangle-alert-CAD5b1o_.js → triangle-alert-BLdiCuG-.js} +2 -2
  431. package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-CrAK28Bc.js +1 -0
  432. package/codeyam-cli/src/webserver/build/client/assets/useLastLogLine-C14nCb1q.js +2 -0
  433. package/codeyam-cli/src/webserver/build/client/assets/{useReportContext-DZlYx2c4.js → useReportContext-O-jkvSPx.js} +1 -1
  434. package/codeyam-cli/src/webserver/build/client/assets/{useToast-ihdMtlf6.js → useToast-9FIWuYfK.js} +1 -1
  435. package/codeyam-cli/src/webserver/build/client/assets/xterm-BqvuqXEL.js +27 -0
  436. package/codeyam-cli/src/webserver/build/server/assets/index-BWoRb5RY.js +1 -0
  437. package/codeyam-cli/src/webserver/build/server/assets/init-DbChSUQP.js +10 -0
  438. package/codeyam-cli/src/webserver/build/server/assets/server-build-BtbLQkKd.js +433 -0
  439. package/codeyam-cli/src/webserver/build/server/index.js +1 -1
  440. package/codeyam-cli/src/webserver/build-info.json +5 -5
  441. package/codeyam-cli/src/webserver/devServer.js +39 -5
  442. package/codeyam-cli/src/webserver/devServer.js.map +1 -1
  443. package/codeyam-cli/src/webserver/editorProxy.js +855 -0
  444. package/codeyam-cli/src/webserver/editorProxy.js.map +1 -0
  445. package/codeyam-cli/src/webserver/scripts/codeyam-preload.mjs +414 -0
  446. package/codeyam-cli/src/webserver/scripts/journalCapture.ts +230 -0
  447. package/codeyam-cli/src/webserver/server.js +258 -1
  448. package/codeyam-cli/src/webserver/server.js.map +1 -1
  449. package/codeyam-cli/src/webserver/terminalServer.js +726 -0
  450. package/codeyam-cli/src/webserver/terminalServer.js.map +1 -0
  451. package/codeyam-cli/templates/chrome-extension-react/EXTENSION_SETUP.md +75 -0
  452. package/codeyam-cli/templates/chrome-extension-react/README.md +46 -0
  453. package/codeyam-cli/templates/chrome-extension-react/gitignore +15 -0
  454. package/codeyam-cli/templates/chrome-extension-react/index.html +12 -0
  455. package/codeyam-cli/templates/chrome-extension-react/package.json +27 -0
  456. package/codeyam-cli/templates/chrome-extension-react/popup.html +12 -0
  457. package/codeyam-cli/templates/chrome-extension-react/public/manifest.json +15 -0
  458. package/codeyam-cli/templates/chrome-extension-react/src/background/service-worker.ts +7 -0
  459. package/codeyam-cli/templates/chrome-extension-react/src/globals.css +6 -0
  460. package/codeyam-cli/templates/chrome-extension-react/src/lib/storage.ts +37 -0
  461. package/codeyam-cli/templates/chrome-extension-react/src/popup/App.tsx +12 -0
  462. package/codeyam-cli/templates/chrome-extension-react/src/popup/main.tsx +10 -0
  463. package/codeyam-cli/templates/chrome-extension-react/tsconfig.json +24 -0
  464. package/codeyam-cli/templates/chrome-extension-react/vite.config.ts +41 -0
  465. package/codeyam-cli/templates/codeyam-editor-claude.md +147 -0
  466. package/codeyam-cli/templates/editor-step-hook.py +231 -0
  467. package/codeyam-cli/templates/expo-react-native/MOBILE_SETUP.md +89 -0
  468. package/codeyam-cli/templates/expo-react-native/README.md +41 -0
  469. package/codeyam-cli/templates/expo-react-native/app/(tabs)/_layout.tsx +33 -0
  470. package/codeyam-cli/templates/expo-react-native/app/(tabs)/index.tsx +12 -0
  471. package/codeyam-cli/templates/expo-react-native/app/(tabs)/settings.tsx +12 -0
  472. package/codeyam-cli/templates/expo-react-native/app/_layout.tsx +12 -0
  473. package/codeyam-cli/templates/expo-react-native/app.json +18 -0
  474. package/codeyam-cli/templates/expo-react-native/babel.config.js +9 -0
  475. package/codeyam-cli/templates/expo-react-native/gitignore +12 -0
  476. package/codeyam-cli/templates/expo-react-native/global.css +3 -0
  477. package/codeyam-cli/templates/expo-react-native/lib/storage.ts +32 -0
  478. package/codeyam-cli/templates/expo-react-native/metro.config.js +6 -0
  479. package/codeyam-cli/templates/expo-react-native/nativewind-env.d.ts +1 -0
  480. package/codeyam-cli/templates/expo-react-native/package.json +38 -0
  481. package/codeyam-cli/templates/expo-react-native/tailwind.config.js +10 -0
  482. package/codeyam-cli/templates/expo-react-native/tsconfig.json +10 -0
  483. package/codeyam-cli/templates/hooks/staleness-check.sh +43 -0
  484. package/codeyam-cli/templates/isolation-route/next-app.tsx.template +80 -0
  485. package/codeyam-cli/templates/isolation-route/next-pages.tsx.template +79 -0
  486. package/codeyam-cli/templates/isolation-route/vite-react.tsx.template +78 -0
  487. package/codeyam-cli/templates/msw/browser-setup.ts.template +47 -0
  488. package/codeyam-cli/templates/msw/handler-router.ts.template +47 -0
  489. package/codeyam-cli/templates/msw/server-setup.ts.template +52 -0
  490. package/codeyam-cli/templates/nextjs-prisma-sqlite/AUTH_PATTERNS.md +308 -0
  491. package/codeyam-cli/templates/nextjs-prisma-sqlite/AUTH_UPGRADE.md +304 -0
  492. package/codeyam-cli/templates/nextjs-prisma-sqlite/DATABASE.md +126 -0
  493. package/codeyam-cli/templates/nextjs-prisma-sqlite/FEATURE_PATTERNS.md +37 -0
  494. package/codeyam-cli/templates/nextjs-prisma-sqlite/README.md +53 -0
  495. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/api/todos/route.ts +17 -0
  496. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/codeyam-isolate/layout.tsx +12 -0
  497. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/globals.css +26 -0
  498. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/layout.tsx +34 -0
  499. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/lib/prisma.ts +24 -0
  500. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/page.tsx +10 -0
  501. package/codeyam-cli/templates/nextjs-prisma-sqlite/env +4 -0
  502. package/codeyam-cli/templates/nextjs-prisma-sqlite/eslint.config.mjs +11 -0
  503. package/codeyam-cli/templates/nextjs-prisma-sqlite/gitignore +64 -0
  504. package/codeyam-cli/templates/nextjs-prisma-sqlite/next.config.ts +14 -0
  505. package/codeyam-cli/templates/nextjs-prisma-sqlite/package.json +39 -0
  506. package/codeyam-cli/templates/nextjs-prisma-sqlite/postcss.config.mjs +7 -0
  507. package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma/schema.prisma +27 -0
  508. package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma/seed.ts +40 -0
  509. package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma.config.ts +12 -0
  510. package/codeyam-cli/templates/nextjs-prisma-sqlite/seed-adapter.ts +92 -0
  511. package/codeyam-cli/templates/nextjs-prisma-sqlite/tsconfig.json +34 -0
  512. package/codeyam-cli/templates/nextjs-prisma-sqlite/vitest.config.ts +13 -0
  513. package/codeyam-cli/templates/nextjs-prisma-supabase/README.md +52 -0
  514. package/codeyam-cli/templates/nextjs-prisma-supabase/SUPABASE_SETUP.md +104 -0
  515. package/codeyam-cli/templates/nextjs-prisma-supabase/app/api/todos/route.ts +17 -0
  516. package/codeyam-cli/templates/nextjs-prisma-supabase/app/globals.css +26 -0
  517. package/codeyam-cli/templates/nextjs-prisma-supabase/app/layout.tsx +34 -0
  518. package/codeyam-cli/templates/nextjs-prisma-supabase/app/lib/prisma.ts +20 -0
  519. package/codeyam-cli/templates/nextjs-prisma-supabase/app/lib/supabase.ts +12 -0
  520. package/codeyam-cli/templates/nextjs-prisma-supabase/app/page.tsx +10 -0
  521. package/codeyam-cli/templates/nextjs-prisma-supabase/env +9 -0
  522. package/codeyam-cli/templates/nextjs-prisma-supabase/eslint.config.mjs +11 -0
  523. package/codeyam-cli/templates/nextjs-prisma-supabase/gitignore +40 -0
  524. package/codeyam-cli/templates/nextjs-prisma-supabase/next.config.ts +11 -0
  525. package/codeyam-cli/templates/nextjs-prisma-supabase/package.json +37 -0
  526. package/codeyam-cli/templates/nextjs-prisma-supabase/postcss.config.mjs +7 -0
  527. package/codeyam-cli/templates/nextjs-prisma-supabase/prisma/schema.prisma +27 -0
  528. package/codeyam-cli/templates/nextjs-prisma-supabase/prisma/seed.ts +39 -0
  529. package/codeyam-cli/templates/nextjs-prisma-supabase/prisma.config.ts +12 -0
  530. package/codeyam-cli/templates/nextjs-prisma-supabase/tsconfig.json +34 -0
  531. package/codeyam-cli/templates/prompts/conversation-guidance.txt +44 -0
  532. package/codeyam-cli/templates/prompts/conversation-prompt.txt +28 -0
  533. package/codeyam-cli/templates/prompts/interruption-prompt.txt +31 -0
  534. package/codeyam-cli/templates/prompts/stale-rules-prompt.txt +24 -0
  535. package/codeyam-cli/templates/rule-notification-hook.py +44 -17
  536. package/codeyam-cli/templates/rule-reflection-hook.py +25 -5
  537. package/codeyam-cli/templates/rules-instructions.md +34 -88
  538. package/codeyam-cli/templates/skills/codeyam-dev-mode/SKILL.md +237 -0
  539. package/codeyam-cli/templates/skills/codeyam-editor/SKILL.md +148 -0
  540. package/codeyam-cli/templates/{codeyam-memory.md → skills/codeyam-memory/SKILL.md} +215 -0
  541. package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/deprecated-prompt.md +100 -0
  542. package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/detect-deprecated-patterns.mjs +139 -0
  543. package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/find-exports.mjs +52 -0
  544. package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/misleading-api-prompt.md +117 -0
  545. package/codeyam-cli/templates/skills/codeyam-memory/scripts/lib/read-json-field.mjs +61 -0
  546. package/codeyam-cli/templates/skills/codeyam-memory/scripts/lib/ripgrep-fallback.mjs +155 -0
  547. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/analyze-prompt.md +46 -0
  548. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/cleanup.mjs +13 -0
  549. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/filter-session.mjs +95 -0
  550. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/preprocess.mjs +160 -0
  551. package/codeyam-cli/templates/{codeyam-new-rule.md → skills/codeyam-new-rule/SKILL.md} +0 -2
  552. package/package.json +21 -14
  553. package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js +22 -4
  554. package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js.map +1 -1
  555. package/packages/ai/src/lib/completionCall.js +10 -7
  556. package/packages/ai/src/lib/completionCall.js.map +1 -1
  557. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +234 -3
  558. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
  559. package/packages/ai/src/lib/dataStructure/helpers/coercePrimitivesToArraysBySchema.js +54 -0
  560. package/packages/ai/src/lib/dataStructure/helpers/coercePrimitivesToArraysBySchema.js.map +1 -0
  561. package/packages/ai/src/lib/dataStructure/helpers/stripNullableMarkers.js +34 -0
  562. package/packages/ai/src/lib/dataStructure/helpers/stripNullableMarkers.js.map +1 -0
  563. package/packages/ai/src/lib/generateEntityScenarioData.js +57 -2
  564. package/packages/ai/src/lib/generateEntityScenarioData.js.map +1 -1
  565. package/packages/ai/src/lib/generateExecutionFlows.js +0 -11
  566. package/packages/ai/src/lib/generateExecutionFlows.js.map +1 -1
  567. package/packages/analyze/src/lib/ProjectAnalyzer.js +13 -4
  568. package/packages/analyze/src/lib/ProjectAnalyzer.js.map +1 -1
  569. package/packages/analyze/src/lib/asts/index.js +4 -2
  570. package/packages/analyze/src/lib/asts/index.js.map +1 -1
  571. package/packages/analyze/src/lib/asts/nodes/getNodeType.js +1 -0
  572. package/packages/analyze/src/lib/asts/nodes/getNodeType.js.map +1 -1
  573. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js +8 -1
  574. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js.map +1 -1
  575. package/packages/analyze/src/lib/files/analyze/dependencyResolver.js +0 -5
  576. package/packages/analyze/src/lib/files/analyze/dependencyResolver.js.map +1 -1
  577. package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js +9 -0
  578. package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js.map +1 -1
  579. package/packages/analyze/src/lib/files/scenarios/TransformationTracer.js +54 -27
  580. package/packages/analyze/src/lib/files/scenarios/TransformationTracer.js.map +1 -1
  581. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +65 -0
  582. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
  583. package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js +0 -40
  584. package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js.map +1 -1
  585. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +18 -4
  586. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js.map +1 -1
  587. package/packages/database/index.js +1 -0
  588. package/packages/database/index.js.map +1 -1
  589. package/packages/database/src/lib/kysely/db.js +5 -0
  590. package/packages/database/src/lib/kysely/db.js.map +1 -1
  591. package/packages/database/src/lib/kysely/tables/editorScenariosTable.js +76 -0
  592. package/packages/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -0
  593. package/packages/database/src/lib/loadCommits.js +23 -13
  594. package/packages/database/src/lib/loadCommits.js.map +1 -1
  595. package/packages/database/src/lib/loadEntities.js +0 -6
  596. package/packages/database/src/lib/loadEntities.js.map +1 -1
  597. package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.js +1 -4
  598. package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.js.map +1 -1
  599. package/packages/database/src/lib/updateCommitMetadata.js +76 -90
  600. package/packages/database/src/lib/updateCommitMetadata.js.map +1 -1
  601. package/packages/database/src/lib/updateFreshAnalysisStatus.js +41 -30
  602. package/packages/database/src/lib/updateFreshAnalysisStatus.js.map +1 -1
  603. package/packages/database/src/lib/updateFreshAnalysisStatusWithScenarios.js +68 -57
  604. package/packages/database/src/lib/updateFreshAnalysisStatusWithScenarios.js.map +1 -1
  605. package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js +29 -1
  606. package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js.map +1 -1
  607. package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +33 -5
  608. package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
  609. package/packages/types/src/enums/ProjectFramework.js +2 -0
  610. package/packages/types/src/enums/ProjectFramework.js.map +1 -1
  611. package/packages/utils/src/lib/fs/rsyncCopy.js +6 -2
  612. package/packages/utils/src/lib/fs/rsyncCopy.js.map +1 -1
  613. package/scripts/npm-post-install.cjs +34 -0
  614. package/codeyam-cli/src/commands/detect-universal-mocks.js +0 -120
  615. package/codeyam-cli/src/commands/detect-universal-mocks.js.map +0 -1
  616. package/codeyam-cli/src/commands/list.js +0 -31
  617. package/codeyam-cli/src/commands/list.js.map +0 -1
  618. package/codeyam-cli/src/commands/webapp-info.js +0 -146
  619. package/codeyam-cli/src/commands/webapp-info.js.map +0 -1
  620. package/codeyam-cli/src/utils/universal-mocks.js +0 -152
  621. package/codeyam-cli/src/utils/universal-mocks.js.map +0 -1
  622. package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-EhOseatT.js +0 -34
  623. package/codeyam-cli/src/webserver/build/client/assets/agent-transcripts-DHKuQSmR.js +0 -17
  624. package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-D1zB-pYc.js +0 -21
  625. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-JTAjQ54M.js +0 -1
  626. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-DjLxr2JB.js +0 -6
  627. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-CtYowLOt.js +0 -6
  628. package/codeyam-cli/src/webserver/build/client/assets/git-BdHOxVfg.js +0 -15
  629. package/codeyam-cli/src/webserver/build/client/assets/globals-CCgBKWy4.css +0 -1
  630. package/codeyam-cli/src/webserver/build/client/assets/labs-BK0C1H1T.js +0 -1
  631. package/codeyam-cli/src/webserver/build/client/assets/manifest-390cb8fa.js +0 -1
  632. package/codeyam-cli/src/webserver/build/client/assets/memory-CzZySbBE.js +0 -78
  633. package/codeyam-cli/src/webserver/build/client/assets/root-DnbDhvTU.js +0 -62
  634. package/codeyam-cli/src/webserver/build/client/assets/settings-CclxrcPK.js +0 -1
  635. package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-BqgrAzs3.js +0 -1
  636. package/codeyam-cli/src/webserver/build/client/assets/useLastLogLine-DAFqfEDH.js +0 -2
  637. package/codeyam-cli/src/webserver/build/server/assets/index-CxaRxKVt.js +0 -1
  638. package/codeyam-cli/src/webserver/build/server/assets/server-build-D4DT0nM_.js +0 -259
  639. package/codeyam-cli/templates/codeyam-stop-hook.sh +0 -284
  640. package/scripts/finalize-analyzer.cjs +0 -13
  641. /package/codeyam-cli/templates/{codeyam-diagnose.md → commands/codeyam-diagnose.md} +0 -0
  642. /package/codeyam-cli/templates/{codeyam-debug.md → skills/codeyam-debug/SKILL.md} +0 -0
  643. /package/codeyam-cli/templates/{codeyam-setup.md → skills/codeyam-setup/SKILL.md} +0 -0
  644. /package/codeyam-cli/templates/{codeyam-sim.md → skills/codeyam-sim/SKILL.md} +0 -0
  645. /package/codeyam-cli/templates/{codeyam-test.md → skills/codeyam-test/SKILL.md} +0 -0
  646. /package/codeyam-cli/templates/{codeyam-verify.md → skills/codeyam-verify/SKILL.md} +0 -0
@@ -0,0 +1,100 @@
1
+ # Deprecated Pattern Analysis
2
+
3
+ You are analyzing a codebase for **deprecated patterns** — situations where two approaches to the same problem coexist, with one fading in favor of another. These create confusion because a coding agent reading locally may follow the old pattern.
4
+
5
+ ## Input
6
+
7
+ Read the scan data from `/tmp/codeyam-memory/deprecated-scan.json`. It contains:
8
+
9
+ - `dependencies`: All npm dependency names from the project
10
+ - `explicit_markers`: Lines containing `@deprecated`, `// legacy`, etc., with file, line number, and text
11
+ - `git_recency`: Per-dependency counts of `recent_imports` (last 3 months) vs `old_imports` (3–12 months ago)
12
+
13
+ ## Analysis Steps
14
+
15
+ ### 1. Dependency Overlap Analysis
16
+
17
+ Review the full dependency list and identify pairs or groups that serve **overlapping purposes**. Use your domain knowledge of the npm ecosystem — don't rely on name similarity alone.
18
+
19
+ Common overlap categories:
20
+
21
+ - **ORMs / query builders**: knex, kysely, prisma, drizzle, typeorm, sequelize, supabase-js (when used for queries)
22
+ - **Date libraries**: moment, dayjs, date-fns, luxon
23
+ - **HTTP clients**: axios, got, node-fetch, ky, superagent, undici
24
+ - **State management**: redux, zustand, jotai, recoil, mobx, valtio
25
+ - **Schema validation**: zod, yup, joi, ajv, io-ts, superstruct, valibot
26
+ - **CSS-in-JS / styling**: styled-components, emotion, tailwind, vanilla-extract, stitches
27
+ - **Testing**: jest, vitest, mocha, ava
28
+ - **Bundlers**: webpack, vite, esbuild, rollup, parcel, turbopack
29
+ - **Logging**: winston, pino, bunyan, log4js
30
+
31
+ Also look for:
32
+
33
+ - Internal packages that wrap the same underlying library differently
34
+ - Old utility files alongside newer replacements
35
+
36
+ ### 2. Cross-Reference with Git Recency
37
+
38
+ For each overlapping pair you identified, check the `git_recency` data:
39
+
40
+ - Is one dependency's import count **growing** (more recent than old) while the other is **fading** (fewer recent than old)?
41
+ - A clear growth-vs-fade pattern confirms a migration in progress.
42
+ - If both are stable or both are growing, it may be intentional coexistence rather than a migration.
43
+
44
+ ### 3. Cross-Reference with Explicit Markers
45
+
46
+ Check if any `@deprecated` or `// legacy` markers corroborate your dependency findings:
47
+
48
+ - A marker on code that imports the fading dependency strengthens the signal
49
+ - A marker on a wrapper/utility that abstracts one of the approaches is strong evidence
50
+
51
+ ### 4. Find Remaining Callsites
52
+
53
+ For each confirmed deprecated pattern, use Grep to find all files still importing or using the old dependency/pattern. Count the callsites to assess migration completeness.
54
+
55
+ Search patterns:
56
+
57
+ ```
58
+ from ['"]<old-dep>
59
+ require(['"]<old-dep>
60
+ import <old-dep>
61
+ ```
62
+
63
+ ### 5. Assess Severity
64
+
65
+ - **high**: Active migration with significant remaining old callsites (>10 files), or explicit deprecation markers present
66
+ - **medium**: Clear trend in git recency but no explicit markers and fewer remaining callsites
67
+ - **low**: Slight trend, possibly intentional coexistence
68
+
69
+ ## Output
70
+
71
+ Return your findings as a JSON code block in your response, using this format:
72
+
73
+ ```json
74
+ {
75
+ "findings": [
76
+ {
77
+ "type": "deprecated-pattern",
78
+ "old_pattern": "descriptive name of the old approach",
79
+ "new_pattern": "descriptive name of the new approach",
80
+ "evidence": "concise summary of the evidence (git recency numbers, markers found)",
81
+ "files_still_using_old": ["path/to/file1.ts", "path/to/file2.ts"],
82
+ "severity": "high|medium|low",
83
+ "suggested_rule_paths": ["src/relevant/**/*.ts"]
84
+ }
85
+ ],
86
+ "stats": {
87
+ "deps_analyzed": 0,
88
+ "overlapping_pairs_found": 0,
89
+ "confirmed_deprecated": 0
90
+ }
91
+ }
92
+ ```
93
+
94
+ After the JSON block, return a **brief one-paragraph summary** of your findings. Include the number of confirmed deprecated patterns and the highest-severity finding.
95
+
96
+ ## Important Notes
97
+
98
+ - Be conservative: only flag patterns where there is clear evidence of transition, not just the presence of two similar libraries
99
+ - Some projects intentionally use multiple tools in the same category (e.g., jest for unit tests and playwright for e2e) — that's not deprecation
100
+ - Focus on patterns that would **mislead a coding agent** — if both approaches are valid and documented, it may not need a rule
@@ -0,0 +1,139 @@
1
+ #!/usr/bin/env node
2
+ // Gathers deprecation signals from package.json, source markers, and git history.
3
+ // Outputs structured JSON to /tmp/codeyam-memory/deprecated-scan.json
4
+
5
+ import { readdir, readFile, mkdir, writeFile } from 'node:fs/promises';
6
+ import { execFileSync } from 'node:child_process';
7
+ import { join } from 'node:path';
8
+ import { ripgrepSearch } from '../lib/ripgrep-fallback.mjs';
9
+
10
+ const OUTPUT_DIR = '/tmp/codeyam-memory';
11
+ const OUTPUT_FILE = join(OUTPUT_DIR, 'deprecated-scan.json');
12
+ await mkdir(OUTPUT_DIR, { recursive: true });
13
+
14
+ // --- Dependency scan ---
15
+ // Collect all dependency names from package.json files
16
+ const allDeps = new Set();
17
+ const packageFiles = await findFiles('.', 'package.json', ['node_modules', 'dist', '.next']);
18
+
19
+ for (const pkgPath of packageFiles) {
20
+ try {
21
+ const pkg = JSON.parse(await readFile(pkgPath, 'utf-8'));
22
+ for (const key of ['dependencies', 'devDependencies']) {
23
+ if (pkg[key] && typeof pkg[key] === 'object') {
24
+ for (const dep of Object.keys(pkg[key])) allDeps.add(dep);
25
+ }
26
+ }
27
+ } catch {
28
+ // Skip unparseable package.json
29
+ }
30
+ }
31
+
32
+ const dependencies = [...allDeps].sort();
33
+
34
+ // --- Explicit marker scan ---
35
+ let explicitMarkers = [];
36
+
37
+ const markerOutput = await ripgrepSearch(
38
+ '@deprecated|// legacy|// deprecated|// old approach|TODO.*deprecat|FIXME.*deprecat',
39
+ {
40
+ types: ['ts', 'js'],
41
+ globs: ['!node_modules', '!dist', '!build', '!.next'],
42
+ context: 2,
43
+ lineNumbers: true,
44
+ },
45
+ );
46
+
47
+ if (markerOutput.trim()) {
48
+ // Parse ripgrep output into structured entries
49
+ for (const line of markerOutput.split('\n')) {
50
+ // Match "file:line:text" (colons in file path unlikely for these repos)
51
+ const match = line.match(/^([^:]+):(\d+):(.*)$/);
52
+ if (match) {
53
+ explicitMarkers.push({
54
+ file: match[1],
55
+ line: parseInt(match[2], 10),
56
+ text: match[3].trim(),
57
+ });
58
+ }
59
+ }
60
+ }
61
+
62
+ // --- Git recency comparison ---
63
+ const gitRecency = {};
64
+
65
+ if (dependencies.length > 0) {
66
+ const recentImports = gitImports('3 months ago', undefined);
67
+ const oldImports = gitImports('12 months ago', '3 months ago');
68
+
69
+ for (const dep of dependencies) {
70
+ if (dep.length < 3) continue; // Skip short names that match too broadly
71
+
72
+ const pattern = `from ['"]${dep}`;
73
+ const recent = countMatches(recentImports, pattern);
74
+ const old = countMatches(oldImports, pattern);
75
+
76
+ if (recent > 0 || old > 0) {
77
+ gitRecency[dep] = { recent_imports: recent, old_imports: old };
78
+ }
79
+ }
80
+ }
81
+
82
+ // --- Assemble final output ---
83
+ const output = {
84
+ dependencies,
85
+ explicit_markers: explicitMarkers,
86
+ git_recency: gitRecency,
87
+ };
88
+
89
+ await writeFile(OUTPUT_FILE, JSON.stringify(output, null, 2));
90
+
91
+ console.log(`Deprecated pattern scan complete: ${OUTPUT_FILE}`);
92
+ console.log(` Dependencies found: ${dependencies.length}`);
93
+ console.log(` Explicit markers found: ${explicitMarkers.length}`);
94
+ console.log(` Deps with git activity: ${Object.keys(gitRecency).length}`);
95
+
96
+ // --- Helpers ---
97
+
98
+ async function findFiles(dir, filename, ignoreDirs) {
99
+ const results = [];
100
+ const ignoreSet = new Set(ignoreDirs);
101
+
102
+ let entries;
103
+ try {
104
+ entries = await readdir(dir, { recursive: true, withFileTypes: true });
105
+ } catch {
106
+ return results;
107
+ }
108
+
109
+ for (const entry of entries) {
110
+ if (!entry.isFile() || entry.name !== filename) continue;
111
+ const parentPath = entry.parentPath ?? entry.path; // parentPath in Node 22+
112
+ const parts = parentPath.split('/');
113
+ if (parts.some((p) => ignoreSet.has(p))) continue;
114
+ results.push(join(parentPath, entry.name));
115
+ }
116
+ return results;
117
+ }
118
+
119
+ function gitImports(since, until) {
120
+ const args = ['log', `--since=${since}`, '-p', '--', '*.ts', '*.tsx', '*.js', '*.jsx'];
121
+ if (until) args.splice(2, 0, `--until=${until}`);
122
+
123
+ try {
124
+ const output = execFileSync('git', args, {
125
+ maxBuffer: 100 * 1024 * 1024,
126
+ encoding: 'utf-8',
127
+ stdio: ['pipe', 'pipe', 'pipe'],
128
+ });
129
+ return output;
130
+ } catch {
131
+ return '';
132
+ }
133
+ }
134
+
135
+ function countMatches(text, pattern) {
136
+ const regex = new RegExp(pattern, 'g');
137
+ const matches = text.match(regex);
138
+ return matches ? matches.length : 0;
139
+ }
@@ -0,0 +1,52 @@
1
+ #!/usr/bin/env node
2
+ // Indexes the project's public API surface by finding all exports.
3
+ // Outputs structured JSON to /tmp/codeyam-memory/exports-scan.json
4
+
5
+ import { mkdir, writeFile } from 'node:fs/promises';
6
+ import { join } from 'node:path';
7
+ import { ripgrepSearch } from '../lib/ripgrep-fallback.mjs';
8
+
9
+ const OUTPUT_DIR = '/tmp/codeyam-memory';
10
+ const OUTPUT_FILE = join(OUTPUT_DIR, 'exports-scan.json');
11
+ await mkdir(OUTPUT_DIR, { recursive: true });
12
+
13
+ const exportOutput = await ripgrepSearch(
14
+ '^export (function|const|class|default|async function|type|interface|enum)',
15
+ {
16
+ types: ['ts', 'js'],
17
+ globs: ['!node_modules', '!dist', '!build', '!.next', '!*.d.ts', '!*.map'],
18
+ lineNumbers: true,
19
+ },
20
+ );
21
+
22
+ if (!exportOutput.trim()) {
23
+ const empty = { files: {}, stats: { total_files: 0, total_exports: 0 } };
24
+ await writeFile(OUTPUT_FILE, JSON.stringify(empty, null, 2));
25
+ console.log(`Export scan complete: ${OUTPUT_FILE} (no exports found)`);
26
+ process.exit(0);
27
+ }
28
+
29
+ // Parse ripgrep output and group by file
30
+ const files = {};
31
+ for (const line of exportOutput.split('\n')) {
32
+ const match = line.match(/^([^:]+):(\d+):(.*)$/);
33
+ if (!match) continue;
34
+
35
+ const [, file, lineNum, text] = match;
36
+ if (!files[file]) files[file] = [];
37
+ files[file].push({ line: parseInt(lineNum, 10), text: text.trim() });
38
+ }
39
+
40
+ const totalFiles = Object.keys(files).length;
41
+ const totalExports = Object.values(files).reduce((sum, arr) => sum + arr.length, 0);
42
+
43
+ const output = {
44
+ files,
45
+ stats: { total_files: totalFiles, total_exports: totalExports },
46
+ };
47
+
48
+ await writeFile(OUTPUT_FILE, JSON.stringify(output, null, 2));
49
+
50
+ console.log(`Export scan complete: ${OUTPUT_FILE}`);
51
+ console.log(` Files with exports: ${totalFiles}`);
52
+ console.log(` Total exports: ${totalExports}`);
@@ -0,0 +1,117 @@
1
+ # Misleading API Analysis
2
+
3
+ You are analyzing a codebase for **misleading APIs** — exported functions whose names promise one thing but whose implementations do another. These are dangerous because a coding agent reading the function signature will make incorrect assumptions about behavior.
4
+
5
+ ## Input
6
+
7
+ Read the export index from `/tmp/codeyam-memory/exports-scan.json`. It contains:
8
+
9
+ - `files`: Object keyed by file path, each containing an array of `{line, text}` export declarations
10
+ - `stats`: `total_files` and `total_exports` counts
11
+
12
+ ## Analysis Steps
13
+
14
+ ### 1. Triage by Name Pattern
15
+
16
+ Scan all export names and prioritize **pure-sounding** functions — names that imply no side effects or predictable behavior:
17
+
18
+ **Highest priority** (names suggesting pure computation):
19
+
20
+ - `get*`, `compute*`, `calculate*`, `derive*`, `extract*`
21
+ - `is*`, `has*`, `check*`, `can*`
22
+ - `parse*`, `format*`, `transform*`, `convert*`
23
+ - `to*`, `from*`, `create*` (when suggesting a factory)
24
+ - `validate*`, `verify*`
25
+
26
+ **Medium priority** (names suggesting single responsibility):
27
+
28
+ - `save*`, `update*`, `delete*`, `remove*` — check for hidden secondary effects
29
+ - `send*`, `notify*`, `emit*` — check for unexpected mutations
30
+ - `init*`, `setup*`, `configure*` — check for non-obvious global state changes
31
+
32
+ ### 2. Deep Read Suspicious Exports
33
+
34
+ For each pure-sounding or single-responsibility export, use the Read tool to read the **full function implementation** (not just 30 lines — read until the function ends). Look for these red flags:
35
+
36
+ **Side effects in "pure" functions:**
37
+
38
+ - Writes to external state (database, cache, filesystem, global variables)
39
+ - Network calls (fetch, HTTP requests, WebSocket messages)
40
+ - Logging that includes sensitive data or business logic decisions
41
+ - Event emission or pub/sub publishing
42
+
43
+ **Input mutation:**
44
+
45
+ - Modifying objects/arrays passed as arguments (when the name doesn't suggest mutation)
46
+ - Reassigning properties on `this` in methods that sound like getters
47
+
48
+ **Silent error swallowing:**
49
+
50
+ - `catch` blocks that return default values instead of throwing or propagating
51
+ - `try/catch` around critical operations where the function signature suggests it will throw on failure
52
+ - Optional chaining (`?.`) chains that silently return `undefined` for important data
53
+
54
+ **Unexpected returns:**
55
+
56
+ - Function name suggests returning one type but actually returns something different
57
+ - `get*` functions that return `null` or `undefined` instead of throwing when the entity doesn't exist
58
+ - Boolean-named functions (`is*`, `has*`) that return non-boolean values
59
+
60
+ **Hidden coupling:**
61
+
62
+ - Functions that read from or write to module-level state
63
+ - Functions that depend on call order (must call A before B)
64
+ - Functions that modify shared caches or memoization stores
65
+
66
+ ### 3. Scan Non-Pure Exports Too
67
+
68
+ Quickly scan action-oriented exports (`save*`, `update*`, etc.) at a glance for **hidden secondary effects**:
69
+
70
+ - `saveUser()` that also sends a welcome email
71
+ - `deleteProject()` that also archives data elsewhere
72
+ - `updateConfig()` that also restarts a service
73
+
74
+ ### 4. Count Callsites
75
+
76
+ For each finding, use Grep to count how many files import or call the misleading function. More callsites = higher impact.
77
+
78
+ ### 5. Assess Severity
79
+
80
+ - **high**: The mismatch could cause data corruption, silent failures, security issues, or affects >10 callsites
81
+ - **medium**: The mismatch leads to unexpected behavior that would cause bugs, or affects 3–10 callsites
82
+ - **low**: Minor naming inconsistency, affects few callsites, unlikely to cause bugs
83
+
84
+ ## Output
85
+
86
+ Return your findings as a JSON code block in your response, using this format:
87
+
88
+ ```json
89
+ {
90
+ "findings": [
91
+ {
92
+ "type": "misleading-api",
93
+ "function": "functionName",
94
+ "file": "path/to/file.ts",
95
+ "name_implies": "what the name suggests the function does",
96
+ "actually_does": "what it actually does (with specific line numbers for the divergent behavior)",
97
+ "severity": "high|medium|low",
98
+ "callsite_count": 0
99
+ }
100
+ ],
101
+ "stats": {
102
+ "exports_scanned": 0,
103
+ "deep_reads": 0,
104
+ "findings_count": 0
105
+ }
106
+ }
107
+ ```
108
+
109
+ After the JSON block, return a **brief one-paragraph summary** of your findings. Include the number of findings and the most notable misleading API discovered.
110
+
111
+ ## Important Notes
112
+
113
+ - **Read full implementations** — don't just look at the first few lines. Side effects often live at the end of functions or in helper calls.
114
+ - Be conservative with "low" severity findings — only flag things that would actually mislead a coding agent into writing incorrect code
115
+ - **Skip type exports** (type, interface, enum) — these can't have behavioral mismatches
116
+ - **Skip trivial getters** that just return a property — focus on functions with actual logic
117
+ - When a function delegates to a helper, read the helper too if the function name implies purity but the helper name suggests side effects
@@ -0,0 +1,61 @@
1
+ #!/usr/bin/env node
2
+ // Lightweight jq replacement for simple field lookups.
3
+ // Usage: node read-json-field.mjs <file> '<expression>'
4
+ // Supports: .field.subfield, .field | length
5
+
6
+ import { readFile } from 'node:fs/promises';
7
+
8
+ const [, , filePath, expression] = process.argv;
9
+
10
+ if (!filePath || !expression) {
11
+ console.error('Usage: node read-json-field.mjs <file> <expression>');
12
+ process.exit(1);
13
+ }
14
+
15
+ try {
16
+ const raw = await readFile(filePath, 'utf-8');
17
+ const data = JSON.parse(raw);
18
+ const result = evaluate(data, expression);
19
+ console.log(typeof result === 'string' ? result : JSON.stringify(result));
20
+ } catch (err) {
21
+ console.error(err.message);
22
+ process.exit(1);
23
+ }
24
+
25
+ function evaluate(data, expr) {
26
+ const trimmed = expr.trim();
27
+
28
+ // Handle pipe: ".field | length"
29
+ const pipeIdx = trimmed.indexOf('|');
30
+ if (pipeIdx !== -1) {
31
+ const left = trimmed.slice(0, pipeIdx).trim();
32
+ const right = trimmed.slice(pipeIdx + 1).trim();
33
+ const intermediate = resolvePath(data, left);
34
+
35
+ if (right === 'length') {
36
+ if (Array.isArray(intermediate)) return intermediate.length;
37
+ if (typeof intermediate === 'object' && intermediate !== null) return Object.keys(intermediate).length;
38
+ if (typeof intermediate === 'string') return intermediate.length;
39
+ throw new Error(`Cannot get length of ${typeof intermediate}`);
40
+ }
41
+ throw new Error(`Unsupported pipe function: ${right}`);
42
+ }
43
+
44
+ return resolvePath(data, trimmed);
45
+ }
46
+
47
+ function resolvePath(data, pathExpr) {
48
+ // Strip leading dot: ".foo.bar" -> "foo.bar"
49
+ const cleaned = pathExpr.startsWith('.') ? pathExpr.slice(1) : pathExpr;
50
+ if (cleaned === '') return data;
51
+
52
+ const keys = cleaned.split('.');
53
+ let current = data;
54
+ for (const key of keys) {
55
+ if (current == null || typeof current !== 'object') {
56
+ throw new Error(`Cannot access '${key}' on ${JSON.stringify(current)}`);
57
+ }
58
+ current = current[key];
59
+ }
60
+ return current;
61
+ }
@@ -0,0 +1,155 @@
1
+ #!/usr/bin/env node
2
+ // Shared ripgrep wrapper with pure-Node fallback when rg is not installed.
3
+
4
+ import { execFile } from 'node:child_process';
5
+ import { readdir, readFile } from 'node:fs/promises';
6
+ import { join } from 'node:path';
7
+
8
+ /**
9
+ * @param {string} pattern - Regex pattern to search for
10
+ * @param {object} [opts]
11
+ * @param {string[]} [opts.types] - File type filters, e.g. ['ts', 'js']
12
+ * @param {string[]} [opts.globs] - Glob filters, e.g. ['!node_modules']
13
+ * @param {number} [opts.context] - Lines of context around matches (-C)
14
+ * @param {boolean} [opts.lineNumbers] - Include line numbers (-n)
15
+ * @param {string} [opts.cwd] - Working directory (defaults to process.cwd())
16
+ * @returns {Promise<string>} ripgrep-compatible output: "file:line:text\n" lines
17
+ */
18
+ export async function ripgrepSearch(pattern, opts = {}) {
19
+ const { types = [], globs = [], context, lineNumbers = true, cwd = process.cwd() } = opts;
20
+
21
+ try {
22
+ return await runRipgrep(pattern, { types, globs, context, lineNumbers, cwd });
23
+ } catch (err) {
24
+ if (err.code === 'ENOENT') {
25
+ // rg not installed — use Node fallback
26
+ return nodeFallback(pattern, { types, globs, context, lineNumbers, cwd });
27
+ }
28
+ throw err;
29
+ }
30
+ }
31
+
32
+ function runRipgrep(pattern, { types, globs, context, lineNumbers, cwd }) {
33
+ return new Promise((resolve, reject) => {
34
+ const args = [];
35
+ if (lineNumbers) args.push('-n');
36
+ if (context != null) args.push('-C', String(context));
37
+ for (const t of types) args.push('--type', t);
38
+ for (const g of globs) args.push('--glob', g);
39
+ args.push(pattern, '.'); // Explicit path prevents rg from reading stdin
40
+
41
+ execFile('rg', args, { cwd, maxBuffer: 50 * 1024 * 1024 }, (err, stdout) => {
42
+ if (err) {
43
+ // Exit code 1 = no matches, 2 = error (e.g. no files searched)
44
+ if (err.code === 1 || err.code === 2) return resolve('');
45
+ // ENOENT = rg binary not found
46
+ if (err.code === 'ENOENT') {
47
+ const e = new Error('rg not found');
48
+ e.code = 'ENOENT';
49
+ return reject(e);
50
+ }
51
+ return reject(err);
52
+ }
53
+ resolve(stdout);
54
+ });
55
+ });
56
+ }
57
+
58
+ const TYPE_EXTENSIONS = {
59
+ ts: ['.ts', '.tsx', '.mts', '.cts'],
60
+ js: ['.js', '.jsx', '.mjs', '.cjs'],
61
+ };
62
+
63
+ const DEFAULT_IGNORE = ['node_modules', 'dist', 'build', '.next', '.git'];
64
+
65
+ async function nodeFallback(pattern, { types = [], globs = [], context, lineNumbers = true, cwd = process.cwd() } = {}) {
66
+ // Build file extension filter from types
67
+ const extensions = new Set();
68
+ for (const t of types) {
69
+ const exts = TYPE_EXTENSIONS[t];
70
+ if (exts) exts.forEach((e) => extensions.add(e));
71
+ }
72
+
73
+ // Parse globs for negative patterns (simple heuristic: "!dirname")
74
+ const ignoreDirs = new Set(DEFAULT_IGNORE);
75
+ for (const g of globs) {
76
+ if (g.startsWith('!')) ignoreDirs.add(g.slice(1));
77
+ }
78
+ // Also handle glob patterns like "!*.d.ts" and "!*.map"
79
+ const ignoreExtensions = new Set();
80
+ for (const g of globs) {
81
+ const m = g.match(/^!\*(\.\w+(?:\.\w+)*)$/);
82
+ if (m) ignoreExtensions.add(m[1]);
83
+ }
84
+
85
+ const regex = new RegExp(pattern);
86
+ const contextLines = context ?? 0;
87
+ const results = [];
88
+
89
+ let entries;
90
+ try {
91
+ entries = await readdir(cwd, { recursive: true });
92
+ } catch {
93
+ return '';
94
+ }
95
+
96
+ for (const relPath of entries) {
97
+ // Skip ignored directories
98
+ const parts = relPath.split('/');
99
+ if (parts.some((p) => ignoreDirs.has(p))) continue;
100
+
101
+ // Check extension filters
102
+ if (extensions.size > 0) {
103
+ const hasMatchingExt = [...extensions].some((ext) => relPath.endsWith(ext));
104
+ if (!hasMatchingExt) continue;
105
+ }
106
+
107
+ // Check ignore extensions
108
+ if ([...ignoreExtensions].some((ext) => relPath.endsWith(ext))) continue;
109
+
110
+ const fullPath = join(cwd, relPath);
111
+ let content;
112
+ try {
113
+ content = await readFile(fullPath, 'utf-8');
114
+ } catch {
115
+ continue;
116
+ }
117
+
118
+ const lines = content.split('\n');
119
+ const matchIndices = [];
120
+ for (let i = 0; i < lines.length; i++) {
121
+ if (regex.test(lines[i])) matchIndices.push(i);
122
+ }
123
+
124
+ if (matchIndices.length === 0) continue;
125
+
126
+ if (contextLines === 0) {
127
+ for (const idx of matchIndices) {
128
+ const lineNum = idx + 1;
129
+ const prefix = lineNumbers ? `${relPath}:${lineNum}:` : `${relPath}:`;
130
+ results.push(`${prefix}${lines[idx]}`);
131
+ }
132
+ } else {
133
+ // With context: output blocks separated by "--"
134
+ const emitted = new Set();
135
+ for (const idx of matchIndices) {
136
+ const start = Math.max(0, idx - contextLines);
137
+ const end = Math.min(lines.length - 1, idx + contextLines);
138
+ for (let i = start; i <= end; i++) {
139
+ if (!emitted.has(i)) {
140
+ emitted.add(i);
141
+ const lineNum = i + 1;
142
+ const sep = i === idx ? ':' : '-';
143
+ const prefix = lineNumbers ? `${relPath}${sep}${lineNum}${sep}` : `${relPath}${sep}`;
144
+ results.push(`${prefix}${lines[i]}`);
145
+ }
146
+ }
147
+ }
148
+ }
149
+ }
150
+
151
+ return results.join('\n') + (results.length > 0 ? '\n' : '');
152
+ }
153
+
154
+ // Exported for testing — not part of the public API.
155
+ export { nodeFallback as _nodeFallback };
@@ -0,0 +1,46 @@
1
+ # Session Log Analysis Prompt
2
+
3
+ You are analyzing a filtered Claude Code session transcript to find instances where Claude got confused about **this specific codebase**. The transcript has been preprocessed — each line is a JSON object with `type` ("user" or "assistant"), `ts` (timestamp), and `content`.
4
+
5
+ ## Your Task
6
+
7
+ Read the session file provided and identify moments where Claude demonstrated confusion that a `.claude/rules/` rule could have prevented.
8
+
9
+ ## Signal Types to Detect
10
+
11
+ 1. **USER_CORRECTION** — The user corrects Claude's approach, code, or assumption. Look for: "no, that's not how...", "actually...", "you need to use X not Y", "that's wrong", explicit disagreement.
12
+
13
+ 2. **RE_EDIT** — Claude edits the same file multiple times in quick succession, indicating the first attempt was wrong. Look for: multiple Edit/Write tool calls targeting the same file path with different content.
14
+
15
+ 3. **FAILED_PIVOT** — A tool call fails (test failure, bash error, type error) and Claude switches to a different approach. Look for: error in tool result followed by a new strategy in the next assistant message.
16
+
17
+ 4. **WRONG_ASSUMPTION** — Claude's thinking or text reveals an incorrect assumption about the codebase. Look for: statements that contradict later evidence, "I assumed...", reasoning that turns out wrong.
18
+
19
+ 5. **TRIBAL_KNOWLEDGE** — The user provides context Claude didn't have but needed. Look for: the user explaining how something works, why something is the way it is, historical context, non-obvious conventions.
20
+
21
+ 6. **APPROACH_PIVOT** — Claude abandons a call chain mid-stream and tries something completely different (without an explicit error triggering it). Look for: sudden topic/strategy shifts in assistant messages.
22
+
23
+ ## Rules for Reporting
24
+
25
+ - **Only report codebase-specific confusion.** Generic programming mistakes (typos, syntax errors, forgetting imports for standard libraries) are NOT worth reporting.
26
+ - **Only report findings where a `.claude/rules/` rule would prevent the confusion.** If the confusion is situational or one-off, skip it.
27
+ - **Maximum 5 findings per session.** Prioritize the strongest, most rule-worthy signals.
28
+ - **Be precise about file paths.** If the confusion relates to specific files, include them.
29
+
30
+ ## Output Format
31
+
32
+ Return a JSON array (no markdown fences, no explanation outside the array). Each element:
33
+
34
+ ```json
35
+ {
36
+ "signal": "USER_CORRECTION | RE_EDIT | FAILED_PIVOT | WRONG_ASSUMPTION | TRIBAL_KNOWLEDGE | APPROACH_PIVOT",
37
+ "summary": "One sentence describing what went wrong",
38
+ "evidence": "Brief quote or paraphrase from the session proving this happened",
39
+ "file_path": "path/to/relevant/file.ts or null if not file-specific",
40
+ "topic": "kebab-case-topic-label",
41
+ "rule_worthy": true,
42
+ "rule_worthy_reason": "Why a rule would prevent this from recurring"
43
+ }
44
+ ```
45
+
46
+ If the session contains no codebase-specific confusion worth documenting, return an empty array: `[]`
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env node
2
+ // Removes cached preprocessed session files.
3
+
4
+ import { rm } from 'node:fs/promises';
5
+
6
+ const OUTPUT_DIR = '/tmp/cc-session-analysis';
7
+
8
+ try {
9
+ await rm(OUTPUT_DIR, { recursive: true, force: true });
10
+ console.log(`Cleaned up ${OUTPUT_DIR}`);
11
+ } catch {
12
+ console.log(`Nothing to clean up (${OUTPUT_DIR} does not exist)`);
13
+ }