@mcp-graph-workflow/mcp-graph 5.2.0 → 5.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. package/dist/api/router.d.ts +0 -1
  2. package/dist/api/router.d.ts.map +1 -1
  3. package/dist/api/router.js +3 -4
  4. package/dist/api/router.js.map +1 -1
  5. package/dist/api/routes/benchmark.d.ts.map +1 -1
  6. package/dist/api/routes/benchmark.js +47 -2
  7. package/dist/api/routes/benchmark.js.map +1 -1
  8. package/dist/api/routes/code-graph.d.ts +12 -0
  9. package/dist/api/routes/code-graph.d.ts.map +1 -0
  10. package/dist/api/routes/code-graph.js +154 -0
  11. package/dist/api/routes/code-graph.js.map +1 -0
  12. package/dist/api/routes/folder.d.ts +1 -4
  13. package/dist/api/routes/folder.d.ts.map +1 -1
  14. package/dist/api/routes/folder.js +19 -17
  15. package/dist/api/routes/folder.js.map +1 -1
  16. package/dist/api/routes/integrations.d.ts.map +1 -1
  17. package/dist/api/routes/integrations.js +60 -16
  18. package/dist/api/routes/integrations.js.map +1 -1
  19. package/dist/api/routes/knowledge.js +1 -1
  20. package/dist/api/routes/knowledge.js.map +1 -1
  21. package/dist/api/routes/skills.d.ts.map +1 -1
  22. package/dist/api/routes/skills.js +57 -3
  23. package/dist/api/routes/skills.js.map +1 -1
  24. package/dist/cli/commands/index-cmd.js +5 -5
  25. package/dist/cli/commands/index-cmd.js.map +1 -1
  26. package/dist/core/code/code-indexer.d.ts +20 -0
  27. package/dist/core/code/code-indexer.d.ts.map +1 -0
  28. package/dist/core/code/code-indexer.js +161 -0
  29. package/dist/core/code/code-indexer.js.map +1 -0
  30. package/dist/core/code/code-search.d.ts +16 -0
  31. package/dist/core/code/code-search.d.ts.map +1 -0
  32. package/dist/core/code/code-search.js +77 -0
  33. package/dist/core/code/code-search.js.map +1 -0
  34. package/dist/core/code/code-store.d.ts +35 -0
  35. package/dist/core/code/code-store.d.ts.map +1 -0
  36. package/dist/core/code/code-store.js +228 -0
  37. package/dist/core/code/code-store.js.map +1 -0
  38. package/dist/core/code/code-types.d.ts +209 -0
  39. package/dist/core/code/code-types.d.ts.map +1 -0
  40. package/dist/core/code/code-types.js +94 -0
  41. package/dist/core/code/code-types.js.map +1 -0
  42. package/dist/core/code/graph-traversal.d.ts +27 -0
  43. package/dist/core/code/graph-traversal.d.ts.map +1 -0
  44. package/dist/core/code/graph-traversal.js +122 -0
  45. package/dist/core/code/graph-traversal.js.map +1 -0
  46. package/dist/core/code/process-detector.d.ts +11 -0
  47. package/dist/core/code/process-detector.d.ts.map +1 -0
  48. package/dist/core/code/process-detector.js +65 -0
  49. package/dist/core/code/process-detector.js.map +1 -0
  50. package/dist/core/code/ts-analyzer.d.ts +12 -0
  51. package/dist/core/code/ts-analyzer.d.ts.map +1 -0
  52. package/dist/core/code/ts-analyzer.js +331 -0
  53. package/dist/core/code/ts-analyzer.js.map +1 -0
  54. package/dist/core/config/ai-memory-generator.d.ts.map +1 -1
  55. package/dist/core/config/ai-memory-generator.js +149 -61
  56. package/dist/core/config/ai-memory-generator.js.map +1 -1
  57. package/dist/core/config/config-loader.d.ts.map +1 -1
  58. package/dist/core/config/config-loader.js +2 -10
  59. package/dist/core/config/config-loader.js.map +1 -1
  60. package/dist/core/config/config-schema.d.ts +1 -2
  61. package/dist/core/config/config-schema.d.ts.map +1 -1
  62. package/dist/core/config/config-schema.js +2 -3
  63. package/dist/core/config/config-schema.js.map +1 -1
  64. package/dist/core/context/compact-context.d.ts +51 -0
  65. package/dist/core/context/compact-context.d.ts.map +1 -1
  66. package/dist/core/context/compact-context.js +292 -0
  67. package/dist/core/context/compact-context.js.map +1 -1
  68. package/dist/core/context/context-assembler.d.ts +1 -1
  69. package/dist/core/context/context-assembler.js +1 -1
  70. package/dist/core/doctor/doctor-checks.d.ts +1 -1
  71. package/dist/core/doctor/doctor-checks.js +21 -21
  72. package/dist/core/doctor/doctor-checks.js.map +1 -1
  73. package/dist/core/insights/bottleneck-detector.js +1 -1
  74. package/dist/core/insights/bottleneck-detector.js.map +1 -1
  75. package/dist/core/integrations/enriched-context.d.ts +10 -6
  76. package/dist/core/integrations/enriched-context.d.ts.map +1 -1
  77. package/dist/core/integrations/enriched-context.js +35 -35
  78. package/dist/core/integrations/enriched-context.js.map +1 -1
  79. package/dist/core/integrations/integration-orchestrator.js +2 -2
  80. package/dist/core/integrations/integration-orchestrator.js.map +1 -1
  81. package/dist/core/integrations/mcp-deps-installer.d.ts +1 -1
  82. package/dist/core/integrations/mcp-deps-installer.d.ts.map +1 -1
  83. package/dist/core/integrations/mcp-deps-installer.js +1 -60
  84. package/dist/core/integrations/mcp-deps-installer.js.map +1 -1
  85. package/dist/core/integrations/mcp-servers-config.d.ts +1 -1
  86. package/dist/core/integrations/mcp-servers-config.d.ts.map +1 -1
  87. package/dist/core/integrations/mcp-servers-config.js +0 -17
  88. package/dist/core/integrations/mcp-servers-config.js.map +1 -1
  89. package/dist/core/integrations/tool-status.d.ts +8 -3
  90. package/dist/core/integrations/tool-status.d.ts.map +1 -1
  91. package/dist/core/integrations/tool-status.js +38 -48
  92. package/dist/core/integrations/tool-status.js.map +1 -1
  93. package/dist/core/memory/memory-migrator.d.ts +15 -0
  94. package/dist/core/memory/memory-migrator.d.ts.map +1 -0
  95. package/dist/core/memory/memory-migrator.js +64 -0
  96. package/dist/core/memory/memory-migrator.js.map +1 -0
  97. package/dist/core/memory/memory-reader.d.ts +30 -0
  98. package/dist/core/memory/memory-reader.d.ts.map +1 -0
  99. package/dist/core/memory/memory-reader.js +106 -0
  100. package/dist/core/memory/memory-reader.js.map +1 -0
  101. package/dist/core/planner/lifecycle-phase.d.ts +1 -0
  102. package/dist/core/planner/lifecycle-phase.d.ts.map +1 -1
  103. package/dist/core/planner/lifecycle-phase.js +11 -8
  104. package/dist/core/planner/lifecycle-phase.js.map +1 -1
  105. package/dist/core/rag/memory-indexer.d.ts +16 -0
  106. package/dist/core/rag/memory-indexer.d.ts.map +1 -0
  107. package/dist/core/rag/{serena-indexer.js → memory-indexer.js} +12 -12
  108. package/dist/core/rag/memory-indexer.js.map +1 -0
  109. package/dist/core/rag/{serena-rag-query.d.ts → memory-rag-query.d.ts} +11 -9
  110. package/dist/core/rag/memory-rag-query.d.ts.map +1 -0
  111. package/dist/core/rag/{serena-rag-query.js → memory-rag-query.js} +18 -15
  112. package/dist/core/rag/memory-rag-query.js.map +1 -0
  113. package/dist/core/rag/skill-indexer.d.ts +16 -0
  114. package/dist/core/rag/skill-indexer.d.ts.map +1 -0
  115. package/dist/core/rag/skill-indexer.js +98 -0
  116. package/dist/core/rag/skill-indexer.js.map +1 -0
  117. package/dist/core/skills/built-in-skills.d.ts +26 -0
  118. package/dist/core/skills/built-in-skills.d.ts.map +1 -0
  119. package/dist/core/skills/built-in-skills.js +203 -0
  120. package/dist/core/skills/built-in-skills.js.map +1 -0
  121. package/dist/core/store/knowledge-store.d.ts +1 -1
  122. package/dist/core/store/knowledge-store.js +1 -1
  123. package/dist/core/store/migrations.d.ts.map +1 -1
  124. package/dist/core/store/migrations.js +89 -0
  125. package/dist/core/store/migrations.js.map +1 -1
  126. package/dist/core/store/tool-token-store.d.ts +39 -0
  127. package/dist/core/store/tool-token-store.d.ts.map +1 -0
  128. package/dist/core/store/tool-token-store.js +79 -0
  129. package/dist/core/store/tool-token-store.js.map +1 -0
  130. package/dist/mcp/app-factory.d.ts +0 -1
  131. package/dist/mcp/app-factory.d.ts.map +1 -1
  132. package/dist/mcp/app-factory.js +2 -2
  133. package/dist/mcp/app-factory.js.map +1 -1
  134. package/dist/mcp/lifecycle-wrapper.d.ts +1 -0
  135. package/dist/mcp/lifecycle-wrapper.d.ts.map +1 -1
  136. package/dist/mcp/lifecycle-wrapper.js +21 -0
  137. package/dist/mcp/lifecycle-wrapper.js.map +1 -1
  138. package/dist/mcp/server.js +19 -14
  139. package/dist/mcp/server.js.map +1 -1
  140. package/dist/mcp/tools/index.d.ts.map +1 -1
  141. package/dist/mcp/tools/index.js +4 -0
  142. package/dist/mcp/tools/index.js.map +1 -1
  143. package/dist/mcp/tools/list-skills.d.ts +7 -0
  144. package/dist/mcp/tools/list-skills.d.ts.map +1 -0
  145. package/dist/mcp/tools/list-skills.js +68 -0
  146. package/dist/mcp/tools/list-skills.js.map +1 -0
  147. package/dist/mcp/tools/memory.d.ts +8 -0
  148. package/dist/mcp/tools/memory.d.ts.map +1 -0
  149. package/dist/mcp/tools/memory.js +106 -0
  150. package/dist/mcp/tools/memory.js.map +1 -0
  151. package/dist/mcp/tools/reindex-knowledge.d.ts.map +1 -1
  152. package/dist/mcp/tools/reindex-knowledge.js +11 -7
  153. package/dist/mcp/tools/reindex-knowledge.js.map +1 -1
  154. package/dist/schemas/knowledge.schema.d.ts +4 -0
  155. package/dist/schemas/knowledge.schema.d.ts.map +1 -1
  156. package/dist/schemas/knowledge.schema.js +1 -1
  157. package/dist/schemas/knowledge.schema.js.map +1 -1
  158. package/dist/web/dashboard/dist/assets/benchmark-tab-B5Sr8Cah.js +1 -0
  159. package/dist/web/dashboard/dist/assets/constants-kpH_c6vY.js +1 -0
  160. package/dist/web/dashboard/dist/assets/gitnexus-tab-DqmbSdzV.js +430 -0
  161. package/dist/web/dashboard/dist/assets/graph-tab-BKns5HdW.js +1 -0
  162. package/dist/web/dashboard/dist/assets/graph-utils-BxUWNvsI.js +7 -0
  163. package/dist/web/dashboard/dist/assets/index-CZOiKbTP.js +53 -0
  164. package/dist/web/dashboard/dist/assets/index-Dd4vKyDX.js +17 -0
  165. package/dist/web/dashboard/dist/assets/index-xyMN-_UV.css +1 -0
  166. package/dist/web/dashboard/dist/assets/insights-tab-B1kPckBM.js +52 -0
  167. package/dist/web/dashboard/dist/assets/{logs-tab-Cxpcv_ni.js → logs-tab-BWfsrRlB.js} +1 -1
  168. package/dist/web/dashboard/dist/assets/memories-tab-D3zm-1Sq.js +1 -0
  169. package/dist/web/dashboard/dist/assets/prd-backlog-tab-DXP4dFP-.js +1 -0
  170. package/dist/web/dashboard/dist/assets/skills-tab-CAlVL80S.js +1 -0
  171. package/dist/web/dashboard/dist/index.html +2 -2
  172. package/package.json +2 -2
  173. package/dist/api/routes/gitnexus.d.ts +0 -12
  174. package/dist/api/routes/gitnexus.d.ts.map +0 -1
  175. package/dist/api/routes/gitnexus.js +0 -164
  176. package/dist/api/routes/gitnexus.js.map +0 -1
  177. package/dist/core/integrations/gitnexus-launcher.d.ts +0 -67
  178. package/dist/core/integrations/gitnexus-launcher.d.ts.map +0 -1
  179. package/dist/core/integrations/gitnexus-launcher.js +0 -268
  180. package/dist/core/integrations/gitnexus-launcher.js.map +0 -1
  181. package/dist/core/integrations/gitnexus-queries.d.ts +0 -55
  182. package/dist/core/integrations/gitnexus-queries.d.ts.map +0 -1
  183. package/dist/core/integrations/gitnexus-queries.js +0 -168
  184. package/dist/core/integrations/gitnexus-queries.js.map +0 -1
  185. package/dist/core/integrations/serena-reader.d.ts +0 -18
  186. package/dist/core/integrations/serena-reader.d.ts.map +0 -1
  187. package/dist/core/integrations/serena-reader.js +0 -68
  188. package/dist/core/integrations/serena-reader.js.map +0 -1
  189. package/dist/core/rag/serena-indexer.d.ts +0 -16
  190. package/dist/core/rag/serena-indexer.d.ts.map +0 -1
  191. package/dist/core/rag/serena-indexer.js.map +0 -1
  192. package/dist/core/rag/serena-rag-query.d.ts.map +0 -1
  193. package/dist/core/rag/serena-rag-query.js.map +0 -1
  194. package/dist/web/dashboard/dist/assets/benchmark-tab-DE6hAHVG.js +0 -1
  195. package/dist/web/dashboard/dist/assets/constants-BIEJOBya.js +0 -1
  196. package/dist/web/dashboard/dist/assets/gitnexus-tab-DsBjJHx8.js +0 -312
  197. package/dist/web/dashboard/dist/assets/graph-tab-C09DzeZ_.js +0 -1
  198. package/dist/web/dashboard/dist/assets/graph-utils-D4LFspTf.js +0 -23
  199. package/dist/web/dashboard/dist/assets/index-B2fTJ4AS.js +0 -53
  200. package/dist/web/dashboard/dist/assets/index-CkqEqKiH.css +0 -1
  201. package/dist/web/dashboard/dist/assets/insights-tab-Bm7CDckb.js +0 -1
  202. package/dist/web/dashboard/dist/assets/prd-backlog-tab-X84Rj-IB.js +0 -1
  203. package/dist/web/dashboard/dist/assets/serena-tab-BunULNvw.js +0 -1
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Skill Indexer — indexes built-in skills and filesystem skills
3
+ * into the knowledge store for unified search.
4
+ */
5
+ import { getBuiltInSkills } from "../skills/built-in-skills.js";
6
+ import { scanSkills } from "../insights/skill-recommender.js";
7
+ import { chunkText } from "./chunk-text.js";
8
+ import { logger } from "../utils/logger.js";
9
+ /**
10
+ * Index all skills (built-in + filesystem) into the knowledge store.
11
+ * Uses sourceType: "skill" and sourceId: "skill:{name}".
12
+ */
13
+ export async function indexSkills(knowledgeStore, basePath) {
14
+ let builtInIndexed = 0;
15
+ let filesystemIndexed = 0;
16
+ let skippedDuplicates = 0;
17
+ // Index built-in skills
18
+ const builtInSkills = getBuiltInSkills();
19
+ for (const skill of builtInSkills) {
20
+ const content = formatSkillContent(skill);
21
+ const countBefore = knowledgeStore.count("skill");
22
+ knowledgeStore.insert({
23
+ sourceType: "skill",
24
+ sourceId: `skill:${skill.name}`,
25
+ title: skill.name,
26
+ content,
27
+ chunkIndex: 0,
28
+ metadata: {
29
+ category: skill.category,
30
+ phases: skill.phases,
31
+ description: skill.description,
32
+ source: "built-in",
33
+ },
34
+ });
35
+ if (knowledgeStore.count("skill") > countBefore) {
36
+ builtInIndexed++;
37
+ }
38
+ else {
39
+ skippedDuplicates++;
40
+ }
41
+ }
42
+ // Index filesystem skills
43
+ try {
44
+ const fsSkills = await scanSkills(basePath);
45
+ for (const fsSkill of fsSkills) {
46
+ // Skip if already indexed as built-in
47
+ const isBuiltIn = builtInSkills.some((b) => b.name === fsSkill.name);
48
+ if (isBuiltIn)
49
+ continue;
50
+ const content = `# ${fsSkill.name}\n\n${fsSkill.description}\n\nCategory: ${fsSkill.category}`;
51
+ const chunks = chunkText(content);
52
+ const countBefore = knowledgeStore.count("skill");
53
+ for (const chunk of chunks) {
54
+ knowledgeStore.insert({
55
+ sourceType: "skill",
56
+ sourceId: `skill:${fsSkill.name}`,
57
+ title: chunks.length > 1
58
+ ? `${fsSkill.name} [${chunk.index + 1}/${chunks.length}]`
59
+ : fsSkill.name,
60
+ content: chunk.content,
61
+ chunkIndex: chunk.index,
62
+ metadata: {
63
+ category: fsSkill.category,
64
+ description: fsSkill.description,
65
+ filePath: fsSkill.filePath,
66
+ source: "filesystem",
67
+ },
68
+ });
69
+ }
70
+ if (knowledgeStore.count("skill") > countBefore) {
71
+ filesystemIndexed++;
72
+ }
73
+ else {
74
+ skippedDuplicates++;
75
+ }
76
+ }
77
+ }
78
+ catch {
79
+ logger.debug("skill-indexer: filesystem scan skipped (no skills directory)");
80
+ }
81
+ logger.info("Skills indexed", { builtInIndexed, filesystemIndexed, skippedDuplicates });
82
+ return { builtInIndexed, filesystemIndexed, skippedDuplicates };
83
+ }
84
+ function formatSkillContent(skill) {
85
+ return [
86
+ `# ${skill.name}`,
87
+ "",
88
+ skill.description,
89
+ "",
90
+ `Category: ${skill.category}`,
91
+ `Phases: ${skill.phases.join(", ")}`,
92
+ "",
93
+ "## Instructions",
94
+ "",
95
+ skill.instructions,
96
+ ].join("\n");
97
+ }
98
+ //# sourceMappingURL=skill-indexer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-indexer.js","sourceRoot":"","sources":["../../../src/core/rag/skill-indexer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Built-in Skills Registry — 19 skills mapped to lifecycle phases.
3
+ * Each skill is a structured instruction set for agentic workflows.
4
+ */
5
+ import type { LifecyclePhase } from "../planner/lifecycle-phase.js";
6
+ export interface BuiltInSkill {
7
+ name: string;
8
+ description: string;
9
+ category: string;
10
+ phases: LifecyclePhase[];
11
+ instructions: string;
12
+ }
13
+ export declare const BUILT_IN_SKILLS: readonly BuiltInSkill[];
14
+ /**
15
+ * Get all built-in skills.
16
+ */
17
+ export declare function getBuiltInSkills(): readonly BuiltInSkill[];
18
+ /**
19
+ * Get built-in skills filtered by lifecycle phase.
20
+ */
21
+ export declare function getSkillsByPhase(phase: LifecyclePhase): BuiltInSkill[];
22
+ /**
23
+ * Get a built-in skill by name.
24
+ */
25
+ export declare function getSkillByName(name: string): BuiltInSkill | undefined;
26
+ //# sourceMappingURL=built-in-skills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"built-in-skills.d.ts","sourceRoot":"","sources":["../../../src/core/skills/built-in-skills.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEpE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,eAAe,EAAE,SAAS,YAAY,EA2MzC,CAAC;AAEX;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,SAAS,YAAY,EAAE,CAE1D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,GAAG,YAAY,EAAE,CAEtE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAErE"}
@@ -0,0 +1,203 @@
1
+ /**
2
+ * Built-in Skills Registry — 19 skills mapped to lifecycle phases.
3
+ * Each skill is a structured instruction set for agentic workflows.
4
+ */
5
+ export const BUILT_IN_SKILLS = [
6
+ // ── ANALYZE ──────────────────────────────────
7
+ {
8
+ name: "create-prd-chat-mode",
9
+ description: "Guia interativo para criação de PRD a partir de conversa com o usuário",
10
+ category: "analyze",
11
+ phases: ["ANALYZE"],
12
+ instructions: "Conduza uma conversa estruturada para extrair requisitos do usuário. " +
13
+ "Pergunte sobre problema, usuários-alvo, critérios de sucesso e restrições. " +
14
+ "Gere um PRD markdown com seções: Problema, Solução, Requisitos Funcionais, " +
15
+ "Requisitos Não-Funcionais, Critérios de Aceitação, Riscos.",
16
+ },
17
+ {
18
+ name: "business-analyst",
19
+ description: "Análise de negócio para requisitos e viabilidade",
20
+ category: "analyze",
21
+ phases: ["ANALYZE"],
22
+ instructions: "Analise a proposta de negócio do ponto de vista de viabilidade técnica e comercial. " +
23
+ "Identifique stakeholders, mapeie processos AS-IS/TO-BE, defina KPIs mensuráveis. " +
24
+ "Output: relatório de análise com recomendações priorizadas.",
25
+ },
26
+ {
27
+ name: "product-manager",
28
+ description: "Visão de produto, roadmap e priorização",
29
+ category: "analyze",
30
+ phases: ["ANALYZE"],
31
+ instructions: "Assuma o papel de PM sênior. Defina visão do produto, personas, jobs-to-be-done. " +
32
+ "Priorize features via RICE ou MoSCoW. Garanta alinhamento entre valor de negócio " +
33
+ "e esforço técnico. Output: roadmap priorizado com justificativas.",
34
+ },
35
+ // ── DESIGN ──────────────────────────────────
36
+ {
37
+ name: "breakdown-epic-arch",
38
+ description: "Decomposição de epic em componentes arquiteturais",
39
+ category: "design",
40
+ phases: ["DESIGN"],
41
+ instructions: "Receba um epic e decomponha em componentes arquiteturais. Identifique bounded contexts, " +
42
+ "defina interfaces entre módulos, documente decisões via ADR. Considere escalabilidade, " +
43
+ "manutenibilidade e testabilidade. Output: diagrama de componentes + ADRs.",
44
+ },
45
+ {
46
+ name: "context-architect",
47
+ description: "Arquitetura de contexto e dependências entre módulos",
48
+ category: "design",
49
+ phases: ["DESIGN"],
50
+ instructions: "Mapeie o contexto do sistema: dependências externas, integrações, fluxos de dados. " +
51
+ "Use C4 model para documentar system context e container views. Identifique pontos " +
52
+ "de acoplamento e proponha abstrações. Output: diagrama C4 + dependency map.",
53
+ },
54
+ {
55
+ name: "backend-architect",
56
+ description: "Design de arquitetura backend e APIs",
57
+ category: "design",
58
+ phases: ["DESIGN"],
59
+ instructions: "Projete a arquitetura backend: API design (REST/GraphQL), data model, " +
60
+ "autenticação, cache strategy, error handling. Siga princípios SOLID e clean architecture. " +
61
+ "Documente contratos via OpenAPI. Output: API spec + data model + ADR.",
62
+ },
63
+ // ── PLAN ────────────────────────────────────
64
+ {
65
+ name: "breakdown-feature-prd",
66
+ description: "Decomposição de feature PRD em tasks atômicas",
67
+ category: "plan",
68
+ phases: ["PLAN"],
69
+ instructions: "Receba um PRD e decomponha cada feature em tasks atômicas (≤2h cada). " +
70
+ "Defina dependências entre tasks, estime complexidade, atribua a sprints. " +
71
+ "Cada task deve ter acceptance criteria testáveis. Output: lista de tasks com deps.",
72
+ },
73
+ {
74
+ name: "track-with-mcp-graph",
75
+ description: "Sincronizar trabalho com o grafo de execução mcp-graph",
76
+ category: "plan",
77
+ phases: ["PLAN"],
78
+ instructions: "Use as tools do mcp-graph para manter o grafo sincronizado com o trabalho real. " +
79
+ "Workflow: import_prd → decompose → plan_sprint → edge (dependências). " +
80
+ "Garanta que cada node tem AC, sprint e prioridade definidos antes de IMPLEMENT.",
81
+ },
82
+ // ── IMPLEMENT ────────────────────────────────
83
+ {
84
+ name: "subagent-driven-development",
85
+ description: "Desenvolvimento orientado por sub-agentes especializados",
86
+ category: "implement",
87
+ phases: ["IMPLEMENT"],
88
+ instructions: "Decomponha a implementação em sub-tasks que podem ser delegadas a agentes especializados. " +
89
+ "Cada sub-agente recebe contexto mínimo (via `context` tool) e entrega código testado. " +
90
+ "Orquestre: next → context → implement (TDD) → update_status. Anti-one-shot obrigatório.",
91
+ },
92
+ {
93
+ name: "xp-bootstrap",
94
+ description: "Bootstrap de projeto seguindo metodologia XP anti-vibe-coding",
95
+ category: "implement",
96
+ phases: ["IMPLEMENT"],
97
+ instructions: "Siga o workflow XP sequencial: Isolation → Foundation → TDD → Implementation → " +
98
+ "Optimization → Interface → Deploy. Cada fase tem gates de qualidade. " +
99
+ "TDD obrigatório em todas as fases. Skeleton & Organs: dev define arquitetura, AI implementa.",
100
+ },
101
+ // ── VALIDATE ─────────────────────────────────
102
+ {
103
+ name: "playwright-explore-website",
104
+ description: "Exploração automatizada de website via Playwright",
105
+ category: "validate",
106
+ phases: ["VALIDATE"],
107
+ instructions: "Use Playwright MCP para navegar no site/app, capturar screenshots, verificar elementos. " +
108
+ "Explore fluxos de usuário, verifique responsividade, identifique broken links. " +
109
+ "Documente findings com screenshots anotados. Output: relatório de exploração.",
110
+ },
111
+ {
112
+ name: "playwright-generate-test",
113
+ description: "Geração de testes E2E a partir de exploração Playwright",
114
+ category: "validate",
115
+ phases: ["VALIDATE"],
116
+ instructions: "A partir dos acceptance criteria, gere testes E2E com Playwright. " +
117
+ "Cada AC deve ter pelo menos 1 teste. Use page objects, fixtures e assertions robustas. " +
118
+ "Testes devem ser determinísticos e independentes. Output: test files prontos para CI.",
119
+ },
120
+ {
121
+ name: "playwright-tester-mode",
122
+ description: "Modo de teste interativo com Playwright",
123
+ category: "validate",
124
+ phases: ["VALIDATE"],
125
+ instructions: "Execute testes E2E em modo interativo usando Playwright MCP tools. " +
126
+ "Navegue, clique, preencha forms, valide snapshots. Reporte falhas com contexto " +
127
+ "completo (screenshot, DOM state, console errors). Output: test results + evidence.",
128
+ },
129
+ {
130
+ name: "e2e-testing",
131
+ description: "Framework completo de testes end-to-end",
132
+ category: "validate",
133
+ phases: ["VALIDATE"],
134
+ instructions: "Implemente cobertura E2E completa: happy paths, edge cases, error scenarios. " +
135
+ "Use test pyramid: unit → integration → E2E. Configure CI pipeline para executar " +
136
+ "testes em cada PR. Defina thresholds de cobertura. Output: test suite + CI config.",
137
+ },
138
+ // ── REVIEW ──────────────────────────────────
139
+ {
140
+ name: "code-reviewer",
141
+ description: "Code review estruturado com checklist de qualidade",
142
+ category: "review",
143
+ phases: ["REVIEW"],
144
+ instructions: "Revise o código contra checklist: correctness, security (OWASP top 10), performance, " +
145
+ "readability, test coverage, error handling. Use Code Intelligence para blast radius. " +
146
+ "Comente inline com severity (blocker/major/minor/nit). Output: review com action items.",
147
+ },
148
+ {
149
+ name: "code-review-checklist",
150
+ description: "Checklist detalhado para code review",
151
+ category: "review",
152
+ phases: ["REVIEW"],
153
+ instructions: "Aplique checklist sistemático: [ ] Testes escritos antes (TDD)? [ ] Sem mocks desnecessários? " +
154
+ "[ ] Logger em paths críticos? [ ] Error handling tipado? [ ] Sem dead code? " +
155
+ "[ ] Build + typecheck + tests passam? Documente cada item com evidência.",
156
+ },
157
+ {
158
+ name: "review-and-refactor",
159
+ description: "Review com foco em refatoração e melhoria contínua",
160
+ category: "review",
161
+ phases: ["REVIEW"],
162
+ instructions: "Analise o código para oportunidades de refatoração: DRY violations, complex conditionals, " +
163
+ "missing abstractions, code smells. Proponha refactors com justificativa e impacto. " +
164
+ "Garanta non-regression via testes antes e depois. Output: refactor plan + PRs.",
165
+ },
166
+ {
167
+ name: "log-standardization-framework",
168
+ description: "Padronização de logs e observabilidade",
169
+ category: "review",
170
+ phases: ["REVIEW"],
171
+ instructions: "Audite logs do projeto: [ ] Logger usado (nunca console.log)? [ ] Structured logging? " +
172
+ "[ ] Entry points logados (info)? [ ] Error paths com stack trace? [ ] External calls " +
173
+ "com timing (debug)? Corrija violações. Output: log audit report + fixes.",
174
+ },
175
+ {
176
+ name: "observability-engineer",
177
+ description: "Engenharia de observabilidade — métricas, traces, alertas",
178
+ category: "review",
179
+ phases: ["REVIEW"],
180
+ instructions: "Configure observabilidade: métricas de aplicação, distributed tracing, health checks. " +
181
+ "Defina SLIs/SLOs para endpoints críticos. Configure alertas para anomalias. " +
182
+ "Garanta que logs são queryable (structured, not free-text). Output: observability setup.",
183
+ },
184
+ ];
185
+ /**
186
+ * Get all built-in skills.
187
+ */
188
+ export function getBuiltInSkills() {
189
+ return BUILT_IN_SKILLS;
190
+ }
191
+ /**
192
+ * Get built-in skills filtered by lifecycle phase.
193
+ */
194
+ export function getSkillsByPhase(phase) {
195
+ return BUILT_IN_SKILLS.filter((s) => s.phases.includes(phase));
196
+ }
197
+ /**
198
+ * Get a built-in skill by name.
199
+ */
200
+ export function getSkillByName(name) {
201
+ return BUILT_IN_SKILLS.find((s) => s.name === name);
202
+ }
203
+ //# sourceMappingURL=built-in-skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"built-in-skills.js","sourceRoot":"","sources":["../../../src/core/skills/built-in-skills.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Knowledge Store — CRUD, FTS search, and dedup for knowledge_documents.
3
- * Follows DocsCacheStore pattern. All sources (upload, serena, code_context,
3
+ * Follows DocsCacheStore pattern. All sources (upload, memory, code_context,
4
4
  * docs, web_capture) stored in a single table with source_type discriminator.
5
5
  */
6
6
  import type Database from "better-sqlite3";
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Knowledge Store — CRUD, FTS search, and dedup for knowledge_documents.
3
- * Follows DocsCacheStore pattern. All sources (upload, serena, code_context,
3
+ * Follows DocsCacheStore pattern. All sources (upload, memory, code_context,
4
4
  * docs, web_capture) stored in a single table with source_type discriminator.
5
5
  */
6
6
  import { createHash } from "node:crypto";
@@ -1 +1 @@
1
- {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../../src/core/store/migrations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAwN3C,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CA6BzD;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAGvD"}
1
+ {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../../src/core/store/migrations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAiT3C,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CA6BzD;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAGvD"}
@@ -204,6 +204,95 @@ const migrations = [
204
204
  );
205
205
  `,
206
206
  },
207
+ {
208
+ version: 6,
209
+ description: "Code Intelligence — symbols, relations, FTS5 index, index metadata",
210
+ sql: `
211
+ CREATE TABLE IF NOT EXISTS code_symbols (
212
+ id TEXT PRIMARY KEY,
213
+ project_id TEXT NOT NULL,
214
+ name TEXT NOT NULL,
215
+ kind TEXT NOT NULL,
216
+ file TEXT NOT NULL,
217
+ start_line INTEGER NOT NULL,
218
+ end_line INTEGER NOT NULL,
219
+ exported INTEGER NOT NULL DEFAULT 0,
220
+ module_path TEXT,
221
+ signature TEXT,
222
+ metadata TEXT,
223
+ indexed_at TEXT NOT NULL
224
+ );
225
+
226
+ CREATE TABLE IF NOT EXISTS code_relations (
227
+ id TEXT PRIMARY KEY,
228
+ project_id TEXT NOT NULL,
229
+ from_symbol TEXT NOT NULL REFERENCES code_symbols(id),
230
+ to_symbol TEXT NOT NULL REFERENCES code_symbols(id),
231
+ type TEXT NOT NULL,
232
+ file TEXT,
233
+ line INTEGER,
234
+ metadata TEXT,
235
+ indexed_at TEXT NOT NULL
236
+ );
237
+
238
+ CREATE VIRTUAL TABLE IF NOT EXISTS code_symbols_fts USING fts5(
239
+ name, file, signature,
240
+ content='code_symbols', content_rowid='rowid'
241
+ );
242
+
243
+ -- FTS5 sync triggers
244
+ CREATE TRIGGER IF NOT EXISTS code_fts_insert AFTER INSERT ON code_symbols BEGIN
245
+ INSERT INTO code_symbols_fts(rowid, name, file, signature)
246
+ VALUES (NEW.rowid, NEW.name, NEW.file, COALESCE(NEW.signature, ''));
247
+ END;
248
+
249
+ CREATE TRIGGER IF NOT EXISTS code_fts_delete AFTER DELETE ON code_symbols BEGIN
250
+ INSERT INTO code_symbols_fts(code_symbols_fts, rowid, name, file, signature)
251
+ VALUES ('delete', OLD.rowid, OLD.name, OLD.file, COALESCE(OLD.signature, ''));
252
+ END;
253
+
254
+ CREATE TRIGGER IF NOT EXISTS code_fts_update AFTER UPDATE ON code_symbols BEGIN
255
+ INSERT INTO code_symbols_fts(code_symbols_fts, rowid, name, file, signature)
256
+ VALUES ('delete', OLD.rowid, OLD.name, OLD.file, COALESCE(OLD.signature, ''));
257
+ INSERT INTO code_symbols_fts(rowid, name, file, signature)
258
+ VALUES (NEW.rowid, NEW.name, NEW.file, COALESCE(NEW.signature, ''));
259
+ END;
260
+
261
+ CREATE TABLE IF NOT EXISTS code_index_meta (
262
+ project_id TEXT PRIMARY KEY,
263
+ last_indexed TEXT NOT NULL,
264
+ file_count INTEGER DEFAULT 0,
265
+ symbol_count INTEGER DEFAULT 0,
266
+ relation_count INTEGER DEFAULT 0,
267
+ git_hash TEXT
268
+ );
269
+
270
+ CREATE INDEX IF NOT EXISTS idx_code_sym_project ON code_symbols(project_id);
271
+ CREATE INDEX IF NOT EXISTS idx_code_sym_name ON code_symbols(name);
272
+ CREATE INDEX IF NOT EXISTS idx_code_sym_file ON code_symbols(file);
273
+ CREATE INDEX IF NOT EXISTS idx_code_rel_from ON code_relations(from_symbol);
274
+ CREATE INDEX IF NOT EXISTS idx_code_rel_to ON code_relations(to_symbol);
275
+ CREATE INDEX IF NOT EXISTS idx_code_rel_type ON code_relations(type);
276
+ `,
277
+ },
278
+ {
279
+ version: 7,
280
+ description: "Tool token usage tracking for benchmark analytics",
281
+ sql: `
282
+ CREATE TABLE IF NOT EXISTS tool_token_usage (
283
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
284
+ project_id TEXT NOT NULL REFERENCES projects(id),
285
+ tool_name TEXT NOT NULL,
286
+ input_tokens INTEGER NOT NULL DEFAULT 0,
287
+ output_tokens INTEGER NOT NULL DEFAULT 0,
288
+ called_at TEXT NOT NULL
289
+ );
290
+
291
+ CREATE INDEX IF NOT EXISTS idx_ttu_project ON tool_token_usage(project_id);
292
+ CREATE INDEX IF NOT EXISTS idx_ttu_tool ON tool_token_usage(tool_name);
293
+ CREATE INDEX IF NOT EXISTS idx_ttu_called ON tool_token_usage(called_at);
294
+ `,
295
+ },
207
296
  ];
208
297
  export function runMigrations(db) {
209
298
  // Create migrations tracking table
@@ -1 +1 @@
1
- {"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../../src/core/store/migrations.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAQ5C,MAAM,UAAU,GAAgB;IAC9B;QACE,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,oEAAoE;QACjF,GAAG,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAsEJ;KACF;IACD;QACE,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,sCAAsC;QACnD,GAAG,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA4BJ;KACF;IACD;QACE,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,6DAA6D;QAC1E,GAAG,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAiCJ;KACF;IACD;QACE,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,uEAAuE;QACpF,GAAG,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAwCJ;KACF;IACD;QACE,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,0DAA0D;QACvE,GAAG,EAAE;;;;;;;;KAQJ;KACF;CACF,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,EAAqB;IACjD,mCAAmC;IACnC,EAAE,CAAC,IAAI,CAAC;;;;;;GAMP,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,IAAI,GAAG,CACrB,EAAE;SACC,OAAO,CAAC,iCAAiC,CAAC;SAC1C,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAE,GAA2B,CAAC,OAAO,CAAC,CACtD,CAAC;IAEF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC;YAAE,SAAS;QAE7C,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;QACjG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;YAClB,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACvB,EAAE,CAAC,OAAO,CACR,6EAA6E,CAC9E,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QAC5E,CAAC,CAAC,EAAE,CAAC;QACL,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAAqB;IAC/C,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../../src/core/store/migrations.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAQ5C,MAAM,UAAU,GAAgB;IAC9B;QACE,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,oEAAoE;QACjF,GAAG,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAsEJ;KACF;IACD;QACE,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,sCAAsC;QACnD,GAAG,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA4BJ;KACF;IACD;QACE,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,6DAA6D;QAC1E,GAAG,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAiCJ;KACF;IACD;QACE,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,uEAAuE;QACpF,GAAG,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAwCJ;KACF;IACD;QACE,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,0DAA0D;QACvE,GAAG,EAAE;;;;;;;;KAQJ;KACF;IACD;QACE,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,oEAAoE;QACjF,GAAG,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAkEJ;KACF;IACD;QACE,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,mDAAmD;QAChE,GAAG,EAAE;;;;;;;;;;;;;KAaJ;KACF;CACF,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,EAAqB;IACjD,mCAAmC;IACnC,EAAE,CAAC,IAAI,CAAC;;;;;;GAMP,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,IAAI,GAAG,CACrB,EAAE;SACC,OAAO,CAAC,iCAAiC,CAAC;SAC1C,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAE,GAA2B,CAAC,OAAO,CAAC,CACtD,CAAC;IAEF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC;YAAE,SAAS;QAE7C,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;QACjG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;YAClB,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACvB,EAAE,CAAC,OAAO,CACR,6EAA6E,CAC9E,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QAC5E,CAAC,CAAC,EAAE,CAAC;QACL,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAAqB;IAC/C,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;AACjC,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Tool Token Store — tracks token usage per MCP tool call.
3
+ * Follows KnowledgeStore pattern: receives Database.Database in constructor.
4
+ */
5
+ import type Database from "better-sqlite3";
6
+ export interface ToolTokenEntry {
7
+ id: number;
8
+ projectId: string;
9
+ toolName: string;
10
+ inputTokens: number;
11
+ outputTokens: number;
12
+ calledAt: string;
13
+ }
14
+ export interface ToolTokenAggregate {
15
+ toolName: string;
16
+ callCount: number;
17
+ totalInputTokens: number;
18
+ totalOutputTokens: number;
19
+ avgInputTokens: number;
20
+ avgOutputTokens: number;
21
+ totalTokens: number;
22
+ }
23
+ export interface ToolTokenSummary {
24
+ totalCalls: number;
25
+ totalInputTokens: number;
26
+ totalOutputTokens: number;
27
+ perTool: ToolTokenAggregate[];
28
+ recentCalls: ToolTokenEntry[];
29
+ }
30
+ export declare class ToolTokenStore {
31
+ private db;
32
+ constructor(db: Database.Database);
33
+ record(projectId: string, toolName: string, inputTokens: number, outputTokens: number): void;
34
+ getPerToolStats(projectId: string): ToolTokenAggregate[];
35
+ getRecentCalls(projectId: string, limit?: number): ToolTokenEntry[];
36
+ getSummary(projectId: string, recentLimit?: number): ToolTokenSummary;
37
+ clearProject(projectId: string): void;
38
+ }
39
+ //# sourceMappingURL=tool-token-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-token-store.d.ts","sourceRoot":"","sources":["../../../src/core/store/tool-token-store.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAI3C,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,WAAW,EAAE,cAAc,EAAE,CAAC;CAC/B;AAiDD,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAoB;gBAElB,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAIjC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAQ5F,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,EAAE;IAkBxD,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,cAAc,EAAE;IAWvE,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,GAAE,MAAW,GAAG,gBAAgB;IAmBzE,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;CAItC"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Tool Token Store — tracks token usage per MCP tool call.
3
+ * Follows KnowledgeStore pattern: receives Database.Database in constructor.
4
+ */
5
+ import { now } from "../utils/time.js";
6
+ import { logger } from "../utils/logger.js";
7
+ function rowToEntry(row) {
8
+ return {
9
+ id: row.id,
10
+ projectId: row.project_id,
11
+ toolName: row.tool_name,
12
+ inputTokens: row.input_tokens,
13
+ outputTokens: row.output_tokens,
14
+ calledAt: row.called_at,
15
+ };
16
+ }
17
+ function rowToAggregate(row) {
18
+ return {
19
+ toolName: row.tool_name,
20
+ callCount: row.call_count,
21
+ totalInputTokens: row.total_input,
22
+ totalOutputTokens: row.total_output,
23
+ avgInputTokens: Math.round(row.avg_input),
24
+ avgOutputTokens: Math.round(row.avg_output),
25
+ totalTokens: row.total_input + row.total_output,
26
+ };
27
+ }
28
+ export class ToolTokenStore {
29
+ db;
30
+ constructor(db) {
31
+ this.db = db;
32
+ }
33
+ record(projectId, toolName, inputTokens, outputTokens) {
34
+ this.db.prepare(`INSERT INTO tool_token_usage (project_id, tool_name, input_tokens, output_tokens, called_at)
35
+ VALUES (?, ?, ?, ?, ?)`).run(projectId, toolName, inputTokens, outputTokens, now());
36
+ logger.debug("tool-token-store: recorded", { toolName, inputTokens, outputTokens });
37
+ }
38
+ getPerToolStats(projectId) {
39
+ const rows = this.db.prepare(`SELECT
40
+ tool_name,
41
+ COUNT(*) AS call_count,
42
+ SUM(input_tokens) AS total_input,
43
+ SUM(output_tokens) AS total_output,
44
+ AVG(input_tokens) AS avg_input,
45
+ AVG(output_tokens) AS avg_output
46
+ FROM tool_token_usage
47
+ WHERE project_id = ?
48
+ GROUP BY tool_name
49
+ ORDER BY (SUM(input_tokens) + SUM(output_tokens)) DESC`).all(projectId);
50
+ return rows.map(rowToAggregate);
51
+ }
52
+ getRecentCalls(projectId, limit = 20) {
53
+ const rows = this.db.prepare(`SELECT * FROM tool_token_usage
54
+ WHERE project_id = ?
55
+ ORDER BY called_at DESC, id DESC
56
+ LIMIT ?`).all(projectId, limit);
57
+ return rows.map(rowToEntry);
58
+ }
59
+ getSummary(projectId, recentLimit = 20) {
60
+ const totals = this.db.prepare(`SELECT
61
+ COUNT(*) AS total_calls,
62
+ COALESCE(SUM(input_tokens), 0) AS total_input,
63
+ COALESCE(SUM(output_tokens), 0) AS total_output
64
+ FROM tool_token_usage
65
+ WHERE project_id = ?`).get(projectId);
66
+ return {
67
+ totalCalls: totals.total_calls,
68
+ totalInputTokens: totals.total_input,
69
+ totalOutputTokens: totals.total_output,
70
+ perTool: this.getPerToolStats(projectId),
71
+ recentCalls: this.getRecentCalls(projectId, recentLimit),
72
+ };
73
+ }
74
+ clearProject(projectId) {
75
+ this.db.prepare("DELETE FROM tool_token_usage WHERE project_id = ?").run(projectId);
76
+ logger.debug("tool-token-store: cleared project", { projectId });
77
+ }
78
+ }
79
+ //# sourceMappingURL=tool-token-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-token-store.js","sourceRoot":"","sources":["../../../src/core/store/tool-token-store.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAqD5C,SAAS,UAAU,CAAC,GAAa;IAC/B,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,WAAW,EAAE,GAAG,CAAC,YAAY;QAC7B,YAAY,EAAE,GAAG,CAAC,aAAa;QAC/B,QAAQ,EAAE,GAAG,CAAC,SAAS;KACxB,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,GAAiB;IACvC,OAAO;QACL,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,gBAAgB,EAAE,GAAG,CAAC,WAAW;QACjC,iBAAiB,EAAE,GAAG,CAAC,YAAY;QACnC,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;QACzC,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC;QAC3C,WAAW,EAAE,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,YAAY;KAChD,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,cAAc;IACjB,EAAE,CAAoB;IAE9B,YAAY,EAAqB;QAC/B,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;IAED,MAAM,CAAC,SAAiB,EAAE,QAAgB,EAAE,WAAmB,EAAE,YAAoB;QACnF,IAAI,CAAC,EAAE,CAAC,OAAO,CACb;8BACwB,CACzB,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;QAC7D,MAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,eAAe,CAAC,SAAiB;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC1B;;;;;;;;;;8DAUwD,CACzD,CAAC,GAAG,CAAC,SAAS,CAAmB,CAAC;QAEnC,OAAO,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAClC,CAAC;IAED,cAAc,CAAC,SAAiB,EAAE,QAAgB,EAAE;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC1B;;;eAGS,CACV,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAe,CAAC;QAEtC,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC9B,CAAC;IAED,UAAU,CAAC,SAAiB,EAAE,cAAsB,EAAE;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC5B;;;;;4BAKsB,CACvB,CAAC,GAAG,CAAC,SAAS,CAAc,CAAC;QAE9B,OAAO;YACL,UAAU,EAAE,MAAM,CAAC,WAAW;YAC9B,gBAAgB,EAAE,MAAM,CAAC,WAAW;YACpC,iBAAiB,EAAE,MAAM,CAAC,YAAY;YACtC,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;YACxC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,CAAC;SACzD,CAAC;IACJ,CAAC;IAED,YAAY,CAAC,SAAiB;QAC5B,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,mDAAmD,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACpF,MAAM,CAAC,KAAK,CAAC,mCAAmC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;IACnE,CAAC;CACF"}
@@ -9,7 +9,6 @@ export interface AppFactoryOptions {
9
9
  eventBus: GraphEventBus;
10
10
  mcp?: McpServer;
11
11
  storeManager?: StoreManager;
12
- gitnexusPort?: number;
13
12
  }
14
13
  export declare function createApp(options: AppFactoryOptions): Express;
15
14
  //# sourceMappingURL=app-factory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"app-factory.d.ts","sourceRoot":"","sources":["../../src/mcp/app-factory.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAMjE,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,aAAa,CAAC;IACxB,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CA6B7D"}
1
+ {"version":3,"file":"app-factory.d.ts","sourceRoot":"","sources":["../../src/mcp/app-factory.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAMjE,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,aAAa,CAAC;IACxB,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CA6B7D"}
@@ -6,7 +6,7 @@ import { createApiRouter } from "../api/router.js";
6
6
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
7
7
  const publicDir = path.join(__dirname, "..", "web", "dashboard", "dist");
8
8
  export function createApp(options) {
9
- const { store, basePath, eventBus, mcp, storeManager, gitnexusPort } = options;
9
+ const { store, basePath, eventBus, mcp, storeManager } = options;
10
10
  const app = express();
11
11
  app.use(express.json());
12
12
  // MCP HTTP transport (optional — only when MCP server is provided)
@@ -20,7 +20,7 @@ export function createApp(options) {
20
20
  });
21
21
  }
22
22
  // REST API
23
- app.use("/api/v1", createApiRouter({ store, basePath, eventBus, storeManager, gitnexusPort }));
23
+ app.use("/api/v1", createApiRouter({ store, basePath, eventBus, storeManager }));
24
24
  // Static files (dashboard)
25
25
  app.use(express.static(publicDir));
26
26
  // Health check