@codeyam/codeyam-cli 0.1.0-staging.c90f8c9 → 0.1.0-staging.c9dc00c
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 +7 -7
- package/analyzer-template/packages/ai/index.ts +10 -2
- package/analyzer-template/packages/ai/package.json +2 -2
- package/analyzer-template/packages/ai/src/lib/analyzeScope.ts +86 -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 +308 -50
- package/analyzer-template/packages/ai/src/lib/astScopes/types.ts +15 -6
- package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +837 -243
- 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 +80 -5
- 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/generateEntityDataStructure.ts +58 -3
- package/analyzer-template/packages/ai/src/lib/generateEntityScenarioData.ts +283 -1
- package/analyzer-template/packages/ai/src/lib/generateEntityScenarios.ts +9 -5
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlows.ts +11 -3
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionalEffects.ts +1 -1
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionals.ts +297 -7
- 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/mergeStatements.ts +90 -96
- package/analyzer-template/packages/ai/src/lib/promptGenerators/gatherAttributesMap.ts +10 -7
- 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 +71 -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 +37 -0
- 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 +459 -39
- 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/labsRequestsTable.ts +52 -0
- 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 +12 -0
- 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/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/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.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.js +9 -0
- package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.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/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 +90 -10
- 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 +60 -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 +75 -4
- 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 +60 -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/commands/analyze.js +2 -0
- 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 +14 -4
- 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 +42 -184
- 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 +2 -0
- 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 +1 -1
- 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 +4 -0
- package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
- package/codeyam-cli/src/utils/install-skills.js +71 -46
- package/codeyam-cli/src/utils/install-skills.js.map +1 -1
- package/codeyam-cli/src/utils/labsAutoCheck.js +48 -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/setupClaudeCodeSettings.js +20 -43
- package/codeyam-cli/src/utils/setupClaudeCodeSettings.js.map +1 -1
- package/codeyam-cli/src/webserver/app/lib/database.js +15 -3
- package/codeyam-cli/src/webserver/app/lib/database.js.map +1 -1
- package/codeyam-cli/src/webserver/backgroundServer.js +31 -0
- package/codeyam-cli/src/webserver/backgroundServer.js.map +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/CopyButton-CA3JxPb7.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/EntityItem-B86KKU7e.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeBadge-DLqD3qNt.js → EntityTypeBadge-B5ctlSYt.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeIcon-Ba2JVPzP.js → EntityTypeIcon-BqY8gDAW.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{InlineSpinner-C8lyxW9k.js → InlineSpinner-ClaLpuOo.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{InteractivePreview-aht4aafF.js → InteractivePreview-BDhPilK7.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/{LibraryFunctionPreview-CVtiBnY5.js → LibraryFunctionPreview-VeqEBv9v.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{LoadingDots-B0GLXMsr.js → LoadingDots-Bs7Nn1Jr.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-xgeCVgSM.js → LogViewer-Bm3PmcCz.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{ReportIssueModal-D4TZhLuw.js → ReportIssueModal-C6PKeMYR.js} +3 -13
- package/codeyam-cli/src/webserver/build/client/assets/{SafeScreenshot-DuDvi0jm.js → SafeScreenshot-Gq3Ocjo6.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-DEx02QDa.js → ScenarioViewer-BNLaXBHR.js} +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/{TruncatedFilePath-DyFZkK0l.js → TruncatedFilePath-CiwXDxLh.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{_index-BwqWJOgH.js → _index-B3TDXxnk.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{activity.(_tab)-DoLIqZX2.js → activity.(_tab)-BtBFH820.js} +6 -16
- package/codeyam-cli/src/webserver/build/client/assets/agent-transcripts-CN61MOMa.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.labs-survey-l0sNRNKZ.js +1 -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-PttOB2SF.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/{chevron-down-Cx24_aWc.js → chevron-down-TJp6ofnp.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{chunk-EPOLDU6W-CXRTFQ3F.js → chunk-JZWAC4HX-JE9ZIoBl.js} +12 -12
- package/codeyam-cli/src/webserver/build/client/assets/{circle-check-BOARzkeR.js → circle-check-CXhHQYrI.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/copy-6y9ALfGT.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/{createLucideIcon-BdhJEx6B.js → createLucideIcon-Ca9fAY46.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/dev.empty-C5lqplTC.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-C2N4Op8e.js → entity._sha._-n38keI1k.js} +10 -10
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha.scenarios._scenarioId.fullscreen-DavjRmOY.js → entity._sha.scenarios._scenarioId.fullscreen-CBoafmVs.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.create-scenario-D1T4TGjf.js → entity._sha_.create-scenario-DGgZjdFg.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.edit._scenarioId-CTBG2mmz.js → entity._sha_.edit._scenarioId-38yPijoD.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{entry.client-CS2cb_eZ.js → entry.client-BSHEfydn.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{fileTableUtils-DMJ7zii9.js → fileTableUtils-DCPhhSMo.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/files-0N0YJQv7.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{git-B4RJRvYB.js → git-DXnyr8uP.js} +8 -8
- package/codeyam-cli/src/webserver/build/client/assets/globals-EVn6Z9pz.css +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{index-lzqtyFU8.js → index-CcsFv748.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{index-B1h680n5.js → index-ChN9-fAY.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/labs-CmBYA0PH.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-B7B9V-bu.js → loader-circle-CTqLEAGU.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/manifest-aa4ff97b.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/memory-BSlqS1QA.js +81 -0
- package/codeyam-cli/src/webserver/build/client/assets/pause-D6vreykR.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/root-DVAbJY8B.js +62 -0
- package/codeyam-cli/src/webserver/build/client/assets/{search-CxXUmBSd.js → search-B8VUL8nl.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/settings-BK-cnzp-.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{simulations-DwFIBT09.js → simulations-CPoAg7Zo.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/terminal-BrCP7uQo.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/{triangle-alert-B6LgvRJg.js → triangle-alert-BZz2NjYa.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useCustomSizes-C1v1PQzo.js → useCustomSizes-DNwUduNu.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useLastLogLine-aSv48UbS.js → useLastLogLine-COky1GVF.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useReportContext-DYxHZQuP.js → useReportContext-CpZgwliL.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useToast-mBRpZPiu.js → useToast-Bv9JFvUO.js} +1 -1
- package/codeyam-cli/src/webserver/build/server/assets/index-Cz2RkDCa.js +1 -0
- package/codeyam-cli/src/webserver/build/server/assets/server-build-CUVsWicu.js +260 -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-power-rules-hook.sh → codeyam-memory-hook.sh} +12 -13
- package/codeyam-cli/templates/codeyam:diagnose.md +195 -496
- package/codeyam-cli/templates/codeyam:memory.md +403 -0
- package/codeyam-cli/templates/codeyam:new-rule.md +2 -2
- package/codeyam-cli/templates/codeyam:setup.md +12 -0
- 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 +136 -0
- package/package.json +8 -6
- package/packages/ai/index.js +3 -2
- package/packages/ai/index.js.map +1 -1
- package/packages/ai/src/lib/analyzeScope.js +68 -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 +239 -43
- package/packages/ai/src/lib/astScopes/processExpression.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +654 -166
- 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 +73 -5
- 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/generateEntityDataStructure.js +46 -2
- package/packages/ai/src/lib/generateEntityDataStructure.js.map +1 -1
- package/packages/ai/src/lib/generateEntityScenarioData.js +205 -1
- 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 +10 -2
- package/packages/ai/src/lib/generateExecutionFlows.js.map +1 -1
- package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js +209 -3
- 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/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/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 +54 -6
- 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 +33 -8
- 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 +399 -31
- 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/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 +9 -0
- package/packages/database/src/lib/loadCommits.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/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/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-uNNbimct.js +0 -1
- package/codeyam-cli/src/webserver/build/server/assets/server-build-B08qC4Y7.js +0 -257
- package/codeyam-cli/templates/codeyam:power-rules.md +0 -449
- /package/codeyam-cli/src/webserver/build/client/assets/{api.rules-l0sNRNKZ.js → api.agent-transcripts-l0sNRNKZ.js} +0 -0
|
@@ -28,6 +28,14 @@ export interface SortedEntitiesAndMap {
|
|
|
28
28
|
entityMap: { [key: string]: { [key: string]: EntityWithImportCount } };
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
+
// Timing stats for debugging
|
|
32
|
+
let findOrCreateEntityTime = 0;
|
|
33
|
+
let gatherEntityMapTime = 0;
|
|
34
|
+
let recursiveCallTime = 0;
|
|
35
|
+
let findOrCreateEntityCalls = 0;
|
|
36
|
+
let gatherEntityMapCalls = 0;
|
|
37
|
+
let recursiveCalls = 0;
|
|
38
|
+
|
|
31
39
|
async function findAndGatherEntity({
|
|
32
40
|
project,
|
|
33
41
|
branch,
|
|
@@ -37,6 +45,7 @@ async function findAndGatherEntity({
|
|
|
37
45
|
projectAnalyzer,
|
|
38
46
|
context,
|
|
39
47
|
fileStore,
|
|
48
|
+
depth = 0,
|
|
40
49
|
}: {
|
|
41
50
|
project: Project;
|
|
42
51
|
branch: Branch;
|
|
@@ -46,6 +55,7 @@ async function findAndGatherEntity({
|
|
|
46
55
|
projectAnalyzer: ProjectAnalyzer;
|
|
47
56
|
context: AnalysisContext;
|
|
48
57
|
fileStore?: LazyFileStore;
|
|
58
|
+
depth?: number;
|
|
49
59
|
}) {
|
|
50
60
|
let entityWithImportCount: EntityWithImportCount = context.getEntity(
|
|
51
61
|
file.path,
|
|
@@ -53,6 +63,7 @@ async function findAndGatherEntity({
|
|
|
53
63
|
) as EntityWithImportCount;
|
|
54
64
|
if (entityWithImportCount?.importCount === undefined) {
|
|
55
65
|
try {
|
|
66
|
+
const t0 = performance.now();
|
|
56
67
|
entityWithImportCount = await findOrCreateEntity({
|
|
57
68
|
file,
|
|
58
69
|
branchId: branch?.id,
|
|
@@ -61,6 +72,8 @@ async function findAndGatherEntity({
|
|
|
61
72
|
projectAnalyzer,
|
|
62
73
|
context,
|
|
63
74
|
});
|
|
75
|
+
findOrCreateEntityTime += performance.now() - t0;
|
|
76
|
+
findOrCreateEntityCalls++;
|
|
64
77
|
} catch (e) {
|
|
65
78
|
console.log(
|
|
66
79
|
'CodeYam Warning: Entity not found in create and sort entities',
|
|
@@ -72,12 +85,15 @@ async function findAndGatherEntity({
|
|
|
72
85
|
// Add entity to context
|
|
73
86
|
context.addEntity(entityWithImportCount);
|
|
74
87
|
|
|
88
|
+
const t1 = performance.now();
|
|
75
89
|
await gatherEntityMap({
|
|
76
90
|
entity: entityWithImportCount,
|
|
77
91
|
branchId: branch?.id,
|
|
78
92
|
context,
|
|
79
93
|
projectAnalyzer,
|
|
80
94
|
});
|
|
95
|
+
gatherEntityMapTime += performance.now() - t1;
|
|
96
|
+
gatherEntityMapCalls++;
|
|
81
97
|
|
|
82
98
|
entityWithImportCount.importCount = 0;
|
|
83
99
|
for (const importedEntity of entityWithImportCount.metadata
|
|
@@ -105,6 +121,8 @@ async function findAndGatherEntity({
|
|
|
105
121
|
continue;
|
|
106
122
|
}
|
|
107
123
|
|
|
124
|
+
const t2 = performance.now();
|
|
125
|
+
recursiveCalls++;
|
|
108
126
|
const info = await findAndGatherEntity({
|
|
109
127
|
project,
|
|
110
128
|
branch,
|
|
@@ -114,7 +132,11 @@ async function findAndGatherEntity({
|
|
|
114
132
|
projectAnalyzer,
|
|
115
133
|
context,
|
|
116
134
|
fileStore,
|
|
135
|
+
depth: depth + 1,
|
|
117
136
|
});
|
|
137
|
+
if (depth === 0) {
|
|
138
|
+
recursiveCallTime += performance.now() - t2;
|
|
139
|
+
}
|
|
118
140
|
entityWithImportCount.importCount +=
|
|
119
141
|
info.entityWithImportCount.importCount;
|
|
120
142
|
}
|
|
@@ -147,6 +169,14 @@ export default async function createEntitiesAndSortFiles({
|
|
|
147
169
|
branchCommit, // just for progress updates
|
|
148
170
|
fileStore,
|
|
149
171
|
}: EntitiesAndSortFiles): Promise<SortedEntitiesAndMap> {
|
|
172
|
+
// Reset timing stats
|
|
173
|
+
findOrCreateEntityTime = 0;
|
|
174
|
+
gatherEntityMapTime = 0;
|
|
175
|
+
recursiveCallTime = 0;
|
|
176
|
+
findOrCreateEntityCalls = 0;
|
|
177
|
+
gatherEntityMapCalls = 0;
|
|
178
|
+
recursiveCalls = 0;
|
|
179
|
+
|
|
150
180
|
const sortedEntities: Entity[] = [];
|
|
151
181
|
|
|
152
182
|
// We slightly abuse the AnalysisContext here, initializing and later throwing it away
|
|
@@ -161,6 +191,16 @@ export default async function createEntitiesAndSortFiles({
|
|
|
161
191
|
// Enable baseline mode to skip DB reads during entity creation
|
|
162
192
|
context.setBaselineMode(true);
|
|
163
193
|
let ii = 0;
|
|
194
|
+
let updateCommitMetadataTime = 0;
|
|
195
|
+
let getFileAnalyzerTime = 0;
|
|
196
|
+
let getAllEntityNodesTime = 0;
|
|
197
|
+
const loopStart = performance.now();
|
|
198
|
+
let lastLogTime = loopStart;
|
|
199
|
+
|
|
200
|
+
console.log(
|
|
201
|
+
`CodeYam: createEntitiesAndSortFiles starting, ${filePaths.length} files to process`,
|
|
202
|
+
);
|
|
203
|
+
|
|
164
204
|
for (const currentFilePath of filePaths) {
|
|
165
205
|
if (filePath && currentFilePath !== filePath) {
|
|
166
206
|
ii++;
|
|
@@ -179,16 +219,23 @@ export default async function createEntitiesAndSortFiles({
|
|
|
179
219
|
}
|
|
180
220
|
|
|
181
221
|
if (branchCommit) {
|
|
222
|
+
const t0 = performance.now();
|
|
182
223
|
branchCommit.metadata = await updateCommitMetadata({
|
|
183
224
|
commitId: branchCommit.id,
|
|
184
225
|
runStatusUpdate: {
|
|
185
226
|
filesCompleted: ii + 1,
|
|
186
227
|
},
|
|
187
228
|
});
|
|
229
|
+
updateCommitMetadataTime += performance.now() - t0;
|
|
188
230
|
}
|
|
189
231
|
|
|
232
|
+
const t1 = performance.now();
|
|
190
233
|
const fileAnalyzer = projectAnalyzer.getFileAnalyzer(file);
|
|
234
|
+
getFileAnalyzerTime += performance.now() - t1;
|
|
235
|
+
|
|
236
|
+
const t2 = performance.now();
|
|
191
237
|
const allEntityNodes = fileAnalyzer.getAllEntityNodesOnlyAliases();
|
|
238
|
+
getAllEntityNodesTime += performance.now() - t2;
|
|
192
239
|
|
|
193
240
|
for (const entityName of Object.keys(allEntityNodes)) {
|
|
194
241
|
const { entityWithImportCount: entity } = await findAndGatherEntity({
|
|
@@ -206,8 +253,44 @@ export default async function createEntitiesAndSortFiles({
|
|
|
206
253
|
}
|
|
207
254
|
|
|
208
255
|
ii++;
|
|
256
|
+
|
|
257
|
+
// Log timing stats every 5 seconds
|
|
258
|
+
const now = performance.now();
|
|
259
|
+
if (now - lastLogTime > 5000) {
|
|
260
|
+
lastLogTime = now;
|
|
261
|
+
const elapsed = ((now - loopStart) / 1000).toFixed(1);
|
|
262
|
+
console.log(`CodeYam: createEntitiesAndSortFiles progress`, {
|
|
263
|
+
filesProcessed: ii,
|
|
264
|
+
totalFiles: filePaths.length,
|
|
265
|
+
elapsedSec: elapsed,
|
|
266
|
+
timings: {
|
|
267
|
+
updateCommitMetadata: `${(updateCommitMetadataTime / 1000).toFixed(1)}s`,
|
|
268
|
+
getFileAnalyzer: `${(getFileAnalyzerTime / 1000).toFixed(1)}s`,
|
|
269
|
+
getAllEntityNodes: `${(getAllEntityNodesTime / 1000).toFixed(1)}s`,
|
|
270
|
+
findOrCreateEntity: `${(findOrCreateEntityTime / 1000).toFixed(1)}s (${findOrCreateEntityCalls} calls)`,
|
|
271
|
+
gatherEntityMap: `${(gatherEntityMapTime / 1000).toFixed(1)}s (${gatherEntityMapCalls} calls)`,
|
|
272
|
+
recursiveCalls: `${(recursiveCallTime / 1000).toFixed(1)}s (${recursiveCalls} calls)`,
|
|
273
|
+
},
|
|
274
|
+
});
|
|
275
|
+
}
|
|
209
276
|
}
|
|
210
277
|
|
|
278
|
+
// Final timing log
|
|
279
|
+
const totalElapsed = ((performance.now() - loopStart) / 1000).toFixed(1);
|
|
280
|
+
console.log(`CodeYam: createEntitiesAndSortFiles loop complete`, {
|
|
281
|
+
filesProcessed: ii,
|
|
282
|
+
totalFiles: filePaths.length,
|
|
283
|
+
elapsedSec: totalElapsed,
|
|
284
|
+
timings: {
|
|
285
|
+
updateCommitMetadata: `${(updateCommitMetadataTime / 1000).toFixed(1)}s`,
|
|
286
|
+
getFileAnalyzer: `${(getFileAnalyzerTime / 1000).toFixed(1)}s`,
|
|
287
|
+
getAllEntityNodes: `${(getAllEntityNodesTime / 1000).toFixed(1)}s`,
|
|
288
|
+
findOrCreateEntity: `${(findOrCreateEntityTime / 1000).toFixed(1)}s (${findOrCreateEntityCalls} calls)`,
|
|
289
|
+
gatherEntityMap: `${(gatherEntityMapTime / 1000).toFixed(1)}s (${gatherEntityMapCalls} calls)`,
|
|
290
|
+
recursiveCalls: `${(recursiveCallTime / 1000).toFixed(1)}s (${recursiveCalls} calls)`,
|
|
291
|
+
},
|
|
292
|
+
});
|
|
293
|
+
|
|
211
294
|
await setImportedExports({
|
|
212
295
|
entities: Object.values(sortedEntities).flat(),
|
|
213
296
|
context,
|
|
@@ -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;
|
|
@@ -197,15 +200,15 @@ export default class SequentialCaptureTaskRunner implements CaptureTaskRunner {
|
|
|
197
200
|
try {
|
|
198
201
|
await this.processBatch(batch);
|
|
199
202
|
|
|
200
|
-
// Notify callback of completion
|
|
203
|
+
// Notify callback of successful completion
|
|
201
204
|
if (this.batchCompletedCallback) {
|
|
202
|
-
this.batchCompletedCallback(batch);
|
|
205
|
+
this.batchCompletedCallback(batch, true);
|
|
203
206
|
}
|
|
204
207
|
} catch (error) {
|
|
205
208
|
console.error('CodeYam: Error processing batch:', error);
|
|
206
|
-
//
|
|
209
|
+
// Notify callback of failure so orchestration can track retries
|
|
207
210
|
if (this.batchCompletedCallback) {
|
|
208
|
-
this.batchCompletedCallback(batch);
|
|
211
|
+
this.batchCompletedCallback(batch, false);
|
|
209
212
|
}
|
|
210
213
|
} finally {
|
|
211
214
|
this.isProcessing = false;
|
|
@@ -399,7 +402,9 @@ export default class SequentialCaptureTaskRunner implements CaptureTaskRunner {
|
|
|
399
402
|
console.log('CodeYam: Sequential task runner cleanup complete');
|
|
400
403
|
}
|
|
401
404
|
|
|
402
|
-
onBatchCompleted(
|
|
405
|
+
onBatchCompleted(
|
|
406
|
+
callback: (analysisIds: string[], success: boolean) => void,
|
|
407
|
+
): void {
|
|
403
408
|
this.batchCompletedCallback = callback;
|
|
404
409
|
}
|
|
405
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
|
|
@@ -397,7 +406,9 @@ export default async function orchestrateCapture({
|
|
|
397
406
|
// check if all enqueued analyses have been either captured or abandoned
|
|
398
407
|
const allAnalysesSettled = Array.from(enqueuedAnalyses).every(
|
|
399
408
|
(id) => {
|
|
400
|
-
const captured =
|
|
409
|
+
const captured =
|
|
410
|
+
confirmedSuccessAnalyses.has(id) &&
|
|
411
|
+
!allReadyAnalysisIds.includes(id);
|
|
401
412
|
const abandoned = (attemptCount.get(id) || 0) >= maxAttempts;
|
|
402
413
|
return captured || abandoned;
|
|
403
414
|
},
|
|
@@ -437,5 +448,33 @@ export default async function orchestrateCapture({
|
|
|
437
448
|
} finally {
|
|
438
449
|
// Always clean up task runner resources in finally block
|
|
439
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
|
+
}
|
|
440
479
|
}
|
|
441
480
|
}
|
|
@@ -17,7 +17,8 @@ import { startScenarioCapture } from './startScenarioCapture';
|
|
|
17
17
|
import { createController } from './controller/startController';
|
|
18
18
|
import { awsLog, awsLogDebugLevel } from '~codeyam/utils';
|
|
19
19
|
import * as v8 from 'v8';
|
|
20
|
-
import
|
|
20
|
+
import * as os from 'os';
|
|
21
|
+
import { initializeAIServiceMode, destroyWorkerPool } from '~codeyam/ai';
|
|
21
22
|
import runAnalysis, { EnvConfig, SharedContext } from './runAnalysis';
|
|
22
23
|
import {
|
|
23
24
|
loadOrCreateCommit,
|
|
@@ -119,28 +120,31 @@ async function main({
|
|
|
119
120
|
// and attempted to access project/commit/branch data before it was loaded.
|
|
120
121
|
const sharedContext = await loadSharedContext(envConfig);
|
|
121
122
|
|
|
122
|
-
//
|
|
123
|
+
// Memory monitoring: tracks both V8 heap and RSS (which includes worker threads)
|
|
124
|
+
const containerMemoryMB = process.env.ECS_CONTAINER_MEMORY_MB
|
|
125
|
+
? parseInt(process.env.ECS_CONTAINER_MEMORY_MB, 10)
|
|
126
|
+
: Math.round(os.totalmem() / 1024 / 1024);
|
|
123
127
|
let lastLogTime = 0;
|
|
124
128
|
setInterval(() => {
|
|
125
129
|
const mem = process.memoryUsage();
|
|
126
130
|
const heap = v8.getHeapStatistics();
|
|
127
|
-
const
|
|
131
|
+
const heapMB = Math.round(mem.heapUsed / 1024 / 1024);
|
|
132
|
+
const rssMB = Math.round(mem.rss / 1024 / 1024);
|
|
133
|
+
const heapLimitMB = Math.round(heap.heap_size_limit / 1024 / 1024);
|
|
134
|
+
const rssPercent = (rssMB / containerMemoryMB) * 100;
|
|
128
135
|
const now = Date.now();
|
|
129
136
|
|
|
130
|
-
if (
|
|
131
|
-
// High usage: warn every second
|
|
137
|
+
if (rssPercent >= 80) {
|
|
132
138
|
console.warn(
|
|
133
|
-
`CodeYam
|
|
139
|
+
`CodeYam Memory Warning: RSS ${rssMB}MB/${containerMemoryMB}MB (${Math.round(rssPercent)}%), heap ${heapMB}MB/${heapLimitMB}MB ⚠️ HIGH`,
|
|
134
140
|
);
|
|
135
|
-
} else if (
|
|
136
|
-
// Elevated usage: log every 5 seconds
|
|
141
|
+
} else if (rssPercent >= 50 && now - lastLogTime >= 5000) {
|
|
137
142
|
console.log(
|
|
138
|
-
`CodeYam
|
|
143
|
+
`CodeYam Memory Notice: RSS ${rssMB}MB/${containerMemoryMB}MB (${Math.round(rssPercent)}%), heap ${heapMB}MB/${heapLimitMB}MB ⚠️ Elevated`,
|
|
139
144
|
);
|
|
140
145
|
} else if (now - lastLogTime >= 30000) {
|
|
141
|
-
// Normal usage: log every 30 seconds
|
|
142
146
|
console.log(
|
|
143
|
-
`CodeYam
|
|
147
|
+
`CodeYam Memory Stats: RSS ${rssMB}MB/${containerMemoryMB}MB (${Math.round(rssPercent)}%), heap ${heapMB}MB/${heapLimitMB}MB 📊 OK`,
|
|
144
148
|
);
|
|
145
149
|
}
|
|
146
150
|
|
|
@@ -187,6 +191,11 @@ async function main({
|
|
|
187
191
|
analyzerPid: undefined,
|
|
188
192
|
capturePid: process.pid,
|
|
189
193
|
},
|
|
194
|
+
updateCallback(metadata) {
|
|
195
|
+
if (metadata.currentRun?.captureCompletedAt) {
|
|
196
|
+
metadata.currentRun.completedAt = new Date().toISOString();
|
|
197
|
+
}
|
|
198
|
+
},
|
|
190
199
|
}).catch((error) => {
|
|
191
200
|
awsLog(`Warning: Failed to update commit metadata: ${error}`);
|
|
192
201
|
});
|
|
@@ -219,6 +228,10 @@ async function main({
|
|
|
219
228
|
}
|
|
220
229
|
awsLog('CodeYam: Analysis producing, starting orchestration...');
|
|
221
230
|
|
|
231
|
+
// Worker pool is no longer needed after data structure prep phase.
|
|
232
|
+
// Freeing it reclaims ~2GB before capture workers ramp up.
|
|
233
|
+
await destroyWorkerPool();
|
|
234
|
+
|
|
222
235
|
// Create task runner based on orchestration mode
|
|
223
236
|
let taskRunner;
|
|
224
237
|
|
|
@@ -229,6 +242,17 @@ async function main({
|
|
|
229
242
|
framework: framework,
|
|
230
243
|
packageManager: packageManager,
|
|
231
244
|
});
|
|
245
|
+
|
|
246
|
+
const captureCommit =
|
|
247
|
+
sharedContext.commit ?? sharedContext.branchCommit;
|
|
248
|
+
if (captureCommit) {
|
|
249
|
+
await updateCommitMetadata({
|
|
250
|
+
commitId: captureCommit.id,
|
|
251
|
+
runStatusUpdate: {
|
|
252
|
+
captureTaskArns: taskRunner.getTaskArns(),
|
|
253
|
+
},
|
|
254
|
+
});
|
|
255
|
+
}
|
|
232
256
|
} else if (orchestrateCapture === 'local-sequential') {
|
|
233
257
|
taskRunner = await SequentialCaptureTaskRunner.create(
|
|
234
258
|
{
|