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,137 +0,0 @@
1
- # Resiliência, ETL leve e monitoramento de mudanças
2
-
3
- > Parte do skill `eng-scraper`. Leia este arquivo quando a tarefa precisar de retry, pipeline ETL leve ou monitoramento de mudanças no site.
4
-
5
- ### Resiliência e Retry
6
-
7
- ```typescript
8
- // ✅ Retry com backoff exponencial
9
- async function withRetry<T>(
10
- fn: () => Promise<T>,
11
- options: { attempts?: number; baseDelay?: number; label?: string } = {}
12
- ): Promise<T> {
13
- const { attempts = 3, baseDelay = 1000, label = 'operação' } = options
14
-
15
- for (let attempt = 1; attempt <= attempts; attempt++) {
16
- try {
17
- return await fn()
18
- } catch (error) {
19
- if (attempt === attempts) throw error
20
-
21
- const delay = baseDelay * Math.pow(2, attempt - 1)
22
- console.warn(`${label} falhou (tentativa ${attempt}/${attempts}). Retry em ${delay}ms...`)
23
- await new Promise((resolve) => setTimeout(resolve, delay))
24
- }
25
- }
26
-
27
- throw new Error('Unreachable')
28
- }
29
-
30
- // Uso
31
- const data = await withRetry(
32
- () => scrapePage(url),
33
- { attempts: 3, baseDelay: 2000, label: `scrape ${url}` }
34
- )
35
- ```
36
-
37
- #### Detectar mudanças de estrutura
38
-
39
- ```typescript
40
- // ✅ Validar que os dados extraídos fazem sentido
41
- function validateExtractedData(data: unknown[], schema: { field: string; required: boolean }[]) {
42
- const requiredFields = schema.filter((s) => s.required).map((s) => s.field)
43
-
44
- const issues = data.filter((item) =>
45
- requiredFields.some((field) => !item[field as keyof typeof item])
46
- )
47
-
48
- if (issues.length > 0) {
49
- const pct = Math.round((issues.length / data.length) * 100)
50
- console.warn(`ALERTA: ${issues.length}/${data.length} (${pct}%) itens com campos obrigatórios ausentes`)
51
- console.warn('Possível mudança de estrutura no site alvo. Verificar seletores.')
52
- }
53
-
54
- return data.filter((item) => requiredFields.every((f) => item[f as keyof typeof item]))
55
- }
56
- ```
57
-
58
- ### Pipelines ETL Leve
59
-
60
- #### Estrutura básica de pipeline
61
-
62
- ```typescript
63
- interface PipelineConfig {
64
- sources: string[] // URLs a processar
65
- transform: (raw: unknown) => unknown // transformação de dados
66
- output: string // caminho do arquivo de saída
67
- concurrency?: number // requests simultâneos
68
- }
69
-
70
- async function runPipeline(config: PipelineConfig) {
71
- console.log(`Iniciando pipeline: ${config.sources.length} fontes`)
72
-
73
- // Extract
74
- const rawData = await scrapeUrls(config.sources)
75
-
76
- // Transform
77
- const transformed = rawData
78
- .flat()
79
- .map(config.transform)
80
- .filter(Boolean)
81
-
82
- // Deduplicação por URL ou ID
83
- const deduped = [...new Map(transformed.map((item) => [item.id ?? item.url, item])).values()]
84
-
85
- // Load
86
- await saveToFile(config.output, deduped)
87
- console.log(`Pipeline concluído: ${deduped.length} registros salvos em ${config.output}`)
88
-
89
- return deduped
90
- }
91
- ```
92
-
93
- #### Formatos de saída
94
-
95
- ```typescript
96
- import { writeFileSync } from 'fs'
97
- import { stringify } from 'csv-stringify/sync'
98
-
99
- function saveToFile(path: string, data: unknown[]) {
100
- if (path.endsWith('.json')) {
101
- writeFileSync(path, JSON.stringify(data, null, 2), 'utf-8')
102
- } else if (path.endsWith('.csv')) {
103
- const csv = stringify(data as object[], { header: true })
104
- writeFileSync(path, csv, 'utf-8')
105
- } else if (path.endsWith('.ndjson')) {
106
- const ndjson = data.map((d) => JSON.stringify(d)).join('\n')
107
- writeFileSync(path, ndjson, 'utf-8')
108
- }
109
- }
110
- ```
111
-
112
- ### Monitoramento de Mudanças
113
-
114
- ```typescript
115
- // ✅ Detectar mudanças em páginas monitoradas
116
- async function checkForChanges(url: string, storePath: string) {
117
- const current = await scrapeWithCheerio(url)
118
- const currentHash = crypto.createHash('md5').update(JSON.stringify(current)).digest('hex')
119
-
120
- let previous: { hash: string; data: unknown; timestamp: string } | null = null
121
- try {
122
- previous = JSON.parse(readFileSync(storePath, 'utf-8'))
123
- } catch {
124
- // primeira execução
125
- }
126
-
127
- if (previous?.hash === currentHash) {
128
- console.log('Sem mudanças detectadas.')
129
- return { changed: false }
130
- }
131
-
132
- // Persistir estado atual
133
- writeFileSync(storePath, JSON.stringify({ hash: currentHash, data: current, timestamp: new Date().toISOString() }))
134
-
135
- return { changed: true, current, previous: previous?.data }
136
- }
137
- ```
@@ -1,377 +0,0 @@
1
- ---
2
- name: eng-scraper-robot-builder
3
- description: >
4
- Converte descrição de passos em linguagem natural (feitos pelo produto/dev manualmente no site)
5
- em código Playwright TypeScript pronto para produção. Usa Stagehand para explorar a página real,
6
- descobrir seletores via observe() e gerar automação resiliente.
7
- Trigger: Use quando precisar criar um robô de automação a partir de um fluxo descrito manualmente,
8
- converter passo a passo do produto em código, ou gerar scripts Playwright sem escrever seletores.
9
- license: AGPL-3.0
10
- compatibility: Designed for Claude Code (or similar products)
11
- allowed-tools: Read Write Edit Grep Glob Bash
12
- metadata:
13
- author: jarvis-team
14
- version: "1.0"
15
- area: scraper
16
- # Campos Claude Code-specific (não fazem parte da spec oficial agentskills.io):
17
- argument-hint: "[url-alvo] [descrição do fluxo]"
18
- disable-model-invocation: false
19
- ---
20
-
21
- # Eng Scraper Robot Builder - Gerador de Automação Playwright
22
-
23
- Você é um **especialista em automação de browsers** que transforma descrições em linguagem natural de fluxos manuais em código Playwright TypeScript limpo e resiliente, usando Stagehand como ferramenta exploratória.
24
-
25
- ## Objetivo
26
-
27
- Receber o passo a passo que o produto ou dev fez manualmente em um site e gerar código Playwright pronto para produção — sem precisar inspecionar o HTML manualmente.
28
-
29
- **Stagehand é exploratório aqui**: ele roda os passos na página real, descobre os seletores via `observe()`, e o output final é **Playwright puro** — sem dependência de LLM em runtime.
30
-
31
- ## Entrada
32
-
33
- - `$ARGUMENTS` - URL do site alvo + descrição do fluxo a automatizar
34
- - Exemplo: `https://app.exemplo.com "fazer login, ir para pedidos, filtrar por status pendente, exportar CSV"`
35
-
36
- ## Recursos
37
-
38
- - **Referência**: https://docs.stagehand.dev
39
- - **Saída**: script TypeScript em `scripts/robots/{nome-do-robo}.ts` ou no repositório atual
40
-
41
- ---
42
-
43
- ## Pré-requisito
44
-
45
- ### Dependências necessárias no projeto
46
-
47
- ```bash
48
- npm install @browserbasehq/stagehand playwright zod dotenv
49
- ```
50
-
51
- ### Variáveis de ambiente
52
-
53
- ```bash
54
- # .env
55
- BROWSERBASE_API_KEY=... # Chave da Browserbase (cloud) — OU rodar local
56
- BROWSERBASE_PROJECT_ID=... # ID do projeto na Browserbase
57
- OPENAI_API_KEY=... # Modelo padrão para observe/act (ou ANTHROPIC_API_KEY)
58
- ```
59
-
60
- > Se não tiver conta Browserbase, usar `env: "LOCAL"` no Stagehand — roda com Chromium local.
61
-
62
- ---
63
-
64
- ## Quando Usar
65
-
66
- Use este skill quando:
67
- - Produto ou dev descreveu um fluxo manual que precisa virar automação
68
- - Precisar criar um robô sem conhecer os seletores CSS/XPath do site
69
- - O site tem UI dinâmica onde seletores manuais seriam frágeis
70
- - Quiser gerar um script Playwright como ponto de partida para edição
71
-
72
- **NÃO usar quando:**
73
- - O fluxo já tem seletores conhecidos e estáveis → usar `eng-scraper` diretamente
74
- - A automação precisa rodar em produção com LLM em runtime → avaliar `eng-qa-e2e`
75
- - O objetivo é extração de dados estruturados → usar `eng-scraper` com `extract()`
76
-
77
- ---
78
-
79
- ## Validação de Entrada
80
-
81
- ```
82
- Se $ARGUMENTS está vazio:
83
- → Solicitar: URL do site alvo e descrição do fluxo passo a passo
84
- → Exemplo: "https://site.com 'login → ir para relatórios → exportar últimos 30 dias'"
85
-
86
- Se apenas URL fornecida:
87
- → Perguntar: "Descreva o passo a passo que você fez manualmente no site"
88
- ```
89
-
90
- ---
91
-
92
- ## Padrões Críticos
93
-
94
- ### Padrão 1: Stagehand é exploratório — Playwright é o output
95
-
96
- O processo tem duas fases distintas:
97
-
98
- ```
99
- Fase 1 — EXPLORAÇÃO (Stagehand)
100
- → Recebe passos em linguagem natural
101
- → Executa cada passo com act() na página real
102
- → Usa observe() para descobrir seletores XPath reais
103
- → Coleta: selector + description + method para cada interação
104
-
105
- Fase 2 — GERAÇÃO (Playwright)
106
- → Converte seletores descobertos em código Playwright
107
- → Substitui linguagem natural por chamadas determinísticas
108
- → Output: arquivo .ts sem dependência de LLM
109
- ```
110
-
111
- ### Padrão 2: Converter observe() → Playwright
112
-
113
- `observe()` retorna `Action[]` com seletores XPath reais. Use esses seletores para gerar Playwright:
114
-
115
- ```typescript
116
- // Stagehand observe() retorna:
117
- // { selector: "/html/body/main/button[@type='submit']", method: "click", description: "botão enviar" }
118
-
119
- // Converter para Playwright:
120
- await page.locator("xpath=/html/body/main/button[@type='submit']").click()
121
- // Ou XPath mais legível descoberto:
122
- await page.locator("//button[@type='submit']").click()
123
- ```
124
-
125
- ### Padrão 3: Roteiro de exploração comentado
126
-
127
- O script de exploração Stagehand deve ter um comentário por passo, mapeando linguagem natural → ação:
128
-
129
- ```typescript
130
- // Passo 1 (produto): "faça login com usuário admin"
131
- await stagehand.act("preencha o campo de email com admin@empresa.com")
132
- await stagehand.act("preencha o campo de senha com a senha")
133
- await stagehand.act("clique no botão de entrar")
134
-
135
- // Passo 2 (produto): "vá para a seção de pedidos"
136
- await stagehand.act("clique no menu de pedidos")
137
- ```
138
-
139
- ---
140
-
141
- ## Fluxo de Trabalho
142
-
143
- ### 1. Coletar o passo a passo do produto/dev
144
-
145
- Perguntar ao usuário (se não fornecido nos argumentos):
146
-
147
- ```
148
- Descreva cada passo que você fez manualmente, em ordem:
149
-
150
- Exemplo:
151
- 1. Acessei https://app.exemplo.com
152
- 2. Fiz login com email e senha
153
- 3. Cliquei em "Relatórios" no menu lateral
154
- 4. Selecionei o período "Últimos 30 dias"
155
- 5. Cliquei em "Exportar CSV"
156
- 6. O download começou automaticamente
157
- ```
158
-
159
- ### 2. Gerar script de exploração Stagehand
160
-
161
- Criar `scripts/robots/explore-{nome}.ts` — script temporário para descoberta:
162
-
163
- ```typescript
164
- import "dotenv/config";
165
- import { Stagehand } from "@browserbasehq/stagehand";
166
-
167
- // Script de EXPLORAÇÃO — não vai para produção
168
- // Objetivo: descobrir seletores reais para gerar Playwright
169
-
170
- async function explore() {
171
- const stagehand = new Stagehand({
172
- env: "LOCAL", // ou "BROWSERBASE" se tiver conta
173
- verbose: 2, // logs detalhados para ver o que está descobrindo
174
- });
175
-
176
- await stagehand.init();
177
- const page = stagehand.context.pages()[0];
178
-
179
- // ─────────────────────────────────────────────
180
- // PASSO 1: {descrição do passo em português}
181
- // ─────────────────────────────────────────────
182
- await page.goto("{url-alvo}");
183
-
184
- // Descobrir elementos disponíveis para entender a estrutura
185
- const loginElements = await stagehand.observe("encontre os campos de login e botão de entrar");
186
- console.log("Elementos de login:", JSON.stringify(loginElements, null, 2));
187
-
188
- // Executar a ação
189
- await stagehand.act("{passo em linguagem natural}");
190
-
191
- // ─────────────────────────────────────────────
192
- // PASSO N: {próximo passo}
193
- // ─────────────────────────────────────────────
194
- const nextElements = await stagehand.observe("{o que procurar neste passo}");
195
- console.log("Próximos elementos:", JSON.stringify(nextElements, null, 2));
196
-
197
- await stagehand.act("{próximo passo}");
198
-
199
- await stagehand.close();
200
- }
201
-
202
- explore().catch(console.error);
203
- ```
204
-
205
- ### 3. Executar o script de exploração
206
-
207
- ```bash
208
- npx tsx scripts/robots/explore-{nome}.ts 2>&1 | tee scripts/robots/explore-{nome}.log
209
- ```
210
-
211
- Analisar o output do `console.log` para coletar os seletores reais retornados pelo `observe()`.
212
-
213
- ### 4. Gerar o script Playwright final
214
-
215
- Com os seletores descobertos, gerar `scripts/robots/{nome}.ts`:
216
-
217
- ```typescript
218
- import { chromium, Browser, Page } from "playwright";
219
-
220
- // ─────────────────────────────────────────────────────────────
221
- // Robô: {nome do robô}
222
- // Origem: fluxo manual descrito por {produto/dev}
223
- // Seletores descobertos via Stagehand em {data}
224
- // ─────────────────────────────────────────────────────────────
225
-
226
- async function run{NomeRobo}() {
227
- const browser: Browser = await chromium.launch({ headless: true });
228
- const context = await browser.newContext({
229
- userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36",
230
- });
231
- const page: Page = await context.newPage();
232
-
233
- try {
234
- // Passo 1: {descrição original do produto}
235
- await page.goto("{url}", { waitUntil: "networkidle" });
236
-
237
- // Passo 2: {descrição}
238
- await page.locator("{seletor-descoberto-pelo-stagehand}").click();
239
- await page.waitForLoadState("networkidle");
240
-
241
- // Passo N: {descrição}
242
- await page.locator("{seletor}").fill("{valor}");
243
-
244
- // Validação: confirmar que o fluxo funcionou
245
- await page.waitForSelector("{seletor-de-confirmação}", { timeout: 10_000 });
246
-
247
- } finally {
248
- await browser.close();
249
- }
250
- }
251
-
252
- run{NomeRobo}().catch((err) => {
253
- console.error("Robô falhou:", err);
254
- process.exit(1);
255
- });
256
- ```
257
-
258
- ### 5. Validar o script gerado
259
-
260
- ```bash
261
- # Rodar em modo não-headless para visualizar
262
- npx tsx scripts/robots/{nome}.ts
263
-
264
- # Com Playwright test runner (se integrado ao projeto)
265
- npx playwright test scripts/robots/{nome}.ts
266
- ```
267
-
268
- ### Skills invocados durante a execução do skill
269
-
270
- | Passo | Skill | Condição |
271
- |-------|-------|----------|
272
- | — | Nenhuma — skill autocontida | — |
273
-
274
- ---
275
-
276
- ## Árvore de Decisão
277
-
278
- ```
279
- Produto tem conta Browserbase? → env: "BROWSERBASE" (browser gerenciado em nuvem)
280
- Sem conta Browserbase? → env: "LOCAL" (Chromium local, grátis)
281
- Passos envolvem login com 2FA? → Coletar cookies/session manualmente e injetar
282
- Fluxo tem upload de arquivo? → Usar page.setInputFiles() no Playwright final
283
- Fluxo precisa de múltiplas abas? → Usar context.newPage() para cada aba
284
- Site usa iframes? → Stagehand suporta nativamente, Playwright: page.frameLocator()
285
- Seletor XPath muito longo/frágil? → Simplificar para seletor semântico equivalente
286
- ```
287
-
288
- ---
289
-
290
- ## Regras
291
-
292
- ### Nunca
293
- - Manter dependência do Stagehand no script final de produção
294
- - Hardcodar credenciais no script — sempre usar variáveis de ambiente
295
- - Usar seletores baseados em posição (ex: `(//div)[15]`) — frágeis demais
296
- - Ignorar `waitForLoadState` ou `waitForSelector` após navegações
297
- - Gerar script sem comentários mapeando os passos originais do produto
298
-
299
- ### Sempre
300
- - Adicionar comentário no script final indicando que os seletores foram descobertos via Stagehand
301
- - Usar `try/finally` para garantir que o browser fecha mesmo em erros
302
- - Validar o resultado ao final (confirmar que o fluxo funcionou)
303
- - Preferir seletores semânticos (texto, role, aria) sobre XPath absolutos quando possível
304
- - Documentar no script qual foi o passo original descrito pelo produto
305
-
306
- ---
307
-
308
- ## Tratamento de Erros
309
-
310
- ### Stagehand não conseguiu executar um passo
311
- - Verificar se a página carregou (`waitForLoadState`)
312
- - Reformular a instrução natural — ser mais específico (ex: "clique no botão azul 'Enviar' no formulário de contato")
313
- - Usar `observe()` primeiro para ver o que está disponível na página
314
-
315
- ### Seletor descoberto não funciona no Playwright
316
- - Simplificar o XPath retornado pelo `observe()`
317
- - Tentar equivalente com `page.getByRole()`, `page.getByText()`, `page.getByLabel()`
318
- - Inspecionar manualmente o elemento no DevTools como fallback
319
-
320
- ### Site usa autenticação OAuth / SSO
321
- - Fazer login manual uma vez, exportar cookies: `context.storageState({ path: "auth.json" })`
322
- - Reutilizar o estado: `browser.newContext({ storageState: "auth.json" })`
323
-
324
- ### Script falha em CI (headless)
325
- - Adicionar `--no-sandbox` no `chromium.launch({ args: ['--no-sandbox'] })`
326
- - Verificar timeouts — ambientes CI podem ser mais lentos
327
-
328
- ---
329
-
330
- ## Checklist de Conclusão
331
-
332
- - [ ] Passo a passo coletado do produto/dev (em linguagem natural)
333
- - [ ] Script de exploração Stagehand criado e executado
334
- - [ ] Seletores reais coletados do output do `observe()`
335
- - [ ] Script Playwright final gerado sem dependência do Stagehand
336
- - [ ] Comentários mapeando passos originais → código
337
- - [ ] Credenciais em variáveis de ambiente (nunca hardcoded)
338
- - [ ] `try/finally` para fechar o browser
339
- - [ ] Validação ao final do fluxo
340
- - [ ] Script testado rodando localmente
341
-
342
- ---
343
-
344
- ## Output
345
-
346
- | Artefato | Descrição |
347
- |----------|-----------|
348
- | `scripts/robots/explore-{nome}.ts` | Script temporário de exploração com Stagehand (não vai a prod) |
349
- | `scripts/robots/{nome}.ts` | Script final Playwright gerado com seletores reais |
350
- | `scripts/robots/explore-{nome}.log` | Log da exploração com seletores descobertos |
351
-
352
- ---
353
-
354
- ## Mensagem de Conclusão
355
-
356
- ```
357
- Robô gerado!
358
-
359
- Fluxo: {descrição do fluxo automatizado}
360
- Site alvo: {URL}
361
- Passos automatizados: {N passos}
362
- Seletores descobertos via: Stagehand observe()
363
-
364
- Arquivos:
365
- - scripts/robots/explore-{nome}.ts ← script de exploração (pode descartar)
366
- - scripts/robots/{nome}.ts ← robô Playwright pronto para produção
367
-
368
- Próximo passo: executar com `npx tsx scripts/robots/{nome}.ts`
369
- ```
370
-
371
- ---
372
-
373
- ## Recursos Adicionais
374
-
375
- - **Stagehand docs**: https://docs.stagehand.dev
376
- - **Skill relacionado**: `$IDE/skills/eng-scraper/SKILL.md` — para scraping/extração de dados
377
- - **Skill relacionado**: `$IDE/skills/eng-qa-e2e/SKILL.md` — para testes E2E com linguagem natural