@codeyam/codeyam-cli 0.1.0-staging.323686 → 0.1.0-staging.39719f5
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 +25 -25
- 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 +1286 -262
- package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/ParentScopeManager.ts +10 -3
- 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 +47 -9
- 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 +112 -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 +6 -1
- package/analyzer-template/packages/analyze/src/lib/FileAnalyzer.ts +65 -59
- package/analyzer-template/packages/analyze/src/lib/ProjectAnalyzer.ts +132 -33
- package/analyzer-template/packages/analyze/src/lib/asts/index.ts +7 -2
- 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 +117 -11
- package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities.ts +32 -40
- package/analyzer-template/packages/analyze/src/lib/files/analyze/dependencyResolver.ts +0 -6
- package/analyzer-template/packages/analyze/src/lib/files/analyze/findOrCreateEntity.ts +22 -6
- package/analyzer-template/packages/analyze/src/lib/files/analyze/gatherEntityMap.ts +13 -14
- package/analyzer-template/packages/analyze/src/lib/files/analyze/trackEntityCircularDependencies.ts +21 -0
- package/analyzer-template/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.ts +82 -13
- package/analyzer-template/packages/analyze/src/lib/files/analyzeChange.ts +4 -0
- package/analyzer-template/packages/analyze/src/lib/files/analyzeInitial.ts +4 -0
- package/analyzer-template/packages/analyze/src/lib/files/analyzeNextRoute.ts +8 -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 +498 -28
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.ts +19 -9
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +760 -100
- 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 +4 -4
- 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 +164 -0
- package/analyzer-template/packages/database/src/lib/kysely/tables/labsRequestsTable.ts +52 -0
- package/analyzer-template/packages/database/src/lib/loadAnalysis.ts +19 -15
- package/analyzer-template/packages/database/src/lib/loadCommits.ts +31 -20
- package/analyzer-template/packages/database/src/lib/loadEntities.ts +0 -6
- package/analyzer-template/packages/database/src/lib/loadEntity.ts +19 -8
- 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 +94 -143
- 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 +29 -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 +149 -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/loadAnalysis.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadAnalysis.js +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadAnalysis.js.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/loadEntities.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.js +0 -6
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntity.d.ts +4 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntity.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntity.js +5 -5
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntity.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 +76 -90
- 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/enums/ProjectFramework.d.ts +2 -0
- package/analyzer-template/packages/github/dist/types/src/enums/ProjectFramework.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/enums/ProjectFramework.js +2 -0
- package/analyzer-template/packages/github/dist/types/src/enums/ProjectFramework.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 +2 -2
- package/analyzer-template/packages/types/src/enums/ProjectFramework.ts +2 -0
- 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/ui-components/package.json +1 -1
- package/analyzer-template/packages/utils/dist/types/src/enums/ProjectFramework.d.ts +2 -0
- package/analyzer-template/packages/utils/dist/types/src/enums/ProjectFramework.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/types/src/enums/ProjectFramework.js +2 -0
- package/analyzer-template/packages/utils/dist/types/src/enums/ProjectFramework.js.map +1 -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 +3 -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 +120 -4
- 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 +148 -3
- package/analyzer-template/playwright/captureFromUrl.ts +89 -82
- package/analyzer-template/project/analyzeFileEntities.ts +26 -0
- 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/analyzeFileEntities.js +22 -0
- package/background/src/lib/virtualized/project/analyzeFileEntities.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/__tests__/memory-scripts/filter-session.test.js +196 -0
- package/codeyam-cli/src/__tests__/memory-scripts/filter-session.test.js.map +1 -0
- package/codeyam-cli/src/__tests__/memory-scripts/read-json-field.test.js +114 -0
- package/codeyam-cli/src/__tests__/memory-scripts/read-json-field.test.js.map +1 -0
- package/codeyam-cli/src/__tests__/memory-scripts/ripgrep-fallback.test.js +149 -0
- package/codeyam-cli/src/__tests__/memory-scripts/ripgrep-fallback.test.js.map +1 -0
- package/codeyam-cli/src/cli.js +57 -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/__tests__/editor.auditNoAutoAnalysis.test.js +63 -0
- package/codeyam-cli/src/commands/__tests__/editor.auditNoAutoAnalysis.test.js.map +1 -0
- package/codeyam-cli/src/commands/__tests__/editor.isolateArgs.test.js +51 -0
- package/codeyam-cli/src/commands/__tests__/editor.isolateArgs.test.js.map +1 -0
- package/codeyam-cli/src/commands/__tests__/editor.stepDispatch.test.js +56 -0
- package/codeyam-cli/src/commands/__tests__/editor.stepDispatch.test.js.map +1 -0
- package/codeyam-cli/src/commands/__tests__/init.gitignore.test.js +101 -47
- package/codeyam-cli/src/commands/__tests__/init.gitignore.test.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 +44 -21
- package/codeyam-cli/src/commands/default.js.map +1 -1
- package/codeyam-cli/src/commands/editor.js +5540 -0
- package/codeyam-cli/src/commands/editor.js.map +1 -0
- package/codeyam-cli/src/commands/editorIsolateArgs.js +25 -0
- package/codeyam-cli/src/commands/editorIsolateArgs.js.map +1 -0
- package/codeyam-cli/src/commands/init.js +148 -292
- 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/telemetry.js +37 -0
- package/codeyam-cli/src/commands/telemetry.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/data/techStacks.js +77 -0
- package/codeyam-cli/src/data/techStacks.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/analyzerFinalization.test.js +173 -0
- package/codeyam-cli/src/utils/__tests__/analyzerFinalization.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/backgroundServer.test.js +46 -0
- package/codeyam-cli/src/utils/__tests__/backgroundServer.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/devServerState.test.js +134 -0
- package/codeyam-cli/src/utils/__tests__/devServerState.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorApi.test.js +137 -0
- package/codeyam-cli/src/utils/__tests__/editorApi.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorAudit.test.js +3912 -0
- package/codeyam-cli/src/utils/__tests__/editorAudit.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorBroadcastViewport.test.js +76 -0
- package/codeyam-cli/src/utils/__tests__/editorBroadcastViewport.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorCapture.test.js +93 -0
- package/codeyam-cli/src/utils/__tests__/editorCapture.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorCaptureScenarioSeeding.test.js +137 -0
- package/codeyam-cli/src/utils/__tests__/editorCaptureScenarioSeeding.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorDeleteScenario.test.js +100 -0
- package/codeyam-cli/src/utils/__tests__/editorDeleteScenario.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorDevServer.test.js +304 -0
- package/codeyam-cli/src/utils/__tests__/editorDevServer.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorEntityChangeStatus.test.js +194 -0
- package/codeyam-cli/src/utils/__tests__/editorEntityChangeStatus.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorEntityHelpers.test.js +381 -0
- package/codeyam-cli/src/utils/__tests__/editorEntityHelpers.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorGuardMiddleware.test.js +67 -0
- package/codeyam-cli/src/utils/__tests__/editorGuardMiddleware.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorImageVerifier.test.js +294 -0
- package/codeyam-cli/src/utils/__tests__/editorImageVerifier.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorJournal.test.js +542 -0
- package/codeyam-cli/src/utils/__tests__/editorJournal.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorLoaderHelpers.test.js +594 -0
- package/codeyam-cli/src/utils/__tests__/editorLoaderHelpers.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorMigration.test.js +435 -0
- package/codeyam-cli/src/utils/__tests__/editorMigration.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorMockState.test.js +270 -0
- package/codeyam-cli/src/utils/__tests__/editorMockState.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorPreloadHelpers.test.js +217 -0
- package/codeyam-cli/src/utils/__tests__/editorPreloadHelpers.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorPreview.test.js +361 -0
- package/codeyam-cli/src/utils/__tests__/editorPreview.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorProxySession.test.js +153 -0
- package/codeyam-cli/src/utils/__tests__/editorProxySession.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorScenarioLookup.test.js +139 -0
- package/codeyam-cli/src/utils/__tests__/editorScenarioLookup.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorScenarioSwitch.test.js +291 -0
- package/codeyam-cli/src/utils/__tests__/editorScenarioSwitch.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js +1629 -0
- package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorSeedAdapter.test.js +280 -0
- package/codeyam-cli/src/utils/__tests__/editorSeedAdapter.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorSeedAdapterPrismaValidation.test.js +143 -0
- package/codeyam-cli/src/utils/__tests__/editorSeedAdapterPrismaValidation.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorSessionFilter.test.js +66 -0
- package/codeyam-cli/src/utils/__tests__/editorSessionFilter.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorShouldRevalidate.test.js +53 -0
- package/codeyam-cli/src/utils/__tests__/editorShouldRevalidate.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/entityChangeStatus.test.js +2121 -0
- package/codeyam-cli/src/utils/__tests__/entityChangeStatus.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/git.editor.test.js +134 -0
- package/codeyam-cli/src/utils/__tests__/git.editor.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/glossaryAdd.test.js +177 -0
- package/codeyam-cli/src/utils/__tests__/glossaryAdd.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/journalCaptureStabilization.test.js +122 -0
- package/codeyam-cli/src/utils/__tests__/journalCaptureStabilization.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/manualEntityAnalysis.test.js +302 -0
- package/codeyam-cli/src/utils/__tests__/manualEntityAnalysis.test.js.map +1 -0
- 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__/parseRegisterArg.test.js +129 -0
- package/codeyam-cli/src/utils/__tests__/parseRegisterArg.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__/project.test.js +65 -0
- package/codeyam-cli/src/utils/__tests__/project.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/registerScenarioResult.test.js +127 -0
- package/codeyam-cli/src/utils/__tests__/registerScenarioResult.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/routePatternMatching.test.js +118 -0
- package/codeyam-cli/src/utils/__tests__/routePatternMatching.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/scenarioCoverage.test.js +284 -0
- package/codeyam-cli/src/utils/__tests__/scenarioCoverage.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/scenarioMarkers.test.js +121 -0
- package/codeyam-cli/src/utils/__tests__/scenarioMarkers.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/scenariosManifest.test.js +672 -0
- package/codeyam-cli/src/utils/__tests__/scenariosManifest.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/screenshotHash.test.js +84 -0
- package/codeyam-cli/src/utils/__tests__/screenshotHash.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +175 -86
- package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js.map +1 -1
- package/codeyam-cli/src/utils/__tests__/telemetry.test.js +159 -0
- package/codeyam-cli/src/utils/__tests__/telemetry.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/templateConsistency.test.js +51 -0
- package/codeyam-cli/src/utils/__tests__/templateConsistency.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/testRunner.test.js +217 -0
- package/codeyam-cli/src/utils/__tests__/testRunner.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/webappDetection.test.js +142 -0
- package/codeyam-cli/src/utils/__tests__/webappDetection.test.js.map +1 -0
- package/codeyam-cli/src/utils/analysisRunner.js +39 -8
- package/codeyam-cli/src/utils/analysisRunner.js.map +1 -1
- package/codeyam-cli/src/utils/analyzer.js +26 -0
- package/codeyam-cli/src/utils/analyzer.js.map +1 -1
- package/codeyam-cli/src/utils/analyzerFinalization.js +100 -0
- package/codeyam-cli/src/utils/analyzerFinalization.js.map +1 -0
- package/codeyam-cli/src/utils/backgroundServer.js +193 -30
- package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
- package/codeyam-cli/src/utils/buildFlags.js +4 -0
- package/codeyam-cli/src/utils/buildFlags.js.map +1 -0
- package/codeyam-cli/src/utils/database.js +37 -2
- package/codeyam-cli/src/utils/database.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/devServerState.js +71 -0
- package/codeyam-cli/src/utils/devServerState.js.map +1 -0
- package/codeyam-cli/src/utils/editorApi.js +79 -0
- package/codeyam-cli/src/utils/editorApi.js.map +1 -0
- package/codeyam-cli/src/utils/editorAudit.js +791 -0
- package/codeyam-cli/src/utils/editorAudit.js.map +1 -0
- package/codeyam-cli/src/utils/editorBroadcastViewport.js +26 -0
- package/codeyam-cli/src/utils/editorBroadcastViewport.js.map +1 -0
- package/codeyam-cli/src/utils/editorCapture.js +102 -0
- package/codeyam-cli/src/utils/editorCapture.js.map +1 -0
- package/codeyam-cli/src/utils/editorDeleteScenario.js +67 -0
- package/codeyam-cli/src/utils/editorDeleteScenario.js.map +1 -0
- package/codeyam-cli/src/utils/editorDevServer.js +197 -0
- package/codeyam-cli/src/utils/editorDevServer.js.map +1 -0
- package/codeyam-cli/src/utils/editorEntityChangeStatus.js +50 -0
- package/codeyam-cli/src/utils/editorEntityChangeStatus.js.map +1 -0
- package/codeyam-cli/src/utils/editorEntityHelpers.js +144 -0
- package/codeyam-cli/src/utils/editorEntityHelpers.js.map +1 -0
- package/codeyam-cli/src/utils/editorGuard.js +36 -0
- package/codeyam-cli/src/utils/editorGuard.js.map +1 -0
- package/codeyam-cli/src/utils/editorImageVerifier.js +155 -0
- package/codeyam-cli/src/utils/editorImageVerifier.js.map +1 -0
- package/codeyam-cli/src/utils/editorJournal.js +225 -0
- package/codeyam-cli/src/utils/editorJournal.js.map +1 -0
- package/codeyam-cli/src/utils/editorLoaderHelpers.js +152 -0
- package/codeyam-cli/src/utils/editorLoaderHelpers.js.map +1 -0
- package/codeyam-cli/src/utils/editorMigration.js +224 -0
- package/codeyam-cli/src/utils/editorMigration.js.map +1 -0
- package/codeyam-cli/src/utils/editorMockState.js +248 -0
- package/codeyam-cli/src/utils/editorMockState.js.map +1 -0
- package/codeyam-cli/src/utils/editorPreloadHelpers.js +135 -0
- package/codeyam-cli/src/utils/editorPreloadHelpers.js.map +1 -0
- package/codeyam-cli/src/utils/editorPreview.js +139 -0
- package/codeyam-cli/src/utils/editorPreview.js.map +1 -0
- package/codeyam-cli/src/utils/editorRecapture.js +109 -0
- package/codeyam-cli/src/utils/editorRecapture.js.map +1 -0
- package/codeyam-cli/src/utils/editorScenarioSwitch.js +134 -0
- package/codeyam-cli/src/utils/editorScenarioSwitch.js.map +1 -0
- package/codeyam-cli/src/utils/editorScenarios.js +616 -0
- package/codeyam-cli/src/utils/editorScenarios.js.map +1 -0
- package/codeyam-cli/src/utils/editorSeedAdapter.js +422 -0
- package/codeyam-cli/src/utils/editorSeedAdapter.js.map +1 -0
- package/codeyam-cli/src/utils/editorShouldRevalidate.js +21 -0
- package/codeyam-cli/src/utils/editorShouldRevalidate.js.map +1 -0
- package/codeyam-cli/src/utils/entityChangeStatus.js +394 -0
- package/codeyam-cli/src/utils/entityChangeStatus.js.map +1 -0
- package/codeyam-cli/src/utils/entityChangeStatus.server.js +212 -0
- package/codeyam-cli/src/utils/entityChangeStatus.server.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 +63 -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 +103 -0
- package/codeyam-cli/src/utils/git.js.map +1 -1
- package/codeyam-cli/src/utils/glossaryAdd.js +74 -0
- package/codeyam-cli/src/utils/glossaryAdd.js.map +1 -0
- package/codeyam-cli/src/utils/install-skills.js +128 -47
- 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/manualEntityAnalysis.js +196 -0
- package/codeyam-cli/src/utils/manualEntityAnalysis.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/parseRegisterArg.js +31 -0
- package/codeyam-cli/src/utils/parseRegisterArg.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 +8 -1
- package/codeyam-cli/src/utils/progress.js.map +1 -1
- package/codeyam-cli/src/utils/project.js +15 -5
- package/codeyam-cli/src/utils/project.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 +100 -6
- 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/registerScenarioResult.js +52 -0
- package/codeyam-cli/src/utils/registerScenarioResult.js.map +1 -0
- package/codeyam-cli/src/utils/requireSimulations.js +10 -0
- package/codeyam-cli/src/utils/requireSimulations.js.map +1 -0
- package/codeyam-cli/src/utils/routePatternMatching.js +129 -0
- package/codeyam-cli/src/utils/routePatternMatching.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/scenarioCoverage.js +77 -0
- package/codeyam-cli/src/utils/scenarioCoverage.js.map +1 -0
- package/codeyam-cli/src/utils/scenarioMarkers.js +134 -0
- package/codeyam-cli/src/utils/scenarioMarkers.js.map +1 -0
- package/codeyam-cli/src/utils/scenariosManifest.js +307 -0
- package/codeyam-cli/src/utils/scenariosManifest.js.map +1 -0
- package/codeyam-cli/src/utils/screenshotHash.js +26 -0
- package/codeyam-cli/src/utils/screenshotHash.js.map +1 -0
- package/codeyam-cli/src/utils/serverState.js +94 -12
- package/codeyam-cli/src/utils/serverState.js.map +1 -1
- package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +96 -47
- package/codeyam-cli/src/utils/setupClaudeCodeSettings.js.map +1 -1
- package/codeyam-cli/src/utils/simulationGateMiddleware.js +175 -0
- package/codeyam-cli/src/utils/simulationGateMiddleware.js.map +1 -0
- package/codeyam-cli/src/utils/slugUtils.js +25 -0
- package/codeyam-cli/src/utils/slugUtils.js.map +1 -0
- package/codeyam-cli/src/utils/syncMocksMiddleware.js +7 -26
- package/codeyam-cli/src/utils/syncMocksMiddleware.js.map +1 -1
- package/codeyam-cli/src/utils/telemetry.js +106 -0
- package/codeyam-cli/src/utils/telemetry.js.map +1 -0
- package/codeyam-cli/src/utils/telemetryMiddleware.js +22 -0
- package/codeyam-cli/src/utils/telemetryMiddleware.js.map +1 -0
- package/codeyam-cli/src/utils/testRunner.js +356 -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 +35 -2
- package/codeyam-cli/src/utils/webappDetection.js.map +1 -1
- package/codeyam-cli/src/webserver/__tests__/buildPtyEnv.test.js +35 -0
- package/codeyam-cli/src/webserver/__tests__/buildPtyEnv.test.js.map +1 -0
- package/codeyam-cli/src/webserver/__tests__/clientErrors.test.js +107 -0
- package/codeyam-cli/src/webserver/__tests__/clientErrors.test.js.map +1 -0
- 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/__tests__/editorProxy.test.js +628 -0
- package/codeyam-cli/src/webserver/__tests__/editorProxy.test.js.map +1 -0
- package/codeyam-cli/src/webserver/__tests__/idleDetector.test.js +283 -0
- package/codeyam-cli/src/webserver/__tests__/idleDetector.test.js.map +1 -0
- package/codeyam-cli/src/webserver/__tests__/stripClaudeCommand.test.js +135 -0
- package/codeyam-cli/src/webserver/__tests__/stripClaudeCommand.test.js.map +1 -0
- package/codeyam-cli/src/webserver/app/lib/clientErrors.js +86 -0
- package/codeyam-cli/src/webserver/app/lib/clientErrors.js.map +1 -0
- package/codeyam-cli/src/webserver/app/lib/database.js +56 -30
- 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/app/lib/git.js +397 -0
- package/codeyam-cli/src/webserver/app/lib/git.js.map +1 -0
- package/codeyam-cli/src/webserver/app/types/editor.js +8 -0
- package/codeyam-cli/src/webserver/app/types/editor.js.map +1 -0
- package/codeyam-cli/src/webserver/backgroundServer.js +186 -37
- 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-CLe80MMu.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{EntityItem-DsN1wKrm.js → EntityItem-Crt_KN_U.js} +5 -5
- package/codeyam-cli/src/webserver/build/client/assets/EntityTypeBadge-CQgyEGV-.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeIcon-Ba2JVPzP.js → EntityTypeIcon-CD7lGABo.js} +9 -9
- package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-CgTNOhnu.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/InteractivePreview-CKeQT5Ty.js +25 -0
- package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-D3s1MFkb.js +3 -0
- package/codeyam-cli/src/webserver/build/client/assets/{LoadingDots-B0GLXMsr.js → LoadingDots-By5zI316.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-xgeCVgSM.js → LogViewer-CM5zg40N.js} +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/MiniClaudeChat-CQENLSrF.js +36 -0
- package/codeyam-cli/src/webserver/build/client/assets/{ReportIssueModal-OApQuNyq.js → ReportIssueModal-C2PLkej3.js} +5 -10
- package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-DanvyBPb.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-DzccYyI8.js → ScenarioViewer-DUMfcNVK.js} +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/Spinner-D0LgAaSa.js +34 -0
- package/codeyam-cli/src/webserver/build/client/assets/TruncatedFilePath-CK7-NaPZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/ViewportInspectBar-BA_Ry-rs.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{_index-BwqWJOgH.js → _index-BAWd-Xjf.js} +4 -4
- package/codeyam-cli/src/webserver/build/client/assets/{activity.(_tab)-BwavGCpm.js → activity.(_tab)-BOARiB-g.js} +10 -15
- package/codeyam-cli/src/webserver/build/client/assets/addon-canvas-DpzMmAy5.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/addon-fit-YJmn1quW.js +12 -0
- package/codeyam-cli/src/webserver/build/client/assets/addon-web-links-CHx25PAe.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/addon-webgl-DI8QOUvO.js +58 -0
- package/codeyam-cli/src/webserver/build/client/assets/agent-transcripts-Bg3e7q4S.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-audit-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-file-diff-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-file-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-load-commit-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-project-info-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-recapture-stale-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-rename-scenario-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-save-scenario-data-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-save-seed-state-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-coverage-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-scenario-prompt-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenarios-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-schema-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-session-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-CL-lMgHh.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/{chevron-down-Cx24_aWc.js → chevron-down-GmAjGS9-.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/chunk-JZWAC4HX-BAdwhyCx.js +43 -0
- package/codeyam-cli/src/webserver/build/client/assets/{circle-check-BOARzkeR.js → circle-check-DFcQkN5j.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/copy-C6iF61Xs.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-4ImjHTVC.js +41 -0
- package/codeyam-cli/src/webserver/build/client/assets/cy-logo-cli-Coe5NhbS.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{cy-logo-cli-CCKUIm0S.svg → cy-logo-cli-DoA97ML3.svg} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/dev.empty-C8y4mmyv.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/editor._tab-Gbk_i5Js.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/editor.entity.(_sha)-aIHKLB-m.js +96 -0
- package/codeyam-cli/src/webserver/build/client/assets/editorPreview-CluPkvXJ.js +41 -0
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-BJUiQqZF.js → entity._sha._-ByHz6rAQ.js} +14 -13
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.dev-CmLO432x.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-Bz9sCUF_.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-DQM8E7L4.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.edit._scenarioId-CTBG2mmz.js → entity._sha_.edit._scenarioId-CAoXLsQr.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/{entry.client-CS2cb_eZ.js → entry.client-SuW9syRS.js} +6 -6
- package/codeyam-cli/src/webserver/build/client/assets/fileTableUtils-Daa96Fr1.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/files-D-xGrg29.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/git-Bq_fbXP5.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/globals-oyPmV37k.css +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{index-lzqtyFU8.js → index-Bp1l4hSv.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{index-B1h680n5.js → index-CWV9XZiG.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/index-DE3jI_dv.js +15 -0
- package/codeyam-cli/src/webserver/build/client/assets/jsx-runtime-D_zvdyIk.js +9 -0
- package/codeyam-cli/src/webserver/build/client/assets/labs-B_IX45ih.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-B7B9V-bu.js → loader-circle-De-7qQ2u.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/manifest-bcbb3d49.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/memory-Cx2xEx7s.js +101 -0
- package/codeyam-cli/src/webserver/build/client/assets/pause-CFxEKL1u.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/root-D2_tktnk.js +80 -0
- package/codeyam-cli/src/webserver/build/client/assets/{search-CxXUmBSd.js → search-BdBb5aqc.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/settings-DdE-Untf.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/simulations-DSCdE99u.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/terminal-CrplD4b1.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/{triangle-alert-B6LgvRJg.js → triangle-alert-DqJ0j69l.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-DhXHbEjP.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/useLastLogLine-BNd5hYuW.js +2 -0
- package/codeyam-cli/src/webserver/build/client/assets/useReportContext-Cy5Qg_UR.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/useToast-5HR2j9ZE.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/xterm-BqvuqXEL.js +27 -0
- package/codeyam-cli/src/webserver/build/client/sound-test.html +98 -0
- package/codeyam-cli/src/webserver/build/server/assets/analysisRunner-DjF-soOH.js +16 -0
- package/codeyam-cli/src/webserver/build/server/assets/index-nAvHGWbz.js +1 -0
- package/codeyam-cli/src/webserver/build/server/assets/init-XhpIt-OT.js +10 -0
- package/codeyam-cli/src/webserver/build/server/assets/progress-CHTtrxFG.js +1 -0
- package/codeyam-cli/src/webserver/build/server/assets/server-build-DVwiibFu.js +644 -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 +976 -0
- package/codeyam-cli/src/webserver/editorProxy.js.map +1 -0
- package/codeyam-cli/src/webserver/idleDetector.js +121 -0
- package/codeyam-cli/src/webserver/idleDetector.js.map +1 -0
- package/codeyam-cli/src/webserver/mockStateEvents.js +28 -0
- package/codeyam-cli/src/webserver/mockStateEvents.js.map +1 -0
- package/codeyam-cli/src/webserver/public/sound-test.html +98 -0
- package/codeyam-cli/src/webserver/scripts/codeyam-preload.mjs +414 -0
- package/codeyam-cli/src/webserver/scripts/journalCapture.ts +283 -0
- package/codeyam-cli/src/webserver/server.js +379 -1
- package/codeyam-cli/src/webserver/server.js.map +1 -1
- package/codeyam-cli/src/webserver/terminalServer.js +951 -0
- package/codeyam-cli/src/webserver/terminalServer.js.map +1 -0
- package/codeyam-cli/templates/__tests__/editor-step-hook.prompt-capture.test.ts +118 -0
- package/codeyam-cli/templates/chrome-extension-react/EXTENSION_SETUP.md +75 -0
- package/codeyam-cli/templates/chrome-extension-react/README.md +46 -0
- package/codeyam-cli/templates/chrome-extension-react/gitignore +15 -0
- package/codeyam-cli/templates/chrome-extension-react/index.html +12 -0
- package/codeyam-cli/templates/chrome-extension-react/package.json +27 -0
- package/codeyam-cli/templates/chrome-extension-react/popup.html +12 -0
- package/codeyam-cli/templates/chrome-extension-react/public/manifest.json +15 -0
- package/codeyam-cli/templates/chrome-extension-react/src/background/service-worker.ts +7 -0
- package/codeyam-cli/templates/chrome-extension-react/src/globals.css +6 -0
- package/codeyam-cli/templates/chrome-extension-react/src/lib/storage.ts +37 -0
- package/codeyam-cli/templates/chrome-extension-react/src/popup/App.tsx +12 -0
- package/codeyam-cli/templates/chrome-extension-react/src/popup/main.tsx +10 -0
- package/codeyam-cli/templates/chrome-extension-react/tsconfig.json +24 -0
- package/codeyam-cli/templates/chrome-extension-react/vite.config.ts +41 -0
- package/codeyam-cli/templates/codeyam-editor-claude.md +149 -0
- package/codeyam-cli/templates/codeyam-editor-reference.md +214 -0
- package/codeyam-cli/templates/codeyam-memory-hook.sh +19 -20
- package/codeyam-cli/templates/commands/codeyam-diagnose.md +481 -0
- package/codeyam-cli/templates/editor-step-hook.py +368 -0
- package/codeyam-cli/templates/expo-react-native/MOBILE_SETUP.md +89 -0
- package/codeyam-cli/templates/expo-react-native/README.md +41 -0
- package/codeyam-cli/templates/expo-react-native/app/(tabs)/_layout.tsx +33 -0
- package/codeyam-cli/templates/expo-react-native/app/(tabs)/index.tsx +12 -0
- package/codeyam-cli/templates/expo-react-native/app/(tabs)/settings.tsx +12 -0
- package/codeyam-cli/templates/expo-react-native/app/_layout.tsx +12 -0
- package/codeyam-cli/templates/expo-react-native/app.json +18 -0
- package/codeyam-cli/templates/expo-react-native/babel.config.js +9 -0
- package/codeyam-cli/templates/expo-react-native/gitignore +12 -0
- package/codeyam-cli/templates/expo-react-native/global.css +3 -0
- package/codeyam-cli/templates/expo-react-native/lib/storage.ts +32 -0
- package/codeyam-cli/templates/expo-react-native/metro.config.js +6 -0
- package/codeyam-cli/templates/expo-react-native/nativewind-env.d.ts +1 -0
- package/codeyam-cli/templates/expo-react-native/package.json +38 -0
- package/codeyam-cli/templates/expo-react-native/tailwind.config.js +10 -0
- package/codeyam-cli/templates/expo-react-native/tsconfig.json +10 -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/AUTH_PATTERNS.md +308 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/AUTH_UPGRADE.md +304 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/DATABASE.md +126 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/FEATURE_PATTERNS.md +37 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/README.md +53 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/app/api/todos/route.ts +17 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/app/codeyam-isolate/layout.tsx +12 -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 +24 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/app/page.tsx +10 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/env +4 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/eslint.config.mjs +11 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/gitignore +64 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/next.config.ts +14 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/package.json +39 -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 +40 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma.config.ts +12 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/seed-adapter.ts +127 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/tsconfig.json +34 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/vitest.config.ts +13 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/README.md +52 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/SUPABASE_SETUP.md +104 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/app/api/todos/route.ts +17 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/app/globals.css +26 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/app/layout.tsx +34 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/app/lib/prisma.ts +20 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/app/lib/supabase.ts +12 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/app/page.tsx +10 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/env +9 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/eslint.config.mjs +11 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/gitignore +40 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/next.config.ts +11 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/package.json +37 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/postcss.config.mjs +7 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/prisma/schema.prisma +27 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/prisma/seed.ts +39 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/prisma.config.ts +12 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/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/codeyam-cli/templates/seed-adapters/supabase.ts +282 -0
- package/codeyam-cli/templates/{codeyam:debug.md → skills/codeyam-debug/SKILL.md} +1 -1
- package/codeyam-cli/templates/skills/codeyam-dev-mode/SKILL.md +237 -0
- package/codeyam-cli/templates/skills/codeyam-editor/SKILL.md +229 -0
- package/codeyam-cli/templates/skills/codeyam-memory/SKILL.md +611 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/deprecated-prompt.md +100 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/detect-deprecated-patterns.mjs +139 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/find-exports.mjs +52 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/misleading-api-prompt.md +117 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/lib/read-json-field.mjs +61 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/lib/ripgrep-fallback.mjs +155 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/analyze-prompt.md +46 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/cleanup.mjs +13 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/filter-session.mjs +95 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/preprocess.mjs +160 -0
- package/codeyam-cli/templates/skills/codeyam-new-rule/SKILL.md +11 -0
- package/codeyam-cli/templates/{codeyam:setup.md → skills/codeyam-setup/SKILL.md} +13 -1
- package/codeyam-cli/templates/{codeyam:sim.md → skills/codeyam-sim/SKILL.md} +1 -1
- package/codeyam-cli/templates/{codeyam:test.md → skills/codeyam-test/SKILL.md} +1 -1
- package/codeyam-cli/templates/{codeyam:verify.md → skills/codeyam-verify/SKILL.md} +1 -1
- package/package.json +29 -21
- 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 +1023 -183
- package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/ParentScopeManager.js +9 -2
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/ParentScopeManager.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 +47 -7
- 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 +96 -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 +2 -1
- 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 +109 -30
- package/packages/analyze/src/lib/ProjectAnalyzer.js.map +1 -1
- package/packages/analyze/src/lib/asts/index.js +4 -2
- package/packages/analyze/src/lib/asts/index.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 +81 -9
- package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/analyzeEntities.js +30 -30
- 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 +12 -2
- package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/gatherEntityMap.js +11 -8
- package/packages/analyze/src/lib/files/analyze/gatherEntityMap.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/trackEntityCircularDependencies.js +14 -0
- package/packages/analyze/src/lib/files/analyze/trackEntityCircularDependencies.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.js +44 -14
- package/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.js.map +1 -1
- package/packages/analyze/src/lib/files/analyzeChange.js +1 -0
- package/packages/analyze/src/lib/files/analyzeChange.js.map +1 -1
- package/packages/analyze/src/lib/files/analyzeInitial.js +1 -0
- package/packages/analyze/src/lib/files/analyzeInitial.js.map +1 -1
- package/packages/analyze/src/lib/files/analyzeNextRoute.js +5 -1
- package/packages/analyze/src/lib/files/analyzeNextRoute.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 +309 -23
- package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js +16 -8
- package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +632 -79
- 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 +149 -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/loadAnalysis.js +1 -1
- package/packages/database/src/lib/loadAnalysis.js.map +1 -1
- package/packages/database/src/lib/loadCommits.js +23 -13
- package/packages/database/src/lib/loadCommits.js.map +1 -1
- package/packages/database/src/lib/loadEntities.js +0 -6
- package/packages/database/src/lib/loadEntities.js.map +1 -1
- package/packages/database/src/lib/loadEntity.js +5 -5
- package/packages/database/src/lib/loadEntity.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 +76 -90
- 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/types/src/enums/ProjectFramework.js +2 -0
- package/packages/types/src/enums/ProjectFramework.js.map +1 -1
- package/packages/utils/src/lib/fs/rsyncCopy.js +120 -4
- package/packages/utils/src/lib/fs/rsyncCopy.js.map +1 -1
- package/scripts/npm-post-install.cjs +34 -0
- 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/EntityTypeBadge-DLqD3qNt.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-C8lyxW9k.js +0 -34
- package/codeyam-cli/src/webserver/build/client/assets/InteractivePreview-aht4aafF.js +0 -25
- package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-CVtiBnY5.js +0 -3
- package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-DuDvi0jm.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/TruncatedFilePath-DyFZkK0l.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/chunk-EPOLDU6W-CXRTFQ3F.js +0 -51
- package/codeyam-cli/src/webserver/build/client/assets/copy-Bb-80kDT.js +0 -6
- package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-BdhJEx6B.js +0 -21
- package/codeyam-cli/src/webserver/build/client/assets/cy-logo-cli-DcX-ZS3p.js +0 -1
- 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/fileTableUtils-DMJ7zii9.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/files-CJ6lTdTA.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/git-CPTZZ-JZ.js +0 -15
- 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/simulations-DwFIBT09.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-C1v1PQzo.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/useLastLogLine-aSv48UbS.js +0 -2
- package/codeyam-cli/src/webserver/build/client/assets/useReportContext-DYxHZQuP.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/useToast-mBRpZPiu.js +0 -1
- 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
- package/scripts/finalize-analyzer.cjs +0 -81
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { splitOutsideParenthesesAndArrays, joinParenthesesAndArrays, } from "../../../../../../packages/ai/index.js";
|
|
2
2
|
import { cleanKnownObjectFunctionsFromMapping } from "../../../../../../packages/ai/index.js";
|
|
3
|
+
import { transformationTracer } from "./TransformationTracer.js";
|
|
3
4
|
function cleanFunctionName(functionName) {
|
|
4
5
|
return functionName?.split('<')[0];
|
|
5
6
|
}
|
|
@@ -24,6 +25,66 @@ function getTypeParameter(functionName) {
|
|
|
24
25
|
}
|
|
25
26
|
return null;
|
|
26
27
|
}
|
|
28
|
+
/**
|
|
29
|
+
* Check if a schema path contains a Set/Map collection method call.
|
|
30
|
+
* Paths like `.has(articleId)`, `.delete(articleId)`, `.add(articleId)` represent
|
|
31
|
+
* membership checks on Sets/Maps, not meaningful data flow for schema generation.
|
|
32
|
+
* These create massive combinatorial explosions when every filter field (filterRatings,
|
|
33
|
+
* filterPublications, filterAuthors, etc.) × every method (has, delete, add) gets
|
|
34
|
+
* tracked as a separate equivalency.
|
|
35
|
+
*/
|
|
36
|
+
const COLLECTION_METHOD_PATTERN = /\.(?:has|delete|add|clear|get|set)\(/;
|
|
37
|
+
function isCollectionMethodPath(path) {
|
|
38
|
+
return COLLECTION_METHOD_PATTERN.test(path);
|
|
39
|
+
}
|
|
40
|
+
// Primitive types that should not have child paths
|
|
41
|
+
const PRIMITIVE_TYPES = new Set([
|
|
42
|
+
'number',
|
|
43
|
+
'string',
|
|
44
|
+
'boolean',
|
|
45
|
+
'null',
|
|
46
|
+
'undefined',
|
|
47
|
+
]);
|
|
48
|
+
// Check if a type string represents a primitive type
|
|
49
|
+
// Handles union types like "string | undefined" or "number | null"
|
|
50
|
+
// Also handles string literal unions like "'suggestion' | 'warning' | 'tip'"
|
|
51
|
+
function isPrimitiveType(typeStr) {
|
|
52
|
+
if (PRIMITIVE_TYPES.has(typeStr)) {
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
// Check union types - if ALL parts of the union are primitives, it's primitive
|
|
56
|
+
// e.g., "string | undefined" -> ["string", "undefined"] -> both are primitive -> true
|
|
57
|
+
// e.g., "object | null" -> ["object", "null"] -> object is not primitive -> false
|
|
58
|
+
// e.g., "'suggestion' | 'warning'" -> string literal union -> true
|
|
59
|
+
if (typeStr.includes('|')) {
|
|
60
|
+
const parts = typeStr.split('|').map((p) => p.trim());
|
|
61
|
+
return parts.every((part) => PRIMITIVE_TYPES.has(part) ||
|
|
62
|
+
// String literal values like 'suggestion', 'warning' are primitives
|
|
63
|
+
(part.startsWith("'") && part.endsWith("'")));
|
|
64
|
+
}
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
// Extract signature index from a path like "signature[0]" or "signature[0].foo"
|
|
68
|
+
// Returns the index number or undefined if not a signature path
|
|
69
|
+
function extractSignatureIndex(path) {
|
|
70
|
+
const match = path.match(/^signature\[(\d+)\]/);
|
|
71
|
+
return match ? parseInt(match[1], 10) : undefined;
|
|
72
|
+
}
|
|
73
|
+
// Check if a new schema path would go through a primitive type
|
|
74
|
+
// e.g., if schema has 'entities[].scenarioCount': 'number', then
|
|
75
|
+
// 'entities[].scenarioCount.sha' would go through a primitive and should be rejected
|
|
76
|
+
function wouldGoThroughPrimitive(newPath, schema) {
|
|
77
|
+
const pathParts = splitOutsideParenthesesAndArrays(newPath);
|
|
78
|
+
// Check each prefix of the path (excluding the full path itself)
|
|
79
|
+
for (let i = 1; i < pathParts.length; i++) {
|
|
80
|
+
const prefixPath = joinParenthesesAndArrays(pathParts.slice(0, i));
|
|
81
|
+
const prefixType = schema[prefixPath];
|
|
82
|
+
if (prefixType && isPrimitiveType(prefixType)) {
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
27
88
|
// Check if schemaPathPart matches or is a function call variant of pathPart
|
|
28
89
|
// e.g., 'isEntityBeingAnalyzed(entity.sha)' matches 'isEntityBeingAnalyzed'
|
|
29
90
|
function pathPartMatches(pathPart, schemaPathPart) {
|
|
@@ -38,15 +99,47 @@ function pathPartMatches(pathPart, schemaPathPart) {
|
|
|
38
99
|
}
|
|
39
100
|
function bestValueFromOptions(options) {
|
|
40
101
|
options = options.filter(Boolean);
|
|
41
|
-
const known = options.
|
|
42
|
-
if (known)
|
|
43
|
-
|
|
102
|
+
const known = options.filter((o) => !o.includes('unknown'));
|
|
103
|
+
if (known.length > 0) {
|
|
104
|
+
// Among known values, prefer string literal unions over bare primitives.
|
|
105
|
+
// e.g., "'draft' | 'inProgress' | 'paused' | 'completed'" is more specific than "string".
|
|
106
|
+
// This handles cases where a dependency schema has a bare type like "string" but the
|
|
107
|
+
// child entity's analysis has the actual literal union from TypeScript type resolution.
|
|
108
|
+
if (known.length > 1 && known.some((o) => PRIMITIVE_TYPES.has(o))) {
|
|
109
|
+
const literalUnion = known.find((o) => !PRIMITIVE_TYPES.has(o) && o.includes("'"));
|
|
110
|
+
if (literalUnion) {
|
|
111
|
+
return literalUnion;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return known[0];
|
|
115
|
+
}
|
|
44
116
|
const notUnknown = options.find((o) => o !== 'unknown');
|
|
45
|
-
if (notUnknown)
|
|
117
|
+
if (notUnknown) {
|
|
46
118
|
return notUnknown;
|
|
119
|
+
}
|
|
47
120
|
return options[0] ?? 'unknown';
|
|
48
121
|
}
|
|
49
|
-
|
|
122
|
+
/** Timeout (ms) for the merge operation. Throws DataStructureTimeoutError if exceeded.
|
|
123
|
+
* All successful merges complete in <300ms. Anything exceeding 2s is pathological. */
|
|
124
|
+
const MERGE_TIMEOUT_MS = 2000;
|
|
125
|
+
export class DataStructureTimeoutError extends Error {
|
|
126
|
+
constructor(entityName, elapsedMs) {
|
|
127
|
+
super(`Data structure merge timed out for ${entityName} after ${Math.round(elapsedMs / 1000)}s (limit: ${MERGE_TIMEOUT_MS / 1000}s)`);
|
|
128
|
+
this.name = 'DataStructureTimeoutError';
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
export default function mergeInDependentDataStructure({ importedExports, dependentAnalyses, rootScopeName, dataStructure, dependencySchemas, timeoutMs = MERGE_TIMEOUT_MS, }) {
|
|
132
|
+
const mergeStartTime = Date.now();
|
|
133
|
+
const mergeDeadline = timeoutMs > 0 ? mergeStartTime + timeoutMs : 0;
|
|
134
|
+
/** Call in hot loops. Throws DataStructureTimeoutError if deadline exceeded.
|
|
135
|
+
* Date.now() is ~20ns — negligible vs the ms-scale string ops in each iteration. */
|
|
136
|
+
const checkDeadline = () => {
|
|
137
|
+
if (!mergeDeadline)
|
|
138
|
+
return;
|
|
139
|
+
if (Date.now() > mergeDeadline) {
|
|
140
|
+
throw new DataStructureTimeoutError(rootScopeName, Date.now() - mergeStartTime);
|
|
141
|
+
}
|
|
142
|
+
};
|
|
50
143
|
const mergedDataStructure = {
|
|
51
144
|
signatureSchema: { ...(dataStructure.signatureSchema ?? {}) },
|
|
52
145
|
returnValueSchema: { ...(dataStructure.returnValueSchema ?? {}) },
|
|
@@ -88,8 +181,32 @@ export default function mergeInDependentDataStructure({ importedExports, depende
|
|
|
88
181
|
}
|
|
89
182
|
}
|
|
90
183
|
let equivalentSchemaPaths = [];
|
|
184
|
+
// O(1) index for findOrCreateEquivalentSchemaPathsEntry.
|
|
185
|
+
// Maps "(rootPath)::(normalizedFuncName)" → the entry containing that root.
|
|
186
|
+
// This replaces the O(E) linear search that was causing O(E²) gather performance.
|
|
187
|
+
const espIndex = new Map();
|
|
188
|
+
const espIndexKey = (path, functionName) => {
|
|
189
|
+
const normalized = cleanFunctionName(functionName);
|
|
190
|
+
const funcKey = normalized === rootScopeName ? '__self__' : normalized || '__self__';
|
|
191
|
+
return `${path}::${funcKey}`;
|
|
192
|
+
};
|
|
193
|
+
const updateEspIndex = (entry) => {
|
|
194
|
+
for (const root of entry.equivalentRoots) {
|
|
195
|
+
const funcName = root.function?.name ?? rootScopeName;
|
|
196
|
+
espIndex.set(espIndexKey(root.schemaRootPath, funcName), entry);
|
|
197
|
+
}
|
|
198
|
+
};
|
|
199
|
+
// Pre-build a lookup map from cleaned function name to dependency for O(1) lookups.
|
|
200
|
+
// This avoids O(n) linear search in findRelevantDependency which was causing O(n²) performance.
|
|
201
|
+
const dependencyByCleanedName = new Map();
|
|
202
|
+
for (const dep of importedExports) {
|
|
203
|
+
const cleanedName = cleanFunctionName(dep.name);
|
|
204
|
+
if (!dependencyByCleanedName.has(cleanedName)) {
|
|
205
|
+
dependencyByCleanedName.set(cleanedName, dep);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
91
208
|
const findRelevantDependency = (functionName) => {
|
|
92
|
-
return
|
|
209
|
+
return dependencyByCleanedName.get(cleanFunctionName(functionName));
|
|
93
210
|
};
|
|
94
211
|
const findRelevantDependentDataStructure = (functionName) => {
|
|
95
212
|
const dependency = findRelevantDependency(functionName);
|
|
@@ -117,10 +234,19 @@ export default function mergeInDependentDataStructure({ importedExports, depende
|
|
|
117
234
|
});
|
|
118
235
|
return mergedDataStructure.dependencySchemas[filePath][name];
|
|
119
236
|
};
|
|
120
|
-
const cleanSchema = (schema) => {
|
|
121
|
-
cleanKnownObjectFunctionsFromMapping
|
|
237
|
+
const cleanSchema = (schema, context) => {
|
|
238
|
+
transformationTracer.traceSchemaTransform(rootScopeName, 'cleanKnownObjectFunctionsFromMapping', schema, cleanKnownObjectFunctionsFromMapping, context);
|
|
122
239
|
};
|
|
240
|
+
// Cache translatePath results — the same path is often translated multiple times
|
|
241
|
+
// (once per equivalency entry that references it). Avoids redundant
|
|
242
|
+
// splitOutsideParenthesesAndArrays calls on long paths.
|
|
243
|
+
const translatePathCache = new Map();
|
|
123
244
|
const translatePath = (path, dependencyName) => {
|
|
245
|
+
const cacheKey = `${dependencyName}\0${path}`;
|
|
246
|
+
const cached = translatePathCache.get(cacheKey);
|
|
247
|
+
if (cached !== undefined)
|
|
248
|
+
return cached;
|
|
249
|
+
let result = path;
|
|
124
250
|
if (path.startsWith(dependencyName)) {
|
|
125
251
|
const pathParts = splitOutsideParenthesesAndArrays(path);
|
|
126
252
|
if (pathParts.length > 1) {
|
|
@@ -128,36 +254,65 @@ export default function mergeInDependentDataStructure({ importedExports, depende
|
|
|
128
254
|
// Check if this function has multiple DIFFERENT type parameters.
|
|
129
255
|
// If so, DON'T normalize to returnValue - keep the full path to avoid
|
|
130
256
|
// merging different type-parameterized variants together.
|
|
131
|
-
// e.g., useFetcher<{ data: UserData }>().functionCallReturnValue.data
|
|
132
|
-
// should NOT be merged with useFetcher<{ data: ConfigData }>().functionCallReturnValue.data
|
|
133
257
|
const baseName = cleanFunctionName(pathParts[0]);
|
|
134
|
-
if (functionsWithMultipleTypeParams.has(baseName)) {
|
|
135
|
-
|
|
258
|
+
if (!functionsWithMultipleTypeParams.has(baseName)) {
|
|
259
|
+
// functionCallReturnValue immediately follows - normalize to returnValue
|
|
260
|
+
result = joinParenthesesAndArrays([
|
|
261
|
+
'returnValue',
|
|
262
|
+
...pathParts.slice(2),
|
|
263
|
+
]);
|
|
136
264
|
}
|
|
137
|
-
// functionCallReturnValue immediately follows - normalize to returnValue
|
|
138
|
-
// e.g., useAuth().functionCallReturnValue.user -> returnValue.user
|
|
139
|
-
return joinParenthesesAndArrays([
|
|
140
|
-
'returnValue',
|
|
141
|
-
...pathParts.slice(2),
|
|
142
|
-
]);
|
|
143
265
|
}
|
|
144
266
|
else if (pathParts[0].endsWith(')') &&
|
|
145
267
|
pathParts[1].startsWith('signature[')) {
|
|
146
|
-
// Hook-style with signature access
|
|
147
|
-
|
|
148
|
-
return joinParenthesesAndArrays(pathParts.slice(1));
|
|
268
|
+
// Hook-style with signature access
|
|
269
|
+
result = joinParenthesesAndArrays(pathParts.slice(1));
|
|
149
270
|
}
|
|
150
|
-
// For all other cases (object-style APIs like getSupabase().auth and
|
|
151
|
-
// direct object references like supabase.from), preserve the path as-is.
|
|
152
|
-
// The prefix must be kept for proper schema lookups in constructMockCode
|
|
153
|
-
// and gatherDataForMocks.
|
|
154
271
|
}
|
|
155
272
|
}
|
|
156
|
-
|
|
273
|
+
translatePathCache.set(cacheKey, result);
|
|
274
|
+
return result;
|
|
157
275
|
};
|
|
158
276
|
const gatherAllEquivalentSchemaPaths = (functionName, sourceAndUsageEquivalencies, dataStructure) => {
|
|
277
|
+
checkDeadline();
|
|
159
278
|
if (!sourceAndUsageEquivalencies)
|
|
160
279
|
return;
|
|
280
|
+
const normalizedSchemaCache = new Map();
|
|
281
|
+
const getSchemaIndex = (schema) => {
|
|
282
|
+
if (!schema)
|
|
283
|
+
return { byFirstPart: new Map() };
|
|
284
|
+
const cached = normalizedSchemaCache.get(schema);
|
|
285
|
+
if (cached)
|
|
286
|
+
return cached;
|
|
287
|
+
const byFirstPart = new Map();
|
|
288
|
+
for (const path in schema) {
|
|
289
|
+
checkDeadline();
|
|
290
|
+
let parts = splitOutsideParenthesesAndArrays(path);
|
|
291
|
+
if (parts[0].startsWith(functionName)) {
|
|
292
|
+
const baseName = cleanFunctionName(parts[0]);
|
|
293
|
+
if (!functionsWithMultipleTypeParams.has(baseName)) {
|
|
294
|
+
parts =
|
|
295
|
+
parts[1] === 'functionCallReturnValue'
|
|
296
|
+
? ['returnValue', ...parts.slice(2)]
|
|
297
|
+
: parts.slice(1);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
const entry = { path, parts };
|
|
301
|
+
// Index by the base of the first part (before any function call args)
|
|
302
|
+
const firstPart = parts[0] ?? '';
|
|
303
|
+
const parenIdx = firstPart.indexOf('(');
|
|
304
|
+
const firstPartBase = parenIdx >= 0 ? firstPart.slice(0, parenIdx) : firstPart;
|
|
305
|
+
let bucket = byFirstPart.get(firstPartBase);
|
|
306
|
+
if (!bucket) {
|
|
307
|
+
bucket = [];
|
|
308
|
+
byFirstPart.set(firstPartBase, bucket);
|
|
309
|
+
}
|
|
310
|
+
bucket.push(entry);
|
|
311
|
+
}
|
|
312
|
+
const result = { byFirstPart };
|
|
313
|
+
normalizedSchemaCache.set(schema, result);
|
|
314
|
+
return result;
|
|
315
|
+
};
|
|
161
316
|
const findOrCreateEquivalentSchemaPathsEntry = (allPaths) => {
|
|
162
317
|
const equivalentRoots = allPaths
|
|
163
318
|
.filter((p) => p.functionName === rootScopeName ||
|
|
@@ -169,19 +324,94 @@ export default function mergeInDependentDataStructure({ importedExports, depende
|
|
|
169
324
|
: findRelevantDependency(p.functionName),
|
|
170
325
|
}));
|
|
171
326
|
let equivalentSchemaPathsEntry;
|
|
327
|
+
// Collect the signature indices from the new roots we want to add
|
|
328
|
+
const newRootSignatureIndices = new Set();
|
|
329
|
+
for (const root of equivalentRoots) {
|
|
330
|
+
const idx = extractSignatureIndex(root.schemaRootPath);
|
|
331
|
+
if (idx !== undefined) {
|
|
332
|
+
newRootSignatureIndices.add(idx);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
// Use espIndex Map for O(1) lookup instead of O(E) linear search.
|
|
336
|
+
// Falls back to linear search only when Map hit has a signature index conflict.
|
|
172
337
|
for (const pathInfo of allPaths) {
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
338
|
+
checkDeadline();
|
|
339
|
+
if (equivalentSchemaPathsEntry)
|
|
340
|
+
break;
|
|
341
|
+
const candidate = espIndex.get(espIndexKey(pathInfo.path, pathInfo.functionName));
|
|
342
|
+
if (!candidate)
|
|
343
|
+
continue;
|
|
344
|
+
// Verify no signature index conflict with the candidate entry
|
|
345
|
+
if (newRootSignatureIndices.size > 0) {
|
|
346
|
+
const existingIndicesByFunction = new Map();
|
|
347
|
+
for (const er of candidate.equivalentRoots) {
|
|
348
|
+
const funcKey = er.function
|
|
349
|
+
? `${er.function.name}::${er.function.filePath}`
|
|
350
|
+
: '__self__';
|
|
351
|
+
const idx = extractSignatureIndex(er.schemaRootPath);
|
|
352
|
+
if (idx !== undefined) {
|
|
353
|
+
if (!existingIndicesByFunction.has(funcKey)) {
|
|
354
|
+
existingIndicesByFunction.set(funcKey, new Set());
|
|
355
|
+
}
|
|
356
|
+
existingIndicesByFunction.get(funcKey).add(idx);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
let hasConflict = false;
|
|
360
|
+
for (const newRoot of equivalentRoots) {
|
|
361
|
+
const funcKey = newRoot.function
|
|
362
|
+
? `${newRoot.function.name}::${newRoot.function.filePath}`
|
|
363
|
+
: '__self__';
|
|
364
|
+
const newIdx = extractSignatureIndex(newRoot.schemaRootPath);
|
|
365
|
+
if (newIdx !== undefined) {
|
|
366
|
+
const existingIndices = existingIndicesByFunction.get(funcKey);
|
|
367
|
+
if (existingIndices && existingIndices.size > 0) {
|
|
368
|
+
if (!existingIndices.has(newIdx)) {
|
|
369
|
+
hasConflict = true;
|
|
370
|
+
break;
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
if (hasConflict)
|
|
376
|
+
continue;
|
|
180
377
|
}
|
|
378
|
+
equivalentSchemaPathsEntry = candidate;
|
|
181
379
|
}
|
|
182
380
|
if (!equivalentSchemaPathsEntry) {
|
|
381
|
+
// Before creating a new entry, filter out roots that have conflicting
|
|
382
|
+
// signature indices from the same function. An entry should never contain
|
|
383
|
+
// roots with different signature indices from the same function.
|
|
384
|
+
// This prevents the bug where signature[1], signature[2], signature[4]
|
|
385
|
+
// all get merged together due to incorrect sourceEquivalencies.
|
|
386
|
+
let filteredRoots = equivalentRoots;
|
|
387
|
+
if (newRootSignatureIndices.size > 1) {
|
|
388
|
+
// There are multiple signature indices - we need to filter to keep only
|
|
389
|
+
// one consistent set. We'll keep the roots that match the PRIMARY index
|
|
390
|
+
// (the first signature index we encounter from self, or the lowest index).
|
|
391
|
+
// First, determine the primary index - prefer the self root's index
|
|
392
|
+
let primaryIndex;
|
|
393
|
+
for (const root of equivalentRoots) {
|
|
394
|
+
if (!root.function) {
|
|
395
|
+
// This is a self root
|
|
396
|
+
const idx = extractSignatureIndex(root.schemaRootPath);
|
|
397
|
+
if (idx !== undefined) {
|
|
398
|
+
primaryIndex = idx;
|
|
399
|
+
break;
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
// If no self root has a signature index, use the lowest index
|
|
404
|
+
if (primaryIndex === undefined) {
|
|
405
|
+
primaryIndex = Math.min(...newRootSignatureIndices);
|
|
406
|
+
}
|
|
407
|
+
// Filter roots: keep if no signature index OR signature index matches primary
|
|
408
|
+
filteredRoots = equivalentRoots.filter((root) => {
|
|
409
|
+
const idx = extractSignatureIndex(root.schemaRootPath);
|
|
410
|
+
return idx === undefined || idx === primaryIndex;
|
|
411
|
+
});
|
|
412
|
+
}
|
|
183
413
|
equivalentSchemaPathsEntry = {
|
|
184
|
-
equivalentRoots,
|
|
414
|
+
equivalentRoots: filteredRoots,
|
|
185
415
|
equivalentPostfixes: {},
|
|
186
416
|
};
|
|
187
417
|
equivalentSchemaPaths.push(equivalentSchemaPathsEntry);
|
|
@@ -189,10 +419,18 @@ export default function mergeInDependentDataStructure({ importedExports, depende
|
|
|
189
419
|
else {
|
|
190
420
|
equivalentSchemaPathsEntry.equivalentRoots.push(...equivalentRoots);
|
|
191
421
|
}
|
|
422
|
+
// Deduplicate roots using a Set for O(n) instead of O(n²)
|
|
423
|
+
const seenRoots = new Set();
|
|
192
424
|
equivalentSchemaPathsEntry.equivalentRoots =
|
|
193
|
-
equivalentSchemaPathsEntry.equivalentRoots.filter((er
|
|
194
|
-
|
|
195
|
-
|
|
425
|
+
equivalentSchemaPathsEntry.equivalentRoots.filter((er) => {
|
|
426
|
+
const key = er.schemaRootPath + '::' + (er.function?.name ?? '');
|
|
427
|
+
if (seenRoots.has(key))
|
|
428
|
+
return false;
|
|
429
|
+
seenRoots.add(key);
|
|
430
|
+
return true;
|
|
431
|
+
});
|
|
432
|
+
// Keep the espIndex in sync after adding/deduplicating roots
|
|
433
|
+
updateEspIndex(equivalentSchemaPathsEntry);
|
|
196
434
|
return equivalentSchemaPathsEntry;
|
|
197
435
|
};
|
|
198
436
|
// Helper to extract function name from a path that starts with a function call.
|
|
@@ -218,18 +456,40 @@ export default function mergeInDependentDataStructure({ importedExports, depende
|
|
|
218
456
|
for (const equivalencies of allEquivalencies) {
|
|
219
457
|
const schemaPathEntries = Object.entries(equivalencies);
|
|
220
458
|
for (const [schemaPath, usages] of schemaPathEntries) {
|
|
459
|
+
checkDeadline();
|
|
460
|
+
// Skip equivalency entries whose source path is a Set/Map membership operation.
|
|
461
|
+
// Patterns like `.has(articleId)`, `.delete(articleId)`, `.add(articleId)` on
|
|
462
|
+
// Sets/Maps represent membership checks, not meaningful data flow for schema generation.
|
|
463
|
+
// In the Margo LibraryPage case, these account for 74% of all equivalency targets
|
|
464
|
+
// (19,444 of 26,340) and cause a combinatorial explosion in the merge.
|
|
465
|
+
if (isCollectionMethodPath(schemaPath))
|
|
466
|
+
continue;
|
|
221
467
|
// First, check if the raw schemaPath starts with a function call to a dependency.
|
|
222
468
|
// If so, use that dependency name for translation (so translatePath can strip the prefix).
|
|
223
469
|
const extractedFuncName = extractFunctionNameFromPath(schemaPath);
|
|
224
470
|
const effectiveFunctionName = extractedFuncName || functionName;
|
|
225
471
|
const translatedPath = translatePath(schemaPath, effectiveFunctionName);
|
|
226
|
-
const
|
|
472
|
+
const allPathsRaw = [
|
|
227
473
|
{ path: translatedPath, functionName: effectiveFunctionName },
|
|
228
|
-
...usages
|
|
474
|
+
...usages
|
|
475
|
+
.filter((u) => !isCollectionMethodPath(u.schemaPath))
|
|
476
|
+
.map((u) => ({
|
|
229
477
|
path: translatePath(u.schemaPath, u.scopeNodeName),
|
|
230
478
|
functionName: u.scopeNodeName,
|
|
231
479
|
})),
|
|
232
480
|
].filter((pathInfo) => !pathInfo.path.includes('.map('));
|
|
481
|
+
// Deduplicate by translated path + function name.
|
|
482
|
+
// Multiple call variants (e.g., loadView(viewKey(null,null)) vs loadView(viewKey(newTag,newCol)))
|
|
483
|
+
// translate to the same path after stripping arguments. Processing duplicates
|
|
484
|
+
// creates O(n²) work in the schema matching loops below.
|
|
485
|
+
const seenPathKeys = new Set();
|
|
486
|
+
const allPaths = allPathsRaw.filter((p) => {
|
|
487
|
+
const key = `${p.functionName ?? ''}::${p.path}`;
|
|
488
|
+
if (seenPathKeys.has(key))
|
|
489
|
+
return false;
|
|
490
|
+
seenPathKeys.add(key);
|
|
491
|
+
return true;
|
|
492
|
+
});
|
|
233
493
|
// Fix 38: Derive base paths from property access paths.
|
|
234
494
|
// When we have equivalent paths like:
|
|
235
495
|
// Parent: signature[0].scenarios[].name
|
|
@@ -248,8 +508,11 @@ export default function mergeInDependentDataStructure({ importedExports, depende
|
|
|
248
508
|
p.functionName === rootScopeName ||
|
|
249
509
|
p.functionName === effectiveFunctionName);
|
|
250
510
|
const derivedBasePaths = [];
|
|
511
|
+
const allPathSet = new Set(allPaths.map((p) => p.path));
|
|
512
|
+
const derivedBasePathSet = new Set();
|
|
251
513
|
// For each child path, find its equivalent parent path and derive bases
|
|
252
514
|
for (const childPathInfo of childPaths) {
|
|
515
|
+
checkDeadline();
|
|
253
516
|
const childParts = splitOutsideParenthesesAndArrays(childPathInfo.path);
|
|
254
517
|
// Look for a parent path that shares a common suffix with this child path
|
|
255
518
|
for (const parentPathInfo of parentPaths) {
|
|
@@ -296,23 +559,23 @@ export default function mergeInDependentDataStructure({ importedExports, depende
|
|
|
296
559
|
parentHasArrayIterator &&
|
|
297
560
|
!childHasArrayIterator &&
|
|
298
561
|
!childBaseIsGenericSignature) {
|
|
299
|
-
// Add child base if not already present
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
if (!childBaseExists) {
|
|
562
|
+
// Add child base if not already present (O(1) Set lookup)
|
|
563
|
+
if (!allPathSet.has(childBase) &&
|
|
564
|
+
!derivedBasePathSet.has(childBase)) {
|
|
303
565
|
derivedBasePaths.push({
|
|
304
566
|
path: childBase,
|
|
305
567
|
functionName: childPathInfo.functionName,
|
|
306
568
|
});
|
|
569
|
+
derivedBasePathSet.add(childBase);
|
|
307
570
|
}
|
|
308
|
-
// Add parent base if not already present
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
if (!parentBaseExists) {
|
|
571
|
+
// Add parent base if not already present (O(1) Set lookup)
|
|
572
|
+
if (!allPathSet.has(parentBase) &&
|
|
573
|
+
!derivedBasePathSet.has(parentBase)) {
|
|
312
574
|
derivedBasePaths.push({
|
|
313
575
|
path: parentBase,
|
|
314
576
|
functionName: parentPathInfo.functionName,
|
|
315
577
|
});
|
|
578
|
+
derivedBasePathSet.add(parentBase);
|
|
316
579
|
}
|
|
317
580
|
}
|
|
318
581
|
}
|
|
@@ -321,7 +584,27 @@ export default function mergeInDependentDataStructure({ importedExports, depende
|
|
|
321
584
|
}
|
|
322
585
|
allPaths.push(...derivedBasePaths);
|
|
323
586
|
const entry = findOrCreateEquivalentSchemaPathsEntry(allPaths);
|
|
587
|
+
// Trace equivalency gathering - helps debug why paths may not be connected
|
|
588
|
+
if (allPaths.length > 1) {
|
|
589
|
+
transformationTracer.operation(rootScopeName, {
|
|
590
|
+
operation: 'gatherEquivalency',
|
|
591
|
+
stage: 'gathering',
|
|
592
|
+
path: translatedPath,
|
|
593
|
+
context: {
|
|
594
|
+
sourceFunction: functionName,
|
|
595
|
+
equivalentPaths: allPaths.map((p) => ({
|
|
596
|
+
path: p.path,
|
|
597
|
+
function: p.functionName,
|
|
598
|
+
})),
|
|
599
|
+
equivalentRoots: entry.equivalentRoots.map((r) => ({
|
|
600
|
+
path: r.schemaRootPath,
|
|
601
|
+
function: r.function?.name,
|
|
602
|
+
})),
|
|
603
|
+
},
|
|
604
|
+
});
|
|
605
|
+
}
|
|
324
606
|
for (const equivalentRoot of entry.equivalentRoots) {
|
|
607
|
+
checkDeadline();
|
|
325
608
|
const dataStructures = equivalentRoot.function &&
|
|
326
609
|
equivalentRoot.function.name !== rootScopeName
|
|
327
610
|
? [
|
|
@@ -349,18 +632,17 @@ export default function mergeInDependentDataStructure({ importedExports, depende
|
|
|
349
632
|
pathParts = pathParts.slice(1);
|
|
350
633
|
}
|
|
351
634
|
for (const schema of schemas) {
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
}
|
|
635
|
+
// Use pre-computed index to only iterate schema entries whose
|
|
636
|
+
// normalized first part matches pathParts[0], instead of all entries.
|
|
637
|
+
const schemaIndex = getSchemaIndex(schema);
|
|
638
|
+
const lookupPart = pathParts[0] ?? '';
|
|
639
|
+
const lookupParenIdx = lookupPart.indexOf('(');
|
|
640
|
+
const lookupBase = lookupParenIdx >= 0
|
|
641
|
+
? lookupPart.slice(0, lookupParenIdx)
|
|
642
|
+
: lookupPart;
|
|
643
|
+
const candidates = schemaIndex.byFirstPart.get(lookupBase) || [];
|
|
644
|
+
for (const { path: schemaPath, parts: schemaPathParts, } of candidates) {
|
|
645
|
+
checkDeadline();
|
|
364
646
|
if (schemaPathParts.length < pathParts.length)
|
|
365
647
|
continue;
|
|
366
648
|
// Check if all path parts match (allowing function call variants)
|
|
@@ -419,13 +701,27 @@ export default function mergeInDependentDataStructure({ importedExports, depende
|
|
|
419
701
|
else {
|
|
420
702
|
// Regular exact match - use the standard postfix logic
|
|
421
703
|
const postfix = joinParenthesesAndArrays(schemaPathParts.slice(matchedUpToIndex));
|
|
422
|
-
entry.equivalentPostfixes[postfix]
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
704
|
+
const previousValue = entry.equivalentPostfixes[postfix];
|
|
705
|
+
const newValue = schema[schemaPath];
|
|
706
|
+
entry.equivalentPostfixes[postfix] = previousValue
|
|
707
|
+
? bestValueFromOptions([previousValue, newValue])
|
|
708
|
+
: newValue;
|
|
709
|
+
// Trace postfix gathering - shows where type info comes from
|
|
710
|
+
if (entry.equivalentPostfixes[postfix] !== previousValue) {
|
|
711
|
+
transformationTracer.operation(rootScopeName, {
|
|
712
|
+
operation: 'gatherPostfix',
|
|
713
|
+
stage: 'gathering',
|
|
714
|
+
path: postfix || '(root)',
|
|
715
|
+
before: previousValue,
|
|
716
|
+
after: entry.equivalentPostfixes[postfix],
|
|
717
|
+
context: {
|
|
718
|
+
sourceSchemaPath: schemaPath,
|
|
719
|
+
sourceFunction: equivalentRoot.function?.name || rootScopeName,
|
|
720
|
+
equivalentRootPath: equivalentRoot.schemaRootPath,
|
|
721
|
+
rawValue: newValue,
|
|
722
|
+
},
|
|
723
|
+
});
|
|
724
|
+
}
|
|
429
725
|
}
|
|
430
726
|
}
|
|
431
727
|
}
|
|
@@ -441,6 +737,7 @@ export default function mergeInDependentDataStructure({ importedExports, depende
|
|
|
441
737
|
// where we want both X().functionCallReturnValue and Y().functionCallReturnValue as bases
|
|
442
738
|
const allBasePaths = new Set();
|
|
443
739
|
for (const path of Object.keys(dataStructure.returnValueSchema)) {
|
|
740
|
+
checkDeadline();
|
|
444
741
|
const parts = splitOutsideParenthesesAndArrays(path);
|
|
445
742
|
// Find all positions of functionCallReturnValue and create base paths for each
|
|
446
743
|
for (let i = 0; i < parts.length; i++) {
|
|
@@ -457,12 +754,17 @@ export default function mergeInDependentDataStructure({ importedExports, depende
|
|
|
457
754
|
const entry = findOrCreateEquivalentSchemaPathsEntry([
|
|
458
755
|
{ path: translatedBasePath, functionName: functionName },
|
|
459
756
|
]);
|
|
460
|
-
|
|
757
|
+
const newRoot = {
|
|
461
758
|
schemaRootPath: translatedBasePath,
|
|
462
759
|
function: findRelevantDependency(functionName),
|
|
463
|
-
}
|
|
760
|
+
};
|
|
761
|
+
entry.equivalentRoots.push(newRoot);
|
|
762
|
+
// Update index for the newly added root
|
|
763
|
+
const newRootFuncName = newRoot.function?.name ?? rootScopeName;
|
|
764
|
+
espIndex.set(espIndexKey(newRoot.schemaRootPath, newRootFuncName), entry);
|
|
464
765
|
const basePathParts = splitOutsideParenthesesAndArrays(basePath);
|
|
465
766
|
for (const schemaPath in dataStructure.returnValueSchema) {
|
|
767
|
+
checkDeadline();
|
|
466
768
|
const schemaPathParts = splitOutsideParenthesesAndArrays(schemaPath);
|
|
467
769
|
if (schemaPathParts.length < basePathParts.length)
|
|
468
770
|
continue;
|
|
@@ -474,12 +776,13 @@ export default function mergeInDependentDataStructure({ importedExports, depende
|
|
|
474
776
|
continue;
|
|
475
777
|
}
|
|
476
778
|
const postfix = joinParenthesesAndArrays(schemaPathParts.slice(basePathParts.length));
|
|
477
|
-
|
|
779
|
+
const newValue = entry.equivalentPostfixes[postfix]
|
|
478
780
|
? bestValueFromOptions([
|
|
479
781
|
entry.equivalentPostfixes[postfix],
|
|
480
782
|
dataStructure.returnValueSchema[schemaPath],
|
|
481
783
|
])
|
|
482
784
|
: dataStructure.returnValueSchema[schemaPath];
|
|
785
|
+
entry.equivalentPostfixes[postfix] = newValue;
|
|
483
786
|
}
|
|
484
787
|
}
|
|
485
788
|
}
|
|
@@ -494,6 +797,7 @@ export default function mergeInDependentDataStructure({ importedExports, depende
|
|
|
494
797
|
// We do this before the main merge to ensure the connection happens regardless
|
|
495
798
|
// of processing order.
|
|
496
799
|
for (const esp of equivalentSchemaPaths) {
|
|
800
|
+
checkDeadline();
|
|
497
801
|
for (const root of esp.equivalentRoots) {
|
|
498
802
|
if (root.schemaRootPath.endsWith('[]')) {
|
|
499
803
|
// Find a matching parent entry with the base array path
|
|
@@ -506,6 +810,7 @@ export default function mergeInDependentDataStructure({ importedExports, depende
|
|
|
506
810
|
// Add transformed postfixes from child (array element) to parent (array)
|
|
507
811
|
// so they can be applied with [] prefix to parent paths
|
|
508
812
|
for (const [postfixPath, postfixValue] of Object.entries(esp.equivalentPostfixes)) {
|
|
813
|
+
checkDeadline();
|
|
509
814
|
const transformedPostfix = joinParenthesesAndArrays(['[]', postfixPath].filter(Boolean));
|
|
510
815
|
if (!(transformedPostfix in parentEntry.equivalentPostfixes)) {
|
|
511
816
|
parentEntry.equivalentPostfixes[transformedPostfix] =
|
|
@@ -518,6 +823,8 @@ export default function mergeInDependentDataStructure({ importedExports, depende
|
|
|
518
823
|
}
|
|
519
824
|
const findEquivalentSchemaPathEntry = (schemaSubPath, equivalentRootFunction) => {
|
|
520
825
|
let postfix;
|
|
826
|
+
// Get the signature index we're looking for (if any)
|
|
827
|
+
const lookingForSignatureIndex = extractSignatureIndex(schemaSubPath);
|
|
521
828
|
const equivalentEntry = mergedEquivalentSchemaPaths.find((esp) => esp.equivalentRoots.some((er) => {
|
|
522
829
|
if ((schemaSubPath.startsWith('returnValue') ||
|
|
523
830
|
schemaSubPath.startsWith('signature[')) &&
|
|
@@ -526,6 +833,26 @@ export default function mergeInDependentDataStructure({ importedExports, depende
|
|
|
526
833
|
return false;
|
|
527
834
|
}
|
|
528
835
|
if (schemaSubPath === er.schemaRootPath) {
|
|
836
|
+
// Additional check: if we're looking for a signature path, make sure
|
|
837
|
+
// the entry doesn't already have DIFFERENT signature indices.
|
|
838
|
+
// This prevents entries with signature[1], signature[2], signature[4]
|
|
839
|
+
// from all being merged together.
|
|
840
|
+
if (lookingForSignatureIndex !== undefined) {
|
|
841
|
+
const hasConflictingSignatureIndex = esp.equivalentRoots.some((otherRoot) => {
|
|
842
|
+
// Only check roots from the same function
|
|
843
|
+
if (otherRoot.function?.name !== equivalentRootFunction?.name ||
|
|
844
|
+
otherRoot.function?.filePath !==
|
|
845
|
+
equivalentRootFunction?.filePath) {
|
|
846
|
+
return false;
|
|
847
|
+
}
|
|
848
|
+
const otherIndex = extractSignatureIndex(otherRoot.schemaRootPath);
|
|
849
|
+
return (otherIndex !== undefined &&
|
|
850
|
+
otherIndex !== lookingForSignatureIndex);
|
|
851
|
+
});
|
|
852
|
+
if (hasConflictingSignatureIndex) {
|
|
853
|
+
return false;
|
|
854
|
+
}
|
|
855
|
+
}
|
|
529
856
|
postfix = er.postfix;
|
|
530
857
|
return true;
|
|
531
858
|
}
|
|
@@ -536,6 +863,7 @@ export default function mergeInDependentDataStructure({ importedExports, depende
|
|
|
536
863
|
const sortedEquivalentSchemaPaths = equivalentSchemaPaths.sort((a, b) => Math.max(...a.equivalentRoots.map((er) => splitOutsideParenthesesAndArrays(er.schemaRootPath).length)) -
|
|
537
864
|
Math.max(...b.equivalentRoots.map((er) => splitOutsideParenthesesAndArrays(er.schemaRootPath).length)));
|
|
538
865
|
for (const esp of sortedEquivalentSchemaPaths) {
|
|
866
|
+
checkDeadline();
|
|
539
867
|
if (esp.equivalentRoots.length === 0)
|
|
540
868
|
continue;
|
|
541
869
|
let bestCandidateLength;
|
|
@@ -595,6 +923,7 @@ export default function mergeInDependentDataStructure({ importedExports, depende
|
|
|
595
923
|
// dependencySchemas contains usage information (how dependencies are called),
|
|
596
924
|
// not internal implementation, so we want this for mocked dependencies too
|
|
597
925
|
for (const dependency of importedExports) {
|
|
926
|
+
checkDeadline();
|
|
598
927
|
const dependentDataStructure = dependencySchemas?.[dependency.filePath]?.[dependency.name];
|
|
599
928
|
if (!dependentDataStructure)
|
|
600
929
|
continue;
|
|
@@ -610,9 +939,65 @@ export default function mergeInDependentDataStructure({ importedExports, depende
|
|
|
610
939
|
gatherAllEquivalentSchemaPaths(name, childMergedDataStructure);
|
|
611
940
|
}
|
|
612
941
|
}
|
|
942
|
+
const gatherElapsed = Date.now() - mergeStartTime;
|
|
613
943
|
equivalentSchemaPaths = mergeAllEquivalentSchemaPaths();
|
|
944
|
+
const mergeEspElapsed = Date.now() - mergeStartTime;
|
|
945
|
+
// Collect schemas that need cleaning — batch the calls for the end instead of
|
|
946
|
+
// calling cleanSchema inside the inner root loop (which was O(roots * schemaSize)).
|
|
947
|
+
const schemasToClean = new Set();
|
|
614
948
|
for (const esp of equivalentSchemaPaths) {
|
|
615
|
-
|
|
949
|
+
checkDeadline();
|
|
950
|
+
// Pre-compute which postfixes have children to avoid O(n²) lookups in the inner loop.
|
|
951
|
+
// A postfix "has children" if there are other postfixes that extend it.
|
|
952
|
+
const postfixesWithChildren = new Set();
|
|
953
|
+
const postfixKeys = Object.keys(esp.equivalentPostfixes);
|
|
954
|
+
// Pre-parse ALL postfix paths once. These parsed parts are reused in:
|
|
955
|
+
// 1. The children detection loop below
|
|
956
|
+
// 2. The inner postfix application loop (lines that split postfixPath and equivalentRoot.postfix)
|
|
957
|
+
// This eliminates thousands of redundant splitOutsideParenthesesAndArrays calls.
|
|
958
|
+
const postfixPartsCache = new Map();
|
|
959
|
+
for (const postfixPath of postfixKeys) {
|
|
960
|
+
if (!postfixPath)
|
|
961
|
+
continue;
|
|
962
|
+
postfixPartsCache.set(postfixPath, splitOutsideParenthesesAndArrays(postfixPath));
|
|
963
|
+
}
|
|
964
|
+
// Check for empty postfix having children (any other postfixes exist)
|
|
965
|
+
if (postfixKeys.length > 1 && '' in esp.equivalentPostfixes) {
|
|
966
|
+
postfixesWithChildren.add('');
|
|
967
|
+
}
|
|
968
|
+
// Check for array element postfixes having children using a prefix set.
|
|
969
|
+
// This avoids O(n²) scans across large postfix lists.
|
|
970
|
+
// e.g., 'currentEntities[]' has children if a path like 'currentEntities[].sha' exists.
|
|
971
|
+
const postfixPrefixSet = new Set();
|
|
972
|
+
for (const postfixPath of postfixKeys) {
|
|
973
|
+
if (!postfixPath)
|
|
974
|
+
continue;
|
|
975
|
+
const parts = postfixPartsCache.get(postfixPath);
|
|
976
|
+
for (let i = 1; i < parts.length; i++) {
|
|
977
|
+
postfixPrefixSet.add(joinParenthesesAndArrays(parts.slice(0, i)));
|
|
978
|
+
}
|
|
979
|
+
}
|
|
980
|
+
for (const postfixPath of postfixKeys) {
|
|
981
|
+
if (postfixPath.endsWith('[]') && postfixPrefixSet.has(postfixPath)) {
|
|
982
|
+
postfixesWithChildren.add(postfixPath);
|
|
983
|
+
}
|
|
984
|
+
}
|
|
985
|
+
// Deduplicate equivalentRoots that would write to the same schema paths.
|
|
986
|
+
// Roots with the same (function, schemaRootPath, postfix) are redundant.
|
|
987
|
+
const seenRootKeys = new Set();
|
|
988
|
+
const uniqueRoots = esp.equivalentRoots.filter((root) => {
|
|
989
|
+
const key = `${root.function?.filePath ?? ''}::${root.function?.name ?? ''}::${root.schemaRootPath}::${root.postfix ?? ''}`;
|
|
990
|
+
if (seenRootKeys.has(key))
|
|
991
|
+
return false;
|
|
992
|
+
seenRootKeys.add(key);
|
|
993
|
+
return true;
|
|
994
|
+
});
|
|
995
|
+
// Cap schema size to prevent combinatorial explosion.
|
|
996
|
+
// Successful merges produce <3K ret keys. Beyond 5K, further postfixes
|
|
997
|
+
// add noise but no useful data — they're cross-products of unrelated equivalencies.
|
|
998
|
+
const SCHEMA_KEY_CAP = 5000;
|
|
999
|
+
for (const equivalentRoot of uniqueRoots) {
|
|
1000
|
+
checkDeadline();
|
|
616
1001
|
let merged;
|
|
617
1002
|
if (equivalentRoot.function) {
|
|
618
1003
|
merged = findOrCreateDependentSchemas(equivalentRoot.function);
|
|
@@ -625,25 +1010,124 @@ export default function mergeInDependentDataStructure({ importedExports, depende
|
|
|
625
1010
|
const schema = equivalentRoot.schemaRootPath.startsWith('signature[')
|
|
626
1011
|
? merged.signatureSchema
|
|
627
1012
|
: merged.returnValueSchema;
|
|
1013
|
+
// Skip if this schema has already grown past the cap
|
|
1014
|
+
if (Object.keys(schema).length > SCHEMA_KEY_CAP)
|
|
1015
|
+
continue;
|
|
628
1016
|
for (const [postfixPath, postfixValue] of Object.entries(esp.equivalentPostfixes)) {
|
|
1017
|
+
checkDeadline();
|
|
629
1018
|
let relevantPostfix = postfixPath;
|
|
630
1019
|
if (equivalentRoot.postfix) {
|
|
1020
|
+
// Check if postfixPath starts with equivalentRoot.postfix at a path boundary.
|
|
1021
|
+
// Must ensure exact path part match - "entityCode" should NOT match "entity" prefix.
|
|
1022
|
+
// Valid: "entity.foo" starts with "entity" (boundary at '.')
|
|
1023
|
+
// Valid: "entity[0]" starts with "entity" (boundary at '[')
|
|
1024
|
+
// Invalid: "entityCode" starts with "entity" (no boundary, different property)
|
|
631
1025
|
if (!postfixPath.startsWith(equivalentRoot.postfix)) {
|
|
632
1026
|
continue;
|
|
633
1027
|
}
|
|
634
|
-
|
|
635
|
-
const
|
|
1028
|
+
// Additional check: ensure the match is at a path boundary
|
|
1029
|
+
const nextChar = postfixPath[equivalentRoot.postfix.length];
|
|
1030
|
+
if (nextChar !== undefined && nextChar !== '.' && nextChar !== '[') {
|
|
1031
|
+
// The postfixPath continues with more characters that aren't a path separator.
|
|
1032
|
+
// This means "entity" matched "entityCode" which is wrong - they're different properties.
|
|
1033
|
+
continue;
|
|
1034
|
+
}
|
|
1035
|
+
const postFixPathParts = postfixPartsCache.get(postfixPath) ??
|
|
1036
|
+
splitOutsideParenthesesAndArrays(postfixPath);
|
|
1037
|
+
// Cache equivalentRoot.postfix parts — same root reused across all postfixes
|
|
1038
|
+
if (!postfixPartsCache.has(equivalentRoot.postfix)) {
|
|
1039
|
+
postfixPartsCache.set(equivalentRoot.postfix, splitOutsideParenthesesAndArrays(equivalentRoot.postfix));
|
|
1040
|
+
}
|
|
1041
|
+
const equivalentRootPostFixParts = postfixPartsCache.get(equivalentRoot.postfix);
|
|
636
1042
|
relevantPostfix = joinParenthesesAndArrays(postFixPathParts.slice(equivalentRootPostFixParts.length));
|
|
637
1043
|
}
|
|
638
1044
|
const newSchemaPath = joinParenthesesAndArrays([
|
|
639
1045
|
equivalentRoot.schemaRootPath,
|
|
640
1046
|
relevantPostfix,
|
|
641
1047
|
]);
|
|
1048
|
+
// Skip paths that would go through a primitive type
|
|
1049
|
+
// e.g., if schema has 'entities[].scenarioCount': 'number', skip 'entities[].scenarioCount.sha'
|
|
1050
|
+
if (wouldGoThroughPrimitive(newSchemaPath, schema)) {
|
|
1051
|
+
transformationTracer.operation(rootScopeName, {
|
|
1052
|
+
operation: 'skipPrimitivePath',
|
|
1053
|
+
stage: 'merged',
|
|
1054
|
+
path: newSchemaPath,
|
|
1055
|
+
context: {
|
|
1056
|
+
reason: 'would go through primitive type',
|
|
1057
|
+
postfixValue,
|
|
1058
|
+
},
|
|
1059
|
+
});
|
|
1060
|
+
continue;
|
|
1061
|
+
}
|
|
1062
|
+
// Skip setting primitive type when there are child postfixes that indicate structure.
|
|
1063
|
+
// This prevents downgrading an object/array element to a primitive type.
|
|
1064
|
+
// Uses pre-computed postfixesWithChildren Set for O(1) lookup instead of O(n) iteration.
|
|
1065
|
+
const hasChildPostfixes = (relevantPostfix === '' || relevantPostfix.endsWith('[]')) &&
|
|
1066
|
+
postfixesWithChildren.has(postfixPath);
|
|
1067
|
+
if (PRIMITIVE_TYPES.has(postfixValue) && hasChildPostfixes) {
|
|
1068
|
+
continue;
|
|
1069
|
+
}
|
|
1070
|
+
// Don't overwrite a more specific type with a less specific one
|
|
1071
|
+
// This can happen when nested roots share entries with their parent roots
|
|
1072
|
+
const existingType = schema[newSchemaPath];
|
|
1073
|
+
if (existingType) {
|
|
1074
|
+
// Don't overwrite a primitive type with 'object' or 'array'
|
|
1075
|
+
// e.g., if schema has 'entities[].scenarioCount': 'number', don't overwrite with 'object'
|
|
1076
|
+
if (PRIMITIVE_TYPES.has(existingType) &&
|
|
1077
|
+
(postfixValue === 'object' || postfixValue === 'array')) {
|
|
1078
|
+
transformationTracer.operation(rootScopeName, {
|
|
1079
|
+
operation: 'skipTypeDowngrade',
|
|
1080
|
+
stage: 'merged',
|
|
1081
|
+
path: newSchemaPath,
|
|
1082
|
+
context: {
|
|
1083
|
+
reason: 'would overwrite primitive with object/array',
|
|
1084
|
+
existingType,
|
|
1085
|
+
newType: postfixValue,
|
|
1086
|
+
},
|
|
1087
|
+
});
|
|
1088
|
+
continue;
|
|
1089
|
+
}
|
|
1090
|
+
// Don't overwrite a complex/union type with a primitive
|
|
1091
|
+
// e.g., if schema has 'scenarios[]': 'Scenario | null', don't overwrite with 'string'
|
|
1092
|
+
if (!PRIMITIVE_TYPES.has(existingType) &&
|
|
1093
|
+
PRIMITIVE_TYPES.has(postfixValue)) {
|
|
1094
|
+
transformationTracer.operation(rootScopeName, {
|
|
1095
|
+
operation: 'skipTypeDowngrade',
|
|
1096
|
+
stage: 'merged',
|
|
1097
|
+
path: newSchemaPath,
|
|
1098
|
+
context: {
|
|
1099
|
+
reason: 'would overwrite complex type with primitive',
|
|
1100
|
+
existingType,
|
|
1101
|
+
newType: postfixValue,
|
|
1102
|
+
},
|
|
1103
|
+
});
|
|
1104
|
+
continue;
|
|
1105
|
+
}
|
|
1106
|
+
}
|
|
1107
|
+
// Log the successful postfix merge
|
|
1108
|
+
transformationTracer.operation(rootScopeName, {
|
|
1109
|
+
operation: 'mergePostfix',
|
|
1110
|
+
stage: 'merged',
|
|
1111
|
+
path: newSchemaPath,
|
|
1112
|
+
before: existingType,
|
|
1113
|
+
after: postfixValue,
|
|
1114
|
+
context: {
|
|
1115
|
+
schemaRootPath: equivalentRoot.schemaRootPath,
|
|
1116
|
+
postfix: relevantPostfix,
|
|
1117
|
+
dependency: equivalentRoot.function?.name,
|
|
1118
|
+
},
|
|
1119
|
+
});
|
|
642
1120
|
schema[newSchemaPath] = postfixValue;
|
|
643
1121
|
}
|
|
644
|
-
|
|
1122
|
+
schemasToClean.add(schema);
|
|
645
1123
|
}
|
|
646
1124
|
}
|
|
1125
|
+
const postfixElapsed = Date.now() - mergeStartTime;
|
|
1126
|
+
// Batch-clean all modified schemas once (instead of once per root per ESP entry)
|
|
1127
|
+
for (const schema of schemasToClean) {
|
|
1128
|
+
cleanSchema(schema, { stage: 'afterMergePostfix' });
|
|
1129
|
+
}
|
|
1130
|
+
const cleanElapsed = Date.now() - mergeStartTime;
|
|
647
1131
|
// Propagate equivalency-derived attributes to generic function call variants.
|
|
648
1132
|
// When attributes are traced via equivalencies (e.g., fileComparisons from buildDataMap.signature[2]),
|
|
649
1133
|
// they get written to non-generic paths (returnValue.data.x or funcName().functionCallReturnValue.data.x).
|
|
@@ -662,6 +1146,7 @@ export default function mergeInDependentDataStructure({ importedExports, depende
|
|
|
662
1146
|
const genericVariants = new Set();
|
|
663
1147
|
const genericRegex = new RegExp(`^${depName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}<[^>]+>\\(\\)`);
|
|
664
1148
|
for (const path in schemaToSearchForGenericVariants) {
|
|
1149
|
+
checkDeadline();
|
|
665
1150
|
const match = path.match(genericRegex);
|
|
666
1151
|
if (match) {
|
|
667
1152
|
genericVariants.add(match[0]);
|
|
@@ -673,6 +1158,7 @@ export default function mergeInDependentDataStructure({ importedExports, depende
|
|
|
673
1158
|
// create corresponding paths for each generic variant
|
|
674
1159
|
const pathsToAdd = [];
|
|
675
1160
|
for (const path in returnValueSchema) {
|
|
1161
|
+
checkDeadline();
|
|
676
1162
|
const value = returnValueSchema[path];
|
|
677
1163
|
// Handle returnValue. paths
|
|
678
1164
|
if (path.startsWith('returnValue.')) {
|
|
@@ -719,6 +1205,7 @@ export default function mergeInDependentDataStructure({ importedExports, depende
|
|
|
719
1205
|
// This includes both returnValue. (dot) and returnValue[ (array) paths.
|
|
720
1206
|
const pathsToNormalize = [];
|
|
721
1207
|
for (const path in depSchema.returnValueSchema) {
|
|
1208
|
+
checkDeadline();
|
|
722
1209
|
if (path === 'returnValue' ||
|
|
723
1210
|
path.startsWith('returnValue.') ||
|
|
724
1211
|
path.startsWith('returnValue[')) {
|
|
@@ -740,10 +1227,19 @@ export default function mergeInDependentDataStructure({ importedExports, depende
|
|
|
740
1227
|
// e.g., returnValue[].label -> getOptions().functionCallReturnValue[].label
|
|
741
1228
|
normalizedPath = path.replace(/^returnValue/, `${dependency.name}().functionCallReturnValue`);
|
|
742
1229
|
}
|
|
1230
|
+
transformationTracer.operation(rootScopeName, {
|
|
1231
|
+
operation: 'normalizeReturnValuePath',
|
|
1232
|
+
stage: 'merged',
|
|
1233
|
+
path: normalizedPath,
|
|
1234
|
+
before: path,
|
|
1235
|
+
after: normalizedPath,
|
|
1236
|
+
context: { dependency: dependency.name, value },
|
|
1237
|
+
});
|
|
743
1238
|
depSchema.returnValueSchema[normalizedPath] = value;
|
|
744
1239
|
}
|
|
745
1240
|
// Now copy paths from the source schema (dependencySchemas)
|
|
746
1241
|
for (const path in srcSchema.returnValueSchema) {
|
|
1242
|
+
checkDeadline();
|
|
747
1243
|
const value = srcSchema.returnValueSchema[path];
|
|
748
1244
|
// Normalize paths starting with 'returnValue' to use the standard format:
|
|
749
1245
|
// 'returnValue.foo' -> 'dependencyName().functionCallReturnValue.foo'
|
|
@@ -806,7 +1302,10 @@ export default function mergeInDependentDataStructure({ importedExports, depende
|
|
|
806
1302
|
}
|
|
807
1303
|
}
|
|
808
1304
|
}
|
|
809
|
-
cleanSchema(depSchema.returnValueSchema
|
|
1305
|
+
cleanSchema(depSchema.returnValueSchema, {
|
|
1306
|
+
stage: 'afterMockedDependencyMerge',
|
|
1307
|
+
dependency: dependency.name,
|
|
1308
|
+
});
|
|
810
1309
|
// Pull signature requirements from downstream functions into the mocked return value.
|
|
811
1310
|
// When a mocked function's return flows into another function's signature (via usageEquivalencies),
|
|
812
1311
|
// we need to include that function's signature requirements in the mock.
|
|
@@ -871,7 +1370,10 @@ export default function mergeInDependentDataStructure({ importedExports, depende
|
|
|
871
1370
|
}
|
|
872
1371
|
}
|
|
873
1372
|
}
|
|
874
|
-
cleanSchema(depSchema.returnValueSchema
|
|
1373
|
+
cleanSchema(depSchema.returnValueSchema, {
|
|
1374
|
+
stage: 'afterSignatureRequirementsMerge',
|
|
1375
|
+
dependency: dependency.name,
|
|
1376
|
+
});
|
|
875
1377
|
}
|
|
876
1378
|
// Process the input dependencySchemas FIRST (before child dependentAnalyses).
|
|
877
1379
|
// This ensures the parent entity's direct usage of dependencies takes precedence.
|
|
@@ -898,16 +1400,50 @@ export default function mergeInDependentDataStructure({ importedExports, depende
|
|
|
898
1400
|
if (!existingSchema) {
|
|
899
1401
|
const depSchema = findOrCreateDependentSchemas({ filePath, name });
|
|
900
1402
|
for (const path in srcSchema.returnValueSchema) {
|
|
1403
|
+
checkDeadline();
|
|
901
1404
|
depSchema.returnValueSchema[path] = srcSchema.returnValueSchema[path];
|
|
902
1405
|
}
|
|
903
1406
|
for (const path in srcSchema.signatureSchema) {
|
|
1407
|
+
checkDeadline();
|
|
904
1408
|
depSchema.signatureSchema[path] = srcSchema.signatureSchema[path];
|
|
905
1409
|
}
|
|
906
1410
|
// Clean known object functions (like String.prototype.replace, Array.prototype.map)
|
|
907
1411
|
// from the copied schema. Without this, method call paths on primitives like
|
|
908
1412
|
// "projectSlug.replace(...)" would cause convertDotNotation to create nested
|
|
909
1413
|
// object structures instead of preserving the primitive type.
|
|
910
|
-
cleanSchema(depSchema.returnValueSchema
|
|
1414
|
+
cleanSchema(depSchema.returnValueSchema, {
|
|
1415
|
+
stage: 'afterDependencySchemaCopy',
|
|
1416
|
+
filePath,
|
|
1417
|
+
dependency: name,
|
|
1418
|
+
});
|
|
1419
|
+
}
|
|
1420
|
+
// TYPE REFINEMENT: Check if dependentAnalyses has a more specific type for this dependency.
|
|
1421
|
+
// When a parent passes `entity.filePath` (string | undefined) to a child component
|
|
1422
|
+
// that requires `filePath: string`, we should use the child's more specific type.
|
|
1423
|
+
// This prevents mock data from having undefined values for required props.
|
|
1424
|
+
//
|
|
1425
|
+
// This runs REGARDLESS of whether equivalencies already processed the schema,
|
|
1426
|
+
// because equivalencies copy the parent's type (string | undefined), not the child's
|
|
1427
|
+
// required type (string).
|
|
1428
|
+
const depSchema = findOrCreateDependentSchemas({ filePath, name });
|
|
1429
|
+
const childAnalysis = dependentAnalyses[filePath]?.[name];
|
|
1430
|
+
const childSignatureSchema = childAnalysis?.metadata?.mergedDataStructure?.signatureSchema;
|
|
1431
|
+
if (childSignatureSchema) {
|
|
1432
|
+
for (const path in depSchema.signatureSchema) {
|
|
1433
|
+
checkDeadline();
|
|
1434
|
+
const parentType = depSchema.signatureSchema[path];
|
|
1435
|
+
const childType = childSignatureSchema[path];
|
|
1436
|
+
if (parentType && childType) {
|
|
1437
|
+
// Check if parent has optional type and child has required type
|
|
1438
|
+
const parentIsOptional = parentType.includes('| undefined') ||
|
|
1439
|
+
parentType.includes('| null');
|
|
1440
|
+
const childIsOptional = childType.includes('| undefined') || childType.includes('| null');
|
|
1441
|
+
// If child requires a more specific type (not optional), use it
|
|
1442
|
+
if (parentIsOptional && !childIsOptional) {
|
|
1443
|
+
depSchema.signatureSchema[path] = childType;
|
|
1444
|
+
}
|
|
1445
|
+
}
|
|
1446
|
+
}
|
|
911
1447
|
}
|
|
912
1448
|
// For functions with multiple different type parameters, also create separate entries
|
|
913
1449
|
// for each type-parameterized variant. This allows gatherDataForMocks to look up
|
|
@@ -934,12 +1470,18 @@ export default function mergeInDependentDataStructure({ importedExports, depende
|
|
|
934
1470
|
});
|
|
935
1471
|
// Copy only paths that belong to this variant
|
|
936
1472
|
for (const path in srcSchema.returnValueSchema) {
|
|
1473
|
+
checkDeadline();
|
|
937
1474
|
if (path.startsWith(variant)) {
|
|
938
1475
|
variantSchema.returnValueSchema[path] =
|
|
939
1476
|
srcSchema.returnValueSchema[path];
|
|
940
1477
|
}
|
|
941
1478
|
}
|
|
942
|
-
cleanSchema(variantSchema.returnValueSchema
|
|
1479
|
+
cleanSchema(variantSchema.returnValueSchema, {
|
|
1480
|
+
stage: 'afterTypeVariantCopy',
|
|
1481
|
+
filePath,
|
|
1482
|
+
dependency: name,
|
|
1483
|
+
variant,
|
|
1484
|
+
});
|
|
943
1485
|
}
|
|
944
1486
|
}
|
|
945
1487
|
}
|
|
@@ -950,6 +1492,7 @@ export default function mergeInDependentDataStructure({ importedExports, depende
|
|
|
950
1492
|
// EXCEPT: Skip mocked dependencies - we don't want their internal implementation details.
|
|
951
1493
|
for (const filePath in dependentAnalyses) {
|
|
952
1494
|
for (const name in dependentAnalyses[filePath]) {
|
|
1495
|
+
checkDeadline();
|
|
953
1496
|
const dependentMergedDataStructure = dependentAnalyses[filePath][name].metadata?.mergedDataStructure;
|
|
954
1497
|
if (!dependentMergedDataStructure)
|
|
955
1498
|
continue;
|
|
@@ -962,6 +1505,7 @@ export default function mergeInDependentDataStructure({ importedExports, depende
|
|
|
962
1505
|
// Copy over all paths from the dependent's returnValueSchema
|
|
963
1506
|
// Only add paths that don't already exist (don't overwrite values set by equivalencies)
|
|
964
1507
|
for (const path in dependentMergedDataStructure.returnValueSchema) {
|
|
1508
|
+
checkDeadline();
|
|
965
1509
|
const translatedPath = translatePath(path, name);
|
|
966
1510
|
if (!(translatedPath in depSchema.returnValueSchema)) {
|
|
967
1511
|
depSchema.returnValueSchema[translatedPath] =
|
|
@@ -970,6 +1514,7 @@ export default function mergeInDependentDataStructure({ importedExports, depende
|
|
|
970
1514
|
}
|
|
971
1515
|
// Copy over signature schema as well
|
|
972
1516
|
for (const path in dependentMergedDataStructure.signatureSchema) {
|
|
1517
|
+
checkDeadline();
|
|
973
1518
|
const translatedPath = translatePath(path, name);
|
|
974
1519
|
if (!(translatedPath in depSchema.signatureSchema)) {
|
|
975
1520
|
depSchema.signatureSchema[translatedPath] =
|
|
@@ -989,12 +1534,14 @@ export default function mergeInDependentDataStructure({ importedExports, depende
|
|
|
989
1534
|
});
|
|
990
1535
|
// Merge in the nested dependency schemas
|
|
991
1536
|
for (const path in nestedDepSchema.returnValueSchema) {
|
|
1537
|
+
checkDeadline();
|
|
992
1538
|
if (!(path in targetDepSchema.returnValueSchema)) {
|
|
993
|
-
|
|
994
|
-
|
|
1539
|
+
const value = nestedDepSchema.returnValueSchema[path];
|
|
1540
|
+
targetDepSchema.returnValueSchema[path] = value;
|
|
995
1541
|
}
|
|
996
1542
|
}
|
|
997
1543
|
for (const path in nestedDepSchema.signatureSchema) {
|
|
1544
|
+
checkDeadline();
|
|
998
1545
|
if (!(path in targetDepSchema.signatureSchema)) {
|
|
999
1546
|
targetDepSchema.signatureSchema[path] =
|
|
1000
1547
|
nestedDepSchema.signatureSchema[path];
|
|
@@ -1005,6 +1552,12 @@ export default function mergeInDependentDataStructure({ importedExports, depende
|
|
|
1005
1552
|
}
|
|
1006
1553
|
}
|
|
1007
1554
|
}
|
|
1555
|
+
const totalElapsed = Date.now() - mergeStartTime;
|
|
1556
|
+
const retKeys = Object.keys(mergedDataStructure.returnValueSchema).length;
|
|
1557
|
+
// Only log phase breakdown for slow merges (>2s)
|
|
1558
|
+
if (totalElapsed > 2000) {
|
|
1559
|
+
console.log(`CodeYam Log Level 2: ${rootScopeName} merge phases: gather=${gatherElapsed}ms mergeESP=${mergeEspElapsed - gatherElapsed}ms postfix=${postfixElapsed - mergeEspElapsed}ms clean=${cleanElapsed - postfixElapsed}ms depCopy=${totalElapsed - cleanElapsed}ms total=${totalElapsed}ms ret=${retKeys}`);
|
|
1560
|
+
}
|
|
1008
1561
|
return mergedDataStructure;
|
|
1009
1562
|
}
|
|
1010
1563
|
//# sourceMappingURL=mergeInDependentDataStructure.js.map
|