@codeyam/codeyam-cli 0.1.0-staging.1669d45 → 0.1.0-staging.2a88920
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/analyzer-template/.build-info.json +8 -8
- package/analyzer-template/log.txt +3 -3
- package/analyzer-template/package.json +5 -5
- package/analyzer-template/packages/ai/index.ts +15 -2
- package/analyzer-template/packages/ai/src/lib/analyzeScope.ts +87 -51
- package/analyzer-template/packages/ai/src/lib/astScopes/arrayDerivationDetector.ts +199 -0
- package/analyzer-template/packages/ai/src/lib/astScopes/astScopeAnalyzer.ts +98 -9
- package/analyzer-template/packages/ai/src/lib/astScopes/methodSemantics.ts +139 -23
- package/analyzer-template/packages/ai/src/lib/astScopes/patterns/variableDeclarationHandler.ts +6 -126
- package/analyzer-template/packages/ai/src/lib/astScopes/processExpression.ts +555 -28
- package/analyzer-template/packages/ai/src/lib/astScopes/types.ts +88 -7
- package/analyzer-template/packages/ai/src/lib/completionCall.ts +198 -34
- package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +772 -243
- package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.ts +205 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.ts +10 -2
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/BatchSchemaProcessor.ts +16 -3
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/ScopeTreeManager.ts +6 -4
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.ts +43 -1
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.ts +122 -15
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertTypeAnnotationsToValues.ts +160 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/deduplicateFunctionSchemas.ts +40 -30
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.ts +319 -88
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/fixNullIdsBySchema.ts +129 -0
- package/analyzer-template/packages/ai/src/lib/dataStructureChunking.ts +156 -0
- package/analyzer-template/packages/ai/src/lib/e2eDataTracking.ts +334 -0
- package/analyzer-template/packages/ai/src/lib/extractCriticalDataKeys.ts +120 -0
- package/analyzer-template/packages/ai/src/lib/generateEntityScenarioData.ts +642 -7
- package/analyzer-template/packages/ai/src/lib/generateEntityScenarios.ts +35 -6
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlows.ts +383 -6
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionalEffects.ts +1 -1
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionals.ts +1299 -51
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromJsxUsages.ts +239 -0
- package/analyzer-template/packages/ai/src/lib/mergeStatements.ts +90 -96
- package/analyzer-template/packages/ai/src/lib/promptGenerators/gatherAttributesMap.ts +10 -7
- package/analyzer-template/packages/ai/src/lib/promptGenerators/generateChunkPrompt.ts +82 -0
- package/analyzer-template/packages/ai/src/lib/promptGenerators/generateCriticalKeysPrompt.ts +103 -0
- package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.ts +23 -6
- package/analyzer-template/packages/ai/src/lib/promptGenerators/simplifyKeysForLLM.ts +391 -0
- package/analyzer-template/packages/ai/src/lib/resolvePathToControllable.ts +179 -45
- package/analyzer-template/packages/ai/src/lib/worker/SerializableDataStructure.ts +26 -4
- package/analyzer-template/packages/ai/src/lib/worker/analyzeScopeWorker.ts +114 -2
- package/analyzer-template/packages/analyze/src/lib/FileAnalyzer.ts +65 -59
- package/analyzer-template/packages/analyze/src/lib/ProjectAnalyzer.ts +113 -26
- package/analyzer-template/packages/analyze/src/lib/analysisContext.ts +44 -4
- package/analyzer-template/packages/analyze/src/lib/asts/sourceFiles/getAllDeclaredEntityNodes.ts +19 -0
- package/analyzer-template/packages/analyze/src/lib/asts/sourceFiles/getAllEntityNodes.ts +19 -0
- package/analyzer-template/packages/analyze/src/lib/asts/sourceFiles/getAllExports.ts +11 -0
- package/analyzer-template/packages/analyze/src/lib/asts/sourceFiles/getImportsAnalysis.ts +8 -0
- package/analyzer-template/packages/analyze/src/lib/asts/sourceFiles/getResolvedModule.ts +49 -1
- package/analyzer-template/packages/analyze/src/lib/asts/sourceFiles/getSourceFilesForAllImports.ts +2 -1
- package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.ts +30 -19
- package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities.ts +14 -4
- package/analyzer-template/packages/analyze/src/lib/files/analyze/dependencyResolver.ts +6 -0
- package/analyzer-template/packages/analyze/src/lib/files/analyze/gatherEntityMap.ts +4 -2
- package/analyzer-template/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.ts +33 -10
- package/analyzer-template/packages/analyze/src/lib/files/analyzeRemixRoute.ts +4 -5
- package/analyzer-template/packages/analyze/src/lib/files/getImportedExports.ts +14 -12
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.ts +189 -76
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.ts +29 -0
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +77 -9
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.ts +118 -10
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +276 -17
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeValidatedDataStructures.ts +56 -11
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/propagateArrayItemSchemas.ts +474 -0
- package/analyzer-template/packages/analyze/src/lib/files/setImportedExports.ts +2 -1
- package/analyzer-template/packages/analyze/src/lib/utils/getFileByPath.ts +19 -0
- package/analyzer-template/packages/aws/package.json +2 -2
- package/analyzer-template/packages/database/src/lib/kysely/db.ts +8 -1
- package/analyzer-template/packages/database/src/lib/kysely/tables/commitsTable.ts +6 -0
- package/analyzer-template/packages/database/src/lib/loadAnalyses.ts +58 -1
- package/analyzer-template/packages/database/src/lib/loadAnalysis.ts +13 -0
- package/analyzer-template/packages/database/src/lib/loadBranch.ts +16 -1
- package/analyzer-template/packages/database/src/lib/loadCommit.ts +11 -0
- package/analyzer-template/packages/database/src/lib/loadCommits.ts +28 -0
- package/analyzer-template/packages/database/src/lib/loadEntities.ts +26 -3
- package/analyzer-template/packages/database/src/lib/loadEntityBranches.ts +12 -0
- package/analyzer-template/packages/database/src/lib/updateCommitMetadata.ts +7 -14
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js +8 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/analysesTable.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/commitsTable.d.ts +1 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/commitsTable.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/commitsTable.js +3 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/commitsTable.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadAnalyses.d.ts +2 -0
- package/analyzer-template/packages/github/dist/database/src/lib/loadAnalyses.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadAnalyses.js +45 -2
- package/analyzer-template/packages/github/dist/database/src/lib/loadAnalyses.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadAnalysis.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadAnalysis.js +8 -0
- package/analyzer-template/packages/github/dist/database/src/lib/loadAnalysis.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadBranch.js +11 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadBranch.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadCommit.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadCommit.js +7 -0
- package/analyzer-template/packages/github/dist/database/src/lib/loadCommit.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.d.ts +3 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.js +22 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.d.ts +3 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.js +23 -4
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntityBranches.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntityBranches.js +9 -0
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntityBranches.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.d.ts +2 -2
- package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js +5 -4
- package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js.map +1 -1
- package/analyzer-template/packages/github/dist/types/index.d.ts +1 -1
- package/analyzer-template/packages/github/dist/types/index.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/types/index.js.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/types/Analysis.d.ts +25 -1
- package/analyzer-template/packages/github/dist/types/src/types/Analysis.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/types/Commit.d.ts +2 -0
- package/analyzer-template/packages/github/dist/types/src/types/Commit.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/types/ScenariosDataStructure.d.ts +56 -6
- package/analyzer-template/packages/github/dist/types/src/types/ScenariosDataStructure.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/types/ScopeAnalysis.d.ts +6 -1
- package/analyzer-template/packages/github/dist/types/src/types/ScopeAnalysis.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/utils/src/lib/safeFileName.d.ts +9 -1
- package/analyzer-template/packages/github/dist/utils/src/lib/safeFileName.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/utils/src/lib/safeFileName.js +29 -3
- package/analyzer-template/packages/github/dist/utils/src/lib/safeFileName.js.map +1 -1
- package/analyzer-template/packages/github/package.json +1 -1
- package/analyzer-template/packages/types/index.ts +1 -0
- package/analyzer-template/packages/types/src/types/Analysis.ts +25 -0
- package/analyzer-template/packages/types/src/types/Commit.ts +2 -0
- package/analyzer-template/packages/types/src/types/ScenariosDataStructure.ts +70 -6
- package/analyzer-template/packages/types/src/types/ScopeAnalysis.ts +6 -1
- package/analyzer-template/packages/utils/dist/types/index.d.ts +1 -1
- package/analyzer-template/packages/utils/dist/types/index.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/types/index.js.map +1 -1
- package/analyzer-template/packages/utils/dist/types/src/types/Analysis.d.ts +25 -1
- package/analyzer-template/packages/utils/dist/types/src/types/Analysis.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/types/src/types/Commit.d.ts +2 -0
- package/analyzer-template/packages/utils/dist/types/src/types/Commit.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/types/src/types/ScenariosDataStructure.d.ts +56 -6
- package/analyzer-template/packages/utils/dist/types/src/types/ScenariosDataStructure.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/types/src/types/ScopeAnalysis.d.ts +6 -1
- package/analyzer-template/packages/utils/dist/types/src/types/ScopeAnalysis.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/safeFileName.d.ts +9 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/safeFileName.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/safeFileName.js +29 -3
- package/analyzer-template/packages/utils/dist/utils/src/lib/safeFileName.js.map +1 -1
- package/analyzer-template/packages/utils/src/lib/safeFileName.ts +48 -3
- package/analyzer-template/playwright/capture.ts +20 -8
- package/analyzer-template/playwright/captureStatic.ts +1 -1
- package/analyzer-template/project/analyzeBaselineCommit.ts +5 -0
- package/analyzer-template/project/analyzeRegularCommit.ts +5 -0
- package/analyzer-template/project/captureLibraryFunctionDirect.ts +29 -26
- package/analyzer-template/project/constructMockCode.ts +367 -37
- package/analyzer-template/project/createEntitiesAndSortFiles.ts +83 -0
- package/analyzer-template/project/loadReadyToBeCaptured.ts +65 -41
- package/analyzer-template/project/orchestrateCapture/AwsCaptureTaskRunner.ts +12 -4
- package/analyzer-template/project/orchestrateCapture/SequentialCaptureTaskRunner.ts +18 -7
- package/analyzer-template/project/orchestrateCapture/taskRunner.ts +4 -2
- package/analyzer-template/project/orchestrateCapture.ts +71 -6
- package/analyzer-template/project/reconcileMockDataKeys.ts +152 -9
- package/analyzer-template/project/runAnalysis.ts +4 -0
- package/analyzer-template/project/start.ts +35 -11
- package/analyzer-template/project/writeMockDataTsx.ts +127 -4
- package/analyzer-template/project/writeScenarioComponents.ts +101 -8
- package/analyzer-template/scripts/comboWorkerLoop.cjs +98 -50
- package/background/src/lib/virtualized/project/analyzeBaselineCommit.js +5 -0
- package/background/src/lib/virtualized/project/analyzeBaselineCommit.js.map +1 -1
- package/background/src/lib/virtualized/project/analyzeRegularCommit.js +5 -0
- package/background/src/lib/virtualized/project/analyzeRegularCommit.js.map +1 -1
- package/background/src/lib/virtualized/project/captureLibraryFunctionDirect.js +3 -3
- package/background/src/lib/virtualized/project/captureLibraryFunctionDirect.js.map +1 -1
- package/background/src/lib/virtualized/project/constructMockCode.js +300 -7
- package/background/src/lib/virtualized/project/constructMockCode.js.map +1 -1
- package/background/src/lib/virtualized/project/createEntitiesAndSortFiles.js +73 -1
- package/background/src/lib/virtualized/project/createEntitiesAndSortFiles.js.map +1 -1
- package/background/src/lib/virtualized/project/loadReadyToBeCaptured.js +19 -8
- package/background/src/lib/virtualized/project/loadReadyToBeCaptured.js.map +1 -1
- package/background/src/lib/virtualized/project/orchestrateCapture/AwsCaptureTaskRunner.js +2 -2
- package/background/src/lib/virtualized/project/orchestrateCapture/AwsCaptureTaskRunner.js.map +1 -1
- package/background/src/lib/virtualized/project/orchestrateCapture/SequentialCaptureTaskRunner.js +7 -5
- package/background/src/lib/virtualized/project/orchestrateCapture/SequentialCaptureTaskRunner.js.map +1 -1
- package/background/src/lib/virtualized/project/orchestrateCapture.js +58 -6
- package/background/src/lib/virtualized/project/orchestrateCapture.js.map +1 -1
- package/background/src/lib/virtualized/project/reconcileMockDataKeys.js +126 -9
- package/background/src/lib/virtualized/project/reconcileMockDataKeys.js.map +1 -1
- package/background/src/lib/virtualized/project/runAnalysis.js +3 -0
- package/background/src/lib/virtualized/project/runAnalysis.js.map +1 -1
- package/background/src/lib/virtualized/project/start.js +32 -11
- package/background/src/lib/virtualized/project/start.js.map +1 -1
- package/background/src/lib/virtualized/project/writeMockDataTsx.js +101 -4
- package/background/src/lib/virtualized/project/writeMockDataTsx.js.map +1 -1
- package/background/src/lib/virtualized/project/writeScenarioComponents.js +57 -8
- package/background/src/lib/virtualized/project/writeScenarioComponents.js.map +1 -1
- package/codeyam-cli/src/cli.js +2 -0
- package/codeyam-cli/src/cli.js.map +1 -1
- package/codeyam-cli/src/commands/debug.js +7 -5
- package/codeyam-cli/src/commands/debug.js.map +1 -1
- package/codeyam-cli/src/commands/memory.js +273 -0
- package/codeyam-cli/src/commands/memory.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +4 -0
- package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js.map +1 -1
- package/codeyam-cli/src/utils/analysisRunner.js +21 -2
- package/codeyam-cli/src/utils/analysisRunner.js.map +1 -1
- package/codeyam-cli/src/utils/install-skills.js +42 -6
- package/codeyam-cli/src/utils/install-skills.js.map +1 -1
- package/codeyam-cli/src/utils/queue/job.js +1 -0
- package/codeyam-cli/src/utils/queue/job.js.map +1 -1
- package/codeyam-cli/src/utils/queue/manager.js +6 -0
- package/codeyam-cli/src/utils/queue/manager.js.map +1 -1
- package/codeyam-cli/src/utils/rules/index.js +5 -0
- package/codeyam-cli/src/utils/rules/index.js.map +1 -0
- package/codeyam-cli/src/utils/rules/parser.js +106 -0
- package/codeyam-cli/src/utils/rules/parser.js.map +1 -0
- package/codeyam-cli/src/utils/rules/pathMatcher.js +18 -0
- package/codeyam-cli/src/utils/rules/pathMatcher.js.map +1 -0
- package/codeyam-cli/src/utils/rules/staleness.js +132 -0
- package/codeyam-cli/src/utils/rules/staleness.js.map +1 -0
- package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +2 -0
- package/codeyam-cli/src/utils/setupClaudeCodeSettings.js.map +1 -1
- package/codeyam-cli/src/webserver/app/lib/database.js +7 -3
- package/codeyam-cli/src/webserver/app/lib/database.js.map +1 -1
- package/codeyam-cli/src/webserver/bootstrap.js +40 -0
- package/codeyam-cli/src/webserver/bootstrap.js.map +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/EntityItem-DsN1wKrm.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeBadge-COi5OvsN.js → EntityTypeBadge-DLqD3qNt.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeIcon-BwdQv49w.js → EntityTypeIcon-Ba2JVPzP.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{InlineSpinner-CEleMv_j.js → InlineSpinner-C8lyxW9k.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{InteractivePreview-D68KarMg.js → InteractivePreview-aht4aafF.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/{LibraryFunctionPreview-L75Wvqgw.js → LibraryFunctionPreview-CVtiBnY5.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{LoadingDots-C53WM8qn.js → LoadingDots-B0GLXMsr.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-CrNkmy4i.js → LogViewer-xgeCVgSM.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/ReportIssueModal-OApQuNyq.js +16 -0
- package/codeyam-cli/src/webserver/build/client/assets/{SafeScreenshot-CQifa1n-.js → SafeScreenshot-DuDvi0jm.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-CyaBFX7l.js → ScenarioViewer-DzccYyI8.js} +3 -13
- package/codeyam-cli/src/webserver/build/client/assets/{TruncatedFilePath-D36O1rzU.js → TruncatedFilePath-DyFZkK0l.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/_index-BwqWJOgH.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/activity.(_tab)-BwavGCpm.js +32 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.health-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.memory-profile-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.restart-server-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{chevron-down-DgTPh8H-.js → chevron-down-Cx24_aWc.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{chunk-EPOLDU6W-DdQKK6on.js → chunk-EPOLDU6W-CXRTFQ3F.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{circle-check-Dmr2bb1R.js → circle-check-BOARzkeR.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/copy-Bb-80kDT.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/{createLucideIcon-Do4ZLUYa.js → createLucideIcon-BdhJEx6B.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/dev.empty-BBnGWYga.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-CbdFyxZh.js → entity._sha._-BJUiQqZF.js} +12 -12
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha.scenarios._scenarioId.fullscreen-B4iCfs5M.js → entity._sha.scenarios._scenarioId.fullscreen-DavjRmOY.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.create-scenario-wDWZZO1W.js → entity._sha_.create-scenario-D1T4TGjf.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.edit._scenarioId-BMbl7MeQ.js → entity._sha_.edit._scenarioId-CTBG2mmz.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{entry.client-5wRKRIH9.js → entry.client-CS2cb_eZ.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/file-code-Dhef1kWN.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/{fileTableUtils-DD3SDH7t.js → fileTableUtils-DMJ7zii9.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/files-CJ6lTdTA.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{git-zXjT7J0G.js → git-CPTZZ-JZ.js} +8 -8
- package/codeyam-cli/src/webserver/build/client/assets/globals-D3yhhV8x.css +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{index-DLbXwndH.js → index-B1h680n5.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{index-gPZ-lad1.js → index-lzqtyFU8.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-BsPXJ81F.js → loader-circle-B7B9V-bu.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/manifest-a78b90a2.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/memory--GCbFsBE.js +92 -0
- package/codeyam-cli/src/webserver/build/client/assets/root-eVAaavTS.js +62 -0
- package/codeyam-cli/src/webserver/build/client/assets/{search-P2FKIUql.js → search-CxXUmBSd.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{settings-B2eDuBj8.js → settings-CS5f3WzT.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{simulations-L18M6-kN.js → simulations-DwFIBT09.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{triangle-alert-BDz7kbVA.js → triangle-alert-B6LgvRJg.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useCustomSizes-29dDmbH8.js → useCustomSizes-C1v1PQzo.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useLastLogLine-BUm0UVJm.js → useLastLogLine-aSv48UbS.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useReportContext-CkIOKTrZ.js → useReportContext-DYxHZQuP.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useToast-KKw5kTn-.js → useToast-mBRpZPiu.js} +1 -1
- package/codeyam-cli/src/webserver/build/server/assets/index-BM6TDT1Y.js +1 -0
- package/codeyam-cli/src/webserver/build/server/assets/server-build-dYC34MHw.js +257 -0
- package/codeyam-cli/src/webserver/build/server/index.js +1 -1
- package/codeyam-cli/src/webserver/build-info.json +5 -5
- package/codeyam-cli/templates/codeyam-memory-hook.sh +200 -0
- package/codeyam-cli/templates/codeyam:debug.md +47 -3
- package/codeyam-cli/templates/codeyam:diagnose.md +203 -25
- package/codeyam-cli/templates/codeyam:memory.md +341 -0
- package/codeyam-cli/templates/codeyam:new-rule.md +13 -0
- package/codeyam-cli/templates/rule-reflection-hook.py +160 -0
- package/codeyam-cli/templates/rules-instructions.md +93 -0
- package/package.json +8 -5
- package/packages/ai/index.js +7 -3
- package/packages/ai/index.js.map +1 -1
- package/packages/ai/src/lib/analyzeScope.js +70 -29
- package/packages/ai/src/lib/analyzeScope.js.map +1 -1
- package/packages/ai/src/lib/astScopes/arrayDerivationDetector.js +150 -0
- package/packages/ai/src/lib/astScopes/arrayDerivationDetector.js.map +1 -0
- package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js +78 -8
- package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js.map +1 -1
- package/packages/ai/src/lib/astScopes/methodSemantics.js +109 -23
- package/packages/ai/src/lib/astScopes/methodSemantics.js.map +1 -1
- package/packages/ai/src/lib/astScopes/patterns/variableDeclarationHandler.js +1 -102
- package/packages/ai/src/lib/astScopes/patterns/variableDeclarationHandler.js.map +1 -1
- package/packages/ai/src/lib/astScopes/processExpression.js +440 -27
- package/packages/ai/src/lib/astScopes/processExpression.js.map +1 -1
- package/packages/ai/src/lib/completionCall.js +161 -30
- package/packages/ai/src/lib/completionCall.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +589 -166
- package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.js +179 -0
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.js +7 -1
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/BatchSchemaProcessor.js +13 -3
- package/packages/ai/src/lib/dataStructure/helpers/BatchSchemaProcessor.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/ScopeTreeManager.js +6 -4
- package/packages/ai/src/lib/dataStructure/helpers/ScopeTreeManager.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js +41 -1
- package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js +104 -11
- package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/convertTypeAnnotationsToValues.js +159 -0
- package/packages/ai/src/lib/dataStructure/helpers/convertTypeAnnotationsToValues.js.map +1 -0
- package/packages/ai/src/lib/dataStructure/helpers/deduplicateFunctionSchemas.js +37 -20
- package/packages/ai/src/lib/dataStructure/helpers/deduplicateFunctionSchemas.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js +265 -79
- package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/fixNullIdsBySchema.js +107 -0
- package/packages/ai/src/lib/dataStructure/helpers/fixNullIdsBySchema.js.map +1 -0
- package/packages/ai/src/lib/dataStructureChunking.js +111 -0
- package/packages/ai/src/lib/dataStructureChunking.js.map +1 -0
- package/packages/ai/src/lib/e2eDataTracking.js +241 -0
- package/packages/ai/src/lib/e2eDataTracking.js.map +1 -0
- package/packages/ai/src/lib/extractCriticalDataKeys.js +96 -0
- package/packages/ai/src/lib/extractCriticalDataKeys.js.map +1 -0
- package/packages/ai/src/lib/generateEntityScenarioData.js +525 -8
- package/packages/ai/src/lib/generateEntityScenarioData.js.map +1 -1
- package/packages/ai/src/lib/generateEntityScenarios.js +26 -2
- package/packages/ai/src/lib/generateEntityScenarios.js.map +1 -1
- package/packages/ai/src/lib/generateExecutionFlows.js +281 -4
- package/packages/ai/src/lib/generateExecutionFlows.js.map +1 -1
- package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js +946 -42
- package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js.map +1 -1
- package/packages/ai/src/lib/generateExecutionFlowsFromJsxUsages.js +194 -0
- package/packages/ai/src/lib/generateExecutionFlowsFromJsxUsages.js.map +1 -0
- package/packages/ai/src/lib/mergeStatements.js +70 -51
- package/packages/ai/src/lib/mergeStatements.js.map +1 -1
- package/packages/ai/src/lib/promptGenerators/gatherAttributesMap.js +10 -4
- package/packages/ai/src/lib/promptGenerators/gatherAttributesMap.js.map +1 -1
- package/packages/ai/src/lib/promptGenerators/generateChunkPrompt.js +54 -0
- package/packages/ai/src/lib/promptGenerators/generateChunkPrompt.js.map +1 -0
- package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js +15 -7
- package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js.map +1 -1
- package/packages/ai/src/lib/promptGenerators/simplifyKeysForLLM.js +335 -0
- package/packages/ai/src/lib/promptGenerators/simplifyKeysForLLM.js.map +1 -0
- package/packages/ai/src/lib/resolvePathToControllable.js +155 -41
- package/packages/ai/src/lib/resolvePathToControllable.js.map +1 -1
- package/packages/ai/src/lib/worker/SerializableDataStructure.js +7 -0
- package/packages/ai/src/lib/worker/SerializableDataStructure.js.map +1 -1
- package/packages/ai/src/lib/worker/analyzeScopeWorker.js +94 -1
- package/packages/ai/src/lib/worker/analyzeScopeWorker.js.map +1 -1
- package/packages/analyze/src/lib/FileAnalyzer.js +60 -36
- package/packages/analyze/src/lib/FileAnalyzer.js.map +1 -1
- package/packages/analyze/src/lib/ProjectAnalyzer.js +96 -26
- package/packages/analyze/src/lib/ProjectAnalyzer.js.map +1 -1
- package/packages/analyze/src/lib/analysisContext.js +30 -5
- package/packages/analyze/src/lib/analysisContext.js.map +1 -1
- package/packages/analyze/src/lib/asts/sourceFiles/getAllDeclaredEntityNodes.js +14 -0
- package/packages/analyze/src/lib/asts/sourceFiles/getAllDeclaredEntityNodes.js.map +1 -1
- package/packages/analyze/src/lib/asts/sourceFiles/getAllEntityNodes.js +14 -0
- package/packages/analyze/src/lib/asts/sourceFiles/getAllEntityNodes.js.map +1 -1
- package/packages/analyze/src/lib/asts/sourceFiles/getAllExports.js +6 -0
- package/packages/analyze/src/lib/asts/sourceFiles/getAllExports.js.map +1 -1
- package/packages/analyze/src/lib/asts/sourceFiles/getImportsAnalysis.js +6 -0
- package/packages/analyze/src/lib/asts/sourceFiles/getImportsAnalysis.js.map +1 -1
- package/packages/analyze/src/lib/asts/sourceFiles/getResolvedModule.js +39 -1
- package/packages/analyze/src/lib/asts/sourceFiles/getResolvedModule.js.map +1 -1
- package/packages/analyze/src/lib/asts/sourceFiles/getSourceFilesForAllImports.js +2 -1
- package/packages/analyze/src/lib/asts/sourceFiles/getSourceFilesForAllImports.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js +21 -9
- package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/analyzeEntities.js +14 -4
- package/packages/analyze/src/lib/files/analyze/analyzeEntities.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/dependencyResolver.js +5 -0
- package/packages/analyze/src/lib/files/analyze/dependencyResolver.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/gatherEntityMap.js +2 -1
- package/packages/analyze/src/lib/files/analyze/gatherEntityMap.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.js +31 -10
- package/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.js.map +1 -1
- package/packages/analyze/src/lib/files/analyzeRemixRoute.js +3 -2
- package/packages/analyze/src/lib/files/analyzeRemixRoute.js.map +1 -1
- package/packages/analyze/src/lib/files/getImportedExports.js +11 -7
- package/packages/analyze/src/lib/files/getImportedExports.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js +160 -68
- package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js +25 -8
- package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +71 -9
- package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js +57 -9
- package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +233 -9
- package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/mergeValidatedDataStructures.js +46 -9
- package/packages/analyze/src/lib/files/scenarios/mergeValidatedDataStructures.js.map +1 -1
- package/packages/analyze/src/lib/files/setImportedExports.js +2 -1
- package/packages/analyze/src/lib/files/setImportedExports.js.map +1 -1
- package/packages/analyze/src/lib/utils/getFileByPath.js +12 -0
- package/packages/analyze/src/lib/utils/getFileByPath.js.map +1 -0
- package/packages/database/src/lib/kysely/db.js +8 -1
- package/packages/database/src/lib/kysely/db.js.map +1 -1
- package/packages/database/src/lib/kysely/tables/commitsTable.js +3 -0
- package/packages/database/src/lib/kysely/tables/commitsTable.js.map +1 -1
- package/packages/database/src/lib/loadAnalyses.js +45 -2
- package/packages/database/src/lib/loadAnalyses.js.map +1 -1
- package/packages/database/src/lib/loadAnalysis.js +8 -0
- package/packages/database/src/lib/loadAnalysis.js.map +1 -1
- package/packages/database/src/lib/loadBranch.js +11 -1
- package/packages/database/src/lib/loadBranch.js.map +1 -1
- package/packages/database/src/lib/loadCommit.js +7 -0
- package/packages/database/src/lib/loadCommit.js.map +1 -1
- package/packages/database/src/lib/loadCommits.js +22 -1
- package/packages/database/src/lib/loadCommits.js.map +1 -1
- package/packages/database/src/lib/loadEntities.js +23 -4
- package/packages/database/src/lib/loadEntities.js.map +1 -1
- package/packages/database/src/lib/loadEntityBranches.js +9 -0
- package/packages/database/src/lib/loadEntityBranches.js.map +1 -1
- package/packages/database/src/lib/updateCommitMetadata.js +5 -4
- package/packages/database/src/lib/updateCommitMetadata.js.map +1 -1
- package/packages/types/index.js.map +1 -1
- package/packages/utils/src/lib/safeFileName.js +29 -3
- package/packages/utils/src/lib/safeFileName.js.map +1 -1
- package/scripts/finalize-analyzer.cjs +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/EntityItem-vauWK972.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/ReportIssueModal-DzJRkCkr.js +0 -11
- package/codeyam-cli/src/webserver/build/client/assets/_index-Be83mo_j.js +0 -11
- package/codeyam-cli/src/webserver/build/client/assets/activity.(_tab)-BN6wu6Y-.js +0 -37
- package/codeyam-cli/src/webserver/build/client/assets/dev.empty-Bn6aCAy_.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/files-DKyMFI90.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/globals-DTTQ3gY7.css +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/manifest-22590fcf.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/root-BsAarjAM.js +0 -57
- package/codeyam-cli/src/webserver/build/server/assets/index-BND5I5fv.js +0 -1
- package/codeyam-cli/src/webserver/build/server/assets/server-build-CFXnd7MG.js +0 -228
|
@@ -217,6 +217,7 @@ export interface ConditionalEffect {
|
|
|
217
217
|
* - equals/notEquals: value comparisons (x === 'value', x !== 'value')
|
|
218
218
|
* - or/and: logical combinations (a || b, a && b)
|
|
219
219
|
* - arrayIncludes/arraySome/arrayEvery: array predicate methods
|
|
220
|
+
* - arrayLength: array.length property access
|
|
220
221
|
*/
|
|
221
222
|
export type DerivedVariableOperation =
|
|
222
223
|
| 'notNull'
|
|
@@ -227,7 +228,8 @@ export type DerivedVariableOperation =
|
|
|
227
228
|
| 'and'
|
|
228
229
|
| 'arrayIncludes'
|
|
229
230
|
| 'arraySome'
|
|
230
|
-
| 'arrayEvery'
|
|
231
|
+
| 'arrayEvery'
|
|
232
|
+
| 'arrayLength';
|
|
231
233
|
|
|
232
234
|
/**
|
|
233
235
|
* Information about how a variable was derived from other variables.
|
|
@@ -244,12 +246,50 @@ export interface DerivedVariableInfo {
|
|
|
244
246
|
comparedValue?: string;
|
|
245
247
|
}
|
|
246
248
|
|
|
249
|
+
/**
|
|
250
|
+
* Represents a JSX rendering usage where arrays or strings are rendered directly.
|
|
251
|
+
* Used to generate execution flows for array sizes and text lengths
|
|
252
|
+
* even without explicit conditionals.
|
|
253
|
+
*
|
|
254
|
+
* Examples:
|
|
255
|
+
* - `{items.map(i => <Item {...i} />)}` → array-map usage for 'items'
|
|
256
|
+
* - `{user.name}` → text-interpolation usage for 'user.name'
|
|
257
|
+
*/
|
|
258
|
+
export interface JsxRenderingUsage {
|
|
259
|
+
/**
|
|
260
|
+
* The path to the rendered value (e.g., "items", "data.users", "user.name")
|
|
261
|
+
*/
|
|
262
|
+
path: string;
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* Type of rendering:
|
|
266
|
+
* - 'array-map': Array rendered via .map() method
|
|
267
|
+
* - 'text-interpolation': String rendered directly in JSX
|
|
268
|
+
*/
|
|
269
|
+
renderingType: 'array-map' | 'text-interpolation';
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* The detected type of the value being rendered
|
|
273
|
+
*/
|
|
274
|
+
valueType?: 'array' | 'string' | 'unknown';
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* Source location information
|
|
278
|
+
*/
|
|
279
|
+
sourceLocation?: {
|
|
280
|
+
lineNumber: number;
|
|
281
|
+
column: number;
|
|
282
|
+
codeSnippet: string;
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
|
|
247
286
|
export interface AstScopeAnalysisResult {
|
|
248
287
|
// Variable structure map (variable path -> type)
|
|
249
288
|
structure: Record<string, string>;
|
|
250
289
|
|
|
251
|
-
// Variable equivalence map (variable path -> equivalent variable path)
|
|
252
|
-
|
|
290
|
+
// Variable equivalence map (variable path -> equivalent variable path(s))
|
|
291
|
+
// Supports multiple equivalencies per key for OR expressions (e.g., x = a || b)
|
|
292
|
+
equivalentVariables: Record<string, string | string[]>;
|
|
253
293
|
|
|
254
294
|
// Environment variables accessed in this scope
|
|
255
295
|
environmentVariables: string[];
|
|
@@ -274,6 +314,11 @@ export interface AstScopeAnalysisResult {
|
|
|
274
314
|
// Example: {hasAnalysis && <ScenarioViewer />} → { ScenarioViewer: [{ path: 'hasAnalysis', ... }] }
|
|
275
315
|
childBoundaryGatingConditions?: Record<string, ConditionalUsage[]>;
|
|
276
316
|
|
|
317
|
+
// JSX rendering usages - tracks arrays rendered via .map() and strings interpolated in JSX
|
|
318
|
+
// Used to generate execution flows for array sizes and text lengths without explicit conditionals
|
|
319
|
+
// Example: {items.map(i => <Item {...i} />)} → array-map usage for 'items'
|
|
320
|
+
jsxRenderingUsages?: JsxRenderingUsage[];
|
|
321
|
+
|
|
277
322
|
// Whether the analysis is complete enough to skip LLM calls
|
|
278
323
|
isComplete: boolean;
|
|
279
324
|
|
|
@@ -304,8 +349,9 @@ export interface ConditionalUsage {
|
|
|
304
349
|
|
|
305
350
|
/**
|
|
306
351
|
* Where this conditional usage occurs
|
|
352
|
+
* 'unconditional' is used for children that are always rendered but receive data props
|
|
307
353
|
*/
|
|
308
|
-
location: 'if' | 'ternary' | 'logical-and' | 'switch';
|
|
354
|
+
location: 'if' | 'ternary' | 'logical-and' | 'switch' | 'unconditional';
|
|
309
355
|
|
|
310
356
|
/**
|
|
311
357
|
* Source location information for this conditional usage
|
|
@@ -355,6 +401,19 @@ export interface ConditionalUsage {
|
|
|
355
401
|
/** For comparison operations, the value being compared to */
|
|
356
402
|
comparedValue?: string;
|
|
357
403
|
};
|
|
404
|
+
|
|
405
|
+
/**
|
|
406
|
+
* The full original expression as a semantic constraint for LLM reasoning.
|
|
407
|
+
* Used when the path contains complex operations (filter, map, etc.) that
|
|
408
|
+
* can't be simply resolved to a mock value.
|
|
409
|
+
*
|
|
410
|
+
* Examples:
|
|
411
|
+
* - `scenarios.filter(s => s.active).length > 1`
|
|
412
|
+
* - `users.some(u => u.role === 'admin' && u.active)`
|
|
413
|
+
*
|
|
414
|
+
* The LLM can interpret this constraint to generate appropriate mock data.
|
|
415
|
+
*/
|
|
416
|
+
constraintExpression?: string;
|
|
358
417
|
}
|
|
359
418
|
|
|
360
419
|
/**
|
|
@@ -374,9 +433,17 @@ export interface CompoundConditional {
|
|
|
374
433
|
isNegated: boolean;
|
|
375
434
|
/** Required value for this condition to be true */
|
|
376
435
|
requiredValue?: string | boolean;
|
|
436
|
+
/**
|
|
437
|
+
* When conditions are part of an OR expression within an && chain,
|
|
438
|
+
* they share the same orGroupId. Conditions with the same orGroupId
|
|
439
|
+
* are alternatives - only ONE needs to be satisfied.
|
|
440
|
+
* Example: `A && (B || C)` creates conditions where B and C share an orGroupId.
|
|
441
|
+
* This allows flow generation to expand into separate flows: A&&B and A&&C.
|
|
442
|
+
*/
|
|
443
|
+
orGroupId?: string;
|
|
377
444
|
}[];
|
|
378
445
|
/** Where this compound conditional occurs */
|
|
379
|
-
location: 'if' | 'ternary' | 'logical-and' | 'switch';
|
|
446
|
+
location: 'if' | 'ternary' | 'logical-and' | 'switch' | 'unconditional';
|
|
380
447
|
/** Source location for the entire compound expression */
|
|
381
448
|
sourceLocation: {
|
|
382
449
|
lineNumber: number;
|
|
@@ -444,6 +511,13 @@ export interface AnalysisContext {
|
|
|
444
511
|
// Add an equivalence relationship between two variable paths
|
|
445
512
|
addEquivalence(leftSide: StructuredPath, rightSide: StructuredPath): void;
|
|
446
513
|
|
|
514
|
+
// Add multiple equivalence relationships for a single variable path.
|
|
515
|
+
// Used for OR expressions like `x = a || b` where x is equivalent to both a and b.
|
|
516
|
+
addMultipleEquivalencies(
|
|
517
|
+
leftSide: StructuredPath,
|
|
518
|
+
rightSides: StructuredPath[],
|
|
519
|
+
): void;
|
|
520
|
+
|
|
447
521
|
// Add a type for a variable path
|
|
448
522
|
addType(path: StructuredPath, type: string): void;
|
|
449
523
|
|
|
@@ -490,8 +564,8 @@ export interface AnalysisContext {
|
|
|
490
564
|
// Get the built-up structure
|
|
491
565
|
getStructure(): Record<string, string>;
|
|
492
566
|
|
|
493
|
-
// Get the built-up equivalence map
|
|
494
|
-
getEquivalentVariables(): Record<string, string>;
|
|
567
|
+
// Get the built-up equivalence map (supports multiple values for OR expressions)
|
|
568
|
+
getEquivalentVariables(): Record<string, string | string[]>;
|
|
495
569
|
|
|
496
570
|
// Utilties for child boundaries (need to be skipped while capturing equivalencies)
|
|
497
571
|
getChildBoundary(
|
|
@@ -553,4 +627,11 @@ export interface AnalysisContext {
|
|
|
553
627
|
|
|
554
628
|
// Get all conditional effects
|
|
555
629
|
getConditionalEffects(): ConditionalEffect[];
|
|
630
|
+
|
|
631
|
+
// Add a JSX rendering usage (array.map() or text interpolation)
|
|
632
|
+
// Called when we see patterns like: {items.map(i => <Item />)} or {user.name}
|
|
633
|
+
addJsxRenderingUsage(usage: JsxRenderingUsage): void;
|
|
634
|
+
|
|
635
|
+
// Get all JSX rendering usages
|
|
636
|
+
getJsxRenderingUsages(): JsxRenderingUsage[];
|
|
556
637
|
}
|
|
@@ -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,
|