@codeyam/codeyam-cli 0.1.0-staging.4057bd2 → 0.1.0-staging.435c1ad
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 +7 -7
- package/analyzer-template/packages/ai/package.json +1 -1
- package/analyzer-template/packages/ai/src/lib/astScopes/methodSemantics.ts +135 -0
- package/analyzer-template/packages/ai/src/lib/astScopes/nodeToSource.ts +19 -0
- package/analyzer-template/packages/ai/src/lib/astScopes/paths.ts +11 -4
- package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +36 -9
- package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/ParentScopeManager.ts +10 -3
- package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.ts +16 -6
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlows.ts +0 -33
- package/analyzer-template/packages/analyze/index.ts +4 -1
- package/analyzer-template/packages/analyze/src/lib/ProjectAnalyzer.ts +13 -7
- package/analyzer-template/packages/analyze/src/lib/asts/index.ts +7 -2
- package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.ts +28 -2
- package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities.ts +5 -36
- package/analyzer-template/packages/analyze/src/lib/files/analyze/findOrCreateEntity.ts +10 -6
- package/analyzer-template/packages/analyze/src/lib/files/analyze/gatherEntityMap.ts +9 -12
- package/analyzer-template/packages/analyze/src/lib/files/analyze/trackEntityCircularDependencies.ts +21 -0
- package/analyzer-template/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.ts +82 -10
- package/analyzer-template/packages/analyze/src/lib/files/analyzeChange.ts +4 -0
- package/analyzer-template/packages/analyze/src/lib/files/analyzeInitial.ts +4 -0
- package/analyzer-template/packages/analyze/src/lib/files/analyzeNextRoute.ts +8 -3
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +239 -58
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.ts +0 -98
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +1684 -1462
- package/analyzer-template/packages/aws/package.json +2 -2
- package/analyzer-template/packages/database/package.json +2 -2
- package/analyzer-template/packages/database/src/lib/kysely/tables/editorScenariosTable.ts +102 -0
- package/analyzer-template/packages/database/src/lib/loadAnalysis.ts +25 -15
- package/analyzer-template/packages/database/src/lib/loadEntities.ts +0 -6
- package/analyzer-template/packages/database/src/lib/loadEntity.ts +19 -8
- package/analyzer-template/packages/database/src/lib/updateCommitMetadata.ts +0 -65
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.d.ts +9 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.js +104 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadAnalysis.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadAnalysis.js +7 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadAnalysis.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.js +0 -6
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntity.d.ts +4 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntity.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntity.js +5 -5
- package/analyzer-template/packages/github/dist/database/src/lib/loadEntity.js.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js +0 -25
- package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.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/types/src/enums/ProjectFramework.ts +2 -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/utils/src/lib/fs/rsyncCopy.d.ts +3 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.js +22 -1
- package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.js.map +1 -1
- package/analyzer-template/packages/utils/src/lib/fs/rsyncCopy.ts +27 -0
- package/analyzer-template/project/analyzeFileEntities.ts +26 -0
- package/analyzer-template/project/runMultiScenarioServer.ts +26 -3
- package/background/src/lib/virtualized/project/analyzeFileEntities.js +22 -0
- package/background/src/lib/virtualized/project/analyzeFileEntities.js.map +1 -1
- package/background/src/lib/virtualized/project/runMultiScenarioServer.js +23 -3
- package/background/src/lib/virtualized/project/runMultiScenarioServer.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 +24 -0
- package/codeyam-cli/src/cli.js.map +1 -1
- package/codeyam-cli/src/commands/__tests__/editor.analyzeImportsArgs.test.js +47 -0
- package/codeyam-cli/src/commands/__tests__/editor.analyzeImportsArgs.test.js.map +1 -0
- package/codeyam-cli/src/commands/__tests__/editor.auditNoAutoAnalysis.test.js +71 -0
- package/codeyam-cli/src/commands/__tests__/editor.auditNoAutoAnalysis.test.js.map +1 -0
- package/codeyam-cli/src/commands/__tests__/editor.designSystem.test.js +30 -0
- package/codeyam-cli/src/commands/__tests__/editor.designSystem.test.js.map +1 -0
- package/codeyam-cli/src/commands/__tests__/editor.isolateArgs.test.js +51 -0
- package/codeyam-cli/src/commands/__tests__/editor.isolateArgs.test.js.map +1 -0
- package/codeyam-cli/src/commands/__tests__/editor.stepDispatch.test.js +56 -0
- package/codeyam-cli/src/commands/__tests__/editor.stepDispatch.test.js.map +1 -0
- package/codeyam-cli/src/commands/__tests__/init.gitignore.test.js +101 -47
- package/codeyam-cli/src/commands/__tests__/init.gitignore.test.js.map +1 -1
- package/codeyam-cli/src/commands/default.js +3 -46
- package/codeyam-cli/src/commands/default.js.map +1 -1
- package/codeyam-cli/src/commands/editor.js +4562 -695
- package/codeyam-cli/src/commands/editor.js.map +1 -1
- package/codeyam-cli/src/commands/editorAnalyzeImportsArgs.js +23 -0
- package/codeyam-cli/src/commands/editorAnalyzeImportsArgs.js.map +1 -0
- package/codeyam-cli/src/commands/editorIsolateArgs.js +25 -0
- package/codeyam-cli/src/commands/editorIsolateArgs.js.map +1 -0
- package/codeyam-cli/src/commands/init.js +69 -34
- package/codeyam-cli/src/commands/init.js.map +1 -1
- package/codeyam-cli/src/commands/telemetry.js +37 -0
- package/codeyam-cli/src/commands/telemetry.js.map +1 -0
- package/codeyam-cli/src/data/designSystems.js +27 -0
- package/codeyam-cli/src/data/designSystems.js.map +1 -0
- package/codeyam-cli/src/data/techStacks.js +77 -0
- package/codeyam-cli/src/data/techStacks.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/analyzerFinalization.test.js +173 -0
- package/codeyam-cli/src/utils/__tests__/analyzerFinalization.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/backgroundServer.test.js +46 -0
- package/codeyam-cli/src/utils/__tests__/backgroundServer.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/devServerState.test.js +134 -0
- package/codeyam-cli/src/utils/__tests__/devServerState.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorApi.test.js +181 -0
- package/codeyam-cli/src/utils/__tests__/editorApi.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorAudit.test.js +3769 -1
- package/codeyam-cli/src/utils/__tests__/editorAudit.test.js.map +1 -1
- package/codeyam-cli/src/utils/__tests__/editorBroadcastViewport.test.js +76 -0
- package/codeyam-cli/src/utils/__tests__/editorBroadcastViewport.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorCapture.test.js +93 -0
- package/codeyam-cli/src/utils/__tests__/editorCapture.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorCaptureScenarioSeeding.test.js +137 -0
- package/codeyam-cli/src/utils/__tests__/editorCaptureScenarioSeeding.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorDeleteScenario.test.js +100 -0
- package/codeyam-cli/src/utils/__tests__/editorDeleteScenario.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorDevServer.test.js +181 -3
- package/codeyam-cli/src/utils/__tests__/editorDevServer.test.js.map +1 -1
- package/codeyam-cli/src/utils/__tests__/editorEntityChangeStatus.test.js +194 -0
- package/codeyam-cli/src/utils/__tests__/editorEntityChangeStatus.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorEntityHelpers.test.js +381 -0
- package/codeyam-cli/src/utils/__tests__/editorEntityHelpers.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorGuardMiddleware.test.js +67 -0
- package/codeyam-cli/src/utils/__tests__/editorGuardMiddleware.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorImageVerifier.test.js +294 -0
- package/codeyam-cli/src/utils/__tests__/editorImageVerifier.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorJournal.test.js +249 -2
- package/codeyam-cli/src/utils/__tests__/editorJournal.test.js.map +1 -1
- package/codeyam-cli/src/utils/__tests__/editorLoaderHelpers.test.js +594 -0
- package/codeyam-cli/src/utils/__tests__/editorLoaderHelpers.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorMigration.test.js +435 -0
- package/codeyam-cli/src/utils/__tests__/editorMigration.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorPreloadHelpers.test.js +118 -1
- package/codeyam-cli/src/utils/__tests__/editorPreloadHelpers.test.js.map +1 -1
- package/codeyam-cli/src/utils/__tests__/editorPreview.test.js +217 -3
- package/codeyam-cli/src/utils/__tests__/editorPreview.test.js.map +1 -1
- 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 +291 -0
- package/codeyam-cli/src/utils/__tests__/editorScenarioSwitch.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js +1694 -2
- package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js.map +1 -1
- package/codeyam-cli/src/utils/__tests__/editorSeedAdapter.test.js +329 -0
- package/codeyam-cli/src/utils/__tests__/editorSeedAdapter.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorSeedAdapterPrismaValidation.test.js +143 -0
- package/codeyam-cli/src/utils/__tests__/editorSeedAdapterPrismaValidation.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorSessionFilter.test.js +66 -0
- package/codeyam-cli/src/utils/__tests__/editorSessionFilter.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorShouldRevalidate.test.js +53 -0
- package/codeyam-cli/src/utils/__tests__/editorShouldRevalidate.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/entityChangeStatus.test.js +2121 -0
- package/codeyam-cli/src/utils/__tests__/entityChangeStatus.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/glossaryAdd.test.js +177 -0
- package/codeyam-cli/src/utils/__tests__/glossaryAdd.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/journalCaptureStabilization.test.js +122 -0
- package/codeyam-cli/src/utils/__tests__/journalCaptureStabilization.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/manualEntityAnalysis.test.js +302 -0
- package/codeyam-cli/src/utils/__tests__/manualEntityAnalysis.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/parseRegisterArg.test.js +129 -0
- package/codeyam-cli/src/utils/__tests__/parseRegisterArg.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/registerScenarioResult.test.js +127 -0
- package/codeyam-cli/src/utils/__tests__/registerScenarioResult.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/routePatternMatching.test.js +118 -0
- package/codeyam-cli/src/utils/__tests__/routePatternMatching.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/scenarioCoverage.test.js +284 -0
- package/codeyam-cli/src/utils/__tests__/scenarioCoverage.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/scenariosManifest.test.js +672 -0
- package/codeyam-cli/src/utils/__tests__/scenariosManifest.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/screenshotHash.test.js +84 -0
- package/codeyam-cli/src/utils/__tests__/screenshotHash.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +26 -5
- package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js.map +1 -1
- package/codeyam-cli/src/utils/__tests__/telemetry.test.js +159 -0
- package/codeyam-cli/src/utils/__tests__/telemetry.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/templateConsistency.test.js +51 -0
- package/codeyam-cli/src/utils/__tests__/templateConsistency.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/testRunner.test.js +217 -0
- package/codeyam-cli/src/utils/__tests__/testRunner.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/analysisRunner.js +39 -8
- package/codeyam-cli/src/utils/analysisRunner.js.map +1 -1
- package/codeyam-cli/src/utils/analyzer.js +19 -0
- package/codeyam-cli/src/utils/analyzer.js.map +1 -1
- package/codeyam-cli/src/utils/analyzerFinalization.js +100 -0
- package/codeyam-cli/src/utils/analyzerFinalization.js.map +1 -0
- package/codeyam-cli/src/utils/backgroundServer.js +95 -19
- package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
- package/codeyam-cli/src/utils/database.js +37 -2
- package/codeyam-cli/src/utils/database.js.map +1 -1
- 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 +95 -0
- package/codeyam-cli/src/utils/editorApi.js.map +1 -0
- package/codeyam-cli/src/utils/editorAudit.js +753 -8
- package/codeyam-cli/src/utils/editorAudit.js.map +1 -1
- package/codeyam-cli/src/utils/editorBroadcastViewport.js +26 -0
- package/codeyam-cli/src/utils/editorBroadcastViewport.js.map +1 -0
- package/codeyam-cli/src/utils/editorCapture.js +102 -0
- package/codeyam-cli/src/utils/editorCapture.js.map +1 -0
- package/codeyam-cli/src/utils/editorDeleteScenario.js +67 -0
- package/codeyam-cli/src/utils/editorDeleteScenario.js.map +1 -0
- package/codeyam-cli/src/utils/editorDevServer.js +100 -1
- package/codeyam-cli/src/utils/editorDevServer.js.map +1 -1
- package/codeyam-cli/src/utils/editorEntityChangeStatus.js +50 -0
- package/codeyam-cli/src/utils/editorEntityChangeStatus.js.map +1 -0
- package/codeyam-cli/src/utils/editorEntityHelpers.js +144 -0
- package/codeyam-cli/src/utils/editorEntityHelpers.js.map +1 -0
- package/codeyam-cli/src/utils/editorGuard.js +36 -0
- package/codeyam-cli/src/utils/editorGuard.js.map +1 -0
- package/codeyam-cli/src/utils/editorImageVerifier.js +155 -0
- package/codeyam-cli/src/utils/editorImageVerifier.js.map +1 -0
- package/codeyam-cli/src/utils/editorJournal.js +92 -4
- package/codeyam-cli/src/utils/editorJournal.js.map +1 -1
- package/codeyam-cli/src/utils/editorLoaderHelpers.js +152 -0
- package/codeyam-cli/src/utils/editorLoaderHelpers.js.map +1 -0
- package/codeyam-cli/src/utils/editorMigration.js +224 -0
- package/codeyam-cli/src/utils/editorMigration.js.map +1 -0
- package/codeyam-cli/src/utils/editorMockState.js +1 -1
- package/codeyam-cli/src/utils/editorPreloadHelpers.js +72 -1
- package/codeyam-cli/src/utils/editorPreloadHelpers.js.map +1 -1
- package/codeyam-cli/src/utils/editorPreview.js +74 -1
- package/codeyam-cli/src/utils/editorPreview.js.map +1 -1
- package/codeyam-cli/src/utils/editorRecapture.js +109 -0
- package/codeyam-cli/src/utils/editorRecapture.js.map +1 -0
- package/codeyam-cli/src/utils/editorScenarioSwitch.js +134 -0
- package/codeyam-cli/src/utils/editorScenarioSwitch.js.map +1 -0
- package/codeyam-cli/src/utils/editorScenarios.js +620 -0
- package/codeyam-cli/src/utils/editorScenarios.js.map +1 -1
- package/codeyam-cli/src/utils/editorSeedAdapter.js +462 -0
- package/codeyam-cli/src/utils/editorSeedAdapter.js.map +1 -0
- package/codeyam-cli/src/utils/editorShouldRevalidate.js +21 -0
- package/codeyam-cli/src/utils/editorShouldRevalidate.js.map +1 -0
- package/codeyam-cli/src/utils/entityChangeStatus.js +394 -0
- package/codeyam-cli/src/utils/entityChangeStatus.js.map +1 -0
- package/codeyam-cli/src/utils/entityChangeStatus.server.js +212 -0
- package/codeyam-cli/src/utils/entityChangeStatus.server.js.map +1 -0
- package/codeyam-cli/src/utils/fileWatcher.js +38 -0
- package/codeyam-cli/src/utils/fileWatcher.js.map +1 -1
- package/codeyam-cli/src/utils/glossaryAdd.js +74 -0
- package/codeyam-cli/src/utils/glossaryAdd.js.map +1 -0
- package/codeyam-cli/src/utils/install-skills.js +15 -1
- package/codeyam-cli/src/utils/install-skills.js.map +1 -1
- package/codeyam-cli/src/utils/manualEntityAnalysis.js +196 -0
- package/codeyam-cli/src/utils/manualEntityAnalysis.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/progress.js +2 -2
- package/codeyam-cli/src/utils/progress.js.map +1 -1
- package/codeyam-cli/src/utils/queue/__tests__/job.interactiveStart.test.js +159 -0
- package/codeyam-cli/src/utils/queue/__tests__/job.interactiveStart.test.js.map +1 -0
- package/codeyam-cli/src/utils/queue/job.js +35 -6
- package/codeyam-cli/src/utils/queue/job.js.map +1 -1
- package/codeyam-cli/src/utils/registerScenarioResult.js +52 -0
- package/codeyam-cli/src/utils/registerScenarioResult.js.map +1 -0
- package/codeyam-cli/src/utils/routePatternMatching.js +129 -0
- package/codeyam-cli/src/utils/routePatternMatching.js.map +1 -0
- package/codeyam-cli/src/utils/scenarioCoverage.js +77 -0
- package/codeyam-cli/src/utils/scenarioCoverage.js.map +1 -0
- package/codeyam-cli/src/utils/scenariosManifest.js +307 -0
- package/codeyam-cli/src/utils/scenariosManifest.js.map +1 -0
- package/codeyam-cli/src/utils/screenshotHash.js +26 -0
- package/codeyam-cli/src/utils/screenshotHash.js.map +1 -0
- package/codeyam-cli/src/utils/serverState.js +30 -0
- package/codeyam-cli/src/utils/serverState.js.map +1 -1
- package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +47 -16
- package/codeyam-cli/src/utils/setupClaudeCodeSettings.js.map +1 -1
- package/codeyam-cli/src/utils/simulationGateMiddleware.js +17 -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/telemetry.js +106 -0
- package/codeyam-cli/src/utils/telemetry.js.map +1 -0
- package/codeyam-cli/src/utils/telemetryMiddleware.js +22 -0
- package/codeyam-cli/src/utils/telemetryMiddleware.js.map +1 -0
- package/codeyam-cli/src/utils/testRunner.js +199 -1
- package/codeyam-cli/src/utils/testRunner.js.map +1 -1
- package/codeyam-cli/src/utils/webappDetection.js +21 -0
- package/codeyam-cli/src/utils/webappDetection.js.map +1 -1
- package/codeyam-cli/src/webserver/__tests__/api.interactive-switch-scenario.test.js +98 -0
- package/codeyam-cli/src/webserver/__tests__/api.interactive-switch-scenario.test.js.map +1 -0
- package/codeyam-cli/src/webserver/__tests__/buildPtyEnv.test.js +35 -0
- package/codeyam-cli/src/webserver/__tests__/buildPtyEnv.test.js.map +1 -0
- package/codeyam-cli/src/webserver/__tests__/clientErrors.test.js +107 -0
- package/codeyam-cli/src/webserver/__tests__/clientErrors.test.js.map +1 -0
- package/codeyam-cli/src/webserver/__tests__/editorProxy.test.js +647 -0
- package/codeyam-cli/src/webserver/__tests__/editorProxy.test.js.map +1 -0
- package/codeyam-cli/src/webserver/__tests__/idleDetector.test.js +283 -0
- package/codeyam-cli/src/webserver/__tests__/idleDetector.test.js.map +1 -0
- package/codeyam-cli/src/webserver/__tests__/stripClaudeCommand.test.js +135 -0
- package/codeyam-cli/src/webserver/__tests__/stripClaudeCommand.test.js.map +1 -0
- package/codeyam-cli/src/webserver/app/lib/clientErrors.js +86 -0
- package/codeyam-cli/src/webserver/app/lib/clientErrors.js.map +1 -0
- package/codeyam-cli/src/webserver/app/lib/git.js +397 -0
- package/codeyam-cli/src/webserver/app/lib/git.js.map +1 -0
- package/codeyam-cli/src/webserver/app/routes/api.interactive-switch-scenario.js +34 -0
- package/codeyam-cli/src/webserver/app/routes/api.interactive-switch-scenario.js.map +1 -0
- package/codeyam-cli/src/webserver/app/types/editor.js +8 -0
- package/codeyam-cli/src/webserver/app/types/editor.js.map +1 -0
- package/codeyam-cli/src/webserver/backgroundServer.js +60 -61
- package/codeyam-cli/src/webserver/backgroundServer.js.map +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/CopyButton-CLe80MMu.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{EntityItem-C76mRRiF.js → EntityItem-Crt_KN_U.js} +5 -5
- package/codeyam-cli/src/webserver/build/client/assets/EntityTypeBadge-CQgyEGV-.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeIcon-CobE682z.js → EntityTypeIcon-CD7lGABo.js} +9 -9
- package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-CgTNOhnu.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/InteractivePreview-DtYTSPL2.js +25 -0
- package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-D3s1MFkb.js +3 -0
- package/codeyam-cli/src/webserver/build/client/assets/{LoadingDots-BU_OAEMP.js → LoadingDots-By5zI316.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-ceAyBX-H.js → LogViewer-CM5zg40N.js} +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/MiniClaudeChat-CQENLSrF.js +36 -0
- package/codeyam-cli/src/webserver/build/client/assets/{ReportIssueModal-djPLI-WV.js → ReportIssueModal-C2PLkej3.js} +4 -4
- package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-DanvyBPb.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-B76aig_2.js → ScenarioViewer-CefgqbCr.js} +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/Spinner-Bc8BG-Lw.js +34 -0
- package/codeyam-cli/src/webserver/build/client/assets/TruncatedFilePath-CK7-NaPZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/ViewportInspectBar-BA_Ry-rs.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{_index-C96V0n15.js → _index-C1YkzTAV.js} +4 -4
- package/codeyam-cli/src/webserver/build/client/assets/{activity.(_tab)-BpKzcsJz.js → activity.(_tab)-yH46LLUz.js} +8 -8
- 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 → addon-web-links-CHx25PAe.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/addon-webgl-DI8QOUvO.js +58 -0
- package/codeyam-cli/src/webserver/build/client/assets/{agent-transcripts-D9hemwl6.js → agent-transcripts-Bg3e7q4S.js} +7 -7
- 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-project-info-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-recapture-stale-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-rename-scenario-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-save-scenario-data-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-save-seed-state-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-coverage-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-prompt-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-schema-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-session-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-verify-routes-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.interactive-switch-scenario-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{book-open-D_nMCFmP.js → book-open-CL-lMgHh.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/{chevron-down-BH2h1Ea2.js → chevron-down-GmAjGS9-.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/chunk-JZWAC4HX-BAdwhyCx.js +43 -0
- package/codeyam-cli/src/webserver/build/client/assets/{circle-check-DyIKORY6.js → circle-check-DFcQkN5j.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/{copy-NDbZjXao.js → copy-C6iF61Xs.js} +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-4ImjHTVC.js +41 -0
- package/codeyam-cli/src/webserver/build/client/assets/cy-logo-cli-Coe5NhbS.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{cy-logo-cli-CCKUIm0S.svg → cy-logo-cli-DoA97ML3.svg} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/dev.empty-CRepiabR.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/editor._tab-Gbk_i5Js.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/editor.entity.(_sha)-oBrbke_R.js +96 -0
- package/codeyam-cli/src/webserver/build/client/assets/editorPreview-CluPkvXJ.js +41 -0
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-CrjR3zZW.js → entity._sha._-DYJRGiDI.js} +14 -13
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.dev-wdiwx5-Z.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-BrkN-40Y.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-DxfhekTZ.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.edit._scenarioId-BMvVHNXU.js → entity._sha_.edit._scenarioId-CRXJWmpB.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/{entry.client-DTvKq3TY.js → entry.client-SuW9syRS.js} +6 -6
- package/codeyam-cli/src/webserver/build/client/assets/fileTableUtils-Daa96Fr1.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/files-D-xGrg29.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/git-Bq_fbXP5.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/globals-oyPmV37k.css +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{index-BcvgDzbZ.js → index-Bp1l4hSv.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{index-10oVnAAH.js → index-CWV9XZiG.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/index-DE3jI_dv.js +15 -0
- package/codeyam-cli/src/webserver/build/client/assets/jsx-runtime-D_zvdyIk.js +9 -0
- package/codeyam-cli/src/webserver/build/client/assets/labs-B_IX45ih.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-BAXYRVEO.js → loader-circle-De-7qQ2u.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/manifest-694b698a.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/memory-Cx2xEx7s.js +101 -0
- package/codeyam-cli/src/webserver/build/client/assets/{pause-DTAcYxBt.js → pause-CFxEKL1u.js} +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/root-DXjFYOxD.js +80 -0
- package/codeyam-cli/src/webserver/build/client/assets/{search-fKo7v0Zo.js → search-BdBb5aqc.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/settings-DdE-Untf.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/simulations-DSCdE99u.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{terminal-BG4heKCG.js → terminal-CrplD4b1.js} +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/{triangle-alert-DtSmdtM4.js → triangle-alert-DqJ0j69l.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-DhXHbEjP.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/useLastLogLine-D9QZKaLJ.js +2 -0
- package/codeyam-cli/src/webserver/build/client/assets/useReportContext-Cy5Qg_UR.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/useToast-5HR2j9ZE.js +1 -0
- package/codeyam-cli/src/webserver/build/client/sound-test.html +98 -0
- package/codeyam-cli/src/webserver/build/server/assets/analysisRunner-zEYtiv0T.js +16 -0
- package/codeyam-cli/src/webserver/build/server/assets/index-CcHPEbhi.js +1 -0
- package/codeyam-cli/src/webserver/build/server/assets/init-D68IyWbU.js +10 -0
- package/codeyam-cli/src/webserver/build/server/assets/progress-CHTtrxFG.js +1 -0
- package/codeyam-cli/src/webserver/build/server/assets/server-build-Cxzo0Zp2.js +688 -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/editorProxy.js +638 -50
- package/codeyam-cli/src/webserver/editorProxy.js.map +1 -1
- package/codeyam-cli/src/webserver/idleDetector.js +121 -0
- package/codeyam-cli/src/webserver/idleDetector.js.map +1 -0
- package/codeyam-cli/src/webserver/mockStateEvents.js +28 -0
- package/codeyam-cli/src/webserver/mockStateEvents.js.map +1 -0
- package/codeyam-cli/src/webserver/public/sound-test.html +98 -0
- package/codeyam-cli/src/webserver/scripts/codeyam-preload.mjs +242 -3
- package/codeyam-cli/src/webserver/scripts/journalCapture.ts +147 -4
- package/codeyam-cli/src/webserver/server.js +169 -16
- package/codeyam-cli/src/webserver/server.js.map +1 -1
- package/codeyam-cli/src/webserver/terminalServer.js +303 -51
- package/codeyam-cli/src/webserver/terminalServer.js.map +1 -1
- package/codeyam-cli/templates/__tests__/editor-step-hook.prompt-capture.test.ts +118 -0
- package/codeyam-cli/templates/chrome-extension-react/EXTENSION_SETUP.md +75 -0
- package/codeyam-cli/templates/chrome-extension-react/README.md +46 -0
- package/codeyam-cli/templates/chrome-extension-react/gitignore +15 -0
- package/codeyam-cli/templates/chrome-extension-react/index.html +12 -0
- package/codeyam-cli/templates/chrome-extension-react/package.json +27 -0
- package/codeyam-cli/templates/chrome-extension-react/popup.html +12 -0
- package/codeyam-cli/templates/chrome-extension-react/public/manifest.json +15 -0
- package/codeyam-cli/templates/chrome-extension-react/src/background/service-worker.ts +7 -0
- package/codeyam-cli/templates/chrome-extension-react/src/globals.css +6 -0
- package/codeyam-cli/templates/chrome-extension-react/src/lib/storage.ts +37 -0
- package/codeyam-cli/templates/chrome-extension-react/src/popup/App.tsx +12 -0
- package/codeyam-cli/templates/chrome-extension-react/src/popup/main.tsx +10 -0
- package/codeyam-cli/templates/chrome-extension-react/tsconfig.json +24 -0
- package/codeyam-cli/templates/chrome-extension-react/vite.config.ts +41 -0
- package/codeyam-cli/templates/codeyam-editor-claude.md +86 -5
- package/codeyam-cli/templates/codeyam-editor-reference.md +216 -0
- package/codeyam-cli/templates/design-systems/clean-dashboard-design-system.md +255 -0
- package/codeyam-cli/templates/design-systems/editorial-design-system.md +267 -0
- package/codeyam-cli/templates/design-systems/mono-brutalist-design-system.md +256 -0
- package/codeyam-cli/templates/design-systems/neo-brutalist-design-system.md +294 -0
- package/codeyam-cli/templates/editor-step-hook.py +262 -41
- 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/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/codeyam-isolate/layout.tsx +12 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/app/lib/prisma.ts +9 -4
- package/codeyam-cli/templates/nextjs-prisma-sqlite/env +4 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/gitignore +21 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/package.json +6 -2
- package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma/seed.ts +4 -1
- package/codeyam-cli/templates/nextjs-prisma-sqlite/seed-adapter.ts +140 -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-sqlite/PRISMA_SETUP.md → nextjs-prisma-supabase/SUPABASE_SETUP.md} +37 -17
- 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/seed-adapters/supabase.ts +291 -0
- package/codeyam-cli/templates/skills/codeyam-dev-mode/SKILL.md +2 -2
- package/codeyam-cli/templates/skills/codeyam-editor/SKILL.md +177 -17
- package/codeyam-cli/templates/skills/codeyam-memory/SKILL.md +10 -10
- 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/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/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 +15 -9
- package/packages/ai/src/lib/astScopes/methodSemantics.js +99 -0
- package/packages/ai/src/lib/astScopes/methodSemantics.js.map +1 -1
- package/packages/ai/src/lib/astScopes/nodeToSource.js +16 -0
- package/packages/ai/src/lib/astScopes/nodeToSource.js.map +1 -1
- package/packages/ai/src/lib/astScopes/paths.js +12 -3
- package/packages/ai/src/lib/astScopes/paths.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +27 -10
- package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/ParentScopeManager.js +9 -2
- package/packages/ai/src/lib/dataStructure/equivalencyManagers/ParentScopeManager.js.map +1 -1
- package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js +14 -4
- package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.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/index.js +1 -1
- package/packages/analyze/index.js.map +1 -1
- package/packages/analyze/src/lib/ProjectAnalyzer.js +10 -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/prepareDataStructures.js +16 -2
- package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/analyzeEntities.js +6 -26
- package/packages/analyze/src/lib/files/analyze/analyzeEntities.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js +3 -2
- package/packages/analyze/src/lib/files/analyze/findOrCreateEntity.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/gatherEntityMap.js +9 -7
- package/packages/analyze/src/lib/files/analyze/gatherEntityMap.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/trackEntityCircularDependencies.js +14 -0
- package/packages/analyze/src/lib/files/analyze/trackEntityCircularDependencies.js.map +1 -1
- package/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.js +44 -11
- package/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.js.map +1 -1
- package/packages/analyze/src/lib/files/analyzeChange.js +1 -0
- package/packages/analyze/src/lib/files/analyzeChange.js.map +1 -1
- package/packages/analyze/src/lib/files/analyzeInitial.js +1 -0
- package/packages/analyze/src/lib/files/analyzeInitial.js.map +1 -1
- package/packages/analyze/src/lib/files/analyzeNextRoute.js +5 -1
- package/packages/analyze/src/lib/files/analyzeNextRoute.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +120 -28
- 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 +1368 -1193
- package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js.map +1 -1
- package/packages/database/src/lib/kysely/tables/editorScenariosTable.js +104 -0
- package/packages/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -1
- package/packages/database/src/lib/loadAnalysis.js +7 -1
- package/packages/database/src/lib/loadAnalysis.js.map +1 -1
- package/packages/database/src/lib/loadEntities.js +0 -6
- package/packages/database/src/lib/loadEntities.js.map +1 -1
- package/packages/database/src/lib/loadEntity.js +5 -5
- package/packages/database/src/lib/loadEntity.js.map +1 -1
- package/packages/database/src/lib/updateCommitMetadata.js +0 -25
- package/packages/database/src/lib/updateCommitMetadata.js.map +1 -1
- package/packages/types/src/enums/ProjectFramework.js +2 -0
- package/packages/types/src/enums/ProjectFramework.js.map +1 -1
- package/packages/utils/src/lib/fs/rsyncCopy.js +22 -1
- package/packages/utils/src/lib/fs/rsyncCopy.js.map +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/CopyButton-DmJveP3T.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/EntityTypeBadge-g3saevPb.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/InlineSpinner-Bu6c6aDe.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/InteractivePreview-DYFW3lDD.js +0 -25
- package/codeyam-cli/src/webserver/build/client/assets/LibraryFunctionPreview-DLeucoVX.js +0 -3
- package/codeyam-cli/src/webserver/build/client/assets/SafeScreenshot-BED4B6sP.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/Spinner-Bb5uFQ5V.js +0 -34
- package/codeyam-cli/src/webserver/build/client/assets/Terminal-Dnj5CY9R.js +0 -41
- package/codeyam-cli/src/webserver/build/client/assets/TruncatedFilePath-C8OKAR5x.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/addon-fit-CUXOrorO.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/chunk-JZWAC4HX-C4pqxYJB.js +0 -51
- package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-CMT1jU2q.js +0 -21
- package/codeyam-cli/src/webserver/build/client/assets/cy-logo-cli-DcX-ZS3p.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/dev.empty-BiM6z3Do.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/editor-D1DAKXtT.js +0 -8
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.dev-DkzqFzFj.js +0 -6
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-C28BiQzt.js +0 -6
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha_.create-scenario-p9hhkjJM.js +0 -6
- package/codeyam-cli/src/webserver/build/client/assets/fileTableUtils-cPo8LiG3.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/files-DO4CZ16O.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/git-CFCTYk9I.js +0 -15
- package/codeyam-cli/src/webserver/build/client/assets/globals-B17TBSS6.css +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/labs-Zk7ryIM1.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/manifest-a632de18.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/memory-Dg0mvYrI.js +0 -96
- package/codeyam-cli/src/webserver/build/client/assets/root-DUKqhFlb.js +0 -67
- package/codeyam-cli/src/webserver/build/client/assets/settings-DfuTtcJP.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/simulations-B3aOzpCZ.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-ByhSyh0W.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/useLastLogLine-C14nCb1q.js +0 -2
- package/codeyam-cli/src/webserver/build/client/assets/useReportContext-O-jkvSPx.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/useToast-9FIWuYfK.js +0 -1
- package/codeyam-cli/src/webserver/build/server/assets/index-HfLydfDq.js +0 -1
- package/codeyam-cli/src/webserver/build/server/assets/server-build-CUu_F-oo.js +0 -366
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/detect-deprecated-patterns.sh +0 -108
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/find-exports.sh +0 -69
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/cleanup.sh +0 -12
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/filter.jq +0 -45
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/preprocess.sh +0 -139
|
@@ -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,61 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Lightweight jq replacement for simple field lookups.
|
|
3
|
+
// Usage: node read-json-field.mjs <file> '<expression>'
|
|
4
|
+
// Supports: .field.subfield, .field | length
|
|
5
|
+
|
|
6
|
+
import { readFile } from 'node:fs/promises';
|
|
7
|
+
|
|
8
|
+
const [, , filePath, expression] = process.argv;
|
|
9
|
+
|
|
10
|
+
if (!filePath || !expression) {
|
|
11
|
+
console.error('Usage: node read-json-field.mjs <file> <expression>');
|
|
12
|
+
process.exit(1);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
try {
|
|
16
|
+
const raw = await readFile(filePath, 'utf-8');
|
|
17
|
+
const data = JSON.parse(raw);
|
|
18
|
+
const result = evaluate(data, expression);
|
|
19
|
+
console.log(typeof result === 'string' ? result : JSON.stringify(result));
|
|
20
|
+
} catch (err) {
|
|
21
|
+
console.error(err.message);
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function evaluate(data, expr) {
|
|
26
|
+
const trimmed = expr.trim();
|
|
27
|
+
|
|
28
|
+
// Handle pipe: ".field | length"
|
|
29
|
+
const pipeIdx = trimmed.indexOf('|');
|
|
30
|
+
if (pipeIdx !== -1) {
|
|
31
|
+
const left = trimmed.slice(0, pipeIdx).trim();
|
|
32
|
+
const right = trimmed.slice(pipeIdx + 1).trim();
|
|
33
|
+
const intermediate = resolvePath(data, left);
|
|
34
|
+
|
|
35
|
+
if (right === 'length') {
|
|
36
|
+
if (Array.isArray(intermediate)) return intermediate.length;
|
|
37
|
+
if (typeof intermediate === 'object' && intermediate !== null) return Object.keys(intermediate).length;
|
|
38
|
+
if (typeof intermediate === 'string') return intermediate.length;
|
|
39
|
+
throw new Error(`Cannot get length of ${typeof intermediate}`);
|
|
40
|
+
}
|
|
41
|
+
throw new Error(`Unsupported pipe function: ${right}`);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return resolvePath(data, trimmed);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function resolvePath(data, pathExpr) {
|
|
48
|
+
// Strip leading dot: ".foo.bar" -> "foo.bar"
|
|
49
|
+
const cleaned = pathExpr.startsWith('.') ? pathExpr.slice(1) : pathExpr;
|
|
50
|
+
if (cleaned === '') return data;
|
|
51
|
+
|
|
52
|
+
const keys = cleaned.split('.');
|
|
53
|
+
let current = data;
|
|
54
|
+
for (const key of keys) {
|
|
55
|
+
if (current == null || typeof current !== 'object') {
|
|
56
|
+
throw new Error(`Cannot access '${key}' on ${JSON.stringify(current)}`);
|
|
57
|
+
}
|
|
58
|
+
current = current[key];
|
|
59
|
+
}
|
|
60
|
+
return current;
|
|
61
|
+
}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Shared ripgrep wrapper with pure-Node fallback when rg is not installed.
|
|
3
|
+
|
|
4
|
+
import { execFile } from 'node:child_process';
|
|
5
|
+
import { readdir, readFile } from 'node:fs/promises';
|
|
6
|
+
import { join } from 'node:path';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @param {string} pattern - Regex pattern to search for
|
|
10
|
+
* @param {object} [opts]
|
|
11
|
+
* @param {string[]} [opts.types] - File type filters, e.g. ['ts', 'js']
|
|
12
|
+
* @param {string[]} [opts.globs] - Glob filters, e.g. ['!node_modules']
|
|
13
|
+
* @param {number} [opts.context] - Lines of context around matches (-C)
|
|
14
|
+
* @param {boolean} [opts.lineNumbers] - Include line numbers (-n)
|
|
15
|
+
* @param {string} [opts.cwd] - Working directory (defaults to process.cwd())
|
|
16
|
+
* @returns {Promise<string>} ripgrep-compatible output: "file:line:text\n" lines
|
|
17
|
+
*/
|
|
18
|
+
export async function ripgrepSearch(pattern, opts = {}) {
|
|
19
|
+
const { types = [], globs = [], context, lineNumbers = true, cwd = process.cwd() } = opts;
|
|
20
|
+
|
|
21
|
+
try {
|
|
22
|
+
return await runRipgrep(pattern, { types, globs, context, lineNumbers, cwd });
|
|
23
|
+
} catch (err) {
|
|
24
|
+
if (err.code === 'ENOENT') {
|
|
25
|
+
// rg not installed — use Node fallback
|
|
26
|
+
return nodeFallback(pattern, { types, globs, context, lineNumbers, cwd });
|
|
27
|
+
}
|
|
28
|
+
throw err;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function runRipgrep(pattern, { types, globs, context, lineNumbers, cwd }) {
|
|
33
|
+
return new Promise((resolve, reject) => {
|
|
34
|
+
const args = [];
|
|
35
|
+
if (lineNumbers) args.push('-n');
|
|
36
|
+
if (context != null) args.push('-C', String(context));
|
|
37
|
+
for (const t of types) args.push('--type', t);
|
|
38
|
+
for (const g of globs) args.push('--glob', g);
|
|
39
|
+
args.push(pattern, '.'); // Explicit path prevents rg from reading stdin
|
|
40
|
+
|
|
41
|
+
execFile('rg', args, { cwd, maxBuffer: 50 * 1024 * 1024 }, (err, stdout) => {
|
|
42
|
+
if (err) {
|
|
43
|
+
// Exit code 1 = no matches, 2 = error (e.g. no files searched)
|
|
44
|
+
if (err.code === 1 || err.code === 2) return resolve('');
|
|
45
|
+
// ENOENT = rg binary not found
|
|
46
|
+
if (err.code === 'ENOENT') {
|
|
47
|
+
const e = new Error('rg not found');
|
|
48
|
+
e.code = 'ENOENT';
|
|
49
|
+
return reject(e);
|
|
50
|
+
}
|
|
51
|
+
return reject(err);
|
|
52
|
+
}
|
|
53
|
+
resolve(stdout);
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const TYPE_EXTENSIONS = {
|
|
59
|
+
ts: ['.ts', '.tsx', '.mts', '.cts'],
|
|
60
|
+
js: ['.js', '.jsx', '.mjs', '.cjs'],
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
const DEFAULT_IGNORE = ['node_modules', 'dist', 'build', '.next', '.git'];
|
|
64
|
+
|
|
65
|
+
async function nodeFallback(pattern, { types = [], globs = [], context, lineNumbers = true, cwd = process.cwd() } = {}) {
|
|
66
|
+
// Build file extension filter from types
|
|
67
|
+
const extensions = new Set();
|
|
68
|
+
for (const t of types) {
|
|
69
|
+
const exts = TYPE_EXTENSIONS[t];
|
|
70
|
+
if (exts) exts.forEach((e) => extensions.add(e));
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Parse globs for negative patterns (simple heuristic: "!dirname")
|
|
74
|
+
const ignoreDirs = new Set(DEFAULT_IGNORE);
|
|
75
|
+
for (const g of globs) {
|
|
76
|
+
if (g.startsWith('!')) ignoreDirs.add(g.slice(1));
|
|
77
|
+
}
|
|
78
|
+
// Also handle glob patterns like "!*.d.ts" and "!*.map"
|
|
79
|
+
const ignoreExtensions = new Set();
|
|
80
|
+
for (const g of globs) {
|
|
81
|
+
const m = g.match(/^!\*(\.\w+(?:\.\w+)*)$/);
|
|
82
|
+
if (m) ignoreExtensions.add(m[1]);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const regex = new RegExp(pattern);
|
|
86
|
+
const contextLines = context ?? 0;
|
|
87
|
+
const results = [];
|
|
88
|
+
|
|
89
|
+
let entries;
|
|
90
|
+
try {
|
|
91
|
+
entries = await readdir(cwd, { recursive: true });
|
|
92
|
+
} catch {
|
|
93
|
+
return '';
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
for (const relPath of entries) {
|
|
97
|
+
// Skip ignored directories
|
|
98
|
+
const parts = relPath.split('/');
|
|
99
|
+
if (parts.some((p) => ignoreDirs.has(p))) continue;
|
|
100
|
+
|
|
101
|
+
// Check extension filters
|
|
102
|
+
if (extensions.size > 0) {
|
|
103
|
+
const hasMatchingExt = [...extensions].some((ext) => relPath.endsWith(ext));
|
|
104
|
+
if (!hasMatchingExt) continue;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// Check ignore extensions
|
|
108
|
+
if ([...ignoreExtensions].some((ext) => relPath.endsWith(ext))) continue;
|
|
109
|
+
|
|
110
|
+
const fullPath = join(cwd, relPath);
|
|
111
|
+
let content;
|
|
112
|
+
try {
|
|
113
|
+
content = await readFile(fullPath, 'utf-8');
|
|
114
|
+
} catch {
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
const lines = content.split('\n');
|
|
119
|
+
const matchIndices = [];
|
|
120
|
+
for (let i = 0; i < lines.length; i++) {
|
|
121
|
+
if (regex.test(lines[i])) matchIndices.push(i);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
if (matchIndices.length === 0) continue;
|
|
125
|
+
|
|
126
|
+
if (contextLines === 0) {
|
|
127
|
+
for (const idx of matchIndices) {
|
|
128
|
+
const lineNum = idx + 1;
|
|
129
|
+
const prefix = lineNumbers ? `${relPath}:${lineNum}:` : `${relPath}:`;
|
|
130
|
+
results.push(`${prefix}${lines[idx]}`);
|
|
131
|
+
}
|
|
132
|
+
} else {
|
|
133
|
+
// With context: output blocks separated by "--"
|
|
134
|
+
const emitted = new Set();
|
|
135
|
+
for (const idx of matchIndices) {
|
|
136
|
+
const start = Math.max(0, idx - contextLines);
|
|
137
|
+
const end = Math.min(lines.length - 1, idx + contextLines);
|
|
138
|
+
for (let i = start; i <= end; i++) {
|
|
139
|
+
if (!emitted.has(i)) {
|
|
140
|
+
emitted.add(i);
|
|
141
|
+
const lineNum = i + 1;
|
|
142
|
+
const sep = i === idx ? ':' : '-';
|
|
143
|
+
const prefix = lineNumbers ? `${relPath}${sep}${lineNum}${sep}` : `${relPath}${sep}`;
|
|
144
|
+
results.push(`${prefix}${lines[i]}`);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
return results.join('\n') + (results.length > 0 ? '\n' : '');
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// Exported for testing — not part of the public API.
|
|
155
|
+
export { nodeFallback as _nodeFallback };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Removes cached preprocessed session files.
|
|
3
|
+
|
|
4
|
+
import { rm } from 'node:fs/promises';
|
|
5
|
+
|
|
6
|
+
const OUTPUT_DIR = '/tmp/cc-session-analysis';
|
|
7
|
+
|
|
8
|
+
try {
|
|
9
|
+
await rm(OUTPUT_DIR, { recursive: true, force: true });
|
|
10
|
+
console.log(`Cleaned up ${OUTPUT_DIR}`);
|
|
11
|
+
} catch {
|
|
12
|
+
console.log(`Nothing to clean up (${OUTPUT_DIR} does not exist)`);
|
|
13
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Session log filter — replaces filter.jq.
|
|
3
|
+
// Strips progress/system/queue records, compresses tool inputs to 300 chars,
|
|
4
|
+
// tool results to 500 chars, thinking to 1000 chars. Output is compact JSONL.
|
|
5
|
+
|
|
6
|
+
import { createReadStream } from 'node:fs';
|
|
7
|
+
import { createInterface } from 'node:readline';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Filter a single parsed session log object.
|
|
11
|
+
* Returns the filtered object, or null if it should be skipped.
|
|
12
|
+
*/
|
|
13
|
+
export function filterSessionLine(obj) {
|
|
14
|
+
if (obj.type === 'assistant') {
|
|
15
|
+
const contentItems = obj.message?.content;
|
|
16
|
+
if (!Array.isArray(contentItems)) return null;
|
|
17
|
+
|
|
18
|
+
const filtered = [];
|
|
19
|
+
for (const item of contentItems) {
|
|
20
|
+
if (item.type === 'text') {
|
|
21
|
+
filtered.push({ t: 'text', text: item.text });
|
|
22
|
+
} else if (item.type === 'thinking') {
|
|
23
|
+
const thinking = item.thinking ?? '';
|
|
24
|
+
filtered.push({
|
|
25
|
+
t: 'think',
|
|
26
|
+
thinking: thinking.length > 1000 ? thinking.slice(0, 1000) + '...[truncated]' : thinking,
|
|
27
|
+
});
|
|
28
|
+
} else if (item.type === 'tool_use') {
|
|
29
|
+
const inputStr = typeof item.input === 'string' ? item.input : JSON.stringify(item.input);
|
|
30
|
+
filtered.push({
|
|
31
|
+
t: 'tool',
|
|
32
|
+
name: item.name,
|
|
33
|
+
input: inputStr.length > 300 ? inputStr.slice(0, 300) + '...' : inputStr,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return { type: 'assistant', ts: obj.timestamp, content: filtered };
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if (obj.type === 'user') {
|
|
42
|
+
const msgContent = obj.message?.content;
|
|
43
|
+
|
|
44
|
+
if (typeof msgContent === 'string') {
|
|
45
|
+
return { type: 'user', ts: obj.timestamp, content: msgContent };
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if (Array.isArray(msgContent)) {
|
|
49
|
+
const items = [];
|
|
50
|
+
for (const item of msgContent) {
|
|
51
|
+
if (item.type === 'tool_result') {
|
|
52
|
+
const contentStr = typeof item.content === 'string' ? item.content : JSON.stringify(item.content);
|
|
53
|
+
items.push({
|
|
54
|
+
t: 'result',
|
|
55
|
+
id: item.tool_use_id,
|
|
56
|
+
err: item.is_error ?? false,
|
|
57
|
+
content: contentStr.length > 500 ? contentStr.slice(0, 500) + '...[truncated]' : contentStr,
|
|
58
|
+
});
|
|
59
|
+
} else {
|
|
60
|
+
const text = typeof item === 'string' ? item : JSON.stringify(item);
|
|
61
|
+
items.push({
|
|
62
|
+
t: 'msg',
|
|
63
|
+
text: text.length > 500 ? text.slice(0, 500) + '...[truncated]' : text,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return { type: 'user', ts: obj.timestamp, content: items };
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Fallback: stringify whatever content is
|
|
71
|
+
const fallback = typeof msgContent === 'string' ? msgContent : JSON.stringify(msgContent);
|
|
72
|
+
return {
|
|
73
|
+
type: 'user',
|
|
74
|
+
ts: obj.timestamp,
|
|
75
|
+
content: fallback.length > 500 ? fallback.slice(0, 500) + '...[truncated]' : fallback,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Standalone mode: node filter-session.mjs input.jsonl → filtered JSONL to stdout
|
|
83
|
+
const inputFile = process.argv[2];
|
|
84
|
+
if (inputFile) {
|
|
85
|
+
const rl = createInterface({ input: createReadStream(inputFile) });
|
|
86
|
+
for await (const line of rl) {
|
|
87
|
+
try {
|
|
88
|
+
const obj = JSON.parse(line);
|
|
89
|
+
const result = filterSessionLine(obj);
|
|
90
|
+
if (result) console.log(JSON.stringify(result));
|
|
91
|
+
} catch {
|
|
92
|
+
// Skip malformed lines (matching jq's silent-skip behavior)
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Preprocesses Claude Code session logs for the codeyam-memory skill.
|
|
3
|
+
// Replaces preprocess.sh — no jq or platform-specific stat required.
|
|
4
|
+
//
|
|
5
|
+
// - Finds JSONL session files (>=10KB, last 30 days)
|
|
6
|
+
// - Excludes the current active session
|
|
7
|
+
// - Runs JS filter for 5-50x compression
|
|
8
|
+
// - Caches results in /tmp/cc-session-analysis/
|
|
9
|
+
// - Prints filtered file paths to stdout (one per line)
|
|
10
|
+
|
|
11
|
+
import { readdir, stat, mkdir, readFile, rm } from 'node:fs/promises';
|
|
12
|
+
import { createReadStream, createWriteStream } from 'node:fs';
|
|
13
|
+
import { createInterface } from 'node:readline';
|
|
14
|
+
import { join, basename } from 'node:path';
|
|
15
|
+
import { homedir } from 'node:os';
|
|
16
|
+
import { filterSessionLine } from './filter-session.mjs';
|
|
17
|
+
|
|
18
|
+
const OUTPUT_DIR = '/tmp/cc-session-analysis';
|
|
19
|
+
const MIN_SIZE = 10240; // 10KB
|
|
20
|
+
const MAX_AGE_DAYS = 30;
|
|
21
|
+
const MAX_SESSIONS = 30;
|
|
22
|
+
const FILTER_TIMEOUT = 30_000; // 30s per file
|
|
23
|
+
|
|
24
|
+
// Compute Claude project directory (mirrors Claude Code's path hashing)
|
|
25
|
+
const projectDir = process.cwd();
|
|
26
|
+
const projectHash = projectDir.replace(/[/.]/g, '-');
|
|
27
|
+
const sessionDir = join(homedir(), '.claude', 'projects', projectHash);
|
|
28
|
+
|
|
29
|
+
// Check session directory exists
|
|
30
|
+
try {
|
|
31
|
+
await stat(sessionDir);
|
|
32
|
+
} catch {
|
|
33
|
+
process.stderr.write(`No Claude session directory found at ${sessionDir}\n`);
|
|
34
|
+
process.stderr.write('This project may not have any Claude Code session history.\n');
|
|
35
|
+
process.exit(0);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Find eligible session files
|
|
39
|
+
await mkdir(OUTPUT_DIR, { recursive: true });
|
|
40
|
+
|
|
41
|
+
const entries = await readdir(sessionDir);
|
|
42
|
+
const now = Date.now();
|
|
43
|
+
const maxAgeMs = MAX_AGE_DAYS * 24 * 60 * 60 * 1000;
|
|
44
|
+
|
|
45
|
+
const sessionFiles = [];
|
|
46
|
+
for (const name of entries) {
|
|
47
|
+
if (!name.endsWith('.jsonl')) continue;
|
|
48
|
+
const fullPath = join(sessionDir, name);
|
|
49
|
+
try {
|
|
50
|
+
const st = await stat(fullPath);
|
|
51
|
+
if (!st.isFile()) continue;
|
|
52
|
+
if (st.size < MIN_SIZE) continue;
|
|
53
|
+
if (now - st.mtimeMs > maxAgeMs) continue;
|
|
54
|
+
sessionFiles.push({ path: fullPath, mtimeMs: st.mtimeMs });
|
|
55
|
+
} catch {
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (sessionFiles.length === 0) process.exit(0);
|
|
61
|
+
|
|
62
|
+
// Sort newest first, cap to MAX_SESSIONS
|
|
63
|
+
sessionFiles.sort((a, b) => b.mtimeMs - a.mtimeMs);
|
|
64
|
+
if (sessionFiles.length > MAX_SESSIONS) {
|
|
65
|
+
process.stderr.write(`Note: ${sessionFiles.length} sessions found, capping to ${MAX_SESSIONS} most recent\n`);
|
|
66
|
+
}
|
|
67
|
+
const sessions = sessionFiles.slice(0, MAX_SESSIONS);
|
|
68
|
+
|
|
69
|
+
// Determine active session to exclude
|
|
70
|
+
let activeSession = '';
|
|
71
|
+
const claudeSessionId = process.env.CLAUDE_SESSION_ID;
|
|
72
|
+
if (claudeSessionId) {
|
|
73
|
+
const match = sessions.find((s) => basename(s.path, '.jsonl') === claudeSessionId);
|
|
74
|
+
if (match) activeSession = match.path;
|
|
75
|
+
}
|
|
76
|
+
if (!activeSession && sessions.length > 0) {
|
|
77
|
+
activeSession = sessions[0].path; // newest = likely active
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Process each session
|
|
81
|
+
for (const session of sessions) {
|
|
82
|
+
if (session.path === activeSession) continue;
|
|
83
|
+
|
|
84
|
+
const uuid = basename(session.path, '.jsonl');
|
|
85
|
+
const filtered = join(OUTPUT_DIR, `${uuid}.filtered.jsonl`);
|
|
86
|
+
|
|
87
|
+
// Check cache: skip if filtered file has a valid sentinel
|
|
88
|
+
try {
|
|
89
|
+
const firstLine = (await readFile(filtered, 'utf-8')).split('\n')[0];
|
|
90
|
+
const sentinel = JSON.parse(firstLine);
|
|
91
|
+
if (sentinel.processed_at) {
|
|
92
|
+
console.log(filtered);
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
} catch {
|
|
96
|
+
// No cache or invalid — reprocess
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Filter with timeout
|
|
100
|
+
try {
|
|
101
|
+
await filterFile(session.path, filtered);
|
|
102
|
+
console.log(filtered);
|
|
103
|
+
} catch (err) {
|
|
104
|
+
if (err.name === 'AbortError') {
|
|
105
|
+
process.stderr.write(`Warning: filter timed out after ${FILTER_TIMEOUT / 1000}s on ${basename(session.path)} — skipping\n`);
|
|
106
|
+
await rm(filtered, { force: true });
|
|
107
|
+
} else {
|
|
108
|
+
process.stderr.write(`Warning: error processing ${basename(session.path)}: ${err.message}\n`);
|
|
109
|
+
await rm(filtered, { force: true });
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
async function filterFile(inputPath, outputPath) {
|
|
115
|
+
const ac = new AbortController();
|
|
116
|
+
const timer = setTimeout(() => ac.abort(), FILTER_TIMEOUT);
|
|
117
|
+
|
|
118
|
+
try {
|
|
119
|
+
const st = await stat(inputPath);
|
|
120
|
+
const sentinel = JSON.stringify({
|
|
121
|
+
processed_at: new Date().toISOString(),
|
|
122
|
+
source_size: st.size,
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
const output = createWriteStream(outputPath);
|
|
126
|
+
output.write(sentinel + '\n');
|
|
127
|
+
|
|
128
|
+
const rl = createInterface({
|
|
129
|
+
input: createReadStream(inputPath),
|
|
130
|
+
signal: ac.signal,
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
let lineCount = 0;
|
|
134
|
+
for await (const line of rl) {
|
|
135
|
+
try {
|
|
136
|
+
const obj = JSON.parse(line);
|
|
137
|
+
const result = filterSessionLine(obj);
|
|
138
|
+
if (result) {
|
|
139
|
+
output.write(JSON.stringify(result) + '\n');
|
|
140
|
+
lineCount++;
|
|
141
|
+
}
|
|
142
|
+
} catch {
|
|
143
|
+
// Skip malformed lines
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
output.end();
|
|
148
|
+
await new Promise((resolve, reject) => {
|
|
149
|
+
output.on('finish', resolve);
|
|
150
|
+
output.on('error', reject);
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
// Remove files with no content beyond the sentinel
|
|
154
|
+
if (lineCount === 0) {
|
|
155
|
+
await rm(outputPath, { force: true });
|
|
156
|
+
}
|
|
157
|
+
} finally {
|
|
158
|
+
clearTimeout(timer);
|
|
159
|
+
}
|
|
160
|
+
}
|