@codeyam/codeyam-cli 0.1.0-staging.1669d45 → 0.1.0-staging.2a88920
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 +8 -8
- package/analyzer-template/log.txt +3 -3
- package/analyzer-template/package.json +5 -5
- package/analyzer-template/packages/ai/index.ts +15 -2
- package/analyzer-template/packages/ai/src/lib/analyzeScope.ts +87 -51
- package/analyzer-template/packages/ai/src/lib/astScopes/arrayDerivationDetector.ts +199 -0
- package/analyzer-template/packages/ai/src/lib/astScopes/astScopeAnalyzer.ts +98 -9
- package/analyzer-template/packages/ai/src/lib/astScopes/methodSemantics.ts +139 -23
- package/analyzer-template/packages/ai/src/lib/astScopes/patterns/variableDeclarationHandler.ts +6 -126
- package/analyzer-template/packages/ai/src/lib/astScopes/processExpression.ts +555 -28
- package/analyzer-template/packages/ai/src/lib/astScopes/types.ts +88 -7
- package/analyzer-template/packages/ai/src/lib/completionCall.ts +198 -34
- package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +772 -243
- package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.ts +205 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.ts +10 -2
- 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 +43 -1
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.ts +122 -15
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertTypeAnnotationsToValues.ts +160 -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 +319 -88
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/fixNullIdsBySchema.ts +129 -0
- package/analyzer-template/packages/ai/src/lib/dataStructureChunking.ts +156 -0
- package/analyzer-template/packages/ai/src/lib/e2eDataTracking.ts +334 -0
- package/analyzer-template/packages/ai/src/lib/extractCriticalDataKeys.ts +120 -0
- package/analyzer-template/packages/ai/src/lib/generateEntityScenarioData.ts +642 -7
- package/analyzer-template/packages/ai/src/lib/generateEntityScenarios.ts +35 -6
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlows.ts +383 -6
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionalEffects.ts +1 -1
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionals.ts +1299 -51
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromJsxUsages.ts +239 -0
- package/analyzer-template/packages/ai/src/lib/mergeStatements.ts +90 -96
- package/analyzer-template/packages/ai/src/lib/promptGenerators/gatherAttributesMap.ts +10 -7
- package/analyzer-template/packages/ai/src/lib/promptGenerators/generateChunkPrompt.ts +82 -0
- package/analyzer-template/packages/ai/src/lib/promptGenerators/generateCriticalKeysPrompt.ts +103 -0
- package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.ts +23 -6
- package/analyzer-template/packages/ai/src/lib/promptGenerators/simplifyKeysForLLM.ts +391 -0
- package/analyzer-template/packages/ai/src/lib/resolvePathToControllable.ts +179 -45
- package/analyzer-template/packages/ai/src/lib/worker/SerializableDataStructure.ts +26 -4
- package/analyzer-template/packages/ai/src/lib/worker/analyzeScopeWorker.ts +114 -2
- 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/analysisContext.ts +44 -4
- 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 +30 -19
- package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities.ts +14 -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 +33 -10
- 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/enrichArrayTypesFromChildSignatures.ts +189 -76
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.ts +29 -0
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +77 -9
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.ts +118 -10
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +276 -17
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeValidatedDataStructures.ts +56 -11
- 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/utils/getFileByPath.ts +19 -0
- package/analyzer-template/packages/aws/package.json +2 -2
- package/analyzer-template/packages/database/src/lib/kysely/db.ts +8 -1
- package/analyzer-template/packages/database/src/lib/kysely/tables/commitsTable.ts +6 -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/updateCommitMetadata.ts +7 -14
- 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 +8 -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/analysesTable.d.ts.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/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/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/index.d.ts +1 -1
- package/analyzer-template/packages/github/dist/types/index.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/types/index.js.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/types/Analysis.d.ts +25 -1
- package/analyzer-template/packages/github/dist/types/src/types/Analysis.d.ts.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/ScenariosDataStructure.d.ts +56 -6
- 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/dist/utils/src/lib/safeFileName.d.ts +9 -1
- package/analyzer-template/packages/github/dist/utils/src/lib/safeFileName.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/utils/src/lib/safeFileName.js +29 -3
- package/analyzer-template/packages/github/dist/utils/src/lib/safeFileName.js.map +1 -1
- package/analyzer-template/packages/github/package.json +1 -1
- package/analyzer-template/packages/types/index.ts +1 -0
- package/analyzer-template/packages/types/src/types/Analysis.ts +25 -0
- package/analyzer-template/packages/types/src/types/Commit.ts +2 -0
- package/analyzer-template/packages/types/src/types/ScenariosDataStructure.ts +70 -6
- package/analyzer-template/packages/types/src/types/ScopeAnalysis.ts +6 -1
- package/analyzer-template/packages/utils/dist/types/index.d.ts +1 -1
- package/analyzer-template/packages/utils/dist/types/index.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/types/index.js.map +1 -1
- package/analyzer-template/packages/utils/dist/types/src/types/Analysis.d.ts +25 -1
- package/analyzer-template/packages/utils/dist/types/src/types/Analysis.d.ts.map +1 -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/ScenariosDataStructure.d.ts +56 -6
- 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/safeFileName.d.ts +9 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/safeFileName.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/safeFileName.js +29 -3
- package/analyzer-template/packages/utils/dist/utils/src/lib/safeFileName.js.map +1 -1
- package/analyzer-template/packages/utils/src/lib/safeFileName.ts +48 -3
- 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 +367 -37
- 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 +18 -7
- package/analyzer-template/project/orchestrateCapture/taskRunner.ts +4 -2
- package/analyzer-template/project/orchestrateCapture.ts +71 -6
- package/analyzer-template/project/reconcileMockDataKeys.ts +152 -9
- package/analyzer-template/project/runAnalysis.ts +4 -0
- package/analyzer-template/project/start.ts +35 -11
- package/analyzer-template/project/writeMockDataTsx.ts +127 -4
- package/analyzer-template/project/writeScenarioComponents.ts +101 -8
- package/analyzer-template/scripts/comboWorkerLoop.cjs +98 -50
- 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 +300 -7
- 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 +7 -5
- package/background/src/lib/virtualized/project/orchestrateCapture/SequentialCaptureTaskRunner.js.map +1 -1
- package/background/src/lib/virtualized/project/orchestrateCapture.js +58 -6
- package/background/src/lib/virtualized/project/orchestrateCapture.js.map +1 -1
- package/background/src/lib/virtualized/project/reconcileMockDataKeys.js +126 -9
- package/background/src/lib/virtualized/project/reconcileMockDataKeys.js.map +1 -1
- package/background/src/lib/virtualized/project/runAnalysis.js +3 -0
- package/background/src/lib/virtualized/project/runAnalysis.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 +101 -4
- package/background/src/lib/virtualized/project/writeMockDataTsx.js.map +1 -1
- package/background/src/lib/virtualized/project/writeScenarioComponents.js +57 -8
- package/background/src/lib/virtualized/project/writeScenarioComponents.js.map +1 -1
- package/codeyam-cli/src/cli.js +2 -0
- package/codeyam-cli/src/cli.js.map +1 -1
- package/codeyam-cli/src/commands/debug.js +7 -5
- package/codeyam-cli/src/commands/debug.js.map +1 -1
- package/codeyam-cli/src/commands/memory.js +273 -0
- package/codeyam-cli/src/commands/memory.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +4 -0
- 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/install-skills.js +42 -6
- package/codeyam-cli/src/utils/install-skills.js.map +1 -1
- package/codeyam-cli/src/utils/queue/job.js +1 -0
- package/codeyam-cli/src/utils/queue/job.js.map +1 -1
- package/codeyam-cli/src/utils/queue/manager.js +6 -0
- package/codeyam-cli/src/utils/queue/manager.js.map +1 -1
- package/codeyam-cli/src/utils/rules/index.js +5 -0
- package/codeyam-cli/src/utils/rules/index.js.map +1 -0
- package/codeyam-cli/src/utils/rules/parser.js +106 -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/staleness.js +132 -0
- package/codeyam-cli/src/utils/rules/staleness.js.map +1 -0
- package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +2 -0
- package/codeyam-cli/src/utils/setupClaudeCodeSettings.js.map +1 -1
- package/codeyam-cli/src/webserver/app/lib/database.js +7 -3
- package/codeyam-cli/src/webserver/app/lib/database.js.map +1 -1
- package/codeyam-cli/src/webserver/bootstrap.js +40 -0
- package/codeyam-cli/src/webserver/bootstrap.js.map +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/EntityItem-DsN1wKrm.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeBadge-COi5OvsN.js → EntityTypeBadge-DLqD3qNt.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeIcon-BwdQv49w.js → EntityTypeIcon-Ba2JVPzP.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{InlineSpinner-CEleMv_j.js → InlineSpinner-C8lyxW9k.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{InteractivePreview-D68KarMg.js → InteractivePreview-aht4aafF.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/{LibraryFunctionPreview-L75Wvqgw.js → LibraryFunctionPreview-CVtiBnY5.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{LoadingDots-C53WM8qn.js → LoadingDots-B0GLXMsr.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-CrNkmy4i.js → LogViewer-xgeCVgSM.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/ReportIssueModal-OApQuNyq.js +16 -0
- package/codeyam-cli/src/webserver/build/client/assets/{SafeScreenshot-CQifa1n-.js → SafeScreenshot-DuDvi0jm.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-CyaBFX7l.js → ScenarioViewer-DzccYyI8.js} +3 -13
- package/codeyam-cli/src/webserver/build/client/assets/{TruncatedFilePath-D36O1rzU.js → TruncatedFilePath-DyFZkK0l.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/_index-BwqWJOgH.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/activity.(_tab)-BwavGCpm.js +32 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.health-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.restart-server-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{chevron-down-DgTPh8H-.js → chevron-down-Cx24_aWc.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{chunk-EPOLDU6W-DdQKK6on.js → chunk-EPOLDU6W-CXRTFQ3F.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{circle-check-Dmr2bb1R.js → circle-check-BOARzkeR.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/copy-Bb-80kDT.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/{createLucideIcon-Do4ZLUYa.js → createLucideIcon-BdhJEx6B.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/dev.empty-BBnGWYga.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-CbdFyxZh.js → entity._sha._-BJUiQqZF.js} +12 -12
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha.scenarios._scenarioId.fullscreen-B4iCfs5M.js → entity._sha.scenarios._scenarioId.fullscreen-DavjRmOY.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.create-scenario-wDWZZO1W.js → entity._sha_.create-scenario-D1T4TGjf.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.edit._scenarioId-BMbl7MeQ.js → entity._sha_.edit._scenarioId-CTBG2mmz.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{entry.client-5wRKRIH9.js → entry.client-CS2cb_eZ.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/file-code-Dhef1kWN.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/{fileTableUtils-DD3SDH7t.js → fileTableUtils-DMJ7zii9.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/files-CJ6lTdTA.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{git-zXjT7J0G.js → git-CPTZZ-JZ.js} +8 -8
- package/codeyam-cli/src/webserver/build/client/assets/globals-D3yhhV8x.css +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{index-DLbXwndH.js → index-B1h680n5.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{index-gPZ-lad1.js → index-lzqtyFU8.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-BsPXJ81F.js → loader-circle-B7B9V-bu.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/manifest-a78b90a2.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/memory--GCbFsBE.js +92 -0
- package/codeyam-cli/src/webserver/build/client/assets/root-eVAaavTS.js +62 -0
- package/codeyam-cli/src/webserver/build/client/assets/{search-P2FKIUql.js → search-CxXUmBSd.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{settings-B2eDuBj8.js → settings-CS5f3WzT.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{simulations-L18M6-kN.js → simulations-DwFIBT09.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{triangle-alert-BDz7kbVA.js → triangle-alert-B6LgvRJg.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useCustomSizes-29dDmbH8.js → useCustomSizes-C1v1PQzo.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useLastLogLine-BUm0UVJm.js → useLastLogLine-aSv48UbS.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useReportContext-CkIOKTrZ.js → useReportContext-DYxHZQuP.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useToast-KKw5kTn-.js → useToast-mBRpZPiu.js} +1 -1
- package/codeyam-cli/src/webserver/build/server/assets/index-BM6TDT1Y.js +1 -0
- package/codeyam-cli/src/webserver/build/server/assets/server-build-dYC34MHw.js +257 -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-memory-hook.sh +200 -0
- package/codeyam-cli/templates/codeyam:debug.md +47 -3
- package/codeyam-cli/templates/codeyam:diagnose.md +203 -25
- package/codeyam-cli/templates/codeyam:memory.md +341 -0
- package/codeyam-cli/templates/codeyam:new-rule.md +13 -0
- package/codeyam-cli/templates/rule-reflection-hook.py +160 -0
- package/codeyam-cli/templates/rules-instructions.md +93 -0
- package/package.json +8 -5
- package/packages/ai/index.js +7 -3
- package/packages/ai/index.js.map +1 -1
- package/packages/ai/src/lib/analyzeScope.js +70 -29
- package/packages/ai/src/lib/analyzeScope.js.map +1 -1
- package/packages/ai/src/lib/astScopes/arrayDerivationDetector.js +150 -0
- package/packages/ai/src/lib/astScopes/arrayDerivationDetector.js.map +1 -0
- package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js +78 -8
- package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js.map +1 -1
- package/packages/ai/src/lib/astScopes/methodSemantics.js +109 -23
- package/packages/ai/src/lib/astScopes/methodSemantics.js.map +1 -1
- package/packages/ai/src/lib/astScopes/patterns/variableDeclarationHandler.js +1 -102
- package/packages/ai/src/lib/astScopes/patterns/variableDeclarationHandler.js.map +1 -1
- package/packages/ai/src/lib/astScopes/processExpression.js +440 -27
- package/packages/ai/src/lib/astScopes/processExpression.js.map +1 -1
- package/packages/ai/src/lib/completionCall.js +161 -30
- package/packages/ai/src/lib/completionCall.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +589 -166
- package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.js +179 -0
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.js +7 -1
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.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 +41 -1
- package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js +104 -11
- package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/convertTypeAnnotationsToValues.js +159 -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 +265 -79
- package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/fixNullIdsBySchema.js +107 -0
- package/packages/ai/src/lib/dataStructure/helpers/fixNullIdsBySchema.js.map +1 -0
- package/packages/ai/src/lib/dataStructureChunking.js +111 -0
- package/packages/ai/src/lib/dataStructureChunking.js.map +1 -0
- package/packages/ai/src/lib/e2eDataTracking.js +241 -0
- package/packages/ai/src/lib/e2eDataTracking.js.map +1 -0
- package/packages/ai/src/lib/extractCriticalDataKeys.js +96 -0
- package/packages/ai/src/lib/extractCriticalDataKeys.js.map +1 -0
- package/packages/ai/src/lib/generateEntityScenarioData.js +525 -8
- package/packages/ai/src/lib/generateEntityScenarioData.js.map +1 -1
- package/packages/ai/src/lib/generateEntityScenarios.js +26 -2
- package/packages/ai/src/lib/generateEntityScenarios.js.map +1 -1
- package/packages/ai/src/lib/generateExecutionFlows.js +281 -4
- package/packages/ai/src/lib/generateExecutionFlows.js.map +1 -1
- package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js +946 -42
- package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js.map +1 -1
- package/packages/ai/src/lib/generateExecutionFlowsFromJsxUsages.js +194 -0
- package/packages/ai/src/lib/generateExecutionFlowsFromJsxUsages.js.map +1 -0
- 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/gatherAttributesMap.js +10 -4
- package/packages/ai/src/lib/promptGenerators/gatherAttributesMap.js.map +1 -1
- package/packages/ai/src/lib/promptGenerators/generateChunkPrompt.js +54 -0
- package/packages/ai/src/lib/promptGenerators/generateChunkPrompt.js.map +1 -0
- package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js +15 -7
- package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js.map +1 -1
- package/packages/ai/src/lib/promptGenerators/simplifyKeysForLLM.js +335 -0
- package/packages/ai/src/lib/promptGenerators/simplifyKeysForLLM.js.map +1 -0
- package/packages/ai/src/lib/resolvePathToControllable.js +155 -41
- package/packages/ai/src/lib/resolvePathToControllable.js.map +1 -1
- package/packages/ai/src/lib/worker/SerializableDataStructure.js +7 -0
- 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/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/analysisContext.js +30 -5
- package/packages/analyze/src/lib/analysisContext.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 +21 -9
- package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/analyzeEntities.js +14 -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 +31 -10
- 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/enrichArrayTypesFromChildSignatures.js +160 -68
- package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js +25 -8
- package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +71 -9
- package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js +57 -9
- package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +233 -9
- package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/mergeValidatedDataStructures.js +46 -9
- package/packages/analyze/src/lib/files/scenarios/mergeValidatedDataStructures.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/utils/getFileByPath.js +12 -0
- package/packages/analyze/src/lib/utils/getFileByPath.js.map +1 -0
- package/packages/database/src/lib/kysely/db.js +8 -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/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/updateCommitMetadata.js +5 -4
- package/packages/database/src/lib/updateCommitMetadata.js.map +1 -1
- package/packages/types/index.js.map +1 -1
- package/packages/utils/src/lib/safeFileName.js +29 -3
- package/packages/utils/src/lib/safeFileName.js.map +1 -1
- package/scripts/finalize-analyzer.cjs +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/EntityItem-vauWK972.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/ReportIssueModal-DzJRkCkr.js +0 -11
- package/codeyam-cli/src/webserver/build/client/assets/_index-Be83mo_j.js +0 -11
- package/codeyam-cli/src/webserver/build/client/assets/activity.(_tab)-BN6wu6Y-.js +0 -37
- package/codeyam-cli/src/webserver/build/client/assets/dev.empty-Bn6aCAy_.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/files-DKyMFI90.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/globals-DTTQ3gY7.css +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/manifest-22590fcf.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/root-BsAarjAM.js +0 -57
- package/codeyam-cli/src/webserver/build/server/assets/index-BND5I5fv.js +0 -1
- package/codeyam-cli/src/webserver/build/server/assets/server-build-CFXnd7MG.js +0 -228
|
@@ -7,6 +7,28 @@ import {
|
|
|
7
7
|
import { Analysis, Project } from '~codeyam/types';
|
|
8
8
|
import { LazyFileStore } from './LazyFileStore';
|
|
9
9
|
|
|
10
|
+
const DB_CONCURRENCY = 1;
|
|
11
|
+
|
|
12
|
+
async function mapWithConcurrency<T, R>(
|
|
13
|
+
items: T[],
|
|
14
|
+
fn: (item: T) => Promise<R>,
|
|
15
|
+
concurrency: number,
|
|
16
|
+
): Promise<R[]> {
|
|
17
|
+
const results: R[] = new Array(items.length);
|
|
18
|
+
let index = 0;
|
|
19
|
+
const workers = Array.from(
|
|
20
|
+
{ length: Math.min(concurrency, items.length) },
|
|
21
|
+
async () => {
|
|
22
|
+
while (index < items.length) {
|
|
23
|
+
const i = index++;
|
|
24
|
+
results[i] = await fn(items[i]);
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
);
|
|
28
|
+
await Promise.all(workers);
|
|
29
|
+
return results;
|
|
30
|
+
}
|
|
31
|
+
|
|
10
32
|
interface LoadReadyToBeCapturedArgs {
|
|
11
33
|
project: Project;
|
|
12
34
|
branchCommitSha?: string;
|
|
@@ -77,8 +99,9 @@ async function gatherAllReferencedEntities(
|
|
|
77
99
|
byFilePath.get(filePath)!.push(name);
|
|
78
100
|
}
|
|
79
101
|
|
|
80
|
-
// Batch load entities by file path
|
|
81
|
-
const
|
|
102
|
+
// Batch load entities by file path (concurrency-limited to avoid exhausting DB connections)
|
|
103
|
+
const results = await mapWithConcurrency(
|
|
104
|
+
Array.from(byFilePath.entries()),
|
|
82
105
|
async ([filePath, names]) => {
|
|
83
106
|
const entities = await loadEntities({
|
|
84
107
|
projectId: project.id,
|
|
@@ -106,9 +129,8 @@ async function gatherAllReferencedEntities(
|
|
|
106
129
|
return false;
|
|
107
130
|
});
|
|
108
131
|
},
|
|
132
|
+
DB_CONCURRENCY,
|
|
109
133
|
);
|
|
110
|
-
|
|
111
|
-
const results = await Promise.all(loadPromises);
|
|
112
134
|
const loadedEntities = results.flat();
|
|
113
135
|
|
|
114
136
|
// Add loaded entities to context
|
|
@@ -198,48 +220,50 @@ export default async function loadReadyToBeCaptured({
|
|
|
198
220
|
foundNewDependencies = false;
|
|
199
221
|
const currentBatch = Array.from(stillNeeded);
|
|
200
222
|
|
|
201
|
-
// Load analyses for current batch
|
|
202
|
-
const
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
);
|
|
213
|
-
return null;
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
try {
|
|
217
|
-
const analysis = await loadAnalysis({
|
|
218
|
-
projectId: project.id,
|
|
219
|
-
fileId: file.id,
|
|
220
|
-
entityName,
|
|
221
|
-
includeScenarios: isFirstBatch, // Only include scenarios for the root analyses
|
|
222
|
-
});
|
|
223
|
-
|
|
224
|
-
if (analysis) {
|
|
225
|
-
console.log(`CodeYam: Loaded analysis ${filePath}:${entityName}`);
|
|
226
|
-
return { key: keyString, analysis };
|
|
227
|
-
} else {
|
|
223
|
+
// Load analyses for current batch (concurrency-limited to avoid exhausting DB connections)
|
|
224
|
+
const results = await mapWithConcurrency(
|
|
225
|
+
currentBatch,
|
|
226
|
+
async (keyString) => {
|
|
227
|
+
const [filePath, entityName] = keyString.split(':');
|
|
228
|
+
|
|
229
|
+
// Find the file ID for this file path - use fileStore for O(1) lookup when available
|
|
230
|
+
const file = fileStore
|
|
231
|
+
? fileStore.getByPath(filePath)
|
|
232
|
+
: project.files.find((f) => f.path === filePath);
|
|
233
|
+
if (!file) {
|
|
228
234
|
console.log(
|
|
229
|
-
`CodeYam Warning:
|
|
235
|
+
`CodeYam Warning: File not found in project: ${filePath} for key ${keyString}`,
|
|
230
236
|
);
|
|
231
237
|
return null;
|
|
232
238
|
}
|
|
233
|
-
} catch (error) {
|
|
234
|
-
console.log(
|
|
235
|
-
`CodeYam Error loading analysis ${filePath}:${entityName}:`,
|
|
236
|
-
error,
|
|
237
|
-
);
|
|
238
|
-
return null;
|
|
239
|
-
}
|
|
240
|
-
});
|
|
241
239
|
|
|
242
|
-
|
|
240
|
+
try {
|
|
241
|
+
const analysis = await loadAnalysis({
|
|
242
|
+
projectId: project.id,
|
|
243
|
+
fileId: file.id,
|
|
244
|
+
entityName,
|
|
245
|
+
includeScenarios: isFirstBatch, // Only include scenarios for the root analyses
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
if (analysis) {
|
|
249
|
+
console.log(`CodeYam: Loaded analysis ${filePath}:${entityName}`);
|
|
250
|
+
return { key: keyString, analysis };
|
|
251
|
+
} else {
|
|
252
|
+
console.log(
|
|
253
|
+
`CodeYam Warning: Analysis not found: ${filePath}:${entityName}`,
|
|
254
|
+
);
|
|
255
|
+
return null;
|
|
256
|
+
}
|
|
257
|
+
} catch (error) {
|
|
258
|
+
console.log(
|
|
259
|
+
`CodeYam Error loading analysis ${filePath}:${entityName}:`,
|
|
260
|
+
error,
|
|
261
|
+
);
|
|
262
|
+
return null;
|
|
263
|
+
}
|
|
264
|
+
},
|
|
265
|
+
DB_CONCURRENCY,
|
|
266
|
+
);
|
|
243
267
|
|
|
244
268
|
// Process loaded analyses and find new dependencies
|
|
245
269
|
for (const result of results) {
|
|
@@ -35,7 +35,10 @@ export default class AwsCaptureTaskRunner implements CaptureTaskRunner {
|
|
|
35
35
|
private sqs: SQSClient;
|
|
36
36
|
private queueInfo: QueueInfo;
|
|
37
37
|
private taskArns: string[];
|
|
38
|
-
private batchCompletedCallback?: (
|
|
38
|
+
private batchCompletedCallback?: (
|
|
39
|
+
analysisIds: string[],
|
|
40
|
+
success: boolean,
|
|
41
|
+
) => void;
|
|
39
42
|
private controlPollingInterval?: NodeJS.Timeout;
|
|
40
43
|
private lastTaskHealthCheck = Date.now();
|
|
41
44
|
private isCleanedUp = false;
|
|
@@ -213,7 +216,9 @@ export default class AwsCaptureTaskRunner implements CaptureTaskRunner {
|
|
|
213
216
|
}
|
|
214
217
|
}
|
|
215
218
|
|
|
216
|
-
onBatchCompleted(
|
|
219
|
+
onBatchCompleted(
|
|
220
|
+
callback: (analysisIds: string[], success: boolean) => void,
|
|
221
|
+
): void {
|
|
217
222
|
this.batchCompletedCallback = callback;
|
|
218
223
|
}
|
|
219
224
|
|
|
@@ -255,9 +260,12 @@ export default class AwsCaptureTaskRunner implements CaptureTaskRunner {
|
|
|
255
260
|
body.analysisIds &&
|
|
256
261
|
Array.isArray(body.analysisIds)
|
|
257
262
|
) {
|
|
258
|
-
// Notify callback
|
|
263
|
+
// Notify callback with success status (default false for backwards compatibility)
|
|
259
264
|
if (this.batchCompletedCallback) {
|
|
260
|
-
this.batchCompletedCallback(
|
|
265
|
+
this.batchCompletedCallback(
|
|
266
|
+
body.analysisIds,
|
|
267
|
+
body.success ?? false,
|
|
268
|
+
);
|
|
261
269
|
}
|
|
262
270
|
}
|
|
263
271
|
|
|
@@ -49,7 +49,10 @@ export interface SequentialCaptureTaskRunnerContext {
|
|
|
49
49
|
|
|
50
50
|
export default class SequentialCaptureTaskRunner implements CaptureTaskRunner {
|
|
51
51
|
private queue: string[][] = [];
|
|
52
|
-
private batchCompletedCallback?: (
|
|
52
|
+
private batchCompletedCallback?: (
|
|
53
|
+
analysisIds: string[],
|
|
54
|
+
success: boolean,
|
|
55
|
+
) => void;
|
|
53
56
|
private isProcessing = false;
|
|
54
57
|
private isCleanedUp = false;
|
|
55
58
|
private processingLoop: Promise<void> | null = null;
|
|
@@ -94,7 +97,13 @@ export default class SequentialCaptureTaskRunner implements CaptureTaskRunner {
|
|
|
94
97
|
|
|
95
98
|
// In CAPTURE_ONLY mode, run directly from the main project folder (skip rsync)
|
|
96
99
|
// This preserves any manual edits made to generated files
|
|
97
|
-
const
|
|
100
|
+
const captureOnlyEnvValue = process.env.CAPTURE_ONLY;
|
|
101
|
+
const captureOnly = captureOnlyEnvValue === 'true';
|
|
102
|
+
|
|
103
|
+
console.log(
|
|
104
|
+
`CodeYam: CAPTURE_ONLY env = ${captureOnlyEnvValue === undefined ? 'undefined' : `"${captureOnlyEnvValue}"`}`,
|
|
105
|
+
);
|
|
106
|
+
|
|
98
107
|
const capturerPath = captureOnly
|
|
99
108
|
? parentDir
|
|
100
109
|
: path.normalize(path.join(parentDir, 'capturer-1'));
|
|
@@ -191,15 +200,15 @@ export default class SequentialCaptureTaskRunner implements CaptureTaskRunner {
|
|
|
191
200
|
try {
|
|
192
201
|
await this.processBatch(batch);
|
|
193
202
|
|
|
194
|
-
// Notify callback of completion
|
|
203
|
+
// Notify callback of successful completion
|
|
195
204
|
if (this.batchCompletedCallback) {
|
|
196
|
-
this.batchCompletedCallback(batch);
|
|
205
|
+
this.batchCompletedCallback(batch, true);
|
|
197
206
|
}
|
|
198
207
|
} catch (error) {
|
|
199
208
|
console.error('CodeYam: Error processing batch:', error);
|
|
200
|
-
//
|
|
209
|
+
// Notify callback of failure so orchestration can track retries
|
|
201
210
|
if (this.batchCompletedCallback) {
|
|
202
|
-
this.batchCompletedCallback(batch);
|
|
211
|
+
this.batchCompletedCallback(batch, false);
|
|
203
212
|
}
|
|
204
213
|
} finally {
|
|
205
214
|
this.isProcessing = false;
|
|
@@ -393,7 +402,9 @@ export default class SequentialCaptureTaskRunner implements CaptureTaskRunner {
|
|
|
393
402
|
console.log('CodeYam: Sequential task runner cleanup complete');
|
|
394
403
|
}
|
|
395
404
|
|
|
396
|
-
onBatchCompleted(
|
|
405
|
+
onBatchCompleted(
|
|
406
|
+
callback: (analysisIds: string[], success: boolean) => void,
|
|
407
|
+
): void {
|
|
397
408
|
this.batchCompletedCallback = callback;
|
|
398
409
|
}
|
|
399
410
|
}
|
|
@@ -115,7 +115,9 @@ export interface CaptureTaskRunner {
|
|
|
115
115
|
* Register callback for when workers complete batch processing.
|
|
116
116
|
*
|
|
117
117
|
* Critical for retry logic and progress tracking in orchestration.
|
|
118
|
-
* Callback receives the analysis IDs
|
|
118
|
+
* Callback receives the analysis IDs and whether the batch succeeded.
|
|
119
119
|
*/
|
|
120
|
-
onBatchCompleted(
|
|
120
|
+
onBatchCompleted(
|
|
121
|
+
callback: (analysisIds: string[], success: boolean) => void,
|
|
122
|
+
): void;
|
|
121
123
|
}
|
|
@@ -99,15 +99,20 @@ export default async function orchestrateCapture({
|
|
|
99
99
|
const attemptCount = new Map<string, number>();
|
|
100
100
|
const maxAttempts = 2;
|
|
101
101
|
|
|
102
|
+
// Track which analyses had a worker report success — only these can be "captured"
|
|
103
|
+
const confirmedSuccessAnalyses = new Set<string>();
|
|
104
|
+
|
|
102
105
|
// Register batch completion callback with task runner
|
|
103
|
-
taskRunner.onBatchCompleted((analysisIds: string[]) => {
|
|
106
|
+
taskRunner.onBatchCompleted((analysisIds: string[], success: boolean) => {
|
|
104
107
|
console.log(
|
|
105
|
-
`CodeYam Capture: Received batch completion for ${analysisIds.length} analyses: ${analysisIds.join(', ')}`,
|
|
108
|
+
`CodeYam Capture: Received batch completion (success=${success}) for ${analysisIds.length} analyses: ${analysisIds.join(', ')}`,
|
|
106
109
|
);
|
|
107
|
-
// Remove from inFlight and increment attempt count for each analysis
|
|
108
110
|
for (const analysisId of analysisIds) {
|
|
109
111
|
inFlight.delete(analysisId);
|
|
110
112
|
attemptCount.set(analysisId, (attemptCount.get(analysisId) || 0) + 1);
|
|
113
|
+
if (success) {
|
|
114
|
+
confirmedSuccessAnalyses.add(analysisId);
|
|
115
|
+
}
|
|
111
116
|
}
|
|
112
117
|
});
|
|
113
118
|
|
|
@@ -195,9 +200,13 @@ export default async function orchestrateCapture({
|
|
|
195
200
|
knownAnalyses.add(id);
|
|
196
201
|
}
|
|
197
202
|
|
|
198
|
-
//
|
|
203
|
+
// An analysis is "captured" only if:
|
|
204
|
+
// 1. A worker reported success for its batch (in confirmedSuccessAnalyses)
|
|
205
|
+
// 2. It no longer appears in the ready-to-be-captured list (DB confirms)
|
|
206
|
+
// This prevents transient empty DB results from inflating the captured count.
|
|
199
207
|
const capturedAnalysisIds = Array.from(knownAnalyses).filter(
|
|
200
|
-
(id) =>
|
|
208
|
+
(id) =>
|
|
209
|
+
confirmedSuccessAnalyses.has(id) && !allReadyAnalysisIds.includes(id),
|
|
201
210
|
);
|
|
202
211
|
|
|
203
212
|
// Remove captured analyses from inFlight tracking
|
|
@@ -355,6 +364,32 @@ export default async function orchestrateCapture({
|
|
|
355
364
|
}
|
|
356
365
|
}
|
|
357
366
|
|
|
367
|
+
// Early exit when all enqueued work is settled (captured or abandoned)
|
|
368
|
+
// This avoids waiting for the 20-minute ANALYSIS_TIMEOUT when capture is complete
|
|
369
|
+
// IMPORTANT: Only check this when isDraining (analysis phase complete) to avoid
|
|
370
|
+
// exiting while slow-running analyses are still in progress
|
|
371
|
+
if (
|
|
372
|
+
isDraining &&
|
|
373
|
+
!firstLoop &&
|
|
374
|
+
enqueuedAnalyses.size > 0 &&
|
|
375
|
+
inFlight.size === 0 &&
|
|
376
|
+
remaining.length === 0 &&
|
|
377
|
+
toRetry.length === 0
|
|
378
|
+
) {
|
|
379
|
+
const allAnalysesSettled = Array.from(enqueuedAnalyses).every((id) => {
|
|
380
|
+
const captured = !allReadyAnalysisIds.includes(id);
|
|
381
|
+
const abandoned = (attemptCount.get(id) || 0) >= maxAttempts;
|
|
382
|
+
return captured || abandoned;
|
|
383
|
+
});
|
|
384
|
+
|
|
385
|
+
if (allAnalysesSettled) {
|
|
386
|
+
console.log(
|
|
387
|
+
'CodeYam Capture: All enqueued analyses settled (captured or abandoned), exiting early',
|
|
388
|
+
);
|
|
389
|
+
break;
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
|
|
358
393
|
if (isDraining) {
|
|
359
394
|
// Exit if analysis complete but no entities ready for capture
|
|
360
395
|
// Only check this after at least one poll (not firstLoop) to ensure we've
|
|
@@ -371,7 +406,9 @@ export default async function orchestrateCapture({
|
|
|
371
406
|
// check if all enqueued analyses have been either captured or abandoned
|
|
372
407
|
const allAnalysesSettled = Array.from(enqueuedAnalyses).every(
|
|
373
408
|
(id) => {
|
|
374
|
-
const captured =
|
|
409
|
+
const captured =
|
|
410
|
+
confirmedSuccessAnalyses.has(id) &&
|
|
411
|
+
!allReadyAnalysisIds.includes(id);
|
|
375
412
|
const abandoned = (attemptCount.get(id) || 0) >= maxAttempts;
|
|
376
413
|
return captured || abandoned;
|
|
377
414
|
},
|
|
@@ -411,5 +448,33 @@ export default async function orchestrateCapture({
|
|
|
411
448
|
} finally {
|
|
412
449
|
// Always clean up task runner resources in finally block
|
|
413
450
|
await taskRunner.cleanup();
|
|
451
|
+
|
|
452
|
+
const trackingCommit = metadataCommit ?? commit;
|
|
453
|
+
if (trackingCommit?.id) {
|
|
454
|
+
const captureCompletedAt = new Date().toISOString();
|
|
455
|
+
|
|
456
|
+
await updateCommitMetadata({
|
|
457
|
+
commitId: trackingCommit.id,
|
|
458
|
+
runStatusUpdate: {
|
|
459
|
+
captureCompletedAt,
|
|
460
|
+
capturePid: undefined,
|
|
461
|
+
},
|
|
462
|
+
// completedAt = max(analysisCompletedAt, captureCompletedAt)
|
|
463
|
+
// Normally capture finishes after analysis, but using max means illogical
|
|
464
|
+
// orderings leave a detectable signal (completedAt !== captureCompletedAt).
|
|
465
|
+
updateCallback(metadata) {
|
|
466
|
+
const run = metadata.currentRun!;
|
|
467
|
+
run.completedAt =
|
|
468
|
+
run.analysisCompletedAt &&
|
|
469
|
+
run.analysisCompletedAt > captureCompletedAt
|
|
470
|
+
? run.analysisCompletedAt
|
|
471
|
+
: captureCompletedAt;
|
|
472
|
+
},
|
|
473
|
+
}).catch((error) => {
|
|
474
|
+
console.log(
|
|
475
|
+
`Warning: Failed to update capture completion metadata: ${error}`,
|
|
476
|
+
);
|
|
477
|
+
});
|
|
478
|
+
}
|
|
414
479
|
}
|
|
415
480
|
}
|
|
@@ -7,6 +7,9 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Keys are now original call signatures (e.g., "useFetcher<User>()", "db.select(query)").
|
|
9
9
|
*
|
|
10
|
+
* Also handles flat dotted keys (e.g., "trpc.fastener.getAttributeValues.useQuery(...)")
|
|
11
|
+
* by converting them to nested structure.
|
|
12
|
+
*
|
|
10
13
|
* @param mockData The mock data object to reconcile
|
|
11
14
|
* @param expectedKeys The expected keys from the structure
|
|
12
15
|
*/
|
|
@@ -29,6 +32,26 @@ export function reconcileMockDataKeys(
|
|
|
29
32
|
continue;
|
|
30
33
|
}
|
|
31
34
|
|
|
35
|
+
// Check if this is a flat dotted key that should be converted to nested structure
|
|
36
|
+
// e.g., "trpc.fastener.getAttributeValues.useQuery({ ... })"
|
|
37
|
+
const flatKeyParts = parseFlatDottedKey(key);
|
|
38
|
+
if (flatKeyParts && flatKeyParts.length > 1) {
|
|
39
|
+
// Check if the parts match expected keys (indicating this should be nested)
|
|
40
|
+
const partsMatchExpected = flatKeyParts.some((part) =>
|
|
41
|
+
expectedKeys.includes(part),
|
|
42
|
+
);
|
|
43
|
+
if (partsMatchExpected) {
|
|
44
|
+
// Convert flat key to nested structure and merge
|
|
45
|
+
deepMergeIntoResult(
|
|
46
|
+
result,
|
|
47
|
+
flatKeyParts,
|
|
48
|
+
reconciledValue,
|
|
49
|
+
expectedKeys,
|
|
50
|
+
);
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
32
55
|
// Try to find closest match using existing logic
|
|
33
56
|
const closestKey = findClosestKey(key, expectedKeys);
|
|
34
57
|
if (closestKey) {
|
|
@@ -42,6 +65,94 @@ export function reconcileMockDataKeys(
|
|
|
42
65
|
return result;
|
|
43
66
|
}
|
|
44
67
|
|
|
68
|
+
/**
|
|
69
|
+
* Parse a flat dotted key into path segments.
|
|
70
|
+
* Handles keys like "trpc.fastener.getAttributeValues.useQuery({ ... })"
|
|
71
|
+
* where the last part might contain parentheses with function arguments.
|
|
72
|
+
*
|
|
73
|
+
* Returns null if the key doesn't look like a dotted path.
|
|
74
|
+
*/
|
|
75
|
+
function parseFlatDottedKey(key: string): string[] | null {
|
|
76
|
+
// Don't treat keys that start with a function call as dotted paths
|
|
77
|
+
// e.g., "useQuery({ id: 123 })" should not be parsed
|
|
78
|
+
if (key.match(/^[a-zA-Z_][a-zA-Z0-9_]*\s*\(/)) {
|
|
79
|
+
// Check if there's a dot BEFORE the first parenthesis
|
|
80
|
+
const parenIndex = key.indexOf('(');
|
|
81
|
+
const dotBeforeParen = key.slice(0, parenIndex).includes('.');
|
|
82
|
+
if (!dotBeforeParen) {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Must contain a dot to be a dotted path
|
|
88
|
+
if (!key.includes('.')) {
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
const parts: string[] = [];
|
|
93
|
+
let current = '';
|
|
94
|
+
let depth = 0;
|
|
95
|
+
|
|
96
|
+
for (let i = 0; i < key.length; i++) {
|
|
97
|
+
const char = key[i];
|
|
98
|
+
|
|
99
|
+
if (char === '(' || char === '{' || char === '[') {
|
|
100
|
+
depth++;
|
|
101
|
+
current += char;
|
|
102
|
+
} else if (char === ')' || char === '}' || char === ']') {
|
|
103
|
+
depth--;
|
|
104
|
+
current += char;
|
|
105
|
+
} else if (char === '.' && depth === 0) {
|
|
106
|
+
if (current) {
|
|
107
|
+
parts.push(current);
|
|
108
|
+
}
|
|
109
|
+
current = '';
|
|
110
|
+
} else {
|
|
111
|
+
current += char;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
if (current) {
|
|
116
|
+
parts.push(current);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Need at least 2 parts for it to be a meaningful dotted path
|
|
120
|
+
return parts.length >= 2 ? parts : null;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Deep merge a value into the result object following the path segments.
|
|
125
|
+
* Reconciles the leaf key against expected keys.
|
|
126
|
+
*/
|
|
127
|
+
function deepMergeIntoResult(
|
|
128
|
+
result: Record<string, unknown>,
|
|
129
|
+
parts: string[],
|
|
130
|
+
value: unknown,
|
|
131
|
+
expectedKeys: string[],
|
|
132
|
+
): void {
|
|
133
|
+
let current = result;
|
|
134
|
+
|
|
135
|
+
// Navigate/create path for all but the last part
|
|
136
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
137
|
+
const part = parts[i];
|
|
138
|
+
if (!(part in current)) {
|
|
139
|
+
current[part] = {};
|
|
140
|
+
}
|
|
141
|
+
const next = current[part];
|
|
142
|
+
if (next && typeof next === 'object' && !Array.isArray(next)) {
|
|
143
|
+
current = next as Record<string, unknown>;
|
|
144
|
+
} else {
|
|
145
|
+
// Can't traverse further, structure mismatch
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// Handle the leaf key
|
|
151
|
+
const leafKey = parts[parts.length - 1];
|
|
152
|
+
const closestLeafKey = findClosestKey(leafKey, expectedKeys) || leafKey;
|
|
153
|
+
current[closestLeafKey] = value;
|
|
154
|
+
}
|
|
155
|
+
|
|
45
156
|
/**
|
|
46
157
|
* Find the closest matching key from expectedKeys for a given key.
|
|
47
158
|
*
|
|
@@ -100,38 +211,70 @@ function findClosestKey(key: string, expectedKeys: string[]): string | null {
|
|
|
100
211
|
}
|
|
101
212
|
|
|
102
213
|
// If key has object literal arguments (like "useQuery({ id: 123, ... })"),
|
|
103
|
-
// try matching expected keys with the same function
|
|
214
|
+
// try matching expected keys with the same function path AND first object property.
|
|
104
215
|
// This handles cases where LLM generates literal values but expected keys have variable references.
|
|
105
|
-
// e.g., "useQuery({
|
|
216
|
+
// e.g., "useQuery({ attributes: ['a', 'b'] })" matches "useQuery({ attributes: items || [] })"
|
|
106
217
|
// e.g., "trpc.users.getById.useQuery({ userId: 'user-123' })" matches "trpc.users.getById.useQuery({ userId })"
|
|
218
|
+
// Uses first property matching when multiple candidates exist for disambiguation.
|
|
107
219
|
const objectArgMatch = key.match(/^([a-zA-Z_][a-zA-Z0-9_.]*)\s*\(\s*\{/);
|
|
108
220
|
if (objectArgMatch) {
|
|
109
221
|
const funcPath = objectArgMatch[1]; // Can be "funcName" or "path.to.funcName"
|
|
222
|
+
// Extract the first property name from the object argument
|
|
223
|
+
const firstPropMatch = key.match(
|
|
224
|
+
/\(\s*\{\s*\n?\s*([a-zA-Z_][a-zA-Z0-9_]*)\s*:/,
|
|
225
|
+
);
|
|
226
|
+
const firstProp = firstPropMatch ? firstPropMatch[1] : null;
|
|
227
|
+
|
|
228
|
+
// Collect all matching candidates
|
|
229
|
+
const candidates: string[] = [];
|
|
110
230
|
for (const expected of expectedKeys) {
|
|
111
231
|
// Match if expected key has the same function path and starts with object argument
|
|
112
232
|
const expectedObjArgMatch = expected.match(
|
|
113
233
|
new RegExp(`^${escapeRegExp(funcPath)}\\s*\\(\\s*\\{`),
|
|
114
234
|
);
|
|
115
235
|
if (expectedObjArgMatch) {
|
|
116
|
-
|
|
236
|
+
candidates.push(expected);
|
|
117
237
|
}
|
|
118
238
|
}
|
|
239
|
+
|
|
240
|
+
// If we have a first property, prefer matching by property name
|
|
241
|
+
if (firstProp && candidates.length > 1) {
|
|
242
|
+
// Look for a candidate with the same first property
|
|
243
|
+
const propRegex = new RegExp(
|
|
244
|
+
`\\(\\s*\\{[\\s\\n]*${escapeRegExp(firstProp)}\\s*:`,
|
|
245
|
+
);
|
|
246
|
+
const propMatch = candidates.find((c) => propRegex.test(c));
|
|
247
|
+
if (propMatch) {
|
|
248
|
+
return propMatch;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
// Fall back to first candidate if no property match found
|
|
253
|
+
if (candidates.length > 0) {
|
|
254
|
+
return candidates[0];
|
|
255
|
+
}
|
|
119
256
|
}
|
|
120
257
|
|
|
121
|
-
// If key has a single argument
|
|
258
|
+
// If key has a single argument (literal value OR variable reference),
|
|
122
259
|
// try matching expected keys with the same function name but different argument.
|
|
123
|
-
// This handles cases where
|
|
124
|
-
//
|
|
125
|
-
//
|
|
260
|
+
// This handles cases where:
|
|
261
|
+
// - LLM generates "useCustomSizes('example-slug')" but expected key is "useCustomSizes(projectSlug)"
|
|
262
|
+
// - LLM generates "useCustomSizes(someProjectSlug)" but expected key is "useCustomSizes(projectSlug)"
|
|
263
|
+
//
|
|
264
|
+
// The second case is important because when LLM generates multiple keys with different
|
|
265
|
+
// variable names (e.g., "useCustomSizes(someProjectSlug)" and "useCustomSizes(projectSlug)"),
|
|
266
|
+
// without reconciliation, normalizeMockData merges them into "useCustomSizes()" which
|
|
267
|
+
// doesn't match the expected key "useCustomSizes(projectSlug)", causing undefined data access.
|
|
126
268
|
const singleArgMatch = key.match(
|
|
127
269
|
/^([a-zA-Z_][a-zA-Z0-9_.]*)\s*\(([^,)]+)\)$/,
|
|
128
270
|
);
|
|
129
271
|
if (singleArgMatch) {
|
|
130
272
|
const funcPath = singleArgMatch[1];
|
|
131
273
|
const arg = singleArgMatch[2].trim();
|
|
132
|
-
//
|
|
274
|
+
// Apply this matching if the argument is a literal OR a simple variable reference
|
|
133
275
|
const isLiteralArg = /^['"`].*['"`]$/.test(arg) || /^\d+$/.test(arg);
|
|
134
|
-
|
|
276
|
+
const isVariableRef = /^[a-zA-Z_][a-zA-Z0-9_]*$/.test(arg);
|
|
277
|
+
if (isLiteralArg || isVariableRef) {
|
|
135
278
|
for (const expected of expectedKeys) {
|
|
136
279
|
// Match if expected key has the same function path with a single argument
|
|
137
280
|
const expectedSingleArgMatch = expected.match(
|
|
@@ -313,6 +313,10 @@ export default async function runAnalysis({
|
|
|
313
313
|
// Route to appropriate analyzer
|
|
314
314
|
try {
|
|
315
315
|
if (runReadyToBeCapturedPath) {
|
|
316
|
+
// Signal that analysis can produce captures immediately since analyses are already ready.
|
|
317
|
+
// This is needed for recapture to work - orchestration waits for the 'analysisProducing' event.
|
|
318
|
+
controller?.setAnalysisProducingPhase();
|
|
319
|
+
|
|
316
320
|
return await analyzeReadyToBeCaptured({
|
|
317
321
|
project,
|
|
318
322
|
projectAnalyzer,
|