@codeyam/codeyam-cli 0.1.0-staging.036391e → 0.1.0-staging.07d8f7b
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/analyzer-template/.build-info.json +7 -7
- package/analyzer-template/log.txt +3 -3
- package/analyzer-template/package.json +14 -14
- package/analyzer-template/packages/ai/index.ts +1 -0
- package/analyzer-template/packages/ai/package.json +1 -1
- package/analyzer-template/packages/ai/src/lib/analyzeScope.ts +14 -0
- package/analyzer-template/packages/ai/src/lib/astScopes/astScopeAnalyzer.ts +34 -3
- 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 +435 -13
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/coercePrimitivesToArraysBySchema.ts +62 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.ts +70 -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/generateEntityScenarioData.ts +110 -7
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlows.ts +134 -2
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionals.ts +359 -142
- 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/src/lib/ProjectAnalyzer.ts +6 -0
- 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 +18 -0
- package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities.ts +9 -1
- package/analyzer-template/packages/analyze/src/lib/files/analyze/dependencyResolver.ts +0 -6
- package/analyzer-template/packages/analyze/src/lib/files/analyze/findOrCreateEntity.ts +12 -0
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/TransformationTracer.ts +65 -28
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.ts +50 -25
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +83 -0
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +176 -80
- package/analyzer-template/packages/aws/package.json +10 -10
- package/analyzer-template/packages/database/index.ts +1 -0
- 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 +8 -0
- package/analyzer-template/packages/database/src/lib/kysely/tables/debugReportsTable.ts +1 -1
- package/analyzer-template/packages/database/src/lib/kysely/tables/editorScenariosTable.ts +62 -0
- package/analyzer-template/packages/database/src/lib/loadCommits.ts +31 -20
- package/analyzer-template/packages/database/src/lib/loadReadyToBeCapturedAnalyses.ts +0 -5
- package/analyzer-template/packages/database/src/lib/projectToDb.ts +1 -1
- package/analyzer-template/packages/database/src/lib/saveFiles.ts +1 -1
- package/analyzer-template/packages/database/src/lib/scenarioToDb.ts +1 -1
- package/analyzer-template/packages/database/src/lib/updateCommitMetadata.ts +151 -135
- package/analyzer-template/packages/database/src/lib/updateFreshAnalysisStatus.ts +58 -42
- package/analyzer-template/packages/database/src/lib/updateFreshAnalysisStatusWithScenarios.ts +81 -65
- package/analyzer-template/packages/database/src/lib/userScenarioToDb.ts +1 -1
- package/analyzer-template/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.ts +29 -1
- package/analyzer-template/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.ts +33 -5
- package/analyzer-template/packages/github/dist/database/index.d.ts +1 -0
- package/analyzer-template/packages/github/dist/database/index.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/index.js +1 -0
- package/analyzer-template/packages/github/dist/database/index.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/analysisBranchToDb.js +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/analysisBranchToDb.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/analysisToDb.js +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/analysisToDb.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/branchToDb.js +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/branchToDb.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/commitBranchToDb.js +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/commitBranchToDb.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/commitToDb.js +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/commitToDb.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/fileToDb.js +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/fileToDb.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts +2 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js +5 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.d.ts +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.d.ts +20 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.d.ts.map +1 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.js +45 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts +5 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.js +23 -13
- package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.js +1 -4
- package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/projectToDb.js +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/projectToDb.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/saveFiles.js +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/saveFiles.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/scenarioToDb.js +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/scenarioToDb.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js +100 -89
- package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatus.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatus.js +41 -30
- package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatus.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatusWithScenarios.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatusWithScenarios.js +68 -57
- package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatusWithScenarios.js.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js +29 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +33 -5
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/types/ProjectMetadata.d.ts +1 -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/types/src/types/ProjectMetadata.ts +1 -0
- package/analyzer-template/packages/types/src/types/Scenario.ts +10 -0
- package/analyzer-template/packages/utils/dist/types/src/types/ProjectMetadata.d.ts +1 -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.map +1 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.js +98 -3
- package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.js.map +1 -1
- package/analyzer-template/packages/utils/src/lib/fs/rsyncCopy.ts +121 -3
- package/analyzer-template/playwright/captureFromUrl.ts +89 -82
- package/analyzer-template/project/constructMockCode.ts +170 -50
- package/analyzer-template/project/orchestrateCapture.ts +4 -1
- package/analyzer-template/project/reconcileMockDataKeys.ts +19 -14
- package/analyzer-template/project/start.ts +3 -0
- package/analyzer-template/project/startScenarioCapture.ts +9 -0
- package/analyzer-template/project/writeClientLogRoute.ts +125 -0
- package/analyzer-template/project/writeMockDataTsx.ts +17 -0
- package/analyzer-template/project/writeScenarioComponents.ts +110 -17
- package/analyzer-template/tsconfig.json +13 -1
- package/background/src/lib/local/createLocalAnalyzer.js +1 -1
- package/background/src/lib/local/createLocalAnalyzer.js.map +1 -1
- package/background/src/lib/virtualized/project/constructMockCode.js +145 -41
- package/background/src/lib/virtualized/project/constructMockCode.js.map +1 -1
- package/background/src/lib/virtualized/project/orchestrateCapture.js +4 -1
- package/background/src/lib/virtualized/project/orchestrateCapture.js.map +1 -1
- package/background/src/lib/virtualized/project/reconcileMockDataKeys.js +17 -11
- package/background/src/lib/virtualized/project/reconcileMockDataKeys.js.map +1 -1
- package/background/src/lib/virtualized/project/start.js +2 -0
- package/background/src/lib/virtualized/project/start.js.map +1 -1
- package/background/src/lib/virtualized/project/startScenarioCapture.js +5 -0
- package/background/src/lib/virtualized/project/startScenarioCapture.js.map +1 -1
- package/background/src/lib/virtualized/project/writeClientLogRoute.js +110 -0
- package/background/src/lib/virtualized/project/writeClientLogRoute.js.map +1 -0
- package/background/src/lib/virtualized/project/writeMockDataTsx.js +12 -0
- package/background/src/lib/virtualized/project/writeMockDataTsx.js.map +1 -1
- package/background/src/lib/virtualized/project/writeScenarioComponents.js +83 -12
- package/background/src/lib/virtualized/project/writeScenarioComponents.js.map +1 -1
- package/codeyam-cli/scripts/apply-setup.js +209 -12
- package/codeyam-cli/scripts/apply-setup.js.map +1 -1
- package/codeyam-cli/src/cli.js +33 -24
- package/codeyam-cli/src/cli.js.map +1 -1
- package/codeyam-cli/src/codeyam-cli.js +18 -2
- package/codeyam-cli/src/codeyam-cli.js.map +1 -1
- package/codeyam-cli/src/commands/analyze.js +21 -9
- package/codeyam-cli/src/commands/analyze.js.map +1 -1
- package/codeyam-cli/src/commands/baseline.js +2 -0
- package/codeyam-cli/src/commands/baseline.js.map +1 -1
- package/codeyam-cli/src/commands/debug.js +2 -0
- package/codeyam-cli/src/commands/debug.js.map +1 -1
- package/codeyam-cli/src/commands/default.js +87 -21
- package/codeyam-cli/src/commands/default.js.map +1 -1
- package/codeyam-cli/src/commands/editor.js +697 -0
- package/codeyam-cli/src/commands/editor.js.map +1 -0
- package/codeyam-cli/src/commands/init.js +75 -259
- package/codeyam-cli/src/commands/init.js.map +1 -1
- package/codeyam-cli/src/commands/memory.js +95 -81
- package/codeyam-cli/src/commands/memory.js.map +1 -1
- package/codeyam-cli/src/commands/recapture.js +2 -0
- package/codeyam-cli/src/commands/recapture.js.map +1 -1
- package/codeyam-cli/src/commands/setup-sandbox.js +2 -0
- package/codeyam-cli/src/commands/setup-sandbox.js.map +1 -1
- package/codeyam-cli/src/commands/setup-simulations.js +284 -0
- package/codeyam-cli/src/commands/setup-simulations.js.map +1 -0
- package/codeyam-cli/src/commands/test-startup.js +2 -0
- package/codeyam-cli/src/commands/test-startup.js.map +1 -1
- package/codeyam-cli/src/commands/verify.js +14 -2
- package/codeyam-cli/src/commands/verify.js.map +1 -1
- package/codeyam-cli/src/utils/__tests__/npmVersionCheck.test.js +185 -0
- package/codeyam-cli/src/utils/__tests__/npmVersionCheck.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/pathIgnoring.test.js +9 -0
- package/codeyam-cli/src/utils/__tests__/pathIgnoring.test.js.map +1 -1
- package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +154 -86
- package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js.map +1 -1
- package/codeyam-cli/src/utils/analyzer.js +7 -0
- package/codeyam-cli/src/utils/analyzer.js.map +1 -1
- package/codeyam-cli/src/utils/backgroundServer.js +109 -26
- package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
- package/codeyam-cli/src/utils/devModeEvents.js +40 -0
- package/codeyam-cli/src/utils/devModeEvents.js.map +1 -0
- package/codeyam-cli/src/utils/fileMetadata.js +5 -0
- package/codeyam-cli/src/utils/fileMetadata.js.map +1 -1
- package/codeyam-cli/src/utils/fileWatcher.js +25 -9
- package/codeyam-cli/src/utils/fileWatcher.js.map +1 -1
- package/codeyam-cli/src/utils/generateReport.js +2 -2
- package/codeyam-cli/src/utils/git.js +52 -0
- package/codeyam-cli/src/utils/git.js.map +1 -1
- package/codeyam-cli/src/utils/install-skills.js +74 -63
- 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 +0 -29
- package/codeyam-cli/src/utils/labsAutoCheck.js.map +1 -1
- package/codeyam-cli/src/utils/npmVersionCheck.js +76 -0
- package/codeyam-cli/src/utils/npmVersionCheck.js.map +1 -0
- package/codeyam-cli/src/utils/pathIgnoring.js +19 -7
- package/codeyam-cli/src/utils/pathIgnoring.js.map +1 -1
- package/codeyam-cli/src/utils/progress.js +7 -0
- package/codeyam-cli/src/utils/progress.js.map +1 -1
- package/codeyam-cli/src/utils/queue/__tests__/heartbeat.test.js +11 -11
- package/codeyam-cli/src/utils/queue/__tests__/heartbeat.test.js.map +1 -1
- package/codeyam-cli/src/utils/queue/__tests__/manager.test.js +22 -0
- package/codeyam-cli/src/utils/queue/__tests__/manager.test.js.map +1 -1
- package/codeyam-cli/src/utils/queue/heartbeat.js +13 -5
- package/codeyam-cli/src/utils/queue/heartbeat.js.map +1 -1
- package/codeyam-cli/src/utils/queue/job.js +70 -1
- package/codeyam-cli/src/utils/queue/job.js.map +1 -1
- package/codeyam-cli/src/utils/queue/manager.js +7 -6
- package/codeyam-cli/src/utils/queue/manager.js.map +1 -1
- package/codeyam-cli/src/utils/requireSimulations.js +10 -0
- package/codeyam-cli/src/utils/requireSimulations.js.map +1 -0
- package/codeyam-cli/src/utils/ruleReflection/__tests__/contextBuilder.test.js +7 -8
- package/codeyam-cli/src/utils/ruleReflection/__tests__/contextBuilder.test.js.map +1 -1
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/assertRules.js +1 -1
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/assertRules.js.map +1 -1
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/setupTempProject.js +0 -1
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/setupTempProject.js.map +1 -1
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/ruleReflectionE2E.test.js +97 -6
- package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/ruleReflectionE2E.test.js.map +1 -1
- package/codeyam-cli/src/utils/ruleReflection/__tests__/promptBuilder.test.js +4 -6
- package/codeyam-cli/src/utils/ruleReflection/__tests__/promptBuilder.test.js.map +1 -1
- package/codeyam-cli/src/utils/ruleReflection/contextBuilder.js +3 -3
- package/codeyam-cli/src/utils/ruleReflection/contextBuilder.js.map +1 -1
- 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 +23 -23
- package/codeyam-cli/src/utils/rules/__tests__/ruleState.test.js.map +1 -1
- 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 +1 -0
- package/codeyam-cli/src/utils/rules/index.js.map +1 -1
- package/codeyam-cli/src/utils/rules/parser.js +19 -4
- 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 +10 -10
- package/codeyam-cli/src/utils/rules/ruleState.js.map +1 -1
- 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 +6 -6
- package/codeyam-cli/src/utils/rules/staleness.js.map +1 -1
- package/codeyam-cli/src/utils/serverState.js +64 -12
- package/codeyam-cli/src/utils/serverState.js.map +1 -1
- package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +61 -43
- package/codeyam-cli/src/utils/setupClaudeCodeSettings.js.map +1 -1
- package/codeyam-cli/src/utils/simulationGateMiddleware.js +159 -0
- package/codeyam-cli/src/utils/simulationGateMiddleware.js.map +1 -0
- package/codeyam-cli/src/utils/syncMocksMiddleware.js +5 -24
- package/codeyam-cli/src/utils/syncMocksMiddleware.js.map +1 -1
- package/codeyam-cli/src/utils/testRunner.js +158 -0
- package/codeyam-cli/src/utils/testRunner.js.map +1 -0
- package/codeyam-cli/src/utils/transcriptPruning.js +67 -0
- package/codeyam-cli/src/utils/transcriptPruning.js.map +1 -0
- package/codeyam-cli/src/utils/versionInfo.js +46 -0
- package/codeyam-cli/src/utils/versionInfo.js.map +1 -1
- package/codeyam-cli/src/utils/webappDetection.js +14 -2
- package/codeyam-cli/src/utils/webappDetection.js.map +1 -1
- package/codeyam-cli/src/webserver/__tests__/dependency-smoke.test.js +66 -0
- package/codeyam-cli/src/webserver/__tests__/dependency-smoke.test.js.map +1 -0
- package/codeyam-cli/src/webserver/app/lib/database.js +55 -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/backgroundServer.js +144 -25
- 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-CA3JxPb7.js → CopyButton-DmJveP3T.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{EntityItem-B86KKU7e.js → EntityItem-C76mRRiF.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeBadge-B5ctlSYt.js → EntityTypeBadge-g3saevPb.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeIcon-BqY8gDAW.js → EntityTypeIcon-CobE682z.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-Bu6c6aDe.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{InteractivePreview-BDhPilK7.js → InteractivePreview-DYFW3lDD.js} +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/{LibraryFunctionPreview-VeqEBv9v.js → LibraryFunctionPreview-DLeucoVX.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{LoadingDots-Bs7Nn1Jr.js → LoadingDots-BU_OAEMP.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-Bm3PmcCz.js → LogViewer-ceAyBX-H.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{ReportIssueModal-C6PKeMYR.js → ReportIssueModal-djPLI-WV.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/{SafeScreenshot-Gq3Ocjo6.js → SafeScreenshot-BED4B6sP.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-BNLaXBHR.js → ScenarioViewer-B76aig_2.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/Spinner-Bb5uFQ5V.js +34 -0
- package/codeyam-cli/src/webserver/build/client/assets/Terminal-BaIiqg_w.js +41 -0
- package/codeyam-cli/src/webserver/build/client/assets/{TruncatedFilePath-CiwXDxLh.js → TruncatedFilePath-C8OKAR5x.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{_index-B3TDXxnk.js → _index-C96V0n15.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{activity.(_tab)-BtBFH820.js → activity.(_tab)-BpKzcsJz.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/addon-fit-CUXOrorO.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/addon-web-links-Duc5hnl7.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/agent-transcripts-D9hemwl6.js +22 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-capture-scenario-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-client-errors-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-commit-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-dev-server-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-entity-status-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-entry-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-image._-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-screenshot-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-update-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-refresh-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-register-scenario-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-data-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-image._-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-switch-scenario-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-test-results-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.rule-path-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{book-open-PttOB2SF.js → book-open-D_nMCFmP.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{chevron-down-TJp6ofnp.js → chevron-down-BH2h1Ea2.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{chunk-JZWAC4HX-JE9ZIoBl.js → chunk-JZWAC4HX-C4pqxYJB.js} +9 -9
- package/codeyam-cli/src/webserver/build/client/assets/{circle-check-CXhHQYrI.js → circle-check-DyIKORY6.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{copy-6y9ALfGT.js → copy-NDbZjXao.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{createLucideIcon-Ca9fAY46.js → createLucideIcon-CMT1jU2q.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/dev.empty-BiM6z3Do.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/editor-Ba0jejiv.js +7 -0
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-n38keI1k.js → entity._sha._-CrjR3zZW.js} +10 -10
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.dev-DloHYjtt.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-C28BiQzt.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-p9hhkjJM.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.edit._scenarioId-38yPijoD.js → entity._sha_.edit._scenarioId-BMvVHNXU.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/{entry.client-BSHEfydn.js → entry.client-DTvKq3TY.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{fileTableUtils-DCPhhSMo.js → fileTableUtils-cPo8LiG3.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{files-0N0YJQv7.js → files-DO4CZ16O.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{git-DXnyr8uP.js → git-CFCTYk9I.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/globals-BH6uYxPM.css +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{index-ChN9-fAY.js → index-10oVnAAH.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{index-CcsFv748.js → index-BcvgDzbZ.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/labs-Zk7ryIM1.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-CTqLEAGU.js → loader-circle-BAXYRVEO.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/manifest-dcea65f8.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/memory-FweZHj5U.js +93 -0
- package/codeyam-cli/src/webserver/build/client/assets/{pause-D6vreykR.js → pause-DTAcYxBt.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/root-Dzn8nIkU.js +67 -0
- package/codeyam-cli/src/webserver/build/client/assets/{search-B8VUL8nl.js → search-fKo7v0Zo.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/settings-DfuTtcJP.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{simulations-CPoAg7Zo.js → simulations-B3aOzpCZ.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{terminal-BrCP7uQo.js → terminal-BG4heKCG.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{triangle-alert-BZz2NjYa.js → triangle-alert-DtSmdtM4.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useCustomSizes-DNwUduNu.js → useCustomSizes-ByhSyh0W.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/useLastLogLine-C14nCb1q.js +2 -0
- package/codeyam-cli/src/webserver/build/client/assets/{useReportContext-CpZgwliL.js → useReportContext-O-jkvSPx.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useToast-Bv9JFvUO.js → useToast-9FIWuYfK.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/xterm-DMSzMhqy.js +9 -0
- package/codeyam-cli/src/webserver/build/server/assets/index-mE6GlU_8.js +1 -0
- package/codeyam-cli/src/webserver/build/server/assets/server-build-BApEk7IO.js +362 -0
- package/codeyam-cli/src/webserver/build/server/index.js +1 -1
- package/codeyam-cli/src/webserver/build-info.json +5 -5
- package/codeyam-cli/src/webserver/devServer.js +39 -5
- package/codeyam-cli/src/webserver/devServer.js.map +1 -1
- package/codeyam-cli/src/webserver/editorProxy.js +272 -0
- package/codeyam-cli/src/webserver/editorProxy.js.map +1 -0
- package/codeyam-cli/src/webserver/scripts/journalCapture.ts +121 -0
- package/codeyam-cli/src/webserver/server.js +177 -1
- package/codeyam-cli/src/webserver/server.js.map +1 -1
- package/codeyam-cli/src/webserver/terminalServer.js +606 -0
- package/codeyam-cli/src/webserver/terminalServer.js.map +1 -0
- package/codeyam-cli/templates/{codeyam:debug.md → codeyam-debug.md} +1 -1
- package/codeyam-cli/templates/codeyam-dev-mode.md +237 -0
- package/codeyam-cli/templates/codeyam-diagnose.md +481 -0
- package/codeyam-cli/templates/codeyam-editor-claude.md +68 -0
- package/codeyam-cli/templates/codeyam-editor.md +67 -0
- package/codeyam-cli/templates/codeyam-memory-hook.sh +14 -14
- package/codeyam-cli/templates/{codeyam:memory.md → codeyam-memory.md} +16 -24
- package/codeyam-cli/templates/{codeyam:new-rule.md → codeyam-new-rule.md} +1 -3
- package/codeyam-cli/templates/{codeyam:setup.md → codeyam-setup.md} +13 -1
- package/codeyam-cli/templates/{codeyam:sim.md → codeyam-sim.md} +1 -1
- package/codeyam-cli/templates/{codeyam:test.md → codeyam-test.md} +1 -1
- package/codeyam-cli/templates/{codeyam:verify.md → codeyam-verify.md} +1 -1
- package/codeyam-cli/templates/editor-step-hook.py +143 -0
- package/codeyam-cli/templates/hooks/staleness-check.sh +43 -0
- package/codeyam-cli/templates/isolation-route/next-app.tsx.template +80 -0
- package/codeyam-cli/templates/isolation-route/next-pages.tsx.template +79 -0
- package/codeyam-cli/templates/isolation-route/vite-react.tsx.template +78 -0
- package/codeyam-cli/templates/msw/browser-setup.ts.template +47 -0
- package/codeyam-cli/templates/msw/handler-router.ts.template +47 -0
- package/codeyam-cli/templates/msw/server-setup.ts.template +52 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/PRISMA_SETUP.md +84 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/app/api/todos/route.ts +17 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/app/globals.css +26 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/app/layout.tsx +34 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/app/lib/prisma.ts +19 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/app/page.tsx +10 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/eslint.config.mjs +11 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/next.config.ts +14 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/package.json +35 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/postcss.config.mjs +7 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma/schema.prisma +27 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma/seed.ts +37 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma.config.ts +12 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/tsconfig.json +34 -0
- package/codeyam-cli/templates/prompts/conversation-guidance.txt +44 -0
- package/codeyam-cli/templates/prompts/conversation-prompt.txt +28 -0
- package/codeyam-cli/templates/prompts/interruption-prompt.txt +31 -0
- package/codeyam-cli/templates/prompts/stale-rules-prompt.txt +24 -0
- package/codeyam-cli/templates/rule-notification-hook.py +44 -17
- package/codeyam-cli/templates/rule-reflection-hook.py +88 -31
- package/codeyam-cli/templates/rules-instructions.md +45 -90
- package/package.json +15 -13
- package/packages/ai/index.js +1 -1
- package/packages/ai/index.js.map +1 -1
- package/packages/ai/src/lib/analyzeScope.js +14 -0
- 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/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 +362 -10
- package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
- 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 +59 -17
- package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.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/generateEntityScenarioData.js +79 -5
- package/packages/ai/src/lib/generateEntityScenarioData.js.map +1 -1
- package/packages/ai/src/lib/generateExecutionFlows.js +97 -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/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/src/lib/ProjectAnalyzer.js +3 -0
- package/packages/analyze/src/lib/ProjectAnalyzer.js.map +1 -1
- package/packages/analyze/src/lib/asts/nodes/getNodeType.js +1 -0
- package/packages/analyze/src/lib/asts/nodes/getNodeType.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js +11 -1
- package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/analyzeEntities.js +8 -1
- package/packages/analyze/src/lib/files/analyze/analyzeEntities.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/dependencyResolver.js +0 -5
- package/packages/analyze/src/lib/files/analyze/dependencyResolver.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js +9 -0
- package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/TransformationTracer.js +54 -27
- package/packages/analyze/src/lib/files/scenarios/TransformationTracer.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js +42 -13
- package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +65 -0
- package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +141 -71
- package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.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 +5 -0
- package/packages/database/src/lib/kysely/db.js.map +1 -1
- package/packages/database/src/lib/kysely/tables/editorScenariosTable.js +45 -0
- package/packages/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -0
- package/packages/database/src/lib/loadCommits.js +23 -13
- package/packages/database/src/lib/loadCommits.js.map +1 -1
- package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.js +1 -4
- package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.js.map +1 -1
- package/packages/database/src/lib/projectToDb.js +1 -1
- package/packages/database/src/lib/projectToDb.js.map +1 -1
- package/packages/database/src/lib/saveFiles.js +1 -1
- package/packages/database/src/lib/saveFiles.js.map +1 -1
- package/packages/database/src/lib/scenarioToDb.js +1 -1
- package/packages/database/src/lib/scenarioToDb.js.map +1 -1
- package/packages/database/src/lib/updateCommitMetadata.js +100 -89
- package/packages/database/src/lib/updateCommitMetadata.js.map +1 -1
- package/packages/database/src/lib/updateFreshAnalysisStatus.js +41 -30
- package/packages/database/src/lib/updateFreshAnalysisStatus.js.map +1 -1
- package/packages/database/src/lib/updateFreshAnalysisStatusWithScenarios.js +68 -57
- package/packages/database/src/lib/updateFreshAnalysisStatusWithScenarios.js.map +1 -1
- package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js +29 -1
- package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js.map +1 -1
- package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +33 -5
- package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
- package/packages/utils/src/lib/fs/rsyncCopy.js +98 -3
- package/packages/utils/src/lib/fs/rsyncCopy.js.map +1 -1
- package/scripts/finalize-analyzer.cjs +8 -76
- package/codeyam-cli/src/commands/detect-universal-mocks.js +0 -118
- package/codeyam-cli/src/commands/detect-universal-mocks.js.map +0 -1
- package/codeyam-cli/src/commands/list.js +0 -31
- package/codeyam-cli/src/commands/list.js.map +0 -1
- package/codeyam-cli/src/commands/webapp-info.js +0 -146
- package/codeyam-cli/src/commands/webapp-info.js.map +0 -1
- package/codeyam-cli/src/utils/universal-mocks.js +0 -152
- package/codeyam-cli/src/utils/universal-mocks.js.map +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-ClaLpuOo.js +0 -34
- package/codeyam-cli/src/webserver/build/client/assets/agent-transcripts-DfKzxuoe.js +0 -11
- package/codeyam-cli/src/webserver/build/client/assets/dev.empty-C5lqplTC.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-CBoafmVs.js +0 -6
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-DGgZjdFg.js +0 -6
- package/codeyam-cli/src/webserver/build/client/assets/globals-DoeDFXZN.css +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/labs-CmBYA0PH.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/manifest-76786b8e.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/memory-CrNQfdMO.js +0 -76
- package/codeyam-cli/src/webserver/build/client/assets/root-QAY34PIo.js +0 -62
- package/codeyam-cli/src/webserver/build/client/assets/settings-eBI36Yv5.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/useLastLogLine-COky1GVF.js +0 -2
- package/codeyam-cli/src/webserver/build/server/assets/index-DV1ykEI6.js +0 -1
- package/codeyam-cli/src/webserver/build/server/assets/server-build-BrcVrUEv.js +0 -260
- package/codeyam-cli/templates/codeyam-stop-hook.sh +0 -284
- package/codeyam-cli/templates/codeyam:diagnose.md +0 -805
- /package/codeyam-cli/src/webserver/build/client/assets/{api.labs-survey-l0sNRNKZ.js → api.dev-mode-events-l0sNRNKZ.js} +0 -0
|
@@ -181,6 +181,7 @@ const SILENTLY_IGNORED_EQUIVALENCY_REASONS = new Set([
|
|
|
181
181
|
'transformed non-object function equivalency - implicit parent equivalency - rerouted via useCallback',
|
|
182
182
|
'transformed non-object function equivalency - Array.from() equivalency',
|
|
183
183
|
'Spread operator equivalency key update: Explicit array deconstruction equivalency value',
|
|
184
|
+
// 'transformed non-object function equivalency - Explicit array deconstruction equivalency value',
|
|
184
185
|
]);
|
|
185
186
|
export class ScopeDataStructure {
|
|
186
187
|
// Getter for backward compatibility - returns the tree structure
|
|
@@ -697,6 +698,27 @@ export class ScopeDataStructure {
|
|
|
697
698
|
equivalentPath.startsWith(path + '(')) {
|
|
698
699
|
return;
|
|
699
700
|
}
|
|
701
|
+
// Case 3: Circular reference through scope-suffixed names (____cyScope pattern)
|
|
702
|
+
// When a named arrow function is defined inside a scope (e.g., useEffect callback):
|
|
703
|
+
// const identifyUser = async () => { ... };
|
|
704
|
+
// identifyUser();
|
|
705
|
+
// This creates a variable "identifyUser" and a scope "identifyUser____cyScope9F".
|
|
706
|
+
// Mutual equivalencies between these cause infinite loops in Phase 2 because
|
|
707
|
+
// processing one triggers addToSchema → followEquivalencies → addEquivalency
|
|
708
|
+
// on the reverse, which repeats indefinitely.
|
|
709
|
+
// Only block when the REVERSE direction already exists (creating a cycle).
|
|
710
|
+
// The initial one-directional equivalency is necessary for scope resolution.
|
|
711
|
+
if (path &&
|
|
712
|
+
equivalentPath &&
|
|
713
|
+
(equivalentPath.startsWith(path + '____') ||
|
|
714
|
+
path.startsWith(equivalentPath + '____'))) {
|
|
715
|
+
// Check if the reverse equivalency already exists
|
|
716
|
+
const reverseEquivalencies = scopeNode.equivalencies[equivalentPath] || [];
|
|
717
|
+
const reverseExists = reverseEquivalencies.some((v) => v.schemaPath === path);
|
|
718
|
+
if (reverseExists) {
|
|
719
|
+
return;
|
|
720
|
+
}
|
|
721
|
+
}
|
|
700
722
|
if (!equivalentScopeName) {
|
|
701
723
|
console.error('CodeYam Error: Missing equivalent scope name - FULL CONTEXT:', JSON.stringify({
|
|
702
724
|
path,
|
|
@@ -1925,6 +1947,8 @@ export class ScopeDataStructure {
|
|
|
1925
1947
|
return;
|
|
1926
1948
|
}
|
|
1927
1949
|
const usageScopeNode = this.getScopeOrFunctionCallInfo(usageEquivalency.scopeNodeName);
|
|
1950
|
+
if (!usageScopeNode)
|
|
1951
|
+
continue;
|
|
1928
1952
|
// Guard against infinite recursion by tracking which paths we've already
|
|
1929
1953
|
// added from addComplexSourcePathVariables
|
|
1930
1954
|
if (this.visitedTracker.checkAndMarkComplexSourceVisited(usageScopeNode.name, newUsageEquivalentPath)) {
|
|
@@ -1973,6 +1997,8 @@ export class ScopeDataStructure {
|
|
|
1973
1997
|
continue;
|
|
1974
1998
|
}
|
|
1975
1999
|
const usageScopeNode = this.getScopeOrFunctionCallInfo(usageEquivalency.scopeNodeName);
|
|
2000
|
+
if (!usageScopeNode)
|
|
2001
|
+
continue;
|
|
1976
2002
|
// This is put in place to avoid propagating array functions like 'filter' through complex equivalencies
|
|
1977
2003
|
// but may cause problems if the funtion call is not on a known object (e.g. string or array)
|
|
1978
2004
|
if (newUsageEquivalentPath.endsWith(')') ||
|
|
@@ -2301,6 +2327,21 @@ export class ScopeDataStructure {
|
|
|
2301
2327
|
* ensure all sub-paths of that variable are reflected under signature[N].
|
|
2302
2328
|
*/
|
|
2303
2329
|
propagateParameterToSignaturePaths(scopeNode) {
|
|
2330
|
+
// Helper: check if a type is a concrete scalar that cannot have sub-properties.
|
|
2331
|
+
const SCALAR_TYPES = new Set([
|
|
2332
|
+
'string',
|
|
2333
|
+
'number',
|
|
2334
|
+
'boolean',
|
|
2335
|
+
'bigint',
|
|
2336
|
+
'symbol',
|
|
2337
|
+
'void',
|
|
2338
|
+
'never',
|
|
2339
|
+
]);
|
|
2340
|
+
const isDefinitelyScalar = (type) => {
|
|
2341
|
+
const parts = type.split('|').map((s) => s.trim());
|
|
2342
|
+
const base = parts.filter((s) => s !== 'undefined' && s !== 'null');
|
|
2343
|
+
return base.length > 0 && base.every((b) => SCALAR_TYPES.has(b));
|
|
2344
|
+
};
|
|
2304
2345
|
// Find variable → signature[N] equivalencies
|
|
2305
2346
|
for (const [varName, equivalencies] of Object.entries(scopeNode.equivalencies)) {
|
|
2306
2347
|
// Only process simple variable names (no dots, brackets, or parens)
|
|
@@ -2322,7 +2363,37 @@ export class ScopeDataStructure {
|
|
|
2322
2363
|
const sigKey = signaturePath + suffix;
|
|
2323
2364
|
// Only add if the signature path doesn't already exist
|
|
2324
2365
|
if (!scopeNode.schema[sigKey]) {
|
|
2325
|
-
|
|
2366
|
+
// Check if this path represents variable conflation:
|
|
2367
|
+
// When a standalone variable (e.g., showWorkoutForm from useState)
|
|
2368
|
+
// appears as a sub-property of a scalar-typed ancestor (e.g.,
|
|
2369
|
+
// activity_type = "string"), it's from scope conflation, not real
|
|
2370
|
+
// property access. Block these while allowing legitimate built-in
|
|
2371
|
+
// accesses like string.length or string.slice.
|
|
2372
|
+
let isConflatedPath = false;
|
|
2373
|
+
let checkPos = signaturePath.length;
|
|
2374
|
+
while (true) {
|
|
2375
|
+
checkPos = sigKey.indexOf('.', checkPos + 1);
|
|
2376
|
+
if (checkPos === -1)
|
|
2377
|
+
break;
|
|
2378
|
+
const ancestorPath = sigKey.substring(0, checkPos);
|
|
2379
|
+
const ancestorType = scopeNode.schema[ancestorPath];
|
|
2380
|
+
if (ancestorType && isDefinitelyScalar(ancestorType)) {
|
|
2381
|
+
// Ancestor is scalar — check if the immediate sub-property
|
|
2382
|
+
// is also a standalone variable (indicating conflation)
|
|
2383
|
+
const afterDot = sigKey.substring(checkPos + 1);
|
|
2384
|
+
const nextSep = afterDot.search(/[.\[]/);
|
|
2385
|
+
const subPropName = nextSep === -1
|
|
2386
|
+
? afterDot
|
|
2387
|
+
: afterDot.substring(0, nextSep);
|
|
2388
|
+
if (scopeNode.schema[subPropName] !== undefined) {
|
|
2389
|
+
isConflatedPath = true;
|
|
2390
|
+
break;
|
|
2391
|
+
}
|
|
2392
|
+
}
|
|
2393
|
+
}
|
|
2394
|
+
if (!isConflatedPath) {
|
|
2395
|
+
scopeNode.schema[sigKey] = scopeNode.schema[key];
|
|
2396
|
+
}
|
|
2326
2397
|
}
|
|
2327
2398
|
}
|
|
2328
2399
|
}
|
|
@@ -2703,21 +2774,91 @@ export class ScopeDataStructure {
|
|
|
2703
2774
|
}
|
|
2704
2775
|
return [source];
|
|
2705
2776
|
};
|
|
2706
|
-
|
|
2777
|
+
const acc = entries.reduce((result, entry) => {
|
|
2707
2778
|
var _a;
|
|
2708
2779
|
if (entry.sourceCandidates.length === 0)
|
|
2709
|
-
return
|
|
2780
|
+
return result;
|
|
2710
2781
|
const usages = entry.usages.filter(usageMatchesScope);
|
|
2711
2782
|
for (const usage of usages) {
|
|
2712
|
-
|
|
2783
|
+
result[_a = usage.schemaPath] || (result[_a] = []);
|
|
2713
2784
|
// Resolve each source candidate through the equivalency chain
|
|
2714
2785
|
for (const source of entry.sourceCandidates) {
|
|
2715
2786
|
const resolvedSources = resolveToSignature(source, new Set());
|
|
2716
|
-
|
|
2787
|
+
result[usage.schemaPath].push(...resolvedSources);
|
|
2717
2788
|
}
|
|
2718
2789
|
}
|
|
2719
|
-
return
|
|
2790
|
+
return result;
|
|
2720
2791
|
}, {});
|
|
2792
|
+
// Post-processing: enrich useState-backed sources with co-located external
|
|
2793
|
+
// function calls. When a useState value resolves to a setter variable that
|
|
2794
|
+
// lives in the same scope as a fetch/API call, that fetch is a data source.
|
|
2795
|
+
this.enrichUseStateSourcesWithCoLocatedCalls(acc);
|
|
2796
|
+
return acc;
|
|
2797
|
+
}
|
|
2798
|
+
/**
|
|
2799
|
+
* For each source that ends at a useState path, check if the setter was called
|
|
2800
|
+
* from a scope that also contains external function calls (like fetch).
|
|
2801
|
+
* If so, add those external calls as additional source candidates.
|
|
2802
|
+
*/
|
|
2803
|
+
enrichUseStateSourcesWithCoLocatedCalls(acc) {
|
|
2804
|
+
const rootScopeName = this.scopeTreeManager.getRootName();
|
|
2805
|
+
const rootScope = this.scopeNodes[rootScopeName];
|
|
2806
|
+
if (!rootScope)
|
|
2807
|
+
return;
|
|
2808
|
+
// Collect all descendants for each scope node
|
|
2809
|
+
const getAllDescendants = (node) => {
|
|
2810
|
+
const names = new Set([node.name]);
|
|
2811
|
+
for (const child of node.children) {
|
|
2812
|
+
for (const name of getAllDescendants(child)) {
|
|
2813
|
+
names.add(name);
|
|
2814
|
+
}
|
|
2815
|
+
}
|
|
2816
|
+
return names;
|
|
2817
|
+
};
|
|
2818
|
+
for (const [usagePath, sources] of Object.entries(acc)) {
|
|
2819
|
+
const additionalSources = [];
|
|
2820
|
+
for (const source of sources) {
|
|
2821
|
+
// Check if this source is a useState-related terminal path
|
|
2822
|
+
// (e.g., useState(X).functionCallReturnValue[1] or useState(X).signature[0])
|
|
2823
|
+
if (!source.schemaPath.match(/^useState\([^)]*\)\./))
|
|
2824
|
+
continue;
|
|
2825
|
+
// Find the useState call from the source path
|
|
2826
|
+
const useStateCallMatch = source.schemaPath.match(/^(useState\([^)]*\))\./);
|
|
2827
|
+
if (!useStateCallMatch)
|
|
2828
|
+
continue;
|
|
2829
|
+
const useStateCall = useStateCallMatch[1];
|
|
2830
|
+
// Look in the root scope for the useState value equivalency
|
|
2831
|
+
// which tells us where the setter was called from
|
|
2832
|
+
const valuePath = `${useStateCall}.functionCallReturnValue[0]`;
|
|
2833
|
+
const valueEquivs = rootScope.equivalencies[valuePath];
|
|
2834
|
+
if (!valueEquivs)
|
|
2835
|
+
continue;
|
|
2836
|
+
for (const equiv of valueEquivs) {
|
|
2837
|
+
// Find the scope where the setter was called
|
|
2838
|
+
const setterScopeName = equiv.scopeNodeName;
|
|
2839
|
+
const setterScopeTree = this.scopeTreeManager.findNode(setterScopeName);
|
|
2840
|
+
if (!setterScopeTree)
|
|
2841
|
+
continue;
|
|
2842
|
+
// Get all descendant scope names from the setter scope
|
|
2843
|
+
const relatedScopes = getAllDescendants(setterScopeTree);
|
|
2844
|
+
// Find external function calls in those scopes whose return values
|
|
2845
|
+
// are actually consumed (assigned to a variable). This excludes
|
|
2846
|
+
// fire-and-forget calls like analytics.track() or console.log().
|
|
2847
|
+
const coLocatedCalls = this.externalFunctionCalls.filter((efc) => relatedScopes.has(efc.callScope) &&
|
|
2848
|
+
efc.receivingVariableNames &&
|
|
2849
|
+
efc.receivingVariableNames.length > 0);
|
|
2850
|
+
for (const call of coLocatedCalls) {
|
|
2851
|
+
additionalSources.push({
|
|
2852
|
+
scopeNodeName: call.callScope,
|
|
2853
|
+
schemaPath: `${call.callSignature}.functionCallReturnValue`,
|
|
2854
|
+
});
|
|
2855
|
+
}
|
|
2856
|
+
}
|
|
2857
|
+
}
|
|
2858
|
+
if (additionalSources.length > 0) {
|
|
2859
|
+
acc[usagePath].push(...additionalSources);
|
|
2860
|
+
}
|
|
2861
|
+
}
|
|
2721
2862
|
}
|
|
2722
2863
|
getUsageEquivalencies(functionName) {
|
|
2723
2864
|
const scopeNode = this.getScopeOrFunctionCallInfo(functionName);
|
|
@@ -2825,6 +2966,23 @@ export class ScopeDataStructure {
|
|
|
2825
2966
|
}
|
|
2826
2967
|
}
|
|
2827
2968
|
}
|
|
2969
|
+
// Helper: check if a type is a concrete scalar that cannot have sub-properties.
|
|
2970
|
+
// e.g., "string", "number | undefined", "boolean | null" are scalar.
|
|
2971
|
+
// "object", "array", "function", "unknown", "Workout", etc. are NOT scalar.
|
|
2972
|
+
const SCALAR_TYPES = new Set([
|
|
2973
|
+
'string',
|
|
2974
|
+
'number',
|
|
2975
|
+
'boolean',
|
|
2976
|
+
'bigint',
|
|
2977
|
+
'symbol',
|
|
2978
|
+
'void',
|
|
2979
|
+
'never',
|
|
2980
|
+
]);
|
|
2981
|
+
const isDefinitelyScalarType = (type) => {
|
|
2982
|
+
const parts = type.split('|').map((s) => s.trim());
|
|
2983
|
+
const base = parts.filter((s) => s !== 'undefined' && s !== 'null');
|
|
2984
|
+
return base.length > 0 && base.every((b) => SCALAR_TYPES.has(b));
|
|
2985
|
+
};
|
|
2828
2986
|
// Propagate nested paths from variables to their signature equivalents
|
|
2829
2987
|
// e.g., if workouts = signature[0].workouts, then workouts[].title becomes
|
|
2830
2988
|
// signature[0].workouts[].title
|
|
@@ -2844,7 +3002,67 @@ export class ScopeDataStructure {
|
|
|
2844
3002
|
const signatureKey = signaturePath + suffix;
|
|
2845
3003
|
// Add to schema if not already present
|
|
2846
3004
|
if (!tempScopeNode.schema[signatureKey]) {
|
|
2847
|
-
|
|
3005
|
+
// Check if this path represents variable conflation:
|
|
3006
|
+
// When a standalone variable (e.g., showWorkoutForm from useState)
|
|
3007
|
+
// appears as a sub-property of a scalar-typed ancestor (e.g.,
|
|
3008
|
+
// activity_type = "string"), it's from scope conflation, not real
|
|
3009
|
+
// property access. Block these while allowing legitimate built-in
|
|
3010
|
+
// accesses like string.length or string.slice.
|
|
3011
|
+
let isConflatedPath = false;
|
|
3012
|
+
let checkPos = signaturePath.length;
|
|
3013
|
+
while (true) {
|
|
3014
|
+
checkPos = signatureKey.indexOf('.', checkPos + 1);
|
|
3015
|
+
if (checkPos === -1)
|
|
3016
|
+
break;
|
|
3017
|
+
const ancestorPath = signatureKey.substring(0, checkPos);
|
|
3018
|
+
const ancestorType = tempScopeNode.schema[ancestorPath];
|
|
3019
|
+
if (ancestorType && isDefinitelyScalarType(ancestorType)) {
|
|
3020
|
+
// Ancestor is scalar — check if the immediate sub-property
|
|
3021
|
+
// is also a standalone variable (indicating conflation)
|
|
3022
|
+
const afterDot = signatureKey.substring(checkPos + 1);
|
|
3023
|
+
const nextSep = afterDot.search(/[.\[]/);
|
|
3024
|
+
const subPropName = nextSep === -1 ? afterDot : afterDot.substring(0, nextSep);
|
|
3025
|
+
if (schema[subPropName] !== undefined) {
|
|
3026
|
+
isConflatedPath = true;
|
|
3027
|
+
break;
|
|
3028
|
+
}
|
|
3029
|
+
}
|
|
3030
|
+
}
|
|
3031
|
+
if (!isConflatedPath) {
|
|
3032
|
+
tempScopeNode.schema[signatureKey] = schema[schemaKey];
|
|
3033
|
+
}
|
|
3034
|
+
}
|
|
3035
|
+
}
|
|
3036
|
+
}
|
|
3037
|
+
}
|
|
3038
|
+
// Post-process: filter out conflated signature paths.
|
|
3039
|
+
// During phase 2 scope analysis, useState(false) conflation can create
|
|
3040
|
+
// bad paths like signature[0].mockWorkouts[].activity_type.showWorkoutForm
|
|
3041
|
+
// directly in scopeNode.schema. These flow through signatureInSchema into
|
|
3042
|
+
// tempScopeNode.schema without any guard. Filter them out here by checking:
|
|
3043
|
+
// 1. An ancestor in the path has a concrete scalar type (string, number, boolean, etc.)
|
|
3044
|
+
// 2. The immediate sub-property of that scalar ancestor is also a standalone
|
|
3045
|
+
// variable in the schema (indicating conflation, not a real property access)
|
|
3046
|
+
for (const key of Object.keys(tempScopeNode.schema)) {
|
|
3047
|
+
if (!key.startsWith('signature['))
|
|
3048
|
+
continue;
|
|
3049
|
+
// Walk through the path looking for scalar-typed ancestors
|
|
3050
|
+
let pos = 0;
|
|
3051
|
+
while (true) {
|
|
3052
|
+
pos = key.indexOf('.', pos + 1);
|
|
3053
|
+
if (pos === -1)
|
|
3054
|
+
break;
|
|
3055
|
+
const ancestorPath = key.substring(0, pos);
|
|
3056
|
+
const ancestorType = tempScopeNode.schema[ancestorPath];
|
|
3057
|
+
if (ancestorType && isDefinitelyScalarType(ancestorType)) {
|
|
3058
|
+
// Found a scalar ancestor — check if the sub-property name
|
|
3059
|
+
// is a standalone variable in the getSchema() result
|
|
3060
|
+
const afterDot = key.substring(pos + 1);
|
|
3061
|
+
const nextSep = afterDot.search(/[.\[]/);
|
|
3062
|
+
const subPropName = nextSep === -1 ? afterDot : afterDot.substring(0, nextSep);
|
|
3063
|
+
if (schema[subPropName] !== undefined) {
|
|
3064
|
+
delete tempScopeNode.schema[key];
|
|
3065
|
+
break;
|
|
2848
3066
|
}
|
|
2849
3067
|
}
|
|
2850
3068
|
}
|
|
@@ -3114,6 +3332,13 @@ export class ScopeDataStructure {
|
|
|
3114
3332
|
!equivalentValue.schemaPath.startsWith('signature[') && // not a signature path
|
|
3115
3333
|
!equivalentValue.schemaPath.endsWith('.functionCallReturnValue') // not already handled above
|
|
3116
3334
|
) {
|
|
3335
|
+
// Skip bare "returnValue" from child scopes — this is the child's return value,
|
|
3336
|
+
// not a meaningful data source path in the parent scope
|
|
3337
|
+
if (equivalentValue.schemaPath === 'returnValue' &&
|
|
3338
|
+
equivalentValue.scopeNodeName !==
|
|
3339
|
+
this.scopeTreeManager.getRootName()) {
|
|
3340
|
+
continue;
|
|
3341
|
+
}
|
|
3117
3342
|
// Add equivalency (will accumulate if multiple values for OR expressions)
|
|
3118
3343
|
addEquivalency(path, equivalentValue.schemaPath);
|
|
3119
3344
|
}
|
|
@@ -3452,7 +3677,95 @@ export class ScopeDataStructure {
|
|
|
3452
3677
|
// Replace cyScope placeholders in all external function call data
|
|
3453
3678
|
// This ensures call signatures and schema paths use actual callback text
|
|
3454
3679
|
// instead of internal cyScope names, preventing mock data merge conflicts.
|
|
3455
|
-
|
|
3680
|
+
const rootScopeName = this.scopeTreeManager.getRootName();
|
|
3681
|
+
const rootSchema = this.scopeNodes[rootScopeName]?.schema ?? {};
|
|
3682
|
+
return this.externalFunctionCalls.map((efc) => {
|
|
3683
|
+
const cleaned = this.cleanCyScopeFromFunctionCallInfo(efc);
|
|
3684
|
+
return this.filterConflatedExternalPaths(cleaned, rootSchema);
|
|
3685
|
+
});
|
|
3686
|
+
}
|
|
3687
|
+
/**
|
|
3688
|
+
* Filters out conflated paths from external function call schemas.
|
|
3689
|
+
*
|
|
3690
|
+
* When multiple useState(false) calls create equivalency conflation during
|
|
3691
|
+
* Phase 1 analysis, standalone boolean state variables (like showWorkoutForm,
|
|
3692
|
+
* showGoalForm) can bleed into external function call schemas as sub-properties
|
|
3693
|
+
* of unrelated data fields (like data[].activity_type.showWorkoutForm).
|
|
3694
|
+
*
|
|
3695
|
+
* Detection: group sub-properties by parent path. If 2+ sub-properties of
|
|
3696
|
+
* the same parent all match standalone root scope variable names, treat them
|
|
3697
|
+
* as conflation artifacts and remove them.
|
|
3698
|
+
*/
|
|
3699
|
+
filterConflatedExternalPaths(efc, rootSchema) {
|
|
3700
|
+
// Build a set of top-level root scope variable names (simple names, no dots/brackets)
|
|
3701
|
+
const topLevelRootVars = new Set();
|
|
3702
|
+
for (const key of Object.keys(rootSchema)) {
|
|
3703
|
+
if (!key.includes('.') && !key.includes('[')) {
|
|
3704
|
+
topLevelRootVars.add(key);
|
|
3705
|
+
}
|
|
3706
|
+
}
|
|
3707
|
+
if (topLevelRootVars.size === 0)
|
|
3708
|
+
return efc;
|
|
3709
|
+
// Group sub-property matches by their parent path.
|
|
3710
|
+
// For a path like "...data[].activity_type.showWorkoutForm",
|
|
3711
|
+
// parent = "...data[].activity_type", child = "showWorkoutForm"
|
|
3712
|
+
const parentToConflatedKeys = new Map();
|
|
3713
|
+
for (const key of Object.keys(efc.schema)) {
|
|
3714
|
+
const lastDot = key.lastIndexOf('.');
|
|
3715
|
+
if (lastDot === -1)
|
|
3716
|
+
continue;
|
|
3717
|
+
const parent = key.substring(0, lastDot);
|
|
3718
|
+
const child = key.substring(lastDot + 1);
|
|
3719
|
+
// Skip array access or function call patterns
|
|
3720
|
+
if (child.includes('[') || child.includes('('))
|
|
3721
|
+
continue;
|
|
3722
|
+
// Only consider paths inside array element chains (contains []).
|
|
3723
|
+
// Direct children of functionCallReturnValue are legitimate destructured
|
|
3724
|
+
// return values, not conflation. Conflation happens deeper in the chain
|
|
3725
|
+
// when array element fields get corrupted sub-properties.
|
|
3726
|
+
if (!parent.includes('['))
|
|
3727
|
+
continue;
|
|
3728
|
+
if (topLevelRootVars.has(child)) {
|
|
3729
|
+
if (!parentToConflatedKeys.has(parent)) {
|
|
3730
|
+
parentToConflatedKeys.set(parent, []);
|
|
3731
|
+
}
|
|
3732
|
+
parentToConflatedKeys.get(parent).push(key);
|
|
3733
|
+
}
|
|
3734
|
+
}
|
|
3735
|
+
// Only filter when 2+ sub-properties of the same parent match root scope vars.
|
|
3736
|
+
// This threshold avoids false positives from coincidental name matches.
|
|
3737
|
+
const keysToRemove = new Set();
|
|
3738
|
+
const parentsToRestore = new Set();
|
|
3739
|
+
for (const [parent, conflatedKeys] of parentToConflatedKeys) {
|
|
3740
|
+
if (conflatedKeys.length >= 2) {
|
|
3741
|
+
for (const key of conflatedKeys) {
|
|
3742
|
+
keysToRemove.add(key);
|
|
3743
|
+
}
|
|
3744
|
+
parentsToRestore.add(parent);
|
|
3745
|
+
}
|
|
3746
|
+
}
|
|
3747
|
+
if (keysToRemove.size === 0)
|
|
3748
|
+
return efc;
|
|
3749
|
+
// Create a new schema without the conflated paths
|
|
3750
|
+
const newSchema = {};
|
|
3751
|
+
for (const [key, value] of Object.entries(efc.schema)) {
|
|
3752
|
+
if (keysToRemove.has(key))
|
|
3753
|
+
continue;
|
|
3754
|
+
// Restore parent type: if it was changed to "object" because of conflated
|
|
3755
|
+
// sub-properties, and now all those sub-properties are removed, change it
|
|
3756
|
+
// back to "unknown" (we don't know the original type)
|
|
3757
|
+
if (parentsToRestore.has(key) && value === 'object') {
|
|
3758
|
+
// Check if there are any remaining sub-properties
|
|
3759
|
+
const hasRemainingSubProps = Object.keys(efc.schema).some((k) => !keysToRemove.has(k) &&
|
|
3760
|
+
k !== key &&
|
|
3761
|
+
(k.startsWith(key + '.') || k.startsWith(key + '[')));
|
|
3762
|
+
newSchema[key] = hasRemainingSubProps ? value : 'unknown';
|
|
3763
|
+
}
|
|
3764
|
+
else {
|
|
3765
|
+
newSchema[key] = value;
|
|
3766
|
+
}
|
|
3767
|
+
}
|
|
3768
|
+
return { ...efc, schema: newSchema };
|
|
3456
3769
|
}
|
|
3457
3770
|
/**
|
|
3458
3771
|
* Cleans cyScope placeholder references from a FunctionCallInfo.
|
|
@@ -3673,6 +3986,7 @@ export class ScopeDataStructure {
|
|
|
3673
3986
|
*/
|
|
3674
3987
|
getEnrichedConditionalUsages() {
|
|
3675
3988
|
const enriched = {};
|
|
3989
|
+
console.log(`[getEnrichedConditionalUsages] Processing ${Object.keys(this.rawConditionalUsages).length} conditional paths: [${Object.keys(this.rawConditionalUsages).join(', ')}]`);
|
|
3676
3990
|
for (const [path, usages] of Object.entries(this.rawConditionalUsages)) {
|
|
3677
3991
|
// Try to trace this path back to a data source
|
|
3678
3992
|
// First, try the root scope
|
|
@@ -3680,9 +3994,47 @@ export class ScopeDataStructure {
|
|
|
3680
3994
|
const explanation = this.explainPath(rootScopeName, path);
|
|
3681
3995
|
let sourceDataPath;
|
|
3682
3996
|
if (explanation.source) {
|
|
3683
|
-
|
|
3684
|
-
|
|
3997
|
+
const { scope, path: sourcePath } = explanation.source;
|
|
3998
|
+
// Build initial path — avoid redundant prefix when path already contains the scope call
|
|
3999
|
+
let fullPath;
|
|
4000
|
+
if (sourcePath.startsWith(`${scope}(`)) {
|
|
4001
|
+
fullPath = sourcePath;
|
|
4002
|
+
}
|
|
4003
|
+
else {
|
|
4004
|
+
fullPath = `${scope}.${sourcePath}`;
|
|
4005
|
+
}
|
|
4006
|
+
sourceDataPath = fullPath;
|
|
4007
|
+
console.log(`[getEnrichedConditionalUsages] "${path}" explainPath → scope="${scope}", sourcePath="${sourcePath}" → sourceDataPath="${sourceDataPath}"`);
|
|
4008
|
+
}
|
|
4009
|
+
else {
|
|
4010
|
+
console.log(`[getEnrichedConditionalUsages] "${path}" explainPath → no source found`);
|
|
4011
|
+
}
|
|
4012
|
+
// If explainPath didn't find a useful external source (e.g., it traced to
|
|
4013
|
+
// useState or just to the component scope itself), check sourceEquivalencies
|
|
4014
|
+
// for an external function call source like a fetch call
|
|
4015
|
+
const hasExternalSource = sourceDataPath?.includes('.functionCallReturnValue');
|
|
4016
|
+
if (!hasExternalSource) {
|
|
4017
|
+
console.log(`[getEnrichedConditionalUsages] "${path}" no external source (sourceDataPath="${sourceDataPath}"), checking sourceEquivalencies fallback...`);
|
|
4018
|
+
const sourceEquiv = this.getSourceEquivalencies();
|
|
4019
|
+
const returnValueKey = `returnValue.${path}`;
|
|
4020
|
+
const sources = sourceEquiv[returnValueKey];
|
|
4021
|
+
if (sources) {
|
|
4022
|
+
console.log(`[getEnrichedConditionalUsages] "${path}" sourceEquivalencies["${returnValueKey}"] has ${sources.length} sources: [${sources.map((s) => s.schemaPath).join(', ')}]`);
|
|
4023
|
+
const externalSource = sources.find((s) => s.schemaPath.includes('.functionCallReturnValue') &&
|
|
4024
|
+
!s.schemaPath.startsWith('useState('));
|
|
4025
|
+
if (externalSource) {
|
|
4026
|
+
console.log(`[getEnrichedConditionalUsages] "${path}" sourceEquivalencies fallback found external source: "${externalSource.schemaPath}"`);
|
|
4027
|
+
sourceDataPath = externalSource.schemaPath;
|
|
4028
|
+
}
|
|
4029
|
+
else {
|
|
4030
|
+
console.log(`[getEnrichedConditionalUsages] "${path}" sourceEquivalencies fallback found no external function call source`);
|
|
4031
|
+
}
|
|
4032
|
+
}
|
|
4033
|
+
else {
|
|
4034
|
+
console.log(`[getEnrichedConditionalUsages] "${path}" sourceEquivalencies["${returnValueKey}"] not found`);
|
|
4035
|
+
}
|
|
3685
4036
|
}
|
|
4037
|
+
console.log(`[getEnrichedConditionalUsages] "${path}" FINAL sourceDataPath="${sourceDataPath ?? '(none)'}" (${usages.length} usages)`);
|
|
3686
4038
|
enriched[path] = usages.map((usage) => ({
|
|
3687
4039
|
...usage,
|
|
3688
4040
|
sourceDataPath,
|