jarvis-ai-framework 1.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 (240) hide show
  1. package/AGENTS.md +416 -0
  2. package/LICENSE +21 -0
  3. package/README.md +190 -0
  4. package/agents/AGENTS.md +234 -0
  5. package/agents/README.md +309 -0
  6. package/agents/engineering/data/eng.data-engineer.agent.md +309 -0
  7. package/agents/engineering/eng.agent.md +303 -0
  8. package/agents/engineering/eng.bug-hunter.md +386 -0
  9. package/agents/engineering/eng.cybersecurity.agent.md +503 -0
  10. package/agents/engineering/eng.dev-code-reviewer.md +148 -0
  11. package/agents/engineering/eng.docs-writer.md +152 -0
  12. package/agents/engineering/eng.frontend.agent.md +117 -0
  13. package/agents/engineering/eng.rpa.agent.md +215 -0
  14. package/agents/engineering/eng.tech-analyst.agent.md +102 -0
  15. package/agents/engineering/eng.ux-designer.agent.md +193 -0
  16. package/agents/engineering/qa/eng.qa.cypress-specialist.md +109 -0
  17. package/agents/engineering/qa/eng.qa.quality-champion-task-agent.md +85 -0
  18. package/agents/engineering/qa/eng.qa.quality-strategist.md +111 -0
  19. package/agents/engineering/qa/eng.qa.test-architect.md +400 -0
  20. package/agents/engineering/qa/eng.qa.test-planner.md +477 -0
  21. package/agents/engineering/qa/eng.qa.testing-engineer.md +339 -0
  22. package/agents/product/prod.pm-checker.md +52 -0
  23. package/bin/commands/docs-publish.js +184 -0
  24. package/bin/commands/docs-sync.js +139 -0
  25. package/bin/commands/info.js +87 -0
  26. package/bin/commands/init.js +237 -0
  27. package/bin/commands/install-rtk.js +90 -0
  28. package/bin/commands/list.js +48 -0
  29. package/bin/commands/qa-signoff.js +112 -0
  30. package/bin/commands/whoami.js +43 -0
  31. package/bin/jarvis.js +159 -0
  32. package/bin/lib/auth/session.js +56 -0
  33. package/bin/lib/config/constants.js +123 -0
  34. package/bin/lib/config/ide-config.js +233 -0
  35. package/bin/lib/core/scanner.js +124 -0
  36. package/bin/lib/core/sync-engine.js +551 -0
  37. package/bin/lib/docs/fetch-file.sh +41 -0
  38. package/bin/lib/docs/publish-file.sh +284 -0
  39. package/bin/lib/docs/validate-frontmatter.js +157 -0
  40. package/bin/lib/env-loader.js +198 -0
  41. package/bin/lib/tasks/comment.js +131 -0
  42. package/bin/lib/utils/git-parser.js +145 -0
  43. package/bin/lib/utils/logger.js +104 -0
  44. package/bin/lib/utils/npmrc-parser.js +106 -0
  45. package/bin/lib/utils/paths.js +55 -0
  46. package/bin/lib/utils/ui.js +59 -0
  47. package/bin/lib/vcs/api.js +312 -0
  48. package/bin/lib/vcs/create-issue.js +43 -0
  49. package/bin/lib/vcs/create-merge.js +43 -0
  50. package/bin/lib/vcs/fetch-raw.js +30 -0
  51. package/bin/postinstall.js +41 -0
  52. package/members.md +25 -0
  53. package/package.json +55 -0
  54. package/rules/AGENTS.md +205 -0
  55. package/rules/engineering/data/data-rules.md +200 -0
  56. package/rules/engineering/eng-rules.md +243 -0
  57. package/rules/engineering/eng-security-rules.md +186 -0
  58. package/rules/engineering/eng.breakdown-subtasks-rules.md +585 -0
  59. package/rules/engineering/eng.bump-rules.md +27 -0
  60. package/rules/engineering/eng.docs-scraping-rules.md +64 -0
  61. package/rules/engineering/eng.downstream-flow-rules.md +297 -0
  62. package/rules/engineering/eng.integrations-rules.md +73 -0
  63. package/rules/engineering/eng.plan-rules.md +333 -0
  64. package/rules/engineering/eng.pr-rules.md +359 -0
  65. package/rules/engineering/eng.pre-pr-rules.md +103 -0
  66. package/rules/engineering/eng.start-rules.md +246 -0
  67. package/rules/engineering/eng.tech-spec-rules.md +968 -0
  68. package/rules/engineering/eng.work-rules.md +312 -0
  69. package/rules/engineering/frontend/eng.frontend-rules.md +147 -0
  70. package/rules/engineering/qa/eng.qa.cypress-standards-rules.md +259 -0
  71. package/rules/engineering/qa/eng.qa.exploratory-session-rules.md +137 -0
  72. package/rules/engineering/qa/eng.qa.quality-gate-scoring-rules.md +181 -0
  73. package/rules/engineering/qa/eng.qa.tech-spec-validation-criteria-rules.md +120 -0
  74. package/rules/engineering/rpa/eng.rpa-rules.md +230 -0
  75. package/rules/product/README.md +24 -0
  76. package/rules/product/prod-rules.md +151 -0
  77. package/rules/rtk-rules.md +68 -0
  78. package/skills/AGENTS.md +290 -0
  79. package/skills/SKILLS-ROADMAP.md +333 -0
  80. package/skills/churn-audit/SKILL.md +385 -0
  81. package/skills/context-detect/SKILL.md +399 -0
  82. package/skills/context-detect/assets/context-profile-template.md +127 -0
  83. package/skills/docs-central/README.md +310 -0
  84. package/skills/docs-central/SKILL.md +423 -0
  85. package/skills/docs-index/SKILL.md +377 -0
  86. package/skills/eng-ai-engineer/SKILL.md +296 -0
  87. package/skills/eng-arch-c4/SKILL.md +358 -0
  88. package/skills/eng-arch-c4/assets/example-code.md +189 -0
  89. package/skills/eng-arch-c4/assets/example-component.md +105 -0
  90. package/skills/eng-arch-c4/assets/example-container.md +104 -0
  91. package/skills/eng-arch-c4/assets/example-context.md +81 -0
  92. package/skills/eng-backend/SKILL.md +776 -0
  93. package/skills/eng-browser-extension-builder/SKILL.md +385 -0
  94. package/skills/eng-cybersecurity/SKILL.md +645 -0
  95. package/skills/eng-data-bi/SKILL.md +199 -0
  96. package/skills/eng-data-debug/SKILL.md +307 -0
  97. package/skills/eng-data-engineer/SKILL.md +256 -0
  98. package/skills/eng-data-onboard/SKILL.md +310 -0
  99. package/skills/eng-data-orchestrator/SKILL.md +426 -0
  100. package/skills/eng-design-system/SKILL.md +619 -0
  101. package/skills/eng-docs-write/SKILL.md +312 -0
  102. package/skills/eng-frontend/SKILL.md +913 -0
  103. package/skills/eng-jira-comment/SKILL.md +17 -0
  104. package/skills/eng-microfrontend/SKILL.md +602 -0
  105. package/skills/eng-ms-trace/SKILL.md +469 -0
  106. package/skills/eng-nestjs/SKILL.md +791 -0
  107. package/skills/eng-performance-engineer/SKILL.md +312 -0
  108. package/skills/eng-pr/SKILL.md +339 -0
  109. package/skills/eng-qa-a11y-audit/SKILL.md +269 -0
  110. package/skills/eng-qa-bug-report/SKILL.md +1088 -0
  111. package/skills/eng-qa-bug-report/TASK_MANAGERS.md +138 -0
  112. package/skills/eng-qa-cypress-e2e/SKILL.md +177 -0
  113. package/skills/eng-qa-dev-guide/SKILL.md +164 -0
  114. package/skills/eng-qa-e2e/SKILL.md +400 -0
  115. package/skills/eng-qa-e2e-spec-writer/SKILL.md +322 -0
  116. package/skills/eng-qa-exploratory/SKILL.md +188 -0
  117. package/skills/eng-qa-gate/SKILL.md +370 -0
  118. package/skills/eng-qa-gate/assets/checklist-validacao.md +291 -0
  119. package/skills/eng-qa-graphql-contract/SKILL.md +256 -0
  120. package/skills/eng-qa-quality-report/SKILL.md +412 -0
  121. package/skills/eng-qa-test-plan/SKILL.md +466 -0
  122. package/skills/eng-qa-test-plan/assets/test-coverage-template.md +92 -0
  123. package/skills/eng-qa-test-plan/assets/test-patterns.md +178 -0
  124. package/skills/eng-qa-testsprite/SKILL.md +325 -0
  125. package/skills/eng-qa-testsprite/references/testsprite-mcp.md +224 -0
  126. package/skills/eng-qa-unit-test/SKILL.md +471 -0
  127. package/skills/eng-rabbitmq/SKILL.md +661 -0
  128. package/skills/eng-scraper/SKILL.md +683 -0
  129. package/skills/eng-scraper-robot-builder/SKILL.md +370 -0
  130. package/skills/eng-security-patch/SKILL.md +378 -0
  131. package/skills/eng-security-triage/SKILL.md +266 -0
  132. package/skills/eng-task-comment/SKILL.md +60 -0
  133. package/skills/eng-tech-analyst/SKILL.md +529 -0
  134. package/skills/eng-threat-model/SKILL.md +161 -0
  135. package/skills/init-jarvis/SKILL.md +1304 -0
  136. package/skills/init-jarvis/assets/mcp-configs.md +389 -0
  137. package/skills/init-jarvis/assets/onboarding-checklist.md +104 -0
  138. package/skills/init-jarvis/assets/setup-guide.md +360 -0
  139. package/skills/lovable-prompt-generator/SKILL.md +304 -0
  140. package/skills/prod-roadmap-report/README.md +303 -0
  141. package/skills/prod-roadmap-report/SKILL.md +198 -0
  142. package/skills/prod-roadmap-report/commands/status.compiled.single.team.md +23 -0
  143. package/skills/prod-roadmap-report/commands/status.list.projects.md +17 -0
  144. package/skills/prod-roadmap-report/commands/status.memory.md +192 -0
  145. package/skills/prod-roadmap-report/commands/status.roadmap.preview.md +94 -0
  146. package/skills/prod-roadmap-report/references/detailed-guide.md +236 -0
  147. package/skills/prod-roadmap-report/rules/detailed-guide.md +237 -0
  148. package/skills/prod-roadmap-report/rules/status-report-rules.md +44 -0
  149. package/skills/prod-roadmap-report/templates/template-multiple-teams-compiled-status.md +53 -0
  150. package/skills/prod-roadmap-report/templates/template-projects-list.md +23 -0
  151. package/skills/prod-roadmap-report/templates/template-single-team-compiled-status.md +60 -0
  152. package/skills/prod-roadmap-report/templates/template-single-team-status.md +49 -0
  153. package/skills/prod-specs/SKILL.md +108 -0
  154. package/skills/prod-specs/references/prod.spec.clarify.md +176 -0
  155. package/skills/prod-specs/references/prod.spec.epic.md +107 -0
  156. package/skills/prod-specs/references/prod.spec.frd.md +135 -0
  157. package/skills/prod-specs/references/prod.spec.issue.md +145 -0
  158. package/skills/prod-specs/references/prod.spec.prd.md +118 -0
  159. package/skills/prod-specs/rules/prod-spec-rules.md +186 -0
  160. package/skills/prod-specs/templates/prod-breakdown-template.md +136 -0
  161. package/skills/prod-specs/templates/prod-epic-template.md +76 -0
  162. package/skills/prod-specs/templates/prod-frd-template.md +172 -0
  163. package/skills/prod-specs/templates/prod-issue-template.md +68 -0
  164. package/skills/prod-specs/templates/prod-prd-full-template.md +159 -0
  165. package/skills/prod-specs/templates/prod-prd-template.md +173 -0
  166. package/skills/prod-specs-update/SKILL.md +272 -0
  167. package/skills/report-issue/SKILL.md +156 -0
  168. package/taxonomy.md +270 -0
  169. package/templates/AGENTS.md +189 -0
  170. package/templates/CDD aplicado a Prompts.md +182 -0
  171. package/templates/ENV-template.md +187 -0
  172. package/templates/engineering/AGENTS-template.md +71 -0
  173. package/templates/engineering/ARD-template.md +193 -0
  174. package/templates/engineering/CONTACTS-template.md +135 -0
  175. package/templates/engineering/PR-template.md +40 -0
  176. package/templates/engineering/RFC-Playbook.md +325 -0
  177. package/templates/engineering/RFC-template.md +199 -0
  178. package/templates/engineering/architecture-template.md +277 -0
  179. package/templates/engineering/breakdown-subtasks-template.md +582 -0
  180. package/templates/engineering/c4-model-template.md +516 -0
  181. package/templates/engineering/data-contract-template.md +135 -0
  182. package/templates/engineering/data-pipeline-template.md +163 -0
  183. package/templates/engineering/plan-template.md +255 -0
  184. package/templates/engineering/qa/eng.qa.quality-gate-examples-template.md +311 -0
  185. package/templates/engineering/qa/eng.qa.quality-gate-report-template.md +249 -0
  186. package/templates/engineering/qa/qa.cypress-test-template.md +172 -0
  187. package/templates/engineering/qa/qa.exploratory-session-template.md +148 -0
  188. package/templates/engineering/qa/qa.quality-report-template.md +130 -0
  189. package/templates/engineering/qa/qa.release-signoff-template.md +54 -0
  190. package/templates/engineering/qa/qa.sprint-plan-template.md +49 -0
  191. package/templates/engineering/swagger-template.md +145 -0
  192. package/templates/engineering/tech-spec-template.md +497 -0
  193. package/templates/engineering/work-progress-template.md +155 -0
  194. package/workflows/AGENTS.md +240 -0
  195. package/workflows/README.md +160 -0
  196. package/workflows/all-tools.md +11 -0
  197. package/workflows/engineering/data/data.contract.md +202 -0
  198. package/workflows/engineering/data/data.new-pipeline.md +234 -0
  199. package/workflows/engineering/eng.breakdown-subtasks.md +420 -0
  200. package/workflows/engineering/eng.bug-audit.md +591 -0
  201. package/workflows/engineering/eng.build-tech-spec.md +1116 -0
  202. package/workflows/engineering/eng.create-ard-from-code.md +259 -0
  203. package/workflows/engineering/eng.create-ard.md +382 -0
  204. package/workflows/engineering/eng.create-rfc.md +245 -0
  205. package/workflows/engineering/eng.debug.md +479 -0
  206. package/workflows/engineering/eng.docs.md +40 -0
  207. package/workflows/engineering/eng.light-arch.md +84 -0
  208. package/workflows/engineering/eng.plan.md +213 -0
  209. package/workflows/engineering/eng.pr.md +466 -0
  210. package/workflows/engineering/eng.pre-pr.md +167 -0
  211. package/workflows/engineering/eng.review.md +185 -0
  212. package/workflows/engineering/eng.rpa.robot.md +342 -0
  213. package/workflows/engineering/eng.security-audit.md +312 -0
  214. package/workflows/engineering/eng.security-incident.md +275 -0
  215. package/workflows/engineering/eng.security-pipeline.md +210 -0
  216. package/workflows/engineering/eng.security-review.md +235 -0
  217. package/workflows/engineering/eng.start.md +494 -0
  218. package/workflows/engineering/eng.work.md +558 -0
  219. package/workflows/engineering/frontend/eng.frontend-component.md +190 -0
  220. package/workflows/engineering/frontend/eng.frontend-perf-audit.md +375 -0
  221. package/workflows/engineering/frontend/eng.frontend-review.md +185 -0
  222. package/workflows/engineering/qa/eng.qa-dev-quality-guide.md +51 -0
  223. package/workflows/engineering/qa/eng.qa-e2e-test-generation.md +51 -0
  224. package/workflows/engineering/qa/eng.qa-exploratory-session.md +60 -0
  225. package/workflows/engineering/qa/eng.qa-quality-gate-validation.md +202 -0
  226. package/workflows/engineering/qa/eng.qa-quality-report.md +83 -0
  227. package/workflows/engineering/qa/eng.qa-refinement-entry.md +83 -0
  228. package/workflows/engineering/qa/eng.qa-release-signoff.md +170 -0
  229. package/workflows/engineering/qa/eng.qa-sprint-planning.md +100 -0
  230. package/workflows/engineering/ta/eng.ta.atendimento.md +93 -0
  231. package/workflows/product/prod.roadmap.preview.md +110 -0
  232. package/workflows/product/prod.spec.breakdown.md +163 -0
  233. package/workflows/product/prod.spec.clarify.md +178 -0
  234. package/workflows/product/prod.spec.epic.md +154 -0
  235. package/workflows/product/prod.spec.frd.md +96 -0
  236. package/workflows/product/prod.spec.issue.md +145 -0
  237. package/workflows/product/prod.spec.md +60 -0
  238. package/workflows/product/prod.spec.prd.md +100 -0
  239. package/workflows/taxonomy.md +92 -0
  240. package/workflows/warm-up.md +574 -0
@@ -0,0 +1,370 @@
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
+ # Campos Claude Code-specific (não fazem parte da spec oficial agentskills.io):
16
+ argument-hint: "[url-alvo] [descrição do fluxo]"
17
+ disable-model-invocation: false
18
+ ---
19
+
20
+ # Eng Scraper Robot Builder - Gerador de Automação Playwright
21
+
22
+ 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.
23
+
24
+ ## Objetivo
25
+
26
+ 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.
27
+
28
+ **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.
29
+
30
+ ## Entrada
31
+
32
+ - `$ARGUMENTS` - URL do site alvo + descrição do fluxo a automatizar
33
+ - Exemplo: `https://app.exemplo.com "fazer login, ir para pedidos, filtrar por status pendente, exportar CSV"`
34
+
35
+ ## Recursos
36
+
37
+ - **Referência**: https://docs.stagehand.dev
38
+ - **Saída**: script TypeScript em `scripts/robots/{nome-do-robo}.ts` ou no repositório atual
39
+
40
+ ---
41
+
42
+ ## Pré-requisito
43
+
44
+ ### Dependências necessárias no projeto
45
+
46
+ ```bash
47
+ npm install @browserbasehq/stagehand playwright zod dotenv
48
+ ```
49
+
50
+ ### Variáveis de ambiente
51
+
52
+ ```bash
53
+ # .env
54
+ BROWSERBASE_API_KEY=... # Chave da Browserbase (cloud) — OU rodar local
55
+ BROWSERBASE_PROJECT_ID=... # ID do projeto na Browserbase
56
+ OPENAI_API_KEY=... # Modelo padrão para observe/act (ou ANTHROPIC_API_KEY)
57
+ ```
58
+
59
+ > Se não tiver conta Browserbase, usar `env: "LOCAL"` no Stagehand — roda com Chromium local.
60
+
61
+ ---
62
+
63
+ ## Quando Usar
64
+
65
+ Use este skill quando:
66
+ - Produto ou dev descreveu um fluxo manual que precisa virar automação
67
+ - Precisar criar um robô sem conhecer os seletores CSS/XPath do site
68
+ - O site tem UI dinâmica onde seletores manuais seriam frágeis
69
+ - Quiser gerar um script Playwright como ponto de partida para edição
70
+
71
+ **NÃO usar quando:**
72
+ - O fluxo já tem seletores conhecidos e estáveis → usar `eng-scraper` diretamente
73
+ - A automação precisa rodar em produção com LLM em runtime → avaliar `eng-qa-e2e`
74
+ - O objetivo é extração de dados estruturados → usar `eng-scraper` com `extract()`
75
+
76
+ ---
77
+
78
+ ## Validação de Entrada
79
+
80
+ ```
81
+ Se $ARGUMENTS está vazio:
82
+ → Solicitar: URL do site alvo e descrição do fluxo passo a passo
83
+ → Exemplo: "https://site.com 'login → ir para relatórios → exportar últimos 30 dias'"
84
+
85
+ Se apenas URL fornecida:
86
+ → Perguntar: "Descreva o passo a passo que você fez manualmente no site"
87
+ ```
88
+
89
+ ---
90
+
91
+ ## Padrões Críticos
92
+
93
+ ### Padrão 1: Stagehand é exploratório — Playwright é o output
94
+
95
+ O processo tem duas fases distintas:
96
+
97
+ ```
98
+ Fase 1 — EXPLORAÇÃO (Stagehand)
99
+ → Recebe passos em linguagem natural
100
+ → Executa cada passo com act() na página real
101
+ → Usa observe() para descobrir seletores XPath reais
102
+ → Coleta: selector + description + method para cada interação
103
+
104
+ Fase 2 — GERAÇÃO (Playwright)
105
+ → Converte seletores descobertos em código Playwright
106
+ → Substitui linguagem natural por chamadas determinísticas
107
+ → Output: arquivo .ts sem dependência de LLM
108
+ ```
109
+
110
+ ### Padrão 2: Converter observe() → Playwright
111
+
112
+ `observe()` retorna `Action[]` com seletores XPath reais. Use esses seletores para gerar Playwright:
113
+
114
+ ```typescript
115
+ // Stagehand observe() retorna:
116
+ // { selector: "/html/body/main/button[@type='submit']", method: "click", description: "botão enviar" }
117
+
118
+ // Converter para Playwright:
119
+ await page.locator("xpath=/html/body/main/button[@type='submit']").click()
120
+ // Ou XPath mais legível descoberto:
121
+ await page.locator("//button[@type='submit']").click()
122
+ ```
123
+
124
+ ### Padrão 3: Roteiro de exploração comentado
125
+
126
+ O script de exploração Stagehand deve ter um comentário por passo, mapeando linguagem natural → ação:
127
+
128
+ ```typescript
129
+ // Passo 1 (produto): "faça login com usuário admin"
130
+ await stagehand.act("preencha o campo de email com admin@empresa.com")
131
+ await stagehand.act("preencha o campo de senha com a senha")
132
+ await stagehand.act("clique no botão de entrar")
133
+
134
+ // Passo 2 (produto): "vá para a seção de pedidos"
135
+ await stagehand.act("clique no menu de pedidos")
136
+ ```
137
+
138
+ ---
139
+
140
+ ## Fluxo de Trabalho
141
+
142
+ ### 1. Coletar o passo a passo do produto/dev
143
+
144
+ Perguntar ao usuário (se não fornecido nos argumentos):
145
+
146
+ ```
147
+ Descreva cada passo que você fez manualmente, em ordem:
148
+
149
+ Exemplo:
150
+ 1. Acessei https://app.exemplo.com
151
+ 2. Fiz login com email e senha
152
+ 3. Cliquei em "Relatórios" no menu lateral
153
+ 4. Selecionei o período "Últimos 30 dias"
154
+ 5. Cliquei em "Exportar CSV"
155
+ 6. O download começou automaticamente
156
+ ```
157
+
158
+ ### 2. Gerar script de exploração Stagehand
159
+
160
+ Criar `scripts/robots/explore-{nome}.ts` — script temporário para descoberta:
161
+
162
+ ```typescript
163
+ import "dotenv/config";
164
+ import { Stagehand } from "@browserbasehq/stagehand";
165
+
166
+ // Script de EXPLORAÇÃO — não vai para produção
167
+ // Objetivo: descobrir seletores reais para gerar Playwright
168
+
169
+ async function explore() {
170
+ const stagehand = new Stagehand({
171
+ env: "LOCAL", // ou "BROWSERBASE" se tiver conta
172
+ verbose: 2, // logs detalhados para ver o que está descobrindo
173
+ });
174
+
175
+ await stagehand.init();
176
+ const page = stagehand.context.pages()[0];
177
+
178
+ // ─────────────────────────────────────────────
179
+ // PASSO 1: {descrição do passo em português}
180
+ // ─────────────────────────────────────────────
181
+ await page.goto("{url-alvo}");
182
+
183
+ // Descobrir elementos disponíveis para entender a estrutura
184
+ const loginElements = await stagehand.observe("encontre os campos de login e botão de entrar");
185
+ console.log("Elementos de login:", JSON.stringify(loginElements, null, 2));
186
+
187
+ // Executar a ação
188
+ await stagehand.act("{passo em linguagem natural}");
189
+
190
+ // ─────────────────────────────────────────────
191
+ // PASSO N: {próximo passo}
192
+ // ─────────────────────────────────────────────
193
+ const nextElements = await stagehand.observe("{o que procurar neste passo}");
194
+ console.log("Próximos elementos:", JSON.stringify(nextElements, null, 2));
195
+
196
+ await stagehand.act("{próximo passo}");
197
+
198
+ await stagehand.close();
199
+ }
200
+
201
+ explore().catch(console.error);
202
+ ```
203
+
204
+ ### 3. Executar o script de exploração
205
+
206
+ ```bash
207
+ npx tsx scripts/robots/explore-{nome}.ts 2>&1 | tee scripts/robots/explore-{nome}.log
208
+ ```
209
+
210
+ Analisar o output do `console.log` para coletar os seletores reais retornados pelo `observe()`.
211
+
212
+ ### 4. Gerar o script Playwright final
213
+
214
+ Com os seletores descobertos, gerar `scripts/robots/{nome}.ts`:
215
+
216
+ ```typescript
217
+ import { chromium, Browser, Page } from "playwright";
218
+
219
+ // ─────────────────────────────────────────────────────────────
220
+ // Robô: {nome do robô}
221
+ // Origem: fluxo manual descrito por {produto/dev}
222
+ // Seletores descobertos via Stagehand em {data}
223
+ // ─────────────────────────────────────────────────────────────
224
+
225
+ async function run{NomeRobo}() {
226
+ const browser: Browser = await chromium.launch({ headless: true });
227
+ const context = await browser.newContext({
228
+ userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36",
229
+ });
230
+ const page: Page = await context.newPage();
231
+
232
+ try {
233
+ // Passo 1: {descrição original do produto}
234
+ await page.goto("{url}", { waitUntil: "networkidle" });
235
+
236
+ // Passo 2: {descrição}
237
+ await page.locator("{seletor-descoberto-pelo-stagehand}").click();
238
+ await page.waitForLoadState("networkidle");
239
+
240
+ // Passo N: {descrição}
241
+ await page.locator("{seletor}").fill("{valor}");
242
+
243
+ // Validação: confirmar que o fluxo funcionou
244
+ await page.waitForSelector("{seletor-de-confirmação}", { timeout: 10_000 });
245
+
246
+ } finally {
247
+ await browser.close();
248
+ }
249
+ }
250
+
251
+ run{NomeRobo}().catch((err) => {
252
+ console.error("Robô falhou:", err);
253
+ process.exit(1);
254
+ });
255
+ ```
256
+
257
+ ### 5. Validar o script gerado
258
+
259
+ ```bash
260
+ # Rodar em modo não-headless para visualizar
261
+ npx tsx scripts/robots/{nome}.ts
262
+
263
+ # Com Playwright test runner (se integrado ao projeto)
264
+ npx playwright test scripts/robots/{nome}.ts
265
+ ```
266
+
267
+ ---
268
+
269
+ ## Árvore de Decisão
270
+
271
+ ```
272
+ Produto tem conta Browserbase? → env: "BROWSERBASE" (browser gerenciado em nuvem)
273
+ Sem conta Browserbase? → env: "LOCAL" (Chromium local, grátis)
274
+ Passos envolvem login com 2FA? → Coletar cookies/session manualmente e injetar
275
+ Fluxo tem upload de arquivo? → Usar page.setInputFiles() no Playwright final
276
+ Fluxo precisa de múltiplas abas? → Usar context.newPage() para cada aba
277
+ Site usa iframes? → Stagehand suporta nativamente, Playwright: page.frameLocator()
278
+ Seletor XPath muito longo/frágil? → Simplificar para seletor semântico equivalente
279
+ ```
280
+
281
+ ---
282
+
283
+ ## Regras
284
+
285
+ ### Nunca
286
+ - Manter dependência do Stagehand no script final de produção
287
+ - Hardcodar credenciais no script — sempre usar variáveis de ambiente
288
+ - Usar seletores baseados em posição (ex: `(//div)[15]`) — frágeis demais
289
+ - Ignorar `waitForLoadState` ou `waitForSelector` após navegações
290
+ - Gerar script sem comentários mapeando os passos originais do produto
291
+
292
+ ### Sempre
293
+ - Adicionar comentário no script final indicando que os seletores foram descobertos via Stagehand
294
+ - Usar `try/finally` para garantir que o browser fecha mesmo em erros
295
+ - Validar o resultado ao final (confirmar que o fluxo funcionou)
296
+ - Preferir seletores semânticos (texto, role, aria) sobre XPath absolutos quando possível
297
+ - Documentar no script qual foi o passo original descrito pelo produto
298
+
299
+ ---
300
+
301
+ ## Tratamento de Erros
302
+
303
+ ### Stagehand não conseguiu executar um passo
304
+ - Verificar se a página carregou (`waitForLoadState`)
305
+ - Reformular a instrução natural — ser mais específico (ex: "clique no botão azul 'Enviar' no formulário de contato")
306
+ - Usar `observe()` primeiro para ver o que está disponível na página
307
+
308
+ ### Seletor descoberto não funciona no Playwright
309
+ - Simplificar o XPath retornado pelo `observe()`
310
+ - Tentar equivalente com `page.getByRole()`, `page.getByText()`, `page.getByLabel()`
311
+ - Inspecionar manualmente o elemento no DevTools como fallback
312
+
313
+ ### Site usa autenticação OAuth / SSO
314
+ - Fazer login manual uma vez, exportar cookies: `context.storageState({ path: "auth.json" })`
315
+ - Reutilizar o estado: `browser.newContext({ storageState: "auth.json" })`
316
+
317
+ ### Script falha em CI (headless)
318
+ - Adicionar `--no-sandbox` no `chromium.launch({ args: ['--no-sandbox'] })`
319
+ - Verificar timeouts — ambientes CI podem ser mais lentos
320
+
321
+ ---
322
+
323
+ ## Checklist de Conclusão
324
+
325
+ - [ ] Passo a passo coletado do produto/dev (em linguagem natural)
326
+ - [ ] Script de exploração Stagehand criado e executado
327
+ - [ ] Seletores reais coletados do output do `observe()`
328
+ - [ ] Script Playwright final gerado sem dependência do Stagehand
329
+ - [ ] Comentários mapeando passos originais → código
330
+ - [ ] Credenciais em variáveis de ambiente (nunca hardcoded)
331
+ - [ ] `try/finally` para fechar o browser
332
+ - [ ] Validação ao final do fluxo
333
+ - [ ] Script testado rodando localmente
334
+
335
+ ---
336
+
337
+ ## Output
338
+
339
+ | Artefato | Descrição |
340
+ |----------|-----------|
341
+ | `scripts/robots/explore-{nome}.ts` | Script temporário de exploração com Stagehand (não vai a prod) |
342
+ | `scripts/robots/{nome}.ts` | Script final Playwright gerado com seletores reais |
343
+ | `scripts/robots/explore-{nome}.log` | Log da exploração com seletores descobertos |
344
+
345
+ ---
346
+
347
+ ## Mensagem de Conclusão
348
+
349
+ ```
350
+ Robô gerado!
351
+
352
+ Fluxo: {descrição do fluxo automatizado}
353
+ Site alvo: {URL}
354
+ Passos automatizados: {N passos}
355
+ Seletores descobertos via: Stagehand observe()
356
+
357
+ Arquivos:
358
+ - scripts/robots/explore-{nome}.ts ← script de exploração (pode descartar)
359
+ - scripts/robots/{nome}.ts ← robô Playwright pronto para produção
360
+
361
+ Próximo passo: executar com `npx tsx scripts/robots/{nome}.ts`
362
+ ```
363
+
364
+ ---
365
+
366
+ ## Recursos Adicionais
367
+
368
+ - **Stagehand docs**: https://docs.stagehand.dev
369
+ - **Skill relacionado**: `$IDE/skills/eng-scraper/SKILL.md` — para scraping/extração de dados
370
+ - **Skill relacionado**: `$IDE/skills/eng-qa-e2e/SKILL.md` — para testes E2E com linguagem natural