@mcp-graph-workflow/mcp-graph 3.0.0
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/LICENSE +21 -0
- package/README.md +157 -0
- package/dist/api/middleware/error-handler.d.ts +3 -0
- package/dist/api/middleware/error-handler.d.ts.map +1 -0
- package/dist/api/middleware/error-handler.js +48 -0
- package/dist/api/middleware/error-handler.js.map +1 -0
- package/dist/api/middleware/request-logger.d.ts +6 -0
- package/dist/api/middleware/request-logger.d.ts.map +1 -0
- package/dist/api/middleware/request-logger.js +19 -0
- package/dist/api/middleware/request-logger.js.map +1 -0
- package/dist/api/middleware/validate.d.ts +5 -0
- package/dist/api/middleware/validate.d.ts.map +1 -0
- package/dist/api/middleware/validate.js +23 -0
- package/dist/api/middleware/validate.js.map +1 -0
- package/dist/api/router.d.ts +11 -0
- package/dist/api/router.d.ts.map +1 -0
- package/dist/api/router.js +51 -0
- package/dist/api/router.js.map +1 -0
- package/dist/api/routes/benchmark.d.ts +4 -0
- package/dist/api/routes/benchmark.d.ts.map +1 -0
- package/dist/api/routes/benchmark.js +86 -0
- package/dist/api/routes/benchmark.js.map +1 -0
- package/dist/api/routes/capture.d.ts +3 -0
- package/dist/api/routes/capture.d.ts.map +1 -0
- package/dist/api/routes/capture.js +31 -0
- package/dist/api/routes/capture.js.map +1 -0
- package/dist/api/routes/context.d.ts +4 -0
- package/dist/api/routes/context.d.ts.map +1 -0
- package/dist/api/routes/context.js +25 -0
- package/dist/api/routes/context.js.map +1 -0
- package/dist/api/routes/docs-cache.d.ts +4 -0
- package/dist/api/routes/docs-cache.d.ts.map +1 -0
- package/dist/api/routes/docs-cache.js +79 -0
- package/dist/api/routes/docs-cache.js.map +1 -0
- package/dist/api/routes/edges.d.ts +4 -0
- package/dist/api/routes/edges.d.ts.map +1 -0
- package/dist/api/routes/edges.js +50 -0
- package/dist/api/routes/edges.js.map +1 -0
- package/dist/api/routes/events.d.ts +4 -0
- package/dist/api/routes/events.d.ts.map +1 -0
- package/dist/api/routes/events.js +37 -0
- package/dist/api/routes/events.js.map +1 -0
- package/dist/api/routes/gitnexus.d.ts +12 -0
- package/dist/api/routes/gitnexus.d.ts.map +1 -0
- package/dist/api/routes/gitnexus.js +162 -0
- package/dist/api/routes/gitnexus.js.map +1 -0
- package/dist/api/routes/graph.d.ts +4 -0
- package/dist/api/routes/graph.d.ts.map +1 -0
- package/dist/api/routes/graph.js +39 -0
- package/dist/api/routes/graph.js.map +1 -0
- package/dist/api/routes/import.d.ts +4 -0
- package/dist/api/routes/import.d.ts.map +1 -0
- package/dist/api/routes/import.js +92 -0
- package/dist/api/routes/import.js.map +1 -0
- package/dist/api/routes/insights.d.ts +4 -0
- package/dist/api/routes/insights.d.ts.map +1 -0
- package/dist/api/routes/insights.js +40 -0
- package/dist/api/routes/insights.js.map +1 -0
- package/dist/api/routes/integrations.d.ts +4 -0
- package/dist/api/routes/integrations.d.ts.map +1 -0
- package/dist/api/routes/integrations.js +85 -0
- package/dist/api/routes/integrations.js.map +1 -0
- package/dist/api/routes/knowledge.d.ts +8 -0
- package/dist/api/routes/knowledge.d.ts.map +1 -0
- package/dist/api/routes/knowledge.js +144 -0
- package/dist/api/routes/knowledge.js.map +1 -0
- package/dist/api/routes/nodes.d.ts +4 -0
- package/dist/api/routes/nodes.d.ts.map +1 -0
- package/dist/api/routes/nodes.js +123 -0
- package/dist/api/routes/nodes.js.map +1 -0
- package/dist/api/routes/project.d.ts +4 -0
- package/dist/api/routes/project.d.ts.map +1 -0
- package/dist/api/routes/project.js +70 -0
- package/dist/api/routes/project.js.map +1 -0
- package/dist/api/routes/rag.d.ts +8 -0
- package/dist/api/routes/rag.d.ts.map +1 -0
- package/dist/api/routes/rag.js +70 -0
- package/dist/api/routes/rag.js.map +1 -0
- package/dist/api/routes/search.d.ts +4 -0
- package/dist/api/routes/search.d.ts.map +1 -0
- package/dist/api/routes/search.js +25 -0
- package/dist/api/routes/search.js.map +1 -0
- package/dist/api/routes/skills.d.ts +3 -0
- package/dist/api/routes/skills.d.ts.map +1 -0
- package/dist/api/routes/skills.js +16 -0
- package/dist/api/routes/skills.js.map +1 -0
- package/dist/api/routes/stats.d.ts +4 -0
- package/dist/api/routes/stats.d.ts.map +1 -0
- package/dist/api/routes/stats.js +14 -0
- package/dist/api/routes/stats.js.map +1 -0
- package/dist/cli/commands/import-cmd.d.ts +3 -0
- package/dist/cli/commands/import-cmd.d.ts.map +1 -0
- package/dist/cli/commands/import-cmd.js +38 -0
- package/dist/cli/commands/import-cmd.js.map +1 -0
- package/dist/cli/commands/index-cmd.d.ts +3 -0
- package/dist/cli/commands/index-cmd.d.ts.map +1 -0
- package/dist/cli/commands/index-cmd.js +50 -0
- package/dist/cli/commands/index-cmd.js.map +1 -0
- package/dist/cli/commands/init.d.ts +3 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +24 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/serve.d.ts +3 -0
- package/dist/cli/commands/serve.d.ts.map +1 -0
- package/dist/cli/commands/serve.js +18 -0
- package/dist/cli/commands/serve.js.map +1 -0
- package/dist/cli/commands/stats.d.ts +3 -0
- package/dist/cli/commands/stats.d.ts.map +1 -0
- package/dist/cli/commands/stats.js +39 -0
- package/dist/cli/commands/stats.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +30 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/capture/content-extractor.d.ts +21 -0
- package/dist/core/capture/content-extractor.d.ts.map +1 -0
- package/dist/core/capture/content-extractor.js +74 -0
- package/dist/core/capture/content-extractor.js.map +1 -0
- package/dist/core/capture/validate-runner.d.ts +28 -0
- package/dist/core/capture/validate-runner.d.ts.map +1 -0
- package/dist/core/capture/validate-runner.js +42 -0
- package/dist/core/capture/validate-runner.js.map +1 -0
- package/dist/core/capture/web-capture.d.ts +20 -0
- package/dist/core/capture/web-capture.d.ts.map +1 -0
- package/dist/core/capture/web-capture.js +51 -0
- package/dist/core/capture/web-capture.js.map +1 -0
- package/dist/core/config/ai-memory-generator.d.ts +14 -0
- package/dist/core/config/ai-memory-generator.d.ts.map +1 -0
- package/dist/core/config/ai-memory-generator.js +130 -0
- package/dist/core/config/ai-memory-generator.js.map +1 -0
- package/dist/core/config/config-loader.d.ts +3 -0
- package/dist/core/config/config-loader.d.ts.map +1 -0
- package/dist/core/config/config-loader.js +48 -0
- package/dist/core/config/config-loader.js.map +1 -0
- package/dist/core/config/config-schema.d.ts +12 -0
- package/dist/core/config/config-schema.d.ts.map +1 -0
- package/dist/core/config/config-schema.js +13 -0
- package/dist/core/config/config-schema.js.map +1 -0
- package/dist/core/context/bm25-compressor.d.ts +21 -0
- package/dist/core/context/bm25-compressor.d.ts.map +1 -0
- package/dist/core/context/bm25-compressor.js +87 -0
- package/dist/core/context/bm25-compressor.js.map +1 -0
- package/dist/core/context/compact-context.d.ts +56 -0
- package/dist/core/context/compact-context.d.ts.map +1 -0
- package/dist/core/context/compact-context.js +170 -0
- package/dist/core/context/compact-context.js.map +1 -0
- package/dist/core/context/context-assembler.d.ts +43 -0
- package/dist/core/context/context-assembler.d.ts.map +1 -0
- package/dist/core/context/context-assembler.js +113 -0
- package/dist/core/context/context-assembler.js.map +1 -0
- package/dist/core/context/rag-context.d.ts +44 -0
- package/dist/core/context/rag-context.d.ts.map +1 -0
- package/dist/core/context/rag-context.js +93 -0
- package/dist/core/context/rag-context.js.map +1 -0
- package/dist/core/context/tiered-context.d.ts +35 -0
- package/dist/core/context/tiered-context.d.ts.map +1 -0
- package/dist/core/context/tiered-context.js +92 -0
- package/dist/core/context/tiered-context.js.map +1 -0
- package/dist/core/context/token-estimator.d.ts +7 -0
- package/dist/core/context/token-estimator.d.ts.map +1 -0
- package/dist/core/context/token-estimator.js +9 -0
- package/dist/core/context/token-estimator.js.map +1 -0
- package/dist/core/docs/docs-cache-store.d.ts +24 -0
- package/dist/core/docs/docs-cache-store.d.ts.map +1 -0
- package/dist/core/docs/docs-cache-store.js +61 -0
- package/dist/core/docs/docs-cache-store.js.map +1 -0
- package/dist/core/docs/docs-syncer.d.ts +13 -0
- package/dist/core/docs/docs-syncer.d.ts.map +1 -0
- package/dist/core/docs/docs-syncer.js +38 -0
- package/dist/core/docs/docs-syncer.js.map +1 -0
- package/dist/core/docs/mcp-context7-fetcher.d.ts +17 -0
- package/dist/core/docs/mcp-context7-fetcher.d.ts.map +1 -0
- package/dist/core/docs/mcp-context7-fetcher.js +87 -0
- package/dist/core/docs/mcp-context7-fetcher.js.map +1 -0
- package/dist/core/docs/stack-detector.d.ts +21 -0
- package/dist/core/docs/stack-detector.d.ts.map +1 -0
- package/dist/core/docs/stack-detector.js +101 -0
- package/dist/core/docs/stack-detector.js.map +1 -0
- package/dist/core/events/event-bus.d.ts +26 -0
- package/dist/core/events/event-bus.d.ts.map +1 -0
- package/dist/core/events/event-bus.js +47 -0
- package/dist/core/events/event-bus.js.map +1 -0
- package/dist/core/events/event-types.d.ts +71 -0
- package/dist/core/events/event-types.d.ts.map +1 -0
- package/dist/core/events/event-types.js +2 -0
- package/dist/core/events/event-types.js.map +1 -0
- package/dist/core/graph/graph-indexes.d.ts +3 -0
- package/dist/core/graph/graph-indexes.d.ts.map +1 -0
- package/dist/core/graph/graph-indexes.js +28 -0
- package/dist/core/graph/graph-indexes.js.map +1 -0
- package/dist/core/graph/graph-types.d.ts +72 -0
- package/dist/core/graph/graph-types.d.ts.map +1 -0
- package/dist/core/graph/graph-types.js +2 -0
- package/dist/core/graph/graph-types.js.map +1 -0
- package/dist/core/graph/mermaid-export.d.ts +9 -0
- package/dist/core/graph/mermaid-export.d.ts.map +1 -0
- package/dist/core/graph/mermaid-export.js +80 -0
- package/dist/core/graph/mermaid-export.js.map +1 -0
- package/dist/core/importer/import-prd.d.ts +7 -0
- package/dist/core/importer/import-prd.d.ts.map +1 -0
- package/dist/core/importer/import-prd.js +7 -0
- package/dist/core/importer/import-prd.js.map +1 -0
- package/dist/core/importer/prd-to-graph.d.ts +18 -0
- package/dist/core/importer/prd-to-graph.d.ts.map +1 -0
- package/dist/core/importer/prd-to-graph.js +195 -0
- package/dist/core/importer/prd-to-graph.js.map +1 -0
- package/dist/core/insights/bottleneck-detector.d.ts +31 -0
- package/dist/core/insights/bottleneck-detector.d.ts.map +1 -0
- package/dist/core/insights/bottleneck-detector.js +84 -0
- package/dist/core/insights/bottleneck-detector.js.map +1 -0
- package/dist/core/insights/metrics-calculator.d.ts +31 -0
- package/dist/core/insights/metrics-calculator.d.ts.map +1 -0
- package/dist/core/insights/metrics-calculator.js +78 -0
- package/dist/core/insights/metrics-calculator.js.map +1 -0
- package/dist/core/insights/skill-recommender.d.ts +21 -0
- package/dist/core/insights/skill-recommender.d.ts.map +1 -0
- package/dist/core/insights/skill-recommender.js +129 -0
- package/dist/core/insights/skill-recommender.js.map +1 -0
- package/dist/core/integrations/enriched-context.d.ts +24 -0
- package/dist/core/integrations/enriched-context.d.ts.map +1 -0
- package/dist/core/integrations/enriched-context.js +89 -0
- package/dist/core/integrations/enriched-context.js.map +1 -0
- package/dist/core/integrations/gitnexus-launcher.d.ts +62 -0
- package/dist/core/integrations/gitnexus-launcher.d.ts.map +1 -0
- package/dist/core/integrations/gitnexus-launcher.js +241 -0
- package/dist/core/integrations/gitnexus-launcher.js.map +1 -0
- package/dist/core/integrations/gitnexus-queries.d.ts +55 -0
- package/dist/core/integrations/gitnexus-queries.d.ts.map +1 -0
- package/dist/core/integrations/gitnexus-queries.js +168 -0
- package/dist/core/integrations/gitnexus-queries.js.map +1 -0
- package/dist/core/integrations/integration-orchestrator.d.ts +51 -0
- package/dist/core/integrations/integration-orchestrator.d.ts.map +1 -0
- package/dist/core/integrations/integration-orchestrator.js +118 -0
- package/dist/core/integrations/integration-orchestrator.js.map +1 -0
- package/dist/core/integrations/mcp-deps-installer.d.ts +21 -0
- package/dist/core/integrations/mcp-deps-installer.d.ts.map +1 -0
- package/dist/core/integrations/mcp-deps-installer.js +114 -0
- package/dist/core/integrations/mcp-deps-installer.js.map +1 -0
- package/dist/core/integrations/mcp-servers-config.d.ts +21 -0
- package/dist/core/integrations/mcp-servers-config.d.ts.map +1 -0
- package/dist/core/integrations/mcp-servers-config.js +58 -0
- package/dist/core/integrations/mcp-servers-config.js.map +1 -0
- package/dist/core/integrations/serena-reader.d.ts +18 -0
- package/dist/core/integrations/serena-reader.d.ts.map +1 -0
- package/dist/core/integrations/serena-reader.js +68 -0
- package/dist/core/integrations/serena-reader.js.map +1 -0
- package/dist/core/integrations/tool-status.d.ts +18 -0
- package/dist/core/integrations/tool-status.d.ts.map +1 -0
- package/dist/core/integrations/tool-status.js +97 -0
- package/dist/core/integrations/tool-status.js.map +1 -0
- package/dist/core/parser/classify.d.ts +31 -0
- package/dist/core/parser/classify.d.ts.map +1 -0
- package/dist/core/parser/classify.js +128 -0
- package/dist/core/parser/classify.js.map +1 -0
- package/dist/core/parser/extract.d.ts +21 -0
- package/dist/core/parser/extract.d.ts.map +1 -0
- package/dist/core/parser/extract.js +66 -0
- package/dist/core/parser/extract.js.map +1 -0
- package/dist/core/parser/file-reader.d.ts +13 -0
- package/dist/core/parser/file-reader.d.ts.map +1 -0
- package/dist/core/parser/file-reader.js +52 -0
- package/dist/core/parser/file-reader.js.map +1 -0
- package/dist/core/parser/normalize.d.ts +9 -0
- package/dist/core/parser/normalize.d.ts.map +1 -0
- package/dist/core/parser/normalize.js +22 -0
- package/dist/core/parser/normalize.js.map +1 -0
- package/dist/core/parser/read-file.d.ts +7 -0
- package/dist/core/parser/read-file.d.ts.map +1 -0
- package/dist/core/parser/read-file.js +17 -0
- package/dist/core/parser/read-file.js.map +1 -0
- package/dist/core/parser/read-html.d.ts +7 -0
- package/dist/core/parser/read-html.d.ts.map +1 -0
- package/dist/core/parser/read-html.js +51 -0
- package/dist/core/parser/read-html.js.map +1 -0
- package/dist/core/parser/read-pdf.d.ts +10 -0
- package/dist/core/parser/read-pdf.d.ts.map +1 -0
- package/dist/core/parser/read-pdf.js +16 -0
- package/dist/core/parser/read-pdf.js.map +1 -0
- package/dist/core/parser/segment.d.ts +13 -0
- package/dist/core/parser/segment.d.ts.map +1 -0
- package/dist/core/parser/segment.js +53 -0
- package/dist/core/parser/segment.js.map +1 -0
- package/dist/core/planner/decompose.d.ts +25 -0
- package/dist/core/planner/decompose.d.ts.map +1 -0
- package/dist/core/planner/decompose.js +100 -0
- package/dist/core/planner/decompose.js.map +1 -0
- package/dist/core/planner/dependency-chain.d.ts +20 -0
- package/dist/core/planner/dependency-chain.d.ts.map +1 -0
- package/dist/core/planner/dependency-chain.js +163 -0
- package/dist/core/planner/dependency-chain.js.map +1 -0
- package/dist/core/planner/enhanced-next.d.ts +25 -0
- package/dist/core/planner/enhanced-next.d.ts.map +1 -0
- package/dist/core/planner/enhanced-next.js +88 -0
- package/dist/core/planner/enhanced-next.js.map +1 -0
- package/dist/core/planner/lifecycle-phase.d.ts +21 -0
- package/dist/core/planner/lifecycle-phase.d.ts.map +1 -0
- package/dist/core/planner/lifecycle-phase.js +93 -0
- package/dist/core/planner/lifecycle-phase.js.map +1 -0
- package/dist/core/planner/next-task.d.ts +16 -0
- package/dist/core/planner/next-task.d.ts.map +1 -0
- package/dist/core/planner/next-task.js +146 -0
- package/dist/core/planner/next-task.js.map +1 -0
- package/dist/core/planner/planning-report.d.ts +38 -0
- package/dist/core/planner/planning-report.d.ts.map +1 -0
- package/dist/core/planner/planning-report.js +140 -0
- package/dist/core/planner/planning-report.js.map +1 -0
- package/dist/core/planner/velocity.d.ts +38 -0
- package/dist/core/planner/velocity.d.ts.map +1 -0
- package/dist/core/planner/velocity.js +92 -0
- package/dist/core/planner/velocity.js.map +1 -0
- package/dist/core/rag/capture-indexer.d.ts +16 -0
- package/dist/core/rag/capture-indexer.d.ts.map +1 -0
- package/dist/core/rag/capture-indexer.js +37 -0
- package/dist/core/rag/capture-indexer.js.map +1 -0
- package/dist/core/rag/chunk-text.d.ts +27 -0
- package/dist/core/rag/chunk-text.d.ts.map +1 -0
- package/dist/core/rag/chunk-text.js +112 -0
- package/dist/core/rag/chunk-text.js.map +1 -0
- package/dist/core/rag/docs-indexer.d.ts +18 -0
- package/dist/core/rag/docs-indexer.d.ts.map +1 -0
- package/dist/core/rag/docs-indexer.js +57 -0
- package/dist/core/rag/docs-indexer.js.map +1 -0
- package/dist/core/rag/embedding-store.d.ts +51 -0
- package/dist/core/rag/embedding-store.d.ts.map +1 -0
- package/dist/core/rag/embedding-store.js +134 -0
- package/dist/core/rag/embedding-store.js.map +1 -0
- package/dist/core/rag/rag-pipeline.d.ts +48 -0
- package/dist/core/rag/rag-pipeline.d.ts.map +1 -0
- package/dist/core/rag/rag-pipeline.js +276 -0
- package/dist/core/rag/rag-pipeline.js.map +1 -0
- package/dist/core/rag/serena-indexer.d.ts +16 -0
- package/dist/core/rag/serena-indexer.d.ts.map +1 -0
- package/dist/core/rag/serena-indexer.js +50 -0
- package/dist/core/rag/serena-indexer.js.map +1 -0
- package/dist/core/rag/serena-rag-query.d.ts +34 -0
- package/dist/core/rag/serena-rag-query.d.ts.map +1 -0
- package/dist/core/rag/serena-rag-query.js +83 -0
- package/dist/core/rag/serena-rag-query.js.map +1 -0
- package/dist/core/search/fts-search.d.ts +16 -0
- package/dist/core/search/fts-search.d.ts.map +1 -0
- package/dist/core/search/fts-search.js +62 -0
- package/dist/core/search/fts-search.js.map +1 -0
- package/dist/core/search/tfidf.d.ts +32 -0
- package/dist/core/search/tfidf.d.ts.map +1 -0
- package/dist/core/search/tfidf.js +67 -0
- package/dist/core/search/tfidf.js.map +1 -0
- package/dist/core/search/tokenizer.d.ts +9 -0
- package/dist/core/search/tokenizer.d.ts.map +1 -0
- package/dist/core/search/tokenizer.js +37 -0
- package/dist/core/search/tokenizer.js.map +1 -0
- package/dist/core/store/knowledge-store.d.ts +72 -0
- package/dist/core/store/knowledge-store.d.ts.map +1 -0
- package/dist/core/store/knowledge-store.js +166 -0
- package/dist/core/store/knowledge-store.js.map +1 -0
- package/dist/core/store/migrations.d.ts +4 -0
- package/dist/core/store/migrations.d.ts.map +1 -0
- package/dist/core/store/migrations.js +223 -0
- package/dist/core/store/migrations.js.map +1 -0
- package/dist/core/store/sqlite-store.d.ts +86 -0
- package/dist/core/store/sqlite-store.d.ts.map +1 -0
- package/dist/core/store/sqlite-store.js +707 -0
- package/dist/core/store/sqlite-store.js.map +1 -0
- package/dist/core/utils/constants.d.ts +10 -0
- package/dist/core/utils/constants.d.ts.map +1 -0
- package/dist/core/utils/constants.js +10 -0
- package/dist/core/utils/constants.js.map +1 -0
- package/dist/core/utils/errors.d.ts +20 -0
- package/dist/core/utils/errors.d.ts.map +1 -0
- package/dist/core/utils/errors.js +39 -0
- package/dist/core/utils/errors.js.map +1 -0
- package/dist/core/utils/fs.d.ts +2 -0
- package/dist/core/utils/fs.d.ts.map +1 -0
- package/dist/core/utils/fs.js +11 -0
- package/dist/core/utils/fs.js.map +1 -0
- package/dist/core/utils/id.d.ts +2 -0
- package/dist/core/utils/id.d.ts.map +1 -0
- package/dist/core/utils/id.js +6 -0
- package/dist/core/utils/id.js.map +1 -0
- package/dist/core/utils/logger.d.ts +8 -0
- package/dist/core/utils/logger.d.ts.map +1 -0
- package/dist/core/utils/logger.js +28 -0
- package/dist/core/utils/logger.js.map +1 -0
- package/dist/core/utils/platform.d.ts +18 -0
- package/dist/core/utils/platform.d.ts.map +1 -0
- package/dist/core/utils/platform.js +43 -0
- package/dist/core/utils/platform.js.map +1 -0
- package/dist/core/utils/time.d.ts +2 -0
- package/dist/core/utils/time.d.ts.map +1 -0
- package/dist/core/utils/time.js +4 -0
- package/dist/core/utils/time.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/init-project.d.ts +2 -0
- package/dist/mcp/init-project.d.ts.map +1 -0
- package/dist/mcp/init-project.js +144 -0
- package/dist/mcp/init-project.js.map +1 -0
- package/dist/mcp/lifecycle-wrapper.d.ts +26 -0
- package/dist/mcp/lifecycle-wrapper.d.ts.map +1 -0
- package/dist/mcp/lifecycle-wrapper.js +67 -0
- package/dist/mcp/lifecycle-wrapper.js.map +1 -0
- package/dist/mcp/server.d.ts +3 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +73 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/stdio.d.ts +3 -0
- package/dist/mcp/stdio.d.ts.map +1 -0
- package/dist/mcp/stdio.js +20 -0
- package/dist/mcp/stdio.js.map +1 -0
- package/dist/mcp/tools/add-node.d.ts +4 -0
- package/dist/mcp/tools/add-node.d.ts.map +1 -0
- package/dist/mcp/tools/add-node.js +83 -0
- package/dist/mcp/tools/add-node.js.map +1 -0
- package/dist/mcp/tools/bulk-update-status.d.ts +4 -0
- package/dist/mcp/tools/bulk-update-status.d.ts.map +1 -0
- package/dist/mcp/tools/bulk-update-status.js +22 -0
- package/dist/mcp/tools/bulk-update-status.js.map +1 -0
- package/dist/mcp/tools/clone-node.d.ts +4 -0
- package/dist/mcp/tools/clone-node.d.ts.map +1 -0
- package/dist/mcp/tools/clone-node.js +111 -0
- package/dist/mcp/tools/clone-node.js.map +1 -0
- package/dist/mcp/tools/context.d.ts +4 -0
- package/dist/mcp/tools/context.d.ts.map +1 -0
- package/dist/mcp/tools/context.js +30 -0
- package/dist/mcp/tools/context.js.map +1 -0
- package/dist/mcp/tools/decompose.d.ts +4 -0
- package/dist/mcp/tools/decompose.d.ts.map +1 -0
- package/dist/mcp/tools/decompose.js +25 -0
- package/dist/mcp/tools/decompose.js.map +1 -0
- package/dist/mcp/tools/delete-node.d.ts +4 -0
- package/dist/mcp/tools/delete-node.d.ts.map +1 -0
- package/dist/mcp/tools/delete-node.js +29 -0
- package/dist/mcp/tools/delete-node.js.map +1 -0
- package/dist/mcp/tools/dependencies.d.ts +4 -0
- package/dist/mcp/tools/dependencies.d.ts.map +1 -0
- package/dist/mcp/tools/dependencies.js +47 -0
- package/dist/mcp/tools/dependencies.js.map +1 -0
- package/dist/mcp/tools/edge.d.ts +4 -0
- package/dist/mcp/tools/edge.d.ts.map +1 -0
- package/dist/mcp/tools/edge.js +140 -0
- package/dist/mcp/tools/edge.js.map +1 -0
- package/dist/mcp/tools/export.d.ts +4 -0
- package/dist/mcp/tools/export.d.ts.map +1 -0
- package/dist/mcp/tools/export.js +38 -0
- package/dist/mcp/tools/export.js.map +1 -0
- package/dist/mcp/tools/import-prd.d.ts +4 -0
- package/dist/mcp/tools/import-prd.d.ts.map +1 -0
- package/dist/mcp/tools/import-prd.js +81 -0
- package/dist/mcp/tools/import-prd.js.map +1 -0
- package/dist/mcp/tools/index.d.ts +4 -0
- package/dist/mcp/tools/index.d.ts.map +1 -0
- package/dist/mcp/tools/index.js +58 -0
- package/dist/mcp/tools/index.js.map +1 -0
- package/dist/mcp/tools/init.d.ts +4 -0
- package/dist/mcp/tools/init.d.ts.map +1 -0
- package/dist/mcp/tools/init.js +18 -0
- package/dist/mcp/tools/init.js.map +1 -0
- package/dist/mcp/tools/list.d.ts +4 -0
- package/dist/mcp/tools/list.d.ts.map +1 -0
- package/dist/mcp/tools/list.js +56 -0
- package/dist/mcp/tools/list.js.map +1 -0
- package/dist/mcp/tools/move-node.d.ts +4 -0
- package/dist/mcp/tools/move-node.d.ts.map +1 -0
- package/dist/mcp/tools/move-node.js +110 -0
- package/dist/mcp/tools/move-node.js.map +1 -0
- package/dist/mcp/tools/next.d.ts +4 -0
- package/dist/mcp/tools/next.d.ts.map +1 -0
- package/dist/mcp/tools/next.js +32 -0
- package/dist/mcp/tools/next.js.map +1 -0
- package/dist/mcp/tools/plan-sprint.d.ts +4 -0
- package/dist/mcp/tools/plan-sprint.d.ts.map +1 -0
- package/dist/mcp/tools/plan-sprint.js +54 -0
- package/dist/mcp/tools/plan-sprint.js.map +1 -0
- package/dist/mcp/tools/rag-context.d.ts +4 -0
- package/dist/mcp/tools/rag-context.d.ts.map +1 -0
- package/dist/mcp/tools/rag-context.js +51 -0
- package/dist/mcp/tools/rag-context.js.map +1 -0
- package/dist/mcp/tools/reindex-knowledge.d.ts +4 -0
- package/dist/mcp/tools/reindex-knowledge.d.ts.map +1 -0
- package/dist/mcp/tools/reindex-knowledge.js +49 -0
- package/dist/mcp/tools/reindex-knowledge.js.map +1 -0
- package/dist/mcp/tools/search.d.ts +4 -0
- package/dist/mcp/tools/search.d.ts.map +1 -0
- package/dist/mcp/tools/search.js +41 -0
- package/dist/mcp/tools/search.js.map +1 -0
- package/dist/mcp/tools/show.d.ts +4 -0
- package/dist/mcp/tools/show.d.ts.map +1 -0
- package/dist/mcp/tools/show.js +42 -0
- package/dist/mcp/tools/show.js.map +1 -0
- package/dist/mcp/tools/snapshot.d.ts +4 -0
- package/dist/mcp/tools/snapshot.d.ts.map +1 -0
- package/dist/mcp/tools/snapshot.js +45 -0
- package/dist/mcp/tools/snapshot.js.map +1 -0
- package/dist/mcp/tools/stats.d.ts +4 -0
- package/dist/mcp/tools/stats.d.ts.map +1 -0
- package/dist/mcp/tools/stats.js +46 -0
- package/dist/mcp/tools/stats.js.map +1 -0
- package/dist/mcp/tools/sync-stack-docs.d.ts +4 -0
- package/dist/mcp/tools/sync-stack-docs.d.ts.map +1 -0
- package/dist/mcp/tools/sync-stack-docs.js +77 -0
- package/dist/mcp/tools/sync-stack-docs.js.map +1 -0
- package/dist/mcp/tools/update-node.d.ts +4 -0
- package/dist/mcp/tools/update-node.d.ts.map +1 -0
- package/dist/mcp/tools/update-node.js +45 -0
- package/dist/mcp/tools/update-node.js.map +1 -0
- package/dist/mcp/tools/update-status.d.ts +4 -0
- package/dist/mcp/tools/update-status.d.ts.map +1 -0
- package/dist/mcp/tools/update-status.js +33 -0
- package/dist/mcp/tools/update-status.js.map +1 -0
- package/dist/mcp/tools/validate-task.d.ts +4 -0
- package/dist/mcp/tools/validate-task.d.ts.map +1 -0
- package/dist/mcp/tools/validate-task.js +57 -0
- package/dist/mcp/tools/validate-task.js.map +1 -0
- package/dist/mcp/tools/velocity.d.ts +4 -0
- package/dist/mcp/tools/velocity.d.ts.map +1 -0
- package/dist/mcp/tools/velocity.js +25 -0
- package/dist/mcp/tools/velocity.js.map +1 -0
- package/dist/schemas/edge.schema.d.ts +31 -0
- package/dist/schemas/edge.schema.d.ts.map +1 -0
- package/dist/schemas/edge.schema.js +16 -0
- package/dist/schemas/edge.schema.js.map +1 -0
- package/dist/schemas/graph.schema.d.ts +102 -0
- package/dist/schemas/graph.schema.d.ts.map +1 -0
- package/dist/schemas/graph.schema.js +28 -0
- package/dist/schemas/graph.schema.js.map +1 -0
- package/dist/schemas/knowledge.schema.d.ts +29 -0
- package/dist/schemas/knowledge.schema.d.ts.map +1 -0
- package/dist/schemas/knowledge.schema.js +17 -0
- package/dist/schemas/knowledge.schema.js.map +1 -0
- package/dist/schemas/node.schema.d.ts +80 -0
- package/dist/schemas/node.schema.d.ts.map +1 -0
- package/dist/schemas/node.schema.js +38 -0
- package/dist/schemas/node.schema.js.map +1 -0
- package/dist/web/dashboard/dist/assets/benchmark-tab-BTKW3REK.js +1 -0
- package/dist/web/dashboard/dist/assets/benchmark-tab-BhbUvjLM.js +1 -0
- package/dist/web/dashboard/dist/assets/benchmark-tab-CESZcCtO.js +1 -0
- package/dist/web/dashboard/dist/assets/benchmark-tab-D64Ala80.js +1 -0
- package/dist/web/dashboard/dist/assets/benchmark-tab-DJ7HyF-u.js +1 -0
- package/dist/web/dashboard/dist/assets/benchmark-tab-DVyzQZ2d.js +1 -0
- package/dist/web/dashboard/dist/assets/benchmark-tab-XUH7yQNv.js +1 -0
- package/dist/web/dashboard/dist/assets/benchmark-tab-ZfJu1pxc.js +1 -0
- package/dist/web/dashboard/dist/assets/constants-BIEJOBya.js +1 -0
- package/dist/web/dashboard/dist/assets/gitnexus-tab-BFHEXsJm.js +312 -0
- package/dist/web/dashboard/dist/assets/gitnexus-tab-Bbp91fom.js +312 -0
- package/dist/web/dashboard/dist/assets/gitnexus-tab-C3fPSzYi.js +312 -0
- package/dist/web/dashboard/dist/assets/gitnexus-tab-Cd0k8qk3.js +312 -0
- package/dist/web/dashboard/dist/assets/gitnexus-tab-ClNGphK5.js +312 -0
- package/dist/web/dashboard/dist/assets/gitnexus-tab-Cuc-KSII.js +312 -0
- package/dist/web/dashboard/dist/assets/gitnexus-tab-DEqMBSbC.css +1 -0
- package/dist/web/dashboard/dist/assets/gitnexus-tab-DEwJXSnD.js +312 -0
- package/dist/web/dashboard/dist/assets/gitnexus-tab-DOD7xwmm.js +312 -0
- package/dist/web/dashboard/dist/assets/graph-tab-AD7csRcc.js +1 -0
- package/dist/web/dashboard/dist/assets/graph-tab-BKyDCyHH.js +1 -0
- package/dist/web/dashboard/dist/assets/graph-tab-BUAkTto0.js +1 -0
- package/dist/web/dashboard/dist/assets/graph-tab-D0F0WJES.js +1 -0
- package/dist/web/dashboard/dist/assets/graph-tab-DA16nThT.js +1 -0
- package/dist/web/dashboard/dist/assets/graph-tab-DJknUhrl.js +1 -0
- package/dist/web/dashboard/dist/assets/graph-tab-DRPfelKw.js +1 -0
- package/dist/web/dashboard/dist/assets/graph-tab-lJ2rPS4Z.js +1 -0
- package/dist/web/dashboard/dist/assets/graph-utils-BN7tt0ZS.js +23 -0
- package/dist/web/dashboard/dist/assets/graph-utils-BTV1KGUM.js +23 -0
- package/dist/web/dashboard/dist/assets/graph-utils-BZV40eAE.css +1 -0
- package/dist/web/dashboard/dist/assets/graph-utils-BkfAOVJ9.js +23 -0
- package/dist/web/dashboard/dist/assets/graph-utils-Bo7cD1sx.js +23 -0
- package/dist/web/dashboard/dist/assets/graph-utils-CI4znRl5.js +23 -0
- package/dist/web/dashboard/dist/assets/graph-utils-DrCx5m7q.js +23 -0
- package/dist/web/dashboard/dist/assets/graph-utils-KQmzMFXM.js +23 -0
- package/dist/web/dashboard/dist/assets/graph-utils-M7iOhRI-.js +23 -0
- package/dist/web/dashboard/dist/assets/index-BGMP3W6f.css +1 -0
- package/dist/web/dashboard/dist/assets/index-BVXu3x9W.js +53 -0
- package/dist/web/dashboard/dist/assets/index-B_T9j86O.js +53 -0
- package/dist/web/dashboard/dist/assets/index-Bga9WW2A.css +1 -0
- package/dist/web/dashboard/dist/assets/index-BnLPCC8R.css +1 -0
- package/dist/web/dashboard/dist/assets/index-BonF71I0.js +53 -0
- package/dist/web/dashboard/dist/assets/index-CSyjxREL.js +53 -0
- package/dist/web/dashboard/dist/assets/index-CbUKe2Fv.js +53 -0
- package/dist/web/dashboard/dist/assets/index-D9i2aVjo.js +53 -0
- package/dist/web/dashboard/dist/assets/index-DzM6oBA3.js +53 -0
- package/dist/web/dashboard/dist/assets/index-IK005MzD.js +53 -0
- package/dist/web/dashboard/dist/assets/insights-tab-B9R3HsMU.js +1 -0
- package/dist/web/dashboard/dist/assets/insights-tab-BO_cxLyV.js +1 -0
- package/dist/web/dashboard/dist/assets/insights-tab-Brn6IMfQ.js +1 -0
- package/dist/web/dashboard/dist/assets/insights-tab-C6x-aJ8p.js +1 -0
- package/dist/web/dashboard/dist/assets/insights-tab-CWUU6eDi.js +1 -0
- package/dist/web/dashboard/dist/assets/insights-tab-CapL1jP-.js +1 -0
- package/dist/web/dashboard/dist/assets/insights-tab-CeWM6zgV.js +1 -0
- package/dist/web/dashboard/dist/assets/insights-tab-xQj5e61M.js +1 -0
- package/dist/web/dashboard/dist/assets/prd-backlog-tab-0oOO63rA.js +1 -0
- package/dist/web/dashboard/dist/assets/prd-backlog-tab-BcWoplsM.js +1 -0
- package/dist/web/dashboard/dist/assets/prd-backlog-tab-Bjj5KccG.js +1 -0
- package/dist/web/dashboard/dist/assets/prd-backlog-tab-C7cKQyup.js +1 -0
- package/dist/web/dashboard/dist/assets/prd-backlog-tab-CT4ja7Ay.js +1 -0
- package/dist/web/dashboard/dist/assets/prd-backlog-tab-CmPHHBDQ.js +1 -0
- package/dist/web/dashboard/dist/assets/prd-backlog-tab-DAHBiRO-.js +1 -0
- package/dist/web/dashboard/dist/assets/prd-backlog-tab-_jmBe3MU.js +1 -0
- package/dist/web/dashboard/dist/assets/serena-tab-BVyBTaHC.js +1 -0
- package/dist/web/dashboard/dist/assets/serena-tab-CVI1GGRk.js +1 -0
- package/dist/web/dashboard/dist/assets/serena-tab-D1ki2NjT.js +1 -0
- package/dist/web/dashboard/dist/assets/serena-tab-DRrRfjpO.js +1 -0
- package/dist/web/dashboard/dist/assets/serena-tab-DvYbwR4Z.js +1 -0
- package/dist/web/dashboard/dist/assets/serena-tab-DwiZ6Jm3.js +1 -0
- package/dist/web/dashboard/dist/assets/serena-tab-L6isY0iT.js +1 -0
- package/dist/web/dashboard/dist/assets/serena-tab-ba2n0AOh.js +1 -0
- package/dist/web/dashboard/dist/index.html +13 -0
- package/package.json +86 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Copilot Ecosystem Contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
# @mcp-graph-workflow/mcp-graph
|
|
2
|
+
|
|
3
|
+
[](https://github.com/DiegoNogueiraDev/mcp-graph-workflow/actions/workflows/ci.yml)
|
|
4
|
+
[](https://www.npmjs.com/package/@mcp-graph-workflow/mcp-graph)
|
|
5
|
+
[](https://nodejs.org)
|
|
6
|
+
[](https://opensource.org/licenses/MIT)
|
|
7
|
+
[](https://www.typescriptlang.org/)
|
|
8
|
+
[](CONTRIBUTING.md)
|
|
9
|
+
|
|
10
|
+
**Automate project planning from PRD to execution.** Local-first CLI that converts product requirement documents into structured task graphs with AI-powered context, semantic search, and multi-agent orchestration.
|
|
11
|
+
|
|
12
|
+
<p align="center">
|
|
13
|
+
<img src="docs/images/dashboard-graph.png" alt="mcp-graph dashboard — task graph view" width="800">
|
|
14
|
+
</p>
|
|
15
|
+
|
|
16
|
+
## Quick Start
|
|
17
|
+
|
|
18
|
+
### GitHub Copilot (VS Code)
|
|
19
|
+
|
|
20
|
+
Create `.vscode/mcp.json` in your project:
|
|
21
|
+
|
|
22
|
+
```json
|
|
23
|
+
{
|
|
24
|
+
"servers": {
|
|
25
|
+
"mcp-graph": {
|
|
26
|
+
"type": "stdio",
|
|
27
|
+
"command": "npx",
|
|
28
|
+
"args": ["-y", "@mcp-graph-workflow/mcp-graph"]
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Enable **Agent Mode** in Copilot Chat, then use the tools: `init → import_prd → next → context → update_status`
|
|
35
|
+
|
|
36
|
+
### Claude Code / Cursor / IntelliJ
|
|
37
|
+
|
|
38
|
+
Add to `.mcp.json`:
|
|
39
|
+
|
|
40
|
+
```json
|
|
41
|
+
{
|
|
42
|
+
"mcpServers": {
|
|
43
|
+
"mcp-graph": {
|
|
44
|
+
"command": "npx",
|
|
45
|
+
"args": ["-y", "@mcp-graph-workflow/mcp-graph"]
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Windsurf / Zed / Other MCP Clients
|
|
52
|
+
|
|
53
|
+
Use stdio transport with:
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
npx -y @mcp-graph-workflow/mcp-graph
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### From Source
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
git clone <repo-url> && cd mcp-graph-workflow
|
|
63
|
+
npm install && npm run build
|
|
64
|
+
npm run dev # HTTP + dashboard at localhost:3000
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
> For detailed setup, see [Getting Started](docs/GETTING-STARTED.md).
|
|
68
|
+
|
|
69
|
+
## Features
|
|
70
|
+
|
|
71
|
+
- **PRD → Task Graph** — Import .md, .txt, .pdf, or .html documents and auto-generate hierarchical task trees
|
|
72
|
+
- **AI-Optimized Context** — 70-85% token reduction with tiered compression (summary/standard/deep)
|
|
73
|
+
- **Smart Task Routing** — `next` suggests the best task based on priority, dependencies, and blockers
|
|
74
|
+
- **Semantic Search + RAG** — Full-text BM25 search + TF-IDF embeddings, 100% local
|
|
75
|
+
- **Sprint Planning** — Velocity metrics, capacity-based planning, risk assessment
|
|
76
|
+
- **Web Dashboard** — Interactive graph visualization, backlog tracking, code intelligence, insights
|
|
77
|
+
- **Multi-Agent Mesh** — Serena + GitNexus + Context7 + Playwright coordinated via event bus
|
|
78
|
+
- **Local-First** — SQLite persistence, zero external dependencies, cross-platform
|
|
79
|
+
|
|
80
|
+
## Who is this for?
|
|
81
|
+
|
|
82
|
+
| Persona | Use Case |
|
|
83
|
+
|---------|----------|
|
|
84
|
+
| **AI Engineers** | Structured agentic workflows with token-efficient context |
|
|
85
|
+
| **Tech Leads** | PRD decomposition into trackable, dependency-aware task graphs |
|
|
86
|
+
| **Solo Developers** | Project planning with AI-powered suggestions and progress tracking |
|
|
87
|
+
| **Teams using Copilot/Claude/Cursor** | MCP-native tool integration for AI-assisted development |
|
|
88
|
+
|
|
89
|
+
## Dashboard
|
|
90
|
+
|
|
91
|
+
6 tabs: **Graph** (interactive diagram + filters) · **PRD & Backlog** (progress tracking) · **GitNexus** (code intelligence) · **Serena** (code memories) · **Insights** (bottlenecks + metrics) · **Benchmark** (token economy)
|
|
92
|
+
|
|
93
|
+
<p align="center">
|
|
94
|
+
<img src="docs/images/dashboard-prd-backlog.png" alt="mcp-graph dashboard — PRD & Backlog view" width="800">
|
|
95
|
+
</p>
|
|
96
|
+
|
|
97
|
+
<p align="center">
|
|
98
|
+
<img src="docs/images/dashboard-insights.png" alt="mcp-graph dashboard — Insights view" width="800">
|
|
99
|
+
</p>
|
|
100
|
+
|
|
101
|
+
<p align="center">
|
|
102
|
+
<img src="docs/images/dashboard-benchmark.png" alt="mcp-graph dashboard — Benchmark token economy" width="800">
|
|
103
|
+
</p>
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
mcp-graph serve --port 3000 # or: npm run dev
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Tools & API
|
|
110
|
+
|
|
111
|
+
| | Count | Reference |
|
|
112
|
+
|---|---|---|
|
|
113
|
+
| **MCP Tools** | 26 | [MCP-TOOLS-REFERENCE.md](docs/MCP-TOOLS-REFERENCE.md) |
|
|
114
|
+
| **REST Endpoints** | 44 (17 routers) | [REST-API-REFERENCE.md](docs/REST-API-REFERENCE.md) |
|
|
115
|
+
| **CLI Commands** | 5 | `init`, `import`, `index`, `stats`, `serve` |
|
|
116
|
+
|
|
117
|
+
## Integrations
|
|
118
|
+
|
|
119
|
+
| Integration | Role |
|
|
120
|
+
|-------------|------|
|
|
121
|
+
| **Serena** | Code analysis, memory, symbol navigation |
|
|
122
|
+
| **GitNexus** | Git graph, impact analysis, dependency visualization |
|
|
123
|
+
| **Context7** | Up-to-date library documentation fetching |
|
|
124
|
+
| **Playwright** | Browser-based task validation and A/B testing |
|
|
125
|
+
|
|
126
|
+
All coordinated by an event-driven `IntegrationOrchestrator`. See [INTEGRATIONS-GUIDE.md](docs/INTEGRATIONS-GUIDE.md).
|
|
127
|
+
|
|
128
|
+
## Testing
|
|
129
|
+
|
|
130
|
+
**910+ tests** across 101 Vitest files + 11 Playwright E2E specs.
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
npm test # Unit + integration
|
|
134
|
+
npm run test:e2e # Browser E2E (Playwright)
|
|
135
|
+
npm run test:all # Everything
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## Documentation
|
|
139
|
+
|
|
140
|
+
| Document | Description |
|
|
141
|
+
|----------|-------------|
|
|
142
|
+
| [Getting Started](docs/GETTING-STARTED.md) | Step-by-step guide for new users |
|
|
143
|
+
| [Architecture](docs/ARCHITECTURE-GUIDE.md) | System layers, modules, data flows |
|
|
144
|
+
| [MCP Tools Reference](docs/MCP-TOOLS-REFERENCE.md) | 26 tools with full parameters |
|
|
145
|
+
| [REST API Reference](docs/REST-API-REFERENCE.md) | 17 routers, 44 endpoints |
|
|
146
|
+
| [Knowledge Pipeline](docs/KNOWLEDGE-PIPELINE.md) | RAG, embeddings, context assembly |
|
|
147
|
+
| [Integrations](docs/INTEGRATIONS-GUIDE.md) | Serena, GitNexus, Context7, Playwright |
|
|
148
|
+
| [Test Guide](docs/TEST-GUIDE.md) | Test pyramid and best practices |
|
|
149
|
+
| [Lifecycle](docs/LIFECYCLE.md) | 8-phase dev methodology |
|
|
150
|
+
|
|
151
|
+
## Contributing
|
|
152
|
+
|
|
153
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md). TDD is mandatory — write the failing test first.
|
|
154
|
+
|
|
155
|
+
## License
|
|
156
|
+
|
|
157
|
+
[MIT](LICENSE)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../../src/api/middleware/error-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AA4B/D,wBAAgB,YAAY,CAC1B,GAAG,EAAE,KAAK,EACV,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,YAAY,GAClB,IAAI,CA2BN"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { z } from "zod/v4";
|
|
2
|
+
import { McpGraphError, GraphNotInitializedError, NodeNotFoundError, ValidationError, SnapshotNotFoundError, FileNotFoundError, } from "../../core/utils/errors.js";
|
|
3
|
+
import { logger } from "../../core/utils/logger.js";
|
|
4
|
+
function mapErrorToStatus(err) {
|
|
5
|
+
if (err instanceof GraphNotInitializedError)
|
|
6
|
+
return 409;
|
|
7
|
+
if (err instanceof NodeNotFoundError)
|
|
8
|
+
return 404;
|
|
9
|
+
if (err instanceof FileNotFoundError)
|
|
10
|
+
return 404;
|
|
11
|
+
if (err instanceof SnapshotNotFoundError)
|
|
12
|
+
return 404;
|
|
13
|
+
if (err instanceof ValidationError)
|
|
14
|
+
return 400;
|
|
15
|
+
if (err instanceof z.ZodError)
|
|
16
|
+
return 400;
|
|
17
|
+
if (err instanceof McpGraphError)
|
|
18
|
+
return 400;
|
|
19
|
+
return 500;
|
|
20
|
+
}
|
|
21
|
+
export function errorHandler(err, req, res, _next) {
|
|
22
|
+
const status = mapErrorToStatus(err);
|
|
23
|
+
const body = { error: err.message };
|
|
24
|
+
if (err instanceof ValidationError) {
|
|
25
|
+
body.details = err.issues;
|
|
26
|
+
}
|
|
27
|
+
else if (err instanceof z.ZodError) {
|
|
28
|
+
body.details = err.issues;
|
|
29
|
+
}
|
|
30
|
+
if (status >= 500) {
|
|
31
|
+
logger.error("Unhandled API error", {
|
|
32
|
+
method: req.method,
|
|
33
|
+
path: req.path,
|
|
34
|
+
error: err.message,
|
|
35
|
+
stack: err.stack,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
else if (status >= 400) {
|
|
39
|
+
logger.warn("API client error", {
|
|
40
|
+
method: req.method,
|
|
41
|
+
path: req.path,
|
|
42
|
+
status,
|
|
43
|
+
error: err.message,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
res.status(status).json(body);
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=error-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../../src/api/middleware/error-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EACL,aAAa,EACb,wBAAwB,EACxB,iBAAiB,EACjB,eAAe,EACf,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAOpD,SAAS,gBAAgB,CAAC,GAAU;IAClC,IAAI,GAAG,YAAY,wBAAwB;QAAE,OAAO,GAAG,CAAC;IACxD,IAAI,GAAG,YAAY,iBAAiB;QAAE,OAAO,GAAG,CAAC;IACjD,IAAI,GAAG,YAAY,iBAAiB;QAAE,OAAO,GAAG,CAAC;IACjD,IAAI,GAAG,YAAY,qBAAqB;QAAE,OAAO,GAAG,CAAC;IACrD,IAAI,GAAG,YAAY,eAAe;QAAE,OAAO,GAAG,CAAC;IAC/C,IAAI,GAAG,YAAY,CAAC,CAAC,QAAQ;QAAE,OAAO,GAAG,CAAC;IAC1C,IAAI,GAAG,YAAY,aAAa;QAAE,OAAO,GAAG,CAAC;IAC7C,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,GAAU,EACV,GAAY,EACZ,GAAa,EACb,KAAmB;IAEnB,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,IAAI,GAAsB,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;IAEvD,IAAI,GAAG,YAAY,eAAe,EAAE,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC;IAC5B,CAAC;SAAM,IAAI,GAAG,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;QACrC,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC;IAC5B,CAAC;IAED,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;QAClB,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE;YAClC,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,KAAK,EAAE,GAAG,CAAC,OAAO;YAClB,KAAK,EAAE,GAAG,CAAC,KAAK;SACjB,CAAC,CAAC;IACL,CAAC;SAAM,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC9B,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,MAAM;YACN,KAAK,EAAE,GAAG,CAAC,OAAO;SACnB,CAAC,CAAC;IACL,CAAC;IAED,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Request, Response, NextFunction } from "express";
|
|
2
|
+
/**
|
|
3
|
+
* Express middleware that logs every HTTP request with method, path, status, and duration.
|
|
4
|
+
*/
|
|
5
|
+
export declare function requestLogger(req: Request, res: Response, next: NextFunction): void;
|
|
6
|
+
//# sourceMappingURL=request-logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-logger.d.ts","sourceRoot":"","sources":["../../../src/api/middleware/request-logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG/D;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI,CAgBnF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { logger } from "../../core/utils/logger.js";
|
|
2
|
+
/**
|
|
3
|
+
* Express middleware that logs every HTTP request with method, path, status, and duration.
|
|
4
|
+
*/
|
|
5
|
+
export function requestLogger(req, res, next) {
|
|
6
|
+
const start = performance.now();
|
|
7
|
+
res.on("finish", () => {
|
|
8
|
+
const durationMs = Math.round(performance.now() - start);
|
|
9
|
+
const level = res.statusCode >= 500 ? "error" : res.statusCode >= 400 ? "warn" : "info";
|
|
10
|
+
logger[level]("http:request", {
|
|
11
|
+
method: req.method,
|
|
12
|
+
path: req.path,
|
|
13
|
+
status: res.statusCode,
|
|
14
|
+
durationMs,
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
next();
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=request-logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-logger.js","sourceRoot":"","sources":["../../../src/api/middleware/request-logger.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAEpD;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB;IAC3E,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IAEhC,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACpB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;QAExF,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE;YAC5B,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,MAAM,EAAE,GAAG,CAAC,UAAU;YACtB,UAAU;SACX,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,EAAE,CAAC;AACT,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Request, Response, NextFunction } from "express";
|
|
2
|
+
import type { ZodType } from "zod/v4";
|
|
3
|
+
export declare function validateBody(schema: ZodType): (req: Request, res: Response, next: NextFunction) => void;
|
|
4
|
+
export declare function validateQuery(schema: ZodType): (req: Request, res: Response, next: NextFunction) => void;
|
|
5
|
+
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/api/middleware/validate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAItC,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,KAAK,IAAI,CAUvG;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,KAAK,IAAI,CASxG"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ValidationError } from "../../core/utils/errors.js";
|
|
2
|
+
export function validateBody(schema) {
|
|
3
|
+
return (req, _res, next) => {
|
|
4
|
+
const result = schema.safeParse(req.body);
|
|
5
|
+
if (!result.success) {
|
|
6
|
+
next(new ValidationError("Invalid request body", result.error.issues));
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
req.body = result.data;
|
|
10
|
+
next();
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export function validateQuery(schema) {
|
|
14
|
+
return (req, _res, next) => {
|
|
15
|
+
const result = schema.safeParse(req.query);
|
|
16
|
+
if (!result.success) {
|
|
17
|
+
next(new ValidationError("Invalid query parameters", result.error.issues));
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
next();
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/api/middleware/validate.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D,MAAM,UAAU,YAAY,CAAC,MAAe;IAC1C,OAAO,CAAC,GAAY,EAAE,IAAc,EAAE,IAAkB,EAAQ,EAAE;QAChE,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,CAAC,IAAI,eAAe,CAAC,sBAAsB,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;YACvE,OAAO;QACT,CAAC;QACD,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACvB,IAAI,EAAE,CAAC;IACT,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAe;IAC3C,OAAO,CAAC,GAAY,EAAE,IAAc,EAAE,IAAkB,EAAQ,EAAE;QAChE,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,CAAC,IAAI,eAAe,CAAC,0BAA0B,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;YAC3E,OAAO;QACT,CAAC;QACD,IAAI,EAAE,CAAC;IACT,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Router } from "express";
|
|
2
|
+
import type { SqliteStore } from "../core/store/sqlite-store.js";
|
|
3
|
+
import type { GraphEventBus } from "../core/events/event-bus.js";
|
|
4
|
+
export interface ApiRouterOptions {
|
|
5
|
+
store: SqliteStore;
|
|
6
|
+
basePath?: string;
|
|
7
|
+
eventBus?: GraphEventBus;
|
|
8
|
+
}
|
|
9
|
+
export declare function createApiRouter(options: ApiRouterOptions): Router;
|
|
10
|
+
export declare function createApiRouter(store: SqliteStore): Router;
|
|
11
|
+
//# sourceMappingURL=router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/api/router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAsBjE,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAAC;AACnE,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Router } from "express";
|
|
2
|
+
import { createProjectRouter } from "./routes/project.js";
|
|
3
|
+
import { createNodesRouter } from "./routes/nodes.js";
|
|
4
|
+
import { createEdgesRouter } from "./routes/edges.js";
|
|
5
|
+
import { createStatsRouter } from "./routes/stats.js";
|
|
6
|
+
import { createSearchRouter } from "./routes/search.js";
|
|
7
|
+
import { createGraphRouter } from "./routes/graph.js";
|
|
8
|
+
import { createImportRouter } from "./routes/import.js";
|
|
9
|
+
import { createIntegrationsRouter } from "./routes/integrations.js";
|
|
10
|
+
import { createInsightsRouter } from "./routes/insights.js";
|
|
11
|
+
import { createSkillsRouter } from "./routes/skills.js";
|
|
12
|
+
import { createCaptureRouter } from "./routes/capture.js";
|
|
13
|
+
import { createDocsCacheRouter } from "./routes/docs-cache.js";
|
|
14
|
+
import { createContextRouter } from "./routes/context.js";
|
|
15
|
+
import { createEventsRouter } from "./routes/events.js";
|
|
16
|
+
import { createGitNexusRouter } from "./routes/gitnexus.js";
|
|
17
|
+
import { createRagRouter } from "./routes/rag.js";
|
|
18
|
+
import { createKnowledgeRouter } from "./routes/knowledge.js";
|
|
19
|
+
import { createBenchmarkRouter } from "./routes/benchmark.js";
|
|
20
|
+
import { errorHandler } from "./middleware/error-handler.js";
|
|
21
|
+
import { requestLogger } from "./middleware/request-logger.js";
|
|
22
|
+
export function createApiRouter(storeOrOptions) {
|
|
23
|
+
const store = "store" in storeOrOptions ? storeOrOptions.store : storeOrOptions;
|
|
24
|
+
const basePath = "basePath" in storeOrOptions ? (storeOrOptions.basePath ?? process.cwd()) : process.cwd();
|
|
25
|
+
const eventBus = "eventBus" in storeOrOptions ? storeOrOptions.eventBus : undefined;
|
|
26
|
+
const router = Router();
|
|
27
|
+
router.use(requestLogger);
|
|
28
|
+
router.use("/project", createProjectRouter(store));
|
|
29
|
+
router.use("/nodes", createNodesRouter(store));
|
|
30
|
+
router.use("/edges", createEdgesRouter(store));
|
|
31
|
+
router.use("/stats", createStatsRouter(store));
|
|
32
|
+
router.use("/search", createSearchRouter(store));
|
|
33
|
+
router.use("/graph", createGraphRouter(store));
|
|
34
|
+
router.use("/import", createImportRouter(store));
|
|
35
|
+
router.use("/integrations", createIntegrationsRouter(store, basePath));
|
|
36
|
+
router.use("/insights", createInsightsRouter(store, basePath));
|
|
37
|
+
router.use("/skills", createSkillsRouter(basePath));
|
|
38
|
+
router.use("/capture", createCaptureRouter());
|
|
39
|
+
router.use("/docs", createDocsCacheRouter(store));
|
|
40
|
+
router.use("/context", createContextRouter(store));
|
|
41
|
+
router.use("/gitnexus", createGitNexusRouter({ basePath }));
|
|
42
|
+
router.use("/rag", createRagRouter(store));
|
|
43
|
+
router.use("/knowledge", createKnowledgeRouter(store));
|
|
44
|
+
router.use("/benchmark", createBenchmarkRouter(store));
|
|
45
|
+
if (eventBus) {
|
|
46
|
+
router.use("/events", createEventsRouter(eventBus));
|
|
47
|
+
}
|
|
48
|
+
router.use(errorHandler);
|
|
49
|
+
return router;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/api/router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"benchmark.d.ts","sourceRoot":"","sources":["../../../src/api/routes/benchmark.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAKpE,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CA8FhE"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { Router } from "express";
|
|
2
|
+
import { buildTaskContext } from "../../core/context/compact-context.js";
|
|
3
|
+
import { estimateTokens } from "../../core/context/token-estimator.js";
|
|
4
|
+
import { detectCycles } from "../../core/planner/dependency-chain.js";
|
|
5
|
+
export function createBenchmarkRouter(store) {
|
|
6
|
+
const router = Router();
|
|
7
|
+
router.get("/", (_req, res, next) => {
|
|
8
|
+
try {
|
|
9
|
+
const stats = store.getStats();
|
|
10
|
+
const doc = store.toGraphDocument();
|
|
11
|
+
const allNodes = doc.nodes;
|
|
12
|
+
const allEdges = doc.edges;
|
|
13
|
+
// Per-task metrics via buildTaskContext
|
|
14
|
+
const perTaskMetrics = [];
|
|
15
|
+
for (const node of allNodes) {
|
|
16
|
+
if (node.type !== "task" && node.type !== "subtask")
|
|
17
|
+
continue;
|
|
18
|
+
const ctx = buildTaskContext(store, node.id);
|
|
19
|
+
if (!ctx)
|
|
20
|
+
continue;
|
|
21
|
+
const rawTokens = estimateTokens(String(ctx.metrics.originalChars));
|
|
22
|
+
perTaskMetrics.push({
|
|
23
|
+
id: node.id,
|
|
24
|
+
title: node.title,
|
|
25
|
+
rawChars: ctx.metrics.originalChars,
|
|
26
|
+
compactChars: ctx.metrics.compactChars,
|
|
27
|
+
compressionPercent: ctx.metrics.reductionPercent,
|
|
28
|
+
estimatedTokens: ctx.metrics.estimatedTokens,
|
|
29
|
+
estimatedTokensSaved: Math.max(0, rawTokens - ctx.metrics.estimatedTokens),
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
// Averages
|
|
33
|
+
const sampleSize = perTaskMetrics.length;
|
|
34
|
+
const avgCompressionPercent = sampleSize > 0
|
|
35
|
+
? Math.round(perTaskMetrics.reduce((s, m) => s + m.compressionPercent, 0) / sampleSize)
|
|
36
|
+
: 0;
|
|
37
|
+
const totalTokensSaved = perTaskMetrics.reduce((s, m) => s + m.estimatedTokensSaved, 0);
|
|
38
|
+
const avgTokensPerTask = sampleSize > 0
|
|
39
|
+
? Math.round(perTaskMetrics.reduce((s, m) => s + m.estimatedTokens, 0) / sampleSize)
|
|
40
|
+
: 0;
|
|
41
|
+
// Dependency intelligence
|
|
42
|
+
const inferredDeps = allEdges.filter((e) => e.metadata?.inferred === true).length;
|
|
43
|
+
const blockedTasks = allNodes.filter((n) => n.blocked === true).length;
|
|
44
|
+
const cycles = detectCycles(doc);
|
|
45
|
+
// Cost calculations
|
|
46
|
+
const opusInputPrice = 15.0; // $/MTok
|
|
47
|
+
const sonnetInputPrice = 3.0; // $/MTok
|
|
48
|
+
const opusPerTask = avgTokensPerTask > 0 ? (avgTokensPerTask * opusInputPrice) / 1_000_000 : 0;
|
|
49
|
+
const sonnetPerTask = avgTokensPerTask > 0 ? (avgTokensPerTask * sonnetInputPrice) / 1_000_000 : 0;
|
|
50
|
+
res.json({
|
|
51
|
+
tokenEconomy: {
|
|
52
|
+
totalNodes: stats.totalNodes,
|
|
53
|
+
totalEdges: stats.totalEdges,
|
|
54
|
+
avgCompressionPercent,
|
|
55
|
+
sampleSize,
|
|
56
|
+
perTaskMetrics,
|
|
57
|
+
totalTokensSaved,
|
|
58
|
+
avgTokensPerTask,
|
|
59
|
+
costSavings: {
|
|
60
|
+
opusPerTask: Math.round(opusPerTask * 1000) / 1000,
|
|
61
|
+
sonnetPerTask: Math.round(sonnetPerTask * 1000) / 1000,
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
dependencyIntelligence: {
|
|
65
|
+
totalEdges: stats.totalEdges,
|
|
66
|
+
inferredDeps,
|
|
67
|
+
blockedTasks,
|
|
68
|
+
cycles: cycles.length,
|
|
69
|
+
},
|
|
70
|
+
formulas: {
|
|
71
|
+
compressionPercent: "1 - (compactChars / rawChars) * 100",
|
|
72
|
+
tokenEstimate: "ceil(chars / 4) — industry standard ~4 chars/token",
|
|
73
|
+
tokensSavedPerTask: "estimateTokens(rawChars) - estimateTokens(compactChars)",
|
|
74
|
+
costPerTask: "tokens * pricePerMTok / 1_000_000",
|
|
75
|
+
opusInputPrice: "$15.00/MTok",
|
|
76
|
+
sonnetInputPrice: "$3.00/MTok",
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
next(err);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
return router;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=benchmark.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"benchmark.js","sourceRoot":"","sources":["../../../src/api/routes/benchmark.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../../src/api/routes/capture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAajC,wBAAgB,mBAAmB,IAAI,MAAM,CAsB5C"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Router } from "express";
|
|
2
|
+
import { z } from "zod/v4";
|
|
3
|
+
import { validateBody } from "../middleware/validate.js";
|
|
4
|
+
import { captureWebPage } from "../../core/capture/web-capture.js";
|
|
5
|
+
import { logger } from "../../core/utils/logger.js";
|
|
6
|
+
const CaptureRequestSchema = z.object({
|
|
7
|
+
url: z.url("url must be a valid URL"),
|
|
8
|
+
selector: z.string().optional(),
|
|
9
|
+
timeout: z.number().int().positive().max(60_000).optional(),
|
|
10
|
+
waitForSelector: z.string().optional(),
|
|
11
|
+
});
|
|
12
|
+
export function createCaptureRouter() {
|
|
13
|
+
const router = Router();
|
|
14
|
+
/**
|
|
15
|
+
* POST /capture
|
|
16
|
+
* Capture a web page and extract structured content.
|
|
17
|
+
*/
|
|
18
|
+
router.post("/", validateBody(CaptureRequestSchema), async (req, res, next) => {
|
|
19
|
+
try {
|
|
20
|
+
const { url, selector, timeout, waitForSelector } = req.body;
|
|
21
|
+
logger.info("Capture request received", { url, selector });
|
|
22
|
+
const result = await captureWebPage(url, { selector, timeout, waitForSelector });
|
|
23
|
+
res.status(200).json(result);
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
next(err);
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
return router;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=capture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture.js","sourceRoot":"","sources":["../../../src/api/routes/capture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAEpD,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,yBAAyB,CAAC;IACrC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE;IAC3D,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACvC,CAAC,CAAC;AAEH,MAAM,UAAU,mBAAmB;IACjC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IAExB;;;OAGG;IACH,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,oBAAoB,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC5E,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,GAAG,CAAC,IAA4C,CAAC;YAErG,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;YAE3D,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;YAEjF,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/api/routes/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAGpE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAwB9D"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Router } from "express";
|
|
2
|
+
import { buildTaskContext } from "../../core/context/compact-context.js";
|
|
3
|
+
export function createContextRouter(store) {
|
|
4
|
+
const router = Router();
|
|
5
|
+
router.get("/preview", (req, res, next) => {
|
|
6
|
+
try {
|
|
7
|
+
const nodeId = req.query.nodeId;
|
|
8
|
+
if (!nodeId) {
|
|
9
|
+
res.status(400).json({ error: "Missing 'nodeId' query parameter" });
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
const context = buildTaskContext(store, nodeId);
|
|
13
|
+
if (!context) {
|
|
14
|
+
res.status(404).json({ error: `Node not found: ${nodeId}` });
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
res.json(context);
|
|
18
|
+
}
|
|
19
|
+
catch (err) {
|
|
20
|
+
next(err);
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
return router;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/api/routes/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAEzE,MAAM,UAAU,mBAAmB,CAAC,KAAkB;IACpD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IAExB,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACxC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,MAA4B,CAAC;YACtD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,kCAAkC,EAAE,CAAC,CAAC;gBACpE,OAAO;YACT,CAAC;YAED,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAChD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,MAAM,EAAE,EAAE,CAAC,CAAC;gBAC7D,OAAO;YACT,CAAC;YAED,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs-cache.d.ts","sourceRoot":"","sources":["../../../src/api/routes/docs-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAcpE,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAyEhE"}
|