@codeyam/codeyam-cli 0.1.0-staging.1669d45 → 0.1.0-staging.1a2737b
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 +19 -19
- package/analyzer-template/packages/ai/index.ts +16 -2
- package/analyzer-template/packages/ai/package.json +2 -2
- package/analyzer-template/packages/ai/src/lib/analyzeScope.ts +110 -52
- 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/forInStatementHandler.ts +10 -17
- package/analyzer-template/packages/ai/src/lib/astScopes/patterns/variableDeclarationHandler.ts +6 -126
- package/analyzer-template/packages/ai/src/lib/astScopes/processExpression.ts +656 -28
- package/analyzer-template/packages/ai/src/lib/astScopes/sharedPatterns.ts +28 -0
- package/analyzer-template/packages/ai/src/lib/astScopes/types.ts +94 -7
- package/analyzer-template/packages/ai/src/lib/completionCall.ts +198 -34
- package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +1331 -254
- package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.ts +5 -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/BatchSchemaProcessor.ts +16 -3
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/ScopeTreeManager.ts +6 -4
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.ts +54 -3
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.ts +124 -17
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/coerceObjectsToPrimitivesBySchema.ts +70 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.ts +140 -14
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertTypeAnnotationsToValues.ts +179 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/deduplicateFunctionSchemas.ts +40 -30
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.ts +393 -97
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/fixNullIdsBySchema.ts +129 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/stripNullableMarkers.ts +35 -0
- package/analyzer-template/packages/ai/src/lib/dataStructureChunking.ts +183 -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/generateEntityDataStructure.ts +58 -3
- package/analyzer-template/packages/ai/src/lib/generateEntityScenarioData.ts +936 -7
- package/analyzer-template/packages/ai/src/lib/generateEntityScenarios.ts +35 -6
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlows.ts +515 -6
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionalEffects.ts +1 -1
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionals.ts +1540 -75
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromJsxUsages.ts +239 -0
- package/analyzer-template/packages/ai/src/lib/isolateScopes.ts +51 -3
- package/analyzer-template/packages/ai/src/lib/mergeJsonTypeDefinitions.ts +5 -0
- package/analyzer-template/packages/ai/src/lib/mergeStatements.ts +90 -96
- package/analyzer-template/packages/ai/src/lib/promptGenerators/collapseNullableObjects.ts +118 -0
- package/analyzer-template/packages/ai/src/lib/promptGenerators/gatherAttributesMap.ts +10 -7
- package/analyzer-template/packages/ai/src/lib/promptGenerators/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 +44 -7
- 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/index.ts +2 -0
- package/analyzer-template/packages/analyze/src/lib/FileAnalyzer.ts +65 -59
- package/analyzer-template/packages/analyze/src/lib/ProjectAnalyzer.ts +113 -26
- package/analyzer-template/packages/analyze/src/lib/analysisContext.ts +44 -4
- package/analyzer-template/packages/analyze/src/lib/asts/nodes/getNodeType.ts +1 -0
- 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 +99 -22
- package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities.ts +19 -4
- package/analyzer-template/packages/analyze/src/lib/files/analyze/dependencyResolver.ts +6 -0
- package/analyzer-template/packages/analyze/src/lib/files/analyze/gatherEntityMap.ts +4 -2
- package/analyzer-template/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.ts +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/TransformationTracer.ts +1315 -0
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.ts +193 -76
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.ts +87 -25
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +269 -22
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.ts +118 -10
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +647 -73
- 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/index.ts +1 -0
- package/analyzer-template/packages/analyze/src/lib/utils/getFileByPath.ts +19 -0
- package/analyzer-template/packages/aws/package.json +10 -10
- package/analyzer-template/packages/database/package.json +1 -1
- package/analyzer-template/packages/database/src/lib/analysisBranchToDb.ts +1 -1
- package/analyzer-template/packages/database/src/lib/analysisToDb.ts +1 -1
- package/analyzer-template/packages/database/src/lib/branchToDb.ts +1 -1
- package/analyzer-template/packages/database/src/lib/commitBranchToDb.ts +1 -1
- package/analyzer-template/packages/database/src/lib/commitToDb.ts +1 -1
- package/analyzer-template/packages/database/src/lib/fileToDb.ts +1 -1
- package/analyzer-template/packages/database/src/lib/kysely/db.ts +14 -1
- package/analyzer-template/packages/database/src/lib/kysely/tables/commitsTable.ts +6 -0
- package/analyzer-template/packages/database/src/lib/kysely/tables/debugReportsTable.ts +1 -1
- package/analyzer-template/packages/database/src/lib/kysely/tables/labsRequestsTable.ts +52 -0
- package/analyzer-template/packages/database/src/lib/loadAnalyses.ts +58 -1
- package/analyzer-template/packages/database/src/lib/loadAnalysis.ts +13 -0
- package/analyzer-template/packages/database/src/lib/loadBranch.ts +16 -1
- package/analyzer-template/packages/database/src/lib/loadCommit.ts +11 -0
- package/analyzer-template/packages/database/src/lib/loadCommits.ts +28 -0
- package/analyzer-template/packages/database/src/lib/loadEntities.ts +26 -3
- package/analyzer-template/packages/database/src/lib/loadEntityBranches.ts +12 -0
- package/analyzer-template/packages/database/src/lib/projectToDb.ts +1 -1
- package/analyzer-template/packages/database/src/lib/saveFiles.ts +1 -1
- package/analyzer-template/packages/database/src/lib/scenarioToDb.ts +1 -1
- package/analyzer-template/packages/database/src/lib/updateCommitMetadata.ts +7 -14
- package/analyzer-template/packages/database/src/lib/userScenarioToDb.ts +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/analysisBranchToDb.js +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/analysisBranchToDb.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/analysisToDb.js +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/analysisToDb.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/branchToDb.js +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/branchToDb.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/commitBranchToDb.js +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/commitBranchToDb.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/commitToDb.js +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/commitToDb.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/fileToDb.js +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/fileToDb.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts +2 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js +11 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/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/kysely/tables/debugReportsTable.d.ts +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/labsRequestsTable.d.ts +23 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/labsRequestsTable.d.ts.map +1 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/labsRequestsTable.js +35 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/labsRequestsTable.js.map +1 -0
- package/analyzer-template/packages/github/dist/database/src/lib/loadAnalyses.d.ts +2 -0
- package/analyzer-template/packages/github/dist/database/src/lib/loadAnalyses.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadAnalyses.js +45 -2
- package/analyzer-template/packages/github/dist/database/src/lib/loadAnalyses.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadAnalysis.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadAnalysis.js +8 -0
- package/analyzer-template/packages/github/dist/database/src/lib/loadAnalysis.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadBranch.js +11 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadBranch.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadCommit.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadCommit.js +7 -0
- package/analyzer-template/packages/github/dist/database/src/lib/loadCommit.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.d.ts +3 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.js +22 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.d.ts +3 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.js +23 -4
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntityBranches.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntityBranches.js +9 -0
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntityBranches.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/projectToDb.js +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/projectToDb.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/saveFiles.js +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/saveFiles.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/scenarioToDb.js +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/scenarioToDb.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.d.ts +2 -2
- package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js +5 -4
- package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js.map +1 -1
- package/analyzer-template/packages/github/dist/types/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/ProjectMetadata.d.ts +7 -0
- package/analyzer-template/packages/github/dist/types/src/types/ProjectMetadata.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/types/ScenariosDataStructure.d.ts +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/ProjectMetadata.ts +7 -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/ProjectMetadata.d.ts +7 -0
- package/analyzer-template/packages/utils/dist/types/src/types/ProjectMetadata.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/types/src/types/ScenariosDataStructure.d.ts +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/fs/rsyncCopy.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.js +93 -2
- package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.js.map +1 -1
- package/analyzer-template/packages/utils/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/fs/rsyncCopy.ts +108 -2
- 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 +436 -44
- 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 +75 -7
- 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 +295 -10
- package/analyzer-template/project/writeScenarioComponents.ts +237 -32
- package/analyzer-template/project/writeSimpleRoot.ts +21 -11
- package/analyzer-template/scripts/comboWorkerLoop.cjs +98 -50
- package/background/src/lib/local/createLocalAnalyzer.js +1 -1
- package/background/src/lib/local/createLocalAnalyzer.js.map +1 -1
- package/background/src/lib/virtualized/project/analyzeBaselineCommit.js +5 -0
- package/background/src/lib/virtualized/project/analyzeBaselineCommit.js.map +1 -1
- package/background/src/lib/virtualized/project/analyzeRegularCommit.js +5 -0
- package/background/src/lib/virtualized/project/analyzeRegularCommit.js.map +1 -1
- package/background/src/lib/virtualized/project/captureLibraryFunctionDirect.js +3 -3
- package/background/src/lib/virtualized/project/captureLibraryFunctionDirect.js.map +1 -1
- package/background/src/lib/virtualized/project/constructMockCode.js +359 -14
- 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 +62 -7
- 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 +251 -6
- package/background/src/lib/virtualized/project/writeMockDataTsx.js.map +1 -1
- package/background/src/lib/virtualized/project/writeScenarioComponents.js +173 -30
- package/background/src/lib/virtualized/project/writeScenarioComponents.js.map +1 -1
- package/background/src/lib/virtualized/project/writeSimpleRoot.js +21 -11
- package/background/src/lib/virtualized/project/writeSimpleRoot.js.map +1 -1
- package/codeyam-cli/scripts/apply-setup.js +180 -0
- package/codeyam-cli/scripts/apply-setup.js.map +1 -1
- package/codeyam-cli/src/cli.js +32 -18
- package/codeyam-cli/src/cli.js.map +1 -1
- package/codeyam-cli/src/codeyam-cli.js +18 -2
- package/codeyam-cli/src/codeyam-cli.js.map +1 -1
- package/codeyam-cli/src/commands/analyze.js +4 -2
- package/codeyam-cli/src/commands/analyze.js.map +1 -1
- package/codeyam-cli/src/commands/baseline.js +2 -0
- package/codeyam-cli/src/commands/baseline.js.map +1 -1
- package/codeyam-cli/src/commands/debug.js +9 -5
- package/codeyam-cli/src/commands/debug.js.map +1 -1
- package/codeyam-cli/src/commands/default.js +31 -20
- package/codeyam-cli/src/commands/default.js.map +1 -1
- package/codeyam-cli/src/commands/detect-universal-mocks.js +2 -0
- package/codeyam-cli/src/commands/detect-universal-mocks.js.map +1 -1
- package/codeyam-cli/src/commands/init.js +49 -257
- package/codeyam-cli/src/commands/init.js.map +1 -1
- package/codeyam-cli/src/commands/memory.js +307 -0
- package/codeyam-cli/src/commands/memory.js.map +1 -0
- package/codeyam-cli/src/commands/recapture.js +2 -0
- package/codeyam-cli/src/commands/recapture.js.map +1 -1
- package/codeyam-cli/src/commands/setup-sandbox.js +2 -0
- package/codeyam-cli/src/commands/setup-sandbox.js.map +1 -1
- package/codeyam-cli/src/commands/setup-simulations.js +284 -0
- package/codeyam-cli/src/commands/setup-simulations.js.map +1 -0
- package/codeyam-cli/src/commands/test-startup.js +2 -0
- package/codeyam-cli/src/commands/test-startup.js.map +1 -1
- package/codeyam-cli/src/commands/verify.js +14 -2
- package/codeyam-cli/src/commands/verify.js.map +1 -1
- package/codeyam-cli/src/utils/__tests__/npmVersionCheck.test.js +179 -0
- package/codeyam-cli/src/utils/__tests__/npmVersionCheck.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +128 -82
- package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js.map +1 -1
- package/codeyam-cli/src/utils/analysisRunner.js +21 -2
- package/codeyam-cli/src/utils/analysisRunner.js.map +1 -1
- package/codeyam-cli/src/utils/analyzer.js +7 -0
- package/codeyam-cli/src/utils/analyzer.js.map +1 -1
- package/codeyam-cli/src/utils/backgroundServer.js +90 -19
- package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
- package/codeyam-cli/src/utils/generateReport.js +2 -2
- package/codeyam-cli/src/utils/install-skills.js +77 -38
- package/codeyam-cli/src/utils/install-skills.js.map +1 -1
- package/codeyam-cli/src/utils/labsAutoCheck.js +19 -0
- package/codeyam-cli/src/utils/labsAutoCheck.js.map +1 -0
- package/codeyam-cli/src/utils/npmVersionCheck.js +76 -0
- package/codeyam-cli/src/utils/npmVersionCheck.js.map +1 -0
- package/codeyam-cli/src/utils/progress.js +7 -0
- package/codeyam-cli/src/utils/progress.js.map +1 -1
- package/codeyam-cli/src/utils/queue/job.js +5 -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/requireSimulations.js +10 -0
- package/codeyam-cli/src/utils/requireSimulations.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/confusionDetector.test.js +82 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/confusionDetector.test.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/contextBuilder.test.js +230 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/contextBuilder.test.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/assertRules.js +67 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/assertRules.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/captureFixture.js +105 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/captureFixture.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/loadCapturedFixture.js +34 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/loadCapturedFixture.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/runClaude.js +162 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/runClaude.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/setupTempProject.js +74 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/setupTempProject.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/ruleReflectionE2E.test.js +376 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/ruleReflectionE2E.test.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/promptBuilder.test.js +116 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/promptBuilder.test.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/transcriptParser.test.js +127 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/transcriptParser.test.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/confusionDetector.js +50 -0
- package/codeyam-cli/src/utils/ruleReflection/confusionDetector.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/contextBuilder.js +116 -0
- package/codeyam-cli/src/utils/ruleReflection/contextBuilder.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/index.js +5 -0
- package/codeyam-cli/src/utils/ruleReflection/index.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/promptBuilder.js +44 -0
- package/codeyam-cli/src/utils/ruleReflection/promptBuilder.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/transcriptParser.js +85 -0
- package/codeyam-cli/src/utils/ruleReflection/transcriptParser.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/types.js +5 -0
- package/codeyam-cli/src/utils/ruleReflection/types.js.map +1 -0
- package/codeyam-cli/src/utils/rules/__tests__/ruleState.test.js +293 -0
- package/codeyam-cli/src/utils/rules/__tests__/ruleState.test.js.map +1 -0
- package/codeyam-cli/src/utils/rules/index.js +6 -0
- package/codeyam-cli/src/utils/rules/index.js.map +1 -0
- package/codeyam-cli/src/utils/rules/parser.js +83 -0
- package/codeyam-cli/src/utils/rules/parser.js.map +1 -0
- package/codeyam-cli/src/utils/rules/pathMatcher.js +18 -0
- package/codeyam-cli/src/utils/rules/pathMatcher.js.map +1 -0
- package/codeyam-cli/src/utils/rules/ruleState.js +150 -0
- package/codeyam-cli/src/utils/rules/ruleState.js.map +1 -0
- package/codeyam-cli/src/utils/rules/staleness.js +137 -0
- package/codeyam-cli/src/utils/rules/staleness.js.map +1 -0
- package/codeyam-cli/src/utils/serverState.js +37 -10
- package/codeyam-cli/src/utils/serverState.js.map +1 -1
- package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +21 -42
- package/codeyam-cli/src/utils/setupClaudeCodeSettings.js.map +1 -1
- package/codeyam-cli/src/utils/simulationGateMiddleware.js +138 -0
- package/codeyam-cli/src/utils/simulationGateMiddleware.js.map +1 -0
- package/codeyam-cli/src/utils/syncMocksMiddleware.js +5 -24
- package/codeyam-cli/src/utils/syncMocksMiddleware.js.map +1 -1
- package/codeyam-cli/src/utils/versionInfo.js +25 -0
- package/codeyam-cli/src/utils/versionInfo.js.map +1 -1
- package/codeyam-cli/src/webserver/__tests__/dependency-smoke.test.js +66 -0
- package/codeyam-cli/src/webserver/__tests__/dependency-smoke.test.js.map +1 -0
- package/codeyam-cli/src/webserver/app/lib/database.js +22 -6
- package/codeyam-cli/src/webserver/app/lib/database.js.map +1 -1
- package/codeyam-cli/src/webserver/app/lib/dbNotifier.js.map +1 -1
- package/codeyam-cli/src/webserver/backgroundServer.js +50 -0
- package/codeyam-cli/src/webserver/backgroundServer.js.map +1 -1
- package/codeyam-cli/src/webserver/bootstrap.js +51 -0
- package/codeyam-cli/src/webserver/bootstrap.js.map +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/CopyButton-jNYXRRNI.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/EntityItem-bwuHPyTa.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeBadge-COi5OvsN.js → EntityTypeBadge-CvzqMxcu.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeIcon-BwdQv49w.js → EntityTypeIcon-BH0XDim7.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{InlineSpinner-CEleMv_j.js → InlineSpinner-EhOseatT.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{InteractivePreview-D68KarMg.js → InteractivePreview-yjIHlOGa.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/{LibraryFunctionPreview-L75Wvqgw.js → LibraryFunctionPreview-Cq5o8jL4.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{LoadingDots-C53WM8qn.js → LoadingDots-BvMu2i-g.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-CrNkmy4i.js → LogViewer-kgBTLoJD.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/ReportIssueModal-BzPgx-xO.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/{SafeScreenshot-CQifa1n-.js → SafeScreenshot-CwZrv-Ok.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-CyaBFX7l.js → ScenarioViewer-BX2Ny2Qj.js} +3 -13
- package/codeyam-cli/src/webserver/build/client/assets/{TruncatedFilePath-D36O1rzU.js → TruncatedFilePath-CDpEprKa.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/_index-BRx8ZGZo.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/activity.(_tab)-4S4yPfFw.js +27 -0
- package/codeyam-cli/src/webserver/build/client/assets/agent-transcripts-DHKuQSmR.js +17 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.agent-transcripts-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.health-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.labs-unlock-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.memory-profile-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.restart-server-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.save-fixture-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/book-open-D4IPYH_y.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/{chevron-down-DgTPh8H-.js → chevron-down-CG65viiV.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{chunk-EPOLDU6W-DdQKK6on.js → chunk-JZWAC4HX-DB3aFuEO.js} +12 -12
- package/codeyam-cli/src/webserver/build/client/assets/{circle-check-Dmr2bb1R.js → circle-check-igfMr5DY.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/copy-Coc4o_8c.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/{createLucideIcon-Do4ZLUYa.js → createLucideIcon-D1zB-pYc.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/dev.empty-JTAjQ54M.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-CbdFyxZh.js → entity._sha._-B0h9AqE6.js} +12 -12
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha.scenarios._scenarioId.fullscreen-B4iCfs5M.js → entity._sha.scenarios._scenarioId.fullscreen-DjLxr2JB.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.create-scenario-wDWZZO1W.js → entity._sha_.create-scenario-CtYowLOt.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.edit._scenarioId-BMbl7MeQ.js → entity._sha_.edit._scenarioId-PePWg17F.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{entry.client-5wRKRIH9.js → entry.client-I-Wo99C_.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{fileTableUtils-DD3SDH7t.js → fileTableUtils-9sMMAiWJ.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/files-Co65J0s3.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{git-zXjT7J0G.js → git-BdHOxVfg.js} +8 -8
- package/codeyam-cli/src/webserver/build/client/assets/globals-BSZfYCkU.css +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{index-DLbXwndH.js → index-CUM5iXwc.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{index-gPZ-lad1.js → index-_417gcQW.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/labs-BK0C1H1T.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-BsPXJ81F.js → loader-circle-TzRHMVog.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/manifest-040dab1c.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/memory-UIDVz141.js +92 -0
- package/codeyam-cli/src/webserver/build/client/assets/pause-hjzB7t2z.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/root-D1WadSdf.js +62 -0
- package/codeyam-cli/src/webserver/build/client/assets/{search-P2FKIUql.js → search-DcAwD_Ln.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/settings-CclxrcPK.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{simulations-L18M6-kN.js → simulations-DVNJVQgD.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/terminal-DbEAHMbA.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/{triangle-alert-BDz7kbVA.js → triangle-alert-CAD5b1o_.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useCustomSizes-29dDmbH8.js → useCustomSizes-BqgrAzs3.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useLastLogLine-BUm0UVJm.js → useLastLogLine-DAFqfEDH.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useReportContext-CkIOKTrZ.js → useReportContext-DZlYx2c4.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useToast-KKw5kTn-.js → useToast-ihdMtlf6.js} +1 -1
- package/codeyam-cli/src/webserver/build/server/assets/index-B3dE0r28.js +1 -0
- package/codeyam-cli/src/webserver/build/server/assets/server-build-DYbfdxa3.js +273 -0
- package/codeyam-cli/src/webserver/build/server/index.js +1 -1
- package/codeyam-cli/src/webserver/build-info.json +5 -5
- package/codeyam-cli/templates/{codeyam:debug.md → codeyam-debug.md} +48 -4
- package/codeyam-cli/templates/codeyam-diagnose.md +481 -0
- package/codeyam-cli/templates/codeyam-memory-hook.sh +199 -0
- package/codeyam-cli/templates/codeyam-memory.md +396 -0
- package/codeyam-cli/templates/codeyam-new-rule.md +13 -0
- package/codeyam-cli/templates/{codeyam:setup.md → codeyam-setup.md} +13 -1
- package/codeyam-cli/templates/{codeyam:sim.md → codeyam-sim.md} +1 -1
- package/codeyam-cli/templates/{codeyam:test.md → codeyam-test.md} +1 -1
- package/codeyam-cli/templates/{codeyam:verify.md → codeyam-verify.md} +1 -1
- package/codeyam-cli/templates/rule-notification-hook.py +56 -0
- package/codeyam-cli/templates/rule-reflection-hook.py +627 -0
- package/codeyam-cli/templates/rules-instructions.md +132 -0
- package/package.json +18 -15
- package/packages/ai/index.js +7 -3
- package/packages/ai/index.js.map +1 -1
- package/packages/ai/src/lib/analyzeScope.js +91 -30
- 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/forInStatementHandler.js +10 -14
- package/packages/ai/src/lib/astScopes/patterns/forInStatementHandler.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 +518 -28
- package/packages/ai/src/lib/astScopes/processExpression.js.map +1 -1
- package/packages/ai/src/lib/astScopes/sharedPatterns.js +25 -0
- package/packages/ai/src/lib/astScopes/sharedPatterns.js.map +1 -1
- package/packages/ai/src/lib/completionCall.js +161 -30
- package/packages/ai/src/lib/completionCall.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +1061 -174
- package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.js +5 -1
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/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 +52 -3
- package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js +106 -13
- package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/coerceObjectsToPrimitivesBySchema.js +63 -0
- package/packages/ai/src/lib/dataStructure/helpers/coerceObjectsToPrimitivesBySchema.js.map +1 -0
- package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js +122 -12
- package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/convertTypeAnnotationsToValues.js +173 -0
- package/packages/ai/src/lib/dataStructure/helpers/convertTypeAnnotationsToValues.js.map +1 -0
- package/packages/ai/src/lib/dataStructure/helpers/deduplicateFunctionSchemas.js +37 -20
- package/packages/ai/src/lib/dataStructure/helpers/deduplicateFunctionSchemas.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js +333 -86
- package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js.map +1 -1
- package/packages/ai/src/lib/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 +130 -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/generateEntityDataStructure.js +46 -2
- package/packages/ai/src/lib/generateEntityDataStructure.js.map +1 -1
- package/packages/ai/src/lib/generateEntityScenarioData.js +734 -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 +376 -4
- package/packages/ai/src/lib/generateExecutionFlows.js.map +1 -1
- package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js +1124 -59
- 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/isolateScopes.js +39 -3
- package/packages/ai/src/lib/isolateScopes.js.map +1 -1
- package/packages/ai/src/lib/mergeJsonTypeDefinitions.js +5 -0
- package/packages/ai/src/lib/mergeJsonTypeDefinitions.js.map +1 -1
- package/packages/ai/src/lib/mergeStatements.js +70 -51
- package/packages/ai/src/lib/mergeStatements.js.map +1 -1
- package/packages/ai/src/lib/promptGenerators/collapseNullableObjects.js +97 -0
- package/packages/ai/src/lib/promptGenerators/collapseNullableObjects.js.map +1 -0
- package/packages/ai/src/lib/promptGenerators/gatherAttributesMap.js +10 -4
- package/packages/ai/src/lib/promptGenerators/gatherAttributesMap.js.map +1 -1
- package/packages/ai/src/lib/promptGenerators/generateChunkPrompt.js +54 -0
- package/packages/ai/src/lib/promptGenerators/generateChunkPrompt.js.map +1 -0
- package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js +30 -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/index.js +1 -0
- package/packages/analyze/index.js.map +1 -1
- package/packages/analyze/src/lib/FileAnalyzer.js +60 -36
- package/packages/analyze/src/lib/FileAnalyzer.js.map +1 -1
- package/packages/analyze/src/lib/ProjectAnalyzer.js +96 -26
- package/packages/analyze/src/lib/ProjectAnalyzer.js.map +1 -1
- package/packages/analyze/src/lib/analysisContext.js +30 -5
- package/packages/analyze/src/lib/analysisContext.js.map +1 -1
- package/packages/analyze/src/lib/asts/nodes/getNodeType.js +1 -0
- package/packages/analyze/src/lib/asts/nodes/getNodeType.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 +72 -10
- package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/analyzeEntities.js +17 -4
- package/packages/analyze/src/lib/files/analyze/analyzeEntities.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/dependencyResolver.js +5 -0
- package/packages/analyze/src/lib/files/analyze/dependencyResolver.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/gatherEntityMap.js +2 -1
- package/packages/analyze/src/lib/files/analyze/gatherEntityMap.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.js +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/TransformationTracer.js +880 -0
- package/packages/analyze/src/lib/files/scenarios/TransformationTracer.js.map +1 -0
- package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js +164 -68
- package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js +75 -21
- package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +185 -20
- 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 +542 -53
- 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/index.js +1 -0
- package/packages/analyze/src/lib/index.js.map +1 -1
- package/packages/analyze/src/lib/utils/getFileByPath.js +12 -0
- package/packages/analyze/src/lib/utils/getFileByPath.js.map +1 -0
- package/packages/database/src/lib/analysisBranchToDb.js +1 -1
- package/packages/database/src/lib/analysisBranchToDb.js.map +1 -1
- package/packages/database/src/lib/analysisToDb.js +1 -1
- package/packages/database/src/lib/analysisToDb.js.map +1 -1
- package/packages/database/src/lib/branchToDb.js +1 -1
- package/packages/database/src/lib/branchToDb.js.map +1 -1
- package/packages/database/src/lib/commitBranchToDb.js +1 -1
- package/packages/database/src/lib/commitBranchToDb.js.map +1 -1
- package/packages/database/src/lib/commitToDb.js +1 -1
- package/packages/database/src/lib/commitToDb.js.map +1 -1
- package/packages/database/src/lib/fileToDb.js +1 -1
- package/packages/database/src/lib/fileToDb.js.map +1 -1
- package/packages/database/src/lib/kysely/db.js +11 -1
- package/packages/database/src/lib/kysely/db.js.map +1 -1
- package/packages/database/src/lib/kysely/tables/commitsTable.js +3 -0
- package/packages/database/src/lib/kysely/tables/commitsTable.js.map +1 -1
- package/packages/database/src/lib/kysely/tables/labsRequestsTable.js +35 -0
- package/packages/database/src/lib/kysely/tables/labsRequestsTable.js.map +1 -0
- package/packages/database/src/lib/loadAnalyses.js +45 -2
- package/packages/database/src/lib/loadAnalyses.js.map +1 -1
- package/packages/database/src/lib/loadAnalysis.js +8 -0
- package/packages/database/src/lib/loadAnalysis.js.map +1 -1
- package/packages/database/src/lib/loadBranch.js +11 -1
- package/packages/database/src/lib/loadBranch.js.map +1 -1
- package/packages/database/src/lib/loadCommit.js +7 -0
- package/packages/database/src/lib/loadCommit.js.map +1 -1
- package/packages/database/src/lib/loadCommits.js +22 -1
- package/packages/database/src/lib/loadCommits.js.map +1 -1
- package/packages/database/src/lib/loadEntities.js +23 -4
- package/packages/database/src/lib/loadEntities.js.map +1 -1
- package/packages/database/src/lib/loadEntityBranches.js +9 -0
- package/packages/database/src/lib/loadEntityBranches.js.map +1 -1
- package/packages/database/src/lib/projectToDb.js +1 -1
- package/packages/database/src/lib/projectToDb.js.map +1 -1
- package/packages/database/src/lib/saveFiles.js +1 -1
- package/packages/database/src/lib/saveFiles.js.map +1 -1
- package/packages/database/src/lib/scenarioToDb.js +1 -1
- package/packages/database/src/lib/scenarioToDb.js.map +1 -1
- package/packages/database/src/lib/updateCommitMetadata.js +5 -4
- package/packages/database/src/lib/updateCommitMetadata.js.map +1 -1
- package/packages/types/index.js.map +1 -1
- package/packages/utils/src/lib/fs/rsyncCopy.js +93 -2
- package/packages/utils/src/lib/fs/rsyncCopy.js.map +1 -1
- package/packages/utils/src/lib/safeFileName.js +29 -3
- package/packages/utils/src/lib/safeFileName.js.map +1 -1
- package/scripts/finalize-analyzer.cjs +8 -76
- 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/client/assets/settings-B2eDuBj8.js +0 -1
- 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
- package/codeyam-cli/templates/codeyam:diagnose.md +0 -625
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generates execution flows from JSX rendering usages.
|
|
3
|
+
*
|
|
4
|
+
* This module creates variation flows for arrays and strings that are rendered
|
|
5
|
+
* directly in JSX, even without explicit conditionals:
|
|
6
|
+
* - Arrays rendered via .map() → empty, few, many flows
|
|
7
|
+
* - Strings rendered via interpolation → normal, long flows
|
|
8
|
+
*
|
|
9
|
+
* Only controllable paths (from props, hooks, or external data) produce flows.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import type { ExecutionFlow } from '~codeyam/types';
|
|
13
|
+
import type { JsxRenderingUsage } from './astScopes/types';
|
|
14
|
+
import resolvePathToControllable from './resolvePathToControllable';
|
|
15
|
+
|
|
16
|
+
export interface GenerateFlowsFromJsxUsagesArgs {
|
|
17
|
+
/** JSX rendering usages extracted from AST analysis */
|
|
18
|
+
jsxRenderingUsages: JsxRenderingUsage[];
|
|
19
|
+
/** Map of controllable paths to their types */
|
|
20
|
+
attributesMap: Record<string, string>;
|
|
21
|
+
/** Map from local variable names to data sources */
|
|
22
|
+
equivalentSignatureVariables: Record<string, string | string[]>;
|
|
23
|
+
/** Map from full paths to short paths */
|
|
24
|
+
fullToShortPathMap: Record<string, string>;
|
|
25
|
+
/** Structure map for type lookup */
|
|
26
|
+
structure: Record<string, string>;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Generate a slug from a path for use in exclusive groups
|
|
31
|
+
*/
|
|
32
|
+
function pathToSlug(path: string): string {
|
|
33
|
+
return path
|
|
34
|
+
.replace(/\[\d+\]/g, '')
|
|
35
|
+
.replace(/\[\]/g, '')
|
|
36
|
+
.replace(/\(\)/g, '')
|
|
37
|
+
.replace(/\.functionCallReturnValue/g, '')
|
|
38
|
+
.replace(/[<>]/g, '')
|
|
39
|
+
.replace(/\./g, '-')
|
|
40
|
+
.toLowerCase();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Generate a human-readable name from a path.
|
|
45
|
+
*/
|
|
46
|
+
function generateNameFromPath(path: string): string {
|
|
47
|
+
const cleanPath = path
|
|
48
|
+
.replace(/\(\)/g, '')
|
|
49
|
+
.replace(/\.functionCallReturnValue/g, '');
|
|
50
|
+
const parts = cleanPath.split('.');
|
|
51
|
+
const lastPart = parts[parts.length - 1];
|
|
52
|
+
|
|
53
|
+
// Convert camelCase to Title Case
|
|
54
|
+
return lastPart
|
|
55
|
+
.replace(/([A-Z])/g, ' $1')
|
|
56
|
+
.replace(/^./, (str) => str.toUpperCase())
|
|
57
|
+
.trim();
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Generate execution flows from JSX rendering usages.
|
|
62
|
+
*
|
|
63
|
+
* For arrays: generates empty (0), few (1-3), many (10+) flows
|
|
64
|
+
* For strings: generates normal and long text flows
|
|
65
|
+
*/
|
|
66
|
+
export default function generateExecutionFlowsFromJsxUsages(
|
|
67
|
+
args: GenerateFlowsFromJsxUsagesArgs,
|
|
68
|
+
): ExecutionFlow[] {
|
|
69
|
+
const {
|
|
70
|
+
jsxRenderingUsages,
|
|
71
|
+
attributesMap,
|
|
72
|
+
equivalentSignatureVariables,
|
|
73
|
+
fullToShortPathMap,
|
|
74
|
+
} = args;
|
|
75
|
+
|
|
76
|
+
const flows: ExecutionFlow[] = [];
|
|
77
|
+
const seenPaths = new Set<string>();
|
|
78
|
+
|
|
79
|
+
for (const usage of jsxRenderingUsages) {
|
|
80
|
+
// Resolve the path to a controllable data source
|
|
81
|
+
const resolution = resolvePathToControllable(
|
|
82
|
+
usage.path,
|
|
83
|
+
attributesMap,
|
|
84
|
+
equivalentSignatureVariables,
|
|
85
|
+
fullToShortPathMap,
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
if (!resolution.isControllable || !resolution.resolvedPath) {
|
|
89
|
+
// Path is not controllable - skip
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const resolvedPath = resolution.resolvedPath;
|
|
94
|
+
|
|
95
|
+
// Deduplicate by resolved path + rendering type
|
|
96
|
+
const dedupeKey = `${resolvedPath}:${usage.renderingType}`;
|
|
97
|
+
if (seenPaths.has(dedupeKey)) {
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
seenPaths.add(dedupeKey);
|
|
101
|
+
|
|
102
|
+
const baseName = generateNameFromPath(resolvedPath);
|
|
103
|
+
const pathSlug = pathToSlug(resolvedPath);
|
|
104
|
+
|
|
105
|
+
if (usage.renderingType === 'array-map') {
|
|
106
|
+
// Generate 3 mutually exclusive flows for array sizes
|
|
107
|
+
const exclusiveGroup = `array-length-${pathSlug}`;
|
|
108
|
+
|
|
109
|
+
// Empty array flow
|
|
110
|
+
flows.push({
|
|
111
|
+
id: `${pathSlug}-empty-array`,
|
|
112
|
+
name: `${baseName} Empty`,
|
|
113
|
+
description: `When ${baseName.toLowerCase()} array is empty`,
|
|
114
|
+
requiredValues: [
|
|
115
|
+
{
|
|
116
|
+
attributePath: resolvedPath,
|
|
117
|
+
value: '0',
|
|
118
|
+
comparison: 'length<',
|
|
119
|
+
valueType: 'array',
|
|
120
|
+
},
|
|
121
|
+
],
|
|
122
|
+
impact: 'medium',
|
|
123
|
+
exclusiveGroup,
|
|
124
|
+
sourceLocation: usage.sourceLocation
|
|
125
|
+
? {
|
|
126
|
+
lineNumber: usage.sourceLocation.lineNumber,
|
|
127
|
+
column: usage.sourceLocation.column,
|
|
128
|
+
}
|
|
129
|
+
: undefined,
|
|
130
|
+
codeSnippet: usage.sourceLocation?.codeSnippet,
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
// Few items flow (1-3)
|
|
134
|
+
flows.push({
|
|
135
|
+
id: `${pathSlug}-few-items`,
|
|
136
|
+
name: `${baseName} Few Items`,
|
|
137
|
+
description: `When ${baseName.toLowerCase()} array has 1-3 items`,
|
|
138
|
+
requiredValues: [
|
|
139
|
+
{
|
|
140
|
+
attributePath: resolvedPath,
|
|
141
|
+
value: '3',
|
|
142
|
+
comparison: 'length<',
|
|
143
|
+
valueType: 'array',
|
|
144
|
+
},
|
|
145
|
+
],
|
|
146
|
+
impact: 'low', // Baseline case
|
|
147
|
+
exclusiveGroup,
|
|
148
|
+
sourceLocation: usage.sourceLocation
|
|
149
|
+
? {
|
|
150
|
+
lineNumber: usage.sourceLocation.lineNumber,
|
|
151
|
+
column: usage.sourceLocation.column,
|
|
152
|
+
}
|
|
153
|
+
: undefined,
|
|
154
|
+
codeSnippet: usage.sourceLocation?.codeSnippet,
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
// Many items flow (10+)
|
|
158
|
+
flows.push({
|
|
159
|
+
id: `${pathSlug}-many-items`,
|
|
160
|
+
name: `${baseName} Many Items`,
|
|
161
|
+
description: `When ${baseName.toLowerCase()} array has 10+ items`,
|
|
162
|
+
requiredValues: [
|
|
163
|
+
{
|
|
164
|
+
attributePath: resolvedPath,
|
|
165
|
+
value: '10',
|
|
166
|
+
comparison: 'length>',
|
|
167
|
+
valueType: 'array',
|
|
168
|
+
},
|
|
169
|
+
],
|
|
170
|
+
impact: 'medium',
|
|
171
|
+
exclusiveGroup,
|
|
172
|
+
sourceLocation: usage.sourceLocation
|
|
173
|
+
? {
|
|
174
|
+
lineNumber: usage.sourceLocation.lineNumber,
|
|
175
|
+
column: usage.sourceLocation.column,
|
|
176
|
+
}
|
|
177
|
+
: undefined,
|
|
178
|
+
codeSnippet: usage.sourceLocation?.codeSnippet,
|
|
179
|
+
});
|
|
180
|
+
} else if (
|
|
181
|
+
usage.renderingType === 'text-interpolation' &&
|
|
182
|
+
usage.valueType === 'string'
|
|
183
|
+
) {
|
|
184
|
+
// Only generate text flows for strings (not numbers or other types)
|
|
185
|
+
// Generate 2 mutually exclusive flows for text lengths
|
|
186
|
+
const exclusiveGroup = `text-length-${pathSlug}`;
|
|
187
|
+
|
|
188
|
+
// Normal text flow
|
|
189
|
+
flows.push({
|
|
190
|
+
id: `${pathSlug}-normal-text`,
|
|
191
|
+
name: `${baseName} Normal`,
|
|
192
|
+
description: `When ${baseName.toLowerCase()} has normal length text`,
|
|
193
|
+
requiredValues: [
|
|
194
|
+
{
|
|
195
|
+
attributePath: resolvedPath,
|
|
196
|
+
value: 'normal',
|
|
197
|
+
comparison: 'equals',
|
|
198
|
+
valueType: 'string',
|
|
199
|
+
},
|
|
200
|
+
],
|
|
201
|
+
impact: 'low',
|
|
202
|
+
exclusiveGroup,
|
|
203
|
+
sourceLocation: usage.sourceLocation
|
|
204
|
+
? {
|
|
205
|
+
lineNumber: usage.sourceLocation.lineNumber,
|
|
206
|
+
column: usage.sourceLocation.column,
|
|
207
|
+
}
|
|
208
|
+
: undefined,
|
|
209
|
+
codeSnippet: usage.sourceLocation?.codeSnippet,
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
// Long text flow
|
|
213
|
+
flows.push({
|
|
214
|
+
id: `${pathSlug}-long-text`,
|
|
215
|
+
name: `${baseName} Long Text`,
|
|
216
|
+
description: `When ${baseName.toLowerCase()} has long text that might overflow`,
|
|
217
|
+
requiredValues: [
|
|
218
|
+
{
|
|
219
|
+
attributePath: resolvedPath,
|
|
220
|
+
value: 'long',
|
|
221
|
+
comparison: 'equals',
|
|
222
|
+
valueType: 'string',
|
|
223
|
+
},
|
|
224
|
+
],
|
|
225
|
+
impact: 'low',
|
|
226
|
+
exclusiveGroup,
|
|
227
|
+
sourceLocation: usage.sourceLocation
|
|
228
|
+
? {
|
|
229
|
+
lineNumber: usage.sourceLocation.lineNumber,
|
|
230
|
+
column: usage.sourceLocation.column,
|
|
231
|
+
}
|
|
232
|
+
: undefined,
|
|
233
|
+
codeSnippet: usage.sourceLocation?.codeSnippet,
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
return flows;
|
|
239
|
+
}
|
|
@@ -743,6 +743,48 @@ function processScope({
|
|
|
743
743
|
};
|
|
744
744
|
}
|
|
745
745
|
|
|
746
|
+
/**
|
|
747
|
+
* Check if a code string contains only type declarations (type aliases, interfaces, etc.)
|
|
748
|
+
* that don't contribute to runtime behavior. This is used to determine if the root scope
|
|
749
|
+
* should be considered "empty" for scope extraction purposes.
|
|
750
|
+
*/
|
|
751
|
+
function containsOnlyTypeDeclarations(code: string): boolean {
|
|
752
|
+
try {
|
|
753
|
+
const sourceFile = ts.createSourceFile(
|
|
754
|
+
'temp.ts',
|
|
755
|
+
code,
|
|
756
|
+
ts.ScriptTarget.Latest,
|
|
757
|
+
true,
|
|
758
|
+
ts.ScriptKind.TS,
|
|
759
|
+
);
|
|
760
|
+
|
|
761
|
+
// Check each statement - if any is NOT a type-only declaration, return false
|
|
762
|
+
for (const statement of sourceFile.statements) {
|
|
763
|
+
if (
|
|
764
|
+
ts.isTypeAliasDeclaration(statement) ||
|
|
765
|
+
ts.isInterfaceDeclaration(statement) ||
|
|
766
|
+
ts.isEnumDeclaration(statement) ||
|
|
767
|
+
// Import declarations that are type-only
|
|
768
|
+
(ts.isImportDeclaration(statement) &&
|
|
769
|
+
statement.importClause?.isTypeOnly) ||
|
|
770
|
+
// Export declarations that are type-only
|
|
771
|
+
(ts.isExportDeclaration(statement) && statement.isTypeOnly)
|
|
772
|
+
) {
|
|
773
|
+
// This is a type-only declaration, continue checking
|
|
774
|
+
continue;
|
|
775
|
+
}
|
|
776
|
+
// Found a non-type statement
|
|
777
|
+
return false;
|
|
778
|
+
}
|
|
779
|
+
|
|
780
|
+
// All statements are type-only (or there are no statements)
|
|
781
|
+
return sourceFile.statements.length > 0;
|
|
782
|
+
} catch {
|
|
783
|
+
// If parsing fails, assume it's not type-only
|
|
784
|
+
return false;
|
|
785
|
+
}
|
|
786
|
+
}
|
|
787
|
+
|
|
746
788
|
/**
|
|
747
789
|
* Main entry point.
|
|
748
790
|
*
|
|
@@ -792,9 +834,15 @@ export default function isolateScopes(
|
|
|
792
834
|
const jsxLimit = options?.jsxLimit ?? 10;
|
|
793
835
|
processJSXForScope(isolatedScopes, generateSyntheticName, jsxLimit);
|
|
794
836
|
|
|
795
|
-
// If the root scope text is empty and there's
|
|
796
|
-
// return that child scope as the root scope
|
|
797
|
-
|
|
837
|
+
// If the root scope text is empty (or only contains type declarations) and there's
|
|
838
|
+
// only one child scope, return that child scope as the root scope.
|
|
839
|
+
// Type declarations (type aliases, interfaces) don't contribute to runtime behavior,
|
|
840
|
+
// so we treat them as "empty" for scope extraction purposes.
|
|
841
|
+
const rootTextIsEffectivelyEmpty =
|
|
842
|
+
isolatedScopes.text.trim().length === 0 ||
|
|
843
|
+
containsOnlyTypeDeclarations(isolatedScopes.text);
|
|
844
|
+
|
|
845
|
+
if (rootTextIsEffectivelyEmpty) {
|
|
798
846
|
const childScopeArray = Object.values(isolatedScopes.childScopes);
|
|
799
847
|
if (childScopeArray.length === 1) {
|
|
800
848
|
return childScopeArray[0];
|
|
@@ -11,6 +11,11 @@ export default function mergeJsonTypeDefinitions(
|
|
|
11
11
|
if (!typeDef) continue;
|
|
12
12
|
if (typeof typeDef === 'string') continue;
|
|
13
13
|
for (const [key, value] of Object.entries(typeDef)) {
|
|
14
|
+
// Preserve _nullable boolean markers set by convertDotNotation
|
|
15
|
+
if (key === '_nullable' && typeof value === 'boolean') {
|
|
16
|
+
mergedDef[key] = value;
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
14
19
|
if (typeof value === 'string') {
|
|
15
20
|
if (!mergedDef[key]) {
|
|
16
21
|
mergedDef[key] = value;
|
|
@@ -7,58 +7,12 @@ import {
|
|
|
7
7
|
|
|
8
8
|
export interface Statement {
|
|
9
9
|
structure: { [key: string]: string };
|
|
10
|
-
|
|
10
|
+
// Supports multiple equivalencies per key for OR expressions (e.g., x = a || b)
|
|
11
|
+
equivalentVariables: { [key: string]: string | string[] };
|
|
11
12
|
llmCall?: LlmCall;
|
|
12
13
|
}
|
|
13
14
|
|
|
14
15
|
export default function mergeStatements(statements: Statement[]) {
|
|
15
|
-
// Debug: Log input statements to understand what we're merging
|
|
16
|
-
const hasStateStructure = statements.some((s) =>
|
|
17
|
-
Object.keys(s.structure || {}).some(
|
|
18
|
-
(k) => k === 'state' || k.includes('state'),
|
|
19
|
-
),
|
|
20
|
-
);
|
|
21
|
-
const hasStateEquiv = statements.some((s) =>
|
|
22
|
-
Object.keys(s.equivalentVariables || {}).some(
|
|
23
|
-
(k) => k === 'state' || k.includes('state'),
|
|
24
|
-
),
|
|
25
|
-
);
|
|
26
|
-
if (hasStateStructure || hasStateEquiv) {
|
|
27
|
-
console.log(
|
|
28
|
-
`[UNION-TYPE] mergeStatements INPUT: ${statements.length} statements`,
|
|
29
|
-
);
|
|
30
|
-
statements.forEach((s, i) => {
|
|
31
|
-
const stateInStructure = Object.entries(s.structure || {}).filter(
|
|
32
|
-
([k]) => k === 'state' || k.includes('state'),
|
|
33
|
-
);
|
|
34
|
-
const stateInEquiv = Object.entries(s.equivalentVariables || {}).filter(
|
|
35
|
-
([k]) => k === 'state' || k.includes('state'),
|
|
36
|
-
);
|
|
37
|
-
const sigInEquiv = Object.entries(s.equivalentVariables || {}).filter(
|
|
38
|
-
([k, v]) => k === 'state' || v === 'signature[0]',
|
|
39
|
-
);
|
|
40
|
-
if (
|
|
41
|
-
stateInStructure.length > 0 ||
|
|
42
|
-
stateInEquiv.length > 0 ||
|
|
43
|
-
sigInEquiv.length > 0
|
|
44
|
-
) {
|
|
45
|
-
console.log(`[UNION-TYPE] Statement ${i}:`);
|
|
46
|
-
if (stateInStructure.length > 0)
|
|
47
|
-
console.log(
|
|
48
|
-
`[UNION-TYPE] structure: ${JSON.stringify(Object.fromEntries(stateInStructure))}`,
|
|
49
|
-
);
|
|
50
|
-
if (stateInEquiv.length > 0)
|
|
51
|
-
console.log(
|
|
52
|
-
`[UNION-TYPE] equivalentVariables (state): ${JSON.stringify(Object.fromEntries(stateInEquiv))}`,
|
|
53
|
-
);
|
|
54
|
-
if (sigInEquiv.length > 0)
|
|
55
|
-
console.log(
|
|
56
|
-
`[UNION-TYPE] equivalentVariables (sig): ${JSON.stringify(Object.fromEntries(sigInEquiv))}`,
|
|
57
|
-
);
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
|
|
62
16
|
// This should be handled by the AST Analyzer but it currently has a bug
|
|
63
17
|
const ensureFunctionCallReturnValue = (path: string, value: string) => {
|
|
64
18
|
if (path.endsWith(')') && value !== 'function') {
|
|
@@ -172,12 +126,54 @@ export default function mergeStatements(statements: Statement[]) {
|
|
|
172
126
|
// settingsData → fetcher.data.data uses fetcher::cyDuplicateKey1::.data.data
|
|
173
127
|
const activeRemappings: Record<string, string> = {};
|
|
174
128
|
|
|
129
|
+
// Helper to normalize value to array and process
|
|
130
|
+
const normalizeValue = (value: string | string[]): string[] =>
|
|
131
|
+
Array.isArray(value) ? value : [value];
|
|
132
|
+
|
|
175
133
|
const equivalentVariables = statements.reduce((acc: any, result) => {
|
|
176
|
-
for (const [key,
|
|
134
|
+
for (const [key, rawValue] of Object.entries(
|
|
177
135
|
result.equivalentVariables ?? {},
|
|
178
136
|
)) {
|
|
137
|
+
// Handle arrays from AST analyzer (OR expressions like x = a || b)
|
|
138
|
+
// These should be preserved as arrays to track all sources
|
|
139
|
+
if (Array.isArray(rawValue)) {
|
|
140
|
+
const keyOptions = deBinaryPath(key);
|
|
141
|
+
const validValues = rawValue.filter(
|
|
142
|
+
(v): v is string => typeof v === 'string' && v.length > 0,
|
|
143
|
+
);
|
|
144
|
+
if (validValues.length === 0) continue;
|
|
145
|
+
|
|
146
|
+
// Process each array value through deBinaryPath
|
|
147
|
+
const allValueOptions: string[] = [];
|
|
148
|
+
for (const value of validValues) {
|
|
149
|
+
const valueOptions = deBinaryPath(value);
|
|
150
|
+
allValueOptions.push(...valueOptions);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// Remove duplicates while preserving order
|
|
154
|
+
const uniqueValueOptions = [...new Set(allValueOptions)];
|
|
155
|
+
const finalValue =
|
|
156
|
+
uniqueValueOptions.length === 1
|
|
157
|
+
? uniqueValueOptions[0]
|
|
158
|
+
: uniqueValueOptions;
|
|
159
|
+
|
|
160
|
+
delete result.equivalentVariables[key];
|
|
161
|
+
if (keyOptions.length >= 2) {
|
|
162
|
+
for (const keyOption of keyOptions) {
|
|
163
|
+
result.equivalentVariables[keyOption] = finalValue;
|
|
164
|
+
}
|
|
165
|
+
} else {
|
|
166
|
+
result.equivalentVariables[keyOptions[0]] = finalValue;
|
|
167
|
+
}
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// Original logic for string values with potential binary expressions in the string
|
|
172
|
+
const firstValue = rawValue;
|
|
173
|
+
if (!firstValue) continue;
|
|
174
|
+
|
|
179
175
|
const keyOptions = deBinaryPath(key);
|
|
180
|
-
const valueOptions = deBinaryPath(
|
|
176
|
+
const valueOptions = deBinaryPath(firstValue);
|
|
181
177
|
delete result.equivalentVariables[key];
|
|
182
178
|
if (keyOptions.length === 2) {
|
|
183
179
|
if (valueOptions.length === 2) {
|
|
@@ -199,27 +195,38 @@ export default function mergeStatements(statements: Statement[]) {
|
|
|
199
195
|
}
|
|
200
196
|
}
|
|
201
197
|
|
|
202
|
-
for (const [key,
|
|
198
|
+
for (const [key, rawValue] of Object.entries(
|
|
203
199
|
result.equivalentVariables ?? {},
|
|
204
200
|
)) {
|
|
201
|
+
// Normalize to array for consistent handling
|
|
202
|
+
const values = normalizeValue(rawValue);
|
|
203
|
+
|
|
205
204
|
// Apply any active remappings to the VALUE, but ONLY for property paths
|
|
206
205
|
// e.g., if fetcher was remapped to fetcher::cyDuplicateKey1::,
|
|
207
206
|
// then "fetcher.data.data" should become "fetcher::cyDuplicateKey1::.data.data"
|
|
208
207
|
// However, we should NOT remap standalone variable references like "description"
|
|
209
208
|
// because that would lose type information from the original variable.
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
209
|
+
const remappedValues = values.map((value) => {
|
|
210
|
+
let remappedValue = value;
|
|
211
|
+
for (const [originalKey, remappedKey] of Object.entries(
|
|
212
|
+
activeRemappings,
|
|
213
|
+
)) {
|
|
214
|
+
// Only remap if the value is a property path (contains a dot after the key)
|
|
215
|
+
// This preserves type information for simple variable references
|
|
216
|
+
const keyRegex = new RegExp(
|
|
217
|
+
`^${originalKey.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}(?=\\.)`,
|
|
218
|
+
);
|
|
219
|
+
if (keyRegex.test(remappedValue)) {
|
|
220
|
+
remappedValue = remappedValue.replace(keyRegex, remappedKey);
|
|
221
|
+
}
|
|
221
222
|
}
|
|
222
|
-
|
|
223
|
+
return remappedValue;
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
// Use array if multiple values, string if single
|
|
227
|
+
const remappedValue =
|
|
228
|
+
remappedValues.length === 1 ? remappedValues[0] : remappedValues;
|
|
229
|
+
const firstRemappedValue = remappedValues[0];
|
|
223
230
|
|
|
224
231
|
if (acc[key]) {
|
|
225
232
|
if (acc[key] === remappedValue) continue;
|
|
@@ -247,45 +254,32 @@ export default function mergeStatements(statements: Statement[]) {
|
|
|
247
254
|
// If we have equivalentVariables[A] = B, and structure[A] is more specific than structure[B],
|
|
248
255
|
// then update structure[B] to match structure[A]
|
|
249
256
|
// This handles cases like: "state" -> "signature[0]" where "state" has a union type
|
|
250
|
-
|
|
251
|
-
// Debug: Log union types in merged structure
|
|
252
|
-
const unionTypesInStructure = Object.entries(structure).filter(
|
|
253
|
-
([_, v]) => typeof v === 'string' && v.includes("'") && v.includes(' | '),
|
|
254
|
-
);
|
|
255
|
-
if (unionTypesInStructure.length > 0) {
|
|
256
|
-
console.log(
|
|
257
|
-
`[UNION-TYPE] mergeStatements: Found ${unionTypesInStructure.length} union types in merged structure`,
|
|
258
|
-
);
|
|
259
|
-
unionTypesInStructure.forEach(([k, v]) =>
|
|
260
|
-
console.log(`[UNION-TYPE] structure["${k}"] = ${v}`),
|
|
261
|
-
);
|
|
262
|
-
console.log(
|
|
263
|
-
`[UNION-TYPE] mergeStatements: equivalentVariables = ${JSON.stringify(equivalentVariables)}`,
|
|
264
|
-
);
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
for (const [source, target] of Object.entries(equivalentVariables) as [
|
|
268
|
-
string,
|
|
257
|
+
for (const [source, rawTarget] of Object.entries(equivalentVariables) as [
|
|
269
258
|
string,
|
|
259
|
+
string | string[],
|
|
270
260
|
][]) {
|
|
261
|
+
// Normalize to array for consistent handling
|
|
262
|
+
const targets = Array.isArray(rawTarget) ? rawTarget : [rawTarget];
|
|
271
263
|
const sourceType = structure[source];
|
|
272
|
-
const targetType = structure[target];
|
|
273
264
|
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
const sourceIsUnion =
|
|
277
|
-
sourceType.includes("'") && sourceType.includes(' | ');
|
|
265
|
+
for (const target of targets) {
|
|
266
|
+
if (typeof target !== 'string') continue;
|
|
278
267
|
|
|
279
|
-
|
|
280
|
-
// Target doesn't exist or is generic - propagate the union type
|
|
281
|
-
const targetIsGeneric =
|
|
282
|
-
!targetType || targetType === 'string' || targetType === 'unknown';
|
|
268
|
+
const targetType = structure[target];
|
|
283
269
|
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
);
|
|
288
|
-
|
|
270
|
+
// Check if source has a more specific type (union type vs generic type)
|
|
271
|
+
if (sourceType) {
|
|
272
|
+
const sourceIsUnion =
|
|
273
|
+
sourceType.includes("'") && sourceType.includes(' | ');
|
|
274
|
+
|
|
275
|
+
if (sourceIsUnion) {
|
|
276
|
+
// Target doesn't exist or is generic - propagate the union type
|
|
277
|
+
const targetIsGeneric =
|
|
278
|
+
!targetType || targetType === 'string' || targetType === 'unknown';
|
|
279
|
+
|
|
280
|
+
if (targetIsGeneric) {
|
|
281
|
+
structure[target] = sourceType;
|
|
282
|
+
}
|
|
289
283
|
}
|
|
290
284
|
}
|
|
291
285
|
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { JsonTypeDefinition } from '~codeyam/types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Check whether all non-`_nullable` children of an object are simple strings.
|
|
5
|
+
* "Leaf-like" nullable objects (all-string children) get collapsed to
|
|
6
|
+
* `"object | null"` so the LLM knows the field can be null.
|
|
7
|
+
* Objects with nested structure (object/array children) keep their shape
|
|
8
|
+
* so the LLM can still generate proper data when the field is truthy.
|
|
9
|
+
*/
|
|
10
|
+
function isLeafLikeObject(obj: Record<string, any>): boolean {
|
|
11
|
+
for (const key of Object.keys(obj)) {
|
|
12
|
+
if (key === '_nullable') continue;
|
|
13
|
+
const value = obj[key];
|
|
14
|
+
if (typeof value !== 'string') return false;
|
|
15
|
+
}
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Collapse *leaf-like* nullable objects/arrays in the data structure to type strings.
|
|
21
|
+
*
|
|
22
|
+
* When convertDotNotation marks an object or array as `_nullable: true`
|
|
23
|
+
* (meaning the schema had `object | undefined`, `object | null`, etc.),
|
|
24
|
+
* we decide whether to collapse it:
|
|
25
|
+
*
|
|
26
|
+
* - **Leaf-like** (all children are simple strings): collapse to `"object | null"`.
|
|
27
|
+
* Example: `{ _nullable: true, type: "string", path: "string" }` → `"object | null"`
|
|
28
|
+
*
|
|
29
|
+
* - **Rich** (has object/array children): strip `_nullable` and keep the structure
|
|
30
|
+
* so the LLM can generate proper nested data when the field is truthy.
|
|
31
|
+
* Example: `{ _nullable: true, items: [...], name: "string" }` → `{ items: [...], name: "string" }`
|
|
32
|
+
*
|
|
33
|
+
* Non-nullable objects are recursively processed but left as nested structures.
|
|
34
|
+
*/
|
|
35
|
+
export default function collapseNullableObjects(
|
|
36
|
+
data: JsonTypeDefinition,
|
|
37
|
+
): JsonTypeDefinition {
|
|
38
|
+
if (typeof data !== 'object' || data === null) {
|
|
39
|
+
return data;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if (Array.isArray(data)) {
|
|
43
|
+
return data.map((item: any) =>
|
|
44
|
+
typeof item === 'object' && item !== null
|
|
45
|
+
? collapseNullableObjects(item as JsonTypeDefinition)
|
|
46
|
+
: item,
|
|
47
|
+
) as any as JsonTypeDefinition;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const result: JsonTypeDefinition = {};
|
|
51
|
+
|
|
52
|
+
for (const key of Object.keys(data)) {
|
|
53
|
+
// Skip the _nullable marker itself (shouldn't appear at top level, but be safe)
|
|
54
|
+
if (key === '_nullable') continue;
|
|
55
|
+
|
|
56
|
+
const value = data[key];
|
|
57
|
+
|
|
58
|
+
if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
|
|
59
|
+
const hasNullable = (value as any)._nullable === true;
|
|
60
|
+
if (hasNullable && isLeafLikeObject(value as Record<string, any>)) {
|
|
61
|
+
// Leaf-like nullable object → collapse to type string
|
|
62
|
+
const childKeys = Object.keys(value as any).filter(
|
|
63
|
+
(k) => k !== '_nullable',
|
|
64
|
+
);
|
|
65
|
+
console.log(
|
|
66
|
+
`[collapseNullableObjects] collapsed "${key}" → "object | null" (leaf-like, children: [${childKeys.join(', ')}])`,
|
|
67
|
+
);
|
|
68
|
+
result[key] = 'object | null';
|
|
69
|
+
} else if (hasNullable) {
|
|
70
|
+
// Rich nullable object → strip _nullable, keep structure
|
|
71
|
+
const childKeys = Object.keys(value as any).filter(
|
|
72
|
+
(k) => k !== '_nullable',
|
|
73
|
+
);
|
|
74
|
+
console.log(
|
|
75
|
+
`[collapseNullableObjects] kept structure for nullable "${key}" (rich, children: [${childKeys.join(', ')}])`,
|
|
76
|
+
);
|
|
77
|
+
result[key] = collapseNullableObjects(value as JsonTypeDefinition);
|
|
78
|
+
} else {
|
|
79
|
+
// Non-nullable → recurse
|
|
80
|
+
result[key] = collapseNullableObjects(value as JsonTypeDefinition);
|
|
81
|
+
}
|
|
82
|
+
} else if (Array.isArray(value)) {
|
|
83
|
+
const hasNullable = (value as any)._nullable === true;
|
|
84
|
+
if (
|
|
85
|
+
hasNullable &&
|
|
86
|
+
value.length <= 1 &&
|
|
87
|
+
value.every((v) => typeof v === 'string')
|
|
88
|
+
) {
|
|
89
|
+
// Leaf-like nullable array → collapse to type string
|
|
90
|
+
console.log(
|
|
91
|
+
`[collapseNullableObjects] collapsed "${key}" → "array | null" (leaf-like)`,
|
|
92
|
+
);
|
|
93
|
+
result[key] = 'array | null';
|
|
94
|
+
} else if (hasNullable) {
|
|
95
|
+
// Rich nullable array → strip _nullable, keep structure
|
|
96
|
+
console.log(
|
|
97
|
+
`[collapseNullableObjects] kept structure for nullable array "${key}" (${value.length} elements)`,
|
|
98
|
+
);
|
|
99
|
+
result[key] = value.map((item) =>
|
|
100
|
+
typeof item === 'object' && item !== null
|
|
101
|
+
? collapseNullableObjects(item as JsonTypeDefinition)
|
|
102
|
+
: item,
|
|
103
|
+
) as JsonTypeDefinition[];
|
|
104
|
+
} else {
|
|
105
|
+
// Non-nullable → recurse elements
|
|
106
|
+
result[key] = value.map((item) =>
|
|
107
|
+
typeof item === 'object' && item !== null
|
|
108
|
+
? collapseNullableObjects(item as JsonTypeDefinition)
|
|
109
|
+
: item,
|
|
110
|
+
) as JsonTypeDefinition[];
|
|
111
|
+
}
|
|
112
|
+
} else {
|
|
113
|
+
result[key] = value;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
return result;
|
|
118
|
+
}
|