@codeyam/codeyam-cli 0.1.0-staging.6e699e5 → 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 +8 -8
- package/analyzer-template/packages/ai/index.ts +11 -2
- package/analyzer-template/packages/ai/package.json +2 -2
- package/analyzer-template/packages/ai/src/lib/analyzeScope.ts +100 -18
- package/analyzer-template/packages/ai/src/lib/astScopes/astScopeAnalyzer.ts +67 -9
- package/analyzer-template/packages/ai/src/lib/astScopes/methodSemantics.ts +41 -17
- package/analyzer-template/packages/ai/src/lib/astScopes/patterns/forInStatementHandler.ts +10 -17
- package/analyzer-template/packages/ai/src/lib/astScopes/processExpression.ts +409 -50
- package/analyzer-template/packages/ai/src/lib/astScopes/sharedPatterns.ts +28 -0
- package/analyzer-template/packages/ai/src/lib/astScopes/types.ts +21 -6
- package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +1007 -249
- package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.ts +5 -1
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/BatchSchemaProcessor.ts +16 -3
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/ScopeTreeManager.ts +6 -4
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.ts +54 -3
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.ts +60 -15
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/coerceObjectsToPrimitivesBySchema.ts +70 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.ts +140 -14
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertTypeAnnotationsToValues.ts +179 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/deduplicateFunctionSchemas.ts +40 -30
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.ts +393 -97
- package/analyzer-template/packages/ai/src/lib/dataStructureChunking.ts +33 -15
- package/analyzer-template/packages/ai/src/lib/generateEntityDataStructure.ts +58 -3
- package/analyzer-template/packages/ai/src/lib/generateEntityScenarioData.ts +315 -6
- package/analyzer-template/packages/ai/src/lib/generateEntityScenarios.ts +9 -5
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlows.ts +49 -5
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionalEffects.ts +1 -1
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionals.ts +649 -142
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromJsxUsages.ts +1 -1
- package/analyzer-template/packages/ai/src/lib/isolateScopes.ts +51 -3
- package/analyzer-template/packages/ai/src/lib/mergeJsonTypeDefinitions.ts +5 -0
- package/analyzer-template/packages/ai/src/lib/mergeStatements.ts +90 -96
- package/analyzer-template/packages/ai/src/lib/promptGenerators/collapseNullableObjects.ts +118 -0
- package/analyzer-template/packages/ai/src/lib/promptGenerators/gatherAttributesMap.ts +10 -7
- package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.ts +24 -4
- package/analyzer-template/packages/ai/src/lib/resolvePathToControllable.ts +25 -13
- package/analyzer-template/packages/ai/src/lib/worker/SerializableDataStructure.ts +4 -3
- package/analyzer-template/packages/ai/src/lib/worker/analyzeScopeWorker.ts +114 -2
- package/analyzer-template/packages/analyze/index.ts +2 -0
- package/analyzer-template/packages/analyze/src/lib/FileAnalyzer.ts +65 -59
- package/analyzer-template/packages/analyze/src/lib/ProjectAnalyzer.ts +113 -26
- package/analyzer-template/packages/analyze/src/lib/asts/sourceFiles/getAllDeclaredEntityNodes.ts +19 -0
- package/analyzer-template/packages/analyze/src/lib/asts/sourceFiles/getAllEntityNodes.ts +19 -0
- package/analyzer-template/packages/analyze/src/lib/asts/sourceFiles/getAllExports.ts +11 -0
- package/analyzer-template/packages/analyze/src/lib/asts/sourceFiles/getImportsAnalysis.ts +8 -0
- package/analyzer-template/packages/analyze/src/lib/asts/sourceFiles/getResolvedModule.ts +49 -1
- package/analyzer-template/packages/analyze/src/lib/asts/sourceFiles/getSourceFilesForAllImports.ts +2 -1
- package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.ts +89 -9
- package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities.ts +19 -4
- package/analyzer-template/packages/analyze/src/lib/files/analyze/dependencyResolver.ts +6 -0
- package/analyzer-template/packages/analyze/src/lib/files/analyze/gatherEntityMap.ts +4 -2
- package/analyzer-template/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.ts +0 -3
- package/analyzer-template/packages/analyze/src/lib/files/analyzeRemixRoute.ts +4 -5
- package/analyzer-template/packages/analyze/src/lib/files/getImportedExports.ts +14 -12
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/TransformationTracer.ts +1315 -0
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.ts +61 -13
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.ts +87 -25
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +229 -19
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.ts +117 -9
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +571 -74
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/propagateArrayItemSchemas.ts +474 -0
- package/analyzer-template/packages/analyze/src/lib/files/setImportedExports.ts +2 -1
- package/analyzer-template/packages/analyze/src/lib/index.ts +1 -0
- package/analyzer-template/packages/analyze/src/lib/utils/getFileByPath.ts +19 -0
- package/analyzer-template/packages/aws/package.json +1 -1
- package/analyzer-template/packages/database/package.json +1 -1
- 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 +14 -1
- package/analyzer-template/packages/database/src/lib/kysely/tables/commitsTable.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/loadAnalyses.ts +58 -1
- package/analyzer-template/packages/database/src/lib/loadAnalysis.ts +13 -0
- package/analyzer-template/packages/database/src/lib/loadBranch.ts +16 -1
- package/analyzer-template/packages/database/src/lib/loadCommit.ts +11 -0
- package/analyzer-template/packages/database/src/lib/loadCommits.ts +28 -0
- package/analyzer-template/packages/database/src/lib/loadEntities.ts +26 -3
- package/analyzer-template/packages/database/src/lib/loadEntityBranches.ts +12 -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/updateCommitMetadata.ts +7 -14
- 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 +11 -1
- 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/commitsTable.d.ts +1 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/commitsTable.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/commitsTable.js +3 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/commitsTable.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/loadAnalyses.d.ts +2 -0
- package/analyzer-template/packages/github/dist/database/src/lib/loadAnalyses.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadAnalyses.js +45 -2
- package/analyzer-template/packages/github/dist/database/src/lib/loadAnalyses.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadAnalysis.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadAnalysis.js +8 -0
- package/analyzer-template/packages/github/dist/database/src/lib/loadAnalysis.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadBranch.js +11 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadBranch.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadCommit.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadCommit.js +7 -0
- package/analyzer-template/packages/github/dist/database/src/lib/loadCommit.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.d.ts +3 -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 +22 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.d.ts +3 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.js +23 -4
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntityBranches.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntityBranches.js +9 -0
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntityBranches.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 +2 -2
- 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 +5 -4
- package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/types/Commit.d.ts +2 -0
- package/analyzer-template/packages/github/dist/types/src/types/Commit.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/types/ProjectMetadata.d.ts +7 -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/ScenariosDataStructure.d.ts +5 -5
- package/analyzer-template/packages/github/dist/types/src/types/ScenariosDataStructure.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/types/ScopeAnalysis.d.ts +6 -1
- package/analyzer-template/packages/github/dist/types/src/types/ScopeAnalysis.d.ts.map +1 -1
- package/analyzer-template/packages/github/package.json +1 -1
- package/analyzer-template/packages/types/src/types/Commit.ts +2 -0
- package/analyzer-template/packages/types/src/types/ProjectMetadata.ts +7 -0
- package/analyzer-template/packages/types/src/types/ScenariosDataStructure.ts +6 -5
- package/analyzer-template/packages/types/src/types/ScopeAnalysis.ts +6 -1
- package/analyzer-template/packages/utils/dist/types/src/types/Commit.d.ts +2 -0
- package/analyzer-template/packages/utils/dist/types/src/types/Commit.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/types/src/types/ProjectMetadata.d.ts +7 -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/ScenariosDataStructure.d.ts +5 -5
- package/analyzer-template/packages/utils/dist/types/src/types/ScenariosDataStructure.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/types/src/types/ScopeAnalysis.d.ts +6 -1
- package/analyzer-template/packages/utils/dist/types/src/types/ScopeAnalysis.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/playwright/capture.ts +20 -8
- package/analyzer-template/playwright/captureStatic.ts +1 -1
- package/analyzer-template/project/analyzeBaselineCommit.ts +5 -0
- package/analyzer-template/project/analyzeRegularCommit.ts +5 -0
- package/analyzer-template/project/captureLibraryFunctionDirect.ts +29 -26
- package/analyzer-template/project/constructMockCode.ts +92 -12
- package/analyzer-template/project/createEntitiesAndSortFiles.ts +83 -0
- package/analyzer-template/project/loadReadyToBeCaptured.ts +65 -41
- package/analyzer-template/project/orchestrateCapture/AwsCaptureTaskRunner.ts +12 -4
- package/analyzer-template/project/orchestrateCapture/SequentialCaptureTaskRunner.ts +11 -6
- package/analyzer-template/project/orchestrateCapture/taskRunner.ts +4 -2
- package/analyzer-template/project/orchestrateCapture.ts +45 -6
- package/analyzer-template/project/start.ts +35 -11
- package/analyzer-template/project/writeMockDataTsx.ts +181 -8
- package/analyzer-template/project/writeScenarioComponents.ts +103 -12
- package/analyzer-template/project/writeSimpleRoot.ts +21 -11
- package/analyzer-template/scripts/comboWorkerLoop.cjs +98 -50
- 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/analyzeBaselineCommit.js +5 -0
- package/background/src/lib/virtualized/project/analyzeBaselineCommit.js.map +1 -1
- package/background/src/lib/virtualized/project/analyzeRegularCommit.js +5 -0
- package/background/src/lib/virtualized/project/analyzeRegularCommit.js.map +1 -1
- package/background/src/lib/virtualized/project/captureLibraryFunctionDirect.js +3 -3
- package/background/src/lib/virtualized/project/captureLibraryFunctionDirect.js.map +1 -1
- package/background/src/lib/virtualized/project/constructMockCode.js +77 -6
- package/background/src/lib/virtualized/project/constructMockCode.js.map +1 -1
- package/background/src/lib/virtualized/project/createEntitiesAndSortFiles.js +73 -1
- package/background/src/lib/virtualized/project/createEntitiesAndSortFiles.js.map +1 -1
- package/background/src/lib/virtualized/project/loadReadyToBeCaptured.js +19 -8
- package/background/src/lib/virtualized/project/loadReadyToBeCaptured.js.map +1 -1
- package/background/src/lib/virtualized/project/orchestrateCapture/AwsCaptureTaskRunner.js +2 -2
- package/background/src/lib/virtualized/project/orchestrateCapture/AwsCaptureTaskRunner.js.map +1 -1
- package/background/src/lib/virtualized/project/orchestrateCapture/SequentialCaptureTaskRunner.js +4 -4
- package/background/src/lib/virtualized/project/orchestrateCapture/SequentialCaptureTaskRunner.js.map +1 -1
- package/background/src/lib/virtualized/project/orchestrateCapture.js +38 -6
- package/background/src/lib/virtualized/project/orchestrateCapture.js.map +1 -1
- package/background/src/lib/virtualized/project/start.js +32 -11
- package/background/src/lib/virtualized/project/start.js.map +1 -1
- package/background/src/lib/virtualized/project/writeMockDataTsx.js +162 -4
- package/background/src/lib/virtualized/project/writeMockDataTsx.js.map +1 -1
- package/background/src/lib/virtualized/project/writeScenarioComponents.js +85 -15
- package/background/src/lib/virtualized/project/writeScenarioComponents.js.map +1 -1
- package/background/src/lib/virtualized/project/writeSimpleRoot.js +21 -11
- package/background/src/lib/virtualized/project/writeSimpleRoot.js.map +1 -1
- package/codeyam-cli/scripts/apply-setup.js +180 -0
- package/codeyam-cli/scripts/apply-setup.js.map +1 -1
- package/codeyam-cli/src/cli.js +4 -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 +9 -5
- 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 +264 -0
- package/codeyam-cli/src/commands/memory.js.map +1 -0
- 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/analysisRunner.js +21 -2
- package/codeyam-cli/src/utils/analysisRunner.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 -19
- 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 +72 -47
- 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/queue/job.js +4 -0
- package/codeyam-cli/src/utils/queue/job.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__/confusionDetector.test.js +82 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/confusionDetector.test.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/contextBuilder.test.js +230 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/contextBuilder.test.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/assertRules.js +67 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/assertRules.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/captureFixture.js +105 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/captureFixture.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/loadCapturedFixture.js +34 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/loadCapturedFixture.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/runClaude.js +162 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/runClaude.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/setupTempProject.js +75 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/setupTempProject.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/ruleReflectionE2E.test.js +378 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/ruleReflectionE2E.test.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/promptBuilder.test.js +115 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/promptBuilder.test.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/transcriptParser.test.js +127 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/transcriptParser.test.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/confusionDetector.js +50 -0
- package/codeyam-cli/src/utils/ruleReflection/confusionDetector.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/contextBuilder.js +116 -0
- package/codeyam-cli/src/utils/ruleReflection/contextBuilder.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/index.js +5 -0
- package/codeyam-cli/src/utils/ruleReflection/index.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/promptBuilder.js +44 -0
- package/codeyam-cli/src/utils/ruleReflection/promptBuilder.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/transcriptParser.js +85 -0
- package/codeyam-cli/src/utils/ruleReflection/transcriptParser.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/types.js +5 -0
- package/codeyam-cli/src/utils/ruleReflection/types.js.map +1 -0
- package/codeyam-cli/src/utils/rules/__tests__/ruleState.test.js +293 -0
- package/codeyam-cli/src/utils/rules/__tests__/ruleState.test.js.map +1 -0
- package/codeyam-cli/src/utils/rules/index.js +6 -0
- package/codeyam-cli/src/utils/rules/index.js.map +1 -0
- package/codeyam-cli/src/utils/rules/parser.js +83 -0
- package/codeyam-cli/src/utils/rules/parser.js.map +1 -0
- package/codeyam-cli/src/utils/rules/pathMatcher.js +18 -0
- package/codeyam-cli/src/utils/rules/pathMatcher.js.map +1 -0
- package/codeyam-cli/src/utils/rules/ruleState.js +150 -0
- package/codeyam-cli/src/utils/rules/ruleState.js.map +1 -0
- package/codeyam-cli/src/utils/rules/staleness.js +137 -0
- package/codeyam-cli/src/utils/rules/staleness.js.map +1 -0
- 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 +21 -6
- 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-BLlhOa3C.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeBadge-DLqD3qNt.js → EntityTypeBadge-De5b5pC7.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeIcon-Ba2JVPzP.js → EntityTypeIcon-CzdG5I7z.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{InlineSpinner-C8lyxW9k.js → InlineSpinner-Bclf8Hka.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{InteractivePreview-aht4aafF.js → InteractivePreview-Ce-byqKl.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/{LibraryFunctionPreview-CVtiBnY5.js → LibraryFunctionPreview-DEMHrl7v.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{LoadingDots-B0GLXMsr.js → LoadingDots-B1LNGboS.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-xgeCVgSM.js → LogViewer-B0Ll1DjK.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{ReportIssueModal-D4TZhLuw.js → ReportIssueModal-CVOvmCKb.js} +3 -13
- package/codeyam-cli/src/webserver/build/client/assets/{SafeScreenshot-DuDvi0jm.js → SafeScreenshot-L0DWHa_L.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-DEx02QDa.js → ScenarioViewer-D54Mmpwi.js} +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/{TruncatedFilePath-DyFZkK0l.js → TruncatedFilePath-C7PFQfXy.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{_index-BwqWJOgH.js → _index-CKTtYlBU.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{activity.(_tab)-DoLIqZX2.js → activity.(_tab)-CdziRIWU.js} +6 -16
- 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/api.memory-profile-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.save-fixture-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/book-open-Ch8b7GyQ.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/{chevron-down-Cx24_aWc.js → chevron-down-vJHJExlT.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{chunk-EPOLDU6W-CXRTFQ3F.js → chunk-JZWAC4HX-BEyX4X6_.js} +12 -12
- package/codeyam-cli/src/webserver/build/client/assets/{circle-check-BOARzkeR.js → circle-check-rwynPZTW.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/copy-BBSpeBYf.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/{createLucideIcon-BdhJEx6B.js → createLucideIcon-DHVDauuc.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/dev.empty-B9_ZqelV.js +1 -0
- 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-DavjRmOY.js → entity._sha.scenarios._scenarioId.fullscreen-Cfw__yQa.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.create-scenario-D1T4TGjf.js → entity._sha_.create-scenario-BIDUUrI3.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.edit._scenarioId-CTBG2mmz.js → entity._sha_.edit._scenarioId-BEqewwtZ.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{entry.client-CS2cb_eZ.js → entry.client-Dxqz8ygt.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{fileTableUtils-DMJ7zii9.js → fileTableUtils-CYnF5KWN.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/files-B_dAq2PQ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{git-B4RJRvYB.js → git-BHPqH3Ch.js} +8 -8
- package/codeyam-cli/src/webserver/build/client/assets/globals-BJGhRykz.css +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{index-lzqtyFU8.js → index-DgAAopZk.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{index-B1h680n5.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-B7B9V-bu.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-DxJFmMsK.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/root-C3r0p_7H.js +62 -0
- package/codeyam-cli/src/webserver/build/client/assets/{search-CxXUmBSd.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-DwFIBT09.js → simulations-D9Fkx0-d.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/terminal-dAhIBEcd.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/{triangle-alert-B6LgvRJg.js → triangle-alert-C4CYTEeP.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useCustomSizes-C1v1PQzo.js → useCustomSizes-CLPnITMB.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useLastLogLine-aSv48UbS.js → useLastLogLine-DmGI38Et.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useReportContext-DYxHZQuP.js → useReportContext-BK0S88PB.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useToast-mBRpZPiu.js → useToast-CJ-JqR0l.js} +1 -1
- package/codeyam-cli/src/webserver/build/server/assets/index-CkkmL6r5.js +1 -0
- 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-power-rules-hook.sh → codeyam-memory-hook.sh} +22 -23
- package/codeyam-cli/templates/codeyam-memory.md +396 -0
- package/codeyam-cli/templates/codeyam-new-rule.md +13 -0
- 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 +56 -0
- package/codeyam-cli/templates/rule-reflection-hook.py +627 -0
- package/codeyam-cli/templates/rules-instructions.md +132 -0
- package/package.json +15 -13
- package/packages/ai/index.js +3 -2
- package/packages/ai/index.js.map +1 -1
- package/packages/ai/src/lib/analyzeScope.js +82 -13
- package/packages/ai/src/lib/analyzeScope.js.map +1 -1
- package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js +54 -8
- package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js.map +1 -1
- package/packages/ai/src/lib/astScopes/methodSemantics.js +41 -17
- package/packages/ai/src/lib/astScopes/methodSemantics.js.map +1 -1
- package/packages/ai/src/lib/astScopes/patterns/forInStatementHandler.js +10 -14
- package/packages/ai/src/lib/astScopes/patterns/forInStatementHandler.js.map +1 -1
- package/packages/ai/src/lib/astScopes/processExpression.js +317 -44
- 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 +776 -171
- package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.js +5 -1
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/BatchSchemaProcessor.js +13 -3
- package/packages/ai/src/lib/dataStructure/helpers/BatchSchemaProcessor.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/ScopeTreeManager.js +6 -4
- package/packages/ai/src/lib/dataStructure/helpers/ScopeTreeManager.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js +52 -3
- package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js +55 -11
- package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/coerceObjectsToPrimitivesBySchema.js +63 -0
- package/packages/ai/src/lib/dataStructure/helpers/coerceObjectsToPrimitivesBySchema.js.map +1 -0
- package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js +122 -12
- package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/convertTypeAnnotationsToValues.js +173 -0
- package/packages/ai/src/lib/dataStructure/helpers/convertTypeAnnotationsToValues.js.map +1 -0
- package/packages/ai/src/lib/dataStructure/helpers/deduplicateFunctionSchemas.js +37 -20
- package/packages/ai/src/lib/dataStructure/helpers/deduplicateFunctionSchemas.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js +333 -86
- package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.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/generateEntityDataStructure.js +46 -2
- package/packages/ai/src/lib/generateEntityDataStructure.js.map +1 -1
- package/packages/ai/src/lib/generateEntityScenarioData.js +227 -4
- package/packages/ai/src/lib/generateEntityScenarioData.js.map +1 -1
- package/packages/ai/src/lib/generateEntityScenarios.js +7 -1
- package/packages/ai/src/lib/generateEntityScenarios.js.map +1 -1
- package/packages/ai/src/lib/generateExecutionFlows.js +26 -4
- package/packages/ai/src/lib/generateExecutionFlows.js.map +1 -1
- package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js +447 -80
- package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js.map +1 -1
- package/packages/ai/src/lib/isolateScopes.js +39 -3
- package/packages/ai/src/lib/isolateScopes.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/mergeStatements.js +70 -51
- package/packages/ai/src/lib/mergeStatements.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/gatherAttributesMap.js +10 -4
- package/packages/ai/src/lib/promptGenerators/gatherAttributesMap.js.map +1 -1
- package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js +17 -2
- package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js.map +1 -1
- package/packages/ai/src/lib/resolvePathToControllable.js +24 -14
- package/packages/ai/src/lib/resolvePathToControllable.js.map +1 -1
- package/packages/ai/src/lib/worker/SerializableDataStructure.js.map +1 -1
- package/packages/ai/src/lib/worker/analyzeScopeWorker.js +94 -1
- package/packages/ai/src/lib/worker/analyzeScopeWorker.js.map +1 -1
- package/packages/analyze/index.js +1 -0
- package/packages/analyze/index.js.map +1 -1
- package/packages/analyze/src/lib/FileAnalyzer.js +60 -36
- package/packages/analyze/src/lib/FileAnalyzer.js.map +1 -1
- package/packages/analyze/src/lib/ProjectAnalyzer.js +96 -26
- package/packages/analyze/src/lib/ProjectAnalyzer.js.map +1 -1
- package/packages/analyze/src/lib/asts/sourceFiles/getAllDeclaredEntityNodes.js +14 -0
- package/packages/analyze/src/lib/asts/sourceFiles/getAllDeclaredEntityNodes.js.map +1 -1
- package/packages/analyze/src/lib/asts/sourceFiles/getAllEntityNodes.js +14 -0
- package/packages/analyze/src/lib/asts/sourceFiles/getAllEntityNodes.js.map +1 -1
- package/packages/analyze/src/lib/asts/sourceFiles/getAllExports.js +6 -0
- package/packages/analyze/src/lib/asts/sourceFiles/getAllExports.js.map +1 -1
- package/packages/analyze/src/lib/asts/sourceFiles/getImportsAnalysis.js +6 -0
- package/packages/analyze/src/lib/asts/sourceFiles/getImportsAnalysis.js.map +1 -1
- package/packages/analyze/src/lib/asts/sourceFiles/getResolvedModule.js +39 -1
- package/packages/analyze/src/lib/asts/sourceFiles/getResolvedModule.js.map +1 -1
- package/packages/analyze/src/lib/asts/sourceFiles/getSourceFilesForAllImports.js +2 -1
- package/packages/analyze/src/lib/asts/sourceFiles/getSourceFilesForAllImports.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js +65 -7
- package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/analyzeEntities.js +17 -4
- package/packages/analyze/src/lib/files/analyze/analyzeEntities.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/dependencyResolver.js +5 -0
- package/packages/analyze/src/lib/files/analyze/dependencyResolver.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/gatherEntityMap.js +2 -1
- package/packages/analyze/src/lib/files/analyze/gatherEntityMap.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.js +0 -3
- package/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.js.map +1 -1
- package/packages/analyze/src/lib/files/analyzeRemixRoute.js +3 -2
- package/packages/analyze/src/lib/files/analyzeRemixRoute.js.map +1 -1
- package/packages/analyze/src/lib/files/getImportedExports.js +11 -7
- package/packages/analyze/src/lib/files/getImportedExports.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/TransformationTracer.js +880 -0
- package/packages/analyze/src/lib/files/scenarios/TransformationTracer.js.map +1 -0
- package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js +56 -10
- package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js +75 -21
- package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +150 -17
- package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js +56 -8
- package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +478 -54
- package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js.map +1 -1
- package/packages/analyze/src/lib/files/setImportedExports.js +2 -1
- package/packages/analyze/src/lib/files/setImportedExports.js.map +1 -1
- package/packages/analyze/src/lib/index.js +1 -0
- package/packages/analyze/src/lib/index.js.map +1 -1
- package/packages/analyze/src/lib/utils/getFileByPath.js +12 -0
- package/packages/analyze/src/lib/utils/getFileByPath.js.map +1 -0
- 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 +11 -1
- package/packages/database/src/lib/kysely/db.js.map +1 -1
- package/packages/database/src/lib/kysely/tables/commitsTable.js +3 -0
- package/packages/database/src/lib/kysely/tables/commitsTable.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/loadAnalyses.js +45 -2
- package/packages/database/src/lib/loadAnalyses.js.map +1 -1
- package/packages/database/src/lib/loadAnalysis.js +8 -0
- package/packages/database/src/lib/loadAnalysis.js.map +1 -1
- package/packages/database/src/lib/loadBranch.js +11 -1
- package/packages/database/src/lib/loadBranch.js.map +1 -1
- package/packages/database/src/lib/loadCommit.js +7 -0
- package/packages/database/src/lib/loadCommit.js.map +1 -1
- package/packages/database/src/lib/loadCommits.js +22 -1
- package/packages/database/src/lib/loadCommits.js.map +1 -1
- package/packages/database/src/lib/loadEntities.js +23 -4
- package/packages/database/src/lib/loadEntities.js.map +1 -1
- package/packages/database/src/lib/loadEntityBranches.js +9 -0
- package/packages/database/src/lib/loadEntityBranches.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 +5 -4
- package/packages/database/src/lib/updateCommitMetadata.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/EntityItem-BXhEawa3.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/dev.empty-BRb-0kQl.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha._-C2N4Op8e.js +0 -23
- package/codeyam-cli/src/webserver/build/client/assets/files-Cs4MdYtv.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/git-commit-horizontal-CysbcZxi.js +0 -6
- package/codeyam-cli/src/webserver/build/client/assets/globals-DMUaGAqV.css +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/manifest-f874c610.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/root-Bz5TunQg.js +0 -57
- package/codeyam-cli/src/webserver/build/client/assets/rules-hEkvVw2-.js +0 -97
- package/codeyam-cli/src/webserver/build/client/assets/settings-CS5f3WzT.js +0 -1
- package/codeyam-cli/src/webserver/build/server/assets/index-967OuJoF.js +0 -1
- package/codeyam-cli/src/webserver/build/server/assets/server-build-DRTmerg9.js +0 -257
- package/codeyam-cli/templates/codeyam:diagnose.md +0 -650
- package/codeyam-cli/templates/codeyam:new-rule.md +0 -13
- package/codeyam-cli/templates/codeyam:power-rules.md +0 -447
- /package/codeyam-cli/src/webserver/build/client/assets/{api.rules-l0sNRNKZ.js → api.agent-transcripts-l0sNRNKZ.js} +0 -0
|
@@ -101,27 +101,47 @@ export default function enrichArrayTypesFromChildSignatures(
|
|
|
101
101
|
): void => {
|
|
102
102
|
// Group by prop name (e.g., signature[0].survey.id, signature[0].survey.name -> "survey")
|
|
103
103
|
const propGroups: Record<string, Record<string, string>> = {};
|
|
104
|
+
// Also collect direct fields on signature[0] (e.g., signature[0].filePath -> "filePath")
|
|
105
|
+
const directFields: Record<string, string> = {};
|
|
104
106
|
|
|
105
107
|
for (const [path, type] of Object.entries(schema)) {
|
|
106
108
|
// Match signature[0].propName.field or signature[0].propName[].field patterns
|
|
107
109
|
// The (?:\[\])? makes array props optional, handling both:
|
|
108
110
|
// - signature[0].survey.updatedAt (object prop)
|
|
109
111
|
// - signature[0].questionAnswers[].question.questionText (array prop)
|
|
110
|
-
const
|
|
111
|
-
if (
|
|
112
|
-
const [, propName, fieldPath] =
|
|
112
|
+
const nestedMatch = path.match(/^signature\[0\]\.(\w+)(?:\[\])?\.(.+)$/);
|
|
113
|
+
if (nestedMatch) {
|
|
114
|
+
const [, propName, fieldPath] = nestedMatch;
|
|
113
115
|
propGroups[propName] ||= {};
|
|
114
116
|
propGroups[propName][fieldPath] = type;
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// Also match direct fields: signature[0].fieldName (single level, no nested path)
|
|
121
|
+
// This handles cases like TruncatedFilePath where filePath is passed directly
|
|
122
|
+
const directMatch = path.match(/^signature\[0\]\.(\w+)$/);
|
|
123
|
+
if (directMatch) {
|
|
124
|
+
const [, fieldName] = directMatch;
|
|
125
|
+
directFields[fieldName] = type;
|
|
115
126
|
}
|
|
116
127
|
}
|
|
117
128
|
|
|
118
|
-
// Store with the full signature path as key
|
|
129
|
+
// Store nested prop groups with the full signature path as key
|
|
119
130
|
for (const [propName, fields] of Object.entries(propGroups)) {
|
|
120
131
|
if (Object.keys(fields).length > 0) {
|
|
121
132
|
const signaturePath = `${entityName}().signature[0].${propName}`;
|
|
122
133
|
childSignatureFieldsByPath.set(signaturePath, { propName, fields });
|
|
123
134
|
}
|
|
124
135
|
}
|
|
136
|
+
|
|
137
|
+
// Store direct fields with signature[0] as key (for when entire object is passed)
|
|
138
|
+
if (Object.keys(directFields).length > 0) {
|
|
139
|
+
const signaturePath = `${entityName}().signature[0]`;
|
|
140
|
+
childSignatureFieldsByPath.set(signaturePath, {
|
|
141
|
+
propName: '',
|
|
142
|
+
fields: directFields,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
125
145
|
};
|
|
126
146
|
|
|
127
147
|
// Process all schemas in dependencySchemas
|
|
@@ -187,15 +207,20 @@ export default function enrichArrayTypesFromChildSignatures(
|
|
|
187
207
|
for (const { filePath, entityName, arrayPath } of mockedArrayPaths) {
|
|
188
208
|
const schema = dependencySchemas[filePath][entityName].returnValueSchema;
|
|
189
209
|
|
|
190
|
-
// Check if this array already has element type definitions
|
|
210
|
+
// Check if this array already has INDEXED element type definitions (e.g., [0]: null)
|
|
191
211
|
// If so, skip it - it's likely a specialized array like [null] for refs
|
|
212
|
+
// But DON'T skip if it only has general [] element types - those can be enriched
|
|
192
213
|
const elementPathPrefix = `${arrayPath}[`;
|
|
193
|
-
const
|
|
194
|
-
path.startsWith(elementPathPrefix)
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
214
|
+
const hasIndexedElementType = Object.keys(schema).some((path) => {
|
|
215
|
+
if (!path.startsWith(elementPathPrefix)) return false;
|
|
216
|
+
// Check if it's an indexed type like [0], [1], etc. vs general []
|
|
217
|
+
const afterPrefix = path.slice(elementPathPrefix.length);
|
|
218
|
+
// Indexed types start with a digit: [0], [1], etc.
|
|
219
|
+
return /^\d/.test(afterPrefix);
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
if (hasIndexedElementType) {
|
|
223
|
+
// Array already has indexed element type info (e.g., useAutoAnimate()[0]: null)
|
|
199
224
|
// Don't override it with child signature fields
|
|
200
225
|
continue;
|
|
201
226
|
}
|
|
@@ -218,7 +243,17 @@ export default function enrichArrayTypesFromChildSignatures(
|
|
|
218
243
|
|
|
219
244
|
// Check if this local variable could have come from this mocked function
|
|
220
245
|
// Use heuristics: name matching (getSurveys -> surveys, getUsers -> users)
|
|
221
|
-
if
|
|
246
|
+
// Also check if the array path ends with the local variable name
|
|
247
|
+
// e.g., useLoaderData().functionCallReturnValue.entities ends with .entities
|
|
248
|
+
const arrayEndsWithLocalVar = arrayPath.endsWith(`.${localVarName}`);
|
|
249
|
+
// Full-path usageEquivalencies (e.g., from same-file child components) use
|
|
250
|
+
// the complete call path as the local var name, which matches arrayPath exactly
|
|
251
|
+
const exactPathMatch = localVarName === arrayPath;
|
|
252
|
+
if (
|
|
253
|
+
!exactPathMatch &&
|
|
254
|
+
!couldBeDerivedFrom(localVarName, entityName) &&
|
|
255
|
+
!arrayEndsWithLocalVar
|
|
256
|
+
) {
|
|
222
257
|
continue;
|
|
223
258
|
}
|
|
224
259
|
|
|
@@ -257,8 +292,21 @@ export default function enrichArrayTypesFromChildSignatures(
|
|
|
257
292
|
|
|
258
293
|
for (const [fieldPath, type] of Object.entries(matchedFields)) {
|
|
259
294
|
const fullPath = `${elementPath}.${fieldPath}`;
|
|
260
|
-
|
|
295
|
+
const existingType = schema[fullPath];
|
|
296
|
+
if (!existingType) {
|
|
261
297
|
schema[fullPath] = type;
|
|
298
|
+
} else {
|
|
299
|
+
// Prefer the more specific (narrower) type
|
|
300
|
+
const existingIsOptional =
|
|
301
|
+
existingType.includes('| undefined') ||
|
|
302
|
+
existingType.includes('| null');
|
|
303
|
+
const newIsOptional =
|
|
304
|
+
type.includes('| undefined') || type.includes('| null');
|
|
305
|
+
if (existingIsOptional && !newIsOptional) {
|
|
306
|
+
// Use the new type - it's more specific
|
|
307
|
+
schema[fullPath] = type;
|
|
308
|
+
}
|
|
309
|
+
// Otherwise keep existing (same specificity or existing is more specific)
|
|
262
310
|
}
|
|
263
311
|
}
|
|
264
312
|
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
convertDotNotation,
|
|
3
3
|
fillInDirectSchemaGapsAndUnknowns,
|
|
4
|
+
buildSchemaIndexes,
|
|
5
|
+
type SchemaIndexes,
|
|
4
6
|
joinParenthesesAndArrays,
|
|
5
7
|
mergeJsonTypeDefinitions,
|
|
6
8
|
splitOutsideParenthesesAndArrays,
|
|
@@ -165,6 +167,7 @@ function processCall(
|
|
|
165
167
|
variableNameOccurrence: number | undefined,
|
|
166
168
|
options: GatherDataForMocksOptions | undefined,
|
|
167
169
|
hookCallIndex: number,
|
|
170
|
+
prebuiltIndexes?: SchemaIndexes,
|
|
168
171
|
): { key: string; value: JsonTypeDefinition } | null {
|
|
169
172
|
const callName = importedExport.calls?.[callIndex] ?? importedExport.name;
|
|
170
173
|
|
|
@@ -350,8 +353,6 @@ function processCall(
|
|
|
350
353
|
// Preprocess to filter signatures and extract functionCallReturnValue
|
|
351
354
|
let preprocessedSchema = preprocessSchemaForMocks(mergedSchema);
|
|
352
355
|
|
|
353
|
-
const functionNames: string[] = [];
|
|
354
|
-
|
|
355
356
|
const isFunctionNameWithoutFunction = (
|
|
356
357
|
path: string,
|
|
357
358
|
functionName: string,
|
|
@@ -436,35 +437,63 @@ function processCall(
|
|
|
436
437
|
}
|
|
437
438
|
}
|
|
438
439
|
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
}
|
|
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
|
+
}
|
|
454
454
|
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
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
|
+
}
|
|
458
469
|
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
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
|
+
}
|
|
464
492
|
|
|
465
493
|
const filledSchema = fillInDirectSchemaGapsAndUnknowns({
|
|
466
494
|
scopeName: importedExport.name,
|
|
467
495
|
schema: relevantMergedDependencySchema,
|
|
496
|
+
prebuiltIndexes,
|
|
468
497
|
});
|
|
469
498
|
|
|
470
499
|
const schema = convertDotNotation(filledSchema);
|
|
@@ -568,6 +597,33 @@ export default function gatherDataForMocks(
|
|
|
568
597
|
dependencySchemas: DataStructure['dependencySchemas'],
|
|
569
598
|
options?: GatherDataForMocksOptions,
|
|
570
599
|
) {
|
|
600
|
+
// Build schema indexes ONCE from all dependency schemas combined.
|
|
601
|
+
// This avoids rebuilding indexes (~1-2 seconds for 18k keys) for each processCall.
|
|
602
|
+
//
|
|
603
|
+
// IMPORTANT: We must preprocess schemas BEFORE building indexes!
|
|
604
|
+
// The schemas contain .functionCallReturnValue paths that get stripped during processing.
|
|
605
|
+
// If we build indexes from original paths, lookups with preprocessed paths will fail.
|
|
606
|
+
// Example: 'hook().functionCallReturnValue.x.length' → index maps 'hook().functionCallReturnValue.x' → ['length']
|
|
607
|
+
// But preprocessed path 'hook().x.length' looks for 'hook().x' which doesn't exist in the index.
|
|
608
|
+
const allSchemaKeys: Record<string, string> = {};
|
|
609
|
+
if (dependencySchemas) {
|
|
610
|
+
for (const filePath in dependencySchemas) {
|
|
611
|
+
for (const entityName in dependencySchemas[filePath]) {
|
|
612
|
+
const schema =
|
|
613
|
+
dependencySchemas[filePath][entityName]?.returnValueSchema;
|
|
614
|
+
if (schema) {
|
|
615
|
+
// Preprocess each schema to remove .functionCallReturnValue before collecting
|
|
616
|
+
const preprocessed = preprocessSchemaForMocks(schema);
|
|
617
|
+
Object.assign(allSchemaKeys, preprocessed);
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
const prebuiltIndexes =
|
|
623
|
+
Object.keys(allSchemaKeys).length > 0
|
|
624
|
+
? buildSchemaIndexes(allSchemaKeys)
|
|
625
|
+
: undefined;
|
|
626
|
+
|
|
571
627
|
// Track the global index for each hook name across all imports
|
|
572
628
|
// This enables canonical keys like EntityName::useLoaderData::0, EntityName::useFetcher::0, etc.
|
|
573
629
|
const hookCallIndices: Record<string, number> = {};
|
|
@@ -653,6 +709,7 @@ export default function gatherDataForMocks(
|
|
|
653
709
|
undefined,
|
|
654
710
|
options,
|
|
655
711
|
hookCallIndex,
|
|
712
|
+
prebuiltIndexes,
|
|
656
713
|
);
|
|
657
714
|
|
|
658
715
|
if (processResult) {
|
|
@@ -717,6 +774,7 @@ export default function gatherDataForMocks(
|
|
|
717
774
|
occurrence,
|
|
718
775
|
options,
|
|
719
776
|
hookCallIndex,
|
|
777
|
+
prebuiltIndexes,
|
|
720
778
|
);
|
|
721
779
|
if (processResult) {
|
|
722
780
|
addResultToAccumulator(acc, processResult.key, processResult.value);
|
|
@@ -749,6 +807,7 @@ export default function gatherDataForMocks(
|
|
|
749
807
|
undefined,
|
|
750
808
|
options,
|
|
751
809
|
hookCallIndex,
|
|
810
|
+
prebuiltIndexes,
|
|
752
811
|
);
|
|
753
812
|
|
|
754
813
|
if (processResult) {
|
|
@@ -769,6 +828,7 @@ export default function gatherDataForMocks(
|
|
|
769
828
|
undefined,
|
|
770
829
|
options,
|
|
771
830
|
hookCallIndex,
|
|
831
|
+
prebuiltIndexes,
|
|
772
832
|
);
|
|
773
833
|
|
|
774
834
|
// Check if we got a meaningful result (not empty object or null)
|
|
@@ -813,6 +873,7 @@ export default function gatherDataForMocks(
|
|
|
813
873
|
0, // Use 0 to trigger variable-qualified lookup
|
|
814
874
|
options,
|
|
815
875
|
hookCallIndex,
|
|
876
|
+
prebuiltIndexes,
|
|
816
877
|
);
|
|
817
878
|
if (varQualifiedResult && varQualifiedResult.value) {
|
|
818
879
|
mergedValue = mergeJsonTypeDefinitions(
|
|
@@ -849,6 +910,7 @@ export default function gatherDataForMocks(
|
|
|
849
910
|
0, // Use 0 to trigger variable-qualified lookup
|
|
850
911
|
options,
|
|
851
912
|
hookCallIndex,
|
|
913
|
+
prebuiltIndexes,
|
|
852
914
|
);
|
|
853
915
|
if (varQualifiedResult && varQualifiedResult.value) {
|
|
854
916
|
// Deep merge the value into the accumulated result
|
|
@@ -16,6 +16,8 @@ import { awsLog } from '~codeyam/utils';
|
|
|
16
16
|
import gatherDataForMocks from './gatherDataForMocks';
|
|
17
17
|
import enrichArrayTypesFromChildSignatures from './enrichArrayTypesFromChildSignatures';
|
|
18
18
|
import enrichUnknownTypesFromSourceEquivalencies from './enrichUnknownTypesFromSourceEquivalencies';
|
|
19
|
+
import { transformationTracer } from './TransformationTracer';
|
|
20
|
+
// import propagateArrayItemSchemas from './propagateArrayItemSchemas';
|
|
19
21
|
export interface GenerateDataStructureArgs {
|
|
20
22
|
entity: Entity;
|
|
21
23
|
dependentAnalyses: ReadonlyAnalysisMap;
|
|
@@ -162,6 +164,25 @@ export default function generateDataStructure({
|
|
|
162
164
|
return acc;
|
|
163
165
|
}, {} as ReadonlyAnalysisMap);
|
|
164
166
|
|
|
167
|
+
// Include same-file child components in nonMockedDependentAnalyses.
|
|
168
|
+
// Same-file components (e.g., AgentCard defined in the same file as AgentTranscriptsPage)
|
|
169
|
+
// are NOT in importedExports, so the reduce above never includes them.
|
|
170
|
+
// But they ARE in dependentAnalyses and their full signatureSchema (with all prop fields)
|
|
171
|
+
// needs to be merged into the parent's dependencySchemas for array enrichment to work.
|
|
172
|
+
|
|
173
|
+
const sameFileAnalyses = dependentAnalyses[entity.filePath];
|
|
174
|
+
if (sameFileAnalyses) {
|
|
175
|
+
for (const name in sameFileAnalyses) {
|
|
176
|
+
if (name === entity.name) continue;
|
|
177
|
+
if (nonMockedDependentAnalyses[entity.filePath]?.[name]) continue;
|
|
178
|
+
const childAnalysis = sameFileAnalyses[name];
|
|
179
|
+
if (childAnalysis?.entityType === 'visual') {
|
|
180
|
+
nonMockedDependentAnalyses[entity.filePath] ||= {};
|
|
181
|
+
nonMockedDependentAnalyses[entity.filePath][name] = childAnalysis;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
165
186
|
// For non-mocked child components (like visual components), include their mocked
|
|
166
187
|
// dependencies in allImportedExports. This ensures that when a parent component
|
|
167
188
|
// renders a child that uses the same hook with different destructure patterns,
|
|
@@ -440,6 +461,18 @@ export default function generateDataStructure({
|
|
|
440
461
|
|
|
441
462
|
const { isolatedDataStructure } = entity.metadata;
|
|
442
463
|
|
|
464
|
+
// Transformation tracing: start entity and capture isolated data structure
|
|
465
|
+
transformationTracer.startEntity({
|
|
466
|
+
name: entity.name,
|
|
467
|
+
entityType: entity.entityType,
|
|
468
|
+
filePath: entity.filePath,
|
|
469
|
+
});
|
|
470
|
+
transformationTracer.snapshot(entity.name, 'isolated', {
|
|
471
|
+
signatureSchema: isolatedDataStructure.signatureSchema,
|
|
472
|
+
returnValueSchema: isolatedDataStructure.returnValueSchema,
|
|
473
|
+
dependencySchemas: isolatedDataStructure.dependencySchemas,
|
|
474
|
+
});
|
|
475
|
+
|
|
443
476
|
const mergedDataStructure = mergeInDependentDataStructure({
|
|
444
477
|
importedExports: allImportedExports,
|
|
445
478
|
dependentAnalyses: nonMockedDependentAnalyses,
|
|
@@ -457,6 +490,13 @@ export default function generateDataStructure({
|
|
|
457
490
|
mergedDataStructure.environmentVariables =
|
|
458
491
|
isolatedDataStructure.environmentVariables || [];
|
|
459
492
|
|
|
493
|
+
// Transformation tracing: capture merged data structure
|
|
494
|
+
transformationTracer.snapshot(entity.name, 'merged', {
|
|
495
|
+
signatureSchema: mergedDataStructure.signatureSchema,
|
|
496
|
+
returnValueSchema: mergedDataStructure.returnValueSchema,
|
|
497
|
+
dependencySchemas: mergedDataStructure.dependencySchemas,
|
|
498
|
+
});
|
|
499
|
+
|
|
460
500
|
// Merge collected child dependency schemas into mergedDataStructure.
|
|
461
501
|
// This ensures that when gatherDataForMocks looks up schemas for child imports,
|
|
462
502
|
// the child's schemas are available.
|
|
@@ -469,11 +509,34 @@ export default function generateDataStructure({
|
|
|
469
509
|
|
|
470
510
|
if (existingSchema) {
|
|
471
511
|
// Merge schemas - child schemas add to parent schemas
|
|
512
|
+
// But prefer more specific types (without | undefined) when both exist
|
|
513
|
+
const mergedSignatureSchema = { ...existingSchema.signatureSchema };
|
|
514
|
+
for (const path in childSchema.signatureSchema) {
|
|
515
|
+
const existingType = mergedSignatureSchema[path];
|
|
516
|
+
const childType = childSchema.signatureSchema[path];
|
|
517
|
+
if (!existingType) {
|
|
518
|
+
mergedSignatureSchema[path] = childType;
|
|
519
|
+
} else {
|
|
520
|
+
// Prefer the more specific (narrower) type
|
|
521
|
+
const existingIsOptional =
|
|
522
|
+
existingType.includes('| undefined') ||
|
|
523
|
+
existingType.includes('| null');
|
|
524
|
+
const childIsOptional =
|
|
525
|
+
childType.includes('| undefined') ||
|
|
526
|
+
childType.includes('| null');
|
|
527
|
+
if (childIsOptional && !existingIsOptional) {
|
|
528
|
+
// Keep existing - it's more specific
|
|
529
|
+
} else if (!childIsOptional && existingIsOptional) {
|
|
530
|
+
// Use child - it's more specific
|
|
531
|
+
mergedSignatureSchema[path] = childType;
|
|
532
|
+
} else {
|
|
533
|
+
// Same specificity - use child (original behavior)
|
|
534
|
+
mergedSignatureSchema[path] = childType;
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
}
|
|
472
538
|
mergedDataStructure.dependencySchemas[schemaFilePath][schemaName] = {
|
|
473
|
-
signatureSchema:
|
|
474
|
-
...existingSchema.signatureSchema,
|
|
475
|
-
...childSchema.signatureSchema,
|
|
476
|
-
},
|
|
539
|
+
signatureSchema: mergedSignatureSchema,
|
|
477
540
|
returnValueSchema: mergeJsonTypeDefinitions(
|
|
478
541
|
existingSchema.returnValueSchema as Record<string, unknown>,
|
|
479
542
|
childSchema.returnValueSchema as Record<string, unknown>,
|
|
@@ -487,6 +550,13 @@ export default function generateDataStructure({
|
|
|
487
550
|
}
|
|
488
551
|
}
|
|
489
552
|
|
|
553
|
+
// Transformation tracing: capture after child schemas merged
|
|
554
|
+
transformationTracer.snapshot(entity.name, 'childSchemasMerged', {
|
|
555
|
+
signatureSchema: mergedDataStructure.signatureSchema,
|
|
556
|
+
returnValueSchema: mergedDataStructure.returnValueSchema,
|
|
557
|
+
dependencySchemas: mergedDataStructure.dependencySchemas,
|
|
558
|
+
});
|
|
559
|
+
|
|
490
560
|
// console.info(
|
|
491
561
|
// 'CODEYAM DEBUG: end merge',
|
|
492
562
|
// JSON.stringify(
|
|
@@ -509,32 +579,111 @@ export default function generateDataStructure({
|
|
|
509
579
|
|
|
510
580
|
// Deduplicate function schemas in the merged data structure
|
|
511
581
|
// The merge process might introduce duplicates even if individual schemas were clean
|
|
582
|
+
// Trace deduplication of signatureSchema
|
|
583
|
+
const sigBefore = { ...mergedDataStructure.signatureSchema };
|
|
512
584
|
mergedDataStructure.signatureSchema = deduplicateFunctionSchemas(
|
|
513
585
|
mergedDataStructure.signatureSchema,
|
|
514
586
|
);
|
|
587
|
+
transformationTracer.traceSchemaTransformResult(
|
|
588
|
+
entity.name,
|
|
589
|
+
'deduplicateFunctionSchemas',
|
|
590
|
+
sigBefore,
|
|
591
|
+
mergedDataStructure.signatureSchema,
|
|
592
|
+
{ schemaType: 'signature' },
|
|
593
|
+
);
|
|
594
|
+
|
|
595
|
+
// Trace deduplication of returnValueSchema
|
|
596
|
+
const rvBefore = { ...mergedDataStructure.returnValueSchema };
|
|
515
597
|
mergedDataStructure.returnValueSchema = deduplicateFunctionSchemas(
|
|
516
598
|
mergedDataStructure.returnValueSchema,
|
|
517
599
|
);
|
|
600
|
+
transformationTracer.traceSchemaTransformResult(
|
|
601
|
+
entity.name,
|
|
602
|
+
'deduplicateFunctionSchemas',
|
|
603
|
+
rvBefore,
|
|
604
|
+
mergedDataStructure.returnValueSchema,
|
|
605
|
+
{ schemaType: 'returnValue' },
|
|
606
|
+
);
|
|
518
607
|
|
|
519
|
-
// Also deduplicate dependency schemas
|
|
608
|
+
// Also deduplicate dependency schemas and clear known attributes
|
|
520
609
|
for (const filePath in mergedDataStructure.dependencySchemas) {
|
|
521
|
-
for (const
|
|
610
|
+
for (const depEntityName in mergedDataStructure.dependencySchemas[
|
|
522
611
|
filePath
|
|
523
612
|
]) {
|
|
524
613
|
const depSchema =
|
|
525
|
-
mergedDataStructure.dependencySchemas[filePath][
|
|
614
|
+
mergedDataStructure.dependencySchemas[filePath][depEntityName];
|
|
615
|
+
|
|
616
|
+
// Trace deduplication of dependency signatureSchema
|
|
617
|
+
const depSigBefore = { ...depSchema.signatureSchema };
|
|
526
618
|
depSchema.signatureSchema = deduplicateFunctionSchemas(
|
|
527
619
|
depSchema.signatureSchema,
|
|
528
620
|
);
|
|
621
|
+
transformationTracer.traceSchemaTransformResult(
|
|
622
|
+
entity.name,
|
|
623
|
+
'deduplicateFunctionSchemas',
|
|
624
|
+
depSigBefore,
|
|
625
|
+
depSchema.signatureSchema,
|
|
626
|
+
{ filePath, dependencyName: depEntityName, schemaType: 'signature' },
|
|
627
|
+
);
|
|
628
|
+
|
|
629
|
+
// Trace deduplication of dependency returnValueSchema
|
|
630
|
+
const depRvBefore = { ...depSchema.returnValueSchema };
|
|
529
631
|
depSchema.returnValueSchema = deduplicateFunctionSchemas(
|
|
530
632
|
depSchema.returnValueSchema,
|
|
531
633
|
);
|
|
634
|
+
transformationTracer.traceSchemaTransformResult(
|
|
635
|
+
entity.name,
|
|
636
|
+
'deduplicateFunctionSchemas',
|
|
637
|
+
depRvBefore,
|
|
638
|
+
depSchema.returnValueSchema,
|
|
639
|
+
{
|
|
640
|
+
filePath,
|
|
641
|
+
dependencyName: depEntityName,
|
|
642
|
+
schemaType: 'returnValue',
|
|
643
|
+
},
|
|
644
|
+
);
|
|
532
645
|
|
|
533
|
-
|
|
534
|
-
|
|
646
|
+
// Fill in type gaps BEFORE clearing attributes, so evidence like .includes()
|
|
647
|
+
// is used for type inference before being deleted
|
|
648
|
+
|
|
649
|
+
depSchema.signatureSchema = fillInDirectSchemaGapsAndUnknowns({
|
|
650
|
+
schema: depSchema.signatureSchema,
|
|
651
|
+
});
|
|
652
|
+
|
|
653
|
+
depSchema.returnValueSchema = fillInDirectSchemaGapsAndUnknowns({
|
|
654
|
+
schema: depSchema.returnValueSchema,
|
|
655
|
+
});
|
|
656
|
+
|
|
657
|
+
// Trace clearAttributesFromMapping on dependency schemas
|
|
658
|
+
transformationTracer.traceSchemaTransform(
|
|
659
|
+
entity.name,
|
|
660
|
+
'clearAttributesFromMapping',
|
|
661
|
+
depSchema.signatureSchema,
|
|
662
|
+
clearAttributesFromMapping,
|
|
663
|
+
{ filePath, dependencyName: depEntityName, schemaType: 'signature' },
|
|
664
|
+
);
|
|
665
|
+
|
|
666
|
+
transformationTracer.traceSchemaTransform(
|
|
667
|
+
entity.name,
|
|
668
|
+
'clearAttributesFromMapping',
|
|
669
|
+
depSchema.returnValueSchema,
|
|
670
|
+
clearAttributesFromMapping,
|
|
671
|
+
{
|
|
672
|
+
filePath,
|
|
673
|
+
dependencyName: depEntityName,
|
|
674
|
+
schemaType: 'returnValue',
|
|
675
|
+
},
|
|
676
|
+
);
|
|
535
677
|
}
|
|
536
678
|
}
|
|
537
679
|
|
|
680
|
+
// Transformation tracing: capture after deduplication
|
|
681
|
+
transformationTracer.snapshot(entity.name, 'deduplicated', {
|
|
682
|
+
signatureSchema: mergedDataStructure.signatureSchema,
|
|
683
|
+
returnValueSchema: mergedDataStructure.returnValueSchema,
|
|
684
|
+
dependencySchemas: mergedDataStructure.dependencySchemas,
|
|
685
|
+
});
|
|
686
|
+
|
|
538
687
|
analysis.metadata ||= {};
|
|
539
688
|
analysis.metadata.mergedDataStructure = mergedDataStructure;
|
|
540
689
|
|
|
@@ -543,29 +692,70 @@ export default function generateDataStructure({
|
|
|
543
692
|
// expects survey.updatedAt, the array element type includes updatedAt.
|
|
544
693
|
// Uses usageEquivalencies to trace data flow and only enrich arrays with fields
|
|
545
694
|
// from children that actually receive elements from that specific array.
|
|
546
|
-
|
|
547
|
-
|
|
695
|
+
transformationTracer.traceDependencySchemaChanges(
|
|
696
|
+
entity.name,
|
|
697
|
+
'enrichArrayTypesFromChildSignatures',
|
|
548
698
|
mergedDataStructure.dependencySchemas,
|
|
549
|
-
|
|
699
|
+
() =>
|
|
700
|
+
enrichArrayTypesFromChildSignatures(
|
|
701
|
+
allImportedExports,
|
|
702
|
+
mergedDataStructure.dependencySchemas,
|
|
703
|
+
mergedDataStructure.usageEquivalencies,
|
|
704
|
+
),
|
|
550
705
|
);
|
|
551
706
|
|
|
707
|
+
// Transformation tracing: capture after array types enriched
|
|
708
|
+
transformationTracer.snapshot(entity.name, 'arrayTypesEnriched', {
|
|
709
|
+
signatureSchema: mergedDataStructure.signatureSchema,
|
|
710
|
+
returnValueSchema: mergedDataStructure.returnValueSchema,
|
|
711
|
+
dependencySchemas: mergedDataStructure.dependencySchemas,
|
|
712
|
+
});
|
|
713
|
+
|
|
552
714
|
// Enrich mocked dependency unknown types using sourceEquivalencies
|
|
553
715
|
// When a mocked dependency returns unknown, but that data flows to a child component
|
|
554
716
|
// with a known type, propagate the type back to the mocked dependency.
|
|
555
717
|
// This prevents fillInDirectSchemaGapsAndUnknowns from guessing incorrectly
|
|
556
718
|
// (e.g., 'data' becoming 'number' because pluralize thinks it's plural)
|
|
557
|
-
|
|
558
|
-
|
|
719
|
+
transformationTracer.traceDependencySchemaChanges(
|
|
720
|
+
entity.name,
|
|
721
|
+
'enrichUnknownTypesFromSourceEquivalencies',
|
|
559
722
|
mergedDataStructure.dependencySchemas,
|
|
560
|
-
|
|
723
|
+
() =>
|
|
724
|
+
enrichUnknownTypesFromSourceEquivalencies(
|
|
725
|
+
isolatedDataStructure.dependencySchemas || {},
|
|
726
|
+
mergedDataStructure.dependencySchemas,
|
|
727
|
+
allImportedExports,
|
|
728
|
+
),
|
|
561
729
|
);
|
|
562
730
|
|
|
731
|
+
// Transformation tracing: capture after unknown types enriched
|
|
732
|
+
transformationTracer.snapshot(entity.name, 'unknownTypesEnriched', {
|
|
733
|
+
signatureSchema: mergedDataStructure.signatureSchema,
|
|
734
|
+
returnValueSchema: mergedDataStructure.returnValueSchema,
|
|
735
|
+
dependencySchemas: mergedDataStructure.dependencySchemas,
|
|
736
|
+
});
|
|
737
|
+
|
|
738
|
+
// DISABLED: Testing if ternary fix eliminates the need for this heuristic
|
|
739
|
+
// Propagate array item schemas between arrays that likely have the same type.
|
|
740
|
+
// When one array (e.g., entities) has item schema traced but another similar array
|
|
741
|
+
// (e.g., currentEntities) doesn't (because it's only used in an OR expression fallback),
|
|
742
|
+
// copy the item schema from the rich array to the empty one.
|
|
743
|
+
// propagateArrayItemSchemas(mergedDataStructure.dependencySchemas);
|
|
744
|
+
|
|
563
745
|
let dataForMocks = gatherDataForMocks(
|
|
564
746
|
allImportedExports,
|
|
565
747
|
mergedDataStructure.dependencySchemas,
|
|
566
748
|
{ entityName: entity.name },
|
|
567
749
|
);
|
|
568
750
|
|
|
751
|
+
// Transformation tracing: capture after dataForMocks gathered
|
|
752
|
+
transformationTracer.snapshot(entity.name, 'dataForMocksGathered', {
|
|
753
|
+
signatureSchema: mergedDataStructure.signatureSchema,
|
|
754
|
+
returnValueSchema: mergedDataStructure.returnValueSchema,
|
|
755
|
+
dependencySchemas: mergedDataStructure.dependencySchemas,
|
|
756
|
+
dataForMocks,
|
|
757
|
+
});
|
|
758
|
+
|
|
569
759
|
// Merge dataForMocks from non-mocked child analyses to include transitive dependency data.
|
|
570
760
|
// This handles cases where grandchild trpc calls aren't in allImportedExports because
|
|
571
761
|
// the grandchild's analysis wasn't in dependentAnalyses.
|
|
@@ -587,11 +777,25 @@ export default function generateDataStructure({
|
|
|
587
777
|
}
|
|
588
778
|
}
|
|
589
779
|
|
|
590
|
-
const finalizedArgumentsSchema =
|
|
591
|
-
schema: { ...mergedDataStructure.signatureSchema },
|
|
592
|
-
});
|
|
780
|
+
const finalizedArgumentsSchema = { ...mergedDataStructure.signatureSchema };
|
|
593
781
|
|
|
594
|
-
|
|
782
|
+
// Trace fillInDirectSchemaGapsAndUnknowns
|
|
783
|
+
transformationTracer.traceSchemaTransform(
|
|
784
|
+
entity.name,
|
|
785
|
+
'fillInDirectSchemaGapsAndUnknowns',
|
|
786
|
+
finalizedArgumentsSchema,
|
|
787
|
+
(schema) => fillInDirectSchemaGapsAndUnknowns({ schema }),
|
|
788
|
+
{ stage: 'finalization' },
|
|
789
|
+
);
|
|
790
|
+
|
|
791
|
+
// Trace clearAttributesFromMapping
|
|
792
|
+
transformationTracer.traceSchemaTransform(
|
|
793
|
+
entity.name,
|
|
794
|
+
'clearAttributesFromMapping',
|
|
795
|
+
finalizedArgumentsSchema,
|
|
796
|
+
clearAttributesFromMapping,
|
|
797
|
+
{ stage: 'finalization' },
|
|
798
|
+
);
|
|
595
799
|
|
|
596
800
|
const argumentsSchema = convertDotNotation(finalizedArgumentsSchema)
|
|
597
801
|
.signature as JsonTypeDefinition[];
|
|
@@ -601,6 +805,12 @@ export default function generateDataStructure({
|
|
|
601
805
|
dataForMocks,
|
|
602
806
|
};
|
|
603
807
|
|
|
808
|
+
// Transformation tracing: capture final scenariosDataStructure
|
|
809
|
+
transformationTracer.snapshot(entity.name, 'finalized', {
|
|
810
|
+
signatureSchema: finalizedArgumentsSchema,
|
|
811
|
+
dataForMocks,
|
|
812
|
+
});
|
|
813
|
+
|
|
604
814
|
return analysis;
|
|
605
815
|
} catch (e) {
|
|
606
816
|
awsLog('CodeYam Error: Error generating data structure', {
|