@codeyam/codeyam-cli 0.1.0-staging.036391e → 0.1.0-staging.039fa00
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 +19 -19
- package/analyzer-template/packages/ai/index.ts +1 -0
- package/analyzer-template/packages/ai/package.json +2 -2
- package/analyzer-template/packages/ai/src/lib/analyzeScope.ts +14 -0
- package/analyzer-template/packages/ai/src/lib/astScopes/astScopeAnalyzer.ts +34 -3
- 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/completionCall.ts +114 -113
- package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +435 -13
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/coercePrimitivesToArraysBySchema.ts +62 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.ts +70 -19
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/stripNullableMarkers.ts +35 -0
- package/analyzer-template/packages/ai/src/lib/dataStructureChunking.ts +40 -13
- package/analyzer-template/packages/ai/src/lib/generateEntityScenarioData.ts +110 -7
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlows.ts +134 -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/ProjectAnalyzer.ts +6 -0
- package/analyzer-template/packages/analyze/src/lib/asts/nodes/getNodeType.ts +1 -0
- package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.ts +18 -0
- package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities.ts +9 -1
- package/analyzer-template/packages/analyze/src/lib/files/analyze/dependencyResolver.ts +0 -6
- package/analyzer-template/packages/analyze/src/lib/files/analyze/findOrCreateEntity.ts +12 -0
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/TransformationTracer.ts +65 -28
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.ts +50 -25
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +83 -0
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +176 -80
- package/analyzer-template/packages/aws/package.json +10 -10
- package/analyzer-template/packages/database/index.ts +1 -0
- package/analyzer-template/packages/database/package.json +3 -3
- 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 +8 -0
- package/analyzer-template/packages/database/src/lib/kysely/tables/debugReportsTable.ts +1 -1
- package/analyzer-template/packages/database/src/lib/kysely/tables/editorScenariosTable.ts +62 -0
- package/analyzer-template/packages/database/src/lib/loadCommits.ts +31 -20
- package/analyzer-template/packages/database/src/lib/loadReadyToBeCapturedAnalyses.ts +0 -5
- 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/updateCommitMetadata.ts +151 -135
- package/analyzer-template/packages/database/src/lib/updateFreshAnalysisStatus.ts +58 -42
- package/analyzer-template/packages/database/src/lib/updateFreshAnalysisStatusWithScenarios.ts +81 -65
- package/analyzer-template/packages/database/src/lib/userScenarioToDb.ts +1 -1
- package/analyzer-template/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.ts +29 -1
- package/analyzer-template/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.ts +33 -5
- package/analyzer-template/packages/github/dist/database/index.d.ts +1 -0
- package/analyzer-template/packages/github/dist/database/index.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/index.js +1 -0
- package/analyzer-template/packages/github/dist/database/index.js.map +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 +5 -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/editorScenariosTable.d.ts +20 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.d.ts.map +1 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.js +45 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts +5 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.js +23 -13
- package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.js +1 -4
- package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.js.map +1 -1
- 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/database/src/lib/updateCommitMetadata.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js +100 -89
- package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatus.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatus.js +41 -30
- package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatus.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatusWithScenarios.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatusWithScenarios.js +68 -57
- package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatusWithScenarios.js.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js +29 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +33 -5
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/types/ProjectMetadata.d.ts +1 -0
- package/analyzer-template/packages/github/dist/types/src/types/ProjectMetadata.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts +10 -0
- package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts.map +1 -1
- package/analyzer-template/packages/github/package.json +1 -1
- package/analyzer-template/packages/types/src/types/ProjectMetadata.ts +1 -0
- package/analyzer-template/packages/types/src/types/Scenario.ts +10 -0
- package/analyzer-template/packages/utils/dist/types/src/types/ProjectMetadata.d.ts +1 -0
- package/analyzer-template/packages/utils/dist/types/src/types/ProjectMetadata.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts +10 -0
- package/analyzer-template/packages/utils/dist/types/src/types/Scenario.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 +98 -3
- 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 +121 -3
- package/analyzer-template/playwright/captureFromUrl.ts +89 -82
- package/analyzer-template/project/constructMockCode.ts +170 -50
- package/analyzer-template/project/orchestrateCapture.ts +4 -1
- package/analyzer-template/project/reconcileMockDataKeys.ts +19 -14
- package/analyzer-template/project/start.ts +3 -0
- package/analyzer-template/project/startScenarioCapture.ts +9 -0
- package/analyzer-template/project/writeClientLogRoute.ts +125 -0
- package/analyzer-template/project/writeMockDataTsx.ts +17 -0
- package/analyzer-template/project/writeScenarioComponents.ts +110 -17
- package/analyzer-template/tsconfig.json +13 -1
- 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 +145 -41
- package/background/src/lib/virtualized/project/constructMockCode.js.map +1 -1
- package/background/src/lib/virtualized/project/orchestrateCapture.js +4 -1
- package/background/src/lib/virtualized/project/orchestrateCapture.js.map +1 -1
- package/background/src/lib/virtualized/project/reconcileMockDataKeys.js +17 -11
- package/background/src/lib/virtualized/project/reconcileMockDataKeys.js.map +1 -1
- package/background/src/lib/virtualized/project/start.js +2 -0
- package/background/src/lib/virtualized/project/start.js.map +1 -1
- package/background/src/lib/virtualized/project/startScenarioCapture.js +5 -0
- package/background/src/lib/virtualized/project/startScenarioCapture.js.map +1 -1
- package/background/src/lib/virtualized/project/writeClientLogRoute.js +110 -0
- package/background/src/lib/virtualized/project/writeClientLogRoute.js.map +1 -0
- package/background/src/lib/virtualized/project/writeMockDataTsx.js +12 -0
- package/background/src/lib/virtualized/project/writeMockDataTsx.js.map +1 -1
- package/background/src/lib/virtualized/project/writeScenarioComponents.js +83 -12
- package/background/src/lib/virtualized/project/writeScenarioComponents.js.map +1 -1
- package/codeyam-cli/scripts/apply-setup.js +209 -12
- package/codeyam-cli/scripts/apply-setup.js.map +1 -1
- package/codeyam-cli/src/cli.js +33 -24
- 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 +21 -9
- 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 +87 -21
- package/codeyam-cli/src/commands/default.js.map +1 -1
- package/codeyam-cli/src/commands/editor.js +1839 -0
- package/codeyam-cli/src/commands/editor.js.map +1 -0
- package/codeyam-cli/src/commands/init.js +81 -260
- package/codeyam-cli/src/commands/init.js.map +1 -1
- package/codeyam-cli/src/commands/memory.js +95 -81
- 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__/editorAudit.test.js +246 -0
- package/codeyam-cli/src/utils/__tests__/editorAudit.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorDevServer.test.js +126 -0
- package/codeyam-cli/src/utils/__tests__/editorDevServer.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorJournal.test.js +295 -0
- package/codeyam-cli/src/utils/__tests__/editorJournal.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorMockState.test.js +270 -0
- package/codeyam-cli/src/utils/__tests__/editorMockState.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorPreloadHelpers.test.js +100 -0
- package/codeyam-cli/src/utils/__tests__/editorPreloadHelpers.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorPreview.test.js +147 -0
- package/codeyam-cli/src/utils/__tests__/editorPreview.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js +76 -0
- package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/git.editor.test.js +134 -0
- package/codeyam-cli/src/utils/__tests__/git.editor.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/npmVersionCheck.test.js +185 -0
- package/codeyam-cli/src/utils/__tests__/npmVersionCheck.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/pathIgnoring.test.js +9 -0
- package/codeyam-cli/src/utils/__tests__/pathIgnoring.test.js.map +1 -1
- package/codeyam-cli/src/utils/__tests__/project.test.js +65 -0
- package/codeyam-cli/src/utils/__tests__/project.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/scenarioMarkers.test.js +121 -0
- package/codeyam-cli/src/utils/__tests__/scenarioMarkers.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +154 -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 +109 -26
- package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
- package/codeyam-cli/src/utils/buildFlags.js +4 -0
- package/codeyam-cli/src/utils/buildFlags.js.map +1 -0
- package/codeyam-cli/src/utils/devModeEvents.js +40 -0
- package/codeyam-cli/src/utils/devModeEvents.js.map +1 -0
- package/codeyam-cli/src/utils/editorAudit.js +82 -0
- package/codeyam-cli/src/utils/editorAudit.js.map +1 -0
- package/codeyam-cli/src/utils/editorDevServer.js +98 -0
- package/codeyam-cli/src/utils/editorDevServer.js.map +1 -0
- package/codeyam-cli/src/utils/editorJournal.js +137 -0
- package/codeyam-cli/src/utils/editorJournal.js.map +1 -0
- package/codeyam-cli/src/utils/editorMockState.js +248 -0
- package/codeyam-cli/src/utils/editorMockState.js.map +1 -0
- package/codeyam-cli/src/utils/editorPreloadHelpers.js +64 -0
- package/codeyam-cli/src/utils/editorPreloadHelpers.js.map +1 -0
- package/codeyam-cli/src/utils/editorPreview.js +66 -0
- package/codeyam-cli/src/utils/editorPreview.js.map +1 -0
- package/codeyam-cli/src/utils/editorScenarios.js +56 -0
- package/codeyam-cli/src/utils/editorScenarios.js.map +1 -0
- package/codeyam-cli/src/utils/fileMetadata.js +5 -0
- package/codeyam-cli/src/utils/fileMetadata.js.map +1 -1
- package/codeyam-cli/src/utils/fileWatcher.js +25 -9
- package/codeyam-cli/src/utils/fileWatcher.js.map +1 -1
- package/codeyam-cli/src/utils/generateReport.js +2 -2
- package/codeyam-cli/src/utils/git.js +103 -0
- package/codeyam-cli/src/utils/git.js.map +1 -1
- package/codeyam-cli/src/utils/install-skills.js +87 -65
- package/codeyam-cli/src/utils/install-skills.js.map +1 -1
- package/codeyam-cli/src/utils/interactiveSyncWatcher.js +126 -0
- package/codeyam-cli/src/utils/interactiveSyncWatcher.js.map +1 -0
- package/codeyam-cli/src/utils/labsAutoCheck.js +0 -29
- package/codeyam-cli/src/utils/labsAutoCheck.js.map +1 -1
- package/codeyam-cli/src/utils/npmVersionCheck.js +76 -0
- package/codeyam-cli/src/utils/npmVersionCheck.js.map +1 -0
- package/codeyam-cli/src/utils/pathIgnoring.js +19 -7
- package/codeyam-cli/src/utils/pathIgnoring.js.map +1 -1
- package/codeyam-cli/src/utils/progress.js +7 -0
- package/codeyam-cli/src/utils/progress.js.map +1 -1
- package/codeyam-cli/src/utils/project.js +15 -5
- package/codeyam-cli/src/utils/project.js.map +1 -1
- package/codeyam-cli/src/utils/queue/__tests__/heartbeat.test.js +11 -11
- package/codeyam-cli/src/utils/queue/__tests__/heartbeat.test.js.map +1 -1
- package/codeyam-cli/src/utils/queue/__tests__/manager.test.js +22 -0
- package/codeyam-cli/src/utils/queue/__tests__/manager.test.js.map +1 -1
- package/codeyam-cli/src/utils/queue/heartbeat.js +13 -5
- package/codeyam-cli/src/utils/queue/heartbeat.js.map +1 -1
- package/codeyam-cli/src/utils/queue/job.js +70 -1
- package/codeyam-cli/src/utils/queue/job.js.map +1 -1
- package/codeyam-cli/src/utils/queue/manager.js +7 -6
- package/codeyam-cli/src/utils/queue/manager.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 +7 -8
- package/codeyam-cli/src/utils/ruleReflection/__tests__/contextBuilder.test.js.map +1 -1
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/assertRules.js +1 -1
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/assertRules.js.map +1 -1
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/setupTempProject.js +0 -1
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/setupTempProject.js.map +1 -1
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/ruleReflectionE2E.test.js +97 -6
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/ruleReflectionE2E.test.js.map +1 -1
- package/codeyam-cli/src/utils/ruleReflection/__tests__/promptBuilder.test.js +4 -6
- package/codeyam-cli/src/utils/ruleReflection/__tests__/promptBuilder.test.js.map +1 -1
- package/codeyam-cli/src/utils/ruleReflection/contextBuilder.js +3 -3
- package/codeyam-cli/src/utils/ruleReflection/contextBuilder.js.map +1 -1
- package/codeyam-cli/src/utils/rules/__tests__/parser.test.js +83 -0
- package/codeyam-cli/src/utils/rules/__tests__/parser.test.js.map +1 -0
- package/codeyam-cli/src/utils/rules/__tests__/pathMatcher.test.js +118 -0
- package/codeyam-cli/src/utils/rules/__tests__/pathMatcher.test.js.map +1 -0
- package/codeyam-cli/src/utils/rules/__tests__/rulePlacement.test.js +72 -0
- package/codeyam-cli/src/utils/rules/__tests__/rulePlacement.test.js.map +1 -0
- 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/__tests__/sourceFiles.test.js +76 -0
- package/codeyam-cli/src/utils/rules/__tests__/sourceFiles.test.js.map +1 -0
- package/codeyam-cli/src/utils/rules/index.js +1 -0
- package/codeyam-cli/src/utils/rules/index.js.map +1 -1
- package/codeyam-cli/src/utils/rules/parser.js +19 -4
- package/codeyam-cli/src/utils/rules/parser.js.map +1 -1
- package/codeyam-cli/src/utils/rules/pathMatcher.js +34 -3
- package/codeyam-cli/src/utils/rules/pathMatcher.js.map +1 -1
- package/codeyam-cli/src/utils/rules/rulePlacement.js +65 -0
- package/codeyam-cli/src/utils/rules/rulePlacement.js.map +1 -0
- 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/sourceFiles.js +43 -0
- package/codeyam-cli/src/utils/rules/sourceFiles.js.map +1 -0
- 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/scenarioMarkers.js +134 -0
- package/codeyam-cli/src/utils/scenarioMarkers.js.map +1 -0
- package/codeyam-cli/src/utils/serverState.js +64 -12
- package/codeyam-cli/src/utils/serverState.js.map +1 -1
- package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +61 -43
- package/codeyam-cli/src/utils/setupClaudeCodeSettings.js.map +1 -1
- package/codeyam-cli/src/utils/simulationGateMiddleware.js +159 -0
- package/codeyam-cli/src/utils/simulationGateMiddleware.js.map +1 -0
- package/codeyam-cli/src/utils/syncMocksMiddleware.js +5 -24
- package/codeyam-cli/src/utils/syncMocksMiddleware.js.map +1 -1
- package/codeyam-cli/src/utils/testRunner.js +158 -0
- package/codeyam-cli/src/utils/testRunner.js.map +1 -0
- package/codeyam-cli/src/utils/transcriptPruning.js +67 -0
- package/codeyam-cli/src/utils/transcriptPruning.js.map +1 -0
- package/codeyam-cli/src/utils/versionInfo.js +46 -0
- package/codeyam-cli/src/utils/versionInfo.js.map +1 -1
- package/codeyam-cli/src/utils/webappDetection.js +14 -2
- package/codeyam-cli/src/utils/webappDetection.js.map +1 -1
- package/codeyam-cli/src/webserver/__tests__/dependency-smoke.test.js +66 -0
- package/codeyam-cli/src/webserver/__tests__/dependency-smoke.test.js.map +1 -0
- package/codeyam-cli/src/webserver/app/lib/database.js +55 -30
- 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 +144 -25
- package/codeyam-cli/src/webserver/backgroundServer.js.map +1 -1
- package/codeyam-cli/src/webserver/bootstrap.js +11 -0
- package/codeyam-cli/src/webserver/bootstrap.js.map +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{CopyButton-CA3JxPb7.js → CopyButton-DmJveP3T.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{EntityItem-B86KKU7e.js → EntityItem-C76mRRiF.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeBadge-B5ctlSYt.js → EntityTypeBadge-g3saevPb.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeIcon-BqY8gDAW.js → EntityTypeIcon-CobE682z.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-Bu6c6aDe.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{InteractivePreview-BDhPilK7.js → InteractivePreview-DYFW3lDD.js} +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/{LibraryFunctionPreview-VeqEBv9v.js → LibraryFunctionPreview-DLeucoVX.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{LoadingDots-Bs7Nn1Jr.js → LoadingDots-BU_OAEMP.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-Bm3PmcCz.js → LogViewer-ceAyBX-H.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{ReportIssueModal-C6PKeMYR.js → ReportIssueModal-djPLI-WV.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/{SafeScreenshot-Gq3Ocjo6.js → SafeScreenshot-BED4B6sP.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-BNLaXBHR.js → ScenarioViewer-B76aig_2.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/Spinner-Bb5uFQ5V.js +34 -0
- package/codeyam-cli/src/webserver/build/client/assets/Terminal-Dnj5CY9R.js +41 -0
- package/codeyam-cli/src/webserver/build/client/assets/{TruncatedFilePath-CiwXDxLh.js → TruncatedFilePath-C8OKAR5x.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{_index-B3TDXxnk.js → _index-C96V0n15.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{activity.(_tab)-BtBFH820.js → activity.(_tab)-BpKzcsJz.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/addon-fit-CUXOrorO.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/addon-web-links-Duc5hnl7.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/agent-transcripts-D9hemwl6.js +22 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-audit-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-capture-scenario-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-client-errors-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-commit-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-dev-server-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-entity-status-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-entry-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-image._-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-screenshot-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-update-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-load-commit-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-refresh-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-register-scenario-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-data-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-image._-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenarios-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-switch-scenario-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-test-results-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.rule-path-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{book-open-PttOB2SF.js → book-open-D_nMCFmP.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{chevron-down-TJp6ofnp.js → chevron-down-BH2h1Ea2.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{chunk-JZWAC4HX-JE9ZIoBl.js → chunk-JZWAC4HX-C4pqxYJB.js} +9 -9
- package/codeyam-cli/src/webserver/build/client/assets/{circle-check-CXhHQYrI.js → circle-check-DyIKORY6.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{copy-6y9ALfGT.js → copy-NDbZjXao.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{createLucideIcon-Ca9fAY46.js → createLucideIcon-CMT1jU2q.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/dev.empty-BiM6z3Do.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/editor-D1DAKXtT.js +8 -0
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-n38keI1k.js → entity._sha._-CrjR3zZW.js} +10 -10
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.dev-DkzqFzFj.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-C28BiQzt.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-p9hhkjJM.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.edit._scenarioId-38yPijoD.js → entity._sha_.edit._scenarioId-BMvVHNXU.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/{entry.client-BSHEfydn.js → entry.client-DTvKq3TY.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{fileTableUtils-DCPhhSMo.js → fileTableUtils-cPo8LiG3.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{files-0N0YJQv7.js → files-DO4CZ16O.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{git-DXnyr8uP.js → git-CFCTYk9I.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/globals-B17TBSS6.css +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{index-ChN9-fAY.js → index-10oVnAAH.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{index-CcsFv748.js → index-BcvgDzbZ.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/labs-Zk7ryIM1.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-CTqLEAGU.js → loader-circle-BAXYRVEO.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/manifest-a632de18.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/memory-Dg0mvYrI.js +96 -0
- package/codeyam-cli/src/webserver/build/client/assets/{pause-D6vreykR.js → pause-DTAcYxBt.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/root-DUKqhFlb.js +67 -0
- package/codeyam-cli/src/webserver/build/client/assets/{search-B8VUL8nl.js → search-fKo7v0Zo.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/settings-DfuTtcJP.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{simulations-CPoAg7Zo.js → simulations-B3aOzpCZ.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{terminal-BrCP7uQo.js → terminal-BG4heKCG.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{triangle-alert-BZz2NjYa.js → triangle-alert-DtSmdtM4.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useCustomSizes-DNwUduNu.js → useCustomSizes-ByhSyh0W.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/useLastLogLine-C14nCb1q.js +2 -0
- package/codeyam-cli/src/webserver/build/client/assets/{useReportContext-CpZgwliL.js → useReportContext-O-jkvSPx.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useToast-Bv9JFvUO.js → useToast-9FIWuYfK.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/xterm-BqvuqXEL.js +27 -0
- package/codeyam-cli/src/webserver/build/server/assets/index-HfLydfDq.js +1 -0
- package/codeyam-cli/src/webserver/build/server/assets/server-build-CUu_F-oo.js +366 -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/src/webserver/devServer.js +39 -5
- package/codeyam-cli/src/webserver/devServer.js.map +1 -1
- package/codeyam-cli/src/webserver/editorProxy.js +440 -0
- package/codeyam-cli/src/webserver/editorProxy.js.map +1 -0
- package/codeyam-cli/src/webserver/scripts/codeyam-preload.mjs +175 -0
- package/codeyam-cli/src/webserver/scripts/journalCapture.ts +140 -0
- package/codeyam-cli/src/webserver/server.js +226 -1
- package/codeyam-cli/src/webserver/server.js.map +1 -1
- package/codeyam-cli/src/webserver/terminalServer.js +698 -0
- package/codeyam-cli/src/webserver/terminalServer.js.map +1 -0
- package/codeyam-cli/templates/codeyam-editor-claude.md +68 -0
- package/codeyam-cli/templates/codeyam-memory-hook.sh +14 -14
- package/codeyam-cli/templates/commands/codeyam-diagnose.md +481 -0
- package/codeyam-cli/templates/editor-step-hook.py +147 -0
- package/codeyam-cli/templates/hooks/staleness-check.sh +43 -0
- package/codeyam-cli/templates/isolation-route/next-app.tsx.template +80 -0
- package/codeyam-cli/templates/isolation-route/next-pages.tsx.template +79 -0
- package/codeyam-cli/templates/isolation-route/vite-react.tsx.template +78 -0
- package/codeyam-cli/templates/msw/browser-setup.ts.template +47 -0
- package/codeyam-cli/templates/msw/handler-router.ts.template +47 -0
- package/codeyam-cli/templates/msw/server-setup.ts.template +52 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/PRISMA_SETUP.md +84 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/app/api/todos/route.ts +17 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/app/globals.css +26 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/app/layout.tsx +34 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/app/lib/prisma.ts +19 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/app/page.tsx +10 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/eslint.config.mjs +11 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/gitignore +43 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/next.config.ts +14 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/package.json +35 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/postcss.config.mjs +7 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma/schema.prisma +27 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma/seed.ts +37 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma.config.ts +12 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/tsconfig.json +34 -0
- package/codeyam-cli/templates/prompts/conversation-guidance.txt +44 -0
- package/codeyam-cli/templates/prompts/conversation-prompt.txt +28 -0
- package/codeyam-cli/templates/prompts/interruption-prompt.txt +31 -0
- package/codeyam-cli/templates/prompts/stale-rules-prompt.txt +24 -0
- package/codeyam-cli/templates/rule-notification-hook.py +44 -17
- package/codeyam-cli/templates/rule-reflection-hook.py +88 -31
- package/codeyam-cli/templates/rules-instructions.md +45 -90
- package/codeyam-cli/templates/{codeyam:debug.md → skills/codeyam-debug/SKILL.md} +1 -1
- package/codeyam-cli/templates/skills/codeyam-dev-mode/SKILL.md +237 -0
- package/codeyam-cli/templates/skills/codeyam-editor/SKILL.md +69 -0
- package/codeyam-cli/templates/{codeyam:memory.md → skills/codeyam-memory/SKILL.md} +231 -24
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/deprecated-prompt.md +100 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/detect-deprecated-patterns.sh +108 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/find-exports.sh +69 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/misleading-api-prompt.md +117 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/analyze-prompt.md +46 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/cleanup.sh +12 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/filter.jq +45 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/preprocess.sh +139 -0
- package/codeyam-cli/templates/{codeyam:new-rule.md → skills/codeyam-new-rule/SKILL.md} +1 -3
- package/codeyam-cli/templates/{codeyam:setup.md → skills/codeyam-setup/SKILL.md} +13 -1
- package/codeyam-cli/templates/{codeyam:sim.md → skills/codeyam-sim/SKILL.md} +1 -1
- package/codeyam-cli/templates/{codeyam:test.md → skills/codeyam-test/SKILL.md} +1 -1
- package/codeyam-cli/templates/{codeyam:verify.md → skills/codeyam-verify/SKILL.md} +1 -1
- package/package.json +15 -13
- 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/astScopeAnalyzer.js +22 -4
- package/packages/ai/src/lib/astScopes/astScopeAnalyzer.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/completionCall.js +10 -7
- package/packages/ai/src/lib/completionCall.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +362 -10
- package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/coercePrimitivesToArraysBySchema.js +54 -0
- package/packages/ai/src/lib/dataStructure/helpers/coercePrimitivesToArraysBySchema.js.map +1 -0
- package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js +59 -17
- package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/stripNullableMarkers.js +34 -0
- package/packages/ai/src/lib/dataStructure/helpers/stripNullableMarkers.js.map +1 -0
- package/packages/ai/src/lib/dataStructureChunking.js +30 -11
- package/packages/ai/src/lib/dataStructureChunking.js.map +1 -1
- package/packages/ai/src/lib/generateEntityScenarioData.js +79 -5
- package/packages/ai/src/lib/generateEntityScenarioData.js.map +1 -1
- package/packages/ai/src/lib/generateExecutionFlows.js +97 -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/ProjectAnalyzer.js +3 -0
- package/packages/analyze/src/lib/ProjectAnalyzer.js.map +1 -1
- package/packages/analyze/src/lib/asts/nodes/getNodeType.js +1 -0
- package/packages/analyze/src/lib/asts/nodes/getNodeType.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/analyze/analyzeEntities.js +8 -1
- package/packages/analyze/src/lib/files/analyze/analyzeEntities.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/dependencyResolver.js +0 -5
- package/packages/analyze/src/lib/files/analyze/dependencyResolver.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js +9 -0
- package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/TransformationTracer.js +54 -27
- package/packages/analyze/src/lib/files/scenarios/TransformationTracer.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/generateDataStructure.js +65 -0
- package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +141 -71
- package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js.map +1 -1
- package/packages/database/index.js +1 -0
- package/packages/database/index.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 +5 -0
- package/packages/database/src/lib/kysely/db.js.map +1 -1
- package/packages/database/src/lib/kysely/tables/editorScenariosTable.js +45 -0
- package/packages/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -0
- package/packages/database/src/lib/loadCommits.js +23 -13
- package/packages/database/src/lib/loadCommits.js.map +1 -1
- package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.js +1 -4
- package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.js.map +1 -1
- 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/database/src/lib/updateCommitMetadata.js +100 -89
- package/packages/database/src/lib/updateCommitMetadata.js.map +1 -1
- package/packages/database/src/lib/updateFreshAnalysisStatus.js +41 -30
- package/packages/database/src/lib/updateFreshAnalysisStatus.js.map +1 -1
- package/packages/database/src/lib/updateFreshAnalysisStatusWithScenarios.js +68 -57
- package/packages/database/src/lib/updateFreshAnalysisStatusWithScenarios.js.map +1 -1
- package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js +29 -1
- package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js.map +1 -1
- package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +33 -5
- package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
- package/packages/utils/src/lib/fs/rsyncCopy.js +98 -3
- package/packages/utils/src/lib/fs/rsyncCopy.js.map +1 -1
- package/scripts/npm-post-install.cjs +34 -0
- package/codeyam-cli/src/commands/detect-universal-mocks.js +0 -118
- package/codeyam-cli/src/commands/detect-universal-mocks.js.map +0 -1
- package/codeyam-cli/src/commands/list.js +0 -31
- package/codeyam-cli/src/commands/list.js.map +0 -1
- package/codeyam-cli/src/commands/webapp-info.js +0 -146
- package/codeyam-cli/src/commands/webapp-info.js.map +0 -1
- package/codeyam-cli/src/utils/universal-mocks.js +0 -152
- package/codeyam-cli/src/utils/universal-mocks.js.map +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-ClaLpuOo.js +0 -34
- package/codeyam-cli/src/webserver/build/client/assets/agent-transcripts-DfKzxuoe.js +0 -11
- package/codeyam-cli/src/webserver/build/client/assets/dev.empty-C5lqplTC.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-CBoafmVs.js +0 -6
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-DGgZjdFg.js +0 -6
- package/codeyam-cli/src/webserver/build/client/assets/globals-DoeDFXZN.css +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/labs-CmBYA0PH.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/manifest-76786b8e.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/memory-CrNQfdMO.js +0 -76
- package/codeyam-cli/src/webserver/build/client/assets/root-QAY34PIo.js +0 -62
- package/codeyam-cli/src/webserver/build/client/assets/settings-eBI36Yv5.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/useLastLogLine-COky1GVF.js +0 -2
- package/codeyam-cli/src/webserver/build/server/assets/index-DV1ykEI6.js +0 -1
- package/codeyam-cli/src/webserver/build/server/assets/server-build-BrcVrUEv.js +0 -260
- package/codeyam-cli/templates/codeyam-stop-hook.sh +0 -284
- package/codeyam-cli/templates/codeyam:diagnose.md +0 -805
- package/scripts/finalize-analyzer.cjs +0 -81
- /package/codeyam-cli/src/webserver/build/client/assets/{api.labs-survey-l0sNRNKZ.js → api.dev-mode-events-l0sNRNKZ.js} +0 -0
|
@@ -11,6 +11,11 @@ export default function mergeJsonTypeDefinitions(
|
|
|
11
11
|
if (!typeDef) continue;
|
|
12
12
|
if (typeof typeDef === 'string') continue;
|
|
13
13
|
for (const [key, value] of Object.entries(typeDef)) {
|
|
14
|
+
// Preserve _nullable boolean markers set by convertDotNotation
|
|
15
|
+
if (key === '_nullable' && typeof value === 'boolean') {
|
|
16
|
+
mergedDef[key] = value;
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
14
19
|
if (typeof value === 'string') {
|
|
15
20
|
if (!mergedDef[key]) {
|
|
16
21
|
mergedDef[key] = value;
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { JsonTypeDefinition } from '~codeyam/types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Check whether all non-`_nullable` children of an object are simple strings.
|
|
5
|
+
* "Leaf-like" nullable objects (all-string children) get collapsed to
|
|
6
|
+
* `"object | null"` so the LLM knows the field can be null.
|
|
7
|
+
* Objects with nested structure (object/array children) keep their shape
|
|
8
|
+
* so the LLM can still generate proper data when the field is truthy.
|
|
9
|
+
*/
|
|
10
|
+
function isLeafLikeObject(obj: Record<string, any>): boolean {
|
|
11
|
+
for (const key of Object.keys(obj)) {
|
|
12
|
+
if (key === '_nullable') continue;
|
|
13
|
+
const value = obj[key];
|
|
14
|
+
if (typeof value !== 'string') return false;
|
|
15
|
+
}
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Collapse *leaf-like* nullable objects/arrays in the data structure to type strings.
|
|
21
|
+
*
|
|
22
|
+
* When convertDotNotation marks an object or array as `_nullable: true`
|
|
23
|
+
* (meaning the schema had `object | undefined`, `object | null`, etc.),
|
|
24
|
+
* we decide whether to collapse it:
|
|
25
|
+
*
|
|
26
|
+
* - **Leaf-like** (all children are simple strings): collapse to `"object | null"`.
|
|
27
|
+
* Example: `{ _nullable: true, type: "string", path: "string" }` → `"object | null"`
|
|
28
|
+
*
|
|
29
|
+
* - **Rich** (has object/array children): strip `_nullable` and keep the structure
|
|
30
|
+
* so the LLM can generate proper nested data when the field is truthy.
|
|
31
|
+
* Example: `{ _nullable: true, items: [...], name: "string" }` → `{ items: [...], name: "string" }`
|
|
32
|
+
*
|
|
33
|
+
* Non-nullable objects are recursively processed but left as nested structures.
|
|
34
|
+
*/
|
|
35
|
+
export default function collapseNullableObjects(
|
|
36
|
+
data: JsonTypeDefinition,
|
|
37
|
+
): JsonTypeDefinition {
|
|
38
|
+
if (typeof data !== 'object' || data === null) {
|
|
39
|
+
return data;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if (Array.isArray(data)) {
|
|
43
|
+
return data.map((item: any) =>
|
|
44
|
+
typeof item === 'object' && item !== null
|
|
45
|
+
? collapseNullableObjects(item as JsonTypeDefinition)
|
|
46
|
+
: item,
|
|
47
|
+
) as any as JsonTypeDefinition;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const result: JsonTypeDefinition = {};
|
|
51
|
+
|
|
52
|
+
for (const key of Object.keys(data)) {
|
|
53
|
+
// Skip the _nullable marker itself (shouldn't appear at top level, but be safe)
|
|
54
|
+
if (key === '_nullable') continue;
|
|
55
|
+
|
|
56
|
+
const value = data[key];
|
|
57
|
+
|
|
58
|
+
if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
|
|
59
|
+
const hasNullable = (value as any)._nullable === true;
|
|
60
|
+
if (hasNullable && isLeafLikeObject(value as Record<string, any>)) {
|
|
61
|
+
// Leaf-like nullable object → collapse to type string
|
|
62
|
+
const childKeys = Object.keys(value as any).filter(
|
|
63
|
+
(k) => k !== '_nullable',
|
|
64
|
+
);
|
|
65
|
+
console.log(
|
|
66
|
+
`[collapseNullableObjects] collapsed "${key}" → "object | null" (leaf-like, children: [${childKeys.join(', ')}])`,
|
|
67
|
+
);
|
|
68
|
+
result[key] = 'object | null';
|
|
69
|
+
} else if (hasNullable) {
|
|
70
|
+
// Rich nullable object → strip _nullable, keep structure
|
|
71
|
+
const childKeys = Object.keys(value as any).filter(
|
|
72
|
+
(k) => k !== '_nullable',
|
|
73
|
+
);
|
|
74
|
+
console.log(
|
|
75
|
+
`[collapseNullableObjects] kept structure for nullable "${key}" (rich, children: [${childKeys.join(', ')}])`,
|
|
76
|
+
);
|
|
77
|
+
result[key] = collapseNullableObjects(value as JsonTypeDefinition);
|
|
78
|
+
} else {
|
|
79
|
+
// Non-nullable → recurse
|
|
80
|
+
result[key] = collapseNullableObjects(value as JsonTypeDefinition);
|
|
81
|
+
}
|
|
82
|
+
} else if (Array.isArray(value)) {
|
|
83
|
+
const hasNullable = (value as any)._nullable === true;
|
|
84
|
+
if (
|
|
85
|
+
hasNullable &&
|
|
86
|
+
value.length <= 1 &&
|
|
87
|
+
value.every((v) => typeof v === 'string')
|
|
88
|
+
) {
|
|
89
|
+
// Leaf-like nullable array → collapse to type string
|
|
90
|
+
console.log(
|
|
91
|
+
`[collapseNullableObjects] collapsed "${key}" → "array | null" (leaf-like)`,
|
|
92
|
+
);
|
|
93
|
+
result[key] = 'array | null';
|
|
94
|
+
} else if (hasNullable) {
|
|
95
|
+
// Rich nullable array → strip _nullable, keep structure
|
|
96
|
+
console.log(
|
|
97
|
+
`[collapseNullableObjects] kept structure for nullable array "${key}" (${value.length} elements)`,
|
|
98
|
+
);
|
|
99
|
+
result[key] = value.map((item) =>
|
|
100
|
+
typeof item === 'object' && item !== null
|
|
101
|
+
? collapseNullableObjects(item as JsonTypeDefinition)
|
|
102
|
+
: item,
|
|
103
|
+
) as JsonTypeDefinition[];
|
|
104
|
+
} else {
|
|
105
|
+
// Non-nullable → recurse elements
|
|
106
|
+
result[key] = value.map((item) =>
|
|
107
|
+
typeof item === 'object' && item !== null
|
|
108
|
+
? collapseNullableObjects(item as JsonTypeDefinition)
|
|
109
|
+
: item,
|
|
110
|
+
) as JsonTypeDefinition[];
|
|
111
|
+
}
|
|
112
|
+
} else {
|
|
113
|
+
result[key] = value;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
return result;
|
|
118
|
+
}
|
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
} from '~codeyam/types';
|
|
8
8
|
import noErrorAttributes from './noErrorAttributes';
|
|
9
9
|
import simplifyKeysForLLM from './simplifyKeysForLLM';
|
|
10
|
+
import collapseNullableObjects from './collapseNullableObjects';
|
|
10
11
|
|
|
11
12
|
/**
|
|
12
13
|
* Sort object keys by the size of their JSON-stringified values (smallest first).
|
|
@@ -99,11 +100,17 @@ ${JSON.stringify(defaultScenarioData.data, null, 2)}
|
|
|
99
100
|
// while the reconcileMockDataKeys function will still match the simplified response back to original keys.
|
|
100
101
|
// Then sort keys by size (smallest first) so small keys appear before large keys,
|
|
101
102
|
// increasing the chance the LLM generates all keys for large schemas.
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
103
|
+
|
|
104
|
+
const afterNoError = structure.dataForMocks
|
|
105
|
+
? (noErrorAttributes(structure.dataForMocks) as JsonTypeDefinition)
|
|
106
|
+
: null;
|
|
107
|
+
|
|
108
|
+
const afterSimplify = afterNoError ? simplifyKeysForLLM(afterNoError) : null;
|
|
109
|
+
|
|
110
|
+
const cleanedDataForMocks = afterSimplify
|
|
111
|
+
? collapseNullableObjects(afterSimplify)
|
|
106
112
|
: null;
|
|
113
|
+
|
|
107
114
|
const sortedDataForMocks =
|
|
108
115
|
cleanedDataForMocks &&
|
|
109
116
|
typeof cleanedDataForMocks === 'object' &&
|
|
@@ -111,6 +118,19 @@ ${JSON.stringify(defaultScenarioData.data, null, 2)}
|
|
|
111
118
|
? sortKeysBySize(cleanedDataForMocks as Record<string, any>)
|
|
112
119
|
: cleanedDataForMocks;
|
|
113
120
|
|
|
121
|
+
// Log nullable-related content in final prompt JSON
|
|
122
|
+
if (sortedDataForMocks) {
|
|
123
|
+
const finalJson = JSON.stringify(sortedDataForMocks, null, 2);
|
|
124
|
+
const hasNullableMarker = finalJson.includes('_nullable');
|
|
125
|
+
const nullCollapsed = (finalJson.match(/"object \| null"/g) || []).length;
|
|
126
|
+
const arrayCollapsed = (finalJson.match(/"array \| null"/g) || []).length;
|
|
127
|
+
if (hasNullableMarker || nullCollapsed > 0 || arrayCollapsed > 0) {
|
|
128
|
+
console.log(
|
|
129
|
+
`[generateEntityScenarioDataGenerator] final prompt: ${nullCollapsed} "object | null", ${arrayCollapsed} "array | null"${hasNullableMarker ? ', WARNING: _nullable still present!' : ''}`,
|
|
130
|
+
);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
114
134
|
// When mockData has already been generated via chunks, skip it in the main call
|
|
115
135
|
const mockDataSection = options?.mockDataAlreadyGenerated
|
|
116
136
|
? '## mockData Structure\nmockData has been pre-generated—return `{}` for mockData.'
|
|
@@ -46,6 +46,12 @@ export class ProjectAnalyzer {
|
|
|
46
46
|
lib.asts.createProgramFromTsConfigPath(configPath, excludePatterns),
|
|
47
47
|
);
|
|
48
48
|
|
|
49
|
+
if (this.programs.length === 0) {
|
|
50
|
+
throw new Error(
|
|
51
|
+
'No TypeScript programs could be created — no tsconfig.json found',
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
|
|
49
55
|
// Primary program is the first one (usually root) for backward compatibility
|
|
50
56
|
this.program = this.programs[0];
|
|
51
57
|
this.typeChecker = this.program.getTypeChecker();
|
|
@@ -18,6 +18,7 @@ import {
|
|
|
18
18
|
getCompoundConditionals,
|
|
19
19
|
getChildBoundaryGatingConditions,
|
|
20
20
|
getJsxRenderingUsages,
|
|
21
|
+
skipWorkerPool,
|
|
21
22
|
} from '~codeyam/ai';
|
|
22
23
|
import type { AnalysisOptions } from '../analyzeEntities';
|
|
23
24
|
|
|
@@ -271,6 +272,23 @@ export default async function prepareEntityDataStructures(
|
|
|
271
272
|
};
|
|
272
273
|
|
|
273
274
|
const entities = Array.from(allEntities);
|
|
275
|
+
|
|
276
|
+
// The worker thread creates its own ProjectAnalyzer (ts.Program) on first use,
|
|
277
|
+
// which takes 50-70s. For small entity counts the overhead far exceeds the actual
|
|
278
|
+
// processing time (<2s). Skip the worker and run on the main thread instead,
|
|
279
|
+
// reusing the existing ProjectAnalyzer.
|
|
280
|
+
const entitiesNeedingGeneration = entities.filter(
|
|
281
|
+
(e) =>
|
|
282
|
+
!e.metadata?.isolatedDataStructure || options.force || options.forceAll,
|
|
283
|
+
).length;
|
|
284
|
+
const WORKER_ENTITY_THRESHOLD = 500;
|
|
285
|
+
if (entitiesNeedingGeneration < WORKER_ENTITY_THRESHOLD) {
|
|
286
|
+
console.log(
|
|
287
|
+
`CodeYam: Skipping worker thread for DS prep (${entitiesNeedingGeneration} entities < ${WORKER_ENTITY_THRESHOLD} threshold)`,
|
|
288
|
+
);
|
|
289
|
+
skipWorkerPool();
|
|
290
|
+
}
|
|
291
|
+
|
|
274
292
|
const sequential =
|
|
275
293
|
DEBUG_SEQUENTIAL_EXECUTION || options.sequentialDataStructurePrep;
|
|
276
294
|
|
|
@@ -310,7 +310,15 @@ export default async function analyzeEntities({
|
|
|
310
310
|
);
|
|
311
311
|
|
|
312
312
|
// Flush transformation trace if tracing is enabled
|
|
313
|
-
|
|
313
|
+
// Wrapped in try/catch because trace data can exceed V8's max string length
|
|
314
|
+
// for large projects, and we must not crash the analysis process over tracing.
|
|
315
|
+
try {
|
|
316
|
+
transformationTracer.flush();
|
|
317
|
+
} catch (e) {
|
|
318
|
+
console.warn(
|
|
319
|
+
`CodeYam Warning: Failed to flush transformation trace: ${e.message}`,
|
|
320
|
+
);
|
|
321
|
+
}
|
|
314
322
|
|
|
315
323
|
return analyses;
|
|
316
324
|
|
|
@@ -100,12 +100,6 @@ export function getCandidatesReadyForCapture(
|
|
|
100
100
|
continue;
|
|
101
101
|
}
|
|
102
102
|
|
|
103
|
-
// Skip notExported entities - they can't be imported into the simulation
|
|
104
|
-
// environment and will always fail capture. Don't mark them as ready.
|
|
105
|
-
if (candidate.entity?.metadata?.notExported) {
|
|
106
|
-
continue;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
103
|
// Get all transitive dependencies
|
|
110
104
|
const candidateKey = `${candidate.filePath}:${candidate.entityName}`;
|
|
111
105
|
const { missingDependencies } = getTransitiveDependencies(
|
|
@@ -138,6 +138,18 @@ export default async function findOrCreateEntity({
|
|
|
138
138
|
break;
|
|
139
139
|
}
|
|
140
140
|
}
|
|
141
|
+
|
|
142
|
+
// Mark previous versions as superseded
|
|
143
|
+
const entitiesToSupersede = previousEntities.filter(
|
|
144
|
+
(e) => !e.metadata?.isSuperseded,
|
|
145
|
+
);
|
|
146
|
+
if (entitiesToSupersede.length > 0) {
|
|
147
|
+
for (const prev of entitiesToSupersede) {
|
|
148
|
+
prev.metadata = prev.metadata || {};
|
|
149
|
+
prev.metadata.isSuperseded = true;
|
|
150
|
+
}
|
|
151
|
+
await upsertEntities(entitiesToSupersede);
|
|
152
|
+
}
|
|
141
153
|
}
|
|
142
154
|
|
|
143
155
|
entity = {
|
|
@@ -404,22 +404,15 @@ export class TransformationTracer {
|
|
|
404
404
|
}
|
|
405
405
|
|
|
406
406
|
/**
|
|
407
|
-
*
|
|
407
|
+
* Compute the summary data for the current traces.
|
|
408
408
|
*/
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
const entities = Array.from(this.traces.keys());
|
|
417
|
-
const stageCounts = entities
|
|
418
|
-
.map((e) => `${e}(${this.traces.get(e)!.stages.length})`)
|
|
419
|
-
.join(', ');
|
|
420
|
-
this.log(`flush: writing ${entities.length} entities: ${stageCounts}`);
|
|
421
|
-
|
|
422
|
-
// Compute summary
|
|
409
|
+
private computeFlushSummary(): {
|
|
410
|
+
stageChangeCounts: Record<
|
|
411
|
+
string,
|
|
412
|
+
{ added: number; removed: number; changed: number }
|
|
413
|
+
>;
|
|
414
|
+
entitiesWithMostChanges: string[];
|
|
415
|
+
} {
|
|
423
416
|
const stageChangeCounts: Record<
|
|
424
417
|
string,
|
|
425
418
|
{ added: number; removed: number; changed: number }
|
|
@@ -484,17 +477,39 @@ export class TransformationTracer {
|
|
|
484
477
|
.slice(0, 10)
|
|
485
478
|
.map(([name]) => name);
|
|
486
479
|
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
480
|
+
return { stageChangeCounts, entitiesWithMostChanges };
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
/**
|
|
484
|
+
* Write the trace to the output file.
|
|
485
|
+
* Uses streaming per-entity writes to avoid exceeding V8's max string length
|
|
486
|
+
* on large projects.
|
|
487
|
+
*/
|
|
488
|
+
flush(): void {
|
|
489
|
+
if (!this.isEnabled()) return;
|
|
490
|
+
if (this.traces.size === 0) {
|
|
491
|
+
this.log('flush: no traces to write');
|
|
492
|
+
return;
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
const entities = Array.from(this.traces.keys());
|
|
496
|
+
const stageCounts = entities
|
|
497
|
+
.map((e) => `${e}(${this.traces.get(e)!.stages.length})`)
|
|
498
|
+
.join(', ');
|
|
499
|
+
this.log(`flush: writing ${entities.length} entities: ${stageCounts}`);
|
|
500
|
+
|
|
501
|
+
const { stageChangeCounts, entitiesWithMostChanges } =
|
|
502
|
+
this.computeFlushSummary();
|
|
503
|
+
|
|
504
|
+
const meta = {
|
|
505
|
+
timestamp: new Date().toISOString(),
|
|
506
|
+
projectSlug: this.projectSlug,
|
|
507
|
+
entityCount: this.traces.size,
|
|
508
|
+
};
|
|
509
|
+
|
|
510
|
+
const summary = {
|
|
511
|
+
stageChangeCounts,
|
|
512
|
+
entitiesWithMostChanges,
|
|
498
513
|
};
|
|
499
514
|
|
|
500
515
|
// Ensure directory exists
|
|
@@ -503,8 +518,30 @@ export class TransformationTracer {
|
|
|
503
518
|
fs.mkdirSync(dir, { recursive: true });
|
|
504
519
|
}
|
|
505
520
|
|
|
506
|
-
|
|
507
|
-
|
|
521
|
+
// Stream JSON per-entity to avoid exceeding V8's max string length.
|
|
522
|
+
// Each entity is serialized individually so no single JSON.stringify
|
|
523
|
+
// call needs to produce the entire trace.
|
|
524
|
+
const fd = fs.openSync(this.outputPath, 'w');
|
|
525
|
+
try {
|
|
526
|
+
fs.writeSync(fd, '{\n "meta": ');
|
|
527
|
+
fs.writeSync(fd, JSON.stringify(meta, null, 2));
|
|
528
|
+
fs.writeSync(fd, ',\n "summary": ');
|
|
529
|
+
fs.writeSync(fd, JSON.stringify(summary, null, 2));
|
|
530
|
+
fs.writeSync(fd, ',\n "entities": {');
|
|
531
|
+
|
|
532
|
+
let first = true;
|
|
533
|
+
for (const [entityName, entityTrace] of this.traces) {
|
|
534
|
+
if (!first) fs.writeSync(fd, ',');
|
|
535
|
+
fs.writeSync(fd, `\n ${JSON.stringify(entityName)}: `);
|
|
536
|
+
fs.writeSync(fd, JSON.stringify(entityTrace, null, 2));
|
|
537
|
+
first = false;
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
fs.writeSync(fd, '\n }\n}\n');
|
|
541
|
+
this.log(`flush: wrote trace to ${this.outputPath}`);
|
|
542
|
+
} finally {
|
|
543
|
+
fs.closeSync(fd);
|
|
544
|
+
}
|
|
508
545
|
}
|
|
509
546
|
|
|
510
547
|
/**
|
|
@@ -353,8 +353,6 @@ function processCall(
|
|
|
353
353
|
// Preprocess to filter signatures and extract functionCallReturnValue
|
|
354
354
|
let preprocessedSchema = preprocessSchemaForMocks(mergedSchema);
|
|
355
355
|
|
|
356
|
-
const functionNames: string[] = [];
|
|
357
|
-
|
|
358
356
|
const isFunctionNameWithoutFunction = (
|
|
359
357
|
path: string,
|
|
360
358
|
functionName: string,
|
|
@@ -439,31 +437,58 @@ function processCall(
|
|
|
439
437
|
}
|
|
440
438
|
}
|
|
441
439
|
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
}
|
|
440
|
+
// Two-pass function name filtering to avoid O(k²) retroactive deletion.
|
|
441
|
+
// Pass 1: Discover all unique function names from paths ending with ')'
|
|
442
|
+
const functionNameSet = new Set<string>();
|
|
443
|
+
const schemaKeys = Object.keys(preprocessedSchema);
|
|
444
|
+
for (const path of schemaKeys) {
|
|
445
|
+
if (path.endsWith(')')) {
|
|
446
|
+
const pathParts = splitOutsideParenthesesAndArrays(path);
|
|
447
|
+
const functionName = joinParenthesesAndArrays([
|
|
448
|
+
...pathParts.slice(0, -1),
|
|
449
|
+
pathParts[pathParts.length - 1].split('(')[0],
|
|
450
|
+
]);
|
|
451
|
+
functionNameSet.add(functionName);
|
|
452
|
+
}
|
|
453
|
+
}
|
|
457
454
|
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
455
|
+
// Index function names by first segment for O(1) bucket lookup instead of
|
|
456
|
+
// checking all function names for every path. Most paths only need to check
|
|
457
|
+
// 1-2 function names instead of all F.
|
|
458
|
+
const fnByFirstSegment = new Map<string, string[]>();
|
|
459
|
+
for (const fn of functionNameSet) {
|
|
460
|
+
const dotIdx = fn.indexOf('.');
|
|
461
|
+
const firstSeg = dotIdx >= 0 ? fn.slice(0, dotIdx) : fn;
|
|
462
|
+
let bucket = fnByFirstSegment.get(firstSeg);
|
|
463
|
+
if (!bucket) {
|
|
464
|
+
bucket = [];
|
|
465
|
+
fnByFirstSegment.set(firstSeg, bucket);
|
|
466
|
+
}
|
|
467
|
+
bucket.push(fn);
|
|
468
|
+
}
|
|
461
469
|
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
470
|
+
// Pass 2: Filter paths that match any discovered function name prefix.
|
|
471
|
+
// Use indexed lookup: extract path's first segment, check only matching function names.
|
|
472
|
+
const relevantMergedDependencySchema: Record<string, string> = {};
|
|
473
|
+
for (const path of schemaKeys) {
|
|
474
|
+
// Extract first segment of path (before first '.', '(', or '<')
|
|
475
|
+
const dotIdx = path.indexOf('.');
|
|
476
|
+
const parenIdx = path.indexOf('(');
|
|
477
|
+
const angleIdx = path.indexOf('<');
|
|
478
|
+
let minIdx = path.length;
|
|
479
|
+
if (dotIdx >= 0 && dotIdx < minIdx) minIdx = dotIdx;
|
|
480
|
+
if (parenIdx >= 0 && parenIdx < minIdx) minIdx = parenIdx;
|
|
481
|
+
if (angleIdx >= 0 && angleIdx < minIdx) minIdx = angleIdx;
|
|
482
|
+
const firstSeg = path.slice(0, minIdx);
|
|
483
|
+
|
|
484
|
+
const candidates = fnByFirstSegment.get(firstSeg);
|
|
485
|
+
if (
|
|
486
|
+
!candidates ||
|
|
487
|
+
!candidates.some((fn) => isFunctionNameWithoutFunction(path, fn))
|
|
488
|
+
) {
|
|
489
|
+
relevantMergedDependencySchema[path] = preprocessedSchema[path];
|
|
490
|
+
}
|
|
491
|
+
}
|
|
467
492
|
|
|
468
493
|
const filledSchema = fillInDirectSchemaGapsAndUnknowns({
|
|
469
494
|
scopeName: importedExport.name,
|
|
@@ -461,6 +461,17 @@ export default function generateDataStructure({
|
|
|
461
461
|
|
|
462
462
|
const { isolatedDataStructure } = entity.metadata;
|
|
463
463
|
|
|
464
|
+
if (!isolatedDataStructure) {
|
|
465
|
+
awsLog(
|
|
466
|
+
'CodeYam: Skipping data structure generation — isolatedDataStructure is undefined (scope analysis may have failed)',
|
|
467
|
+
{
|
|
468
|
+
entityName: entity.name,
|
|
469
|
+
filePath: entity.filePath,
|
|
470
|
+
},
|
|
471
|
+
);
|
|
472
|
+
return analysis;
|
|
473
|
+
}
|
|
474
|
+
|
|
464
475
|
// Transformation tracing: start entity and capture isolated data structure
|
|
465
476
|
transformationTracer.startEntity({
|
|
466
477
|
name: entity.name,
|
|
@@ -643,6 +654,78 @@ export default function generateDataStructure({
|
|
|
643
654
|
},
|
|
644
655
|
);
|
|
645
656
|
|
|
657
|
+
// Infer function types from child component usage BEFORE fillInSchemaGapsAndUnknowns.
|
|
658
|
+
// When a hook returns a property with type 'unknown' that is passed to a child
|
|
659
|
+
// component which calls it as a function (e.g., isEntityPending(entity)),
|
|
660
|
+
// promote it to 'function'. Without this, name heuristics like isLikelyBoolean
|
|
661
|
+
// would mistype "isEntityPending" as boolean because of the "is" prefix.
|
|
662
|
+
//
|
|
663
|
+
// sourceEquivalencies are in isolatedDataStructure.dependencySchemas (not in
|
|
664
|
+
// mergedDataStructure.dependencySchemas — they're dropped during the merge).
|
|
665
|
+
// The child's signatureSchema (with function call evidence) IS in the merged schemas.
|
|
666
|
+
{
|
|
667
|
+
const isolatedDepSchemas =
|
|
668
|
+
entity.metadata.isolatedDataStructure?.dependencySchemas;
|
|
669
|
+
if (isolatedDepSchemas) {
|
|
670
|
+
for (const childFilePath in isolatedDepSchemas) {
|
|
671
|
+
const childIsolated = isolatedDepSchemas[childFilePath];
|
|
672
|
+
for (const childName in childIsolated) {
|
|
673
|
+
const sourceEq = childIsolated[childName]?.sourceEquivalencies;
|
|
674
|
+
if (!sourceEq) continue;
|
|
675
|
+
|
|
676
|
+
// Get the child's signatureSchema from the MERGED schemas (richer)
|
|
677
|
+
const mergedChildSchema =
|
|
678
|
+
mergedDataStructure.dependencySchemas[childFilePath]?.[
|
|
679
|
+
childName
|
|
680
|
+
];
|
|
681
|
+
const sigSchema = mergedChildSchema?.signatureSchema;
|
|
682
|
+
if (!sigSchema) continue;
|
|
683
|
+
|
|
684
|
+
for (const childPath in sourceEq) {
|
|
685
|
+
for (const source of sourceEq[childPath]) {
|
|
686
|
+
const fcrvSuffix = '.functionCallReturnValue.';
|
|
687
|
+
const fcrvIndex = source.schemaPath.indexOf(fcrvSuffix);
|
|
688
|
+
if (fcrvIndex === -1) continue;
|
|
689
|
+
|
|
690
|
+
const propName = source.schemaPath.slice(
|
|
691
|
+
fcrvIndex + fcrvSuffix.length,
|
|
692
|
+
);
|
|
693
|
+
|
|
694
|
+
// Find the corresponding child signature path
|
|
695
|
+
const entityCallPrefix = childName + '().';
|
|
696
|
+
const sigPathBase = childPath.startsWith(entityCallPrefix)
|
|
697
|
+
? childPath.slice(entityCallPrefix.length)
|
|
698
|
+
: childPath;
|
|
699
|
+
|
|
700
|
+
// Check if the child's signatureSchema has a function call version
|
|
701
|
+
let isFunction = false;
|
|
702
|
+
for (const sigKey in sigSchema) {
|
|
703
|
+
if (
|
|
704
|
+
sigKey.startsWith(sigPathBase + '(') &&
|
|
705
|
+
sigSchema[sigKey] === 'function'
|
|
706
|
+
) {
|
|
707
|
+
isFunction = true;
|
|
708
|
+
break;
|
|
709
|
+
}
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
if (isFunction) {
|
|
713
|
+
for (const rvKey in depSchema.returnValueSchema) {
|
|
714
|
+
if (
|
|
715
|
+
rvKey.endsWith('.' + propName) &&
|
|
716
|
+
depSchema.returnValueSchema[rvKey] === 'unknown'
|
|
717
|
+
) {
|
|
718
|
+
depSchema.returnValueSchema[rvKey] = 'function';
|
|
719
|
+
}
|
|
720
|
+
}
|
|
721
|
+
}
|
|
722
|
+
}
|
|
723
|
+
}
|
|
724
|
+
}
|
|
725
|
+
}
|
|
726
|
+
}
|
|
727
|
+
}
|
|
728
|
+
|
|
646
729
|
// Fill in type gaps BEFORE clearing attributes, so evidence like .includes()
|
|
647
730
|
// is used for type inference before being deleted
|
|
648
731
|
|