@codeyam/codeyam-cli 0.1.0-staging.1669d45 → 0.1.0-staging.323686
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 +3 -3
- package/analyzer-template/packages/ai/index.ts +9 -1
- package/analyzer-template/packages/ai/src/lib/analyzeScope.ts +48 -34
- package/analyzer-template/packages/ai/src/lib/astScopes/arrayDerivationDetector.ts +199 -0
- package/analyzer-template/packages/ai/src/lib/astScopes/astScopeAnalyzer.ts +31 -0
- 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 +277 -8
- package/analyzer-template/packages/ai/src/lib/astScopes/types.ts +73 -1
- package/analyzer-template/packages/ai/src/lib/completionCall.ts +198 -34
- package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +108 -1
- 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/cleanKnownObjectFunctions.ts +23 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.ts +87 -2
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.ts +32 -7
- 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 +626 -6
- package/analyzer-template/packages/ai/src/lib/generateEntityScenarios.ts +26 -1
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlows.ts +375 -6
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionals.ts +1003 -45
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromJsxUsages.ts +239 -0
- 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 +154 -32
- package/analyzer-template/packages/ai/src/lib/worker/SerializableDataStructure.ts +22 -1
- package/analyzer-template/packages/ai/src/lib/worker/analyzeScopeWorker.ts +114 -2
- package/analyzer-template/packages/analyze/src/lib/analysisContext.ts +44 -4
- package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.ts +10 -13
- package/analyzer-template/packages/analyze/src/lib/files/analyze/dependencyResolver.ts +6 -0
- package/analyzer-template/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.ts +33 -7
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.ts +142 -73
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +42 -5
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.ts +1 -1
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +77 -0
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeValidatedDataStructures.ts +56 -11
- package/analyzer-template/packages/aws/package.json +1 -1
- 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 +51 -1
- package/analyzer-template/packages/github/dist/types/src/types/ScenariosDataStructure.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/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 +64 -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 +51 -1
- package/analyzer-template/packages/utils/dist/types/src/types/ScenariosDataStructure.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 +314 -29
- 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 +114 -2
- 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 +255 -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 +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 +89 -2
- 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/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 +20 -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-7522edd4.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/memory-yxFcrxBX.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-DVzYx8PN.js +1 -0
- package/codeyam-cli/src/webserver/build/server/assets/server-build-4Cr0uToj.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 +462 -0
- package/codeyam-cli/templates/codeyam:new-rule.md +13 -0
- package/package.json +8 -5
- package/packages/ai/index.js +5 -2
- package/packages/ai/index.js.map +1 -1
- package/packages/ai/src/lib/analyzeScope.js +41 -17
- 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 +24 -0
- 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 +228 -11
- 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 +86 -1
- 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/cleanKnownObjectFunctions.js +19 -0
- package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js +70 -2
- package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js +29 -7
- 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 +510 -7
- package/packages/ai/src/lib/generateEntityScenarioData.js.map +1 -1
- package/packages/ai/src/lib/generateEntityScenarios.js +19 -1
- package/packages/ai/src/lib/generateEntityScenarios.js.map +1 -1
- package/packages/ai/src/lib/generateExecutionFlows.js +273 -4
- package/packages/ai/src/lib/generateExecutionFlows.js.map +1 -1
- package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js +738 -40
- 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/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 +131 -27
- 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/analysisContext.js +30 -5
- package/packages/analyze/src/lib/analysisContext.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js +8 -4
- package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.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/validateDependencyAnalyses.js +31 -7
- package/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js +116 -66
- package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +37 -5
- package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +65 -0
- 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/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
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import OpenAI from 'openai';
|
|
2
2
|
import * as lib from '../lib';
|
|
3
|
+
import { trackDataSnapshot } from './e2eDataTracking';
|
|
3
4
|
|
|
4
5
|
import PQueue from 'p-queue';
|
|
5
6
|
import { default as PRetry, Options } from 'p-retry';
|
|
@@ -9,6 +10,7 @@ import { getModelInfo } from './modelInfo';
|
|
|
9
10
|
import { AI } from './types';
|
|
10
11
|
import { callClaudeCli } from './services/claudeCliAIService';
|
|
11
12
|
import { isClaudeCliMode } from './services/aiServiceMode';
|
|
13
|
+
import { awsLogDebugLevel } from '~codeyam/utils';
|
|
12
14
|
|
|
13
15
|
// set to 'true' only locally for e.g. benchmarking unassisted error rates
|
|
14
16
|
const RETRIES_DISABLED = false;
|
|
@@ -66,7 +68,11 @@ export default async function completionCall({
|
|
|
66
68
|
// When CODEYAM_LLM_FIXTURES_DIR is set, load responses from captured JSON files
|
|
67
69
|
// instead of making real API calls
|
|
68
70
|
if (process.env.CODEYAM_LLM_FIXTURES_DIR) {
|
|
69
|
-
return await replayLlmCall(
|
|
71
|
+
return await replayLlmCall(
|
|
72
|
+
type,
|
|
73
|
+
process.env.CODEYAM_LLM_FIXTURES_DIR,
|
|
74
|
+
systemMessage,
|
|
75
|
+
);
|
|
70
76
|
}
|
|
71
77
|
|
|
72
78
|
console.log(
|
|
@@ -133,10 +139,35 @@ export default async function completionCall({
|
|
|
133
139
|
() => {
|
|
134
140
|
queueEndTime = Date.now();
|
|
135
141
|
return PRetry(
|
|
136
|
-
() => {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
142
|
+
async () => {
|
|
143
|
+
const callStartTime = Date.now();
|
|
144
|
+
const waitingMessages = [
|
|
145
|
+
'Waiting for LLM response',
|
|
146
|
+
'Still waiting for LLM response',
|
|
147
|
+
'LLM call in progress',
|
|
148
|
+
'Processing LLM request',
|
|
149
|
+
'Awaiting LLM completion',
|
|
150
|
+
];
|
|
151
|
+
|
|
152
|
+
const logInterval = setInterval(() => {
|
|
153
|
+
const elapsedSeconds = Math.floor(
|
|
154
|
+
(Date.now() - callStartTime) / 1000,
|
|
155
|
+
);
|
|
156
|
+
const messageIndex =
|
|
157
|
+
Math.floor(elapsedSeconds / 10) % waitingMessages.length;
|
|
158
|
+
awsLogDebugLevel(
|
|
159
|
+
1,
|
|
160
|
+
`${waitingMessages[messageIndex]} [type=${type}, model=${model}, elapsed=${elapsedSeconds}s]`,
|
|
161
|
+
);
|
|
162
|
+
}, 10000);
|
|
163
|
+
|
|
164
|
+
try {
|
|
165
|
+
return await openai.chat.completions.create(params, {
|
|
166
|
+
timeout: 5 * 60 * 1000, // 5 minute timeout
|
|
167
|
+
});
|
|
168
|
+
} finally {
|
|
169
|
+
clearInterval(logInterval);
|
|
170
|
+
}
|
|
140
171
|
},
|
|
141
172
|
{
|
|
142
173
|
...defaultRetryOptions,
|
|
@@ -282,21 +313,46 @@ Please provide a corrected version with valid JSON only. Do not include any expl
|
|
|
282
313
|
const correctionChatCompletion = await queue.add(
|
|
283
314
|
() => {
|
|
284
315
|
return PRetry(
|
|
285
|
-
() => {
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
316
|
+
async () => {
|
|
317
|
+
const correctionStartTime = Date.now();
|
|
318
|
+
const waitingMessages = [
|
|
319
|
+
'Waiting for LLM correction response',
|
|
320
|
+
'Still waiting for LLM correction',
|
|
321
|
+
'LLM correction in progress',
|
|
322
|
+
'Processing LLM correction request',
|
|
323
|
+
'Awaiting LLM correction completion',
|
|
324
|
+
];
|
|
325
|
+
|
|
326
|
+
const logInterval = setInterval(() => {
|
|
327
|
+
const elapsedSeconds = Math.floor(
|
|
328
|
+
(Date.now() - correctionStartTime) / 1000,
|
|
329
|
+
);
|
|
330
|
+
const messageIndex =
|
|
331
|
+
Math.floor(elapsedSeconds / 10) % waitingMessages.length;
|
|
332
|
+
awsLogDebugLevel(
|
|
333
|
+
1,
|
|
334
|
+
`${waitingMessages[messageIndex]} [type=${type}, model=${model}, elapsed=${elapsedSeconds}s]`,
|
|
335
|
+
);
|
|
336
|
+
}, 10000);
|
|
337
|
+
|
|
338
|
+
try {
|
|
339
|
+
return await openai.chat.completions.create(
|
|
340
|
+
{
|
|
341
|
+
...params,
|
|
342
|
+
messages: [
|
|
343
|
+
{ role: 'system', content: systemMessage },
|
|
344
|
+
{ role: 'user', content: prompt },
|
|
345
|
+
{ role: 'assistant', content: completion },
|
|
346
|
+
{ role: 'user', content: correctionPrompt },
|
|
347
|
+
],
|
|
348
|
+
},
|
|
349
|
+
{
|
|
350
|
+
timeout: 5 * 60 * 1000,
|
|
351
|
+
},
|
|
352
|
+
);
|
|
353
|
+
} finally {
|
|
354
|
+
clearInterval(logInterval);
|
|
355
|
+
}
|
|
300
356
|
},
|
|
301
357
|
{
|
|
302
358
|
...defaultRetryOptions,
|
|
@@ -372,6 +428,12 @@ Please provide a corrected version with valid JSON only. Do not include any expl
|
|
|
372
428
|
}
|
|
373
429
|
}
|
|
374
430
|
|
|
431
|
+
// Track the completion for E2E debugging
|
|
432
|
+
trackDataSnapshot(`completionCall_${type}`, {
|
|
433
|
+
completion,
|
|
434
|
+
finishReason: chatCompletion.choices[0].finish_reason,
|
|
435
|
+
});
|
|
436
|
+
|
|
375
437
|
return {
|
|
376
438
|
finishReason: chatCompletion.choices[0].finish_reason,
|
|
377
439
|
completion,
|
|
@@ -388,11 +450,13 @@ export const QueueSize = () => queue.size;
|
|
|
388
450
|
*
|
|
389
451
|
* @param type - The prompt type to look up (e.g., 'generateEntityScenarios')
|
|
390
452
|
* @param fixturesDir - Directory containing captured LLM call JSON files
|
|
453
|
+
* @param systemMessage - The system message for the call (used for content-based matching)
|
|
391
454
|
* @returns Mocked completion response matching the structure of a real LLM call
|
|
392
455
|
*/
|
|
393
456
|
async function replayLlmCall(
|
|
394
457
|
type: string,
|
|
395
458
|
fixturesDir: string,
|
|
459
|
+
systemMessage?: string,
|
|
396
460
|
): Promise<{
|
|
397
461
|
finishReason: string;
|
|
398
462
|
completion: string;
|
|
@@ -443,6 +507,16 @@ async function replayLlmCall(
|
|
|
443
507
|
}
|
|
444
508
|
}
|
|
445
509
|
|
|
510
|
+
// Sort fixtures by created_at timestamp to ensure deterministic ordering
|
|
511
|
+
// This is critical because filesystem order is not guaranteed
|
|
512
|
+
for (const promptType of Object.keys(callsByType)) {
|
|
513
|
+
callsByType[promptType].sort((a, b) => {
|
|
514
|
+
const timeA = a.created_at ?? 0;
|
|
515
|
+
const timeB = b.created_at ?? 0;
|
|
516
|
+
return timeA - timeB;
|
|
517
|
+
});
|
|
518
|
+
}
|
|
519
|
+
|
|
446
520
|
const matchingCalls = callsByType[type];
|
|
447
521
|
|
|
448
522
|
if (!matchingCalls || matchingCalls.length === 0) {
|
|
@@ -468,34 +542,124 @@ async function replayLlmCall(
|
|
|
468
542
|
};
|
|
469
543
|
}
|
|
470
544
|
|
|
471
|
-
//
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
545
|
+
// For scenario data generation calls, match by scenario name instead of cycling by index.
|
|
546
|
+
// This is critical because scenarios may be processed in parallel with Promise.all,
|
|
547
|
+
// causing non-deterministic call order. Matching by scenario name ensures each call
|
|
548
|
+
// gets the correct fixture regardless of execution order.
|
|
549
|
+
//
|
|
550
|
+
// We group fixtures by scenario name and track indices per scenario to handle
|
|
551
|
+
// multiple calls for the same scenario (e.g., main call + continuation call).
|
|
552
|
+
let call: any;
|
|
553
|
+
const scenarioBasedTypes = [
|
|
554
|
+
'generateEntityScenarioData',
|
|
555
|
+
'generateChunkMockData',
|
|
556
|
+
'generateMissingMockData',
|
|
557
|
+
];
|
|
558
|
+
|
|
559
|
+
if (scenarioBasedTypes.includes(type) && systemMessage) {
|
|
560
|
+
// Extract scenario name from system message: 'Scenario name must match exactly: "NAME"'
|
|
561
|
+
// or from chunk system message which includes scenario name
|
|
562
|
+
const scenarioNameMatch = systemMessage.match(
|
|
563
|
+
/Scenario name must match exactly: "([^"]+)"/,
|
|
564
|
+
);
|
|
565
|
+
const requestedScenarioName = scenarioNameMatch?.[1];
|
|
566
|
+
|
|
567
|
+
if (requestedScenarioName) {
|
|
568
|
+
// Group fixtures by scenario name
|
|
569
|
+
const fixturesByScenario: Record<string, any[]> = {};
|
|
570
|
+
for (const fixture of matchingCalls) {
|
|
571
|
+
try {
|
|
572
|
+
const props = JSON.parse(fixture.props || '{}');
|
|
573
|
+
const scenarioName = props.scenario?.name || '__NO_SCENARIO__';
|
|
574
|
+
if (!fixturesByScenario[scenarioName]) {
|
|
575
|
+
fixturesByScenario[scenarioName] = [];
|
|
576
|
+
}
|
|
577
|
+
fixturesByScenario[scenarioName].push(fixture);
|
|
578
|
+
} catch {
|
|
579
|
+
// Skip fixtures that can't be parsed
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
const scenarioFixtures = fixturesByScenario[requestedScenarioName];
|
|
584
|
+
if (scenarioFixtures && scenarioFixtures.length > 0) {
|
|
585
|
+
// Track call index per (type, scenario) combination
|
|
586
|
+
const scenarioCallKey = `${fixturesDir}::${type}::${requestedScenarioName}`;
|
|
587
|
+
if (callIndexByType[scenarioCallKey] === undefined) {
|
|
588
|
+
callIndexByType[scenarioCallKey] = 0;
|
|
589
|
+
}
|
|
590
|
+
const scenarioCallIndex = callIndexByType[scenarioCallKey];
|
|
591
|
+
callIndexByType[scenarioCallKey] =
|
|
592
|
+
(scenarioCallIndex + 1) % scenarioFixtures.length;
|
|
593
|
+
|
|
594
|
+
call = scenarioFixtures[scenarioCallIndex];
|
|
595
|
+
console.log(
|
|
596
|
+
`CodeYam Test: ✅ Matched fixture for scenario '${requestedScenarioName}' [${scenarioCallIndex + 1}/${scenarioFixtures.length}]`,
|
|
597
|
+
);
|
|
598
|
+
} else {
|
|
599
|
+
const availableScenarios = Object.keys(fixturesByScenario).join(', ');
|
|
600
|
+
console.warn(
|
|
601
|
+
`CodeYam Test: ⚠️ No fixture found for scenario '${requestedScenarioName}'. Available: [${availableScenarios}]`,
|
|
602
|
+
);
|
|
603
|
+
}
|
|
604
|
+
} else {
|
|
605
|
+
console.warn(
|
|
606
|
+
`CodeYam Test: ⚠️ Could not extract scenario name from system message for type '${type}'`,
|
|
607
|
+
);
|
|
608
|
+
}
|
|
475
609
|
}
|
|
476
|
-
const callIndex = callIndexByType[callKey];
|
|
477
|
-
callIndexByType[callKey] = (callIndex + 1) % matchingCalls.length;
|
|
478
610
|
|
|
479
|
-
|
|
611
|
+
// Fall back to index-based cycling if no scenario match was found
|
|
612
|
+
if (!call) {
|
|
613
|
+
const callKey = `${fixturesDir}::${type}`;
|
|
614
|
+
if (callIndexByType[callKey] === undefined) {
|
|
615
|
+
callIndexByType[callKey] = 0;
|
|
616
|
+
}
|
|
617
|
+
const callIndex = callIndexByType[callKey];
|
|
618
|
+
callIndexByType[callKey] = (callIndex + 1) % matchingCalls.length;
|
|
619
|
+
call = matchingCalls[callIndex];
|
|
480
620
|
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
621
|
+
console.log(
|
|
622
|
+
`CodeYam Test: Replaying LLM response for '${type}' [${callIndex + 1}/${matchingCalls.length}]`,
|
|
623
|
+
);
|
|
624
|
+
}
|
|
484
625
|
|
|
485
626
|
// Extract the actual completion content from the OpenAI response
|
|
486
627
|
// The response field contains the full OpenAI API response as a JSON string
|
|
487
|
-
let
|
|
628
|
+
let rawCompletion: string;
|
|
488
629
|
try {
|
|
489
630
|
const responseObj = JSON.parse(call.response);
|
|
490
|
-
|
|
631
|
+
rawCompletion =
|
|
632
|
+
responseObj.choices?.[0]?.message?.content || call.response;
|
|
491
633
|
} catch {
|
|
492
634
|
// If parsing fails, use the response as-is (for backwards compatibility)
|
|
493
|
-
|
|
635
|
+
rawCompletion = call.response;
|
|
494
636
|
}
|
|
495
637
|
|
|
638
|
+
// Apply the same post-processing as real completionCall() does
|
|
639
|
+
// This ensures replayed responses are processed identically to real API calls
|
|
640
|
+
// Step 1: Remove <think>...</think> sections that some models include
|
|
641
|
+
let processedCompletion = rawCompletion;
|
|
642
|
+
if (rawCompletion) {
|
|
643
|
+
processedCompletion = rawCompletion
|
|
644
|
+
.replace(/<think>[\s\S]*?<\/think>/g, '')
|
|
645
|
+
.trim();
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
// Step 2: Extract JSON from text that might have extra content around it
|
|
649
|
+
// (Only for JSON responses - we assume most LLM calls expect JSON)
|
|
650
|
+
const completion = processedCompletion
|
|
651
|
+
? (processedCompletion.match(/\{[\s\S]*\}/)?.[0] ?? processedCompletion)
|
|
652
|
+
: processedCompletion;
|
|
653
|
+
|
|
654
|
+
// Track the replayed completion for E2E debugging
|
|
655
|
+
trackDataSnapshot(`completionCall_${type}`, {
|
|
656
|
+
completion: completion || '',
|
|
657
|
+
finishReason: 'stop',
|
|
658
|
+
});
|
|
659
|
+
|
|
496
660
|
return {
|
|
497
661
|
finishReason: 'stop',
|
|
498
|
-
completion,
|
|
662
|
+
completion: completion || '',
|
|
499
663
|
stats: {
|
|
500
664
|
model: call.model ?? 'fixture',
|
|
501
665
|
prompt_type: type,
|
|
@@ -82,6 +82,8 @@
|
|
|
82
82
|
import { ScopeAnalysis } from '~codeyam/types';
|
|
83
83
|
import { EquivalencyManager } from './equivalencyManagers/EquivalencyManager';
|
|
84
84
|
import fillInSchemaGapsAndUnknowns from './helpers/fillInSchemaGapsAndUnknowns';
|
|
85
|
+
import { clearCleanKnownObjectFunctionsCache } from './helpers/cleanKnownObjectFunctions';
|
|
86
|
+
import { clearCleanNonObjectFunctionsCache } from './helpers/cleanNonObjectFunctions';
|
|
85
87
|
|
|
86
88
|
/**
|
|
87
89
|
* Patterns that indicate recursive type structures in schema paths.
|
|
@@ -332,6 +334,19 @@ export function resetScopeDataStructureMetrics() {
|
|
|
332
334
|
followEquivalenciesEarlyExitPhase1Count = 0;
|
|
333
335
|
followEquivalenciesWithWorkCount = 0;
|
|
334
336
|
addEquivalencyCallCount = 0;
|
|
337
|
+
|
|
338
|
+
// Clear module-level caches to prevent unbounded memory growth across entities
|
|
339
|
+
const knownObjectCache = clearCleanKnownObjectFunctionsCache();
|
|
340
|
+
const nonObjectCache = clearCleanNonObjectFunctionsCache();
|
|
341
|
+
if (knownObjectCache.count > 0 || nonObjectCache.count > 0) {
|
|
342
|
+
const totalBytes =
|
|
343
|
+
knownObjectCache.estimatedBytes + nonObjectCache.estimatedBytes;
|
|
344
|
+
console.log('CodeYam: Cleared analysis caches', {
|
|
345
|
+
knownObjectCache: `${knownObjectCache.count} entries, ${(knownObjectCache.estimatedBytes / 1024).toFixed(1)}KB`,
|
|
346
|
+
nonObjectCache: `${nonObjectCache.count} entries, ${(nonObjectCache.estimatedBytes / 1024).toFixed(1)}KB`,
|
|
347
|
+
totalKB: `${(totalBytes / 1024).toFixed(1)}KB`,
|
|
348
|
+
});
|
|
349
|
+
}
|
|
335
350
|
}
|
|
336
351
|
|
|
337
352
|
// Performance: Pre-computed Sets for equivalency reason filtering (O(1) vs O(n))
|
|
@@ -436,6 +451,13 @@ export class ScopeDataStructure {
|
|
|
436
451
|
import('../astScopes/types').ConditionalUsage[]
|
|
437
452
|
> = {};
|
|
438
453
|
|
|
454
|
+
/**
|
|
455
|
+
* JSX rendering usages collected during AST analysis.
|
|
456
|
+
* Tracks arrays rendered via .map() and strings interpolated in JSX.
|
|
457
|
+
*/
|
|
458
|
+
private rawJsxRenderingUsages: import('../astScopes/types').JsxRenderingUsage[] =
|
|
459
|
+
[];
|
|
460
|
+
|
|
439
461
|
private lastAddToSchemaId = 0;
|
|
440
462
|
private lastEquivalencyId = 0;
|
|
441
463
|
private lastEquivalencyDatabaseId = 0;
|
|
@@ -3876,13 +3898,29 @@ export class ScopeDataStructure {
|
|
|
3876
3898
|
// "useFetcher<...>().state" for execution flow validation
|
|
3877
3899
|
if (equivalentValue.schemaPath.endsWith('.functionCallReturnValue')) {
|
|
3878
3900
|
// Extract the hook call path (everything before .functionCallReturnValue)
|
|
3879
|
-
|
|
3901
|
+
let hookCallPath = equivalentValue.schemaPath.slice(
|
|
3880
3902
|
0,
|
|
3881
3903
|
-'.functionCallReturnValue'.length,
|
|
3882
3904
|
);
|
|
3883
3905
|
// Only include if it looks like a hook call (contains parentheses)
|
|
3884
3906
|
// and the variable name (path) is a simple identifier (no dots)
|
|
3885
3907
|
if (hookCallPath.includes('(') && !path.includes('.')) {
|
|
3908
|
+
// Special case: If hookCallPath is a callback scope (cyScope pattern),
|
|
3909
|
+
// trace through it to find what the callback actually returns.
|
|
3910
|
+
// This handles useState(() => { return prop; }) patterns.
|
|
3911
|
+
const cyScopeMatch = hookCallPath.match(/^(cyScope\d+)\(\)$/);
|
|
3912
|
+
if (cyScopeMatch) {
|
|
3913
|
+
// Use the equivalency database to trace the callback's return value
|
|
3914
|
+
// to its actual source (e.g., viewModeFromUrl -> segments -> params -> useParams)
|
|
3915
|
+
const dbEntry = this.getEquivalenciesDatabaseEntry(
|
|
3916
|
+
scopeNode.name, // Component scope
|
|
3917
|
+
path, // variable name (e.g., viewMode)
|
|
3918
|
+
);
|
|
3919
|
+
if (dbEntry?.sourceCandidates?.length > 0) {
|
|
3920
|
+
// Use the traced source instead of the callback scope
|
|
3921
|
+
hookCallPath = dbEntry.sourceCandidates[0].schemaPath;
|
|
3922
|
+
}
|
|
3923
|
+
}
|
|
3886
3924
|
equivalentSignatureVariables[path] = hookCallPath;
|
|
3887
3925
|
}
|
|
3888
3926
|
}
|
|
@@ -4000,6 +4038,7 @@ export class ScopeDataStructure {
|
|
|
4000
4038
|
// E.g., analysis → currentEntityAnalysis → useLoaderData().functionCallReturnValue.currentEntityAnalysis
|
|
4001
4039
|
// We need multiple passes because resolutions can depend on each other
|
|
4002
4040
|
const maxIterations = 5; // Prevent infinite loops
|
|
4041
|
+
|
|
4003
4042
|
for (let iteration = 0; iteration < maxIterations; iteration++) {
|
|
4004
4043
|
let changed = false;
|
|
4005
4044
|
|
|
@@ -4078,6 +4117,40 @@ export class ScopeDataStructure {
|
|
|
4078
4117
|
}
|
|
4079
4118
|
}
|
|
4080
4119
|
|
|
4120
|
+
// Fix 38: Handle cyScope lazy initializer return values
|
|
4121
|
+
// When we have viewMode -> cyScope20(), trace through to find what cyScope20 returns.
|
|
4122
|
+
// The lazy initializer's return value should be the controllable data source.
|
|
4123
|
+
// Pattern: cyScopeN() where N is a number
|
|
4124
|
+
const cyScopeMatch = sourcePath.match(/^(cyScope\d+)\(\)$/);
|
|
4125
|
+
if (cyScopeMatch) {
|
|
4126
|
+
const cyScopeName = cyScopeMatch[1];
|
|
4127
|
+
const cyScopeNode = this.scopeNodes[cyScopeName];
|
|
4128
|
+
|
|
4129
|
+
if (cyScopeNode?.equivalencies) {
|
|
4130
|
+
// Look for returnValue equivalency in the cyScope
|
|
4131
|
+
const returnValueEquivs =
|
|
4132
|
+
cyScopeNode.equivalencies['returnValue'];
|
|
4133
|
+
if (returnValueEquivs && returnValueEquivs.length > 0) {
|
|
4134
|
+
// Get the first return value source
|
|
4135
|
+
const returnSource = returnValueEquivs[0].schemaPath;
|
|
4136
|
+
|
|
4137
|
+
// If the return source is a simple variable (not a complex path),
|
|
4138
|
+
// resolve varName directly to that variable
|
|
4139
|
+
if (
|
|
4140
|
+
returnSource &&
|
|
4141
|
+
!returnSource.includes('(') &&
|
|
4142
|
+
!returnSource.includes('[')
|
|
4143
|
+
) {
|
|
4144
|
+
// Update varName to point to the return source
|
|
4145
|
+
if (equivalentSignatureVariables[varName] !== returnSource) {
|
|
4146
|
+
equivalentSignatureVariables[varName] = returnSource;
|
|
4147
|
+
changed = true;
|
|
4148
|
+
}
|
|
4149
|
+
}
|
|
4150
|
+
}
|
|
4151
|
+
}
|
|
4152
|
+
}
|
|
4153
|
+
|
|
4081
4154
|
continue;
|
|
4082
4155
|
}
|
|
4083
4156
|
|
|
@@ -4503,6 +4576,33 @@ export class ScopeDataStructure {
|
|
|
4503
4576
|
return enriched;
|
|
4504
4577
|
}
|
|
4505
4578
|
|
|
4579
|
+
/**
|
|
4580
|
+
* Add JSX rendering usages from AST analysis.
|
|
4581
|
+
* These track arrays rendered via .map() and strings interpolated in JSX.
|
|
4582
|
+
*/
|
|
4583
|
+
addJsxRenderingUsages(
|
|
4584
|
+
usages: import('../astScopes/types').JsxRenderingUsage[],
|
|
4585
|
+
): void {
|
|
4586
|
+
// Add usages, avoiding duplicates based on path and renderingType
|
|
4587
|
+
for (const usage of usages) {
|
|
4588
|
+
const exists = this.rawJsxRenderingUsages.some(
|
|
4589
|
+
(existing) =>
|
|
4590
|
+
existing.path === usage.path &&
|
|
4591
|
+
existing.renderingType === usage.renderingType,
|
|
4592
|
+
);
|
|
4593
|
+
if (!exists) {
|
|
4594
|
+
this.rawJsxRenderingUsages.push(usage);
|
|
4595
|
+
}
|
|
4596
|
+
}
|
|
4597
|
+
}
|
|
4598
|
+
|
|
4599
|
+
/**
|
|
4600
|
+
* Get JSX rendering usages collected during analysis.
|
|
4601
|
+
*/
|
|
4602
|
+
getJsxRenderingUsages(): import('../astScopes/types').JsxRenderingUsage[] {
|
|
4603
|
+
return this.rawJsxRenderingUsages;
|
|
4604
|
+
}
|
|
4605
|
+
|
|
4506
4606
|
toSerializable(): SerializableDataStructure {
|
|
4507
4607
|
// Helper to clean cyScope and cyDuplicateKey from a string for output
|
|
4508
4608
|
const cleanCyScope = (str: string): string =>
|
|
@@ -5003,6 +5103,12 @@ export class ScopeDataStructure {
|
|
|
5003
5103
|
? enrichedGatingConditions
|
|
5004
5104
|
: undefined;
|
|
5005
5105
|
|
|
5106
|
+
// Get JSX rendering usages (arrays via .map(), strings via interpolation)
|
|
5107
|
+
const jsxRenderingUsages =
|
|
5108
|
+
this.rawJsxRenderingUsages.length > 0
|
|
5109
|
+
? this.rawJsxRenderingUsages
|
|
5110
|
+
: undefined;
|
|
5111
|
+
|
|
5006
5112
|
return {
|
|
5007
5113
|
externalFunctionCalls: deduplicatedExternalFunctionCalls,
|
|
5008
5114
|
rootFunction,
|
|
@@ -5013,6 +5119,7 @@ export class ScopeDataStructure {
|
|
|
5013
5119
|
conditionalEffects,
|
|
5014
5120
|
compoundConditionals,
|
|
5015
5121
|
childBoundaryGatingConditions,
|
|
5122
|
+
jsxRenderingUsages,
|
|
5016
5123
|
};
|
|
5017
5124
|
}
|
|
5018
5125
|
|