jarvis-ai-framework 2.1.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (303) hide show
  1. package/AGENTS.md +22 -122
  2. package/agents/AGENTS.md +20 -24
  3. package/agents/README.md +25 -129
  4. package/agents/engineering/data/eng.data-engineer.agent.md +12 -35
  5. package/agents/engineering/eng.agent.md +18 -30
  6. package/agents/engineering/eng.bug-hunter.md +9 -12
  7. package/agents/engineering/eng.dev-code-reviewer.md +5 -1
  8. package/agents/engineering/eng.docs-writer.md +3 -3
  9. package/agents/engineering/eng.frontend.agent.md +13 -8
  10. package/agents/engineering/eng.rpa.agent.md +5 -13
  11. package/agents/engineering/eng.ux-designer.agent.md +4 -0
  12. package/agents/engineering/qa/eng.qa.quality-champion-task-agent.md +4 -0
  13. package/agents/engineering/qa/eng.qa.quality-strategist.md +13 -8
  14. package/agents/engineering/qa/eng.qa.test-architect.md +16 -15
  15. package/agents/engineering/qa/eng.qa.test-planner.md +22 -17
  16. package/agents/engineering/qa/eng.qa.testing-engineer.md +99 -15
  17. package/agents/product/prod.discovery-interviewer.md +22 -3
  18. package/agents/product/prod.pm-checker.md +4 -0
  19. package/bin/README.md +142 -0
  20. package/bin/commands/docs-publish.js +105 -141
  21. package/bin/commands/docs-sync.js +66 -104
  22. package/bin/commands/info.js +7 -27
  23. package/bin/commands/init.js +23 -51
  24. package/bin/commands/install-rtk.js +9 -3
  25. package/bin/commands/list.js +5 -18
  26. package/bin/commands/map.js +58 -0
  27. package/bin/commands/qa-signoff.js +58 -55
  28. package/bin/commands/tokens.js +90 -0
  29. package/bin/commands/whoami.js +30 -26
  30. package/bin/jarvis.js +9 -153
  31. package/bin/lib/auth/session.js +20 -20
  32. package/bin/lib/cli/program.js +219 -0
  33. package/bin/lib/cli/shared-options.js +29 -0
  34. package/bin/lib/config/constants.js +70 -2
  35. package/bin/lib/config/ide-config.js +4 -8
  36. package/bin/lib/core/profile-filter.js +116 -0
  37. package/bin/lib/core/scanner.js +5 -31
  38. package/bin/lib/core/sync-engine.js +21 -14
  39. package/bin/lib/core/token-report.js +100 -0
  40. package/bin/lib/docs/fetch-file.js +39 -0
  41. package/bin/lib/docs/publish-file.js +194 -0
  42. package/bin/lib/docs/redis-cache.js +49 -0
  43. package/bin/lib/docs/validate-frontmatter.js +9 -39
  44. package/bin/lib/env-loader.js +11 -34
  45. package/bin/lib/flow-map/index.js +65 -0
  46. package/bin/lib/flow-map/parse.js +223 -0
  47. package/bin/lib/flow-map/render.js +89 -0
  48. package/bin/lib/flow-map/tree.js +248 -0
  49. package/bin/lib/tasks/comment.js +40 -35
  50. package/bin/lib/utils/frontmatter.js +57 -0
  51. package/bin/lib/utils/git-parser.js +4 -6
  52. package/bin/lib/utils/npmrc-parser.js +6 -13
  53. package/bin/lib/utils/paths.js +2 -4
  54. package/bin/lib/utils/ui.js +3 -9
  55. package/bin/lib/vcs/api.js +25 -41
  56. package/bin/lib/vcs/create-issue.js +49 -33
  57. package/bin/lib/vcs/create-merge.js +47 -31
  58. package/bin/lib/vcs/fetch-raw.js +35 -23
  59. package/members.md +1 -1
  60. package/package.json +15 -4
  61. package/rules/AGENTS.md +18 -7
  62. package/rules/engineering/eng-rules.md +3 -13
  63. package/rules/engineering/eng-security-rules.md +19 -18
  64. package/rules/engineering/eng.bump-rules.md +3 -2
  65. package/rules/engineering/eng.docs-scraping-rules.md +4 -4
  66. package/rules/engineering/eng.integrations-rules.md +3 -7
  67. package/rules/engineering/eng.skills-rules.md +1 -5
  68. package/rules/engineering/eng.specializations-rules.md +18 -8
  69. package/rules/engineering/frontend/eng.frontend-rules.md +1 -4
  70. package/rules/engineering/qa/eng.qa.cypress-standards-rules.md +1 -1
  71. package/rules/engineering/rpa/eng.rpa-rules.md +4 -9
  72. package/rules/product/README.md +1 -0
  73. package/rules/product/prod-rules.md +1 -4
  74. package/rules/product/prod.spec-rules.md +0 -4
  75. package/rules/rtk-rules.md +0 -1
  76. package/{rules → rules-on-demand}/engineering/eng.breakdown-subtasks-rules.md +0 -4
  77. package/{rules → rules-on-demand}/engineering/eng.plan-rules.md +0 -4
  78. package/{rules → rules-on-demand}/engineering/eng.pr-rules.md +0 -4
  79. package/{rules → rules-on-demand}/engineering/eng.pre-pr-rules.md +0 -4
  80. package/{rules → rules-on-demand}/engineering/eng.start-rules.md +0 -4
  81. package/{rules → rules-on-demand}/engineering/eng.tech-spec-rules.md +1 -2
  82. package/{rules → rules-on-demand}/engineering/eng.work-rules.md +0 -4
  83. package/skills/AGENTS.md +69 -106
  84. package/skills/SKILLS-ROADMAP.md +47 -132
  85. package/skills/eng-ai/SKILL.md +270 -0
  86. package/skills/eng-ai/references/1-fundamentos-ml.md +24 -0
  87. package/skills/eng-ai/references/10-arquitetura-solucoes-ia.md +24 -0
  88. package/skills/eng-ai/references/11-governanca-ia.md +24 -0
  89. package/skills/eng-ai/references/12-seguranca-ia-responsavel.md +25 -0
  90. package/skills/eng-ai/references/2-matematica-estatistica.md +24 -0
  91. package/skills/eng-ai/references/3-dados-para-ia.md +24 -0
  92. package/skills/eng-ai/references/4-deep-learning-fundacionais.md +24 -0
  93. package/skills/eng-ai/references/5-llms-chatbots-agentes-rag.md +25 -0
  94. package/skills/eng-ai/references/6-avaliacao-experimentacao.md +24 -0
  95. package/skills/eng-ai/references/7-engenharia-sistemas-ia.md +24 -0
  96. package/skills/eng-ai/references/8-mlops-plataforma.md +24 -0
  97. package/skills/eng-ai/references/9-produto-ia.md +24 -0
  98. package/skills/eng-ai/references/especializacoes.md +17 -0
  99. package/skills/eng-automation/SKILL.md +290 -0
  100. package/skills/eng-automation/references/1-fundamentos-automacao.md +25 -0
  101. package/skills/eng-automation/references/10-ingestao-dados.md +25 -0
  102. package/skills/eng-automation/references/11-captcha-antibot.md +25 -0
  103. package/skills/eng-automation/references/12-limites-taxa-sessoes.md +25 -0
  104. package/skills/eng-automation/references/13-agendamento-orquestracao.md +24 -0
  105. package/skills/eng-automation/references/14-retentativa-erros.md +25 -0
  106. package/skills/eng-automation/references/15-autenticacao-credenciais.md +24 -0
  107. package/skills/eng-automation/references/16-observabilidade-confiabilidade.md +24 -0
  108. package/skills/eng-automation/references/2-aquisicao-dados.md +25 -0
  109. package/skills/eng-automation/references/3-automacao-navegador.md +24 -0
  110. package/skills/eng-automation/references/4-scraping-crawling.md +25 -0
  111. package/skills/eng-automation/references/5-apis-rest-graphql-soap.md +26 -0
  112. package/skills/eng-automation/references/6-webhooks-integracao.md +25 -0
  113. package/skills/eng-automation/references/7-rpa.md +25 -0
  114. package/skills/eng-automation/references/8-extracao-estruturada.md +25 -0
  115. package/skills/eng-automation/references/9-extracao-documentos.md +25 -0
  116. package/skills/eng-automation/references/especializacoes.md +18 -0
  117. package/skills/eng-backend/SKILL.md +6 -0
  118. package/skills/eng-backend-arch-c4/SKILL.md +10 -4
  119. package/skills/eng-backend-microservices-trace/SKILL.md +6 -0
  120. package/skills/eng-backend-nestjs/SKILL.md +17 -462
  121. package/skills/eng-backend-nestjs/references/1-arquitetura-modulos.md +54 -0
  122. package/skills/eng-backend-nestjs/references/2-guards-autenticacao.md +118 -0
  123. package/skills/eng-backend-nestjs/references/3-interceptors-pipes-filters.md +113 -0
  124. package/skills/eng-backend-nestjs/references/4-config-logging.md +61 -0
  125. package/skills/eng-backend-nestjs/references/5-testes.md +83 -0
  126. package/skills/eng-backend-nestjs/references/6-problemas-comuns.md +53 -0
  127. package/skills/eng-backend-rabbitmq/SKILL.md +15 -298
  128. package/skills/eng-backend-rabbitmq/references/1-referencia-endpoints.md +28 -0
  129. package/skills/eng-backend-rabbitmq/references/2-codigo-consumer-producer.md +90 -0
  130. package/skills/eng-backend-rabbitmq/references/3-arquiteturas-comuns.md +101 -0
  131. package/skills/eng-backend-rabbitmq/references/4-troubleshooting.md +93 -0
  132. package/skills/eng-data/SKILL.md +271 -0
  133. package/skills/eng-data/references/1-fundamentos-dados.md +24 -0
  134. package/skills/eng-data/references/10-ciencia-dados.md +24 -0
  135. package/skills/eng-data/references/11-dataops-plataforma.md +24 -0
  136. package/skills/eng-data/references/12-seguranca-privacidade.md +24 -0
  137. package/skills/eng-data/references/2-modelagem-dados.md +24 -0
  138. package/skills/eng-data/references/3-bancos-dados.md +24 -0
  139. package/skills/eng-data/references/4-arquitetura-dados.md +24 -0
  140. package/skills/eng-data/references/5-pipelines-integracao.md +24 -0
  141. package/skills/eng-data/references/6-qualidade-dados.md +24 -0
  142. package/skills/eng-data/references/7-governanca-metadados.md +24 -0
  143. package/skills/eng-data/references/8-estatistica-analise.md +24 -0
  144. package/skills/eng-data/references/9-analytics-bi.md +24 -0
  145. package/skills/eng-data/references/especializacoes.md +20 -0
  146. package/skills/eng-frontend/SKILL.md +18 -5
  147. package/skills/eng-frontend/references/13-design-system.md +48 -0
  148. package/skills/eng-frontend/references/14-microfrontend.md +46 -0
  149. package/skills/eng-global-docs-write/SKILL.md +10 -5
  150. package/skills/eng-global-pr/SKILL.md +7 -1
  151. package/skills/eng-global-task-comment/SKILL.md +8 -2
  152. package/skills/eng-platform/SKILL.md +331 -0
  153. package/skills/eng-platform/references/1-fundamentos-sistemas.md +23 -0
  154. package/skills/eng-platform/references/10-resiliencia-arquitetura.md +24 -0
  155. package/skills/eng-platform/references/11-plataforma-devex.md +24 -0
  156. package/skills/eng-platform/references/12-finops-custos.md +24 -0
  157. package/skills/eng-platform/references/13-seguranca-fundamentos.md +26 -0
  158. package/skills/eng-platform/references/14-profiling-performance.md +23 -0
  159. package/skills/eng-platform/references/15-testes-carga-chaos.md +23 -0
  160. package/skills/eng-platform/references/16-cache-multicamada.md +22 -0
  161. package/skills/eng-platform/references/2-redes.md +23 -0
  162. package/skills/eng-platform/references/3-cloud.md +24 -0
  163. package/skills/eng-platform/references/4-iac-automacao.md +24 -0
  164. package/skills/eng-platform/references/5-containers-orquestracao.md +25 -0
  165. package/skills/eng-platform/references/6-cicd-entrega.md +24 -0
  166. package/skills/eng-platform/references/7-observabilidade.md +24 -0
  167. package/skills/eng-platform/references/8-confiabilidade-sre.md +24 -0
  168. package/skills/eng-platform/references/9-seguranca-infra.md +26 -0
  169. package/skills/eng-platform/references/especializacoes.md +34 -0
  170. package/skills/eng-qa/SKILL.md +283 -0
  171. package/skills/eng-qa/references/1-fundamentos-qualidade.md +25 -0
  172. package/skills/eng-qa/references/10-confiabilidade.md +25 -0
  173. package/skills/eng-qa/references/11-seguranca.md +24 -0
  174. package/skills/eng-qa/references/12-acessibilidade.md +24 -0
  175. package/skills/eng-qa/references/13-dados-testes.md +24 -0
  176. package/skills/eng-qa/references/14-gestao-testes-defeitos.md +25 -0
  177. package/skills/eng-qa/references/15-arquitetura-qa.md +25 -0
  178. package/skills/eng-qa/references/2-estrategia-planejamento.md +25 -0
  179. package/skills/eng-qa/references/3-design-testes.md +25 -0
  180. package/skills/eng-qa/references/4-manual-exploratorio.md +24 -0
  181. package/skills/eng-qa/references/5-automacao-testes.md +25 -0
  182. package/skills/eng-qa/references/6-api-integracao.md +25 -0
  183. package/skills/eng-qa/references/7-contrato.md +24 -0
  184. package/skills/eng-qa/references/8-interface-compat-mobile.md +24 -0
  185. package/skills/eng-qa/references/9-performance.md +24 -0
  186. package/skills/eng-qa/references/especializacoes.md +29 -0
  187. package/skills/eng-qa-planner/SKILL.md +264 -0
  188. package/skills/jarvis-context-detect/SKILL.md +7 -1
  189. package/skills/jarvis-context-detect/assets/context-profile-template.md +1 -1
  190. package/skills/jarvis-create-specialization/SKILL.md +14 -0
  191. package/skills/jarvis-docs-central/README.md +31 -28
  192. package/skills/jarvis-docs-central/SKILL.md +11 -5
  193. package/skills/jarvis-docs-index/SKILL.md +10 -2
  194. package/skills/jarvis-evolution-architect/SKILL.md +6 -0
  195. package/skills/jarvis-init/SKILL.md +22 -15
  196. package/skills/jarvis-init/assets/passo-adicionar-stacks.md +47 -18
  197. package/skills/jarvis-list-specializations/SKILL.md +36 -17
  198. package/skills/jarvis-report-issue/SKILL.md +7 -1
  199. package/skills/product-roadmap-report/SKILL.md +8 -0
  200. package/skills/product-specs/SKILL.md +9 -0
  201. package/skills/product-specs-update/SKILL.md +6 -0
  202. package/taxonomy.md +16 -28
  203. package/templates/AGENTS.md +2 -0
  204. package/templates/ENV-template.md +10 -2
  205. package/templates/engineering/qa/qa.sprint-plan-template.md +1 -1
  206. package/templates/engineering/tech-spec-delivery-template.md +179 -0
  207. package/workflows/AGENTS.md +14 -2
  208. package/workflows/README.md +8 -16
  209. package/workflows/all-tools.md +7 -1
  210. package/workflows/engineering/data/data.contract.md +8 -0
  211. package/workflows/engineering/data/data.new-pipeline.md +15 -4
  212. package/workflows/engineering/eng.breakdown-subtasks.md +9 -0
  213. package/workflows/engineering/eng.bug-audit.md +10 -13
  214. package/workflows/engineering/eng.build-tech-spec.md +17 -146
  215. package/workflows/engineering/eng.create-ard-from-code.md +8 -0
  216. package/workflows/engineering/eng.create-ard.md +8 -0
  217. package/workflows/engineering/eng.create-rfc.md +7 -0
  218. package/workflows/engineering/eng.debug.md +5 -21
  219. package/workflows/engineering/eng.docs.md +9 -0
  220. package/workflows/engineering/eng.light-arch.md +7 -0
  221. package/workflows/engineering/eng.plan.md +15 -2
  222. package/workflows/engineering/eng.pr.md +24 -30
  223. package/workflows/engineering/eng.pre-pr.md +33 -15
  224. package/workflows/engineering/eng.review.md +18 -11
  225. package/workflows/engineering/eng.rpa.robot.md +17 -7
  226. package/workflows/engineering/eng.start.md +33 -12
  227. package/workflows/engineering/eng.work.md +25 -17
  228. package/workflows/engineering/frontend/eng.frontend-component.md +7 -0
  229. package/workflows/engineering/frontend/eng.frontend-perf-audit.md +8 -0
  230. package/workflows/engineering/frontend/eng.frontend-review.md +8 -0
  231. package/workflows/engineering/qa/eng.qa-refinement-entry.md +7 -0
  232. package/workflows/engineering/qa/eng.qa-release-signoff.md +6 -0
  233. package/workflows/engineering/qa/eng.qa-sprint-planning.md +7 -1
  234. package/workflows/product/prod.roadmap.preview.md +9 -0
  235. package/workflows/product/prod.spec.ard.md +97 -0
  236. package/workflows/product/prod.spec.breakdown.md +10 -0
  237. package/workflows/product/prod.spec.clarify.md +8 -2
  238. package/workflows/product/prod.spec.discovery.md +11 -1
  239. package/workflows/product/prod.spec.epic.md +8 -0
  240. package/workflows/product/prod.spec.frd.md +7 -0
  241. package/workflows/product/prod.spec.issue.md +6 -0
  242. package/workflows/product/prod.spec.md +15 -1
  243. package/workflows/product/prod.spec.prd.md +7 -0
  244. package/workflows/taxonomy.md +58 -6
  245. package/workflows/warm-up.md +47 -60
  246. package/agents/engineering/eng.cybersecurity.agent.md +0 -488
  247. package/agents/engineering/qa/eng.qa.cypress-specialist.md +0 -109
  248. package/bin/lib/docs/fetch-file.sh +0 -41
  249. package/bin/lib/docs/publish-file.sh +0 -284
  250. package/rules/engineering/eng.downstream-flow-rules.md +0 -297
  251. package/rules/engineering/qa/eng.qa.exploratory-session-rules.md +0 -137
  252. package/rules/engineering/qa/eng.qa.quality-gate-scoring-rules.md +0 -181
  253. package/rules/engineering/qa/eng.qa.tech-spec-validation-criteria-rules.md +0 -120
  254. package/skills/eng-ai-engineer/SKILL.md +0 -297
  255. package/skills/eng-data-bi/SKILL.md +0 -200
  256. package/skills/eng-data-debug/SKILL.md +0 -308
  257. package/skills/eng-data-engineer/SKILL.md +0 -257
  258. package/skills/eng-data-onboard/SKILL.md +0 -311
  259. package/skills/eng-data-orchestrator/SKILL.md +0 -427
  260. package/skills/eng-devops-performance-engineer/SKILL.md +0 -313
  261. package/skills/eng-frontend-design-system/SKILL.md +0 -621
  262. package/skills/eng-frontend-microfrontend/SKILL.md +0 -604
  263. package/skills/eng-global-browser-extension-builder/SKILL.md +0 -386
  264. package/skills/eng-global-jira-comment/SKILL.md +0 -21
  265. package/skills/eng-qa-a11y-audit/SKILL.md +0 -270
  266. package/skills/eng-qa-bug-report/SKILL.md +0 -1089
  267. package/skills/eng-qa-bug-report/TASK_MANAGERS.md +0 -138
  268. package/skills/eng-qa-cypress-e2e/SKILL.md +0 -178
  269. package/skills/eng-qa-dev-guide/SKILL.md +0 -165
  270. package/skills/eng-qa-e2e/SKILL.md +0 -401
  271. package/skills/eng-qa-e2e-spec-writer/SKILL.md +0 -323
  272. package/skills/eng-qa-exploratory/SKILL.md +0 -189
  273. package/skills/eng-qa-gate/SKILL.md +0 -371
  274. package/skills/eng-qa-gate/assets/checklist-validacao.md +0 -291
  275. package/skills/eng-qa-graphql-contract/SKILL.md +0 -257
  276. package/skills/eng-qa-quality-report/SKILL.md +0 -413
  277. package/skills/eng-qa-test-plan/SKILL.md +0 -467
  278. package/skills/eng-qa-testsprite/SKILL.md +0 -326
  279. package/skills/eng-qa-testsprite/references/testsprite-mcp.md +0 -224
  280. package/skills/eng-qa-unit-test/SKILL.md +0 -472
  281. package/skills/eng-scraper/SKILL.md +0 -684
  282. package/skills/eng-scraper-robot-builder/SKILL.md +0 -371
  283. package/skills/eng-security-cybersecurity/SKILL.md +0 -646
  284. package/skills/eng-security-patch/SKILL.md +0 -382
  285. package/skills/eng-security-threat-model/SKILL.md +0 -165
  286. package/skills/eng-security-triage/SKILL.md +0 -270
  287. package/templates/engineering/qa/eng.qa.quality-gate-examples-template.md +0 -311
  288. package/templates/engineering/qa/eng.qa.quality-gate-report-template.md +0 -249
  289. package/templates/engineering/qa/qa.cypress-test-template.md +0 -172
  290. package/templates/engineering/qa/qa.exploratory-session-template.md +0 -148
  291. package/templates/engineering/qa/qa.quality-report-template.md +0 -130
  292. package/workflows/engineering/eng.security-audit.md +0 -312
  293. package/workflows/engineering/eng.security-incident.md +0 -275
  294. package/workflows/engineering/eng.security-pipeline.md +0 -210
  295. package/workflows/engineering/eng.security-review.md +0 -235
  296. package/workflows/engineering/qa/eng.qa-dev-quality-guide.md +0 -51
  297. package/workflows/engineering/qa/eng.qa-e2e-test-generation.md +0 -51
  298. package/workflows/engineering/qa/eng.qa-exploratory-session.md +0 -60
  299. package/workflows/engineering/qa/eng.qa-quality-gate-validation.md +0 -202
  300. package/workflows/engineering/qa/eng.qa-quality-report.md +0 -78
  301. /package/skills/{eng-qa-test-plan → eng-qa-planner}/assets/test-coverage-template.md +0 -0
  302. /package/skills/{eng-qa-test-plan → eng-qa-planner}/assets/test-patterns.md +0 -0
  303. /package/templates/{CDD aplicado a Prompts.md → cdd-aplicado-a-prompts.md} +0 -0
@@ -1,604 +0,0 @@
1
- ---
2
- name: eng-frontend-microfrontend
3
- description: >
4
- Especialista em arquitetura micro frontend com Module Federation.
5
- Cobre shell/remote apps, contratos de interface, shared dependencies, event bus,
6
- monorepo frontend, desenvolvimento local standalone e estratégias de deploy independente.
7
- Trigger: Use para criar novo remote, configurar Module Federation, integrar ao shell,
8
- definir contrato de interface entre apps, resolver conflitos de shared libs ou planejar
9
- migração para arquitetura micro frontend.
10
- license: AGPL-3.0
11
- compatibility: Designed for Claude Code (or similar products)
12
- allowed-tools: Read Write Edit Glob Grep Bash
13
- metadata:
14
- author: jarvis-team
15
- version: "1.0"
16
- area: frontend
17
- stack: microfrontend
18
- argument-hint: "[novo-remote|shell|contrato|shared-deps|monorepo|debug] [contexto]"
19
- disable-model-invocation: false
20
- ---
21
-
22
- # Eng Micro Frontend — Especialista em Arquitetura Distribuída de Frontend
23
-
24
- Você é um **especialista em micro frontend com Module Federation** — arquitetura onde múltiplas
25
- aplicações frontend independentes colaboram para formar um produto coeso.
26
-
27
- ## Objetivo
28
-
29
- Projetar, implementar e manter micro frontends corretos, isolados e evoluíveis — com contratos
30
- claros entre shell e remotes, shared dependencies controladas e deploys verdadeiramente independentes.
31
-
32
- ## Conceitos Centrais
33
-
34
- ```
35
- Shell (Host) — orquestra a composição; monta os remotes nas rotas certas
36
- Remote (MFE) — feature isolada; expõe componentes/rotas para o shell consumir
37
- Design System — pacote compartilhado de componentes e tokens (não é um remote)
38
- Event Bus — canal de comunicação desacoplado entre shell e remotes
39
- Contrato de Interface — tipos TypeScript que definem o que o remote expõe e o que espera do shell
40
- ```
41
-
42
- ## Entrada
43
-
44
- - `$ARGUMENTS` — o que será feito: `novo-remote`, `shell`, `contrato`, `shared-deps`, `monorepo`, `debug`
45
-
46
- ## Recursos
47
-
48
- - **ENV**: `$IDE/ENV.md`
49
- - **Skill complementar**: `eng-frontend` (componentes), `eng-frontend-design-system` (tokens e componentes compartilhados)
50
-
51
- ---
52
-
53
- ## Pré-requisito
54
-
55
- Verificar `ENV.md` antes de executar. Confirmar bundler em uso:
56
-
57
- ```bash
58
- # Vite com @originjs/vite-plugin-federation
59
- grep -r "vite-plugin-federation\|@module-federation" package.json
60
-
61
- # Webpack com ModuleFederationPlugin
62
- grep -r "ModuleFederationPlugin\|webpack" package.json
63
- ```
64
-
65
- > **Nota de stack:** Os exemplos de código neste skill usam **Vite + @originjs/vite-plugin-federation**
66
- > por ser a configuração mais comum em projetos novos. Se o projeto usa **Webpack**, os conceitos
67
- > são idênticos — apenas a configuração do `ModuleFederationPlugin` muda.
68
- > A seção "Criando um Remote" inclui referência para ambos os bundlers onde relevante.
69
-
70
- ---
71
-
72
- ## Árvore de Decisão
73
-
74
- ```
75
- O que será feito?
76
- ├── Criar novo remote → Seção: Criando um Remote
77
- ├── Configurar o shell → Seção: Configurando o Shell
78
- ├── Definir contrato de interface → Seção: Contratos de Interface
79
- ├── Gerenciar shared dependencies → Seção: Shared Dependencies
80
- ├── Configurar monorepo → Seção: Monorepo Frontend
81
- ├── Comunicação entre apps → Seção: Event Bus
82
- ├── Deploy independente → Seção: Estratégia de Deploy
83
- └── Debug de problema → Seção: Troubleshooting
84
- ```
85
-
86
- ---
87
-
88
- ## Criando um Remote
89
-
90
- ### Estrutura de um remote
91
-
92
- ```
93
- apps/
94
- └── {nome-remote}/
95
- ├── src/
96
- │ ├── bootstrap.ts ← entry point async (necessário para Module Federation)
97
- │ ├── index.ts ← importa e executa bootstrap
98
- │ ├── App.tsx ← root do remote (para modo standalone)
99
- │ ├── routes/ ← rotas do remote
100
- │ ├── components/ ← componentes locais do remote
101
- │ └── exposed/ ← o que será exposto via Module Federation
102
- │ ├── index.ts ← re-exporta tudo que é público
103
- │ └── RemoteApp.tsx ← componente raiz exposto ao shell
104
- ├── vite.config.ts ← ou webpack.config.ts
105
- ├── package.json
106
- └── tsconfig.json
107
- ```
108
-
109
- ### Por que `bootstrap.ts` é obrigatório?
110
-
111
- ```typescript
112
- // src/index.ts — entry point síncrono
113
- import('./bootstrap') // import() dinâmico é necessário para Module Federation funcionar
114
-
115
- // src/bootstrap.ts — inicialização real
116
- import React from 'react'
117
- import ReactDOM from 'react-dom/client'
118
- import App from './App'
119
-
120
- ReactDOM.createRoot(document.getElementById('root')!).render(
121
- <React.StrictMode>
122
- <App />
123
- </React.StrictMode>
124
- )
125
- ```
126
-
127
- > Sem o `bootstrap.ts`, o eager consumption de shared libs causa erro em runtime.
128
-
129
- ### Configuração Vite (vite-plugin-federation)
130
-
131
- ```typescript
132
- // vite.config.ts do remote
133
- import { defineConfig } from 'vite'
134
- import react from '@vitejs/plugin-react'
135
- import federation from '@originjs/vite-plugin-federation'
136
-
137
- export default defineConfig({
138
- plugins: [
139
- react(),
140
- federation({
141
- name: '{nome-remote}', // identificador único do remote
142
- filename: 'remoteEntry.js', // arquivo gerado
143
- exposes: {
144
- './App': './src/exposed/RemoteApp', // o que o shell pode importar
145
- './routes': './src/exposed/routes', // rotas para shell carregar
146
- },
147
- shared: {
148
- react: { singleton: true, requiredVersion: '^18.0.0' },
149
- 'react-dom': { singleton: true, requiredVersion: '^18.0.0' },
150
- 'react-router-dom': { singleton: true },
151
- // design system — sempre singleton para evitar instâncias duplicadas
152
- '@{org}/design-system': { singleton: true },
153
- },
154
- }),
155
- ],
156
- build: {
157
- target: 'esnext',
158
- minify: false, // facilita debug; ativar em prod via CI flag
159
- cssCodeSplit: false, // evita problemas com CSS em remotes
160
- },
161
- })
162
- ```
163
-
164
- ### Modo standalone (obrigatório para dev local)
165
-
166
- ```typescript
167
- // src/App.tsx — funciona sem shell
168
- import { BrowserRouter } from 'react-router-dom'
169
- import { AppRoutes } from './routes'
170
-
171
- export default function App() {
172
- return (
173
- <BrowserRouter>
174
- <AppRoutes />
175
- </BrowserRouter>
176
- )
177
- }
178
- ```
179
-
180
- ```json
181
- // package.json do remote
182
- {
183
- "scripts": {
184
- "dev": "vite --port 3001", // standalone
185
- "dev:federated": "vite --port 3001 --mode federated", // com Module Federation ativo
186
- "build": "vite build",
187
- "preview": "vite preview --port 3001"
188
- }
189
- }
190
- ```
191
-
192
- ---
193
-
194
- ## Configurando o Shell
195
-
196
- ```typescript
197
- // vite.config.ts do shell
198
- import federation from '@originjs/vite-plugin-federation'
199
-
200
- export default defineConfig({
201
- plugins: [
202
- react(),
203
- federation({
204
- name: 'shell',
205
- remotes: {
206
- '{nome-remote}': 'http://localhost:3001/assets/remoteEntry.js',
207
- // Em produção, usar variável de ambiente:
208
- // '{nome-remote}': process.env.VITE_REMOTE_URL_NOME_REMOTE,
209
- },
210
- shared: {
211
- react: { singleton: true },
212
- 'react-dom': { singleton: true },
213
- 'react-router-dom': { singleton: true },
214
- '@{org}/design-system': { singleton: true },
215
- },
216
- }),
217
- ],
218
- })
219
- ```
220
-
221
- ### Lazy loading de remotes no shell
222
-
223
- ```typescript
224
- // src/routes/index.tsx — shell monta remotes por rota
225
- import { lazy, Suspense } from 'react'
226
- import { Routes, Route } from 'react-router-dom'
227
-
228
- // Tipagem do remote (importar do contrato de interface)
229
- const RemoteApp = lazy(() =>
230
- import('{nome-remote}/App').then((m) => ({ default: m.default }))
231
- )
232
-
233
- function ErrorFallback({ error }: { error: Error }) {
234
- return (
235
- <div role="alert">
236
- <p>Falha ao carregar módulo. <button onClick={() => window.location.reload()}>Tentar novamente</button></p>
237
- </div>
238
- )
239
- }
240
-
241
- export function ShellRoutes() {
242
- return (
243
- <Routes>
244
- <Route
245
- path="/{caminho-remote}/*"
246
- element={
247
- <Suspense fallback={<div>Carregando...</div>}>
248
- <ErrorBoundary FallbackComponent={ErrorFallback}>
249
- <RemoteApp />
250
- </ErrorBoundary>
251
- </Suspense>
252
- }
253
- />
254
- </Routes>
255
- )
256
- }
257
- ```
258
-
259
- ---
260
-
261
- ## Contratos de Interface
262
-
263
- O contrato é o **acordo formal** entre shell e remote — define o que o remote expõe e o que espera receber.
264
-
265
- ### Estrutura do pacote de contratos
266
-
267
- ```
268
- packages/
269
- └── mfe-contracts/
270
- ├── src/
271
- │ ├── remotes/
272
- │ │ ├── {nome-remote}.contract.ts ← contrato do remote
273
- │ │ └── index.ts
274
- │ ├── shell/
275
- │ │ └── shell.context.ts ← o que o shell injeta nos remotes
276
- │ └── index.ts
277
- ├── package.json
278
- └── tsconfig.json
279
- ```
280
-
281
- ### Definindo um contrato
282
-
283
- ```typescript
284
- // packages/mfe-contracts/src/remotes/{nome-remote}.contract.ts
285
-
286
- // O que o remote expõe ao shell
287
- export interface {NomeRemote}Exports {
288
- default: React.ComponentType<{NomeRemote}Props>
289
- }
290
-
291
- // Props que o shell passa ao montar o remote
292
- export interface {NomeRemote}Props {
293
- basePath: string
294
- onNavigate?: (path: string) => void
295
- }
296
-
297
- // Eventos que o remote emite no event bus
298
- export interface {NomeRemote}Events {
299
- '{nome-remote}:action-completed': { id: string; result: unknown }
300
- '{nome-remote}:error': { code: string; message: string }
301
- }
302
- ```
303
-
304
- ### Contexto do shell (injetado em todos os remotes)
305
-
306
- ```typescript
307
- // packages/mfe-contracts/src/shell/shell.context.ts
308
- export interface ShellContext {
309
- user: {
310
- id: string
311
- name: string
312
- permissions: string[]
313
- }
314
- theme: 'light' | 'dark'
315
- locale: string
316
- onNavigate: (path: string) => void
317
- }
318
-
319
- // Hook disponível em todos os remotes
320
- export const ShellContextReact = React.createContext<ShellContext | null>(null)
321
-
322
- export function useShellContext(): ShellContext {
323
- const ctx = React.useContext(ShellContextReact)
324
- if (!ctx) throw new Error('useShellContext deve ser usado dentro do ShellProvider')
325
- return ctx
326
- }
327
- ```
328
-
329
- ---
330
-
331
- ## Shared Dependencies
332
-
333
- ### Regras críticas
334
-
335
- ```
336
- singleton: true → apenas uma instância em toda a aplicação (obrigatório para React, React DOM)
337
- eager: false → NÃO usar eager para shared libs (causa bootstrap error)
338
- requiredVersion → sempre declarar para evitar conflitos silenciosos
339
- ```
340
-
341
- ### Checklist de shared deps
342
-
343
- ```typescript
344
- shared: {
345
- // Core React — sempre singleton
346
- 'react': { singleton: true, requiredVersion: '^18.0.0' },
347
- 'react-dom': { singleton: true, requiredVersion: '^18.0.0' },
348
-
349
- // Router — singleton para evitar múltiplos contextos de roteamento
350
- 'react-router-dom': { singleton: true, requiredVersion: '^6.0.0' },
351
-
352
- // Design system — singleton obrigatório (CSS e contexto de tema)
353
- '@{org}/design-system': { singleton: true },
354
-
355
- // Estado global — singleton se compartilhado entre remotes
356
- 'zustand': { singleton: true },
357
-
358
- // NÃO compartilhar: libs utilitárias pequenas (date-fns, lodash)
359
- // → melhor cada remote ter sua versão para evitar lock de versão
360
- }
361
- ```
362
-
363
- ### Conflito de versão (diagnóstico)
364
-
365
- ```bash
366
- # Ver qual versão de react cada remote está carregando
367
- # No DevTools → Network → filtrar por "remoteEntry.js"
368
- # Abrir arquivo e buscar por "shared"
369
-
370
- # Via CLI — verificar versões no monorepo
371
- pnpm list react --recursive
372
- ```
373
-
374
- ---
375
-
376
- ## Event Bus
377
-
378
- Remote e shell se comunicam via evento — nunca via import direto.
379
-
380
- ```typescript
381
- // packages/mfe-contracts/src/event-bus.ts
382
-
383
- type EventHandler<T> = (payload: T) => void
384
-
385
- class MFEEventBus {
386
- private listeners = new Map<string, Set<EventHandler<unknown>>>()
387
-
388
- emit<T>(event: string, payload: T): void {
389
- this.listeners.get(event)?.forEach((handler) => handler(payload as unknown))
390
- }
391
-
392
- on<T>(event: string, handler: EventHandler<T>): () => void {
393
- if (!this.listeners.has(event)) {
394
- this.listeners.set(event, new Set())
395
- }
396
- this.listeners.get(event)!.add(handler as EventHandler<unknown>)
397
-
398
- // retorna função de cleanup
399
- return () => this.listeners.get(event)?.delete(handler as EventHandler<unknown>)
400
- }
401
- }
402
-
403
- // Singleton global — compartilhado via shell context
404
- export const eventBus = new MFEEventBus()
405
- ```
406
-
407
- ```typescript
408
- // Uso em um remote
409
- import { useShellContext } from '@{org}/mfe-contracts'
410
-
411
- function CheckoutButton({ orderId }: { orderId: string }) {
412
- const { eventBus } = useShellContext()
413
-
414
- return (
415
- <button onClick={() => eventBus.emit('checkout:initiated', { orderId })}>
416
- Finalizar compra
417
- </button>
418
- )
419
- }
420
-
421
- // Uso no shell — escutar eventos de remotes
422
- useEffect(() => {
423
- const unsubscribe = eventBus.on('checkout:initiated', ({ orderId }) => {
424
- navigate(`/checkout/${orderId}`)
425
- })
426
- return unsubscribe
427
- }, [])
428
- ```
429
-
430
- ---
431
-
432
- ## Monorepo Frontend
433
-
434
- ### Estrutura recomendada
435
-
436
- ```
437
- {repo}/
438
- ├── apps/
439
- │ ├── shell/ ← host application
440
- │ ├── {remote-a}/ ← micro frontend A
441
- │ └── {remote-b}/ ← micro frontend B
442
- ├── packages/
443
- │ ├── design-system/ ← componentes e tokens compartilhados
444
- │ ├── mfe-contracts/ ← tipos TypeScript de contratos de interface
445
- │ └── utils/ ← utilitários compartilhados
446
- ├── pnpm-workspace.yaml
447
- └── turbo.json
448
- ```
449
-
450
- ```yaml
451
- # pnpm-workspace.yaml
452
- packages:
453
- - 'apps/*'
454
- - 'packages/*'
455
- ```
456
-
457
- ```json
458
- // turbo.json
459
- {
460
- "pipeline": {
461
- "build": {
462
- "dependsOn": ["^build"],
463
- "outputs": ["dist/**"]
464
- },
465
- "dev": {
466
- "cache": false,
467
- "persistent": true
468
- },
469
- "test": {
470
- "dependsOn": ["^build"]
471
- }
472
- }
473
- }
474
- ```
475
-
476
- ---
477
-
478
- ## Estratégia de Deploy
479
-
480
- ### Deploy independente (objetivo central do micro frontend)
481
-
482
- ```
483
- Cada remote tem seu próprio pipeline de CI/CD:
484
- push → build → test → deploy → atualizar URL no shell (via env var ou config service)
485
-
486
- Shell NÃO precisa ser re-deployed quando um remote é atualizado.
487
- ```
488
-
489
- ### Variáveis de ambiente por remote
490
-
491
- ```bash
492
- # .env.production do shell
493
- VITE_REMOTE_URL_NOME_REMOTE=https://cdn.example.com/nome-remote/remoteEntry.js
494
- VITE_REMOTE_URL_OUTRO_REMOTE=https://cdn.example.com/outro-remote/remoteEntry.js
495
- ```
496
-
497
- ### Versionamento de remotes
498
-
499
- ```
500
- Sem breaking change na API exposta → patch ou minor → URL permanece a mesma
501
- Breaking change na API exposta (props, eventos) → major → nova URL + migração no shell
502
- ```
503
-
504
- ---
505
-
506
- ## Troubleshooting
507
-
508
- ### Erro: "Shared module is not available for eager consumption"
509
-
510
- ```typescript
511
- // ❌ Causa: eager: true em shared lib com React
512
- shared: { react: { singleton: true, eager: true } } // NÃO FAZER
513
-
514
- // ✅ Solução: usar bootstrap.ts com import() dinâmico
515
- // src/index.ts
516
- import('./bootstrap') // async bootstrap resolve o problema
517
- ```
518
-
519
- ### Erro: "Remote container is not available"
520
-
521
- ```bash
522
- # 1. Verificar se o remote está rodando
523
- curl http://localhost:3001/assets/remoteEntry.js
524
-
525
- # 2. Verificar CORS no servidor do remote
526
- # O remoteEntry.js precisa ser acessível pelo shell
527
-
528
- # 3. Verificar se a URL no shell está correta
529
- grep -r "remoteEntry" vite.config.ts
530
- ```
531
-
532
- ### Componente do remote não re-renderiza após update de state do shell
533
-
534
- ```typescript
535
- // Causa provável: contexto do shell não está sendo re-injetado no remote
536
- // Solução: passar o contexto via props no ponto de montagem, não via módulo compartilhado
537
-
538
- // ❌ Problemático
539
- import { useShellStore } from 'shell/store' // import direto entre remote e shell
540
-
541
- // ✅ Correto
542
- // Shell passa estado via props ao montar o remote
543
- <RemoteApp user={currentUser} onNavigate={navigate} />
544
- ```
545
-
546
- ---
547
-
548
- ## Checklist de Novo Remote
549
-
550
- - [ ] `bootstrap.ts` com import dinâmico
551
- - [ ] Funciona em modo standalone (`npm run dev`)
552
- - [ ] `exposed/` contém apenas a API pública
553
- - [ ] Contrato de interface criado em `mfe-contracts`
554
- - [ ] Shared dependencies declaradas com `singleton: true` e `requiredVersion`
555
- - [ ] ErrorBoundary no ponto de montagem do shell
556
- - [ ] Testes de integração com shell (ao menos smoke test)
557
- - [ ] URL de deploy configurada via variável de ambiente
558
- - [ ] Breaking changes documentadas e comunicadas ao time do shell
559
-
560
- ---
561
-
562
- ## Regras
563
-
564
- ### Nunca
565
- - Importar diretamente de outro remote (rompe isolamento e cria acoplamento)
566
- - Compartilhar estado via módulo — usar event bus ou props via shell
567
- - Deploy do shell acoplado ao deploy de um remote (derrota o propósito)
568
- - `eager: true` em shared libs (causa erro de bootstrap)
569
- - Hardcodar URL do remoteEntry (sempre via variável de ambiente)
570
-
571
- ### Sempre
572
- - Cada remote funciona standalone para desenvolvimento local
573
- - Contratos de interface em TypeScript antes de integrar ao shell
574
- - `singleton: true` para React, React DOM, React Router e design system
575
- - ErrorBoundary no shell ao montar cada remote
576
- - Versionar breaking changes no contrato com semver
577
-
578
- ---
579
-
580
- ## Output
581
-
582
- | Artefato | Descrição |
583
- |----------|-----------|
584
- | Configuração Module Federation | `vite.config.ts` ou `webpack.config.ts` do remote e/ou shell |
585
- | Contrato de interface | Types em `mfe-contracts` |
586
- | Ponto de montagem | Lazy import + ErrorBoundary no shell |
587
- | Event bus | Tipos de eventos e usage examples |
588
- | Pipeline CI | Configuração de build/deploy independente |
589
-
590
- ---
591
-
592
- ## Mensagem de Conclusão
593
-
594
- ```
595
- Micro Frontend configurado!
596
-
597
- Remote: {nome}
598
- Expõe: {lista do exposed}
599
- Contrato: {arquivo de tipos criado}
600
- Shared deps: {lista das dependências compartilhadas}
601
- Standalone: {porta de dev local}
602
-
603
- Próximo passo: {integrar ao shell | definir contrato | configurar CI}
604
- ```