claude-code-workflow 6.1.3 → 6.2.1
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/README.md +145 -274
- package/bin/ccw-mcp.js +7 -0
- package/bin/ccw.js +10 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +219 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/cli.d.ts +32 -0
- package/dist/commands/cli.d.ts.map +1 -0
- package/dist/commands/cli.js +619 -0
- package/dist/commands/cli.js.map +1 -0
- package/dist/commands/core-memory.d.ts +32 -0
- package/dist/commands/core-memory.d.ts.map +1 -0
- package/dist/commands/core-memory.js +640 -0
- package/dist/commands/core-memory.js.map +1 -0
- package/dist/commands/hook.d.ts +16 -0
- package/dist/commands/hook.d.ts.map +1 -0
- package/dist/commands/hook.js +276 -0
- package/dist/commands/hook.js.map +1 -0
- package/dist/commands/install.d.ts +12 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +443 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/list.d.ts +5 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +32 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/memory.d.ts +57 -0
- package/dist/commands/memory.d.ts.map +1 -0
- package/dist/commands/memory.js +890 -0
- package/dist/commands/memory.js.map +1 -0
- package/dist/commands/serve.d.ts +12 -0
- package/dist/commands/serve.d.ts.map +1 -0
- package/dist/commands/serve.js +63 -0
- package/dist/commands/serve.js.map +1 -0
- package/dist/commands/session-path-resolver.d.ts +45 -0
- package/dist/commands/session-path-resolver.d.ts.map +1 -0
- package/dist/commands/session-path-resolver.js +302 -0
- package/dist/commands/session-path-resolver.js.map +1 -0
- package/dist/commands/session.d.ts +12 -0
- package/dist/commands/session.d.ts.map +1 -0
- package/dist/commands/session.js +954 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/stop.d.ts +11 -0
- package/dist/commands/stop.d.ts.map +1 -0
- package/dist/commands/stop.js +96 -0
- package/dist/commands/stop.js.map +1 -0
- package/dist/commands/tool.d.ts +29 -0
- package/dist/commands/tool.d.ts.map +1 -0
- package/dist/commands/tool.js +173 -0
- package/dist/commands/tool.js.map +1 -0
- package/dist/commands/uninstall.d.ts +9 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +239 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/upgrade.d.ts +10 -0
- package/dist/commands/upgrade.d.ts.map +1 -0
- package/dist/commands/upgrade.js +288 -0
- package/dist/commands/upgrade.js.map +1 -0
- package/dist/commands/view.d.ts +14 -0
- package/dist/commands/view.d.ts.map +1 -0
- package/dist/commands/view.js +100 -0
- package/dist/commands/view.js.map +1 -0
- package/dist/config/storage-paths.d.ts +184 -0
- package/dist/config/storage-paths.d.ts.map +1 -0
- package/dist/config/storage-paths.js +536 -0
- package/dist/config/storage-paths.js.map +1 -0
- package/dist/core/cache-manager.d.ts +80 -0
- package/dist/core/cache-manager.d.ts.map +1 -0
- package/dist/core/cache-manager.js +260 -0
- package/dist/core/cache-manager.js.map +1 -0
- package/dist/core/claude-freshness.d.ts +53 -0
- package/dist/core/claude-freshness.d.ts.map +1 -0
- package/dist/core/claude-freshness.js +232 -0
- package/dist/core/claude-freshness.js.map +1 -0
- package/dist/core/core-memory-store.d.ts +320 -0
- package/dist/core/core-memory-store.d.ts.map +1 -0
- package/dist/core/core-memory-store.js +1177 -0
- package/dist/core/core-memory-store.js.map +1 -0
- package/dist/core/dashboard-generator-patch.d.ts +2 -0
- package/dist/core/dashboard-generator-patch.d.ts.map +1 -0
- package/dist/core/dashboard-generator-patch.js +48 -0
- package/dist/core/dashboard-generator-patch.js.map +1 -0
- package/dist/core/dashboard-generator.d.ts +8 -0
- package/dist/core/dashboard-generator.d.ts.map +1 -0
- package/dist/core/dashboard-generator.js +695 -0
- package/dist/core/dashboard-generator.js.map +1 -0
- package/dist/core/data-aggregator.d.ts +145 -0
- package/dist/core/data-aggregator.d.ts.map +1 -0
- package/dist/core/data-aggregator.js +416 -0
- package/dist/core/data-aggregator.js.map +1 -0
- package/dist/core/history-importer.d.ts +102 -0
- package/dist/core/history-importer.d.ts.map +1 -0
- package/dist/core/history-importer.js +493 -0
- package/dist/core/history-importer.js.map +1 -0
- package/dist/core/lite-scanner-complete.d.ts +81 -0
- package/dist/core/lite-scanner-complete.d.ts.map +1 -0
- package/dist/core/lite-scanner-complete.js +368 -0
- package/dist/core/lite-scanner-complete.js.map +1 -0
- package/dist/core/lite-scanner.d.ts +81 -0
- package/dist/core/lite-scanner.d.ts.map +1 -0
- package/dist/core/lite-scanner.js +368 -0
- package/dist/core/lite-scanner.js.map +1 -0
- package/dist/core/manifest.d.ts +88 -0
- package/dist/core/manifest.d.ts.map +1 -0
- package/dist/core/manifest.js +214 -0
- package/dist/core/manifest.js.map +1 -0
- package/dist/core/memory-embedder-bridge.d.ts +83 -0
- package/dist/core/memory-embedder-bridge.d.ts.map +1 -0
- package/dist/core/memory-embedder-bridge.js +181 -0
- package/dist/core/memory-embedder-bridge.js.map +1 -0
- package/dist/core/memory-store.d.ts +249 -0
- package/dist/core/memory-store.d.ts.map +1 -0
- package/dist/core/memory-store.js +781 -0
- package/dist/core/memory-store.js.map +1 -0
- package/dist/core/routes/ccw-routes.d.ts +20 -0
- package/dist/core/routes/ccw-routes.d.ts.map +1 -0
- package/dist/core/routes/ccw-routes.js +70 -0
- package/dist/core/routes/ccw-routes.js.map +1 -0
- package/dist/core/routes/claude-routes.d.ts +19 -0
- package/dist/core/routes/claude-routes.d.ts.map +1 -0
- package/dist/core/routes/claude-routes.js +1017 -0
- package/dist/core/routes/claude-routes.js.map +1 -0
- package/dist/core/routes/cli-routes.d.ts +20 -0
- package/dist/core/routes/cli-routes.d.ts.map +1 -0
- package/dist/core/routes/cli-routes.js +468 -0
- package/dist/core/routes/cli-routes.js.map +1 -0
- package/dist/core/routes/codexlens-routes.d.ts +20 -0
- package/dist/core/routes/codexlens-routes.d.ts.map +1 -0
- package/dist/core/routes/codexlens-routes.js +754 -0
- package/dist/core/routes/codexlens-routes.js.map +1 -0
- package/dist/core/routes/core-memory-routes.d.ts +21 -0
- package/dist/core/routes/core-memory-routes.d.ts.map +1 -0
- package/dist/core/routes/core-memory-routes.js +520 -0
- package/dist/core/routes/core-memory-routes.js.map +1 -0
- package/dist/core/routes/files-routes.d.ts +20 -0
- package/dist/core/routes/files-routes.d.ts.map +1 -0
- package/dist/core/routes/files-routes.js +374 -0
- package/dist/core/routes/files-routes.js.map +1 -0
- package/dist/core/routes/graph-routes.d.ts +20 -0
- package/dist/core/routes/graph-routes.d.ts.map +1 -0
- package/dist/core/routes/graph-routes.js +517 -0
- package/dist/core/routes/graph-routes.js.map +1 -0
- package/dist/core/routes/help-routes.d.ts +20 -0
- package/dist/core/routes/help-routes.d.ts.map +1 -0
- package/dist/core/routes/help-routes.js +250 -0
- package/dist/core/routes/help-routes.js.map +1 -0
- package/dist/core/routes/hooks-routes.d.ts +21 -0
- package/dist/core/routes/hooks-routes.d.ts.map +1 -0
- package/dist/core/routes/hooks-routes.js +346 -0
- package/dist/core/routes/hooks-routes.js.map +1 -0
- package/dist/core/routes/mcp-routes.d.ts +20 -0
- package/dist/core/routes/mcp-routes.d.ts.map +1 -0
- package/dist/core/routes/mcp-routes.js +1129 -0
- package/dist/core/routes/mcp-routes.js.map +1 -0
- package/dist/core/routes/mcp-templates-db.d.ts +54 -0
- package/dist/core/routes/mcp-templates-db.d.ts.map +1 -0
- package/dist/core/routes/mcp-templates-db.js +226 -0
- package/dist/core/routes/mcp-templates-db.js.map +1 -0
- package/dist/core/routes/memory-routes.d.ts +21 -0
- package/dist/core/routes/memory-routes.d.ts.map +1 -0
- package/dist/core/routes/memory-routes.js +1095 -0
- package/dist/core/routes/memory-routes.js.map +1 -0
- package/dist/core/routes/rules-routes.d.ts +20 -0
- package/dist/core/routes/rules-routes.d.ts.map +1 -0
- package/dist/core/routes/rules-routes.js +442 -0
- package/dist/core/routes/rules-routes.js.map +1 -0
- package/dist/core/routes/session-routes.d.ts +20 -0
- package/dist/core/routes/session-routes.d.ts.map +1 -0
- package/dist/core/routes/session-routes.js +423 -0
- package/dist/core/routes/session-routes.js.map +1 -0
- package/dist/core/routes/skills-routes.d.ts +20 -0
- package/dist/core/routes/skills-routes.d.ts.map +1 -0
- package/dist/core/routes/skills-routes.js +533 -0
- package/dist/core/routes/skills-routes.js.map +1 -0
- package/dist/core/routes/status-routes.d.ts +20 -0
- package/dist/core/routes/status-routes.d.ts.map +1 -0
- package/dist/core/routes/status-routes.js +38 -0
- package/dist/core/routes/status-routes.js.map +1 -0
- package/dist/core/routes/system-routes.d.ts +22 -0
- package/dist/core/routes/system-routes.d.ts.map +1 -0
- package/dist/core/routes/system-routes.js +354 -0
- package/dist/core/routes/system-routes.js.map +1 -0
- package/dist/core/server.d.ts +17 -0
- package/dist/core/server.d.ts.map +1 -0
- package/dist/core/server.js +386 -0
- package/dist/core/server.js.map +1 -0
- package/dist/core/session-clustering-service.d.ts +153 -0
- package/dist/core/session-clustering-service.d.ts.map +1 -0
- package/dist/core/session-clustering-service.js +1065 -0
- package/dist/core/session-clustering-service.js.map +1 -0
- package/dist/core/session-scanner.d.ts +32 -0
- package/dist/core/session-scanner.d.ts.map +1 -0
- package/dist/core/session-scanner.js +253 -0
- package/dist/core/session-scanner.js.map +1 -0
- package/dist/core/websocket.d.ts +23 -0
- package/dist/core/websocket.d.ts.map +1 -0
- package/dist/core/websocket.js +168 -0
- package/dist/core/websocket.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server/index.d.ts +7 -0
- package/dist/mcp-server/index.d.ts.map +1 -0
- package/dist/mcp-server/index.js +157 -0
- package/dist/mcp-server/index.js.map +1 -0
- package/dist/tools/classify-folders.d.ts +26 -0
- package/dist/tools/classify-folders.d.ts.map +1 -0
- package/dist/tools/classify-folders.js +201 -0
- package/dist/tools/classify-folders.js.map +1 -0
- package/dist/tools/cli-config-manager.d.ts +62 -0
- package/dist/tools/cli-config-manager.d.ts.map +1 -0
- package/dist/tools/cli-config-manager.js +221 -0
- package/dist/tools/cli-config-manager.js.map +1 -0
- package/dist/tools/cli-executor.d.ts +373 -0
- package/dist/tools/cli-executor.d.ts.map +1 -0
- package/dist/tools/cli-executor.js +1625 -0
- package/dist/tools/cli-executor.js.map +1 -0
- package/dist/tools/cli-history-store.d.ts +330 -0
- package/dist/tools/cli-history-store.d.ts.map +1 -0
- package/dist/tools/cli-history-store.js +916 -0
- package/dist/tools/cli-history-store.js.map +1 -0
- package/dist/tools/codex-lens.d.ts +118 -0
- package/dist/tools/codex-lens.d.ts.map +1 -0
- package/dist/tools/codex-lens.js +962 -0
- package/dist/tools/codex-lens.js.map +1 -0
- package/dist/tools/convert-tokens-to-css.d.ts +14 -0
- package/dist/tools/convert-tokens-to-css.d.ts.map +1 -0
- package/dist/tools/convert-tokens-to-css.js +244 -0
- package/dist/tools/convert-tokens-to-css.js.map +1 -0
- package/dist/tools/core-memory.d.ts +66 -0
- package/dist/tools/core-memory.d.ts.map +1 -0
- package/dist/tools/core-memory.js +324 -0
- package/dist/tools/core-memory.js.map +1 -0
- package/dist/tools/detect-changed-modules.d.ts +24 -0
- package/dist/tools/detect-changed-modules.d.ts.map +1 -0
- package/dist/tools/detect-changed-modules.js +277 -0
- package/dist/tools/detect-changed-modules.js.map +1 -0
- package/dist/tools/discover-design-files.d.ts +36 -0
- package/dist/tools/discover-design-files.d.ts.map +1 -0
- package/dist/tools/discover-design-files.js +147 -0
- package/dist/tools/discover-design-files.js.map +1 -0
- package/dist/tools/edit-file.d.ts +28 -0
- package/dist/tools/edit-file.d.ts.map +1 -0
- package/dist/tools/edit-file.js +479 -0
- package/dist/tools/edit-file.js.map +1 -0
- package/dist/tools/generate-module-docs.d.ts +22 -0
- package/dist/tools/generate-module-docs.d.ts.map +1 -0
- package/dist/tools/generate-module-docs.js +379 -0
- package/dist/tools/generate-module-docs.js.map +1 -0
- package/dist/tools/get-modules-by-depth.d.ts +15 -0
- package/dist/tools/get-modules-by-depth.d.ts.map +1 -0
- package/dist/tools/get-modules-by-depth.js +296 -0
- package/dist/tools/get-modules-by-depth.js.map +1 -0
- package/dist/tools/index.d.ts +55 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +304 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/native-session-discovery.d.ts +97 -0
- package/dist/tools/native-session-discovery.d.ts.map +1 -0
- package/dist/tools/native-session-discovery.js +700 -0
- package/dist/tools/native-session-discovery.js.map +1 -0
- package/dist/tools/notifier.d.ts +50 -0
- package/dist/tools/notifier.d.ts.map +1 -0
- package/dist/tools/notifier.js +90 -0
- package/dist/tools/notifier.js.map +1 -0
- package/dist/tools/read-file.d.ts +32 -0
- package/dist/tools/read-file.d.ts.map +1 -0
- package/dist/tools/read-file.js +329 -0
- package/dist/tools/read-file.js.map +1 -0
- package/dist/tools/resume-strategy.d.ts +48 -0
- package/dist/tools/resume-strategy.d.ts.map +1 -0
- package/dist/tools/resume-strategy.js +248 -0
- package/dist/tools/resume-strategy.js.map +1 -0
- package/dist/tools/session-content-parser.d.ts +58 -0
- package/dist/tools/session-content-parser.d.ts.map +1 -0
- package/dist/tools/session-content-parser.js +420 -0
- package/dist/tools/session-content-parser.js.map +1 -0
- package/dist/tools/session-manager.d.ts +9 -0
- package/dist/tools/session-manager.d.ts.map +1 -0
- package/dist/tools/session-manager.js +834 -0
- package/dist/tools/session-manager.js.map +1 -0
- package/dist/tools/smart-context.d.ts +35 -0
- package/dist/tools/smart-context.d.ts.map +1 -0
- package/dist/tools/smart-context.js +182 -0
- package/dist/tools/smart-context.js.map +1 -0
- package/dist/tools/smart-search.d.ts +105 -0
- package/dist/tools/smart-search.d.ts.map +1 -0
- package/dist/tools/smart-search.js +1753 -0
- package/dist/tools/smart-search.js.map +1 -0
- package/dist/tools/storage-manager.d.ts +114 -0
- package/dist/tools/storage-manager.d.ts.map +1 -0
- package/dist/tools/storage-manager.js +392 -0
- package/dist/tools/storage-manager.js.map +1 -0
- package/dist/tools/ui-generate-preview.d.ts +39 -0
- package/dist/tools/ui-generate-preview.d.ts.map +1 -0
- package/dist/tools/ui-generate-preview.js +300 -0
- package/dist/tools/ui-generate-preview.js.map +1 -0
- package/dist/tools/ui-instantiate-prototypes.d.ts +75 -0
- package/dist/tools/ui-instantiate-prototypes.d.ts.map +1 -0
- package/dist/tools/ui-instantiate-prototypes.js +256 -0
- package/dist/tools/ui-instantiate-prototypes.js.map +1 -0
- package/dist/tools/update-module-claude.d.ts +80 -0
- package/dist/tools/update-module-claude.d.ts.map +1 -0
- package/dist/tools/update-module-claude.js +351 -0
- package/dist/tools/update-module-claude.js.map +1 -0
- package/dist/tools/write-file.d.ts +19 -0
- package/dist/tools/write-file.d.ts.map +1 -0
- package/dist/tools/write-file.js +193 -0
- package/dist/tools/write-file.js.map +1 -0
- package/dist/types/config.d.ts +11 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +2 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +4 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/session.d.ts +20 -0
- package/dist/types/session.d.ts.map +1 -0
- package/dist/types/session.js +2 -0
- package/dist/types/session.js.map +1 -0
- package/dist/types/tool.d.ts +36 -0
- package/dist/types/tool.d.ts.map +1 -0
- package/dist/types/tool.js +11 -0
- package/dist/types/tool.js.map +1 -0
- package/dist/utils/browser-launcher.d.ts +13 -0
- package/dist/utils/browser-launcher.d.ts.map +1 -0
- package/dist/utils/browser-launcher.js +60 -0
- package/dist/utils/browser-launcher.js.map +1 -0
- package/dist/utils/file-utils.d.ts +25 -0
- package/dist/utils/file-utils.d.ts.map +1 -0
- package/dist/utils/file-utils.js +48 -0
- package/dist/utils/file-utils.js.map +1 -0
- package/dist/utils/path-resolver.d.ts +80 -0
- package/dist/utils/path-resolver.d.ts.map +1 -0
- package/dist/utils/path-resolver.js +260 -0
- package/dist/utils/path-resolver.js.map +1 -0
- package/dist/utils/path-validator.d.ts +49 -0
- package/dist/utils/path-validator.d.ts.map +1 -0
- package/dist/utils/path-validator.js +123 -0
- package/dist/utils/path-validator.js.map +1 -0
- package/dist/utils/ui.d.ts +62 -0
- package/dist/utils/ui.d.ts.map +1 -0
- package/dist/utils/ui.js +129 -0
- package/dist/utils/ui.js.map +1 -0
- package/package.json +65 -67
- package/src/.workflow/.cli-history/history.db +0 -0
- package/src/.workflow/.cli-history/history.db-shm +0 -0
- package/src/.workflow/.cli-history/history.db-wal +0 -0
- package/src/cli.ts +244 -0
- package/src/commands/cli.ts +740 -0
- package/src/commands/core-memory.ts +770 -0
- package/src/commands/hook.ts +315 -0
- package/src/commands/install.ts +519 -0
- package/src/commands/list.ts +37 -0
- package/src/commands/memory.ts +1090 -0
- package/src/commands/serve.ts +76 -0
- package/src/commands/session-path-resolver.ts +372 -0
- package/src/commands/session.ts +1141 -0
- package/src/commands/stop.ts +111 -0
- package/src/commands/tool.ts +201 -0
- package/src/commands/uninstall.ts +287 -0
- package/src/commands/upgrade.ts +352 -0
- package/src/commands/view.ts +119 -0
- package/src/config/storage-paths.ts +670 -0
- package/src/core/cache-manager.ts +294 -0
- package/src/core/claude-freshness.ts +319 -0
- package/src/core/core-memory-store.ts +1528 -0
- package/src/core/dashboard-generator-patch.ts +47 -0
- package/src/core/dashboard-generator.ts +739 -0
- package/src/core/data-aggregator.ts +584 -0
- package/src/core/history-importer.ts +625 -0
- package/src/core/lite-scanner-complete.ts +469 -0
- package/src/core/lite-scanner.ts +469 -0
- package/src/core/manifest.ts +271 -0
- package/src/core/memory-embedder-bridge.ts +262 -0
- package/src/core/memory-store.ts +978 -0
- package/src/core/routes/ccw-routes.ts +96 -0
- package/src/core/routes/claude-routes.ts +1183 -0
- package/src/core/routes/cli-routes.ts +561 -0
- package/src/core/routes/codexlens-routes.ts +806 -0
- package/src/core/routes/core-memory-routes.ts +605 -0
- package/src/core/routes/files-routes.ts +428 -0
- package/src/core/routes/graph-routes.md +164 -0
- package/src/core/routes/graph-routes.ts +626 -0
- package/src/core/routes/help-routes.ts +308 -0
- package/src/core/routes/hooks-routes.ts +405 -0
- package/src/core/routes/mcp-routes.ts +1271 -0
- package/src/core/routes/mcp-routes.ts.backup +550 -0
- package/src/core/routes/mcp-templates-db.ts +268 -0
- package/src/core/routes/memory-routes.ts +1206 -0
- package/src/core/routes/rules-routes.ts +526 -0
- package/src/core/routes/session-routes.ts +467 -0
- package/src/core/routes/skills-routes.ts +599 -0
- package/src/core/routes/status-routes.ts +57 -0
- package/src/core/routes/system-routes.ts +427 -0
- package/src/core/server.ts +431 -0
- package/src/core/session-clustering-service.ts +1258 -0
- package/src/core/session-scanner.ts +283 -0
- package/src/core/websocket.ts +190 -0
- package/src/index.ts +10 -0
- package/src/mcp-server/index.ts +186 -0
- package/src/templates/assets/css/github-dark.min.css +10 -0
- package/src/templates/assets/css/github.min.css +10 -0
- package/src/templates/assets/js/cytoscape.min.js +32 -0
- package/src/templates/assets/js/d3.min.js +2 -0
- package/src/templates/assets/js/highlight.min.js +1244 -0
- package/src/templates/assets/js/lucide.min.js +12 -0
- package/src/templates/assets/js/marked.min.js +69 -0
- package/src/templates/assets/js/tailwind.js +83 -0
- package/src/templates/dashboard-css/01-base.css +302 -0
- package/src/templates/dashboard-css/02-session.css +748 -0
- package/src/templates/dashboard-css/04-lite-tasks.css +1181 -0
- package/src/templates/dashboard-css/06-cards.css +1576 -0
- package/src/templates/dashboard-css/07-managers.css +2107 -0
- package/src/templates/dashboard-css/09-explorer.css +1408 -0
- package/src/templates/dashboard-css/10-cli-status.css +337 -0
- package/src/templates/dashboard-css/11-cli-history.css +271 -0
- package/src/templates/dashboard-css/12-cli-legacy.css +796 -0
- package/src/templates/dashboard-css/13-cli-ccw.css +199 -0
- package/src/templates/dashboard-css/14-cli-modals.css +258 -0
- package/src/templates/dashboard-css/15-cli-endpoints.css +305 -0
- package/src/templates/dashboard-css/16-cli-session.css +241 -0
- package/src/templates/dashboard-css/17-cli-conversation.css +283 -0
- package/src/templates/dashboard-css/18-cli-settings.css +160 -0
- package/src/templates/dashboard-css/19-cli-native-session.css +496 -0
- package/src/templates/dashboard-css/20-cli-taskqueue.css +188 -0
- package/src/templates/dashboard-css/21-cli-toolmgmt.css +310 -0
- package/src/templates/dashboard-css/22-cli-semantic.css +240 -0
- package/src/templates/dashboard-css/23-memory.css +2390 -0
- package/src/templates/dashboard-css/24-prompt-history.css +1089 -0
- package/src/templates/dashboard-css/25-skills-rules.css +326 -0
- package/src/templates/dashboard-css/26-claude-manager.css +908 -0
- package/src/templates/dashboard-css/27-graph-explorer.css +1678 -0
- package/src/templates/dashboard-css/28-mcp-manager.css +748 -0
- package/src/templates/dashboard-css/29-help.css +264 -0
- package/src/templates/dashboard-css/30-core-memory.css +1700 -0
- package/src/templates/dashboard-js/api.js +220 -0
- package/src/templates/dashboard-js/components/carousel.js +398 -0
- package/src/templates/dashboard-js/components/cli-history.js +876 -0
- package/src/templates/dashboard-js/components/cli-status.js +978 -0
- package/src/templates/dashboard-js/components/global-notifications.js +508 -0
- package/src/templates/dashboard-js/components/hook-manager.js +1278 -0
- package/src/templates/dashboard-js/components/index-manager.js +302 -0
- package/src/templates/dashboard-js/components/mcp-manager.js +1219 -0
- package/src/templates/dashboard-js/components/modals.js +326 -0
- package/src/templates/dashboard-js/components/navigation.js +313 -0
- package/src/templates/dashboard-js/components/notifications.js +758 -0
- package/src/templates/dashboard-js/components/storage-manager.js +478 -0
- package/src/templates/dashboard-js/components/tabs-other.js +424 -0
- package/src/templates/dashboard-js/components/task-queue-sidebar.js +716 -0
- package/src/templates/dashboard-js/help-i18n.js +272 -0
- package/src/templates/dashboard-js/i18n.js +2807 -0
- package/src/templates/dashboard-js/main.js +87 -0
- package/src/templates/dashboard-js/state.js +243 -0
- package/src/templates/dashboard-js/utils.js +199 -0
- package/src/templates/dashboard-js/views/claude-manager.js +912 -0
- package/src/templates/dashboard-js/views/cli-manager.js +2272 -0
- package/src/templates/dashboard-js/views/codexlens-manager.js +964 -0
- package/src/templates/dashboard-js/views/core-memory-clusters.js +503 -0
- package/src/templates/dashboard-js/views/core-memory.js +782 -0
- package/src/templates/dashboard-js/views/explorer.js +888 -0
- package/src/templates/dashboard-js/views/graph-explorer.js +1157 -0
- package/src/templates/dashboard-js/views/help.js +856 -0
- package/src/templates/dashboard-js/views/history.js +337 -0
- package/src/templates/dashboard-js/views/home.js +243 -0
- package/src/templates/dashboard-js/views/hook-manager.js +660 -0
- package/src/templates/dashboard-js/views/lite-tasks.js +861 -0
- package/src/templates/dashboard-js/views/mcp-manager.js +2187 -0
- package/src/templates/dashboard-js/views/mcp-manager.js.backup +1729 -0
- package/src/templates/dashboard-js/views/mcp-manager.js.new +928 -0
- package/src/templates/dashboard-js/views/memory.js +1221 -0
- package/src/templates/dashboard-js/views/prompt-history.js +713 -0
- package/src/templates/dashboard-js/views/rules-manager.js +828 -0
- package/src/templates/dashboard-js/views/session-detail.js +781 -0
- package/src/templates/dashboard-js/views/skills-manager.js +819 -0
- package/src/templates/dashboard.html +831 -0
- package/src/templates/hooks-config-example.json +60 -0
- package/src/tools/classify-folders.ts +245 -0
- package/src/tools/cli-config-manager.ts +268 -0
- package/src/tools/cli-executor.ts +2014 -0
- package/src/tools/cli-history-store.ts +1195 -0
- package/src/tools/codex-lens.ts +1141 -0
- package/src/tools/convert-tokens-to-css.ts +300 -0
- package/src/tools/core-memory.ts +444 -0
- package/src/tools/detect-changed-modules.ts +325 -0
- package/src/tools/discover-design-files.ts +184 -0
- package/src/tools/edit-file.ts +568 -0
- package/src/tools/generate-module-docs.ts +438 -0
- package/src/tools/get-modules-by-depth.ts +349 -0
- package/src/tools/index.ts +370 -0
- package/src/tools/native-session-discovery.ts +795 -0
- package/src/tools/notifier.ts +129 -0
- package/src/tools/read-file.ts +410 -0
- package/src/tools/resume-strategy.ts +345 -0
- package/src/tools/session-content-parser.ts +619 -0
- package/src/tools/session-manager.ts +1026 -0
- package/src/tools/smart-context.ts +228 -0
- package/src/tools/smart-search.ts +2065 -0
- package/src/tools/smart-search.ts.backup +1233 -0
- package/src/tools/storage-manager.ts +455 -0
- package/src/tools/write-file.ts +222 -0
- package/src/types/config.ts +11 -0
- package/src/types/index.ts +3 -0
- package/src/types/session.ts +25 -0
- package/src/types/tool.ts +41 -0
- package/src/utils/browser-launcher.ts +62 -0
- package/src/utils/file-utils.ts +48 -0
- package/src/utils/path-resolver.ts +315 -0
- package/src/utils/path-validator.ts +153 -0
- package/src/utils/ui.ts +155 -0
- package/.claude/agents/action-planning-agent.md +0 -778
- package/.claude/agents/cli-execution-agent.md +0 -270
- package/.claude/agents/cli-explore-agent.md +0 -182
- package/.claude/agents/cli-lite-planning-agent.md +0 -396
- package/.claude/agents/cli-planning-agent.md +0 -558
- package/.claude/agents/code-developer.md +0 -310
- package/.claude/agents/conceptual-planning-agent.md +0 -308
- package/.claude/agents/context-search-agent.md +0 -582
- package/.claude/agents/doc-generator.md +0 -330
- package/.claude/agents/memory-bridge.md +0 -94
- package/.claude/agents/test-context-search-agent.md +0 -399
- package/.claude/agents/test-fix-agent.md +0 -343
- package/.claude/agents/ui-design-agent.md +0 -593
- package/.claude/agents/universal-executor.md +0 -131
- package/.claude/commands/cli/cli-init.md +0 -440
- package/.claude/commands/enhance-prompt.md +0 -93
- package/.claude/commands/memory/code-map-memory.md +0 -687
- package/.claude/commands/memory/docs-full-cli.md +0 -471
- package/.claude/commands/memory/docs-related-cli.md +0 -386
- package/.claude/commands/memory/docs.md +0 -615
- package/.claude/commands/memory/load-skill-memory.md +0 -182
- package/.claude/commands/memory/load.md +0 -240
- package/.claude/commands/memory/skill-memory.md +0 -525
- package/.claude/commands/memory/style-skill-memory.md +0 -396
- package/.claude/commands/memory/tech-research.md +0 -477
- package/.claude/commands/memory/update-full.md +0 -332
- package/.claude/commands/memory/update-related.md +0 -332
- package/.claude/commands/memory/workflow-skill-memory.md +0 -517
- package/.claude/commands/task/breakdown.md +0 -204
- package/.claude/commands/task/create.md +0 -152
- package/.claude/commands/task/execute.md +0 -270
- package/.claude/commands/task/replan.md +0 -437
- package/.claude/commands/version.md +0 -254
- package/.claude/commands/workflow/action-plan-verify.md +0 -447
- package/.claude/commands/workflow/brainstorm/api-designer.md +0 -585
- package/.claude/commands/workflow/brainstorm/artifacts.md +0 -452
- package/.claude/commands/workflow/brainstorm/auto-parallel.md +0 -443
- package/.claude/commands/workflow/brainstorm/data-architect.md +0 -220
- package/.claude/commands/workflow/brainstorm/product-manager.md +0 -200
- package/.claude/commands/workflow/brainstorm/product-owner.md +0 -200
- package/.claude/commands/workflow/brainstorm/scrum-master.md +0 -200
- package/.claude/commands/workflow/brainstorm/subject-matter-expert.md +0 -200
- package/.claude/commands/workflow/brainstorm/synthesis.md +0 -398
- package/.claude/commands/workflow/brainstorm/system-architect.md +0 -387
- package/.claude/commands/workflow/brainstorm/ui-designer.md +0 -221
- package/.claude/commands/workflow/brainstorm/ux-expert.md +0 -221
- package/.claude/commands/workflow/execute.md +0 -460
- package/.claude/commands/workflow/init.md +0 -164
- package/.claude/commands/workflow/lite-execute.md +0 -686
- package/.claude/commands/workflow/lite-fix.md +0 -621
- package/.claude/commands/workflow/lite-plan.md +0 -592
- package/.claude/commands/workflow/plan.md +0 -551
- package/.claude/commands/workflow/replan.md +0 -515
- package/.claude/commands/workflow/review-fix.md +0 -606
- package/.claude/commands/workflow/review-module-cycle.md +0 -765
- package/.claude/commands/workflow/review-session-cycle.md +0 -776
- package/.claude/commands/workflow/review.md +0 -291
- package/.claude/commands/workflow/session/complete.md +0 -500
- package/.claude/commands/workflow/session/list.md +0 -96
- package/.claude/commands/workflow/session/resume.md +0 -61
- package/.claude/commands/workflow/session/start.md +0 -200
- package/.claude/commands/workflow/tdd-plan.md +0 -460
- package/.claude/commands/workflow/tdd-verify.md +0 -386
- package/.claude/commands/workflow/test-cycle-execute.md +0 -498
- package/.claude/commands/workflow/test-fix-gen.md +0 -699
- package/.claude/commands/workflow/test-gen.md +0 -529
- package/.claude/commands/workflow/tools/conflict-resolution.md +0 -680
- package/.claude/commands/workflow/tools/context-gather.md +0 -434
- package/.claude/commands/workflow/tools/task-generate-agent.md +0 -291
- package/.claude/commands/workflow/tools/task-generate-tdd.md +0 -518
- package/.claude/commands/workflow/tools/tdd-coverage-analysis.md +0 -309
- package/.claude/commands/workflow/tools/test-concept-enhanced.md +0 -163
- package/.claude/commands/workflow/tools/test-context-gather.md +0 -235
- package/.claude/commands/workflow/tools/test-task-generate.md +0 -256
- package/.claude/commands/workflow/ui-design/animation-extract.md +0 -1150
- package/.claude/commands/workflow/ui-design/codify-style.md +0 -652
- package/.claude/commands/workflow/ui-design/design-sync.md +0 -454
- package/.claude/commands/workflow/ui-design/explore-auto.md +0 -678
- package/.claude/commands/workflow/ui-design/generate.md +0 -504
- package/.claude/commands/workflow/ui-design/imitate-auto.md +0 -745
- package/.claude/commands/workflow/ui-design/import-from-code.md +0 -537
- package/.claude/commands/workflow/ui-design/layout-extract.md +0 -788
- package/.claude/commands/workflow/ui-design/reference-page-generator.md +0 -356
- package/.claude/commands/workflow/ui-design/style-extract.md +0 -773
- package/.claude/scripts/classify-folders.sh +0 -39
- package/.claude/scripts/convert_tokens_to_css.sh +0 -229
- package/.claude/scripts/detect_changed_modules.sh +0 -161
- package/.claude/scripts/discover-design-files.sh +0 -87
- package/.claude/scripts/extract-animations.js +0 -243
- package/.claude/scripts/extract-computed-styles.js +0 -118
- package/.claude/scripts/extract-layout-structure.js +0 -411
- package/.claude/scripts/generate_module_docs.sh +0 -717
- package/.claude/scripts/get_modules_by_depth.sh +0 -170
- package/.claude/scripts/ui-generate-preview.sh +0 -395
- package/.claude/scripts/ui-instantiate-prototypes.sh +0 -815
- package/.claude/scripts/update_module_claude.sh +0 -337
- package/.claude/skills/command-guide/SKILL.md +0 -388
- package/.claude/skills/command-guide/UPDATE-GUIDELINE.md +0 -592
- package/.claude/skills/command-guide/guides/cli-tools-guide.md +0 -410
- package/.claude/skills/command-guide/guides/examples.md +0 -537
- package/.claude/skills/command-guide/guides/getting-started.md +0 -242
- package/.claude/skills/command-guide/guides/implementation-details.md +0 -1010
- package/.claude/skills/command-guide/guides/index-structure.md +0 -326
- package/.claude/skills/command-guide/guides/troubleshooting.md +0 -92
- package/.claude/skills/command-guide/guides/ui-design-workflow-guide.md +0 -316
- package/.claude/skills/command-guide/guides/workflow-patterns.md +0 -662
- package/.claude/skills/command-guide/index/all-commands.json +0 -772
- package/.claude/skills/command-guide/index/by-category.json +0 -800
- package/.claude/skills/command-guide/index/by-use-case.json +0 -786
- package/.claude/skills/command-guide/index/command-relationships.json +0 -307
- package/.claude/skills/command-guide/index/essential-commands.json +0 -112
- package/.claude/skills/command-guide/reference/agents/action-planning-agent.md +0 -778
- package/.claude/skills/command-guide/reference/agents/cli-execution-agent.md +0 -270
- package/.claude/skills/command-guide/reference/agents/cli-explore-agent.md +0 -182
- package/.claude/skills/command-guide/reference/agents/cli-lite-planning-agent.md +0 -396
- package/.claude/skills/command-guide/reference/agents/cli-planning-agent.md +0 -558
- package/.claude/skills/command-guide/reference/agents/code-developer.md +0 -310
- package/.claude/skills/command-guide/reference/agents/conceptual-planning-agent.md +0 -308
- package/.claude/skills/command-guide/reference/agents/context-search-agent.md +0 -582
- package/.claude/skills/command-guide/reference/agents/doc-generator.md +0 -330
- package/.claude/skills/command-guide/reference/agents/memory-bridge.md +0 -94
- package/.claude/skills/command-guide/reference/agents/test-context-search-agent.md +0 -399
- package/.claude/skills/command-guide/reference/agents/test-fix-agent.md +0 -343
- package/.claude/skills/command-guide/reference/agents/ui-design-agent.md +0 -593
- package/.claude/skills/command-guide/reference/agents/universal-executor.md +0 -131
- package/.claude/skills/command-guide/reference/commands/cli/cli-init.md +0 -440
- package/.claude/skills/command-guide/reference/commands/enhance-prompt.md +0 -93
- package/.claude/skills/command-guide/reference/commands/memory/code-map-memory.md +0 -687
- package/.claude/skills/command-guide/reference/commands/memory/docs-full-cli.md +0 -471
- package/.claude/skills/command-guide/reference/commands/memory/docs-related-cli.md +0 -386
- package/.claude/skills/command-guide/reference/commands/memory/docs.md +0 -615
- package/.claude/skills/command-guide/reference/commands/memory/load-skill-memory.md +0 -182
- package/.claude/skills/command-guide/reference/commands/memory/load.md +0 -240
- package/.claude/skills/command-guide/reference/commands/memory/skill-memory.md +0 -525
- package/.claude/skills/command-guide/reference/commands/memory/style-skill-memory.md +0 -396
- package/.claude/skills/command-guide/reference/commands/memory/tech-research.md +0 -477
- package/.claude/skills/command-guide/reference/commands/memory/update-full.md +0 -332
- package/.claude/skills/command-guide/reference/commands/memory/update-related.md +0 -332
- package/.claude/skills/command-guide/reference/commands/memory/workflow-skill-memory.md +0 -517
- package/.claude/skills/command-guide/reference/commands/task/breakdown.md +0 -204
- package/.claude/skills/command-guide/reference/commands/task/create.md +0 -152
- package/.claude/skills/command-guide/reference/commands/task/execute.md +0 -270
- package/.claude/skills/command-guide/reference/commands/task/replan.md +0 -437
- package/.claude/skills/command-guide/reference/commands/version.md +0 -254
- package/.claude/skills/command-guide/reference/commands/workflow/action-plan-verify.md +0 -447
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/api-designer.md +0 -585
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/artifacts.md +0 -452
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/auto-parallel.md +0 -443
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/data-architect.md +0 -220
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/product-manager.md +0 -200
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/product-owner.md +0 -200
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/scrum-master.md +0 -200
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/subject-matter-expert.md +0 -200
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/synthesis.md +0 -398
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/system-architect.md +0 -387
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/ui-designer.md +0 -221
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/ux-expert.md +0 -221
- package/.claude/skills/command-guide/reference/commands/workflow/execute.md +0 -460
- package/.claude/skills/command-guide/reference/commands/workflow/init.md +0 -164
- package/.claude/skills/command-guide/reference/commands/workflow/lite-execute.md +0 -686
- package/.claude/skills/command-guide/reference/commands/workflow/lite-fix.md +0 -621
- package/.claude/skills/command-guide/reference/commands/workflow/lite-plan.md +0 -592
- package/.claude/skills/command-guide/reference/commands/workflow/plan.md +0 -551
- package/.claude/skills/command-guide/reference/commands/workflow/replan.md +0 -515
- package/.claude/skills/command-guide/reference/commands/workflow/review-fix.md +0 -606
- package/.claude/skills/command-guide/reference/commands/workflow/review-module-cycle.md +0 -765
- package/.claude/skills/command-guide/reference/commands/workflow/review-session-cycle.md +0 -776
- package/.claude/skills/command-guide/reference/commands/workflow/review.md +0 -291
- package/.claude/skills/command-guide/reference/commands/workflow/session/complete.md +0 -500
- package/.claude/skills/command-guide/reference/commands/workflow/session/list.md +0 -96
- package/.claude/skills/command-guide/reference/commands/workflow/session/resume.md +0 -61
- package/.claude/skills/command-guide/reference/commands/workflow/session/start.md +0 -200
- package/.claude/skills/command-guide/reference/commands/workflow/tdd-plan.md +0 -460
- package/.claude/skills/command-guide/reference/commands/workflow/tdd-verify.md +0 -386
- package/.claude/skills/command-guide/reference/commands/workflow/test-cycle-execute.md +0 -498
- package/.claude/skills/command-guide/reference/commands/workflow/test-fix-gen.md +0 -699
- package/.claude/skills/command-guide/reference/commands/workflow/test-gen.md +0 -529
- package/.claude/skills/command-guide/reference/commands/workflow/tools/conflict-resolution.md +0 -680
- package/.claude/skills/command-guide/reference/commands/workflow/tools/context-gather.md +0 -434
- package/.claude/skills/command-guide/reference/commands/workflow/tools/task-generate-agent.md +0 -291
- package/.claude/skills/command-guide/reference/commands/workflow/tools/task-generate-tdd.md +0 -518
- package/.claude/skills/command-guide/reference/commands/workflow/tools/tdd-coverage-analysis.md +0 -309
- package/.claude/skills/command-guide/reference/commands/workflow/tools/test-concept-enhanced.md +0 -163
- package/.claude/skills/command-guide/reference/commands/workflow/tools/test-context-gather.md +0 -235
- package/.claude/skills/command-guide/reference/commands/workflow/tools/test-task-generate.md +0 -256
- package/.claude/skills/command-guide/reference/commands/workflow/ui-design/animation-extract.md +0 -1150
- package/.claude/skills/command-guide/reference/commands/workflow/ui-design/codify-style.md +0 -652
- package/.claude/skills/command-guide/reference/commands/workflow/ui-design/design-sync.md +0 -454
- package/.claude/skills/command-guide/reference/commands/workflow/ui-design/explore-auto.md +0 -678
- package/.claude/skills/command-guide/reference/commands/workflow/ui-design/generate.md +0 -504
- package/.claude/skills/command-guide/reference/commands/workflow/ui-design/imitate-auto.md +0 -745
- package/.claude/skills/command-guide/reference/commands/workflow/ui-design/import-from-code.md +0 -537
- package/.claude/skills/command-guide/reference/commands/workflow/ui-design/layout-extract.md +0 -788
- package/.claude/skills/command-guide/reference/commands/workflow/ui-design/reference-page-generator.md +0 -356
- package/.claude/skills/command-guide/reference/commands/workflow/ui-design/style-extract.md +0 -773
- package/.claude/skills/command-guide/scripts/analyze_commands.py +0 -502
- package/.claude/skills/command-guide/scripts/update-index.sh +0 -130
- package/.claude/skills/command-guide/templates/issue-bug.md +0 -104
- package/.claude/skills/command-guide/templates/issue-diagnosis.md +0 -275
- package/.claude/skills/command-guide/templates/issue-feature.md +0 -97
- package/.claude/skills/command-guide/templates/issue-question.md +0 -141
- package/.claude/skills/prompt-enhancer/SKILL.md +0 -124
- package/.claude/workflows/_template-compare-matrix.html +0 -692
- package/.claude/workflows/cli-templates/fix-plan-template.json +0 -75
- package/.claude/workflows/cli-templates/fix-progress-template.json +0 -48
- package/.claude/workflows/cli-templates/memory/style-skill-memory/skill-md-template.md +0 -299
- package/.claude/workflows/cli-templates/planning-roles/data-architect.md +0 -120
- package/.claude/workflows/cli-templates/planning-roles/product-manager.md +0 -119
- package/.claude/workflows/cli-templates/planning-roles/product-owner.md +0 -261
- package/.claude/workflows/cli-templates/planning-roles/scrum-master.md +0 -186
- package/.claude/workflows/cli-templates/planning-roles/subject-matter-expert.md +0 -281
- package/.claude/workflows/cli-templates/planning-roles/synthesis-role.md +0 -414
- package/.claude/workflows/cli-templates/planning-roles/system-architect.md +0 -106
- package/.claude/workflows/cli-templates/planning-roles/test-strategist.md +0 -124
- package/.claude/workflows/cli-templates/planning-roles/ui-designer.md +0 -379
- package/.claude/workflows/cli-templates/planning-roles/ux-expert.md +0 -240
- package/.claude/workflows/cli-templates/prompts/analysis/01-diagnose-bug-root-cause.txt +0 -127
- package/.claude/workflows/cli-templates/prompts/analysis/01-trace-code-execution.txt +0 -115
- package/.claude/workflows/cli-templates/prompts/analysis/02-analyze-code-patterns.txt +0 -37
- package/.claude/workflows/cli-templates/prompts/analysis/02-analyze-technical-document.txt +0 -33
- package/.claude/workflows/cli-templates/prompts/analysis/02-review-architecture.txt +0 -29
- package/.claude/workflows/cli-templates/prompts/analysis/02-review-code-quality.txt +0 -28
- package/.claude/workflows/cli-templates/prompts/analysis/03-analyze-performance.txt +0 -29
- package/.claude/workflows/cli-templates/prompts/analysis/03-assess-security-risks.txt +0 -29
- package/.claude/workflows/cli-templates/prompts/analysis/03-review-quality-standards.txt +0 -29
- package/.claude/workflows/cli-templates/prompts/development/02-generate-tests.txt +0 -70
- package/.claude/workflows/cli-templates/prompts/development/02-implement-component-ui.txt +0 -55
- package/.claude/workflows/cli-templates/prompts/development/02-implement-feature.txt +0 -58
- package/.claude/workflows/cli-templates/prompts/development/02-refactor-codebase.txt +0 -55
- package/.claude/workflows/cli-templates/prompts/development/03-debug-runtime-issues.txt +0 -55
- package/.claude/workflows/cli-templates/prompts/documentation/api.txt +0 -15
- package/.claude/workflows/cli-templates/prompts/documentation/folder-navigation.txt +0 -27
- package/.claude/workflows/cli-templates/prompts/documentation/module-readme.txt +0 -49
- package/.claude/workflows/cli-templates/prompts/documentation/project-architecture.txt +0 -41
- package/.claude/workflows/cli-templates/prompts/documentation/project-examples.txt +0 -35
- package/.claude/workflows/cli-templates/prompts/documentation/project-readme.txt +0 -35
- package/.claude/workflows/cli-templates/prompts/memory/02-document-module-structure.txt +0 -165
- package/.claude/workflows/cli-templates/prompts/planning/01-plan-architecture-design.txt +0 -109
- package/.claude/workflows/cli-templates/prompts/planning/02-breakdown-task-steps.txt +0 -30
- package/.claude/workflows/cli-templates/prompts/planning/02-design-component-spec.txt +0 -28
- package/.claude/workflows/cli-templates/prompts/planning/03-evaluate-concept-feasibility.txt +0 -127
- package/.claude/workflows/cli-templates/prompts/planning/03-plan-migration-strategy.txt +0 -30
- package/.claude/workflows/cli-templates/prompts/tech/tech-module-format.txt +0 -359
- package/.claude/workflows/cli-templates/prompts/tech/tech-skill-index.txt +0 -185
- package/.claude/workflows/cli-templates/prompts/test/test-concept-analysis.txt +0 -179
- package/.claude/workflows/cli-templates/prompts/universal/00-universal-creative-style.txt +0 -95
- package/.claude/workflows/cli-templates/prompts/universal/00-universal-rigorous-style.txt +0 -92
- package/.claude/workflows/cli-templates/prompts/verification/codex-technical.txt +0 -28
- package/.claude/workflows/cli-templates/prompts/verification/cross-validation.txt +0 -28
- package/.claude/workflows/cli-templates/prompts/verification/gemini-strategic.txt +0 -27
- package/.claude/workflows/cli-templates/prompts/workflow/analysis-results-structure.txt +0 -224
- package/.claude/workflows/cli-templates/prompts/workflow/codex-feasibility-validation.txt +0 -176
- package/.claude/workflows/cli-templates/prompts/workflow/gemini-solution-design.txt +0 -131
- package/.claude/workflows/cli-templates/prompts/workflow/impl-plan-template.txt +0 -286
- package/.claude/workflows/cli-templates/prompts/workflow/skill-aggregation.txt +0 -172
- package/.claude/workflows/cli-templates/prompts/workflow/skill-conflict-patterns.txt +0 -98
- package/.claude/workflows/cli-templates/prompts/workflow/skill-index.txt +0 -224
- package/.claude/workflows/cli-templates/prompts/workflow/skill-lessons-learned.txt +0 -98
- package/.claude/workflows/cli-templates/prompts/workflow/skill-sessions-timeline.txt +0 -53
- package/.claude/workflows/cli-templates/prompts/workflow/task-json-agent-mode.txt +0 -123
- package/.claude/workflows/cli-templates/prompts/workflow/task-json-cli-mode.txt +0 -182
- package/.claude/workflows/cli-templates/schemas/diagnosis-json-schema.json +0 -234
- package/.claude/workflows/cli-templates/schemas/explore-json-schema.json +0 -124
- package/.claude/workflows/cli-templates/schemas/fix-plan-json-schema.json +0 -273
- package/.claude/workflows/cli-templates/schemas/plan-json-schema.json +0 -219
- package/.claude/workflows/cli-templates/schemas/project-json-schema.json +0 -221
- package/.claude/workflows/cli-templates/schemas/review-deep-dive-results-schema.json +0 -82
- package/.claude/workflows/cli-templates/schemas/review-dimension-results-schema.json +0 -51
- package/.claude/workflows/cli-templates/tech-stacks/go-dev.md +0 -91
- package/.claude/workflows/cli-templates/tech-stacks/java-dev.md +0 -107
- package/.claude/workflows/cli-templates/tech-stacks/javascript-dev.md +0 -58
- package/.claude/workflows/cli-templates/tech-stacks/python-dev.md +0 -79
- package/.claude/workflows/cli-templates/tech-stacks/react-dev.md +0 -103
- package/.claude/workflows/cli-templates/tech-stacks/typescript-dev.md +0 -83
- package/.claude/workflows/cli-templates/ui-design/systems/animation-tokens.json +0 -247
- package/.claude/workflows/cli-templates/ui-design/systems/design-tokens.json +0 -342
- package/.claude/workflows/cli-templates/ui-design/systems/layout-templates.json +0 -145
- package/.claude/workflows/context-search-strategy.md +0 -77
- package/.claude/workflows/intelligent-tools-strategy.md +0 -662
- package/.claude/workflows/review-directory-specification.md +0 -336
- package/.claude/workflows/task-core.md +0 -214
- package/.claude/workflows/tool-strategy.md +0 -79
- package/.claude/workflows/workflow-architecture.md +0 -942
- package/.codex/AGENTS.md +0 -330
- package/.gemini/GEMINI.md +0 -164
- package/.qwen/QWEN.md +0 -164
- package/CLAUDE.md +0 -91
- package/LICENSE +0 -21
- package/ccw/README.md +0 -121
- package/ccw/bin/ccw.js +0 -10
- package/ccw/package.json +0 -47
- package/ccw/src/cli.js +0 -119
- package/ccw/src/commands/install.js +0 -324
- package/ccw/src/commands/list.js +0 -37
- package/ccw/src/commands/serve.js +0 -67
- package/ccw/src/commands/stop.js +0 -101
- package/ccw/src/commands/tool.js +0 -138
- package/ccw/src/commands/uninstall.js +0 -238
- package/ccw/src/commands/upgrade.js +0 -307
- package/ccw/src/commands/view.js +0 -105
- package/ccw/src/core/dashboard-generator-patch.js +0 -29
- package/ccw/src/core/dashboard-generator.js +0 -682
- package/ccw/src/core/data-aggregator.js +0 -409
- package/ccw/src/core/lite-scanner.js +0 -314
- package/ccw/src/core/manifest.js +0 -201
- package/ccw/src/core/server.js +0 -2063
- package/ccw/src/core/session-scanner.js +0 -235
- package/ccw/src/index.js +0 -9
- package/ccw/src/templates/dashboard-css/01-base.css +0 -291
- package/ccw/src/templates/dashboard-css/02-session.css +0 -726
- package/ccw/src/templates/dashboard-css/04-lite-tasks.css +0 -843
- package/ccw/src/templates/dashboard-css/06-cards.css +0 -1570
- package/ccw/src/templates/dashboard-css/07-managers.css +0 -936
- package/ccw/src/templates/dashboard-css/09-explorer.css +0 -1397
- package/ccw/src/templates/dashboard-js/api.js +0 -200
- package/ccw/src/templates/dashboard-js/components/carousel.js +0 -398
- package/ccw/src/templates/dashboard-js/components/global-notifications.js +0 -219
- package/ccw/src/templates/dashboard-js/components/hook-manager.js +0 -283
- package/ccw/src/templates/dashboard-js/components/mcp-manager.js +0 -528
- package/ccw/src/templates/dashboard-js/components/modals.js +0 -260
- package/ccw/src/templates/dashboard-js/components/navigation.js +0 -245
- package/ccw/src/templates/dashboard-js/components/notifications.js +0 -194
- package/ccw/src/templates/dashboard-js/components/tabs-other.js +0 -273
- package/ccw/src/templates/dashboard-js/main.js +0 -72
- package/ccw/src/templates/dashboard-js/state.js +0 -42
- package/ccw/src/templates/dashboard-js/utils.js +0 -153
- package/ccw/src/templates/dashboard-js/views/explorer.js +0 -852
- package/ccw/src/templates/dashboard-js/views/home.js +0 -197
- package/ccw/src/templates/dashboard-js/views/hook-manager.js +0 -392
- package/ccw/src/templates/dashboard-js/views/lite-tasks.js +0 -395
- package/ccw/src/templates/dashboard-js/views/mcp-manager.js +0 -411
- package/ccw/src/templates/dashboard-js/views/session-detail.js +0 -780
- package/ccw/src/templates/dashboard.html +0 -731
- package/ccw/src/tools/classify-folders.js +0 -204
- package/ccw/src/tools/convert-tokens-to-css.js +0 -250
- package/ccw/src/tools/detect-changed-modules.js +0 -288
- package/ccw/src/tools/discover-design-files.js +0 -134
- package/ccw/src/tools/edit-file.js +0 -266
- package/ccw/src/tools/generate-module-docs.js +0 -416
- package/ccw/src/tools/get-modules-by-depth.js +0 -308
- package/ccw/src/tools/index.js +0 -176
- package/ccw/src/utils/browser-launcher.js +0 -60
- package/ccw/src/utils/file-utils.js +0 -48
- package/ccw/src/utils/path-resolver.js +0 -279
- package/ccw/src/utils/ui.js +0 -148
- /package/{ccw/src → src}/templates/dashboard-css/03-tasks.css +0 -0
- /package/{ccw/src → src}/templates/dashboard-css/05-context.css +0 -0
- /package/{ccw/src → src}/templates/dashboard-css/08-review.css +0 -0
- /package/{ccw/src → src}/templates/dashboard-js/components/_conflict_tab.js +0 -0
- /package/{ccw/src → src}/templates/dashboard-js/components/_exp_helpers.js +0 -0
- /package/{ccw/src → src}/templates/dashboard-js/components/_review_tab.js +0 -0
- /package/{ccw/src → src}/templates/dashboard-js/components/flowchart.js +0 -0
- /package/{ccw/src → src}/templates/dashboard-js/components/sidebar.js +0 -0
- /package/{ccw/src → src}/templates/dashboard-js/components/tabs-context.js +0 -0
- /package/{ccw/src → src}/templates/dashboard-js/components/task-drawer-core.js +0 -0
- /package/{ccw/src → src}/templates/dashboard-js/components/task-drawer-renderers.js +0 -0
- /package/{ccw/src → src}/templates/dashboard-js/components/theme.js +0 -0
- /package/{ccw/src → src}/templates/dashboard-js/components/version-check.js +0 -0
- /package/{ccw/src → src}/templates/dashboard-js/views/fix-session.js +0 -0
- /package/{ccw/src → src}/templates/dashboard-js/views/project-overview.js +0 -0
- /package/{ccw/src → src}/templates/dashboard-js/views/review-session.js +0 -0
- /package/{ccw/src → src}/templates/review-cycle-dashboard.html +0 -0
- /package/{ccw/src → src}/templates/workflow-dashboard.html +0 -0
- /package/{ccw/src → src}/tools/ui-generate-preview.js +0 -0
- /package/{ccw/src → src}/tools/ui-instantiate-prototypes.js +0 -0
- /package/{ccw/src → src}/tools/update-module-claude.js +0 -0
|
@@ -0,0 +1,916 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI History Store - SQLite Storage Backend
|
|
3
|
+
* Provides persistent storage for CLI execution history with efficient queries
|
|
4
|
+
*/
|
|
5
|
+
import Database from 'better-sqlite3';
|
|
6
|
+
import { existsSync, readdirSync, readFileSync, statSync } from 'fs';
|
|
7
|
+
import { join } from 'path';
|
|
8
|
+
import { parseSessionFile, formatConversation, extractConversationPairs } from './session-content-parser.js';
|
|
9
|
+
import { StoragePaths, ensureStorageDir, getProjectId } from '../config/storage-paths.js';
|
|
10
|
+
/**
|
|
11
|
+
* CLI History Store using SQLite
|
|
12
|
+
*/
|
|
13
|
+
export class CliHistoryStore {
|
|
14
|
+
db;
|
|
15
|
+
dbPath;
|
|
16
|
+
projectPath;
|
|
17
|
+
constructor(baseDir) {
|
|
18
|
+
this.projectPath = baseDir;
|
|
19
|
+
// Use centralized storage path
|
|
20
|
+
const paths = StoragePaths.project(baseDir);
|
|
21
|
+
const historyDir = paths.cliHistory;
|
|
22
|
+
ensureStorageDir(historyDir);
|
|
23
|
+
this.dbPath = paths.historyDb;
|
|
24
|
+
this.db = new Database(this.dbPath);
|
|
25
|
+
this.db.pragma('journal_mode = WAL');
|
|
26
|
+
this.db.pragma('synchronous = NORMAL');
|
|
27
|
+
this.initSchema();
|
|
28
|
+
this.migrateFromJson(historyDir);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Initialize database schema
|
|
32
|
+
*/
|
|
33
|
+
initSchema() {
|
|
34
|
+
this.db.exec(`
|
|
35
|
+
-- Conversations table (conversation metadata)
|
|
36
|
+
CREATE TABLE IF NOT EXISTS conversations (
|
|
37
|
+
id TEXT PRIMARY KEY,
|
|
38
|
+
created_at TEXT NOT NULL,
|
|
39
|
+
updated_at TEXT NOT NULL,
|
|
40
|
+
tool TEXT NOT NULL,
|
|
41
|
+
model TEXT DEFAULT 'default',
|
|
42
|
+
mode TEXT DEFAULT 'analysis',
|
|
43
|
+
category TEXT DEFAULT 'user',
|
|
44
|
+
total_duration_ms INTEGER DEFAULT 0,
|
|
45
|
+
turn_count INTEGER DEFAULT 0,
|
|
46
|
+
latest_status TEXT DEFAULT 'success',
|
|
47
|
+
prompt_preview TEXT,
|
|
48
|
+
parent_execution_id TEXT,
|
|
49
|
+
FOREIGN KEY (parent_execution_id) REFERENCES conversations(id) ON DELETE SET NULL
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
-- Turns table (individual conversation turns)
|
|
53
|
+
CREATE TABLE IF NOT EXISTS turns (
|
|
54
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
55
|
+
conversation_id TEXT NOT NULL,
|
|
56
|
+
turn_number INTEGER NOT NULL,
|
|
57
|
+
timestamp TEXT NOT NULL,
|
|
58
|
+
prompt TEXT NOT NULL,
|
|
59
|
+
duration_ms INTEGER DEFAULT 0,
|
|
60
|
+
status TEXT DEFAULT 'success',
|
|
61
|
+
exit_code INTEGER,
|
|
62
|
+
stdout TEXT,
|
|
63
|
+
stderr TEXT,
|
|
64
|
+
truncated INTEGER DEFAULT 0,
|
|
65
|
+
FOREIGN KEY (conversation_id) REFERENCES conversations(id) ON DELETE CASCADE,
|
|
66
|
+
UNIQUE(conversation_id, turn_number)
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
-- Indexes for efficient queries
|
|
70
|
+
CREATE INDEX IF NOT EXISTS idx_conversations_tool ON conversations(tool);
|
|
71
|
+
CREATE INDEX IF NOT EXISTS idx_conversations_status ON conversations(latest_status);
|
|
72
|
+
CREATE INDEX IF NOT EXISTS idx_conversations_category ON conversations(category);
|
|
73
|
+
CREATE INDEX IF NOT EXISTS idx_conversations_updated ON conversations(updated_at DESC);
|
|
74
|
+
CREATE INDEX IF NOT EXISTS idx_conversations_created ON conversations(created_at DESC);
|
|
75
|
+
CREATE INDEX IF NOT EXISTS idx_turns_conversation ON turns(conversation_id);
|
|
76
|
+
|
|
77
|
+
-- Full-text search for prompts
|
|
78
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS turns_fts USING fts5(
|
|
79
|
+
prompt,
|
|
80
|
+
stdout,
|
|
81
|
+
content='turns',
|
|
82
|
+
content_rowid='id'
|
|
83
|
+
);
|
|
84
|
+
|
|
85
|
+
-- Triggers to keep FTS index updated
|
|
86
|
+
CREATE TRIGGER IF NOT EXISTS turns_ai AFTER INSERT ON turns BEGIN
|
|
87
|
+
INSERT INTO turns_fts(rowid, prompt, stdout) VALUES (new.id, new.prompt, new.stdout);
|
|
88
|
+
END;
|
|
89
|
+
|
|
90
|
+
CREATE TRIGGER IF NOT EXISTS turns_ad AFTER DELETE ON turns BEGIN
|
|
91
|
+
INSERT INTO turns_fts(turns_fts, rowid, prompt, stdout) VALUES('delete', old.id, old.prompt, old.stdout);
|
|
92
|
+
END;
|
|
93
|
+
|
|
94
|
+
CREATE TRIGGER IF NOT EXISTS turns_au AFTER UPDATE ON turns BEGIN
|
|
95
|
+
INSERT INTO turns_fts(turns_fts, rowid, prompt, stdout) VALUES('delete', old.id, old.prompt, old.stdout);
|
|
96
|
+
INSERT INTO turns_fts(rowid, prompt, stdout) VALUES (new.id, new.prompt, new.stdout);
|
|
97
|
+
END;
|
|
98
|
+
|
|
99
|
+
-- Native session mapping table (CCW ID <-> Native Session ID)
|
|
100
|
+
CREATE TABLE IF NOT EXISTS native_session_mapping (
|
|
101
|
+
ccw_id TEXT PRIMARY KEY,
|
|
102
|
+
tool TEXT NOT NULL,
|
|
103
|
+
native_session_id TEXT NOT NULL,
|
|
104
|
+
native_session_path TEXT,
|
|
105
|
+
project_hash TEXT,
|
|
106
|
+
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
107
|
+
UNIQUE(tool, native_session_id)
|
|
108
|
+
);
|
|
109
|
+
|
|
110
|
+
-- Indexes for native session lookups
|
|
111
|
+
CREATE INDEX IF NOT EXISTS idx_native_tool_session ON native_session_mapping(tool, native_session_id);
|
|
112
|
+
CREATE INDEX IF NOT EXISTS idx_native_session_id ON native_session_mapping(native_session_id);
|
|
113
|
+
|
|
114
|
+
-- Insights analysis history table
|
|
115
|
+
CREATE TABLE IF NOT EXISTS insights (
|
|
116
|
+
id TEXT PRIMARY KEY,
|
|
117
|
+
created_at TEXT NOT NULL,
|
|
118
|
+
tool TEXT NOT NULL,
|
|
119
|
+
prompt_count INTEGER DEFAULT 0,
|
|
120
|
+
patterns TEXT,
|
|
121
|
+
suggestions TEXT,
|
|
122
|
+
raw_output TEXT,
|
|
123
|
+
execution_id TEXT,
|
|
124
|
+
lang TEXT DEFAULT 'en'
|
|
125
|
+
);
|
|
126
|
+
|
|
127
|
+
CREATE INDEX IF NOT EXISTS idx_insights_created ON insights(created_at DESC);
|
|
128
|
+
CREATE INDEX IF NOT EXISTS idx_insights_tool ON insights(tool);
|
|
129
|
+
|
|
130
|
+
-- Reviews table for CLI execution reviews
|
|
131
|
+
CREATE TABLE IF NOT EXISTS reviews (
|
|
132
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
133
|
+
execution_id TEXT NOT NULL UNIQUE,
|
|
134
|
+
status TEXT NOT NULL DEFAULT 'pending',
|
|
135
|
+
rating INTEGER,
|
|
136
|
+
comments TEXT,
|
|
137
|
+
reviewer TEXT,
|
|
138
|
+
created_at TEXT NOT NULL,
|
|
139
|
+
updated_at TEXT NOT NULL,
|
|
140
|
+
FOREIGN KEY (execution_id) REFERENCES conversations(id) ON DELETE CASCADE
|
|
141
|
+
);
|
|
142
|
+
|
|
143
|
+
CREATE INDEX IF NOT EXISTS idx_reviews_execution ON reviews(execution_id);
|
|
144
|
+
CREATE INDEX IF NOT EXISTS idx_reviews_status ON reviews(status);
|
|
145
|
+
CREATE INDEX IF NOT EXISTS idx_reviews_created ON reviews(created_at DESC);
|
|
146
|
+
`);
|
|
147
|
+
// Migration: Add category column if not exists (for existing databases)
|
|
148
|
+
this.migrateSchema();
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Migrate schema for existing databases
|
|
152
|
+
*/
|
|
153
|
+
migrateSchema() {
|
|
154
|
+
try {
|
|
155
|
+
// Check if columns exist
|
|
156
|
+
const tableInfo = this.db.prepare('PRAGMA table_info(conversations)').all();
|
|
157
|
+
const hasCategory = tableInfo.some(col => col.name === 'category');
|
|
158
|
+
const hasParentExecutionId = tableInfo.some(col => col.name === 'parent_execution_id');
|
|
159
|
+
const hasProjectRoot = tableInfo.some(col => col.name === 'project_root');
|
|
160
|
+
const hasRelativePath = tableInfo.some(col => col.name === 'relative_path');
|
|
161
|
+
if (!hasCategory) {
|
|
162
|
+
console.log('[CLI History] Migrating database: adding category column...');
|
|
163
|
+
this.db.exec(`
|
|
164
|
+
ALTER TABLE conversations ADD COLUMN category TEXT DEFAULT 'user';
|
|
165
|
+
`);
|
|
166
|
+
// Create index separately to handle potential errors
|
|
167
|
+
try {
|
|
168
|
+
this.db.exec(`CREATE INDEX IF NOT EXISTS idx_conversations_category ON conversations(category);`);
|
|
169
|
+
}
|
|
170
|
+
catch (indexErr) {
|
|
171
|
+
console.warn('[CLI History] Category index creation warning:', indexErr.message);
|
|
172
|
+
}
|
|
173
|
+
console.log('[CLI History] Migration complete: category column added');
|
|
174
|
+
}
|
|
175
|
+
if (!hasParentExecutionId) {
|
|
176
|
+
console.log('[CLI History] Migrating database: adding parent_execution_id column...');
|
|
177
|
+
this.db.exec(`
|
|
178
|
+
ALTER TABLE conversations ADD COLUMN parent_execution_id TEXT;
|
|
179
|
+
`);
|
|
180
|
+
try {
|
|
181
|
+
this.db.exec(`CREATE INDEX IF NOT EXISTS idx_conversations_parent ON conversations(parent_execution_id);`);
|
|
182
|
+
}
|
|
183
|
+
catch (indexErr) {
|
|
184
|
+
console.warn('[CLI History] Parent execution index creation warning:', indexErr.message);
|
|
185
|
+
}
|
|
186
|
+
console.log('[CLI History] Migration complete: parent_execution_id column added');
|
|
187
|
+
}
|
|
188
|
+
// Add hierarchical storage support columns
|
|
189
|
+
if (!hasProjectRoot) {
|
|
190
|
+
console.log('[CLI History] Migrating database: adding project_root column for hierarchical storage...');
|
|
191
|
+
this.db.exec(`
|
|
192
|
+
ALTER TABLE conversations ADD COLUMN project_root TEXT;
|
|
193
|
+
`);
|
|
194
|
+
try {
|
|
195
|
+
this.db.exec(`CREATE INDEX IF NOT EXISTS idx_conversations_project_root ON conversations(project_root);`);
|
|
196
|
+
}
|
|
197
|
+
catch (indexErr) {
|
|
198
|
+
console.warn('[CLI History] Project root index creation warning:', indexErr.message);
|
|
199
|
+
}
|
|
200
|
+
console.log('[CLI History] Migration complete: project_root column added');
|
|
201
|
+
}
|
|
202
|
+
if (!hasRelativePath) {
|
|
203
|
+
console.log('[CLI History] Migrating database: adding relative_path column for hierarchical storage...');
|
|
204
|
+
this.db.exec(`
|
|
205
|
+
ALTER TABLE conversations ADD COLUMN relative_path TEXT;
|
|
206
|
+
`);
|
|
207
|
+
console.log('[CLI History] Migration complete: relative_path column added');
|
|
208
|
+
}
|
|
209
|
+
// Add missing timestamp index for turns table (for time-based queries)
|
|
210
|
+
try {
|
|
211
|
+
const indexExists = this.db.prepare(`
|
|
212
|
+
SELECT name FROM sqlite_master
|
|
213
|
+
WHERE type='index' AND name='idx_turns_timestamp'
|
|
214
|
+
`).get();
|
|
215
|
+
if (!indexExists) {
|
|
216
|
+
console.log('[CLI History] Adding missing timestamp index to turns table...');
|
|
217
|
+
this.db.exec(`CREATE INDEX IF NOT EXISTS idx_turns_timestamp ON turns(timestamp DESC);`);
|
|
218
|
+
console.log('[CLI History] Migration complete: turns timestamp index added');
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
catch (indexErr) {
|
|
222
|
+
console.warn('[CLI History] Turns timestamp index creation warning:', indexErr.message);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
catch (err) {
|
|
226
|
+
console.error('[CLI History] Migration error:', err.message);
|
|
227
|
+
// Don't throw - allow the store to continue working with existing schema
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Migrate existing JSON files to SQLite
|
|
232
|
+
*/
|
|
233
|
+
migrateFromJson(historyDir) {
|
|
234
|
+
const migrationMarker = join(historyDir, '.migrated');
|
|
235
|
+
if (existsSync(migrationMarker)) {
|
|
236
|
+
return; // Already migrated
|
|
237
|
+
}
|
|
238
|
+
// Find all date directories
|
|
239
|
+
const dateDirs = readdirSync(historyDir).filter(d => {
|
|
240
|
+
const dirPath = join(historyDir, d);
|
|
241
|
+
return statSync(dirPath).isDirectory() && /^\d{4}-\d{2}-\d{2}$/.test(d);
|
|
242
|
+
});
|
|
243
|
+
let migratedCount = 0;
|
|
244
|
+
for (const dateDir of dateDirs) {
|
|
245
|
+
const dirPath = join(historyDir, dateDir);
|
|
246
|
+
const files = readdirSync(dirPath).filter(f => f.endsWith('.json'));
|
|
247
|
+
for (const file of files) {
|
|
248
|
+
try {
|
|
249
|
+
const filePath = join(dirPath, file);
|
|
250
|
+
const data = JSON.parse(readFileSync(filePath, 'utf8'));
|
|
251
|
+
// Convert to conversation record if legacy format
|
|
252
|
+
const conversation = this.normalizeRecord(data);
|
|
253
|
+
this.saveConversation(conversation);
|
|
254
|
+
migratedCount++;
|
|
255
|
+
// Optionally delete the JSON file after migration
|
|
256
|
+
// unlinkSync(filePath);
|
|
257
|
+
}
|
|
258
|
+
catch (err) {
|
|
259
|
+
console.error(`Failed to migrate ${file}:`, err.message);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
// Create migration marker
|
|
264
|
+
if (migratedCount > 0) {
|
|
265
|
+
require('fs').writeFileSync(migrationMarker, new Date().toISOString());
|
|
266
|
+
console.log(`[CLI History] Migrated ${migratedCount} records to SQLite`);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Normalize legacy record to ConversationRecord format
|
|
271
|
+
*/
|
|
272
|
+
normalizeRecord(data) {
|
|
273
|
+
if (data.turns && Array.isArray(data.turns)) {
|
|
274
|
+
return data;
|
|
275
|
+
}
|
|
276
|
+
// Legacy single execution format
|
|
277
|
+
return {
|
|
278
|
+
id: data.id,
|
|
279
|
+
created_at: data.timestamp,
|
|
280
|
+
updated_at: data.timestamp,
|
|
281
|
+
tool: data.tool,
|
|
282
|
+
model: data.model || 'default',
|
|
283
|
+
mode: data.mode || 'analysis',
|
|
284
|
+
category: data.category || 'user',
|
|
285
|
+
total_duration_ms: data.duration_ms || 0,
|
|
286
|
+
turn_count: 1,
|
|
287
|
+
latest_status: data.status || 'success',
|
|
288
|
+
turns: [{
|
|
289
|
+
turn: 1,
|
|
290
|
+
timestamp: data.timestamp,
|
|
291
|
+
prompt: data.prompt,
|
|
292
|
+
duration_ms: data.duration_ms || 0,
|
|
293
|
+
status: data.status || 'success',
|
|
294
|
+
exit_code: data.exit_code,
|
|
295
|
+
output: data.output || { stdout: '', stderr: '', truncated: false }
|
|
296
|
+
}]
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Save or update a conversation
|
|
301
|
+
*/
|
|
302
|
+
saveConversation(conversation) {
|
|
303
|
+
const promptPreview = conversation.turns.length > 0
|
|
304
|
+
? conversation.turns[conversation.turns.length - 1].prompt.substring(0, 100)
|
|
305
|
+
: '';
|
|
306
|
+
const upsertConversation = this.db.prepare(`
|
|
307
|
+
INSERT INTO conversations (id, created_at, updated_at, tool, model, mode, category, total_duration_ms, turn_count, latest_status, prompt_preview, parent_execution_id, project_root, relative_path)
|
|
308
|
+
VALUES (@id, @created_at, @updated_at, @tool, @model, @mode, @category, @total_duration_ms, @turn_count, @latest_status, @prompt_preview, @parent_execution_id, @project_root, @relative_path)
|
|
309
|
+
ON CONFLICT(id) DO UPDATE SET
|
|
310
|
+
updated_at = @updated_at,
|
|
311
|
+
total_duration_ms = @total_duration_ms,
|
|
312
|
+
turn_count = @turn_count,
|
|
313
|
+
latest_status = @latest_status,
|
|
314
|
+
prompt_preview = @prompt_preview,
|
|
315
|
+
project_root = @project_root,
|
|
316
|
+
relative_path = @relative_path
|
|
317
|
+
`);
|
|
318
|
+
const upsertTurn = this.db.prepare(`
|
|
319
|
+
INSERT INTO turns (conversation_id, turn_number, timestamp, prompt, duration_ms, status, exit_code, stdout, stderr, truncated)
|
|
320
|
+
VALUES (@conversation_id, @turn_number, @timestamp, @prompt, @duration_ms, @status, @exit_code, @stdout, @stderr, @truncated)
|
|
321
|
+
ON CONFLICT(conversation_id, turn_number) DO UPDATE SET
|
|
322
|
+
timestamp = @timestamp,
|
|
323
|
+
prompt = @prompt,
|
|
324
|
+
duration_ms = @duration_ms,
|
|
325
|
+
status = @status,
|
|
326
|
+
exit_code = @exit_code,
|
|
327
|
+
stdout = @stdout,
|
|
328
|
+
stderr = @stderr,
|
|
329
|
+
truncated = @truncated
|
|
330
|
+
`);
|
|
331
|
+
const transaction = this.db.transaction(() => {
|
|
332
|
+
upsertConversation.run({
|
|
333
|
+
id: conversation.id,
|
|
334
|
+
created_at: conversation.created_at,
|
|
335
|
+
updated_at: conversation.updated_at,
|
|
336
|
+
tool: conversation.tool,
|
|
337
|
+
model: conversation.model,
|
|
338
|
+
mode: conversation.mode,
|
|
339
|
+
category: conversation.category || 'user',
|
|
340
|
+
total_duration_ms: conversation.total_duration_ms,
|
|
341
|
+
turn_count: conversation.turn_count,
|
|
342
|
+
latest_status: conversation.latest_status,
|
|
343
|
+
prompt_preview: promptPreview,
|
|
344
|
+
parent_execution_id: conversation.parent_execution_id || null,
|
|
345
|
+
project_root: this.projectPath,
|
|
346
|
+
relative_path: null // For future hierarchical tracking
|
|
347
|
+
});
|
|
348
|
+
for (const turn of conversation.turns) {
|
|
349
|
+
upsertTurn.run({
|
|
350
|
+
conversation_id: conversation.id,
|
|
351
|
+
turn_number: turn.turn,
|
|
352
|
+
timestamp: turn.timestamp,
|
|
353
|
+
prompt: turn.prompt,
|
|
354
|
+
duration_ms: turn.duration_ms,
|
|
355
|
+
status: turn.status,
|
|
356
|
+
exit_code: turn.exit_code,
|
|
357
|
+
stdout: turn.output.stdout,
|
|
358
|
+
stderr: turn.output.stderr,
|
|
359
|
+
truncated: turn.output.truncated ? 1 : 0
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
});
|
|
363
|
+
transaction();
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Get conversation by ID
|
|
367
|
+
*/
|
|
368
|
+
getConversation(id) {
|
|
369
|
+
const conv = this.db.prepare(`
|
|
370
|
+
SELECT * FROM conversations WHERE id = ?
|
|
371
|
+
`).get(id);
|
|
372
|
+
if (!conv)
|
|
373
|
+
return null;
|
|
374
|
+
const turns = this.db.prepare(`
|
|
375
|
+
SELECT * FROM turns WHERE conversation_id = ? ORDER BY turn_number ASC
|
|
376
|
+
`).all(id);
|
|
377
|
+
return {
|
|
378
|
+
id: conv.id,
|
|
379
|
+
created_at: conv.created_at,
|
|
380
|
+
updated_at: conv.updated_at,
|
|
381
|
+
tool: conv.tool,
|
|
382
|
+
model: conv.model,
|
|
383
|
+
mode: conv.mode,
|
|
384
|
+
category: conv.category || 'user',
|
|
385
|
+
total_duration_ms: conv.total_duration_ms,
|
|
386
|
+
turn_count: conv.turn_count,
|
|
387
|
+
latest_status: conv.latest_status,
|
|
388
|
+
parent_execution_id: conv.parent_execution_id || undefined,
|
|
389
|
+
turns: turns.map(t => ({
|
|
390
|
+
turn: t.turn_number,
|
|
391
|
+
timestamp: t.timestamp,
|
|
392
|
+
prompt: t.prompt,
|
|
393
|
+
duration_ms: t.duration_ms,
|
|
394
|
+
status: t.status,
|
|
395
|
+
exit_code: t.exit_code,
|
|
396
|
+
output: {
|
|
397
|
+
stdout: t.stdout || '',
|
|
398
|
+
stderr: t.stderr || '',
|
|
399
|
+
truncated: !!t.truncated
|
|
400
|
+
}
|
|
401
|
+
}))
|
|
402
|
+
};
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* Get conversation with native session info
|
|
406
|
+
*/
|
|
407
|
+
getConversationWithNativeInfo(id) {
|
|
408
|
+
const conv = this.getConversation(id);
|
|
409
|
+
if (!conv)
|
|
410
|
+
return null;
|
|
411
|
+
const mapping = this.getNativeSessionMapping(id);
|
|
412
|
+
return {
|
|
413
|
+
...conv,
|
|
414
|
+
hasNativeSession: !!mapping,
|
|
415
|
+
nativeSessionId: mapping?.native_session_id,
|
|
416
|
+
nativeSessionPath: mapping?.native_session_path
|
|
417
|
+
};
|
|
418
|
+
}
|
|
419
|
+
/**
|
|
420
|
+
* Query execution history
|
|
421
|
+
*/
|
|
422
|
+
getHistory(options = {}) {
|
|
423
|
+
const { limit = 50, offset = 0, tool, status, category, search, startDate, endDate } = options;
|
|
424
|
+
let whereClause = '1=1';
|
|
425
|
+
const params = {};
|
|
426
|
+
if (tool) {
|
|
427
|
+
whereClause += ' AND tool = @tool';
|
|
428
|
+
params.tool = tool;
|
|
429
|
+
}
|
|
430
|
+
if (status) {
|
|
431
|
+
whereClause += ' AND latest_status = @status';
|
|
432
|
+
params.status = status;
|
|
433
|
+
}
|
|
434
|
+
if (category) {
|
|
435
|
+
whereClause += ' AND category = @category';
|
|
436
|
+
params.category = category;
|
|
437
|
+
}
|
|
438
|
+
if (startDate) {
|
|
439
|
+
whereClause += ' AND created_at >= @startDate';
|
|
440
|
+
params.startDate = startDate;
|
|
441
|
+
}
|
|
442
|
+
if (endDate) {
|
|
443
|
+
whereClause += ' AND created_at <= @endDate';
|
|
444
|
+
params.endDate = endDate;
|
|
445
|
+
}
|
|
446
|
+
// Full-text search
|
|
447
|
+
let joinClause = '';
|
|
448
|
+
if (search) {
|
|
449
|
+
joinClause = `
|
|
450
|
+
INNER JOIN (
|
|
451
|
+
SELECT DISTINCT conversation_id FROM turns t
|
|
452
|
+
INNER JOIN turns_fts ON turns_fts.rowid = t.id
|
|
453
|
+
WHERE turns_fts MATCH @search
|
|
454
|
+
) AS matched ON c.id = matched.conversation_id
|
|
455
|
+
`;
|
|
456
|
+
params.search = search;
|
|
457
|
+
}
|
|
458
|
+
const countQuery = this.db.prepare(`
|
|
459
|
+
SELECT COUNT(*) as count FROM conversations c ${joinClause} WHERE ${whereClause}
|
|
460
|
+
`);
|
|
461
|
+
const total = countQuery.get(params).count;
|
|
462
|
+
const dataQuery = this.db.prepare(`
|
|
463
|
+
SELECT c.* FROM conversations c ${joinClause}
|
|
464
|
+
WHERE ${whereClause}
|
|
465
|
+
ORDER BY c.updated_at DESC
|
|
466
|
+
LIMIT @limit OFFSET @offset
|
|
467
|
+
`);
|
|
468
|
+
const rows = dataQuery.all({ ...params, limit, offset });
|
|
469
|
+
return {
|
|
470
|
+
total,
|
|
471
|
+
count: rows.length,
|
|
472
|
+
executions: rows.map(r => ({
|
|
473
|
+
id: r.id,
|
|
474
|
+
timestamp: r.created_at,
|
|
475
|
+
updated_at: r.updated_at,
|
|
476
|
+
tool: r.tool,
|
|
477
|
+
status: r.latest_status,
|
|
478
|
+
category: r.category || 'user',
|
|
479
|
+
duration_ms: r.total_duration_ms,
|
|
480
|
+
turn_count: r.turn_count,
|
|
481
|
+
prompt_preview: r.prompt_preview || ''
|
|
482
|
+
}))
|
|
483
|
+
};
|
|
484
|
+
}
|
|
485
|
+
/**
|
|
486
|
+
* Delete a conversation
|
|
487
|
+
*/
|
|
488
|
+
deleteConversation(id) {
|
|
489
|
+
try {
|
|
490
|
+
const result = this.db.prepare('DELETE FROM conversations WHERE id = ?').run(id);
|
|
491
|
+
return { success: result.changes > 0 };
|
|
492
|
+
}
|
|
493
|
+
catch (err) {
|
|
494
|
+
return { success: false, error: err.message };
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
/**
|
|
498
|
+
* Batch delete conversations
|
|
499
|
+
*/
|
|
500
|
+
batchDelete(ids) {
|
|
501
|
+
const deleteStmt = this.db.prepare('DELETE FROM conversations WHERE id = ?');
|
|
502
|
+
const errors = [];
|
|
503
|
+
let deleted = 0;
|
|
504
|
+
const transaction = this.db.transaction(() => {
|
|
505
|
+
for (const id of ids) {
|
|
506
|
+
try {
|
|
507
|
+
const result = deleteStmt.run(id);
|
|
508
|
+
if (result.changes > 0)
|
|
509
|
+
deleted++;
|
|
510
|
+
}
|
|
511
|
+
catch (err) {
|
|
512
|
+
errors.push(`${id}: ${err.message}`);
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
});
|
|
516
|
+
transaction();
|
|
517
|
+
return {
|
|
518
|
+
success: true,
|
|
519
|
+
deleted,
|
|
520
|
+
errors: errors.length > 0 ? errors : undefined
|
|
521
|
+
};
|
|
522
|
+
}
|
|
523
|
+
/**
|
|
524
|
+
* Delete conversations by tool
|
|
525
|
+
*/
|
|
526
|
+
deleteByTool(tool) {
|
|
527
|
+
const result = this.db.prepare('DELETE FROM conversations WHERE tool = ?').run(tool);
|
|
528
|
+
return { success: true, deleted: result.changes };
|
|
529
|
+
}
|
|
530
|
+
/**
|
|
531
|
+
* Delete all conversations
|
|
532
|
+
*/
|
|
533
|
+
deleteAll() {
|
|
534
|
+
const count = this.db.prepare('SELECT COUNT(*) as c FROM conversations').get().c;
|
|
535
|
+
this.db.prepare('DELETE FROM conversations').run();
|
|
536
|
+
return { success: true, deleted: count };
|
|
537
|
+
}
|
|
538
|
+
/**
|
|
539
|
+
* Get statistics
|
|
540
|
+
*/
|
|
541
|
+
getStats() {
|
|
542
|
+
const total = this.db.prepare('SELECT COUNT(*) as c FROM conversations').get().c;
|
|
543
|
+
const byToolRows = this.db.prepare(`
|
|
544
|
+
SELECT tool, COUNT(*) as count FROM conversations GROUP BY tool
|
|
545
|
+
`).all();
|
|
546
|
+
const byTool = {};
|
|
547
|
+
for (const row of byToolRows) {
|
|
548
|
+
byTool[row.tool] = row.count;
|
|
549
|
+
}
|
|
550
|
+
const byStatusRows = this.db.prepare(`
|
|
551
|
+
SELECT latest_status, COUNT(*) as count FROM conversations GROUP BY latest_status
|
|
552
|
+
`).all();
|
|
553
|
+
const byStatus = {};
|
|
554
|
+
for (const row of byStatusRows) {
|
|
555
|
+
byStatus[row.latest_status] = row.count;
|
|
556
|
+
}
|
|
557
|
+
const totalDuration = this.db.prepare(`
|
|
558
|
+
SELECT COALESCE(SUM(total_duration_ms), 0) as total FROM conversations
|
|
559
|
+
`).get().total;
|
|
560
|
+
return { total, byTool, byStatus, totalDuration };
|
|
561
|
+
}
|
|
562
|
+
// ========== Native Session Mapping Methods ==========
|
|
563
|
+
/**
|
|
564
|
+
* Save or update native session mapping
|
|
565
|
+
*/
|
|
566
|
+
saveNativeSessionMapping(mapping) {
|
|
567
|
+
const stmt = this.db.prepare(`
|
|
568
|
+
INSERT INTO native_session_mapping (ccw_id, tool, native_session_id, native_session_path, project_hash, created_at)
|
|
569
|
+
VALUES (@ccw_id, @tool, @native_session_id, @native_session_path, @project_hash, @created_at)
|
|
570
|
+
ON CONFLICT(ccw_id) DO UPDATE SET
|
|
571
|
+
native_session_id = @native_session_id,
|
|
572
|
+
native_session_path = @native_session_path,
|
|
573
|
+
project_hash = @project_hash
|
|
574
|
+
`);
|
|
575
|
+
stmt.run({
|
|
576
|
+
ccw_id: mapping.ccw_id,
|
|
577
|
+
tool: mapping.tool,
|
|
578
|
+
native_session_id: mapping.native_session_id,
|
|
579
|
+
native_session_path: mapping.native_session_path || null,
|
|
580
|
+
project_hash: mapping.project_hash || null,
|
|
581
|
+
created_at: mapping.created_at || new Date().toISOString()
|
|
582
|
+
});
|
|
583
|
+
}
|
|
584
|
+
/**
|
|
585
|
+
* Get native session ID by CCW ID
|
|
586
|
+
*/
|
|
587
|
+
getNativeSessionId(ccwId) {
|
|
588
|
+
const row = this.db.prepare(`
|
|
589
|
+
SELECT native_session_id FROM native_session_mapping WHERE ccw_id = ?
|
|
590
|
+
`).get(ccwId);
|
|
591
|
+
return row?.native_session_id || null;
|
|
592
|
+
}
|
|
593
|
+
/**
|
|
594
|
+
* Get CCW ID by native session ID
|
|
595
|
+
*/
|
|
596
|
+
getCcwIdByNativeSession(tool, nativeSessionId) {
|
|
597
|
+
const row = this.db.prepare(`
|
|
598
|
+
SELECT ccw_id FROM native_session_mapping WHERE tool = ? AND native_session_id = ?
|
|
599
|
+
`).get(tool, nativeSessionId);
|
|
600
|
+
return row?.ccw_id || null;
|
|
601
|
+
}
|
|
602
|
+
/**
|
|
603
|
+
* Get full mapping by CCW ID
|
|
604
|
+
*/
|
|
605
|
+
getNativeSessionMapping(ccwId) {
|
|
606
|
+
const row = this.db.prepare(`
|
|
607
|
+
SELECT * FROM native_session_mapping WHERE ccw_id = ?
|
|
608
|
+
`).get(ccwId);
|
|
609
|
+
if (!row)
|
|
610
|
+
return null;
|
|
611
|
+
return {
|
|
612
|
+
ccw_id: row.ccw_id,
|
|
613
|
+
tool: row.tool,
|
|
614
|
+
native_session_id: row.native_session_id,
|
|
615
|
+
native_session_path: row.native_session_path,
|
|
616
|
+
project_hash: row.project_hash,
|
|
617
|
+
created_at: row.created_at
|
|
618
|
+
};
|
|
619
|
+
}
|
|
620
|
+
/**
|
|
621
|
+
* Get latest native session mapping for a tool
|
|
622
|
+
*/
|
|
623
|
+
getLatestNativeMapping(tool) {
|
|
624
|
+
const row = this.db.prepare(`
|
|
625
|
+
SELECT * FROM native_session_mapping
|
|
626
|
+
WHERE tool = ?
|
|
627
|
+
ORDER BY created_at DESC
|
|
628
|
+
LIMIT 1
|
|
629
|
+
`).get(tool);
|
|
630
|
+
if (!row)
|
|
631
|
+
return null;
|
|
632
|
+
return {
|
|
633
|
+
ccw_id: row.ccw_id,
|
|
634
|
+
tool: row.tool,
|
|
635
|
+
native_session_id: row.native_session_id,
|
|
636
|
+
native_session_path: row.native_session_path,
|
|
637
|
+
project_hash: row.project_hash,
|
|
638
|
+
created_at: row.created_at
|
|
639
|
+
};
|
|
640
|
+
}
|
|
641
|
+
/**
|
|
642
|
+
* Delete native session mapping
|
|
643
|
+
*/
|
|
644
|
+
deleteNativeSessionMapping(ccwId) {
|
|
645
|
+
const result = this.db.prepare('DELETE FROM native_session_mapping WHERE ccw_id = ?').run(ccwId);
|
|
646
|
+
return result.changes > 0;
|
|
647
|
+
}
|
|
648
|
+
/**
|
|
649
|
+
* Check if CCW ID has native session mapping
|
|
650
|
+
*/
|
|
651
|
+
hasNativeSession(ccwId) {
|
|
652
|
+
const row = this.db.prepare(`
|
|
653
|
+
SELECT 1 FROM native_session_mapping WHERE ccw_id = ? LIMIT 1
|
|
654
|
+
`).get(ccwId);
|
|
655
|
+
return !!row;
|
|
656
|
+
}
|
|
657
|
+
// ========== Native Session Content Methods ==========
|
|
658
|
+
/**
|
|
659
|
+
* Get parsed native session content by CCW ID
|
|
660
|
+
* Returns full conversation with all turns from native session file
|
|
661
|
+
*/
|
|
662
|
+
getNativeSessionContent(ccwId) {
|
|
663
|
+
const mapping = this.getNativeSessionMapping(ccwId);
|
|
664
|
+
if (!mapping || !mapping.native_session_path) {
|
|
665
|
+
return null;
|
|
666
|
+
}
|
|
667
|
+
return parseSessionFile(mapping.native_session_path, mapping.tool);
|
|
668
|
+
}
|
|
669
|
+
/**
|
|
670
|
+
* Get formatted conversation text from native session
|
|
671
|
+
*/
|
|
672
|
+
getFormattedNativeConversation(ccwId, options) {
|
|
673
|
+
const session = this.getNativeSessionContent(ccwId);
|
|
674
|
+
if (!session) {
|
|
675
|
+
return null;
|
|
676
|
+
}
|
|
677
|
+
return formatConversation(session, options);
|
|
678
|
+
}
|
|
679
|
+
/**
|
|
680
|
+
* Get conversation pairs (user prompt + assistant response) from native session
|
|
681
|
+
*/
|
|
682
|
+
getNativeConversationPairs(ccwId) {
|
|
683
|
+
const session = this.getNativeSessionContent(ccwId);
|
|
684
|
+
if (!session) {
|
|
685
|
+
return null;
|
|
686
|
+
}
|
|
687
|
+
return extractConversationPairs(session);
|
|
688
|
+
}
|
|
689
|
+
/**
|
|
690
|
+
* Get conversation with enriched native session data
|
|
691
|
+
* Merges CCW history with native session content
|
|
692
|
+
*/
|
|
693
|
+
getEnrichedConversation(ccwId) {
|
|
694
|
+
const ccwConv = this.getConversation(ccwId);
|
|
695
|
+
const nativeSession = this.getNativeSessionContent(ccwId);
|
|
696
|
+
if (!ccwConv && !nativeSession) {
|
|
697
|
+
return null;
|
|
698
|
+
}
|
|
699
|
+
const merged = [];
|
|
700
|
+
// Determine max turn count
|
|
701
|
+
const maxTurns = Math.max(ccwConv?.turn_count || 0, nativeSession?.turns.filter(t => t.role === 'user').length || 0);
|
|
702
|
+
for (let i = 1; i <= maxTurns; i++) {
|
|
703
|
+
const ccwTurn = ccwConv?.turns.find(t => t.turn === i);
|
|
704
|
+
const nativeUserTurn = nativeSession?.turns.find(t => t.turnNumber === i && t.role === 'user');
|
|
705
|
+
const nativeAssistantTurn = nativeSession?.turns.find(t => t.turnNumber === i && t.role === 'assistant');
|
|
706
|
+
merged.push({
|
|
707
|
+
turn: i,
|
|
708
|
+
timestamp: ccwTurn?.timestamp || nativeUserTurn?.timestamp || '',
|
|
709
|
+
ccwPrompt: ccwTurn?.prompt,
|
|
710
|
+
ccwOutput: ccwTurn?.output.stdout,
|
|
711
|
+
nativeUserContent: nativeUserTurn?.content,
|
|
712
|
+
nativeAssistantContent: nativeAssistantTurn?.content,
|
|
713
|
+
nativeThoughts: nativeAssistantTurn?.thoughts,
|
|
714
|
+
nativeToolCalls: nativeAssistantTurn?.toolCalls
|
|
715
|
+
});
|
|
716
|
+
}
|
|
717
|
+
return { ccw: ccwConv, native: nativeSession, merged };
|
|
718
|
+
}
|
|
719
|
+
/**
|
|
720
|
+
* List all conversations with native session info
|
|
721
|
+
*/
|
|
722
|
+
getHistoryWithNativeInfo(options = {}) {
|
|
723
|
+
const history = this.getHistory(options);
|
|
724
|
+
const enrichedExecutions = history.executions.map(exec => {
|
|
725
|
+
const mapping = this.getNativeSessionMapping(exec.id);
|
|
726
|
+
return {
|
|
727
|
+
...exec,
|
|
728
|
+
hasNativeSession: !!mapping,
|
|
729
|
+
nativeSessionId: mapping?.native_session_id,
|
|
730
|
+
nativeSessionPath: mapping?.native_session_path
|
|
731
|
+
};
|
|
732
|
+
});
|
|
733
|
+
return {
|
|
734
|
+
total: history.total,
|
|
735
|
+
count: history.count,
|
|
736
|
+
executions: enrichedExecutions
|
|
737
|
+
};
|
|
738
|
+
}
|
|
739
|
+
// ========== Insights Methods ==========
|
|
740
|
+
/**
|
|
741
|
+
* Save an insights analysis result
|
|
742
|
+
*/
|
|
743
|
+
saveInsight(insight) {
|
|
744
|
+
const stmt = this.db.prepare(`
|
|
745
|
+
INSERT OR REPLACE INTO insights (id, created_at, tool, prompt_count, patterns, suggestions, raw_output, execution_id, lang)
|
|
746
|
+
VALUES (@id, @created_at, @tool, @prompt_count, @patterns, @suggestions, @raw_output, @execution_id, @lang)
|
|
747
|
+
`);
|
|
748
|
+
stmt.run({
|
|
749
|
+
id: insight.id,
|
|
750
|
+
created_at: new Date().toISOString(),
|
|
751
|
+
tool: insight.tool,
|
|
752
|
+
prompt_count: insight.promptCount,
|
|
753
|
+
patterns: JSON.stringify(insight.patterns || []),
|
|
754
|
+
suggestions: JSON.stringify(insight.suggestions || []),
|
|
755
|
+
raw_output: insight.rawOutput || null,
|
|
756
|
+
execution_id: insight.executionId || null,
|
|
757
|
+
lang: insight.lang || 'en'
|
|
758
|
+
});
|
|
759
|
+
}
|
|
760
|
+
/**
|
|
761
|
+
* Get insights history
|
|
762
|
+
*/
|
|
763
|
+
getInsights(options = {}) {
|
|
764
|
+
const { limit = 20, tool } = options;
|
|
765
|
+
let sql = 'SELECT id, created_at, tool, prompt_count, patterns, suggestions, execution_id, lang FROM insights';
|
|
766
|
+
const params = {};
|
|
767
|
+
if (tool) {
|
|
768
|
+
sql += ' WHERE tool = @tool';
|
|
769
|
+
params.tool = tool;
|
|
770
|
+
}
|
|
771
|
+
sql += ' ORDER BY created_at DESC LIMIT @limit';
|
|
772
|
+
params.limit = limit;
|
|
773
|
+
const rows = this.db.prepare(sql).all(params);
|
|
774
|
+
return rows.map(row => ({
|
|
775
|
+
...row,
|
|
776
|
+
patterns: JSON.parse(row.patterns || '[]'),
|
|
777
|
+
suggestions: JSON.parse(row.suggestions || '[]')
|
|
778
|
+
}));
|
|
779
|
+
}
|
|
780
|
+
/**
|
|
781
|
+
* Get a single insight by ID
|
|
782
|
+
*/
|
|
783
|
+
getInsight(id) {
|
|
784
|
+
const row = this.db.prepare('SELECT * FROM insights WHERE id = ?').get(id);
|
|
785
|
+
if (!row)
|
|
786
|
+
return null;
|
|
787
|
+
return {
|
|
788
|
+
...row,
|
|
789
|
+
patterns: JSON.parse(row.patterns || '[]'),
|
|
790
|
+
suggestions: JSON.parse(row.suggestions || '[]')
|
|
791
|
+
};
|
|
792
|
+
}
|
|
793
|
+
/**
|
|
794
|
+
* Delete an insight
|
|
795
|
+
*/
|
|
796
|
+
deleteInsight(id) {
|
|
797
|
+
const result = this.db.prepare('DELETE FROM insights WHERE id = ?').run(id);
|
|
798
|
+
return result.changes > 0;
|
|
799
|
+
}
|
|
800
|
+
/**
|
|
801
|
+
* Save or update a review for an execution
|
|
802
|
+
*/
|
|
803
|
+
saveReview(review) {
|
|
804
|
+
const now = new Date().toISOString();
|
|
805
|
+
const created_at = review.created_at || now;
|
|
806
|
+
const updated_at = review.updated_at || now;
|
|
807
|
+
const stmt = this.db.prepare(`
|
|
808
|
+
INSERT INTO reviews (execution_id, status, rating, comments, reviewer, created_at, updated_at)
|
|
809
|
+
VALUES (@execution_id, @status, @rating, @comments, @reviewer, @created_at, @updated_at)
|
|
810
|
+
ON CONFLICT(execution_id) DO UPDATE SET
|
|
811
|
+
status = @status,
|
|
812
|
+
rating = @rating,
|
|
813
|
+
comments = @comments,
|
|
814
|
+
reviewer = @reviewer,
|
|
815
|
+
updated_at = @updated_at
|
|
816
|
+
`);
|
|
817
|
+
const result = stmt.run({
|
|
818
|
+
execution_id: review.execution_id,
|
|
819
|
+
status: review.status,
|
|
820
|
+
rating: review.rating ?? null,
|
|
821
|
+
comments: review.comments ?? null,
|
|
822
|
+
reviewer: review.reviewer ?? null,
|
|
823
|
+
created_at,
|
|
824
|
+
updated_at
|
|
825
|
+
});
|
|
826
|
+
return {
|
|
827
|
+
id: result.lastInsertRowid,
|
|
828
|
+
execution_id: review.execution_id,
|
|
829
|
+
status: review.status,
|
|
830
|
+
rating: review.rating,
|
|
831
|
+
comments: review.comments,
|
|
832
|
+
reviewer: review.reviewer,
|
|
833
|
+
created_at,
|
|
834
|
+
updated_at
|
|
835
|
+
};
|
|
836
|
+
}
|
|
837
|
+
/**
|
|
838
|
+
* Get review for an execution
|
|
839
|
+
*/
|
|
840
|
+
getReview(executionId) {
|
|
841
|
+
const row = this.db.prepare('SELECT * FROM reviews WHERE execution_id = ?').get(executionId);
|
|
842
|
+
if (!row)
|
|
843
|
+
return null;
|
|
844
|
+
return {
|
|
845
|
+
id: row.id,
|
|
846
|
+
execution_id: row.execution_id,
|
|
847
|
+
status: row.status,
|
|
848
|
+
rating: row.rating,
|
|
849
|
+
comments: row.comments,
|
|
850
|
+
reviewer: row.reviewer,
|
|
851
|
+
created_at: row.created_at,
|
|
852
|
+
updated_at: row.updated_at
|
|
853
|
+
};
|
|
854
|
+
}
|
|
855
|
+
/**
|
|
856
|
+
* Get reviews with optional filtering
|
|
857
|
+
*/
|
|
858
|
+
getReviews(options = {}) {
|
|
859
|
+
const { status, limit = 50 } = options;
|
|
860
|
+
let sql = 'SELECT * FROM reviews';
|
|
861
|
+
const params = { limit };
|
|
862
|
+
if (status) {
|
|
863
|
+
sql += ' WHERE status = @status';
|
|
864
|
+
params.status = status;
|
|
865
|
+
}
|
|
866
|
+
sql += ' ORDER BY updated_at DESC LIMIT @limit';
|
|
867
|
+
const rows = this.db.prepare(sql).all(params);
|
|
868
|
+
return rows.map(row => ({
|
|
869
|
+
id: row.id,
|
|
870
|
+
execution_id: row.execution_id,
|
|
871
|
+
status: row.status,
|
|
872
|
+
rating: row.rating,
|
|
873
|
+
comments: row.comments,
|
|
874
|
+
reviewer: row.reviewer,
|
|
875
|
+
created_at: row.created_at,
|
|
876
|
+
updated_at: row.updated_at
|
|
877
|
+
}));
|
|
878
|
+
}
|
|
879
|
+
/**
|
|
880
|
+
* Delete a review
|
|
881
|
+
*/
|
|
882
|
+
deleteReview(executionId) {
|
|
883
|
+
const result = this.db.prepare('DELETE FROM reviews WHERE execution_id = ?').run(executionId);
|
|
884
|
+
return result.changes > 0;
|
|
885
|
+
}
|
|
886
|
+
/**
|
|
887
|
+
* Close database connection
|
|
888
|
+
*/
|
|
889
|
+
close() {
|
|
890
|
+
this.db.close();
|
|
891
|
+
}
|
|
892
|
+
}
|
|
893
|
+
// Singleton instance cache - keyed by normalized project ID for consistency
|
|
894
|
+
const storeCache = new Map();
|
|
895
|
+
/**
|
|
896
|
+
* Get or create a store instance for a directory
|
|
897
|
+
* Uses normalized project ID as cache key to handle path casing differences
|
|
898
|
+
*/
|
|
899
|
+
export function getHistoryStore(baseDir) {
|
|
900
|
+
// Use getProjectId to normalize path for consistent cache key
|
|
901
|
+
const cacheKey = getProjectId(baseDir);
|
|
902
|
+
if (!storeCache.has(cacheKey)) {
|
|
903
|
+
storeCache.set(cacheKey, new CliHistoryStore(baseDir));
|
|
904
|
+
}
|
|
905
|
+
return storeCache.get(cacheKey);
|
|
906
|
+
}
|
|
907
|
+
/**
|
|
908
|
+
* Close all store instances
|
|
909
|
+
*/
|
|
910
|
+
export function closeAllStores() {
|
|
911
|
+
for (const store of storeCache.values()) {
|
|
912
|
+
store.close();
|
|
913
|
+
}
|
|
914
|
+
storeCache.clear();
|
|
915
|
+
}
|
|
916
|
+
//# sourceMappingURL=cli-history-store.js.map
|