@codeyam/codeyam-cli 0.1.7 → 0.1.8

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 (382) 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 +6 -6
  4. package/analyzer-template/packages/ai/package.json +1 -1
  5. package/analyzer-template/packages/ai/src/lib/astScopes/astScopeAnalyzer.ts +34 -3
  6. package/analyzer-template/packages/ai/src/lib/completionCall.ts +14 -2
  7. package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +27 -0
  8. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/coercePrimitivesToArraysBySchema.ts +62 -0
  9. package/analyzer-template/packages/ai/src/lib/generateEntityScenarioData.ts +78 -2
  10. package/analyzer-template/packages/analyze/src/lib/ProjectAnalyzer.ts +6 -0
  11. package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities.ts +9 -1
  12. package/analyzer-template/packages/analyze/src/lib/files/analyze/dependencyResolver.ts +0 -6
  13. package/analyzer-template/packages/analyze/src/lib/files/analyze/findOrCreateEntity.ts +12 -0
  14. package/analyzer-template/packages/analyze/src/lib/files/scenarios/TransformationTracer.ts +65 -28
  15. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +83 -0
  16. package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +23 -4
  17. package/analyzer-template/packages/aws/package.json +1 -1
  18. package/analyzer-template/packages/database/index.ts +1 -0
  19. package/analyzer-template/packages/database/package.json +3 -3
  20. package/analyzer-template/packages/database/src/lib/kysely/db.ts +8 -0
  21. package/analyzer-template/packages/database/src/lib/kysely/tables/editorScenariosTable.ts +62 -0
  22. package/analyzer-template/packages/database/src/lib/loadCommits.ts +31 -20
  23. package/analyzer-template/packages/database/src/lib/loadReadyToBeCapturedAnalyses.ts +0 -5
  24. package/analyzer-template/packages/database/src/lib/updateCommitMetadata.ts +151 -135
  25. package/analyzer-template/packages/database/src/lib/updateFreshAnalysisStatus.ts +58 -42
  26. package/analyzer-template/packages/database/src/lib/updateFreshAnalysisStatusWithScenarios.ts +81 -65
  27. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.ts +29 -1
  28. package/analyzer-template/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.ts +33 -5
  29. package/analyzer-template/packages/github/dist/database/index.d.ts +1 -0
  30. package/analyzer-template/packages/github/dist/database/index.d.ts.map +1 -1
  31. package/analyzer-template/packages/github/dist/database/index.js +1 -0
  32. package/analyzer-template/packages/github/dist/database/index.js.map +1 -1
  33. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts +2 -0
  34. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts.map +1 -1
  35. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js +5 -0
  36. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js.map +1 -1
  37. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.d.ts +20 -0
  38. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.d.ts.map +1 -0
  39. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.js +45 -0
  40. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -0
  41. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts +5 -0
  42. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts.map +1 -1
  43. package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.d.ts.map +1 -1
  44. package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.js +23 -13
  45. package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.js.map +1 -1
  46. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.d.ts.map +1 -1
  47. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.js +1 -4
  48. package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.js.map +1 -1
  49. package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.d.ts.map +1 -1
  50. package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js +100 -89
  51. package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js.map +1 -1
  52. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatus.d.ts.map +1 -1
  53. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatus.js +41 -30
  54. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatus.js.map +1 -1
  55. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatusWithScenarios.d.ts.map +1 -1
  56. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatusWithScenarios.js +68 -57
  57. package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatusWithScenarios.js.map +1 -1
  58. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.d.ts.map +1 -1
  59. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js +29 -1
  60. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js.map +1 -1
  61. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.d.ts.map +1 -1
  62. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +33 -5
  63. package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
  64. package/analyzer-template/packages/github/dist/types/src/types/ProjectMetadata.d.ts +1 -0
  65. package/analyzer-template/packages/github/dist/types/src/types/ProjectMetadata.d.ts.map +1 -1
  66. package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts +10 -0
  67. package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts.map +1 -1
  68. package/analyzer-template/packages/github/package.json +1 -1
  69. package/analyzer-template/packages/types/src/types/ProjectMetadata.ts +1 -0
  70. package/analyzer-template/packages/types/src/types/Scenario.ts +10 -0
  71. package/analyzer-template/packages/utils/dist/types/src/types/ProjectMetadata.d.ts +1 -0
  72. package/analyzer-template/packages/utils/dist/types/src/types/ProjectMetadata.d.ts.map +1 -1
  73. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts +10 -0
  74. package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts.map +1 -1
  75. package/analyzer-template/playwright/captureFromUrl.ts +89 -82
  76. package/analyzer-template/project/constructMockCode.ts +136 -43
  77. package/analyzer-template/project/reconcileMockDataKeys.ts +19 -14
  78. package/analyzer-template/project/start.ts +3 -0
  79. package/analyzer-template/project/startScenarioCapture.ts +9 -0
  80. package/analyzer-template/project/writeClientLogRoute.ts +125 -0
  81. package/analyzer-template/project/writeMockDataTsx.ts +17 -0
  82. package/analyzer-template/project/writeScenarioComponents.ts +36 -7
  83. package/analyzer-template/tsconfig.json +13 -1
  84. package/background/src/lib/virtualized/project/constructMockCode.js +115 -34
  85. package/background/src/lib/virtualized/project/constructMockCode.js.map +1 -1
  86. package/background/src/lib/virtualized/project/reconcileMockDataKeys.js +17 -11
  87. package/background/src/lib/virtualized/project/reconcileMockDataKeys.js.map +1 -1
  88. package/background/src/lib/virtualized/project/start.js +2 -0
  89. package/background/src/lib/virtualized/project/start.js.map +1 -1
  90. package/background/src/lib/virtualized/project/startScenarioCapture.js +5 -0
  91. package/background/src/lib/virtualized/project/startScenarioCapture.js.map +1 -1
  92. package/background/src/lib/virtualized/project/writeClientLogRoute.js +110 -0
  93. package/background/src/lib/virtualized/project/writeClientLogRoute.js.map +1 -0
  94. package/background/src/lib/virtualized/project/writeMockDataTsx.js +12 -0
  95. package/background/src/lib/virtualized/project/writeMockDataTsx.js.map +1 -1
  96. package/background/src/lib/virtualized/project/writeScenarioComponents.js +29 -7
  97. package/background/src/lib/virtualized/project/writeScenarioComponents.js.map +1 -1
  98. package/codeyam-cli/scripts/apply-setup.js +208 -11
  99. package/codeyam-cli/scripts/apply-setup.js.map +1 -1
  100. package/codeyam-cli/src/cli.js +2 -0
  101. package/codeyam-cli/src/cli.js.map +1 -1
  102. package/codeyam-cli/src/commands/analyze.js +17 -7
  103. package/codeyam-cli/src/commands/analyze.js.map +1 -1
  104. package/codeyam-cli/src/commands/default.js +58 -3
  105. package/codeyam-cli/src/commands/default.js.map +1 -1
  106. package/codeyam-cli/src/commands/editor.js +1839 -0
  107. package/codeyam-cli/src/commands/editor.js.map +1 -0
  108. package/codeyam-cli/src/commands/init.js +40 -11
  109. package/codeyam-cli/src/commands/init.js.map +1 -1
  110. package/codeyam-cli/src/utils/__tests__/editorAudit.test.js +246 -0
  111. package/codeyam-cli/src/utils/__tests__/editorAudit.test.js.map +1 -0
  112. package/codeyam-cli/src/utils/__tests__/editorDevServer.test.js +126 -0
  113. package/codeyam-cli/src/utils/__tests__/editorDevServer.test.js.map +1 -0
  114. package/codeyam-cli/src/utils/__tests__/editorJournal.test.js +295 -0
  115. package/codeyam-cli/src/utils/__tests__/editorJournal.test.js.map +1 -0
  116. package/codeyam-cli/src/utils/__tests__/editorMockState.test.js +270 -0
  117. package/codeyam-cli/src/utils/__tests__/editorMockState.test.js.map +1 -0
  118. package/codeyam-cli/src/utils/__tests__/editorPreloadHelpers.test.js +100 -0
  119. package/codeyam-cli/src/utils/__tests__/editorPreloadHelpers.test.js.map +1 -0
  120. package/codeyam-cli/src/utils/__tests__/editorPreview.test.js +147 -0
  121. package/codeyam-cli/src/utils/__tests__/editorPreview.test.js.map +1 -0
  122. package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js +76 -0
  123. package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js.map +1 -0
  124. package/codeyam-cli/src/utils/__tests__/git.editor.test.js +134 -0
  125. package/codeyam-cli/src/utils/__tests__/git.editor.test.js.map +1 -0
  126. package/codeyam-cli/src/utils/__tests__/pathIgnoring.test.js +9 -0
  127. package/codeyam-cli/src/utils/__tests__/pathIgnoring.test.js.map +1 -1
  128. package/codeyam-cli/src/utils/__tests__/project.test.js +65 -0
  129. package/codeyam-cli/src/utils/__tests__/project.test.js.map +1 -0
  130. package/codeyam-cli/src/utils/__tests__/scenarioMarkers.test.js +121 -0
  131. package/codeyam-cli/src/utils/__tests__/scenarioMarkers.test.js.map +1 -0
  132. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +26 -0
  133. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js.map +1 -1
  134. package/codeyam-cli/src/utils/backgroundServer.js +19 -3
  135. package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
  136. package/codeyam-cli/src/utils/buildFlags.js +4 -0
  137. package/codeyam-cli/src/utils/buildFlags.js.map +1 -0
  138. package/codeyam-cli/src/utils/devModeEvents.js +40 -0
  139. package/codeyam-cli/src/utils/devModeEvents.js.map +1 -0
  140. package/codeyam-cli/src/utils/editorAudit.js +82 -0
  141. package/codeyam-cli/src/utils/editorAudit.js.map +1 -0
  142. package/codeyam-cli/src/utils/editorDevServer.js +98 -0
  143. package/codeyam-cli/src/utils/editorDevServer.js.map +1 -0
  144. package/codeyam-cli/src/utils/editorJournal.js +137 -0
  145. package/codeyam-cli/src/utils/editorJournal.js.map +1 -0
  146. package/codeyam-cli/src/utils/editorMockState.js +248 -0
  147. package/codeyam-cli/src/utils/editorMockState.js.map +1 -0
  148. package/codeyam-cli/src/utils/editorPreloadHelpers.js +64 -0
  149. package/codeyam-cli/src/utils/editorPreloadHelpers.js.map +1 -0
  150. package/codeyam-cli/src/utils/editorPreview.js +66 -0
  151. package/codeyam-cli/src/utils/editorPreview.js.map +1 -0
  152. package/codeyam-cli/src/utils/editorScenarios.js +56 -0
  153. package/codeyam-cli/src/utils/editorScenarios.js.map +1 -0
  154. package/codeyam-cli/src/utils/fileMetadata.js +5 -0
  155. package/codeyam-cli/src/utils/fileMetadata.js.map +1 -1
  156. package/codeyam-cli/src/utils/fileWatcher.js +25 -9
  157. package/codeyam-cli/src/utils/fileWatcher.js.map +1 -1
  158. package/codeyam-cli/src/utils/git.js +103 -0
  159. package/codeyam-cli/src/utils/git.js.map +1 -1
  160. package/codeyam-cli/src/utils/install-skills.js +55 -13
  161. package/codeyam-cli/src/utils/install-skills.js.map +1 -1
  162. package/codeyam-cli/src/utils/interactiveSyncWatcher.js +126 -0
  163. package/codeyam-cli/src/utils/interactiveSyncWatcher.js.map +1 -0
  164. package/codeyam-cli/src/utils/pathIgnoring.js +19 -7
  165. package/codeyam-cli/src/utils/pathIgnoring.js.map +1 -1
  166. package/codeyam-cli/src/utils/project.js +15 -5
  167. package/codeyam-cli/src/utils/project.js.map +1 -1
  168. package/codeyam-cli/src/utils/queue/__tests__/heartbeat.test.js +11 -11
  169. package/codeyam-cli/src/utils/queue/__tests__/heartbeat.test.js.map +1 -1
  170. package/codeyam-cli/src/utils/queue/__tests__/manager.test.js +22 -0
  171. package/codeyam-cli/src/utils/queue/__tests__/manager.test.js.map +1 -1
  172. package/codeyam-cli/src/utils/queue/heartbeat.js +13 -5
  173. package/codeyam-cli/src/utils/queue/heartbeat.js.map +1 -1
  174. package/codeyam-cli/src/utils/queue/job.js +70 -1
  175. package/codeyam-cli/src/utils/queue/job.js.map +1 -1
  176. package/codeyam-cli/src/utils/queue/manager.js +7 -6
  177. package/codeyam-cli/src/utils/queue/manager.js.map +1 -1
  178. package/codeyam-cli/src/utils/scenarioMarkers.js +134 -0
  179. package/codeyam-cli/src/utils/scenarioMarkers.js.map +1 -0
  180. package/codeyam-cli/src/utils/serverState.js +27 -2
  181. package/codeyam-cli/src/utils/serverState.js.map +1 -1
  182. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +45 -4
  183. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js.map +1 -1
  184. package/codeyam-cli/src/utils/testRunner.js +158 -0
  185. package/codeyam-cli/src/utils/testRunner.js.map +1 -0
  186. package/codeyam-cli/src/utils/webappDetection.js +14 -2
  187. package/codeyam-cli/src/utils/webappDetection.js.map +1 -1
  188. package/codeyam-cli/src/webserver/app/lib/database.js +41 -27
  189. package/codeyam-cli/src/webserver/app/lib/database.js.map +1 -1
  190. package/codeyam-cli/src/webserver/app/lib/dbNotifier.js.map +1 -1
  191. package/codeyam-cli/src/webserver/backgroundServer.js +108 -18
  192. package/codeyam-cli/src/webserver/backgroundServer.js.map +1 -1
  193. package/codeyam-cli/src/webserver/build/client/assets/{CopyButton-CtmbP4Gl.js → CopyButton-DmJveP3T.js} +1 -1
  194. package/codeyam-cli/src/webserver/build/client/assets/{EntityItem-DlMph_Hm.js → EntityItem-C76mRRiF.js} +1 -1
  195. package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeBadge-B-0PjGOU.js → EntityTypeBadge-g3saevPb.js} +1 -1
  196. package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeIcon-DN9eiJAO.js → EntityTypeIcon-CobE682z.js} +1 -1
  197. package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-Bu6c6aDe.js +1 -0
  198. package/codeyam-cli/src/webserver/build/client/assets/{InteractivePreview-rE_fI2h2.js → InteractivePreview-DYFW3lDD.js} +3 -3
  199. package/codeyam-cli/src/webserver/build/client/assets/{LibraryFunctionPreview-CnatsCw2.js → LibraryFunctionPreview-DLeucoVX.js} +1 -1
  200. package/codeyam-cli/src/webserver/build/client/assets/{LoadingDots-CSP6DZrh.js → LoadingDots-BU_OAEMP.js} +1 -1
  201. package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-CMK8Q7yk.js → LogViewer-ceAyBX-H.js} +1 -1
  202. package/codeyam-cli/src/webserver/build/client/assets/{ReportIssueModal-TCV_HBjy.js → ReportIssueModal-djPLI-WV.js} +1 -1
  203. package/codeyam-cli/src/webserver/build/client/assets/{SafeScreenshot-CG2uh31y.js → SafeScreenshot-BED4B6sP.js} +1 -1
  204. package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-CU_TDYd8.js → ScenarioViewer-B76aig_2.js} +1 -1
  205. package/codeyam-cli/src/webserver/build/client/assets/Spinner-Bb5uFQ5V.js +34 -0
  206. package/codeyam-cli/src/webserver/build/client/assets/Terminal-Dnj5CY9R.js +41 -0
  207. package/codeyam-cli/src/webserver/build/client/assets/{TruncatedFilePath-D7IoaWUW.js → TruncatedFilePath-C8OKAR5x.js} +1 -1
  208. package/codeyam-cli/src/webserver/build/client/assets/{_index-B8z7mjR-.js → _index-C96V0n15.js} +1 -1
  209. package/codeyam-cli/src/webserver/build/client/assets/{activity.(_tab)-DZu78RI1.js → activity.(_tab)-BpKzcsJz.js} +1 -1
  210. package/codeyam-cli/src/webserver/build/client/assets/addon-fit-CUXOrorO.js +1 -0
  211. package/codeyam-cli/src/webserver/build/client/assets/addon-web-links-Duc5hnl7.js +1 -0
  212. package/codeyam-cli/src/webserver/build/client/assets/{agent-transcripts-Dm5RS9il.js → agent-transcripts-D9hemwl6.js} +1 -1
  213. package/codeyam-cli/src/webserver/build/client/assets/api.dev-mode-events-l0sNRNKZ.js +1 -0
  214. package/codeyam-cli/src/webserver/build/client/assets/api.editor-audit-l0sNRNKZ.js +1 -0
  215. package/codeyam-cli/src/webserver/build/client/assets/api.editor-capture-scenario-l0sNRNKZ.js +1 -0
  216. package/codeyam-cli/src/webserver/build/client/assets/api.editor-client-errors-l0sNRNKZ.js +1 -0
  217. package/codeyam-cli/src/webserver/build/client/assets/api.editor-commit-l0sNRNKZ.js +1 -0
  218. package/codeyam-cli/src/webserver/build/client/assets/api.editor-dev-server-l0sNRNKZ.js +1 -0
  219. package/codeyam-cli/src/webserver/build/client/assets/api.editor-entity-status-l0sNRNKZ.js +1 -0
  220. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-entry-l0sNRNKZ.js +1 -0
  221. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-image._-l0sNRNKZ.js +1 -0
  222. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-l0sNRNKZ.js +1 -0
  223. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-screenshot-l0sNRNKZ.js +1 -0
  224. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-update-l0sNRNKZ.js +1 -0
  225. package/codeyam-cli/src/webserver/build/client/assets/api.editor-load-commit-l0sNRNKZ.js +1 -0
  226. package/codeyam-cli/src/webserver/build/client/assets/api.editor-refresh-l0sNRNKZ.js +1 -0
  227. package/codeyam-cli/src/webserver/build/client/assets/api.editor-register-scenario-l0sNRNKZ.js +1 -0
  228. package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-data-l0sNRNKZ.js +1 -0
  229. package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-image._-l0sNRNKZ.js +1 -0
  230. package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenarios-l0sNRNKZ.js +1 -0
  231. package/codeyam-cli/src/webserver/build/client/assets/api.editor-switch-scenario-l0sNRNKZ.js +1 -0
  232. package/codeyam-cli/src/webserver/build/client/assets/api.editor-test-results-l0sNRNKZ.js +1 -0
  233. package/codeyam-cli/src/webserver/build/client/assets/{book-open-Bp5FLkd4.js → book-open-D_nMCFmP.js} +1 -1
  234. package/codeyam-cli/src/webserver/build/client/assets/{chevron-down-DQJA9f4o.js → chevron-down-BH2h1Ea2.js} +1 -1
  235. package/codeyam-cli/src/webserver/build/client/assets/{chunk-JZWAC4HX-7VptmeIr.js → chunk-JZWAC4HX-C4pqxYJB.js} +1 -1
  236. package/codeyam-cli/src/webserver/build/client/assets/{circle-check-B6C4LY9o.js → circle-check-DyIKORY6.js} +1 -1
  237. package/codeyam-cli/src/webserver/build/client/assets/{copy-6nzYCu0G.js → copy-NDbZjXao.js} +1 -1
  238. package/codeyam-cli/src/webserver/build/client/assets/{createLucideIcon-D-QUFOwe.js → createLucideIcon-CMT1jU2q.js} +1 -1
  239. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-BiM6z3Do.js +1 -0
  240. package/codeyam-cli/src/webserver/build/client/assets/editor-D1DAKXtT.js +8 -0
  241. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-C6PQhwY5.js → entity._sha._-CrjR3zZW.js} +8 -8
  242. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.dev-DkzqFzFj.js +6 -0
  243. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-C28BiQzt.js +6 -0
  244. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-p9hhkjJM.js +6 -0
  245. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.edit._scenarioId-C7ysA4Jq.js → entity._sha_.edit._scenarioId-BMvVHNXU.js} +2 -2
  246. package/codeyam-cli/src/webserver/build/client/assets/{entry.client-CU6EUArK.js → entry.client-DTvKq3TY.js} +1 -1
  247. package/codeyam-cli/src/webserver/build/client/assets/{fileTableUtils-EWpfFU4X.js → fileTableUtils-cPo8LiG3.js} +1 -1
  248. package/codeyam-cli/src/webserver/build/client/assets/{files-CrxAoWIL.js → files-DO4CZ16O.js} +1 -1
  249. package/codeyam-cli/src/webserver/build/client/assets/{git-BldHtKeW.js → git-CFCTYk9I.js} +1 -1
  250. package/codeyam-cli/src/webserver/build/client/assets/globals-B17TBSS6.css +1 -0
  251. package/codeyam-cli/src/webserver/build/client/assets/{index-7-1FmlHo.js → index-10oVnAAH.js} +1 -1
  252. package/codeyam-cli/src/webserver/build/client/assets/{index-DuYcwYp_.js → index-BcvgDzbZ.js} +1 -1
  253. package/codeyam-cli/src/webserver/build/client/assets/{labs-CPPVOSWB.js → labs-Zk7ryIM1.js} +1 -1
  254. package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-BnDcD54R.js → loader-circle-BAXYRVEO.js} +1 -1
  255. package/codeyam-cli/src/webserver/build/client/assets/manifest-a632de18.js +1 -0
  256. package/codeyam-cli/src/webserver/build/client/assets/{memory-0wMU4KXe.js → memory-Dg0mvYrI.js} +5 -2
  257. package/codeyam-cli/src/webserver/build/client/assets/{pause-DhQX2g22.js → pause-DTAcYxBt.js} +1 -1
  258. package/codeyam-cli/src/webserver/build/client/assets/root-DUKqhFlb.js +67 -0
  259. package/codeyam-cli/src/webserver/build/client/assets/{search-DborVoKD.js → search-fKo7v0Zo.js} +1 -1
  260. package/codeyam-cli/src/webserver/build/client/assets/{settings-BWunYSXt.js → settings-DfuTtcJP.js} +1 -1
  261. package/codeyam-cli/src/webserver/build/client/assets/{simulations-BtrtCYJg.js → simulations-B3aOzpCZ.js} +1 -1
  262. package/codeyam-cli/src/webserver/build/client/assets/{terminal-Bs4NC-VZ.js → terminal-BG4heKCG.js} +1 -1
  263. package/codeyam-cli/src/webserver/build/client/assets/{triangle-alert-DTf3Jojp.js → triangle-alert-DtSmdtM4.js} +1 -1
  264. package/codeyam-cli/src/webserver/build/client/assets/{useCustomSizes-D_bDZyDU.js → useCustomSizes-ByhSyh0W.js} +1 -1
  265. package/codeyam-cli/src/webserver/build/client/assets/useLastLogLine-C14nCb1q.js +2 -0
  266. package/codeyam-cli/src/webserver/build/client/assets/{useReportContext-BsQb6rFd.js → useReportContext-O-jkvSPx.js} +1 -1
  267. package/codeyam-cli/src/webserver/build/client/assets/{useToast-BOur3mUv.js → useToast-9FIWuYfK.js} +1 -1
  268. package/codeyam-cli/src/webserver/build/client/assets/xterm-BqvuqXEL.js +27 -0
  269. package/codeyam-cli/src/webserver/build/server/assets/index-HfLydfDq.js +1 -0
  270. package/codeyam-cli/src/webserver/build/server/assets/server-build-CUu_F-oo.js +366 -0
  271. package/codeyam-cli/src/webserver/build/server/index.js +1 -1
  272. package/codeyam-cli/src/webserver/build-info.json +5 -5
  273. package/codeyam-cli/src/webserver/devServer.js +39 -5
  274. package/codeyam-cli/src/webserver/devServer.js.map +1 -1
  275. package/codeyam-cli/src/webserver/editorProxy.js +440 -0
  276. package/codeyam-cli/src/webserver/editorProxy.js.map +1 -0
  277. package/codeyam-cli/src/webserver/scripts/codeyam-preload.mjs +175 -0
  278. package/codeyam-cli/src/webserver/scripts/journalCapture.ts +140 -0
  279. package/codeyam-cli/src/webserver/server.js +226 -1
  280. package/codeyam-cli/src/webserver/server.js.map +1 -1
  281. package/codeyam-cli/src/webserver/terminalServer.js +698 -0
  282. package/codeyam-cli/src/webserver/terminalServer.js.map +1 -0
  283. package/codeyam-cli/templates/codeyam-editor-claude.md +68 -0
  284. package/codeyam-cli/templates/editor-step-hook.py +147 -0
  285. package/codeyam-cli/templates/isolation-route/next-app.tsx.template +80 -0
  286. package/codeyam-cli/templates/isolation-route/next-pages.tsx.template +79 -0
  287. package/codeyam-cli/templates/isolation-route/vite-react.tsx.template +78 -0
  288. package/codeyam-cli/templates/msw/browser-setup.ts.template +47 -0
  289. package/codeyam-cli/templates/msw/handler-router.ts.template +47 -0
  290. package/codeyam-cli/templates/msw/server-setup.ts.template +52 -0
  291. package/codeyam-cli/templates/nextjs-prisma-sqlite/PRISMA_SETUP.md +84 -0
  292. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/api/todos/route.ts +17 -0
  293. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/globals.css +26 -0
  294. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/layout.tsx +34 -0
  295. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/lib/prisma.ts +19 -0
  296. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/page.tsx +10 -0
  297. package/codeyam-cli/templates/nextjs-prisma-sqlite/eslint.config.mjs +11 -0
  298. package/codeyam-cli/templates/nextjs-prisma-sqlite/gitignore +43 -0
  299. package/codeyam-cli/templates/nextjs-prisma-sqlite/next.config.ts +14 -0
  300. package/codeyam-cli/templates/nextjs-prisma-sqlite/package.json +35 -0
  301. package/codeyam-cli/templates/nextjs-prisma-sqlite/postcss.config.mjs +7 -0
  302. package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma/schema.prisma +27 -0
  303. package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma/seed.ts +37 -0
  304. package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma.config.ts +12 -0
  305. package/codeyam-cli/templates/nextjs-prisma-sqlite/tsconfig.json +34 -0
  306. package/codeyam-cli/templates/skills/codeyam-dev-mode/SKILL.md +237 -0
  307. package/codeyam-cli/templates/skills/codeyam-editor/SKILL.md +69 -0
  308. package/codeyam-cli/templates/{codeyam-memory.md → skills/codeyam-memory/SKILL.md} +215 -0
  309. package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/deprecated-prompt.md +100 -0
  310. package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/detect-deprecated-patterns.sh +108 -0
  311. package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/find-exports.sh +69 -0
  312. package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/misleading-api-prompt.md +117 -0
  313. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/analyze-prompt.md +46 -0
  314. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/cleanup.sh +12 -0
  315. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/filter.jq +45 -0
  316. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/preprocess.sh +139 -0
  317. package/package.json +4 -2
  318. package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js +22 -4
  319. package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js.map +1 -1
  320. package/packages/ai/src/lib/completionCall.js +10 -2
  321. package/packages/ai/src/lib/completionCall.js.map +1 -1
  322. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +21 -0
  323. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
  324. package/packages/ai/src/lib/dataStructure/helpers/coercePrimitivesToArraysBySchema.js +54 -0
  325. package/packages/ai/src/lib/dataStructure/helpers/coercePrimitivesToArraysBySchema.js.map +1 -0
  326. package/packages/ai/src/lib/dataStructure/helpers/stripNullableMarkers.js +34 -0
  327. package/packages/ai/src/lib/dataStructure/helpers/stripNullableMarkers.js.map +1 -0
  328. package/packages/ai/src/lib/generateEntityScenarioData.js +57 -2
  329. package/packages/ai/src/lib/generateEntityScenarioData.js.map +1 -1
  330. package/packages/analyze/src/lib/ProjectAnalyzer.js +3 -0
  331. package/packages/analyze/src/lib/ProjectAnalyzer.js.map +1 -1
  332. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js +8 -1
  333. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js.map +1 -1
  334. package/packages/analyze/src/lib/files/analyze/dependencyResolver.js +0 -5
  335. package/packages/analyze/src/lib/files/analyze/dependencyResolver.js.map +1 -1
  336. package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js +9 -0
  337. package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js.map +1 -1
  338. package/packages/analyze/src/lib/files/scenarios/TransformationTracer.js +54 -27
  339. package/packages/analyze/src/lib/files/scenarios/TransformationTracer.js.map +1 -1
  340. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +65 -0
  341. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
  342. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +18 -4
  343. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js.map +1 -1
  344. package/packages/database/index.js +1 -0
  345. package/packages/database/index.js.map +1 -1
  346. package/packages/database/src/lib/kysely/db.js +5 -0
  347. package/packages/database/src/lib/kysely/db.js.map +1 -1
  348. package/packages/database/src/lib/kysely/tables/editorScenariosTable.js +45 -0
  349. package/packages/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -0
  350. package/packages/database/src/lib/loadCommits.js +23 -13
  351. package/packages/database/src/lib/loadCommits.js.map +1 -1
  352. package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.js +1 -4
  353. package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.js.map +1 -1
  354. package/packages/database/src/lib/updateCommitMetadata.js +100 -89
  355. package/packages/database/src/lib/updateCommitMetadata.js.map +1 -1
  356. package/packages/database/src/lib/updateFreshAnalysisStatus.js +41 -30
  357. package/packages/database/src/lib/updateFreshAnalysisStatus.js.map +1 -1
  358. package/packages/database/src/lib/updateFreshAnalysisStatusWithScenarios.js +68 -57
  359. package/packages/database/src/lib/updateFreshAnalysisStatusWithScenarios.js.map +1 -1
  360. package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js +29 -1
  361. package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js.map +1 -1
  362. package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +33 -5
  363. package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
  364. package/scripts/npm-post-install.cjs +34 -0
  365. package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-C1rIyZdV.js +0 -34
  366. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-DmzSmblj.js +0 -1
  367. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-DVTcUnur.js +0 -6
  368. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-BVgNO76F.js +0 -6
  369. package/codeyam-cli/src/webserver/build/client/assets/globals-CLmFdUae.css +0 -1
  370. package/codeyam-cli/src/webserver/build/client/assets/manifest-717e346a.js +0 -1
  371. package/codeyam-cli/src/webserver/build/client/assets/root-DqfSDjyQ.js +0 -62
  372. package/codeyam-cli/src/webserver/build/client/assets/useLastLogLine-DZp6rrQD.js +0 -2
  373. package/codeyam-cli/src/webserver/build/server/assets/index-B8jmgmn2.js +0 -1
  374. package/codeyam-cli/src/webserver/build/server/assets/server-build-9OU4lmvL.js +0 -285
  375. package/scripts/finalize-analyzer.cjs +0 -13
  376. /package/codeyam-cli/templates/{codeyam-diagnose.md → commands/codeyam-diagnose.md} +0 -0
  377. /package/codeyam-cli/templates/{codeyam-debug.md → skills/codeyam-debug/SKILL.md} +0 -0
  378. /package/codeyam-cli/templates/{codeyam-new-rule.md → skills/codeyam-new-rule/SKILL.md} +0 -0
  379. /package/codeyam-cli/templates/{codeyam-setup.md → skills/codeyam-setup/SKILL.md} +0 -0
  380. /package/codeyam-cli/templates/{codeyam-sim.md → skills/codeyam-sim/SKILL.md} +0 -0
  381. /package/codeyam-cli/templates/{codeyam-test.md → skills/codeyam-test/SKILL.md} +0 -0
  382. /package/codeyam-cli/templates/{codeyam-verify.md → skills/codeyam-verify/SKILL.md} +0 -0
@@ -0,0 +1,69 @@
1
+ ---
2
+ name: codeyam-editor
3
+ autoApprove: true
4
+ description: CodeYam Editor Mode — scaffold a project and build code + data scenarios together
5
+ ---
6
+
7
+ # CodeYam Editor Mode
8
+
9
+ You are in **Editor Mode**. The user sees a split-screen: this terminal on the left, live preview on the right.
10
+
11
+ ## CRITICAL: How This Works
12
+
13
+ You MUST follow a step-by-step workflow driven by `codeyam editor` commands. Each command tells you exactly what to do next. **You do NOT have all the instructions upfront** — the commands provide them incrementally.
14
+
15
+ **Your first action:** Run `codeyam editor`.
16
+
17
+ **The rule:** After completing what a command tells you to do, run the NEXT command it specifies. The commands are your instructions — follow them one at a time.
18
+
19
+ ## The Cycle
20
+
21
+ Every feature follows 12 gated steps:
22
+
23
+ ```
24
+ codeyam editor → Setup (if new) or cycle overview
25
+ codeyam editor 1 → Plan the feature (confirm with user)
26
+ codeyam editor 2 → Build a working prototype fast
27
+ codeyam editor 3 → Confirm prototype with user
28
+ codeyam editor 4 → Plan extraction (read code, list everything to extract)
29
+ codeyam editor 5 → Execute extraction (TDD for functions, extract components)
30
+ codeyam editor 6 → Record functions in glossary
31
+ codeyam editor 7 → Analyze and verify components
32
+ codeyam editor 8 → Create app-level scenarios
33
+ codeyam editor 9 → Create user-persona scenarios
34
+ codeyam editor 10 → Verify screenshots and check for errors
35
+ codeyam editor 11 → Create/update journal entry
36
+ codeyam editor 12 → Present summary, get final approval
37
+ ```
38
+
39
+ **You MUST run each command and follow its checklist before moving to the next.** Steps 1, 3, and 12 require user confirmation. After step 12, loop back to step 1.
40
+
41
+ ## Key Rules
42
+
43
+ - **Run the commands** — they ARE your instructions, not suggestions
44
+ - **Every feature gets scenarios** — this is the core value of CodeYam
45
+ - **Always scaffold with a database** (Prisma + SQLite)
46
+ - **Build real API routes** — the proxy handles scenario data transparently
47
+ - **Start the dev server via the CodeYam API** — it handles proxy setup automatically
48
+ - **Verify the preview after changes** — check the dev server URL, not the proxy
49
+
50
+ ## Quick Reference
51
+
52
+ ```bash
53
+ # Register scenario (auto-captures screenshot)
54
+ curl -s -X POST http://localhost:${CODEYAM_PORT:-3111}/api/editor-register-scenario \
55
+ -H 'Content-Type: application/json' \
56
+ -d '{"name":"...","description":"...","mockData":{"routes":{"/api/...":{"body":[...]}}}}'
57
+
58
+ # Journal entry (one per feature, references scenario names)
59
+ curl -s -X POST http://localhost:${CODEYAM_PORT:-3111}/api/editor-journal-entry \
60
+ -H 'Content-Type: application/json' \
61
+ -d '{"title":"...","type":"feature","description":"...","scenarios":["..."]}'
62
+
63
+ # Refresh preview
64
+ curl -s -X POST http://localhost:${CODEYAM_PORT:-3111}/api/dev-mode-preview
65
+
66
+ # Restart dev server (only for config/dependency changes)
67
+ curl -s -X POST http://localhost:${CODEYAM_PORT:-3111}/api/editor-dev-server \
68
+ -H 'Content-Type: application/json' -d '{"action":"restart"}'
69
+ ```
@@ -208,6 +208,215 @@ Prioritize areas with stronger confusion signals:
208
208
 
209
209
  Focus your documentation efforts on areas with the highest confusion scores.
210
210
 
211
+ Holistic source analysis signals (from the Holistic Source Analysis phase below) also feed into this scoring. Session mining signals (from the Session Log Mining phase below) feed into this same table.
212
+
213
+ ---
214
+
215
+ ## Phase 3B: Analysis Sizing & Menu
216
+
217
+ Before running the expensive LLM-powered analysis phases, run the fast extraction scripts to gather sizing metrics and let the user choose which phases to run.
218
+
219
+ ### Step 1: Run fast extraction scripts (concurrent)
220
+
221
+ Clear stale data from any previous run, then run all three scripts in parallel:
222
+
223
+ ```bash
224
+ rm -rf /tmp/codeyam-memory/ /tmp/cc-session-analysis/
225
+ ```
226
+
227
+ ```bash
228
+ bash .claude/skills/codeyam-memory/scripts/holistic-analysis/detect-deprecated-patterns.sh
229
+ ```
230
+
231
+ ```bash
232
+ bash .claude/skills/codeyam-memory/scripts/holistic-analysis/find-exports.sh
233
+ ```
234
+
235
+ ```bash
236
+ bash .claude/skills/codeyam-memory/scripts/session-mining/preprocess.sh 2>/dev/null
237
+ ```
238
+
239
+ Capture the stdout of `preprocess.sh` — each line is a path to a filtered session file.
240
+
241
+ ### Step 2: Extract sizing metrics
242
+
243
+ Use quick `jq` one-liners to extract counts — do NOT read the full JSON files into the main context:
244
+
245
+ ```bash
246
+ jq '.dependencies | length' /tmp/codeyam-memory/deprecated-scan.json
247
+ jq '.explicit_markers | length' /tmp/codeyam-memory/deprecated-scan.json
248
+ jq '.stats.total_exports' /tmp/codeyam-memory/exports-scan.json
249
+ jq '.stats.total_files' /tmp/codeyam-memory/exports-scan.json
250
+ ```
251
+
252
+ The session count is the number of lines from `preprocess.sh` stdout.
253
+
254
+ **Time estimate formulas:**
255
+
256
+ | Phase | Formula | Example |
257
+ | ------------------------ | --------------------------------------- | ----------------------- |
258
+ | Holistic source analysis | `3 + (total_exports / 500)` min, cap 12 | 3,470 exports → ~10 min |
259
+ | Session log mining | `1 + (sessions × 0.25)` min, cap 12 | 25 sessions → ~7 min |
260
+
261
+ ### Step 3: Present the menu
262
+
263
+ Use `AskUserQuestion` with `multiSelect: true`. Include actual numbers from Step 2:
264
+
265
+ > **Which additional analysis phases would you like to run?**
266
+ >
267
+ > 📦 **Holistic Source Analysis** — {exports} exports across {files} files, {deps} dependencies, {markers} deprecation markers. Estimated: ~{N} min
268
+ >
269
+ > 💬 **Session Log Mining** — {sessions} qualifying sessions found. Estimated: ~{N} min
270
+
271
+ Options (as `multiSelect: true`):
272
+
273
+ - **Holistic Source Analysis (~N min)** — "Deep-read exports to find misleading APIs and deprecated patterns"
274
+ - **Session Log Mining (~N min)** — "Mine Claude session history for confusion signals"
275
+ - **Skip both** — "Proceed with git archaeology results only"
276
+
277
+ Omit any option where the data count is zero (e.g., if no sessions qualify, don't show the session mining option). If both counts are zero, skip the menu entirely and proceed to Phase 4.
278
+
279
+ ### Step 4: Execute selected phases
280
+
281
+ Based on the user's selection:
282
+
283
+ - **Holistic Source Analysis selected:** Jump to the "Holistic Source Analysis" section below, starting at **Step 2** (scripts already ran in Step 1 above).
284
+ - **Session Log Mining selected:** Jump to the "Session Log Mining" section below, starting at **Step 2** (preprocessing already ran in Step 1 above). Use the session file paths captured in Step 1.
285
+ - **Both selected:** Run both, starting each at Step 2.
286
+ - **Skip both:** Proceed directly to Phase 4.
287
+
288
+ ### Step 5: Cleanup
289
+
290
+ Regardless of what the user selected, clean up temporary files before proceeding to Phase 4:
291
+
292
+ ```bash
293
+ rm -rf /tmp/codeyam-memory/ /tmp/cc-session-analysis/
294
+ ```
295
+
296
+ ---
297
+
298
+ ## Additional Analysis Phase: Holistic Source Analysis
299
+
300
+ Holistic analysis reads the codebase cross-cuttingly to find **latent confusion** — problems
301
+ that haven't caused bugs yet but will mislead a future agent reading code locally.
302
+
303
+ ### Prerequisites
304
+
305
+ - Project must contain `.ts`, `.tsx`, `.js`, or `.jsx` source files
306
+ - If no source files are found, skip this phase entirely
307
+
308
+ ### Step 1: Run extraction scripts
309
+
310
+ Handled by Phase 3B. Proceed to Step 2.
311
+
312
+ ### Step 2: Launch analysis subagents (concurrent)
313
+
314
+ Read the prompt templates and launch both as Task agents concurrently. **Do NOT read the
315
+ scan data into the main context** — it can be hundreds of KB. Each subagent reads its own
316
+ data file via the Read tool.
317
+
318
+ 1. **Deprecated Pattern agent** — Read `.claude/skills/codeyam-memory/scripts/holistic-analysis/deprecated-prompt.md` for the
319
+ prompt template. Launch as a foreground Task agent (model: sonnet) with the prompt template
320
+ content. The agent reads `/tmp/codeyam-memory/deprecated-scan.json` itself, uses Grep to
321
+ find remaining callsites, and returns its findings JSON in the response.
322
+
323
+ 2. **Misleading API agent** — Read `.claude/skills/codeyam-memory/scripts/holistic-analysis/misleading-api-prompt.md` for the
324
+ prompt template. Launch as a foreground Task agent (model: sonnet) with the prompt template
325
+ content. The agent reads `/tmp/codeyam-memory/exports-scan.json` itself, uses Read to
326
+ inspect suspicious functions, and returns its findings JSON in the response.
327
+
328
+ Both agents return their findings JSON and a brief summary directly in their response.
329
+
330
+ **Context budget note:** The exports index alone can be 400KB+. Never read it into the main
331
+ context. Subagents run as foreground Task agents and have full filesystem access including
332
+ `/tmp/`.
333
+
334
+ ### Step 3: Integrate findings
335
+
336
+ Parse the findings JSON from each subagent's response. For each finding:
337
+
338
+ - **Deprecated patterns** get confusion score **4** (comparable to "workaround/hack" signal).
339
+ If an explicit `@deprecated` marker exists, bump to **5**.
340
+ - **Misleading APIs** get confusion score **4** for medium severity, **6** for high severity
341
+ (where "high" means the mismatch could cause data corruption or silent failures).
342
+
343
+ Add findings to the evidence pool alongside git archaeology results. They flow into
344
+ Phase 4 (evidence-based user questions) and Phase 5 (rule generation) normally.
345
+
346
+ ### Step 4: Cleanup
347
+
348
+ Handled by Phase 3B Step 5.
349
+
350
+ ---
351
+
352
+ ## Additional Analysis Phase: Session Log Mining
353
+
354
+ This phase mines Claude Code session transcripts for empirical confusion: user corrections, wrong assumptions, re-edits, tribal knowledge gaps. It complements the git archaeology in Phase 2 with direct evidence from actual Claude sessions.
355
+
356
+ ### Step 1: Preprocess Sessions
357
+
358
+ Handled by Phase 3B. Use the session file paths captured there.
359
+
360
+ ### Step 2: Launch Haiku Subagents
361
+
362
+ Read the prompt template from `.claude/skills/codeyam-memory/scripts/session-mining/analyze-prompt.md`.
363
+
364
+ For each filtered session file from Step 1:
365
+
366
+ - If the file is **<200KB**: launch one Haiku Task agent
367
+ - If the file is **>200KB**: chunk into ~200KB segments, launch one agent per chunk
368
+
369
+ **Do NOT read session files into the main context** — they can be 20-40KB each and will
370
+ exhaust the context window. Each subagent reads its own file via the Read tool. Each agent
371
+ receives:
372
+
373
+ 1. The prompt template content
374
+ 2. The `/tmp/` file path to read (the agent reads it itself)
375
+ 3. Instruction to return a JSON array
376
+
377
+ Launch agents in batches of **10** using the Task tool with `model: "haiku"`. **Use unique descriptions** for each agent (e.g., "Session mining batch 1 - session 1", "Session mining batch 1 - session 2", etc.; increment the batch number for each batch of 10). Wait for each batch to complete before launching the next. This keeps machine load manageable — a poweruser may have 30+ sessions qualifying.
378
+
379
+ ### Step 3: Collect and Validate Findings
380
+
381
+ Parse each agent's response as JSON. Validate:
382
+
383
+ - Must be an array
384
+ - Each element must have `signal` and `summary` fields
385
+ - `signal` must be one of: `USER_CORRECTION`, `RE_EDIT`, `FAILED_PIVOT`, `WRONG_ASSUMPTION`, `TRIBAL_KNOWLEDGE`, `APPROACH_PIVOT`
386
+
387
+ If >50% of agents return invalid output, warn the user before continuing. Otherwise, silently skip invalid results.
388
+
389
+ **Filter out environment-specific findings.** Discard any finding that relates to the developer's local machine setup rather than the project's codebase — e.g., bare repo checkout layouts, local tool versions, IDE configuration, shell aliases, filesystem paths, or permission issues. The rules we generate must be useful to _any_ developer cloning the repo, not just the one whose sessions we mined.
390
+
391
+ ### Step 4: Deduplicate Across Sessions
392
+
393
+ Three-pass merge:
394
+
395
+ 1. **Cluster by `topic`** — group all findings with the same topic label
396
+ 2. **Rank within each cluster** — priority order: `USER_CORRECTION` > `TRIBAL_KNOWLEDGE` > `WRONG_ASSUMPTION` > `FAILED_PIVOT` > `RE_EDIT` > `APPROACH_PIVOT`
397
+ 3. **Count session occurrences** — add `session_count` to each merged finding
398
+
399
+ Output: one merged finding per topic, with `session_count`, strongest signal type, and collected file paths.
400
+
401
+ ### Step 5: Feed into Phase 3 Scoring
402
+
403
+ Additional scoring weights for session-mining signals:
404
+
405
+ | Signal | Weight |
406
+ | ----------------------------------- | -------- |
407
+ | User correction (session) | 7 |
408
+ | Tribal knowledge provided (session) | 6 |
409
+ | Wrong assumption caught (session) | 5 |
410
+ | Re-edit of same file (session) | 4 |
411
+ | Failed-then-pivoted (session) | 3 |
412
+ | Appearing in 3+ sessions | +3 bonus |
413
+
414
+ These merge into the Phase 3 scoring table above. Session-mined findings then flow into Phase 4 (evidence-based questions) and Phase 5 (rule generation) alongside git archaeology findings.
415
+
416
+ ### Step 6: Cleanup
417
+
418
+ Handled by Phase 3B Step 5.
419
+
211
420
  ---
212
421
 
213
422
  ## Phase 4: Ask Evidence-Based Questions
@@ -282,6 +491,12 @@ Before generating each rule, verify it passes these tests:
282
491
  - If YES → definitely document it
283
492
  - If NO → reconsider its value
284
493
 
494
+ **For holistic analysis findings**, the validation checks apply with these adjustments:
495
+
496
+ - **Evidence check:** Satisfied by structural evidence from source analysis (e.g., "name implies pure computation but implementation writes to cache on line 47") rather than git commit history.
497
+ - **Code-derivable check:** These findings ARE derived from code — but from a cross-cutting read that a local reader wouldn't perform. The rule is valuable if it captures insight that requires reading multiple files or tracing non-obvious call chains.
498
+ - **Prevention check:** "Would this rule prevent a future agent from being misled?" rather than "would it have prevented a past commit?"
499
+
285
500
  ### Rule Quality Examples
286
501
 
287
502
  **✅ Good rule** (passes all tests):
@@ -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,108 @@
1
+ #!/usr/bin/env bash
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
+ set -euo pipefail
6
+
7
+ OUTPUT_DIR="/tmp/codeyam-memory"
8
+ OUTPUT_FILE="$OUTPUT_DIR/deprecated-scan.json"
9
+ mkdir -p "$OUTPUT_DIR"
10
+
11
+ # --- Dependency scan ---
12
+ # Collect all dependency names from package.json files (root + workspace packages)
13
+ deps_json="[]"
14
+ while IFS= read -r pkg_file; do
15
+ # Extract dependency names from both dependencies and devDependencies
16
+ file_deps=$(jq -r '(.dependencies // {} | keys[]) , (.devDependencies // {} | keys[])' "$pkg_file" 2>/dev/null || true)
17
+ if [ -n "$file_deps" ]; then
18
+ deps_json=$(echo "$deps_json" | jq --arg d "$file_deps" '. + ($d | split("\n") | map(select(. != "")))')
19
+ fi
20
+ done < <(find . -name "package.json" -not -path "*/node_modules/*" -not -path "*/dist/*" -not -path "*/.next/*" 2>/dev/null)
21
+
22
+ # Deduplicate
23
+ deps_json=$(echo "$deps_json" | jq 'unique')
24
+
25
+ # --- Explicit marker scan ---
26
+ markers_json="[]"
27
+ marker_output=$(rg -n "@deprecated|// legacy|// deprecated|// old approach|TODO.*deprecat|FIXME.*deprecat" \
28
+ --type ts --type js \
29
+ --glob '!node_modules' --glob '!dist' --glob '!build' --glob '!.next' \
30
+ -C 2 2>/dev/null || true)
31
+
32
+ if [ -n "$marker_output" ]; then
33
+ # Parse ripgrep output into JSON entries
34
+ markers_json=$(echo "$marker_output" | awk -F: '
35
+ /^[^-].*:[0-9]+:/ {
36
+ file = $1
37
+ line = $2
38
+ # Rejoin the rest as text (handles colons in content)
39
+ text = ""
40
+ for (i = 3; i <= NF; i++) {
41
+ text = (text == "" ? $i : text ":" $i)
42
+ }
43
+ gsub(/^[ \t]+/, "", text)
44
+ gsub(/"/, "\\\"", text)
45
+ gsub(/\t/, " ", text)
46
+ printf "{\"file\":\"%s\",\"line\":%s,\"text\":\"%s\"},\n", file, line, text
47
+ }
48
+ ' | sed '$ s/,$//' | awk 'BEGIN{print "["} {print} END{print "]"}')
49
+
50
+ # Validate JSON — fall back to empty array if malformed
51
+ if ! echo "$markers_json" | jq empty 2>/dev/null; then
52
+ markers_json="[]"
53
+ fi
54
+ fi
55
+
56
+ # --- Git recency comparison ---
57
+ # Extract all import lines from git patches in two passes (recent + old), then count per-dep
58
+ recency_json="{}"
59
+ dep_count=$(echo "$deps_json" | jq length)
60
+
61
+ if [ "$dep_count" -gt 0 ]; then
62
+ RECENT_IMPORTS="$OUTPUT_DIR/recent-imports.txt"
63
+ OLD_IMPORTS="$OUTPUT_DIR/old-imports.txt"
64
+
65
+ # Single git log pass per time window — extract only import lines
66
+ git log --since="3 months ago" -p -- '*.ts' '*.tsx' '*.js' '*.jsx' 2>/dev/null \
67
+ | grep -oE "from ['\"][^'\"]+['\"]" > "$RECENT_IMPORTS" 2>/dev/null || true
68
+ git log --since="12 months ago" --until="3 months ago" -p -- '*.ts' '*.tsx' '*.js' '*.jsx' 2>/dev/null \
69
+ | grep -oE "from ['\"][^'\"]+['\"]" > "$OLD_IMPORTS" 2>/dev/null || true
70
+
71
+ for dep in $(echo "$deps_json" | jq -r '.[]'); do
72
+ # Skip short names that would match too broadly
73
+ if [ ${#dep} -lt 3 ]; then
74
+ continue
75
+ fi
76
+
77
+ recent=$(grep -c "from ['\"]${dep}" "$RECENT_IMPORTS" 2>/dev/null || true)
78
+ recent=${recent:-0}
79
+ old=$(grep -c "from ['\"]${dep}" "$OLD_IMPORTS" 2>/dev/null || true)
80
+ old=${old:-0}
81
+
82
+ if [ "$recent" -gt 0 ] || [ "$old" -gt 0 ]; then
83
+ recency_json=$(echo "$recency_json" | jq \
84
+ --arg dep "$dep" \
85
+ --argjson recent "$recent" \
86
+ --argjson old "$old" \
87
+ '. + {($dep): {"recent_imports": $recent, "old_imports": $old}}')
88
+ fi
89
+ done
90
+
91
+ rm -f "$RECENT_IMPORTS" "$OLD_IMPORTS"
92
+ fi
93
+
94
+ # --- Assemble final output ---
95
+ jq -n \
96
+ --argjson dependencies "$deps_json" \
97
+ --argjson explicit_markers "$markers_json" \
98
+ --argjson git_recency "$recency_json" \
99
+ '{
100
+ dependencies: $dependencies,
101
+ explicit_markers: $explicit_markers,
102
+ git_recency: $git_recency
103
+ }' > "$OUTPUT_FILE"
104
+
105
+ echo "Deprecated pattern scan complete: $OUTPUT_FILE"
106
+ echo " Dependencies found: $(echo "$deps_json" | jq length)"
107
+ echo " Explicit markers found: $(echo "$markers_json" | jq length)"
108
+ echo " Deps with git activity: $(echo "$recency_json" | jq 'length')"
@@ -0,0 +1,69 @@
1
+ #!/usr/bin/env bash
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
+ set -euo pipefail
6
+
7
+ OUTPUT_DIR="/tmp/codeyam-memory"
8
+ OUTPUT_FILE="$OUTPUT_DIR/exports-scan.json"
9
+ mkdir -p "$OUTPUT_DIR"
10
+
11
+ # Find all export declarations, excluding noise directories and .d.ts files
12
+ export_output=$(rg -n "^export (function|const|class|default|async function|type|interface|enum)" \
13
+ --type ts --type js \
14
+ --glob '!node_modules' --glob '!dist' --glob '!build' --glob '!.next' \
15
+ --glob '!*.d.ts' --glob '!*.map' \
16
+ 2>/dev/null || true)
17
+
18
+ if [ -z "$export_output" ]; then
19
+ # No exports found — output empty structure
20
+ jq -n '{files: {}, stats: {total_files: 0, total_exports: 0}}' > "$OUTPUT_FILE"
21
+ echo "Export scan complete: $OUTPUT_FILE (no exports found)"
22
+ exit 0
23
+ fi
24
+
25
+ # Parse ripgrep output into JSON grouped by file
26
+ # Format: file:line:text
27
+ files_json=$(echo "$export_output" | awk -F: '
28
+ {
29
+ file = $1
30
+ line = $2
31
+ # Rejoin rest as text
32
+ text = ""
33
+ for (i = 3; i <= NF; i++) {
34
+ text = (text == "" ? $i : text ":" $i)
35
+ }
36
+ # Trim leading whitespace
37
+ gsub(/^[ \t]+/, "", text)
38
+ # Escape quotes for JSON
39
+ gsub(/"/, "\\\"", text)
40
+ gsub(/\t/, " ", text)
41
+ printf "%s\t%s\t%s\n", file, line, text
42
+ }' | jq -Rsn '
43
+ [inputs | split("\n") | .[] | select(. != "") |
44
+ split("\t") | select(length >= 3) |
45
+ {file: .[0], line: (.[1] | tonumber), text: .[2]}
46
+ ] |
47
+ group_by(.file) |
48
+ reduce .[] as $group ({};
49
+ . + {($group[0].file): [$group[] | {line: .line, text: .text}]}
50
+ )
51
+ ')
52
+
53
+ # Compute stats
54
+ total_files=$(echo "$files_json" | jq 'length')
55
+ total_exports=$(echo "$files_json" | jq '[.[] | length] | add // 0')
56
+
57
+ # Assemble final output
58
+ jq -n \
59
+ --argjson files "$files_json" \
60
+ --argjson total_files "$total_files" \
61
+ --argjson total_exports "$total_exports" \
62
+ '{
63
+ files: $files,
64
+ stats: {total_files: $total_files, total_exports: $total_exports}
65
+ }' > "$OUTPUT_FILE"
66
+
67
+ echo "Export scan complete: $OUTPUT_FILE"
68
+ echo " Files with exports: $total_files"
69
+ echo " Total exports: $total_exports"