@codeyam/codeyam-cli 0.1.0-staging.1 → 0.1.0-staging.28f73cf
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 +8 -7
- package/analyzer-template/packages/ai/index.ts +2 -1
- package/analyzer-template/packages/ai/package.json +2 -2
- package/analyzer-template/packages/ai/scripts/ai-test-matrix.mjs +424 -0
- package/analyzer-template/packages/ai/src/lib/analyzeScope.ts +24 -0
- package/analyzer-template/packages/ai/src/lib/astScopes/astScopeAnalyzer.ts +6 -16
- package/analyzer-template/packages/ai/src/lib/astScopes/methodSemantics.ts +197 -0
- package/analyzer-template/packages/ai/src/lib/astScopes/paths.ts +28 -2
- package/analyzer-template/packages/ai/src/lib/astScopes/processExpression.ts +127 -4
- package/analyzer-template/packages/ai/src/lib/checkAllAttributes.ts +1 -3
- package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +1821 -542
- package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/FunctionCallManager.ts +138 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.ts +1 -1
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/BatchSchemaProcessor.ts +139 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/DebugTracer.ts +224 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/PathManager.ts +203 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/README.md +294 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/ScopeTreeManager.ts +161 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/VisitedTracker.ts +235 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.ts +14 -6
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/selectBestValue.ts +70 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/uniqueIdUtils.ts +113 -0
- package/analyzer-template/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.ts +36 -0
- package/analyzer-template/packages/ai/src/lib/generateChangesEntityDocumentation.ts +20 -2
- package/analyzer-template/packages/ai/src/lib/generateChangesEntityKeyAttributes.ts +51 -107
- package/analyzer-template/packages/ai/src/lib/generateChangesEntityScenarioData.ts +56 -160
- package/analyzer-template/packages/ai/src/lib/generateChangesEntityScenarios.ts +79 -265
- package/analyzer-template/packages/ai/src/lib/generateEntityDocumentation.ts +16 -2
- package/analyzer-template/packages/ai/src/lib/generateEntityKeyAttributes.ts +53 -176
- package/analyzer-template/packages/ai/src/lib/generateEntityScenarioData.ts +53 -154
- package/analyzer-template/packages/ai/src/lib/generateEntityScenarios.ts +84 -254
- package/analyzer-template/packages/ai/src/lib/generateStatementAnalysis.ts +48 -71
- package/analyzer-template/packages/ai/src/lib/getConditionalUsagesFromCode.ts +27 -6
- package/analyzer-template/packages/ai/src/lib/getLLMCallStats.ts +0 -14
- package/analyzer-template/packages/ai/src/lib/modelInfo.ts +15 -0
- package/analyzer-template/packages/ai/src/lib/promptGenerators/gatherAttributesMap.ts +42 -4
- package/analyzer-template/packages/ai/src/lib/promptGenerators/generateChangesEntityDocumentationGenerator.ts +8 -33
- package/analyzer-template/packages/ai/src/lib/promptGenerators/generateChangesEntityScenarioDataGenerator.ts +54 -62
- package/analyzer-template/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.ts +93 -109
- package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityDocumentationGenerator.ts +8 -27
- package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.ts +33 -38
- package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.ts +30 -30
- package/analyzer-template/packages/ai/src/lib/types/index.ts +2 -0
- package/analyzer-template/packages/ai/src/lib/worker/SerializableDataStructure.ts +39 -0
- package/analyzer-template/packages/analyze/src/lib/FileAnalyzer.ts +52 -6
- package/analyzer-template/packages/analyze/src/lib/asts/nodes/index.ts +2 -1
- package/analyzer-template/packages/analyze/src/lib/asts/sourceFiles/getAllDeclaredEntityNodes.ts +238 -0
- package/analyzer-template/packages/analyze/src/lib/asts/sourceFiles/getDeclaredEntityNode.ts +25 -0
- package/analyzer-template/packages/analyze/src/lib/asts/sourceFiles/index.ts +2 -0
- package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.ts +8 -10
- package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities.ts +6 -1
- package/analyzer-template/packages/analyze/src/lib/files/analyze/gatherEntityMap.ts +8 -6
- package/analyzer-template/packages/analyze/src/lib/files/analyze/trackEntityCircularDependencies.ts +5 -13
- package/analyzer-template/packages/analyze/src/lib/files/analyzeChange.ts +34 -15
- package/analyzer-template/packages/analyze/src/lib/files/analyzeEntity.ts +17 -3
- package/analyzer-template/packages/analyze/src/lib/files/analyzeInitial.ts +35 -16
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +7 -1
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.ts +9 -1
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateScenarioData.ts +6 -1
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateScenarios.ts +9 -1
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +15 -7
- package/analyzer-template/packages/aws/dist/src/lib/s3/getPresignedUrl.d.ts +23 -0
- package/analyzer-template/packages/aws/dist/src/lib/s3/getPresignedUrl.d.ts.map +1 -0
- package/analyzer-template/packages/aws/dist/src/lib/s3/getPresignedUrl.js +30 -0
- package/analyzer-template/packages/aws/dist/src/lib/s3/getPresignedUrl.js.map +1 -0
- package/analyzer-template/packages/aws/package.json +5 -4
- package/analyzer-template/packages/aws/s3/index.ts +4 -0
- package/analyzer-template/packages/aws/src/lib/s3/getPresignedUrl.ts +62 -0
- package/analyzer-template/packages/generate/src/lib/componentScenarioPage/componentScenarioPageNext.ts +28 -21
- package/analyzer-template/packages/generate/src/lib/componentScenarioPage/componentScenarioPageRemix.ts +18 -11
- package/analyzer-template/packages/generate/src/lib/scenarioComponent.ts +6 -3
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/componentScenarioPageNext.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/componentScenarioPageNext.js +28 -21
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/componentScenarioPageNext.js.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/componentScenarioPageRemix.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/componentScenarioPageRemix.js +18 -11
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/componentScenarioPageRemix.js.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/scenarioComponent.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/scenarioComponent.js +5 -3
- package/analyzer-template/packages/github/dist/generate/src/lib/scenarioComponent.js.map +1 -1
- package/analyzer-template/packages/github/dist/supabase/src/lib/kysely/db.d.ts +2 -0
- package/analyzer-template/packages/github/dist/supabase/src/lib/kysely/db.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/supabase/src/lib/kysely/db.js +3 -0
- package/analyzer-template/packages/github/dist/supabase/src/lib/kysely/db.js.map +1 -1
- package/analyzer-template/packages/github/dist/supabase/src/lib/kysely/tableRelations.d.ts +2 -0
- package/analyzer-template/packages/github/dist/supabase/src/lib/kysely/tableRelations.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/supabase/src/lib/kysely/tables/debugReportsTable.d.ts +37 -0
- package/analyzer-template/packages/github/dist/supabase/src/lib/kysely/tables/debugReportsTable.d.ts.map +1 -0
- package/analyzer-template/packages/github/dist/supabase/src/lib/kysely/tables/debugReportsTable.js +27 -0
- package/analyzer-template/packages/github/dist/supabase/src/lib/kysely/tables/debugReportsTable.js.map +1 -0
- package/analyzer-template/packages/github/dist/utils/index.d.ts +2 -0
- package/analyzer-template/packages/github/dist/utils/index.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/utils/index.js +2 -0
- package/analyzer-template/packages/github/dist/utils/index.js.map +1 -1
- package/analyzer-template/packages/github/dist/utils/src/lib/Semaphore.d.ts +25 -0
- package/analyzer-template/packages/github/dist/utils/src/lib/Semaphore.d.ts.map +1 -0
- package/analyzer-template/packages/github/dist/utils/src/lib/Semaphore.js +40 -0
- package/analyzer-template/packages/github/dist/utils/src/lib/Semaphore.js.map +1 -0
- package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/getNextRoutePath.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/getNextRoutePath.js +5 -3
- package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/getNextRoutePath.js.map +1 -1
- package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/getRemixRoutePath.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/getRemixRoutePath.js +2 -1
- package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/getRemixRoutePath.js.map +1 -1
- package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/nextRouteFileNameToRoute.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/nextRouteFileNameToRoute.js +2 -1
- package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/nextRouteFileNameToRoute.js.map +1 -1
- package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/remixRouteFileNameToRoute.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/remixRouteFileNameToRoute.js +1 -0
- package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/remixRouteFileNameToRoute.js.map +1 -1
- package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/sanitizeNextRouteSegments.d.ts +12 -0
- package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/sanitizeNextRouteSegments.d.ts.map +1 -0
- package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/sanitizeNextRouteSegments.js +32 -0
- package/analyzer-template/packages/github/dist/utils/src/lib/frameworks/sanitizeNextRouteSegments.js.map +1 -0
- package/analyzer-template/packages/supabase/src/lib/kysely/db.ts +6 -0
- package/analyzer-template/packages/supabase/src/lib/kysely/tableRelations.ts +3 -0
- package/analyzer-template/packages/supabase/src/lib/kysely/tables/debugReportsTable.ts +61 -0
- package/analyzer-template/packages/ui-components/src/scenario-editor/components/DataItemEditor.tsx +1 -1
- package/analyzer-template/packages/utils/dist/utils/index.d.ts +2 -0
- package/analyzer-template/packages/utils/dist/utils/index.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/utils/index.js +2 -0
- package/analyzer-template/packages/utils/dist/utils/index.js.map +1 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/Semaphore.d.ts +25 -0
- package/analyzer-template/packages/utils/dist/utils/src/lib/Semaphore.d.ts.map +1 -0
- package/analyzer-template/packages/utils/dist/utils/src/lib/Semaphore.js +40 -0
- package/analyzer-template/packages/utils/dist/utils/src/lib/Semaphore.js.map +1 -0
- package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/getNextRoutePath.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/getNextRoutePath.js +5 -3
- package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/getNextRoutePath.js.map +1 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/getRemixRoutePath.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/getRemixRoutePath.js +2 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/getRemixRoutePath.js.map +1 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/nextRouteFileNameToRoute.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/nextRouteFileNameToRoute.js +2 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/nextRouteFileNameToRoute.js.map +1 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/remixRouteFileNameToRoute.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/remixRouteFileNameToRoute.js +1 -0
- package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/remixRouteFileNameToRoute.js.map +1 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/sanitizeNextRouteSegments.d.ts +12 -0
- package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/sanitizeNextRouteSegments.d.ts.map +1 -0
- package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/sanitizeNextRouteSegments.js +32 -0
- package/analyzer-template/packages/utils/dist/utils/src/lib/frameworks/sanitizeNextRouteSegments.js.map +1 -0
- package/analyzer-template/packages/utils/index.ts +2 -0
- package/analyzer-template/packages/utils/src/lib/Semaphore.ts +42 -0
- package/analyzer-template/packages/utils/src/lib/frameworks/getNextRoutePath.ts +8 -3
- package/analyzer-template/packages/utils/src/lib/frameworks/getRemixRoutePath.ts +2 -1
- package/analyzer-template/packages/utils/src/lib/frameworks/nextRouteFileNameToRoute.ts +2 -1
- package/analyzer-template/packages/utils/src/lib/frameworks/remixRouteFileNameToRoute.ts +1 -0
- package/analyzer-template/packages/utils/src/lib/frameworks/sanitizeNextRouteSegments.ts +33 -0
- package/analyzer-template/project/constructMockCode.ts +170 -6
- package/analyzer-template/project/reconcileMockDataKeys.ts +13 -0
- package/analyzer-template/project/start.ts +1 -11
- package/analyzer-template/project/startScenarioCapture.ts +24 -0
- package/analyzer-template/project/trackGeneratedFiles.ts +41 -0
- package/analyzer-template/project/writeMockDataTsx.ts +125 -4
- package/analyzer-template/project/writeScenarioComponents.ts +199 -45
- package/analyzer-template/project/writeUniversalMocks.ts +72 -10
- package/background/src/lib/virtualized/project/constructMockCode.js +158 -7
- package/background/src/lib/virtualized/project/constructMockCode.js.map +1 -1
- package/background/src/lib/virtualized/project/reconcileMockDataKeys.js +12 -0
- package/background/src/lib/virtualized/project/reconcileMockDataKeys.js.map +1 -1
- package/background/src/lib/virtualized/project/start.js +1 -8
- package/background/src/lib/virtualized/project/start.js.map +1 -1
- package/background/src/lib/virtualized/project/startScenarioCapture.js +18 -0
- package/background/src/lib/virtualized/project/startScenarioCapture.js.map +1 -1
- package/background/src/lib/virtualized/project/trackGeneratedFiles.js +30 -0
- package/background/src/lib/virtualized/project/trackGeneratedFiles.js.map +1 -0
- package/background/src/lib/virtualized/project/writeMockDataTsx.js +95 -3
- package/background/src/lib/virtualized/project/writeMockDataTsx.js.map +1 -1
- package/background/src/lib/virtualized/project/writeScenarioComponents.js +144 -28
- package/background/src/lib/virtualized/project/writeScenarioComponents.js.map +1 -1
- package/background/src/lib/virtualized/project/writeUniversalMocks.js +59 -9
- package/background/src/lib/virtualized/project/writeUniversalMocks.js.map +1 -1
- package/codeyam-cli/scripts/apply-setup.js +288 -0
- package/codeyam-cli/scripts/apply-setup.js.map +1 -0
- package/codeyam-cli/scripts/extract-setup.js +130 -0
- package/codeyam-cli/scripts/extract-setup.js.map +1 -0
- package/codeyam-cli/scripts/fixtures/cal.com/universal-mocks/packages/prisma/index.js +238 -0
- package/codeyam-cli/scripts/fixtures/cal.com/universal-mocks/packages/prisma/index.js.map +1 -0
- package/codeyam-cli/src/cli.js +6 -0
- package/codeyam-cli/src/cli.js.map +1 -1
- package/codeyam-cli/src/codeyam-cli.js +0 -0
- package/codeyam-cli/src/commands/debug.js +221 -0
- package/codeyam-cli/src/commands/debug.js.map +1 -0
- package/codeyam-cli/src/commands/init.js +4 -23
- package/codeyam-cli/src/commands/init.js.map +1 -1
- package/codeyam-cli/src/commands/report.js +102 -0
- package/codeyam-cli/src/commands/report.js.map +1 -0
- package/codeyam-cli/src/commands/setup-sandbox.js +164 -0
- package/codeyam-cli/src/commands/setup-sandbox.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/cleanupAnalysisFiles.test.js +6 -6
- package/codeyam-cli/src/utils/__tests__/cleanupAnalysisFiles.test.js.map +1 -1
- package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +8 -0
- package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js.map +1 -1
- package/codeyam-cli/src/utils/analysisRunner.js +4 -3
- package/codeyam-cli/src/utils/analysisRunner.js.map +1 -1
- package/codeyam-cli/src/utils/analyzer.js +30 -0
- package/codeyam-cli/src/utils/analyzer.js.map +1 -1
- package/codeyam-cli/src/utils/backgroundServer.js +25 -5
- package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
- package/codeyam-cli/src/utils/cleanupAnalysisFiles.js +2 -2
- package/codeyam-cli/src/utils/cleanupAnalysisFiles.js.map +1 -1
- package/codeyam-cli/src/utils/fileWatcher.js +75 -5
- package/codeyam-cli/src/utils/fileWatcher.js.map +1 -1
- package/codeyam-cli/src/utils/generateReport.js +219 -0
- package/codeyam-cli/src/utils/generateReport.js.map +1 -0
- package/codeyam-cli/src/utils/install-skills.js +7 -0
- package/codeyam-cli/src/utils/install-skills.js.map +1 -1
- package/codeyam-cli/src/utils/queue/__tests__/job.pidTracking.test.js +1 -0
- package/codeyam-cli/src/utils/queue/__tests__/job.pidTracking.test.js.map +1 -1
- package/codeyam-cli/src/utils/queue/job.js +8 -3
- package/codeyam-cli/src/utils/queue/job.js.map +1 -1
- package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +4 -0
- package/codeyam-cli/src/utils/setupClaudeCodeSettings.js.map +1 -1
- package/codeyam-cli/src/utils/webappDetection.js +2 -1
- package/codeyam-cli/src/utils/webappDetection.js.map +1 -1
- package/codeyam-cli/src/webserver/app/lib/database.js +63 -2
- package/codeyam-cli/src/webserver/app/lib/database.js.map +1 -1
- package/codeyam-cli/src/webserver/backgroundServer.js +15 -35
- package/codeyam-cli/src/webserver/backgroundServer.js.map +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/EntityTypeIcon-D5ZHFomX.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{InteractivePreview-Dh-FldQK.js → InteractivePreview-XDSzQLOY.js} +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-BYVx9KFp.js +3 -0
- package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-Dp6DC845.js → LogViewer-CRcT5fOZ.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/ReportIssueModal-BORLgi0X.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-Bual6h18.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/ScenarioPreview-Bi-YUMa-.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/ScenarioViewer-4D2vLLJz.js +5 -0
- package/codeyam-cli/src/webserver/build/client/assets/_index-BC200mfN.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/activity.(_tab)-CxvZPkCv.js +10 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.generate-report-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{chart-column-B2I7jQx2.js → chart-column-B8fb6wnw.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/chunk-WWGJGFF6-De6i8FUT.js +26 -0
- package/codeyam-cli/src/webserver/build/client/assets/{circle-alert-GwwOAbhw.js → circle-alert-IdsgAK39.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/circle-check-BACUUf75.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/clock-vWeoCemX.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-CS7XDrKv.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/dev.empty-DIOEw_3i.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-1Z6D0fLM.js → entity._sha._-8Els_3Wb.js} +10 -10
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-C3FZJx1w.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.edit._scenarioId-YJz_igar.js +5 -0
- package/codeyam-cli/src/webserver/build/client/assets/entityStatus-BEqj2qBy.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{entityVersioning-DO2gCvXv.js → entityVersioning-Bk_YB1jM.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/entry.client-DiP0q291.js +5 -0
- package/codeyam-cli/src/webserver/build/client/assets/file-text-LM0mgxXE.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/files-Dxh9CcaV.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/git-BXmqrWCH.js +12 -0
- package/codeyam-cli/src/webserver/build/client/assets/globals-BGS74ED-.css +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/html2canvas-pro.esm-XQCGvadH.js +5 -0
- package/codeyam-cli/src/webserver/build/client/assets/index-D-zYbzFZ.js +8 -0
- package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-DN7Vr40D.js → loader-circle-BXPKbHEb.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/manifest-1af162d4.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/root-DB7VgjCY.js +16 -0
- package/codeyam-cli/src/webserver/build/client/assets/{settings-MZc4XdmE.js → settings-5zF_GOcS.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/settings-Dc4MlMpK.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/simulations-BQ-02-jB.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/triangle-alert-D7k-ArFa.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{useLastLogLine-BBlyqxij.js → useLastLogLine-AlhS7g5F.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/useToast-Ddo4UQv7.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{zap-B4gsLUZQ.js → zap-_jw-9DCp.js} +1 -1
- package/codeyam-cli/src/webserver/build/server/assets/index-D4JpXSIO.js +1 -0
- package/codeyam-cli/src/webserver/build/server/assets/server-build-vwbN7n65.js +169 -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/server.js +1 -1
- package/codeyam-cli/src/webserver/server.js.map +1 -1
- package/codeyam-cli/templates/codeyam-setup-skill.md +85 -94
- package/codeyam-cli/templates/debug-command.md +125 -0
- package/package.json +9 -11
- package/packages/ai/index.js +1 -2
- package/packages/ai/index.js.map +1 -1
- package/packages/ai/src/lib/analyzeScope.js +13 -0
- package/packages/ai/src/lib/analyzeScope.js.map +1 -1
- package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js +6 -15
- package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js.map +1 -1
- package/packages/ai/src/lib/astScopes/methodSemantics.js +134 -0
- package/packages/ai/src/lib/astScopes/methodSemantics.js.map +1 -1
- package/packages/ai/src/lib/astScopes/paths.js +28 -3
- package/packages/ai/src/lib/astScopes/paths.js.map +1 -1
- package/packages/ai/src/lib/astScopes/processExpression.js +111 -3
- package/packages/ai/src/lib/astScopes/processExpression.js.map +1 -1
- package/packages/ai/src/lib/checkAllAttributes.js +1 -3
- package/packages/ai/src/lib/checkAllAttributes.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +1320 -396
- package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/FunctionCallManager.js +137 -1
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/FunctionCallManager.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.js +1 -1
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/BatchSchemaProcessor.js +112 -0
- package/packages/ai/src/lib/dataStructure/helpers/BatchSchemaProcessor.js.map +1 -0
- package/packages/ai/src/lib/dataStructure/helpers/DebugTracer.js +176 -0
- package/packages/ai/src/lib/dataStructure/helpers/DebugTracer.js.map +1 -0
- package/packages/ai/src/lib/dataStructure/helpers/PathManager.js +178 -0
- package/packages/ai/src/lib/dataStructure/helpers/PathManager.js.map +1 -0
- package/packages/ai/src/lib/dataStructure/helpers/ScopeTreeManager.js +138 -0
- package/packages/ai/src/lib/dataStructure/helpers/ScopeTreeManager.js.map +1 -0
- package/packages/ai/src/lib/dataStructure/helpers/VisitedTracker.js +199 -0
- package/packages/ai/src/lib/dataStructure/helpers/VisitedTracker.js.map +1 -0
- package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js +14 -6
- package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/selectBestValue.js +62 -0
- package/packages/ai/src/lib/dataStructure/helpers/selectBestValue.js.map +1 -0
- package/packages/ai/src/lib/dataStructure/helpers/uniqueIdUtils.js +90 -0
- package/packages/ai/src/lib/dataStructure/helpers/uniqueIdUtils.js.map +1 -0
- package/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.js +22 -0
- package/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.js.map +1 -1
- package/packages/ai/src/lib/generateChangesEntityDocumentation.js +19 -1
- package/packages/ai/src/lib/generateChangesEntityDocumentation.js.map +1 -1
- package/packages/ai/src/lib/generateChangesEntityKeyAttributes.js +51 -107
- package/packages/ai/src/lib/generateChangesEntityKeyAttributes.js.map +1 -1
- package/packages/ai/src/lib/generateChangesEntityScenarioData.js +55 -156
- package/packages/ai/src/lib/generateChangesEntityScenarioData.js.map +1 -1
- package/packages/ai/src/lib/generateChangesEntityScenarios.js +79 -262
- package/packages/ai/src/lib/generateChangesEntityScenarios.js.map +1 -1
- package/packages/ai/src/lib/generateEntityDocumentation.js +15 -1
- package/packages/ai/src/lib/generateEntityDocumentation.js.map +1 -1
- package/packages/ai/src/lib/generateEntityKeyAttributes.js +53 -176
- package/packages/ai/src/lib/generateEntityKeyAttributes.js.map +1 -1
- package/packages/ai/src/lib/generateEntityScenarioData.js +52 -152
- package/packages/ai/src/lib/generateEntityScenarioData.js.map +1 -1
- package/packages/ai/src/lib/generateEntityScenarios.js +88 -258
- package/packages/ai/src/lib/generateEntityScenarios.js.map +1 -1
- package/packages/ai/src/lib/generateStatementAnalysis.js +46 -71
- package/packages/ai/src/lib/generateStatementAnalysis.js.map +1 -1
- package/packages/ai/src/lib/getConditionalUsagesFromCode.js +13 -8
- package/packages/ai/src/lib/getConditionalUsagesFromCode.js.map +1 -1
- package/packages/ai/src/lib/getLLMCallStats.js +0 -14
- package/packages/ai/src/lib/getLLMCallStats.js.map +1 -1
- package/packages/ai/src/lib/modelInfo.js +15 -0
- package/packages/ai/src/lib/modelInfo.js.map +1 -1
- package/packages/ai/src/lib/promptGenerators/gatherAttributesMap.js +36 -3
- package/packages/ai/src/lib/promptGenerators/gatherAttributesMap.js.map +1 -1
- package/packages/ai/src/lib/promptGenerators/generateChangesEntityDocumentationGenerator.js +8 -33
- package/packages/ai/src/lib/promptGenerators/generateChangesEntityDocumentationGenerator.js.map +1 -1
- package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenarioDataGenerator.js +35 -41
- package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenarioDataGenerator.js.map +1 -1
- package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.js +59 -72
- package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.js.map +1 -1
- package/packages/ai/src/lib/promptGenerators/generateEntityDocumentationGenerator.js +8 -27
- package/packages/ai/src/lib/promptGenerators/generateEntityDocumentationGenerator.js.map +1 -1
- package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js +24 -27
- package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js.map +1 -1
- package/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.js +21 -22
- package/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.js.map +1 -1
- package/packages/ai/src/lib/types/index.js +2 -0
- package/packages/ai/src/lib/types/index.js.map +1 -1
- package/packages/ai/src/lib/worker/SerializableDataStructure.js +7 -0
- package/packages/ai/src/lib/worker/SerializableDataStructure.js.map +1 -1
- package/packages/analyze/src/lib/FileAnalyzer.js +45 -5
- package/packages/analyze/src/lib/FileAnalyzer.js.map +1 -1
- package/packages/analyze/src/lib/asts/nodes/index.js +2 -1
- package/packages/analyze/src/lib/asts/nodes/index.js.map +1 -1
- package/packages/analyze/src/lib/asts/sourceFiles/getAllDeclaredEntityNodes.js +191 -0
- package/packages/analyze/src/lib/asts/sourceFiles/getAllDeclaredEntityNodes.js.map +1 -0
- package/packages/analyze/src/lib/asts/sourceFiles/getDeclaredEntityNode.js +16 -0
- package/packages/analyze/src/lib/asts/sourceFiles/getDeclaredEntityNode.js.map +1 -0
- package/packages/analyze/src/lib/asts/sourceFiles/index.js +2 -0
- package/packages/analyze/src/lib/asts/sourceFiles/index.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js +6 -8
- package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/analyzeEntities.js +5 -1
- package/packages/analyze/src/lib/files/analyze/analyzeEntities.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/gatherEntityMap.js +8 -2
- package/packages/analyze/src/lib/files/analyze/gatherEntityMap.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/trackEntityCircularDependencies.js +5 -8
- package/packages/analyze/src/lib/files/analyze/trackEntityCircularDependencies.js.map +1 -1
- package/packages/analyze/src/lib/files/analyzeChange.js +21 -9
- package/packages/analyze/src/lib/files/analyzeChange.js.map +1 -1
- package/packages/analyze/src/lib/files/analyzeEntity.js +10 -4
- package/packages/analyze/src/lib/files/analyzeEntity.js.map +1 -1
- package/packages/analyze/src/lib/files/analyzeInitial.js +21 -9
- package/packages/analyze/src/lib/files/analyzeInitial.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +6 -1
- package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.js +9 -1
- package/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateScenarioData.js +5 -1
- package/packages/analyze/src/lib/files/scenarios/generateScenarioData.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateScenarios.js +9 -1
- package/packages/analyze/src/lib/files/scenarios/generateScenarios.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +16 -7
- package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js.map +1 -1
- package/packages/generate/src/lib/componentScenarioPage/componentScenarioPageNext.js +28 -21
- package/packages/generate/src/lib/componentScenarioPage/componentScenarioPageNext.js.map +1 -1
- package/packages/generate/src/lib/componentScenarioPage/componentScenarioPageRemix.js +18 -11
- package/packages/generate/src/lib/componentScenarioPage/componentScenarioPageRemix.js.map +1 -1
- package/packages/generate/src/lib/scenarioComponent.js +5 -3
- package/packages/generate/src/lib/scenarioComponent.js.map +1 -1
- package/packages/supabase/src/lib/kysely/db.js +3 -0
- package/packages/supabase/src/lib/kysely/db.js.map +1 -1
- package/packages/supabase/src/lib/kysely/tables/debugReportsTable.js +27 -0
- package/packages/supabase/src/lib/kysely/tables/debugReportsTable.js.map +1 -0
- package/packages/utils/index.js +2 -0
- package/packages/utils/index.js.map +1 -1
- package/packages/utils/src/lib/Semaphore.js +40 -0
- package/packages/utils/src/lib/Semaphore.js.map +1 -0
- package/packages/utils/src/lib/frameworks/getNextRoutePath.js +5 -3
- package/packages/utils/src/lib/frameworks/getNextRoutePath.js.map +1 -1
- package/packages/utils/src/lib/frameworks/getRemixRoutePath.js +2 -1
- package/packages/utils/src/lib/frameworks/getRemixRoutePath.js.map +1 -1
- package/packages/utils/src/lib/frameworks/nextRouteFileNameToRoute.js +2 -1
- package/packages/utils/src/lib/frameworks/nextRouteFileNameToRoute.js.map +1 -1
- package/packages/utils/src/lib/frameworks/remixRouteFileNameToRoute.js +1 -0
- package/packages/utils/src/lib/frameworks/remixRouteFileNameToRoute.js.map +1 -1
- package/packages/utils/src/lib/frameworks/sanitizeNextRouteSegments.js +32 -0
- package/packages/utils/src/lib/frameworks/sanitizeNextRouteSegments.js.map +1 -0
- package/analyzer-template/packages/ai/src/lib/generateEntityDataMap.ts +0 -375
- package/codeyam-cli/src/webserver/build/client/assets/EntityTypeIcon-GqWwt5wG.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-p0fuyqGQ.js +0 -3
- package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-xwuhwsZH.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/ScenarioPreview-Bl2IRh55.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/ScenarioViewer-M2QuSHKC.js +0 -5
- package/codeyam-cli/src/webserver/build/client/assets/_index-CAVtep9Q.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/activity.(_tab)-CLmzsLsT.js +0 -10
- package/codeyam-cli/src/webserver/build/client/assets/components-CAx5ONX_.js +0 -40
- package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-CgyOwWip.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/dev.empty-DGy3zrli.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-ChAdTrrU.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.edit._scenarioId-D9L7267w.js +0 -5
- package/codeyam-cli/src/webserver/build/client/assets/entry.client-C6FRgjPr.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/files-C3-cQjgv.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/git-Dp4EB9nv.js +0 -12
- package/codeyam-cli/src/webserver/build/client/assets/globals-Da3jt49-.css +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/manifest-172a4629.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/root-COyVTsPq.js +0 -16
- package/codeyam-cli/src/webserver/build/client/assets/search-CvyP_1Lo.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/settings-Hbf8b7J_.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/simulations-BMBi0VzO.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/useToast-C_VxoXTh.js +0 -1
- package/codeyam-cli/src/webserver/build/client/cy-logo-cli.svg +0 -13
- package/codeyam-cli/src/webserver/build/server/assets/index-eAULANMV.js +0 -1
- package/codeyam-cli/src/webserver/build/server/assets/server-build-lutv16q5.js +0 -161
- package/codeyam-cli/src/webserver/public/cy-logo-cli.svg +0 -13
- package/packages/ai/src/lib/generateEntityDataMap.js +0 -335
- package/packages/ai/src/lib/generateEntityDataMap.js.map +0 -1
- package/packages/ai/src/lib/promptGenerators/generateEntityDataMapGenerator.js +0 -17
- package/packages/ai/src/lib/promptGenerators/generateEntityDataMapGenerator.js.map +0 -1
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VisitedTracker
|
|
3
|
+
*
|
|
4
|
+
* Manages visited state tracking for the ScopeDataStructure analysis.
|
|
5
|
+
* Prevents infinite loops and redundant processing by tracking which
|
|
6
|
+
* scope/path/value combinations have already been processed.
|
|
7
|
+
*
|
|
8
|
+
* ## Why This Exists
|
|
9
|
+
*
|
|
10
|
+
* The schema building process recursively follows equivalencies between
|
|
11
|
+
* data paths. Without cycle detection, circular references like:
|
|
12
|
+
* `user.profile` → `currentUser` → `user.profile`
|
|
13
|
+
* would cause infinite loops.
|
|
14
|
+
*
|
|
15
|
+
* ## Two Tracking Modes
|
|
16
|
+
*
|
|
17
|
+
* ### 1. Global Visited (scope::path::value)
|
|
18
|
+
* Fine-grained deduplication for `addToSchema()`. Tracks the complete
|
|
19
|
+
* tuple so the same path can be visited with different type values.
|
|
20
|
+
*
|
|
21
|
+
* Example: `myFunc::user.id::string` and `myFunc::user.id::number`
|
|
22
|
+
* are tracked separately, allowing both types to be recorded.
|
|
23
|
+
*
|
|
24
|
+
* ### 2. Complex Source Visited (scope::path)
|
|
25
|
+
* Coarser deduplication for `addComplexSourcePathVariables()`. Ignores
|
|
26
|
+
* the type value because complex source processing should happen once
|
|
27
|
+
* per path regardless of type.
|
|
28
|
+
*
|
|
29
|
+
* ## Lifecycle
|
|
30
|
+
*
|
|
31
|
+
* - Global visited is **reset** at the start of `captureCompleteSchema()`
|
|
32
|
+
* to allow re-processing in the schema building phase.
|
|
33
|
+
* - Complex source visited is **never reset** during normal operation.
|
|
34
|
+
*
|
|
35
|
+
* ## Related Modules
|
|
36
|
+
*
|
|
37
|
+
* - `ScopeDataStructure.addToSchema()` - Primary consumer of global visited
|
|
38
|
+
* - `ScopeDataStructure.addComplexSourcePathVariables()` - Uses complex source visited
|
|
39
|
+
*/
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Tracks visited state to prevent infinite loops during schema building.
|
|
43
|
+
*/
|
|
44
|
+
export class VisitedTracker {
|
|
45
|
+
/**
|
|
46
|
+
* Fine-grained visited tracking using scope::path::value.
|
|
47
|
+
* Used by addToSchema to skip already-processed combinations.
|
|
48
|
+
*/
|
|
49
|
+
private globalVisited: Set<string> = new Set();
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Coarser visited tracking using scope::path only (without value).
|
|
53
|
+
* Used by addComplexSourcePathVariables to allow each unique
|
|
54
|
+
* scope+path combo to be processed once, regardless of value.
|
|
55
|
+
*/
|
|
56
|
+
private complexSourceVisited: Set<string> = new Set();
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Creates a unique key for global visited tracking.
|
|
60
|
+
* @param scopeNodeName - Name of the scope
|
|
61
|
+
* @param path - Schema path
|
|
62
|
+
* @param value - Type value
|
|
63
|
+
*/
|
|
64
|
+
private makeGlobalKey(
|
|
65
|
+
scopeNodeName: string,
|
|
66
|
+
path: string,
|
|
67
|
+
value: string,
|
|
68
|
+
): string {
|
|
69
|
+
return `${scopeNodeName}::${path}::${value}`;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Creates a unique key for complex source visited tracking.
|
|
74
|
+
* @param scopeNodeName - Name of the scope
|
|
75
|
+
* @param path - Schema path
|
|
76
|
+
*/
|
|
77
|
+
private makeComplexKey(scopeNodeName: string, path: string): string {
|
|
78
|
+
return `${scopeNodeName}::${path}`;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Checks if a scope/path/value combination has been globally visited.
|
|
83
|
+
* Does NOT mark it as visited - use markGlobalVisited for that.
|
|
84
|
+
*
|
|
85
|
+
* @returns true if already visited
|
|
86
|
+
*/
|
|
87
|
+
hasGlobalVisited(
|
|
88
|
+
scopeNodeName: string,
|
|
89
|
+
path: string,
|
|
90
|
+
value: string,
|
|
91
|
+
): boolean {
|
|
92
|
+
return this.globalVisited.has(
|
|
93
|
+
this.makeGlobalKey(scopeNodeName, path, value),
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Marks a scope/path/value combination as globally visited.
|
|
99
|
+
*/
|
|
100
|
+
markGlobalVisited(scopeNodeName: string, path: string, value: string): void {
|
|
101
|
+
this.globalVisited.add(this.makeGlobalKey(scopeNodeName, path, value));
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Checks and marks a scope/path/value combination as globally visited.
|
|
106
|
+
* This is a convenience method that combines check and mark.
|
|
107
|
+
*
|
|
108
|
+
* @returns true if was already visited (should skip processing)
|
|
109
|
+
*/
|
|
110
|
+
checkAndMarkGlobalVisited(
|
|
111
|
+
scopeNodeName: string,
|
|
112
|
+
path: string,
|
|
113
|
+
value: string,
|
|
114
|
+
): boolean {
|
|
115
|
+
const key = this.makeGlobalKey(scopeNodeName, path, value);
|
|
116
|
+
if (this.globalVisited.has(key)) {
|
|
117
|
+
return true; // Already visited
|
|
118
|
+
}
|
|
119
|
+
this.globalVisited.add(key);
|
|
120
|
+
return false; // Not visited, now marked
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Checks if a scope/path combination has been visited for complex sources.
|
|
125
|
+
* Does NOT mark it as visited - use markComplexSourceVisited for that.
|
|
126
|
+
*
|
|
127
|
+
* @returns true if already visited
|
|
128
|
+
*/
|
|
129
|
+
hasComplexSourceVisited(scopeNodeName: string, path: string): boolean {
|
|
130
|
+
return this.complexSourceVisited.has(
|
|
131
|
+
this.makeComplexKey(scopeNodeName, path),
|
|
132
|
+
);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Marks a scope/path combination as visited for complex sources.
|
|
137
|
+
*/
|
|
138
|
+
markComplexSourceVisited(scopeNodeName: string, path: string): void {
|
|
139
|
+
this.complexSourceVisited.add(this.makeComplexKey(scopeNodeName, path));
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Checks and marks a scope/path combination as visited for complex sources.
|
|
144
|
+
* This is a convenience method that combines check and mark.
|
|
145
|
+
*
|
|
146
|
+
* @returns true if was already visited (should skip processing)
|
|
147
|
+
*/
|
|
148
|
+
checkAndMarkComplexSourceVisited(
|
|
149
|
+
scopeNodeName: string,
|
|
150
|
+
path: string,
|
|
151
|
+
): boolean {
|
|
152
|
+
const key = this.makeComplexKey(scopeNodeName, path);
|
|
153
|
+
if (this.complexSourceVisited.has(key)) {
|
|
154
|
+
return true; // Already visited
|
|
155
|
+
}
|
|
156
|
+
this.complexSourceVisited.add(key);
|
|
157
|
+
return false; // Not visited, now marked
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Resets the global visited set.
|
|
162
|
+
* Called at the start of captureCompleteSchema() to allow
|
|
163
|
+
* re-processing in the second phase.
|
|
164
|
+
*/
|
|
165
|
+
resetGlobalVisited(): void {
|
|
166
|
+
this.globalVisited.clear();
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Resets the complex source visited set.
|
|
171
|
+
* Note: In the original code, this was never reset.
|
|
172
|
+
*/
|
|
173
|
+
resetComplexSourceVisited(): void {
|
|
174
|
+
this.complexSourceVisited.clear();
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* Resets all visited tracking.
|
|
179
|
+
*/
|
|
180
|
+
resetAll(): void {
|
|
181
|
+
this.globalVisited.clear();
|
|
182
|
+
this.complexSourceVisited.clear();
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Returns statistics about the visited sets for debugging/monitoring.
|
|
187
|
+
*/
|
|
188
|
+
getStats(): { globalVisited: number; complexSourceVisited: number } {
|
|
189
|
+
return {
|
|
190
|
+
globalVisited: this.globalVisited.size,
|
|
191
|
+
complexSourceVisited: this.complexSourceVisited.size,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Checks if ANY variant of a scope/path was ever visited (ignores value).
|
|
197
|
+
* Useful for debugging to see if a path was processed at all.
|
|
198
|
+
*
|
|
199
|
+
* @returns true if any variant of this scope/path was visited
|
|
200
|
+
*/
|
|
201
|
+
wasVisited(scopeNodeName: string, path: string): boolean {
|
|
202
|
+
const prefix = `${scopeNodeName}::${path}::`;
|
|
203
|
+
for (const key of this.globalVisited) {
|
|
204
|
+
if (key.startsWith(prefix)) {
|
|
205
|
+
return true;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
return this.hasComplexSourceVisited(scopeNodeName, path);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Gets all visited entries for a scope (for debugging).
|
|
213
|
+
* Returns an array of {path, value} objects.
|
|
214
|
+
*/
|
|
215
|
+
getVisitedForScope(
|
|
216
|
+
scopeNodeName: string,
|
|
217
|
+
): Array<{ path: string; value: string }> {
|
|
218
|
+
const prefix = `${scopeNodeName}::`;
|
|
219
|
+
const results: Array<{ path: string; value: string }> = [];
|
|
220
|
+
|
|
221
|
+
for (const key of this.globalVisited) {
|
|
222
|
+
if (key.startsWith(prefix)) {
|
|
223
|
+
const parts = key.slice(prefix.length).split('::');
|
|
224
|
+
if (parts.length >= 2) {
|
|
225
|
+
results.push({
|
|
226
|
+
path: parts.slice(0, -1).join('::'), // Everything except last part
|
|
227
|
+
value: parts[parts.length - 1], // Last part is value
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
return results;
|
|
234
|
+
}
|
|
235
|
+
}
|
package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.ts
CHANGED
|
@@ -355,9 +355,11 @@ export function fillInDirectSchemaGapsAndUnknowns({
|
|
|
355
355
|
|
|
356
356
|
// Don't set to 'function' if this is a promise method on an async function
|
|
357
357
|
// (we want the awaited value, not the promise)
|
|
358
|
+
// Also don't overwrite 'array' - the function might return an array (e.g., getAll())
|
|
358
359
|
if (
|
|
359
360
|
schema[functionReturnValuePath] &&
|
|
360
361
|
schema[functionReturnValuePath] !== 'function' &&
|
|
362
|
+
schema[functionReturnValuePath] !== 'array' &&
|
|
361
363
|
!(isPromiseMethod && isPreviousAsync)
|
|
362
364
|
) {
|
|
363
365
|
schema[functionReturnValuePath] = 'function';
|
|
@@ -408,17 +410,26 @@ function checkIfObjectOrFunction(path: string, schema: ScopeNode['schema']) {
|
|
|
408
410
|
}
|
|
409
411
|
}
|
|
410
412
|
|
|
411
|
-
// Methods that are ambiguous - used on both arrays and non-arrays
|
|
413
|
+
// Methods that are ambiguous - used on both arrays and non-arrays
|
|
414
|
+
// These methods exist on arrays but also on Map, Set, Headers, FormData, URLSearchParams, etc.
|
|
412
415
|
// Don't infer array type from these alone without additional evidence
|
|
413
|
-
const AMBIGUOUS_ARRAY_METHODS = new Set([
|
|
416
|
+
const AMBIGUOUS_ARRAY_METHODS = new Set([
|
|
417
|
+
'push',
|
|
418
|
+
'pop',
|
|
419
|
+
'entries',
|
|
420
|
+
'keys',
|
|
421
|
+
'values',
|
|
422
|
+
'forEach',
|
|
423
|
+
]);
|
|
414
424
|
|
|
415
425
|
// Methods that are strongly indicative of arrays - only arrays have these
|
|
426
|
+
// Note: entries, keys, values, forEach are NOT in this list because they also exist
|
|
427
|
+
// on Map, Set, Headers, FormData, URLSearchParams, and other iterable types
|
|
416
428
|
const STRONG_ARRAY_METHODS = new Set([
|
|
417
429
|
'map',
|
|
418
430
|
'filter',
|
|
419
431
|
'reduce',
|
|
420
432
|
'reduceRight',
|
|
421
|
-
'forEach',
|
|
422
433
|
'every',
|
|
423
434
|
'some',
|
|
424
435
|
'find',
|
|
@@ -429,9 +440,6 @@ const STRONG_ARRAY_METHODS = new Set([
|
|
|
429
440
|
'flatMap',
|
|
430
441
|
'fill',
|
|
431
442
|
'copyWithin',
|
|
432
|
-
'entries',
|
|
433
|
-
'keys',
|
|
434
|
-
'values',
|
|
435
443
|
'toReversed',
|
|
436
444
|
'toSorted',
|
|
437
445
|
'toSpliced',
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* selectBestValue
|
|
3
|
+
*
|
|
4
|
+
* Selects the most specific type value from two candidates.
|
|
5
|
+
* Prefers more specific types over 'unknown' values.
|
|
6
|
+
*
|
|
7
|
+
* ## Context
|
|
8
|
+
*
|
|
9
|
+
* During schema building, the same path may have type information from
|
|
10
|
+
* multiple sources (e.g., from a return statement and from a function call).
|
|
11
|
+
* When merging these, we want to keep the most specific type.
|
|
12
|
+
*
|
|
13
|
+
* "Specific" means:
|
|
14
|
+
* - `'string'` is more specific than `'unknown'`
|
|
15
|
+
* - `'string'` is more specific than `'unknown|string'`
|
|
16
|
+
* - `'string|number'` is equal specificity to `'number|string'`
|
|
17
|
+
*
|
|
18
|
+
* ## Selection Rules
|
|
19
|
+
*
|
|
20
|
+
* 1. If value1 exists and is not 'unknown', use value1
|
|
21
|
+
* 2. If value2 exists and is more specific (not 'unknown'), prefer value2
|
|
22
|
+
* 3. Otherwise use the first available value, or 'unknown' as default
|
|
23
|
+
*
|
|
24
|
+
* ## Where Used
|
|
25
|
+
*
|
|
26
|
+
* - `propagateSourceAndUsageEquivalencies.equateSchema()` - Merging schemas
|
|
27
|
+
* - `getReturnValue()` - Combining return type information
|
|
28
|
+
*
|
|
29
|
+
* ## Related Modules
|
|
30
|
+
*
|
|
31
|
+
* - `ensureSchemaConsistency.ts` - Also deals with type merging
|
|
32
|
+
* - `fillInSchemaGapsAndUnknowns.ts` - Fills in missing types after schema building
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Selects the best (most specific) value between two type candidates.
|
|
37
|
+
*
|
|
38
|
+
* @param value1 - Primary value (preferred if specific)
|
|
39
|
+
* @param value2 - Secondary value (used if value1 is 'unknown')
|
|
40
|
+
* @param defaultValue - Default when both are undefined (defaults to 'unknown')
|
|
41
|
+
* @returns The most specific type value
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* selectBestValue('string', 'number') // 'string' - value1 is specific
|
|
45
|
+
* selectBestValue('unknown', 'string') // 'string' - value2 is more specific
|
|
46
|
+
* selectBestValue(undefined, 'number') // 'number' - value1 undefined
|
|
47
|
+
* selectBestValue(undefined, undefined) // 'unknown' - default
|
|
48
|
+
* selectBestValue('unknown|string', 'string') // 'string' - value2 has no unknown
|
|
49
|
+
*/
|
|
50
|
+
export default function selectBestValue(
|
|
51
|
+
value1: string | undefined,
|
|
52
|
+
value2: string | undefined,
|
|
53
|
+
defaultValue = 'unknown',
|
|
54
|
+
): string {
|
|
55
|
+
let bestValue = value1 ?? value2 ?? defaultValue;
|
|
56
|
+
|
|
57
|
+
// Prefer value2 if:
|
|
58
|
+
// - value2 exists AND
|
|
59
|
+
// - bestValue is 'unknown' and value2 is not, OR
|
|
60
|
+
// - bestValue contains 'unknown' and value2 doesn't
|
|
61
|
+
if (
|
|
62
|
+
value2 &&
|
|
63
|
+
((bestValue === 'unknown' && value2 !== 'unknown') ||
|
|
64
|
+
(bestValue.includes('unknown') && !value2.includes('unknown')))
|
|
65
|
+
) {
|
|
66
|
+
bestValue = value2;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return bestValue;
|
|
70
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UniqueIdUtils
|
|
3
|
+
*
|
|
4
|
+
* Utility functions for creating unique identifiers and deduplicating
|
|
5
|
+
* scope variables in the ScopeDataStructure analysis.
|
|
6
|
+
*
|
|
7
|
+
* ## Why Unique IDs Matter
|
|
8
|
+
*
|
|
9
|
+
* The analysis tracks data flow across many scopes and paths. When building
|
|
10
|
+
* equivalency chains or schemas, we need to:
|
|
11
|
+
* - Detect cycles (have we seen this scope+path+value before?)
|
|
12
|
+
* - Deduplicate results (don't report the same equivalency twice)
|
|
13
|
+
* - Index efficiently (O(1) lookups in large datasets)
|
|
14
|
+
*
|
|
15
|
+
* ## Key Format
|
|
16
|
+
*
|
|
17
|
+
* The unique ID format is `scopeNodeName::schemaPath[::value]`:
|
|
18
|
+
* - `myFunc::user.id` - Scope+path without type value
|
|
19
|
+
* - `myFunc::user.id::string` - Full tuple including type
|
|
20
|
+
*
|
|
21
|
+
* The `::` delimiter is chosen because:
|
|
22
|
+
* - Scope names never contain `::`
|
|
23
|
+
* - Schema paths use `.` and `[]` but not `::`
|
|
24
|
+
* - Type values may contain `:` (e.g., `union::type`) but only as the last part
|
|
25
|
+
*
|
|
26
|
+
* ## Performance
|
|
27
|
+
*
|
|
28
|
+
* `uniqueScopeAndPaths` uses O(n) Set-based deduplication instead of O(n²)
|
|
29
|
+
* array comparisons. This matters when processing thousands of equivalencies.
|
|
30
|
+
*
|
|
31
|
+
* ## Related Modules
|
|
32
|
+
*
|
|
33
|
+
* - `VisitedTracker.ts` - Uses similar key format for cycle detection
|
|
34
|
+
* - `ScopeDataStructure.equivalencyDatabase` - Indexed by these unique IDs
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Interface for items that can be deduplicated by scope and path.
|
|
39
|
+
* Matches the ScopeVariable interface's required fields.
|
|
40
|
+
*/
|
|
41
|
+
export interface ScopeAndPath {
|
|
42
|
+
scopeNodeName: string;
|
|
43
|
+
schemaPath: string;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Creates a unique identifier string from scope, path, and optional value.
|
|
48
|
+
* Used for tracking visited combinations and equivalency chains.
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* uniqueId({ scopeNodeName: 'myFunc', schemaPath: 'user.id' }) // 'myFunc::user.id'
|
|
52
|
+
* uniqueId({ scopeNodeName: 'myFunc', schemaPath: 'user.id', value: 'string' }) // 'myFunc::user.id::string'
|
|
53
|
+
*/
|
|
54
|
+
export function uniqueId({
|
|
55
|
+
scopeNodeName,
|
|
56
|
+
schemaPath,
|
|
57
|
+
value,
|
|
58
|
+
}: {
|
|
59
|
+
scopeNodeName: string;
|
|
60
|
+
schemaPath: string;
|
|
61
|
+
value?: string;
|
|
62
|
+
}): string {
|
|
63
|
+
const parts = [scopeNodeName, schemaPath, value].filter(Boolean);
|
|
64
|
+
return parts.join('::');
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Removes duplicate scope variables from an array, keeping only the first occurrence
|
|
69
|
+
* of each unique scopeNodeName + schemaPath combination.
|
|
70
|
+
*
|
|
71
|
+
* This is a type-preserving version of uniqueScopeAndPaths that returns the full
|
|
72
|
+
* ScopeVariable objects (with id and equivalencyReason).
|
|
73
|
+
*
|
|
74
|
+
* @param scopeVariables - Array of scope variables to deduplicate
|
|
75
|
+
* @returns Deduplicated array preserving original type
|
|
76
|
+
*/
|
|
77
|
+
export function uniqueScopeVariables<T extends ScopeAndPath>(
|
|
78
|
+
scopeVariables: T[],
|
|
79
|
+
): T[] {
|
|
80
|
+
return uniqueScopeAndPaths(scopeVariables);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Removes duplicates from an array of objects with scopeNodeName and schemaPath.
|
|
85
|
+
* Uses O(n) Set-based deduplication for performance.
|
|
86
|
+
*
|
|
87
|
+
* @param scopeVariables - Array of objects to deduplicate
|
|
88
|
+
* @returns Deduplicated array preserving original type
|
|
89
|
+
*
|
|
90
|
+
* @example
|
|
91
|
+
* uniqueScopeAndPaths([
|
|
92
|
+
* { scopeNodeName: 'a', schemaPath: 'x' },
|
|
93
|
+
* { scopeNodeName: 'a', schemaPath: 'x' },
|
|
94
|
+
* { scopeNodeName: 'b', schemaPath: 'y' },
|
|
95
|
+
* ])
|
|
96
|
+
* // Returns: [{ scopeNodeName: 'a', schemaPath: 'x' }, { scopeNodeName: 'b', schemaPath: 'y' }]
|
|
97
|
+
*/
|
|
98
|
+
export function uniqueScopeAndPaths<T extends ScopeAndPath>(
|
|
99
|
+
scopeVariables: T[] | undefined | null,
|
|
100
|
+
): T[] {
|
|
101
|
+
if (!scopeVariables || scopeVariables.length === 0) return [];
|
|
102
|
+
|
|
103
|
+
// Optimize from O(n²) to O(n) using Set for deduplication
|
|
104
|
+
const seen = new Set<string>();
|
|
105
|
+
return scopeVariables.filter((varItem) => {
|
|
106
|
+
const key = `${varItem.scopeNodeName}::${varItem.schemaPath}`;
|
|
107
|
+
if (seen.has(key)) {
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
seen.add(key);
|
|
111
|
+
return true;
|
|
112
|
+
});
|
|
113
|
+
}
|
|
@@ -70,6 +70,42 @@ export default function gatherRelevantDependentKeyAttributes(
|
|
|
70
70
|
const signatureSchema = dependencySchema?.signatureSchema;
|
|
71
71
|
if (!signatureSchema) return;
|
|
72
72
|
|
|
73
|
+
const sourceEquivalencies = dependencySchema?.sourceEquivalencies ?? {};
|
|
74
|
+
|
|
75
|
+
// If sourceEquivalencies is empty but the child has mocked imports,
|
|
76
|
+
// propagate key attributes directly since they affect the parent's visual output
|
|
77
|
+
if (Object.keys(sourceEquivalencies).length === 0) {
|
|
78
|
+
// Check both importedExports and nodeModuleImports for mocked imports
|
|
79
|
+
const importedExports =
|
|
80
|
+
dependentAnalysis.entity?.metadata?.importedExports ?? [];
|
|
81
|
+
const nodeModuleImports =
|
|
82
|
+
dependentAnalysis.entity?.metadata?.nodeModuleImports ?? {};
|
|
83
|
+
|
|
84
|
+
const hasMockedImportedExports = importedExports.some(
|
|
85
|
+
(imp: { isMocked?: boolean }) => imp.isMocked,
|
|
86
|
+
);
|
|
87
|
+
const hasMockedNodeModuleImports = Object.values(
|
|
88
|
+
nodeModuleImports,
|
|
89
|
+
).some((imports: any[]) =>
|
|
90
|
+
imports?.some((imp: { isMocked?: boolean }) => imp.isMocked),
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
const childHasMockedImports =
|
|
94
|
+
hasMockedImportedExports || hasMockedNodeModuleImports;
|
|
95
|
+
|
|
96
|
+
if (childHasMockedImports) {
|
|
97
|
+
for (const dependentKeyAttribute of dependentKeyAtttributes) {
|
|
98
|
+
relevantDependentKeyAttributes.push({
|
|
99
|
+
...dependentKeyAttribute,
|
|
100
|
+
dependentEntityName: entityName,
|
|
101
|
+
originalEntityName: entityName,
|
|
102
|
+
filePath: path,
|
|
103
|
+
} as any);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
|
|
73
109
|
for (const dependentKeyAttribute of dependentKeyAtttributes) {
|
|
74
110
|
const dependentKeyAttributeExternalPathParts =
|
|
75
111
|
splitOutsideParenthesesAndArrays(dependentKeyAttribute.externalPath);
|
|
@@ -25,8 +25,7 @@ export default async function generateChangesEntityDocumentation({
|
|
|
25
25
|
|
|
26
26
|
const { completion: documentation, stats } = await completionCall({
|
|
27
27
|
type: 'entityDocumentation',
|
|
28
|
-
systemMessage:
|
|
29
|
-
'You are an expert coder and educator. You think a lot about how people can understand new things, recognizing that it is a mixture of direct facts and numerous examples from different perspectives.',
|
|
28
|
+
systemMessage: SYSTEM_MESSAGE,
|
|
30
29
|
prompt,
|
|
31
30
|
model,
|
|
32
31
|
jsonResponse: false,
|
|
@@ -62,3 +61,22 @@ export default async function generateChangesEntityDocumentation({
|
|
|
62
61
|
|
|
63
62
|
return { documentation, llmCall };
|
|
64
63
|
}
|
|
64
|
+
|
|
65
|
+
const SYSTEM_MESSAGE = `You are a technical documentation writer updating existing documentation after code changes.
|
|
66
|
+
|
|
67
|
+
## When to Update
|
|
68
|
+
- If existing documentation is still accurate: respond with exactly "No changes needed"
|
|
69
|
+
- If code changed significantly: provide updated documentation
|
|
70
|
+
|
|
71
|
+
## Style
|
|
72
|
+
- Be concise—use bullets, not paragraphs
|
|
73
|
+
- Provide diverse examples (no repetitive variations)
|
|
74
|
+
- In Overview, describe intent directly without mentioning the function name
|
|
75
|
+
|
|
76
|
+
## Required Sections (when updating)
|
|
77
|
+
Return documentation with exactly these markdown headers:
|
|
78
|
+
- ## Overview
|
|
79
|
+
- ## Inputs
|
|
80
|
+
- ## Output
|
|
81
|
+
- ## Examples
|
|
82
|
+
`;
|