@mcp-graph-workflow/mcp-graph 5.31.1 → 5.33.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.
Files changed (152) hide show
  1. package/README.md +1 -1
  2. package/dist/api/router.d.ts.map +1 -1
  3. package/dist/api/router.js +2 -0
  4. package/dist/api/router.js.map +1 -1
  5. package/dist/api/routes/davinci.d.ts +3 -0
  6. package/dist/api/routes/davinci.d.ts.map +1 -0
  7. package/dist/api/routes/davinci.js +188 -0
  8. package/dist/api/routes/davinci.js.map +1 -0
  9. package/dist/api/routes/translation-project.js +2 -2
  10. package/dist/api/routes/translation-project.js.map +1 -1
  11. package/dist/api/routes/translation.js +2 -2
  12. package/dist/api/routes/translation.js.map +1 -1
  13. package/dist/core/davinci/build-runner.d.ts +37 -0
  14. package/dist/core/davinci/build-runner.d.ts.map +1 -0
  15. package/dist/core/davinci/build-runner.js +239 -0
  16. package/dist/core/davinci/build-runner.js.map +1 -0
  17. package/dist/core/davinci/davinci-parser.d.ts +6 -0
  18. package/dist/core/davinci/davinci-parser.d.ts.map +1 -0
  19. package/dist/core/davinci/davinci-parser.js +218 -0
  20. package/dist/core/davinci/davinci-parser.js.map +1 -0
  21. package/dist/core/davinci/davinci-store.d.ts +49 -0
  22. package/dist/core/davinci/davinci-store.d.ts.map +1 -0
  23. package/dist/core/davinci/davinci-store.js +121 -0
  24. package/dist/core/davinci/davinci-store.js.map +1 -0
  25. package/dist/core/davinci/davinci-types.d.ts +241 -0
  26. package/dist/core/davinci/davinci-types.d.ts.map +1 -0
  27. package/dist/core/davinci/davinci-types.js +123 -0
  28. package/dist/core/davinci/davinci-types.js.map +1 -0
  29. package/dist/core/davinci/davinci-validators.d.ts +16 -0
  30. package/dist/core/davinci/davinci-validators.d.ts.map +1 -0
  31. package/dist/core/davinci/davinci-validators.js +86 -0
  32. package/dist/core/davinci/davinci-validators.js.map +1 -0
  33. package/dist/core/davinci/descriptor-generator.d.ts +19 -0
  34. package/dist/core/davinci/descriptor-generator.d.ts.map +1 -0
  35. package/dist/core/davinci/descriptor-generator.js +52 -0
  36. package/dist/core/davinci/descriptor-generator.js.map +1 -0
  37. package/dist/core/davinci/plugin-generator.d.ts +29 -0
  38. package/dist/core/davinci/plugin-generator.d.ts.map +1 -0
  39. package/dist/core/davinci/plugin-generator.js +86 -0
  40. package/dist/core/davinci/plugin-generator.js.map +1 -0
  41. package/dist/core/davinci/plugin-type-detector.d.ts +15 -0
  42. package/dist/core/davinci/plugin-type-detector.d.ts.map +1 -0
  43. package/dist/core/davinci/plugin-type-detector.js +114 -0
  44. package/dist/core/davinci/plugin-type-detector.js.map +1 -0
  45. package/dist/core/davinci/pom-generator.d.ts +4 -0
  46. package/dist/core/davinci/pom-generator.d.ts.map +1 -0
  47. package/dist/core/davinci/pom-generator.js +179 -0
  48. package/dist/core/davinci/pom-generator.js.map +1 -0
  49. package/dist/core/davinci/template-registry.d.ts +25 -0
  50. package/dist/core/davinci/template-registry.d.ts.map +1 -0
  51. package/dist/core/davinci/template-registry.js +280 -0
  52. package/dist/core/davinci/template-registry.js.map +1 -0
  53. package/dist/core/davinci/variable-resolver.d.ts +9 -0
  54. package/dist/core/davinci/variable-resolver.d.ts.map +1 -0
  55. package/dist/core/davinci/variable-resolver.js +62 -0
  56. package/dist/core/davinci/variable-resolver.js.map +1 -0
  57. package/dist/core/parser/read-swagger.d.ts.map +1 -1
  58. package/dist/core/parser/read-swagger.js +6 -0
  59. package/dist/core/parser/read-swagger.js.map +1 -1
  60. package/dist/core/siebel/sif-parser.d.ts.map +1 -1
  61. package/dist/core/siebel/sif-parser.js +6 -0
  62. package/dist/core/siebel/sif-parser.js.map +1 -1
  63. package/dist/core/siebel/wsdl-parser.d.ts.map +1 -1
  64. package/dist/core/siebel/wsdl-parser.js +6 -0
  65. package/dist/core/siebel/wsdl-parser.js.map +1 -1
  66. package/dist/core/translation/generators/ast-placeholder-extractor.d.ts +20 -0
  67. package/dist/core/translation/generators/ast-placeholder-extractor.d.ts.map +1 -0
  68. package/dist/core/translation/generators/ast-placeholder-extractor.js +215 -0
  69. package/dist/core/translation/generators/ast-placeholder-extractor.js.map +1 -0
  70. package/dist/core/translation/generators/placeholder-resolver.d.ts +18 -0
  71. package/dist/core/translation/generators/placeholder-resolver.d.ts.map +1 -0
  72. package/dist/core/translation/generators/placeholder-resolver.js +487 -0
  73. package/dist/core/translation/generators/placeholder-resolver.js.map +1 -0
  74. package/dist/core/translation/generators/source-text-extractor.d.ts +20 -0
  75. package/dist/core/translation/generators/source-text-extractor.d.ts.map +1 -0
  76. package/dist/core/translation/generators/source-text-extractor.js +190 -0
  77. package/dist/core/translation/generators/source-text-extractor.js.map +1 -0
  78. package/dist/core/translation/generators/universal-generator.d.ts +23 -0
  79. package/dist/core/translation/generators/universal-generator.d.ts.map +1 -0
  80. package/dist/core/translation/generators/universal-generator.js +315 -0
  81. package/dist/core/translation/generators/universal-generator.js.map +1 -0
  82. package/dist/core/translation/language-detect.d.ts.map +1 -1
  83. package/dist/core/translation/language-detect.js +37 -14
  84. package/dist/core/translation/language-detect.js.map +1 -1
  85. package/dist/core/translation/parsers/parser-adapter.d.ts +4 -0
  86. package/dist/core/translation/parsers/parser-adapter.d.ts.map +1 -1
  87. package/dist/core/translation/project-translation-orchestrator.d.ts +3 -3
  88. package/dist/core/translation/project-translation-orchestrator.d.ts.map +1 -1
  89. package/dist/core/translation/project-translation-orchestrator.js +4 -4
  90. package/dist/core/translation/project-translation-orchestrator.js.map +1 -1
  91. package/dist/core/translation/prompt-builder.d.ts +4 -0
  92. package/dist/core/translation/prompt-builder.d.ts.map +1 -1
  93. package/dist/core/translation/prompt-builder.js +13 -3
  94. package/dist/core/translation/prompt-builder.js.map +1 -1
  95. package/dist/core/translation/translation-orchestrator.d.ts +2 -1
  96. package/dist/core/translation/translation-orchestrator.d.ts.map +1 -1
  97. package/dist/core/translation/translation-orchestrator.js +21 -2
  98. package/dist/core/translation/translation-orchestrator.js.map +1 -1
  99. package/dist/docs-manifest.json +64 -2
  100. package/dist/mcp/app-factory.js +1 -1
  101. package/dist/mcp/app-factory.js.map +1 -1
  102. package/dist/mcp/tools/davinci-analyze.d.ts +4 -0
  103. package/dist/mcp/tools/davinci-analyze.d.ts.map +1 -0
  104. package/dist/mcp/tools/davinci-analyze.js +31 -0
  105. package/dist/mcp/tools/davinci-analyze.js.map +1 -0
  106. package/dist/mcp/tools/davinci-build.d.ts +4 -0
  107. package/dist/mcp/tools/davinci-build.d.ts.map +1 -0
  108. package/dist/mcp/tools/davinci-build.js +43 -0
  109. package/dist/mcp/tools/davinci-build.js.map +1 -0
  110. package/dist/mcp/tools/davinci-convert.d.ts +4 -0
  111. package/dist/mcp/tools/davinci-convert.d.ts.map +1 -0
  112. package/dist/mcp/tools/davinci-convert.js +61 -0
  113. package/dist/mcp/tools/davinci-convert.js.map +1 -0
  114. package/dist/mcp/tools/index.d.ts.map +1 -1
  115. package/dist/mcp/tools/index.js +8 -0
  116. package/dist/mcp/tools/index.js.map +1 -1
  117. package/dist/mcp/tools/translate-code.js +1 -1
  118. package/dist/mcp/tools/translate-code.js.map +1 -1
  119. package/dist/web/dashboard/dist/assets/{benchmark-tab-GHO9Ji5M.js → benchmark-tab-BezNQCQh.js} +1 -1
  120. package/dist/web/dashboard/dist/assets/{circle-alert-CfDAmNcO.js → circle-alert-DKsqBTgC.js} +1 -1
  121. package/dist/web/dashboard/dist/assets/{context-tab-B_6B65lw.js → context-tab-Cmar9i-X.js} +1 -1
  122. package/dist/web/dashboard/dist/assets/davinci-tab-CkWYkDsy.js +10 -0
  123. package/dist/web/dashboard/dist/assets/{docs-tab-Dq7rtZol.js → docs-tab-CYpDJ3Rl.js} +1 -1
  124. package/dist/web/dashboard/dist/assets/file-code-B0t0xVTk.js +11 -0
  125. package/dist/web/dashboard/dist/assets/{gitnexus-tab-DAPpyAe_.js → gitnexus-tab-COEhhMeC.js} +1 -1
  126. package/dist/web/dashboard/dist/assets/{graph-section-O0mwo9kz.js → graph-section-CheOuwv_.js} +1 -1
  127. package/dist/web/dashboard/dist/assets/{graph-tab-CAx8lu7Z.js → graph-tab-B52UV5KP.js} +1 -1
  128. package/dist/web/dashboard/dist/assets/{graph-utils-BwdXFM9h.js → graph-utils-D5HpaYbf.js} +1 -1
  129. package/dist/web/dashboard/dist/assets/{index-f0wNMEe_.js → index--SYA0Gq0.js} +1 -1
  130. package/dist/web/dashboard/dist/assets/index-BcMjWikL.css +1 -0
  131. package/dist/web/dashboard/dist/assets/{index-BxYtgAYc.js → index-DFMBuNWV.js} +1 -1
  132. package/dist/web/dashboard/dist/assets/{index-D_SBClB-.js → index-DdenFaJ5.js} +24 -19
  133. package/dist/web/dashboard/dist/assets/{insights-tab-DfH4O_Gj.js → insights-tab-sPgv-iwt.js} +1 -1
  134. package/dist/web/dashboard/dist/assets/{journey-tab-D2_EXArZ.js → journey-tab-CS416bwg.js} +1 -1
  135. package/dist/web/dashboard/dist/assets/languages-tab-CcB_s-Ic.js +108 -0
  136. package/dist/web/dashboard/dist/assets/{loader-circle-D5Z5DuF4.js → loader-circle-BSNUICqd.js} +1 -1
  137. package/dist/web/dashboard/dist/assets/{logs-tab-DwVCJxNs.js → logs-tab-BbDXtvmz.js} +1 -1
  138. package/dist/web/dashboard/dist/assets/{lsp-tab-D_3asNom.js → lsp-tab-BrytF6mP.js} +3 -3
  139. package/dist/web/dashboard/dist/assets/{memories-tab-BVe3nUf6.js → memories-tab-qCFdXJIV.js} +1 -1
  140. package/dist/web/dashboard/dist/assets/{prd-backlog-tab-DmeNjNES.js → prd-backlog-tab-BiNvyICT.js} +1 -1
  141. package/dist/web/dashboard/dist/assets/{refresh-cw-dY_ihv6e.js → refresh-cw-CqVWFFCW.js} +1 -1
  142. package/dist/web/dashboard/dist/assets/{siebel-tab-CUO3fUiF.js → siebel-tab-DFNHIBbS.js} +3 -3
  143. package/dist/web/dashboard/dist/assets/{sif-parse.worker-DZrybOHz.js → sif-parse.worker-Cty_N-lP.js} +3 -3
  144. package/dist/web/dashboard/dist/assets/{skills-tab-lUKwXrZi.js → skills-tab-DlInZCyj.js} +1 -1
  145. package/dist/web/dashboard/dist/assets/{style-Chqa3iIg.js → style-B4jQtUGE.js} +1 -1
  146. package/dist/web/dashboard/dist/assets/triangle-alert-CqXtIU3H.js +16 -0
  147. package/dist/web/dashboard/dist/assets/upload-Cb3pIYT5.js +16 -0
  148. package/dist/web/dashboard/dist/index.html +2 -2
  149. package/package.json +2 -2
  150. package/dist/web/dashboard/dist/assets/index-BVhCKhGJ.css +0 -1
  151. package/dist/web/dashboard/dist/assets/languages-tab-Cs-EF0mT.js +0 -123
  152. package/dist/web/dashboard/dist/assets/triangle-alert-CkVvjxDP.js +0 -26
@@ -1,5 +1,5 @@
1
1
  {
2
- "generatedAt": "2026-03-30T04:04:04.642Z",
2
+ "generatedAt": "2026-04-01T15:42:32.731Z",
3
3
  "tools": [
4
4
  {
5
5
  "name": "analyze",
@@ -36,6 +36,27 @@
36
36
  "deprecated": false,
37
37
  "sourceFile": "context.ts"
38
38
  },
39
+ {
40
+ "name": "davinci_analyze",
41
+ "description": "Analyze DaVinci custom code (JavaScript). Extracts variables, API calls, flow logic, detects plugin type, and resolves variable mappings to Java equivalents.",
42
+ "category": "Core",
43
+ "deprecated": false,
44
+ "sourceFile": "davinci-analyze.ts"
45
+ },
46
+ {
47
+ "name": "davinci_build",
48
+ "description": "Build a DaVinci-converted Java plugin using Maven. Checks environment (JDK, Maven, SDK) and runs mvn package. Returns build status, JAR path, and environment indicators.",
49
+ "category": "Core",
50
+ "deprecated": false,
51
+ "sourceFile": "davinci-build.ts"
52
+ },
53
+ {
54
+ "name": "davinci_convert",
55
+ "description": "Convert DaVinci JavaScript code to PingAccess/PingFederate Java plugin. Generates Java class structure, POM.xml, and PF-INF descriptor.",
56
+ "category": "Core",
57
+ "deprecated": false,
58
+ "sourceFile": "davinci-convert.ts"
59
+ },
39
60
  {
40
61
  "name": "delete_memory",
41
62
  "description": "Delete a project memory from workflow-graph/memories/{name}.md and remove from knowledge store.",
@@ -1051,6 +1072,41 @@
1051
1072
  ],
1052
1073
  "sourceFile": "dream.ts"
1053
1074
  },
1075
+ {
1076
+ "routerName": "davinci",
1077
+ "mountPath": "/davinci",
1078
+ "endpoints": [
1079
+ {
1080
+ "method": "get",
1081
+ "path": "/environment"
1082
+ },
1083
+ {
1084
+ "method": "post",
1085
+ "path": "/analyze"
1086
+ },
1087
+ {
1088
+ "method": "post",
1089
+ "path": "/detect-type"
1090
+ },
1091
+ {
1092
+ "method": "post",
1093
+ "path": "/convert"
1094
+ },
1095
+ {
1096
+ "method": "post",
1097
+ "path": "/convert-and-build"
1098
+ },
1099
+ {
1100
+ "method": "post",
1101
+ "path": "/build"
1102
+ },
1103
+ {
1104
+ "method": "get",
1105
+ "path": "/templates"
1106
+ }
1107
+ ],
1108
+ "sourceFile": "davinci.ts"
1109
+ },
1054
1110
  {
1055
1111
  "routerName": "folder",
1056
1112
  "mountPath": "/folder",
@@ -1093,7 +1149,7 @@
1093
1149
  "slug": "architecture/ARCHITECTURE-GUIDE",
1094
1150
  "title": "ARCHITECTURE GUIDE",
1095
1151
  "category": "architecture",
1096
- "content": "# Architecture Guide — mcp-graph\n\n## Overview\n\nmcp-graph is a local-first tool that transforms PRD text files into persistent execution graphs stored in SQLite, with an integrated knowledge store, RAG pipeline, and multi-agent integration mesh. It provides structured, token-efficient context for agentic workflows.\n\n## Layers\n\n### Layer 1: CLI — `src/cli/`\n\n**Framework:** Commander.js v14\n\nThin orchestration layer. Commands call core functions and format output. No business logic.\n\n| Command | File | Description |\n|---------|------|-------------|\n| `init` | `commands/init.ts` | Initialize project + SQLite DB |\n| `import` | `commands/import-cmd.ts` | Import PRD file into graph |\n| `index` | `commands/index-cmd.ts` | Rebuild knowledge indexes and embeddings |\n| `stats` | `commands/stats.ts` | Show graph statistics |\n| `serve` | `commands/serve.ts` | Start HTTP server + MCP + dashboard |\n\n### Layer 2: MCP Server — `src/mcp/`\n\n**Protocol:** Model Context Protocol (Streamable HTTP + Stdio)\n\n<!-- mcp-graph:arch-mcp:start -->\n51 tool registrations (45 active + 6 deprecated shims) via `@modelcontextprotocol/sdk`. Two transport modes:\n\n- **HTTP** (`server.ts`) — Express server with `/mcp` endpoint + REST API + static dashboard\n- **Stdio** (`stdio.ts`) — Standard I/O transport for direct MCP client integration\n\nTool categories:\n- **Core** (30) — analyze, clone_node, context, delete_memory, edge, export, help, import_graph, import_prd, init, journey, list, list_memories, manage_skill, metrics, move_node, next, node, plan_sprint, rag_context, read_memory, reindex_knowledge, search, set_phase, show, snapshot, sync_stack_docs, update_status, validate, write_memory\n- **Translation** (3) — analyze_translation, translate_code, translation_jobs\n- **Code Intelligence** (1) — code_intelligence\n- **Knowledge** (3) — export_knowledge, knowledge_feedback, knowledge_stats\n- **Siebel CRM** (8) — siebel_analyze, siebel_composer, siebel_env, siebel_generate_sif, siebel_import_docs, siebel_import_sif, siebel_search, siebel_validate\n- **Deprecated shims** (6) — add_node, delete_node, list_skills, update_node, validate_ac, validate_task (removed in v7.0)\n<!-- mcp-graph:arch-mcp:end -->\n\n### Layer 3: REST API — `src/api/`\n\n**Framework:** Express v5\n\n<!-- mcp-graph:arch-api:start -->\n25 routers, 128 endpoints. Modular router architecture:\n<!-- mcp-graph:arch-api:end -->\n\n```\nrouter.ts # Main router composition\nroutes/\n project.ts # GET/POST /project\n nodes.ts # GET/POST/PATCH/DELETE /nodes\n edges.ts # GET/POST/DELETE /edges\n stats.ts # GET /stats\n search.ts # GET /search\n graph.ts # GET /graph, /graph/mermaid\n import.ts # POST /import (multipart file upload)\n knowledge.ts # GET/POST/DELETE /knowledge\n rag.ts # POST /rag/query, /rag/reindex, GET /rag/stats\n code-graph.ts # GET /code-graph/* — native code intelligence endpoints\n integrations.ts # GET /integrations/status|memories|enriched-context|knowledge-status\n insights.ts # GET /insights/bottlenecks|recommendations|metrics\n context.ts # GET /context/preview\n capture.ts # POST /capture\n docs-cache.ts # GET/POST /docs\n events.ts # GET /events (SSE stream)\n skills.ts # GET /skills\nmiddleware/\n error-handler.ts # Centralized error handling\n validate.ts # Zod-based request validation\n```\n\nSee [REST API Reference](../reference/REST-API-REFERENCE.md) for full endpoint documentation.\n\n### Layer 4: Core — `src/core/`\n\nPure functions with explicit dependencies. No framework coupling. 16 subdirectories.\n\n#### Parser (`core/parser/`)\n\nPipeline: `readFile → segment → classify → extract`\n\n| Module | Purpose |\n|--------|---------|\n| `file-reader.ts` | Read .md, .txt, .pdf, .html files with format detection |\n| `read-file.ts` | Legacy PRD reader |\n| `read-pdf.ts` | PDF extraction via pdf-parse |\n| `read-html.ts` | HTML to markdown extraction |\n| `segment.ts` | Split text by headings into sections |\n| `classify.ts` | Heuristic block classification (epic, task, requirement, etc.) |\n| `extract.ts` | Extract structured entities from classified blocks |\n| `normalize.ts` | Text normalization (whitespace, encoding) |\n\n#### Importer (`core/importer/`)\n\n| Module | Purpose |\n|--------|---------|\n| `prd-to-graph.ts` | Convert extraction results to graph nodes + edges with dependency inference |\n| `import-prd.ts` | High-level import orchestration |\n\n#### Planner (`core/planner/`)\n\n| Module | Purpose |\n|--------|---------|\n| `next-task.ts` | Suggest next task: filter eligible → resolve dependencies → sort by priority/size/age |\n| `enhanced-next.ts` | Augments next-task with knowledge coverage + velocity context |\n| `decompose.ts` | Detect large tasks, suggest subtask breakdown |\n| `dependency-chain.ts` | Analyze dependency graphs, detect cycles, compute critical paths |\n| `velocity.ts` | Calculate historical sprint velocity and time estimates |\n| `planning-report.ts` | Generate sprint planning reports (capacity, blockers, risk) |\n\n#### Context Builder (`core/context/`)\n\n| Module | Purpose |\n|--------|---------|\n| `compact-context.ts` | Build minimal context for a task (parent, children, deps, blockers, AC) |\n| `rag-context.ts` | Semantic RAG context builder with token budgeting |\n| `tiered-context.ts` | Three-tier compression: summary (~20 tok) / standard (~150 tok) / deep (~500+ tok) |\n| `bm25-compressor.ts` | BM25 ranking to filter knowledge chunks by relevance |\n| `context-assembler.ts` | Combines graph (60%) + knowledge (30%) + header (10%) with token accounting |\n| `token-estimator.ts` | Estimate token count for context payloads |\n\n#### RAG (`core/rag/`)\n\n| Module | Purpose |\n|--------|---------|\n| `embedding-store.ts` | Persist TF-IDF vectors in SQLite, cosine similarity search |\n| `rag-pipeline.ts` | TF-IDF vectorizer: index nodes + knowledge as embeddings |\n| `memory-indexer.ts` | Index memory documents into embeddings |\n| `docs-indexer.ts` | Index fetched documentation into embeddings |\n| `capture-indexer.ts` | Index web-captured content into embeddings |\n| `memory-rag-query.ts` | Query memories via FTS / semantic / hybrid modes |\n| `chunk-text.ts` | Split text into ~500 token chunks with overlap |\n\nSee [Knowledge Pipeline](./KNOWLEDGE-PIPELINE.md) for the full RAG documentation.\n\n#### Integrations (`core/integrations/`)\n\n| Module | Purpose |\n|--------|---------|\n| `integration-orchestrator.ts` | Event-driven mesh: auto-triggers reindex on import/sync events |\n| `memory-reader.ts` | Read `workflow-graph/memories/` directory recursively (in `src/core/memory/`) |\n| `enriched-context.ts` | Combine Memories + Code Graph + Knowledge into unified context |\n| `mcp-servers-config.ts` | Manage `.mcp.json` server configurations |\n| `mcp-deps-installer.ts` | Auto-install MCP server dependencies |\n| `tool-status.ts` | Track integration availability and health |\n\nSee [Integrations Guide](../reference/INTEGRATIONS-GUIDE.md) for the full integrations documentation.\n\n#### Docs (`core/docs/`)\n\n| Module | Purpose |\n|--------|---------|\n| `stack-detector.ts` | Auto-detect project tech stack from manifest files |\n| `mcp-context7-fetcher.ts` | Fetch docs from Context7 for detected libraries |\n| `docs-cache-store.ts` | SQLite-backed documentation cache |\n| `docs-syncer.ts` | Sync docs for detected libraries + trigger embedding pipeline |\n\n#### Capture (`core/capture/`)\n\n| Module | Purpose |\n|--------|---------|\n| `web-capture.ts` | Playwright-based page capture (HTML, screenshots, a11y tree) |\n| `validate-runner.ts` | Task validation with A/B comparison support |\n| `content-extractor.ts` | Extract clean text from captured HTML |\n\n#### Insights (`core/insights/`)\n\n| Module | Purpose |\n|--------|---------|\n| `bottleneck-detector.ts` | Detect blocked tasks, critical paths, missing AC, oversized tasks |\n| `metrics-calculator.ts` | Sprint velocity, completion rates, burndown |\n| `skill-recommender.ts` | Recommend skills based on task context |\n\n#### Search (`core/search/`)\n\n| Module | Purpose |\n|--------|---------|\n| `fts-search.ts` | FTS5 full-text search with BM25 ranking |\n| `tfidf.ts` | TF-IDF reranking for improved relevance |\n| `tokenizer.ts` | Text tokenization with stopword removal |\n\n#### Events (`core/events/`)\n\n| Module | Purpose |\n|--------|---------|\n| `event-bus.ts` | `GraphEventBus` — typed event emitter for real-time updates |\n| `event-types.ts` | Event type definitions (node:created, knowledge:indexed, etc.) |\n\n#### Store (`core/store/`)\n\n| Module | Purpose |\n|--------|---------|\n| `sqlite-store.ts` | Main data access layer — CRUD, bulk ops, snapshots, FTS5 |\n| `migrations.ts` | Schema migrations (additive, backward-compatible) |\n| `knowledge-store.ts` | CRUD + FTS for knowledge_documents table |\n\n#### Config (`core/config/`)\n\n| Module | Purpose |\n|--------|---------|\n| `config-schema.ts` | Zod schema for project configuration |\n| `config-loader.ts` | Load and validate config from filesystem |\n\n#### Graph (`core/graph/`)\n\n| Module | Purpose |\n|--------|---------|\n| `graph-types.ts` | Core interfaces (GraphNode, GraphEdge, NodeType, NodeStatus) |\n| `graph-indexes.ts` | B-tree and FTS indexes for fast queries |\n| `mermaid-export.ts` | Export graph as Mermaid flowchart/mindmap |\n\n#### Utils (`core/utils/`)\n\n| Module | Purpose |\n|--------|---------|\n| `errors.ts` | Custom typed error classes |\n| `logger.ts` | Structured logger (info, error, debug) |\n| `id.ts` | ID generation (nanoid-based) |\n| `time.ts` | Timestamp utilities |\n| `fs.ts` | Filesystem utilities |\n\n### Layer 5: Storage — SQLite\n\n- **WAL mode** for concurrent reads\n- **FTS5** virtual tables for full-text search (nodes + knowledge)\n- **Indexes** on type, status, parentId, sprint\n- **Snapshots** for graph versioning\n- **Docs cache** table for external documentation\n- **knowledge_documents** table with FTS5 + SHA-256 dedup\n- **embeddings** table for TF-IDF vectors\n\nData stored in `workflow-graph/graph.db` (local, gitignored). Legacy `.mcp-graph/` directories are auto-migrated.\n\n### Layer 6: Web Dashboard — `src/web/dashboard/`\n\n**Stack:** React 19 + TypeScript + Vite + Tailwind CSS + React Flow\n\n| Component | Purpose |\n|-----------|---------|\n| `components/graph/` | Interactive workflow graph (React Flow + Dagre layout) |\n| `components/tabs/graph-tab.tsx` | Graph visualization with filters and detail panel |\n| `components/tabs/code-graph-tab.tsx` | Code dependency graph (D3-based) |\n| `components/tabs/prd-backlog-tab.tsx` | PRD backlog list view |\n| `components/tabs/insights-tab.tsx` | Metrics, bottlenecks, velocity |\n| `components/modals/` | Import and capture modals |\n| `hooks/` | Graph data, SSE, stats hooks |\n\n4 tabs: Graph, Code Graph, PRD Backlog, Insights. Real-time updates via SSE. Dark/light theme.\n\n### Layer 7: Skills & Agents\n\nSkills are local workflow extensions stored in `copilot-ecosystem/`. Each skill is a directory with a `SKILL.md` containing frontmatter and instructions.\n\nKey skills: `/xp-bootstrap`, `/project-scaffold`, `/dev-flow-orchestrator`, `/track-with-mcp-graph`.\n\n### Layer 8: Integrations\n\n| Integration | Purpose | Detection |\n|-------------|---------|-----------|\n| Native Memories | Persistent project knowledge | `workflow-graph/memories/` directory |\n| Code Intelligence | Code graph, dependency analysis | Native via `src/core/code/` |\n| Context7 | Library documentation fetching | MCP server config |\n| Playwright | Browser automation, web capture | `@playwright/test` devDependency |\n\nSee [Integrations Guide](../reference/INTEGRATIONS-GUIDE.md) for detailed documentation.\n\n## Data Flow\n\n### PRD Import Flow\n\n```\nPRD File (.md/.txt/.pdf/.html)\n → readFileContent() # Parser\n → extractEntities() # Parser\n → convertToGraph() # Importer\n → store.bulkInsert() # SQLite\n → eventBus.emit() # Events\n → SSE → Dashboard update # Web\n```\n\n### Knowledge Indexing Flow\n\n```\nSources (Memories, Context7 docs, web captures)\n → Indexer (memory/docs/capture) # RAG\n → chunkText() # RAG\n → knowledgeStore.upsert() # Store\n → ragPipeline.buildIndex() # RAG\n → embeddingStore.persist() # RAG\n```\n\n### Context Assembly Flow\n\n```\nQuery/Task ID\n → Tiered context (graph) # Context\n → BM25 knowledge search # Context\n → Token budget allocation # Context\n → Assembled payload (70-85% reduction)\n```\n\n## Token Efficiency\n\nThe context system achieves 70-85% token reduction through:\n\n1. **Tiered compression** — Summary/standard/deep per node relevance\n2. **BM25 filtering** — Only relevant knowledge chunks included\n3. **Token budgeting** — 60% graph, 30% knowledge, 10% header\n4. **Structural summarization** — Key-value pairs instead of prose\n\n## Design Principles\n\n- **Local-first** — No external services, no Docker, no cloud dependencies\n- **Pure functions** — Core modules are side-effect-free where possible\n- **Typed boundaries** — Zod v4 schemas validate all external input\n- **Strict TypeScript** — No `any`, explicit return types, ESM-only\n- **Thin orchestration** — CLI/MCP/API layers only call core, never contain logic\n- **Backward compatibility** — Schema changes are additive, old data formats supported\n- **Event-driven** — Integration mesh reacts to graph mutations, no polling\n"
1152
+ "content": "# Architecture Guide — mcp-graph\n\n## Overview\n\nmcp-graph is a local-first tool that transforms PRD text files into persistent execution graphs stored in SQLite, with an integrated knowledge store, RAG pipeline, and multi-agent integration mesh. It provides structured, token-efficient context for agentic workflows.\n\n## Layers\n\n### Layer 1: CLI — `src/cli/`\n\n**Framework:** Commander.js v14\n\nThin orchestration layer. Commands call core functions and format output. No business logic.\n\n| Command | File | Description |\n|---------|------|-------------|\n| `init` | `commands/init.ts` | Initialize project + SQLite DB |\n| `import` | `commands/import-cmd.ts` | Import PRD file into graph |\n| `index` | `commands/index-cmd.ts` | Rebuild knowledge indexes and embeddings |\n| `stats` | `commands/stats.ts` | Show graph statistics |\n| `serve` | `commands/serve.ts` | Start HTTP server + MCP + dashboard |\n\n### Layer 2: MCP Server — `src/mcp/`\n\n**Protocol:** Model Context Protocol (Streamable HTTP + Stdio)\n\n<!-- mcp-graph:arch-mcp:start -->\n51 tool registrations (45 active + 6 deprecated shims) via `@modelcontextprotocol/sdk`. Two transport modes:\n\n- **HTTP** (`server.ts`) — Express server with `/mcp` endpoint + REST API + static dashboard\n- **Stdio** (`stdio.ts`) — Standard I/O transport for direct MCP client integration\n\nTool categories:\n- **Core** (30) — analyze, clone_node, context, delete_memory, edge, export, help, import_graph, import_prd, init, journey, list, list_memories, manage_skill, metrics, move_node, next, node, plan_sprint, rag_context, read_memory, reindex_knowledge, search, set_phase, show, snapshot, sync_stack_docs, update_status, validate, write_memory\n- **Translation** (3) — analyze_translation, translate_code, translation_jobs\n- **Code Intelligence** (1) — code_intelligence\n- **Knowledge** (3) — export_knowledge, knowledge_feedback, knowledge_stats\n- **Siebel CRM** (8) — siebel_analyze, siebel_composer, siebel_env, siebel_generate_sif, siebel_import_docs, siebel_import_sif, siebel_search, siebel_validate\n- **Deprecated shims** (6) — add_node, delete_node, list_skills, update_node, validate_ac, validate_task (removed in v7.0)\n<!-- mcp-graph:arch-mcp:end -->\n\n### Layer 3: REST API — `src/api/`\n\n**Framework:** Express v5\n\n<!-- mcp-graph:arch-api:start -->\n26 routers, 135 endpoints. Modular router architecture:\n<!-- mcp-graph:arch-api:end -->\n\n```\nrouter.ts # Main router composition\nroutes/\n project.ts # GET/POST /project\n nodes.ts # GET/POST/PATCH/DELETE /nodes\n edges.ts # GET/POST/DELETE /edges\n stats.ts # GET /stats\n search.ts # GET /search\n graph.ts # GET /graph, /graph/mermaid\n import.ts # POST /import (multipart file upload)\n knowledge.ts # GET/POST/DELETE /knowledge\n rag.ts # POST /rag/query, /rag/reindex, GET /rag/stats\n code-graph.ts # GET /code-graph/* — native code intelligence endpoints\n integrations.ts # GET /integrations/status|memories|enriched-context|knowledge-status\n insights.ts # GET /insights/bottlenecks|recommendations|metrics\n context.ts # GET /context/preview\n capture.ts # POST /capture\n docs-cache.ts # GET/POST /docs\n events.ts # GET /events (SSE stream)\n skills.ts # GET /skills\nmiddleware/\n error-handler.ts # Centralized error handling\n validate.ts # Zod-based request validation\n```\n\nSee [REST API Reference](../reference/REST-API-REFERENCE.md) for full endpoint documentation.\n\n### Layer 4: Core — `src/core/`\n\nPure functions with explicit dependencies. No framework coupling. 16 subdirectories.\n\n#### Parser (`core/parser/`)\n\nPipeline: `readFile → segment → classify → extract`\n\n| Module | Purpose |\n|--------|---------|\n| `file-reader.ts` | Read .md, .txt, .pdf, .html files with format detection |\n| `read-file.ts` | Legacy PRD reader |\n| `read-pdf.ts` | PDF extraction via pdf-parse |\n| `read-html.ts` | HTML to markdown extraction |\n| `segment.ts` | Split text by headings into sections |\n| `classify.ts` | Heuristic block classification (epic, task, requirement, etc.) |\n| `extract.ts` | Extract structured entities from classified blocks |\n| `normalize.ts` | Text normalization (whitespace, encoding) |\n\n#### Importer (`core/importer/`)\n\n| Module | Purpose |\n|--------|---------|\n| `prd-to-graph.ts` | Convert extraction results to graph nodes + edges with dependency inference |\n| `import-prd.ts` | High-level import orchestration |\n\n#### Planner (`core/planner/`)\n\n| Module | Purpose |\n|--------|---------|\n| `next-task.ts` | Suggest next task: filter eligible → resolve dependencies → sort by priority/size/age |\n| `enhanced-next.ts` | Augments next-task with knowledge coverage + velocity context |\n| `decompose.ts` | Detect large tasks, suggest subtask breakdown |\n| `dependency-chain.ts` | Analyze dependency graphs, detect cycles, compute critical paths |\n| `velocity.ts` | Calculate historical sprint velocity and time estimates |\n| `planning-report.ts` | Generate sprint planning reports (capacity, blockers, risk) |\n\n#### Context Builder (`core/context/`)\n\n| Module | Purpose |\n|--------|---------|\n| `compact-context.ts` | Build minimal context for a task (parent, children, deps, blockers, AC) |\n| `rag-context.ts` | Semantic RAG context builder with token budgeting |\n| `tiered-context.ts` | Three-tier compression: summary (~20 tok) / standard (~150 tok) / deep (~500+ tok) |\n| `bm25-compressor.ts` | BM25 ranking to filter knowledge chunks by relevance |\n| `context-assembler.ts` | Combines graph (60%) + knowledge (30%) + header (10%) with token accounting |\n| `token-estimator.ts` | Estimate token count for context payloads |\n\n#### RAG (`core/rag/`)\n\n| Module | Purpose |\n|--------|---------|\n| `embedding-store.ts` | Persist TF-IDF vectors in SQLite, cosine similarity search |\n| `rag-pipeline.ts` | TF-IDF vectorizer: index nodes + knowledge as embeddings |\n| `memory-indexer.ts` | Index memory documents into embeddings |\n| `docs-indexer.ts` | Index fetched documentation into embeddings |\n| `capture-indexer.ts` | Index web-captured content into embeddings |\n| `memory-rag-query.ts` | Query memories via FTS / semantic / hybrid modes |\n| `chunk-text.ts` | Split text into ~500 token chunks with overlap |\n\nSee [Knowledge Pipeline](./KNOWLEDGE-PIPELINE.md) for the full RAG documentation.\n\n#### Integrations (`core/integrations/`)\n\n| Module | Purpose |\n|--------|---------|\n| `integration-orchestrator.ts` | Event-driven mesh: auto-triggers reindex on import/sync events |\n| `memory-reader.ts` | Read `workflow-graph/memories/` directory recursively (in `src/core/memory/`) |\n| `enriched-context.ts` | Combine Memories + Code Graph + Knowledge into unified context |\n| `mcp-servers-config.ts` | Manage `.mcp.json` server configurations |\n| `mcp-deps-installer.ts` | Auto-install MCP server dependencies |\n| `tool-status.ts` | Track integration availability and health |\n\nSee [Integrations Guide](../reference/INTEGRATIONS-GUIDE.md) for the full integrations documentation.\n\n#### Docs (`core/docs/`)\n\n| Module | Purpose |\n|--------|---------|\n| `stack-detector.ts` | Auto-detect project tech stack from manifest files |\n| `mcp-context7-fetcher.ts` | Fetch docs from Context7 for detected libraries |\n| `docs-cache-store.ts` | SQLite-backed documentation cache |\n| `docs-syncer.ts` | Sync docs for detected libraries + trigger embedding pipeline |\n\n#### Capture (`core/capture/`)\n\n| Module | Purpose |\n|--------|---------|\n| `web-capture.ts` | Playwright-based page capture (HTML, screenshots, a11y tree) |\n| `validate-runner.ts` | Task validation with A/B comparison support |\n| `content-extractor.ts` | Extract clean text from captured HTML |\n\n#### Insights (`core/insights/`)\n\n| Module | Purpose |\n|--------|---------|\n| `bottleneck-detector.ts` | Detect blocked tasks, critical paths, missing AC, oversized tasks |\n| `metrics-calculator.ts` | Sprint velocity, completion rates, burndown |\n| `skill-recommender.ts` | Recommend skills based on task context |\n\n#### Search (`core/search/`)\n\n| Module | Purpose |\n|--------|---------|\n| `fts-search.ts` | FTS5 full-text search with BM25 ranking |\n| `tfidf.ts` | TF-IDF reranking for improved relevance |\n| `tokenizer.ts` | Text tokenization with stopword removal |\n\n#### Events (`core/events/`)\n\n| Module | Purpose |\n|--------|---------|\n| `event-bus.ts` | `GraphEventBus` — typed event emitter for real-time updates |\n| `event-types.ts` | Event type definitions (node:created, knowledge:indexed, etc.) |\n\n#### Store (`core/store/`)\n\n| Module | Purpose |\n|--------|---------|\n| `sqlite-store.ts` | Main data access layer — CRUD, bulk ops, snapshots, FTS5 |\n| `migrations.ts` | Schema migrations (additive, backward-compatible) |\n| `knowledge-store.ts` | CRUD + FTS for knowledge_documents table |\n\n#### Config (`core/config/`)\n\n| Module | Purpose |\n|--------|---------|\n| `config-schema.ts` | Zod schema for project configuration |\n| `config-loader.ts` | Load and validate config from filesystem |\n\n#### Graph (`core/graph/`)\n\n| Module | Purpose |\n|--------|---------|\n| `graph-types.ts` | Core interfaces (GraphNode, GraphEdge, NodeType, NodeStatus) |\n| `graph-indexes.ts` | B-tree and FTS indexes for fast queries |\n| `mermaid-export.ts` | Export graph as Mermaid flowchart/mindmap |\n\n#### Utils (`core/utils/`)\n\n| Module | Purpose |\n|--------|---------|\n| `errors.ts` | Custom typed error classes |\n| `logger.ts` | Structured logger (info, error, debug) |\n| `id.ts` | ID generation (nanoid-based) |\n| `time.ts` | Timestamp utilities |\n| `fs.ts` | Filesystem utilities |\n\n### Layer 5: Storage — SQLite\n\n- **WAL mode** for concurrent reads\n- **FTS5** virtual tables for full-text search (nodes + knowledge)\n- **Indexes** on type, status, parentId, sprint\n- **Snapshots** for graph versioning\n- **Docs cache** table for external documentation\n- **knowledge_documents** table with FTS5 + SHA-256 dedup\n- **embeddings** table for TF-IDF vectors\n\nData stored in `workflow-graph/graph.db` (local, gitignored). Legacy `.mcp-graph/` directories are auto-migrated.\n\n### Layer 6: Web Dashboard — `src/web/dashboard/`\n\n**Stack:** React 19 + TypeScript + Vite + Tailwind CSS + React Flow\n\n| Component | Purpose |\n|-----------|---------|\n| `components/graph/` | Interactive workflow graph (React Flow + Dagre layout) |\n| `components/tabs/graph-tab.tsx` | Graph visualization with filters and detail panel |\n| `components/tabs/code-graph-tab.tsx` | Code dependency graph (D3-based) |\n| `components/tabs/prd-backlog-tab.tsx` | PRD backlog list view |\n| `components/tabs/insights-tab.tsx` | Metrics, bottlenecks, velocity |\n| `components/modals/` | Import and capture modals |\n| `hooks/` | Graph data, SSE, stats hooks |\n\n4 tabs: Graph, Code Graph, PRD Backlog, Insights. Real-time updates via SSE. Dark/light theme.\n\n### Layer 7: Skills & Agents\n\nSkills are local workflow extensions stored in `copilot-ecosystem/`. Each skill is a directory with a `SKILL.md` containing frontmatter and instructions.\n\nKey skills: `/xp-bootstrap`, `/project-scaffold`, `/dev-flow-orchestrator`, `/track-with-mcp-graph`.\n\n### Layer 8: Integrations\n\n| Integration | Purpose | Detection |\n|-------------|---------|-----------|\n| Native Memories | Persistent project knowledge | `workflow-graph/memories/` directory |\n| Code Intelligence | Code graph, dependency analysis | Native via `src/core/code/` |\n| Context7 | Library documentation fetching | MCP server config |\n| Playwright | Browser automation, web capture | `@playwright/test` devDependency |\n\nSee [Integrations Guide](../reference/INTEGRATIONS-GUIDE.md) for detailed documentation.\n\n## Data Flow\n\n### PRD Import Flow\n\n```\nPRD File (.md/.txt/.pdf/.html)\n → readFileContent() # Parser\n → extractEntities() # Parser\n → convertToGraph() # Importer\n → store.bulkInsert() # SQLite\n → eventBus.emit() # Events\n → SSE → Dashboard update # Web\n```\n\n### Knowledge Indexing Flow\n\n```\nSources (Memories, Context7 docs, web captures)\n → Indexer (memory/docs/capture) # RAG\n → chunkText() # RAG\n → knowledgeStore.upsert() # Store\n → ragPipeline.buildIndex() # RAG\n → embeddingStore.persist() # RAG\n```\n\n### Context Assembly Flow\n\n```\nQuery/Task ID\n → Tiered context (graph) # Context\n → BM25 knowledge search # Context\n → Token budget allocation # Context\n → Assembled payload (70-85% reduction)\n```\n\n## Token Efficiency\n\nThe context system achieves 70-85% token reduction through:\n\n1. **Tiered compression** — Summary/standard/deep per node relevance\n2. **BM25 filtering** — Only relevant knowledge chunks included\n3. **Token budgeting** — 60% graph, 30% knowledge, 10% header\n4. **Structural summarization** — Key-value pairs instead of prose\n\n## Design Principles\n\n- **Local-first** — No external services, no Docker, no cloud dependencies\n- **Pure functions** — Core modules are side-effect-free where possible\n- **Typed boundaries** — Zod v4 schemas validate all external input\n- **Strict TypeScript** — No `any`, explicit return types, ESM-only\n- **Thin orchestration** — CLI/MCP/API layers only call core, never contain logic\n- **Backward compatibility** — Schema changes are additive, old data formats supported\n- **Event-driven** — Integration mesh reacts to graph mutations, no polling\n"
1097
1153
  },
1098
1154
  {
1099
1155
  "slug": "architecture/ARCHITECTURE-MERMAID",
@@ -1209,6 +1265,12 @@
1209
1265
  "category": "prd",
1210
1266
  "content": "# PRD: Code Graph Multi-Language — Indexação Universal\n\n> **Versão:** 1.0\n> **Data:** 2026-03-29\n> **Autor:** Diego Nogueira\n> **Status:** Draft\n> **Prioridade:** P1\n\n---\n\n## 1. Problema\n\nO mcp-graph hoje indexa **apenas TypeScript/JavaScript** no Code Graph. Quando instalado em projetos de outras linguagens (Java, Go, Rust, Python, C/C++, Ruby, PHP, Kotlin, Swift, C#, Lua), o Code Intelligence fica vazio — sem symbols, sem impact analysis, sem RAG de código, sem visualização no dashboard.\n\nIsso limita a proposta de valor do mcp-graph como ferramenta universal de gestão de execução com code intelligence integrado.\n\n## 2. Objetivo\n\nTornar o mcp-graph capaz de **indexar automaticamente qualquer projeto em qualquer linguagem**, extraindo symbols, relações, docstrings e visibilidade de forma **determinística** (AST-based), com IA como fallback apenas para cenários ambíguos.\n\n## 3. Público-alvo\n\n- Desenvolvedores que usam mcp-graph em projetos não-TypeScript\n- Equipes com projetos multi-linguagem (ex: backend Go + frontend React)\n- Projetos legados em Java, C/C++, Ruby, PHP que precisam de code intelligence\n\n## 4. Princípio Arquitetural\n\n**Determinismo primeiro, IA como fallback.**\n\n```\n1. DETERMINÍSTICO — Tree-sitter AST + S-expression queries\n2. RULE-BASED — Regras documentadas por linguagem (visibility, docstrings, test patterns)\n3. LSP-ENRICHED — Language Server Protocol (opcional, se disponível)\n4. AI FALLBACK — LLM como último recurso (syntax errors graves, linguagens sem grammar)\n```\n\n## 5. Linguagens Suportadas\n\n| Tier | Linguagens | Prioridade |\n|------|-----------|------------|\n| Tier 1 (core) | Python, Go, Rust | Alta — grammars mais maduros |\n| Tier 2 (enterprise) | Java, C/C++, C# | Alta — projetos enterprise |\n| Tier 3 (complementar) | Ruby, PHP, Kotlin, Swift, Lua | Média |\n| Existente | TypeScript, JavaScript | Mantido (TsAnalyzer nativo) |\n\n## 6. User Stories\n\n### US-01: Indexação automática de projeto Python\n**Como** desenvolvedor Python,\n**Quero** instalar o mcp-graph no meu projeto e ter todas as funções, classes e imports indexados automaticamente,\n**Para que** o Code Intelligence funcione com impact analysis, RAG e visualização no dashboard.\n\n**Acceptance Criteria:**\n- AC-01.1: `npm install mcp-graph` em projeto com `pyproject.toml` → auto-detecta Python\n- AC-01.2: `reindex` extrai functions, classes, methods, decorators com nomes e linhas corretos\n- AC-01.3: Docstrings (PEP 257) extraídas e armazenadas no campo `docstring`\n- AC-01.4: Visibility detectada: `_private`, `__mangled`, public (sem prefixo)\n- AC-01.5: Imports (`import`, `from x import y`) geram relações `imports` no grafo\n- AC-01.6: Chamadas de função geram relações `calls`\n- AC-01.7: Herança (`class Foo(Bar)`) gera relações `extends`\n- AC-01.8: Symbols aparecem no dashboard Code Graph tab com filtro \"Python\"\n- AC-01.9: `rag_context` retorna symbols Python com docstrings\n\n### US-02: Indexação automática de projeto Go\n**Como** desenvolvedor Go,\n**Quero** que funções, structs, interfaces e methods do meu projeto sejam indexados,\n**Para que** impact analysis funcione corretamente com as convenções Go.\n\n**Acceptance Criteria:**\n- AC-02.1: Projeto com `go.mod` → auto-detecta Go\n- AC-02.2: Functions, methods (com receiver), structs, interfaces extraídos\n- AC-02.3: Export detection por uppercase: `HandleRequest` = exported, `handleRequest` = unexported\n- AC-02.4: GoDoc (comentário `//` antes da declaração) extraído como docstring\n- AC-02.5: `*_test.go` excluídos da indexação (test pattern)\n- AC-02.6: Package declarations detectadas como `package` symbol kind\n- AC-02.7: `vendor/` ignorado na varredura de diretórios\n\n### US-03: Indexação automática de projeto Rust\n**Como** desenvolvedor Rust,\n**Quero** que functions, structs, traits, impls e modules sejam indexados,\n**Para que** blast radius analysis funcione com o sistema de ownership do Rust.\n\n**Acceptance Criteria:**\n- AC-03.1: Projeto com `Cargo.toml` → auto-detecta Rust\n- AC-03.2: Functions, structs, enums, traits, impl blocks, modules extraídos\n- AC-03.3: Visibility: `pub`, `pub(crate)`, `pub(super)`, private (default) detectados\n- AC-03.4: Rustdoc (`///`, `//!`) extraídos como docstring\n- AC-03.5: `use` declarations geram relações `imports`\n- AC-03.6: Macro definitions detectadas como `macro` symbol kind\n- AC-03.7: `target/` ignorado\n\n### US-04: Indexação automática de projeto Java\n**Como** desenvolvedor Java,\n**Quero** que classes, interfaces, methods, annotations e packages sejam indexados,\n**Para que** o grafo represente a hierarquia do projeto fielmente.\n\n**Acceptance Criteria:**\n- AC-04.1: Projeto com `pom.xml` ou `build.gradle` → auto-detecta Java\n- AC-04.2: Classes, interfaces, enums, records, methods, constructors, fields extraídos\n- AC-04.3: Visibility: `public`, `protected`, `private`, package-private detectados\n- AC-04.4: Javadoc (`/** */`) extraído como docstring\n- AC-04.5: Annotations detectadas como `annotation` symbol kind\n- AC-04.6: `import` declarations geram relações `imports`\n- AC-04.7: `method_invocation` gera relações `calls`\n- AC-04.8: `extends`/`implements` geram relações correspondentes\n- AC-04.9: `src/test/` e `*Test.java` excluídos da indexação\n\n### US-05: Indexação de projeto C/C++\n**Como** desenvolvedor C/C++,\n**Quero** que functions, structs, classes, namespaces e includes sejam indexados,\n**Para que** impact analysis funcione em codebases C/C++ grandes.\n\n**Acceptance Criteria:**\n- AC-05.1: Projeto com `CMakeLists.txt` ou `compile_commands.json` → auto-detecta C/C++\n- AC-05.2: Functions, structs, unions, enums (C), classes, namespaces, templates (C++) extraídos\n- AC-05.3: `#include` gera relações `imports`\n- AC-05.4: `static` = internal linkage detectado como visibility `private`\n- AC-05.5: Doxygen (`/** */`, `///`) extraído como docstring\n- AC-05.6: `build/`, `cmake-build-*/` ignorados\n\n### US-06: Indexação de projeto C#\n**Como** desenvolvedor .NET,\n**Quero** que classes, structs, interfaces, methods, properties e namespaces sejam indexados.\n\n**Acceptance Criteria:**\n- AC-06.1: Projeto com `.csproj` → auto-detecta C#\n- AC-06.2: Classes, structs, interfaces, records, enums, methods, properties, fields extraídos\n- AC-06.3: Visibility: `public`, `internal`, `protected`, `private`, `protected internal` detectados\n- AC-06.4: XML doc comments (`/// <summary>`) extraídos como docstring\n- AC-06.5: `using` directives geram relações `imports`\n- AC-06.6: `bin/`, `obj/` ignorados\n\n### US-07: Syntax Enrichment no banco de dados\n**Como** o sistema RAG,\n**Quero** que cada symbol tenha `docstring`, `source_snippet`, `visibility` e `language` armazenados,\n**Para que** queries retornem contexto semântico real (não apenas nomes de funções).\n\n**Acceptance Criteria:**\n- AC-07.1: Coluna `language TEXT` no `code_symbols` com default 'typescript'\n- AC-07.2: Coluna `docstring TEXT` armazenando documentação extraída do código\n- AC-07.3: Coluna `source_snippet TEXT` com primeiras ~20 linhas do corpo do symbol\n- AC-07.4: Coluna `visibility TEXT` com public/private/protected/internal/package\n- AC-07.5: FTS5 index recriado incluindo `docstring` para busca por descrição\n- AC-07.6: Migration backward-compatible (ALTERs com defaults)\n- AC-07.7: TsAnalyzer existente populando os novos campos para TS/JS\n\n### US-08: Referência determinística por linguagem\n**Como** o sistema de indexação,\n**Quero** ter regras determinísticas documentadas para cada linguagem (visibility, docstrings, test patterns, imports, ignored dirs),\n**Para que** a extração seja previsível e não dependa de heurísticas de IA.\n\n**Acceptance Criteria:**\n- AC-08.1: Arquivo `reference-content.ts` com `LANGUAGE_REFERENCES` tipado\n- AC-08.2: Cada linguagem tem: nodeTypes, visibilityRules, docstringPattern, testPatterns, importPatterns, ignoredDirs\n- AC-08.3: Regras baseadas em documentação oficial (PEP 257, GoDoc, Rustdoc, Javadoc, etc.)\n- AC-08.4: Testes validam que cada referência cobre os cenários da linguagem\n\n### US-09: RAG integration multi-language\n**Como** agente usando `rag_context`,\n**Quero** que o contexto retornado inclua symbols de todas as linguagens do projeto com docstrings reais,\n**Para que** eu tenha entendimento semântico do codebase completo.\n\n**Acceptance Criteria:**\n- AC-09.1: `code-context-indexer` cria knowledge docs agrupados por linguagem\n- AC-09.2: Docstrings reais incluídas nos docs (não apenas nomes)\n- AC-09.3: `code-search` aceita filtro `language` opcional\n- AC-09.4: Code Intelligence wrapper inclui language stats no `_code_intelligence` block\n- AC-09.5: `rag_context` com query \"Python functions\" retorna symbols Python\n\n### US-10: Dashboard multi-language\n**Como** usuário do dashboard,\n**Quero** ver symbols de todas as linguagens no Code Graph tab com filtros e cores por linguagem,\n**Para que** eu visualize a estrutura do projeto multi-linguagem.\n\n**Acceptance Criteria:**\n- AC-10.1: Cores diferentes por linguagem (Python=#3776ab, Go=#00add8, Rust=#dea584, etc.)\n- AC-10.2: Filtro por linguagem no painel de filtros\n- AC-10.3: Badge de linguagem nos nodes do grafo\n- AC-10.4: Hover em node mostra docstring preview\n- AC-10.5: Status endpoint retorna stats por linguagem (`/code-graph/status`)\n\n### US-11: AI Fallback para cenários ambíguos\n**Como** o sistema de indexação,\n**Quero** ter um fallback baseado em LLM para quando o parser determinístico falha,\n**Para que** o sistema nunca retorne vazio mesmo em código quebrado ou linguagens não suportadas.\n\n**Acceptance Criteria:**\n- AC-11.1: Linguagem sem grammar tree-sitter → LLM extrai symbols via prompt structured\n- AC-11.2: Arquivos com ERROR nodes graves → symbols parciais do tree-sitter + gaps do LLM\n- AC-11.3: Resultado do fallback marcado com `metadata.aiGenerated: true`\n- AC-11.4: Fallback nunca executado quando parser determinístico funciona\n\n### US-12: Projeto multi-linguagem (mixed)\n**Como** desenvolvedor com projeto TS + Python + Go,\n**Quero** que todas as linguagens sejam indexadas simultaneamente,\n**Para que** o grafo represente o projeto completo.\n\n**Acceptance Criteria:**\n- AC-12.1: TsAnalyzer indexa `.ts/.js`, TreeSitterAnalyzer indexa `.py/.go`\n- AC-12.2: Sem conflito de extensões (TsAnalyzer tem prioridade para TS/JS)\n- AC-12.3: Stats por linguagem corretas no `/code-graph/status`\n- AC-12.4: Filtro por linguagem funciona no dashboard\n- AC-12.5: Impact analysis funciona cross-language (se symbols compartilham nomes)\n\n### US-13: Tradutor com contexto de referência\n**Como** o `translate_code` tool,\n**Quero** usar as regras de referência por linguagem para mapear construtos entre source e target,\n**Para que** a tradução preserve visibility, naming conventions e padrões idiomáticos.\n\n**Acceptance Criteria:**\n- AC-13.1: Tradutor consulta `LANGUAGE_REFERENCES` para source e target language\n- AC-13.2: Visibility mapeada: `pub` (Rust) → `public` (Java), Uppercase (Go) → `pub` (Rust)\n- AC-13.3: Docstring format convertido: `///` (Rust) → `/** */` (Java) → `\"\"\"` (Python)\n\n## 7. Requisitos Não-Funcionais\n\n| Requisito | Meta |\n|-----------|------|\n| Performance | Indexar 1000+ arquivos multi-lang em < 30s |\n| Memory | Grammars WASM carregados lazy (apenas linguagens detectadas) |\n| Backward compat | Projetos TS/JS existentes não afetados |\n| Graceful degradation | Grammar não instalado → linguagem ignorada (sem crash) |\n| Disk footprint | `optionalDependencies` para grammars (~2-5MB cada) |\n\n## 8. Fora de Escopo (v1)\n\n- Mixed-language files (PHP dentro de HTML, JSX com CSS) — skip embedded languages\n- Incremental parsing com `tree.edit()` — full reparse por enquanto\n- Custom grammars definidos pelo usuário\n- Cross-file type resolution (requer type checker, não apenas parser)\n\n## 9. Dependências\n\n| Dependência | Tipo | Versão |\n|------------|------|--------|\n| `web-tree-sitter` | npm dependency | ^0.24.0 |\n| `tree-sitter-python` | npm optionalDep | ^0.23.0 |\n| `tree-sitter-go` | npm optionalDep | ^0.23.0 |\n| `tree-sitter-rust` | npm optionalDep | ^0.23.0 |\n| `tree-sitter-java` | npm optionalDep | ^0.23.0 |\n| `tree-sitter-c` | npm optionalDep | ^0.23.0 |\n| `tree-sitter-cpp` | npm optionalDep | ^0.23.0 |\n| `tree-sitter-ruby` | npm optionalDep | ^0.23.0 |\n| `tree-sitter-php` | npm optionalDep | ^0.23.0 |\n| `tree-sitter-kotlin` | npm optionalDep | ^0.3.0 |\n| `tree-sitter-swift` | npm optionalDep | ^0.5.0 |\n| `tree-sitter-c-sharp` | npm optionalDep | ^0.23.0 |\n| `tree-sitter-lua` | npm optionalDep | ^0.2.0 |\n\n## 10. Métricas de Sucesso\n\n- 11 linguagens indexando corretamente em projetos reais\n- Docstrings extraídas em > 90% dos symbols documentados\n- RAG retornando contexto multi-language com docstrings\n- Dashboard visualizando grafo multi-language com filtros\n- Zero regressão em projetos TS/JS existentes\n- Performance < 30s para 1000 arquivos\n"
1211
1267
  },
1268
+ {
1269
+ "slug": "prd/universal-deterministic-translation",
1270
+ "title": "Universal Deterministic Translation",
1271
+ "category": "prd",
1272
+ "content": "# PRD: Universal Deterministic Code Translation\n\n## Problem Statement\n\nWhen the Languages tab analysis shows \"100% Deterministic Translation / No AI Required\", there is no way to download the converted code. The user must still go through the AI prompt → paste → finalize flow, which makes no sense when AI isn't needed.\n\nRoot cause: the system can detect determinism (via UCR construct analysis) but cannot execute the translation. Rule templates have {{placeholders}} that are never filled with actual source values. Generators exist only for TS/Python and produce skeleton code with TODOs — not real code.\n\n## Goals\n\n1. **100% deterministic** → engine converts automatically → download direto (zero AI)\n2. **< 100% deterministic** → show % → generate prompt ONLY for ambiguous constructs → user uses AI just for that part → paste and validate\n3. **Remove scope selector** (snippet/function/module) — auto-detect; simplify UX\n4. **Universal** — any of the 12 supported languages as source/target\n\n## Epic: SourceTextExtractor\n\n### Task: Add sourceText field to ParsedConstruct\n- Add optional `sourceText?: string` field to ParsedConstruct interface\n- Backward-compatible — existing parsers unchanged\n- AC: field added, all existing tests pass\n\n### Task: Implement extractSourceText for brace languages\n- Extract source text for constructs in brace-delimited languages (TS, Java, Go, Rust, C#, C++, PHP, Swift, Kotlin, Scala, Dart)\n- Smart block detection: scan forward counting {/} for block constructs\n- Handle string/comment escaping in brace counter\n- AC: correctly extracts function bodies, class bodies, if/else blocks, loops in TS/Java/Go\n\n### Task: Implement extractSourceText for indent languages\n- Extract source text for constructs in indent-delimited languages (Python, Haskell)\n- Scan until indentation drops below construct level\n- AC: correctly extracts function bodies, class bodies, if/else blocks in Python\n\n### Task: Implement extractSourceText for keyword-end languages\n- Extract source text for constructs in keyword-end languages (Ruby, Lua, Elixir)\n- Scan until `end` keyword at matching indent level\n- AC: correctly extracts def/class/if blocks in Ruby/Lua/Elixir\n\n### Task: Implement extractSourceText for single-line constructs\n- Extract source text for single-line constructs (return, break, continue, import, throw, variable declarations)\n- Just the line or until semicolon\n- AC: correctly extracts return statements, imports, variable declarations\n\n## Epic: PlaceholderResolver\n\n### Task: Implement function construct extractors\n- Extract name, params, body, returnType from function source text (uc_fn_def, uc_method_def, uc_arrow_fn, uc_async_fn)\n- Support brace family and indent family extraction patterns\n- AC: extracts all parts from TS functions, Python defs, Java methods\n\n### Task: Implement class construct extractors\n- Extract name, parent, members/body from class source text (uc_class_def, uc_interface, uc_abstract_class)\n- Support extends/implements detection\n- AC: extracts class parts from TS, Python, Java classes\n\n### Task: Implement control flow extractors\n- Extract condition, body, elseBody from if/else (uc_if_else)\n- Extract variable, iterable, body from loops (uc_for_loop, uc_for_each, uc_while)\n- Extract expression from switch/case (uc_switch)\n- AC: extracts parts from TS/Python/Java control flow\n\n### Task: Implement remaining construct extractors\n- Extract body, error, catchBody from try/catch (uc_try_catch)\n- Extract module, names from imports (uc_import_named, uc_import_default)\n- Extract expression from return/throw (uc_return, uc_throw)\n- Extract name, value from variable declarations (uc_const_decl, uc_let_decl, uc_var_decl)\n- AC: extracts parts for all remaining construct types\n\n### Task: Implement type mapper and param transformer\n- Type mapper: cross-language type conversion (number→int, string→str, boolean→bool, void→None, etc.)\n- Param transformer: strip type annotations for dynamic targets (TS→Python), keep/add for static targets\n- Body normalizer: strip surrounding braces, normalize indentation to zero-indent\n- AC: type mapping works for all 12 languages, param stripping works TS→Python/Ruby/PHP\n\n## Epic: UniversalGenerator\n\n### Task: Create UniversalGenerator class\n- Implements GeneratorAdapter interface\n- Constructor takes ConstructRegistry, targetLanguageId, sourceCode, sourceLanguageId\n- generate() method: extractSourceText → resolvePlaceholders → UCR getPrimaryMapping → substitute\n- Handles remaining unresolved {{...}} with language-appropriate defaults\n- AC: generates real Python from TS, real Go from Java, tracks mapped/unmapped\n\n### Task: Wire UniversalGenerator into TranslationOrchestrator\n- Replace convertToIR + RuleEngine + getDeterministicRuleSet path in prepareTranslation\n- Generate deterministicCode for ALL cases (100% and partial)\n- Remove old rule-engine imports and getDeterministicRuleSet method\n- AC: prepareTranslation returns real code in deterministicCode, not templates\n\n### Task: Add partial prompt for ambiguous constructs only\n- Add option to buildTranslationPrompt for ambiguous-only mode\n- When < 100%: prompt includes only needsAiAssist constructs\n- Include already-translated deterministic code as context in prompt\n- AC: prompt is smaller, focused on ambiguous constructs only\n\n## Epic: Frontend UX\n\n### Task: Remove scope selector from translation form\n- Remove SCOPES array and toggle buttons from translation-form.tsx\n- Remove scope/setScope props and state\n- Hardcode scope as \"module\" internally\n- AC: scope selector gone, form simpler, all builds pass\n\n### Task: Fix download file extension\n- Accept targetLanguage prop in AnalysisResults\n- Use LANG_EXT map for correct extension (.py, .go, .java, .rs, etc.)\n- Pass targetLanguage from languages-tab.tsx\n- AC: download produces translated.py, translated.go, etc.\n\n### Task: Wire project-mode auto-translation for deterministic files\n- In generateDownloadZip(), auto-translate deterministic files using UniversalGenerator\n- No more .prompt.md sidecars for deterministic files\n- AC: project zip contains real translated code for deterministic files\n"
1273
+ },
1212
1274
  {
1213
1275
  "slug": "reference/INTEGRATIONS-GUIDE",
1214
1276
  "title": "INTEGRATIONS GUIDE",
@@ -8,7 +8,7 @@ const publicDir = path.join(__dirname, "..", "web", "dashboard", "dist");
8
8
  export function createApp(options) {
9
9
  const { store, basePath, eventBus, mcp, storeManager } = options;
10
10
  const app = express();
11
- app.use(express.json());
11
+ app.use(express.json({ limit: "50mb" }));
12
12
  // MCP HTTP transport (optional — only when MCP server is provided)
13
13
  if (mcp) {
14
14
  app.post("/mcp", async (req, res) => {
@@ -1 +1 @@
1
- {"version":3,"file":"app-factory.js","sourceRoot":"","sources":["../../src/mcp/app-factory.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,OAAO,MAAM,SAAS,CAAC;AAG9B,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AAInG,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;AAUzE,MAAM,UAAU,SAAS,CAAC,OAA0B;IAClD,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;IAEjE,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IACtB,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAExB,mEAAmE;IACnE,IAAI,GAAG,EAAE,CAAC;QACR,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YAClC,MAAM,SAAS,GAAG,IAAI,6BAA6B,CAAC;gBAClD,kBAAkB,EAAE,SAAS;aAC9B,CAAC,CAAC;YACH,MAAM,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAC7B,MAAM,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,WAAW;IACX,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;IAEjF,2BAA2B;IAC3B,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IAEnC,eAAe;IACf,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QAC/B,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"app-factory.js","sourceRoot":"","sources":["../../src/mcp/app-factory.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,OAAO,MAAM,SAAS,CAAC;AAG9B,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AAInG,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;AAUzE,MAAM,UAAU,SAAS,CAAC,OAA0B;IAClD,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;IAEjE,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IACtB,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAEzC,mEAAmE;IACnE,IAAI,GAAG,EAAE,CAAC;QACR,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YAClC,MAAM,SAAS,GAAG,IAAI,6BAA6B,CAAC;gBAClD,kBAAkB,EAAE,SAAS;aAC9B,CAAC,CAAC;YACH,MAAM,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAC7B,MAAM,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,WAAW;IACX,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;IAEjF,2BAA2B;IAC3B,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IAEnC,eAAe;IACf,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QAC/B,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { SqliteStore } from "../../core/store/sqlite-store.js";
3
+ export declare function registerDavinciAnalyze(server: McpServer, _store: SqliteStore): void;
4
+ //# sourceMappingURL=davinci-analyze.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"davinci-analyze.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/davinci-analyze.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAOpE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAgCnF"}
@@ -0,0 +1,31 @@
1
+ import { z } from "zod/v4";
2
+ import { parseDaVinciCode } from "../../core/davinci/davinci-parser.js";
3
+ import { resolveVariables } from "../../core/davinci/variable-resolver.js";
4
+ import { detectPluginType } from "../../core/davinci/plugin-type-detector.js";
5
+ import { mcpText } from "../response-helpers.js";
6
+ import { logger } from "../../core/utils/logger.js";
7
+ export function registerDavinciAnalyze(server, _store) {
8
+ server.tool("davinci_analyze", "Analyze DaVinci custom code (JavaScript). Extracts variables, API calls, flow logic, detects plugin type, and resolves variable mappings to Java equivalents.", {
9
+ code: z.string().describe("DaVinci JavaScript code to analyze"),
10
+ codeLocation: z.enum(["custom_function", "code_snippet", "html_template"]).optional()
11
+ .describe("Code location type (default: auto-detect)"),
12
+ targetSdk: z.enum(["pingfederate", "pingaccess"]).optional()
13
+ .describe("Target SDK for plugin type detection (default: pingfederate)"),
14
+ }, async ({ code, codeLocation, targetSdk }) => {
15
+ logger.info("davinci: analyzing code", { codeLength: code.length, codeLocation });
16
+ const analysis = parseDaVinciCode(code, {
17
+ codeLocation: codeLocation ?? undefined,
18
+ });
19
+ const resolvedVariables = resolveVariables(analysis.variables);
20
+ const detection = detectPluginType(analysis, targetSdk ?? "pingfederate", {
21
+ sourceCode: code,
22
+ });
23
+ return mcpText(JSON.stringify({
24
+ ok: true,
25
+ analysis,
26
+ resolvedVariables,
27
+ detection,
28
+ }, null, 2));
29
+ });
30
+ }
31
+ //# sourceMappingURL=davinci-analyze.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"davinci-analyze.js","sourceRoot":"","sources":["../../../src/mcp/tools/davinci-analyze.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAG3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AAC9E,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAEpD,MAAM,UAAU,sBAAsB,CAAC,MAAiB,EAAE,MAAmB;IAC3E,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,+JAA+J,EAC/J;QACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;QAC/D,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,iBAAiB,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC,CAAC,QAAQ,EAAE;aAClF,QAAQ,CAAC,2CAA2C,CAAC;QACxD,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE;aACzD,QAAQ,CAAC,8DAA8D,CAAC;KAC5E,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,EAAE;QAC1C,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;QAElF,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,EAAE;YACtC,YAAY,EAAE,YAAY,IAAI,SAAS;SACxC,CAAC,CAAC;QAEH,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAE/D,MAAM,SAAS,GAAG,gBAAgB,CAAC,QAAQ,EAAE,SAAS,IAAI,cAAc,EAAE;YACxE,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;YAC5B,EAAE,EAAE,IAAI;YACR,QAAQ;YACR,iBAAiB;YACjB,SAAS;SACV,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACf,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { SqliteStore } from "../../core/store/sqlite-store.js";
3
+ export declare function registerDavinciBuild(server: McpServer, _store: SqliteStore): void;
4
+ //# sourceMappingURL=davinci-build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"davinci-build.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/davinci-build.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAKpE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CA+CjF"}
@@ -0,0 +1,43 @@
1
+ import { z } from "zod/v4";
2
+ import { checkBuildEnvironment, runMavenBuild } from "../../core/davinci/build-runner.js";
3
+ import { mcpText } from "../response-helpers.js";
4
+ import { logger } from "../../core/utils/logger.js";
5
+ export function registerDavinciBuild(server, _store) {
6
+ server.tool("davinci_build", "Build a DaVinci-converted Java plugin using Maven. Checks environment (JDK, Maven, SDK) and runs mvn package. Returns build status, JAR path, and environment indicators.", {
7
+ projectDir: z.string().describe("Path to the Maven project directory containing pom.xml"),
8
+ checkOnly: z.boolean().optional().describe("Only check environment, do not build (default: false)"),
9
+ }, async ({ projectDir, checkOnly }) => {
10
+ logger.info("davinci: build requested", { projectDir, checkOnly });
11
+ const env = checkBuildEnvironment();
12
+ if (checkOnly) {
13
+ return mcpText(JSON.stringify({
14
+ ok: true,
15
+ action: "environment_check",
16
+ environment: env,
17
+ }, null, 2));
18
+ }
19
+ if (!env.readyToBuild) {
20
+ return mcpText(JSON.stringify({
21
+ ok: false,
22
+ action: "build_blocked",
23
+ reason: "Build environment not ready",
24
+ environment: env,
25
+ hint: env.instructions.join(" | "),
26
+ }, null, 2));
27
+ }
28
+ const result = await runMavenBuild(projectDir);
29
+ return mcpText(JSON.stringify({
30
+ ok: result.success,
31
+ action: "build_complete",
32
+ buildResult: {
33
+ success: result.success,
34
+ jarPath: result.jarPath,
35
+ durationMs: result.durationMs,
36
+ stdout: result.stdout.slice(0, 2000),
37
+ stderr: result.stderr.slice(0, 2000),
38
+ },
39
+ environment: env,
40
+ }, null, 2));
41
+ });
42
+ }
43
+ //# sourceMappingURL=davinci-build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"davinci-build.js","sourceRoot":"","sources":["../../../src/mcp/tools/davinci-build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAG3B,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAC1F,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAEpD,MAAM,UAAU,oBAAoB,CAAC,MAAiB,EAAE,MAAmB;IACzE,MAAM,CAAC,IAAI,CACT,eAAe,EACf,2KAA2K,EAC3K;QACE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wDAAwD,CAAC;QACzF,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uDAAuD,CAAC;KACpG,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE;QAClC,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;QAEnE,MAAM,GAAG,GAAG,qBAAqB,EAAE,CAAC;QAEpC,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;gBAC5B,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,mBAAmB;gBAC3B,WAAW,EAAE,GAAG;aACjB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACf,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;gBAC5B,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,eAAe;gBACvB,MAAM,EAAE,6BAA6B;gBACrC,WAAW,EAAE,GAAG;gBAChB,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;aACnC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACf,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC,CAAC;QAE/C,OAAO,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;YAC5B,EAAE,EAAE,MAAM,CAAC,OAAO;YAClB,MAAM,EAAE,gBAAgB;YACxB,WAAW,EAAE;gBACX,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;gBACpC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;aACrC;YACD,WAAW,EAAE,GAAG;SACjB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACf,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { SqliteStore } from "../../core/store/sqlite-store.js";
3
+ export declare function registerDavinciConvert(server: McpServer, _store: SqliteStore): void;
4
+ //# sourceMappingURL=davinci-convert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"davinci-convert.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/davinci-convert.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AASpE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CA+DnF"}
@@ -0,0 +1,61 @@
1
+ import { z } from "zod/v4";
2
+ import { parseDaVinciCode } from "../../core/davinci/davinci-parser.js";
3
+ import { resolveVariables } from "../../core/davinci/variable-resolver.js";
4
+ import { detectPluginType } from "../../core/davinci/plugin-type-detector.js";
5
+ import { generatePom } from "../../core/davinci/pom-generator.js";
6
+ import { mcpText } from "../response-helpers.js";
7
+ import { logger } from "../../core/utils/logger.js";
8
+ export function registerDavinciConvert(server, _store) {
9
+ server.tool("davinci_convert", "Convert DaVinci JavaScript code to PingAccess/PingFederate Java plugin. Generates Java class structure, POM.xml, and PF-INF descriptor.", {
10
+ code: z.string().describe("DaVinci JavaScript code to convert"),
11
+ pluginName: z.string().describe("Plugin name (kebab-case, e.g. 'my-auth-adapter')"),
12
+ packageName: z.string().describe("Java package name (e.g. 'com.example.adapter')"),
13
+ className: z.string().describe("Java class name (e.g. 'MyAuthAdapter')"),
14
+ targetSdk: z.enum(["pingfederate", "pingaccess"]).optional()
15
+ .describe("Target SDK (default: pingfederate)"),
16
+ pluginType: z.string().optional()
17
+ .describe("Override plugin type (e.g. 'idp-adapter', 'token-generator')"),
18
+ }, async ({ code, pluginName, packageName, className, targetSdk, pluginType }) => {
19
+ logger.info("davinci: converting code", { pluginName, targetSdk });
20
+ const sdk = targetSdk ?? "pingfederate";
21
+ const analysis = parseDaVinciCode(code);
22
+ const resolvedVariables = resolveVariables(analysis.variables);
23
+ const detection = detectPluginType(analysis, sdk, {
24
+ sourceCode: code,
25
+ override: pluginType,
26
+ });
27
+ const pomXml = generatePom({
28
+ pluginName,
29
+ packageName,
30
+ className,
31
+ pluginType: detection.pluginType,
32
+ attributeContract: [],
33
+ javaVersion: sdk === "pingaccess" ? "17" : "11",
34
+ }, sdk);
35
+ // Generate configure() body from resolved variables
36
+ const configureLines = resolvedVariables
37
+ .filter((v) => v.configureCode)
38
+ .map((v) => ` ${v.configureCode}`)
39
+ .join("\n");
40
+ // Generate GUI field declarations
41
+ const guiFieldLines = resolvedVariables
42
+ .filter((v) => v.guiFieldCode)
43
+ .map((v) => v.guiFieldCode)
44
+ .join("\n ");
45
+ return mcpText(JSON.stringify({
46
+ ok: true,
47
+ pluginName,
48
+ className,
49
+ packageName,
50
+ pluginType: detection.pluginType,
51
+ confidence: detection.confidence,
52
+ warnings: [...analysis.warnings, ...detection.warnings],
53
+ pomXml,
54
+ configureBody: configureLines || " // No configuration fields detected",
55
+ guiFields: guiFieldLines || " // No GUI fields detected",
56
+ resolvedVariables: resolvedVariables.length,
57
+ hint: "Use the generated POM and Java structure to build the plugin. Run davinci_build to compile.",
58
+ }, null, 2));
59
+ });
60
+ }
61
+ //# sourceMappingURL=davinci-convert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"davinci-convert.js","sourceRoot":"","sources":["../../../src/mcp/tools/davinci-convert.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAyDpE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAoE5E"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AA6DpE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAyE5E"}
@@ -35,6 +35,10 @@ import { registerSiebelImportDocs } from "./siebel-import-docs.js";
35
35
  import { registerTranslateCode } from "./translate-code.js";
36
36
  import { registerAnalyzeTranslation } from "./analyze-translation.js";
37
37
  import { registerTranslationJobs } from "./translation-jobs.js";
38
+ // DaVinci converter tools
39
+ import { registerDavinciAnalyze } from "./davinci-analyze.js";
40
+ import { registerDavinciConvert } from "./davinci-convert.js";
41
+ import { registerDavinciBuild } from "./davinci-build.js";
38
42
  // RAG knowledge tools
39
43
  import { registerKnowledgeFeedback } from "./knowledge-feedback.js";
40
44
  import { registerKnowledgeStats } from "./knowledge-stats.js";
@@ -93,6 +97,10 @@ export function registerAllTools(server, store) {
93
97
  registerTranslateCode(server, store);
94
98
  registerAnalyzeTranslation(server, store);
95
99
  registerTranslationJobs(server, store);
100
+ // DaVinci converter tools
101
+ registerDavinciAnalyze(server, store);
102
+ registerDavinciConvert(server, store);
103
+ registerDavinciBuild(server, store);
96
104
  // RAG knowledge tools
97
105
  registerKnowledgeFeedback(server, store);
98
106
  registerKnowledgeStats(server, store);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp/tools/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp/tools/index.ts"],"names":[],"mappings":"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"}
@@ -96,7 +96,7 @@ export function registerTranslateCode(server, store) {
96
96
  if (!projectId) {
97
97
  return mcpError("No active project. Use init or activate a project first.");
98
98
  }
99
- const prepareResult = orchestrator.prepareTranslation({
99
+ const prepareResult = await orchestrator.prepareTranslation({
100
100
  projectId,
101
101
  sourceCode: resolvedCode,
102
102
  sourceLanguage: resolvedSourceLanguage,
@@ -1 +1 @@
1
- {"version":3,"file":"translate-code.js","sourceRoot":"","sources":["../../../src/mcp/tools/translate-code.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"translate-code.js","sourceRoot":"","sources":["../../../src/mcp/tools/translate-code.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- import{r as h,a as p,j as e}from"./index-D_SBClB-.js";function j(){const[r,n]=h.useState(null),[i,m]=h.useState(!0),[u,a]=h.useState(null);return h.useEffect(()=>{async function s(){try{const c=await p.request("/benchmark");n(c)}catch(c){a(c instanceof Error?c.message:"Failed to load benchmark data")}finally{m(!1)}}s()},[]),{data:r,loading:i,error:u}}function f(){const{data:r,loading:n,error:i}=j(),[m,u]=h.useState(!1);if(n)return e.jsxs("div",{className:"p-6 max-w-5xl mx-auto space-y-6",children:[e.jsx("div",{className:"h-5 w-40 rounded bg-surface animate-pulse"}),e.jsx("div",{className:"grid grid-cols-3 gap-3",children:Array.from({length:3}).map((o,t)=>e.jsx("div",{className:"h-20 rounded-xl border border-edge bg-surface-alt animate-pulse"},t))}),e.jsx("div",{className:"space-y-2",children:Array.from({length:5}).map((o,t)=>e.jsx("div",{className:"h-6 rounded bg-surface animate-pulse",style:{width:`${60+Math.random()*30}%`}},t))})]});if(i)return e.jsx("div",{className:"flex flex-col items-center justify-center h-full gap-4",children:e.jsxs("div",{className:"text-center",children:[e.jsx("p",{className:"text-sm font-medium text-foreground",children:"Failed to load benchmark"}),e.jsx("p",{className:"text-xs text-muted mt-1",children:i})]})});if(!r)return e.jsx("div",{});const{tokenEconomy:a,layeredCompression:s,dependencyIntelligence:c,toolTokenUsage:d}=r,g=(s==null?void 0:s.avgTotalRealSavingsPercent)??a.avgCompressionPercent;return e.jsxs("div",{className:"p-6 max-w-5xl mx-auto space-y-6 overflow-y-auto h-full",children:[e.jsxs("section",{children:[e.jsx("h3",{className:"text-sm font-semibold mb-3",children:"Token Savings"}),e.jsxs("div",{className:"grid grid-cols-3 gap-3 mb-4",children:[e.jsxs("div",{className:"p-4 rounded-xl border border-edge shadow-sm bg-surface-alt text-center","data-testid":"metric-card",children:[e.jsxs("div",{className:"text-3xl font-bold text-accent",children:[g,"%"]}),e.jsx("div",{className:"text-[10px] text-muted uppercase mt-1",children:"compression rate"})]}),e.jsx(l,{value:a.totalTokensSaved.toLocaleString(),label:`tokens saved (${a.sampleSize} tasks)`}),e.jsx(l,{value:a.avgTokensSavedPerTask.toLocaleString(),label:"avg saved / task"})]})]}),e.jsxs("section",{children:[e.jsx("h3",{className:"text-sm font-semibold mb-3",children:"Cost Impact"}),e.jsxs("div",{className:"grid grid-cols-2 gap-3 mb-3",children:[e.jsx(v,{label:"Opus",before:a.costSavings.opusCostPerTaskUncompressed,after:a.costSavings.opusCostPerTask,totalSaved:a.costSavings.opusTotalSaved}),e.jsx(v,{label:"Sonnet",before:a.costSavings.sonnetCostPerTaskUncompressed,after:a.costSavings.sonnetCostPerTask,totalSaved:a.costSavings.sonnetTotalSaved})]})]}),a.perTaskMetrics.length>0&&e.jsxs("section",{children:[e.jsx("h3",{className:"text-sm font-semibold mb-3",children:"Compression per Task"}),e.jsx("div",{className:"space-y-1.5","data-testid":"compression-bars",children:a.perTaskMetrics.slice(0,15).map(o=>e.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[e.jsx("span",{className:"w-32 truncate",title:o.title,children:o.title}),e.jsx("div",{className:"flex-1 h-3 bg-surface-elevated rounded-full overflow-hidden",children:e.jsx("div",{className:"h-full rounded-full bg-accent",style:{width:`${Math.min(o.compressionPercent,100)}%`}})}),e.jsxs("span",{className:"text-muted w-28 text-right",children:[o.compressionPercent,"% (",o.estimatedTokens.toLocaleString()," tok)"]})]},o.id))})]}),s&&s.avgLayer1SavingsPercent!=null&&e.jsxs("section",{children:[e.jsxs("button",{type:"button",className:"text-sm font-semibold mb-3 flex items-center gap-1 hover:text-accent transition-colors",onClick:()=>u(!m),children:[e.jsx("span",{className:"text-xs",children:m?"▼":"▶"}),"How compression works"]}),m&&e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"grid grid-cols-5 gap-3 mb-2",children:[e.jsx(l,{value:`${s.avgLayer1SavingsPercent}%`,label:"Field cleanup"}),e.jsx(l,{value:`${s.avgLayer2SavingsPercent}%`,label:"Desc summary"}),e.jsx(l,{value:`${s.avgLayer3SavingsPercent}%`,label:"Default omit"}),e.jsx(l,{value:`${s.avgLayer4SavingsPercent}%`,label:"Key shorten"}),e.jsx(l,{value:`${s.avgTotalRealSavingsPercent}%`,label:"Total saved"})]}),(()=>{const o=Math.max(s.avgNaiveNeighborhoodTokens,1),t=[{label:"Original context",tokens:s.avgNaiveNeighborhoodTokens,color:"#ef4444"},{label:"Field cleanup",tokens:s.avgCompactContextTokens,color:"#f97316"},{label:"Desc summary",tokens:s.avgNeighborTruncatedTokens,color:"#eab308"},{label:"Default omit",tokens:s.avgDefaultOmittedTokens,color:"#22c55e"},{label:"Key shorten",tokens:s.avgShortKeysTokens,color:"#3b82f6"},{label:"Minimal context",tokens:s.avgSummaryTierTokens,color:"#8b5cf6"}];return e.jsx("div",{className:"space-y-1.5","data-testid":"waterfall-bars",children:t.map(x=>e.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[e.jsx("span",{className:"w-32 truncate",title:x.label,children:x.label}),e.jsx("div",{className:"flex-1 h-3 bg-surface-elevated rounded-full overflow-hidden",children:e.jsx("div",{className:"h-full rounded-full",style:{width:`${Math.min(x.tokens/o*100,100)}%`,backgroundColor:x.color}})}),e.jsxs("span",{className:"text-muted w-20 text-right",children:[x.tokens.toLocaleString()," tok"]})]},x.label))})})()]})]}),d&&d.totalCalls>0&&e.jsxs("section",{children:[e.jsx("h3",{className:"text-sm font-semibold mb-3",children:"Token Usage per Tool"}),e.jsxs("div",{className:"grid grid-cols-3 gap-3 mb-4",children:[e.jsx(l,{value:d.totalCalls.toLocaleString(),label:"Total calls"}),e.jsx(l,{value:d.totalInputTokens.toLocaleString(),label:"Input tokens"}),e.jsx(l,{value:d.totalOutputTokens.toLocaleString(),label:"Output tokens"})]}),d.perTool.length>0&&(()=>{const o=Math.max(...d.perTool.map(t=>t.totalTokens),1);return e.jsx("div",{className:"space-y-1.5","data-testid":"tool-token-bars",children:d.perTool.slice(0,15).map(t=>e.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[e.jsx("span",{className:"w-32 truncate font-mono",title:t.toolName,children:t.toolName}),e.jsx("div",{className:"flex-1 h-3 bg-surface-elevated rounded-full overflow-hidden",children:e.jsx("div",{className:"h-full rounded-full bg-accent",style:{width:`${Math.min(t.totalTokens/o*100,100)}%`}})}),e.jsxs("span",{className:"text-muted w-32 text-right",children:[t.callCount," calls, ",t.totalTokens.toLocaleString()," tok"]})]},t.toolName))})})()]}),e.jsxs("section",{children:[e.jsx("h3",{className:"text-sm font-semibold mb-3",children:"Graph Integrity"}),e.jsxs("div",{className:"grid grid-cols-3 gap-3",children:[e.jsx(l,{value:c.inferredDeps,label:"Auto-inferred deps"}),e.jsx(l,{value:`${c.blockedTasks}/${a.totalNodes}`,label:"Blocked tasks"}),e.jsx(l,{value:c.cycles,label:"Cycles detected"})]})]})]})}function l({value:r,label:n}){return e.jsxs("div",{className:"p-3 rounded-xl border border-edge shadow-sm hover:shadow-md transition-shadow bg-surface-alt text-center","data-testid":"metric-card",children:[e.jsx("div",{className:"text-xl font-bold",children:r}),e.jsx("div",{className:"text-[10px] text-muted uppercase",children:n})]})}function v({label:r,before:n,after:i,totalSaved:m}){const u=n>0?Math.round((n-i)/n*100):0;return e.jsxs("div",{className:"p-4 rounded-xl border border-edge shadow-sm bg-surface-alt","data-testid":"metric-card",children:[e.jsx("div",{className:"text-xs font-medium text-muted mb-2",children:r}),e.jsxs("div",{className:"flex items-baseline gap-3 mb-1",children:[e.jsxs("span",{className:"text-sm text-muted line-through",children:["$",n.toFixed(3)]}),e.jsxs("span",{className:"text-xl font-bold",children:["$",i.toFixed(3)]}),e.jsxs("span",{className:"text-xs text-accent",children:["-",u,"%"]})]}),e.jsxs("div",{className:"text-[10px] text-muted uppercase",children:["per task · $",m.toFixed(2)," total saved"]})]})}export{f as BenchmarkTab};
1
+ import{r as h,a as p,j as e}from"./index-DdenFaJ5.js";function j(){const[r,n]=h.useState(null),[i,m]=h.useState(!0),[u,a]=h.useState(null);return h.useEffect(()=>{async function s(){try{const c=await p.request("/benchmark");n(c)}catch(c){a(c instanceof Error?c.message:"Failed to load benchmark data")}finally{m(!1)}}s()},[]),{data:r,loading:i,error:u}}function f(){const{data:r,loading:n,error:i}=j(),[m,u]=h.useState(!1);if(n)return e.jsxs("div",{className:"p-6 max-w-5xl mx-auto space-y-6",children:[e.jsx("div",{className:"h-5 w-40 rounded bg-surface animate-pulse"}),e.jsx("div",{className:"grid grid-cols-3 gap-3",children:Array.from({length:3}).map((o,t)=>e.jsx("div",{className:"h-20 rounded-xl border border-edge bg-surface-alt animate-pulse"},t))}),e.jsx("div",{className:"space-y-2",children:Array.from({length:5}).map((o,t)=>e.jsx("div",{className:"h-6 rounded bg-surface animate-pulse",style:{width:`${60+Math.random()*30}%`}},t))})]});if(i)return e.jsx("div",{className:"flex flex-col items-center justify-center h-full gap-4",children:e.jsxs("div",{className:"text-center",children:[e.jsx("p",{className:"text-sm font-medium text-foreground",children:"Failed to load benchmark"}),e.jsx("p",{className:"text-xs text-muted mt-1",children:i})]})});if(!r)return e.jsx("div",{});const{tokenEconomy:a,layeredCompression:s,dependencyIntelligence:c,toolTokenUsage:d}=r,g=(s==null?void 0:s.avgTotalRealSavingsPercent)??a.avgCompressionPercent;return e.jsxs("div",{className:"p-6 max-w-5xl mx-auto space-y-6 overflow-y-auto h-full",children:[e.jsxs("section",{children:[e.jsx("h3",{className:"text-sm font-semibold mb-3",children:"Token Savings"}),e.jsxs("div",{className:"grid grid-cols-3 gap-3 mb-4",children:[e.jsxs("div",{className:"p-4 rounded-xl border border-edge shadow-sm bg-surface-alt text-center","data-testid":"metric-card",children:[e.jsxs("div",{className:"text-3xl font-bold text-accent",children:[g,"%"]}),e.jsx("div",{className:"text-[10px] text-muted uppercase mt-1",children:"compression rate"})]}),e.jsx(l,{value:a.totalTokensSaved.toLocaleString(),label:`tokens saved (${a.sampleSize} tasks)`}),e.jsx(l,{value:a.avgTokensSavedPerTask.toLocaleString(),label:"avg saved / task"})]})]}),e.jsxs("section",{children:[e.jsx("h3",{className:"text-sm font-semibold mb-3",children:"Cost Impact"}),e.jsxs("div",{className:"grid grid-cols-2 gap-3 mb-3",children:[e.jsx(v,{label:"Opus",before:a.costSavings.opusCostPerTaskUncompressed,after:a.costSavings.opusCostPerTask,totalSaved:a.costSavings.opusTotalSaved}),e.jsx(v,{label:"Sonnet",before:a.costSavings.sonnetCostPerTaskUncompressed,after:a.costSavings.sonnetCostPerTask,totalSaved:a.costSavings.sonnetTotalSaved})]})]}),a.perTaskMetrics.length>0&&e.jsxs("section",{children:[e.jsx("h3",{className:"text-sm font-semibold mb-3",children:"Compression per Task"}),e.jsx("div",{className:"space-y-1.5","data-testid":"compression-bars",children:a.perTaskMetrics.slice(0,15).map(o=>e.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[e.jsx("span",{className:"w-32 truncate",title:o.title,children:o.title}),e.jsx("div",{className:"flex-1 h-3 bg-surface-elevated rounded-full overflow-hidden",children:e.jsx("div",{className:"h-full rounded-full bg-accent",style:{width:`${Math.min(o.compressionPercent,100)}%`}})}),e.jsxs("span",{className:"text-muted w-28 text-right",children:[o.compressionPercent,"% (",o.estimatedTokens.toLocaleString()," tok)"]})]},o.id))})]}),s&&s.avgLayer1SavingsPercent!=null&&e.jsxs("section",{children:[e.jsxs("button",{type:"button",className:"text-sm font-semibold mb-3 flex items-center gap-1 hover:text-accent transition-colors",onClick:()=>u(!m),children:[e.jsx("span",{className:"text-xs",children:m?"▼":"▶"}),"How compression works"]}),m&&e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"grid grid-cols-5 gap-3 mb-2",children:[e.jsx(l,{value:`${s.avgLayer1SavingsPercent}%`,label:"Field cleanup"}),e.jsx(l,{value:`${s.avgLayer2SavingsPercent}%`,label:"Desc summary"}),e.jsx(l,{value:`${s.avgLayer3SavingsPercent}%`,label:"Default omit"}),e.jsx(l,{value:`${s.avgLayer4SavingsPercent}%`,label:"Key shorten"}),e.jsx(l,{value:`${s.avgTotalRealSavingsPercent}%`,label:"Total saved"})]}),(()=>{const o=Math.max(s.avgNaiveNeighborhoodTokens,1),t=[{label:"Original context",tokens:s.avgNaiveNeighborhoodTokens,color:"#ef4444"},{label:"Field cleanup",tokens:s.avgCompactContextTokens,color:"#f97316"},{label:"Desc summary",tokens:s.avgNeighborTruncatedTokens,color:"#eab308"},{label:"Default omit",tokens:s.avgDefaultOmittedTokens,color:"#22c55e"},{label:"Key shorten",tokens:s.avgShortKeysTokens,color:"#3b82f6"},{label:"Minimal context",tokens:s.avgSummaryTierTokens,color:"#8b5cf6"}];return e.jsx("div",{className:"space-y-1.5","data-testid":"waterfall-bars",children:t.map(x=>e.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[e.jsx("span",{className:"w-32 truncate",title:x.label,children:x.label}),e.jsx("div",{className:"flex-1 h-3 bg-surface-elevated rounded-full overflow-hidden",children:e.jsx("div",{className:"h-full rounded-full",style:{width:`${Math.min(x.tokens/o*100,100)}%`,backgroundColor:x.color}})}),e.jsxs("span",{className:"text-muted w-20 text-right",children:[x.tokens.toLocaleString()," tok"]})]},x.label))})})()]})]}),d&&d.totalCalls>0&&e.jsxs("section",{children:[e.jsx("h3",{className:"text-sm font-semibold mb-3",children:"Token Usage per Tool"}),e.jsxs("div",{className:"grid grid-cols-3 gap-3 mb-4",children:[e.jsx(l,{value:d.totalCalls.toLocaleString(),label:"Total calls"}),e.jsx(l,{value:d.totalInputTokens.toLocaleString(),label:"Input tokens"}),e.jsx(l,{value:d.totalOutputTokens.toLocaleString(),label:"Output tokens"})]}),d.perTool.length>0&&(()=>{const o=Math.max(...d.perTool.map(t=>t.totalTokens),1);return e.jsx("div",{className:"space-y-1.5","data-testid":"tool-token-bars",children:d.perTool.slice(0,15).map(t=>e.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[e.jsx("span",{className:"w-32 truncate font-mono",title:t.toolName,children:t.toolName}),e.jsx("div",{className:"flex-1 h-3 bg-surface-elevated rounded-full overflow-hidden",children:e.jsx("div",{className:"h-full rounded-full bg-accent",style:{width:`${Math.min(t.totalTokens/o*100,100)}%`}})}),e.jsxs("span",{className:"text-muted w-32 text-right",children:[t.callCount," calls, ",t.totalTokens.toLocaleString()," tok"]})]},t.toolName))})})()]}),e.jsxs("section",{children:[e.jsx("h3",{className:"text-sm font-semibold mb-3",children:"Graph Integrity"}),e.jsxs("div",{className:"grid grid-cols-3 gap-3",children:[e.jsx(l,{value:c.inferredDeps,label:"Auto-inferred deps"}),e.jsx(l,{value:`${c.blockedTasks}/${a.totalNodes}`,label:"Blocked tasks"}),e.jsx(l,{value:c.cycles,label:"Cycles detected"})]})]})]})}function l({value:r,label:n}){return e.jsxs("div",{className:"p-3 rounded-xl border border-edge shadow-sm hover:shadow-md transition-shadow bg-surface-alt text-center","data-testid":"metric-card",children:[e.jsx("div",{className:"text-xl font-bold",children:r}),e.jsx("div",{className:"text-[10px] text-muted uppercase",children:n})]})}function v({label:r,before:n,after:i,totalSaved:m}){const u=n>0?Math.round((n-i)/n*100):0;return e.jsxs("div",{className:"p-4 rounded-xl border border-edge shadow-sm bg-surface-alt","data-testid":"metric-card",children:[e.jsx("div",{className:"text-xs font-medium text-muted mb-2",children:r}),e.jsxs("div",{className:"flex items-baseline gap-3 mb-1",children:[e.jsxs("span",{className:"text-sm text-muted line-through",children:["$",n.toFixed(3)]}),e.jsxs("span",{className:"text-xl font-bold",children:["$",i.toFixed(3)]}),e.jsxs("span",{className:"text-xs text-accent",children:["-",u,"%"]})]}),e.jsxs("div",{className:"text-[10px] text-muted uppercase",children:["per task · $",m.toFixed(2)," total saved"]})]})}export{f as BenchmarkTab};
@@ -1,4 +1,4 @@
1
- import{c as e}from"./index-D_SBClB-.js";/**
1
+ import{c as e}from"./index-DdenFaJ5.js";/**
2
2
  * @license lucide-react v1.7.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.