@mcp-graph-workflow/mcp-graph 5.2.0 → 5.4.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 (244) 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 +4 -5
  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/context.d.ts.map +1 -1
  13. package/dist/api/routes/context.js +75 -0
  14. package/dist/api/routes/context.js.map +1 -1
  15. package/dist/api/routes/folder.d.ts +1 -4
  16. package/dist/api/routes/folder.d.ts.map +1 -1
  17. package/dist/api/routes/folder.js +19 -17
  18. package/dist/api/routes/folder.js.map +1 -1
  19. package/dist/api/routes/integrations.d.ts.map +1 -1
  20. package/dist/api/routes/integrations.js +60 -16
  21. package/dist/api/routes/integrations.js.map +1 -1
  22. package/dist/api/routes/knowledge.js +1 -1
  23. package/dist/api/routes/knowledge.js.map +1 -1
  24. package/dist/api/routes/skills.d.ts +2 -1
  25. package/dist/api/routes/skills.d.ts.map +1 -1
  26. package/dist/api/routes/skills.js +194 -4
  27. package/dist/api/routes/skills.js.map +1 -1
  28. package/dist/cli/commands/index-cmd.js +5 -5
  29. package/dist/cli/commands/index-cmd.js.map +1 -1
  30. package/dist/core/code/code-indexer.d.ts +20 -0
  31. package/dist/core/code/code-indexer.d.ts.map +1 -0
  32. package/dist/core/code/code-indexer.js +161 -0
  33. package/dist/core/code/code-indexer.js.map +1 -0
  34. package/dist/core/code/code-search.d.ts +16 -0
  35. package/dist/core/code/code-search.d.ts.map +1 -0
  36. package/dist/core/code/code-search.js +77 -0
  37. package/dist/core/code/code-search.js.map +1 -0
  38. package/dist/core/code/code-store.d.ts +35 -0
  39. package/dist/core/code/code-store.d.ts.map +1 -0
  40. package/dist/core/code/code-store.js +228 -0
  41. package/dist/core/code/code-store.js.map +1 -0
  42. package/dist/core/code/code-types.d.ts +209 -0
  43. package/dist/core/code/code-types.d.ts.map +1 -0
  44. package/dist/core/code/code-types.js +94 -0
  45. package/dist/core/code/code-types.js.map +1 -0
  46. package/dist/core/code/graph-traversal.d.ts +27 -0
  47. package/dist/core/code/graph-traversal.d.ts.map +1 -0
  48. package/dist/core/code/graph-traversal.js +122 -0
  49. package/dist/core/code/graph-traversal.js.map +1 -0
  50. package/dist/core/code/process-detector.d.ts +11 -0
  51. package/dist/core/code/process-detector.d.ts.map +1 -0
  52. package/dist/core/code/process-detector.js +65 -0
  53. package/dist/core/code/process-detector.js.map +1 -0
  54. package/dist/core/code/ts-analyzer.d.ts +12 -0
  55. package/dist/core/code/ts-analyzer.d.ts.map +1 -0
  56. package/dist/core/code/ts-analyzer.js +331 -0
  57. package/dist/core/code/ts-analyzer.js.map +1 -0
  58. package/dist/core/config/ai-memory-generator.d.ts.map +1 -1
  59. package/dist/core/config/ai-memory-generator.js +149 -61
  60. package/dist/core/config/ai-memory-generator.js.map +1 -1
  61. package/dist/core/config/config-loader.d.ts.map +1 -1
  62. package/dist/core/config/config-loader.js +2 -10
  63. package/dist/core/config/config-loader.js.map +1 -1
  64. package/dist/core/config/config-schema.d.ts +1 -2
  65. package/dist/core/config/config-schema.d.ts.map +1 -1
  66. package/dist/core/config/config-schema.js +2 -3
  67. package/dist/core/config/config-schema.js.map +1 -1
  68. package/dist/core/context/compact-context.d.ts +51 -0
  69. package/dist/core/context/compact-context.d.ts.map +1 -1
  70. package/dist/core/context/compact-context.js +292 -0
  71. package/dist/core/context/compact-context.js.map +1 -1
  72. package/dist/core/context/context-assembler.d.ts +1 -1
  73. package/dist/core/context/context-assembler.js +1 -1
  74. package/dist/core/doctor/doctor-checks.d.ts +1 -1
  75. package/dist/core/doctor/doctor-checks.js +21 -21
  76. package/dist/core/doctor/doctor-checks.js.map +1 -1
  77. package/dist/core/events/event-types.d.ts +18 -1
  78. package/dist/core/events/event-types.d.ts.map +1 -1
  79. package/dist/core/graph/graph-types.d.ts +1 -0
  80. package/dist/core/graph/graph-types.d.ts.map +1 -1
  81. package/dist/core/insights/bottleneck-detector.js +1 -1
  82. package/dist/core/insights/bottleneck-detector.js.map +1 -1
  83. package/dist/core/integrations/enriched-context.d.ts +10 -6
  84. package/dist/core/integrations/enriched-context.d.ts.map +1 -1
  85. package/dist/core/integrations/enriched-context.js +35 -35
  86. package/dist/core/integrations/enriched-context.js.map +1 -1
  87. package/dist/core/integrations/integration-orchestrator.js +2 -2
  88. package/dist/core/integrations/integration-orchestrator.js.map +1 -1
  89. package/dist/core/integrations/mcp-deps-installer.d.ts +1 -1
  90. package/dist/core/integrations/mcp-deps-installer.d.ts.map +1 -1
  91. package/dist/core/integrations/mcp-deps-installer.js +1 -60
  92. package/dist/core/integrations/mcp-deps-installer.js.map +1 -1
  93. package/dist/core/integrations/mcp-servers-config.d.ts +1 -1
  94. package/dist/core/integrations/mcp-servers-config.d.ts.map +1 -1
  95. package/dist/core/integrations/mcp-servers-config.js +0 -17
  96. package/dist/core/integrations/mcp-servers-config.js.map +1 -1
  97. package/dist/core/integrations/tool-status.d.ts +8 -3
  98. package/dist/core/integrations/tool-status.d.ts.map +1 -1
  99. package/dist/core/integrations/tool-status.js +38 -48
  100. package/dist/core/integrations/tool-status.js.map +1 -1
  101. package/dist/core/memory/memory-migrator.d.ts +15 -0
  102. package/dist/core/memory/memory-migrator.d.ts.map +1 -0
  103. package/dist/core/memory/memory-migrator.js +64 -0
  104. package/dist/core/memory/memory-migrator.js.map +1 -0
  105. package/dist/core/memory/memory-reader.d.ts +30 -0
  106. package/dist/core/memory/memory-reader.d.ts.map +1 -0
  107. package/dist/core/memory/memory-reader.js +106 -0
  108. package/dist/core/memory/memory-reader.js.map +1 -0
  109. package/dist/core/planner/lifecycle-phase.d.ts +1 -0
  110. package/dist/core/planner/lifecycle-phase.d.ts.map +1 -1
  111. package/dist/core/planner/lifecycle-phase.js +11 -8
  112. package/dist/core/planner/lifecycle-phase.js.map +1 -1
  113. package/dist/core/rag/memory-indexer.d.ts +16 -0
  114. package/dist/core/rag/memory-indexer.d.ts.map +1 -0
  115. package/dist/core/rag/{serena-indexer.js → memory-indexer.js} +12 -12
  116. package/dist/core/rag/memory-indexer.js.map +1 -0
  117. package/dist/core/rag/{serena-rag-query.d.ts → memory-rag-query.d.ts} +11 -9
  118. package/dist/core/rag/memory-rag-query.d.ts.map +1 -0
  119. package/dist/core/rag/{serena-rag-query.js → memory-rag-query.js} +18 -15
  120. package/dist/core/rag/memory-rag-query.js.map +1 -0
  121. package/dist/core/rag/skill-indexer.d.ts +16 -0
  122. package/dist/core/rag/skill-indexer.d.ts.map +1 -0
  123. package/dist/core/rag/skill-indexer.js +98 -0
  124. package/dist/core/rag/skill-indexer.js.map +1 -0
  125. package/dist/core/skills/built-in-skills.d.ts +26 -0
  126. package/dist/core/skills/built-in-skills.d.ts.map +1 -0
  127. package/dist/core/skills/built-in-skills.js +467 -0
  128. package/dist/core/skills/built-in-skills.js.map +1 -0
  129. package/dist/core/skills/self-healing-listener.d.ts +22 -0
  130. package/dist/core/skills/self-healing-listener.d.ts.map +1 -0
  131. package/dist/core/skills/self-healing-listener.js +102 -0
  132. package/dist/core/skills/self-healing-listener.js.map +1 -0
  133. package/dist/core/skills/skill-store.d.ts +14 -0
  134. package/dist/core/skills/skill-store.d.ts.map +1 -0
  135. package/dist/core/skills/skill-store.js +109 -0
  136. package/dist/core/skills/skill-store.js.map +1 -0
  137. package/dist/core/store/knowledge-store.d.ts +1 -1
  138. package/dist/core/store/knowledge-store.js +1 -1
  139. package/dist/core/store/migrations.d.ts.map +1 -1
  140. package/dist/core/store/migrations.js +128 -0
  141. package/dist/core/store/migrations.js.map +1 -1
  142. package/dist/core/store/path-resolver.d.ts +38 -0
  143. package/dist/core/store/path-resolver.d.ts.map +1 -0
  144. package/dist/core/store/path-resolver.js +92 -0
  145. package/dist/core/store/path-resolver.js.map +1 -0
  146. package/dist/core/store/sqlite-store.d.ts +21 -0
  147. package/dist/core/store/sqlite-store.d.ts.map +1 -1
  148. package/dist/core/store/sqlite-store.js +81 -30
  149. package/dist/core/store/sqlite-store.js.map +1 -1
  150. package/dist/core/store/tool-token-store.d.ts +39 -0
  151. package/dist/core/store/tool-token-store.d.ts.map +1 -0
  152. package/dist/core/store/tool-token-store.js +79 -0
  153. package/dist/core/store/tool-token-store.js.map +1 -0
  154. package/dist/core/utils/constants.d.ts +10 -0
  155. package/dist/core/utils/constants.d.ts.map +1 -1
  156. package/dist/core/utils/constants.js +12 -0
  157. package/dist/core/utils/constants.js.map +1 -1
  158. package/dist/mcp/app-factory.d.ts +0 -1
  159. package/dist/mcp/app-factory.d.ts.map +1 -1
  160. package/dist/mcp/app-factory.js +2 -2
  161. package/dist/mcp/app-factory.js.map +1 -1
  162. package/dist/mcp/lifecycle-wrapper.d.ts +3 -1
  163. package/dist/mcp/lifecycle-wrapper.d.ts.map +1 -1
  164. package/dist/mcp/lifecycle-wrapper.js +41 -1
  165. package/dist/mcp/lifecycle-wrapper.js.map +1 -1
  166. package/dist/mcp/server.js +19 -14
  167. package/dist/mcp/server.js.map +1 -1
  168. package/dist/mcp/tools/index.d.ts.map +1 -1
  169. package/dist/mcp/tools/index.js +6 -0
  170. package/dist/mcp/tools/index.js.map +1 -1
  171. package/dist/mcp/tools/list-skills.d.ts +7 -0
  172. package/dist/mcp/tools/list-skills.d.ts.map +1 -0
  173. package/dist/mcp/tools/list-skills.js +68 -0
  174. package/dist/mcp/tools/list-skills.js.map +1 -0
  175. package/dist/mcp/tools/manage-skill.d.ts +8 -0
  176. package/dist/mcp/tools/manage-skill.d.ts.map +1 -0
  177. package/dist/mcp/tools/manage-skill.js +149 -0
  178. package/dist/mcp/tools/manage-skill.js.map +1 -0
  179. package/dist/mcp/tools/memory.d.ts +8 -0
  180. package/dist/mcp/tools/memory.d.ts.map +1 -0
  181. package/dist/mcp/tools/memory.js +106 -0
  182. package/dist/mcp/tools/memory.js.map +1 -0
  183. package/dist/mcp/tools/reindex-knowledge.d.ts.map +1 -1
  184. package/dist/mcp/tools/reindex-knowledge.js +11 -7
  185. package/dist/mcp/tools/reindex-knowledge.js.map +1 -1
  186. package/dist/schemas/graph.schema.d.ts +2 -0
  187. package/dist/schemas/graph.schema.d.ts.map +1 -1
  188. package/dist/schemas/graph.schema.js +1 -0
  189. package/dist/schemas/graph.schema.js.map +1 -1
  190. package/dist/schemas/knowledge.schema.d.ts +4 -0
  191. package/dist/schemas/knowledge.schema.d.ts.map +1 -1
  192. package/dist/schemas/knowledge.schema.js +1 -1
  193. package/dist/schemas/knowledge.schema.js.map +1 -1
  194. package/dist/schemas/skill.schema.d.ts +57 -0
  195. package/dist/schemas/skill.schema.d.ts.map +1 -0
  196. package/dist/schemas/skill.schema.js +24 -0
  197. package/dist/schemas/skill.schema.js.map +1 -0
  198. package/dist/web/dashboard/dist/assets/benchmark-tab-BW4QxI49.js +1 -0
  199. package/dist/web/dashboard/dist/assets/constants-kpH_c6vY.js +1 -0
  200. package/dist/web/dashboard/dist/assets/context-tab-C5RAlXNW.js +1 -0
  201. package/dist/web/dashboard/dist/assets/gitnexus-tab-BnxxYl2F.js +430 -0
  202. package/dist/web/dashboard/dist/assets/graph-tab-Cv_wQ6Az.js +1 -0
  203. package/dist/web/dashboard/dist/assets/graph-utils-Ds1zJyD1.js +7 -0
  204. package/dist/web/dashboard/dist/assets/index-BAeZDWWy.js +53 -0
  205. package/dist/web/dashboard/dist/assets/index-Bic_URMs.js +17 -0
  206. package/dist/web/dashboard/dist/assets/index-DQqYFXms.css +1 -0
  207. package/dist/web/dashboard/dist/assets/insights-tab-U_ATOqPu.js +52 -0
  208. package/dist/web/dashboard/dist/assets/{logs-tab-Cxpcv_ni.js → logs-tab-B8psCXuB.js} +1 -1
  209. package/dist/web/dashboard/dist/assets/memories-tab-DcWok2by.js +1 -0
  210. package/dist/web/dashboard/dist/assets/prd-backlog-tab-CjftveTc.js +1 -0
  211. package/dist/web/dashboard/dist/assets/skills-tab-Ddp1w4vS.js +1 -0
  212. package/dist/web/dashboard/dist/index.html +2 -2
  213. package/package.json +2 -2
  214. package/dist/api/routes/gitnexus.d.ts +0 -12
  215. package/dist/api/routes/gitnexus.d.ts.map +0 -1
  216. package/dist/api/routes/gitnexus.js +0 -164
  217. package/dist/api/routes/gitnexus.js.map +0 -1
  218. package/dist/core/integrations/gitnexus-launcher.d.ts +0 -67
  219. package/dist/core/integrations/gitnexus-launcher.d.ts.map +0 -1
  220. package/dist/core/integrations/gitnexus-launcher.js +0 -268
  221. package/dist/core/integrations/gitnexus-launcher.js.map +0 -1
  222. package/dist/core/integrations/gitnexus-queries.d.ts +0 -55
  223. package/dist/core/integrations/gitnexus-queries.d.ts.map +0 -1
  224. package/dist/core/integrations/gitnexus-queries.js +0 -168
  225. package/dist/core/integrations/gitnexus-queries.js.map +0 -1
  226. package/dist/core/integrations/serena-reader.d.ts +0 -18
  227. package/dist/core/integrations/serena-reader.d.ts.map +0 -1
  228. package/dist/core/integrations/serena-reader.js +0 -68
  229. package/dist/core/integrations/serena-reader.js.map +0 -1
  230. package/dist/core/rag/serena-indexer.d.ts +0 -16
  231. package/dist/core/rag/serena-indexer.d.ts.map +0 -1
  232. package/dist/core/rag/serena-indexer.js.map +0 -1
  233. package/dist/core/rag/serena-rag-query.d.ts.map +0 -1
  234. package/dist/core/rag/serena-rag-query.js.map +0 -1
  235. package/dist/web/dashboard/dist/assets/benchmark-tab-DE6hAHVG.js +0 -1
  236. package/dist/web/dashboard/dist/assets/constants-BIEJOBya.js +0 -1
  237. package/dist/web/dashboard/dist/assets/gitnexus-tab-DsBjJHx8.js +0 -312
  238. package/dist/web/dashboard/dist/assets/graph-tab-C09DzeZ_.js +0 -1
  239. package/dist/web/dashboard/dist/assets/graph-utils-D4LFspTf.js +0 -23
  240. package/dist/web/dashboard/dist/assets/index-B2fTJ4AS.js +0 -53
  241. package/dist/web/dashboard/dist/assets/index-CkqEqKiH.css +0 -1
  242. package/dist/web/dashboard/dist/assets/insights-tab-Bm7CDckb.js +0 -1
  243. package/dist/web/dashboard/dist/assets/prd-backlog-tab-X84Rj-IB.js +0 -1
  244. package/dist/web/dashboard/dist/assets/serena-tab-BunULNvw.js +0 -1
@@ -0,0 +1,467 @@
1
+ /**
2
+ * Built-in Skills Registry — 40 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
+ // ── SOFTWARE DESIGN PRINCIPLES ────────────────────
185
+ {
186
+ name: "kiss",
187
+ description: "Keep It Simple, Stupid — simplicidade como princípio de design",
188
+ category: "software-design",
189
+ phases: ["DESIGN", "IMPLEMENT", "REVIEW"],
190
+ instructions: "Aplique o princípio KISS em todas as decisões de design e implementação. " +
191
+ "Prefira soluções simples e diretas. Evite abstrações prematuras, generalizações desnecessárias " +
192
+ "e complexidade acidental. Pergunte: 'Qual é a forma mais simples de resolver isso?' " +
193
+ "Se a solução precisa de um diagrama para ser entendida, simplifique.",
194
+ },
195
+ {
196
+ name: "yagni",
197
+ description: "You Aren't Gonna Need It — não implemente o que não é necessário agora",
198
+ category: "software-design",
199
+ phases: ["DESIGN", "IMPLEMENT", "REVIEW"],
200
+ instructions: "Aplique YAGNI rigorosamente. Não adicione features, configurações ou abstrações 'para o futuro'. " +
201
+ "Implemente apenas o que é explicitamente necessário para o requisito atual. " +
202
+ "Se não há user story ou AC pedindo, não implemente. Código não escrito é código sem bugs.",
203
+ },
204
+ {
205
+ name: "dry",
206
+ description: "Don't Repeat Yourself — elimine duplicação de conhecimento",
207
+ category: "software-design",
208
+ phases: ["DESIGN", "IMPLEMENT", "REVIEW"],
209
+ instructions: "Identifique e elimine duplicação de conhecimento (não apenas código). " +
210
+ "Cada conceito deve ter uma única representação autoritativa no sistema. " +
211
+ "Atenção: DRY é sobre conhecimento, não sintaxe — duas funções com código similar " +
212
+ "mas razões de mudança diferentes NÃO são duplicação.",
213
+ },
214
+ {
215
+ name: "solid-srp",
216
+ description: "Single Responsibility Principle — uma razão para mudar",
217
+ category: "software-design",
218
+ phases: ["DESIGN", "IMPLEMENT", "REVIEW"],
219
+ instructions: "Cada módulo/classe/função deve ter uma única razão para mudar. " +
220
+ "Identifique os atores (stakeholders) que podem solicitar mudanças e separe responsabilidades " +
221
+ "por ator. Se uma classe muda por mais de uma razão, extraia responsabilidades em módulos separados.",
222
+ },
223
+ {
224
+ name: "solid-ocp",
225
+ description: "Open/Closed Principle — aberto para extensão, fechado para modificação",
226
+ category: "software-design",
227
+ phases: ["DESIGN", "IMPLEMENT", "REVIEW"],
228
+ instructions: "Projete módulos que possam ser estendidos sem modificação do código existente. " +
229
+ "Use abstrações (interfaces, strategy pattern, plugins) para pontos de extensão previsíveis. " +
230
+ "Quando um novo requisito chega, prefira adicionar código novo a alterar código estável.",
231
+ },
232
+ {
233
+ name: "solid-lsp",
234
+ description: "Liskov Substitution Principle — subtipos devem ser substituíveis",
235
+ category: "software-design",
236
+ phases: ["DESIGN", "IMPLEMENT", "REVIEW"],
237
+ instructions: "Garanta que subtipos podem substituir seus tipos base sem quebrar o comportamento esperado. " +
238
+ "Verifique: pré-condições não são fortalecidas, pós-condições não são enfraquecidas, " +
239
+ "invariantes são preservados. Se uma subclasse precisa de um 'if instanceof', há violação de LSP.",
240
+ },
241
+ {
242
+ name: "solid-isp",
243
+ description: "Interface Segregation Principle — interfaces coesas e específicas",
244
+ category: "software-design",
245
+ phases: ["DESIGN", "IMPLEMENT", "REVIEW"],
246
+ instructions: "Prefira interfaces pequenas e específicas a interfaces grandes e genéricas. " +
247
+ "Nenhum cliente deve ser forçado a depender de métodos que não usa. " +
248
+ "Quando uma interface tem muitos métodos, divida por coesão funcional.",
249
+ },
250
+ {
251
+ name: "solid-dip",
252
+ description: "Dependency Inversion Principle — dependa de abstrações",
253
+ category: "software-design",
254
+ phases: ["DESIGN", "IMPLEMENT", "REVIEW"],
255
+ instructions: "Módulos de alto nível não devem depender de módulos de baixo nível — ambos devem depender de abstrações. " +
256
+ "Abstrações não devem depender de detalhes. Use injeção de dependência e interfaces " +
257
+ "para desacoplar camadas. A direção de dependência deve apontar para políticas, não para detalhes.",
258
+ },
259
+ {
260
+ name: "tell-dont-ask",
261
+ description: "Tell, Don't Ask — peça ao objeto que faça, não pergunte seu estado",
262
+ category: "software-design",
263
+ phases: ["DESIGN", "IMPLEMENT", "REVIEW"],
264
+ instructions: "Em vez de perguntar o estado de um objeto para decidir o que fazer, diga ao objeto o que fazer. " +
265
+ "Evite getters seguidos de lógica condicional externa. Encapsule comportamento junto com dados. " +
266
+ "Se você faz obj.getX() para decidir algo, considere mover a decisão para dentro do obj.",
267
+ },
268
+ {
269
+ name: "law-of-demeter",
270
+ description: "Lei de Demeter — fale apenas com seus amigos próximos",
271
+ category: "software-design",
272
+ phases: ["DESIGN", "IMPLEMENT", "REVIEW"],
273
+ instructions: "Cada módulo deve ter conhecimento limitado sobre outros módulos. " +
274
+ "Evite cadeias de chamadas como a.getB().getC().doSomething(). " +
275
+ "Um método deve chamar apenas: seus próprios métodos, métodos de seus parâmetros, " +
276
+ "métodos de objetos que ele cria, e métodos de suas dependências diretas.",
277
+ },
278
+ {
279
+ name: "composition-over-inheritance",
280
+ description: "Composição sobre Herança — favoreça composição de comportamento",
281
+ category: "software-design",
282
+ phases: ["DESIGN", "IMPLEMENT", "REVIEW"],
283
+ instructions: "Prefira composição (has-a) sobre herança (is-a) para reutilização de código. " +
284
+ "Herança cria acoplamento forte e hierarquias rígidas. Use composição com interfaces " +
285
+ "para combinar comportamentos flexivelmente. Reserve herança para relações genuínas de subtipo.",
286
+ },
287
+ {
288
+ name: "fail-fast",
289
+ description: "Fail Fast — detecte e reporte erros imediatamente",
290
+ category: "software-design",
291
+ phases: ["DESIGN", "IMPLEMENT", "REVIEW"],
292
+ instructions: "Valide inputs e pré-condições no ponto de entrada, não no meio do processamento. " +
293
+ "Use assertions, guards e validação Zod nas fronteiras. Falhe com mensagens claras " +
294
+ "e stack traces preservados. Nunca engula erros silenciosamente — log + rethrow ou handle explicitamente.",
295
+ },
296
+ {
297
+ name: "clean-architecture",
298
+ description: "Clean Architecture — camadas com direção de dependência controlada",
299
+ category: "software-design",
300
+ phases: ["DESIGN", "IMPLEMENT", "REVIEW"],
301
+ instructions: "Organize o código em camadas concêntricas: Entities → Use Cases → Adapters → Frameworks. " +
302
+ "Dependências apontam para dentro (regra de dependência). O core de negócio não conhece " +
303
+ "frameworks, DB ou UI. Use interfaces para inverter dependências nas fronteiras.",
304
+ },
305
+ {
306
+ name: "separation-of-concerns",
307
+ description: "Separação de Responsabilidades — cada módulo faz uma coisa",
308
+ category: "software-design",
309
+ phases: ["DESIGN", "IMPLEMENT", "REVIEW"],
310
+ instructions: "Separe o sistema em módulos distintos com responsabilidades claras e sobreposição mínima. " +
311
+ "Cada camada (CLI, API, Core, Store) tem um papel definido. Não misture lógica de apresentação " +
312
+ "com lógica de negócio. Não misture acesso a dados com regras de domínio.",
313
+ },
314
+ {
315
+ name: "boy-scout-rule",
316
+ description: "Regra do Escoteiro — deixe o código melhor do que encontrou",
317
+ category: "software-design",
318
+ phases: ["DESIGN", "IMPLEMENT", "REVIEW"],
319
+ instructions: "Ao tocar em código existente, faça pequenas melhorias incrementais: renomeie variáveis " +
320
+ "mal nomeadas, extraia funções longas, remova dead code, adicione tipagem faltante. " +
321
+ "Não refatore tudo de uma vez — melhorias pequenas e consistentes acumulam qualidade.",
322
+ },
323
+ // ── DDD ──────────────────────────────────────────
324
+ {
325
+ name: "domain-driven-design",
326
+ description: "Domain-Driven Design — modelagem orientada ao domínio de negócio",
327
+ category: "ddd",
328
+ phases: ["DESIGN", "PLAN"],
329
+ instructions: "Modele o software em torno do domínio de negócio. Identifique bounded contexts, " +
330
+ "entidades, value objects, aggregates e domain events. Use linguagem ubíqua — " +
331
+ "termos do domínio no código. Separe subdomínios (core, supporting, generic). " +
332
+ "Context maps para definir relacionamentos entre bounded contexts.",
333
+ },
334
+ // ── SECURITY ─────────────────────────────────────
335
+ {
336
+ name: "owasp-web-security",
337
+ description: "OWASP Top 10 — segurança web essencial",
338
+ category: "security",
339
+ phases: ["DESIGN", "REVIEW", "VALIDATE"],
340
+ instructions: "Verifique contra OWASP Top 10: Injection (SQL, NoSQL, OS), Broken Auth, " +
341
+ "Sensitive Data Exposure, XXE, Broken Access Control, Security Misconfiguration, " +
342
+ "XSS, Insecure Deserialization, Using Components with Known Vulns, Insufficient Logging. " +
343
+ "Para cada item: identifique superfície de ataque, aplique mitigação, documente.",
344
+ },
345
+ {
346
+ name: "auth-and-secrets",
347
+ description: "Autenticação, autorização e gestão de segredos",
348
+ category: "security",
349
+ phases: ["DESIGN", "REVIEW", "VALIDATE"],
350
+ instructions: "Nunca hardcode secrets — use variáveis de ambiente ou vault. Tokens JWT com expiração curta. " +
351
+ "Hash de senhas com bcrypt/argon2 (nunca MD5/SHA). RBAC ou ABAC para autorização. " +
352
+ "Valide tokens em cada request. Revogue sessões ativas em caso de compromisso. " +
353
+ "Audite acessos a recursos sensíveis. .env nunca no git.",
354
+ },
355
+ {
356
+ name: "database-and-deps-security",
357
+ description: "Segurança de banco de dados e dependências",
358
+ category: "security",
359
+ phases: ["DESIGN", "REVIEW", "VALIDATE"],
360
+ instructions: "Use prepared statements / parameterized queries para prevenir SQL injection. " +
361
+ "Princípio do menor privilégio para acessos ao DB. Audite dependências com npm audit. " +
362
+ "Lock files commitados. Mantenha deps atualizadas. Nunca exponha stack traces em produção. " +
363
+ "Encrypt dados sensíveis at rest. Backup strategy com testes de restore.",
364
+ },
365
+ // ── FRONTEND DESIGN ──────────────────────────────
366
+ {
367
+ name: "ui-ux-patterns",
368
+ description: "Padrões de UI/UX para interfaces eficazes",
369
+ category: "frontend-design",
370
+ phases: ["DESIGN", "IMPLEMENT"],
371
+ instructions: "Aplique padrões de UX comprovados: loading states para toda operação assíncrona, " +
372
+ "error states com ações de recovery, empty states informativos, feedback visual imediato. " +
373
+ "Acessibilidade: ARIA labels, keyboard navigation, contraste mínimo WCAG AA. " +
374
+ "Responsividade: mobile-first, breakpoints consistentes. Performance: lazy loading, " +
375
+ "virtualização para listas longas, debounce em inputs.",
376
+ },
377
+ // ── TESTING ──────────────────────────────────────
378
+ {
379
+ name: "comprehensive-testing-reference",
380
+ description: "Referência completa de estratégia de testes",
381
+ category: "testing",
382
+ phases: ["IMPLEMENT", "VALIDATE"],
383
+ instructions: "Siga a pirâmide de testes: muitos unit tests, integration tests moderados, poucos E2E. " +
384
+ "Unit: isolados, rápidos, uma assertion por conceito, factory functions para fixtures. " +
385
+ "Integration: real DB (in-memory), real file I/O (tmp), mock apenas fronteiras externas. " +
386
+ "E2E: fluxos reais do usuário, Playwright para browser. Cobertura: 80%+ para core, " +
387
+ "100% para paths críticos (auth, payments, data integrity). TDD: Red → Green → Refactor.",
388
+ },
389
+ // ── RESEARCH ─────────────────────────────────────
390
+ {
391
+ name: "research-methodology",
392
+ description: "Metodologia de pesquisa estruturada para decisões técnicas",
393
+ category: "research",
394
+ phases: ["ANALYZE"],
395
+ instructions: "Para pesquisa técnica: 1) Defina a pergunta central claramente. " +
396
+ "2) Liste opções candidatas (mín. 3). 3) Defina critérios de avaliação objetivos " +
397
+ "(performance, manutenibilidade, comunidade, licença, custo). " +
398
+ "4) Avalie cada opção contra cada critério com evidência. " +
399
+ "5) Documente trade-offs e decisão final em ADR. " +
400
+ "6) Prototipe a opção vencedora antes de comprometer. Use Context7 para docs atualizados.",
401
+ },
402
+ // ── COST REDUCER ─────────────────────────────────
403
+ {
404
+ name: "cloud-infra-cost",
405
+ description: "Otimização de custos de infraestrutura cloud",
406
+ category: "cost-reducer",
407
+ phases: ["DESIGN", "REVIEW"],
408
+ instructions: "Audite custos de infra: right-sizing de instâncias (CPU/memory utilization), " +
409
+ "reserved/spot instances, auto-scaling policies, storage tiering (hot/warm/cold). " +
410
+ "Identifique recursos ociosos (unused EIPs, unattached volumes, idle load balancers). " +
411
+ "CDN para assets estáticos. Serverless para workloads intermitentes. " +
412
+ "Budget alerts e cost anomaly detection. FinOps: tag resources por team/project.",
413
+ },
414
+ {
415
+ name: "code-level-savings",
416
+ description: "Economias a nível de código — performance e eficiência",
417
+ category: "cost-reducer",
418
+ phases: ["DESIGN", "REVIEW"],
419
+ instructions: "Otimize código para reduzir custo computacional: queries N+1 → batch/join, " +
420
+ "caching estratégico (Redis/in-memory) para dados lidos frequentemente, " +
421
+ "connection pooling, lazy loading de recursos pesados, pagination para datasets grandes. " +
422
+ "Compressão de responses (gzip/brotli). Índices de DB otimizados para queries frequentes. " +
423
+ "Elimine computações redundantes. Profile antes de otimizar.",
424
+ },
425
+ {
426
+ name: "finops-services",
427
+ description: "FinOps para serviços gerenciados e APIs externas",
428
+ category: "cost-reducer",
429
+ phases: ["DESIGN", "REVIEW"],
430
+ instructions: "Gerencie custos de serviços gerenciados e APIs externas: rate limiting para proteger budget, " +
431
+ "caching de responses de APIs pagas, batch requests quando possível. " +
432
+ "LLM costs: prompt compression, response caching, model tiering (use modelos menores " +
433
+ "para tasks simples). Monitore spend por serviço. Defina budgets por team/feature. " +
434
+ "Alertas quando spend excede threshold.",
435
+ },
436
+ // ── SELF-HEALING ─────────────────────────────────
437
+ {
438
+ name: "self-healing-awareness",
439
+ description: "Consulta memórias de auto-correção antes de executar tarefas",
440
+ category: "implement",
441
+ phases: ["IMPLEMENT", "VALIDATE"],
442
+ instructions: "Antes de executar uma tarefa, consulte rag_context para verificar memórias de self-healing " +
443
+ "relacionadas ao contexto atual. Padrões de erro conhecidos e suas prevenções estão " +
444
+ "armazenados em workflow-graph/memories/healing-*.md. Se encontrar uma memória relevante, " +
445
+ "aplique a regra de prevenção ANTES de implementar. Isso evita repetição de erros " +
446
+ "já cometidos e corrigidos anteriormente.",
447
+ },
448
+ ];
449
+ /**
450
+ * Get all built-in skills.
451
+ */
452
+ export function getBuiltInSkills() {
453
+ return BUILT_IN_SKILLS;
454
+ }
455
+ /**
456
+ * Get built-in skills filtered by lifecycle phase.
457
+ */
458
+ export function getSkillsByPhase(phase) {
459
+ return BUILT_IN_SKILLS.filter((s) => s.phases.includes(phase));
460
+ }
461
+ /**
462
+ * Get a built-in skill by name.
463
+ */
464
+ export function getSkillByName(name) {
465
+ return BUILT_IN_SKILLS.find((s) => s.name === name);
466
+ }
467
+ //# 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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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Self-Healing Listener — creates auto-memories when errors are detected.
3
+ * Subscribes to "error:detected" events on the GraphEventBus.
4
+ * Deduplicates via error hash to prevent flood.
5
+ */
6
+ import type { GraphEventBus } from "../events/event-bus.js";
7
+ export interface SelfHealingOptions {
8
+ memoriesDir: string;
9
+ eventBus: GraphEventBus;
10
+ }
11
+ /** Categorize an error message into a healing category. */
12
+ export declare function categorizeError(message: string): string;
13
+ /** Generate a short hash for deduplication of error patterns. */
14
+ export declare function generateErrorHash(category: string, message: string): string;
15
+ /** Build the healing memory content. */
16
+ export declare function buildHealingMemory(category: string, errorMessage: string, toolName: string): string;
17
+ /**
18
+ * Register the self-healing listener on the event bus.
19
+ * Returns an unsubscribe function.
20
+ */
21
+ export declare function registerSelfHealingListener(options: SelfHealingOptions): () => void;
22
+ //# sourceMappingURL=self-healing-listener.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"self-healing-listener.d.ts","sourceRoot":"","sources":["../../../src/core/skills/self-healing-listener.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAI5D,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,aAAa,CAAC;CACzB;AAED,2DAA2D;AAC3D,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CASvD;AAED,iEAAiE;AACjE,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAa3E;AAED,wCAAwC;AACxC,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,GACf,MAAM,CAiBR;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,IAAI,CAiDnF"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Self-Healing Listener — creates auto-memories when errors are detected.
3
+ * Subscribes to "error:detected" events on the GraphEventBus.
4
+ * Deduplicates via error hash to prevent flood.
5
+ */
6
+ import { createHash } from "node:crypto";
7
+ import { writeFileSync, existsSync, mkdirSync } from "node:fs";
8
+ import path from "node:path";
9
+ import { logger } from "../utils/logger.js";
10
+ /** Categorize an error message into a healing category. */
11
+ export function categorizeError(message) {
12
+ const lower = message.toLowerCase();
13
+ if (lower.includes("type") && (lower.includes("error") || lower.includes("mismatch")))
14
+ return "type-error";
15
+ if (lower.includes("validation") || lower.includes("invalid") || lower.includes("zod"))
16
+ return "validation-error";
17
+ if (lower.includes("build") || lower.includes("compile") || lower.includes("tsc"))
18
+ return "build-error";
19
+ if (lower.includes("test") && (lower.includes("fail") || lower.includes("assert")))
20
+ return "test-failure";
21
+ if (lower.includes("sqlite") || lower.includes("database") || lower.includes("migration"))
22
+ return "database-error";
23
+ if (lower.includes("import") || lower.includes("module") || lower.includes("require"))
24
+ return "module-error";
25
+ return "general-error";
26
+ }
27
+ /** Generate a short hash for deduplication of error patterns. */
28
+ export function generateErrorHash(category, message) {
29
+ // Normalize: strip dynamic parts like timestamps, line numbers, ids
30
+ const normalized = message
31
+ .replace(/\d{4}-\d{2}-\d{2}T[\d:.Z]+/g, "")
32
+ .replace(/\b[a-f0-9]{12,}\b/g, "")
33
+ .replace(/line \d+/gi, "line N")
34
+ .replace(/:\d+:\d+/g, ":N:N")
35
+ .trim();
36
+ return createHash("sha256")
37
+ .update(`${category}:${normalized}`)
38
+ .digest("hex")
39
+ .slice(0, 12);
40
+ }
41
+ /** Build the healing memory content. */
42
+ export function buildHealingMemory(category, errorMessage, toolName) {
43
+ const timestamp = new Date().toISOString();
44
+ return [
45
+ `# Self-Healing: ${category}`,
46
+ "",
47
+ "## Error Pattern",
48
+ errorMessage,
49
+ "",
50
+ "## Prevention Rule",
51
+ `When encountering similar ${category} issues, check the tool '${toolName}' inputs and outputs carefully.`,
52
+ "Apply validation at boundaries and verify types match expected schemas before proceeding.",
53
+ "",
54
+ "## Context",
55
+ `- Tool: ${toolName}`,
56
+ `- Category: ${category}`,
57
+ `- Date: ${timestamp}`,
58
+ ].join("\n");
59
+ }
60
+ /**
61
+ * Register the self-healing listener on the event bus.
62
+ * Returns an unsubscribe function.
63
+ */
64
+ export function registerSelfHealingListener(options) {
65
+ const { memoriesDir, eventBus } = options;
66
+ // Ensure memories directory exists
67
+ if (!existsSync(memoriesDir)) {
68
+ mkdirSync(memoriesDir, { recursive: true });
69
+ }
70
+ const handler = (event) => {
71
+ if (event.type !== "error:detected")
72
+ return;
73
+ const { toolName, errorMessage, errorCategory, errorHash } = event.payload;
74
+ const memoryName = `healing-${errorCategory}-${errorHash}`;
75
+ const memoryPath = path.join(memoriesDir, `${memoryName}.md`);
76
+ // Deduplication: skip if memory already exists
77
+ if (existsSync(memoryPath)) {
78
+ logger.debug("self-healing:skip-duplicate", { memoryName });
79
+ return;
80
+ }
81
+ // Create healing memory
82
+ const content = buildHealingMemory(errorCategory, errorMessage, toolName);
83
+ try {
84
+ writeFileSync(memoryPath, content, "utf-8");
85
+ logger.info("self-healing:memory-created", { memoryName, category: errorCategory });
86
+ // Emit healing event
87
+ eventBus.emitTyped("healing:memory_created", {
88
+ memoryName,
89
+ errorCategory,
90
+ errorHash,
91
+ });
92
+ }
93
+ catch (err) {
94
+ logger.error("self-healing:write-failed", { memoryName, error: String(err) });
95
+ }
96
+ };
97
+ eventBus.on("error:detected", handler);
98
+ return () => {
99
+ eventBus.off("error:detected", handler);
100
+ };
101
+ }
102
+ //# sourceMappingURL=self-healing-listener.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"self-healing-listener.js","sourceRoot":"","sources":["../../../src/core/skills/self-healing-listener.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Skill Store — persistence layer for skill preferences and custom skills.
3
+ * Uses SQLite tables created by migration v9.
4
+ */
5
+ import type Database from "better-sqlite3";
6
+ import type { CustomSkill, CustomSkillInput } from "../../schemas/skill.schema.js";
7
+ export declare function setSkillEnabled(db: Database.Database, projectId: string, skillName: string, enabled: boolean): void;
8
+ export declare function getSkillPreferences(db: Database.Database, projectId: string): Map<string, boolean>;
9
+ export declare function createCustomSkill(db: Database.Database, projectId: string, data: CustomSkillInput): CustomSkill;
10
+ export declare function updateCustomSkill(db: Database.Database, projectId: string, id: string, data: Partial<CustomSkillInput>): CustomSkill;
11
+ export declare function deleteCustomSkill(db: Database.Database, projectId: string, id: string): void;
12
+ export declare function getCustomSkills(db: Database.Database, projectId: string): CustomSkill[];
13
+ export declare function getCustomSkillByName(db: Database.Database, projectId: string, name: string): CustomSkill | undefined;
14
+ //# sourceMappingURL=skill-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-store.d.ts","sourceRoot":"","sources":["../../../src/core/skills/skill-store.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAK3C,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAyCnF,wBAAgB,eAAe,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAOnH;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAUlG;AAID,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,WAAW,CAgC/G;AAED,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAC9B,WAAW,CAkCb;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAS5F;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,WAAW,EAAE,CAMvF;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAMpH"}