@codeyam/codeyam-cli 0.1.0-staging.62d4615 → 0.1.0-staging.73a4bf4

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 (285) 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 +1 -1
  4. package/analyzer-template/packages/ai/index.ts +1 -0
  5. package/analyzer-template/packages/ai/src/lib/analyzeScope.ts +14 -0
  6. package/analyzer-template/packages/ai/src/lib/astScopes/processExpression.ts +101 -0
  7. package/analyzer-template/packages/ai/src/lib/astScopes/sharedPatterns.ts +28 -0
  8. package/analyzer-template/packages/ai/src/lib/astScopes/types.ts +6 -0
  9. package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +176 -8
  10. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.ts +70 -13
  11. package/analyzer-template/packages/ai/src/lib/dataStructureChunking.ts +33 -15
  12. package/analyzer-template/packages/ai/src/lib/generateEntityScenarioData.ts +32 -5
  13. package/analyzer-template/packages/ai/src/lib/generateExecutionFlows.ts +38 -2
  14. package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionals.ts +359 -142
  15. package/analyzer-template/packages/ai/src/lib/mergeJsonTypeDefinitions.ts +5 -0
  16. package/analyzer-template/packages/ai/src/lib/promptGenerators/collapseNullableObjects.ts +118 -0
  17. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.ts +24 -4
  18. package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.ts +18 -0
  19. package/analyzer-template/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.ts +50 -25
  20. package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +153 -76
  21. package/analyzer-template/packages/database/src/lib/analysisBranchToDb.ts +1 -1
  22. package/analyzer-template/packages/database/src/lib/analysisToDb.ts +1 -1
  23. package/analyzer-template/packages/database/src/lib/branchToDb.ts +1 -1
  24. package/analyzer-template/packages/database/src/lib/commitBranchToDb.ts +1 -1
  25. package/analyzer-template/packages/database/src/lib/commitToDb.ts +1 -1
  26. package/analyzer-template/packages/database/src/lib/fileToDb.ts +1 -1
  27. package/analyzer-template/packages/database/src/lib/kysely/db.ts +6 -0
  28. package/analyzer-template/packages/database/src/lib/kysely/tables/debugReportsTable.ts +1 -1
  29. package/analyzer-template/packages/database/src/lib/kysely/tables/labsRequestsTable.ts +52 -0
  30. package/analyzer-template/packages/database/src/lib/projectToDb.ts +1 -1
  31. package/analyzer-template/packages/database/src/lib/saveFiles.ts +1 -1
  32. package/analyzer-template/packages/database/src/lib/scenarioToDb.ts +1 -1
  33. package/analyzer-template/packages/database/src/lib/userScenarioToDb.ts +1 -1
  34. package/analyzer-template/packages/github/dist/database/src/lib/analysisBranchToDb.js +1 -1
  35. package/analyzer-template/packages/github/dist/database/src/lib/analysisBranchToDb.js.map +1 -1
  36. package/analyzer-template/packages/github/dist/database/src/lib/analysisToDb.js +1 -1
  37. package/analyzer-template/packages/github/dist/database/src/lib/analysisToDb.js.map +1 -1
  38. package/analyzer-template/packages/github/dist/database/src/lib/branchToDb.js +1 -1
  39. package/analyzer-template/packages/github/dist/database/src/lib/branchToDb.js.map +1 -1
  40. package/analyzer-template/packages/github/dist/database/src/lib/commitBranchToDb.js +1 -1
  41. package/analyzer-template/packages/github/dist/database/src/lib/commitBranchToDb.js.map +1 -1
  42. package/analyzer-template/packages/github/dist/database/src/lib/commitToDb.js +1 -1
  43. package/analyzer-template/packages/github/dist/database/src/lib/commitToDb.js.map +1 -1
  44. package/analyzer-template/packages/github/dist/database/src/lib/fileToDb.js +1 -1
  45. package/analyzer-template/packages/github/dist/database/src/lib/fileToDb.js.map +1 -1
  46. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts +2 -0
  47. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts.map +1 -1
  48. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js +3 -0
  49. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js.map +1 -1
  50. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.d.ts +1 -1
  51. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/labsRequestsTable.d.ts +23 -0
  52. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/labsRequestsTable.d.ts.map +1 -0
  53. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/labsRequestsTable.js +35 -0
  54. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/labsRequestsTable.js.map +1 -0
  55. package/analyzer-template/packages/github/dist/database/src/lib/projectToDb.js +1 -1
  56. package/analyzer-template/packages/github/dist/database/src/lib/projectToDb.js.map +1 -1
  57. package/analyzer-template/packages/github/dist/database/src/lib/saveFiles.js +1 -1
  58. package/analyzer-template/packages/github/dist/database/src/lib/saveFiles.js.map +1 -1
  59. package/analyzer-template/packages/github/dist/database/src/lib/scenarioToDb.js +1 -1
  60. package/analyzer-template/packages/github/dist/database/src/lib/scenarioToDb.js.map +1 -1
  61. package/analyzer-template/packages/github/dist/types/src/types/ProjectMetadata.d.ts +4 -0
  62. package/analyzer-template/packages/github/dist/types/src/types/ProjectMetadata.d.ts.map +1 -1
  63. package/analyzer-template/packages/types/src/types/ProjectMetadata.ts +7 -1
  64. package/analyzer-template/packages/utils/dist/types/src/types/ProjectMetadata.d.ts +4 -0
  65. package/analyzer-template/packages/utils/dist/types/src/types/ProjectMetadata.d.ts.map +1 -1
  66. package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.d.ts.map +1 -1
  67. package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.js +93 -2
  68. package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.js.map +1 -1
  69. package/analyzer-template/packages/utils/src/lib/fs/rsyncCopy.ts +108 -2
  70. package/analyzer-template/project/constructMockCode.ts +2 -2
  71. package/analyzer-template/project/writeMockDataTsx.ts +14 -6
  72. package/background/src/lib/local/createLocalAnalyzer.js +1 -1
  73. package/background/src/lib/local/createLocalAnalyzer.js.map +1 -1
  74. package/background/src/lib/virtualized/project/constructMockCode.js +2 -2
  75. package/background/src/lib/virtualized/project/constructMockCode.js.map +1 -1
  76. package/background/src/lib/virtualized/project/writeMockDataTsx.js +13 -6
  77. package/background/src/lib/virtualized/project/writeMockDataTsx.js.map +1 -1
  78. package/codeyam-cli/scripts/apply-setup.js +1 -1
  79. package/codeyam-cli/src/cli.js +2 -0
  80. package/codeyam-cli/src/cli.js.map +1 -1
  81. package/codeyam-cli/src/codeyam-cli.js +18 -2
  82. package/codeyam-cli/src/codeyam-cli.js.map +1 -1
  83. package/codeyam-cli/src/commands/analyze.js +4 -2
  84. package/codeyam-cli/src/commands/analyze.js.map +1 -1
  85. package/codeyam-cli/src/commands/baseline.js +2 -0
  86. package/codeyam-cli/src/commands/baseline.js.map +1 -1
  87. package/codeyam-cli/src/commands/debug.js +2 -0
  88. package/codeyam-cli/src/commands/debug.js.map +1 -1
  89. package/codeyam-cli/src/commands/default.js +31 -20
  90. package/codeyam-cli/src/commands/default.js.map +1 -1
  91. package/codeyam-cli/src/commands/detect-universal-mocks.js +2 -0
  92. package/codeyam-cli/src/commands/detect-universal-mocks.js.map +1 -1
  93. package/codeyam-cli/src/commands/init.js +49 -257
  94. package/codeyam-cli/src/commands/init.js.map +1 -1
  95. package/codeyam-cli/src/commands/memory.js +9 -9
  96. package/codeyam-cli/src/commands/memory.js.map +1 -1
  97. package/codeyam-cli/src/commands/recapture.js +2 -0
  98. package/codeyam-cli/src/commands/recapture.js.map +1 -1
  99. package/codeyam-cli/src/commands/setup-sandbox.js +2 -0
  100. package/codeyam-cli/src/commands/setup-sandbox.js.map +1 -1
  101. package/codeyam-cli/src/commands/setup-simulations.js +284 -0
  102. package/codeyam-cli/src/commands/setup-simulations.js.map +1 -0
  103. package/codeyam-cli/src/commands/test-startup.js +2 -0
  104. package/codeyam-cli/src/commands/test-startup.js.map +1 -1
  105. package/codeyam-cli/src/commands/verify.js +14 -2
  106. package/codeyam-cli/src/commands/verify.js.map +1 -1
  107. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +128 -86
  108. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js.map +1 -1
  109. package/codeyam-cli/src/utils/analyzer.js +7 -0
  110. package/codeyam-cli/src/utils/analyzer.js.map +1 -1
  111. package/codeyam-cli/src/utils/backgroundServer.js +107 -23
  112. package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
  113. package/codeyam-cli/src/utils/generateReport.js +2 -2
  114. package/codeyam-cli/src/utils/install-skills.js +43 -63
  115. package/codeyam-cli/src/utils/install-skills.js.map +1 -1
  116. package/codeyam-cli/src/utils/labsAutoCheck.js +19 -0
  117. package/codeyam-cli/src/utils/labsAutoCheck.js.map +1 -0
  118. package/codeyam-cli/src/utils/progress.js +7 -0
  119. package/codeyam-cli/src/utils/progress.js.map +1 -1
  120. package/codeyam-cli/src/utils/requireSimulations.js +10 -0
  121. package/codeyam-cli/src/utils/requireSimulations.js.map +1 -0
  122. package/codeyam-cli/src/utils/ruleReflection/__tests__/contextBuilder.test.js +106 -4
  123. package/codeyam-cli/src/utils/ruleReflection/__tests__/contextBuilder.test.js.map +1 -1
  124. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/ruleReflectionE2E.test.js +95 -2
  125. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/ruleReflectionE2E.test.js.map +1 -1
  126. package/codeyam-cli/src/utils/ruleReflection/__tests__/promptBuilder.test.js +37 -5
  127. package/codeyam-cli/src/utils/ruleReflection/__tests__/promptBuilder.test.js.map +1 -1
  128. package/codeyam-cli/src/utils/ruleReflection/contextBuilder.js +23 -3
  129. package/codeyam-cli/src/utils/ruleReflection/contextBuilder.js.map +1 -1
  130. package/codeyam-cli/src/utils/ruleReflection/index.js +2 -2
  131. package/codeyam-cli/src/utils/ruleReflection/index.js.map +1 -1
  132. package/codeyam-cli/src/utils/ruleReflection/promptBuilder.js +11 -0
  133. package/codeyam-cli/src/utils/ruleReflection/promptBuilder.js.map +1 -1
  134. package/codeyam-cli/src/utils/rules/__tests__/ruleState.test.js +23 -23
  135. package/codeyam-cli/src/utils/rules/__tests__/ruleState.test.js.map +1 -1
  136. package/codeyam-cli/src/utils/rules/parser.js +5 -0
  137. package/codeyam-cli/src/utils/rules/parser.js.map +1 -1
  138. package/codeyam-cli/src/utils/rules/ruleState.js +10 -10
  139. package/codeyam-cli/src/utils/rules/ruleState.js.map +1 -1
  140. package/codeyam-cli/src/utils/rules/staleness.js +6 -6
  141. package/codeyam-cli/src/utils/rules/staleness.js.map +1 -1
  142. package/codeyam-cli/src/utils/serverState.js +37 -10
  143. package/codeyam-cli/src/utils/serverState.js.map +1 -1
  144. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +21 -44
  145. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js.map +1 -1
  146. package/codeyam-cli/src/webserver/app/lib/database.js +14 -3
  147. package/codeyam-cli/src/webserver/app/lib/database.js.map +1 -1
  148. package/codeyam-cli/src/webserver/app/lib/dbNotifier.js.map +1 -1
  149. package/codeyam-cli/src/webserver/backgroundServer.js +50 -0
  150. package/codeyam-cli/src/webserver/backgroundServer.js.map +1 -1
  151. package/codeyam-cli/src/webserver/build/client/assets/CopyButton-D9i_zSlY.js +1 -0
  152. package/codeyam-cli/src/webserver/build/client/assets/{EntityItem-B86KKU7e.js → EntityItem-BLlhOa3C.js} +1 -1
  153. package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeBadge-B5ctlSYt.js → EntityTypeBadge-De5b5pC7.js} +1 -1
  154. package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeIcon-BqY8gDAW.js → EntityTypeIcon-CzdG5I7z.js} +1 -1
  155. package/codeyam-cli/src/webserver/build/client/assets/{InlineSpinner-ClaLpuOo.js → InlineSpinner-Bclf8Hka.js} +1 -1
  156. package/codeyam-cli/src/webserver/build/client/assets/{InteractivePreview-BDhPilK7.js → InteractivePreview-Ce-byqKl.js} +2 -2
  157. package/codeyam-cli/src/webserver/build/client/assets/{LibraryFunctionPreview-VeqEBv9v.js → LibraryFunctionPreview-DEMHrl7v.js} +1 -1
  158. package/codeyam-cli/src/webserver/build/client/assets/{LoadingDots-Bs7Nn1Jr.js → LoadingDots-B1LNGboS.js} +1 -1
  159. package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-Bm3PmcCz.js → LogViewer-B0Ll1DjK.js} +1 -1
  160. package/codeyam-cli/src/webserver/build/client/assets/{ReportIssueModal-C6PKeMYR.js → ReportIssueModal-CVOvmCKb.js} +2 -2
  161. package/codeyam-cli/src/webserver/build/client/assets/{SafeScreenshot-Gq3Ocjo6.js → SafeScreenshot-L0DWHa_L.js} +1 -1
  162. package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-BNLaXBHR.js → ScenarioViewer-D54Mmpwi.js} +2 -2
  163. package/codeyam-cli/src/webserver/build/client/assets/{TruncatedFilePath-CiwXDxLh.js → TruncatedFilePath-C7PFQfXy.js} +1 -1
  164. package/codeyam-cli/src/webserver/build/client/assets/{_index-B3TDXxnk.js → _index-CKTtYlBU.js} +1 -1
  165. package/codeyam-cli/src/webserver/build/client/assets/{activity.(_tab)-DD1r_QU0.js → activity.(_tab)-CdziRIWU.js} +6 -6
  166. package/codeyam-cli/src/webserver/build/client/assets/agent-transcripts-CPXtdaWm.js +17 -0
  167. package/codeyam-cli/src/webserver/build/client/assets/api.labs-unlock-l0sNRNKZ.js +1 -0
  168. package/codeyam-cli/src/webserver/build/client/assets/{book-open-PttOB2SF.js → book-open-Ch8b7GyQ.js} +1 -1
  169. package/codeyam-cli/src/webserver/build/client/assets/{chevron-down-TJp6ofnp.js → chevron-down-vJHJExlT.js} +1 -1
  170. package/codeyam-cli/src/webserver/build/client/assets/{chunk-JZWAC4HX-JE9ZIoBl.js → chunk-JZWAC4HX-BEyX4X6_.js} +7 -7
  171. package/codeyam-cli/src/webserver/build/client/assets/{circle-check-CXhHQYrI.js → circle-check-rwynPZTW.js} +1 -1
  172. package/codeyam-cli/src/webserver/build/client/assets/{copy-6y9ALfGT.js → copy-BBSpeBYf.js} +1 -1
  173. package/codeyam-cli/src/webserver/build/client/assets/{createLucideIcon-Ca9fAY46.js → createLucideIcon-DHVDauuc.js} +1 -1
  174. package/codeyam-cli/src/webserver/build/client/assets/{dev.empty-C5lqplTC.js → dev.empty-B9_ZqelV.js} +1 -1
  175. package/codeyam-cli/src/webserver/build/client/assets/entity._sha._-BOPComvD.js +16 -0
  176. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha.scenarios._scenarioId.fullscreen-CBoafmVs.js → entity._sha.scenarios._scenarioId.fullscreen-Cfw__yQa.js} +1 -1
  177. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.create-scenario-DGgZjdFg.js → entity._sha_.create-scenario-BIDUUrI3.js} +1 -1
  178. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.edit._scenarioId-38yPijoD.js → entity._sha_.edit._scenarioId-BEqewwtZ.js} +1 -1
  179. package/codeyam-cli/src/webserver/build/client/assets/{entry.client-BSHEfydn.js → entry.client-Dxqz8ygt.js} +1 -1
  180. package/codeyam-cli/src/webserver/build/client/assets/{fileTableUtils-DCPhhSMo.js → fileTableUtils-CYnF5KWN.js} +1 -1
  181. package/codeyam-cli/src/webserver/build/client/assets/{files-Dk8wkAS7.js → files-B_dAq2PQ.js} +1 -1
  182. package/codeyam-cli/src/webserver/build/client/assets/{git-DXnyr8uP.js → git-BHPqH3Ch.js} +1 -1
  183. package/codeyam-cli/src/webserver/build/client/assets/globals-BJGhRykz.css +1 -0
  184. package/codeyam-cli/src/webserver/build/client/assets/{index-CcsFv748.js → index-DgAAopZk.js} +1 -1
  185. package/codeyam-cli/src/webserver/build/client/assets/{index-ChN9-fAY.js → index-viijWaN6.js} +1 -1
  186. package/codeyam-cli/src/webserver/build/client/assets/labs-ChoAe3xq.js +1 -0
  187. package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-CTqLEAGU.js → loader-circle-LGi2eKI5.js} +1 -1
  188. package/codeyam-cli/src/webserver/build/client/assets/manifest-87493a32.js +1 -0
  189. package/codeyam-cli/src/webserver/build/client/assets/memory-D9eA6kTo.js +78 -0
  190. package/codeyam-cli/src/webserver/build/client/assets/{pause-D6vreykR.js → pause-DxJFmMsK.js} +1 -1
  191. package/codeyam-cli/src/webserver/build/client/assets/root-C3r0p_7H.js +62 -0
  192. package/codeyam-cli/src/webserver/build/client/assets/{search-B8VUL8nl.js → search-Cu3QE9E5.js} +1 -1
  193. package/codeyam-cli/src/webserver/build/client/assets/settings-KH9TdArD.js +1 -0
  194. package/codeyam-cli/src/webserver/build/client/assets/{simulations-CPoAg7Zo.js → simulations-D9Fkx0-d.js} +1 -1
  195. package/codeyam-cli/src/webserver/build/client/assets/{terminal-BrCP7uQo.js → terminal-dAhIBEcd.js} +1 -1
  196. package/codeyam-cli/src/webserver/build/client/assets/{triangle-alert-BZz2NjYa.js → triangle-alert-C4CYTEeP.js} +1 -1
  197. package/codeyam-cli/src/webserver/build/client/assets/{useCustomSizes-DNwUduNu.js → useCustomSizes-CLPnITMB.js} +1 -1
  198. package/codeyam-cli/src/webserver/build/client/assets/{useLastLogLine-COky1GVF.js → useLastLogLine-DmGI38Et.js} +1 -1
  199. package/codeyam-cli/src/webserver/build/client/assets/{useReportContext-CpZgwliL.js → useReportContext-BK0S88PB.js} +1 -1
  200. package/codeyam-cli/src/webserver/build/client/assets/{useToast-Bv9JFvUO.js → useToast-CJ-JqR0l.js} +1 -1
  201. package/codeyam-cli/src/webserver/build/server/assets/{index-C0KrUQp-.js → index-CkkmL6r5.js} +1 -1
  202. package/codeyam-cli/src/webserver/build/server/assets/server-build-iBGjHYtO.js +259 -0
  203. package/codeyam-cli/src/webserver/build/server/index.js +1 -1
  204. package/codeyam-cli/src/webserver/build-info.json +5 -5
  205. package/codeyam-cli/templates/{codeyam:debug.md → codeyam-debug.md} +1 -1
  206. package/codeyam-cli/templates/codeyam-diagnose.md +481 -0
  207. package/codeyam-cli/templates/codeyam-memory-hook.sh +14 -14
  208. package/codeyam-cli/templates/{codeyam:memory.md → codeyam-memory.md} +16 -24
  209. package/codeyam-cli/templates/{codeyam:new-rule.md → codeyam-new-rule.md} +1 -1
  210. package/codeyam-cli/templates/{codeyam:setup.md → codeyam-setup.md} +13 -1
  211. package/codeyam-cli/templates/{codeyam:sim.md → codeyam-sim.md} +1 -1
  212. package/codeyam-cli/templates/{codeyam:test.md → codeyam-test.md} +1 -1
  213. package/codeyam-cli/templates/{codeyam:verify.md → codeyam-verify.md} +1 -1
  214. package/codeyam-cli/templates/rule-notification-hook.py +3 -1
  215. package/codeyam-cli/templates/rule-reflection-hook.py +265 -66
  216. package/codeyam-cli/templates/rules-instructions.md +50 -41
  217. package/package.json +9 -9
  218. package/packages/ai/index.js +1 -1
  219. package/packages/ai/index.js.map +1 -1
  220. package/packages/ai/src/lib/analyzeScope.js +14 -0
  221. package/packages/ai/src/lib/analyzeScope.js.map +1 -1
  222. package/packages/ai/src/lib/astScopes/processExpression.js +78 -1
  223. package/packages/ai/src/lib/astScopes/processExpression.js.map +1 -1
  224. package/packages/ai/src/lib/astScopes/sharedPatterns.js +25 -0
  225. package/packages/ai/src/lib/astScopes/sharedPatterns.js.map +1 -1
  226. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +128 -7
  227. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
  228. package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js +59 -11
  229. package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js.map +1 -1
  230. package/packages/ai/src/lib/dataStructureChunking.js +26 -11
  231. package/packages/ai/src/lib/dataStructureChunking.js.map +1 -1
  232. package/packages/ai/src/lib/generateEntityScenarioData.js +22 -3
  233. package/packages/ai/src/lib/generateEntityScenarioData.js.map +1 -1
  234. package/packages/ai/src/lib/generateExecutionFlows.js +16 -2
  235. package/packages/ai/src/lib/generateExecutionFlows.js.map +1 -1
  236. package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js +242 -81
  237. package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js.map +1 -1
  238. package/packages/ai/src/lib/mergeJsonTypeDefinitions.js +5 -0
  239. package/packages/ai/src/lib/mergeJsonTypeDefinitions.js.map +1 -1
  240. package/packages/ai/src/lib/promptGenerators/collapseNullableObjects.js +97 -0
  241. package/packages/ai/src/lib/promptGenerators/collapseNullableObjects.js.map +1 -0
  242. package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js +17 -2
  243. package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js.map +1 -1
  244. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js +11 -1
  245. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js.map +1 -1
  246. package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js +42 -13
  247. package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js.map +1 -1
  248. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +123 -67
  249. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js.map +1 -1
  250. package/packages/database/src/lib/analysisBranchToDb.js +1 -1
  251. package/packages/database/src/lib/analysisBranchToDb.js.map +1 -1
  252. package/packages/database/src/lib/analysisToDb.js +1 -1
  253. package/packages/database/src/lib/analysisToDb.js.map +1 -1
  254. package/packages/database/src/lib/branchToDb.js +1 -1
  255. package/packages/database/src/lib/branchToDb.js.map +1 -1
  256. package/packages/database/src/lib/commitBranchToDb.js +1 -1
  257. package/packages/database/src/lib/commitBranchToDb.js.map +1 -1
  258. package/packages/database/src/lib/commitToDb.js +1 -1
  259. package/packages/database/src/lib/commitToDb.js.map +1 -1
  260. package/packages/database/src/lib/fileToDb.js +1 -1
  261. package/packages/database/src/lib/fileToDb.js.map +1 -1
  262. package/packages/database/src/lib/kysely/db.js +3 -0
  263. package/packages/database/src/lib/kysely/db.js.map +1 -1
  264. package/packages/database/src/lib/kysely/tables/labsRequestsTable.js +35 -0
  265. package/packages/database/src/lib/kysely/tables/labsRequestsTable.js.map +1 -0
  266. package/packages/database/src/lib/projectToDb.js +1 -1
  267. package/packages/database/src/lib/projectToDb.js.map +1 -1
  268. package/packages/database/src/lib/saveFiles.js +1 -1
  269. package/packages/database/src/lib/saveFiles.js.map +1 -1
  270. package/packages/database/src/lib/scenarioToDb.js +1 -1
  271. package/packages/database/src/lib/scenarioToDb.js.map +1 -1
  272. package/packages/utils/src/lib/fs/rsyncCopy.js +93 -2
  273. package/packages/utils/src/lib/fs/rsyncCopy.js.map +1 -1
  274. package/scripts/finalize-analyzer.cjs +8 -76
  275. package/codeyam-cli/src/webserver/build/client/assets/CopyButton-CA3JxPb7.js +0 -1
  276. package/codeyam-cli/src/webserver/build/client/assets/agent-transcripts-DfKzxuoe.js +0 -11
  277. package/codeyam-cli/src/webserver/build/client/assets/entity._sha._-n38keI1k.js +0 -23
  278. package/codeyam-cli/src/webserver/build/client/assets/globals-Bh6jH0cL.css +0 -1
  279. package/codeyam-cli/src/webserver/build/client/assets/labs-BUvfJMNR.js +0 -1
  280. package/codeyam-cli/src/webserver/build/client/assets/manifest-d4e77269.js +0 -1
  281. package/codeyam-cli/src/webserver/build/client/assets/memory-DCHBwHou.js +0 -76
  282. package/codeyam-cli/src/webserver/build/client/assets/root-D6oziHts.js +0 -62
  283. package/codeyam-cli/src/webserver/build/client/assets/settings-B2X7lJgQ.js +0 -1
  284. package/codeyam-cli/src/webserver/build/server/assets/server-build-C2h1v1XD.js +0 -260
  285. package/codeyam-cli/templates/codeyam:diagnose.md +0 -803
@@ -29,28 +29,32 @@ export async function startBackgroundServer(options) {
29
29
  if (!fs.existsSync(logDir)) {
30
30
  fs.mkdirSync(logDir, { recursive: true });
31
31
  }
32
- const outLog = fs.openSync(path.join(logDir, 'background-server.log'), 'a');
33
- const errLog = fs.openSync(path.join(logDir, 'background-server-error.log'), 'a');
34
- const child = spawn('node', [serverScriptPath], {
35
- detached: true,
36
- stdio: ['ignore', outLog, errLog],
37
- env: {
38
- ...process.env,
39
- CODEYAM_PORT: port.toString(),
40
- CODEYAM_ROOT_PATH: rootPath,
41
- CODEYAM_PROJECT: project ? JSON.stringify(project) : '',
42
- CODEYAM_BRANCH: branch ? JSON.stringify(branch) : '',
43
- CODEYAM_PROCESS_NAME: `codeyam-${processName}`,
44
- // Explicitly pass through tracing env var for debugging
45
- ...(process.env.CODEYAM_TRACE_TRANSFORMS
46
- ? { CODEYAM_TRACE_TRANSFORMS: process.env.CODEYAM_TRACE_TRANSFORMS }
47
- : {}),
48
- },
49
- });
50
- // Detach the child process so it can run independently
51
- child.unref();
32
+ const serverEnv = {
33
+ CODEYAM_PORT: port.toString(),
34
+ CODEYAM_ROOT_PATH: rootPath,
35
+ CODEYAM_PROJECT: project ? JSON.stringify(project) : '',
36
+ CODEYAM_BRANCH: branch ? JSON.stringify(branch) : '',
37
+ CODEYAM_PROCESS_NAME: `codeyam-${processName}`,
38
+ ...(process.env.CODEYAM_TRACE_TRANSFORMS
39
+ ? { CODEYAM_TRACE_TRANSFORMS: process.env.CODEYAM_TRACE_TRANSFORMS }
40
+ : {}),
41
+ };
42
+ let childPid;
43
+ if (process.platform === 'win32') {
44
+ childPid = await spawnServerWindows(serverScriptPath, serverEnv, logDir);
45
+ }
46
+ else {
47
+ const outLog = fs.openSync(path.join(logDir, 'background-server.log'), 'a');
48
+ const errLog = fs.openSync(path.join(logDir, 'background-server-error.log'), 'a');
49
+ const child = spawn('node', [serverScriptPath], {
50
+ detached: true,
51
+ stdio: ['ignore', outLog, errLog],
52
+ env: { ...process.env, ...serverEnv },
53
+ });
54
+ child.unref();
55
+ childPid = child.pid;
56
+ }
52
57
  // Poll health endpoint until server is ready (includes FileWatcher initial sync)
53
- // This replaces the old arbitrary 1-second wait with actual readiness detection
54
58
  const healthUrl = `${url}/api/health`;
55
59
  const maxWaitMs = 60000; // 60 second timeout (initial sync can take time for large projects)
56
60
  const pollIntervalMs = 200;
@@ -74,7 +78,7 @@ export async function startBackgroundServer(options) {
74
78
  }
75
79
  // Save server state
76
80
  const serverState = {
77
- pid: child.pid,
81
+ pid: childPid,
78
82
  port,
79
83
  url,
80
84
  startTime: Date.now(),
@@ -83,6 +87,86 @@ export async function startBackgroundServer(options) {
83
87
  cliVersion,
84
88
  };
85
89
  saveServerState(serverState);
86
- return { url, pid: child.pid, wasAlreadyRunning: false };
90
+ return { url, pid: childPid, wasAlreadyRunning: false };
91
+ }
92
+ /**
93
+ * On Windows, Node's spawn with detached:true uses DETACHED_PROCESS |
94
+ * CREATE_NEW_PROCESS_GROUP flags, and windowsHide adds CREATE_NO_WINDOW.
95
+ * These flags conflict — the result is neither properly hidden nor properly
96
+ * detached (the process still gets killed by the parent's Job Object).
97
+ *
98
+ * Instead, we use PowerShell's Start-Process which creates a truly independent
99
+ * process with a hidden window via -WindowStyle Hidden.
100
+ *
101
+ * Flow: write env to JSON file → write ESM launcher script that loads env,
102
+ * redirects stdout/stderr to log files, and imports bootstrap → use PowerShell
103
+ * Start-Process to launch node with the launcher script hidden.
104
+ */
105
+ async function spawnServerWindows(serverScriptPath, serverEnv, logDir) {
106
+ // 1. Write env to JSON file (avoids cmd/powershell escaping issues with JSON)
107
+ const envFilePath = path.join(logDir, 'server-env.json');
108
+ fs.writeFileSync(envFilePath, JSON.stringify({
109
+ bootstrapPath: serverScriptPath,
110
+ logDir,
111
+ env: serverEnv,
112
+ }));
113
+ // 2. Write ESM launcher that loads env, redirects logs, and imports bootstrap
114
+ const launcherPath = path.join(logDir, 'server-launcher.mjs');
115
+ fs.writeFileSync(launcherPath, [
116
+ `import { readFileSync, createWriteStream } from 'fs';`,
117
+ `import { join } from 'path';`,
118
+ `import { pathToFileURL } from 'url';`,
119
+ ``,
120
+ `const config = JSON.parse(readFileSync(${JSON.stringify(envFilePath)}, 'utf8'));`,
121
+ `Object.assign(process.env, config.env);`,
122
+ ``,
123
+ `const out = createWriteStream(join(config.logDir, 'background-server.log'), { flags: 'a' });`,
124
+ `const err = createWriteStream(join(config.logDir, 'background-server-error.log'), { flags: 'a' });`,
125
+ `process.stdout.write = (c, e, cb) => out.write(c, e, cb);`,
126
+ `process.stderr.write = (c, e, cb) => err.write(c, e, cb);`,
127
+ ``,
128
+ `await import(pathToFileURL(config.bootstrapPath).href);`,
129
+ ].join('\n'));
130
+ // 3. Write PowerShell script that starts node hidden and outputs the PID
131
+ const psScriptPath = path.join(logDir, 'start-server.ps1');
132
+ // Use a variable so path quoting is clean (single-quote escaping: ' → '')
133
+ const escapedLauncherPath = launcherPath.replace(/'/g, "''");
134
+ fs.writeFileSync(psScriptPath, [
135
+ `$scriptPath = '${escapedLauncherPath}'`,
136
+ `$p = Start-Process -FilePath "node" -ArgumentList ('"{0}"' -f $scriptPath) -WindowStyle Hidden -PassThru`,
137
+ `Write-Output $p.Id`,
138
+ ].join('\n'));
139
+ // 4. Run PowerShell hidden to start the server and get the PID
140
+ return new Promise((resolve, reject) => {
141
+ const ps = spawn('powershell.exe', ['-NoProfile', '-ExecutionPolicy', 'Bypass', '-File', psScriptPath], {
142
+ windowsHide: true,
143
+ stdio: ['ignore', 'pipe', 'pipe'],
144
+ });
145
+ let stdout = '';
146
+ let stderr = '';
147
+ ps.stdout.on('data', (d) => {
148
+ stdout += d.toString();
149
+ });
150
+ ps.stderr.on('data', (d) => {
151
+ stderr += d.toString();
152
+ });
153
+ const timeout = setTimeout(() => {
154
+ ps.kill();
155
+ reject(new Error('Timed out waiting for PowerShell to start server (30s)'));
156
+ }, 30000);
157
+ ps.on('close', (code) => {
158
+ clearTimeout(timeout);
159
+ if (code !== 0) {
160
+ reject(new Error(`Failed to start server via PowerShell (exit ${code}): ${stderr}`));
161
+ return;
162
+ }
163
+ const pid = parseInt(stdout.trim(), 10);
164
+ if (isNaN(pid)) {
165
+ reject(new Error(`Failed to parse server PID from PowerShell output: ${stdout}`));
166
+ return;
167
+ }
168
+ resolve(pid);
169
+ });
170
+ });
87
171
  }
88
172
  //# sourceMappingURL=backgroundServer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"backgroundServer.js","sourceRoot":"","sources":["../../../../src/utils/backgroundServer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"backgroundServer.js","sourceRoot":"","sources":["../../../../src/utils/backgroundServer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAU3C,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAAgC;IAEhC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,GAAG,QAAQ,EAAE,GAAG,OAAO,CAAC;IAC5E,MAAM,GAAG,GAAG,oBAAoB,IAAI,EAAE,CAAC;IAEvC,qCAAqC;IACrC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,eAAe,EAAE,CAAC;IAC7C,IAAI,OAAO,IAAI,KAAK,EAAE,CAAC;QACrB,0DAA0D;QAC1D,IAAI,KAAK,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CACT,iCAAiC,KAAK,CAAC,UAAU,IAAI,SAAS,WAAW,UAAU,yBAAyB,CAC7G,CAAC;YACF,UAAU,EAAE,CAAC;YACb,mCAAmC;QACrC,CAAC;aAAM,CAAC;YACN,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;QACrE,CAAC;IACH,CAAC;IAED,0CAA0C;IAC1C,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAChC,SAAS,EACT,IAAI,EACJ,WAAW,EACX,cAAc,CACf,CAAC;IAEF,iCAAiC;IACjC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IACvD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,SAAS,GAA2B;QACxC,YAAY,EAAE,IAAI,CAAC,QAAQ,EAAE;QAC7B,iBAAiB,EAAE,QAAQ;QAC3B,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;QACvD,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;QACpD,oBAAoB,EAAE,WAAW,WAAW,EAAE;QAC9C,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB;YACtC,CAAC,CAAC,EAAE,wBAAwB,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE;YACpE,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;IAEF,IAAI,QAAgB,CAAC;IAErB,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,QAAQ,GAAG,MAAM,kBAAkB,CAAC,gBAAgB,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAC3E,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,uBAAuB,CAAC,EAAE,GAAG,CAAC,CAAC;QAC5E,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,CACxB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,6BAA6B,CAAC,EAChD,GAAG,CACJ,CAAC;QAEF,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,gBAAgB,CAAC,EAAE;YAC9C,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;YACjC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE;SACtC,CAAC,CAAC;QACH,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,QAAQ,GAAG,KAAK,CAAC,GAAI,CAAC;IACxB,CAAC;IAED,iFAAiF;IACjF,MAAM,SAAS,GAAG,GAAG,GAAG,aAAa,CAAC;IACtC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,oEAAoE;IAC7F,MAAM,cAAc,GAAG,GAAG,CAAC;IAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,SAAS,EAAE,CAAC;QAC1C,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC;YACxC,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;gBAChB,6EAA6E;gBAC7E,MAAM;YACR,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,2DAA2D;QAC7D,CAAC;QACD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,wBAAwB;IACxB,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,IAAI,SAAS,EAAE,CAAC;QACxC,OAAO,CAAC,IAAI,CACV,kEAAkE,SAAS,GAAG,IAAI,GAAG,CACtF,CAAC;IACJ,CAAC;IAED,oBAAoB;IACpB,MAAM,WAAW,GAAG;QAClB,GAAG,EAAE,QAAQ;QACb,IAAI;QACJ,GAAG;QACH,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,WAAW,EAAE,QAAQ;QACrB,MAAM;QACN,UAAU;KACX,CAAC;IAEF,eAAe,CAAC,WAAW,CAAC,CAAC;IAE7B,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC;AAC1D,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,KAAK,UAAU,kBAAkB,CAC/B,gBAAwB,EACxB,SAAiC,EACjC,MAAc;IAEd,8EAA8E;IAC9E,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACzD,EAAE,CAAC,aAAa,CACd,WAAW,EACX,IAAI,CAAC,SAAS,CAAC;QACb,aAAa,EAAE,gBAAgB;QAC/B,MAAM;QACN,GAAG,EAAE,SAAS;KACf,CAAC,CACH,CAAC;IAEF,8EAA8E;IAC9E,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IAC9D,EAAE,CAAC,aAAa,CACd,YAAY,EACZ;QACE,uDAAuD;QACvD,8BAA8B;QAC9B,sCAAsC;QACtC,EAAE;QACF,0CAA0C,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,aAAa;QAClF,yCAAyC;QACzC,EAAE;QACF,8FAA8F;QAC9F,oGAAoG;QACpG,2DAA2D;QAC3D,2DAA2D;QAC3D,EAAE;QACF,yDAAyD;KAC1D,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IAEF,yEAAyE;IACzE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC3D,0EAA0E;IAC1E,MAAM,mBAAmB,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7D,EAAE,CAAC,aAAa,CACd,YAAY,EACZ;QACE,kBAAkB,mBAAmB,GAAG;QACxC,0GAA0G;QAC1G,oBAAoB;KACrB,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IAEF,+DAA+D;IAC/D,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC7C,MAAM,EAAE,GAAG,KAAK,CACd,gBAAgB,EAChB,CAAC,YAAY,EAAE,kBAAkB,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC,EACnE;YACE,WAAW,EAAE,IAAI;YACjB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;SAClC,CACF,CAAC;QAEF,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,EAAE,CAAC,MAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE;YAClC,MAAM,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;QACzB,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,MAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE;YAClC,MAAM,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;QACzB,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,EAAE,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,CACJ,IAAI,KAAK,CAAC,wDAAwD,CAAC,CACpE,CAAC;QACJ,CAAC,EAAE,KAAK,CAAC,CAAC;QAEV,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACtB,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,MAAM,CACJ,IAAI,KAAK,CACP,+CAA+C,IAAI,MAAM,MAAM,EAAE,CAClE,CACF,CAAC;gBACF,OAAO;YACT,CAAC;YACD,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YACxC,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBACf,MAAM,CACJ,IAAI,KAAK,CACP,sDAAsD,MAAM,EAAE,CAC/D,CACF,CAAC;gBACF,OAAO;YACT,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -159,7 +159,7 @@ function generateDelta(options) {
159
159
  else {
160
160
  fs.writeFileSync(path.join(deltaDir, 'codeyam-log.txt'), '# Log file not found\n');
161
161
  }
162
- // 6. Add debug report if exists (from /codeyam:diagnose workflow)
162
+ // 6. Add debug report if exists (from /codeyam-diagnose workflow)
163
163
  const debugReportPath = path.join(projectRoot, '.codeyam', 'debug-report.md');
164
164
  if (fs.existsSync(debugReportPath)) {
165
165
  fs.copyFileSync(debugReportPath, path.join(deltaDir, 'debug-report.md'));
@@ -214,7 +214,7 @@ export async function generateBundleArchive(options) {
214
214
  ...(feedback || { issueType: 'other', source: 'cli' }),
215
215
  debugReport,
216
216
  };
217
- log('Found debug report from /codeyam:diagnose workflow');
217
+ log('Found debug report from /codeyam-diagnose workflow');
218
218
  }
219
219
  const metadata = {
220
220
  timestamp: new Date().toISOString(),
@@ -3,104 +3,84 @@ import * as path from 'path';
3
3
  import { fileURLToPath } from 'url';
4
4
  const __filename = fileURLToPath(import.meta.url);
5
5
  const __dirname = path.dirname(__filename);
6
- export async function installClaudeCodeSkills(projectRoot) {
6
+ export async function installClaudeCodeSkills(projectRoot, options) {
7
+ const mode = options?.mode ?? 'memory';
7
8
  try {
8
- // Create .claude/skills directories in project root
9
9
  const skillsDir = path.join(projectRoot, '.claude', 'skills');
10
- const setupSkillDir = path.join(skillsDir, 'codeyam:setup');
11
- const simSkillDir = path.join(skillsDir, 'codeyam:sim');
12
- const testSkillDir = path.join(skillsDir, 'codeyam:test');
13
- const verifySkillDir = path.join(skillsDir, 'codeyam:verify');
14
- const memorySkillDir = path.join(skillsDir, 'codeyam:memory');
15
- const newRuleSkillDir = path.join(skillsDir, 'codeyam:new-rule');
16
- await fs.mkdir(setupSkillDir, { recursive: true });
17
- await fs.mkdir(simSkillDir, { recursive: true });
18
- await fs.mkdir(testSkillDir, { recursive: true });
19
- await fs.mkdir(verifySkillDir, { recursive: true });
10
+ const templatesDir = path.join(__dirname, '../../templates');
11
+ // Memory + setup skills — always installed
12
+ const memorySkillDir = path.join(skillsDir, 'codeyam-memory');
13
+ const newRuleSkillDir = path.join(skillsDir, 'codeyam-new-rule');
14
+ const setupSkillDir = path.join(skillsDir, 'codeyam-setup');
20
15
  await fs.mkdir(memorySkillDir, { recursive: true });
21
16
  await fs.mkdir(newRuleSkillDir, { recursive: true });
22
- // Create .claude/commands directory for slash commands
23
- const commandsDir = path.join(projectRoot, '.claude', 'commands');
24
- await fs.mkdir(commandsDir, { recursive: true });
25
- // Create .codeyam/bin directory for helper scripts
17
+ await fs.mkdir(setupSkillDir, { recursive: true });
18
+ await fs.copyFile(path.join(templatesDir, 'codeyam-memory.md'), path.join(memorySkillDir, 'SKILL.md'));
19
+ await fs.copyFile(path.join(templatesDir, 'codeyam-new-rule.md'), path.join(newRuleSkillDir, 'SKILL.md'));
20
+ await fs.copyFile(path.join(templatesDir, 'codeyam-setup.md'), path.join(setupSkillDir, 'SKILL.md'));
21
+ // Simulation skills — only in full mode
22
+ if (mode === 'full') {
23
+ const simSkillDir = path.join(skillsDir, 'codeyam-sim');
24
+ const testSkillDir = path.join(skillsDir, 'codeyam-test');
25
+ const verifySkillDir = path.join(skillsDir, 'codeyam-verify');
26
+ await fs.mkdir(simSkillDir, { recursive: true });
27
+ await fs.mkdir(testSkillDir, { recursive: true });
28
+ await fs.mkdir(verifySkillDir, { recursive: true });
29
+ await fs.copyFile(path.join(templatesDir, 'codeyam-sim.md'), path.join(simSkillDir, 'SKILL.md'));
30
+ await fs.copyFile(path.join(templatesDir, 'codeyam-test.md'), path.join(testSkillDir, 'SKILL.md'));
31
+ await fs.copyFile(path.join(templatesDir, 'codeyam-verify.md'), path.join(verifySkillDir, 'SKILL.md'));
32
+ // Diagnose command — only in full mode
33
+ const commandsDir = path.join(projectRoot, '.claude', 'commands');
34
+ await fs.mkdir(commandsDir, { recursive: true });
35
+ await fs.copyFile(path.join(templatesDir, 'codeyam-diagnose.md'), path.join(commandsDir, 'codeyam-diagnose.md'));
36
+ }
37
+ // Helper scripts and hooks — always installed
26
38
  const binDir = path.join(projectRoot, '.codeyam', 'bin');
27
39
  await fs.mkdir(binDir, { recursive: true });
28
- // Create .codeyam/rules directory for rule instructions
29
40
  const rulesDir = path.join(projectRoot, '.codeyam', 'rules');
30
41
  await fs.mkdir(rulesDir, { recursive: true });
31
- // Find templates directory (go up from dist if built)
32
- const templatesDir = path.join(__dirname, '../../templates');
33
- // Copy skill files to proper SKILL.md locations
34
- const setupSkillSrc = path.join(templatesDir, 'codeyam:setup.md');
35
- const simSkillSrc = path.join(templatesDir, 'codeyam:sim.md');
36
- const testSkillSrc = path.join(templatesDir, 'codeyam:test.md');
37
- const verifySkillSrc = path.join(templatesDir, 'codeyam:verify.md');
38
- const memorySkillSrc = path.join(templatesDir, 'codeyam:memory.md');
39
- const newRuleSkillSrc = path.join(templatesDir, 'codeyam:new-rule.md');
40
- const setupSkillDest = path.join(setupSkillDir, 'SKILL.md');
41
- const simSkillDest = path.join(simSkillDir, 'SKILL.md');
42
- const testSkillDest = path.join(testSkillDir, 'SKILL.md');
43
- const verifySkillDest = path.join(verifySkillDir, 'SKILL.md');
44
- const memorySkillDest = path.join(memorySkillDir, 'SKILL.md');
45
- const newRuleSkillDest = path.join(newRuleSkillDir, 'SKILL.md');
46
- await fs.copyFile(setupSkillSrc, setupSkillDest);
47
- await fs.copyFile(simSkillSrc, simSkillDest);
48
- await fs.copyFile(testSkillSrc, testSkillDest);
49
- await fs.copyFile(verifySkillSrc, verifySkillDest);
50
- await fs.copyFile(memorySkillSrc, memorySkillDest);
51
- await fs.copyFile(newRuleSkillSrc, newRuleSkillDest);
52
- // Copy command files to .claude/commands/
53
- const diagnoseCommandSrc = path.join(templatesDir, 'codeyam:diagnose.md');
54
- const diagnoseCommandDest = path.join(commandsDir, 'codeyam:diagnose.md');
55
- await fs.copyFile(diagnoseCommandSrc, diagnoseCommandDest);
56
- // Copy memory pre-commit hook script to .codeyam/bin/
57
- const memoryHookSrc = path.join(templatesDir, 'codeyam-memory-hook.sh');
58
- const memoryHookDest = path.join(binDir, 'memory-hook.sh');
42
+ // Memory pre-commit hook
59
43
  try {
60
- await fs.copyFile(memoryHookSrc, memoryHookDest);
44
+ const memoryHookDest = path.join(binDir, 'memory-hook.sh');
45
+ await fs.copyFile(path.join(templatesDir, 'codeyam-memory-hook.sh'), memoryHookDest);
61
46
  await fs.chmod(memoryHookDest, 0o755);
62
47
  }
63
48
  catch {
64
49
  // Hook script is optional - skill will create it if missing
65
50
  }
66
- // Copy rule reflection hook script to .codeyam/bin/
67
- const ruleReflectionHookSrc = path.join(templatesDir, 'rule-reflection-hook.py');
68
- const ruleReflectionHookDest = path.join(binDir, 'rule-reflection-hook.py');
51
+ // Rule reflection hook
69
52
  try {
70
- await fs.copyFile(ruleReflectionHookSrc, ruleReflectionHookDest);
53
+ const ruleReflectionHookDest = path.join(binDir, 'rule-reflection-hook.py');
54
+ await fs.copyFile(path.join(templatesDir, 'rule-reflection-hook.py'), ruleReflectionHookDest);
71
55
  await fs.chmod(ruleReflectionHookDest, 0o755);
72
56
  }
73
57
  catch {
74
58
  // Hook script is optional
75
59
  }
76
- // Copy rule notification hook script to .codeyam/bin/
77
- const ruleNotificationHookSrc = path.join(templatesDir, 'rule-notification-hook.py');
78
- const ruleNotificationHookDest = path.join(binDir, 'rule-notification-hook.py');
60
+ // Rule notification hook
79
61
  try {
80
- await fs.copyFile(ruleNotificationHookSrc, ruleNotificationHookDest);
62
+ const ruleNotificationHookDest = path.join(binDir, 'rule-notification-hook.py');
63
+ await fs.copyFile(path.join(templatesDir, 'rule-notification-hook.py'), ruleNotificationHookDest);
81
64
  await fs.chmod(ruleNotificationHookDest, 0o755);
82
65
  }
83
66
  catch {
84
67
  // Hook script is optional
85
68
  }
86
- // Copy prompt templates to .codeyam/bin/prompts/
87
- const promptsSrcDir = path.join(templatesDir, 'prompts');
88
- const promptsDestDir = path.join(binDir, 'prompts');
69
+ // Prompt templates
89
70
  try {
71
+ const promptsDestDir = path.join(binDir, 'prompts');
90
72
  await fs.mkdir(promptsDestDir, { recursive: true });
91
- const promptFiles = await fs.readdir(promptsSrcDir);
73
+ const promptFiles = await fs.readdir(path.join(templatesDir, 'prompts'));
92
74
  for (const file of promptFiles) {
93
- await fs.copyFile(path.join(promptsSrcDir, file), path.join(promptsDestDir, file));
75
+ await fs.copyFile(path.join(templatesDir, 'prompts', file), path.join(promptsDestDir, file));
94
76
  }
95
77
  }
96
78
  catch {
97
79
  // Prompt templates are optional
98
80
  }
99
- // Copy rules instructions to .codeyam/rules/
100
- const rulesInstructionsSrc = path.join(templatesDir, 'rules-instructions.md');
101
- const rulesInstructionsDest = path.join(rulesDir, 'instructions.md');
81
+ // Rules instructions
102
82
  try {
103
- await fs.copyFile(rulesInstructionsSrc, rulesInstructionsDest);
83
+ await fs.copyFile(path.join(templatesDir, 'rules-instructions.md'), path.join(rulesDir, 'instructions.md'));
104
84
  }
105
85
  catch {
106
86
  // Instructions file is optional - skill will guide if missing
@@ -1 +1 @@
1
- {"version":3,"file":"install-skills.js","sourceRoot":"","sources":["../../../../src/utils/install-skills.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install-skills.js","sourceRoot":"","sources":["../../../../src/utils/install-skills.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { createHmac } from 'crypto';
2
+ const LABS_UNLOCK_SALT = process.env.LABS_UNLOCK_SALT || 'codeyam-labs-default-salt';
3
+ /**
4
+ * Generate the unlock code for a project slug.
5
+ * Deterministic: same slug + salt always produces the same code.
6
+ */
7
+ export function generateUnlockCode(projectSlug) {
8
+ const hmac = createHmac('sha256', LABS_UNLOCK_SALT);
9
+ hmac.update(projectSlug);
10
+ return `CY-${hmac.digest('hex').slice(0, 16)}`;
11
+ }
12
+ /**
13
+ * Validate an unlock code locally using the same HMAC-SHA256 logic as the server.
14
+ * No network call required — the code is deterministic per project slug + salt.
15
+ */
16
+ export function validateUnlockCode(projectSlug, unlockCode) {
17
+ return unlockCode === generateUnlockCode(projectSlug);
18
+ }
19
+ //# sourceMappingURL=labsAutoCheck.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"labsAutoCheck.js","sourceRoot":"","sources":["../../../../src/utils/labsAutoCheck.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,MAAM,gBAAgB,GACpB,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,2BAA2B,CAAC;AAE9D;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,WAAmB;IACpD,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IACpD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACzB,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AACjD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,WAAmB,EACnB,UAAkB;IAElB,OAAO,UAAU,KAAK,kBAAkB,CAAC,WAAW,CAAC,CAAC;AACxD,CAAC"}
@@ -24,6 +24,13 @@ export class ProgressReporter {
24
24
  console.log(chalk.cyan('⠿') + ' ' + this.currentMessage);
25
25
  return;
26
26
  }
27
+ // Render the first frame immediately so it's visible even if
28
+ // the caller blocks the event loop with execSync right after.
29
+ process.stdout.write('\r' +
30
+ chalk.cyan(this.spinnerFrames[this.spinnerIndex]) +
31
+ ' ' +
32
+ this.currentMessage);
33
+ this.spinnerIndex = (this.spinnerIndex + 1) % this.spinnerFrames.length;
27
34
  this.spinner = setInterval(() => {
28
35
  process.stdout.write('\r' +
29
36
  chalk.cyan(this.spinnerFrames[this.spinnerIndex]) +
@@ -1 +1 @@
1
- {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../../../src/utils/progress.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../../../src/utils/progress.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { isAnalyzerFinalized } from "./analyzer.js";
2
+ import { error, info } from "./progress.js";
3
+ export function requireSimulations() {
4
+ if (!isAnalyzerFinalized()) {
5
+ error('Simulations are not set up yet.');
6
+ info('Run "codeyam setup-simulations" to enable visual simulations.');
7
+ process.exit(1);
8
+ }
9
+ }
10
+ //# sourceMappingURL=requireSimulations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requireSimulations.js","sourceRoot":"","sources":["../../../../src/utils/requireSimulations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,UAAU,kBAAkB;IAChC,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC;QAC3B,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACzC,IAAI,CAAC,+DAA+D,CAAC,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import * as fs from 'fs';
2
2
  import * as path from 'path';
3
- import { buildStaleRulesContext, buildConversationContext, } from "../contextBuilder.js";
3
+ import { buildStaleRulesContext, buildConversationContext, buildInterruptionContext, } from "../contextBuilder.js";
4
4
  const fixturesDir = path.join(__dirname, 'fixtures');
5
5
  function loadStaleRules() {
6
6
  return JSON.parse(fs.readFileSync(path.join(fixturesDir, 'stale-rules.json'), 'utf-8'));
@@ -23,7 +23,7 @@ describe('contextBuilder', () => {
23
23
  expect(result).toContain('Changes:');
24
24
  expect(result).toContain('validateSession');
25
25
  expect(result).toContain('Changed file: src/api/auth.ts');
26
- expect(result).toContain('Rule timestamp: 2026-01-15T00:00:00Z');
26
+ expect(result).toContain('Last audited: 2026-01-15T00:00:00Z');
27
27
  });
28
28
  it('includes diff in stale rules section', () => {
29
29
  const staleRules = loadStaleRules();
@@ -36,7 +36,7 @@ describe('contextBuilder', () => {
36
36
  const result = buildStaleRulesContext(staleRules);
37
37
  expect(result).toContain('Changed file: src/api/auth.ts');
38
38
  expect(result).toContain('File modified: 2026-02-01T10:30:00Z');
39
- expect(result).toContain('Rule timestamp: 2026-01-15T00:00:00Z');
39
+ expect(result).toContain('Last audited: 2026-01-15T00:00:00Z');
40
40
  });
41
41
  it('includes Build Configuration rule content', () => {
42
42
  const staleRules = loadStaleRules();
@@ -120,9 +120,111 @@ describe('contextBuilder', () => {
120
120
  const result = buildConversationContext(snippets, new Set());
121
121
  expect(result).toContain('User corrections or redirections');
122
122
  expect(result).toContain('Investigation results and debugging knowledge');
123
- expect(result).toContain('When NOT to create a rule');
123
+ expect(result).toContain('What makes a rule valuable');
124
124
  expect(result).toContain('.codeyam/rules/instructions.md');
125
125
  });
126
126
  });
127
+ describe('buildInterruptionContext', () => {
128
+ it('returns empty string when no snippets', () => {
129
+ const result = buildInterruptionContext([], 'What should I do instead?', new Set());
130
+ expect(result).toBe('');
131
+ });
132
+ it('builds interruption context with follow-up prompt', () => {
133
+ const snippets = [
134
+ {
135
+ role: 'user',
136
+ content: 'Please refactor the database module to use connection pooling',
137
+ },
138
+ {
139
+ role: 'assistant',
140
+ content: "I'll refactor the database module to use connection pooling.",
141
+ },
142
+ {
143
+ role: 'assistant',
144
+ content: 'I see the current implementation uses a single connection. Let me restructure this to use a connection pool.',
145
+ },
146
+ ];
147
+ const followUpPrompt = "No wait, I don't want a full connection pool rewrite. Just use the pg-pool library we already have as a dependency.";
148
+ const result = buildInterruptionContext(snippets, followUpPrompt, new Set());
149
+ expect(result).toContain('## Interruption Review');
150
+ expect(result).toContain('interrupted Claude mid-response');
151
+ expect(result).toContain('### Session transcript');
152
+ expect(result).toContain('[user]: Please refactor the database module');
153
+ expect(result).toContain('[assistant]:');
154
+ });
155
+ it('highlights the user follow-up prompt', () => {
156
+ const snippets = [
157
+ {
158
+ role: 'user',
159
+ content: 'Please update the config file for the project',
160
+ },
161
+ {
162
+ role: 'assistant',
163
+ content: 'I will update the config now with new settings.',
164
+ },
165
+ ];
166
+ const followUpPrompt = 'No, use the existing config format instead';
167
+ const result = buildInterruptionContext(snippets, followUpPrompt, new Set());
168
+ expect(result).toContain("### User's follow-up after interruption");
169
+ expect(result).toContain('No, use the existing config format instead');
170
+ });
171
+ it('includes modified files', () => {
172
+ const snippets = [
173
+ {
174
+ role: 'user',
175
+ content: 'Please fix the database connection module here',
176
+ },
177
+ {
178
+ role: 'assistant',
179
+ content: 'Let me fix the connection pooling logic.',
180
+ },
181
+ ];
182
+ const modifiedFiles = new Set([
183
+ ['src/db/connection.ts', 'Edit'],
184
+ ]);
185
+ const result = buildInterruptionContext(snippets, 'Stop, wrong approach', modifiedFiles);
186
+ expect(result).toContain('Files modified this session:');
187
+ expect(result).toContain('- src/db/connection.ts (Edit)');
188
+ });
189
+ it('includes rule creation guidance', () => {
190
+ const snippets = [
191
+ {
192
+ role: 'user',
193
+ content: 'Please help me refactor the auth module here',
194
+ },
195
+ {
196
+ role: 'assistant',
197
+ content: 'I will restructure the authentication logic.',
198
+ },
199
+ ];
200
+ const result = buildInterruptionContext(snippets, 'Wait, wrong approach', new Set());
201
+ // Should include the shared guidance from conversation-guidance.txt
202
+ expect(result).toContain('User corrections or redirections');
203
+ expect(result).toContain('What makes a rule valuable');
204
+ });
205
+ it('does NOT contain stale rules or conversation review headers', () => {
206
+ const snippets = [
207
+ {
208
+ role: 'user',
209
+ content: 'Please update the API endpoints in this project',
210
+ },
211
+ {
212
+ role: 'assistant',
213
+ content: 'I will update all the API endpoints now.',
214
+ },
215
+ ];
216
+ const result = buildInterruptionContext(snippets, 'No stop', new Set());
217
+ expect(result).not.toContain('# Reflection Step');
218
+ expect(result).not.toContain('## Stale Rules to Review');
219
+ expect(result).not.toContain('## Conversation Review');
220
+ });
221
+ it('replaces newlines with spaces in transcript snippets', () => {
222
+ const snippets = [
223
+ { role: 'assistant', content: 'Line one\nLine two\nLine three' },
224
+ ];
225
+ const result = buildInterruptionContext(snippets, 'Stop that', new Set());
226
+ expect(result).toContain('[assistant]: Line one Line two Line three');
227
+ });
228
+ });
127
229
  });
128
230
  //# sourceMappingURL=contextBuilder.test.js.map