@codeyam/codeyam-cli 0.1.0-staging.596f0eb → 0.1.0-staging.76566f9
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 +2 -1
- package/analyzer-template/packages/ai/src/lib/analyzeScope.ts +2 -0
- package/analyzer-template/packages/ai/src/lib/astScopes/astScopeAnalyzer.ts +22 -0
- package/analyzer-template/packages/ai/src/lib/astScopes/patterns/switchStatementHandler.ts +23 -1
- package/analyzer-template/packages/ai/src/lib/astScopes/processExpression.ts +401 -106
- package/analyzer-template/packages/ai/src/lib/astScopes/types.ts +60 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +734 -45
- package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.ts +2 -1
- package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.ts +715 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.ts +233 -75
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.ts +19 -1
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.ts +34 -1
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.ts +23 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertNullToUndefinedBySchema.ts +98 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.ts +34 -1
- package/analyzer-template/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.ts +236 -24
- package/analyzer-template/packages/ai/src/lib/generateChangesEntityKeyAttributes.ts +18 -1
- package/analyzer-template/packages/ai/src/lib/generateChangesEntityScenarioData.ts +41 -0
- package/analyzer-template/packages/ai/src/lib/generateChangesEntityScenarios.ts +37 -4
- package/analyzer-template/packages/ai/src/lib/generateEntityDataStructure.ts +5 -0
- package/analyzer-template/packages/ai/src/lib/generateEntityKeyAttributes.ts +213 -12
- package/analyzer-template/packages/ai/src/lib/generateEntityScenarioData.ts +36 -25
- package/analyzer-template/packages/ai/src/lib/generateEntityScenarios.ts +114 -11
- package/analyzer-template/packages/ai/src/lib/getConditionalUsagesFromCode.ts +143 -31
- package/analyzer-template/packages/ai/src/lib/guessScenarioDataFromDescription.ts +8 -2
- package/analyzer-template/packages/ai/src/lib/promptGenerators/gatherAttributesMap.ts +7 -0
- package/analyzer-template/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.ts +42 -2
- package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.ts +38 -2
- package/analyzer-template/packages/ai/src/lib/promptGenerators/guessNewScenarioDataFromDescriptionGenerator.ts +28 -2
- package/analyzer-template/packages/ai/src/lib/worker/SerializableDataStructure.ts +5 -0
- package/analyzer-template/packages/ai/src/lib/worker/analyzeScopeWorker.ts +8 -1
- package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.ts +127 -43
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.ts +158 -0
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.ts +405 -45
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateChangesScenarioData.ts +1 -1
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +260 -133
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.ts +10 -5
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateScenarioData.ts +77 -83
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateScenarios.ts +2 -5
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +196 -86
- package/analyzer-template/packages/aws/dist/src/lib/s3/checkS3ObjectExists.d.ts +15 -0
- package/analyzer-template/packages/aws/dist/src/lib/s3/checkS3ObjectExists.d.ts.map +1 -0
- package/analyzer-template/packages/aws/dist/src/lib/s3/checkS3ObjectExists.js +31 -0
- package/analyzer-template/packages/aws/dist/src/lib/s3/checkS3ObjectExists.js.map +1 -0
- package/analyzer-template/packages/aws/package.json +1 -1
- package/analyzer-template/packages/aws/s3/index.ts +1 -0
- package/analyzer-template/packages/aws/src/lib/s3/checkS3ObjectExists.ts +47 -0
- package/analyzer-template/packages/database/src/lib/kysely/db.ts +4 -4
- package/analyzer-template/packages/database/src/lib/kysely/tableRelations.ts +2 -2
- package/analyzer-template/packages/database/src/lib/kysely/tables/debugReportsTable.ts +20 -9
- package/analyzer-template/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.ts +9 -4
- package/analyzer-template/packages/generate/src/lib/deepMerge.ts +26 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts +2 -2
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js +2 -2
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tableRelations.d.ts +2 -2
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/analysesTable.d.ts +8 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/analysesTable.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.d.ts +14 -7
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.js +9 -3
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts.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 +8 -4
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/deepMerge.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/deepMerge.js +27 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/deepMerge.js.map +1 -1
- package/analyzer-template/packages/github/dist/types/index.d.ts +4 -3
- package/analyzer-template/packages/github/dist/types/index.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/types/index.js +1 -0
- package/analyzer-template/packages/github/dist/types/index.js.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/types/Analysis.d.ts +31 -1
- package/analyzer-template/packages/github/dist/types/src/types/Analysis.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts +51 -1
- package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/types/Scenario.js +21 -1
- package/analyzer-template/packages/github/dist/types/src/types/Scenario.js.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/types/ScenariosDataStructure.d.ts +48 -0
- package/analyzer-template/packages/github/dist/types/src/types/ScenariosDataStructure.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/utils/src/lib/lightweightEntityExtractor.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/utils/src/lib/lightweightEntityExtractor.js +25 -0
- package/analyzer-template/packages/github/dist/utils/src/lib/lightweightEntityExtractor.js.map +1 -1
- package/analyzer-template/packages/types/index.ts +8 -0
- package/analyzer-template/packages/types/src/types/Analysis.ts +32 -1
- package/analyzer-template/packages/types/src/types/Scenario.ts +75 -6
- package/analyzer-template/packages/types/src/types/ScenariosDataStructure.ts +49 -0
- package/analyzer-template/packages/ui-components/src/components/ScenarioDetailInteractiveView.tsx +23 -7
- package/analyzer-template/packages/utils/dist/types/index.d.ts +4 -3
- package/analyzer-template/packages/utils/dist/types/index.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/types/index.js +1 -0
- package/analyzer-template/packages/utils/dist/types/index.js.map +1 -1
- package/analyzer-template/packages/utils/dist/types/src/types/Analysis.d.ts +31 -1
- package/analyzer-template/packages/utils/dist/types/src/types/Analysis.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts +51 -1
- package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/types/src/types/Scenario.js +21 -1
- package/analyzer-template/packages/utils/dist/types/src/types/Scenario.js.map +1 -1
- package/analyzer-template/packages/utils/dist/types/src/types/ScenariosDataStructure.d.ts +48 -0
- package/analyzer-template/packages/utils/dist/types/src/types/ScenariosDataStructure.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/lightweightEntityExtractor.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/lightweightEntityExtractor.js +25 -0
- package/analyzer-template/packages/utils/dist/utils/src/lib/lightweightEntityExtractor.js.map +1 -1
- package/analyzer-template/packages/utils/src/lib/lightweightEntityExtractor.ts +27 -0
- package/analyzer-template/playwright/takeElementScreenshot.ts +26 -11
- package/analyzer-template/playwright/takeScreenshot.ts +9 -7
- package/analyzer-template/project/constructMockCode.ts +286 -84
- package/analyzer-template/project/orchestrateCapture/SequentialCaptureTaskRunner.ts +77 -37
- package/analyzer-template/project/reconcileMockDataKeys.ts +5 -2
- package/analyzer-template/project/runMultiScenarioServer.ts +11 -10
- package/analyzer-template/project/serverOnlyModules.ts +71 -23
- package/analyzer-template/project/start.ts +10 -0
- package/analyzer-template/project/startScenarioCapture.ts +73 -41
- package/analyzer-template/project/writeMockDataTsx.ts +115 -54
- package/analyzer-template/project/writeScenarioComponents.ts +571 -162
- package/analyzer-template/project/writeSimpleRoot.ts +11 -13
- package/background/src/lib/virtualized/project/constructMockCode.js +265 -75
- package/background/src/lib/virtualized/project/constructMockCode.js.map +1 -1
- package/background/src/lib/virtualized/project/orchestrateCapture/SequentialCaptureTaskRunner.js +67 -32
- package/background/src/lib/virtualized/project/orchestrateCapture/SequentialCaptureTaskRunner.js.map +1 -1
- package/background/src/lib/virtualized/project/reconcileMockDataKeys.js +5 -2
- package/background/src/lib/virtualized/project/reconcileMockDataKeys.js.map +1 -1
- package/background/src/lib/virtualized/project/runMultiScenarioServer.js +11 -9
- package/background/src/lib/virtualized/project/runMultiScenarioServer.js.map +1 -1
- package/background/src/lib/virtualized/project/serverOnlyModules.js +62 -25
- package/background/src/lib/virtualized/project/serverOnlyModules.js.map +1 -1
- package/background/src/lib/virtualized/project/start.js +6 -0
- package/background/src/lib/virtualized/project/start.js.map +1 -1
- package/background/src/lib/virtualized/project/startScenarioCapture.js +54 -31
- package/background/src/lib/virtualized/project/startScenarioCapture.js.map +1 -1
- package/background/src/lib/virtualized/project/writeMockDataTsx.js +106 -46
- package/background/src/lib/virtualized/project/writeMockDataTsx.js.map +1 -1
- package/background/src/lib/virtualized/project/writeScenarioComponents.js +399 -106
- package/background/src/lib/virtualized/project/writeScenarioComponents.js.map +1 -1
- package/background/src/lib/virtualized/project/writeSimpleRoot.js +11 -11
- package/background/src/lib/virtualized/project/writeSimpleRoot.js.map +1 -1
- package/codeyam-cli/src/cli.js +2 -0
- package/codeyam-cli/src/cli.js.map +1 -1
- package/codeyam-cli/src/commands/debug.js +14 -2
- package/codeyam-cli/src/commands/debug.js.map +1 -1
- package/codeyam-cli/src/commands/recapture.js +215 -0
- package/codeyam-cli/src/commands/recapture.js.map +1 -0
- package/codeyam-cli/src/commands/report.js +26 -23
- package/codeyam-cli/src/commands/report.js.map +1 -1
- package/codeyam-cli/src/utils/backgroundServer.js +2 -2
- package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
- package/codeyam-cli/src/utils/generateReport.js +252 -106
- package/codeyam-cli/src/utils/generateReport.js.map +1 -1
- package/codeyam-cli/src/utils/install-skills.js +2 -2
- package/codeyam-cli/src/utils/install-skills.js.map +1 -1
- package/codeyam-cli/src/utils/queue/__tests__/manager.test.js +38 -0
- package/codeyam-cli/src/utils/queue/__tests__/manager.test.js.map +1 -1
- package/codeyam-cli/src/utils/queue/job.js +140 -16
- package/codeyam-cli/src/utils/queue/job.js.map +1 -1
- package/codeyam-cli/src/utils/queue/manager.js +19 -7
- package/codeyam-cli/src/utils/queue/manager.js.map +1 -1
- package/codeyam-cli/src/utils/queue/persistence.js.map +1 -1
- package/codeyam-cli/src/webserver/app/lib/database.js +47 -0
- 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 +5 -10
- package/codeyam-cli/src/webserver/backgroundServer.js.map +1 -1
- package/codeyam-cli/src/webserver/bootstrap.js +9 -0
- package/codeyam-cli/src/webserver/bootstrap.js.map +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/EntityItem-wXL1Z2Aq.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeBadge-efWKDYMr.js → EntityTypeBadge-CzGX-miz.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/EntityTypeIcon-CXFKsCOD.js +41 -0
- package/codeyam-cli/src/webserver/build/client/assets/InteractivePreview-D-9pXIaY.js +25 -0
- package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-CBQPrpT0.js +3 -0
- package/codeyam-cli/src/webserver/build/client/assets/LoadingDots-D1CdlbrV.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/LogViewer-wDPcZNKx.js +3 -0
- package/codeyam-cli/src/webserver/build/client/assets/ReportIssueModal-4lcOlid-.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-BfmDgXxG.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/ScenarioViewer-CUxUNEEC.js +15 -0
- package/codeyam-cli/src/webserver/build/client/assets/{TruncatedFilePath-COPstp9J.js → TruncatedFilePath-6J7zDUD5.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/_index-DHImXdXq.js +11 -0
- package/codeyam-cli/src/webserver/build/client/assets/activity.(_tab)-CVP_WGQ3.js +32 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.link-scenario-value-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.update-key-attributes-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.update-valid-values-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/chevron-down-BYimnrHg.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/chunk-JMJ3UQ3L-BambyYE_.js +51 -0
- package/codeyam-cli/src/webserver/build/client/assets/circle-check-CaVsIRxt.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-CgUsG7ib.js +21 -0
- package/codeyam-cli/src/webserver/build/client/assets/cy-logo-cli-CKnwPCDr.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/dev.empty-DW_hdGUc.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha._-Dt-SjPsw.js +23 -0
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-DyB90fWk.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-D_3ero5o.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.edit._scenarioId-CfLCUi9S.js +5 -0
- package/codeyam-cli/src/webserver/build/client/assets/entry.client-DKJyZfAY.js +29 -0
- package/codeyam-cli/src/webserver/build/client/assets/fileTableUtils-DAtOlaWE.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/files-ClR0d32A.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/git-D62Lxxmv.js +15 -0
- package/codeyam-cli/src/webserver/build/client/assets/globals-C9s7Lhdl.css +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/html2canvas-pro.esm-fmIEn3Bc.js +9 -0
- package/codeyam-cli/src/webserver/build/client/assets/index-BosqDOlH.js +3 -0
- package/codeyam-cli/src/webserver/build/client/assets/index-CzNNiTkw.js +9 -0
- package/codeyam-cli/src/webserver/build/client/assets/keyAttributeCoverage-CTlFMihX.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/loader-circle-CNp9QFCX.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/manifest-0d27da29.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/preload-helper-ckwbz45p.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/root-B_wIKCIf.js +56 -0
- package/codeyam-cli/src/webserver/build/client/assets/scenarioStatus-B_8jpV3e.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/search-DDGjYAMJ.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/settings-DgTyB-Wg.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/simulations-CoNWGt0K.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/triangle-alert-CBc5dE1s.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-BMIGFP-m.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/useInteractiveMode-Dk_FQqWJ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{useLastLogLine-3pmpUQB-.js → useLastLogLine-BqPPNjAl.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/useReportContext-DsJbgMY9.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{useToast-DEyawJ8r.js → useToast-DWHcCcl1.js} +1 -1
- package/codeyam-cli/src/webserver/build/server/assets/index-CU58-Ttc.js +1 -0
- package/codeyam-cli/src/webserver/build/server/assets/server-build-D35o2uae.js +175 -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 +1 -3
- package/codeyam-cli/src/webserver/devServer.js.map +1 -1
- package/codeyam-cli/templates/codeyam-setup-skill.md +138 -3
- package/codeyam-cli/templates/debug-codeyam.md +625 -0
- package/package.json +14 -14
- package/packages/ai/src/lib/analyzeScope.js +2 -0
- package/packages/ai/src/lib/analyzeScope.js.map +1 -1
- package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js +16 -0
- package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js.map +1 -1
- package/packages/ai/src/lib/astScopes/patterns/switchStatementHandler.js +16 -0
- package/packages/ai/src/lib/astScopes/patterns/switchStatementHandler.js.map +1 -1
- package/packages/ai/src/lib/astScopes/processExpression.js +305 -88
- package/packages/ai/src/lib/astScopes/processExpression.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +582 -41
- package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.js +2 -1
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.js +454 -0
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/MuiManager.js.map +1 -0
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.js +173 -55
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/ReactFrameworkManager.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js +16 -1
- package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js +30 -1
- package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js +20 -0
- package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/convertNullToUndefinedBySchema.js +86 -0
- package/packages/ai/src/lib/dataStructure/helpers/convertNullToUndefinedBySchema.js.map +1 -0
- package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js +28 -2
- package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js.map +1 -1
- package/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.js +179 -17
- package/packages/ai/src/lib/gatherRelevantDependentKeyAttributes.js.map +1 -1
- package/packages/ai/src/lib/generateChangesEntityKeyAttributes.js +6 -0
- package/packages/ai/src/lib/generateChangesEntityKeyAttributes.js.map +1 -1
- package/packages/ai/src/lib/generateChangesEntityScenarioData.js +41 -0
- package/packages/ai/src/lib/generateChangesEntityScenarioData.js.map +1 -1
- package/packages/ai/src/lib/generateChangesEntityScenarios.js +37 -4
- package/packages/ai/src/lib/generateChangesEntityScenarios.js.map +1 -1
- package/packages/ai/src/lib/generateEntityDataStructure.js +4 -0
- package/packages/ai/src/lib/generateEntityDataStructure.js.map +1 -1
- package/packages/ai/src/lib/generateEntityKeyAttributes.js +176 -9
- package/packages/ai/src/lib/generateEntityKeyAttributes.js.map +1 -1
- package/packages/ai/src/lib/generateEntityScenarioData.js +29 -25
- package/packages/ai/src/lib/generateEntityScenarioData.js.map +1 -1
- package/packages/ai/src/lib/generateEntityScenarios.js +105 -9
- package/packages/ai/src/lib/generateEntityScenarios.js.map +1 -1
- package/packages/ai/src/lib/getConditionalUsagesFromCode.js +84 -14
- package/packages/ai/src/lib/getConditionalUsagesFromCode.js.map +1 -1
- package/packages/ai/src/lib/guessScenarioDataFromDescription.js +2 -1
- package/packages/ai/src/lib/guessScenarioDataFromDescription.js.map +1 -1
- package/packages/ai/src/lib/promptGenerators/gatherAttributesMap.js +6 -0
- package/packages/ai/src/lib/promptGenerators/gatherAttributesMap.js.map +1 -1
- package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.js +38 -2
- package/packages/ai/src/lib/promptGenerators/generateChangesEntityScenariosGenerator.js.map +1 -1
- package/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.js +38 -2
- package/packages/ai/src/lib/promptGenerators/generateEntityScenariosGenerator.js.map +1 -1
- package/packages/ai/src/lib/promptGenerators/guessNewScenarioDataFromDescriptionGenerator.js +16 -3
- package/packages/ai/src/lib/promptGenerators/guessNewScenarioDataFromDescriptionGenerator.js.map +1 -1
- package/packages/ai/src/lib/worker/SerializableDataStructure.js.map +1 -1
- package/packages/ai/src/lib/worker/analyzeScopeWorker.js +4 -0
- package/packages/ai/src/lib/worker/analyzeScopeWorker.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js +100 -23
- package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js +125 -0
- package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js.map +1 -0
- package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js +298 -45
- package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateChangesScenarioData.js +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateChangesScenarioData.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +201 -80
- package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.js +10 -5
- package/packages/analyze/src/lib/files/scenarios/generateKeyAttributes.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateScenarioData.js +55 -69
- package/packages/analyze/src/lib/files/scenarios/generateScenarioData.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateScenarios.js +2 -5
- package/packages/analyze/src/lib/files/scenarios/generateScenarios.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +171 -81
- package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js.map +1 -1
- package/packages/database/src/lib/kysely/db.js +2 -2
- package/packages/database/src/lib/kysely/tables/debugReportsTable.js +9 -3
- package/packages/database/src/lib/kysely/tables/debugReportsTable.js.map +1 -1
- package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +8 -4
- package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
- package/packages/generate/src/lib/deepMerge.js +27 -1
- package/packages/generate/src/lib/deepMerge.js.map +1 -1
- package/packages/types/index.js +1 -0
- package/packages/types/index.js.map +1 -1
- package/packages/types/src/types/Scenario.js +21 -1
- package/packages/types/src/types/Scenario.js.map +1 -1
- package/packages/utils/src/lib/lightweightEntityExtractor.js +25 -0
- package/packages/utils/src/lib/lightweightEntityExtractor.js.map +1 -1
- package/scripts/finalize-analyzer.cjs +3 -1
- package/codeyam-cli/scripts/fixtures/cal.com/universal-mocks/packages/prisma/index.js +0 -238
- package/codeyam-cli/scripts/fixtures/cal.com/universal-mocks/packages/prisma/index.js.map +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/EntityItem-CVbSvOjo.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/EntityTypeIcon-DcwcHyl5.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/InteractivePreview-WgwC1GfJ.js +0 -26
- package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-IEKom9O2.js +0 -3
- package/codeyam-cli/src/webserver/build/client/assets/LogViewer-BYnfxbUG.js +0 -3
- package/codeyam-cli/src/webserver/build/client/assets/ReportIssueModal-_lBPJCzG.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-lHVhvsu_.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/ScenarioViewer-d_TBk4GQ.js +0 -5
- package/codeyam-cli/src/webserver/build/client/assets/_index-kGT7VUqj.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/activity.(_tab)-DDGmhu7P.js +0 -7
- package/codeyam-cli/src/webserver/build/client/assets/chevron-down-n_HPRfM_.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/chunk-WWGJGFF6-CbVoyx1U.js +0 -26
- package/codeyam-cli/src/webserver/build/client/assets/circle-check-D1VOYveA.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-YR8jjAlu.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/dev.empty-B8vP3V_s.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha._-CN6aLCT1.js +0 -16
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-DA5Jeu2P.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.edit._scenarioId-BTeitalf.js +0 -5
- package/codeyam-cli/src/webserver/build/client/assets/entry.client-du6UEYD-.js +0 -13
- package/codeyam-cli/src/webserver/build/client/assets/fileTableUtils-BpjkhMoi.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/files-BQGvk4lJ.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/git-DVdYRT-I.js +0 -12
- package/codeyam-cli/src/webserver/build/client/assets/globals-CO-U8Bpo.css +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/html2canvas-pro.esm-XQCGvadH.js +0 -5
- package/codeyam-cli/src/webserver/build/client/assets/index-DCG-vks0.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/loader-circle-GazdNeLl.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/manifest-0b694d28.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/root-D3tQP7hx.js +0 -16
- package/codeyam-cli/src/webserver/build/client/assets/search-CIY6XmtE.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/server-build-CMKNK2uU.css +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/settings-CoMDgElu.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/simulations-agkniXp2.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/triangle-alert-B2VUcygF.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/useReportContext-EvdK-zXP.js +0 -1
- package/codeyam-cli/src/webserver/build/server/assets/index-DGVHQEXD.js +0 -1
- package/codeyam-cli/src/webserver/build/server/assets/server-build-CghkTkIL.js +0 -166
- package/codeyam-cli/templates/debug-command.md +0 -303
- /package/codeyam-cli/src/webserver/build/client/assets/{InteractivePreview-CMKNK2uU.css → styles-CMKNK2uU.css} +0 -0
|
@@ -82,37 +82,178 @@ export default function gatherRelevantDependentKeyAttributes(
|
|
|
82
82
|
const signatureSchema = dependencySchema?.signatureSchema;
|
|
83
83
|
if (!signatureSchema) return;
|
|
84
84
|
|
|
85
|
-
|
|
85
|
+
// Get sourceEquivalencies from the dependent analysis's mergedDataStructure,
|
|
86
|
+
// not from dependencySchemas (which doesn't store them)
|
|
87
|
+
const sourceEquivalencies =
|
|
88
|
+
dependentAnalysis?.metadata?.mergedDataStructure?.sourceEquivalencies ??
|
|
89
|
+
{};
|
|
90
|
+
|
|
91
|
+
// Build a fallback mapping from parent's usageEquivalencies
|
|
92
|
+
// This helps when the child's sourceEquivalencies don't have a mapping
|
|
93
|
+
// For example, if parent passes `entity` to child's `signature[0]`,
|
|
94
|
+
// usageEquivalencies might have: entity -> [{schemaPath: 'signature[0]', scopeNodeName: entityName}]
|
|
95
|
+
const usageEquivalencies = mergedDataStructure?.usageEquivalencies ?? {};
|
|
96
|
+
const signatureToParentPath: Record<string, string> = {};
|
|
97
|
+
|
|
98
|
+
for (const parentPath in usageEquivalencies) {
|
|
99
|
+
const usages = usageEquivalencies[parentPath];
|
|
100
|
+
for (const usage of usages) {
|
|
101
|
+
if (usage.scopeNodeName !== entityName) continue;
|
|
102
|
+
|
|
103
|
+
// Extract signature path from schemaPath
|
|
104
|
+
// Format can be:
|
|
105
|
+
// 1. "functionName(args).signature[N]" or "functionName(args).signature[N].property" (real data)
|
|
106
|
+
// 2. "signature[N]" or "signature[N].property" (simplified/test format)
|
|
107
|
+
let signaturePath: string;
|
|
108
|
+
const signatureIndex = usage.schemaPath.indexOf('.signature[');
|
|
109
|
+
if (signatureIndex !== -1) {
|
|
110
|
+
// Full format: extract "signature[N]" or "signature[N].property" after the dot
|
|
111
|
+
signaturePath = usage.schemaPath.slice(signatureIndex + 1);
|
|
112
|
+
} else if (usage.schemaPath.startsWith('signature[')) {
|
|
113
|
+
// Simplified format: already starts with signature[
|
|
114
|
+
signaturePath = usage.schemaPath;
|
|
115
|
+
} else {
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Map child's signature path to parent's path
|
|
120
|
+
// e.g., 'signature[0]' -> 'entity'
|
|
121
|
+
signatureToParentPath[signaturePath] = parentPath;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
86
124
|
|
|
87
125
|
// If sourceEquivalencies is empty but the child has mocked imports,
|
|
88
|
-
// propagate key attributes
|
|
126
|
+
// only propagate key attributes that come from mocked data sources
|
|
127
|
+
// (not props that the parent passes to the child)
|
|
89
128
|
if (Object.keys(sourceEquivalencies).length === 0) {
|
|
90
|
-
//
|
|
129
|
+
// Collect names of mocked imports
|
|
91
130
|
const importedExports =
|
|
92
131
|
dependentAnalysis.entity?.metadata?.importedExports ?? [];
|
|
93
132
|
const nodeModuleImports =
|
|
94
133
|
dependentAnalysis.entity?.metadata?.nodeModuleImports ?? {};
|
|
95
134
|
|
|
96
|
-
const
|
|
97
|
-
(imp: { isMocked?: boolean }) => imp.isMocked,
|
|
98
|
-
);
|
|
99
|
-
const hasMockedNodeModuleImports = Object.values(
|
|
100
|
-
nodeModuleImports,
|
|
101
|
-
).some((imports: any[]) =>
|
|
102
|
-
imports?.some((imp: { isMocked?: boolean }) => imp.isMocked),
|
|
103
|
-
);
|
|
135
|
+
const mockedImportNames = new Set<string>();
|
|
104
136
|
|
|
105
|
-
|
|
106
|
-
|
|
137
|
+
// Collect mocked names from importedExports
|
|
138
|
+
for (const imp of importedExports) {
|
|
139
|
+
if ((imp as { isMocked?: boolean }).isMocked) {
|
|
140
|
+
mockedImportNames.add((imp as { name: string }).name);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
107
143
|
|
|
108
|
-
|
|
144
|
+
// Collect mocked names from nodeModuleImports
|
|
145
|
+
for (const imports of Object.values(nodeModuleImports)) {
|
|
146
|
+
for (const imp of imports as any[]) {
|
|
147
|
+
if ((imp as { isMocked?: boolean }).isMocked) {
|
|
148
|
+
mockedImportNames.add((imp as { name: string }).name);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
if (mockedImportNames.size > 0) {
|
|
109
154
|
for (const dependentKeyAttribute of dependentKeyAtttributes) {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
155
|
+
// Include key attributes that come from controllable data sources:
|
|
156
|
+
// 1. Mocked data sources (like getScenarioDisplayState())
|
|
157
|
+
// 2. Arguments/props passed to the child (signature[N].*)
|
|
158
|
+
// Exclude attributes that are clearly just the prop name itself (like "size")
|
|
159
|
+
const externalPath = dependentKeyAttribute.externalPath || '';
|
|
160
|
+
const dataStructurePath =
|
|
161
|
+
dependentKeyAttribute.dataStructurePath || '';
|
|
162
|
+
|
|
163
|
+
const comesFromMockedSource = Array.from(mockedImportNames).some(
|
|
164
|
+
(mockedName) =>
|
|
165
|
+
externalPath.includes(`${mockedName}(`) ||
|
|
166
|
+
externalPath.includes(`${mockedName}.`) ||
|
|
167
|
+
dataStructurePath.includes(`${mockedName}(`) ||
|
|
168
|
+
dataStructurePath.includes(`${mockedName}.`) ||
|
|
169
|
+
dataStructurePath.startsWith(mockedName),
|
|
170
|
+
);
|
|
171
|
+
|
|
172
|
+
// Check if it comes from an argument (signature[N].something.deeper)
|
|
173
|
+
// but not just a simple prop like "size" or "isOutdated"
|
|
174
|
+
const comesFromArgument =
|
|
175
|
+
externalPath.startsWith('signature[') &&
|
|
176
|
+
// Must have nested path (at least one dot after the prop name)
|
|
177
|
+
// e.g., signature[0].scenario.metadata.* is OK
|
|
178
|
+
// but signature[0].size is not (it's just a simple prop)
|
|
179
|
+
(externalPath.match(/\./g) || []).length >= 2;
|
|
180
|
+
|
|
181
|
+
if (comesFromMockedSource || comesFromArgument) {
|
|
182
|
+
relevantDependentKeyAttributes.push({
|
|
183
|
+
...dependentKeyAttribute,
|
|
184
|
+
dependentEntityName: entityName,
|
|
185
|
+
originalEntityName: entityName,
|
|
186
|
+
filePath: path,
|
|
187
|
+
} as any);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// No mocked imports, try usageEquivalencies fallback for direct argument usage
|
|
194
|
+
if (Object.keys(signatureToParentPath).length > 0) {
|
|
195
|
+
for (const dependentKeyAttribute of dependentKeyAtttributes) {
|
|
196
|
+
if (!dependentKeyAttribute.externalPath?.startsWith('signature['))
|
|
197
|
+
continue;
|
|
198
|
+
|
|
199
|
+
const dependentKeyAttributeExternalPathParts =
|
|
200
|
+
splitOutsideParenthesesAndArrays(
|
|
201
|
+
dependentKeyAttribute.externalPath,
|
|
202
|
+
);
|
|
203
|
+
|
|
204
|
+
// Try to find a matching signature path
|
|
205
|
+
for (
|
|
206
|
+
let i = dependentKeyAttributeExternalPathParts.length;
|
|
207
|
+
i > 0;
|
|
208
|
+
i--
|
|
209
|
+
) {
|
|
210
|
+
const subExternalPath = joinParenthesesAndArrays(
|
|
211
|
+
dependentKeyAttributeExternalPathParts.slice(0, i),
|
|
212
|
+
);
|
|
213
|
+
|
|
214
|
+
if (signatureToParentPath[subExternalPath]) {
|
|
215
|
+
const parentPath = signatureToParentPath[subExternalPath];
|
|
216
|
+
|
|
217
|
+
// parentPath is already in parent's schema format (e.g., "signature[0].entity" or just "entity")
|
|
218
|
+
// We need to handle both cases
|
|
219
|
+
const parentPathStartsWithSignature =
|
|
220
|
+
parentPath.startsWith('signature[');
|
|
221
|
+
let externalPath = parentPathStartsWithSignature
|
|
222
|
+
? parentPath
|
|
223
|
+
: `signature[0].${parentPath}`;
|
|
224
|
+
|
|
225
|
+
// internalPath is parentPath without the signature[N]. prefix
|
|
226
|
+
let internalPath: string | undefined =
|
|
227
|
+
parentPathStartsWithSignature
|
|
228
|
+
? parentPath.replace(/^signature\[\d+\]\./, '')
|
|
229
|
+
: parentPath;
|
|
230
|
+
|
|
231
|
+
if (i < dependentKeyAttributeExternalPathParts.length) {
|
|
232
|
+
const remainingPath = joinParenthesesAndArrays(
|
|
233
|
+
dependentKeyAttributeExternalPathParts.slice(i),
|
|
234
|
+
);
|
|
235
|
+
externalPath = `${externalPath}.${remainingPath}`;
|
|
236
|
+
internalPath = `${internalPath}.${remainingPath}`;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
// Look up in associationMap for proper internal path
|
|
240
|
+
if (associationMap[externalPath]) {
|
|
241
|
+
internalPath = associationMap[externalPath];
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
relevantDependentKeyAttributes.push({
|
|
245
|
+
...dependentKeyAttribute,
|
|
246
|
+
dependentEntityName: entityName,
|
|
247
|
+
originalEntityName: entityName,
|
|
248
|
+
filePath: path,
|
|
249
|
+
internalPath,
|
|
250
|
+
externalPath,
|
|
251
|
+
dataStructurePath: internalPath,
|
|
252
|
+
} as any);
|
|
253
|
+
|
|
254
|
+
break;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
116
257
|
}
|
|
117
258
|
}
|
|
118
259
|
return;
|
|
@@ -123,6 +264,8 @@ export default function gatherRelevantDependentKeyAttributes(
|
|
|
123
264
|
splitOutsideParenthesesAndArrays(dependentKeyAttribute.externalPath);
|
|
124
265
|
|
|
125
266
|
let matchFound = false;
|
|
267
|
+
|
|
268
|
+
// First, try to match using child's sourceEquivalencies
|
|
126
269
|
for (
|
|
127
270
|
let i = dependentKeyAttributeExternalPathParts.length;
|
|
128
271
|
i > 0;
|
|
@@ -132,8 +275,8 @@ export default function gatherRelevantDependentKeyAttributes(
|
|
|
132
275
|
dependentKeyAttributeExternalPathParts.slice(0, i),
|
|
133
276
|
);
|
|
134
277
|
|
|
135
|
-
|
|
136
|
-
|
|
278
|
+
// Use the sourceEquivalencies from the child's analysis
|
|
279
|
+
for (const sourceEquivalencyPath in sourceEquivalencies) {
|
|
137
280
|
const sourceEquivalencyPathParts = splitOutsideParenthesesAndArrays(
|
|
138
281
|
sourceEquivalencyPath,
|
|
139
282
|
);
|
|
@@ -145,8 +288,7 @@ export default function gatherRelevantDependentKeyAttributes(
|
|
|
145
288
|
if (relevantSourceEquivalencyPath !== subExternalPath) continue;
|
|
146
289
|
|
|
147
290
|
const sourcePath =
|
|
148
|
-
|
|
149
|
-
?.schemaPath;
|
|
291
|
+
sourceEquivalencies[sourceEquivalencyPath][0]?.schemaPath;
|
|
150
292
|
|
|
151
293
|
if (!sourcePath) continue;
|
|
152
294
|
|
|
@@ -181,6 +323,8 @@ export default function gatherRelevantDependentKeyAttributes(
|
|
|
181
323
|
filePath: path, // File path for restructuring into nested format
|
|
182
324
|
internalPath,
|
|
183
325
|
externalPath,
|
|
326
|
+
// Transform dataStructurePath to parent's path structure
|
|
327
|
+
dataStructurePath: internalPath,
|
|
184
328
|
} as any);
|
|
185
329
|
|
|
186
330
|
matchFound = true;
|
|
@@ -189,6 +333,74 @@ export default function gatherRelevantDependentKeyAttributes(
|
|
|
189
333
|
|
|
190
334
|
if (matchFound) break;
|
|
191
335
|
}
|
|
336
|
+
|
|
337
|
+
// Fallback: if no sourceEquivalency match, try using parent's usageEquivalencies
|
|
338
|
+
// This handles direct argument usage like entity.entityType
|
|
339
|
+
if (
|
|
340
|
+
!matchFound &&
|
|
341
|
+
dependentKeyAttribute.externalPath?.startsWith('signature[')
|
|
342
|
+
) {
|
|
343
|
+
// Try to find a matching signature path in the usageEquivalencies-derived map
|
|
344
|
+
for (
|
|
345
|
+
let i = dependentKeyAttributeExternalPathParts.length;
|
|
346
|
+
i > 0;
|
|
347
|
+
i--
|
|
348
|
+
) {
|
|
349
|
+
const subExternalPath = joinParenthesesAndArrays(
|
|
350
|
+
dependentKeyAttributeExternalPathParts.slice(0, i),
|
|
351
|
+
);
|
|
352
|
+
|
|
353
|
+
if (signatureToParentPath[subExternalPath]) {
|
|
354
|
+
const parentPath = signatureToParentPath[subExternalPath];
|
|
355
|
+
|
|
356
|
+
// parentPath is already in parent's schema format (e.g., "signature[0].entity" or just "entity")
|
|
357
|
+
// We need to handle both cases
|
|
358
|
+
const parentPathStartsWithSignature =
|
|
359
|
+
parentPath.startsWith('signature[');
|
|
360
|
+
let externalPath = parentPathStartsWithSignature
|
|
361
|
+
? parentPath
|
|
362
|
+
: `signature[0].${parentPath}`;
|
|
363
|
+
|
|
364
|
+
// internalPath is parentPath without the signature[N]. prefix
|
|
365
|
+
let internalPath: string | undefined =
|
|
366
|
+
parentPathStartsWithSignature
|
|
367
|
+
? parentPath.replace(/^signature\[\d+\]\./, '')
|
|
368
|
+
: parentPath;
|
|
369
|
+
|
|
370
|
+
if (i < dependentKeyAttributeExternalPathParts.length) {
|
|
371
|
+
const remainingPath = joinParenthesesAndArrays(
|
|
372
|
+
dependentKeyAttributeExternalPathParts.slice(i),
|
|
373
|
+
);
|
|
374
|
+
externalPath = `${externalPath}.${remainingPath}`;
|
|
375
|
+
internalPath = `${internalPath}.${remainingPath}`;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
// Look up the full external path in associationMap for proper internal path
|
|
379
|
+
const fullExternalPath = externalPath;
|
|
380
|
+
if (associationMap[fullExternalPath]) {
|
|
381
|
+
internalPath = associationMap[fullExternalPath];
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
const dependentEntityName =
|
|
385
|
+
dependentKeyAttribute.dependentEntityName
|
|
386
|
+
? `${dependentKeyAttribute.dependentEntityName} (through ${entityName})`
|
|
387
|
+
: entityName;
|
|
388
|
+
|
|
389
|
+
relevantDependentKeyAttributes.push({
|
|
390
|
+
...dependentKeyAttribute,
|
|
391
|
+
dependentEntityName,
|
|
392
|
+
originalEntityName: entityName,
|
|
393
|
+
filePath: path,
|
|
394
|
+
internalPath,
|
|
395
|
+
externalPath,
|
|
396
|
+
dataStructurePath: internalPath,
|
|
397
|
+
} as any);
|
|
398
|
+
|
|
399
|
+
matchFound = true;
|
|
400
|
+
break;
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
}
|
|
192
404
|
}
|
|
193
405
|
});
|
|
194
406
|
});
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
import completionCall from './completionCall';
|
|
2
2
|
import { saveLlmCall } from '~codeyam/aws/dynamodb';
|
|
3
|
-
import {
|
|
3
|
+
import type {
|
|
4
|
+
Analysis,
|
|
5
|
+
CompoundConditional,
|
|
6
|
+
ConditionalUsage,
|
|
7
|
+
Entity,
|
|
8
|
+
} from '~codeyam/types';
|
|
4
9
|
import generateEntityKeyAttributesGenerator from './promptGenerators/generateEntityKeyAttributesGenerator';
|
|
5
10
|
import { awsLog } from '~codeyam/utils';
|
|
6
11
|
import { AI, DEFAULT_LARGER_MODEL } from '~codeyam/ai';
|
|
7
12
|
import isFrontend from './isFrontend';
|
|
8
13
|
import { gatherAttributesMap } from './promptGenerators/gatherAttributesMap';
|
|
14
|
+
import { formatConditionalUsagesForPrompt } from './getConditionalUsagesFromCode';
|
|
9
15
|
|
|
10
16
|
interface GenerateChangesEntityKeyAttributesArgs {
|
|
11
17
|
entity: Entity;
|
|
@@ -41,11 +47,22 @@ export default async function generateChangesEntityKeyAttributes({
|
|
|
41
47
|
true,
|
|
42
48
|
);
|
|
43
49
|
|
|
50
|
+
// Use pre-computed conditional usages from metadata for static analysis context
|
|
51
|
+
const conditionalUsages: Record<string, ConditionalUsage[]> =
|
|
52
|
+
isolatedDataStructure?.conditionalUsages ?? {};
|
|
53
|
+
const compoundConditionals: CompoundConditional[] =
|
|
54
|
+
isolatedDataStructure?.compoundConditionals ?? [];
|
|
55
|
+
const staticAnalysisContext = formatConditionalUsagesForPrompt(
|
|
56
|
+
conditionalUsages,
|
|
57
|
+
compoundConditionals,
|
|
58
|
+
);
|
|
59
|
+
|
|
44
60
|
const prompt = generateEntityKeyAttributesGenerator({
|
|
45
61
|
code: entity.code,
|
|
46
62
|
attributesMap,
|
|
47
63
|
existingKeyAttributes,
|
|
48
64
|
commitDiff,
|
|
65
|
+
staticAnalysisContext,
|
|
49
66
|
});
|
|
50
67
|
|
|
51
68
|
const response = await completionCall({
|
|
@@ -346,6 +346,47 @@ NEVER include "error" fields in responses. Skip them entirely.
|
|
|
346
346
|
- If structure has \`{ data: {...}, error: {...} }\`, only fill \`data\`
|
|
347
347
|
- Leave out any attribute named "error"—do not set to null, omit entirely
|
|
348
348
|
|
|
349
|
+
## CRITICAL: Preserve Exact Structure
|
|
350
|
+
Your response MUST mirror the EXACT nested structure provided in mockData Structure.
|
|
351
|
+
- Do NOT reorganize, split, or create duplicate keys
|
|
352
|
+
- The hierarchy of nested objects must match exactly what was provided
|
|
353
|
+
- Only change the leaf VALUES (replacing type descriptions like "string" with actual data like "hello")
|
|
354
|
+
- Arrays should have 3-5 items to provide realistic test data variety
|
|
355
|
+
|
|
356
|
+
**Example** - if given this structure:
|
|
357
|
+
\`\`\`json
|
|
358
|
+
{
|
|
359
|
+
"createClient()": {
|
|
360
|
+
"from(\\"users\\")": {
|
|
361
|
+
"select(\\"*\\")": { "data": [{ "id": "string", "name": "string" }] },
|
|
362
|
+
"delete()": { "eq(\\"id\\", id)": {} }
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
\`\`\`
|
|
367
|
+
|
|
368
|
+
Return ONE \`from("users")\` key containing BOTH \`select("*")\` and \`delete()\`:
|
|
369
|
+
\`\`\`json
|
|
370
|
+
{
|
|
371
|
+
"createClient()": {
|
|
372
|
+
"from(\\"users\\")": {
|
|
373
|
+
"select(\\"*\\")": { "data": [{ "id": "user-1", "name": "Alice" }, { "id": "user-2", "name": "Bob" }] },
|
|
374
|
+
"delete()": { "eq(\\"id\\", \\"user-1\\")": {} }
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
\`\`\`
|
|
379
|
+
|
|
380
|
+
**WRONG** - do NOT create duplicate keys like this:
|
|
381
|
+
\`\`\`json
|
|
382
|
+
{
|
|
383
|
+
"createClient()": {
|
|
384
|
+
"from(\\"users\\")": { "select(\\"*\\")": { ... } },
|
|
385
|
+
"from(\\"users\\")": { "delete()": { ... } }
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
\`\`\`
|
|
389
|
+
|
|
349
390
|
## Special Markers
|
|
350
391
|
|
|
351
392
|
### Dynamic Dates (\`~~codeyam-code~~\`)
|
|
@@ -288,7 +288,16 @@ Focus scenario updates on demonstrating this change.${scenarioCount ? ` Generate
|
|
|
288
288
|
|
|
289
289
|
return `You are updating data scenarios after a code change. Determine which existing scenarios need updating, which should be removed, and if new ones are needed.
|
|
290
290
|
|
|
291
|
-
${contextSection}##
|
|
291
|
+
${contextSection}## Coverage Goals (IMPORTANT)
|
|
292
|
+
Your primary goal is to MAXIMIZE coverage of key attributes across all scenarios:
|
|
293
|
+
|
|
294
|
+
1. **Use indexed validValueOptions**: Each key attribute has indexed \`validValueOptions\` (with \`index\` and \`value\`). Reference these by index in your valueOptionRef.
|
|
295
|
+
|
|
296
|
+
2. **Prioritize attributes with dependencies**: Key attributes with a \`dependencies\` array control conditionally-rendered content. Satisfy these dependencies to reveal gated UI/behavior.
|
|
297
|
+
|
|
298
|
+
3. **Cover conditional branches**: Use \`codeUsages\` to identify all conditional paths that need coverage.
|
|
299
|
+
|
|
300
|
+
## Update Rules
|
|
292
301
|
|
|
293
302
|
### Removed Key Attributes
|
|
294
303
|
- Update scenarios using removed attributes—replace with new attributes or remove if no longer relevant
|
|
@@ -297,6 +306,7 @@ ${contextSection}## Update Rules
|
|
|
297
306
|
|
|
298
307
|
### Added Key Attributes
|
|
299
308
|
- Create or update scenarios to demonstrate new behavior
|
|
309
|
+
- Use different validValueOption indices than existing scenarios to maximize coverage
|
|
300
310
|
|
|
301
311
|
### Playwright Instructions
|
|
302
312
|
- Validate existing instructions still work after code changes
|
|
@@ -308,7 +318,26 @@ ${contextSection}## Update Rules
|
|
|
308
318
|
### Default Scenario
|
|
309
319
|
- First scenario must be "${DEFAULT_SCENARIO_NAME}" (exact name)
|
|
310
320
|
- NEVER include playwrightInstructions—captures initial state only
|
|
311
|
-
- Must include all current key attributes with valid values
|
|
321
|
+
- Must include all current key attributes with valid values from their validValueOptions
|
|
322
|
+
|
|
323
|
+
## keyAttributeInstructions Format
|
|
324
|
+
Use \`dataStructurePath\` as key. Include variable name, instruction, AND a valueOptionRef that references which validValueOption you're using:
|
|
325
|
+
\`\`\`json
|
|
326
|
+
{
|
|
327
|
+
"useStatus().status": {
|
|
328
|
+
"localVariable": "status",
|
|
329
|
+
"instruction": "Set to 'active' mode",
|
|
330
|
+
"valueOptionRef": { "index": 0, "refType": "exact" }
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
\`\`\`
|
|
334
|
+
|
|
335
|
+
### valueOptionRef Types
|
|
336
|
+
- \`"exact"\`: Uses the validValueOption at this index exactly
|
|
337
|
+
- \`"derived"\`: Based on this validValueOption but modified (include \`derivation\` field explaining how)
|
|
338
|
+
- \`"custom"\`: Value not from validValueOptions list (use sparingly)
|
|
339
|
+
|
|
340
|
+
The \`index\` refers to the validValueOptions array position (0 = first option).
|
|
312
341
|
|
|
313
342
|
## Response Format
|
|
314
343
|
|
|
@@ -332,7 +361,11 @@ Otherwise:
|
|
|
332
361
|
"testName": "it(\\"shows empty message when no notifications\\")",
|
|
333
362
|
"description": "User has no notifications.",
|
|
334
363
|
"keyAttributeInstructions": {
|
|
335
|
-
"notifications[]": {
|
|
364
|
+
"useData().notifications[]": {
|
|
365
|
+
"localVariable": "notifications[]",
|
|
366
|
+
"instruction": "Empty array [] to show empty state",
|
|
367
|
+
"valueOptionRef": { "index": 1, "refType": "exact" }
|
|
368
|
+
}
|
|
336
369
|
}
|
|
337
370
|
}
|
|
338
371
|
]
|
|
@@ -342,7 +375,7 @@ Otherwise:
|
|
|
342
375
|
## Rules
|
|
343
376
|
- Scenario names: letters, numbers, spaces only
|
|
344
377
|
- testName: Jest style with specific expectations
|
|
345
|
-
- Use values from \`validValueOptions\` in key attributes list
|
|
378
|
+
- Use values from \`validValueOptions\` in key attributes list (reference by index)
|
|
346
379
|
- Include dependency key attributes if dependencies involved
|
|
347
380
|
- React elements: simple only (\`<div>\`, \`<span>\`)
|
|
348
381
|
- No external library references—plain JS/TS values
|
|
@@ -3,6 +3,7 @@ import isolateScopes from './isolateScopes';
|
|
|
3
3
|
import analyzeScope from './analyzeScope';
|
|
4
4
|
import { FileAnalyzer } from '~codeyam/analyze';
|
|
5
5
|
import { AI, SerializableDataStructure } from '~codeyam/ai';
|
|
6
|
+
import { resetScopeDataStructureMetrics } from './dataStructure/ScopeDataStructure';
|
|
6
7
|
|
|
7
8
|
// import { awsLog } from '~codeyam/utils';
|
|
8
9
|
|
|
@@ -17,6 +18,10 @@ export default async function generateEntityDataStructure({
|
|
|
17
18
|
fileAnalyzer,
|
|
18
19
|
model,
|
|
19
20
|
}: GenerateEntityDataStructureArgs): Promise<SerializableDataStructure> {
|
|
21
|
+
// Reset metrics counters to prevent false "infinite loop" detection when
|
|
22
|
+
// processing multiple entities in the same run
|
|
23
|
+
resetScopeDataStructureMetrics();
|
|
24
|
+
|
|
20
25
|
// awsLog('CodeYam: Generating entity data structure', {
|
|
21
26
|
// filePath: entity.filePath,
|
|
22
27
|
// entityName: entity.name,
|