@codeyam/codeyam-cli 0.1.0-staging.483fdc2 → 0.1.0-staging.49751cb
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 +24 -24
- package/analyzer-template/packages/ai/index.ts +1 -0
- package/analyzer-template/packages/ai/package.json +3 -3
- package/analyzer-template/packages/ai/src/lib/analyzeScope.ts +23 -1
- package/analyzer-template/packages/ai/src/lib/astScopes/astScopeAnalyzer.ts +34 -3
- package/analyzer-template/packages/ai/src/lib/astScopes/methodSemantics.ts +135 -0
- package/analyzer-template/packages/ai/src/lib/astScopes/nodeToSource.ts +19 -0
- package/analyzer-template/packages/ai/src/lib/astScopes/paths.ts +11 -4
- package/analyzer-template/packages/ai/src/lib/astScopes/patterns/forInStatementHandler.ts +10 -17
- package/analyzer-template/packages/ai/src/lib/astScopes/processExpression.ts +101 -0
- package/analyzer-template/packages/ai/src/lib/astScopes/sharedPatterns.ts +28 -0
- package/analyzer-template/packages/ai/src/lib/astScopes/types.ts +6 -0
- package/analyzer-template/packages/ai/src/lib/completionCall.ts +114 -113
- package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +624 -22
- 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/cleanKnownObjectFunctions.ts +27 -8
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.ts +2 -2
- 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 +20 -1
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.ts +84 -19
- 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 +124 -7
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlows.ts +101 -2
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionals.ts +359 -142
- 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/promptGenerators/collapseNullableObjects.ts +118 -0
- package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.ts +24 -4
- package/analyzer-template/packages/analyze/index.ts +6 -1
- package/analyzer-template/packages/analyze/src/lib/ProjectAnalyzer.ts +19 -7
- 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/files/analyze/analyzeEntities/prepareDataStructures.ts +97 -5
- package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities.ts +18 -36
- 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 +9 -12
- 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 -10
- 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/scenarios/TransformationTracer.ts +1352 -0
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.ts +4 -0
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.ts +59 -26
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +467 -24
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.ts +0 -98
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +1750 -1194
- package/analyzer-template/packages/analyze/src/lib/index.ts +1 -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 +25 -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 +7 -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/package.json +1 -1
- 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/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/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 +206 -51
- package/analyzer-template/project/orchestrateCapture.ts +4 -1
- package/analyzer-template/project/reconcileMockDataKeys.ts +19 -14
- package/analyzer-template/project/runMultiScenarioServer.ts +26 -3
- 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 +136 -17
- 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 +175 -42
- 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/runMultiScenarioServer.js +23 -3
- package/background/src/lib/virtualized/project/runMultiScenarioServer.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 +114 -13
- 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 +252 -21
- 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.analyzeImportsArgs.test.js +47 -0
- package/codeyam-cli/src/commands/__tests__/editor.analyzeImportsArgs.test.js.map +1 -0
- package/codeyam-cli/src/commands/__tests__/editor.auditNoAutoAnalysis.test.js +71 -0
- package/codeyam-cli/src/commands/__tests__/editor.auditNoAutoAnalysis.test.js.map +1 -0
- package/codeyam-cli/src/commands/__tests__/editor.designSystem.test.js +30 -0
- package/codeyam-cli/src/commands/__tests__/editor.designSystem.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.statePersistence.test.js +55 -0
- package/codeyam-cli/src/commands/__tests__/editor.statePersistence.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 +137 -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 +2 -0
- 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 +6313 -0
- package/codeyam-cli/src/commands/editor.js.map +1 -0
- package/codeyam-cli/src/commands/editorAnalyzeImportsArgs.js +23 -0
- package/codeyam-cli/src/commands/editorAnalyzeImportsArgs.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 +168 -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/designSystems.js +27 -0
- package/codeyam-cli/src/data/designSystems.js.map +1 -0
- 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 +226 -0
- package/codeyam-cli/src/utils/__tests__/devServerState.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorApi.test.js +181 -0
- package/codeyam-cli/src/utils/__tests__/editorApi.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorAudit.test.js +4160 -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 +250 -0
- package/codeyam-cli/src/utils/__tests__/editorProxySession.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorRoadmap.test.js +1108 -0
- package/codeyam-cli/src/utils/__tests__/editorRoadmap.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 +411 -0
- package/codeyam-cli/src/utils/__tests__/editorScenarioSwitch.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js +1768 -0
- package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorSeedAdapter.test.js +413 -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__/envFile.test.js +125 -0
- package/codeyam-cli/src/utils/__tests__/envFile.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__/handoffContext.test.js +500 -0
- package/codeyam-cli/src/utils/__tests__/handoffContext.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 +216 -0
- package/codeyam-cli/src/utils/__tests__/testRunner.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/webappDetection.test.js +148 -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/designSystemShowcase.js +810 -0
- package/codeyam-cli/src/utils/designSystemShowcase.js.map +1 -0
- 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 +103 -0
- package/codeyam-cli/src/utils/devServerState.js.map +1 -0
- package/codeyam-cli/src/utils/editorApi.js +95 -0
- package/codeyam-cli/src/utils/editorApi.js.map +1 -0
- package/codeyam-cli/src/utils/editorAudit.js +849 -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/editorRoadmap.js +574 -0
- package/codeyam-cli/src/utils/editorRoadmap.js.map +1 -0
- package/codeyam-cli/src/utils/editorScenarioSwitch.js +149 -0
- package/codeyam-cli/src/utils/editorScenarioSwitch.js.map +1 -0
- package/codeyam-cli/src/utils/editorScenarios.js +687 -0
- package/codeyam-cli/src/utils/editorScenarios.js.map +1 -0
- package/codeyam-cli/src/utils/editorSeedAdapter.js +475 -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 +227 -0
- package/codeyam-cli/src/utils/entityChangeStatus.server.js.map +1 -0
- package/codeyam-cli/src/utils/envFile.js +90 -0
- package/codeyam-cli/src/utils/envFile.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/handoffContext.js +257 -0
- package/codeyam-cli/src/utils/handoffContext.js.map +1 -0
- package/codeyam-cli/src/utils/install-skills.js +145 -56
- 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__/job.interactiveStart.test.js +159 -0
- package/codeyam-cli/src/utils/queue/__tests__/job.interactiveStart.test.js.map +1 -0
- 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 +109 -7
- 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 +313 -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/techStackConfig.js +38 -0
- package/codeyam-cli/src/utils/techStackConfig.js.map +1 -0
- package/codeyam-cli/src/utils/techStackConfig.test.js +85 -0
- package/codeyam-cli/src/utils/techStackConfig.test.js.map +1 -0
- 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/testResultCache.js +53 -0
- package/codeyam-cli/src/utils/testResultCache.js.map +1 -0
- package/codeyam-cli/src/utils/testResultCache.server.js +81 -0
- package/codeyam-cli/src/utils/testResultCache.server.js.map +1 -0
- package/codeyam-cli/src/utils/testResultCache.server.test.js +187 -0
- package/codeyam-cli/src/utils/testResultCache.server.test.js.map +1 -0
- package/codeyam-cli/src/utils/testResultCache.test.js +230 -0
- package/codeyam-cli/src/utils/testResultCache.test.js.map +1 -0
- package/codeyam-cli/src/utils/testRunner.js +350 -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 +38 -3
- package/codeyam-cli/src/utils/webappDetection.js.map +1 -1
- package/codeyam-cli/src/webserver/__tests__/api.interactive-switch-scenario.test.js +99 -0
- package/codeyam-cli/src/webserver/__tests__/api.interactive-switch-scenario.test.js.map +1 -0
- package/codeyam-cli/src/webserver/__tests__/buildPtyEnv.test.js +153 -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 +1000 -0
- package/codeyam-cli/src/webserver/__tests__/editorProxy.test.js.map +1 -0
- package/codeyam-cli/src/webserver/__tests__/idleDetector.test.js +315 -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/routes/api.interactive-switch-scenario.js +34 -0
- package/codeyam-cli/src/webserver/app/routes/api.interactive-switch-scenario.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-DTBZZfSk.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{EntityItem-DsN1wKrm.js → EntityItem-BxclONWq.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-BsnEOJZ_.js} +9 -9
- package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-ByaELMbv.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/InteractivePreview-6WjVfhxX.js +25 -0
- package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-ChX-Hp7W.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-C-9zQdXg.js} +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/MiniClaudeChat-Bs2_Oua4.js +36 -0
- package/codeyam-cli/src/webserver/build/client/assets/{ReportIssueModal-OApQuNyq.js → ReportIssueModal-DQsceHVv.js} +5 -10
- package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-DThcm_9M.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-DzccYyI8.js → ScenarioViewer-Cl4oOA3A.js} +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/Spinner-CIil5-gb.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-BqkA9zyZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{_index-BwqWJOgH.js → _index-DnOgyseQ.js} +4 -4
- package/codeyam-cli/src/webserver/build/client/assets/{activity.(_tab)-BwavGCpm.js → activity.(_tab)-DqM9hbNE.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-C58dYPwR.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-B8NCeOrm.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-database-verify-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-github-verify-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-handoff-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-hosting-verify-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-roadmap-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.editor-verify-routes-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.interactive-switch-scenario-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-BFSIqZgO.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/{chevron-down-Cx24_aWc.js → chevron-down-B9fDzFVh.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/chunk-UVKPFVEO-Bmq2apuh.js +43 -0
- package/codeyam-cli/src/webserver/build/client/assets/{circle-check-BOARzkeR.js → circle-check-DLPObLUx.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/copy-DXEmO0TD.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-BwyFiRot.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-iRhRIFlp.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/editor._tab-BZPBzV73.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/editor.entity.(_sha)-DhtVC4aI.js +161 -0
- package/codeyam-cli/src/webserver/build/client/assets/editorPreview-C6fEYHrh.js +41 -0
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-BJUiQqZF.js → entity._sha._-pc-vc6wO.js} +14 -13
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.dev-C8AyYgYT.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-DziaVQX1.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-BTcpgIpC.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.edit._scenarioId-CTBG2mmz.js → entity._sha_.edit._scenarioId-D_O_ajfZ.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/{entry.client-CS2cb_eZ.js → entry.client-j1Vi0bco.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-kuny2Q_s.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/git-DgCZPMie.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/globals-L-aUIeux.css +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{index-lzqtyFU8.js → index-BliGSSpl.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/index-SqjQKTdH.js +15 -0
- package/codeyam-cli/src/webserver/build/client/assets/{index-B1h680n5.js → index-vyrZD2g4.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/jsx-runtime-D_zvdyIk.js +9 -0
- package/codeyam-cli/src/webserver/build/client/assets/labs-c3yLxSEp.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-B7B9V-bu.js → loader-circle-D-q28GLF.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/manifest-79d0d81a.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/memory-CEWIUC4t.js +101 -0
- package/codeyam-cli/src/webserver/build/client/assets/pause-BP6fitdh.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/root-L2V0jea7.js +80 -0
- package/codeyam-cli/src/webserver/build/client/assets/{search-CxXUmBSd.js → search-BooqacKS.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/settings-BM0nbryO.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/simulations-ovy6FjRY.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/terminal-DHemCJIs.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/{triangle-alert-B6LgvRJg.js → triangle-alert-D87ekDl8.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-Dk0Tciqg.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/useLastLogLine-C8QvIe05.js +2 -0
- package/codeyam-cli/src/webserver/build/client/assets/useReportContext-jkCytuYz.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/useToast-BgqkixU9.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-QgInFGdU.js +16 -0
- package/codeyam-cli/src/webserver/build/server/assets/index-zblh9auj.js +1 -0
- package/codeyam-cli/src/webserver/build/server/assets/init-DaE0CBjk.js +14 -0
- package/codeyam-cli/src/webserver/build/server/assets/progress-CHTtrxFG.js +1 -0
- package/codeyam-cli/src/webserver/build/server/assets/server-build-CNvgz1cC.js +853 -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 +1263 -0
- package/codeyam-cli/src/webserver/editorProxy.js.map +1 -0
- package/codeyam-cli/src/webserver/idleDetector.js +130 -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 +446 -1
- package/codeyam-cli/src/webserver/server.js.map +1 -1
- package/codeyam-cli/src/webserver/terminalServer.js +1043 -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-codex.md +61 -0
- package/codeyam-cli/templates/codeyam-editor-gemini.md +59 -0
- package/codeyam-cli/templates/codeyam-editor-reference.md +216 -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/design-systems/clean-dashboard-design-system.md +255 -0
- package/codeyam-cli/templates/design-systems/editorial-design-system.md +267 -0
- package/codeyam-cli/templates/design-systems/mono-brutalist-design-system.md +256 -0
- package/codeyam-cli/templates/design-systems/neo-brutalist-design-system.md +294 -0
- package/codeyam-cli/templates/editor-step-hook.py +368 -0
- package/codeyam-cli/templates/expo-react-native/MOBILE_SETUP.md +288 -0
- package/codeyam-cli/templates/expo-react-native/README.md +41 -0
- package/codeyam-cli/templates/expo-react-native/__tests__/.gitkeep +0 -0
- package/codeyam-cli/templates/expo-react-native/app/_layout.tsx +15 -0
- package/codeyam-cli/templates/expo-react-native/app/index.tsx +36 -0
- package/codeyam-cli/templates/expo-react-native/app.json +29 -0
- package/codeyam-cli/templates/expo-react-native/babel.config.js +10 -0
- package/codeyam-cli/templates/expo-react-native/gitignore +14 -0
- package/codeyam-cli/templates/expo-react-native/global.css +10 -0
- package/codeyam-cli/templates/expo-react-native/lib/storage.ts +32 -0
- package/codeyam-cli/templates/expo-react-native/lib/theme.ts +73 -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 +54 -0
- package/codeyam-cli/templates/expo-react-native/patches/expo-modules-autolinking+3.0.24.patch +29 -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/expo-router.tsx.template +54 -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 +65 -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 +140 -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 +574 -88
- package/codeyam-cli/templates/rules-instructions.md +45 -93
- package/codeyam-cli/templates/seed-adapters/supabase.ts +475 -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 +244 -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 +1 -1
- package/packages/ai/index.js.map +1 -1
- package/packages/ai/src/lib/analyzeScope.js +21 -1
- package/packages/ai/src/lib/analyzeScope.js.map +1 -1
- package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js +22 -4
- package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js.map +1 -1
- package/packages/ai/src/lib/astScopes/methodSemantics.js +99 -0
- package/packages/ai/src/lib/astScopes/methodSemantics.js.map +1 -1
- package/packages/ai/src/lib/astScopes/nodeToSource.js +16 -0
- package/packages/ai/src/lib/astScopes/nodeToSource.js.map +1 -1
- package/packages/ai/src/lib/astScopes/paths.js +12 -3
- package/packages/ai/src/lib/astScopes/paths.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 +78 -1
- 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 +522 -20
- 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/cleanKnownObjectFunctions.js +25 -6
- package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js +2 -2
- 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 +15 -1
- package/packages/ai/src/lib/dataStructure/helpers/convertTypeAnnotationsToValues.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js +78 -17
- 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 +89 -5
- package/packages/ai/src/lib/generateEntityScenarioData.js.map +1 -1
- package/packages/ai/src/lib/generateExecutionFlows.js +86 -2
- package/packages/ai/src/lib/generateExecutionFlows.js.map +1 -1
- package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js +242 -81
- 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/promptGenerators/collapseNullableObjects.js +97 -0
- package/packages/ai/src/lib/promptGenerators/collapseNullableObjects.js.map +1 -0
- package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js +17 -2
- package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js.map +1 -1
- package/packages/analyze/index.js +2 -1
- package/packages/analyze/index.js.map +1 -1
- package/packages/analyze/src/lib/ProjectAnalyzer.js +13 -4
- 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/files/analyze/analyzeEntities/prepareDataStructures.js +68 -4
- package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/analyzeEntities.js +16 -26
- 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 +9 -7
- 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 -11
- 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/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 +5 -1
- package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js +51 -14
- package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +279 -19
- package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js +0 -40
- package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +1410 -956
- package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.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/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 +7 -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/reviewedRules.js +0 -92
- package/codeyam-cli/src/utils/reviewedRules.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-CX9f-5xM.css +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/manifest-bba56ec1.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/memory-DuTFSyJ2.js +0 -92
- package/codeyam-cli/src/webserver/build/client/assets/root-DTfSQARG.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-TD1f-DHV.js +0 -1
- package/codeyam-cli/src/webserver/build/server/assets/server-build-BQ-1XyEa.js +0 -258
- 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 -403
- package/codeyam-cli/templates/codeyam:new-rule.md +0 -52
- package/scripts/finalize-analyzer.cjs +0 -81
|
@@ -397,6 +397,8 @@ const SILENTLY_IGNORED_EQUIVALENCY_REASONS = new Set([
|
|
|
397
397
|
'transformed non-object function equivalency - implicit parent equivalency - rerouted via useCallback',
|
|
398
398
|
'transformed non-object function equivalency - Array.from() equivalency',
|
|
399
399
|
'Spread operator equivalency key update: Explicit array deconstruction equivalency value',
|
|
400
|
+
// 'transformed non-object function equivalency - Explicit array deconstruction equivalency value',
|
|
401
|
+
'useState setter call equivalency (direct)',
|
|
400
402
|
]);
|
|
401
403
|
|
|
402
404
|
export class ScopeDataStructure {
|
|
@@ -799,6 +801,11 @@ export class ScopeDataStructure {
|
|
|
799
801
|
return;
|
|
800
802
|
}
|
|
801
803
|
|
|
804
|
+
// PERF: Early exit for paths with repeated function-call signature patterns
|
|
805
|
+
if (this.hasExcessivePatternRepetition(path)) {
|
|
806
|
+
return;
|
|
807
|
+
}
|
|
808
|
+
|
|
802
809
|
// Update chain metadata for database tracking
|
|
803
810
|
if (equivalencyValueChain.length > 0) {
|
|
804
811
|
equivalencyValueChain[equivalencyValueChain.length - 1].addToSchemaId =
|
|
@@ -1042,9 +1049,38 @@ export class ScopeDataStructure {
|
|
|
1042
1049
|
equivalencyValueChain?: EquivalencyValueChainItem[],
|
|
1043
1050
|
traceId?: number,
|
|
1044
1051
|
) {
|
|
1052
|
+
// Fast early exits that don't count toward the limit.
|
|
1053
|
+
// These are "no-op" calls that would be caught further below anyway,
|
|
1054
|
+
// but checking them first prevents counter inflation from redundant calls
|
|
1055
|
+
// generated by managers and followEquivalencies during scope processing.
|
|
1056
|
+
|
|
1057
|
+
// Skip silently-ignored reasons before counting
|
|
1058
|
+
if (SILENTLY_IGNORED_EQUIVALENCY_REASONS.has(equivalencyReason)) {
|
|
1059
|
+
return;
|
|
1060
|
+
}
|
|
1061
|
+
|
|
1062
|
+
// Skip exact duplicates before counting (Phase 1 only — Phase 2 needs
|
|
1063
|
+
// to process duplicates for database chain tracking)
|
|
1064
|
+
if (this.onlyEquivalencies) {
|
|
1065
|
+
const existing = scopeNode.equivalencies[path];
|
|
1066
|
+
if (
|
|
1067
|
+
existing?.some(
|
|
1068
|
+
(v) =>
|
|
1069
|
+
v.schemaPath === equivalentPath &&
|
|
1070
|
+
v.scopeNodeName === equivalentScopeName,
|
|
1071
|
+
)
|
|
1072
|
+
) {
|
|
1073
|
+
return;
|
|
1074
|
+
}
|
|
1075
|
+
}
|
|
1076
|
+
|
|
1045
1077
|
addEquivalencyCallCount++;
|
|
1046
1078
|
|
|
1047
|
-
|
|
1079
|
+
const limit =
|
|
1080
|
+
typeof (globalThis as any).__CODEYAM_EQUIVALENCY_LIMIT === 'number'
|
|
1081
|
+
? (globalThis as any).__CODEYAM_EQUIVALENCY_LIMIT
|
|
1082
|
+
: 50000;
|
|
1083
|
+
if (addEquivalencyCallCount > limit) {
|
|
1048
1084
|
console.error('INFINITE LOOP DETECTED in addEquivalency', {
|
|
1049
1085
|
callCount: addEquivalencyCallCount,
|
|
1050
1086
|
path,
|
|
@@ -1059,14 +1095,11 @@ export class ScopeDataStructure {
|
|
|
1059
1095
|
}
|
|
1060
1096
|
// Filter equivalency reasons - use pre-computed Sets for O(1) lookup
|
|
1061
1097
|
if (!ALLOWED_EQUIVALENCY_REASONS.has(equivalencyReason)) {
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
console.info('Not tracked equivalency reason', { equivalencyReason });
|
|
1068
|
-
return;
|
|
1069
|
-
}
|
|
1098
|
+
// Silently-ignored reasons already handled above
|
|
1099
|
+
// Log and skip - if an equivalency reason isn't in ALLOWED or SILENTLY_IGNORED,
|
|
1100
|
+
// it shouldn't be stored (was previously missing the return)
|
|
1101
|
+
console.info('Not tracked equivalency reason', { equivalencyReason });
|
|
1102
|
+
return;
|
|
1070
1103
|
}
|
|
1071
1104
|
|
|
1072
1105
|
// Skip self-referential equivalencies that would create infinite loops.
|
|
@@ -1102,6 +1135,33 @@ export class ScopeDataStructure {
|
|
|
1102
1135
|
return;
|
|
1103
1136
|
}
|
|
1104
1137
|
|
|
1138
|
+
// Case 3: Circular reference through scope-suffixed names (____cyScope pattern)
|
|
1139
|
+
// When a named arrow function is defined inside a scope (e.g., useEffect callback):
|
|
1140
|
+
// const identifyUser = async () => { ... };
|
|
1141
|
+
// identifyUser();
|
|
1142
|
+
// This creates a variable "identifyUser" and a scope "identifyUser____cyScope9F".
|
|
1143
|
+
// Mutual equivalencies between these cause infinite loops in Phase 2 because
|
|
1144
|
+
// processing one triggers addToSchema → followEquivalencies → addEquivalency
|
|
1145
|
+
// on the reverse, which repeats indefinitely.
|
|
1146
|
+
// Only block when the REVERSE direction already exists (creating a cycle).
|
|
1147
|
+
// The initial one-directional equivalency is necessary for scope resolution.
|
|
1148
|
+
if (
|
|
1149
|
+
path &&
|
|
1150
|
+
equivalentPath &&
|
|
1151
|
+
(equivalentPath.startsWith(path + '____') ||
|
|
1152
|
+
path.startsWith(equivalentPath + '____'))
|
|
1153
|
+
) {
|
|
1154
|
+
// Check if the reverse equivalency already exists
|
|
1155
|
+
const reverseEquivalencies =
|
|
1156
|
+
scopeNode.equivalencies[equivalentPath] || [];
|
|
1157
|
+
const reverseExists = reverseEquivalencies.some(
|
|
1158
|
+
(v) => v.schemaPath === path,
|
|
1159
|
+
);
|
|
1160
|
+
if (reverseExists) {
|
|
1161
|
+
return;
|
|
1162
|
+
}
|
|
1163
|
+
}
|
|
1164
|
+
|
|
1105
1165
|
if (!equivalentScopeName) {
|
|
1106
1166
|
console.error(
|
|
1107
1167
|
'CodeYam Error: Missing equivalent scope name - FULL CONTEXT:',
|
|
@@ -1486,6 +1546,15 @@ export class ScopeDataStructure {
|
|
|
1486
1546
|
|
|
1487
1547
|
const bestValue = selectBestValue(value1, value2);
|
|
1488
1548
|
|
|
1549
|
+
// PERF: Skip paths with repeated function-call signature patterns
|
|
1550
|
+
// to prevent recursive type expansion (e.g., string.localeCompare returns string)
|
|
1551
|
+
if (
|
|
1552
|
+
this.hasExcessivePatternRepetition(schemaPath) ||
|
|
1553
|
+
this.hasExcessivePatternRepetition(equivalentSchemaPath)
|
|
1554
|
+
) {
|
|
1555
|
+
continue;
|
|
1556
|
+
}
|
|
1557
|
+
|
|
1489
1558
|
scopeNode.schema[schemaPath] = bestValue;
|
|
1490
1559
|
equivalentScopeNode.schema[equivalentSchemaPath] = bestValue;
|
|
1491
1560
|
} else if (
|
|
@@ -1499,6 +1568,11 @@ export class ScopeDataStructure {
|
|
|
1499
1568
|
...remainingSchemaPathParts,
|
|
1500
1569
|
]);
|
|
1501
1570
|
|
|
1571
|
+
// PERF: Skip paths with repeated function-call signature patterns
|
|
1572
|
+
if (this.hasExcessivePatternRepetition(newEquivalentPath)) {
|
|
1573
|
+
continue;
|
|
1574
|
+
}
|
|
1575
|
+
|
|
1502
1576
|
equivalentScopeNode.schema[newEquivalentPath] =
|
|
1503
1577
|
scopeNode.schema[schemaPath];
|
|
1504
1578
|
}
|
|
@@ -1618,6 +1692,23 @@ export class ScopeDataStructure {
|
|
|
1618
1692
|
}
|
|
1619
1693
|
}
|
|
1620
1694
|
|
|
1695
|
+
// Check for repeated function calls that indicate recursive type expansion.
|
|
1696
|
+
// E.g., localeCompare(b[])...localeCompare(b[]) means string.localeCompare
|
|
1697
|
+
// returns a type that again has localeCompare, causing infinite expansion.
|
|
1698
|
+
// We extract all function call patterns like "funcName(args)" and check if
|
|
1699
|
+
// the same normalized call appears more than once.
|
|
1700
|
+
const funcCallPattern = /(?:^|\.)[^.([]+\([^)]*\)/g;
|
|
1701
|
+
const funcCallMatches = path.match(funcCallPattern);
|
|
1702
|
+
if (funcCallMatches && funcCallMatches.length > 1) {
|
|
1703
|
+
const seen = new Set<string>();
|
|
1704
|
+
for (const match of funcCallMatches) {
|
|
1705
|
+
// Strip leading dot and normalize array indices
|
|
1706
|
+
const normalized = match.replace(/^\./, '').replace(/\[\d+\]/g, '[]');
|
|
1707
|
+
if (seen.has(normalized)) return true;
|
|
1708
|
+
seen.add(normalized);
|
|
1709
|
+
}
|
|
1710
|
+
}
|
|
1711
|
+
|
|
1621
1712
|
// For longer paths, detect any repeated multi-part segments we haven't explicitly listed
|
|
1622
1713
|
const pathParts = this.splitPath(path);
|
|
1623
1714
|
if (pathParts.length <= 6) {
|
|
@@ -2574,6 +2665,7 @@ export class ScopeDataStructure {
|
|
|
2574
2665
|
relevantSubPathParts.every((part, i) => part === schemaPathParts[i]) &&
|
|
2575
2666
|
equivalentValue.scopeNodeName === scopeNode.name
|
|
2576
2667
|
) {
|
|
2668
|
+
// DEBUG
|
|
2577
2669
|
continue;
|
|
2578
2670
|
}
|
|
2579
2671
|
|
|
@@ -2760,6 +2852,8 @@ export class ScopeDataStructure {
|
|
|
2760
2852
|
usageEquivalency.scopeNodeName,
|
|
2761
2853
|
) as ScopeNode;
|
|
2762
2854
|
|
|
2855
|
+
if (!usageScopeNode) continue;
|
|
2856
|
+
|
|
2763
2857
|
// Guard against infinite recursion by tracking which paths we've already
|
|
2764
2858
|
// added from addComplexSourcePathVariables
|
|
2765
2859
|
if (
|
|
@@ -2839,6 +2933,8 @@ export class ScopeDataStructure {
|
|
|
2839
2933
|
usageEquivalency.scopeNodeName,
|
|
2840
2934
|
) as ScopeNode;
|
|
2841
2935
|
|
|
2936
|
+
if (!usageScopeNode) continue;
|
|
2937
|
+
|
|
2842
2938
|
// This is put in place to avoid propagating array functions like 'filter' through complex equivalencies
|
|
2843
2939
|
// but may cause problems if the funtion call is not on a known object (e.g. string or array)
|
|
2844
2940
|
if (
|
|
@@ -3291,6 +3387,14 @@ export class ScopeDataStructure {
|
|
|
3291
3387
|
}
|
|
3292
3388
|
}
|
|
3293
3389
|
|
|
3390
|
+
// Ensure parameter-to-signature equivalencies are fully propagated.
|
|
3391
|
+
// When a parameter variable (e.g., `node`) is equivalenced to `signature[N]`,
|
|
3392
|
+
// all sub-paths of that variable should also appear under `signature[N]`.
|
|
3393
|
+
// This handles cases where the sub-path was added to the schema via a propagation
|
|
3394
|
+
// chain that already included the variable↔signature equivalency, causing the
|
|
3395
|
+
// cycle detection to prevent the reverse mapping.
|
|
3396
|
+
this.propagateParameterToSignaturePaths(scopeNode);
|
|
3397
|
+
|
|
3294
3398
|
fillInSchemaGapsAndUnknowns(scopeNode, fillInUnknowns);
|
|
3295
3399
|
|
|
3296
3400
|
if (final) {
|
|
@@ -3305,6 +3409,97 @@ export class ScopeDataStructure {
|
|
|
3305
3409
|
}
|
|
3306
3410
|
}
|
|
3307
3411
|
|
|
3412
|
+
/**
|
|
3413
|
+
* For each equivalency where a simple variable maps to signature[N],
|
|
3414
|
+
* ensure all sub-paths of that variable are reflected under signature[N].
|
|
3415
|
+
*/
|
|
3416
|
+
private propagateParameterToSignaturePaths(scopeNode: ScopeNode) {
|
|
3417
|
+
// Helper: check if a type is a concrete scalar that cannot have sub-properties.
|
|
3418
|
+
const SCALAR_TYPES = new Set([
|
|
3419
|
+
'string',
|
|
3420
|
+
'number',
|
|
3421
|
+
'boolean',
|
|
3422
|
+
'bigint',
|
|
3423
|
+
'symbol',
|
|
3424
|
+
'void',
|
|
3425
|
+
'never',
|
|
3426
|
+
]);
|
|
3427
|
+
const isDefinitelyScalar = (type: string): boolean => {
|
|
3428
|
+
const parts = type.split('|').map((s) => s.trim());
|
|
3429
|
+
const base = parts.filter((s) => s !== 'undefined' && s !== 'null');
|
|
3430
|
+
return base.length > 0 && base.every((b) => SCALAR_TYPES.has(b));
|
|
3431
|
+
};
|
|
3432
|
+
|
|
3433
|
+
// Find variable → signature[N] equivalencies
|
|
3434
|
+
for (const [varName, equivalencies] of Object.entries(
|
|
3435
|
+
scopeNode.equivalencies,
|
|
3436
|
+
)) {
|
|
3437
|
+
// Only process simple variable names (no dots, brackets, or parens)
|
|
3438
|
+
if (
|
|
3439
|
+
varName.includes('.') ||
|
|
3440
|
+
varName.includes('[') ||
|
|
3441
|
+
varName.includes('(')
|
|
3442
|
+
) {
|
|
3443
|
+
continue;
|
|
3444
|
+
}
|
|
3445
|
+
|
|
3446
|
+
for (const equiv of equivalencies) {
|
|
3447
|
+
if (
|
|
3448
|
+
equiv.scopeNodeName === scopeNode.name &&
|
|
3449
|
+
equiv.schemaPath.startsWith('signature[')
|
|
3450
|
+
) {
|
|
3451
|
+
const signaturePath = equiv.schemaPath;
|
|
3452
|
+
const varPrefix = varName + '.';
|
|
3453
|
+
const varBracketPrefix = varName + '[';
|
|
3454
|
+
|
|
3455
|
+
// Find all schema keys starting with the variable
|
|
3456
|
+
for (const key in scopeNode.schema) {
|
|
3457
|
+
if (key.startsWith(varPrefix) || key.startsWith(varBracketPrefix)) {
|
|
3458
|
+
const suffix = key.slice(varName.length);
|
|
3459
|
+
const sigKey = signaturePath + suffix;
|
|
3460
|
+
|
|
3461
|
+
// Only add if the signature path doesn't already exist
|
|
3462
|
+
if (!scopeNode.schema[sigKey]) {
|
|
3463
|
+
// Check if this path represents variable conflation:
|
|
3464
|
+
// When a standalone variable (e.g., showWorkoutForm from useState)
|
|
3465
|
+
// appears as a sub-property of a scalar-typed ancestor (e.g.,
|
|
3466
|
+
// activity_type = "string"), it's from scope conflation, not real
|
|
3467
|
+
// property access. Block these while allowing legitimate built-in
|
|
3468
|
+
// accesses like string.length or string.slice.
|
|
3469
|
+
let isConflatedPath = false;
|
|
3470
|
+
let checkPos = signaturePath.length;
|
|
3471
|
+
while (true) {
|
|
3472
|
+
checkPos = sigKey.indexOf('.', checkPos + 1);
|
|
3473
|
+
if (checkPos === -1) break;
|
|
3474
|
+
const ancestorPath = sigKey.substring(0, checkPos);
|
|
3475
|
+
const ancestorType = scopeNode.schema[ancestorPath];
|
|
3476
|
+
if (ancestorType && isDefinitelyScalar(ancestorType)) {
|
|
3477
|
+
// Ancestor is scalar — check if the immediate sub-property
|
|
3478
|
+
// is also a standalone variable (indicating conflation)
|
|
3479
|
+
const afterDot = sigKey.substring(checkPos + 1);
|
|
3480
|
+
const nextSep = afterDot.search(/[.\[]/);
|
|
3481
|
+
const subPropName =
|
|
3482
|
+
nextSep === -1
|
|
3483
|
+
? afterDot
|
|
3484
|
+
: afterDot.substring(0, nextSep);
|
|
3485
|
+
if (scopeNode.schema[subPropName] !== undefined) {
|
|
3486
|
+
isConflatedPath = true;
|
|
3487
|
+
break;
|
|
3488
|
+
}
|
|
3489
|
+
}
|
|
3490
|
+
}
|
|
3491
|
+
|
|
3492
|
+
if (!isConflatedPath) {
|
|
3493
|
+
scopeNode.schema[sigKey] = scopeNode.schema[key];
|
|
3494
|
+
}
|
|
3495
|
+
}
|
|
3496
|
+
}
|
|
3497
|
+
}
|
|
3498
|
+
}
|
|
3499
|
+
}
|
|
3500
|
+
}
|
|
3501
|
+
}
|
|
3502
|
+
|
|
3308
3503
|
private filterAndConvertSchema({
|
|
3309
3504
|
filterPath,
|
|
3310
3505
|
newPath,
|
|
@@ -3391,6 +3586,9 @@ export class ScopeDataStructure {
|
|
|
3391
3586
|
equivalentValueSchemaPathParts.length,
|
|
3392
3587
|
),
|
|
3393
3588
|
]);
|
|
3589
|
+
// PERF: Skip keys with repeated function-call signature patterns
|
|
3590
|
+
// to prevent recursive type expansion (e.g., string.localeCompare returns string)
|
|
3591
|
+
if (this.hasExcessivePatternRepetition(newKey)) continue;
|
|
3394
3592
|
resolvedSchema[newKey] = value;
|
|
3395
3593
|
}
|
|
3396
3594
|
}
|
|
@@ -3413,6 +3611,8 @@ export class ScopeDataStructure {
|
|
|
3413
3611
|
if (!subSchema) continue;
|
|
3414
3612
|
|
|
3415
3613
|
for (const resolvedKey in subSchema) {
|
|
3614
|
+
// PERF: Skip keys with repeated function-call signature patterns
|
|
3615
|
+
if (this.hasExcessivePatternRepetition(resolvedKey)) continue;
|
|
3416
3616
|
if (
|
|
3417
3617
|
!resolvedSchema[resolvedKey] ||
|
|
3418
3618
|
subSchema[resolvedKey] === 'unknown'
|
|
@@ -3804,25 +4004,116 @@ export class ScopeDataStructure {
|
|
|
3804
4004
|
return [source];
|
|
3805
4005
|
};
|
|
3806
4006
|
|
|
3807
|
-
|
|
3808
|
-
(
|
|
3809
|
-
if (entry.sourceCandidates.length === 0) return
|
|
4007
|
+
const acc = entries.reduce(
|
|
4008
|
+
(result, entry) => {
|
|
4009
|
+
if (entry.sourceCandidates.length === 0) return result;
|
|
3810
4010
|
const usages = entry.usages.filter(usageMatchesScope);
|
|
3811
4011
|
for (const usage of usages) {
|
|
3812
|
-
|
|
4012
|
+
result[usage.schemaPath] ||= [];
|
|
3813
4013
|
// Resolve each source candidate through the equivalency chain
|
|
3814
4014
|
for (const source of entry.sourceCandidates) {
|
|
3815
4015
|
const resolvedSources = resolveToSignature(source, new Set());
|
|
3816
|
-
|
|
4016
|
+
result[usage.schemaPath].push(...resolvedSources);
|
|
3817
4017
|
}
|
|
3818
4018
|
}
|
|
3819
|
-
return
|
|
4019
|
+
return result;
|
|
3820
4020
|
},
|
|
3821
4021
|
{} as Record<
|
|
3822
4022
|
string,
|
|
3823
4023
|
Pick<ScopeVariable, 'scopeNodeName' | 'schemaPath'>[]
|
|
3824
4024
|
>,
|
|
3825
4025
|
);
|
|
4026
|
+
|
|
4027
|
+
// Post-processing: enrich useState-backed sources with co-located external
|
|
4028
|
+
// function calls. When a useState value resolves to a setter variable that
|
|
4029
|
+
// lives in the same scope as a fetch/API call, that fetch is a data source.
|
|
4030
|
+
this.enrichUseStateSourcesWithCoLocatedCalls(acc);
|
|
4031
|
+
|
|
4032
|
+
return acc;
|
|
4033
|
+
}
|
|
4034
|
+
|
|
4035
|
+
/**
|
|
4036
|
+
* For each source that ends at a useState path, check if the setter was called
|
|
4037
|
+
* from a scope that also contains external function calls (like fetch).
|
|
4038
|
+
* If so, add those external calls as additional source candidates.
|
|
4039
|
+
*/
|
|
4040
|
+
private enrichUseStateSourcesWithCoLocatedCalls(
|
|
4041
|
+
acc: Record<string, Pick<ScopeVariable, 'scopeNodeName' | 'schemaPath'>[]>,
|
|
4042
|
+
) {
|
|
4043
|
+
const rootScopeName = this.scopeTreeManager.getRootName();
|
|
4044
|
+
const rootScope = this.scopeNodes[rootScopeName];
|
|
4045
|
+
if (!rootScope) return;
|
|
4046
|
+
|
|
4047
|
+
// Collect all descendants for each scope node
|
|
4048
|
+
const getAllDescendants = (
|
|
4049
|
+
node: import('./helpers/ScopeTreeManager').ScopeTreeNode,
|
|
4050
|
+
): Set<string> => {
|
|
4051
|
+
const names = new Set<string>([node.name]);
|
|
4052
|
+
for (const child of node.children) {
|
|
4053
|
+
for (const name of getAllDescendants(child)) {
|
|
4054
|
+
names.add(name);
|
|
4055
|
+
}
|
|
4056
|
+
}
|
|
4057
|
+
return names;
|
|
4058
|
+
};
|
|
4059
|
+
|
|
4060
|
+
for (const [usagePath, sources] of Object.entries(acc)) {
|
|
4061
|
+
const additionalSources: Pick<
|
|
4062
|
+
ScopeVariable,
|
|
4063
|
+
'scopeNodeName' | 'schemaPath'
|
|
4064
|
+
>[] = [];
|
|
4065
|
+
|
|
4066
|
+
for (const source of sources) {
|
|
4067
|
+
// Check if this source is a useState-related terminal path
|
|
4068
|
+
// (e.g., useState(X).functionCallReturnValue[1] or useState(X).signature[0])
|
|
4069
|
+
if (!source.schemaPath.match(/^useState\([^)]*\)\./)) continue;
|
|
4070
|
+
|
|
4071
|
+
// Find the useState call from the source path
|
|
4072
|
+
const useStateCallMatch = source.schemaPath.match(
|
|
4073
|
+
/^(useState\([^)]*\))\./,
|
|
4074
|
+
);
|
|
4075
|
+
if (!useStateCallMatch) continue;
|
|
4076
|
+
const useStateCall = useStateCallMatch[1];
|
|
4077
|
+
|
|
4078
|
+
// Look in the root scope for the useState value equivalency
|
|
4079
|
+
// which tells us where the setter was called from
|
|
4080
|
+
const valuePath = `${useStateCall}.functionCallReturnValue[0]`;
|
|
4081
|
+
const valueEquivs = rootScope.equivalencies[valuePath];
|
|
4082
|
+
if (!valueEquivs) continue;
|
|
4083
|
+
|
|
4084
|
+
for (const equiv of valueEquivs) {
|
|
4085
|
+
// Find the scope where the setter was called
|
|
4086
|
+
const setterScopeName = equiv.scopeNodeName;
|
|
4087
|
+
const setterScopeTree =
|
|
4088
|
+
this.scopeTreeManager.findNode(setterScopeName);
|
|
4089
|
+
if (!setterScopeTree) continue;
|
|
4090
|
+
|
|
4091
|
+
// Get all descendant scope names from the setter scope
|
|
4092
|
+
const relatedScopes = getAllDescendants(setterScopeTree);
|
|
4093
|
+
|
|
4094
|
+
// Find external function calls in those scopes whose return values
|
|
4095
|
+
// are actually consumed (assigned to a variable). This excludes
|
|
4096
|
+
// fire-and-forget calls like analytics.track() or console.log().
|
|
4097
|
+
const coLocatedCalls = this.externalFunctionCalls.filter(
|
|
4098
|
+
(efc) =>
|
|
4099
|
+
relatedScopes.has(efc.callScope) &&
|
|
4100
|
+
efc.receivingVariableNames &&
|
|
4101
|
+
efc.receivingVariableNames.length > 0,
|
|
4102
|
+
);
|
|
4103
|
+
|
|
4104
|
+
for (const call of coLocatedCalls) {
|
|
4105
|
+
additionalSources.push({
|
|
4106
|
+
scopeNodeName: call.callScope,
|
|
4107
|
+
schemaPath: `${call.callSignature}.functionCallReturnValue`,
|
|
4108
|
+
});
|
|
4109
|
+
}
|
|
4110
|
+
}
|
|
4111
|
+
}
|
|
4112
|
+
|
|
4113
|
+
if (additionalSources.length > 0) {
|
|
4114
|
+
acc[usagePath].push(...additionalSources);
|
|
4115
|
+
}
|
|
4116
|
+
}
|
|
3826
4117
|
}
|
|
3827
4118
|
|
|
3828
4119
|
getUsageEquivalencies(functionName?: string) {
|
|
@@ -3927,6 +4218,72 @@ export class ScopeDataStructure {
|
|
|
3927
4218
|
}
|
|
3928
4219
|
}
|
|
3929
4220
|
|
|
4221
|
+
// Enrich schema with deeply nested paths from internal function call scopes.
|
|
4222
|
+
// When a function call like traverse(tree) exists, and traverse's scope has
|
|
4223
|
+
// signature[0].children[path][entityName] (from propagateParameterToSignaturePaths),
|
|
4224
|
+
// we need to map those paths back to the argument variable (tree) in this scope.
|
|
4225
|
+
// This handles cases where cycle detection prevented the equivalency chain from
|
|
4226
|
+
// propagating deep paths during Phase 2 batch queue processing.
|
|
4227
|
+
for (const equivalenceKey in equivalencies ?? {}) {
|
|
4228
|
+
// Look for keys matching function call pattern: funcName(...).signature[N]
|
|
4229
|
+
const funcCallMatch = equivalenceKey.match(
|
|
4230
|
+
/^([^(]+)\(.*?\)\.(signature\[\d+\])$/,
|
|
4231
|
+
);
|
|
4232
|
+
if (!funcCallMatch) continue;
|
|
4233
|
+
|
|
4234
|
+
const calledFunctionName = funcCallMatch[1];
|
|
4235
|
+
const signatureParam = funcCallMatch[2]; // e.g., "signature[0]"
|
|
4236
|
+
|
|
4237
|
+
for (const equivalenceValue of equivalencies[equivalenceKey]) {
|
|
4238
|
+
if (equivalenceValue.scopeNodeName !== scopeName) continue;
|
|
4239
|
+
|
|
4240
|
+
const targetVariable = equivalenceValue.schemaPath;
|
|
4241
|
+
|
|
4242
|
+
// Get the called function's schema (includes propagated parameter paths)
|
|
4243
|
+
const childSchema = this.getSchema({
|
|
4244
|
+
scopeName: calledFunctionName,
|
|
4245
|
+
});
|
|
4246
|
+
if (!childSchema) continue;
|
|
4247
|
+
|
|
4248
|
+
// Map child function's signature paths to parent variable paths
|
|
4249
|
+
const sigPrefix = signatureParam + '.';
|
|
4250
|
+
const sigBracketPrefix = signatureParam + '[';
|
|
4251
|
+
for (const childKey in childSchema) {
|
|
4252
|
+
let suffix: string | null = null;
|
|
4253
|
+
if (childKey.startsWith(sigPrefix)) {
|
|
4254
|
+
suffix = childKey.slice(signatureParam.length);
|
|
4255
|
+
} else if (childKey.startsWith(sigBracketPrefix)) {
|
|
4256
|
+
suffix = childKey.slice(signatureParam.length);
|
|
4257
|
+
}
|
|
4258
|
+
|
|
4259
|
+
if (suffix !== null) {
|
|
4260
|
+
const parentKey = targetVariable + suffix;
|
|
4261
|
+
if (!schema[parentKey]) {
|
|
4262
|
+
schema[parentKey] = childSchema[childKey];
|
|
4263
|
+
}
|
|
4264
|
+
}
|
|
4265
|
+
}
|
|
4266
|
+
}
|
|
4267
|
+
}
|
|
4268
|
+
|
|
4269
|
+
// Helper: check if a type is a concrete scalar that cannot have sub-properties.
|
|
4270
|
+
// e.g., "string", "number | undefined", "boolean | null" are scalar.
|
|
4271
|
+
// "object", "array", "function", "unknown", "Workout", etc. are NOT scalar.
|
|
4272
|
+
const SCALAR_TYPES = new Set([
|
|
4273
|
+
'string',
|
|
4274
|
+
'number',
|
|
4275
|
+
'boolean',
|
|
4276
|
+
'bigint',
|
|
4277
|
+
'symbol',
|
|
4278
|
+
'void',
|
|
4279
|
+
'never',
|
|
4280
|
+
]);
|
|
4281
|
+
const isDefinitelyScalarType = (type: string): boolean => {
|
|
4282
|
+
const parts = type.split('|').map((s) => s.trim());
|
|
4283
|
+
const base = parts.filter((s) => s !== 'undefined' && s !== 'null');
|
|
4284
|
+
return base.length > 0 && base.every((b) => SCALAR_TYPES.has(b));
|
|
4285
|
+
};
|
|
4286
|
+
|
|
3930
4287
|
// Propagate nested paths from variables to their signature equivalents
|
|
3931
4288
|
// e.g., if workouts = signature[0].workouts, then workouts[].title becomes
|
|
3932
4289
|
// signature[0].workouts[].title
|
|
@@ -3951,7 +4308,69 @@ export class ScopeDataStructure {
|
|
|
3951
4308
|
|
|
3952
4309
|
// Add to schema if not already present
|
|
3953
4310
|
if (!tempScopeNode.schema[signatureKey]) {
|
|
3954
|
-
|
|
4311
|
+
// Check if this path represents variable conflation:
|
|
4312
|
+
// When a standalone variable (e.g., showWorkoutForm from useState)
|
|
4313
|
+
// appears as a sub-property of a scalar-typed ancestor (e.g.,
|
|
4314
|
+
// activity_type = "string"), it's from scope conflation, not real
|
|
4315
|
+
// property access. Block these while allowing legitimate built-in
|
|
4316
|
+
// accesses like string.length or string.slice.
|
|
4317
|
+
let isConflatedPath = false;
|
|
4318
|
+
let checkPos = signaturePath.length;
|
|
4319
|
+
while (true) {
|
|
4320
|
+
checkPos = signatureKey.indexOf('.', checkPos + 1);
|
|
4321
|
+
if (checkPos === -1) break;
|
|
4322
|
+
const ancestorPath = signatureKey.substring(0, checkPos);
|
|
4323
|
+
const ancestorType = tempScopeNode.schema[ancestorPath];
|
|
4324
|
+
if (ancestorType && isDefinitelyScalarType(ancestorType)) {
|
|
4325
|
+
// Ancestor is scalar — check if the immediate sub-property
|
|
4326
|
+
// is also a standalone variable (indicating conflation)
|
|
4327
|
+
const afterDot = signatureKey.substring(checkPos + 1);
|
|
4328
|
+
const nextSep = afterDot.search(/[.\[]/);
|
|
4329
|
+
const subPropName =
|
|
4330
|
+
nextSep === -1 ? afterDot : afterDot.substring(0, nextSep);
|
|
4331
|
+
if (schema[subPropName] !== undefined) {
|
|
4332
|
+
isConflatedPath = true;
|
|
4333
|
+
break;
|
|
4334
|
+
}
|
|
4335
|
+
}
|
|
4336
|
+
}
|
|
4337
|
+
|
|
4338
|
+
if (!isConflatedPath) {
|
|
4339
|
+
tempScopeNode.schema[signatureKey] = schema[schemaKey];
|
|
4340
|
+
}
|
|
4341
|
+
}
|
|
4342
|
+
}
|
|
4343
|
+
}
|
|
4344
|
+
}
|
|
4345
|
+
|
|
4346
|
+
// Post-process: filter out conflated signature paths.
|
|
4347
|
+
// During phase 2 scope analysis, useState(false) conflation can create
|
|
4348
|
+
// bad paths like signature[0].mockWorkouts[].activity_type.showWorkoutForm
|
|
4349
|
+
// directly in scopeNode.schema. These flow through signatureInSchema into
|
|
4350
|
+
// tempScopeNode.schema without any guard. Filter them out here by checking:
|
|
4351
|
+
// 1. An ancestor in the path has a concrete scalar type (string, number, boolean, etc.)
|
|
4352
|
+
// 2. The immediate sub-property of that scalar ancestor is also a standalone
|
|
4353
|
+
// variable in the schema (indicating conflation, not a real property access)
|
|
4354
|
+
for (const key of Object.keys(tempScopeNode.schema)) {
|
|
4355
|
+
if (!key.startsWith('signature[')) continue;
|
|
4356
|
+
|
|
4357
|
+
// Walk through the path looking for scalar-typed ancestors
|
|
4358
|
+
let pos = 0;
|
|
4359
|
+
while (true) {
|
|
4360
|
+
pos = key.indexOf('.', pos + 1);
|
|
4361
|
+
if (pos === -1) break;
|
|
4362
|
+
const ancestorPath = key.substring(0, pos);
|
|
4363
|
+
const ancestorType = tempScopeNode.schema[ancestorPath];
|
|
4364
|
+
if (ancestorType && isDefinitelyScalarType(ancestorType)) {
|
|
4365
|
+
// Found a scalar ancestor — check if the sub-property name
|
|
4366
|
+
// is a standalone variable in the getSchema() result
|
|
4367
|
+
const afterDot = key.substring(pos + 1);
|
|
4368
|
+
const nextSep = afterDot.search(/[.\[]/);
|
|
4369
|
+
const subPropName =
|
|
4370
|
+
nextSep === -1 ? afterDot : afterDot.substring(0, nextSep);
|
|
4371
|
+
if (schema[subPropName] !== undefined) {
|
|
4372
|
+
delete tempScopeNode.schema[key];
|
|
4373
|
+
break;
|
|
3955
4374
|
}
|
|
3956
4375
|
}
|
|
3957
4376
|
}
|
|
@@ -4281,6 +4700,15 @@ export class ScopeDataStructure {
|
|
|
4281
4700
|
!equivalentValue.schemaPath.startsWith('signature[') && // not a signature path
|
|
4282
4701
|
!equivalentValue.schemaPath.endsWith('.functionCallReturnValue') // not already handled above
|
|
4283
4702
|
) {
|
|
4703
|
+
// Skip bare "returnValue" from child scopes — this is the child's return value,
|
|
4704
|
+
// not a meaningful data source path in the parent scope
|
|
4705
|
+
if (
|
|
4706
|
+
equivalentValue.schemaPath === 'returnValue' &&
|
|
4707
|
+
equivalentValue.scopeNodeName !==
|
|
4708
|
+
this.scopeTreeManager.getRootName()
|
|
4709
|
+
) {
|
|
4710
|
+
continue;
|
|
4711
|
+
}
|
|
4284
4712
|
// Add equivalency (will accumulate if multiple values for OR expressions)
|
|
4285
4713
|
addEquivalency(path, equivalentValue.schemaPath);
|
|
4286
4714
|
}
|
|
@@ -4682,9 +5110,109 @@ export class ScopeDataStructure {
|
|
|
4682
5110
|
// Replace cyScope placeholders in all external function call data
|
|
4683
5111
|
// This ensures call signatures and schema paths use actual callback text
|
|
4684
5112
|
// instead of internal cyScope names, preventing mock data merge conflicts.
|
|
4685
|
-
|
|
4686
|
-
|
|
4687
|
-
|
|
5113
|
+
const rootScopeName = this.scopeTreeManager.getRootName();
|
|
5114
|
+
const rootSchema = this.scopeNodes[rootScopeName]?.schema ?? {};
|
|
5115
|
+
|
|
5116
|
+
return this.externalFunctionCalls.map((efc) => {
|
|
5117
|
+
const cleaned = this.cleanCyScopeFromFunctionCallInfo(efc);
|
|
5118
|
+
return this.filterConflatedExternalPaths(cleaned, rootSchema);
|
|
5119
|
+
});
|
|
5120
|
+
}
|
|
5121
|
+
|
|
5122
|
+
/**
|
|
5123
|
+
* Filters out conflated paths from external function call schemas.
|
|
5124
|
+
*
|
|
5125
|
+
* When multiple useState(false) calls create equivalency conflation during
|
|
5126
|
+
* Phase 1 analysis, standalone boolean state variables (like showWorkoutForm,
|
|
5127
|
+
* showGoalForm) can bleed into external function call schemas as sub-properties
|
|
5128
|
+
* of unrelated data fields (like data[].activity_type.showWorkoutForm).
|
|
5129
|
+
*
|
|
5130
|
+
* Detection: group sub-properties by parent path. If 2+ sub-properties of
|
|
5131
|
+
* the same parent all match standalone root scope variable names, treat them
|
|
5132
|
+
* as conflation artifacts and remove them.
|
|
5133
|
+
*/
|
|
5134
|
+
private filterConflatedExternalPaths(
|
|
5135
|
+
efc: FunctionCallInfo,
|
|
5136
|
+
rootSchema: Record<string, string>,
|
|
5137
|
+
): FunctionCallInfo {
|
|
5138
|
+
// Build a set of top-level root scope variable names (simple names, no dots/brackets)
|
|
5139
|
+
const topLevelRootVars = new Set<string>();
|
|
5140
|
+
for (const key of Object.keys(rootSchema)) {
|
|
5141
|
+
if (!key.includes('.') && !key.includes('[')) {
|
|
5142
|
+
topLevelRootVars.add(key);
|
|
5143
|
+
}
|
|
5144
|
+
}
|
|
5145
|
+
|
|
5146
|
+
if (topLevelRootVars.size === 0) return efc;
|
|
5147
|
+
|
|
5148
|
+
// Group sub-property matches by their parent path.
|
|
5149
|
+
// For a path like "...data[].activity_type.showWorkoutForm",
|
|
5150
|
+
// parent = "...data[].activity_type", child = "showWorkoutForm"
|
|
5151
|
+
const parentToConflatedKeys = new Map<string, string[]>();
|
|
5152
|
+
|
|
5153
|
+
for (const key of Object.keys(efc.schema)) {
|
|
5154
|
+
const lastDot = key.lastIndexOf('.');
|
|
5155
|
+
if (lastDot === -1) continue;
|
|
5156
|
+
|
|
5157
|
+
const parent = key.substring(0, lastDot);
|
|
5158
|
+
const child = key.substring(lastDot + 1);
|
|
5159
|
+
|
|
5160
|
+
// Skip array access or function call patterns
|
|
5161
|
+
if (child.includes('[') || child.includes('(')) continue;
|
|
5162
|
+
|
|
5163
|
+
// Only consider paths inside array element chains (contains []).
|
|
5164
|
+
// Direct children of functionCallReturnValue are legitimate destructured
|
|
5165
|
+
// return values, not conflation. Conflation happens deeper in the chain
|
|
5166
|
+
// when array element fields get corrupted sub-properties.
|
|
5167
|
+
if (!parent.includes('[')) continue;
|
|
5168
|
+
|
|
5169
|
+
if (topLevelRootVars.has(child)) {
|
|
5170
|
+
if (!parentToConflatedKeys.has(parent)) {
|
|
5171
|
+
parentToConflatedKeys.set(parent, []);
|
|
5172
|
+
}
|
|
5173
|
+
parentToConflatedKeys.get(parent)!.push(key);
|
|
5174
|
+
}
|
|
5175
|
+
}
|
|
5176
|
+
|
|
5177
|
+
// Only filter when 2+ sub-properties of the same parent match root scope vars.
|
|
5178
|
+
// This threshold avoids false positives from coincidental name matches.
|
|
5179
|
+
const keysToRemove = new Set<string>();
|
|
5180
|
+
const parentsToRestore = new Set<string>();
|
|
5181
|
+
|
|
5182
|
+
for (const [parent, conflatedKeys] of parentToConflatedKeys) {
|
|
5183
|
+
if (conflatedKeys.length >= 2) {
|
|
5184
|
+
for (const key of conflatedKeys) {
|
|
5185
|
+
keysToRemove.add(key);
|
|
5186
|
+
}
|
|
5187
|
+
parentsToRestore.add(parent);
|
|
5188
|
+
}
|
|
5189
|
+
}
|
|
5190
|
+
|
|
5191
|
+
if (keysToRemove.size === 0) return efc;
|
|
5192
|
+
|
|
5193
|
+
// Create a new schema without the conflated paths
|
|
5194
|
+
const newSchema: Record<string, string> = {};
|
|
5195
|
+
for (const [key, value] of Object.entries(efc.schema)) {
|
|
5196
|
+
if (keysToRemove.has(key)) continue;
|
|
5197
|
+
|
|
5198
|
+
// Restore parent type: if it was changed to "object" because of conflated
|
|
5199
|
+
// sub-properties, and now all those sub-properties are removed, change it
|
|
5200
|
+
// back to "unknown" (we don't know the original type)
|
|
5201
|
+
if (parentsToRestore.has(key) && value === 'object') {
|
|
5202
|
+
// Check if there are any remaining sub-properties
|
|
5203
|
+
const hasRemainingSubProps = Object.keys(efc.schema).some(
|
|
5204
|
+
(k) =>
|
|
5205
|
+
!keysToRemove.has(k) &&
|
|
5206
|
+
k !== key &&
|
|
5207
|
+
(k.startsWith(key + '.') || k.startsWith(key + '[')),
|
|
5208
|
+
);
|
|
5209
|
+
newSchema[key] = hasRemainingSubProps ? value : 'unknown';
|
|
5210
|
+
} else {
|
|
5211
|
+
newSchema[key] = value;
|
|
5212
|
+
}
|
|
5213
|
+
}
|
|
5214
|
+
|
|
5215
|
+
return { ...efc, schema: newSchema };
|
|
4688
5216
|
}
|
|
4689
5217
|
|
|
4690
5218
|
/**
|
|
@@ -4977,6 +5505,10 @@ export class ScopeDataStructure {
|
|
|
4977
5505
|
getEnrichedConditionalUsages(): Record<string, EnrichedConditionalUsage[]> {
|
|
4978
5506
|
const enriched: Record<string, EnrichedConditionalUsage[]> = {};
|
|
4979
5507
|
|
|
5508
|
+
console.log(
|
|
5509
|
+
`[getEnrichedConditionalUsages] Processing ${Object.keys(this.rawConditionalUsages).length} conditional paths: [${Object.keys(this.rawConditionalUsages).join(', ')}]`,
|
|
5510
|
+
);
|
|
5511
|
+
|
|
4980
5512
|
for (const [path, usages] of Object.entries(this.rawConditionalUsages)) {
|
|
4981
5513
|
// Try to trace this path back to a data source
|
|
4982
5514
|
// First, try the root scope
|
|
@@ -4985,10 +5517,69 @@ export class ScopeDataStructure {
|
|
|
4985
5517
|
|
|
4986
5518
|
let sourceDataPath: string | undefined;
|
|
4987
5519
|
if (explanation.source) {
|
|
4988
|
-
|
|
4989
|
-
|
|
5520
|
+
const { scope, path: sourcePath } = explanation.source;
|
|
5521
|
+
|
|
5522
|
+
// Build initial path — avoid redundant prefix when path already contains the scope call
|
|
5523
|
+
let fullPath: string;
|
|
5524
|
+
if (sourcePath.startsWith(`${scope}(`)) {
|
|
5525
|
+
fullPath = sourcePath;
|
|
5526
|
+
} else {
|
|
5527
|
+
fullPath = `${scope}.${sourcePath}`;
|
|
5528
|
+
}
|
|
5529
|
+
|
|
5530
|
+
sourceDataPath = fullPath;
|
|
5531
|
+
console.log(
|
|
5532
|
+
`[getEnrichedConditionalUsages] "${path}" explainPath → scope="${scope}", sourcePath="${sourcePath}" → sourceDataPath="${sourceDataPath}"`,
|
|
5533
|
+
);
|
|
5534
|
+
} else {
|
|
5535
|
+
console.log(
|
|
5536
|
+
`[getEnrichedConditionalUsages] "${path}" explainPath → no source found`,
|
|
5537
|
+
);
|
|
5538
|
+
}
|
|
5539
|
+
|
|
5540
|
+
// If explainPath didn't find a useful external source (e.g., it traced to
|
|
5541
|
+
// useState or just to the component scope itself), check sourceEquivalencies
|
|
5542
|
+
// for an external function call source like a fetch call
|
|
5543
|
+
const hasExternalSource = sourceDataPath?.includes(
|
|
5544
|
+
'.functionCallReturnValue',
|
|
5545
|
+
);
|
|
5546
|
+
if (!hasExternalSource) {
|
|
5547
|
+
console.log(
|
|
5548
|
+
`[getEnrichedConditionalUsages] "${path}" no external source (sourceDataPath="${sourceDataPath}"), checking sourceEquivalencies fallback...`,
|
|
5549
|
+
);
|
|
5550
|
+
const sourceEquiv = this.getSourceEquivalencies();
|
|
5551
|
+
const returnValueKey = `returnValue.${path}`;
|
|
5552
|
+
const sources = sourceEquiv[returnValueKey];
|
|
5553
|
+
if (sources) {
|
|
5554
|
+
console.log(
|
|
5555
|
+
`[getEnrichedConditionalUsages] "${path}" sourceEquivalencies["${returnValueKey}"] has ${sources.length} sources: [${sources.map((s: { schemaPath: string }) => s.schemaPath).join(', ')}]`,
|
|
5556
|
+
);
|
|
5557
|
+
const externalSource = sources.find(
|
|
5558
|
+
(s: { schemaPath: string }) =>
|
|
5559
|
+
s.schemaPath.includes('.functionCallReturnValue') &&
|
|
5560
|
+
!s.schemaPath.startsWith('useState('),
|
|
5561
|
+
);
|
|
5562
|
+
if (externalSource) {
|
|
5563
|
+
console.log(
|
|
5564
|
+
`[getEnrichedConditionalUsages] "${path}" sourceEquivalencies fallback found external source: "${externalSource.schemaPath}"`,
|
|
5565
|
+
);
|
|
5566
|
+
sourceDataPath = externalSource.schemaPath;
|
|
5567
|
+
} else {
|
|
5568
|
+
console.log(
|
|
5569
|
+
`[getEnrichedConditionalUsages] "${path}" sourceEquivalencies fallback found no external function call source`,
|
|
5570
|
+
);
|
|
5571
|
+
}
|
|
5572
|
+
} else {
|
|
5573
|
+
console.log(
|
|
5574
|
+
`[getEnrichedConditionalUsages] "${path}" sourceEquivalencies["${returnValueKey}"] not found`,
|
|
5575
|
+
);
|
|
5576
|
+
}
|
|
4990
5577
|
}
|
|
4991
5578
|
|
|
5579
|
+
console.log(
|
|
5580
|
+
`[getEnrichedConditionalUsages] "${path}" FINAL sourceDataPath="${sourceDataPath ?? '(none)'}" (${usages.length} usages)`,
|
|
5581
|
+
);
|
|
5582
|
+
|
|
4992
5583
|
enriched[path] = usages.map((usage) => ({
|
|
4993
5584
|
...usage,
|
|
4994
5585
|
sourceDataPath,
|
|
@@ -5336,11 +5927,22 @@ export class ScopeDataStructure {
|
|
|
5336
5927
|
}
|
|
5337
5928
|
}
|
|
5338
5929
|
|
|
5930
|
+
// Enrich the schema with inferred types by applying fillInSchemaGapsAndUnknowns.
|
|
5931
|
+
// This ensures the serialized schema has the same type inference as getReturnValue().
|
|
5932
|
+
// Without this, evidence like "entities[].analyses: array" becomes "unknown".
|
|
5933
|
+
const enrichedSchema = { ...efc.schema };
|
|
5934
|
+
const tempScopeNode = {
|
|
5935
|
+
name: efc.name,
|
|
5936
|
+
schema: enrichedSchema,
|
|
5937
|
+
equivalencies: efc.equivalencies ?? {},
|
|
5938
|
+
};
|
|
5939
|
+
fillInSchemaGapsAndUnknowns(tempScopeNode, true);
|
|
5940
|
+
|
|
5339
5941
|
return {
|
|
5340
5942
|
name: efc.name,
|
|
5341
5943
|
callSignature: efc.callSignature,
|
|
5342
5944
|
callScope: efc.callScope,
|
|
5343
|
-
schema:
|
|
5945
|
+
schema: enrichedSchema,
|
|
5344
5946
|
equivalencies: efc.equivalencies
|
|
5345
5947
|
? Object.entries(efc.equivalencies).reduce(
|
|
5346
5948
|
(acc, [key, vars]) => {
|