@codeyam/codeyam-cli 0.1.0-staging.323686 → 0.1.0-staging.415103
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/analyzer-template/.build-info.json +7 -7
- package/analyzer-template/log.txt +3 -3
- package/analyzer-template/package.json +18 -18
- package/analyzer-template/packages/ai/index.ts +7 -1
- package/analyzer-template/packages/ai/package.json +3 -3
- package/analyzer-template/packages/ai/src/lib/analyzeScope.ts +62 -18
- package/analyzer-template/packages/ai/src/lib/astScopes/astScopeAnalyzer.ts +101 -12
- package/analyzer-template/packages/ai/src/lib/astScopes/patterns/forInStatementHandler.ts +10 -17
- package/analyzer-template/packages/ai/src/lib/astScopes/processExpression.ts +409 -50
- package/analyzer-template/packages/ai/src/lib/astScopes/sharedPatterns.ts +28 -0
- package/analyzer-template/packages/ai/src/lib/astScopes/types.ts +21 -6
- package/analyzer-template/packages/ai/src/lib/completionCall.ts +114 -113
- package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +1250 -253
- package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.ts +5 -1
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/BatchSchemaProcessor.ts +16 -3
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/ScopeTreeManager.ts +6 -4
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.ts +31 -3
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.ts +37 -15
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/coerceObjectsToPrimitivesBySchema.ts +70 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/coercePrimitivesToArraysBySchema.ts +62 -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 +367 -96
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/stripNullableMarkers.ts +35 -0
- package/analyzer-template/packages/ai/src/lib/dataStructureChunking.ts +40 -13
- package/analyzer-template/packages/ai/src/lib/generateEntityDataStructure.ts +58 -3
- package/analyzer-template/packages/ai/src/lib/generateEntityScenarioData.ts +393 -8
- package/analyzer-template/packages/ai/src/lib/generateEntityScenarios.ts +9 -5
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlows.ts +145 -5
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionalEffects.ts +1 -1
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionals.ts +649 -142
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromJsxUsages.ts +1 -1
- package/analyzer-template/packages/ai/src/lib/isolateScopes.ts +51 -3
- package/analyzer-template/packages/ai/src/lib/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/generateEntityScenarioDataGenerator.ts +24 -4
- package/analyzer-template/packages/ai/src/lib/resolvePathToControllable.ts +25 -13
- package/analyzer-template/packages/ai/src/lib/worker/SerializableDataStructure.ts +4 -3
- package/analyzer-template/packages/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 +119 -26
- 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 +89 -9
- package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities.ts +27 -4
- package/analyzer-template/packages/analyze/src/lib/files/analyze/dependencyResolver.ts +0 -6
- package/analyzer-template/packages/analyze/src/lib/files/analyze/findOrCreateEntity.ts +12 -0
- package/analyzer-template/packages/analyze/src/lib/files/analyze/gatherEntityMap.ts +4 -2
- package/analyzer-template/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.ts +0 -3
- package/analyzer-template/packages/analyze/src/lib/files/analyzeRemixRoute.ts +4 -5
- package/analyzer-template/packages/analyze/src/lib/files/getImportedExports.ts +14 -12
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/TransformationTracer.ts +1352 -0
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.ts +61 -13
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.ts +87 -25
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +312 -19
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.ts +117 -9
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +591 -75
- 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/index.ts +1 -0
- 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 -0
- package/analyzer-template/packages/database/src/lib/kysely/tables/debugReportsTable.ts +1 -1
- package/analyzer-template/packages/database/src/lib/kysely/tables/editorScenariosTable.ts +62 -0
- package/analyzer-template/packages/database/src/lib/kysely/tables/labsRequestsTable.ts +52 -0
- package/analyzer-template/packages/database/src/lib/loadCommits.ts +31 -20
- package/analyzer-template/packages/database/src/lib/loadReadyToBeCapturedAnalyses.ts +0 -5
- 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 +151 -135
- package/analyzer-template/packages/database/src/lib/updateFreshAnalysisStatus.ts +58 -42
- package/analyzer-template/packages/database/src/lib/updateFreshAnalysisStatusWithScenarios.ts +81 -65
- package/analyzer-template/packages/database/src/lib/userScenarioToDb.ts +1 -1
- package/analyzer-template/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.ts +29 -1
- package/analyzer-template/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.ts +33 -5
- package/analyzer-template/packages/github/dist/database/index.d.ts +1 -0
- package/analyzer-template/packages/github/dist/database/index.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/index.js +1 -0
- package/analyzer-template/packages/github/dist/database/index.js.map +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 +4 -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 +8 -0
- 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/debugReportsTable.d.ts +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.d.ts +20 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.d.ts.map +1 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.js +45 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -0
- 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/kysely/tables/scenariosTable.d.ts +5 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.js +23 -13
- package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.js +1 -4
- package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.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.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js +100 -89
- package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatus.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatus.js +41 -30
- package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatus.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatusWithScenarios.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatusWithScenarios.js +68 -57
- package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatusWithScenarios.js.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js +29 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +33 -5
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/types/ProjectMetadata.d.ts +8 -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/Scenario.d.ts +10 -0
- package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/types/ScenariosDataStructure.d.ts +5 -5
- package/analyzer-template/packages/github/dist/types/src/types/ScenariosDataStructure.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/types/ScopeAnalysis.d.ts +6 -1
- package/analyzer-template/packages/github/dist/types/src/types/ScopeAnalysis.d.ts.map +1 -1
- package/analyzer-template/packages/github/package.json +1 -1
- package/analyzer-template/packages/types/src/types/ProjectMetadata.ts +8 -0
- package/analyzer-template/packages/types/src/types/Scenario.ts +10 -0
- package/analyzer-template/packages/types/src/types/ScenariosDataStructure.ts +6 -5
- package/analyzer-template/packages/types/src/types/ScopeAnalysis.ts +6 -1
- package/analyzer-template/packages/utils/dist/types/src/types/ProjectMetadata.d.ts +8 -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/Scenario.d.ts +10 -0
- package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/types/src/types/ScenariosDataStructure.d.ts +5 -5
- package/analyzer-template/packages/utils/dist/types/src/types/ScenariosDataStructure.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/types/src/types/ScopeAnalysis.d.ts +6 -1
- package/analyzer-template/packages/utils/dist/types/src/types/ScopeAnalysis.d.ts.map +1 -1
- package/analyzer-template/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 +98 -3
- package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.js.map +1 -1
- package/analyzer-template/packages/utils/src/lib/fs/rsyncCopy.ts +121 -3
- package/analyzer-template/playwright/captureFromUrl.ts +89 -82
- package/analyzer-template/project/constructMockCode.ts +260 -60
- package/analyzer-template/project/orchestrateCapture.ts +4 -1
- package/analyzer-template/project/reconcileMockDataKeys.ts +19 -14
- package/analyzer-template/project/start.ts +3 -0
- package/analyzer-template/project/startScenarioCapture.ts +9 -0
- package/analyzer-template/project/writeClientLogRoute.ts +125 -0
- package/analyzer-template/project/writeMockDataTsx.ts +198 -8
- package/analyzer-template/project/writeScenarioComponents.ts +170 -29
- package/analyzer-template/project/writeSimpleRoot.ts +21 -11
- package/analyzer-template/tsconfig.json +13 -1
- 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/constructMockCode.js +220 -45
- package/background/src/lib/virtualized/project/constructMockCode.js.map +1 -1
- package/background/src/lib/virtualized/project/orchestrateCapture.js +4 -1
- package/background/src/lib/virtualized/project/orchestrateCapture.js.map +1 -1
- package/background/src/lib/virtualized/project/reconcileMockDataKeys.js +17 -11
- package/background/src/lib/virtualized/project/reconcileMockDataKeys.js.map +1 -1
- package/background/src/lib/virtualized/project/start.js +2 -0
- package/background/src/lib/virtualized/project/start.js.map +1 -1
- package/background/src/lib/virtualized/project/startScenarioCapture.js +5 -0
- package/background/src/lib/virtualized/project/startScenarioCapture.js.map +1 -1
- package/background/src/lib/virtualized/project/writeClientLogRoute.js +110 -0
- package/background/src/lib/virtualized/project/writeClientLogRoute.js.map +1 -0
- package/background/src/lib/virtualized/project/writeMockDataTsx.js +174 -4
- package/background/src/lib/virtualized/project/writeMockDataTsx.js.map +1 -1
- package/background/src/lib/virtualized/project/writeScenarioComponents.js +143 -27
- 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 +386 -9
- package/codeyam-cli/scripts/apply-setup.js.map +1 -1
- package/codeyam-cli/src/cli.js +33 -24
- 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 +21 -9
- 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 +87 -21
- package/codeyam-cli/src/commands/default.js.map +1 -1
- package/codeyam-cli/src/commands/editor.js +696 -0
- package/codeyam-cli/src/commands/editor.js.map +1 -0
- package/codeyam-cli/src/commands/init.js +75 -259
- package/codeyam-cli/src/commands/init.js.map +1 -1
- package/codeyam-cli/src/commands/memory.js +97 -92
- package/codeyam-cli/src/commands/memory.js.map +1 -1
- 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 +185 -0
- package/codeyam-cli/src/utils/__tests__/npmVersionCheck.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/pathIgnoring.test.js +9 -0
- package/codeyam-cli/src/utils/__tests__/pathIgnoring.test.js.map +1 -1
- package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +154 -86
- package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.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 +109 -22
- package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
- package/codeyam-cli/src/utils/devModeEvents.js +40 -0
- package/codeyam-cli/src/utils/devModeEvents.js.map +1 -0
- package/codeyam-cli/src/utils/fileMetadata.js +5 -0
- package/codeyam-cli/src/utils/fileMetadata.js.map +1 -1
- package/codeyam-cli/src/utils/fileWatcher.js +25 -9
- package/codeyam-cli/src/utils/fileWatcher.js.map +1 -1
- package/codeyam-cli/src/utils/generateReport.js +2 -2
- package/codeyam-cli/src/utils/git.js +52 -0
- package/codeyam-cli/src/utils/git.js.map +1 -1
- package/codeyam-cli/src/utils/install-skills.js +101 -45
- package/codeyam-cli/src/utils/install-skills.js.map +1 -1
- package/codeyam-cli/src/utils/interactiveSyncWatcher.js +126 -0
- package/codeyam-cli/src/utils/interactiveSyncWatcher.js.map +1 -0
- 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/pathIgnoring.js +19 -7
- package/codeyam-cli/src/utils/pathIgnoring.js.map +1 -1
- 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/__tests__/heartbeat.test.js +11 -11
- package/codeyam-cli/src/utils/queue/__tests__/heartbeat.test.js.map +1 -1
- package/codeyam-cli/src/utils/queue/__tests__/manager.test.js +22 -0
- package/codeyam-cli/src/utils/queue/__tests__/manager.test.js.map +1 -1
- package/codeyam-cli/src/utils/queue/heartbeat.js +13 -5
- package/codeyam-cli/src/utils/queue/heartbeat.js.map +1 -1
- package/codeyam-cli/src/utils/queue/job.js +74 -1
- package/codeyam-cli/src/utils/queue/job.js.map +1 -1
- package/codeyam-cli/src/utils/queue/manager.js +7 -6
- 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 +229 -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 +113 -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__/parser.test.js +83 -0
- package/codeyam-cli/src/utils/rules/__tests__/parser.test.js.map +1 -0
- package/codeyam-cli/src/utils/rules/__tests__/pathMatcher.test.js +118 -0
- package/codeyam-cli/src/utils/rules/__tests__/pathMatcher.test.js.map +1 -0
- package/codeyam-cli/src/utils/rules/__tests__/rulePlacement.test.js +72 -0
- package/codeyam-cli/src/utils/rules/__tests__/rulePlacement.test.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/__tests__/sourceFiles.test.js +76 -0
- package/codeyam-cli/src/utils/rules/__tests__/sourceFiles.test.js.map +1 -0
- package/codeyam-cli/src/utils/rules/index.js +2 -0
- package/codeyam-cli/src/utils/rules/index.js.map +1 -1
- package/codeyam-cli/src/utils/rules/parser.js +16 -29
- package/codeyam-cli/src/utils/rules/parser.js.map +1 -1
- package/codeyam-cli/src/utils/rules/pathMatcher.js +34 -3
- package/codeyam-cli/src/utils/rules/pathMatcher.js.map +1 -1
- package/codeyam-cli/src/utils/rules/rulePlacement.js +65 -0
- package/codeyam-cli/src/utils/rules/rulePlacement.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/sourceFiles.js +43 -0
- package/codeyam-cli/src/utils/rules/sourceFiles.js.map +1 -0
- package/codeyam-cli/src/utils/rules/staleness.js +16 -11
- package/codeyam-cli/src/utils/rules/staleness.js.map +1 -1
- package/codeyam-cli/src/utils/serverState.js +64 -12
- package/codeyam-cli/src/utils/serverState.js.map +1 -1
- package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +61 -43
- package/codeyam-cli/src/utils/setupClaudeCodeSettings.js.map +1 -1
- package/codeyam-cli/src/utils/simulationGateMiddleware.js +159 -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/testRunner.js +158 -0
- package/codeyam-cli/src/utils/testRunner.js.map +1 -0
- package/codeyam-cli/src/utils/transcriptPruning.js +67 -0
- package/codeyam-cli/src/utils/transcriptPruning.js.map +1 -0
- package/codeyam-cli/src/utils/versionInfo.js +46 -0
- package/codeyam-cli/src/utils/versionInfo.js.map +1 -1
- package/codeyam-cli/src/utils/webappDetection.js +14 -2
- package/codeyam-cli/src/utils/webappDetection.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 +15 -3
- 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 +166 -16
- package/codeyam-cli/src/webserver/backgroundServer.js.map +1 -1
- package/codeyam-cli/src/webserver/bootstrap.js +11 -0
- package/codeyam-cli/src/webserver/bootstrap.js.map +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/CopyButton-DmJveP3T.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{EntityItem-DsN1wKrm.js → EntityItem-C76mRRiF.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeBadge-DLqD3qNt.js → EntityTypeBadge-g3saevPb.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeIcon-Ba2JVPzP.js → EntityTypeIcon-CobE682z.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-Bu6c6aDe.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{InteractivePreview-aht4aafF.js → InteractivePreview-DYFW3lDD.js} +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/{LibraryFunctionPreview-CVtiBnY5.js → LibraryFunctionPreview-DLeucoVX.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{LoadingDots-B0GLXMsr.js → LoadingDots-BU_OAEMP.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-xgeCVgSM.js → LogViewer-ceAyBX-H.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{ReportIssueModal-OApQuNyq.js → ReportIssueModal-djPLI-WV.js} +3 -8
- package/codeyam-cli/src/webserver/build/client/assets/{SafeScreenshot-DuDvi0jm.js → SafeScreenshot-BED4B6sP.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-DzccYyI8.js → ScenarioViewer-B76aig_2.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/Spinner-Bb5uFQ5V.js +34 -0
- package/codeyam-cli/src/webserver/build/client/assets/Terminal-BaIiqg_w.js +41 -0
- package/codeyam-cli/src/webserver/build/client/assets/{TruncatedFilePath-DyFZkK0l.js → TruncatedFilePath-C8OKAR5x.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{_index-BwqWJOgH.js → _index-C96V0n15.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{activity.(_tab)-BwavGCpm.js → activity.(_tab)-BpKzcsJz.js} +6 -11
- package/codeyam-cli/src/webserver/build/client/assets/addon-fit-CUXOrorO.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/addon-web-links-Duc5hnl7.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/agent-transcripts-D9hemwl6.js +22 -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.dev-mode-events-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-capture-scenario-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-client-errors-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-commit-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-dev-server-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-entity-status-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-entry-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-image._-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-screenshot-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-update-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-refresh-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-register-scenario-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-data-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-image._-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-switch-scenario-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-test-results-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.rule-path-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-D_nMCFmP.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/{chevron-down-Cx24_aWc.js → chevron-down-BH2h1Ea2.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{chunk-EPOLDU6W-CXRTFQ3F.js → chunk-JZWAC4HX-C4pqxYJB.js} +12 -12
- package/codeyam-cli/src/webserver/build/client/assets/{circle-check-BOARzkeR.js → circle-check-DyIKORY6.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/copy-NDbZjXao.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/{createLucideIcon-BdhJEx6B.js → createLucideIcon-CMT1jU2q.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/dev.empty-BiM6z3Do.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/editor-BaC8lHDG.js +7 -0
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-BJUiQqZF.js → entity._sha._-CrjR3zZW.js} +11 -11
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.dev-DloHYjtt.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-C28BiQzt.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-p9hhkjJM.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.edit._scenarioId-CTBG2mmz.js → entity._sha_.edit._scenarioId-BMvVHNXU.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/{entry.client-CS2cb_eZ.js → entry.client-DTvKq3TY.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{fileTableUtils-DMJ7zii9.js → fileTableUtils-cPo8LiG3.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{files-CJ6lTdTA.js → files-DO4CZ16O.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{git-CPTZZ-JZ.js → git-CFCTYk9I.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/globals-BH6uYxPM.css +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{index-B1h680n5.js → index-10oVnAAH.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{index-lzqtyFU8.js → index-BcvgDzbZ.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/labs-Zk7ryIM1.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-B7B9V-bu.js → loader-circle-BAXYRVEO.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/manifest-fb3128c3.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/memory-FweZHj5U.js +93 -0
- package/codeyam-cli/src/webserver/build/client/assets/pause-DTAcYxBt.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/root-Dzn8nIkU.js +67 -0
- package/codeyam-cli/src/webserver/build/client/assets/{search-CxXUmBSd.js → search-fKo7v0Zo.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/settings-DfuTtcJP.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{simulations-DwFIBT09.js → simulations-B3aOzpCZ.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/terminal-BG4heKCG.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/{triangle-alert-B6LgvRJg.js → triangle-alert-DtSmdtM4.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useCustomSizes-C1v1PQzo.js → useCustomSizes-ByhSyh0W.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/useLastLogLine-C14nCb1q.js +2 -0
- package/codeyam-cli/src/webserver/build/client/assets/{useReportContext-DYxHZQuP.js → useReportContext-O-jkvSPx.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useToast-mBRpZPiu.js → useToast-9FIWuYfK.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/xterm-DMSzMhqy.js +9 -0
- package/codeyam-cli/src/webserver/build/server/assets/index-DeSuKbSF.js +1 -0
- package/codeyam-cli/src/webserver/build/server/assets/server-build-BbQ8YBP-.js +362 -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/src/webserver/devServer.js +39 -5
- package/codeyam-cli/src/webserver/devServer.js.map +1 -1
- package/codeyam-cli/src/webserver/editorProxy.js +272 -0
- package/codeyam-cli/src/webserver/editorProxy.js.map +1 -0
- package/codeyam-cli/src/webserver/scripts/journalCapture.ts +121 -0
- package/codeyam-cli/src/webserver/server.js +177 -1
- package/codeyam-cli/src/webserver/server.js.map +1 -1
- package/codeyam-cli/src/webserver/terminalServer.js +606 -0
- package/codeyam-cli/src/webserver/terminalServer.js.map +1 -0
- package/codeyam-cli/templates/{codeyam:debug.md → codeyam-debug.md} +1 -1
- package/codeyam-cli/templates/codeyam-dev-mode.md +237 -0
- package/codeyam-cli/templates/codeyam-diagnose.md +481 -0
- package/codeyam-cli/templates/codeyam-editor-claude.md +68 -0
- package/codeyam-cli/templates/codeyam-editor.md +67 -0
- package/codeyam-cli/templates/codeyam-memory-hook.sh +19 -20
- package/codeyam-cli/templates/codeyam-memory.md +396 -0
- package/codeyam-cli/templates/codeyam-new-rule.md +11 -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/editor-step-hook.py +143 -0
- package/codeyam-cli/templates/hooks/staleness-check.sh +43 -0
- package/codeyam-cli/templates/isolation-route/next-app.tsx.template +80 -0
- package/codeyam-cli/templates/isolation-route/next-pages.tsx.template +79 -0
- package/codeyam-cli/templates/isolation-route/vite-react.tsx.template +78 -0
- package/codeyam-cli/templates/msw/browser-setup.ts.template +47 -0
- package/codeyam-cli/templates/msw/handler-router.ts.template +47 -0
- package/codeyam-cli/templates/msw/server-setup.ts.template +52 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/PRISMA_SETUP.md +84 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/app/api/todos/route.ts +17 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/app/globals.css +26 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/app/layout.tsx +34 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/app/lib/prisma.ts +19 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/app/page.tsx +10 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/eslint.config.mjs +11 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/next.config.ts +14 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/package.json +35 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/postcss.config.mjs +7 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma/schema.prisma +27 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma/seed.ts +37 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma.config.ts +12 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/tsconfig.json +34 -0
- package/codeyam-cli/templates/prompts/conversation-guidance.txt +44 -0
- package/codeyam-cli/templates/prompts/conversation-prompt.txt +28 -0
- package/codeyam-cli/templates/prompts/interruption-prompt.txt +31 -0
- package/codeyam-cli/templates/prompts/stale-rules-prompt.txt +24 -0
- package/codeyam-cli/templates/rule-notification-hook.py +83 -0
- package/codeyam-cli/templates/rule-reflection-hook.py +647 -0
- package/codeyam-cli/templates/rules-instructions.md +78 -0
- package/package.json +16 -14
- package/packages/ai/index.js +3 -2
- package/packages/ai/index.js.map +1 -1
- package/packages/ai/src/lib/analyzeScope.js +50 -13
- package/packages/ai/src/lib/analyzeScope.js.map +1 -1
- package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js +76 -12
- package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js.map +1 -1
- package/packages/ai/src/lib/astScopes/patterns/forInStatementHandler.js +10 -14
- package/packages/ai/src/lib/astScopes/patterns/forInStatementHandler.js.map +1 -1
- package/packages/ai/src/lib/astScopes/processExpression.js +317 -44
- 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 +10 -7
- package/packages/ai/src/lib/completionCall.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +996 -173
- package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.js +5 -1
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/BatchSchemaProcessor.js +13 -3
- package/packages/ai/src/lib/dataStructure/helpers/BatchSchemaProcessor.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/ScopeTreeManager.js +6 -4
- package/packages/ai/src/lib/dataStructure/helpers/ScopeTreeManager.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js +33 -3
- package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js +36 -11
- package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/coerceObjectsToPrimitivesBySchema.js +63 -0
- package/packages/ai/src/lib/dataStructure/helpers/coerceObjectsToPrimitivesBySchema.js.map +1 -0
- package/packages/ai/src/lib/dataStructure/helpers/coercePrimitivesToArraysBySchema.js +54 -0
- package/packages/ai/src/lib/dataStructure/helpers/coercePrimitivesToArraysBySchema.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 +309 -84
- package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/stripNullableMarkers.js +34 -0
- package/packages/ai/src/lib/dataStructure/helpers/stripNullableMarkers.js.map +1 -0
- package/packages/ai/src/lib/dataStructureChunking.js +30 -11
- package/packages/ai/src/lib/dataStructureChunking.js.map +1 -1
- package/packages/ai/src/lib/generateEntityDataStructure.js +46 -2
- package/packages/ai/src/lib/generateEntityDataStructure.js.map +1 -1
- package/packages/ai/src/lib/generateEntityScenarioData.js +284 -6
- package/packages/ai/src/lib/generateEntityScenarioData.js.map +1 -1
- package/packages/ai/src/lib/generateEntityScenarios.js +7 -1
- package/packages/ai/src/lib/generateEntityScenarios.js.map +1 -1
- package/packages/ai/src/lib/generateExecutionFlows.js +107 -4
- package/packages/ai/src/lib/generateExecutionFlows.js.map +1 -1
- package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js +447 -80
- package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js.map +1 -1
- package/packages/ai/src/lib/isolateScopes.js +39 -3
- package/packages/ai/src/lib/isolateScopes.js.map +1 -1
- package/packages/ai/src/lib/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/generateEntityScenarioDataGenerator.js +17 -2
- package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js.map +1 -1
- package/packages/ai/src/lib/resolvePathToControllable.js +24 -14
- package/packages/ai/src/lib/resolvePathToControllable.js.map +1 -1
- package/packages/ai/src/lib/worker/SerializableDataStructure.js.map +1 -1
- package/packages/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 +99 -26
- package/packages/analyze/src/lib/ProjectAnalyzer.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 +65 -7
- package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/analyzeEntities.js +24 -4
- package/packages/analyze/src/lib/files/analyze/analyzeEntities.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/dependencyResolver.js +0 -5
- package/packages/analyze/src/lib/files/analyze/dependencyResolver.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js +9 -0
- package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/gatherEntityMap.js +2 -1
- package/packages/analyze/src/lib/files/analyze/gatherEntityMap.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.js +0 -3
- package/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.js.map +1 -1
- package/packages/analyze/src/lib/files/analyzeRemixRoute.js +3 -2
- package/packages/analyze/src/lib/files/analyzeRemixRoute.js.map +1 -1
- package/packages/analyze/src/lib/files/getImportedExports.js +11 -7
- package/packages/analyze/src/lib/files/getImportedExports.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/TransformationTracer.js +907 -0
- package/packages/analyze/src/lib/files/scenarios/TransformationTracer.js.map +1 -0
- package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js +56 -10
- package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js +75 -21
- package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +215 -17
- package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js +56 -8
- package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +494 -56
- package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js.map +1 -1
- package/packages/analyze/src/lib/files/setImportedExports.js +2 -1
- package/packages/analyze/src/lib/files/setImportedExports.js.map +1 -1
- package/packages/analyze/src/lib/index.js +1 -0
- package/packages/analyze/src/lib/index.js.map +1 -1
- package/packages/analyze/src/lib/utils/getFileByPath.js +12 -0
- package/packages/analyze/src/lib/utils/getFileByPath.js.map +1 -0
- package/packages/database/index.js +1 -0
- package/packages/database/index.js.map +1 -1
- 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 +8 -0
- package/packages/database/src/lib/kysely/db.js.map +1 -1
- package/packages/database/src/lib/kysely/tables/editorScenariosTable.js +45 -0
- package/packages/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -0
- 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/loadCommits.js +23 -13
- package/packages/database/src/lib/loadCommits.js.map +1 -1
- package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.js +1 -4
- package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.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 +100 -89
- package/packages/database/src/lib/updateCommitMetadata.js.map +1 -1
- package/packages/database/src/lib/updateFreshAnalysisStatus.js +41 -30
- package/packages/database/src/lib/updateFreshAnalysisStatus.js.map +1 -1
- package/packages/database/src/lib/updateFreshAnalysisStatusWithScenarios.js +68 -57
- package/packages/database/src/lib/updateFreshAnalysisStatusWithScenarios.js.map +1 -1
- package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js +29 -1
- package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js.map +1 -1
- package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +33 -5
- package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
- package/packages/utils/src/lib/fs/rsyncCopy.js +98 -3
- package/packages/utils/src/lib/fs/rsyncCopy.js.map +1 -1
- package/scripts/finalize-analyzer.cjs +8 -76
- package/codeyam-cli/src/commands/detect-universal-mocks.js +0 -118
- package/codeyam-cli/src/commands/detect-universal-mocks.js.map +0 -1
- package/codeyam-cli/src/commands/list.js +0 -31
- package/codeyam-cli/src/commands/list.js.map +0 -1
- package/codeyam-cli/src/commands/webapp-info.js +0 -146
- package/codeyam-cli/src/commands/webapp-info.js.map +0 -1
- package/codeyam-cli/src/utils/universal-mocks.js +0 -152
- package/codeyam-cli/src/utils/universal-mocks.js.map +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-C8lyxW9k.js +0 -34
- package/codeyam-cli/src/webserver/build/client/assets/copy-Bb-80kDT.js +0 -6
- package/codeyam-cli/src/webserver/build/client/assets/dev.empty-BBnGWYga.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-DavjRmOY.js +0 -6
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-D1T4TGjf.js +0 -6
- package/codeyam-cli/src/webserver/build/client/assets/file-code-Dhef1kWN.js +0 -6
- package/codeyam-cli/src/webserver/build/client/assets/globals-D3yhhV8x.css +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/manifest-7522edd4.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/memory-yxFcrxBX.js +0 -92
- package/codeyam-cli/src/webserver/build/client/assets/root-eVAaavTS.js +0 -62
- package/codeyam-cli/src/webserver/build/client/assets/settings-CS5f3WzT.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/useLastLogLine-aSv48UbS.js +0 -2
- package/codeyam-cli/src/webserver/build/server/assets/index-DVzYx8PN.js +0 -1
- package/codeyam-cli/src/webserver/build/server/assets/server-build-4Cr0uToj.js +0 -257
- package/codeyam-cli/templates/codeyam-stop-hook.sh +0 -284
- package/codeyam-cli/templates/codeyam:diagnose.md +0 -803
- package/codeyam-cli/templates/codeyam:memory.md +0 -462
- package/codeyam-cli/templates/codeyam:new-rule.md +0 -13
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recursively strips `_nullable` keys from LLM-generated mock data.
|
|
3
|
+
*
|
|
4
|
+
* The `_nullable` marker is an internal CodeYam concept used in type definitions
|
|
5
|
+
* to indicate that a field can be null/undefined. The LLM sometimes includes
|
|
6
|
+
* these markers in its generated scenario data, which causes runtime errors
|
|
7
|
+
* when code iterates over object keys (e.g., `Object.keys(importedBy)` picks
|
|
8
|
+
* up `_nullable` as a key alongside real data).
|
|
9
|
+
*
|
|
10
|
+
* This function mutates the input object in-place, consistent with other
|
|
11
|
+
* post-processing helpers like `convertNullToUndefinedBySchema`.
|
|
12
|
+
*/
|
|
13
|
+
export default function stripNullableMarkers(data) {
|
|
14
|
+
if (data == null || typeof data !== 'object')
|
|
15
|
+
return;
|
|
16
|
+
// Delete _nullable from this level
|
|
17
|
+
if ('_nullable' in data) {
|
|
18
|
+
delete data._nullable;
|
|
19
|
+
}
|
|
20
|
+
// Recurse into nested objects and arrays
|
|
21
|
+
for (const value of Object.values(data)) {
|
|
22
|
+
if (Array.isArray(value)) {
|
|
23
|
+
for (const item of value) {
|
|
24
|
+
if (item !== null && typeof item === 'object' && !Array.isArray(item)) {
|
|
25
|
+
stripNullableMarkers(item);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
else if (value !== null && typeof value === 'object') {
|
|
30
|
+
stripNullableMarkers(value);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=stripNullableMarkers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stripNullableMarkers.js","sourceRoot":"","sources":["../../../../../../../../packages/ai/src/lib/dataStructure/helpers/stripNullableMarkers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAC1C,IAA6B;IAE7B,IAAI,IAAI,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO;IAErD,mCAAmC;IACnC,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,yCAAyC;IACzC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;oBACtE,oBAAoB,CAAC,IAA+B,CAAC,CAAC;gBACxD,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvD,oBAAoB,CAAC,KAAgC,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -1,32 +1,51 @@
|
|
|
1
|
-
const
|
|
1
|
+
const DEFAULT_MAX_CHUNK_SIZE = 10000; // ~10K chars per chunk
|
|
2
|
+
const DEFAULT_MAX_KEYS_PER_CHUNK = 20;
|
|
2
3
|
/**
|
|
3
4
|
* Chunk a large data structure into smaller pieces for focused LLM processing.
|
|
4
5
|
*
|
|
5
6
|
* Large schemas overwhelm LLMs, causing them to make mistakes on some keys.
|
|
6
7
|
* By processing smaller chunks, each key gets more focused attention.
|
|
7
8
|
*
|
|
9
|
+
* Uses cumulative JSON size to decide chunk boundaries rather than a fixed
|
|
10
|
+
* key count, so a single oversized key gets its own chunk while many small
|
|
11
|
+
* keys are grouped together efficiently.
|
|
12
|
+
*
|
|
8
13
|
* @param dataForMocks - The full data structure schema
|
|
9
|
-
* @param options - Chunking options (
|
|
14
|
+
* @param options - Chunking options (maxChunkSize defaults to 10_000)
|
|
10
15
|
* @returns Array of smaller data structure chunks
|
|
11
16
|
*/
|
|
12
17
|
export function chunkDataStructure(dataForMocks, options = {}) {
|
|
13
18
|
if (!dataForMocks || typeof dataForMocks !== 'object') {
|
|
14
19
|
return [dataForMocks];
|
|
15
20
|
}
|
|
16
|
-
const { maxKeysPerChunk = DEFAULT_MAX_KEYS_PER_CHUNK } = options;
|
|
21
|
+
const { maxChunkSize = DEFAULT_MAX_CHUNK_SIZE, maxKeysPerChunk = DEFAULT_MAX_KEYS_PER_CHUNK, } = options;
|
|
17
22
|
const keys = Object.keys(dataForMocks);
|
|
18
|
-
//
|
|
19
|
-
|
|
23
|
+
// Calculate total size to see if chunking is needed
|
|
24
|
+
const totalSize = JSON.stringify(dataForMocks).length;
|
|
25
|
+
if (totalSize <= maxChunkSize && keys.length <= maxKeysPerChunk) {
|
|
20
26
|
return [dataForMocks];
|
|
21
27
|
}
|
|
28
|
+
// Greedily pack keys into chunks by cumulative size and key count
|
|
22
29
|
const chunks = [];
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
30
|
+
let currentChunk = {};
|
|
31
|
+
let currentSize = 0;
|
|
32
|
+
for (const key of keys) {
|
|
33
|
+
const keySize = JSON.stringify(dataForMocks[key]).length;
|
|
34
|
+
const currentKeyCount = Object.keys(currentChunk).length;
|
|
35
|
+
// If adding this key would exceed size or key count limit AND chunk isn't empty, start a new chunk
|
|
36
|
+
if (currentSize > 0 &&
|
|
37
|
+
(currentSize + keySize > maxChunkSize ||
|
|
38
|
+
currentKeyCount >= maxKeysPerChunk)) {
|
|
39
|
+
chunks.push(currentChunk);
|
|
40
|
+
currentChunk = {};
|
|
41
|
+
currentSize = 0;
|
|
28
42
|
}
|
|
29
|
-
|
|
43
|
+
currentChunk[key] = dataForMocks[key];
|
|
44
|
+
currentSize += keySize;
|
|
45
|
+
}
|
|
46
|
+
// Push the last chunk
|
|
47
|
+
if (Object.keys(currentChunk).length > 0) {
|
|
48
|
+
chunks.push(currentChunk);
|
|
30
49
|
}
|
|
31
50
|
return chunks;
|
|
32
51
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataStructureChunking.js","sourceRoot":"","sources":["../../../../../../packages/ai/src/lib/dataStructureChunking.ts"],"names":[],"mappings":"AAKA,MAAM,
|
|
1
|
+
{"version":3,"file":"dataStructureChunking.js","sourceRoot":"","sources":["../../../../../../packages/ai/src/lib/dataStructureChunking.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import isolateScopes from "./isolateScopes.js";
|
|
2
2
|
import analyzeScope from "./analyzeScope.js";
|
|
3
|
-
import {
|
|
3
|
+
import { transformationTracer } from "../../../../packages/analyze/index.js";
|
|
4
|
+
import { resetScopeDataStructureMetrics, } from "./dataStructure/ScopeDataStructure.js";
|
|
4
5
|
export default async function generateEntityDataStructure({ entity, fileAnalyzer, model, }) {
|
|
5
6
|
// Reset metrics counters to prevent false "infinite loop" detection when
|
|
6
7
|
// processing multiple entities in the same run
|
|
@@ -61,8 +62,51 @@ export default async function generateEntityDataStructure({ entity, fileAnalyzer
|
|
|
61
62
|
return undefined;
|
|
62
63
|
}
|
|
63
64
|
// Inspect the runtime type of dataStructure to see if it must be serialized
|
|
65
|
+
// Note: When worker threads are used, dataStructure is already serialized (no toSerializable).
|
|
66
|
+
// Workers are disabled when CODEYAM_TRACE_TRANSFORMS=1 to enable full tracing.
|
|
64
67
|
if ('toSerializable' in entityScope.dataStructure) {
|
|
65
|
-
|
|
68
|
+
const scopeDataStructure = entityScope.dataStructure;
|
|
69
|
+
// Trace the internal state BEFORE serialization - captures what methods return
|
|
70
|
+
if (transformationTracer.isEnabled()) {
|
|
71
|
+
transformationTracer.startEntity({
|
|
72
|
+
name: entity.name,
|
|
73
|
+
entityType: entity.entityType ?? 'unknown',
|
|
74
|
+
filePath: entity.filePath,
|
|
75
|
+
});
|
|
76
|
+
// Capture internal state - this is what getReturnValue/getFunctionSignature return
|
|
77
|
+
transformationTracer.snapshot(entity.name, 'scopeDataStructure', {
|
|
78
|
+
signatureSchema: scopeDataStructure.getFunctionSignature({
|
|
79
|
+
fillInUnknowns: true,
|
|
80
|
+
}),
|
|
81
|
+
returnValueSchema: scopeDataStructure.getReturnValue({
|
|
82
|
+
fillInUnknowns: true,
|
|
83
|
+
}),
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
const serialized = scopeDataStructure.toSerializable();
|
|
87
|
+
// Trace AFTER serialization - shows what gets output
|
|
88
|
+
if (transformationTracer.isEnabled()) {
|
|
89
|
+
// Build schema from external function calls for comparison
|
|
90
|
+
const externalSchemas = {};
|
|
91
|
+
for (const efc of serialized.externalFunctionCalls ?? []) {
|
|
92
|
+
for (const [path, type] of Object.entries(efc.schema ?? {})) {
|
|
93
|
+
externalSchemas[path] = type;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
transformationTracer.snapshot(entity.name, 'serialized', {
|
|
97
|
+
signatureSchema: serialized.functionResults?.[entity.name]?.signatureWithUnknowns,
|
|
98
|
+
returnValueSchema: serialized.functionResults?.[entity.name]?.returnValueWithUnknowns,
|
|
99
|
+
// Include external function schemas to detect serialization gaps
|
|
100
|
+
dependencySchemas: {
|
|
101
|
+
externalFunctions: {
|
|
102
|
+
combined: {
|
|
103
|
+
returnValueSchema: externalSchemas,
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
},
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
return serialized;
|
|
66
110
|
}
|
|
67
111
|
return entityScope.dataStructure;
|
|
68
112
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateEntityDataStructure.js","sourceRoot":"","sources":["../../../../../../packages/ai/src/lib/generateEntityDataStructure.ts"],"names":[],"mappings":"AACA,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,YAAY,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"generateEntityDataStructure.js","sourceRoot":"","sources":["../../../../../../packages/ai/src/lib/generateEntityDataStructure.ts"],"names":[],"mappings":"AACA,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAgB,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAEtE,OAAO,EACL,8BAA8B,GAE/B,MAAM,oCAAoC,CAAC;AAU5C,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,2BAA2B,CAAC,EACxD,MAAM,EACN,YAAY,EACZ,KAAK,GAC2B;IAChC,yEAAyE;IACzE,+CAA+C;IAC/C,8BAA8B,EAAE,CAAC;IAEjC,wDAAwD;IACxD,+BAA+B;IAC/B,6BAA6B;IAC7B,iCAAiC;IACjC,MAAM;IAEN,4EAA4E;IAC5E,6EAA6E;IAC7E,MAAM,QAAQ,GAAG,YAAY,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;IACvD,MAAM,SAAS,GAAG,aAAa,CAAC,QAAQ,EAAE;QACxC,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;QAC1B,QAAQ,EAAE,EAAE,EAAE,sEAAsE;KACrF,CAAC,CAAC;IAEH,IAAI,WAAW,GACb,SAAS,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI;QAC5B,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9C,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC;YACvD,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAC9C,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAClD,CAAC;IACR,CAAC;IAED,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,WAAW,GAAG,SAAS,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,MAAM,gBAAgB,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACvD,MAAM,WAAW,GAAG,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YAC9D,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,IAAI,CACrD,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,GAAG,CAAC,CAAC,KAAK,IAAI,WAAW,GAAG,CAAC,CAAC,GAAG,CACpD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,eAAe;QACf,gDAAgD;QAChD,MAAM;QACN,iCAAiC;QACjC,+BAA+B;QAC/B,iFAAiF;QACjF,MAAM;QACN,KAAK;QACL,mDAAmD;QACnD,kDAAkD;QAClD,4BAA4B;QAC5B,6CAA6C;QAC7C,OAAO;IACT,CAAC;IAED,MAAM,YAAY,CAAC;QACjB,MAAM;QACN,YAAY;QACZ,KAAK,EAAE,WAAW;QAClB,KAAK;KACN,CAAC,CAAC;IAEH,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;QAC/B,OAAO,CAAC,IAAI,CACV,mDAAmD,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,QAAQ,EAAE,CACvF,CAAC;QACF,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,4EAA4E;IAC5E,+FAA+F;IAC/F,+EAA+E;IAC/E,IAAI,gBAAgB,IAAI,WAAW,CAAC,aAAa,EAAE,CAAC;QAClD,MAAM,kBAAkB,GACtB,WAAW,CAAC,aAA8C,CAAC;QAE7D,+EAA+E;QAC/E,IAAI,oBAAoB,CAAC,SAAS,EAAE,EAAE,CAAC;YACrC,oBAAoB,CAAC,WAAW,CAAC;gBAC/B,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,SAAS;gBAC1C,QAAQ,EAAE,MAAM,CAAC,QAAQ;aAC1B,CAAC,CAAC;YAEH,mFAAmF;YACnF,oBAAoB,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,oBAAoB,EAAE;gBAC/D,eAAe,EAAE,kBAAkB,CAAC,oBAAoB,CAAC;oBACvD,cAAc,EAAE,IAAI;iBACrB,CAAC;gBACF,iBAAiB,EAAE,kBAAkB,CAAC,cAAc,CAAC;oBACnD,cAAc,EAAE,IAAI;iBACrB,CAAC;aACH,CAAC,CAAC;QACL,CAAC;QAED,MAAM,UAAU,GAAG,kBAAkB,CAAC,cAAc,EAAE,CAAC;QAEvD,qDAAqD;QACrD,IAAI,oBAAoB,CAAC,SAAS,EAAE,EAAE,CAAC;YACrC,2DAA2D;YAC3D,MAAM,eAAe,GAA2B,EAAE,CAAC;YACnD,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,qBAAqB,IAAI,EAAE,EAAE,CAAC;gBACzD,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;oBAC5D,eAAe,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;gBAC/B,CAAC;YACH,CAAC;YAED,oBAAoB,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE;gBACvD,eAAe,EACb,UAAU,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,qBAAqB;gBAClE,iBAAiB,EACf,UAAU,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,uBAAuB;gBACpE,iEAAiE;gBACjE,iBAAiB,EAAE;oBACjB,iBAAiB,EAAE;wBACjB,QAAQ,EAAE;4BACR,iBAAiB,EAAE,eAAe;yBACnC;qBACF;iBACF;aACF,CAAC,CAAC;QACL,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,OAAO,WAAW,CAAC,aAAa,CAAC;AACnC,CAAC"}
|
|
@@ -8,7 +8,11 @@ import validateJson from "./validateJson.js";
|
|
|
8
8
|
import { awsLog, awsLogDebugLevel } from "../../../../packages/utils/index.js";
|
|
9
9
|
import { parseJsonSafe } from "../../../../packages/ai/index.js";
|
|
10
10
|
import convertNullToUndefinedBySchema from "./dataStructure/helpers/convertNullToUndefinedBySchema.js";
|
|
11
|
+
import convertTypeAnnotationsToValues from "./dataStructure/helpers/convertTypeAnnotationsToValues.js";
|
|
11
12
|
import fixNullIdsBySchema from "./dataStructure/helpers/fixNullIdsBySchema.js";
|
|
13
|
+
import coerceObjectsToPrimitivesBySchema from "./dataStructure/helpers/coerceObjectsToPrimitivesBySchema.js";
|
|
14
|
+
import coercePrimitivesToArraysBySchema from "./dataStructure/helpers/coercePrimitivesToArraysBySchema.js";
|
|
15
|
+
import stripNullableMarkers from "./dataStructure/helpers/stripNullableMarkers.js";
|
|
12
16
|
import { deepMerge } from "../../../../packages/generate/index.js";
|
|
13
17
|
import { chunkDataStructure, getRequiredValuesForChunk, } from "./dataStructureChunking.js";
|
|
14
18
|
/**
|
|
@@ -127,6 +131,35 @@ function findKeyPath(targetKey, obj, currentPath = []) {
|
|
|
127
131
|
}
|
|
128
132
|
return null;
|
|
129
133
|
}
|
|
134
|
+
/**
|
|
135
|
+
* Strip primitive values from `source` when the `destination` already has an
|
|
136
|
+
* array or object at the same key. Returns a cleaned copy of source (or null
|
|
137
|
+
* if nothing remains after stripping).
|
|
138
|
+
*
|
|
139
|
+
* This prevents misplaced LLM data (e.g., `{ webapps: true }`) from
|
|
140
|
+
* overwriting correct complex values (e.g., `{ webapps: [...] }`) during
|
|
141
|
+
* deep merge in relocateMisplacedNestedKeys.
|
|
142
|
+
*/
|
|
143
|
+
function stripPrimitivesOverwritingComplexValues(destination, source) {
|
|
144
|
+
if (typeof source !== 'object' || source === null || Array.isArray(source)) {
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
const result = {};
|
|
148
|
+
let hasKeys = false;
|
|
149
|
+
for (const key of Object.keys(source)) {
|
|
150
|
+
const srcVal = source[key];
|
|
151
|
+
const dstVal = destination[key];
|
|
152
|
+
// If destination has an array or object but source has a primitive, skip it
|
|
153
|
+
if (typeof dstVal === 'object' &&
|
|
154
|
+
dstVal !== null &&
|
|
155
|
+
typeof srcVal !== 'object') {
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
result[key] = srcVal;
|
|
159
|
+
hasKeys = true;
|
|
160
|
+
}
|
|
161
|
+
return hasKeys ? result : null;
|
|
162
|
+
}
|
|
130
163
|
/**
|
|
131
164
|
* Relocate misplaced nested keys in mockData to their correct position
|
|
132
165
|
* based on the dataForMocks structure.
|
|
@@ -179,9 +212,16 @@ function relocateMisplacedNestedKeys(mockData, dataForMocks, currentPathForLoggi
|
|
|
179
212
|
current = current[pathKey];
|
|
180
213
|
}
|
|
181
214
|
// Deep merge the value into the correct location
|
|
182
|
-
// Use deep merge to preserve existing data at that location
|
|
215
|
+
// Use deep merge to preserve existing data at that location.
|
|
216
|
+
// Before merging, strip primitives from the misplaced value that would
|
|
217
|
+
// overwrite arrays/objects at the destination. The misplaced data is lower
|
|
218
|
+
// quality — the LLM put it in the wrong place — so primitives like `true`
|
|
219
|
+
// should not overwrite correct complex values like arrays.
|
|
183
220
|
if (current[key] !== undefined && typeof current[key] === 'object') {
|
|
184
|
-
|
|
221
|
+
const safeValue = stripPrimitivesOverwritingComplexValues(current[key], value);
|
|
222
|
+
if (safeValue !== null) {
|
|
223
|
+
current[key] = deepMerge(current[key], safeValue);
|
|
224
|
+
}
|
|
185
225
|
}
|
|
186
226
|
else {
|
|
187
227
|
current[key] = value;
|
|
@@ -235,9 +275,14 @@ function generateDefaultForSchemaType(schemaType) {
|
|
|
235
275
|
return null;
|
|
236
276
|
return schemaType; // Return the type as a string placeholder
|
|
237
277
|
}
|
|
238
|
-
if (
|
|
239
|
-
schemaType
|
|
240
|
-
|
|
278
|
+
if (Array.isArray(schemaType)) {
|
|
279
|
+
if (schemaType.length === 0)
|
|
280
|
+
return [];
|
|
281
|
+
// Generate a single default element based on the first element's schema
|
|
282
|
+
const elementDefault = generateDefaultForSchemaType(schemaType[0]);
|
|
283
|
+
return elementDefault !== undefined ? [elementDefault] : [];
|
|
284
|
+
}
|
|
285
|
+
if (typeof schemaType === 'object' && schemaType !== null) {
|
|
241
286
|
// Recursively generate defaults for nested objects
|
|
242
287
|
const result = {};
|
|
243
288
|
for (const [key, value] of Object.entries(schemaType)) {
|
|
@@ -342,6 +387,8 @@ function fillMissingMockDataKeysWithDefaults(mockData, dataForMocks, pathPrefix
|
|
|
342
387
|
}
|
|
343
388
|
const missingKeys = [];
|
|
344
389
|
for (const key of Object.keys(dataForMocks)) {
|
|
390
|
+
if (key === '_nullable')
|
|
391
|
+
continue; // Internal marker, not a data key
|
|
345
392
|
const fullPath = pathPrefix ? `${pathPrefix}.${key}` : key;
|
|
346
393
|
if (mockData[key] === undefined) {
|
|
347
394
|
missingKeys.push(fullPath);
|
|
@@ -367,6 +414,139 @@ function fillMissingMockDataKeysWithDefaults(mockData, dataForMocks, pathPrefix
|
|
|
367
414
|
awsLog(`CodeYam: Generated default mock data for ${missingKeys.length} missing key(s): ${missingKeys.slice(0, 10).join(', ')}${missingKeys.length > 10 ? '...' : ''}`);
|
|
368
415
|
}
|
|
369
416
|
}
|
|
417
|
+
/**
|
|
418
|
+
* Enforce execution flow requiredValues by setting falsy paths to null.
|
|
419
|
+
*
|
|
420
|
+
* The LLM doesn't reliably generate null for `comparison: 'falsy'` requirements.
|
|
421
|
+
* For example, a flow like "diffView: falsy" should hide a modal, but the LLM
|
|
422
|
+
* might generate a truthy object, causing the modal to show in all screenshots.
|
|
423
|
+
*
|
|
424
|
+
* This function:
|
|
425
|
+
* 1. Gets requiredValues from covered flows
|
|
426
|
+
* 2. For 'falsy' comparisons: sets the value to null
|
|
427
|
+
* 3. For 'truthy' comparisons with falsy values: generates a default truthy value
|
|
428
|
+
*/
|
|
429
|
+
function enforceRequiredValues(mockData, coveredFlowIds, executionFlows) {
|
|
430
|
+
if (!coveredFlowIds.length || !executionFlows.length) {
|
|
431
|
+
return;
|
|
432
|
+
}
|
|
433
|
+
// Get all requiredValues from covered flows
|
|
434
|
+
const coveredFlows = executionFlows.filter((flow) => coveredFlowIds.includes(flow.id));
|
|
435
|
+
for (const flow of coveredFlows) {
|
|
436
|
+
if (!flow.requiredValues)
|
|
437
|
+
continue;
|
|
438
|
+
for (const rv of flow.requiredValues) {
|
|
439
|
+
if (!rv.attributePath)
|
|
440
|
+
continue;
|
|
441
|
+
// Find the value in mockData - the path could be nested
|
|
442
|
+
// e.g., attributePath: "diffView" could be at mockData['useDiffModal()'].diffView
|
|
443
|
+
const result = findAndSetValueInMockData(mockData, rv.attributePath, rv.comparison, rv.valueType);
|
|
444
|
+
if (result.found) {
|
|
445
|
+
awsLog(`CodeYam: Enforced ${rv.comparison} for ${rv.attributePath} (set to ${result.newValue === null ? 'null' : typeof result.newValue})`);
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
/**
|
|
451
|
+
* Find a value in mockData by attributePath and enforce the comparison.
|
|
452
|
+
* The attributePath could be a simple key or a nested path.
|
|
453
|
+
*
|
|
454
|
+
* Returns { found: boolean, newValue: unknown }
|
|
455
|
+
*/
|
|
456
|
+
function findAndSetValueInMockData(mockData, attributePath, comparison, valueType) {
|
|
457
|
+
// Try to find the path at various nesting levels
|
|
458
|
+
// The attributePath might be "diffView" but the actual location is
|
|
459
|
+
// mockData['useDiffModal()'].diffView
|
|
460
|
+
// Strategy 1: Direct path (e.g., mockData[attributePath])
|
|
461
|
+
if (attributePath in mockData) {
|
|
462
|
+
const currentValue = mockData[attributePath];
|
|
463
|
+
const { shouldChange, newValue } = getEnforcedValue(currentValue, comparison, valueType);
|
|
464
|
+
if (shouldChange) {
|
|
465
|
+
mockData[attributePath] = newValue;
|
|
466
|
+
return { found: true, newValue };
|
|
467
|
+
}
|
|
468
|
+
return { found: true, newValue: currentValue };
|
|
469
|
+
}
|
|
470
|
+
// Strategy 2: Search in nested objects
|
|
471
|
+
for (const [key, value] of Object.entries(mockData)) {
|
|
472
|
+
if (value && typeof value === 'object' && !Array.isArray(value)) {
|
|
473
|
+
const nestedObj = value;
|
|
474
|
+
// Check if attributePath exists in this nested object
|
|
475
|
+
if (attributePath in nestedObj) {
|
|
476
|
+
const currentValue = nestedObj[attributePath];
|
|
477
|
+
const { shouldChange, newValue } = getEnforcedValue(currentValue, comparison, valueType);
|
|
478
|
+
if (shouldChange) {
|
|
479
|
+
nestedObj[attributePath] = newValue;
|
|
480
|
+
return { found: true, newValue };
|
|
481
|
+
}
|
|
482
|
+
return { found: true, newValue: currentValue };
|
|
483
|
+
}
|
|
484
|
+
// Also check dot-notation paths (e.g., "diffView.type")
|
|
485
|
+
if (attributePath.includes('.')) {
|
|
486
|
+
const parts = attributePath.split('.');
|
|
487
|
+
const firstPart = parts[0];
|
|
488
|
+
if (firstPart in nestedObj) {
|
|
489
|
+
// Recurse with the rest of the path
|
|
490
|
+
const result = findAndSetValueInMockData(nestedObj, attributePath, comparison, valueType);
|
|
491
|
+
if (result.found)
|
|
492
|
+
return result;
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
// Recursively search deeper
|
|
496
|
+
const result = findAndSetValueInMockData(nestedObj, attributePath, comparison, valueType);
|
|
497
|
+
if (result.found)
|
|
498
|
+
return result;
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
return { found: false };
|
|
502
|
+
}
|
|
503
|
+
/**
|
|
504
|
+
* Determine if a value should be changed to match a comparison requirement.
|
|
505
|
+
*
|
|
506
|
+
* For 'falsy' comparison: truthy values should become null
|
|
507
|
+
* For 'truthy' comparison: falsy values should become a default truthy value
|
|
508
|
+
*/
|
|
509
|
+
function getEnforcedValue(currentValue, comparison, valueType) {
|
|
510
|
+
const isTruthy = Boolean(currentValue);
|
|
511
|
+
if (comparison === 'falsy') {
|
|
512
|
+
// Value should be falsy
|
|
513
|
+
if (isTruthy) {
|
|
514
|
+
return { shouldChange: true, newValue: null };
|
|
515
|
+
}
|
|
516
|
+
return { shouldChange: false, newValue: currentValue };
|
|
517
|
+
}
|
|
518
|
+
if (comparison === 'truthy') {
|
|
519
|
+
// Value should be truthy
|
|
520
|
+
if (!isTruthy) {
|
|
521
|
+
// Generate a default truthy value based on valueType
|
|
522
|
+
const defaultValue = generateDefaultTruthyValue(valueType);
|
|
523
|
+
return { shouldChange: true, newValue: defaultValue };
|
|
524
|
+
}
|
|
525
|
+
return { shouldChange: false, newValue: currentValue };
|
|
526
|
+
}
|
|
527
|
+
// For other comparisons (equals, exists, etc.), don't auto-enforce
|
|
528
|
+
return { shouldChange: false, newValue: currentValue };
|
|
529
|
+
}
|
|
530
|
+
/**
|
|
531
|
+
* Generate a default truthy value for a given type.
|
|
532
|
+
*/
|
|
533
|
+
function generateDefaultTruthyValue(valueType) {
|
|
534
|
+
if (!valueType)
|
|
535
|
+
return { _placeholder: true };
|
|
536
|
+
switch (valueType.toLowerCase()) {
|
|
537
|
+
case 'string':
|
|
538
|
+
return 'default-value';
|
|
539
|
+
case 'number':
|
|
540
|
+
return 1;
|
|
541
|
+
case 'boolean':
|
|
542
|
+
return true;
|
|
543
|
+
case 'array':
|
|
544
|
+
return [{ _placeholder: true }];
|
|
545
|
+
case 'object':
|
|
546
|
+
default:
|
|
547
|
+
return { _placeholder: true };
|
|
548
|
+
}
|
|
549
|
+
}
|
|
370
550
|
/**
|
|
371
551
|
* For Default Scenario only: detect missing mockData keys and make a follow-up
|
|
372
552
|
* LLM call to fill them in. This handles cases where the LLM completes normally
|
|
@@ -477,6 +657,18 @@ export async function generateDataForScenario({ entity, structure, scenario, exe
|
|
|
477
657
|
}
|
|
478
658
|
}
|
|
479
659
|
}
|
|
660
|
+
// Detect keys that were lost from failed or partial chunk responses
|
|
661
|
+
// and fill them with schema-based defaults so they aren't permanently lost.
|
|
662
|
+
const allChunkedKeys = chunks.flatMap((c) => Object.keys(c || {}));
|
|
663
|
+
const returnedKeys = new Set(Object.keys(chunkedMockData));
|
|
664
|
+
const missingChunkKeys = allChunkedKeys.filter((k) => !returnedKeys.has(k));
|
|
665
|
+
if (missingChunkKeys.length > 0) {
|
|
666
|
+
awsLog(`Chunked processing: ${missingChunkKeys.length} key(s) missing from chunk results, filling with defaults: ${missingChunkKeys.join(', ')}`);
|
|
667
|
+
const dataForMocksRecord = structure.dataForMocks;
|
|
668
|
+
for (const key of missingChunkKeys) {
|
|
669
|
+
chunkedMockData[key] = generateDefaultForSchemaType(dataForMocksRecord[key]);
|
|
670
|
+
}
|
|
671
|
+
}
|
|
480
672
|
awsLog(`Chunked processing complete. Generated ${Object.keys(chunkedMockData).length} keys total`);
|
|
481
673
|
}
|
|
482
674
|
}
|
|
@@ -629,6 +821,15 @@ export async function generateDataForScenario({ entity, structure, scenario, exe
|
|
|
629
821
|
}
|
|
630
822
|
awsLog(`Merged chunked mock data for keys: ${Object.keys(chunkedMockData).join(', ')}`);
|
|
631
823
|
}
|
|
824
|
+
// Strip _nullable markers from LLM-generated mock data.
|
|
825
|
+
// The _nullable marker is an internal CodeYam concept used in type definitions
|
|
826
|
+
// to indicate that a field can be null/undefined. The LLM sometimes includes
|
|
827
|
+
// these markers in its generated data, which causes runtime errors when code
|
|
828
|
+
// iterates over object keys (e.g., Object.keys(importedBy) picks up "_nullable",
|
|
829
|
+
// then Object.keys(importedBy["_nullable"]) calls Object.keys(null) and throws).
|
|
830
|
+
if (fullScenarioData.data.mockData) {
|
|
831
|
+
stripNullableMarkers(fullScenarioData.data.mockData);
|
|
832
|
+
}
|
|
632
833
|
// Relocate misplaced nested keys to their correct position.
|
|
633
834
|
// The LLM sometimes places nested keys at root level instead of inside their
|
|
634
835
|
// parent object (e.g., 'fastener' at root instead of inside 'trpc').
|
|
@@ -643,6 +844,23 @@ export async function generateDataForScenario({ entity, structure, scenario, exe
|
|
|
643
844
|
if (structure.dataForMocks && fullScenarioData.data.mockData) {
|
|
644
845
|
convertNullToUndefinedBySchema(fullScenarioData.data.mockData, structure.dataForMocks);
|
|
645
846
|
}
|
|
847
|
+
// Coerce objects/arrays to primitives when the schema expects a primitive type.
|
|
848
|
+
// The LLM sometimes generates an object where the schema expects "string",
|
|
849
|
+
// e.g., { body: { "env": "production" } } instead of { body: "some string" }.
|
|
850
|
+
// This causes runtime errors like "TypeError: body.match is not a function".
|
|
851
|
+
// Must run BEFORE convertCommaSeparatedStringsToArrays, which intentionally
|
|
852
|
+
// overrides schema types for array-like field names.
|
|
853
|
+
if (structure.dataForMocks && fullScenarioData.data.mockData) {
|
|
854
|
+
coerceObjectsToPrimitivesBySchema(fullScenarioData.data.mockData, structure.dataForMocks);
|
|
855
|
+
}
|
|
856
|
+
// Coerce primitives to empty arrays when the schema expects an array.
|
|
857
|
+
// The LLM sometimes generates a primitive (e.g., `webapps: true`) where the
|
|
858
|
+
// schema expects an array (e.g., `webapps: [{ name: "string" }]`).
|
|
859
|
+
// This causes runtime errors like "TypeError: config.webapps?.forEach is not a function".
|
|
860
|
+
// Must run AFTER coerceObjectsToPrimitivesBySchema and BEFORE convertCommaSeparatedStringsToArrays.
|
|
861
|
+
if (structure.dataForMocks && fullScenarioData.data.mockData) {
|
|
862
|
+
coercePrimitivesToArraysBySchema(fullScenarioData.data.mockData, structure.dataForMocks);
|
|
863
|
+
}
|
|
646
864
|
// Convert comma-separated strings to arrays when appropriate.
|
|
647
865
|
// The LLM sometimes generates strings like "color,size" instead of arrays
|
|
648
866
|
// like ["color", "size"] when the schema type is incorrectly inferred as
|
|
@@ -651,6 +869,15 @@ export async function generateDataForScenario({ entity, structure, scenario, exe
|
|
|
651
869
|
if (fullScenarioData.data.mockData) {
|
|
652
870
|
convertCommaSeparatedStringsToArrays(fullScenarioData.data.mockData);
|
|
653
871
|
}
|
|
872
|
+
// Convert type annotation strings that appear as values to actual values.
|
|
873
|
+
// The LLM sometimes echoes the schema type annotation as the value.
|
|
874
|
+
// For example, if the schema says { filePath: "string | undefined" },
|
|
875
|
+
// the LLM might return { filePath: "string | undefined" } instead of
|
|
876
|
+
// generating an actual value. This converts those type strings to
|
|
877
|
+
// appropriate default values (e.g., "string | undefined" → undefined).
|
|
878
|
+
if (fullScenarioData.data.mockData) {
|
|
879
|
+
convertTypeAnnotationsToValues(fullScenarioData.data.mockData);
|
|
880
|
+
}
|
|
654
881
|
// Fix null values for ID fields when the schema indicates they should be non-null.
|
|
655
882
|
// The LLM sometimes generates `null` for ID fields (e.g., `"id": null`) when
|
|
656
883
|
// the schema type is `"number"`. This causes runtime issues when code checks
|
|
@@ -658,6 +885,13 @@ export async function generateDataForScenario({ entity, structure, scenario, exe
|
|
|
658
885
|
if (structure.dataForMocks && fullScenarioData.data.mockData) {
|
|
659
886
|
fixNullIdsBySchema(fullScenarioData.data.mockData, structure.dataForMocks);
|
|
660
887
|
}
|
|
888
|
+
// Enforce execution flow requiredValues by setting falsy paths to null.
|
|
889
|
+
// The LLM doesn't reliably generate null for falsy requirements (e.g., diffView: falsy
|
|
890
|
+
// to hide a modal). This post-processing ensures that scenarios match their
|
|
891
|
+
// covered flows' requiredValues.
|
|
892
|
+
if (fullScenarioData.data.mockData && executionFlows) {
|
|
893
|
+
enforceRequiredValues(fullScenarioData.data.mockData, scenario.metadata?.coveredFlows || [], executionFlows);
|
|
894
|
+
}
|
|
661
895
|
if (structure.arguments && fullScenarioData.data.argumentsData) {
|
|
662
896
|
for (let i = 0; i < fullScenarioData.data.argumentsData.length; i++) {
|
|
663
897
|
if (structure.arguments[i]) {
|
|
@@ -787,6 +1021,46 @@ export default async function generateEntityScenarioData({ entity, structure, sc
|
|
|
787
1021
|
scenarioData.data.argumentsData =
|
|
788
1022
|
defaultScenarioData.data.argumentsData.map((arg) => ({ ...arg }));
|
|
789
1023
|
}
|
|
1024
|
+
// Enforce requiredValues AFTER merge for non-default scenarios
|
|
1025
|
+
// This ensures that if a non-default scenario doesn't cover a certain flow,
|
|
1026
|
+
// it inherits the enforcement from the default scenario
|
|
1027
|
+
if (scenarioData.data?.mockData && executionFlows) {
|
|
1028
|
+
// Get the flows covered by this scenario
|
|
1029
|
+
const scenarioCoveredFlows = nonDefaultScenarios.find((s) => s.name === result.scenarioData.scenarioDescription)?.metadata?.coveredFlows || [];
|
|
1030
|
+
// Get the paths that the scenario's flows affect
|
|
1031
|
+
const scenarioAffectedPaths = new Set();
|
|
1032
|
+
for (const flowId of scenarioCoveredFlows) {
|
|
1033
|
+
const flow = executionFlows.find((f) => f.id === flowId);
|
|
1034
|
+
if (flow?.requiredValues) {
|
|
1035
|
+
for (const rv of flow.requiredValues) {
|
|
1036
|
+
if (rv.attributePath) {
|
|
1037
|
+
// Extract base path (e.g., "diffView" from "diffView.type")
|
|
1038
|
+
const basePath = rv.attributePath.split('.')[0];
|
|
1039
|
+
scenarioAffectedPaths.add(basePath);
|
|
1040
|
+
}
|
|
1041
|
+
}
|
|
1042
|
+
}
|
|
1043
|
+
}
|
|
1044
|
+
// Get the default scenario's flows
|
|
1045
|
+
const defaultCoveredFlows = defaultScenario.metadata?.coveredFlows || [];
|
|
1046
|
+
// For paths NOT affected by the scenario, apply default's enforcement
|
|
1047
|
+
const defaultFlowsForUnaffectedPaths = defaultCoveredFlows.filter((flowId) => {
|
|
1048
|
+
const flow = executionFlows.find((f) => f.id === flowId);
|
|
1049
|
+
if (!flow?.requiredValues)
|
|
1050
|
+
return false;
|
|
1051
|
+
// Check if this flow affects a path that the scenario doesn't cover
|
|
1052
|
+
return flow.requiredValues.some((rv) => {
|
|
1053
|
+
if (!rv.attributePath)
|
|
1054
|
+
return false;
|
|
1055
|
+
const basePath = rv.attributePath.split('.')[0];
|
|
1056
|
+
return !scenarioAffectedPaths.has(basePath);
|
|
1057
|
+
});
|
|
1058
|
+
});
|
|
1059
|
+
// Apply enforcement from default scenario for unaffected paths
|
|
1060
|
+
if (defaultFlowsForUnaffectedPaths.length > 0) {
|
|
1061
|
+
enforceRequiredValues(scenarioData.data.mockData, defaultFlowsForUnaffectedPaths, executionFlows);
|
|
1062
|
+
}
|
|
1063
|
+
}
|
|
790
1064
|
return scenarioData;
|
|
791
1065
|
});
|
|
792
1066
|
scenarioDatas.push(...mergedScenarioDatas);
|
|
@@ -810,7 +1084,8 @@ Generate COMPLETE, robust data for the entire data structure.
|
|
|
810
1084
|
: `## Non-Default Scenario
|
|
811
1085
|
Generate ONLY the differences from the default scenario.
|
|
812
1086
|
- Include only fields that need to change
|
|
813
|
-
-
|
|
1087
|
+
- For object/scalar fields: set to \`null\` to remove/unset the data
|
|
1088
|
+
- For array fields: use \`[]\` for empty arrays (not \`null\`) unless the schema type explicitly includes \`| null\`
|
|
814
1089
|
- Omit unchanged fields—they merge from default`;
|
|
815
1090
|
// Only include the "NO ERROR DATA" instruction when the scenario doesn't require error data
|
|
816
1091
|
const noErrorDataInstruction = requiresErrorData
|
|
@@ -892,6 +1167,7 @@ Use simple elements only (\`<div>\`, \`<span>\`). No custom components.
|
|
|
892
1167
|
- Arrays should have many items (at least 4) unless specified otherwise
|
|
893
1168
|
- Each item must follow the exact structure provided
|
|
894
1169
|
- In general we want robust data, not minimal data unless specified otherwise
|
|
1170
|
+
- For empty arrays, use \`[]\` (not \`null\`) unless the schema type explicitly includes \`| null\` and the scenario requires the attribute be removed
|
|
895
1171
|
|
|
896
1172
|
## CRITICAL: Preserve Exact Structure
|
|
897
1173
|
Your response MUST mirror the EXACT nested structure provided in mockData Structure.
|
|
@@ -965,6 +1241,7 @@ Use simple elements only (\`<div>\`, \`<span>\`). No custom components.
|
|
|
965
1241
|
### Arrays
|
|
966
1242
|
- Arrays should have many items (at least 4) unless specified otherwise
|
|
967
1243
|
- Each item must follow the exact structure provided
|
|
1244
|
+
- For empty arrays, use \`[]\` (not \`null\`) unless the schema type explicitly includes \`| null\` and the scenario requires the attribute be removed
|
|
968
1245
|
|
|
969
1246
|
## CRITICAL: Preserve Exact Structure
|
|
970
1247
|
Your response MUST mirror the EXACT nested structure provided for the missing keys.
|
|
@@ -1087,5 +1364,6 @@ NEVER include "error" fields in responses. Skip them entirely.
|
|
|
1087
1364
|
- No \`undefined\`—use \`null\` or omit
|
|
1088
1365
|
- Generate data for ALL keys in the chunk (don't skip any)
|
|
1089
1366
|
- Arrays should have many items (at least 4) unless specified otherwise
|
|
1367
|
+
- For empty arrays, use \`[]\` (not \`null\`) unless the schema type explicitly includes \`| null\` and the scenario requires the attribute be removed
|
|
1090
1368
|
`;
|
|
1091
1369
|
//# sourceMappingURL=generateEntityScenarioData.js.map
|