jarvis-ai-framework 2.1.1 → 3.2.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 (266) hide show
  1. package/AGENTS.md +14 -115
  2. package/agents/AGENTS.md +11 -23
  3. package/agents/README.md +27 -129
  4. package/agents/engineering/data/eng.data-engineer.agent.md +11 -34
  5. package/agents/engineering/eng.advisor.agent.md +56 -0
  6. package/agents/engineering/eng.agent.md +14 -24
  7. package/agents/engineering/eng.bug-hunter.md +7 -15
  8. package/agents/engineering/eng.dev-code-reviewer.md +1 -1
  9. package/agents/engineering/eng.frontend.agent.md +3 -7
  10. package/agents/engineering/eng.rpa.agent.md +2 -8
  11. package/agents/engineering/qa/eng.qa.quality-strategist.md +6 -11
  12. package/agents/engineering/qa/eng.qa.test-architect.md +8 -18
  13. package/agents/engineering/qa/eng.qa.test-planner.md +10 -14
  14. package/agents/engineering/qa/eng.qa.testing-engineer.md +91 -24
  15. package/agents/product/prod.discovery-interviewer.md +3 -3
  16. package/bin/README.md +142 -0
  17. package/bin/commands/docs-publish.js +105 -141
  18. package/bin/commands/docs-sync.js +66 -104
  19. package/bin/commands/info.js +7 -27
  20. package/bin/commands/init.js +23 -51
  21. package/bin/commands/install-rtk.js +9 -3
  22. package/bin/commands/list.js +5 -18
  23. package/bin/commands/map.js +20 -5
  24. package/bin/commands/qa-signoff.js +58 -55
  25. package/bin/commands/tokens.js +14 -17
  26. package/bin/commands/whoami.js +30 -26
  27. package/bin/jarvis.js +9 -163
  28. package/bin/lib/auth/session.js +20 -20
  29. package/bin/lib/cli/program.js +219 -0
  30. package/bin/lib/cli/shared-options.js +29 -0
  31. package/bin/lib/config/constants.js +59 -2
  32. package/bin/lib/config/ide-config.js +4 -8
  33. package/bin/lib/core/profile-filter.js +4 -1
  34. package/bin/lib/core/scanner.js +3 -29
  35. package/bin/lib/core/sync-engine.js +21 -14
  36. package/bin/lib/core/token-report.js +12 -2
  37. package/bin/lib/docs/fetch-file.js +39 -0
  38. package/bin/lib/docs/publish-file.js +194 -0
  39. package/bin/lib/docs/redis-cache.js +49 -0
  40. package/bin/lib/docs/validate-frontmatter.js +9 -39
  41. package/bin/lib/env-loader.js +11 -34
  42. package/bin/lib/flow-map/parse.js +11 -5
  43. package/bin/lib/flow-map/render.js +5 -2
  44. package/bin/lib/flow-map/tree.js +59 -10
  45. package/bin/lib/tasks/comment.js +40 -35
  46. package/bin/lib/utils/frontmatter.js +57 -0
  47. package/bin/lib/utils/git-parser.js +4 -6
  48. package/bin/lib/utils/npmrc-parser.js +6 -13
  49. package/bin/lib/utils/paths.js +2 -4
  50. package/bin/lib/utils/ui.js +3 -9
  51. package/bin/lib/vcs/api.js +25 -41
  52. package/bin/lib/vcs/create-issue.js +49 -33
  53. package/bin/lib/vcs/create-merge.js +47 -31
  54. package/bin/lib/vcs/fetch-raw.js +35 -23
  55. package/package.json +14 -5
  56. package/rules/engineering/eng-rules.md +1 -1
  57. package/rules/engineering/eng-security-rules.md +18 -16
  58. package/rules/engineering/eng.bump-rules.md +3 -2
  59. package/rules/engineering/eng.docs-scraping-rules.md +4 -4
  60. package/rules/engineering/eng.integrations-rules.md +6 -4
  61. package/rules/engineering/eng.skills-rules.md +1 -1
  62. package/rules/engineering/eng.specializations-rules.md +18 -4
  63. package/rules/engineering/frontend/eng.frontend-rules.md +1 -4
  64. package/rules/engineering/qa/eng.qa.cypress-standards-rules.md +1 -1
  65. package/rules/engineering/rpa/eng.rpa-rules.md +4 -9
  66. package/rules-on-demand/engineering/eng.pre-pr-rules.md +1 -1
  67. package/rules-on-demand/engineering/eng.start-rules.md +2 -0
  68. package/skills/AGENTS.md +52 -87
  69. package/skills/SKILLS-ROADMAP.md +47 -128
  70. package/skills/eng-ai/SKILL.md +270 -0
  71. package/skills/eng-ai/references/1-fundamentos-ml.md +24 -0
  72. package/skills/eng-ai/references/10-arquitetura-solucoes-ia.md +24 -0
  73. package/skills/eng-ai/references/11-governanca-ia.md +24 -0
  74. package/skills/eng-ai/references/12-seguranca-ia-responsavel.md +25 -0
  75. package/skills/eng-ai/references/2-matematica-estatistica.md +24 -0
  76. package/skills/eng-ai/references/3-dados-para-ia.md +24 -0
  77. package/skills/eng-ai/references/4-deep-learning-fundacionais.md +24 -0
  78. package/skills/eng-ai/references/5-llms-chatbots-agentes-rag.md +25 -0
  79. package/skills/eng-ai/references/6-avaliacao-experimentacao.md +24 -0
  80. package/skills/eng-ai/references/7-engenharia-sistemas-ia.md +24 -0
  81. package/skills/eng-ai/references/8-mlops-plataforma.md +24 -0
  82. package/skills/eng-ai/references/9-produto-ia.md +24 -0
  83. package/skills/eng-ai/references/especializacoes.md +17 -0
  84. package/skills/eng-automation/SKILL.md +290 -0
  85. package/skills/eng-automation/references/1-fundamentos-automacao.md +25 -0
  86. package/skills/eng-automation/references/10-ingestao-dados.md +25 -0
  87. package/skills/eng-automation/references/11-captcha-antibot.md +25 -0
  88. package/skills/eng-automation/references/12-limites-taxa-sessoes.md +25 -0
  89. package/skills/eng-automation/references/13-agendamento-orquestracao.md +24 -0
  90. package/skills/eng-automation/references/14-retentativa-erros.md +25 -0
  91. package/skills/eng-automation/references/15-autenticacao-credenciais.md +24 -0
  92. package/skills/eng-automation/references/16-observabilidade-confiabilidade.md +24 -0
  93. package/skills/eng-automation/references/2-aquisicao-dados.md +25 -0
  94. package/skills/eng-automation/references/3-automacao-navegador.md +24 -0
  95. package/skills/eng-automation/references/4-scraping-crawling.md +25 -0
  96. package/skills/eng-automation/references/5-apis-rest-graphql-soap.md +26 -0
  97. package/skills/eng-automation/references/6-webhooks-integracao.md +25 -0
  98. package/skills/eng-automation/references/7-rpa.md +25 -0
  99. package/skills/eng-automation/references/8-extracao-estruturada.md +25 -0
  100. package/skills/eng-automation/references/9-extracao-documentos.md +25 -0
  101. package/skills/eng-automation/references/especializacoes.md +18 -0
  102. package/skills/eng-backend-nestjs/SKILL.md +1 -1
  103. package/skills/eng-data/SKILL.md +271 -0
  104. package/skills/eng-data/references/1-fundamentos-dados.md +24 -0
  105. package/skills/eng-data/references/10-ciencia-dados.md +24 -0
  106. package/skills/eng-data/references/11-dataops-plataforma.md +24 -0
  107. package/skills/eng-data/references/12-seguranca-privacidade.md +24 -0
  108. package/skills/eng-data/references/2-modelagem-dados.md +24 -0
  109. package/skills/eng-data/references/3-bancos-dados.md +24 -0
  110. package/skills/eng-data/references/4-arquitetura-dados.md +24 -0
  111. package/skills/eng-data/references/5-pipelines-integracao.md +24 -0
  112. package/skills/eng-data/references/6-qualidade-dados.md +24 -0
  113. package/skills/eng-data/references/7-governanca-metadados.md +24 -0
  114. package/skills/eng-data/references/8-estatistica-analise.md +24 -0
  115. package/skills/eng-data/references/9-analytics-bi.md +24 -0
  116. package/skills/eng-data/references/especializacoes.md +20 -0
  117. package/skills/eng-frontend/SKILL.md +12 -5
  118. package/skills/eng-frontend/references/13-design-system.md +48 -0
  119. package/skills/eng-frontend/references/14-microfrontend.md +46 -0
  120. package/skills/eng-global-task-comment/SKILL.md +3 -3
  121. package/skills/eng-platform/SKILL.md +331 -0
  122. package/skills/eng-platform/references/1-fundamentos-sistemas.md +23 -0
  123. package/skills/eng-platform/references/10-resiliencia-arquitetura.md +24 -0
  124. package/skills/eng-platform/references/11-plataforma-devex.md +24 -0
  125. package/skills/eng-platform/references/12-finops-custos.md +24 -0
  126. package/skills/eng-platform/references/13-seguranca-fundamentos.md +26 -0
  127. package/skills/eng-platform/references/14-profiling-performance.md +23 -0
  128. package/skills/eng-platform/references/15-testes-carga-chaos.md +23 -0
  129. package/skills/eng-platform/references/16-cache-multicamada.md +22 -0
  130. package/skills/eng-platform/references/2-redes.md +23 -0
  131. package/skills/eng-platform/references/3-cloud.md +24 -0
  132. package/skills/eng-platform/references/4-iac-automacao.md +24 -0
  133. package/skills/eng-platform/references/5-containers-orquestracao.md +25 -0
  134. package/skills/eng-platform/references/6-cicd-entrega.md +24 -0
  135. package/skills/eng-platform/references/7-observabilidade.md +24 -0
  136. package/skills/eng-platform/references/8-confiabilidade-sre.md +24 -0
  137. package/skills/eng-platform/references/9-seguranca-infra.md +26 -0
  138. package/skills/eng-platform/references/especializacoes.md +34 -0
  139. package/skills/eng-qa/SKILL.md +283 -0
  140. package/skills/eng-qa/references/1-fundamentos-qualidade.md +25 -0
  141. package/skills/eng-qa/references/10-confiabilidade.md +25 -0
  142. package/skills/eng-qa/references/11-seguranca.md +24 -0
  143. package/skills/eng-qa/references/12-acessibilidade.md +24 -0
  144. package/skills/eng-qa/references/13-dados-testes.md +24 -0
  145. package/skills/eng-qa/references/14-gestao-testes-defeitos.md +25 -0
  146. package/skills/eng-qa/references/15-arquitetura-qa.md +25 -0
  147. package/skills/eng-qa/references/2-estrategia-planejamento.md +25 -0
  148. package/skills/eng-qa/references/3-design-testes.md +25 -0
  149. package/skills/eng-qa/references/4-manual-exploratorio.md +24 -0
  150. package/skills/eng-qa/references/5-automacao-testes.md +25 -0
  151. package/skills/eng-qa/references/6-api-integracao.md +25 -0
  152. package/skills/eng-qa/references/7-contrato.md +24 -0
  153. package/skills/eng-qa/references/8-interface-compat-mobile.md +24 -0
  154. package/skills/eng-qa/references/9-performance.md +24 -0
  155. package/skills/eng-qa/references/especializacoes.md +29 -0
  156. package/skills/eng-qa-planner/SKILL.md +264 -0
  157. package/skills/jarvis-context-detect/SKILL.md +1 -1
  158. package/skills/jarvis-context-detect/assets/context-profile-template.md +1 -1
  159. package/skills/jarvis-create-specialization/SKILL.md +8 -0
  160. package/skills/jarvis-docs-central/README.md +31 -28
  161. package/skills/jarvis-docs-central/SKILL.md +5 -5
  162. package/skills/jarvis-init/SKILL.md +9 -8
  163. package/skills/jarvis-init/assets/passo-adicionar-stacks.md +47 -18
  164. package/skills/jarvis-list-specializations/SKILL.md +30 -17
  165. package/skills/jarvis-report-issue/SKILL.md +1 -1
  166. package/taxonomy.md +4 -16
  167. package/templates/AGENTS.md +2 -0
  168. package/templates/ENV-template.md +20 -2
  169. package/templates/engineering/advisor-template.md +65 -0
  170. package/templates/engineering/architecture-template.md +52 -4
  171. package/templates/engineering/qa/qa.sprint-plan-template.md +1 -1
  172. package/workflows/AGENTS.md +3 -1
  173. package/workflows/README.md +0 -10
  174. package/workflows/engineering/data/data.new-pipeline.md +6 -5
  175. package/workflows/engineering/eng.bug-audit.md +4 -14
  176. package/workflows/engineering/eng.debug.md +4 -20
  177. package/workflows/engineering/eng.plan.md +4 -26
  178. package/workflows/engineering/eng.pr.md +13 -63
  179. package/workflows/engineering/eng.pre-pr.md +14 -51
  180. package/workflows/engineering/eng.review.md +7 -13
  181. package/workflows/engineering/eng.rpa.robot.md +3 -9
  182. package/workflows/engineering/eng.start.md +37 -32
  183. package/workflows/engineering/eng.work.md +17 -40
  184. package/workflows/engineering/qa/eng.qa-sprint-planning.md +1 -1
  185. package/workflows/product/prod.spec.discovery.md +2 -2
  186. package/workflows/warm-up.md +35 -63
  187. package/agents/engineering/eng.cybersecurity.agent.md +0 -486
  188. package/agents/engineering/qa/eng.qa.cypress-specialist.md +0 -112
  189. package/bin/lib/docs/fetch-file.sh +0 -41
  190. package/bin/lib/docs/publish-file.sh +0 -284
  191. package/rules/engineering/qa/eng.qa.exploratory-session-rules.md +0 -137
  192. package/rules/engineering/qa/eng.qa.quality-gate-scoring-rules.md +0 -181
  193. package/rules/engineering/qa/eng.qa.tech-spec-validation-criteria-rules.md +0 -120
  194. package/skills/eng-ai-engineer/SKILL.md +0 -303
  195. package/skills/eng-data-bi/SKILL.md +0 -206
  196. package/skills/eng-data-debug/SKILL.md +0 -314
  197. package/skills/eng-data-engineer/SKILL.md +0 -266
  198. package/skills/eng-data-onboard/SKILL.md +0 -317
  199. package/skills/eng-data-orchestrator/SKILL.md +0 -433
  200. package/skills/eng-devops-performance-engineer/SKILL.md +0 -319
  201. package/skills/eng-frontend-design-system/SKILL.md +0 -155
  202. package/skills/eng-frontend-design-system/references/1-estrutura-pacote.md +0 -57
  203. package/skills/eng-frontend-design-system/references/2-tokens.md +0 -116
  204. package/skills/eng-frontend-design-system/references/3-componentes.md +0 -165
  205. package/skills/eng-frontend-design-system/references/4-storybook.md +0 -85
  206. package/skills/eng-frontend-design-system/references/5-auditoria-versionamento.md +0 -76
  207. package/skills/eng-frontend-microfrontend/SKILL.md +0 -164
  208. package/skills/eng-frontend-microfrontend/references/1-criando-remote.md +0 -109
  209. package/skills/eng-frontend-microfrontend/references/2-configurando-shell.md +0 -70
  210. package/skills/eng-frontend-microfrontend/references/3-contratos-interface.md +0 -73
  211. package/skills/eng-frontend-microfrontend/references/4-shared-dependencies.md +0 -48
  212. package/skills/eng-frontend-microfrontend/references/5-event-bus.md +0 -59
  213. package/skills/eng-frontend-microfrontend/references/6-monorepo-deploy.md +0 -77
  214. package/skills/eng-frontend-microfrontend/references/7-troubleshooting.md +0 -45
  215. package/skills/eng-global-browser-extension-builder/SKILL.md +0 -392
  216. package/skills/eng-global-jira-comment/SKILL.md +0 -27
  217. package/skills/eng-qa-a11y-audit/SKILL.md +0 -276
  218. package/skills/eng-qa-bug-report/SKILL.md +0 -877
  219. package/skills/eng-qa-bug-report/TASK_MANAGERS.md +0 -138
  220. package/skills/eng-qa-bug-report/references/1-integracao-task-managers.md +0 -148
  221. package/skills/eng-qa-bug-report/references/2-exemplos-de-uso.md +0 -46
  222. package/skills/eng-qa-bug-report/references/3-bug-to-test.md +0 -45
  223. package/skills/eng-qa-cypress-e2e/SKILL.md +0 -184
  224. package/skills/eng-qa-dev-guide/SKILL.md +0 -173
  225. package/skills/eng-qa-e2e/SKILL.md +0 -407
  226. package/skills/eng-qa-e2e-spec-writer/SKILL.md +0 -329
  227. package/skills/eng-qa-exploratory/SKILL.md +0 -196
  228. package/skills/eng-qa-gate/SKILL.md +0 -377
  229. package/skills/eng-qa-gate/assets/checklist-validacao.md +0 -291
  230. package/skills/eng-qa-graphql-contract/SKILL.md +0 -263
  231. package/skills/eng-qa-quality-report/SKILL.md +0 -419
  232. package/skills/eng-qa-test-plan/SKILL.md +0 -473
  233. package/skills/eng-qa-testsprite/SKILL.md +0 -332
  234. package/skills/eng-qa-testsprite/references/testsprite-mcp.md +0 -224
  235. package/skills/eng-qa-unit-test/SKILL.md +0 -478
  236. package/skills/eng-scraper/SKILL.md +0 -260
  237. package/skills/eng-scraper/references/1-puppeteer.md +0 -140
  238. package/skills/eng-scraper/references/2-playwright-cheerio-pdf.md +0 -82
  239. package/skills/eng-scraper/references/3-anti-bot.md +0 -94
  240. package/skills/eng-scraper/references/4-resiliencia-etl-monitoramento.md +0 -137
  241. package/skills/eng-scraper-robot-builder/SKILL.md +0 -377
  242. package/skills/eng-security-cybersecurity/SKILL.md +0 -250
  243. package/skills/eng-security-cybersecurity/references/1-owasp-top-10.md +0 -331
  244. package/skills/eng-security-cybersecurity/references/2-secrets-management.md +0 -31
  245. package/skills/eng-security-cybersecurity/references/3-input-validation.md +0 -43
  246. package/skills/eng-security-cybersecurity/references/4-compliance.md +0 -20
  247. package/skills/eng-security-patch/SKILL.md +0 -388
  248. package/skills/eng-security-threat-model/SKILL.md +0 -171
  249. package/skills/eng-security-triage/SKILL.md +0 -276
  250. package/templates/engineering/qa/eng.qa.quality-gate-examples-template.md +0 -311
  251. package/templates/engineering/qa/eng.qa.quality-gate-report-template.md +0 -249
  252. package/templates/engineering/qa/qa.cypress-test-template.md +0 -172
  253. package/templates/engineering/qa/qa.exploratory-session-template.md +0 -148
  254. package/templates/engineering/qa/qa.quality-report-template.md +0 -130
  255. package/workflows/engineering/eng.security-audit.md +0 -319
  256. package/workflows/engineering/eng.security-incident.md +0 -281
  257. package/workflows/engineering/eng.security-pipeline.md +0 -219
  258. package/workflows/engineering/eng.security-review.md +0 -241
  259. package/workflows/engineering/qa/eng.qa-dev-quality-guide.md +0 -57
  260. package/workflows/engineering/qa/eng.qa-e2e-test-generation.md +0 -57
  261. package/workflows/engineering/qa/eng.qa-exploratory-session.md +0 -68
  262. package/workflows/engineering/qa/eng.qa-quality-gate-validation.md +0 -209
  263. package/workflows/engineering/qa/eng.qa-quality-report.md +0 -85
  264. /package/skills/{eng-qa-test-plan → eng-qa-planner}/assets/test-coverage-template.md +0 -0
  265. /package/skills/{eng-qa-test-plan → eng-qa-planner}/assets/test-patterns.md +0 -0
  266. /package/templates/{CDD aplicado a Prompts.md → cdd-aplicado-a-prompts.md} +0 -0
@@ -1,18 +1,11 @@
1
- import { loadEnv, resolveEnvPath } from '../lib/env-loader.js'
2
- import { execSync } from 'node:child_process'
3
- import { promisify } from 'node:util'
4
- import { exec } from 'node:child_process'
5
- import { existsSync } from 'node:fs'
6
- import { join, dirname } from 'node:path'
7
- import { fileURLToPath } from 'node:url'
8
-
9
- const execAsync = promisify(exec)
10
- const __filename = fileURLToPath(import.meta.url)
11
- const __dirname = dirname(__filename)
1
+ import { loadEnv, resolveEnvPath } from "../lib/env-loader.js";
2
+ import { existsSync } from "node:fs";
3
+ import { publishFile } from "../lib/docs/publish-file.js";
4
+ import { logger, configureFromFlags } from "../lib/utils/logger.js";
12
5
 
13
6
  /**
14
7
  * Publica documento no central-docs via GitLab API (branch + MR)
15
- *
8
+ *
16
9
  * @param {Object} flags - Flags do comando
17
10
  * @param {string} flags.file - Caminho do arquivo local
18
11
  * @param {string} flags.tipo - Tipo do documento (prd|frd|ard|rfc)
@@ -22,163 +15,134 @@ const __dirname = dirname(__filename)
22
15
  * @param {string} flags.envFile - Path customizado do ENV.md
23
16
  */
24
17
  export async function docsPublish(flags = {}) {
25
- const { file, tipo, feature, squad: squadOverride, workspace: workspaceOverride } = flags
26
-
18
+ configureFromFlags(flags);
19
+
20
+ const { file, tipo, feature, squad: squadOverride, workspace: workspaceOverride } = flags;
21
+
27
22
  // Validar parâmetros obrigatórios
28
23
  if (!file || !tipo || !feature) {
29
- console.error('❌ Parâmetros obrigatórios faltando\n')
30
- console.error('Uso: jarvis docs publish --file <path> --tipo <prd|frd|ard|rfc|swagger|qa-report> --feature <slug> [--squad <squad>] [--workspace <workspace>]\n')
31
- console.error('Exemplo:')
32
- console.error(' jarvis docs publish \\')
33
- console.error(' --file ./docs/engineering/ard-api-wallet.md \\')
34
- console.error(' --tipo ard \\')
35
- console.error(' --feature api-wallet-auth-jwt')
36
- console.error('')
37
- console.error(' # Publicar Swagger/OpenAPI:')
38
- console.error(' jarvis docs publish \\')
39
- console.error(' --file ./docs/engineering/swagger/api-wallet.yaml \\')
40
- console.error(' --tipo swagger \\')
41
- console.error(' --feature api-wallet')
42
- console.error('')
43
- console.error(' # Com override de squad/workspace:')
44
- console.error(' jarvis docs publish \\')
45
- console.error(' --file ./docs/engineering/ard-api-wallet.md \\')
46
- console.error(' --tipo ard \\')
47
- console.error(' --feature api-wallet-auth-jwt \\')
48
- console.error(' --squad squad-driver \\')
49
- console.error(' --workspace meu-workspace')
50
- process.exit(1)
24
+ logger.error("❌ Parâmetros obrigatórios faltando\n");
25
+ logger.error(
26
+ "Uso: jarvis docs publish --file <path> --tipo <prd|frd|ard|rfc|swagger|qa-report> --feature <slug> [--squad <squad>] [--workspace <workspace>]\n"
27
+ );
28
+ logger.error("Exemplo:");
29
+ logger.error(" jarvis docs publish \\");
30
+ logger.error(" --file ./docs/engineering/ard-api-wallet.md \\");
31
+ logger.error(" --tipo ard \\");
32
+ logger.error(" --feature api-wallet-auth-jwt");
33
+ logger.error("");
34
+ logger.error(" # Publicar Swagger/OpenAPI:");
35
+ logger.error(" jarvis docs publish \\");
36
+ logger.error(" --file ./docs/engineering/swagger/api-wallet.yaml \\");
37
+ logger.error(" --tipo swagger \\");
38
+ logger.error(" --feature api-wallet");
39
+ logger.error("");
40
+ logger.error(" # Com override de squad/workspace:");
41
+ logger.error(" jarvis docs publish \\");
42
+ logger.error(" --file ./docs/engineering/ard-api-wallet.md \\");
43
+ logger.error(" --tipo ard \\");
44
+ logger.error(" --feature api-wallet-auth-jwt \\");
45
+ logger.error(" --squad core \\");
46
+ logger.error(" --workspace meu-workspace");
47
+ process.exit(1);
51
48
  }
52
-
49
+
53
50
  // Validar tipo
54
- const validTypes = ['prd', 'frd', 'ard', 'rfc', 'swagger', 'qa-report']
51
+ const validTypes = ["prd", "frd", "ard", "rfc", "swagger", "qa-report"];
55
52
  if (!validTypes.includes(tipo)) {
56
- console.error(`❌ Tipo inválido: ${tipo}`)
57
- console.error(`Tipos válidos: ${validTypes.join(', ')}`)
58
- process.exit(1)
53
+ logger.error(`❌ Tipo inválido: ${tipo}`);
54
+ logger.error(`Tipos válidos: ${validTypes.join(", ")}`);
55
+ process.exit(1);
59
56
  }
60
-
57
+
61
58
  // Validar se arquivo existe
62
59
  if (!existsSync(file)) {
63
- console.error(`❌ Arquivo não encontrado: ${file}`)
64
- process.exit(1)
60
+ logger.error(`❌ Arquivo não encontrado: ${file}`);
61
+ process.exit(1);
65
62
  }
66
-
67
- const cwd = process.cwd()
68
-
63
+
64
+ const cwd = process.cwd();
65
+
69
66
  // Resolver path do ENV.md (suporta --ide e --env-file)
70
- let envPath
67
+ let envPath;
71
68
  try {
72
- const resolved = resolveEnvPath(cwd, flags)
73
- envPath = resolved.path
69
+ const resolved = resolveEnvPath(cwd, flags);
70
+ envPath = resolved.path;
74
71
  } catch (error) {
75
- console.error('❌ Erro ao resolver ENV.md:', error.message)
76
- process.exit(1)
72
+ logger.error("❌ Erro ao resolver ENV.md:", error.message);
73
+ process.exit(1);
77
74
  }
78
-
75
+
79
76
  // Carregar ENV.md
80
- let env
77
+ let env;
81
78
  try {
82
- env = loadEnv(cwd, envPath)
79
+ env = loadEnv(cwd, envPath);
83
80
  } catch (error) {
84
- console.error('❌ Erro ao carregar ENV.md:', error.message)
85
- process.exit(1)
81
+ logger.error("❌ Erro ao carregar ENV.md:", error.message);
82
+ process.exit(1);
86
83
  }
87
-
84
+
88
85
  // Verificar se central-docs está configurado
89
86
  if (!env.CENTRAL_DOCS_REPO) {
90
- console.error('❌ CENTRAL_DOCS_REPO não configurado no ENV.md')
91
- console.error('\nConfigure a URL do repositório central:')
92
- console.error(' CENTRAL_DOCS_REPO=https://gitlab.com/org/central-docs.git')
93
- process.exit(1)
87
+ logger.error("❌ CENTRAL_DOCS_REPO não configurado no ENV.md");
88
+ logger.error("\nConfigure a URL do repositório central:");
89
+ logger.error(" CENTRAL_DOCS_REPO=https://gitlab.com/org/central-docs.git");
90
+ process.exit(1);
94
91
  }
95
-
92
+
96
93
  // Usar override de squad/workspace se fornecido, senão usar do ENV.md
97
- const squad = squadOverride || env.SQUAD
98
- const workspace = workspaceOverride || env.WORKSPACE
99
-
94
+ const squad = squadOverride || env.SQUAD;
95
+ const workspace = workspaceOverride || env.WORKSPACE;
96
+
100
97
  if (!squad || !workspace) {
101
- console.error('❌ SQUAD ou WORKSPACE não definidos')
102
- console.error('\nOpções:')
103
- console.error(' 1. Definir no ENV.md:')
104
- console.error(' SQUAD=squad-driver')
105
- console.error(' WORKSPACE=meu-workspace')
106
- console.error('')
107
- console.error(' 2. Passar via flags:')
108
- console.error(' --squad squad-driver --workspace meu-workspace')
109
- process.exit(1)
110
- }
111
-
112
- // Verificar se script publish-file.sh existe
113
- // Usar path relativo ao módulo, não ao cwd do usuário
114
- const publishScript = join(__dirname, '../lib/docs/publish-file.sh')
115
- if (!existsSync(publishScript)) {
116
- console.error('❌ Script não encontrado:', publishScript)
117
- process.exit(1)
98
+ logger.error("❌ SQUAD ou WORKSPACE não definidos");
99
+ logger.error("\nOpções:");
100
+ logger.error(" 1. Definir no ENV.md:");
101
+ logger.error(" SQUAD=core");
102
+ logger.error(" WORKSPACE=meu-workspace");
103
+ logger.error("");
104
+ logger.error(" 2. Passar via flags:");
105
+ logger.error(" --squad core --workspace meu-workspace");
106
+ process.exit(1);
118
107
  }
119
-
120
- console.log(`📤 Publicando ${tipo.toUpperCase()} ${feature}...\n`)
121
-
108
+
109
+ logger.info(`📤 Publicando ${tipo.toUpperCase()} ${feature}...\n`);
110
+
122
111
  try {
123
- // Exportar variáveis de ambiente para o script bash
124
- const envVars = {
125
- ...process.env,
126
- CENTRAL_DOCS_REPO: env.CENTRAL_DOCS_REPO,
127
- CENTRAL_DOCS_TARGET_BRANCH: env.CENTRAL_DOCS_TARGET_BRANCH || 'dev',
128
- CENTRAL_DOCS_CACHE_TTL: env.CENTRAL_DOCS_CACHE_TTL || '3600',
129
- SQUAD_OVERRIDE: squad,
130
- WORKSPACE_OVERRIDE: workspace
131
- }
132
-
133
- const { stdout, stderr } = await execAsync(
134
- `bash "${publishScript}" "${file}" "${tipo}" "${feature}"`,
135
- {
136
- env: envVars,
137
- maxBuffer: 10 * 1024 * 1024 // 10MB buffer para output grande
138
- }
139
- )
140
-
141
- // Exibir output do script
142
- if (stdout) {
143
- console.log(stdout)
144
- }
145
-
146
- if (stderr) {
147
- console.warn('⚠️ Avisos:', stderr)
148
- }
149
-
112
+ await publishFile({
113
+ localFile: file,
114
+ tipo,
115
+ feature,
116
+ squad,
117
+ workspace,
118
+ repo: env.CENTRAL_DOCS_REPO,
119
+ targetBranch: env.CENTRAL_DOCS_TARGET_BRANCH || "dev",
120
+ cacheTtl: env.CENTRAL_DOCS_CACHE_TTL || "3600",
121
+ });
150
122
  } catch (error) {
151
- console.error('\n❌ Erro ao publicar documento\n')
152
-
153
- // Exibir output de erro do script
154
- if (error.stdout) {
155
- console.log(error.stdout)
156
- }
157
-
158
- if (error.stderr) {
159
- console.error(error.stderr)
160
- }
161
-
123
+ logger.error("\n❌ Erro ao publicar documento\n");
124
+ logger.error(error.message);
125
+
162
126
  // Dicas de troubleshooting
163
- console.error('\n💡 Troubleshooting:\n')
164
-
165
- if (error.message.includes('Token GitLab')) {
166
- console.error('1. Configure o token GitLab no .npmrc:')
167
- console.error(' //gitlab.com/api/v4/packages/npm/:_authToken=seu-token\n')
127
+ logger.error("\n💡 Troubleshooting:\n");
128
+
129
+ if (error.message.includes("Token GitLab")) {
130
+ logger.error("1. Configure o token GitLab no .npmrc:");
131
+ logger.error(" //gitlab.com/api/v4/packages/npm/:_authToken=seu-token\n");
168
132
  }
169
-
170
- if (error.message.includes('Campos obrigatórios')) {
171
- console.error('2. Verifique o frontmatter do documento:')
172
- console.error(` Tipo ${tipo} requer campos específicos no YAML\n`)
133
+
134
+ if (error.message.includes("Campos obrigatórios")) {
135
+ logger.error("2. Verifique o frontmatter do documento:");
136
+ logger.error(` Tipo ${tipo} requer campos específicos no YAML\n`);
173
137
  }
174
-
175
- if (error.message.includes('401') || error.message.includes('403')) {
176
- console.error('4. Verifique permissões no GitLab:')
177
- console.error(' Token precisa de scopes: api, read_api, write_repository\n')
138
+
139
+ if (error.message.includes("401") || error.message.includes("403")) {
140
+ logger.error("4. Verifique permissões no GitLab:");
141
+ logger.error(" Token precisa de scopes: api, read_api, write_repository\n");
178
142
  }
179
-
180
- console.error('Para mais detalhes, execute com --verbose')
181
-
182
- process.exit(1)
143
+
144
+ logger.error("Para mais detalhes, execute com --verbose");
145
+
146
+ process.exit(1);
183
147
  }
184
148
  }
@@ -1,139 +1,101 @@
1
- import { loadEnv, resolveEnvPath } from '../lib/env-loader.js'
2
- import { exec } from 'node:child_process'
3
- import { promisify } from 'node:util'
4
- import { existsSync } from 'node:fs'
5
- import { join, dirname } from 'node:path'
6
- import { fileURLToPath } from 'node:url'
7
-
8
- const execAsync = promisify(exec)
9
- const __filename = fileURLToPath(import.meta.url)
10
- const __dirname = dirname(__filename)
1
+ import { loadEnv, resolveEnvPath } from "../lib/env-loader.js";
2
+ import { fetchFile } from "../lib/docs/fetch-file.js";
3
+ import { logger, configureFromFlags } from "../lib/utils/logger.js";
11
4
 
12
5
  /**
13
6
  * Sincroniza documentação do central-docs
14
7
  * Executado automaticamente em /warm-up
15
- *
8
+ *
16
9
  * @param {Object} flags - Flags do comando
17
- * @param {boolean} flags.silent - Modo silencioso (sem output)
18
- * @param {boolean} flags.verbose - Modo verbose (mostra conteúdo)
10
+ * @param {boolean} flags.silent - Modo silencioso (nem erros aparecem)
11
+ * @param {boolean} flags.quiet - Só erros aparecem
12
+ * @param {boolean} flags.verbose - Mostra o conteúdo completo retornado
19
13
  * @param {string} flags.envFile - Path customizado do ENV.md
20
14
  */
21
15
  export async function docsSync(flags = {}) {
22
- const cwd = process.cwd()
23
-
16
+ configureFromFlags(flags);
17
+
18
+ const cwd = process.cwd();
19
+
24
20
  // Resolver path do ENV.md (suporta --ide e --env-file)
25
- let envPath
21
+ let envPath;
26
22
  try {
27
- const resolved = resolveEnvPath(cwd, flags)
28
- envPath = resolved.path
23
+ const resolved = resolveEnvPath(cwd, flags);
24
+ envPath = resolved.path;
29
25
  } catch (error) {
30
- if (!flags.silent) {
31
- console.error('❌ Erro ao resolver ENV.md:', error.message)
32
- }
33
- process.exit(1)
26
+ logger.error("❌ Erro ao resolver ENV.md:", error.message);
27
+ process.exit(1);
34
28
  }
35
-
29
+
36
30
  // Carregar ENV.md
37
- let env
31
+ let env;
38
32
  try {
39
- env = loadEnv(cwd, envPath)
33
+ env = loadEnv(cwd, envPath);
40
34
  } catch (error) {
41
- if (!flags.silent) {
42
- console.error('❌ Erro ao carregar ENV.md:', error.message)
43
- }
44
- process.exit(1)
35
+ logger.error("❌ Erro ao carregar ENV.md:", error.message);
36
+ process.exit(1);
45
37
  }
46
-
38
+
47
39
  // Verificar se central-docs está configurado
48
40
  if (!env.CENTRAL_DOCS_REPO) {
49
- if (!flags.silent) {
50
- console.log('ℹ️ Central docs não configurado (CENTRAL_DOCS_REPO vazio)')
51
- }
52
- return
41
+ logger.info("ℹ️ Central docs não configurado (CENTRAL_DOCS_REPO vazio)");
42
+ return;
53
43
  }
54
-
55
- const { SQUAD, WORKSPACE, CENTRAL_DOCS_REF = 'main' } = env
56
-
44
+
45
+ const { SQUAD, WORKSPACE, CENTRAL_DOCS_REF = "main" } = env;
46
+
57
47
  if (!SQUAD || !WORKSPACE) {
58
- if (!flags.silent) {
59
- console.error('❌ SQUAD ou WORKSPACE não definidos no ENV.md')
60
- }
61
- process.exit(1)
62
- }
63
-
64
- if (!flags.silent) {
65
- console.log(`🔄 Sincronizando docs do squad ${SQUAD}...`)
48
+ logger.error("❌ SQUAD ou WORKSPACE não definidos no ENV.md");
49
+ process.exit(1);
66
50
  }
67
51
 
68
- // Verificar se script fetch-file.sh existe
69
- // Usar path relativo ao módulo, não ao cwd do usuário
70
- const fetchScript = join(__dirname, '../lib/docs/fetch-file.sh')
71
- if (!existsSync(fetchScript)) {
72
- console.error('❌ Script não encontrado:', fetchScript)
73
- process.exit(1)
74
- }
52
+ logger.info(`🔄 Sincronizando docs do squad ${SQUAD}...`);
75
53
 
76
54
  // Buscar index.md do squad
77
- const indexPath = `${SQUAD}/index.md`
78
-
55
+ const indexPath = `${SQUAD}/index.md`;
56
+
79
57
  try {
80
- // Exportar variáveis de ambiente para o script bash
81
- const envVars = {
82
- ...process.env,
83
- CENTRAL_DOCS_REPO: env.CENTRAL_DOCS_REPO,
84
- CENTRAL_DOCS_CACHE_TTL: env.CENTRAL_DOCS_CACHE_TTL || '3600'
85
- }
86
-
87
- const { stdout, stderr } = await execAsync(
88
- `bash "${fetchScript}" "${indexPath}" "${CENTRAL_DOCS_REF}"`,
89
- { env: envVars }
90
- )
91
-
92
- if (!flags.silent) {
93
- console.log('✅ Docs sincronizados')
94
- }
95
-
96
- if (flags.verbose && stdout) {
97
- console.log('\n📄 Conteúdo do index.md:\n')
98
- console.log(stdout)
58
+ const content = await fetchFile(indexPath, CENTRAL_DOCS_REF, {
59
+ repo: env.CENTRAL_DOCS_REPO,
60
+ cacheTtl: env.CENTRAL_DOCS_CACHE_TTL || "3600",
61
+ });
62
+
63
+ logger.info("✅ Docs sincronizados");
64
+
65
+ if (content) {
66
+ logger.debug("\n📄 Conteúdo do index.md:\n");
67
+ logger.debug(content);
99
68
  }
100
-
69
+
101
70
  // Parsear index.md para contar documentos
102
- if (!flags.silent && stdout) {
103
- const prdCount = (stdout.match(/\[prd-.*\.md\]/g) || []).length
104
- const frdCount = (stdout.match(/\[frd-.*\.md\]/g) || []).length
105
- const ardCount = (stdout.match(/\[ard-.*\.md\]/g) || []).length
106
- const rfcCount = (stdout.match(/\[rfc-.*\.md\]/g) || []).length
107
-
108
- const total = prdCount + frdCount + ardCount + rfcCount
109
-
71
+ if (content) {
72
+ const prdCount = (content.match(/\[prd-.*\.md\]/g) || []).length;
73
+ const frdCount = (content.match(/\[frd-.*\.md\]/g) || []).length;
74
+ const ardCount = (content.match(/\[ard-.*\.md\]/g) || []).length;
75
+ const rfcCount = (content.match(/\[rfc-.*\.md\]/g) || []).length;
76
+
77
+ const total = prdCount + frdCount + ardCount + rfcCount;
78
+
110
79
  if (total > 0) {
111
- console.log(`📊 ${total} documentos disponíveis:`)
112
- if (prdCount > 0) console.log(` - ${prdCount} PRD(s)`)
113
- if (frdCount > 0) console.log(` - ${frdCount} FRD(s)`)
114
- if (ardCount > 0) console.log(` - ${ardCount} ARD(s)`)
115
- if (rfcCount > 0) console.log(` - ${rfcCount} RFC(s)`)
80
+ logger.info(`📊 ${total} documentos disponíveis:`);
81
+ if (prdCount > 0) logger.info(` - ${prdCount} PRD(s)`);
82
+ if (frdCount > 0) logger.info(` - ${frdCount} FRD(s)`);
83
+ if (ardCount > 0) logger.info(` - ${ardCount} ARD(s)`);
84
+ if (rfcCount > 0) logger.info(` - ${rfcCount} RFC(s)`);
116
85
  }
117
86
  }
118
-
119
- if (stderr && !flags.silent) {
120
- console.warn('⚠️ Avisos:', stderr)
121
- }
122
-
123
87
  } catch (error) {
124
- if (!flags.silent) {
125
- console.error('❌ Erro ao sincronizar docs:', error.message)
126
-
127
- // Dicas de troubleshooting
128
- if (error.message.includes('Token GitLab')) {
129
- console.error('\n💡 Configure o token GitLab no .npmrc:')
130
- console.error(' //gitlab.com/api/v4/packages/npm/:_authToken=seu-token')
131
- } else if (error.message.includes('não encontrado')) {
132
- console.error('\n💡 Verifique se o squad existe no central-docs:')
133
- console.error(` ${SQUAD}/index.md`)
134
- }
88
+ logger.error("❌ Erro ao sincronizar docs:", error.message);
89
+
90
+ // Dicas de troubleshooting
91
+ if (error.message.includes("Token GitLab")) {
92
+ logger.error("\n💡 Configure o token GitLab no .npmrc:");
93
+ logger.error(" //gitlab.com/api/v4/packages/npm/:_authToken=seu-token");
94
+ } else if (error.message.includes("não encontrado")) {
95
+ logger.error("\n💡 Verifique se o squad existe no central-docs:");
96
+ logger.error(` ${SQUAD}/index.md`);
135
97
  }
136
98
 
137
- process.exit(1)
99
+ process.exit(1);
138
100
  }
139
101
  }
@@ -1,14 +1,5 @@
1
1
  import { findPrompt, discoverAll } from "../lib/core/scanner.js";
2
- import {
3
- showBanner,
4
- RED,
5
- GREEN,
6
- BLUE,
7
- YELLOW,
8
- CYAN,
9
- DIM,
10
- NC,
11
- } from "../lib/utils/ui.js";
2
+ import { showBanner, RED, GREEN, BLUE, YELLOW, CYAN, DIM, NC } from "../lib/utils/ui.js";
12
3
  import { logger } from "../lib/utils/logger.js";
13
4
 
14
5
  export async function info(target) {
@@ -40,15 +31,12 @@ export async function info(target) {
40
31
 
41
32
  if (!prompt) {
42
33
  logger.error(`${RED}❌ Não encontrado: ${YELLOW}${target}${NC}`);
43
- logger.info(
44
- `${DIM}Execute: ${YELLOW}jarvis list${DIM} para ver prompts disponíveis${NC}\n`,
45
- );
34
+ logger.info(`${DIM}Execute: ${YELLOW}jarvis list${DIM} para ver prompts disponíveis${NC}\n`);
46
35
  process.exit(1);
47
36
  }
48
37
 
49
38
  // Icon based on type
50
- const icon =
51
- prompt.type === "agent" ? "🤖" : prompt.type === "skill" ? "⚡" : "🔄";
39
+ const icon = prompt.type === "agent" ? "🤖" : prompt.type === "skill" ? "⚡" : "🔄";
52
40
 
53
41
  logger.info(`${CYAN}${icon} ${prompt.type.toUpperCase()}/${prompt.id}${NC}`);
54
42
  logger.info("");
@@ -67,21 +55,13 @@ export async function info(target) {
67
55
  if (hasDeps) {
68
56
  logger.info(` ${YELLOW}📦 Dependências:${NC}`);
69
57
  if (deps.rules.length)
70
- logger.info(
71
- ` ${BLUE}Rules:${NC} ${DIM}${deps.rules.join(", ")}${NC}`,
72
- );
58
+ logger.info(` ${BLUE}Rules:${NC} ${DIM}${deps.rules.join(", ")}${NC}`);
73
59
  if (deps.templates.length)
74
- logger.info(
75
- ` ${BLUE}Templates:${NC} ${DIM}${deps.templates.join(", ")}${NC}`,
76
- );
60
+ logger.info(` ${BLUE}Templates:${NC} ${DIM}${deps.templates.join(", ")}${NC}`);
77
61
  if (deps.agents.length)
78
- logger.info(
79
- ` ${BLUE}Agents:${NC} ${DIM}${deps.agents.join(", ")}${NC}`,
80
- );
62
+ logger.info(` ${BLUE}Agents:${NC} ${DIM}${deps.agents.join(", ")}${NC}`);
81
63
  if (deps.skills.length)
82
- logger.info(
83
- ` ${BLUE}Skills:${NC} ${DIM}${deps.skills.join(", ")}${NC}`,
84
- );
64
+ logger.info(` ${BLUE}Skills:${NC} ${DIM}${deps.skills.join(", ")}${NC}`);
85
65
  logger.info("");
86
66
  }
87
67
  }