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,670 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centralized Storage Paths Configuration
|
|
3
|
+
* Single source of truth for all CCW storage locations
|
|
4
|
+
*
|
|
5
|
+
* All data is stored under ~/.ccw/ with project isolation via SHA256 hash
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { homedir } from 'os';
|
|
9
|
+
import { join, resolve, dirname, relative, sep } from 'path';
|
|
10
|
+
import { createHash } from 'crypto';
|
|
11
|
+
import { existsSync, mkdirSync, renameSync, rmSync, readdirSync } from 'fs';
|
|
12
|
+
import { readdir } from 'fs/promises';
|
|
13
|
+
|
|
14
|
+
// Environment variable override for custom storage location
|
|
15
|
+
// Made dynamic to support testing environments
|
|
16
|
+
export function getCCWHome(): string {
|
|
17
|
+
return process.env.CCW_DATA_DIR || join(homedir(), '.ccw');
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// Base CCW home directory (deprecated - use getCCWHome() for dynamic access)
|
|
21
|
+
// Kept for backward compatibility but will use dynamic value in tests
|
|
22
|
+
export const CCW_HOME = getCCWHome();
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Convert project path to a human-readable folder name
|
|
26
|
+
* Examples:
|
|
27
|
+
* D:\Claude_dms3 → D--Claude_dms3
|
|
28
|
+
* /home/user/project → home-user-project
|
|
29
|
+
* /mnt/d/Claude_dms3 → D--Claude_dms3 (WSL mapping)
|
|
30
|
+
*
|
|
31
|
+
* @param absolutePath - Absolute project path
|
|
32
|
+
* @returns Safe folder name for filesystem
|
|
33
|
+
*/
|
|
34
|
+
function pathToFolderName(absolutePath: string): string {
|
|
35
|
+
let normalized = absolutePath;
|
|
36
|
+
|
|
37
|
+
// Handle WSL path: /mnt/c/path → C:/path
|
|
38
|
+
const wslMatch = normalized.match(/^\/mnt\/([a-z])\/(.*)/i);
|
|
39
|
+
if (wslMatch) {
|
|
40
|
+
normalized = `${wslMatch[1].toUpperCase()}:/${wslMatch[2]}`;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// Normalize separators to forward slash
|
|
44
|
+
normalized = normalized.replace(/\\/g, '/');
|
|
45
|
+
|
|
46
|
+
// Lowercase for case-insensitive filesystems (Windows, macOS)
|
|
47
|
+
if (process.platform === 'win32' || process.platform === 'darwin') {
|
|
48
|
+
normalized = normalized.toLowerCase();
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Convert to folder-safe name:
|
|
52
|
+
// - Drive letter: C:/ → C--
|
|
53
|
+
// - Path separators: / → -
|
|
54
|
+
// - Remove leading/trailing dashes
|
|
55
|
+
let folderName = normalized
|
|
56
|
+
.replace(/^([a-z]):\/*/i, '$1--') // C:/ → C--
|
|
57
|
+
.replace(/^\/+/, '') // Remove leading slashes
|
|
58
|
+
.replace(/\/+/g, '-') // / → -
|
|
59
|
+
.replace(/[<>:"|?*]/g, '_') // Invalid chars → _
|
|
60
|
+
.replace(/(?<!^[a-z])-+/gi, '-') // Collapse dashes (except after drive letter)
|
|
61
|
+
.replace(/-$/g, ''); // Trim trailing dash only
|
|
62
|
+
|
|
63
|
+
// Limit length to avoid filesystem issues (max 100 chars)
|
|
64
|
+
if (folderName.length > 100) {
|
|
65
|
+
const hash = createHash('sha256').update(normalized).digest('hex').substring(0, 8);
|
|
66
|
+
folderName = folderName.substring(0, 90) + '_' + hash;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return folderName || 'unknown';
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Calculate project identifier from project path
|
|
74
|
+
* Returns a human-readable folder name based on the path
|
|
75
|
+
* @param projectPath - Absolute or relative project path
|
|
76
|
+
* @returns Folder-safe project identifier
|
|
77
|
+
*/
|
|
78
|
+
export function getProjectId(projectPath: string): string {
|
|
79
|
+
const absolutePath = resolve(projectPath);
|
|
80
|
+
return pathToFolderName(absolutePath);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Hierarchy information for a project path
|
|
85
|
+
*/
|
|
86
|
+
export interface HierarchyInfo {
|
|
87
|
+
/** Current path's ID (flat form) */
|
|
88
|
+
currentId: string;
|
|
89
|
+
/** Parent directory's ID (if exists) */
|
|
90
|
+
parentId: string | null;
|
|
91
|
+
/** Relative path from parent */
|
|
92
|
+
relativePath: string;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Path detection result cache
|
|
96
|
+
const hierarchyCache = new Map<string, HierarchyInfo>();
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Detect path hierarchy relationship
|
|
100
|
+
* @param projectPath - Current working directory path
|
|
101
|
+
* @returns Hierarchy information
|
|
102
|
+
*/
|
|
103
|
+
export function detectHierarchy(projectPath: string): HierarchyInfo {
|
|
104
|
+
const absolutePath = resolve(projectPath);
|
|
105
|
+
|
|
106
|
+
// Check cache
|
|
107
|
+
if (hierarchyCache.has(absolutePath)) {
|
|
108
|
+
return hierarchyCache.get(absolutePath)!;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// Execute detection
|
|
112
|
+
const result = detectHierarchyImpl(absolutePath);
|
|
113
|
+
|
|
114
|
+
// Cache result
|
|
115
|
+
hierarchyCache.set(absolutePath, result);
|
|
116
|
+
|
|
117
|
+
return result;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Internal hierarchy detection implementation
|
|
122
|
+
*/
|
|
123
|
+
function detectHierarchyImpl(absolutePath: string): HierarchyInfo {
|
|
124
|
+
const currentId = pathToFolderName(absolutePath);
|
|
125
|
+
|
|
126
|
+
// Get all existing project directories
|
|
127
|
+
const projectsDir = join(getCCWHome(), 'projects');
|
|
128
|
+
if (!existsSync(projectsDir)) {
|
|
129
|
+
return { currentId, parentId: null, relativePath: '' };
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// Check if there's a parent path with storage
|
|
133
|
+
let checkPath = absolutePath;
|
|
134
|
+
while (true) {
|
|
135
|
+
const parentPath = dirname(checkPath);
|
|
136
|
+
if (parentPath === checkPath) break; // Reached root directory
|
|
137
|
+
|
|
138
|
+
const parentId = pathToFolderName(parentPath);
|
|
139
|
+
const parentStorageDir = join(projectsDir, parentId);
|
|
140
|
+
|
|
141
|
+
// If parent path has storage directory, we found the parent
|
|
142
|
+
if (existsSync(parentStorageDir)) {
|
|
143
|
+
const relativePath = relative(parentPath, absolutePath).replace(/\\/g, '/');
|
|
144
|
+
return { currentId, parentId, relativePath };
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
checkPath = parentPath;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
return { currentId, parentId: null, relativePath: '' };
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Clear hierarchy cache
|
|
155
|
+
* Call this after migration completes
|
|
156
|
+
*/
|
|
157
|
+
export function clearHierarchyCache(): void {
|
|
158
|
+
hierarchyCache.clear();
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Verify migration integrity
|
|
163
|
+
*/
|
|
164
|
+
function verifyMigration(targetDir: string, expectedSubDirs: string[]): boolean {
|
|
165
|
+
try {
|
|
166
|
+
for (const subDir of expectedSubDirs) {
|
|
167
|
+
const path = join(targetDir, subDir);
|
|
168
|
+
// Only verify directories that should exist
|
|
169
|
+
// In a real implementation, we'd check file counts, database integrity, etc.
|
|
170
|
+
}
|
|
171
|
+
return true;
|
|
172
|
+
} catch {
|
|
173
|
+
return false;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* Rollback migration (on error)
|
|
179
|
+
*/
|
|
180
|
+
function rollbackMigration(legacyDir: string, targetDir: string): void {
|
|
181
|
+
try {
|
|
182
|
+
// If target directory exists, try to move back
|
|
183
|
+
if (existsSync(targetDir)) {
|
|
184
|
+
console.error('⚠️ 尝试回滚迁移...');
|
|
185
|
+
// Implement rollback logic if needed
|
|
186
|
+
// For now, we'll just warn the user
|
|
187
|
+
}
|
|
188
|
+
} catch {
|
|
189
|
+
console.error('❌ 回滚失败,请手动检查数据完整性');
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Migrate from flat structure to hierarchical structure
|
|
195
|
+
* @param legacyDir - Old flat directory
|
|
196
|
+
* @param targetDir - New hierarchical directory
|
|
197
|
+
*/
|
|
198
|
+
function migrateToHierarchical(legacyDir: string, targetDir: string): void {
|
|
199
|
+
console.log(`\n🔄 检测到旧存储结构,开始迁移...`);
|
|
200
|
+
console.log(` 从: ${legacyDir}`);
|
|
201
|
+
console.log(` 到: ${targetDir}`);
|
|
202
|
+
|
|
203
|
+
try {
|
|
204
|
+
// 1. Create target directory
|
|
205
|
+
mkdirSync(targetDir, { recursive: true });
|
|
206
|
+
|
|
207
|
+
// 2. Migrate each subdirectory
|
|
208
|
+
const subDirs = ['cli-history', 'memory', 'cache', 'config'];
|
|
209
|
+
for (const subDir of subDirs) {
|
|
210
|
+
const source = join(legacyDir, subDir);
|
|
211
|
+
const target = join(targetDir, subDir);
|
|
212
|
+
|
|
213
|
+
if (existsSync(source)) {
|
|
214
|
+
// Use atomic rename (same filesystem)
|
|
215
|
+
try {
|
|
216
|
+
renameSync(source, target);
|
|
217
|
+
console.log(` ✓ 迁移 ${subDir}`);
|
|
218
|
+
} catch (error: any) {
|
|
219
|
+
// If rename fails (cross-filesystem), fallback to copy-delete
|
|
220
|
+
// For now, we'll just throw the error
|
|
221
|
+
throw new Error(`无法迁移 ${subDir}: ${error.message}`);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
// 3. Verify migration integrity
|
|
227
|
+
const verified = verifyMigration(targetDir, subDirs);
|
|
228
|
+
if (!verified) {
|
|
229
|
+
throw new Error('迁移验证失败');
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
// 4. Delete old directory
|
|
233
|
+
rmSync(legacyDir, { recursive: true, force: true });
|
|
234
|
+
console.log(`✅ 迁移完成并清理旧数据\n`);
|
|
235
|
+
|
|
236
|
+
} catch (error: any) {
|
|
237
|
+
console.error(`❌ 迁移失败: ${error.message}`);
|
|
238
|
+
// Try to rollback if possible
|
|
239
|
+
rollbackMigration(legacyDir, targetDir);
|
|
240
|
+
// Re-throw to prevent continued execution
|
|
241
|
+
throw error;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* Check and migrate child projects
|
|
247
|
+
* @param parentId - Parent project ID
|
|
248
|
+
* @param parentPath - Parent project path
|
|
249
|
+
*/
|
|
250
|
+
function migrateChildProjects(parentId: string, parentPath: string): void {
|
|
251
|
+
const projectsDir = join(getCCWHome(), 'projects');
|
|
252
|
+
if (!existsSync(projectsDir)) return;
|
|
253
|
+
|
|
254
|
+
const absoluteParentPath = resolve(parentPath);
|
|
255
|
+
const entries = readdirSync(projectsDir);
|
|
256
|
+
|
|
257
|
+
for (const entry of entries) {
|
|
258
|
+
if (entry === parentId) continue; // Skip self
|
|
259
|
+
|
|
260
|
+
// Check if this is a child directory of the current project
|
|
261
|
+
// We need to reverse-engineer the original path from the folder ID
|
|
262
|
+
// This is challenging without storing metadata
|
|
263
|
+
// For now, we'll use a heuristic: if the entry starts with the parentId
|
|
264
|
+
// and has additional path segments, it might be a child
|
|
265
|
+
|
|
266
|
+
// Simple heuristic: check if entry is longer and starts with parentId
|
|
267
|
+
if (entry.startsWith(parentId + '-')) {
|
|
268
|
+
const legacyDir = join(projectsDir, entry);
|
|
269
|
+
|
|
270
|
+
// Try to determine the relative path
|
|
271
|
+
// This is an approximation - in a real implementation,
|
|
272
|
+
// we'd need to store original paths in a metadata file
|
|
273
|
+
// For now, let's extract the suffix after parentId-
|
|
274
|
+
const suffix = entry.substring(parentId.length + 1);
|
|
275
|
+
|
|
276
|
+
// Convert back to path segments (- → /)
|
|
277
|
+
const potentialRelPath = suffix.replace(/-/g, sep);
|
|
278
|
+
|
|
279
|
+
// Build target directory
|
|
280
|
+
const segments = potentialRelPath.split(sep).filter(Boolean);
|
|
281
|
+
let targetDir = join(projectsDir, parentId);
|
|
282
|
+
for (const segment of segments) {
|
|
283
|
+
targetDir = join(targetDir, segment);
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
// Only migrate if the legacy directory exists and contains data
|
|
287
|
+
if (existsSync(legacyDir)) {
|
|
288
|
+
const hasData = ['cli-history', 'memory', 'cache', 'config'].some(subDir =>
|
|
289
|
+
existsSync(join(legacyDir, subDir))
|
|
290
|
+
);
|
|
291
|
+
|
|
292
|
+
if (hasData) {
|
|
293
|
+
try {
|
|
294
|
+
migrateToHierarchical(legacyDir, targetDir);
|
|
295
|
+
} catch (error: any) {
|
|
296
|
+
console.error(`⚠️ 跳过 ${entry} 的迁移: ${error.message}`);
|
|
297
|
+
// Continue with other migrations
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
/**
|
|
306
|
+
* Ensure a directory exists, creating it if necessary
|
|
307
|
+
* @param dirPath - Directory path to ensure
|
|
308
|
+
*/
|
|
309
|
+
export function ensureStorageDir(dirPath: string): void {
|
|
310
|
+
if (!existsSync(dirPath)) {
|
|
311
|
+
mkdirSync(dirPath, { recursive: true });
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
/**
|
|
316
|
+
* Global storage paths (not project-specific)
|
|
317
|
+
*/
|
|
318
|
+
export const GlobalPaths = {
|
|
319
|
+
/** Root CCW home directory */
|
|
320
|
+
root: () => getCCWHome(),
|
|
321
|
+
|
|
322
|
+
/** Config directory */
|
|
323
|
+
config: () => join(getCCWHome(), 'config'),
|
|
324
|
+
|
|
325
|
+
/** Global settings file */
|
|
326
|
+
settings: () => join(getCCWHome(), 'config', 'settings.json'),
|
|
327
|
+
|
|
328
|
+
/** Recent project paths file */
|
|
329
|
+
recentPaths: () => join(getCCWHome(), 'config', 'recent-paths.json'),
|
|
330
|
+
|
|
331
|
+
/** Databases directory */
|
|
332
|
+
databases: () => join(getCCWHome(), 'db'),
|
|
333
|
+
|
|
334
|
+
/** MCP templates database */
|
|
335
|
+
mcpTemplates: () => join(getCCWHome(), 'db', 'mcp-templates.db'),
|
|
336
|
+
|
|
337
|
+
/** Logs directory */
|
|
338
|
+
logs: () => join(getCCWHome(), 'logs'),
|
|
339
|
+
};
|
|
340
|
+
|
|
341
|
+
/**
|
|
342
|
+
* Project-specific storage paths
|
|
343
|
+
*/
|
|
344
|
+
export interface ProjectPaths {
|
|
345
|
+
/** Project root in CCW storage */
|
|
346
|
+
root: string;
|
|
347
|
+
/** CLI history directory */
|
|
348
|
+
cliHistory: string;
|
|
349
|
+
/** CLI history database file */
|
|
350
|
+
historyDb: string;
|
|
351
|
+
/** Memory store directory */
|
|
352
|
+
memory: string;
|
|
353
|
+
/** Memory store database file */
|
|
354
|
+
memoryDb: string;
|
|
355
|
+
/** Cache directory */
|
|
356
|
+
cache: string;
|
|
357
|
+
/** Dashboard cache file */
|
|
358
|
+
dashboardCache: string;
|
|
359
|
+
/** Config directory */
|
|
360
|
+
config: string;
|
|
361
|
+
/** CLI config file */
|
|
362
|
+
cliConfig: string;
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
/**
|
|
366
|
+
* Get storage paths for a specific project
|
|
367
|
+
* Supports hierarchical storage structure with automatic migration
|
|
368
|
+
* @param projectPath - Project root path
|
|
369
|
+
* @returns Object with all project-specific paths
|
|
370
|
+
*/
|
|
371
|
+
export function getProjectPaths(projectPath: string): ProjectPaths {
|
|
372
|
+
const hierarchy = detectHierarchy(projectPath);
|
|
373
|
+
|
|
374
|
+
let projectDir: string;
|
|
375
|
+
|
|
376
|
+
if (hierarchy.parentId) {
|
|
377
|
+
// Has parent, use hierarchical structure
|
|
378
|
+
projectDir = join(getCCWHome(), 'projects', hierarchy.parentId);
|
|
379
|
+
|
|
380
|
+
// Build subdirectory path from relative path
|
|
381
|
+
const segments = hierarchy.relativePath.split('/').filter(Boolean);
|
|
382
|
+
for (const segment of segments) {
|
|
383
|
+
projectDir = join(projectDir, segment);
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
// Check if we need to migrate old flat data
|
|
387
|
+
const legacyDir = join(getCCWHome(), 'projects', hierarchy.currentId);
|
|
388
|
+
if (existsSync(legacyDir)) {
|
|
389
|
+
try {
|
|
390
|
+
migrateToHierarchical(legacyDir, projectDir);
|
|
391
|
+
// Clear cache after successful migration
|
|
392
|
+
clearHierarchyCache();
|
|
393
|
+
} catch (error: any) {
|
|
394
|
+
// If migration fails, fall back to legacy directory
|
|
395
|
+
console.warn(`迁移失败,使用旧存储位置: ${error.message}`);
|
|
396
|
+
projectDir = legacyDir;
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
} else {
|
|
400
|
+
// No parent, use root-level storage
|
|
401
|
+
projectDir = join(getCCWHome(), 'projects', hierarchy.currentId);
|
|
402
|
+
|
|
403
|
+
// Check if there are child projects that need migration
|
|
404
|
+
try {
|
|
405
|
+
migrateChildProjects(hierarchy.currentId, projectPath);
|
|
406
|
+
} catch (error: any) {
|
|
407
|
+
console.warn(`子项目迁移失败: ${error.message}`);
|
|
408
|
+
// Continue anyway - this is not critical
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
return {
|
|
413
|
+
root: projectDir,
|
|
414
|
+
cliHistory: join(projectDir, 'cli-history'),
|
|
415
|
+
historyDb: join(projectDir, 'cli-history', 'history.db'),
|
|
416
|
+
memory: join(projectDir, 'memory'),
|
|
417
|
+
memoryDb: join(projectDir, 'memory', 'memory.db'),
|
|
418
|
+
cache: join(projectDir, 'cache'),
|
|
419
|
+
dashboardCache: join(projectDir, 'cache', 'dashboard-data.json'),
|
|
420
|
+
config: join(projectDir, 'config'),
|
|
421
|
+
cliConfig: join(projectDir, 'config', 'cli-config.json'),
|
|
422
|
+
};
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
/**
|
|
426
|
+
* Get storage paths for a project by its ID (hash)
|
|
427
|
+
* Use when iterating centralized storage without original project path
|
|
428
|
+
* @param projectId - 16-character project ID hash
|
|
429
|
+
* @returns Object with all project-specific paths
|
|
430
|
+
*/
|
|
431
|
+
export function getProjectPathsById(projectId: string): ProjectPaths {
|
|
432
|
+
const projectDir = join(getCCWHome(), 'projects', projectId);
|
|
433
|
+
|
|
434
|
+
return {
|
|
435
|
+
root: projectDir,
|
|
436
|
+
cliHistory: join(projectDir, 'cli-history'),
|
|
437
|
+
historyDb: join(projectDir, 'cli-history', 'history.db'),
|
|
438
|
+
memory: join(projectDir, 'memory'),
|
|
439
|
+
memoryDb: join(projectDir, 'memory', 'memory.db'),
|
|
440
|
+
cache: join(projectDir, 'cache'),
|
|
441
|
+
dashboardCache: join(projectDir, 'cache', 'dashboard-data.json'),
|
|
442
|
+
config: join(projectDir, 'config'),
|
|
443
|
+
cliConfig: join(projectDir, 'config', 'cli-config.json'),
|
|
444
|
+
};
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
/**
|
|
448
|
+
* Unified StoragePaths object combining global and project paths
|
|
449
|
+
*/
|
|
450
|
+
export const StoragePaths = {
|
|
451
|
+
global: GlobalPaths,
|
|
452
|
+
project: getProjectPaths,
|
|
453
|
+
projectById: getProjectPathsById,
|
|
454
|
+
};
|
|
455
|
+
|
|
456
|
+
/**
|
|
457
|
+
* Information about a child project in hierarchical structure
|
|
458
|
+
*/
|
|
459
|
+
export interface ChildProjectInfo {
|
|
460
|
+
/** Absolute path to the child project */
|
|
461
|
+
projectPath: string;
|
|
462
|
+
/** Relative path from parent project */
|
|
463
|
+
relativePath: string;
|
|
464
|
+
/** Project ID */
|
|
465
|
+
projectId: string;
|
|
466
|
+
/** Storage paths for this child project */
|
|
467
|
+
paths: ProjectPaths;
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
/**
|
|
471
|
+
* Recursively scan for child projects in hierarchical storage structure
|
|
472
|
+
* @param projectPath - Parent project path
|
|
473
|
+
* @returns Array of child project information
|
|
474
|
+
*/
|
|
475
|
+
export function scanChildProjects(projectPath: string): ChildProjectInfo[] {
|
|
476
|
+
const absolutePath = resolve(projectPath);
|
|
477
|
+
const parentId = getProjectId(absolutePath);
|
|
478
|
+
const parentStorageDir = join(getCCWHome(), 'projects', parentId);
|
|
479
|
+
|
|
480
|
+
// If parent storage doesn't exist, no children
|
|
481
|
+
if (!existsSync(parentStorageDir)) {
|
|
482
|
+
return [];
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
const children: ChildProjectInfo[] = [];
|
|
486
|
+
|
|
487
|
+
/**
|
|
488
|
+
* Recursively scan directory for project data directories
|
|
489
|
+
*/
|
|
490
|
+
function scanDirectory(dir: string, relativePath: string): void {
|
|
491
|
+
if (!existsSync(dir)) return;
|
|
492
|
+
|
|
493
|
+
try {
|
|
494
|
+
const entries = readdirSync(dir, { withFileTypes: true });
|
|
495
|
+
|
|
496
|
+
for (const entry of entries) {
|
|
497
|
+
if (!entry.isDirectory()) continue;
|
|
498
|
+
|
|
499
|
+
const fullPath = join(dir, entry.name);
|
|
500
|
+
const currentRelPath = relativePath ? `${relativePath}/${entry.name}` : entry.name;
|
|
501
|
+
|
|
502
|
+
// Check if this directory contains project data
|
|
503
|
+
const dataMarkers = ['cli-history', 'memory', 'cache', 'config'];
|
|
504
|
+
const hasData = dataMarkers.some(marker => existsSync(join(fullPath, marker)));
|
|
505
|
+
|
|
506
|
+
if (hasData) {
|
|
507
|
+
// This is a child project
|
|
508
|
+
const childProjectPath = join(absolutePath, currentRelPath.replace(/\//g, sep));
|
|
509
|
+
const childId = getProjectId(childProjectPath);
|
|
510
|
+
|
|
511
|
+
children.push({
|
|
512
|
+
projectPath: childProjectPath,
|
|
513
|
+
relativePath: currentRelPath,
|
|
514
|
+
projectId: childId,
|
|
515
|
+
paths: getProjectPaths(childProjectPath)
|
|
516
|
+
});
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
// Continue scanning subdirectories (skip data directories)
|
|
520
|
+
if (!dataMarkers.includes(entry.name)) {
|
|
521
|
+
scanDirectory(fullPath, currentRelPath);
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
} catch (error) {
|
|
525
|
+
// Ignore read errors
|
|
526
|
+
if (process.env.DEBUG) {
|
|
527
|
+
console.error(`[scanChildProjects] Failed to scan ${dir}:`, error);
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
scanDirectory(parentStorageDir, '');
|
|
533
|
+
|
|
534
|
+
return children;
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
/**
|
|
538
|
+
* Asynchronously scan for child projects in hierarchical storage structure
|
|
539
|
+
* Non-blocking version using fs.promises for better performance
|
|
540
|
+
* @param projectPath - Parent project path
|
|
541
|
+
* @returns Promise resolving to array of child project information
|
|
542
|
+
*/
|
|
543
|
+
export async function scanChildProjectsAsync(projectPath: string): Promise<ChildProjectInfo[]> {
|
|
544
|
+
const absolutePath = resolve(projectPath);
|
|
545
|
+
const parentId = getProjectId(absolutePath);
|
|
546
|
+
const parentStorageDir = join(getCCWHome(), 'projects', parentId);
|
|
547
|
+
|
|
548
|
+
// If parent storage doesn't exist, no children
|
|
549
|
+
if (!existsSync(parentStorageDir)) {
|
|
550
|
+
return [];
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
const children: ChildProjectInfo[] = [];
|
|
554
|
+
|
|
555
|
+
/**
|
|
556
|
+
* Recursively scan directory for project data directories (async)
|
|
557
|
+
*/
|
|
558
|
+
async function scanDirectoryAsync(dir: string, relativePath: string): Promise<void> {
|
|
559
|
+
if (!existsSync(dir)) return;
|
|
560
|
+
|
|
561
|
+
try {
|
|
562
|
+
const entries = await readdir(dir, { withFileTypes: true });
|
|
563
|
+
|
|
564
|
+
// Process directories in parallel for better performance
|
|
565
|
+
const promises = entries
|
|
566
|
+
.filter(entry => entry.isDirectory())
|
|
567
|
+
.map(async (entry) => {
|
|
568
|
+
const fullPath = join(dir, entry.name);
|
|
569
|
+
const currentRelPath = relativePath ? `${relativePath}/${entry.name}` : entry.name;
|
|
570
|
+
|
|
571
|
+
// Check if this directory contains project data
|
|
572
|
+
const dataMarkers = ['cli-history', 'memory', 'cache', 'config'];
|
|
573
|
+
const hasData = dataMarkers.some(marker => existsSync(join(fullPath, marker)));
|
|
574
|
+
|
|
575
|
+
if (hasData) {
|
|
576
|
+
// This is a child project
|
|
577
|
+
const childProjectPath = join(absolutePath, currentRelPath.replace(/\//g, sep));
|
|
578
|
+
const childId = getProjectId(childProjectPath);
|
|
579
|
+
|
|
580
|
+
children.push({
|
|
581
|
+
projectPath: childProjectPath,
|
|
582
|
+
relativePath: currentRelPath,
|
|
583
|
+
projectId: childId,
|
|
584
|
+
paths: getProjectPaths(childProjectPath)
|
|
585
|
+
});
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
// Continue scanning subdirectories (skip data directories)
|
|
589
|
+
if (!dataMarkers.includes(entry.name)) {
|
|
590
|
+
await scanDirectoryAsync(fullPath, currentRelPath);
|
|
591
|
+
}
|
|
592
|
+
});
|
|
593
|
+
|
|
594
|
+
await Promise.all(promises);
|
|
595
|
+
} catch (error) {
|
|
596
|
+
// Ignore read errors
|
|
597
|
+
if (process.env.DEBUG) {
|
|
598
|
+
console.error(`[scanChildProjectsAsync] Failed to scan ${dir}:`, error);
|
|
599
|
+
}
|
|
600
|
+
}
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
await scanDirectoryAsync(parentStorageDir, '');
|
|
604
|
+
|
|
605
|
+
return children;
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
/**
|
|
609
|
+
* Legacy storage paths (for backward compatibility detection)
|
|
610
|
+
*/
|
|
611
|
+
export const LegacyPaths = {
|
|
612
|
+
/** Old recent paths file location */
|
|
613
|
+
recentPaths: () => join(homedir(), '.ccw-recent-paths.json'),
|
|
614
|
+
|
|
615
|
+
/** Old project-local CLI history */
|
|
616
|
+
cliHistory: (projectPath: string) => join(projectPath, '.workflow', '.cli-history'),
|
|
617
|
+
|
|
618
|
+
/** Old project-local memory store */
|
|
619
|
+
memory: (projectPath: string) => join(projectPath, '.workflow', '.memory'),
|
|
620
|
+
|
|
621
|
+
/** Old project-local cache */
|
|
622
|
+
cache: (projectPath: string) => join(projectPath, '.workflow', '.ccw-cache'),
|
|
623
|
+
|
|
624
|
+
/** Old project-local CLI config */
|
|
625
|
+
cliConfig: (projectPath: string) => join(projectPath, '.workflow', 'cli-config.json'),
|
|
626
|
+
};
|
|
627
|
+
|
|
628
|
+
/**
|
|
629
|
+
* Check if legacy storage exists for a project
|
|
630
|
+
* Useful for migration warnings or detection
|
|
631
|
+
* @param projectPath - Project root path
|
|
632
|
+
* @returns true if any legacy storage is present
|
|
633
|
+
*/
|
|
634
|
+
export function isLegacyStoragePresent(projectPath: string): boolean {
|
|
635
|
+
return (
|
|
636
|
+
existsSync(LegacyPaths.cliHistory(projectPath)) ||
|
|
637
|
+
existsSync(LegacyPaths.memory(projectPath)) ||
|
|
638
|
+
existsSync(LegacyPaths.cache(projectPath)) ||
|
|
639
|
+
existsSync(LegacyPaths.cliConfig(projectPath))
|
|
640
|
+
);
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
/**
|
|
644
|
+
* Get CCW home directory (for external use)
|
|
645
|
+
*/
|
|
646
|
+
export function getCcwHome(): string {
|
|
647
|
+
return getCCWHome();
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
/**
|
|
651
|
+
* Initialize global storage directories
|
|
652
|
+
* Creates the base directory structure if not present
|
|
653
|
+
*/
|
|
654
|
+
export function initializeGlobalStorage(): void {
|
|
655
|
+
ensureStorageDir(GlobalPaths.config());
|
|
656
|
+
ensureStorageDir(GlobalPaths.databases());
|
|
657
|
+
ensureStorageDir(GlobalPaths.logs());
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
/**
|
|
661
|
+
* Initialize project storage directories
|
|
662
|
+
* @param projectPath - Project root path
|
|
663
|
+
*/
|
|
664
|
+
export function initializeProjectStorage(projectPath: string): void {
|
|
665
|
+
const paths = getProjectPaths(projectPath);
|
|
666
|
+
ensureStorageDir(paths.cliHistory);
|
|
667
|
+
ensureStorageDir(paths.memory);
|
|
668
|
+
ensureStorageDir(paths.cache);
|
|
669
|
+
ensureStorageDir(paths.config);
|
|
670
|
+
}
|