@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
|
@@ -139,16 +139,19 @@ export function gatherAttributesMap(
|
|
|
139
139
|
// Use merged type if available, otherwise fall back to isolated type
|
|
140
140
|
const typeValue =
|
|
141
141
|
mergedSignatureSchema[key] ?? isolatedSignatureSchema[key];
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
const
|
|
145
|
-
|
|
146
|
-
|
|
142
|
+
// Handle array case (OR expressions) - use first element if array
|
|
143
|
+
const rawEquivalent = equivalentSignatureVariables[keyParts[0]];
|
|
144
|
+
const equivalentSignatureVariable = Array.isArray(rawEquivalent)
|
|
145
|
+
? rawEquivalent[0]
|
|
146
|
+
: rawEquivalent;
|
|
147
|
+
const equivalentSignatureVariableParts = equivalentSignatureVariable
|
|
148
|
+
? splitOutsideParenthesesAndArrays(equivalentSignatureVariable)
|
|
149
|
+
: [];
|
|
147
150
|
if (
|
|
148
151
|
equivalentSignatureVariable &&
|
|
149
|
-
!equivalentSignatureVariableParts[0]
|
|
152
|
+
!equivalentSignatureVariableParts[0]?.includes('(')
|
|
150
153
|
) {
|
|
151
|
-
const equivalentKey =
|
|
154
|
+
const equivalentKey = equivalentSignatureVariable;
|
|
152
155
|
const equivalentPath = joinParenthesesAndArrays([
|
|
153
156
|
equivalentKey,
|
|
154
157
|
...keyParts.slice(1),
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ExecutionFlow,
|
|
3
|
+
Scenario,
|
|
4
|
+
ScenariosDataStructure,
|
|
5
|
+
} from '~codeyam/types';
|
|
6
|
+
import simplifyKeysForLLM from './simplifyKeysForLLM';
|
|
7
|
+
import noErrorAttributes from './noErrorAttributes';
|
|
8
|
+
import { JsonTypeDefinition } from '~codeyam/types';
|
|
9
|
+
|
|
10
|
+
type RequiredValue = NonNullable<ExecutionFlow['requiredValues']>[number];
|
|
11
|
+
|
|
12
|
+
interface GenerateChunkPromptArgs {
|
|
13
|
+
scenario: Scenario;
|
|
14
|
+
chunk: ScenariosDataStructure['dataForMocks'];
|
|
15
|
+
chunkIndex: number;
|
|
16
|
+
totalChunks: number;
|
|
17
|
+
relevantRequiredValues: RequiredValue[];
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Generate a prompt for a focused LLM call to generate mock data for a single chunk.
|
|
22
|
+
*
|
|
23
|
+
* Large data structures overwhelm LLMs, causing them to make mistakes on some keys.
|
|
24
|
+
* By processing smaller chunks, each key gets more focused attention.
|
|
25
|
+
*/
|
|
26
|
+
export default function generateChunkPrompt({
|
|
27
|
+
scenario,
|
|
28
|
+
chunk,
|
|
29
|
+
chunkIndex,
|
|
30
|
+
totalChunks,
|
|
31
|
+
relevantRequiredValues,
|
|
32
|
+
}: GenerateChunkPromptArgs): string {
|
|
33
|
+
// Clean up the schema for LLM consumption
|
|
34
|
+
const cleanedSchema = simplifyKeysForLLM(
|
|
35
|
+
noErrorAttributes(chunk) as JsonTypeDefinition,
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
const keysInChunk = Object.keys(chunk || {});
|
|
39
|
+
|
|
40
|
+
// Build requirements section if there are relevant requiredValues
|
|
41
|
+
const requirementsSection =
|
|
42
|
+
relevantRequiredValues.length > 0
|
|
43
|
+
? `## Execution Flow Requirements for These Keys
|
|
44
|
+
These specific values MUST be set to produce the correct scenario behavior:
|
|
45
|
+
\`\`\`json
|
|
46
|
+
${JSON.stringify(relevantRequiredValues, null, 2)}
|
|
47
|
+
\`\`\`
|
|
48
|
+
|
|
49
|
+
`
|
|
50
|
+
: '';
|
|
51
|
+
|
|
52
|
+
return `Generate mock data for chunk ${chunkIndex + 1} of ${totalChunks}.
|
|
53
|
+
|
|
54
|
+
## Scenario
|
|
55
|
+
\`\`\`json
|
|
56
|
+
${JSON.stringify({ name: scenario.name, description: scenario.description }, null, 2)}
|
|
57
|
+
\`\`\`
|
|
58
|
+
|
|
59
|
+
${requirementsSection}## Keys in This Chunk (${keysInChunk.length} keys)
|
|
60
|
+
Generate data for ONLY these keys:
|
|
61
|
+
${keysInChunk.map((k) => `- \`${k}\``).join('\n')}
|
|
62
|
+
|
|
63
|
+
## Schema for This Chunk
|
|
64
|
+
\`\`\`json
|
|
65
|
+
${JSON.stringify(cleanedSchema, null, 2)}
|
|
66
|
+
\`\`\`
|
|
67
|
+
|
|
68
|
+
## Instructions
|
|
69
|
+
1. Match the EXACT structure shown in the schema
|
|
70
|
+
2. Keys with special characters like \`*\` are LITERAL keys, not patterns
|
|
71
|
+
3. If requiredValues are shown above, set values that satisfy them
|
|
72
|
+
4. For paths like \`functionCall().functionCallReturnValue.property\`, the mock data key is just \`functionCall()\`
|
|
73
|
+
|
|
74
|
+
Return ONLY a JSON object with this structure:
|
|
75
|
+
\`\`\`json
|
|
76
|
+
{
|
|
77
|
+
"mockData": {
|
|
78
|
+
// fill in ONLY the keys from this chunk
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
\`\`\``;
|
|
82
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ExecutionFlow,
|
|
3
|
+
Scenario,
|
|
4
|
+
ScenariosDataStructure,
|
|
5
|
+
} from '~codeyam/types';
|
|
6
|
+
import simplifyKeysForLLM from './simplifyKeysForLLM';
|
|
7
|
+
import noErrorAttributes from './noErrorAttributes';
|
|
8
|
+
import { JsonTypeDefinition } from '~codeyam/types';
|
|
9
|
+
|
|
10
|
+
interface GenerateCriticalKeysPromptArgs {
|
|
11
|
+
scenario: Scenario;
|
|
12
|
+
executionFlows: ExecutionFlow[] | undefined;
|
|
13
|
+
criticalKeys: string[];
|
|
14
|
+
fullDataForMocks: ScenariosDataStructure['dataForMocks'];
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Generate a prompt for a focused LLM call to generate only the critical mock data keys.
|
|
19
|
+
*
|
|
20
|
+
* When a scenario has covered flows with requiredValues, only a subset of the full
|
|
21
|
+
* dataForMocks schema is actually needed to satisfy those requirements. This prompt
|
|
22
|
+
* focuses the LLM on JUST those critical keys, avoiding confusion from large schemas.
|
|
23
|
+
*
|
|
24
|
+
* This is called BEFORE the main data generation to ensure critical keys are correctly
|
|
25
|
+
* generated with full attention from the LLM.
|
|
26
|
+
*/
|
|
27
|
+
export default function generateCriticalKeysPrompt({
|
|
28
|
+
scenario,
|
|
29
|
+
executionFlows,
|
|
30
|
+
criticalKeys,
|
|
31
|
+
fullDataForMocks,
|
|
32
|
+
}: GenerateCriticalKeysPromptArgs): string {
|
|
33
|
+
// Build the subset schema with only critical keys
|
|
34
|
+
const criticalSchema: Record<string, any> = {};
|
|
35
|
+
if (fullDataForMocks && typeof fullDataForMocks === 'object') {
|
|
36
|
+
for (const key of criticalKeys) {
|
|
37
|
+
if (key in fullDataForMocks) {
|
|
38
|
+
criticalSchema[key] = (fullDataForMocks as Record<string, any>)[key];
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// Clean up the schema for LLM consumption
|
|
44
|
+
const cleanedSchema = simplifyKeysForLLM(
|
|
45
|
+
noErrorAttributes(criticalSchema) as JsonTypeDefinition,
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
// Get the covered flows and their requirements
|
|
49
|
+
const coveredFlowIds = scenario.metadata?.coveredFlows || [];
|
|
50
|
+
const coveredFlowRequirements = coveredFlowIds
|
|
51
|
+
.map((flowId) => {
|
|
52
|
+
const flow = executionFlows?.find((f) => f.id === flowId);
|
|
53
|
+
if (!flow) return null;
|
|
54
|
+
return {
|
|
55
|
+
flowId: flow.id,
|
|
56
|
+
flowName: flow.name,
|
|
57
|
+
flowDescription: flow.description,
|
|
58
|
+
requiredValues: flow.requiredValues,
|
|
59
|
+
};
|
|
60
|
+
})
|
|
61
|
+
.filter(Boolean);
|
|
62
|
+
|
|
63
|
+
return `Generate mock data for these CRITICAL keys. Pay close attention to the requiredValues.
|
|
64
|
+
|
|
65
|
+
## IMPORTANT: These keys are critical for satisfying the execution flow requirements
|
|
66
|
+
The keys below directly control the scenario's behavior. Generate values that EXACTLY satisfy the requiredValues.
|
|
67
|
+
|
|
68
|
+
## Scenario
|
|
69
|
+
\`\`\`json
|
|
70
|
+
${JSON.stringify({ name: scenario.name, description: scenario.description }, null, 2)}
|
|
71
|
+
\`\`\`
|
|
72
|
+
|
|
73
|
+
## Execution Flow Requirements
|
|
74
|
+
These are the specific values that MUST be set:
|
|
75
|
+
\`\`\`json
|
|
76
|
+
${JSON.stringify(coveredFlowRequirements, null, 2)}
|
|
77
|
+
\`\`\`
|
|
78
|
+
|
|
79
|
+
## Critical Keys Schema (generate data for ONLY these keys)
|
|
80
|
+
\`\`\`json
|
|
81
|
+
${JSON.stringify(cleanedSchema, null, 2)}
|
|
82
|
+
\`\`\`
|
|
83
|
+
|
|
84
|
+
## Instructions
|
|
85
|
+
1. Match the EXACT structure shown in the schema
|
|
86
|
+
2. Keys with special characters like \`*\` are LITERAL keys, not patterns
|
|
87
|
+
3. Set values that satisfy ALL the requiredValues above
|
|
88
|
+
4. For paths like \`functionCall().functionCallReturnValue.property\`, the mock data key is just \`functionCall()\`
|
|
89
|
+
|
|
90
|
+
Return ONLY a JSON object with this structure:
|
|
91
|
+
\`\`\`json
|
|
92
|
+
{
|
|
93
|
+
"scenarioData": {
|
|
94
|
+
"scenarioName": "${scenario.name}",
|
|
95
|
+
"data": {
|
|
96
|
+
"mockData": {
|
|
97
|
+
// fill in ONLY the critical keys above
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
\`\`\``;
|
|
103
|
+
}
|
|
@@ -2,9 +2,12 @@ import {
|
|
|
2
2
|
ScenariosDataStructure,
|
|
3
3
|
Scenario,
|
|
4
4
|
ScenarioData,
|
|
5
|
+
JsonTypeDefinition,
|
|
5
6
|
ExecutionFlow,
|
|
6
7
|
} from '~codeyam/types';
|
|
7
8
|
import noErrorAttributes from './noErrorAttributes';
|
|
9
|
+
import simplifyKeysForLLM from './simplifyKeysForLLM';
|
|
10
|
+
import collapseNullableObjects from './collapseNullableObjects';
|
|
8
11
|
|
|
9
12
|
/**
|
|
10
13
|
* Sort object keys by the size of their JSON-stringified values (smallest first).
|
|
@@ -21,12 +24,18 @@ function sortKeysBySize(obj: Record<string, any>): Record<string, any> {
|
|
|
21
24
|
return Object.fromEntries(entries);
|
|
22
25
|
}
|
|
23
26
|
|
|
27
|
+
interface GeneratePromptOptions {
|
|
28
|
+
/** When true, mockData has already been generated via chunks - skip it in main call */
|
|
29
|
+
mockDataAlreadyGenerated?: boolean;
|
|
30
|
+
}
|
|
31
|
+
|
|
24
32
|
export default function generateEntityScenarioDataGenerator(
|
|
25
33
|
structure: ScenariosDataStructure,
|
|
26
34
|
scenario: Scenario,
|
|
27
35
|
executionFlows: ExecutionFlow[] | undefined,
|
|
28
36
|
defaultScenarioData?: ScenarioData,
|
|
29
37
|
incompleteResponse?: string,
|
|
38
|
+
options?: GeneratePromptOptions,
|
|
30
39
|
) {
|
|
31
40
|
if (incompleteResponse) {
|
|
32
41
|
return incompleteResponse;
|
|
@@ -85,11 +94,23 @@ ${JSON.stringify(defaultScenarioData.data, null, 2)}
|
|
|
85
94
|
`
|
|
86
95
|
: '';
|
|
87
96
|
|
|
88
|
-
//
|
|
89
|
-
//
|
|
90
|
-
|
|
91
|
-
|
|
97
|
+
// Simplify verbose function call keys for LLM consumption, then sort by size.
|
|
98
|
+
// The static analysis generates keys like "useQuery({ id: Number(id), onSuccess: async (quote) => { ...30 lines... } })"
|
|
99
|
+
// which confuse the LLM. simplifyKeysForLLM reduces them to "useQuery({ id, onSuccess: () => <truncated> })"
|
|
100
|
+
// while the reconcileMockDataKeys function will still match the simplified response back to original keys.
|
|
101
|
+
// Then sort keys by size (smallest first) so small keys appear before large keys,
|
|
102
|
+
// increasing the chance the LLM generates all keys for large schemas.
|
|
103
|
+
|
|
104
|
+
const afterNoError = structure.dataForMocks
|
|
105
|
+
? (noErrorAttributes(structure.dataForMocks) as JsonTypeDefinition)
|
|
92
106
|
: null;
|
|
107
|
+
|
|
108
|
+
const afterSimplify = afterNoError ? simplifyKeysForLLM(afterNoError) : null;
|
|
109
|
+
|
|
110
|
+
const cleanedDataForMocks = afterSimplify
|
|
111
|
+
? collapseNullableObjects(afterSimplify)
|
|
112
|
+
: null;
|
|
113
|
+
|
|
93
114
|
const sortedDataForMocks =
|
|
94
115
|
cleanedDataForMocks &&
|
|
95
116
|
typeof cleanedDataForMocks === 'object' &&
|
|
@@ -97,12 +118,28 @@ ${JSON.stringify(defaultScenarioData.data, null, 2)}
|
|
|
97
118
|
? sortKeysBySize(cleanedDataForMocks as Record<string, any>)
|
|
98
119
|
: cleanedDataForMocks;
|
|
99
120
|
|
|
100
|
-
|
|
101
|
-
|
|
121
|
+
// Log nullable-related content in final prompt JSON
|
|
122
|
+
if (sortedDataForMocks) {
|
|
123
|
+
const finalJson = JSON.stringify(sortedDataForMocks, null, 2);
|
|
124
|
+
const hasNullableMarker = finalJson.includes('_nullable');
|
|
125
|
+
const nullCollapsed = (finalJson.match(/"object \| null"/g) || []).length;
|
|
126
|
+
const arrayCollapsed = (finalJson.match(/"array \| null"/g) || []).length;
|
|
127
|
+
if (hasNullableMarker || nullCollapsed > 0 || arrayCollapsed > 0) {
|
|
128
|
+
console.log(
|
|
129
|
+
`[generateEntityScenarioDataGenerator] final prompt: ${nullCollapsed} "object | null", ${arrayCollapsed} "array | null"${hasNullableMarker ? ', WARNING: _nullable still present!' : ''}`,
|
|
130
|
+
);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// When mockData has already been generated via chunks, skip it in the main call
|
|
135
|
+
const mockDataSection = options?.mockDataAlreadyGenerated
|
|
136
|
+
? '## mockData Structure\nmockData has been pre-generated—return `{}` for mockData.'
|
|
137
|
+
: sortedDataForMocks
|
|
138
|
+
? `## mockData Structure
|
|
102
139
|
\`\`\`json
|
|
103
140
|
${JSON.stringify(sortedDataForMocks, null, 2)}
|
|
104
141
|
\`\`\``
|
|
105
|
-
|
|
142
|
+
: '## mockData Structure\nNone—return `{}` for mockData.';
|
|
106
143
|
|
|
107
144
|
const argumentsSection = structure.arguments
|
|
108
145
|
? `## argumentsData Structure
|
|
@@ -0,0 +1,391 @@
|
|
|
1
|
+
import { JsonTypeDefinition } from '~codeyam/types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Simplify verbose function call keys for LLM consumption.
|
|
5
|
+
*
|
|
6
|
+
* The static analysis generates keys that include entire function call signatures
|
|
7
|
+
* with all arguments, including multi-line callback bodies. For example:
|
|
8
|
+
*
|
|
9
|
+
* ```
|
|
10
|
+
* "useQuery({ id: Number(id), pagination: debouncedPagination, onSuccess: async (quote) => { ...30 lines... } })"
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* These verbose keys confuse the LLM and cause it to miss generating data for some keys.
|
|
14
|
+
* This function simplifies keys to just the essential parts:
|
|
15
|
+
*
|
|
16
|
+
* ```
|
|
17
|
+
* "useQuery({ id, pagination, onSuccess: () => <truncated> })"
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* The reconcileMockDataKeys function already does fuzzy matching, so the LLM's
|
|
21
|
+
* simplified response keys will still match back to the original verbose keys.
|
|
22
|
+
*/
|
|
23
|
+
export default function simplifyKeysForLLM(
|
|
24
|
+
data: JsonTypeDefinition,
|
|
25
|
+
): JsonTypeDefinition {
|
|
26
|
+
if (typeof data !== 'object' || data === null) {
|
|
27
|
+
return data;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const result: JsonTypeDefinition = {};
|
|
31
|
+
|
|
32
|
+
for (const key of Object.keys(data)) {
|
|
33
|
+
const simplifiedKey = simplifyFunctionCallKey(key);
|
|
34
|
+
const value = data[key];
|
|
35
|
+
|
|
36
|
+
// Recursively simplify nested objects
|
|
37
|
+
if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
|
|
38
|
+
result[simplifiedKey] = simplifyKeysForLLM(value as JsonTypeDefinition);
|
|
39
|
+
} else if (Array.isArray(value)) {
|
|
40
|
+
// For arrays, recursively simplify each object element
|
|
41
|
+
result[simplifiedKey] = value.map((item) =>
|
|
42
|
+
typeof item === 'object' && item !== null && !Array.isArray(item)
|
|
43
|
+
? simplifyKeysForLLM(item as JsonTypeDefinition)
|
|
44
|
+
: item,
|
|
45
|
+
) as JsonTypeDefinition[];
|
|
46
|
+
} else {
|
|
47
|
+
result[simplifiedKey] = value;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return result;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Simplify a single function call key.
|
|
56
|
+
*
|
|
57
|
+
* Rules:
|
|
58
|
+
* 1. If key doesn't look like a function call, return as-is
|
|
59
|
+
* 2. For function calls with object arguments:
|
|
60
|
+
* - Keep property names
|
|
61
|
+
* - Replace complex values with simplified versions
|
|
62
|
+
* - Replace callbacks with () => ...
|
|
63
|
+
* 3. Cap total length at MAX_KEY_LENGTH
|
|
64
|
+
*/
|
|
65
|
+
function simplifyFunctionCallKey(key: string): string {
|
|
66
|
+
// If it doesn't look like a function call, return as-is
|
|
67
|
+
if (!key.includes('(')) {
|
|
68
|
+
return key;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// Extract function name and arguments
|
|
72
|
+
const funcNameMatch = key.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\s*\(/);
|
|
73
|
+
if (!funcNameMatch) {
|
|
74
|
+
return key;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const funcName = funcNameMatch[1];
|
|
78
|
+
const argsStart = key.indexOf('(');
|
|
79
|
+
const argsContent = key.slice(argsStart + 1, -1); // Remove outer parens
|
|
80
|
+
|
|
81
|
+
// If args are empty or very short, return as-is
|
|
82
|
+
if (argsContent.trim().length < 50) {
|
|
83
|
+
return key;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Parse and simplify the arguments
|
|
87
|
+
const simplifiedArgs = simplifyArguments(argsContent);
|
|
88
|
+
const simplified = `${funcName}(${simplifiedArgs})`;
|
|
89
|
+
|
|
90
|
+
// Cap length - use <truncated> instead of ... to prevent LLMs from
|
|
91
|
+
// interpreting it as a fill-in placeholder (Issue #14)
|
|
92
|
+
const MAX_KEY_LENGTH = 150;
|
|
93
|
+
if (simplified.length > MAX_KEY_LENGTH) {
|
|
94
|
+
return simplified.slice(0, MAX_KEY_LENGTH - 11) + '<truncated>';
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
return simplified;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Simplify function call arguments.
|
|
102
|
+
*
|
|
103
|
+
* Handles multiple arguments separated by commas, where each argument
|
|
104
|
+
* could be an object literal, a simple value, or a complex expression.
|
|
105
|
+
*/
|
|
106
|
+
function simplifyArguments(argsContent: string): string {
|
|
107
|
+
const trimmed = argsContent.trim();
|
|
108
|
+
|
|
109
|
+
// Split arguments at top-level commas (not inside nested structures)
|
|
110
|
+
const args = splitTopLevelArguments(trimmed);
|
|
111
|
+
|
|
112
|
+
const simplifiedArgs = args.map((arg) => {
|
|
113
|
+
const argTrimmed = arg.trim();
|
|
114
|
+
|
|
115
|
+
// Check if it's an object literal (starts with {)
|
|
116
|
+
if (argTrimmed.startsWith('{')) {
|
|
117
|
+
return simplifyObjectLiteral(argTrimmed);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// For non-object arguments, just truncate if needed
|
|
121
|
+
// Use <truncated> instead of ... to prevent LLMs from interpreting as fill-in
|
|
122
|
+
if (argTrimmed.length > 30) {
|
|
123
|
+
return argTrimmed.slice(0, 19) + '<truncated>';
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
return argTrimmed;
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
return simplifiedArgs.join(', ');
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Split arguments at top-level commas, respecting nested braces/parens.
|
|
134
|
+
*/
|
|
135
|
+
function splitTopLevelArguments(argsContent: string): string[] {
|
|
136
|
+
const args: string[] = [];
|
|
137
|
+
let current = '';
|
|
138
|
+
let depth = 0;
|
|
139
|
+
let inString = false;
|
|
140
|
+
let stringChar = '';
|
|
141
|
+
|
|
142
|
+
for (let i = 0; i < argsContent.length; i++) {
|
|
143
|
+
const char = argsContent[i];
|
|
144
|
+
const prevChar = i > 0 ? argsContent[i - 1] : '';
|
|
145
|
+
|
|
146
|
+
// Handle string boundaries
|
|
147
|
+
if ((char === '"' || char === "'" || char === '`') && prevChar !== '\\') {
|
|
148
|
+
if (!inString) {
|
|
149
|
+
inString = true;
|
|
150
|
+
stringChar = char;
|
|
151
|
+
} else if (char === stringChar) {
|
|
152
|
+
inString = false;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
if (!inString) {
|
|
157
|
+
if (char === '{' || char === '(' || char === '[') {
|
|
158
|
+
depth++;
|
|
159
|
+
} else if (char === '}' || char === ')' || char === ']') {
|
|
160
|
+
depth--;
|
|
161
|
+
} else if (char === ',' && depth === 0) {
|
|
162
|
+
// End of argument
|
|
163
|
+
if (current.trim()) {
|
|
164
|
+
args.push(current.trim());
|
|
165
|
+
}
|
|
166
|
+
current = '';
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
current += char;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// Don't forget the last argument
|
|
175
|
+
if (current.trim()) {
|
|
176
|
+
args.push(current.trim());
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
return args;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Simplify an object literal, keeping property names but simplifying values.
|
|
184
|
+
*/
|
|
185
|
+
function simplifyObjectLiteral(objStr: string): string {
|
|
186
|
+
// Extract property names and their values
|
|
187
|
+
const properties = extractObjectProperties(objStr);
|
|
188
|
+
|
|
189
|
+
if (properties.length === 0) {
|
|
190
|
+
return '{ }';
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
const simplifiedProps = properties.map(({ name, value }) => {
|
|
194
|
+
const simplifiedValue = simplifyPropertyValue(value);
|
|
195
|
+
// If value is same as name (shorthand), just use name
|
|
196
|
+
if (simplifiedValue === name) {
|
|
197
|
+
return name;
|
|
198
|
+
}
|
|
199
|
+
return `${name}: ${simplifiedValue}`;
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
return `{ ${simplifiedProps.join(', ')} }`;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Extract property names and values from an object literal string.
|
|
207
|
+
*/
|
|
208
|
+
function extractObjectProperties(
|
|
209
|
+
objStr: string,
|
|
210
|
+
): Array<{ name: string; value: string }> {
|
|
211
|
+
const properties: Array<{ name: string; value: string }> = [];
|
|
212
|
+
|
|
213
|
+
// Remove outer braces and trim
|
|
214
|
+
let content = objStr.trim();
|
|
215
|
+
if (content.startsWith('{')) content = content.slice(1);
|
|
216
|
+
if (content.endsWith('}')) content = content.slice(0, -1);
|
|
217
|
+
content = content.trim();
|
|
218
|
+
|
|
219
|
+
// Parse properties, handling nested structures
|
|
220
|
+
let current = '';
|
|
221
|
+
let depth = 0;
|
|
222
|
+
let inString = false;
|
|
223
|
+
let stringChar = '';
|
|
224
|
+
|
|
225
|
+
for (let i = 0; i < content.length; i++) {
|
|
226
|
+
const char = content[i];
|
|
227
|
+
const prevChar = i > 0 ? content[i - 1] : '';
|
|
228
|
+
|
|
229
|
+
// Handle string boundaries
|
|
230
|
+
if ((char === '"' || char === "'" || char === '`') && prevChar !== '\\') {
|
|
231
|
+
if (!inString) {
|
|
232
|
+
inString = true;
|
|
233
|
+
stringChar = char;
|
|
234
|
+
} else if (char === stringChar) {
|
|
235
|
+
inString = false;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
if (!inString) {
|
|
240
|
+
if (char === '{' || char === '(' || char === '[') {
|
|
241
|
+
depth++;
|
|
242
|
+
} else if (char === '}' || char === ')' || char === ']') {
|
|
243
|
+
depth--;
|
|
244
|
+
} else if (char === ',' && depth === 0) {
|
|
245
|
+
// End of property
|
|
246
|
+
const prop = parseProperty(current.trim());
|
|
247
|
+
if (prop) properties.push(prop);
|
|
248
|
+
current = '';
|
|
249
|
+
continue;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
current += char;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// Don't forget the last property
|
|
257
|
+
if (current.trim()) {
|
|
258
|
+
const prop = parseProperty(current.trim());
|
|
259
|
+
if (prop) properties.push(prop);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
return properties;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* Parse a single property string into name and value.
|
|
267
|
+
*/
|
|
268
|
+
function parseProperty(
|
|
269
|
+
propStr: string,
|
|
270
|
+
): { name: string; value: string } | null {
|
|
271
|
+
// Handle shorthand properties (just a name)
|
|
272
|
+
const shorthandMatch = propStr.match(/^([a-zA-Z_][a-zA-Z0-9_]*)$/);
|
|
273
|
+
if (shorthandMatch) {
|
|
274
|
+
return { name: shorthandMatch[1], value: shorthandMatch[1] };
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
// Handle name: value
|
|
278
|
+
const colonIndex = findPropertyColon(propStr);
|
|
279
|
+
if (colonIndex === -1) {
|
|
280
|
+
return null;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
const name = propStr.slice(0, colonIndex).trim();
|
|
284
|
+
const value = propStr.slice(colonIndex + 1).trim();
|
|
285
|
+
|
|
286
|
+
// Clean up property name (remove quotes if present)
|
|
287
|
+
const cleanName = name.replace(/^['"]|['"]$/g, '');
|
|
288
|
+
|
|
289
|
+
return { name: cleanName, value };
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* Find the colon that separates property name from value.
|
|
294
|
+
* Must handle cases like { 'key': value } and { key: value }
|
|
295
|
+
*/
|
|
296
|
+
function findPropertyColon(propStr: string): number {
|
|
297
|
+
let depth = 0;
|
|
298
|
+
let inString = false;
|
|
299
|
+
let stringChar = '';
|
|
300
|
+
|
|
301
|
+
for (let i = 0; i < propStr.length; i++) {
|
|
302
|
+
const char = propStr[i];
|
|
303
|
+
const prevChar = i > 0 ? propStr[i - 1] : '';
|
|
304
|
+
|
|
305
|
+
if ((char === '"' || char === "'" || char === '`') && prevChar !== '\\') {
|
|
306
|
+
if (!inString) {
|
|
307
|
+
inString = true;
|
|
308
|
+
stringChar = char;
|
|
309
|
+
} else if (char === stringChar) {
|
|
310
|
+
inString = false;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
if (!inString) {
|
|
315
|
+
if (char === '{' || char === '(' || char === '[') {
|
|
316
|
+
depth++;
|
|
317
|
+
} else if (char === '}' || char === ')' || char === ']') {
|
|
318
|
+
depth--;
|
|
319
|
+
} else if (char === ':' && depth === 0) {
|
|
320
|
+
return i;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
return -1;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
/**
|
|
329
|
+
* Simplify a property value.
|
|
330
|
+
*/
|
|
331
|
+
function simplifyPropertyValue(value: string): string {
|
|
332
|
+
const trimmed = value.trim();
|
|
333
|
+
|
|
334
|
+
// If it's a simple identifier, return as-is
|
|
335
|
+
if (/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(trimmed)) {
|
|
336
|
+
return trimmed;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
// If it's a simple literal (number, boolean, null, undefined), return as-is
|
|
340
|
+
if (/^(true|false|null|undefined|\d+(\.\d+)?)$/.test(trimmed)) {
|
|
341
|
+
return trimmed;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
// If it's a short string literal, return as-is
|
|
345
|
+
if (
|
|
346
|
+
(trimmed.startsWith('"') || trimmed.startsWith("'")) &&
|
|
347
|
+
trimmed.length < 30
|
|
348
|
+
) {
|
|
349
|
+
return trimmed;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
// If it looks like a function/arrow function, simplify
|
|
353
|
+
// Use <truncated> instead of ... to prevent LLMs from interpreting as fill-in
|
|
354
|
+
if (
|
|
355
|
+
trimmed.startsWith('function') ||
|
|
356
|
+
trimmed.startsWith('async function') ||
|
|
357
|
+
trimmed.includes('=>') ||
|
|
358
|
+
(trimmed.startsWith('(') && trimmed.includes('=>'))
|
|
359
|
+
) {
|
|
360
|
+
return '() => <truncated>';
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
// If it's an object literal, recursively simplify
|
|
364
|
+
if (trimmed.startsWith('{')) {
|
|
365
|
+
const inner = simplifyObjectLiteral(trimmed);
|
|
366
|
+
if (inner.length > 50) {
|
|
367
|
+
return '{ <truncated> }';
|
|
368
|
+
}
|
|
369
|
+
return inner;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
// If it's an array, simplify
|
|
373
|
+
// Use <truncated> instead of ... to prevent LLMs from interpreting as fill-in
|
|
374
|
+
if (trimmed.startsWith('[')) {
|
|
375
|
+
return '[<truncated>]';
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
// For complex expressions, extract the first identifier or truncate
|
|
379
|
+
// Use <truncated> instead of ... to prevent LLMs from interpreting as fill-in
|
|
380
|
+
const identMatch = trimmed.match(/^([a-zA-Z_][a-zA-Z0-9_]*)/);
|
|
381
|
+
if (identMatch && trimmed.length > 30) {
|
|
382
|
+
return identMatch[1] + '<truncated>';
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
// Truncate long values
|
|
386
|
+
if (trimmed.length > 30) {
|
|
387
|
+
return trimmed.slice(0, 19) + '<truncated>';
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
return trimmed;
|
|
391
|
+
}
|