@codeyam/codeyam-cli 0.1.6 → 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 (398) 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/commands/memory.js +26 -2
  111. package/codeyam-cli/src/commands/memory.js.map +1 -1
  112. package/codeyam-cli/src/utils/__tests__/editorAudit.test.js +246 -0
  113. package/codeyam-cli/src/utils/__tests__/editorAudit.test.js.map +1 -0
  114. package/codeyam-cli/src/utils/__tests__/editorDevServer.test.js +126 -0
  115. package/codeyam-cli/src/utils/__tests__/editorDevServer.test.js.map +1 -0
  116. package/codeyam-cli/src/utils/__tests__/editorJournal.test.js +295 -0
  117. package/codeyam-cli/src/utils/__tests__/editorJournal.test.js.map +1 -0
  118. package/codeyam-cli/src/utils/__tests__/editorMockState.test.js +270 -0
  119. package/codeyam-cli/src/utils/__tests__/editorMockState.test.js.map +1 -0
  120. package/codeyam-cli/src/utils/__tests__/editorPreloadHelpers.test.js +100 -0
  121. package/codeyam-cli/src/utils/__tests__/editorPreloadHelpers.test.js.map +1 -0
  122. package/codeyam-cli/src/utils/__tests__/editorPreview.test.js +147 -0
  123. package/codeyam-cli/src/utils/__tests__/editorPreview.test.js.map +1 -0
  124. package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js +76 -0
  125. package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js.map +1 -0
  126. package/codeyam-cli/src/utils/__tests__/git.editor.test.js +134 -0
  127. package/codeyam-cli/src/utils/__tests__/git.editor.test.js.map +1 -0
  128. package/codeyam-cli/src/utils/__tests__/pathIgnoring.test.js +9 -0
  129. package/codeyam-cli/src/utils/__tests__/pathIgnoring.test.js.map +1 -1
  130. package/codeyam-cli/src/utils/__tests__/project.test.js +65 -0
  131. package/codeyam-cli/src/utils/__tests__/project.test.js.map +1 -0
  132. package/codeyam-cli/src/utils/__tests__/scenarioMarkers.test.js +121 -0
  133. package/codeyam-cli/src/utils/__tests__/scenarioMarkers.test.js.map +1 -0
  134. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +26 -0
  135. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js.map +1 -1
  136. package/codeyam-cli/src/utils/backgroundServer.js +19 -3
  137. package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
  138. package/codeyam-cli/src/utils/buildFlags.js +4 -0
  139. package/codeyam-cli/src/utils/buildFlags.js.map +1 -0
  140. package/codeyam-cli/src/utils/devModeEvents.js +40 -0
  141. package/codeyam-cli/src/utils/devModeEvents.js.map +1 -0
  142. package/codeyam-cli/src/utils/editorAudit.js +82 -0
  143. package/codeyam-cli/src/utils/editorAudit.js.map +1 -0
  144. package/codeyam-cli/src/utils/editorDevServer.js +98 -0
  145. package/codeyam-cli/src/utils/editorDevServer.js.map +1 -0
  146. package/codeyam-cli/src/utils/editorJournal.js +137 -0
  147. package/codeyam-cli/src/utils/editorJournal.js.map +1 -0
  148. package/codeyam-cli/src/utils/editorMockState.js +248 -0
  149. package/codeyam-cli/src/utils/editorMockState.js.map +1 -0
  150. package/codeyam-cli/src/utils/editorPreloadHelpers.js +64 -0
  151. package/codeyam-cli/src/utils/editorPreloadHelpers.js.map +1 -0
  152. package/codeyam-cli/src/utils/editorPreview.js +66 -0
  153. package/codeyam-cli/src/utils/editorPreview.js.map +1 -0
  154. package/codeyam-cli/src/utils/editorScenarios.js +56 -0
  155. package/codeyam-cli/src/utils/editorScenarios.js.map +1 -0
  156. package/codeyam-cli/src/utils/fileMetadata.js +5 -0
  157. package/codeyam-cli/src/utils/fileMetadata.js.map +1 -1
  158. package/codeyam-cli/src/utils/fileWatcher.js +25 -9
  159. package/codeyam-cli/src/utils/fileWatcher.js.map +1 -1
  160. package/codeyam-cli/src/utils/git.js +103 -0
  161. package/codeyam-cli/src/utils/git.js.map +1 -1
  162. package/codeyam-cli/src/utils/install-skills.js +55 -13
  163. package/codeyam-cli/src/utils/install-skills.js.map +1 -1
  164. package/codeyam-cli/src/utils/interactiveSyncWatcher.js +126 -0
  165. package/codeyam-cli/src/utils/interactiveSyncWatcher.js.map +1 -0
  166. package/codeyam-cli/src/utils/pathIgnoring.js +19 -7
  167. package/codeyam-cli/src/utils/pathIgnoring.js.map +1 -1
  168. package/codeyam-cli/src/utils/project.js +15 -5
  169. package/codeyam-cli/src/utils/project.js.map +1 -1
  170. package/codeyam-cli/src/utils/queue/__tests__/heartbeat.test.js +11 -11
  171. package/codeyam-cli/src/utils/queue/__tests__/heartbeat.test.js.map +1 -1
  172. package/codeyam-cli/src/utils/queue/__tests__/manager.test.js +22 -0
  173. package/codeyam-cli/src/utils/queue/__tests__/manager.test.js.map +1 -1
  174. package/codeyam-cli/src/utils/queue/heartbeat.js +13 -5
  175. package/codeyam-cli/src/utils/queue/heartbeat.js.map +1 -1
  176. package/codeyam-cli/src/utils/queue/job.js +70 -1
  177. package/codeyam-cli/src/utils/queue/job.js.map +1 -1
  178. package/codeyam-cli/src/utils/queue/manager.js +7 -6
  179. package/codeyam-cli/src/utils/queue/manager.js.map +1 -1
  180. package/codeyam-cli/src/utils/scenarioMarkers.js +134 -0
  181. package/codeyam-cli/src/utils/scenarioMarkers.js.map +1 -0
  182. package/codeyam-cli/src/utils/serverState.js +27 -2
  183. package/codeyam-cli/src/utils/serverState.js.map +1 -1
  184. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +45 -4
  185. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js.map +1 -1
  186. package/codeyam-cli/src/utils/testRunner.js +158 -0
  187. package/codeyam-cli/src/utils/testRunner.js.map +1 -0
  188. package/codeyam-cli/src/utils/transcriptPruning.js +67 -0
  189. package/codeyam-cli/src/utils/transcriptPruning.js.map +1 -0
  190. package/codeyam-cli/src/utils/webappDetection.js +14 -2
  191. package/codeyam-cli/src/utils/webappDetection.js.map +1 -1
  192. package/codeyam-cli/src/webserver/app/lib/database.js +41 -27
  193. package/codeyam-cli/src/webserver/app/lib/database.js.map +1 -1
  194. package/codeyam-cli/src/webserver/app/lib/dbNotifier.js.map +1 -1
  195. package/codeyam-cli/src/webserver/backgroundServer.js +109 -19
  196. package/codeyam-cli/src/webserver/backgroundServer.js.map +1 -1
  197. package/codeyam-cli/src/webserver/build/client/assets/{CopyButton-CtmbP4Gl.js → CopyButton-DmJveP3T.js} +1 -1
  198. package/codeyam-cli/src/webserver/build/client/assets/{EntityItem-DlMph_Hm.js → EntityItem-C76mRRiF.js} +1 -1
  199. package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeBadge-B-0PjGOU.js → EntityTypeBadge-g3saevPb.js} +1 -1
  200. package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeIcon-DN9eiJAO.js → EntityTypeIcon-CobE682z.js} +1 -1
  201. package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-Bu6c6aDe.js +1 -0
  202. package/codeyam-cli/src/webserver/build/client/assets/{InteractivePreview-rE_fI2h2.js → InteractivePreview-DYFW3lDD.js} +3 -3
  203. package/codeyam-cli/src/webserver/build/client/assets/{LibraryFunctionPreview-CnatsCw2.js → LibraryFunctionPreview-DLeucoVX.js} +1 -1
  204. package/codeyam-cli/src/webserver/build/client/assets/{LoadingDots-CSP6DZrh.js → LoadingDots-BU_OAEMP.js} +1 -1
  205. package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-CMK8Q7yk.js → LogViewer-ceAyBX-H.js} +1 -1
  206. package/codeyam-cli/src/webserver/build/client/assets/{ReportIssueModal-TCV_HBjy.js → ReportIssueModal-djPLI-WV.js} +1 -1
  207. package/codeyam-cli/src/webserver/build/client/assets/{SafeScreenshot-CG2uh31y.js → SafeScreenshot-BED4B6sP.js} +1 -1
  208. package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-CU_TDYd8.js → ScenarioViewer-B76aig_2.js} +1 -1
  209. package/codeyam-cli/src/webserver/build/client/assets/Spinner-Bb5uFQ5V.js +34 -0
  210. package/codeyam-cli/src/webserver/build/client/assets/Terminal-Dnj5CY9R.js +41 -0
  211. package/codeyam-cli/src/webserver/build/client/assets/{TruncatedFilePath-D7IoaWUW.js → TruncatedFilePath-C8OKAR5x.js} +1 -1
  212. package/codeyam-cli/src/webserver/build/client/assets/{_index-B8z7mjR-.js → _index-C96V0n15.js} +1 -1
  213. package/codeyam-cli/src/webserver/build/client/assets/{activity.(_tab)-DZu78RI1.js → activity.(_tab)-BpKzcsJz.js} +1 -1
  214. package/codeyam-cli/src/webserver/build/client/assets/addon-fit-CUXOrorO.js +1 -0
  215. package/codeyam-cli/src/webserver/build/client/assets/addon-web-links-Duc5hnl7.js +1 -0
  216. package/codeyam-cli/src/webserver/build/client/assets/agent-transcripts-D9hemwl6.js +22 -0
  217. package/codeyam-cli/src/webserver/build/client/assets/api.dev-mode-events-l0sNRNKZ.js +1 -0
  218. package/codeyam-cli/src/webserver/build/client/assets/api.editor-audit-l0sNRNKZ.js +1 -0
  219. package/codeyam-cli/src/webserver/build/client/assets/api.editor-capture-scenario-l0sNRNKZ.js +1 -0
  220. package/codeyam-cli/src/webserver/build/client/assets/api.editor-client-errors-l0sNRNKZ.js +1 -0
  221. package/codeyam-cli/src/webserver/build/client/assets/api.editor-commit-l0sNRNKZ.js +1 -0
  222. package/codeyam-cli/src/webserver/build/client/assets/api.editor-dev-server-l0sNRNKZ.js +1 -0
  223. package/codeyam-cli/src/webserver/build/client/assets/api.editor-entity-status-l0sNRNKZ.js +1 -0
  224. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-entry-l0sNRNKZ.js +1 -0
  225. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-image._-l0sNRNKZ.js +1 -0
  226. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-l0sNRNKZ.js +1 -0
  227. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-screenshot-l0sNRNKZ.js +1 -0
  228. package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-update-l0sNRNKZ.js +1 -0
  229. package/codeyam-cli/src/webserver/build/client/assets/api.editor-load-commit-l0sNRNKZ.js +1 -0
  230. package/codeyam-cli/src/webserver/build/client/assets/api.editor-refresh-l0sNRNKZ.js +1 -0
  231. package/codeyam-cli/src/webserver/build/client/assets/api.editor-register-scenario-l0sNRNKZ.js +1 -0
  232. package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-data-l0sNRNKZ.js +1 -0
  233. package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-image._-l0sNRNKZ.js +1 -0
  234. package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenarios-l0sNRNKZ.js +1 -0
  235. package/codeyam-cli/src/webserver/build/client/assets/api.editor-switch-scenario-l0sNRNKZ.js +1 -0
  236. package/codeyam-cli/src/webserver/build/client/assets/api.editor-test-results-l0sNRNKZ.js +1 -0
  237. package/codeyam-cli/src/webserver/build/client/assets/{book-open-Bp5FLkd4.js → book-open-D_nMCFmP.js} +1 -1
  238. package/codeyam-cli/src/webserver/build/client/assets/{chevron-down-DQJA9f4o.js → chevron-down-BH2h1Ea2.js} +1 -1
  239. package/codeyam-cli/src/webserver/build/client/assets/{chunk-JZWAC4HX-7VptmeIr.js → chunk-JZWAC4HX-C4pqxYJB.js} +1 -1
  240. package/codeyam-cli/src/webserver/build/client/assets/{circle-check-B6C4LY9o.js → circle-check-DyIKORY6.js} +1 -1
  241. package/codeyam-cli/src/webserver/build/client/assets/{copy-6nzYCu0G.js → copy-NDbZjXao.js} +1 -1
  242. package/codeyam-cli/src/webserver/build/client/assets/{createLucideIcon-D-QUFOwe.js → createLucideIcon-CMT1jU2q.js} +1 -1
  243. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-BiM6z3Do.js +1 -0
  244. package/codeyam-cli/src/webserver/build/client/assets/editor-D1DAKXtT.js +8 -0
  245. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._--zvFJ4OH.js → entity._sha._-CrjR3zZW.js} +10 -10
  246. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.dev-DkzqFzFj.js +6 -0
  247. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-C28BiQzt.js +6 -0
  248. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-p9hhkjJM.js +6 -0
  249. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.edit._scenarioId-C7ysA4Jq.js → entity._sha_.edit._scenarioId-BMvVHNXU.js} +2 -2
  250. package/codeyam-cli/src/webserver/build/client/assets/{entry.client-CU6EUArK.js → entry.client-DTvKq3TY.js} +1 -1
  251. package/codeyam-cli/src/webserver/build/client/assets/{fileTableUtils-EWpfFU4X.js → fileTableUtils-cPo8LiG3.js} +1 -1
  252. package/codeyam-cli/src/webserver/build/client/assets/{files-CrxAoWIL.js → files-DO4CZ16O.js} +1 -1
  253. package/codeyam-cli/src/webserver/build/client/assets/{git-BldHtKeW.js → git-CFCTYk9I.js} +1 -1
  254. package/codeyam-cli/src/webserver/build/client/assets/globals-B17TBSS6.css +1 -0
  255. package/codeyam-cli/src/webserver/build/client/assets/{index-7-1FmlHo.js → index-10oVnAAH.js} +1 -1
  256. package/codeyam-cli/src/webserver/build/client/assets/{index-DuYcwYp_.js → index-BcvgDzbZ.js} +1 -1
  257. package/codeyam-cli/src/webserver/build/client/assets/{labs-CPPVOSWB.js → labs-Zk7ryIM1.js} +1 -1
  258. package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-BnDcD54R.js → loader-circle-BAXYRVEO.js} +1 -1
  259. package/codeyam-cli/src/webserver/build/client/assets/manifest-a632de18.js +1 -0
  260. package/codeyam-cli/src/webserver/build/client/assets/memory-Dg0mvYrI.js +96 -0
  261. package/codeyam-cli/src/webserver/build/client/assets/{pause-DhQX2g22.js → pause-DTAcYxBt.js} +1 -1
  262. package/codeyam-cli/src/webserver/build/client/assets/root-DUKqhFlb.js +67 -0
  263. package/codeyam-cli/src/webserver/build/client/assets/{search-DborVoKD.js → search-fKo7v0Zo.js} +1 -1
  264. package/codeyam-cli/src/webserver/build/client/assets/settings-DfuTtcJP.js +1 -0
  265. package/codeyam-cli/src/webserver/build/client/assets/{simulations-BtrtCYJg.js → simulations-B3aOzpCZ.js} +1 -1
  266. package/codeyam-cli/src/webserver/build/client/assets/{terminal-Bs4NC-VZ.js → terminal-BG4heKCG.js} +1 -1
  267. package/codeyam-cli/src/webserver/build/client/assets/{triangle-alert-DTf3Jojp.js → triangle-alert-DtSmdtM4.js} +1 -1
  268. package/codeyam-cli/src/webserver/build/client/assets/{useCustomSizes-D_bDZyDU.js → useCustomSizes-ByhSyh0W.js} +1 -1
  269. package/codeyam-cli/src/webserver/build/client/assets/useLastLogLine-C14nCb1q.js +2 -0
  270. package/codeyam-cli/src/webserver/build/client/assets/{useReportContext-BsQb6rFd.js → useReportContext-O-jkvSPx.js} +1 -1
  271. package/codeyam-cli/src/webserver/build/client/assets/{useToast-BOur3mUv.js → useToast-9FIWuYfK.js} +1 -1
  272. package/codeyam-cli/src/webserver/build/client/assets/xterm-BqvuqXEL.js +27 -0
  273. package/codeyam-cli/src/webserver/build/server/assets/index-HfLydfDq.js +1 -0
  274. package/codeyam-cli/src/webserver/build/server/assets/server-build-CUu_F-oo.js +366 -0
  275. package/codeyam-cli/src/webserver/build/server/index.js +1 -1
  276. package/codeyam-cli/src/webserver/build-info.json +5 -5
  277. package/codeyam-cli/src/webserver/devServer.js +39 -5
  278. package/codeyam-cli/src/webserver/devServer.js.map +1 -1
  279. package/codeyam-cli/src/webserver/editorProxy.js +440 -0
  280. package/codeyam-cli/src/webserver/editorProxy.js.map +1 -0
  281. package/codeyam-cli/src/webserver/scripts/codeyam-preload.mjs +175 -0
  282. package/codeyam-cli/src/webserver/scripts/journalCapture.ts +140 -0
  283. package/codeyam-cli/src/webserver/server.js +226 -1
  284. package/codeyam-cli/src/webserver/server.js.map +1 -1
  285. package/codeyam-cli/src/webserver/terminalServer.js +698 -0
  286. package/codeyam-cli/src/webserver/terminalServer.js.map +1 -0
  287. package/codeyam-cli/templates/codeyam-editor-claude.md +68 -0
  288. package/codeyam-cli/templates/editor-step-hook.py +147 -0
  289. package/codeyam-cli/templates/isolation-route/next-app.tsx.template +80 -0
  290. package/codeyam-cli/templates/isolation-route/next-pages.tsx.template +79 -0
  291. package/codeyam-cli/templates/isolation-route/vite-react.tsx.template +78 -0
  292. package/codeyam-cli/templates/msw/browser-setup.ts.template +47 -0
  293. package/codeyam-cli/templates/msw/handler-router.ts.template +47 -0
  294. package/codeyam-cli/templates/msw/server-setup.ts.template +52 -0
  295. package/codeyam-cli/templates/nextjs-prisma-sqlite/PRISMA_SETUP.md +84 -0
  296. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/api/todos/route.ts +17 -0
  297. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/globals.css +26 -0
  298. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/layout.tsx +34 -0
  299. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/lib/prisma.ts +19 -0
  300. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/page.tsx +10 -0
  301. package/codeyam-cli/templates/nextjs-prisma-sqlite/eslint.config.mjs +11 -0
  302. package/codeyam-cli/templates/nextjs-prisma-sqlite/gitignore +43 -0
  303. package/codeyam-cli/templates/nextjs-prisma-sqlite/next.config.ts +14 -0
  304. package/codeyam-cli/templates/nextjs-prisma-sqlite/package.json +35 -0
  305. package/codeyam-cli/templates/nextjs-prisma-sqlite/postcss.config.mjs +7 -0
  306. package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma/schema.prisma +27 -0
  307. package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma/seed.ts +37 -0
  308. package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma.config.ts +12 -0
  309. package/codeyam-cli/templates/nextjs-prisma-sqlite/tsconfig.json +34 -0
  310. package/codeyam-cli/templates/prompts/conversation-guidance.txt +12 -0
  311. package/codeyam-cli/templates/prompts/conversation-prompt.txt +3 -3
  312. package/codeyam-cli/templates/prompts/interruption-prompt.txt +3 -3
  313. package/codeyam-cli/templates/prompts/stale-rules-prompt.txt +3 -3
  314. package/codeyam-cli/templates/rule-notification-hook.py +44 -17
  315. package/codeyam-cli/templates/rule-reflection-hook.py +24 -4
  316. package/codeyam-cli/templates/rules-instructions.md +4 -3
  317. package/codeyam-cli/templates/skills/codeyam-dev-mode/SKILL.md +237 -0
  318. package/codeyam-cli/templates/skills/codeyam-editor/SKILL.md +69 -0
  319. package/codeyam-cli/templates/{codeyam-memory.md → skills/codeyam-memory/SKILL.md} +215 -0
  320. package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/deprecated-prompt.md +100 -0
  321. package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/detect-deprecated-patterns.sh +108 -0
  322. package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/find-exports.sh +69 -0
  323. package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/misleading-api-prompt.md +117 -0
  324. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/analyze-prompt.md +46 -0
  325. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/cleanup.sh +12 -0
  326. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/filter.jq +45 -0
  327. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/preprocess.sh +139 -0
  328. package/package.json +4 -2
  329. package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js +22 -4
  330. package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js.map +1 -1
  331. package/packages/ai/src/lib/completionCall.js +10 -2
  332. package/packages/ai/src/lib/completionCall.js.map +1 -1
  333. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +21 -0
  334. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
  335. package/packages/ai/src/lib/dataStructure/helpers/coercePrimitivesToArraysBySchema.js +54 -0
  336. package/packages/ai/src/lib/dataStructure/helpers/coercePrimitivesToArraysBySchema.js.map +1 -0
  337. package/packages/ai/src/lib/dataStructure/helpers/stripNullableMarkers.js +34 -0
  338. package/packages/ai/src/lib/dataStructure/helpers/stripNullableMarkers.js.map +1 -0
  339. package/packages/ai/src/lib/generateEntityScenarioData.js +57 -2
  340. package/packages/ai/src/lib/generateEntityScenarioData.js.map +1 -1
  341. package/packages/analyze/src/lib/ProjectAnalyzer.js +3 -0
  342. package/packages/analyze/src/lib/ProjectAnalyzer.js.map +1 -1
  343. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js +8 -1
  344. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js.map +1 -1
  345. package/packages/analyze/src/lib/files/analyze/dependencyResolver.js +0 -5
  346. package/packages/analyze/src/lib/files/analyze/dependencyResolver.js.map +1 -1
  347. package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js +9 -0
  348. package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js.map +1 -1
  349. package/packages/analyze/src/lib/files/scenarios/TransformationTracer.js +54 -27
  350. package/packages/analyze/src/lib/files/scenarios/TransformationTracer.js.map +1 -1
  351. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +65 -0
  352. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
  353. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +18 -4
  354. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js.map +1 -1
  355. package/packages/database/index.js +1 -0
  356. package/packages/database/index.js.map +1 -1
  357. package/packages/database/src/lib/kysely/db.js +5 -0
  358. package/packages/database/src/lib/kysely/db.js.map +1 -1
  359. package/packages/database/src/lib/kysely/tables/editorScenariosTable.js +45 -0
  360. package/packages/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -0
  361. package/packages/database/src/lib/loadCommits.js +23 -13
  362. package/packages/database/src/lib/loadCommits.js.map +1 -1
  363. package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.js +1 -4
  364. package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.js.map +1 -1
  365. package/packages/database/src/lib/updateCommitMetadata.js +100 -89
  366. package/packages/database/src/lib/updateCommitMetadata.js.map +1 -1
  367. package/packages/database/src/lib/updateFreshAnalysisStatus.js +41 -30
  368. package/packages/database/src/lib/updateFreshAnalysisStatus.js.map +1 -1
  369. package/packages/database/src/lib/updateFreshAnalysisStatusWithScenarios.js +68 -57
  370. package/packages/database/src/lib/updateFreshAnalysisStatusWithScenarios.js.map +1 -1
  371. package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js +29 -1
  372. package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js.map +1 -1
  373. package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +33 -5
  374. package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
  375. package/scripts/npm-post-install.cjs +34 -0
  376. package/codeyam-cli/src/webserver/app/routes/api.agent-transcripts.js +0 -486
  377. package/codeyam-cli/src/webserver/app/routes/api.agent-transcripts.js.map +0 -1
  378. package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-C1rIyZdV.js +0 -34
  379. package/codeyam-cli/src/webserver/build/client/assets/agent-transcripts-DxCa1oBt.js +0 -23
  380. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-DmzSmblj.js +0 -1
  381. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-DVTcUnur.js +0 -6
  382. package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-BVgNO76F.js +0 -6
  383. package/codeyam-cli/src/webserver/build/client/assets/globals-B4MPiL7S.css +0 -1
  384. package/codeyam-cli/src/webserver/build/client/assets/manifest-c1fc3656.js +0 -1
  385. package/codeyam-cli/src/webserver/build/client/assets/memory-CfpYxpNu.js +0 -93
  386. package/codeyam-cli/src/webserver/build/client/assets/root-CAAbm4U5.js +0 -62
  387. package/codeyam-cli/src/webserver/build/client/assets/settings-BpLDWmGh.js +0 -1
  388. package/codeyam-cli/src/webserver/build/client/assets/useLastLogLine-DZp6rrQD.js +0 -2
  389. package/codeyam-cli/src/webserver/build/server/assets/index-B8A_aaGG.js +0 -1
  390. package/codeyam-cli/src/webserver/build/server/assets/server-build-69rRZnZo.js +0 -286
  391. package/scripts/finalize-analyzer.cjs +0 -13
  392. /package/codeyam-cli/templates/{codeyam-diagnose.md → commands/codeyam-diagnose.md} +0 -0
  393. /package/codeyam-cli/templates/{codeyam-debug.md → skills/codeyam-debug/SKILL.md} +0 -0
  394. /package/codeyam-cli/templates/{codeyam-new-rule.md → skills/codeyam-new-rule/SKILL.md} +0 -0
  395. /package/codeyam-cli/templates/{codeyam-setup.md → skills/codeyam-setup/SKILL.md} +0 -0
  396. /package/codeyam-cli/templates/{codeyam-sim.md → skills/codeyam-sim/SKILL.md} +0 -0
  397. /package/codeyam-cli/templates/{codeyam-test.md → skills/codeyam-test/SKILL.md} +0 -0
  398. /package/codeyam-cli/templates/{codeyam-verify.md → skills/codeyam-verify/SKILL.md} +0 -0
@@ -0,0 +1,84 @@
1
+ # Prisma 7 + SQLite Setup
2
+
3
+ This project uses Prisma 7 with SQLite via the `better-sqlite3` driver adapter.
4
+
5
+ ## How it works
6
+
7
+ Prisma 7 requires a **driver adapter** — you cannot use `new PrismaClient()` alone.
8
+ Every file that creates a PrismaClient must use this pattern:
9
+
10
+ ```typescript
11
+ import { PrismaClient } from '@prisma/client';
12
+ import { PrismaBetterSqlite3 } from '@prisma/adapter-better-sqlite3';
13
+
14
+ const adapter = new PrismaBetterSqlite3({ url: 'file:./dev.db' });
15
+ const prisma = new PrismaClient({ adapter });
16
+ ```
17
+
18
+ The singleton in `app/lib/prisma.ts` is already configured. Import it in your code:
19
+
20
+ ```typescript
21
+ import { prisma } from '@/app/lib/prisma';
22
+ ```
23
+
24
+ ## Important: do NOT change these settings
25
+
26
+ - **Generator must be `prisma-client-js`** (not `prisma-client`). The `prisma-client`
27
+ generator requires a custom output path that breaks Turbopack import resolution.
28
+ - **Do NOT add an `output` field** to the generator. The default output to
29
+ `node_modules/@prisma/client` works with standard imports everywhere.
30
+ - **Do NOT add `url` to the datasource block** in `schema.prisma`. Prisma 7
31
+ moved the URL to `prisma.config.ts`. Adding it to the schema causes a validation error.
32
+ - **Keep `serverExternalPackages: ["better-sqlite3"]`** in `next.config.ts`.
33
+ Without it, Next.js tries to bundle the native module and fails.
34
+ - **Keep `turbopack: { root: "." }`** in `next.config.ts`. Without it,
35
+ Turbopack may infer a parent directory as root and break imports.
36
+ - **Database file is at project root** (`./dev.db`), not in `prisma/`.
37
+ - **Always run `npx prisma generate`** after `npx prisma db push` (or use
38
+ `npm run db:push` which does both). Without this, the client module is missing.
39
+
40
+ ## Common tasks
41
+
42
+ ```bash
43
+ # Edit your schema
44
+ vim prisma/schema.prisma
45
+
46
+ # Push schema changes to the database (also regenerates client)
47
+ npm run db:push
48
+
49
+ # Seed the database
50
+ npx tsx prisma/seed.ts
51
+ # or: npm run db:seed
52
+
53
+ # Reset the database (delete + recreate + seed)
54
+ npm run db:reset
55
+
56
+ # Open Prisma Studio (database browser)
57
+ npx prisma studio
58
+ ```
59
+
60
+ ## Writing seed scripts
61
+
62
+ Seed scripts run outside of Next.js, so they must create their own PrismaClient
63
+ with the adapter (they cannot import from `@/app/lib/prisma`). See `prisma/seed.ts`
64
+ for the correct pattern.
65
+
66
+ ## Writing API routes
67
+
68
+ ```typescript
69
+ // app/api/todos/route.ts
70
+ import { prisma } from '@/app/lib/prisma';
71
+
72
+ export async function GET() {
73
+ const todos = await prisma.todo.findMany({
74
+ orderBy: { createdAt: 'desc' },
75
+ });
76
+ return Response.json(todos);
77
+ }
78
+
79
+ export async function POST(request: Request) {
80
+ const { title } = await request.json();
81
+ const todo = await prisma.todo.create({ data: { title } });
82
+ return Response.json(todo);
83
+ }
84
+ ```
@@ -0,0 +1,17 @@
1
+ // Example API route using Prisma.
2
+ // Import prisma from the singleton — do NOT create a new PrismaClient here.
3
+
4
+ import { prisma } from '@/app/lib/prisma';
5
+
6
+ export async function GET() {
7
+ const todos = await prisma.todo.findMany({
8
+ orderBy: { createdAt: 'desc' },
9
+ });
10
+ return Response.json(todos);
11
+ }
12
+
13
+ export async function POST(request: Request) {
14
+ const { title } = await request.json();
15
+ const todo = await prisma.todo.create({ data: { title } });
16
+ return Response.json(todo);
17
+ }
@@ -0,0 +1,26 @@
1
+ @import "tailwindcss";
2
+
3
+ :root {
4
+ --background: #ffffff;
5
+ --foreground: #171717;
6
+ }
7
+
8
+ @theme inline {
9
+ --color-background: var(--background);
10
+ --color-foreground: var(--foreground);
11
+ --font-sans: var(--font-geist-sans);
12
+ --font-mono: var(--font-geist-mono);
13
+ }
14
+
15
+ @media (prefers-color-scheme: dark) {
16
+ :root {
17
+ --background: #0a0a0a;
18
+ --foreground: #ededed;
19
+ }
20
+ }
21
+
22
+ body {
23
+ background: var(--background);
24
+ color: var(--foreground);
25
+ font-family: Arial, Helvetica, sans-serif;
26
+ }
@@ -0,0 +1,34 @@
1
+ import type { Metadata } from 'next';
2
+ import { Geist, Geist_Mono } from 'next/font/google';
3
+ import './globals.css';
4
+
5
+ const geistSans = Geist({
6
+ variable: '--font-geist-sans',
7
+ subsets: ['latin'],
8
+ });
9
+
10
+ const geistMono = Geist_Mono({
11
+ variable: '--font-geist-mono',
12
+ subsets: ['latin'],
13
+ });
14
+
15
+ export const metadata: Metadata = {
16
+ title: 'CodeYam App',
17
+ description: 'Built with CodeYam Editor',
18
+ };
19
+
20
+ export default function RootLayout({
21
+ children,
22
+ }: Readonly<{
23
+ children: React.ReactNode;
24
+ }>) {
25
+ return (
26
+ <html lang="en">
27
+ <body
28
+ className={`${geistSans.variable} ${geistMono.variable} antialiased`}
29
+ >
30
+ {children}
31
+ </body>
32
+ </html>
33
+ );
34
+ }
@@ -0,0 +1,19 @@
1
+ // Prisma 7 requires a driver adapter for database access.
2
+ // This file uses better-sqlite3 for SQLite.
3
+ //
4
+ // Usage in API routes and server components:
5
+ // import { prisma } from "@/app/lib/prisma";
6
+ // const items = await prisma.todo.findMany();
7
+
8
+ import { PrismaClient } from '@prisma/client';
9
+ import { PrismaBetterSqlite3 } from '@prisma/adapter-better-sqlite3';
10
+
11
+ const globalForPrisma = globalThis as unknown as { prisma: PrismaClient };
12
+
13
+ const adapter = new PrismaBetterSqlite3({ url: 'file:./dev.db' });
14
+
15
+ export const prisma = globalForPrisma.prisma ?? new PrismaClient({ adapter });
16
+
17
+ if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma;
18
+
19
+ export default prisma;
@@ -0,0 +1,10 @@
1
+ export default function Home() {
2
+ return (
3
+ <main className="min-h-screen flex items-center justify-center">
4
+ <div className="text-center">
5
+ <h1 className="text-4xl font-bold mb-4">Welcome</h1>
6
+ <p className="text-gray-600">Your app is ready. Start building!</p>
7
+ </div>
8
+ </main>
9
+ );
10
+ }
@@ -0,0 +1,11 @@
1
+ import { defineConfig, globalIgnores } from "eslint/config";
2
+ import nextVitals from "eslint-config-next/core-web-vitals";
3
+ import nextTs from "eslint-config-next/typescript";
4
+
5
+ const eslintConfig = defineConfig([
6
+ ...nextVitals,
7
+ ...nextTs,
8
+ globalIgnores([".next/**", "out/**", "build/**", "next-env.d.ts"]),
9
+ ]);
10
+
11
+ export default eslintConfig;
@@ -0,0 +1,43 @@
1
+ # dependencies
2
+ /node_modules
3
+ /.pnp
4
+ .pnp.*
5
+ .yarn/*
6
+ !.yarn/patches
7
+ !.yarn/plugins
8
+ !.yarn/releases
9
+ !.yarn/versions
10
+
11
+ # testing
12
+ /coverage
13
+
14
+ # next.js
15
+ /.next/
16
+ /out/
17
+
18
+ # production
19
+ /build
20
+
21
+ # misc
22
+ .DS_Store
23
+ *.pem
24
+
25
+ # debug
26
+ npm-debug.log*
27
+ yarn-debug.log*
28
+ yarn-error.log*
29
+ .pnpm-debug.log*
30
+
31
+ # env files
32
+ .env*.local
33
+
34
+ # vercel
35
+ .vercel
36
+
37
+ # typescript
38
+ *.tsbuildinfo
39
+ next-env.d.ts
40
+
41
+ # database
42
+ dev.db
43
+ dev.db-journal
@@ -0,0 +1,14 @@
1
+ import type { NextConfig } from 'next';
2
+
3
+ const nextConfig: NextConfig = {
4
+ // Required: better-sqlite3 is a native module that can't be bundled
5
+ serverExternalPackages: ['better-sqlite3'],
6
+
7
+ turbopack: {
8
+ // Required: prevents Turbopack from inferring a parent directory as root
9
+ // when .codeyam/ exists above the project (which breaks import resolution)
10
+ root: '.',
11
+ },
12
+ };
13
+
14
+ export default nextConfig;
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "codeyam-project",
3
+ "version": "0.1.0",
4
+ "private": true,
5
+ "scripts": {
6
+ "dev": "next dev --turbopack",
7
+ "build": "next build",
8
+ "start": "next start",
9
+ "lint": "eslint",
10
+ "db:push": "npx prisma db push && npx prisma generate",
11
+ "db:seed": "npx tsx prisma/seed.ts",
12
+ "db:reset": "rm -f dev.db && npm run db:push && npx tsx prisma/seed.ts"
13
+ },
14
+ "dependencies": {
15
+ "@prisma/adapter-better-sqlite3": "^7.4.1",
16
+ "@prisma/client": "^7.4.1",
17
+ "better-sqlite3": "^12.6.2",
18
+ "next": "^15.3.3",
19
+ "prisma": "^7.4.1",
20
+ "react": "^19.1.0",
21
+ "react-dom": "^19.1.0"
22
+ },
23
+ "devDependencies": {
24
+ "@tailwindcss/postcss": "^4",
25
+ "@types/better-sqlite3": "^7.6.13",
26
+ "@types/node": "^20",
27
+ "@types/react": "^19",
28
+ "@types/react-dom": "^19",
29
+ "eslint": "^9",
30
+ "eslint-config-next": "^15.3.3",
31
+ "tailwindcss": "^4",
32
+ "tsx": "^4.19.4",
33
+ "typescript": "^5"
34
+ }
35
+ }
@@ -0,0 +1,7 @@
1
+ const config = {
2
+ plugins: {
3
+ "@tailwindcss/postcss": {},
4
+ },
5
+ };
6
+
7
+ export default config;
@@ -0,0 +1,27 @@
1
+ // Prisma 7 with SQLite via better-sqlite3 driver adapter.
2
+ //
3
+ // IMPORTANT: Use "prisma-client-js" (NOT "prisma-client").
4
+ // The "prisma-client" generator requires a custom output path which
5
+ // breaks Turbopack import resolution and seed script imports.
6
+ // "prisma-client-js" outputs to node_modules/@prisma/client which
7
+ // works everywhere with standard imports.
8
+
9
+ generator client {
10
+ provider = "prisma-client-js"
11
+ }
12
+
13
+ datasource db {
14
+ provider = "sqlite"
15
+ }
16
+
17
+ // ──────────────────────────────────────────────
18
+ // Replace these placeholder models with your own.
19
+ // After editing, run: npx prisma db push
20
+ // ──────────────────────────────────────────────
21
+
22
+ model Todo {
23
+ id Int @id @default(autoincrement())
24
+ title String
25
+ completed Boolean @default(false)
26
+ createdAt DateTime @default(now())
27
+ }
@@ -0,0 +1,37 @@
1
+ // Seed script for populating the database with demo data.
2
+ //
3
+ // Run with: npx tsx prisma/seed.ts
4
+ // Or: npm run db:seed
5
+ //
6
+ // IMPORTANT: This file must use the same adapter pattern as app/lib/prisma.ts.
7
+ // Do NOT use `new PrismaClient()` without the adapter — Prisma 7 requires it.
8
+
9
+ import { PrismaClient } from '@prisma/client';
10
+ import { PrismaBetterSqlite3 } from '@prisma/adapter-better-sqlite3';
11
+
12
+ const adapter = new PrismaBetterSqlite3({ url: 'file:./dev.db' });
13
+ const prisma = new PrismaClient({ adapter });
14
+
15
+ async function main() {
16
+ // Clear existing data
17
+ await prisma.todo.deleteMany();
18
+
19
+ // Seed with demo data
20
+ await prisma.todo.createMany({
21
+ data: [
22
+ { title: 'Set up the project', completed: true },
23
+ { title: 'Build the first feature' },
24
+ { title: 'Add more scenarios' },
25
+ ],
26
+ });
27
+
28
+ const count = await prisma.todo.count();
29
+ console.log(`Seeded ${count} todos`);
30
+ }
31
+
32
+ main()
33
+ .then(() => prisma.$disconnect())
34
+ .catch((e) => {
35
+ console.error(e);
36
+ process.exit(1);
37
+ });
@@ -0,0 +1,12 @@
1
+ import 'dotenv/config';
2
+ import { defineConfig } from 'prisma/config';
3
+
4
+ export default defineConfig({
5
+ schema: 'prisma/schema.prisma',
6
+ migrations: {
7
+ path: 'prisma/migrations',
8
+ },
9
+ datasource: {
10
+ url: process.env['DATABASE_URL'],
11
+ },
12
+ });
@@ -0,0 +1,34 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2017",
4
+ "lib": ["dom", "dom.iterable", "esnext"],
5
+ "allowJs": true,
6
+ "skipLibCheck": true,
7
+ "strict": true,
8
+ "noEmit": true,
9
+ "esModuleInterop": true,
10
+ "module": "esnext",
11
+ "moduleResolution": "bundler",
12
+ "resolveJsonModule": true,
13
+ "isolatedModules": true,
14
+ "jsx": "react-jsx",
15
+ "incremental": true,
16
+ "plugins": [
17
+ {
18
+ "name": "next"
19
+ }
20
+ ],
21
+ "paths": {
22
+ "@/*": ["./*"]
23
+ }
24
+ },
25
+ "include": [
26
+ "next-env.d.ts",
27
+ "**/*.ts",
28
+ "**/*.tsx",
29
+ ".next/types/**/*.ts",
30
+ ".next/dev/types/**/*.ts",
31
+ "**/*.mts"
32
+ ],
33
+ "exclude": ["node_modules"]
34
+ }
@@ -30,3 +30,15 @@ Read the full transcript for these signals:
30
30
  **Critical check:** Read the actual source files that were modified. If the code already contains comments, guard patterns, or tests that explain the insight, the code is the documentation — skip the rule unless the file is complex and you've made a mistake or the user had to interrupt and correct you.
31
31
 
32
32
  Show your thinking before proceeding with creating or updating rules.
33
+
34
+ ### How to write rules
35
+
36
+ **Rules must be forward-looking, not historical.** You are reading a session transcript where bugs were found and fixed, but the rule should describe the *current* codebase, not tell the story of what went wrong, what was fixed, etc. The code has already been updated — past bugs are no longer relevant.
37
+
38
+ - **DO**: State constraints and requirements ("this script MUST copy directories recursively, not just files")
39
+ - **DO**: Explain *why* something matters ("errors in prompt copying are silently caught, so missing directories won't surface as errors")
40
+ - **DON'T**: Describe what old code did ("the old version only copied files, causing X to be missing")
41
+ - **DON'T**: Narrate the debugging journey ("we discovered that the catch block was swallowing errors")
42
+ - **DON'T**: Note issues or known gaps if they are actively being worked on!
43
+
44
+ Think of the reader as a developer about to modify these files. They need to know what constraints to preserve and what pitfalls to watch for — not what happened in the past if it is no longer relevant.
@@ -23,6 +23,6 @@ The project root is {{PROJECT_DIR}}
23
23
 
24
24
  CRITICAL: All rule files MUST be written to {{PROJECT_DIR}}/.claude/rules/ (the project directory). Always use the full absolute path when writing rule files.
25
25
 
26
- CRITICAL: Before writing any rule file, you MUST call the rule-path API to determine the correct subdirectory:
27
- curl -s 'http://localhost:3111/api/rule-path?paths=path/one&paths=path/two'
28
- Pass all paths from your frontmatter. The API returns the correct .claude/rules/ subdirectory. Do NOT guess the placement from the first path — rules with paths spanning multiple directories belong at their common ancestor.
26
+ CRITICAL: Before writing any rule file, you MUST run the rule-path command to determine the correct subdirectory:
27
+ codeyam memory rule-path path/one path/two
28
+ Pass all paths from your frontmatter. The command returns the correct .claude/rules/ subdirectory as JSON. Do NOT guess the placement from the first path — rules with paths spanning multiple directories belong at their common ancestor.
@@ -26,6 +26,6 @@ The project root is {{PROJECT_DIR}}
26
26
 
27
27
  CRITICAL: All rule files MUST be written to {{PROJECT_DIR}}/.claude/rules/ (the project directory). Always use the full absolute path when writing rule files.
28
28
 
29
- CRITICAL: Before writing any rule file, you MUST call the rule-path API to determine the correct subdirectory:
30
- curl -s 'http://localhost:3111/api/rule-path?paths=path/one&paths=path/two'
31
- Pass all paths from your frontmatter. The API returns the correct .claude/rules/ subdirectory. Do NOT guess the placement from the first path — rules with paths spanning multiple directories belong at their common ancestor.
29
+ CRITICAL: Before writing any rule file, you MUST run the rule-path command to determine the correct subdirectory:
30
+ codeyam memory rule-path path/one path/two
31
+ Pass all paths from your frontmatter. The command returns the correct .claude/rules/ subdirectory as JSON. Do NOT guess the placement from the first path — rules with paths spanning multiple directories belong at their common ancestor.
@@ -19,6 +19,6 @@ The project root is {{PROJECT_DIR}}
19
19
 
20
20
  CRITICAL: All rule files MUST be written to {{PROJECT_DIR}}/.claude/rules/ (the project directory), NOT ~/.claude/rules/ (the user home directory). Always use the full absolute path when writing rule files.
21
21
 
22
- CRITICAL: Before writing any rule file, you MUST call the rule-path API to determine the correct subdirectory:
23
- curl -s 'http://localhost:3111/api/rule-path?paths=path/one&paths=path/two'
24
- Pass all paths from your frontmatter. The API returns the correct .claude/rules/ subdirectory. Do NOT guess the placement from the first path — rules with paths spanning multiple directories belong at their common ancestor.
22
+ CRITICAL: Before writing any rule file, you MUST run the rule-path command to determine the correct subdirectory:
23
+ codeyam memory rule-path path/one path/two
24
+ Pass all paths from your frontmatter. The command returns the correct .claude/rules/ subdirectory as JSON. Do NOT guess the placement from the first path — rules with paths spanning multiple directories belong at their common ancestor.
@@ -14,6 +14,7 @@ Supports four notification files (legacy combined + split agents):
14
14
  - rule-notification-interruption.md (interruption review agent)
15
15
  """
16
16
 
17
+ import json
17
18
  import os
18
19
  import sys
19
20
 
@@ -26,27 +27,53 @@ NOTIFICATION_FILES = [
26
27
  ]
27
28
 
28
29
 
30
+ def get_project_slug():
31
+ """
32
+ Derive project slug from .codeyam/config.json (matching getProjectSlug() on the TS side).
33
+ Falls back to os.path.basename(project_dir) if config is absent or malformed.
34
+ """
35
+ project_dir = os.environ.get('CLAUDE_PROJECT_DIR', os.getcwd())
36
+ try:
37
+ config_path = os.path.join(project_dir, '.codeyam', 'config.json')
38
+ with open(config_path, 'r') as f:
39
+ config = json.load(f)
40
+ slug = config.get('projectSlug', '')
41
+ if slug:
42
+ return slug
43
+ except (IOError, json.JSONDecodeError, KeyError):
44
+ pass
45
+ return os.path.basename(project_dir)
46
+
47
+
29
48
  def main():
30
49
  collected = []
50
+ slug = get_project_slug()
51
+
52
+ # Check slug subdirectory first, then fall back to flat directory
53
+ dirs_to_check = [os.path.join(MARKER_DIR, slug), MARKER_DIR]
31
54
 
32
55
  for filename in NOTIFICATION_FILES:
33
- filepath = os.path.join(MARKER_DIR, filename)
34
- if not os.path.exists(filepath):
35
- continue
36
-
37
- try:
38
- with open(filepath, 'r') as f:
39
- content = f.read().strip()
40
- except IOError:
41
- continue
42
-
43
- if content:
44
- collected.append(content)
45
-
46
- try:
47
- os.remove(filepath)
48
- except OSError:
49
- pass
56
+ for check_dir in dirs_to_check:
57
+ filepath = os.path.join(check_dir, filename)
58
+ if not os.path.exists(filepath):
59
+ continue
60
+
61
+ try:
62
+ with open(filepath, 'r') as f:
63
+ content = f.read().strip()
64
+ except IOError:
65
+ continue
66
+
67
+ if content:
68
+ collected.append(content)
69
+
70
+ try:
71
+ os.remove(filepath)
72
+ except OSError:
73
+ pass
74
+
75
+ # Found in this directory — don't check the fallback
76
+ break
50
77
 
51
78
  if collected:
52
79
  print('\n\n'.join(collected))
@@ -120,6 +120,24 @@ def read_rule_content(rule_name):
120
120
  return text
121
121
 
122
122
 
123
+ def get_project_slug():
124
+ """
125
+ Derive project slug from .codeyam/config.json (matching getProjectSlug() on the TS side).
126
+ Falls back to os.path.basename(project_dir) if config is absent or malformed.
127
+ """
128
+ project_dir = os.environ.get('CLAUDE_PROJECT_DIR', os.getcwd())
129
+ try:
130
+ config_path = os.path.join(project_dir, '.codeyam', 'config.json')
131
+ with open(config_path, 'r') as f:
132
+ config = json.load(f)
133
+ slug = config.get('projectSlug', '')
134
+ if slug:
135
+ return slug
136
+ except (IOError, json.JSONDecodeError, KeyError):
137
+ pass
138
+ return os.path.basename(project_dir)
139
+
140
+
123
141
  def load_memory_settings():
124
142
  """
125
143
  Load memory settings from .codeyam/config.json.
@@ -463,8 +481,9 @@ def handle_stop(hook_input):
463
481
  if not session_id or not transcript_path:
464
482
  return
465
483
 
466
- marker_dir = Path('/tmp/claude-rule-markers')
467
- marker_dir.mkdir(exist_ok=True)
484
+ slug = get_project_slug()
485
+ marker_dir = Path('/tmp/claude-rule-markers') / slug
486
+ marker_dir.mkdir(parents=True, exist_ok=True)
468
487
  marker_file = marker_dir / f'{session_id}.marker'
469
488
 
470
489
  last_line, _ = read_marker(marker_file)
@@ -539,8 +558,9 @@ def handle_user_prompt_submit(hook_input):
539
558
  if not session_id or not transcript_path:
540
559
  return
541
560
 
542
- marker_dir = Path('/tmp/claude-rule-markers')
543
- marker_dir.mkdir(exist_ok=True)
561
+ slug = get_project_slug()
562
+ marker_dir = Path('/tmp/claude-rule-markers') / slug
563
+ marker_dir.mkdir(parents=True, exist_ok=True)
544
564
  marker_file = marker_dir / f'{session_id}.marker'
545
565
 
546
566
  last_line, was_stop = read_marker(marker_file)
@@ -61,17 +61,18 @@ Audit dates live in `.claude/codeyam-rule-state.json` (managed by `codeyam memor
61
61
 
62
62
  Rules must be written to `.claude/rules/`, NOT `.codeyam/rules/`. The instructions file lives in `.codeyam/` but actual rule files go in `.claude/rules/`.
63
63
 
64
- Use the `rule-path` API to compute the correct directory from your frontmatter paths:
64
+ Use `codeyam memory rule-path` to compute the correct directory from your frontmatter paths:
65
65
 
66
66
  ```
67
- $ curl -s 'http://localhost:3111/api/rule-path?paths=packages/ai/src/lib/foo.ts&paths=packages/ai/src/utils/bar.ts'
67
+ $ codeyam memory rule-path packages/ai/src/lib/foo.ts packages/ai/src/utils/bar.ts
68
68
  {"result":".claude/rules/packages/ai/src/"}
69
69
  ```
70
70
 
71
- The API computes the deepest common directory shared by all paths and returns the `.claude/rules/` subdirectory where the rule file should live. Reserve the top level of `.claude/rules/` for rules whose paths genuinely span the entire repo.
71
+ The command computes the deepest common directory shared by all paths and returns the `.claude/rules/` subdirectory where the rule file should live. Reserve the top level of `.claude/rules/` for rules whose paths genuinely span the entire repo.
72
72
 
73
73
  ## Content Guidelines
74
74
 
75
75
  - **Be actionable** — "Run `pnpm test:api` for API tests" not "Make sure to run the appropriate tests"
76
76
  - **Focus on why, not what** — Gotchas, non-obvious behavior, architectural decisions. The code already shows "what."
77
77
  - **Point to specifics** — "Auth tokens are stored in httpOnly cookies via `src/auth/cookies.ts`" beats a vague description.
78
+ - **Be short!** - Context window space is precious! Do not ramble, use bullets, focus on providing clear actionable information.