@codeyam/codeyam-cli 0.1.8 → 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 +4 -4
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlows.ts +0 -33
- 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/scenarios/generateExecutionFlows.ts +0 -98
- package/analyzer-template/packages/aws/package.json +1 -1
- package/analyzer-template/packages/database/src/lib/kysely/tables/editorScenariosTable.ts +31 -0
- package/analyzer-template/packages/database/src/lib/loadEntities.ts +0 -6
- 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 +5 -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 +31 -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/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/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/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/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/default.js +3 -46
- package/codeyam-cli/src/commands/default.js.map +1 -1
- package/codeyam-cli/src/commands/editor.js +1619 -243
- package/codeyam-cli/src/commands/editor.js.map +1 -1
- package/codeyam-cli/src/commands/init.js +67 -34
- 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 +610 -1
- package/codeyam-cli/src/utils/__tests__/editorAudit.test.js.map +1 -1
- 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 +181 -3
- package/codeyam-cli/src/utils/__tests__/editorDevServer.test.js.map +1 -1
- 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 +249 -2
- package/codeyam-cli/src/utils/__tests__/editorJournal.test.js.map +1 -1
- 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__/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 +195 -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 +221 -0
- package/codeyam-cli/src/utils/__tests__/editorScenarioSwitch.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js +781 -2
- package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js.map +1 -1
- 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__/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__/scenarioCoverage.test.js +227 -0
- package/codeyam-cli/src/utils/__tests__/scenarioCoverage.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 +25 -5
- 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 +94 -18
- 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 +73 -0
- package/codeyam-cli/src/utils/editorApi.js.map +1 -0
- package/codeyam-cli/src/utils/editorAudit.js +101 -7
- package/codeyam-cli/src/utils/editorAudit.js.map +1 -1
- 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 +100 -1
- package/codeyam-cli/src/utils/editorDevServer.js.map +1 -1
- 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 +92 -4
- package/codeyam-cli/src/utils/editorJournal.js.map +1 -1
- 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 +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 +67 -1
- package/codeyam-cli/src/utils/editorPreview.js.map +1 -1
- 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 +276 -0
- package/codeyam-cli/src/utils/editorScenarios.js.map +1 -1
- 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/install-skills.js +1 -1
- package/codeyam-cli/src/utils/install-skills.js.map +1 -1
- package/codeyam-cli/src/utils/parseRegisterArg.js +31 -0
- package/codeyam-cli/src/utils/parseRegisterArg.js.map +1 -0
- package/codeyam-cli/src/utils/scenarioCoverage.js +75 -0
- package/codeyam-cli/src/utils/scenarioCoverage.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 +30 -0
- package/codeyam-cli/src/utils/serverState.js.map +1 -1
- package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +46 -16
- 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/webappDetection.js +21 -0
- 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/git.js +397 -0
- package/codeyam-cli/src/webserver/app/lib/git.js.map +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{CopyButton-DmJveP3T.js → CopyButton-BPXZwM4t.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{EntityItem-C76mRRiF.js → EntityItem-BcgbViKV.js} +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeIcon-CobE682z.js → EntityTypeIcon-CQIG2qda.js} +9 -9
- package/codeyam-cli/src/webserver/build/client/assets/{ReportIssueModal-djPLI-WV.js → ReportIssueModal-BzHcG7SE.js} +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-B76aig_2.js → ScenarioViewer-Bd-hxofb.js} +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/ViewportInspectBar-oAf2Kqsf.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{_index-C96V0n15.js → _index-DLxKhri3.js} +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/{activity.(_tab)-BpKzcsJz.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-webgl-DI8QOUvO.js +58 -0
- package/codeyam-cli/src/webserver/build/client/assets/{agent-transcripts-D9hemwl6.js → agent-transcripts-Bni3iiUj.js} +5 -5
- 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-scenario-coverage-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{book-open-D_nMCFmP.js → book-open-BYOypzCa.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/{chevron-down-BH2h1Ea2.js → chevron-down-C_Pmso5S.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/{circle-check-DyIKORY6.js → circle-check-BVMi9VA5.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/{copy-NDbZjXao.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._-CrjR3zZW.js → entity._sha._-BsDXNp45.js} +3 -3
- 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/{files-DO4CZ16O.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-yHOVb4rc.js +15 -0
- package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-BAXYRVEO.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-DTAcYxBt.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-fKo7v0Zo.js → search-Di64LWVb.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/{settings-DfuTtcJP.js → settings-0OrEMU6J.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{simulations-B3aOzpCZ.js → simulations-DWT-CvLy.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{terminal-BG4heKCG.js → terminal-Br7MOqts.js} +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/{triangle-alert-DtSmdtM4.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/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/editorProxy.js +487 -50
- package/codeyam-cli/src/webserver/editorProxy.js.map +1 -1
- package/codeyam-cli/src/webserver/scripts/codeyam-preload.mjs +242 -3
- package/codeyam-cli/src/webserver/scripts/journalCapture.ts +94 -4
- package/codeyam-cli/src/webserver/server.js +46 -14
- package/codeyam-cli/src/webserver/server.js.map +1 -1
- package/codeyam-cli/src/webserver/terminalServer.js +39 -11
- package/codeyam-cli/src/webserver/terminalServer.js.map +1 -1
- 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 +84 -5
- package/codeyam-cli/templates/editor-step-hook.py +97 -8
- 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 +5 -1
- package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma/seed.ts +4 -1
- package/codeyam-cli/templates/nextjs-prisma-sqlite/seed-adapter.ts +92 -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/skills/codeyam-dev-mode/SKILL.md +2 -2
- package/codeyam-cli/templates/skills/codeyam-editor/SKILL.md +96 -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 +14 -9
- 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 +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/scenarios/generateExecutionFlows.js +0 -40
- package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js.map +1 -1
- package/packages/database/src/lib/kysely/tables/editorScenariosTable.js +31 -0
- package/packages/database/src/lib/kysely/tables/editorScenariosTable.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/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/codeyam-cli/src/webserver/build/client/assets/Terminal-Dnj5CY9R.js +0 -41
- package/codeyam-cli/src/webserver/build/client/assets/addon-fit-CUXOrorO.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-CMT1jU2q.js +0 -21
- 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/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/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/useCustomSizes-ByhSyh0W.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
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
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
|
-
set -euo pipefail
|
|
6
|
-
|
|
7
|
-
OUTPUT_DIR="/tmp/codeyam-memory"
|
|
8
|
-
OUTPUT_FILE="$OUTPUT_DIR/deprecated-scan.json"
|
|
9
|
-
mkdir -p "$OUTPUT_DIR"
|
|
10
|
-
|
|
11
|
-
# --- Dependency scan ---
|
|
12
|
-
# Collect all dependency names from package.json files (root + workspace packages)
|
|
13
|
-
deps_json="[]"
|
|
14
|
-
while IFS= read -r pkg_file; do
|
|
15
|
-
# Extract dependency names from both dependencies and devDependencies
|
|
16
|
-
file_deps=$(jq -r '(.dependencies // {} | keys[]) , (.devDependencies // {} | keys[])' "$pkg_file" 2>/dev/null || true)
|
|
17
|
-
if [ -n "$file_deps" ]; then
|
|
18
|
-
deps_json=$(echo "$deps_json" | jq --arg d "$file_deps" '. + ($d | split("\n") | map(select(. != "")))')
|
|
19
|
-
fi
|
|
20
|
-
done < <(find . -name "package.json" -not -path "*/node_modules/*" -not -path "*/dist/*" -not -path "*/.next/*" 2>/dev/null)
|
|
21
|
-
|
|
22
|
-
# Deduplicate
|
|
23
|
-
deps_json=$(echo "$deps_json" | jq 'unique')
|
|
24
|
-
|
|
25
|
-
# --- Explicit marker scan ---
|
|
26
|
-
markers_json="[]"
|
|
27
|
-
marker_output=$(rg -n "@deprecated|// legacy|// deprecated|// old approach|TODO.*deprecat|FIXME.*deprecat" \
|
|
28
|
-
--type ts --type js \
|
|
29
|
-
--glob '!node_modules' --glob '!dist' --glob '!build' --glob '!.next' \
|
|
30
|
-
-C 2 2>/dev/null || true)
|
|
31
|
-
|
|
32
|
-
if [ -n "$marker_output" ]; then
|
|
33
|
-
# Parse ripgrep output into JSON entries
|
|
34
|
-
markers_json=$(echo "$marker_output" | awk -F: '
|
|
35
|
-
/^[^-].*:[0-9]+:/ {
|
|
36
|
-
file = $1
|
|
37
|
-
line = $2
|
|
38
|
-
# Rejoin the rest as text (handles colons in content)
|
|
39
|
-
text = ""
|
|
40
|
-
for (i = 3; i <= NF; i++) {
|
|
41
|
-
text = (text == "" ? $i : text ":" $i)
|
|
42
|
-
}
|
|
43
|
-
gsub(/^[ \t]+/, "", text)
|
|
44
|
-
gsub(/"/, "\\\"", text)
|
|
45
|
-
gsub(/\t/, " ", text)
|
|
46
|
-
printf "{\"file\":\"%s\",\"line\":%s,\"text\":\"%s\"},\n", file, line, text
|
|
47
|
-
}
|
|
48
|
-
' | sed '$ s/,$//' | awk 'BEGIN{print "["} {print} END{print "]"}')
|
|
49
|
-
|
|
50
|
-
# Validate JSON — fall back to empty array if malformed
|
|
51
|
-
if ! echo "$markers_json" | jq empty 2>/dev/null; then
|
|
52
|
-
markers_json="[]"
|
|
53
|
-
fi
|
|
54
|
-
fi
|
|
55
|
-
|
|
56
|
-
# --- Git recency comparison ---
|
|
57
|
-
# Extract all import lines from git patches in two passes (recent + old), then count per-dep
|
|
58
|
-
recency_json="{}"
|
|
59
|
-
dep_count=$(echo "$deps_json" | jq length)
|
|
60
|
-
|
|
61
|
-
if [ "$dep_count" -gt 0 ]; then
|
|
62
|
-
RECENT_IMPORTS="$OUTPUT_DIR/recent-imports.txt"
|
|
63
|
-
OLD_IMPORTS="$OUTPUT_DIR/old-imports.txt"
|
|
64
|
-
|
|
65
|
-
# Single git log pass per time window — extract only import lines
|
|
66
|
-
git log --since="3 months ago" -p -- '*.ts' '*.tsx' '*.js' '*.jsx' 2>/dev/null \
|
|
67
|
-
| grep -oE "from ['\"][^'\"]+['\"]" > "$RECENT_IMPORTS" 2>/dev/null || true
|
|
68
|
-
git log --since="12 months ago" --until="3 months ago" -p -- '*.ts' '*.tsx' '*.js' '*.jsx' 2>/dev/null \
|
|
69
|
-
| grep -oE "from ['\"][^'\"]+['\"]" > "$OLD_IMPORTS" 2>/dev/null || true
|
|
70
|
-
|
|
71
|
-
for dep in $(echo "$deps_json" | jq -r '.[]'); do
|
|
72
|
-
# Skip short names that would match too broadly
|
|
73
|
-
if [ ${#dep} -lt 3 ]; then
|
|
74
|
-
continue
|
|
75
|
-
fi
|
|
76
|
-
|
|
77
|
-
recent=$(grep -c "from ['\"]${dep}" "$RECENT_IMPORTS" 2>/dev/null || true)
|
|
78
|
-
recent=${recent:-0}
|
|
79
|
-
old=$(grep -c "from ['\"]${dep}" "$OLD_IMPORTS" 2>/dev/null || true)
|
|
80
|
-
old=${old:-0}
|
|
81
|
-
|
|
82
|
-
if [ "$recent" -gt 0 ] || [ "$old" -gt 0 ]; then
|
|
83
|
-
recency_json=$(echo "$recency_json" | jq \
|
|
84
|
-
--arg dep "$dep" \
|
|
85
|
-
--argjson recent "$recent" \
|
|
86
|
-
--argjson old "$old" \
|
|
87
|
-
'. + {($dep): {"recent_imports": $recent, "old_imports": $old}}')
|
|
88
|
-
fi
|
|
89
|
-
done
|
|
90
|
-
|
|
91
|
-
rm -f "$RECENT_IMPORTS" "$OLD_IMPORTS"
|
|
92
|
-
fi
|
|
93
|
-
|
|
94
|
-
# --- Assemble final output ---
|
|
95
|
-
jq -n \
|
|
96
|
-
--argjson dependencies "$deps_json" \
|
|
97
|
-
--argjson explicit_markers "$markers_json" \
|
|
98
|
-
--argjson git_recency "$recency_json" \
|
|
99
|
-
'{
|
|
100
|
-
dependencies: $dependencies,
|
|
101
|
-
explicit_markers: $explicit_markers,
|
|
102
|
-
git_recency: $git_recency
|
|
103
|
-
}' > "$OUTPUT_FILE"
|
|
104
|
-
|
|
105
|
-
echo "Deprecated pattern scan complete: $OUTPUT_FILE"
|
|
106
|
-
echo " Dependencies found: $(echo "$deps_json" | jq length)"
|
|
107
|
-
echo " Explicit markers found: $(echo "$markers_json" | jq length)"
|
|
108
|
-
echo " Deps with git activity: $(echo "$recency_json" | jq 'length')"
|
package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/find-exports.sh
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
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
|
-
set -euo pipefail
|
|
6
|
-
|
|
7
|
-
OUTPUT_DIR="/tmp/codeyam-memory"
|
|
8
|
-
OUTPUT_FILE="$OUTPUT_DIR/exports-scan.json"
|
|
9
|
-
mkdir -p "$OUTPUT_DIR"
|
|
10
|
-
|
|
11
|
-
# Find all export declarations, excluding noise directories and .d.ts files
|
|
12
|
-
export_output=$(rg -n "^export (function|const|class|default|async function|type|interface|enum)" \
|
|
13
|
-
--type ts --type js \
|
|
14
|
-
--glob '!node_modules' --glob '!dist' --glob '!build' --glob '!.next' \
|
|
15
|
-
--glob '!*.d.ts' --glob '!*.map' \
|
|
16
|
-
2>/dev/null || true)
|
|
17
|
-
|
|
18
|
-
if [ -z "$export_output" ]; then
|
|
19
|
-
# No exports found — output empty structure
|
|
20
|
-
jq -n '{files: {}, stats: {total_files: 0, total_exports: 0}}' > "$OUTPUT_FILE"
|
|
21
|
-
echo "Export scan complete: $OUTPUT_FILE (no exports found)"
|
|
22
|
-
exit 0
|
|
23
|
-
fi
|
|
24
|
-
|
|
25
|
-
# Parse ripgrep output into JSON grouped by file
|
|
26
|
-
# Format: file:line:text
|
|
27
|
-
files_json=$(echo "$export_output" | awk -F: '
|
|
28
|
-
{
|
|
29
|
-
file = $1
|
|
30
|
-
line = $2
|
|
31
|
-
# Rejoin rest as text
|
|
32
|
-
text = ""
|
|
33
|
-
for (i = 3; i <= NF; i++) {
|
|
34
|
-
text = (text == "" ? $i : text ":" $i)
|
|
35
|
-
}
|
|
36
|
-
# Trim leading whitespace
|
|
37
|
-
gsub(/^[ \t]+/, "", text)
|
|
38
|
-
# Escape quotes for JSON
|
|
39
|
-
gsub(/"/, "\\\"", text)
|
|
40
|
-
gsub(/\t/, " ", text)
|
|
41
|
-
printf "%s\t%s\t%s\n", file, line, text
|
|
42
|
-
}' | jq -Rsn '
|
|
43
|
-
[inputs | split("\n") | .[] | select(. != "") |
|
|
44
|
-
split("\t") | select(length >= 3) |
|
|
45
|
-
{file: .[0], line: (.[1] | tonumber), text: .[2]}
|
|
46
|
-
] |
|
|
47
|
-
group_by(.file) |
|
|
48
|
-
reduce .[] as $group ({};
|
|
49
|
-
. + {($group[0].file): [$group[] | {line: .line, text: .text}]}
|
|
50
|
-
)
|
|
51
|
-
')
|
|
52
|
-
|
|
53
|
-
# Compute stats
|
|
54
|
-
total_files=$(echo "$files_json" | jq 'length')
|
|
55
|
-
total_exports=$(echo "$files_json" | jq '[.[] | length] | add // 0')
|
|
56
|
-
|
|
57
|
-
# Assemble final output
|
|
58
|
-
jq -n \
|
|
59
|
-
--argjson files "$files_json" \
|
|
60
|
-
--argjson total_files "$total_files" \
|
|
61
|
-
--argjson total_exports "$total_exports" \
|
|
62
|
-
'{
|
|
63
|
-
files: $files,
|
|
64
|
-
stats: {total_files: $total_files, total_exports: $total_exports}
|
|
65
|
-
}' > "$OUTPUT_FILE"
|
|
66
|
-
|
|
67
|
-
echo "Export scan complete: $OUTPUT_FILE"
|
|
68
|
-
echo " Files with exports: $total_files"
|
|
69
|
-
echo " Total exports: $total_exports"
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# Removes cached preprocessed session files.
|
|
3
|
-
set -euo pipefail
|
|
4
|
-
|
|
5
|
-
OUTPUT_DIR="/tmp/cc-session-analysis"
|
|
6
|
-
|
|
7
|
-
if [ -d "$OUTPUT_DIR" ]; then
|
|
8
|
-
rm -rf "$OUTPUT_DIR"
|
|
9
|
-
echo "Cleaned up $OUTPUT_DIR"
|
|
10
|
-
else
|
|
11
|
-
echo "Nothing to clean up ($OUTPUT_DIR does not exist)"
|
|
12
|
-
fi
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
# Session log filter for codeyam-memory skill.
|
|
2
|
-
# Strips progress/system/queue records, compresses tool inputs to 300 chars,
|
|
3
|
-
# tool results to 500 chars, thinking to 1000 chars. Output is compact JSONL.
|
|
4
|
-
|
|
5
|
-
select(.type == "user" or .type == "assistant") |
|
|
6
|
-
if .type == "assistant" then
|
|
7
|
-
{
|
|
8
|
-
type: "assistant",
|
|
9
|
-
ts: .timestamp,
|
|
10
|
-
content: [
|
|
11
|
-
(.message.content[]? |
|
|
12
|
-
if .type == "text" then
|
|
13
|
-
{t: "text", text}
|
|
14
|
-
elif .type == "thinking" then
|
|
15
|
-
{t: "think", thinking: (.thinking // "" | if length > 1000 then (.[0:1000] + "...[truncated]") else . end)}
|
|
16
|
-
elif .type == "tool_use" then
|
|
17
|
-
{t: "tool", name, input: (.input | tostring | if length > 300 then .[0:300] + "..." else . end)}
|
|
18
|
-
else empty
|
|
19
|
-
end
|
|
20
|
-
)
|
|
21
|
-
]
|
|
22
|
-
}
|
|
23
|
-
elif .type == "user" then
|
|
24
|
-
{
|
|
25
|
-
type: "user",
|
|
26
|
-
ts: .timestamp,
|
|
27
|
-
content: (
|
|
28
|
-
if (.message.content | type) == "string" then
|
|
29
|
-
.message.content
|
|
30
|
-
elif (.message.content | type) == "array" then
|
|
31
|
-
[.message.content[]? |
|
|
32
|
-
if .type == "tool_result" then
|
|
33
|
-
{t: "result", id: .tool_use_id, err: (.is_error // false),
|
|
34
|
-
content: (.content | tostring | if length > 500 then .[0:500] + "...[truncated]" else . end)}
|
|
35
|
-
else
|
|
36
|
-
{t: "msg", text: (. | tostring | if length > 500 then .[0:500] + "...[truncated]" else . end)}
|
|
37
|
-
end
|
|
38
|
-
]
|
|
39
|
-
else
|
|
40
|
-
(.message.content | tostring | if length > 500 then .[0:500] + "...[truncated]" else . end)
|
|
41
|
-
end
|
|
42
|
-
)
|
|
43
|
-
}
|
|
44
|
-
else empty
|
|
45
|
-
end
|
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# Preprocesses Claude Code session logs for the codeyam-memory skill.
|
|
3
|
-
#
|
|
4
|
-
# - Finds JSONL session files (>=10KB, last 30 days)
|
|
5
|
-
# - Excludes the current active session
|
|
6
|
-
# - Runs jq filter for 5-50x compression
|
|
7
|
-
# - Caches results in /tmp/cc-session-analysis/
|
|
8
|
-
# - Prints filtered file paths to stdout (one per line)
|
|
9
|
-
set -euo pipefail
|
|
10
|
-
|
|
11
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
12
|
-
FILTER="$SCRIPT_DIR/filter.jq"
|
|
13
|
-
OUTPUT_DIR="/tmp/cc-session-analysis"
|
|
14
|
-
MIN_SIZE=10240 # 10KB
|
|
15
|
-
MAX_AGE_DAYS=30
|
|
16
|
-
MAX_SESSIONS=30 # Diminishing returns past this; keeps agent fleet manageable
|
|
17
|
-
JQ_TIMEOUT=30 # Seconds — skip files that take longer than this to filter
|
|
18
|
-
|
|
19
|
-
# --- Dependency check ---
|
|
20
|
-
if ! command -v jq &>/dev/null; then
|
|
21
|
-
echo "Error: jq is required but not installed." >&2
|
|
22
|
-
echo " macOS: brew install jq" >&2
|
|
23
|
-
echo " Ubuntu: sudo apt-get install jq" >&2
|
|
24
|
-
echo " Other: https://jqlang.github.io/jq/download/" >&2
|
|
25
|
-
exit 1
|
|
26
|
-
fi
|
|
27
|
-
|
|
28
|
-
# --- Compute Claude project directory ---
|
|
29
|
-
PROJECT_DIR="$PWD"
|
|
30
|
-
# Claude Code replaces both / and . with - in the project hash
|
|
31
|
-
PROJECT_HASH=$(echo "$PROJECT_DIR" | sed 's|[/.]|-|g')
|
|
32
|
-
SESSION_DIR="$HOME/.claude/projects/$PROJECT_HASH"
|
|
33
|
-
|
|
34
|
-
if [ ! -d "$SESSION_DIR" ]; then
|
|
35
|
-
echo "No Claude session directory found at $SESSION_DIR" >&2
|
|
36
|
-
echo "This project may not have any Claude Code session history." >&2
|
|
37
|
-
exit 0
|
|
38
|
-
fi
|
|
39
|
-
|
|
40
|
-
# --- Find session files ---
|
|
41
|
-
mkdir -p "$OUTPUT_DIR"
|
|
42
|
-
|
|
43
|
-
# Collect eligible session files: >=10KB, modified within last 30 days, .jsonl extension
|
|
44
|
-
# Sort by mtime (newest first) so the cap keeps the most recent sessions
|
|
45
|
-
ALL_SESSIONS=()
|
|
46
|
-
while IFS= read -r file; do
|
|
47
|
-
ALL_SESSIONS+=("$file")
|
|
48
|
-
done < <(find "$SESSION_DIR" -maxdepth 1 -name "*.jsonl" -size +"$MIN_SIZE"c -mtime -"$MAX_AGE_DAYS" -print0 2>/dev/null \
|
|
49
|
-
| xargs -0 stat -f "%m %N" 2>/dev/null \
|
|
50
|
-
| sort -rn \
|
|
51
|
-
| awk '{print $2}')
|
|
52
|
-
|
|
53
|
-
if [ ${#ALL_SESSIONS[@]} -eq 0 ]; then
|
|
54
|
-
exit 0
|
|
55
|
-
fi
|
|
56
|
-
|
|
57
|
-
# Cap to most recent N sessions
|
|
58
|
-
SESSIONS=("${ALL_SESSIONS[@]:0:$MAX_SESSIONS}")
|
|
59
|
-
if [ ${#ALL_SESSIONS[@]} -gt "$MAX_SESSIONS" ]; then
|
|
60
|
-
echo "Note: ${#ALL_SESSIONS[@]} sessions found, capping to $MAX_SESSIONS most recent" >&2
|
|
61
|
-
fi
|
|
62
|
-
|
|
63
|
-
# --- Exclude current active session ---
|
|
64
|
-
# The newest file by mtime is likely the current session.
|
|
65
|
-
# If CLAUDE_SESSION_ID is set, use that for a more precise match.
|
|
66
|
-
NEWEST_FILE=""
|
|
67
|
-
NEWEST_MTIME=0
|
|
68
|
-
for file in "${SESSIONS[@]}"; do
|
|
69
|
-
mtime=$(stat -f "%m" "$file" 2>/dev/null || stat -c "%Y" "$file" 2>/dev/null || echo "0")
|
|
70
|
-
if [ "$mtime" -gt "$NEWEST_MTIME" ]; then
|
|
71
|
-
NEWEST_MTIME="$mtime"
|
|
72
|
-
NEWEST_FILE="$file"
|
|
73
|
-
fi
|
|
74
|
-
done
|
|
75
|
-
|
|
76
|
-
ACTIVE_SESSION=""
|
|
77
|
-
if [ -n "${CLAUDE_SESSION_ID:-}" ]; then
|
|
78
|
-
for file in "${SESSIONS[@]}"; do
|
|
79
|
-
if [[ "$(basename "$file" .jsonl)" == "$CLAUDE_SESSION_ID" ]]; then
|
|
80
|
-
ACTIVE_SESSION="$file"
|
|
81
|
-
break
|
|
82
|
-
fi
|
|
83
|
-
done
|
|
84
|
-
fi
|
|
85
|
-
# Fall back to newest file if no env var match
|
|
86
|
-
if [ -z "$ACTIVE_SESSION" ]; then
|
|
87
|
-
ACTIVE_SESSION="$NEWEST_FILE"
|
|
88
|
-
fi
|
|
89
|
-
|
|
90
|
-
# --- Process each session ---
|
|
91
|
-
for file in "${SESSIONS[@]}"; do
|
|
92
|
-
# Skip active session
|
|
93
|
-
if [ "$file" = "$ACTIVE_SESSION" ]; then
|
|
94
|
-
continue
|
|
95
|
-
fi
|
|
96
|
-
|
|
97
|
-
uuid=$(basename "$file" .jsonl)
|
|
98
|
-
filtered="$OUTPUT_DIR/${uuid}.filtered.jsonl"
|
|
99
|
-
|
|
100
|
-
# Check cache: skip if filtered file exists and has a valid sentinel
|
|
101
|
-
if [ -f "$filtered" ]; then
|
|
102
|
-
first_line=$(head -1 "$filtered" 2>/dev/null || true)
|
|
103
|
-
if echo "$first_line" | jq -e '.processed_at' &>/dev/null; then
|
|
104
|
-
echo "$filtered"
|
|
105
|
-
continue
|
|
106
|
-
fi
|
|
107
|
-
fi
|
|
108
|
-
|
|
109
|
-
# Run jq filter
|
|
110
|
-
source_size=$(stat -f "%z" "$file" 2>/dev/null || stat -c "%s" "$file" 2>/dev/null || echo "0")
|
|
111
|
-
sentinel=$(printf '{"processed_at":"%s","source_size":%s}' "$(date -u +"%Y-%m-%dT%H:%M:%SZ")" "$source_size")
|
|
112
|
-
|
|
113
|
-
# Write sentinel as first line, then filtered content (with timeout)
|
|
114
|
-
jq_exit=0
|
|
115
|
-
{
|
|
116
|
-
echo "$sentinel"
|
|
117
|
-
if command -v timeout &>/dev/null; then
|
|
118
|
-
timeout "$JQ_TIMEOUT" jq -c -f "$FILTER" "$file" 2>/dev/null
|
|
119
|
-
elif command -v gtimeout &>/dev/null; then
|
|
120
|
-
gtimeout "$JQ_TIMEOUT" jq -c -f "$FILTER" "$file" 2>/dev/null
|
|
121
|
-
else
|
|
122
|
-
jq -c -f "$FILTER" "$file" 2>/dev/null
|
|
123
|
-
fi
|
|
124
|
-
} > "$filtered" || jq_exit=$?
|
|
125
|
-
|
|
126
|
-
if [ "$jq_exit" -eq 124 ]; then
|
|
127
|
-
echo "Warning: jq timed out after ${JQ_TIMEOUT}s on $(basename "$file") — skipping" >&2
|
|
128
|
-
rm -f "$filtered"
|
|
129
|
-
continue
|
|
130
|
-
fi
|
|
131
|
-
|
|
132
|
-
# Only output if the file has content beyond the sentinel
|
|
133
|
-
line_count=$(wc -l < "$filtered" | tr -d ' ')
|
|
134
|
-
if [ "$line_count" -gt 1 ]; then
|
|
135
|
-
echo "$filtered"
|
|
136
|
-
else
|
|
137
|
-
rm -f "$filtered"
|
|
138
|
-
fi
|
|
139
|
-
done
|