claude-code-workflow 6.2.2 → 6.2.3
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/ccw/dist/cli.d.ts +2 -0
- package/ccw/dist/cli.d.ts.map +1 -0
- package/ccw/dist/cli.js +219 -0
- package/ccw/dist/cli.js.map +1 -0
- package/ccw/dist/commands/cli.d.ts +32 -0
- package/ccw/dist/commands/cli.d.ts.map +1 -0
- package/ccw/dist/commands/cli.js +619 -0
- package/ccw/dist/commands/cli.js.map +1 -0
- package/ccw/dist/commands/core-memory.d.ts +32 -0
- package/ccw/dist/commands/core-memory.d.ts.map +1 -0
- package/ccw/dist/commands/core-memory.js +640 -0
- package/ccw/dist/commands/core-memory.js.map +1 -0
- package/ccw/dist/commands/hook.d.ts +16 -0
- package/ccw/dist/commands/hook.d.ts.map +1 -0
- package/ccw/dist/commands/hook.js +276 -0
- package/ccw/dist/commands/hook.js.map +1 -0
- package/ccw/dist/commands/install.d.ts +12 -0
- package/ccw/dist/commands/install.d.ts.map +1 -0
- package/ccw/dist/commands/install.js +443 -0
- package/ccw/dist/commands/install.js.map +1 -0
- package/ccw/dist/commands/list.d.ts +5 -0
- package/ccw/dist/commands/list.d.ts.map +1 -0
- package/ccw/dist/commands/list.js +32 -0
- package/ccw/dist/commands/list.js.map +1 -0
- package/ccw/dist/commands/memory.d.ts +57 -0
- package/ccw/dist/commands/memory.d.ts.map +1 -0
- package/ccw/dist/commands/memory.js +890 -0
- package/ccw/dist/commands/memory.js.map +1 -0
- package/ccw/dist/commands/serve.d.ts +12 -0
- package/ccw/dist/commands/serve.d.ts.map +1 -0
- package/ccw/dist/commands/serve.js +63 -0
- package/ccw/dist/commands/serve.js.map +1 -0
- package/ccw/dist/commands/session-path-resolver.d.ts +45 -0
- package/ccw/dist/commands/session-path-resolver.d.ts.map +1 -0
- package/ccw/dist/commands/session-path-resolver.js +302 -0
- package/ccw/dist/commands/session-path-resolver.js.map +1 -0
- package/ccw/dist/commands/session.d.ts +12 -0
- package/ccw/dist/commands/session.d.ts.map +1 -0
- package/ccw/dist/commands/session.js +954 -0
- package/ccw/dist/commands/session.js.map +1 -0
- package/ccw/dist/commands/stop.d.ts +11 -0
- package/ccw/dist/commands/stop.d.ts.map +1 -0
- package/ccw/dist/commands/stop.js +96 -0
- package/ccw/dist/commands/stop.js.map +1 -0
- package/ccw/dist/commands/tool.d.ts +29 -0
- package/ccw/dist/commands/tool.d.ts.map +1 -0
- package/ccw/dist/commands/tool.js +173 -0
- package/ccw/dist/commands/tool.js.map +1 -0
- package/ccw/dist/commands/uninstall.d.ts +9 -0
- package/ccw/dist/commands/uninstall.d.ts.map +1 -0
- package/ccw/dist/commands/uninstall.js +239 -0
- package/ccw/dist/commands/uninstall.js.map +1 -0
- package/ccw/dist/commands/upgrade.d.ts +10 -0
- package/ccw/dist/commands/upgrade.d.ts.map +1 -0
- package/ccw/dist/commands/upgrade.js +288 -0
- package/ccw/dist/commands/upgrade.js.map +1 -0
- package/ccw/dist/commands/view.d.ts +14 -0
- package/ccw/dist/commands/view.d.ts.map +1 -0
- package/ccw/dist/commands/view.js +100 -0
- package/ccw/dist/commands/view.js.map +1 -0
- package/ccw/dist/config/storage-paths.d.ts +184 -0
- package/ccw/dist/config/storage-paths.d.ts.map +1 -0
- package/ccw/dist/config/storage-paths.js +536 -0
- package/ccw/dist/config/storage-paths.js.map +1 -0
- package/ccw/dist/core/cache-manager.d.ts +80 -0
- package/ccw/dist/core/cache-manager.d.ts.map +1 -0
- package/ccw/dist/core/cache-manager.js +260 -0
- package/ccw/dist/core/cache-manager.js.map +1 -0
- package/ccw/dist/core/claude-freshness.d.ts +53 -0
- package/ccw/dist/core/claude-freshness.d.ts.map +1 -0
- package/ccw/dist/core/claude-freshness.js +232 -0
- package/ccw/dist/core/claude-freshness.js.map +1 -0
- package/ccw/dist/core/core-memory-store.d.ts +320 -0
- package/ccw/dist/core/core-memory-store.d.ts.map +1 -0
- package/ccw/dist/core/core-memory-store.js +1177 -0
- package/ccw/dist/core/core-memory-store.js.map +1 -0
- package/ccw/dist/core/dashboard-generator-patch.d.ts +2 -0
- package/ccw/dist/core/dashboard-generator-patch.d.ts.map +1 -0
- package/ccw/dist/core/dashboard-generator-patch.js +48 -0
- package/ccw/dist/core/dashboard-generator-patch.js.map +1 -0
- package/ccw/dist/core/dashboard-generator.d.ts +8 -0
- package/ccw/dist/core/dashboard-generator.d.ts.map +1 -0
- package/ccw/dist/core/dashboard-generator.js +695 -0
- package/ccw/dist/core/dashboard-generator.js.map +1 -0
- package/ccw/dist/core/data-aggregator.d.ts +145 -0
- package/ccw/dist/core/data-aggregator.d.ts.map +1 -0
- package/ccw/dist/core/data-aggregator.js +416 -0
- package/ccw/dist/core/data-aggregator.js.map +1 -0
- package/ccw/dist/core/history-importer.d.ts +102 -0
- package/ccw/dist/core/history-importer.d.ts.map +1 -0
- package/ccw/dist/core/history-importer.js +493 -0
- package/ccw/dist/core/history-importer.js.map +1 -0
- package/ccw/dist/core/lite-scanner-complete.d.ts +81 -0
- package/ccw/dist/core/lite-scanner-complete.d.ts.map +1 -0
- package/ccw/dist/core/lite-scanner-complete.js +368 -0
- package/ccw/dist/core/lite-scanner-complete.js.map +1 -0
- package/ccw/dist/core/lite-scanner.d.ts +81 -0
- package/ccw/dist/core/lite-scanner.d.ts.map +1 -0
- package/ccw/dist/core/lite-scanner.js +368 -0
- package/ccw/dist/core/lite-scanner.js.map +1 -0
- package/ccw/dist/core/manifest.d.ts +88 -0
- package/ccw/dist/core/manifest.d.ts.map +1 -0
- package/ccw/dist/core/manifest.js +214 -0
- package/ccw/dist/core/manifest.js.map +1 -0
- package/ccw/dist/core/memory-embedder-bridge.d.ts +83 -0
- package/ccw/dist/core/memory-embedder-bridge.d.ts.map +1 -0
- package/ccw/dist/core/memory-embedder-bridge.js +181 -0
- package/ccw/dist/core/memory-embedder-bridge.js.map +1 -0
- package/ccw/dist/core/memory-store.d.ts +249 -0
- package/ccw/dist/core/memory-store.d.ts.map +1 -0
- package/ccw/dist/core/memory-store.js +781 -0
- package/ccw/dist/core/memory-store.js.map +1 -0
- package/ccw/dist/core/routes/ccw-routes.d.ts +20 -0
- package/ccw/dist/core/routes/ccw-routes.d.ts.map +1 -0
- package/ccw/dist/core/routes/ccw-routes.js +70 -0
- package/ccw/dist/core/routes/ccw-routes.js.map +1 -0
- package/ccw/dist/core/routes/claude-routes.d.ts +19 -0
- package/ccw/dist/core/routes/claude-routes.d.ts.map +1 -0
- package/ccw/dist/core/routes/claude-routes.js +1017 -0
- package/ccw/dist/core/routes/claude-routes.js.map +1 -0
- package/ccw/dist/core/routes/cli-routes.d.ts +20 -0
- package/ccw/dist/core/routes/cli-routes.d.ts.map +1 -0
- package/ccw/dist/core/routes/cli-routes.js +468 -0
- package/ccw/dist/core/routes/cli-routes.js.map +1 -0
- package/ccw/dist/core/routes/codexlens-routes.d.ts +20 -0
- package/ccw/dist/core/routes/codexlens-routes.d.ts.map +1 -0
- package/ccw/dist/core/routes/codexlens-routes.js +754 -0
- package/ccw/dist/core/routes/codexlens-routes.js.map +1 -0
- package/ccw/dist/core/routes/core-memory-routes.d.ts +21 -0
- package/ccw/dist/core/routes/core-memory-routes.d.ts.map +1 -0
- package/ccw/dist/core/routes/core-memory-routes.js +520 -0
- package/ccw/dist/core/routes/core-memory-routes.js.map +1 -0
- package/ccw/dist/core/routes/files-routes.d.ts +20 -0
- package/ccw/dist/core/routes/files-routes.d.ts.map +1 -0
- package/ccw/dist/core/routes/files-routes.js +374 -0
- package/ccw/dist/core/routes/files-routes.js.map +1 -0
- package/ccw/dist/core/routes/graph-routes.d.ts +20 -0
- package/ccw/dist/core/routes/graph-routes.d.ts.map +1 -0
- package/ccw/dist/core/routes/graph-routes.js +517 -0
- package/ccw/dist/core/routes/graph-routes.js.map +1 -0
- package/ccw/dist/core/routes/help-routes.d.ts +20 -0
- package/ccw/dist/core/routes/help-routes.d.ts.map +1 -0
- package/ccw/dist/core/routes/help-routes.js +250 -0
- package/ccw/dist/core/routes/help-routes.js.map +1 -0
- package/ccw/dist/core/routes/hooks-routes.d.ts +21 -0
- package/ccw/dist/core/routes/hooks-routes.d.ts.map +1 -0
- package/ccw/dist/core/routes/hooks-routes.js +346 -0
- package/ccw/dist/core/routes/hooks-routes.js.map +1 -0
- package/ccw/dist/core/routes/mcp-routes.d.ts +20 -0
- package/ccw/dist/core/routes/mcp-routes.d.ts.map +1 -0
- package/ccw/dist/core/routes/mcp-routes.js +1129 -0
- package/ccw/dist/core/routes/mcp-routes.js.map +1 -0
- package/ccw/dist/core/routes/mcp-templates-db.d.ts +54 -0
- package/ccw/dist/core/routes/mcp-templates-db.d.ts.map +1 -0
- package/ccw/dist/core/routes/mcp-templates-db.js +226 -0
- package/ccw/dist/core/routes/mcp-templates-db.js.map +1 -0
- package/ccw/dist/core/routes/memory-routes.d.ts +21 -0
- package/ccw/dist/core/routes/memory-routes.d.ts.map +1 -0
- package/ccw/dist/core/routes/memory-routes.js +1095 -0
- package/ccw/dist/core/routes/memory-routes.js.map +1 -0
- package/ccw/dist/core/routes/rules-routes.d.ts +20 -0
- package/ccw/dist/core/routes/rules-routes.d.ts.map +1 -0
- package/ccw/dist/core/routes/rules-routes.js +442 -0
- package/ccw/dist/core/routes/rules-routes.js.map +1 -0
- package/ccw/dist/core/routes/session-routes.d.ts +20 -0
- package/ccw/dist/core/routes/session-routes.d.ts.map +1 -0
- package/ccw/dist/core/routes/session-routes.js +423 -0
- package/ccw/dist/core/routes/session-routes.js.map +1 -0
- package/ccw/dist/core/routes/skills-routes.d.ts +20 -0
- package/ccw/dist/core/routes/skills-routes.d.ts.map +1 -0
- package/ccw/dist/core/routes/skills-routes.js +533 -0
- package/ccw/dist/core/routes/skills-routes.js.map +1 -0
- package/ccw/dist/core/routes/status-routes.d.ts +20 -0
- package/ccw/dist/core/routes/status-routes.d.ts.map +1 -0
- package/ccw/dist/core/routes/status-routes.js +38 -0
- package/ccw/dist/core/routes/status-routes.js.map +1 -0
- package/ccw/dist/core/routes/system-routes.d.ts +22 -0
- package/ccw/dist/core/routes/system-routes.d.ts.map +1 -0
- package/ccw/dist/core/routes/system-routes.js +354 -0
- package/ccw/dist/core/routes/system-routes.js.map +1 -0
- package/ccw/dist/core/server.d.ts +17 -0
- package/ccw/dist/core/server.d.ts.map +1 -0
- package/ccw/dist/core/server.js +386 -0
- package/ccw/dist/core/server.js.map +1 -0
- package/ccw/dist/core/session-clustering-service.d.ts +153 -0
- package/ccw/dist/core/session-clustering-service.d.ts.map +1 -0
- package/ccw/dist/core/session-clustering-service.js +1065 -0
- package/ccw/dist/core/session-clustering-service.js.map +1 -0
- package/ccw/dist/core/session-scanner.d.ts +32 -0
- package/ccw/dist/core/session-scanner.d.ts.map +1 -0
- package/ccw/dist/core/session-scanner.js +253 -0
- package/ccw/dist/core/session-scanner.js.map +1 -0
- package/ccw/dist/core/websocket.d.ts +23 -0
- package/ccw/dist/core/websocket.d.ts.map +1 -0
- package/ccw/dist/core/websocket.js +168 -0
- package/ccw/dist/core/websocket.js.map +1 -0
- package/ccw/dist/index.d.ts +10 -0
- package/ccw/dist/index.d.ts.map +1 -0
- package/ccw/dist/index.js +10 -0
- package/ccw/dist/index.js.map +1 -0
- package/ccw/dist/mcp-server/index.d.ts +7 -0
- package/ccw/dist/mcp-server/index.d.ts.map +1 -0
- package/ccw/dist/mcp-server/index.js +157 -0
- package/ccw/dist/mcp-server/index.js.map +1 -0
- package/ccw/dist/tools/classify-folders.d.ts +26 -0
- package/ccw/dist/tools/classify-folders.d.ts.map +1 -0
- package/ccw/dist/tools/classify-folders.js +201 -0
- package/ccw/dist/tools/classify-folders.js.map +1 -0
- package/ccw/dist/tools/cli-config-manager.d.ts +62 -0
- package/ccw/dist/tools/cli-config-manager.d.ts.map +1 -0
- package/ccw/dist/tools/cli-config-manager.js +221 -0
- package/ccw/dist/tools/cli-config-manager.js.map +1 -0
- package/ccw/dist/tools/cli-executor.d.ts +373 -0
- package/ccw/dist/tools/cli-executor.d.ts.map +1 -0
- package/ccw/dist/tools/cli-executor.js +1625 -0
- package/ccw/dist/tools/cli-executor.js.map +1 -0
- package/ccw/dist/tools/cli-history-store.d.ts +330 -0
- package/ccw/dist/tools/cli-history-store.d.ts.map +1 -0
- package/ccw/dist/tools/cli-history-store.js +916 -0
- package/ccw/dist/tools/cli-history-store.js.map +1 -0
- package/ccw/dist/tools/codex-lens.d.ts +118 -0
- package/ccw/dist/tools/codex-lens.d.ts.map +1 -0
- package/ccw/dist/tools/codex-lens.js +962 -0
- package/ccw/dist/tools/codex-lens.js.map +1 -0
- package/ccw/dist/tools/convert-tokens-to-css.d.ts +14 -0
- package/ccw/dist/tools/convert-tokens-to-css.d.ts.map +1 -0
- package/ccw/dist/tools/convert-tokens-to-css.js +244 -0
- package/ccw/dist/tools/convert-tokens-to-css.js.map +1 -0
- package/ccw/dist/tools/core-memory.d.ts +66 -0
- package/ccw/dist/tools/core-memory.d.ts.map +1 -0
- package/ccw/dist/tools/core-memory.js +324 -0
- package/ccw/dist/tools/core-memory.js.map +1 -0
- package/ccw/dist/tools/detect-changed-modules.d.ts +24 -0
- package/ccw/dist/tools/detect-changed-modules.d.ts.map +1 -0
- package/ccw/dist/tools/detect-changed-modules.js +277 -0
- package/ccw/dist/tools/detect-changed-modules.js.map +1 -0
- package/ccw/dist/tools/discover-design-files.d.ts +36 -0
- package/ccw/dist/tools/discover-design-files.d.ts.map +1 -0
- package/ccw/dist/tools/discover-design-files.js +147 -0
- package/ccw/dist/tools/discover-design-files.js.map +1 -0
- package/ccw/dist/tools/edit-file.d.ts +28 -0
- package/ccw/dist/tools/edit-file.d.ts.map +1 -0
- package/ccw/dist/tools/edit-file.js +479 -0
- package/ccw/dist/tools/edit-file.js.map +1 -0
- package/ccw/dist/tools/generate-module-docs.d.ts +22 -0
- package/ccw/dist/tools/generate-module-docs.d.ts.map +1 -0
- package/ccw/dist/tools/generate-module-docs.js +379 -0
- package/ccw/dist/tools/generate-module-docs.js.map +1 -0
- package/ccw/dist/tools/get-modules-by-depth.d.ts +15 -0
- package/ccw/dist/tools/get-modules-by-depth.d.ts.map +1 -0
- package/ccw/dist/tools/get-modules-by-depth.js +296 -0
- package/ccw/dist/tools/get-modules-by-depth.js.map +1 -0
- package/ccw/dist/tools/index.d.ts +55 -0
- package/ccw/dist/tools/index.d.ts.map +1 -0
- package/ccw/dist/tools/index.js +304 -0
- package/ccw/dist/tools/index.js.map +1 -0
- package/ccw/dist/tools/native-session-discovery.d.ts +97 -0
- package/ccw/dist/tools/native-session-discovery.d.ts.map +1 -0
- package/ccw/dist/tools/native-session-discovery.js +700 -0
- package/ccw/dist/tools/native-session-discovery.js.map +1 -0
- package/ccw/dist/tools/notifier.d.ts +50 -0
- package/ccw/dist/tools/notifier.d.ts.map +1 -0
- package/ccw/dist/tools/notifier.js +90 -0
- package/ccw/dist/tools/notifier.js.map +1 -0
- package/ccw/dist/tools/read-file.d.ts +32 -0
- package/ccw/dist/tools/read-file.d.ts.map +1 -0
- package/ccw/dist/tools/read-file.js +329 -0
- package/ccw/dist/tools/read-file.js.map +1 -0
- package/ccw/dist/tools/resume-strategy.d.ts +48 -0
- package/ccw/dist/tools/resume-strategy.d.ts.map +1 -0
- package/ccw/dist/tools/resume-strategy.js +248 -0
- package/ccw/dist/tools/resume-strategy.js.map +1 -0
- package/ccw/dist/tools/session-content-parser.d.ts +58 -0
- package/ccw/dist/tools/session-content-parser.d.ts.map +1 -0
- package/ccw/dist/tools/session-content-parser.js +420 -0
- package/ccw/dist/tools/session-content-parser.js.map +1 -0
- package/ccw/dist/tools/session-manager.d.ts +9 -0
- package/ccw/dist/tools/session-manager.d.ts.map +1 -0
- package/ccw/dist/tools/session-manager.js +834 -0
- package/ccw/dist/tools/session-manager.js.map +1 -0
- package/ccw/dist/tools/smart-context.d.ts +35 -0
- package/ccw/dist/tools/smart-context.d.ts.map +1 -0
- package/ccw/dist/tools/smart-context.js +182 -0
- package/ccw/dist/tools/smart-context.js.map +1 -0
- package/ccw/dist/tools/smart-search.d.ts +105 -0
- package/ccw/dist/tools/smart-search.d.ts.map +1 -0
- package/ccw/dist/tools/smart-search.js +1753 -0
- package/ccw/dist/tools/smart-search.js.map +1 -0
- package/ccw/dist/tools/storage-manager.d.ts +114 -0
- package/ccw/dist/tools/storage-manager.d.ts.map +1 -0
- package/ccw/dist/tools/storage-manager.js +392 -0
- package/ccw/dist/tools/storage-manager.js.map +1 -0
- package/ccw/dist/tools/ui-generate-preview.d.ts +39 -0
- package/ccw/dist/tools/ui-generate-preview.d.ts.map +1 -0
- package/ccw/dist/tools/ui-generate-preview.js +300 -0
- package/ccw/dist/tools/ui-generate-preview.js.map +1 -0
- package/ccw/dist/tools/ui-instantiate-prototypes.d.ts +75 -0
- package/ccw/dist/tools/ui-instantiate-prototypes.d.ts.map +1 -0
- package/ccw/dist/tools/ui-instantiate-prototypes.js +256 -0
- package/ccw/dist/tools/ui-instantiate-prototypes.js.map +1 -0
- package/ccw/dist/tools/update-module-claude.d.ts +80 -0
- package/ccw/dist/tools/update-module-claude.d.ts.map +1 -0
- package/ccw/dist/tools/update-module-claude.js +351 -0
- package/ccw/dist/tools/update-module-claude.js.map +1 -0
- package/ccw/dist/tools/write-file.d.ts +19 -0
- package/ccw/dist/tools/write-file.d.ts.map +1 -0
- package/ccw/dist/tools/write-file.js +193 -0
- package/ccw/dist/tools/write-file.js.map +1 -0
- package/ccw/dist/types/config.d.ts +11 -0
- package/ccw/dist/types/config.d.ts.map +1 -0
- package/ccw/dist/types/config.js +2 -0
- package/ccw/dist/types/config.js.map +1 -0
- package/ccw/dist/types/index.d.ts +4 -0
- package/ccw/dist/types/index.d.ts.map +1 -0
- package/ccw/dist/types/index.js +4 -0
- package/ccw/dist/types/index.js.map +1 -0
- package/ccw/dist/types/session.d.ts +20 -0
- package/ccw/dist/types/session.d.ts.map +1 -0
- package/ccw/dist/types/session.js +2 -0
- package/ccw/dist/types/session.js.map +1 -0
- package/ccw/dist/types/tool.d.ts +36 -0
- package/ccw/dist/types/tool.d.ts.map +1 -0
- package/ccw/dist/types/tool.js +11 -0
- package/ccw/dist/types/tool.js.map +1 -0
- package/ccw/dist/utils/browser-launcher.d.ts +13 -0
- package/ccw/dist/utils/browser-launcher.d.ts.map +1 -0
- package/ccw/dist/utils/browser-launcher.js +60 -0
- package/ccw/dist/utils/browser-launcher.js.map +1 -0
- package/ccw/dist/utils/file-utils.d.ts +25 -0
- package/ccw/dist/utils/file-utils.d.ts.map +1 -0
- package/ccw/dist/utils/file-utils.js +48 -0
- package/ccw/dist/utils/file-utils.js.map +1 -0
- package/ccw/dist/utils/path-resolver.d.ts +80 -0
- package/ccw/dist/utils/path-resolver.d.ts.map +1 -0
- package/ccw/dist/utils/path-resolver.js +260 -0
- package/ccw/dist/utils/path-resolver.js.map +1 -0
- package/ccw/dist/utils/path-validator.d.ts +49 -0
- package/ccw/dist/utils/path-validator.d.ts.map +1 -0
- package/ccw/dist/utils/path-validator.js +123 -0
- package/ccw/dist/utils/path-validator.js.map +1 -0
- package/ccw/dist/utils/ui.d.ts +62 -0
- package/ccw/dist/utils/ui.d.ts.map +1 -0
- package/ccw/dist/utils/ui.js +129 -0
- package/ccw/dist/utils/ui.js.map +1 -0
- package/ccw/package.json +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* History Importer - Import Claude Code history into memory store
|
|
3
|
+
* Supports global history.jsonl and project session JSONL files
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* ```typescript
|
|
7
|
+
* const importer = new HistoryImporter('path/to/database.db');
|
|
8
|
+
*
|
|
9
|
+
* // Import global history (incremental)
|
|
10
|
+
* const globalResult = await importer.importGlobalHistory();
|
|
11
|
+
* console.log(`Imported ${globalResult.imported} entries`);
|
|
12
|
+
*
|
|
13
|
+
* // Import all sessions for a project
|
|
14
|
+
* const projectResult = await importer.importProjectSessions('D--Claude-dms3');
|
|
15
|
+
* console.log(`Imported ${projectResult.imported} messages from project sessions`);
|
|
16
|
+
*
|
|
17
|
+
* // Import specific session
|
|
18
|
+
* const sessionResult = await importer.importSession('path/to/session.jsonl');
|
|
19
|
+
*
|
|
20
|
+
* // Get import status
|
|
21
|
+
* const status = importer.getImportStatus();
|
|
22
|
+
* console.log(`Total imported: ${status.totalImported}`);
|
|
23
|
+
*
|
|
24
|
+
* importer.close();
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export interface ImportResult {
|
|
28
|
+
imported: number;
|
|
29
|
+
skipped: number;
|
|
30
|
+
errors: number;
|
|
31
|
+
}
|
|
32
|
+
export interface ImportStatus {
|
|
33
|
+
lastGlobalImport?: string;
|
|
34
|
+
lastSessionImport?: string;
|
|
35
|
+
totalImported: number;
|
|
36
|
+
sessions: Map<string, {
|
|
37
|
+
imported: number;
|
|
38
|
+
lastUpdate: string;
|
|
39
|
+
}>;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* History Importer for Claude Code
|
|
43
|
+
*/
|
|
44
|
+
export declare class HistoryImporter {
|
|
45
|
+
private db;
|
|
46
|
+
private status;
|
|
47
|
+
constructor(dbPath: string);
|
|
48
|
+
/**
|
|
49
|
+
* Initialize database schema for conversation history
|
|
50
|
+
* NOTE: Schema aligned with MemoryStore for seamless importing
|
|
51
|
+
*/
|
|
52
|
+
private initSchema;
|
|
53
|
+
/**
|
|
54
|
+
* Import from global history.jsonl (incremental)
|
|
55
|
+
*/
|
|
56
|
+
importGlobalHistory(historyPath?: string): Promise<ImportResult>;
|
|
57
|
+
/**
|
|
58
|
+
* Import full session from projects folder
|
|
59
|
+
*/
|
|
60
|
+
importSession(sessionFilePath: string): Promise<ImportResult>;
|
|
61
|
+
/**
|
|
62
|
+
* Scan and import all sessions for a project
|
|
63
|
+
*/
|
|
64
|
+
importProjectSessions(projectName: string): Promise<ImportResult>;
|
|
65
|
+
/**
|
|
66
|
+
* Get import status
|
|
67
|
+
*/
|
|
68
|
+
getImportStatus(): ImportStatus;
|
|
69
|
+
/**
|
|
70
|
+
* Insert global history batch
|
|
71
|
+
*/
|
|
72
|
+
private insertGlobalHistoryBatch;
|
|
73
|
+
/**
|
|
74
|
+
* Insert session messages
|
|
75
|
+
*/
|
|
76
|
+
private insertSessionMessages;
|
|
77
|
+
/**
|
|
78
|
+
* Extract text content from message content
|
|
79
|
+
*/
|
|
80
|
+
private extractTextContent;
|
|
81
|
+
/**
|
|
82
|
+
* Extract tool calls from content blocks
|
|
83
|
+
*/
|
|
84
|
+
private extractToolCalls;
|
|
85
|
+
/**
|
|
86
|
+
* Generate SHA256 hash for deduplication
|
|
87
|
+
*/
|
|
88
|
+
private generateHash;
|
|
89
|
+
/**
|
|
90
|
+
* Get last import time for a source
|
|
91
|
+
*/
|
|
92
|
+
private getLastImportTime;
|
|
93
|
+
/**
|
|
94
|
+
* Update last import time
|
|
95
|
+
*/
|
|
96
|
+
private updateLastImportTime;
|
|
97
|
+
/**
|
|
98
|
+
* Close database connection
|
|
99
|
+
*/
|
|
100
|
+
close(): void;
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=history-importer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history-importer.d.ts","sourceRoot":"","sources":["../../src/core/history-importer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAiDH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjE;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,EAAE,MAAM;IAU1B;;;OAGG;IACH,OAAO,CAAC,UAAU;IA8DlB;;OAEG;IACG,mBAAmB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IA6DtE;;OAEG;IACG,aAAa,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAuDnE;;OAEG;IACG,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAuBvE;;OAEG;IACH,eAAe,IAAI,YAAY;IAI/B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAwEhC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAmI7B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAW1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAmCxB;;OAEG;IACH,OAAO,CAAC,YAAY;IAKpB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAKzB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAa5B;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -0,0 +1,493 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* History Importer - Import Claude Code history into memory store
|
|
3
|
+
* Supports global history.jsonl and project session JSONL files
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* ```typescript
|
|
7
|
+
* const importer = new HistoryImporter('path/to/database.db');
|
|
8
|
+
*
|
|
9
|
+
* // Import global history (incremental)
|
|
10
|
+
* const globalResult = await importer.importGlobalHistory();
|
|
11
|
+
* console.log(`Imported ${globalResult.imported} entries`);
|
|
12
|
+
*
|
|
13
|
+
* // Import all sessions for a project
|
|
14
|
+
* const projectResult = await importer.importProjectSessions('D--Claude-dms3');
|
|
15
|
+
* console.log(`Imported ${projectResult.imported} messages from project sessions`);
|
|
16
|
+
*
|
|
17
|
+
* // Import specific session
|
|
18
|
+
* const sessionResult = await importer.importSession('path/to/session.jsonl');
|
|
19
|
+
*
|
|
20
|
+
* // Get import status
|
|
21
|
+
* const status = importer.getImportStatus();
|
|
22
|
+
* console.log(`Total imported: ${status.totalImported}`);
|
|
23
|
+
*
|
|
24
|
+
* importer.close();
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
import { createReadStream, existsSync, readdirSync } from 'fs';
|
|
28
|
+
import { createInterface } from 'readline';
|
|
29
|
+
import { join, basename } from 'path';
|
|
30
|
+
import { createHash } from 'crypto';
|
|
31
|
+
import Database from 'better-sqlite3';
|
|
32
|
+
/**
|
|
33
|
+
* History Importer for Claude Code
|
|
34
|
+
*/
|
|
35
|
+
export class HistoryImporter {
|
|
36
|
+
db;
|
|
37
|
+
status;
|
|
38
|
+
constructor(dbPath) {
|
|
39
|
+
this.db = new Database(dbPath);
|
|
40
|
+
this.db.pragma('journal_mode = WAL');
|
|
41
|
+
this.status = {
|
|
42
|
+
totalImported: 0,
|
|
43
|
+
sessions: new Map()
|
|
44
|
+
};
|
|
45
|
+
this.initSchema();
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Initialize database schema for conversation history
|
|
49
|
+
* NOTE: Schema aligned with MemoryStore for seamless importing
|
|
50
|
+
*/
|
|
51
|
+
initSchema() {
|
|
52
|
+
this.db.exec(`
|
|
53
|
+
-- Conversations table (aligned with MemoryStore schema)
|
|
54
|
+
CREATE TABLE IF NOT EXISTS conversations (
|
|
55
|
+
id TEXT PRIMARY KEY,
|
|
56
|
+
source TEXT DEFAULT 'ccw',
|
|
57
|
+
external_id TEXT,
|
|
58
|
+
project_name TEXT,
|
|
59
|
+
git_branch TEXT,
|
|
60
|
+
created_at TEXT NOT NULL,
|
|
61
|
+
updated_at TEXT NOT NULL,
|
|
62
|
+
quality_score INTEGER,
|
|
63
|
+
turn_count INTEGER DEFAULT 0,
|
|
64
|
+
prompt_preview TEXT
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
-- Messages table (aligned with MemoryStore schema)
|
|
68
|
+
CREATE TABLE IF NOT EXISTS messages (
|
|
69
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
70
|
+
conversation_id TEXT NOT NULL,
|
|
71
|
+
role TEXT NOT NULL CHECK(role IN ('user', 'assistant', 'system')),
|
|
72
|
+
content_text TEXT,
|
|
73
|
+
content_json TEXT,
|
|
74
|
+
timestamp TEXT NOT NULL,
|
|
75
|
+
token_count INTEGER,
|
|
76
|
+
FOREIGN KEY (conversation_id) REFERENCES conversations(id) ON DELETE CASCADE
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
-- Tool calls table (aligned with MemoryStore schema)
|
|
80
|
+
CREATE TABLE IF NOT EXISTS tool_calls (
|
|
81
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
82
|
+
message_id INTEGER NOT NULL,
|
|
83
|
+
tool_name TEXT NOT NULL,
|
|
84
|
+
tool_args TEXT,
|
|
85
|
+
tool_output TEXT,
|
|
86
|
+
status TEXT,
|
|
87
|
+
duration_ms INTEGER,
|
|
88
|
+
FOREIGN KEY (message_id) REFERENCES messages(id) ON DELETE CASCADE
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
-- Import tracking table
|
|
92
|
+
CREATE TABLE IF NOT EXISTS import_metadata (
|
|
93
|
+
key TEXT PRIMARY KEY,
|
|
94
|
+
value TEXT,
|
|
95
|
+
updated_at TEXT
|
|
96
|
+
);
|
|
97
|
+
|
|
98
|
+
-- Deduplication table (hash-based)
|
|
99
|
+
CREATE TABLE IF NOT EXISTS message_hashes (
|
|
100
|
+
hash TEXT PRIMARY KEY,
|
|
101
|
+
message_id TEXT NOT NULL,
|
|
102
|
+
created_at TEXT NOT NULL
|
|
103
|
+
);
|
|
104
|
+
|
|
105
|
+
-- Indexes (aligned with MemoryStore)
|
|
106
|
+
CREATE INDEX IF NOT EXISTS idx_conversations_created ON conversations(created_at DESC);
|
|
107
|
+
CREATE INDEX IF NOT EXISTS idx_conversations_updated ON conversations(updated_at DESC);
|
|
108
|
+
CREATE INDEX IF NOT EXISTS idx_messages_conversation ON messages(conversation_id);
|
|
109
|
+
CREATE INDEX IF NOT EXISTS idx_tool_calls_message ON tool_calls(message_id);
|
|
110
|
+
`);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Import from global history.jsonl (incremental)
|
|
114
|
+
*/
|
|
115
|
+
async importGlobalHistory(historyPath) {
|
|
116
|
+
const path = historyPath || join(process.env.USERPROFILE || process.env.HOME || '', '.claude', 'history.jsonl');
|
|
117
|
+
if (!existsSync(path)) {
|
|
118
|
+
return { imported: 0, skipped: 0, errors: 0 };
|
|
119
|
+
}
|
|
120
|
+
const result = { imported: 0, skipped: 0, errors: 0 };
|
|
121
|
+
const lastImportTime = this.getLastImportTime('global_history');
|
|
122
|
+
const fileStream = createReadStream(path, { encoding: 'utf8' });
|
|
123
|
+
const rl = createInterface({ input: fileStream, crlfDelay: Infinity });
|
|
124
|
+
const batch = [];
|
|
125
|
+
const BATCH_SIZE = 100;
|
|
126
|
+
for await (const line of rl) {
|
|
127
|
+
if (!line.trim())
|
|
128
|
+
continue;
|
|
129
|
+
try {
|
|
130
|
+
const entry = JSON.parse(line);
|
|
131
|
+
// Skip if already imported
|
|
132
|
+
if (lastImportTime && entry.timestamp <= new Date(lastImportTime).getTime()) {
|
|
133
|
+
result.skipped++;
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
batch.push(entry);
|
|
137
|
+
if (batch.length >= BATCH_SIZE) {
|
|
138
|
+
const batchResult = this.insertGlobalHistoryBatch(batch);
|
|
139
|
+
result.imported += batchResult.imported;
|
|
140
|
+
result.skipped += batchResult.skipped;
|
|
141
|
+
result.errors += batchResult.errors;
|
|
142
|
+
batch.length = 0;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
catch (err) {
|
|
146
|
+
result.errors++;
|
|
147
|
+
console.error(`Failed to parse line: ${err.message}`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
// Process remaining batch
|
|
151
|
+
if (batch.length > 0) {
|
|
152
|
+
const batchResult = this.insertGlobalHistoryBatch(batch);
|
|
153
|
+
result.imported += batchResult.imported;
|
|
154
|
+
result.skipped += batchResult.skipped;
|
|
155
|
+
result.errors += batchResult.errors;
|
|
156
|
+
}
|
|
157
|
+
if (result.imported > 0) {
|
|
158
|
+
this.updateLastImportTime('global_history');
|
|
159
|
+
}
|
|
160
|
+
this.status.lastGlobalImport = new Date().toISOString();
|
|
161
|
+
this.status.totalImported += result.imported;
|
|
162
|
+
return result;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Import full session from projects folder
|
|
166
|
+
*/
|
|
167
|
+
async importSession(sessionFilePath) {
|
|
168
|
+
if (!existsSync(sessionFilePath)) {
|
|
169
|
+
return { imported: 0, skipped: 0, errors: 0 };
|
|
170
|
+
}
|
|
171
|
+
const result = { imported: 0, skipped: 0, errors: 0 };
|
|
172
|
+
const sessionId = basename(sessionFilePath, '.jsonl');
|
|
173
|
+
const fileStream = createReadStream(sessionFilePath, { encoding: 'utf8' });
|
|
174
|
+
const rl = createInterface({ input: fileStream, crlfDelay: Infinity });
|
|
175
|
+
const messages = [];
|
|
176
|
+
let conversationMetadata = {};
|
|
177
|
+
for await (const line of rl) {
|
|
178
|
+
if (!line.trim())
|
|
179
|
+
continue;
|
|
180
|
+
try {
|
|
181
|
+
const entry = JSON.parse(line);
|
|
182
|
+
if (entry.type === 'user' || entry.type === 'assistant') {
|
|
183
|
+
messages.push(entry);
|
|
184
|
+
// Extract metadata from first message
|
|
185
|
+
if (messages.length === 1) {
|
|
186
|
+
conversationMetadata = {
|
|
187
|
+
sessionId: entry.sessionId,
|
|
188
|
+
cwd: entry.cwd,
|
|
189
|
+
gitBranch: entry.gitBranch
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
catch (err) {
|
|
195
|
+
result.errors++;
|
|
196
|
+
console.error(`Failed to parse session line: ${err.message}`);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
if (messages.length > 0) {
|
|
200
|
+
const importResult = this.insertSessionMessages(sessionId, messages, conversationMetadata);
|
|
201
|
+
result.imported = importResult.imported;
|
|
202
|
+
result.skipped = importResult.skipped;
|
|
203
|
+
result.errors += importResult.errors;
|
|
204
|
+
}
|
|
205
|
+
this.status.lastSessionImport = new Date().toISOString();
|
|
206
|
+
this.status.totalImported += result.imported;
|
|
207
|
+
this.status.sessions.set(sessionId, {
|
|
208
|
+
imported: result.imported,
|
|
209
|
+
lastUpdate: new Date().toISOString()
|
|
210
|
+
});
|
|
211
|
+
return result;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Scan and import all sessions for a project
|
|
215
|
+
*/
|
|
216
|
+
async importProjectSessions(projectName) {
|
|
217
|
+
const projectsDir = join(process.env.USERPROFILE || process.env.HOME || '', '.claude', 'projects');
|
|
218
|
+
const projectDir = join(projectsDir, projectName);
|
|
219
|
+
if (!existsSync(projectDir)) {
|
|
220
|
+
return { imported: 0, skipped: 0, errors: 0 };
|
|
221
|
+
}
|
|
222
|
+
const result = { imported: 0, skipped: 0, errors: 0 };
|
|
223
|
+
const sessionFiles = readdirSync(projectDir).filter(f => f.endsWith('.jsonl'));
|
|
224
|
+
for (const sessionFile of sessionFiles) {
|
|
225
|
+
const sessionPath = join(projectDir, sessionFile);
|
|
226
|
+
const sessionResult = await this.importSession(sessionPath);
|
|
227
|
+
result.imported += sessionResult.imported;
|
|
228
|
+
result.skipped += sessionResult.skipped;
|
|
229
|
+
result.errors += sessionResult.errors;
|
|
230
|
+
}
|
|
231
|
+
return result;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Get import status
|
|
235
|
+
*/
|
|
236
|
+
getImportStatus() {
|
|
237
|
+
return { ...this.status };
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Insert global history batch
|
|
241
|
+
*/
|
|
242
|
+
insertGlobalHistoryBatch(entries) {
|
|
243
|
+
const result = { imported: 0, skipped: 0, errors: 0 };
|
|
244
|
+
const upsertConversation = this.db.prepare(`
|
|
245
|
+
INSERT INTO conversations (id, source, external_id, project_name, created_at, updated_at, turn_count, prompt_preview)
|
|
246
|
+
VALUES (@id, @source, @external_id, @project_name, @created_at, @updated_at, 1, @prompt_preview)
|
|
247
|
+
ON CONFLICT(id) DO UPDATE SET
|
|
248
|
+
updated_at = @updated_at,
|
|
249
|
+
turn_count = turn_count + 1,
|
|
250
|
+
prompt_preview = @prompt_preview
|
|
251
|
+
`);
|
|
252
|
+
const upsertMessage = this.db.prepare(`
|
|
253
|
+
INSERT INTO messages (conversation_id, role, content_text, timestamp)
|
|
254
|
+
VALUES (@conversation_id, 'user', @content_text, @timestamp)
|
|
255
|
+
`);
|
|
256
|
+
const insertHash = this.db.prepare(`
|
|
257
|
+
INSERT OR IGNORE INTO message_hashes (hash, message_id, created_at)
|
|
258
|
+
VALUES (@hash, @message_id, @created_at)
|
|
259
|
+
`);
|
|
260
|
+
const transaction = this.db.transaction(() => {
|
|
261
|
+
for (const entry of entries) {
|
|
262
|
+
try {
|
|
263
|
+
const timestamp = new Date(entry.timestamp).toISOString();
|
|
264
|
+
const hash = this.generateHash(entry.sessionId, timestamp, entry.display);
|
|
265
|
+
// Check if hash exists
|
|
266
|
+
const existing = this.db.prepare('SELECT message_id FROM message_hashes WHERE hash = ?').get(hash);
|
|
267
|
+
if (existing) {
|
|
268
|
+
result.skipped++;
|
|
269
|
+
continue;
|
|
270
|
+
}
|
|
271
|
+
// Insert conversation (using MemoryStore-compatible fields)
|
|
272
|
+
upsertConversation.run({
|
|
273
|
+
id: entry.sessionId,
|
|
274
|
+
source: 'global_history',
|
|
275
|
+
external_id: entry.sessionId,
|
|
276
|
+
project_name: entry.project,
|
|
277
|
+
created_at: timestamp,
|
|
278
|
+
updated_at: timestamp,
|
|
279
|
+
prompt_preview: entry.display.substring(0, 100)
|
|
280
|
+
});
|
|
281
|
+
// Insert message (using MemoryStore-compatible fields)
|
|
282
|
+
const insertResult = upsertMessage.run({
|
|
283
|
+
conversation_id: entry.sessionId,
|
|
284
|
+
content_text: entry.display,
|
|
285
|
+
timestamp
|
|
286
|
+
});
|
|
287
|
+
// Insert hash (using actual message ID from insert)
|
|
288
|
+
insertHash.run({
|
|
289
|
+
hash,
|
|
290
|
+
message_id: String(insertResult.lastInsertRowid),
|
|
291
|
+
created_at: timestamp
|
|
292
|
+
});
|
|
293
|
+
result.imported++;
|
|
294
|
+
}
|
|
295
|
+
catch (err) {
|
|
296
|
+
result.errors++;
|
|
297
|
+
console.error(`Failed to insert entry: ${err.message}`);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
});
|
|
301
|
+
transaction();
|
|
302
|
+
return result;
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Insert session messages
|
|
306
|
+
*/
|
|
307
|
+
insertSessionMessages(sessionId, messages, metadata) {
|
|
308
|
+
const result = { imported: 0, skipped: 0, errors: 0 };
|
|
309
|
+
const upsertConversation = this.db.prepare(`
|
|
310
|
+
INSERT INTO conversations (id, source, external_id, project_name, git_branch, created_at, updated_at, turn_count, prompt_preview)
|
|
311
|
+
VALUES (@id, @source, @external_id, @project_name, @git_branch, @created_at, @updated_at, @turn_count, @prompt_preview)
|
|
312
|
+
ON CONFLICT(id) DO UPDATE SET
|
|
313
|
+
updated_at = @updated_at,
|
|
314
|
+
turn_count = @turn_count,
|
|
315
|
+
prompt_preview = @prompt_preview
|
|
316
|
+
`);
|
|
317
|
+
const upsertMessage = this.db.prepare(`
|
|
318
|
+
INSERT INTO messages (conversation_id, role, content_text, content_json, timestamp, token_count)
|
|
319
|
+
VALUES (@conversation_id, @role, @content_text, @content_json, @timestamp, @token_count)
|
|
320
|
+
`);
|
|
321
|
+
const insertToolCall = this.db.prepare(`
|
|
322
|
+
INSERT INTO tool_calls (message_id, tool_name, tool_args, tool_output, status)
|
|
323
|
+
VALUES (@message_id, @tool_name, @tool_args, @tool_output, @status)
|
|
324
|
+
`);
|
|
325
|
+
const insertHash = this.db.prepare(`
|
|
326
|
+
INSERT OR IGNORE INTO message_hashes (hash, message_id, created_at)
|
|
327
|
+
VALUES (@hash, @message_id, @created_at)
|
|
328
|
+
`);
|
|
329
|
+
const transaction = this.db.transaction(() => {
|
|
330
|
+
const firstMessage = messages[0];
|
|
331
|
+
const lastMessage = messages[messages.length - 1];
|
|
332
|
+
const promptPreview = firstMessage?.message
|
|
333
|
+
? this.extractTextContent(firstMessage.message.content).substring(0, 100)
|
|
334
|
+
: '';
|
|
335
|
+
// Insert conversation FIRST (before messages, for foreign key constraint)
|
|
336
|
+
upsertConversation.run({
|
|
337
|
+
id: sessionId,
|
|
338
|
+
source: 'session_file',
|
|
339
|
+
external_id: sessionId,
|
|
340
|
+
project_name: metadata.cwd || null,
|
|
341
|
+
git_branch: metadata.gitBranch || null,
|
|
342
|
+
created_at: firstMessage.timestamp,
|
|
343
|
+
updated_at: lastMessage.timestamp,
|
|
344
|
+
turn_count: 0,
|
|
345
|
+
prompt_preview: promptPreview
|
|
346
|
+
});
|
|
347
|
+
for (const msg of messages) {
|
|
348
|
+
if (!msg.message)
|
|
349
|
+
continue;
|
|
350
|
+
try {
|
|
351
|
+
const content = this.extractTextContent(msg.message.content);
|
|
352
|
+
const hash = this.generateHash(sessionId, msg.timestamp, content);
|
|
353
|
+
// Check if hash exists
|
|
354
|
+
const existing = this.db.prepare('SELECT message_id FROM message_hashes WHERE hash = ?').get(hash);
|
|
355
|
+
if (existing) {
|
|
356
|
+
result.skipped++;
|
|
357
|
+
continue;
|
|
358
|
+
}
|
|
359
|
+
// Calculate total tokens
|
|
360
|
+
const inputTokens = msg.message.usage?.input_tokens || 0;
|
|
361
|
+
const outputTokens = msg.message.usage?.output_tokens || 0;
|
|
362
|
+
const totalTokens = inputTokens + outputTokens;
|
|
363
|
+
// Store content as JSON if complex, otherwise as text
|
|
364
|
+
const contentJson = typeof msg.message.content === 'object'
|
|
365
|
+
? JSON.stringify(msg.message.content)
|
|
366
|
+
: null;
|
|
367
|
+
// Insert message (using MemoryStore-compatible fields)
|
|
368
|
+
const insertResult = upsertMessage.run({
|
|
369
|
+
conversation_id: sessionId,
|
|
370
|
+
role: msg.message.role,
|
|
371
|
+
content_text: content,
|
|
372
|
+
content_json: contentJson,
|
|
373
|
+
timestamp: msg.timestamp,
|
|
374
|
+
token_count: totalTokens
|
|
375
|
+
});
|
|
376
|
+
const messageId = insertResult.lastInsertRowid;
|
|
377
|
+
// Extract and insert tool calls
|
|
378
|
+
const toolCalls = this.extractToolCalls(msg.message.content);
|
|
379
|
+
for (const tool of toolCalls) {
|
|
380
|
+
insertToolCall.run({
|
|
381
|
+
message_id: messageId,
|
|
382
|
+
tool_name: tool.name,
|
|
383
|
+
tool_args: JSON.stringify(tool.input),
|
|
384
|
+
tool_output: tool.result || null,
|
|
385
|
+
status: 'success'
|
|
386
|
+
});
|
|
387
|
+
}
|
|
388
|
+
// Insert hash (using actual message ID from insert)
|
|
389
|
+
insertHash.run({
|
|
390
|
+
hash,
|
|
391
|
+
message_id: String(messageId),
|
|
392
|
+
created_at: msg.timestamp
|
|
393
|
+
});
|
|
394
|
+
result.imported++;
|
|
395
|
+
}
|
|
396
|
+
catch (err) {
|
|
397
|
+
result.errors++;
|
|
398
|
+
console.error(`Failed to insert message: ${err.message}`);
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
// Update conversation with final counts
|
|
402
|
+
upsertConversation.run({
|
|
403
|
+
id: sessionId,
|
|
404
|
+
source: 'session_file',
|
|
405
|
+
external_id: sessionId,
|
|
406
|
+
project_name: metadata.cwd || null,
|
|
407
|
+
git_branch: metadata.gitBranch || null,
|
|
408
|
+
created_at: firstMessage.timestamp,
|
|
409
|
+
updated_at: lastMessage.timestamp,
|
|
410
|
+
turn_count: result.imported,
|
|
411
|
+
prompt_preview: promptPreview
|
|
412
|
+
});
|
|
413
|
+
});
|
|
414
|
+
transaction();
|
|
415
|
+
return result;
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* Extract text content from message content
|
|
419
|
+
*/
|
|
420
|
+
extractTextContent(content) {
|
|
421
|
+
if (typeof content === 'string') {
|
|
422
|
+
return content;
|
|
423
|
+
}
|
|
424
|
+
return content
|
|
425
|
+
.filter(block => block.type === 'text' || block.type === 'thinking')
|
|
426
|
+
.map(block => block.text || block.thinking || '')
|
|
427
|
+
.join('\n\n');
|
|
428
|
+
}
|
|
429
|
+
/**
|
|
430
|
+
* Extract tool calls from content blocks
|
|
431
|
+
*/
|
|
432
|
+
extractToolCalls(content) {
|
|
433
|
+
if (typeof content === 'string') {
|
|
434
|
+
return [];
|
|
435
|
+
}
|
|
436
|
+
const toolCalls = [];
|
|
437
|
+
const toolResultMap = new Map();
|
|
438
|
+
// First pass: collect tool results
|
|
439
|
+
for (const block of content) {
|
|
440
|
+
if (block.type === 'tool_result' && block.id) {
|
|
441
|
+
toolResultMap.set(block.id, block.content || '');
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
// Second pass: collect tool uses with their results
|
|
445
|
+
for (const block of content) {
|
|
446
|
+
if (block.type === 'tool_use' && block.name) {
|
|
447
|
+
toolCalls.push({
|
|
448
|
+
id: block.id,
|
|
449
|
+
name: block.name,
|
|
450
|
+
input: block.input,
|
|
451
|
+
result: block.id ? toolResultMap.get(block.id) : undefined
|
|
452
|
+
});
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
return toolCalls;
|
|
456
|
+
}
|
|
457
|
+
/**
|
|
458
|
+
* Generate SHA256 hash for deduplication
|
|
459
|
+
*/
|
|
460
|
+
generateHash(sessionId, timestamp, content) {
|
|
461
|
+
const data = `${sessionId}:${timestamp}:${content}`;
|
|
462
|
+
return createHash('sha256').update(data).digest('hex');
|
|
463
|
+
}
|
|
464
|
+
/**
|
|
465
|
+
* Get last import time for a source
|
|
466
|
+
*/
|
|
467
|
+
getLastImportTime(source) {
|
|
468
|
+
const result = this.db.prepare('SELECT value FROM import_metadata WHERE key = ?').get(source);
|
|
469
|
+
return result?.value || null;
|
|
470
|
+
}
|
|
471
|
+
/**
|
|
472
|
+
* Update last import time
|
|
473
|
+
*/
|
|
474
|
+
updateLastImportTime(source) {
|
|
475
|
+
const now = new Date().toISOString();
|
|
476
|
+
this.db.prepare(`
|
|
477
|
+
INSERT INTO import_metadata (key, value, updated_at)
|
|
478
|
+
VALUES (@key, @value, @updated_at)
|
|
479
|
+
ON CONFLICT(key) DO UPDATE SET value = @value, updated_at = @updated_at
|
|
480
|
+
`).run({
|
|
481
|
+
key: source,
|
|
482
|
+
value: now,
|
|
483
|
+
updated_at: now
|
|
484
|
+
});
|
|
485
|
+
}
|
|
486
|
+
/**
|
|
487
|
+
* Close database connection
|
|
488
|
+
*/
|
|
489
|
+
close() {
|
|
490
|
+
this.db.close();
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
//# sourceMappingURL=history-importer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history-importer.js","sourceRoot":"","sources":["../../src/core/history-importer.ts"],"names":[],"mappings":"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"}
|