@codeyam/codeyam-cli 0.1.7 → 0.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/analyzer-template/.build-info.json +8 -8
- package/analyzer-template/log.txt +3 -3
- package/analyzer-template/package.json +9 -9
- package/analyzer-template/packages/ai/package.json +1 -1
- package/analyzer-template/packages/ai/src/lib/astScopes/astScopeAnalyzer.ts +34 -3
- package/analyzer-template/packages/ai/src/lib/completionCall.ts +14 -2
- package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +27 -0
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/coercePrimitivesToArraysBySchema.ts +62 -0
- package/analyzer-template/packages/ai/src/lib/generateEntityScenarioData.ts +78 -2
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlows.ts +0 -33
- package/analyzer-template/packages/analyze/src/lib/ProjectAnalyzer.ts +19 -7
- package/analyzer-template/packages/analyze/src/lib/asts/index.ts +7 -2
- package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities.ts +9 -1
- package/analyzer-template/packages/analyze/src/lib/files/analyze/dependencyResolver.ts +0 -6
- package/analyzer-template/packages/analyze/src/lib/files/analyze/findOrCreateEntity.ts +12 -0
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/TransformationTracer.ts +65 -28
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +83 -0
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.ts +0 -98
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +23 -4
- package/analyzer-template/packages/aws/package.json +2 -2
- package/analyzer-template/packages/database/index.ts +1 -0
- package/analyzer-template/packages/database/package.json +3 -3
- package/analyzer-template/packages/database/src/lib/kysely/db.ts +8 -0
- package/analyzer-template/packages/database/src/lib/kysely/tables/editorScenariosTable.ts +93 -0
- package/analyzer-template/packages/database/src/lib/loadCommits.ts +31 -20
- package/analyzer-template/packages/database/src/lib/loadEntities.ts +0 -6
- package/analyzer-template/packages/database/src/lib/loadReadyToBeCapturedAnalyses.ts +0 -5
- package/analyzer-template/packages/database/src/lib/updateCommitMetadata.ts +94 -143
- package/analyzer-template/packages/database/src/lib/updateFreshAnalysisStatus.ts +58 -42
- package/analyzer-template/packages/database/src/lib/updateFreshAnalysisStatusWithScenarios.ts +81 -65
- package/analyzer-template/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.ts +29 -1
- package/analyzer-template/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.ts +33 -5
- package/analyzer-template/packages/github/dist/database/index.d.ts +1 -0
- package/analyzer-template/packages/github/dist/database/index.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/index.js +1 -0
- package/analyzer-template/packages/github/dist/database/index.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts +2 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js +5 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.d.ts +25 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.d.ts.map +1 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.js +76 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts +5 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/scenariosTable.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.js +23 -13
- package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.js +0 -6
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.js +1 -4
- package/analyzer-template/packages/github/dist/database/src/lib/loadReadyToBeCapturedAnalyses.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js +76 -90
- package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatus.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatus.js +41 -30
- package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatus.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatusWithScenarios.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatusWithScenarios.js +68 -57
- package/analyzer-template/packages/github/dist/database/src/lib/updateFreshAnalysisStatusWithScenarios.js.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js +29 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +33 -5
- package/analyzer-template/packages/github/dist/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/enums/ProjectFramework.d.ts +2 -0
- package/analyzer-template/packages/github/dist/types/src/enums/ProjectFramework.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/enums/ProjectFramework.js +2 -0
- package/analyzer-template/packages/github/dist/types/src/enums/ProjectFramework.js.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/types/ProjectMetadata.d.ts +1 -0
- package/analyzer-template/packages/github/dist/types/src/types/ProjectMetadata.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts +10 -0
- package/analyzer-template/packages/github/dist/types/src/types/Scenario.d.ts.map +1 -1
- package/analyzer-template/packages/github/package.json +1 -1
- package/analyzer-template/packages/types/src/enums/ProjectFramework.ts +2 -0
- package/analyzer-template/packages/types/src/types/ProjectMetadata.ts +1 -0
- package/analyzer-template/packages/types/src/types/Scenario.ts +10 -0
- package/analyzer-template/packages/ui-components/package.json +1 -1
- package/analyzer-template/packages/utils/dist/types/src/enums/ProjectFramework.d.ts +2 -0
- package/analyzer-template/packages/utils/dist/types/src/enums/ProjectFramework.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/types/src/enums/ProjectFramework.js +2 -0
- package/analyzer-template/packages/utils/dist/types/src/enums/ProjectFramework.js.map +1 -1
- package/analyzer-template/packages/utils/dist/types/src/types/ProjectMetadata.d.ts +1 -0
- package/analyzer-template/packages/utils/dist/types/src/types/ProjectMetadata.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts +10 -0
- package/analyzer-template/packages/utils/dist/types/src/types/Scenario.d.ts.map +1 -1
- package/analyzer-template/playwright/captureFromUrl.ts +89 -82
- package/analyzer-template/project/constructMockCode.ts +136 -43
- package/analyzer-template/project/reconcileMockDataKeys.ts +19 -14
- package/analyzer-template/project/start.ts +3 -0
- package/analyzer-template/project/startScenarioCapture.ts +9 -0
- package/analyzer-template/project/writeClientLogRoute.ts +125 -0
- package/analyzer-template/project/writeMockDataTsx.ts +17 -0
- package/analyzer-template/project/writeScenarioComponents.ts +36 -7
- package/analyzer-template/tsconfig.json +13 -1
- package/background/src/lib/virtualized/project/constructMockCode.js +115 -34
- package/background/src/lib/virtualized/project/constructMockCode.js.map +1 -1
- package/background/src/lib/virtualized/project/reconcileMockDataKeys.js +17 -11
- package/background/src/lib/virtualized/project/reconcileMockDataKeys.js.map +1 -1
- package/background/src/lib/virtualized/project/start.js +2 -0
- package/background/src/lib/virtualized/project/start.js.map +1 -1
- package/background/src/lib/virtualized/project/startScenarioCapture.js +5 -0
- package/background/src/lib/virtualized/project/startScenarioCapture.js.map +1 -1
- package/background/src/lib/virtualized/project/writeClientLogRoute.js +110 -0
- package/background/src/lib/virtualized/project/writeClientLogRoute.js.map +1 -0
- package/background/src/lib/virtualized/project/writeMockDataTsx.js +12 -0
- package/background/src/lib/virtualized/project/writeMockDataTsx.js.map +1 -1
- package/background/src/lib/virtualized/project/writeScenarioComponents.js +29 -7
- package/background/src/lib/virtualized/project/writeScenarioComponents.js.map +1 -1
- package/codeyam-cli/scripts/apply-setup.js +208 -11
- package/codeyam-cli/scripts/apply-setup.js.map +1 -1
- package/codeyam-cli/src/__tests__/memory-scripts/filter-session.test.js +196 -0
- package/codeyam-cli/src/__tests__/memory-scripts/filter-session.test.js.map +1 -0
- package/codeyam-cli/src/__tests__/memory-scripts/read-json-field.test.js +114 -0
- package/codeyam-cli/src/__tests__/memory-scripts/read-json-field.test.js.map +1 -0
- package/codeyam-cli/src/__tests__/memory-scripts/ripgrep-fallback.test.js +149 -0
- package/codeyam-cli/src/__tests__/memory-scripts/ripgrep-fallback.test.js.map +1 -0
- package/codeyam-cli/src/cli.js +2 -0
- package/codeyam-cli/src/cli.js.map +1 -1
- package/codeyam-cli/src/commands/__tests__/editor.stepDispatch.test.js +45 -0
- package/codeyam-cli/src/commands/__tests__/editor.stepDispatch.test.js.map +1 -0
- package/codeyam-cli/src/commands/__tests__/init.gitignore.test.js +101 -47
- package/codeyam-cli/src/commands/__tests__/init.gitignore.test.js.map +1 -1
- package/codeyam-cli/src/commands/analyze.js +17 -7
- package/codeyam-cli/src/commands/analyze.js.map +1 -1
- package/codeyam-cli/src/commands/default.js +14 -2
- package/codeyam-cli/src/commands/default.js.map +1 -1
- package/codeyam-cli/src/commands/editor.js +3215 -0
- package/codeyam-cli/src/commands/editor.js.map +1 -0
- package/codeyam-cli/src/commands/init.js +107 -45
- package/codeyam-cli/src/commands/init.js.map +1 -1
- package/codeyam-cli/src/data/techStacks.js +77 -0
- package/codeyam-cli/src/data/techStacks.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/analyzerFinalization.test.js +144 -0
- package/codeyam-cli/src/utils/__tests__/analyzerFinalization.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/backgroundServer.test.js +46 -0
- package/codeyam-cli/src/utils/__tests__/backgroundServer.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/devServerState.test.js +134 -0
- package/codeyam-cli/src/utils/__tests__/devServerState.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorApi.test.js +127 -0
- package/codeyam-cli/src/utils/__tests__/editorApi.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorAudit.test.js +855 -0
- package/codeyam-cli/src/utils/__tests__/editorAudit.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorCapture.test.js +93 -0
- package/codeyam-cli/src/utils/__tests__/editorCapture.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorDevServer.test.js +304 -0
- package/codeyam-cli/src/utils/__tests__/editorDevServer.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorEntityChangeStatus.test.js +121 -0
- package/codeyam-cli/src/utils/__tests__/editorEntityChangeStatus.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorImageVerifier.test.js +294 -0
- package/codeyam-cli/src/utils/__tests__/editorImageVerifier.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorJournal.test.js +542 -0
- package/codeyam-cli/src/utils/__tests__/editorJournal.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorLoaderHelpers.test.js +520 -0
- package/codeyam-cli/src/utils/__tests__/editorLoaderHelpers.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorMockState.test.js +270 -0
- package/codeyam-cli/src/utils/__tests__/editorMockState.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorPreloadHelpers.test.js +217 -0
- package/codeyam-cli/src/utils/__tests__/editorPreloadHelpers.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorPreview.test.js +339 -0
- package/codeyam-cli/src/utils/__tests__/editorPreview.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorProxySession.test.js +153 -0
- package/codeyam-cli/src/utils/__tests__/editorProxySession.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorScenarioLookup.test.js +139 -0
- package/codeyam-cli/src/utils/__tests__/editorScenarioLookup.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorScenarioSwitch.test.js +221 -0
- package/codeyam-cli/src/utils/__tests__/editorScenarioSwitch.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js +855 -0
- package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorSeedAdapter.test.js +213 -0
- package/codeyam-cli/src/utils/__tests__/editorSeedAdapter.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/entityChangeStatus.test.js +1742 -0
- package/codeyam-cli/src/utils/__tests__/entityChangeStatus.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/git.editor.test.js +134 -0
- package/codeyam-cli/src/utils/__tests__/git.editor.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/journalCaptureStabilization.test.js +107 -0
- package/codeyam-cli/src/utils/__tests__/journalCaptureStabilization.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/parseRegisterArg.test.js +101 -0
- package/codeyam-cli/src/utils/__tests__/parseRegisterArg.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/pathIgnoring.test.js +9 -0
- package/codeyam-cli/src/utils/__tests__/pathIgnoring.test.js.map +1 -1
- package/codeyam-cli/src/utils/__tests__/project.test.js +65 -0
- package/codeyam-cli/src/utils/__tests__/project.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/scenarioCoverage.test.js +227 -0
- package/codeyam-cli/src/utils/__tests__/scenarioCoverage.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/scenarioMarkers.test.js +121 -0
- package/codeyam-cli/src/utils/__tests__/scenarioMarkers.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/scenariosManifest.test.js +300 -0
- package/codeyam-cli/src/utils/__tests__/scenariosManifest.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +50 -4
- package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js.map +1 -1
- package/codeyam-cli/src/utils/__tests__/templateConsistency.test.js +51 -0
- package/codeyam-cli/src/utils/__tests__/templateConsistency.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/webappDetection.test.js +142 -0
- package/codeyam-cli/src/utils/__tests__/webappDetection.test.js.map +1 -0
- package/codeyam-cli/src/utils/analyzer.js +9 -0
- package/codeyam-cli/src/utils/analyzer.js.map +1 -1
- package/codeyam-cli/src/utils/analyzerFinalization.js +96 -0
- package/codeyam-cli/src/utils/analyzerFinalization.js.map +1 -0
- package/codeyam-cli/src/utils/backgroundServer.js +104 -12
- package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
- package/codeyam-cli/src/utils/buildFlags.js +4 -0
- package/codeyam-cli/src/utils/buildFlags.js.map +1 -0
- package/codeyam-cli/src/utils/database.js +37 -2
- package/codeyam-cli/src/utils/database.js.map +1 -1
- package/codeyam-cli/src/utils/devModeEvents.js +40 -0
- package/codeyam-cli/src/utils/devModeEvents.js.map +1 -0
- package/codeyam-cli/src/utils/devServerState.js +71 -0
- package/codeyam-cli/src/utils/devServerState.js.map +1 -0
- package/codeyam-cli/src/utils/editorApi.js +73 -0
- package/codeyam-cli/src/utils/editorApi.js.map +1 -0
- package/codeyam-cli/src/utils/editorAudit.js +176 -0
- package/codeyam-cli/src/utils/editorAudit.js.map +1 -0
- package/codeyam-cli/src/utils/editorCapture.js +102 -0
- package/codeyam-cli/src/utils/editorCapture.js.map +1 -0
- package/codeyam-cli/src/utils/editorDevServer.js +197 -0
- package/codeyam-cli/src/utils/editorDevServer.js.map +1 -0
- package/codeyam-cli/src/utils/editorEntityChangeStatus.js +44 -0
- package/codeyam-cli/src/utils/editorEntityChangeStatus.js.map +1 -0
- package/codeyam-cli/src/utils/editorImageVerifier.js +155 -0
- package/codeyam-cli/src/utils/editorImageVerifier.js.map +1 -0
- package/codeyam-cli/src/utils/editorJournal.js +225 -0
- package/codeyam-cli/src/utils/editorJournal.js.map +1 -0
- package/codeyam-cli/src/utils/editorLoaderHelpers.js +113 -0
- package/codeyam-cli/src/utils/editorLoaderHelpers.js.map +1 -0
- package/codeyam-cli/src/utils/editorMockState.js +248 -0
- package/codeyam-cli/src/utils/editorMockState.js.map +1 -0
- package/codeyam-cli/src/utils/editorPreloadHelpers.js +135 -0
- package/codeyam-cli/src/utils/editorPreloadHelpers.js.map +1 -0
- package/codeyam-cli/src/utils/editorPreview.js +132 -0
- package/codeyam-cli/src/utils/editorPreview.js.map +1 -0
- package/codeyam-cli/src/utils/editorScenarioSwitch.js +112 -0
- package/codeyam-cli/src/utils/editorScenarioSwitch.js.map +1 -0
- package/codeyam-cli/src/utils/editorScenarios.js +332 -0
- package/codeyam-cli/src/utils/editorScenarios.js.map +1 -0
- package/codeyam-cli/src/utils/editorSeedAdapter.js +173 -0
- package/codeyam-cli/src/utils/editorSeedAdapter.js.map +1 -0
- package/codeyam-cli/src/utils/entityChangeStatus.js +349 -0
- package/codeyam-cli/src/utils/entityChangeStatus.js.map +1 -0
- package/codeyam-cli/src/utils/entityChangeStatus.server.js +158 -0
- package/codeyam-cli/src/utils/entityChangeStatus.server.js.map +1 -0
- package/codeyam-cli/src/utils/fileMetadata.js +5 -0
- package/codeyam-cli/src/utils/fileMetadata.js.map +1 -1
- package/codeyam-cli/src/utils/fileWatcher.js +25 -9
- package/codeyam-cli/src/utils/fileWatcher.js.map +1 -1
- package/codeyam-cli/src/utils/git.js +103 -0
- package/codeyam-cli/src/utils/git.js.map +1 -1
- package/codeyam-cli/src/utils/install-skills.js +55 -13
- package/codeyam-cli/src/utils/install-skills.js.map +1 -1
- package/codeyam-cli/src/utils/interactiveSyncWatcher.js +126 -0
- package/codeyam-cli/src/utils/interactiveSyncWatcher.js.map +1 -0
- package/codeyam-cli/src/utils/parseRegisterArg.js +31 -0
- package/codeyam-cli/src/utils/parseRegisterArg.js.map +1 -0
- package/codeyam-cli/src/utils/pathIgnoring.js +19 -7
- package/codeyam-cli/src/utils/pathIgnoring.js.map +1 -1
- package/codeyam-cli/src/utils/project.js +15 -5
- package/codeyam-cli/src/utils/project.js.map +1 -1
- package/codeyam-cli/src/utils/queue/__tests__/heartbeat.test.js +11 -11
- package/codeyam-cli/src/utils/queue/__tests__/heartbeat.test.js.map +1 -1
- package/codeyam-cli/src/utils/queue/__tests__/manager.test.js +22 -0
- package/codeyam-cli/src/utils/queue/__tests__/manager.test.js.map +1 -1
- package/codeyam-cli/src/utils/queue/heartbeat.js +13 -5
- package/codeyam-cli/src/utils/queue/heartbeat.js.map +1 -1
- package/codeyam-cli/src/utils/queue/job.js +70 -1
- package/codeyam-cli/src/utils/queue/job.js.map +1 -1
- package/codeyam-cli/src/utils/queue/manager.js +7 -6
- package/codeyam-cli/src/utils/queue/manager.js.map +1 -1
- package/codeyam-cli/src/utils/scenarioCoverage.js +75 -0
- package/codeyam-cli/src/utils/scenarioCoverage.js.map +1 -0
- package/codeyam-cli/src/utils/scenarioMarkers.js +134 -0
- package/codeyam-cli/src/utils/scenarioMarkers.js.map +1 -0
- package/codeyam-cli/src/utils/scenariosManifest.js +159 -0
- package/codeyam-cli/src/utils/scenariosManifest.js.map +1 -0
- package/codeyam-cli/src/utils/serverState.js +57 -2
- package/codeyam-cli/src/utils/serverState.js.map +1 -1
- package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +82 -11
- package/codeyam-cli/src/utils/setupClaudeCodeSettings.js.map +1 -1
- package/codeyam-cli/src/utils/simulationGateMiddleware.js +8 -1
- package/codeyam-cli/src/utils/simulationGateMiddleware.js.map +1 -1
- package/codeyam-cli/src/utils/slugUtils.js +25 -0
- package/codeyam-cli/src/utils/slugUtils.js.map +1 -0
- package/codeyam-cli/src/utils/syncMocksMiddleware.js +2 -2
- package/codeyam-cli/src/utils/syncMocksMiddleware.js.map +1 -1
- package/codeyam-cli/src/utils/testRunner.js +158 -0
- package/codeyam-cli/src/utils/testRunner.js.map +1 -0
- package/codeyam-cli/src/utils/webappDetection.js +35 -2
- package/codeyam-cli/src/utils/webappDetection.js.map +1 -1
- package/codeyam-cli/src/webserver/__tests__/clientErrors.test.js +40 -0
- package/codeyam-cli/src/webserver/__tests__/clientErrors.test.js.map +1 -0
- package/codeyam-cli/src/webserver/__tests__/editorProxy.test.js +567 -0
- package/codeyam-cli/src/webserver/__tests__/editorProxy.test.js.map +1 -0
- package/codeyam-cli/src/webserver/app/lib/clientErrors.js +65 -0
- package/codeyam-cli/src/webserver/app/lib/clientErrors.js.map +1 -0
- package/codeyam-cli/src/webserver/app/lib/database.js +41 -27
- package/codeyam-cli/src/webserver/app/lib/database.js.map +1 -1
- package/codeyam-cli/src/webserver/app/lib/dbNotifier.js.map +1 -1
- package/codeyam-cli/src/webserver/app/lib/git.js +397 -0
- package/codeyam-cli/src/webserver/app/lib/git.js.map +1 -0
- package/codeyam-cli/src/webserver/backgroundServer.js +108 -18
- package/codeyam-cli/src/webserver/backgroundServer.js.map +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{CopyButton-CtmbP4Gl.js → CopyButton-BPXZwM4t.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{EntityItem-DlMph_Hm.js → EntityItem-BcgbViKV.js} +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeBadge-B-0PjGOU.js → EntityTypeBadge-g3saevPb.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeIcon-DN9eiJAO.js → EntityTypeIcon-CQIG2qda.js} +9 -9
- package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-Bu6c6aDe.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{InteractivePreview-rE_fI2h2.js → InteractivePreview-DYFW3lDD.js} +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/{LibraryFunctionPreview-CnatsCw2.js → LibraryFunctionPreview-DLeucoVX.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{LoadingDots-CSP6DZrh.js → LoadingDots-BU_OAEMP.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-CMK8Q7yk.js → LogViewer-ceAyBX-H.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{ReportIssueModal-TCV_HBjy.js → ReportIssueModal-BzHcG7SE.js} +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/{SafeScreenshot-CG2uh31y.js → SafeScreenshot-BED4B6sP.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-CU_TDYd8.js → ScenarioViewer-Bd-hxofb.js} +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/Spinner-Bb5uFQ5V.js +34 -0
- package/codeyam-cli/src/webserver/build/client/assets/{TruncatedFilePath-D7IoaWUW.js → TruncatedFilePath-C8OKAR5x.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/ViewportInspectBar-oAf2Kqsf.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{_index-B8z7mjR-.js → _index-DLxKhri3.js} +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/{activity.(_tab)-DZu78RI1.js → activity.(_tab)-BcY3q6nt.js} +6 -6
- package/codeyam-cli/src/webserver/build/client/assets/addon-canvas-DpzMmAy5.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/addon-fit-YJmn1quW.js +12 -0
- package/codeyam-cli/src/webserver/build/client/assets/addon-web-links-Duc5hnl7.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/addon-webgl-DI8QOUvO.js +58 -0
- package/codeyam-cli/src/webserver/build/client/assets/{agent-transcripts-Dm5RS9il.js → agent-transcripts-Bni3iiUj.js} +5 -5
- package/codeyam-cli/src/webserver/build/client/assets/api.dev-mode-events-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-audit-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-capture-scenario-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-client-errors-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-commit-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-dev-server-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-entity-status-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-file-diff-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-file-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-entry-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-image._-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-screenshot-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-journal-update-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-load-commit-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-project-info-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-refresh-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-register-scenario-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-coverage-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-data-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-image._-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenarios-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-switch-scenario-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-test-results-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{book-open-Bp5FLkd4.js → book-open-BYOypzCa.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/{chevron-down-DQJA9f4o.js → chevron-down-C_Pmso5S.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/{chunk-JZWAC4HX-7VptmeIr.js → chunk-JZWAC4HX-C4pqxYJB.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{circle-check-B6C4LY9o.js → circle-check-BVMi9VA5.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/{copy-6nzYCu0G.js → copy-n2FB0_Sw.js} +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-CC6AbExI.js +41 -0
- package/codeyam-cli/src/webserver/build/client/assets/dev.empty-BsDh6TSF.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/editor-PBc_6L9R.js +10 -0
- package/codeyam-cli/src/webserver/build/client/assets/editorPreview-4FzHlcNn.js +41 -0
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-C6PQhwY5.js → entity._sha._-BsDXNp45.js} +9 -9
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.dev-BgAqUtTZ.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-Bmshgrij.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-p9hhkjJM.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.edit._scenarioId-C7ysA4Jq.js → entity._sha_.edit._scenarioId-BMvVHNXU.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/{entry.client-CU6EUArK.js → entry.client-DTvKq3TY.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{fileTableUtils-EWpfFU4X.js → fileTableUtils-cPo8LiG3.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{files-CrxAoWIL.js → files-BZrlFE1F.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/git-DdZcvjGh.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/globals-B8vTTNy2.css +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{index-7-1FmlHo.js → index-10oVnAAH.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{index-DuYcwYp_.js → index-BcvgDzbZ.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/index-yHOVb4rc.js +15 -0
- package/codeyam-cli/src/webserver/build/client/assets/{labs-CPPVOSWB.js → labs-Zk7ryIM1.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-BnDcD54R.js → loader-circle-DaAZ_H2w.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/manifest-65850841.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/memory-9gnxSZlb.js +101 -0
- package/codeyam-cli/src/webserver/build/client/assets/{pause-DhQX2g22.js → pause-f5-1lKBt.js} +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/root-BwX8YgFb.js +67 -0
- package/codeyam-cli/src/webserver/build/client/assets/{search-DborVoKD.js → search-Di64LWVb.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/{settings-BWunYSXt.js → settings-0OrEMU6J.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{simulations-BtrtCYJg.js → simulations-DWT-CvLy.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{terminal-Bs4NC-VZ.js → terminal-Br7MOqts.js} +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/{triangle-alert-DTf3Jojp.js → triangle-alert-BLdiCuG-.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-BE43Hjti.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/useLastLogLine-C14nCb1q.js +2 -0
- package/codeyam-cli/src/webserver/build/client/assets/{useReportContext-BsQb6rFd.js → useReportContext-O-jkvSPx.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{useToast-BOur3mUv.js → useToast-9FIWuYfK.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/xterm-BqvuqXEL.js +27 -0
- package/codeyam-cli/src/webserver/build/server/assets/index-DEEQf4pi.js +1 -0
- package/codeyam-cli/src/webserver/build/server/assets/init-CkWmyFY2.js +10 -0
- package/codeyam-cli/src/webserver/build/server/assets/server-build-BHi-9O8W.js +439 -0
- package/codeyam-cli/src/webserver/build/server/index.js +1 -1
- package/codeyam-cli/src/webserver/build-info.json +5 -5
- package/codeyam-cli/src/webserver/devServer.js +39 -5
- package/codeyam-cli/src/webserver/devServer.js.map +1 -1
- package/codeyam-cli/src/webserver/editorProxy.js +877 -0
- package/codeyam-cli/src/webserver/editorProxy.js.map +1 -0
- package/codeyam-cli/src/webserver/scripts/codeyam-preload.mjs +414 -0
- package/codeyam-cli/src/webserver/scripts/journalCapture.ts +230 -0
- package/codeyam-cli/src/webserver/server.js +258 -1
- package/codeyam-cli/src/webserver/server.js.map +1 -1
- package/codeyam-cli/src/webserver/terminalServer.js +726 -0
- package/codeyam-cli/src/webserver/terminalServer.js.map +1 -0
- package/codeyam-cli/templates/chrome-extension-react/EXTENSION_SETUP.md +75 -0
- package/codeyam-cli/templates/chrome-extension-react/README.md +46 -0
- package/codeyam-cli/templates/chrome-extension-react/gitignore +15 -0
- package/codeyam-cli/templates/chrome-extension-react/index.html +12 -0
- package/codeyam-cli/templates/chrome-extension-react/package.json +27 -0
- package/codeyam-cli/templates/chrome-extension-react/popup.html +12 -0
- package/codeyam-cli/templates/chrome-extension-react/public/manifest.json +15 -0
- package/codeyam-cli/templates/chrome-extension-react/src/background/service-worker.ts +7 -0
- package/codeyam-cli/templates/chrome-extension-react/src/globals.css +6 -0
- package/codeyam-cli/templates/chrome-extension-react/src/lib/storage.ts +37 -0
- package/codeyam-cli/templates/chrome-extension-react/src/popup/App.tsx +12 -0
- package/codeyam-cli/templates/chrome-extension-react/src/popup/main.tsx +10 -0
- package/codeyam-cli/templates/chrome-extension-react/tsconfig.json +24 -0
- package/codeyam-cli/templates/chrome-extension-react/vite.config.ts +41 -0
- package/codeyam-cli/templates/codeyam-editor-claude.md +147 -0
- package/codeyam-cli/templates/editor-step-hook.py +236 -0
- package/codeyam-cli/templates/expo-react-native/MOBILE_SETUP.md +89 -0
- package/codeyam-cli/templates/expo-react-native/README.md +41 -0
- package/codeyam-cli/templates/expo-react-native/app/(tabs)/_layout.tsx +33 -0
- package/codeyam-cli/templates/expo-react-native/app/(tabs)/index.tsx +12 -0
- package/codeyam-cli/templates/expo-react-native/app/(tabs)/settings.tsx +12 -0
- package/codeyam-cli/templates/expo-react-native/app/_layout.tsx +12 -0
- package/codeyam-cli/templates/expo-react-native/app.json +18 -0
- package/codeyam-cli/templates/expo-react-native/babel.config.js +9 -0
- package/codeyam-cli/templates/expo-react-native/gitignore +12 -0
- package/codeyam-cli/templates/expo-react-native/global.css +3 -0
- package/codeyam-cli/templates/expo-react-native/lib/storage.ts +32 -0
- package/codeyam-cli/templates/expo-react-native/metro.config.js +6 -0
- package/codeyam-cli/templates/expo-react-native/nativewind-env.d.ts +1 -0
- package/codeyam-cli/templates/expo-react-native/package.json +38 -0
- package/codeyam-cli/templates/expo-react-native/tailwind.config.js +10 -0
- package/codeyam-cli/templates/expo-react-native/tsconfig.json +10 -0
- package/codeyam-cli/templates/isolation-route/next-app.tsx.template +80 -0
- package/codeyam-cli/templates/isolation-route/next-pages.tsx.template +79 -0
- package/codeyam-cli/templates/isolation-route/vite-react.tsx.template +78 -0
- package/codeyam-cli/templates/msw/browser-setup.ts.template +47 -0
- package/codeyam-cli/templates/msw/handler-router.ts.template +47 -0
- package/codeyam-cli/templates/msw/server-setup.ts.template +52 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/AUTH_PATTERNS.md +308 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/AUTH_UPGRADE.md +304 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/DATABASE.md +126 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/FEATURE_PATTERNS.md +37 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/README.md +53 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/app/api/todos/route.ts +17 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/app/codeyam-isolate/layout.tsx +12 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/app/globals.css +26 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/app/layout.tsx +34 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/app/lib/prisma.ts +24 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/app/page.tsx +10 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/env +4 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/eslint.config.mjs +11 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/gitignore +64 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/next.config.ts +14 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/package.json +39 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/postcss.config.mjs +7 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma/schema.prisma +27 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma/seed.ts +40 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma.config.ts +12 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/seed-adapter.ts +92 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/tsconfig.json +34 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/vitest.config.ts +13 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/README.md +52 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/SUPABASE_SETUP.md +104 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/app/api/todos/route.ts +17 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/app/globals.css +26 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/app/layout.tsx +34 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/app/lib/prisma.ts +20 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/app/lib/supabase.ts +12 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/app/page.tsx +10 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/env +9 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/eslint.config.mjs +11 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/gitignore +40 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/next.config.ts +11 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/package.json +37 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/postcss.config.mjs +7 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/prisma/schema.prisma +27 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/prisma/seed.ts +39 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/prisma.config.ts +12 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/tsconfig.json +34 -0
- package/codeyam-cli/templates/skills/codeyam-dev-mode/SKILL.md +237 -0
- package/codeyam-cli/templates/skills/codeyam-editor/SKILL.md +148 -0
- package/codeyam-cli/templates/{codeyam-memory.md → skills/codeyam-memory/SKILL.md} +215 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/deprecated-prompt.md +100 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/detect-deprecated-patterns.mjs +139 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/find-exports.mjs +52 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/misleading-api-prompt.md +117 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/lib/read-json-field.mjs +61 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/lib/ripgrep-fallback.mjs +155 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/analyze-prompt.md +46 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/cleanup.mjs +13 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/filter-session.mjs +95 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/preprocess.mjs +160 -0
- package/package.json +17 -10
- package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js +22 -4
- package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js.map +1 -1
- package/packages/ai/src/lib/completionCall.js +10 -2
- package/packages/ai/src/lib/completionCall.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +21 -0
- package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/coercePrimitivesToArraysBySchema.js +54 -0
- package/packages/ai/src/lib/dataStructure/helpers/coercePrimitivesToArraysBySchema.js.map +1 -0
- package/packages/ai/src/lib/dataStructure/helpers/stripNullableMarkers.js +34 -0
- package/packages/ai/src/lib/dataStructure/helpers/stripNullableMarkers.js.map +1 -0
- package/packages/ai/src/lib/generateEntityScenarioData.js +57 -2
- package/packages/ai/src/lib/generateEntityScenarioData.js.map +1 -1
- package/packages/ai/src/lib/generateExecutionFlows.js +0 -11
- package/packages/ai/src/lib/generateExecutionFlows.js.map +1 -1
- package/packages/analyze/src/lib/ProjectAnalyzer.js +13 -4
- package/packages/analyze/src/lib/ProjectAnalyzer.js.map +1 -1
- package/packages/analyze/src/lib/asts/index.js +4 -2
- package/packages/analyze/src/lib/asts/index.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/analyzeEntities.js +8 -1
- package/packages/analyze/src/lib/files/analyze/analyzeEntities.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/dependencyResolver.js +0 -5
- package/packages/analyze/src/lib/files/analyze/dependencyResolver.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js +9 -0
- package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/TransformationTracer.js +54 -27
- package/packages/analyze/src/lib/files/scenarios/TransformationTracer.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +65 -0
- package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js +0 -40
- package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +18 -4
- package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js.map +1 -1
- package/packages/database/index.js +1 -0
- package/packages/database/index.js.map +1 -1
- package/packages/database/src/lib/kysely/db.js +5 -0
- package/packages/database/src/lib/kysely/db.js.map +1 -1
- package/packages/database/src/lib/kysely/tables/editorScenariosTable.js +76 -0
- package/packages/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -0
- package/packages/database/src/lib/loadCommits.js +23 -13
- package/packages/database/src/lib/loadCommits.js.map +1 -1
- package/packages/database/src/lib/loadEntities.js +0 -6
- package/packages/database/src/lib/loadEntities.js.map +1 -1
- package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.js +1 -4
- package/packages/database/src/lib/loadReadyToBeCapturedAnalyses.js.map +1 -1
- package/packages/database/src/lib/updateCommitMetadata.js +76 -90
- package/packages/database/src/lib/updateCommitMetadata.js.map +1 -1
- package/packages/database/src/lib/updateFreshAnalysisStatus.js +41 -30
- package/packages/database/src/lib/updateFreshAnalysisStatus.js.map +1 -1
- package/packages/database/src/lib/updateFreshAnalysisStatusWithScenarios.js +68 -57
- package/packages/database/src/lib/updateFreshAnalysisStatusWithScenarios.js.map +1 -1
- package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js +29 -1
- package/packages/generate/src/lib/componentScenarioPage/generateScenarioClientWrapper.js.map +1 -1
- package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js +33 -5
- package/packages/generate/src/lib/componentScenarioPage/getIFrameMessageListenerCode.js.map +1 -1
- package/packages/types/src/enums/ProjectFramework.js +2 -0
- package/packages/types/src/enums/ProjectFramework.js.map +1 -1
- package/scripts/npm-post-install.cjs +34 -0
- package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-C1rIyZdV.js +0 -34
- package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-D-QUFOwe.js +0 -21
- package/codeyam-cli/src/webserver/build/client/assets/dev.empty-DmzSmblj.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-DVTcUnur.js +0 -6
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-BVgNO76F.js +0 -6
- package/codeyam-cli/src/webserver/build/client/assets/git-BldHtKeW.js +0 -15
- package/codeyam-cli/src/webserver/build/client/assets/globals-CLmFdUae.css +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/manifest-717e346a.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/memory-0wMU4KXe.js +0 -93
- package/codeyam-cli/src/webserver/build/client/assets/root-DqfSDjyQ.js +0 -62
- package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-D_bDZyDU.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/useLastLogLine-DZp6rrQD.js +0 -2
- package/codeyam-cli/src/webserver/build/server/assets/index-B8jmgmn2.js +0 -1
- package/codeyam-cli/src/webserver/build/server/assets/server-build-9OU4lmvL.js +0 -285
- package/scripts/finalize-analyzer.cjs +0 -13
- /package/codeyam-cli/templates/{codeyam-diagnose.md → commands/codeyam-diagnose.md} +0 -0
- /package/codeyam-cli/templates/{codeyam-debug.md → skills/codeyam-debug/SKILL.md} +0 -0
- /package/codeyam-cli/templates/{codeyam-new-rule.md → skills/codeyam-new-rule/SKILL.md} +0 -0
- /package/codeyam-cli/templates/{codeyam-setup.md → skills/codeyam-setup/SKILL.md} +0 -0
- /package/codeyam-cli/templates/{codeyam-sim.md → skills/codeyam-sim/SKILL.md} +0 -0
- /package/codeyam-cli/templates/{codeyam-test.md → skills/codeyam-test/SKILL.md} +0 -0
- /package/codeyam-cli/templates/{codeyam-verify.md → skills/codeyam-verify/SKILL.md} +0 -0
|
@@ -208,6 +208,215 @@ Prioritize areas with stronger confusion signals:
|
|
|
208
208
|
|
|
209
209
|
Focus your documentation efforts on areas with the highest confusion scores.
|
|
210
210
|
|
|
211
|
+
Holistic source analysis signals (from the Holistic Source Analysis phase below) also feed into this scoring. Session mining signals (from the Session Log Mining phase below) feed into this same table.
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## Phase 3B: Analysis Sizing & Menu
|
|
216
|
+
|
|
217
|
+
Before running the expensive LLM-powered analysis phases, run the fast extraction scripts to gather sizing metrics and let the user choose which phases to run.
|
|
218
|
+
|
|
219
|
+
### Step 1: Run fast extraction scripts (concurrent)
|
|
220
|
+
|
|
221
|
+
Clear stale data from any previous run, then run all three scripts in parallel:
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
rm -rf /tmp/codeyam-memory/ /tmp/cc-session-analysis/
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
```bash
|
|
228
|
+
node .claude/skills/codeyam-memory/scripts/holistic-analysis/detect-deprecated-patterns.mjs
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
node .claude/skills/codeyam-memory/scripts/holistic-analysis/find-exports.mjs
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
```bash
|
|
236
|
+
node .claude/skills/codeyam-memory/scripts/session-mining/preprocess.mjs 2>/dev/null
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
Capture the stdout of `preprocess.mjs` — each line is a path to a filtered session file.
|
|
240
|
+
|
|
241
|
+
### Step 2: Extract sizing metrics
|
|
242
|
+
|
|
243
|
+
Use quick one-liners to extract counts — do NOT read the full JSON files into the main context:
|
|
244
|
+
|
|
245
|
+
```bash
|
|
246
|
+
node .claude/skills/codeyam-memory/scripts/lib/read-json-field.mjs /tmp/codeyam-memory/deprecated-scan.json '.dependencies | length'
|
|
247
|
+
node .claude/skills/codeyam-memory/scripts/lib/read-json-field.mjs /tmp/codeyam-memory/deprecated-scan.json '.explicit_markers | length'
|
|
248
|
+
node .claude/skills/codeyam-memory/scripts/lib/read-json-field.mjs /tmp/codeyam-memory/exports-scan.json '.stats.total_exports'
|
|
249
|
+
node .claude/skills/codeyam-memory/scripts/lib/read-json-field.mjs /tmp/codeyam-memory/exports-scan.json '.stats.total_files'
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
The session count is the number of lines from `preprocess.mjs` stdout.
|
|
253
|
+
|
|
254
|
+
**Time estimate formulas:**
|
|
255
|
+
|
|
256
|
+
| Phase | Formula | Example |
|
|
257
|
+
| ------------------------ | --------------------------------------- | ----------------------- |
|
|
258
|
+
| Holistic source analysis | `3 + (total_exports / 500)` min, cap 12 | 3,470 exports → ~10 min |
|
|
259
|
+
| Session log mining | `1 + (sessions × 0.25)` min, cap 12 | 25 sessions → ~7 min |
|
|
260
|
+
|
|
261
|
+
### Step 3: Present the menu
|
|
262
|
+
|
|
263
|
+
Use `AskUserQuestion` with `multiSelect: true`. Include actual numbers from Step 2:
|
|
264
|
+
|
|
265
|
+
> **Which additional analysis phases would you like to run?**
|
|
266
|
+
>
|
|
267
|
+
> 📦 **Holistic Source Analysis** — {exports} exports across {files} files, {deps} dependencies, {markers} deprecation markers. Estimated: ~{N} min
|
|
268
|
+
>
|
|
269
|
+
> 💬 **Session Log Mining** — {sessions} qualifying sessions found. Estimated: ~{N} min
|
|
270
|
+
|
|
271
|
+
Options (as `multiSelect: true`):
|
|
272
|
+
|
|
273
|
+
- **Holistic Source Analysis (~N min)** — "Deep-read exports to find misleading APIs and deprecated patterns"
|
|
274
|
+
- **Session Log Mining (~N min)** — "Mine Claude session history for confusion signals"
|
|
275
|
+
- **Skip both** — "Proceed with git archaeology results only"
|
|
276
|
+
|
|
277
|
+
Omit any option where the data count is zero (e.g., if no sessions qualify, don't show the session mining option). If both counts are zero, skip the menu entirely and proceed to Phase 4.
|
|
278
|
+
|
|
279
|
+
### Step 4: Execute selected phases
|
|
280
|
+
|
|
281
|
+
Based on the user's selection:
|
|
282
|
+
|
|
283
|
+
- **Holistic Source Analysis selected:** Jump to the "Holistic Source Analysis" section below, starting at **Step 2** (scripts already ran in Step 1 above).
|
|
284
|
+
- **Session Log Mining selected:** Jump to the "Session Log Mining" section below, starting at **Step 2** (preprocessing already ran in Step 1 above). Use the session file paths captured in Step 1.
|
|
285
|
+
- **Both selected:** Run both, starting each at Step 2.
|
|
286
|
+
- **Skip both:** Proceed directly to Phase 4.
|
|
287
|
+
|
|
288
|
+
### Step 5: Cleanup
|
|
289
|
+
|
|
290
|
+
Regardless of what the user selected, clean up temporary files before proceeding to Phase 4:
|
|
291
|
+
|
|
292
|
+
```bash
|
|
293
|
+
rm -rf /tmp/codeyam-memory/ /tmp/cc-session-analysis/
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
---
|
|
297
|
+
|
|
298
|
+
## Additional Analysis Phase: Holistic Source Analysis
|
|
299
|
+
|
|
300
|
+
Holistic analysis reads the codebase cross-cuttingly to find **latent confusion** — problems
|
|
301
|
+
that haven't caused bugs yet but will mislead a future agent reading code locally.
|
|
302
|
+
|
|
303
|
+
### Prerequisites
|
|
304
|
+
|
|
305
|
+
- Project must contain `.ts`, `.tsx`, `.js`, or `.jsx` source files
|
|
306
|
+
- If no source files are found, skip this phase entirely
|
|
307
|
+
|
|
308
|
+
### Step 1: Run extraction scripts
|
|
309
|
+
|
|
310
|
+
Handled by Phase 3B. Proceed to Step 2.
|
|
311
|
+
|
|
312
|
+
### Step 2: Launch analysis subagents (concurrent)
|
|
313
|
+
|
|
314
|
+
Read the prompt templates and launch both as Task agents concurrently. **Do NOT read the
|
|
315
|
+
scan data into the main context** — it can be hundreds of KB. Each subagent reads its own
|
|
316
|
+
data file via the Read tool.
|
|
317
|
+
|
|
318
|
+
1. **Deprecated Pattern agent** — Read `.claude/skills/codeyam-memory/scripts/holistic-analysis/deprecated-prompt.md` for the
|
|
319
|
+
prompt template. Launch as a foreground Task agent (model: sonnet) with the prompt template
|
|
320
|
+
content. The agent reads `/tmp/codeyam-memory/deprecated-scan.json` itself, uses Grep to
|
|
321
|
+
find remaining callsites, and returns its findings JSON in the response.
|
|
322
|
+
|
|
323
|
+
2. **Misleading API agent** — Read `.claude/skills/codeyam-memory/scripts/holistic-analysis/misleading-api-prompt.md` for the
|
|
324
|
+
prompt template. Launch as a foreground Task agent (model: sonnet) with the prompt template
|
|
325
|
+
content. The agent reads `/tmp/codeyam-memory/exports-scan.json` itself, uses Read to
|
|
326
|
+
inspect suspicious functions, and returns its findings JSON in the response.
|
|
327
|
+
|
|
328
|
+
Both agents return their findings JSON and a brief summary directly in their response.
|
|
329
|
+
|
|
330
|
+
**Context budget note:** The exports index alone can be 400KB+. Never read it into the main
|
|
331
|
+
context. Subagents run as foreground Task agents and have full filesystem access including
|
|
332
|
+
`/tmp/`.
|
|
333
|
+
|
|
334
|
+
### Step 3: Integrate findings
|
|
335
|
+
|
|
336
|
+
Parse the findings JSON from each subagent's response. For each finding:
|
|
337
|
+
|
|
338
|
+
- **Deprecated patterns** get confusion score **4** (comparable to "workaround/hack" signal).
|
|
339
|
+
If an explicit `@deprecated` marker exists, bump to **5**.
|
|
340
|
+
- **Misleading APIs** get confusion score **4** for medium severity, **6** for high severity
|
|
341
|
+
(where "high" means the mismatch could cause data corruption or silent failures).
|
|
342
|
+
|
|
343
|
+
Add findings to the evidence pool alongside git archaeology results. They flow into
|
|
344
|
+
Phase 4 (evidence-based user questions) and Phase 5 (rule generation) normally.
|
|
345
|
+
|
|
346
|
+
### Step 4: Cleanup
|
|
347
|
+
|
|
348
|
+
Handled by Phase 3B Step 5.
|
|
349
|
+
|
|
350
|
+
---
|
|
351
|
+
|
|
352
|
+
## Additional Analysis Phase: Session Log Mining
|
|
353
|
+
|
|
354
|
+
This phase mines Claude Code session transcripts for empirical confusion: user corrections, wrong assumptions, re-edits, tribal knowledge gaps. It complements the git archaeology in Phase 2 with direct evidence from actual Claude sessions.
|
|
355
|
+
|
|
356
|
+
### Step 1: Preprocess Sessions
|
|
357
|
+
|
|
358
|
+
Handled by Phase 3B. Use the session file paths captured there.
|
|
359
|
+
|
|
360
|
+
### Step 2: Launch Haiku Subagents
|
|
361
|
+
|
|
362
|
+
Read the prompt template from `.claude/skills/codeyam-memory/scripts/session-mining/analyze-prompt.md`.
|
|
363
|
+
|
|
364
|
+
For each filtered session file from Step 1:
|
|
365
|
+
|
|
366
|
+
- If the file is **<200KB**: launch one Haiku Task agent
|
|
367
|
+
- If the file is **>200KB**: chunk into ~200KB segments, launch one agent per chunk
|
|
368
|
+
|
|
369
|
+
**Do NOT read session files into the main context** — they can be 20-40KB each and will
|
|
370
|
+
exhaust the context window. Each subagent reads its own file via the Read tool. Each agent
|
|
371
|
+
receives:
|
|
372
|
+
|
|
373
|
+
1. The prompt template content
|
|
374
|
+
2. The `/tmp/` file path to read (the agent reads it itself)
|
|
375
|
+
3. Instruction to return a JSON array
|
|
376
|
+
|
|
377
|
+
Launch agents in batches of **10** using the Task tool with `model: "haiku"`. **Use unique descriptions** for each agent (e.g., "Session mining batch 1 - session 1", "Session mining batch 1 - session 2", etc.; increment the batch number for each batch of 10). Wait for each batch to complete before launching the next. This keeps machine load manageable — a poweruser may have 30+ sessions qualifying.
|
|
378
|
+
|
|
379
|
+
### Step 3: Collect and Validate Findings
|
|
380
|
+
|
|
381
|
+
Parse each agent's response as JSON. Validate:
|
|
382
|
+
|
|
383
|
+
- Must be an array
|
|
384
|
+
- Each element must have `signal` and `summary` fields
|
|
385
|
+
- `signal` must be one of: `USER_CORRECTION`, `RE_EDIT`, `FAILED_PIVOT`, `WRONG_ASSUMPTION`, `TRIBAL_KNOWLEDGE`, `APPROACH_PIVOT`
|
|
386
|
+
|
|
387
|
+
If >50% of agents return invalid output, warn the user before continuing. Otherwise, silently skip invalid results.
|
|
388
|
+
|
|
389
|
+
**Filter out environment-specific findings.** Discard any finding that relates to the developer's local machine setup rather than the project's codebase — e.g., bare repo checkout layouts, local tool versions, IDE configuration, shell aliases, filesystem paths, or permission issues. The rules we generate must be useful to _any_ developer cloning the repo, not just the one whose sessions we mined.
|
|
390
|
+
|
|
391
|
+
### Step 4: Deduplicate Across Sessions
|
|
392
|
+
|
|
393
|
+
Three-pass merge:
|
|
394
|
+
|
|
395
|
+
1. **Cluster by `topic`** — group all findings with the same topic label
|
|
396
|
+
2. **Rank within each cluster** — priority order: `USER_CORRECTION` > `TRIBAL_KNOWLEDGE` > `WRONG_ASSUMPTION` > `FAILED_PIVOT` > `RE_EDIT` > `APPROACH_PIVOT`
|
|
397
|
+
3. **Count session occurrences** — add `session_count` to each merged finding
|
|
398
|
+
|
|
399
|
+
Output: one merged finding per topic, with `session_count`, strongest signal type, and collected file paths.
|
|
400
|
+
|
|
401
|
+
### Step 5: Feed into Phase 3 Scoring
|
|
402
|
+
|
|
403
|
+
Additional scoring weights for session-mining signals:
|
|
404
|
+
|
|
405
|
+
| Signal | Weight |
|
|
406
|
+
| ----------------------------------- | -------- |
|
|
407
|
+
| User correction (session) | 7 |
|
|
408
|
+
| Tribal knowledge provided (session) | 6 |
|
|
409
|
+
| Wrong assumption caught (session) | 5 |
|
|
410
|
+
| Re-edit of same file (session) | 4 |
|
|
411
|
+
| Failed-then-pivoted (session) | 3 |
|
|
412
|
+
| Appearing in 3+ sessions | +3 bonus |
|
|
413
|
+
|
|
414
|
+
These merge into the Phase 3 scoring table above. Session-mined findings then flow into Phase 4 (evidence-based questions) and Phase 5 (rule generation) alongside git archaeology findings.
|
|
415
|
+
|
|
416
|
+
### Step 6: Cleanup
|
|
417
|
+
|
|
418
|
+
Handled by Phase 3B Step 5.
|
|
419
|
+
|
|
211
420
|
---
|
|
212
421
|
|
|
213
422
|
## Phase 4: Ask Evidence-Based Questions
|
|
@@ -282,6 +491,12 @@ Before generating each rule, verify it passes these tests:
|
|
|
282
491
|
- If YES → definitely document it
|
|
283
492
|
- If NO → reconsider its value
|
|
284
493
|
|
|
494
|
+
**For holistic analysis findings**, the validation checks apply with these adjustments:
|
|
495
|
+
|
|
496
|
+
- **Evidence check:** Satisfied by structural evidence from source analysis (e.g., "name implies pure computation but implementation writes to cache on line 47") rather than git commit history.
|
|
497
|
+
- **Code-derivable check:** These findings ARE derived from code — but from a cross-cutting read that a local reader wouldn't perform. The rule is valuable if it captures insight that requires reading multiple files or tracing non-obvious call chains.
|
|
498
|
+
- **Prevention check:** "Would this rule prevent a future agent from being misled?" rather than "would it have prevented a past commit?"
|
|
499
|
+
|
|
285
500
|
### Rule Quality Examples
|
|
286
501
|
|
|
287
502
|
**✅ Good rule** (passes all tests):
|
package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/deprecated-prompt.md
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# Deprecated Pattern Analysis
|
|
2
|
+
|
|
3
|
+
You are analyzing a codebase for **deprecated patterns** — situations where two approaches to the same problem coexist, with one fading in favor of another. These create confusion because a coding agent reading locally may follow the old pattern.
|
|
4
|
+
|
|
5
|
+
## Input
|
|
6
|
+
|
|
7
|
+
Read the scan data from `/tmp/codeyam-memory/deprecated-scan.json`. It contains:
|
|
8
|
+
|
|
9
|
+
- `dependencies`: All npm dependency names from the project
|
|
10
|
+
- `explicit_markers`: Lines containing `@deprecated`, `// legacy`, etc., with file, line number, and text
|
|
11
|
+
- `git_recency`: Per-dependency counts of `recent_imports` (last 3 months) vs `old_imports` (3–12 months ago)
|
|
12
|
+
|
|
13
|
+
## Analysis Steps
|
|
14
|
+
|
|
15
|
+
### 1. Dependency Overlap Analysis
|
|
16
|
+
|
|
17
|
+
Review the full dependency list and identify pairs or groups that serve **overlapping purposes**. Use your domain knowledge of the npm ecosystem — don't rely on name similarity alone.
|
|
18
|
+
|
|
19
|
+
Common overlap categories:
|
|
20
|
+
|
|
21
|
+
- **ORMs / query builders**: knex, kysely, prisma, drizzle, typeorm, sequelize, supabase-js (when used for queries)
|
|
22
|
+
- **Date libraries**: moment, dayjs, date-fns, luxon
|
|
23
|
+
- **HTTP clients**: axios, got, node-fetch, ky, superagent, undici
|
|
24
|
+
- **State management**: redux, zustand, jotai, recoil, mobx, valtio
|
|
25
|
+
- **Schema validation**: zod, yup, joi, ajv, io-ts, superstruct, valibot
|
|
26
|
+
- **CSS-in-JS / styling**: styled-components, emotion, tailwind, vanilla-extract, stitches
|
|
27
|
+
- **Testing**: jest, vitest, mocha, ava
|
|
28
|
+
- **Bundlers**: webpack, vite, esbuild, rollup, parcel, turbopack
|
|
29
|
+
- **Logging**: winston, pino, bunyan, log4js
|
|
30
|
+
|
|
31
|
+
Also look for:
|
|
32
|
+
|
|
33
|
+
- Internal packages that wrap the same underlying library differently
|
|
34
|
+
- Old utility files alongside newer replacements
|
|
35
|
+
|
|
36
|
+
### 2. Cross-Reference with Git Recency
|
|
37
|
+
|
|
38
|
+
For each overlapping pair you identified, check the `git_recency` data:
|
|
39
|
+
|
|
40
|
+
- Is one dependency's import count **growing** (more recent than old) while the other is **fading** (fewer recent than old)?
|
|
41
|
+
- A clear growth-vs-fade pattern confirms a migration in progress.
|
|
42
|
+
- If both are stable or both are growing, it may be intentional coexistence rather than a migration.
|
|
43
|
+
|
|
44
|
+
### 3. Cross-Reference with Explicit Markers
|
|
45
|
+
|
|
46
|
+
Check if any `@deprecated` or `// legacy` markers corroborate your dependency findings:
|
|
47
|
+
|
|
48
|
+
- A marker on code that imports the fading dependency strengthens the signal
|
|
49
|
+
- A marker on a wrapper/utility that abstracts one of the approaches is strong evidence
|
|
50
|
+
|
|
51
|
+
### 4. Find Remaining Callsites
|
|
52
|
+
|
|
53
|
+
For each confirmed deprecated pattern, use Grep to find all files still importing or using the old dependency/pattern. Count the callsites to assess migration completeness.
|
|
54
|
+
|
|
55
|
+
Search patterns:
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
from ['"]<old-dep>
|
|
59
|
+
require(['"]<old-dep>
|
|
60
|
+
import <old-dep>
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### 5. Assess Severity
|
|
64
|
+
|
|
65
|
+
- **high**: Active migration with significant remaining old callsites (>10 files), or explicit deprecation markers present
|
|
66
|
+
- **medium**: Clear trend in git recency but no explicit markers and fewer remaining callsites
|
|
67
|
+
- **low**: Slight trend, possibly intentional coexistence
|
|
68
|
+
|
|
69
|
+
## Output
|
|
70
|
+
|
|
71
|
+
Return your findings as a JSON code block in your response, using this format:
|
|
72
|
+
|
|
73
|
+
```json
|
|
74
|
+
{
|
|
75
|
+
"findings": [
|
|
76
|
+
{
|
|
77
|
+
"type": "deprecated-pattern",
|
|
78
|
+
"old_pattern": "descriptive name of the old approach",
|
|
79
|
+
"new_pattern": "descriptive name of the new approach",
|
|
80
|
+
"evidence": "concise summary of the evidence (git recency numbers, markers found)",
|
|
81
|
+
"files_still_using_old": ["path/to/file1.ts", "path/to/file2.ts"],
|
|
82
|
+
"severity": "high|medium|low",
|
|
83
|
+
"suggested_rule_paths": ["src/relevant/**/*.ts"]
|
|
84
|
+
}
|
|
85
|
+
],
|
|
86
|
+
"stats": {
|
|
87
|
+
"deps_analyzed": 0,
|
|
88
|
+
"overlapping_pairs_found": 0,
|
|
89
|
+
"confirmed_deprecated": 0
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
After the JSON block, return a **brief one-paragraph summary** of your findings. Include the number of confirmed deprecated patterns and the highest-severity finding.
|
|
95
|
+
|
|
96
|
+
## Important Notes
|
|
97
|
+
|
|
98
|
+
- Be conservative: only flag patterns where there is clear evidence of transition, not just the presence of two similar libraries
|
|
99
|
+
- Some projects intentionally use multiple tools in the same category (e.g., jest for unit tests and playwright for e2e) — that's not deprecation
|
|
100
|
+
- Focus on patterns that would **mislead a coding agent** — if both approaches are valid and documented, it may not need a rule
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Gathers deprecation signals from package.json, source markers, and git history.
|
|
3
|
+
// Outputs structured JSON to /tmp/codeyam-memory/deprecated-scan.json
|
|
4
|
+
|
|
5
|
+
import { readdir, readFile, mkdir, writeFile } from 'node:fs/promises';
|
|
6
|
+
import { execFileSync } from 'node:child_process';
|
|
7
|
+
import { join } from 'node:path';
|
|
8
|
+
import { ripgrepSearch } from '../lib/ripgrep-fallback.mjs';
|
|
9
|
+
|
|
10
|
+
const OUTPUT_DIR = '/tmp/codeyam-memory';
|
|
11
|
+
const OUTPUT_FILE = join(OUTPUT_DIR, 'deprecated-scan.json');
|
|
12
|
+
await mkdir(OUTPUT_DIR, { recursive: true });
|
|
13
|
+
|
|
14
|
+
// --- Dependency scan ---
|
|
15
|
+
// Collect all dependency names from package.json files
|
|
16
|
+
const allDeps = new Set();
|
|
17
|
+
const packageFiles = await findFiles('.', 'package.json', ['node_modules', 'dist', '.next']);
|
|
18
|
+
|
|
19
|
+
for (const pkgPath of packageFiles) {
|
|
20
|
+
try {
|
|
21
|
+
const pkg = JSON.parse(await readFile(pkgPath, 'utf-8'));
|
|
22
|
+
for (const key of ['dependencies', 'devDependencies']) {
|
|
23
|
+
if (pkg[key] && typeof pkg[key] === 'object') {
|
|
24
|
+
for (const dep of Object.keys(pkg[key])) allDeps.add(dep);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
} catch {
|
|
28
|
+
// Skip unparseable package.json
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const dependencies = [...allDeps].sort();
|
|
33
|
+
|
|
34
|
+
// --- Explicit marker scan ---
|
|
35
|
+
let explicitMarkers = [];
|
|
36
|
+
|
|
37
|
+
const markerOutput = await ripgrepSearch(
|
|
38
|
+
'@deprecated|// legacy|// deprecated|// old approach|TODO.*deprecat|FIXME.*deprecat',
|
|
39
|
+
{
|
|
40
|
+
types: ['ts', 'js'],
|
|
41
|
+
globs: ['!node_modules', '!dist', '!build', '!.next'],
|
|
42
|
+
context: 2,
|
|
43
|
+
lineNumbers: true,
|
|
44
|
+
},
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
if (markerOutput.trim()) {
|
|
48
|
+
// Parse ripgrep output into structured entries
|
|
49
|
+
for (const line of markerOutput.split('\n')) {
|
|
50
|
+
// Match "file:line:text" (colons in file path unlikely for these repos)
|
|
51
|
+
const match = line.match(/^([^:]+):(\d+):(.*)$/);
|
|
52
|
+
if (match) {
|
|
53
|
+
explicitMarkers.push({
|
|
54
|
+
file: match[1],
|
|
55
|
+
line: parseInt(match[2], 10),
|
|
56
|
+
text: match[3].trim(),
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// --- Git recency comparison ---
|
|
63
|
+
const gitRecency = {};
|
|
64
|
+
|
|
65
|
+
if (dependencies.length > 0) {
|
|
66
|
+
const recentImports = gitImports('3 months ago', undefined);
|
|
67
|
+
const oldImports = gitImports('12 months ago', '3 months ago');
|
|
68
|
+
|
|
69
|
+
for (const dep of dependencies) {
|
|
70
|
+
if (dep.length < 3) continue; // Skip short names that match too broadly
|
|
71
|
+
|
|
72
|
+
const pattern = `from ['"]${dep}`;
|
|
73
|
+
const recent = countMatches(recentImports, pattern);
|
|
74
|
+
const old = countMatches(oldImports, pattern);
|
|
75
|
+
|
|
76
|
+
if (recent > 0 || old > 0) {
|
|
77
|
+
gitRecency[dep] = { recent_imports: recent, old_imports: old };
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// --- Assemble final output ---
|
|
83
|
+
const output = {
|
|
84
|
+
dependencies,
|
|
85
|
+
explicit_markers: explicitMarkers,
|
|
86
|
+
git_recency: gitRecency,
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
await writeFile(OUTPUT_FILE, JSON.stringify(output, null, 2));
|
|
90
|
+
|
|
91
|
+
console.log(`Deprecated pattern scan complete: ${OUTPUT_FILE}`);
|
|
92
|
+
console.log(` Dependencies found: ${dependencies.length}`);
|
|
93
|
+
console.log(` Explicit markers found: ${explicitMarkers.length}`);
|
|
94
|
+
console.log(` Deps with git activity: ${Object.keys(gitRecency).length}`);
|
|
95
|
+
|
|
96
|
+
// --- Helpers ---
|
|
97
|
+
|
|
98
|
+
async function findFiles(dir, filename, ignoreDirs) {
|
|
99
|
+
const results = [];
|
|
100
|
+
const ignoreSet = new Set(ignoreDirs);
|
|
101
|
+
|
|
102
|
+
let entries;
|
|
103
|
+
try {
|
|
104
|
+
entries = await readdir(dir, { recursive: true, withFileTypes: true });
|
|
105
|
+
} catch {
|
|
106
|
+
return results;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
for (const entry of entries) {
|
|
110
|
+
if (!entry.isFile() || entry.name !== filename) continue;
|
|
111
|
+
const parentPath = entry.parentPath ?? entry.path; // parentPath in Node 22+
|
|
112
|
+
const parts = parentPath.split('/');
|
|
113
|
+
if (parts.some((p) => ignoreSet.has(p))) continue;
|
|
114
|
+
results.push(join(parentPath, entry.name));
|
|
115
|
+
}
|
|
116
|
+
return results;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
function gitImports(since, until) {
|
|
120
|
+
const args = ['log', `--since=${since}`, '-p', '--', '*.ts', '*.tsx', '*.js', '*.jsx'];
|
|
121
|
+
if (until) args.splice(2, 0, `--until=${until}`);
|
|
122
|
+
|
|
123
|
+
try {
|
|
124
|
+
const output = execFileSync('git', args, {
|
|
125
|
+
maxBuffer: 100 * 1024 * 1024,
|
|
126
|
+
encoding: 'utf-8',
|
|
127
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
128
|
+
});
|
|
129
|
+
return output;
|
|
130
|
+
} catch {
|
|
131
|
+
return '';
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
function countMatches(text, pattern) {
|
|
136
|
+
const regex = new RegExp(pattern, 'g');
|
|
137
|
+
const matches = text.match(regex);
|
|
138
|
+
return matches ? matches.length : 0;
|
|
139
|
+
}
|
package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/find-exports.mjs
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Indexes the project's public API surface by finding all exports.
|
|
3
|
+
// Outputs structured JSON to /tmp/codeyam-memory/exports-scan.json
|
|
4
|
+
|
|
5
|
+
import { mkdir, writeFile } from 'node:fs/promises';
|
|
6
|
+
import { join } from 'node:path';
|
|
7
|
+
import { ripgrepSearch } from '../lib/ripgrep-fallback.mjs';
|
|
8
|
+
|
|
9
|
+
const OUTPUT_DIR = '/tmp/codeyam-memory';
|
|
10
|
+
const OUTPUT_FILE = join(OUTPUT_DIR, 'exports-scan.json');
|
|
11
|
+
await mkdir(OUTPUT_DIR, { recursive: true });
|
|
12
|
+
|
|
13
|
+
const exportOutput = await ripgrepSearch(
|
|
14
|
+
'^export (function|const|class|default|async function|type|interface|enum)',
|
|
15
|
+
{
|
|
16
|
+
types: ['ts', 'js'],
|
|
17
|
+
globs: ['!node_modules', '!dist', '!build', '!.next', '!*.d.ts', '!*.map'],
|
|
18
|
+
lineNumbers: true,
|
|
19
|
+
},
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
if (!exportOutput.trim()) {
|
|
23
|
+
const empty = { files: {}, stats: { total_files: 0, total_exports: 0 } };
|
|
24
|
+
await writeFile(OUTPUT_FILE, JSON.stringify(empty, null, 2));
|
|
25
|
+
console.log(`Export scan complete: ${OUTPUT_FILE} (no exports found)`);
|
|
26
|
+
process.exit(0);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// Parse ripgrep output and group by file
|
|
30
|
+
const files = {};
|
|
31
|
+
for (const line of exportOutput.split('\n')) {
|
|
32
|
+
const match = line.match(/^([^:]+):(\d+):(.*)$/);
|
|
33
|
+
if (!match) continue;
|
|
34
|
+
|
|
35
|
+
const [, file, lineNum, text] = match;
|
|
36
|
+
if (!files[file]) files[file] = [];
|
|
37
|
+
files[file].push({ line: parseInt(lineNum, 10), text: text.trim() });
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const totalFiles = Object.keys(files).length;
|
|
41
|
+
const totalExports = Object.values(files).reduce((sum, arr) => sum + arr.length, 0);
|
|
42
|
+
|
|
43
|
+
const output = {
|
|
44
|
+
files,
|
|
45
|
+
stats: { total_files: totalFiles, total_exports: totalExports },
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
await writeFile(OUTPUT_FILE, JSON.stringify(output, null, 2));
|
|
49
|
+
|
|
50
|
+
console.log(`Export scan complete: ${OUTPUT_FILE}`);
|
|
51
|
+
console.log(` Files with exports: ${totalFiles}`);
|
|
52
|
+
console.log(` Total exports: ${totalExports}`);
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# Misleading API Analysis
|
|
2
|
+
|
|
3
|
+
You are analyzing a codebase for **misleading APIs** — exported functions whose names promise one thing but whose implementations do another. These are dangerous because a coding agent reading the function signature will make incorrect assumptions about behavior.
|
|
4
|
+
|
|
5
|
+
## Input
|
|
6
|
+
|
|
7
|
+
Read the export index from `/tmp/codeyam-memory/exports-scan.json`. It contains:
|
|
8
|
+
|
|
9
|
+
- `files`: Object keyed by file path, each containing an array of `{line, text}` export declarations
|
|
10
|
+
- `stats`: `total_files` and `total_exports` counts
|
|
11
|
+
|
|
12
|
+
## Analysis Steps
|
|
13
|
+
|
|
14
|
+
### 1. Triage by Name Pattern
|
|
15
|
+
|
|
16
|
+
Scan all export names and prioritize **pure-sounding** functions — names that imply no side effects or predictable behavior:
|
|
17
|
+
|
|
18
|
+
**Highest priority** (names suggesting pure computation):
|
|
19
|
+
|
|
20
|
+
- `get*`, `compute*`, `calculate*`, `derive*`, `extract*`
|
|
21
|
+
- `is*`, `has*`, `check*`, `can*`
|
|
22
|
+
- `parse*`, `format*`, `transform*`, `convert*`
|
|
23
|
+
- `to*`, `from*`, `create*` (when suggesting a factory)
|
|
24
|
+
- `validate*`, `verify*`
|
|
25
|
+
|
|
26
|
+
**Medium priority** (names suggesting single responsibility):
|
|
27
|
+
|
|
28
|
+
- `save*`, `update*`, `delete*`, `remove*` — check for hidden secondary effects
|
|
29
|
+
- `send*`, `notify*`, `emit*` — check for unexpected mutations
|
|
30
|
+
- `init*`, `setup*`, `configure*` — check for non-obvious global state changes
|
|
31
|
+
|
|
32
|
+
### 2. Deep Read Suspicious Exports
|
|
33
|
+
|
|
34
|
+
For each pure-sounding or single-responsibility export, use the Read tool to read the **full function implementation** (not just 30 lines — read until the function ends). Look for these red flags:
|
|
35
|
+
|
|
36
|
+
**Side effects in "pure" functions:**
|
|
37
|
+
|
|
38
|
+
- Writes to external state (database, cache, filesystem, global variables)
|
|
39
|
+
- Network calls (fetch, HTTP requests, WebSocket messages)
|
|
40
|
+
- Logging that includes sensitive data or business logic decisions
|
|
41
|
+
- Event emission or pub/sub publishing
|
|
42
|
+
|
|
43
|
+
**Input mutation:**
|
|
44
|
+
|
|
45
|
+
- Modifying objects/arrays passed as arguments (when the name doesn't suggest mutation)
|
|
46
|
+
- Reassigning properties on `this` in methods that sound like getters
|
|
47
|
+
|
|
48
|
+
**Silent error swallowing:**
|
|
49
|
+
|
|
50
|
+
- `catch` blocks that return default values instead of throwing or propagating
|
|
51
|
+
- `try/catch` around critical operations where the function signature suggests it will throw on failure
|
|
52
|
+
- Optional chaining (`?.`) chains that silently return `undefined` for important data
|
|
53
|
+
|
|
54
|
+
**Unexpected returns:**
|
|
55
|
+
|
|
56
|
+
- Function name suggests returning one type but actually returns something different
|
|
57
|
+
- `get*` functions that return `null` or `undefined` instead of throwing when the entity doesn't exist
|
|
58
|
+
- Boolean-named functions (`is*`, `has*`) that return non-boolean values
|
|
59
|
+
|
|
60
|
+
**Hidden coupling:**
|
|
61
|
+
|
|
62
|
+
- Functions that read from or write to module-level state
|
|
63
|
+
- Functions that depend on call order (must call A before B)
|
|
64
|
+
- Functions that modify shared caches or memoization stores
|
|
65
|
+
|
|
66
|
+
### 3. Scan Non-Pure Exports Too
|
|
67
|
+
|
|
68
|
+
Quickly scan action-oriented exports (`save*`, `update*`, etc.) at a glance for **hidden secondary effects**:
|
|
69
|
+
|
|
70
|
+
- `saveUser()` that also sends a welcome email
|
|
71
|
+
- `deleteProject()` that also archives data elsewhere
|
|
72
|
+
- `updateConfig()` that also restarts a service
|
|
73
|
+
|
|
74
|
+
### 4. Count Callsites
|
|
75
|
+
|
|
76
|
+
For each finding, use Grep to count how many files import or call the misleading function. More callsites = higher impact.
|
|
77
|
+
|
|
78
|
+
### 5. Assess Severity
|
|
79
|
+
|
|
80
|
+
- **high**: The mismatch could cause data corruption, silent failures, security issues, or affects >10 callsites
|
|
81
|
+
- **medium**: The mismatch leads to unexpected behavior that would cause bugs, or affects 3–10 callsites
|
|
82
|
+
- **low**: Minor naming inconsistency, affects few callsites, unlikely to cause bugs
|
|
83
|
+
|
|
84
|
+
## Output
|
|
85
|
+
|
|
86
|
+
Return your findings as a JSON code block in your response, using this format:
|
|
87
|
+
|
|
88
|
+
```json
|
|
89
|
+
{
|
|
90
|
+
"findings": [
|
|
91
|
+
{
|
|
92
|
+
"type": "misleading-api",
|
|
93
|
+
"function": "functionName",
|
|
94
|
+
"file": "path/to/file.ts",
|
|
95
|
+
"name_implies": "what the name suggests the function does",
|
|
96
|
+
"actually_does": "what it actually does (with specific line numbers for the divergent behavior)",
|
|
97
|
+
"severity": "high|medium|low",
|
|
98
|
+
"callsite_count": 0
|
|
99
|
+
}
|
|
100
|
+
],
|
|
101
|
+
"stats": {
|
|
102
|
+
"exports_scanned": 0,
|
|
103
|
+
"deep_reads": 0,
|
|
104
|
+
"findings_count": 0
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
After the JSON block, return a **brief one-paragraph summary** of your findings. Include the number of findings and the most notable misleading API discovered.
|
|
110
|
+
|
|
111
|
+
## Important Notes
|
|
112
|
+
|
|
113
|
+
- **Read full implementations** — don't just look at the first few lines. Side effects often live at the end of functions or in helper calls.
|
|
114
|
+
- Be conservative with "low" severity findings — only flag things that would actually mislead a coding agent into writing incorrect code
|
|
115
|
+
- **Skip type exports** (type, interface, enum) — these can't have behavioral mismatches
|
|
116
|
+
- **Skip trivial getters** that just return a property — focus on functions with actual logic
|
|
117
|
+
- When a function delegates to a helper, read the helper too if the function name implies purity but the helper name suggests side effects
|