@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.
- package/analyzer-template/.build-info.json +7 -7
- package/analyzer-template/log.txt +3 -3
- package/analyzer-template/package.json +1 -1
- package/analyzer-template/packages/ai/index.ts +1 -0
- package/analyzer-template/packages/ai/src/lib/analyzeScope.ts +14 -0
- package/analyzer-template/packages/ai/src/lib/astScopes/processExpression.ts +101 -0
- package/analyzer-template/packages/ai/src/lib/astScopes/sharedPatterns.ts +28 -0
- package/analyzer-template/packages/ai/src/lib/astScopes/types.ts +6 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +176 -8
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.ts +70 -13
- package/analyzer-template/packages/ai/src/lib/dataStructureChunking.ts +33 -15
- package/analyzer-template/packages/ai/src/lib/generateEntityScenarioData.ts +32 -5
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlows.ts +38 -2
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionals.ts +359 -142
- package/analyzer-template/packages/ai/src/lib/mergeJsonTypeDefinitions.ts +5 -0
- package/analyzer-template/packages/ai/src/lib/promptGenerators/collapseNullableObjects.ts +118 -0
- package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.ts +24 -4
- package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.ts +18 -0
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.ts +50 -25
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +153 -76
- package/analyzer-template/packages/database/src/lib/analysisBranchToDb.ts +1 -1
- package/analyzer-template/packages/database/src/lib/analysisToDb.ts +1 -1
- package/analyzer-template/packages/database/src/lib/branchToDb.ts +1 -1
- package/analyzer-template/packages/database/src/lib/commitBranchToDb.ts +1 -1
- package/analyzer-template/packages/database/src/lib/commitToDb.ts +1 -1
- package/analyzer-template/packages/database/src/lib/fileToDb.ts +1 -1
- package/analyzer-template/packages/database/src/lib/kysely/db.ts +6 -0
- package/analyzer-template/packages/database/src/lib/kysely/tables/debugReportsTable.ts +1 -1
- package/analyzer-template/packages/database/src/lib/kysely/tables/labsRequestsTable.ts +52 -0
- package/analyzer-template/packages/database/src/lib/projectToDb.ts +1 -1
- package/analyzer-template/packages/database/src/lib/saveFiles.ts +1 -1
- package/analyzer-template/packages/database/src/lib/scenarioToDb.ts +1 -1
- package/analyzer-template/packages/database/src/lib/userScenarioToDb.ts +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/analysisBranchToDb.js +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/analysisBranchToDb.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/analysisToDb.js +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/analysisToDb.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/branchToDb.js +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/branchToDb.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/commitBranchToDb.js +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/commitBranchToDb.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/commitToDb.js +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/commitToDb.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/fileToDb.js +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/fileToDb.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts +2 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js +3 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.d.ts +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/labsRequestsTable.d.ts +23 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/labsRequestsTable.d.ts.map +1 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/labsRequestsTable.js +35 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/labsRequestsTable.js.map +1 -0
- package/analyzer-template/packages/github/dist/database/src/lib/projectToDb.js +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/projectToDb.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/saveFiles.js +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/saveFiles.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/scenarioToDb.js +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/scenarioToDb.js.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/types/ProjectMetadata.d.ts +4 -0
- package/analyzer-template/packages/github/dist/types/src/types/ProjectMetadata.d.ts.map +1 -1
- package/analyzer-template/packages/types/src/types/ProjectMetadata.ts +7 -1
- package/analyzer-template/packages/utils/dist/types/src/types/ProjectMetadata.d.ts +4 -0
- package/analyzer-template/packages/utils/dist/types/src/types/ProjectMetadata.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.js +93 -2
- package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.js.map +1 -1
- package/analyzer-template/packages/utils/src/lib/fs/rsyncCopy.ts +108 -2
- package/analyzer-template/project/constructMockCode.ts +2 -2
- package/analyzer-template/project/writeMockDataTsx.ts +14 -6
- package/background/src/lib/local/createLocalAnalyzer.js +1 -1
- package/background/src/lib/local/createLocalAnalyzer.js.map +1 -1
- package/background/src/lib/virtualized/project/constructMockCode.js +2 -2
- package/background/src/lib/virtualized/project/constructMockCode.js.map +1 -1
- package/background/src/lib/virtualized/project/writeMockDataTsx.js +13 -6
- package/background/src/lib/virtualized/project/writeMockDataTsx.js.map +1 -1
- package/codeyam-cli/scripts/apply-setup.js +1 -1
- package/codeyam-cli/src/cli.js +2 -0
- package/codeyam-cli/src/cli.js.map +1 -1
- package/codeyam-cli/src/codeyam-cli.js +18 -2
- package/codeyam-cli/src/codeyam-cli.js.map +1 -1
- package/codeyam-cli/src/commands/analyze.js +4 -2
- package/codeyam-cli/src/commands/analyze.js.map +1 -1
- package/codeyam-cli/src/commands/baseline.js +2 -0
- package/codeyam-cli/src/commands/baseline.js.map +1 -1
- package/codeyam-cli/src/commands/debug.js +2 -0
- package/codeyam-cli/src/commands/debug.js.map +1 -1
- package/codeyam-cli/src/commands/default.js +31 -20
- package/codeyam-cli/src/commands/default.js.map +1 -1
- package/codeyam-cli/src/commands/detect-universal-mocks.js +2 -0
- package/codeyam-cli/src/commands/detect-universal-mocks.js.map +1 -1
- package/codeyam-cli/src/commands/init.js +49 -257
- package/codeyam-cli/src/commands/init.js.map +1 -1
- package/codeyam-cli/src/commands/memory.js +9 -9
- package/codeyam-cli/src/commands/memory.js.map +1 -1
- package/codeyam-cli/src/commands/recapture.js +2 -0
- package/codeyam-cli/src/commands/recapture.js.map +1 -1
- package/codeyam-cli/src/commands/setup-sandbox.js +2 -0
- package/codeyam-cli/src/commands/setup-sandbox.js.map +1 -1
- package/codeyam-cli/src/commands/setup-simulations.js +284 -0
- package/codeyam-cli/src/commands/setup-simulations.js.map +1 -0
- package/codeyam-cli/src/commands/test-startup.js +2 -0
- package/codeyam-cli/src/commands/test-startup.js.map +1 -1
- package/codeyam-cli/src/commands/verify.js +14 -2
- package/codeyam-cli/src/commands/verify.js.map +1 -1
- package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +128 -86
- package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js.map +1 -1
- package/codeyam-cli/src/utils/analyzer.js +7 -0
- package/codeyam-cli/src/utils/analyzer.js.map +1 -1
- package/codeyam-cli/src/utils/backgroundServer.js +107 -23
- package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
- package/codeyam-cli/src/utils/generateReport.js +2 -2
- package/codeyam-cli/src/utils/install-skills.js +43 -63
- package/codeyam-cli/src/utils/install-skills.js.map +1 -1
- package/codeyam-cli/src/utils/labsAutoCheck.js +19 -0
- package/codeyam-cli/src/utils/labsAutoCheck.js.map +1 -0
- package/codeyam-cli/src/utils/progress.js +7 -0
- package/codeyam-cli/src/utils/progress.js.map +1 -1
- package/codeyam-cli/src/utils/requireSimulations.js +10 -0
- package/codeyam-cli/src/utils/requireSimulations.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/contextBuilder.test.js +106 -4
- package/codeyam-cli/src/utils/ruleReflection/__tests__/contextBuilder.test.js.map +1 -1
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/ruleReflectionE2E.test.js +95 -2
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/ruleReflectionE2E.test.js.map +1 -1
- package/codeyam-cli/src/utils/ruleReflection/__tests__/promptBuilder.test.js +37 -5
- package/codeyam-cli/src/utils/ruleReflection/__tests__/promptBuilder.test.js.map +1 -1
- package/codeyam-cli/src/utils/ruleReflection/contextBuilder.js +23 -3
- package/codeyam-cli/src/utils/ruleReflection/contextBuilder.js.map +1 -1
- package/codeyam-cli/src/utils/ruleReflection/index.js +2 -2
- package/codeyam-cli/src/utils/ruleReflection/index.js.map +1 -1
- package/codeyam-cli/src/utils/ruleReflection/promptBuilder.js +11 -0
- package/codeyam-cli/src/utils/ruleReflection/promptBuilder.js.map +1 -1
- package/codeyam-cli/src/utils/rules/__tests__/ruleState.test.js +23 -23
- package/codeyam-cli/src/utils/rules/__tests__/ruleState.test.js.map +1 -1
- package/codeyam-cli/src/utils/rules/parser.js +5 -0
- package/codeyam-cli/src/utils/rules/parser.js.map +1 -1
- package/codeyam-cli/src/utils/rules/ruleState.js +10 -10
- package/codeyam-cli/src/utils/rules/ruleState.js.map +1 -1
- package/codeyam-cli/src/utils/rules/staleness.js +6 -6
- package/codeyam-cli/src/utils/rules/staleness.js.map +1 -1
- package/codeyam-cli/src/utils/serverState.js +37 -10
- package/codeyam-cli/src/utils/serverState.js.map +1 -1
- package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +21 -44
- package/codeyam-cli/src/utils/setupClaudeCodeSettings.js.map +1 -1
- package/codeyam-cli/src/webserver/app/lib/database.js +14 -3
- package/codeyam-cli/src/webserver/app/lib/database.js.map +1 -1
- package/codeyam-cli/src/webserver/app/lib/dbNotifier.js.map +1 -1
- package/codeyam-cli/src/webserver/backgroundServer.js +50 -0
- package/codeyam-cli/src/webserver/backgroundServer.js.map +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/CopyButton-D9i_zSlY.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{EntityItem-B86KKU7e.js → EntityItem-BLlhOa3C.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeBadge-B5ctlSYt.js → EntityTypeBadge-De5b5pC7.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeIcon-BqY8gDAW.js → EntityTypeIcon-CzdG5I7z.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{InlineSpinner-ClaLpuOo.js → InlineSpinner-Bclf8Hka.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{InteractivePreview-BDhPilK7.js → InteractivePreview-Ce-byqKl.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/{LibraryFunctionPreview-VeqEBv9v.js → LibraryFunctionPreview-DEMHrl7v.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{LoadingDots-Bs7Nn1Jr.js → LoadingDots-B1LNGboS.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-Bm3PmcCz.js → LogViewer-B0Ll1DjK.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{ReportIssueModal-C6PKeMYR.js → ReportIssueModal-CVOvmCKb.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/{SafeScreenshot-Gq3Ocjo6.js → SafeScreenshot-L0DWHa_L.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-BNLaXBHR.js → ScenarioViewer-D54Mmpwi.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/{TruncatedFilePath-CiwXDxLh.js → TruncatedFilePath-C7PFQfXy.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{_index-B3TDXxnk.js → _index-CKTtYlBU.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{activity.(_tab)-DD1r_QU0.js → activity.(_tab)-CdziRIWU.js} +6 -6
- package/codeyam-cli/src/webserver/build/client/assets/agent-transcripts-CPXtdaWm.js +17 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.labs-unlock-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{book-open-PttOB2SF.js → book-open-Ch8b7GyQ.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{chevron-down-TJp6ofnp.js → chevron-down-vJHJExlT.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{chunk-JZWAC4HX-JE9ZIoBl.js → chunk-JZWAC4HX-BEyX4X6_.js} +7 -7
- package/codeyam-cli/src/webserver/build/client/assets/{circle-check-CXhHQYrI.js → circle-check-rwynPZTW.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{copy-6y9ALfGT.js → copy-BBSpeBYf.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{createLucideIcon-Ca9fAY46.js → createLucideIcon-DHVDauuc.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{dev.empty-C5lqplTC.js → dev.empty-B9_ZqelV.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha._-BOPComvD.js +16 -0
- 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
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.create-scenario-DGgZjdFg.js → entity._sha_.create-scenario-BIDUUrI3.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.edit._scenarioId-38yPijoD.js → entity._sha_.edit._scenarioId-BEqewwtZ.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{entry.client-BSHEfydn.js → entry.client-Dxqz8ygt.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{fileTableUtils-DCPhhSMo.js → fileTableUtils-CYnF5KWN.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{files-Dk8wkAS7.js → files-B_dAq2PQ.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{git-DXnyr8uP.js → git-BHPqH3Ch.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/globals-BJGhRykz.css +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{index-CcsFv748.js → index-DgAAopZk.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{index-ChN9-fAY.js → index-viijWaN6.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/labs-ChoAe3xq.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-CTqLEAGU.js → loader-circle-LGi2eKI5.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/manifest-87493a32.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/memory-D9eA6kTo.js +78 -0
- package/codeyam-cli/src/webserver/build/client/assets/{pause-D6vreykR.js → pause-DxJFmMsK.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/root-C3r0p_7H.js +62 -0
- package/codeyam-cli/src/webserver/build/client/assets/{search-B8VUL8nl.js → search-Cu3QE9E5.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/settings-KH9TdArD.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{simulations-CPoAg7Zo.js → simulations-D9Fkx0-d.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{terminal-BrCP7uQo.js → terminal-dAhIBEcd.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{triangle-alert-BZz2NjYa.js → triangle-alert-C4CYTEeP.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useCustomSizes-DNwUduNu.js → useCustomSizes-CLPnITMB.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useLastLogLine-COky1GVF.js → useLastLogLine-DmGI38Et.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useReportContext-CpZgwliL.js → useReportContext-BK0S88PB.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useToast-Bv9JFvUO.js → useToast-CJ-JqR0l.js} +1 -1
- package/codeyam-cli/src/webserver/build/server/assets/{index-C0KrUQp-.js → index-CkkmL6r5.js} +1 -1
- package/codeyam-cli/src/webserver/build/server/assets/server-build-iBGjHYtO.js +259 -0
- package/codeyam-cli/src/webserver/build/server/index.js +1 -1
- package/codeyam-cli/src/webserver/build-info.json +5 -5
- package/codeyam-cli/templates/{codeyam:debug.md → codeyam-debug.md} +1 -1
- package/codeyam-cli/templates/codeyam-diagnose.md +481 -0
- package/codeyam-cli/templates/codeyam-memory-hook.sh +14 -14
- package/codeyam-cli/templates/{codeyam:memory.md → codeyam-memory.md} +16 -24
- package/codeyam-cli/templates/{codeyam:new-rule.md → codeyam-new-rule.md} +1 -1
- package/codeyam-cli/templates/{codeyam:setup.md → codeyam-setup.md} +13 -1
- package/codeyam-cli/templates/{codeyam:sim.md → codeyam-sim.md} +1 -1
- package/codeyam-cli/templates/{codeyam:test.md → codeyam-test.md} +1 -1
- package/codeyam-cli/templates/{codeyam:verify.md → codeyam-verify.md} +1 -1
- package/codeyam-cli/templates/rule-notification-hook.py +3 -1
- package/codeyam-cli/templates/rule-reflection-hook.py +265 -66
- package/codeyam-cli/templates/rules-instructions.md +50 -41
- package/package.json +9 -9
- package/packages/ai/index.js +1 -1
- package/packages/ai/index.js.map +1 -1
- package/packages/ai/src/lib/analyzeScope.js +14 -0
- package/packages/ai/src/lib/analyzeScope.js.map +1 -1
- package/packages/ai/src/lib/astScopes/processExpression.js +78 -1
- package/packages/ai/src/lib/astScopes/processExpression.js.map +1 -1
- package/packages/ai/src/lib/astScopes/sharedPatterns.js +25 -0
- package/packages/ai/src/lib/astScopes/sharedPatterns.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +128 -7
- package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js +59 -11
- package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js.map +1 -1
- package/packages/ai/src/lib/dataStructureChunking.js +26 -11
- package/packages/ai/src/lib/dataStructureChunking.js.map +1 -1
- package/packages/ai/src/lib/generateEntityScenarioData.js +22 -3
- package/packages/ai/src/lib/generateEntityScenarioData.js.map +1 -1
- package/packages/ai/src/lib/generateExecutionFlows.js +16 -2
- package/packages/ai/src/lib/generateExecutionFlows.js.map +1 -1
- package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js +242 -81
- package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js.map +1 -1
- package/packages/ai/src/lib/mergeJsonTypeDefinitions.js +5 -0
- package/packages/ai/src/lib/mergeJsonTypeDefinitions.js.map +1 -1
- package/packages/ai/src/lib/promptGenerators/collapseNullableObjects.js +97 -0
- package/packages/ai/src/lib/promptGenerators/collapseNullableObjects.js.map +1 -0
- package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js +17 -2
- package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js +11 -1
- package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js +42 -13
- package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +123 -67
- package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js.map +1 -1
- package/packages/database/src/lib/analysisBranchToDb.js +1 -1
- package/packages/database/src/lib/analysisBranchToDb.js.map +1 -1
- package/packages/database/src/lib/analysisToDb.js +1 -1
- package/packages/database/src/lib/analysisToDb.js.map +1 -1
- package/packages/database/src/lib/branchToDb.js +1 -1
- package/packages/database/src/lib/branchToDb.js.map +1 -1
- package/packages/database/src/lib/commitBranchToDb.js +1 -1
- package/packages/database/src/lib/commitBranchToDb.js.map +1 -1
- package/packages/database/src/lib/commitToDb.js +1 -1
- package/packages/database/src/lib/commitToDb.js.map +1 -1
- package/packages/database/src/lib/fileToDb.js +1 -1
- package/packages/database/src/lib/fileToDb.js.map +1 -1
- package/packages/database/src/lib/kysely/db.js +3 -0
- package/packages/database/src/lib/kysely/db.js.map +1 -1
- package/packages/database/src/lib/kysely/tables/labsRequestsTable.js +35 -0
- package/packages/database/src/lib/kysely/tables/labsRequestsTable.js.map +1 -0
- package/packages/database/src/lib/projectToDb.js +1 -1
- package/packages/database/src/lib/projectToDb.js.map +1 -1
- package/packages/database/src/lib/saveFiles.js +1 -1
- package/packages/database/src/lib/saveFiles.js.map +1 -1
- package/packages/database/src/lib/scenarioToDb.js +1 -1
- package/packages/database/src/lib/scenarioToDb.js.map +1 -1
- package/packages/utils/src/lib/fs/rsyncCopy.js +93 -2
- package/packages/utils/src/lib/fs/rsyncCopy.js.map +1 -1
- package/scripts/finalize-analyzer.cjs +8 -76
- package/codeyam-cli/src/webserver/build/client/assets/CopyButton-CA3JxPb7.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/agent-transcripts-DfKzxuoe.js +0 -11
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha._-n38keI1k.js +0 -23
- package/codeyam-cli/src/webserver/build/client/assets/globals-Bh6jH0cL.css +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/labs-BUvfJMNR.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/manifest-d4e77269.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/memory-DCHBwHou.js +0 -76
- package/codeyam-cli/src/webserver/build/client/assets/root-D6oziHts.js +0 -62
- package/codeyam-cli/src/webserver/build/client/assets/settings-B2X7lJgQ.js +0 -1
- package/codeyam-cli/src/webserver/build/server/assets/server-build-C2h1v1XD.js +0 -260
- 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
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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:
|
|
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:
|
|
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":"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;
|
|
1
|
+
{"version":3,"file":"backgroundServer.js","sourceRoot":"","sources":["../../../../src/utils/backgroundServer.ts"],"names":[],"mappings":"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"}
|
|
@@ -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
|
|
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
|
|
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
|
|
11
|
-
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
const
|
|
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
|
-
|
|
23
|
-
|
|
24
|
-
await fs.
|
|
25
|
-
|
|
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
|
-
//
|
|
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
|
-
|
|
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
|
-
//
|
|
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
|
-
|
|
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
|
-
//
|
|
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
|
-
|
|
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
|
-
//
|
|
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(
|
|
73
|
+
const promptFiles = await fs.readdir(path.join(templatesDir, 'prompts'));
|
|
92
74
|
for (const file of promptFiles) {
|
|
93
|
-
await fs.copyFile(path.join(
|
|
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
|
-
//
|
|
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(
|
|
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":"AAAA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;
|
|
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('
|
|
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('
|
|
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('
|
|
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
|