@pathbit/agentdevkit 0.0.0-stage → 0.0.6

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 (242) hide show
  1. package/.pbai4devs/COMPATIBILIDADE.md +109 -0
  2. package/.pbai4devs/INSTRUCTIONS.md +87 -0
  3. package/.pbai4devs/README.md +53 -0
  4. package/.pbai4devs/agents/README.md +18 -0
  5. package/.pbai4devs/agents/revisor/AGENT.md +16 -0
  6. package/.pbai4devs/agents/revisor/antigravity.yaml +8 -0
  7. package/.pbai4devs/agents/revisor/claude.yaml +5 -0
  8. package/.pbai4devs/agents/revisor/cursor.yaml +5 -0
  9. package/.pbai4devs/agents/revisor/gemini.yaml +6 -0
  10. package/.pbai4devs/agents/revisor/github.yaml +5 -0
  11. package/.pbai4devs/agents/revisor/kimi-code.yaml +5 -0
  12. package/.pbai4devs/agents/revisor/mimocode.yaml +10 -0
  13. package/.pbai4devs/agents/revisor/opencode.yaml +7 -0
  14. package/.pbai4devs/agents/revisor/zcode.yaml +5 -0
  15. package/.pbai4devs/commands/README.md +30 -0
  16. package/.pbai4devs/commands/atualizar-ferramentas/COMMAND.md +17 -0
  17. package/.pbai4devs/commands/diagnosticar/COMMAND.md +18 -0
  18. package/.pbai4devs/commands/instalar-ferramentas/COMMAND.md +21 -0
  19. package/.pbai4devs/commands/preparar-dev/COMMAND.md +14 -0
  20. package/.pbai4devs/commands/proximos-passos/COMMAND.md +9 -0
  21. package/.pbai4devs/commands/revisar-entrega/COMMAND.md +29 -0
  22. package/.pbai4devs/commands/sincronizar/COMMAND.md +20 -0
  23. package/.pbai4devs/commands/status-roadmap/COMMAND.md +12 -0
  24. package/.pbai4devs/commands/testar-navegador/COMMAND.md +16 -0
  25. package/.pbai4devs/commands/verificar-agentes/COMMAND.md +19 -0
  26. package/.pbai4devs/estado/README.md +12 -0
  27. package/.pbai4devs/external-skills/CATALOG.json +121 -0
  28. package/.pbai4devs/external-skills/README.md +48 -0
  29. package/.pbai4devs/rules/README.md +18 -0
  30. package/.pbai4devs/rules/ambiente-local/RULE.md +33 -0
  31. package/.pbai4devs/rules/ambiente-local/cursor.yaml +4 -0
  32. package/.pbai4devs/rules/documentacao/RULE.md +11 -0
  33. package/.pbai4devs/rules/documentacao/cursor.yaml +4 -0
  34. package/.pbai4devs/rules/estrutura/RULE.md +33 -0
  35. package/.pbai4devs/rules/estrutura/cursor.yaml +4 -0
  36. package/.pbai4devs/rules/git/RULE.md +18 -0
  37. package/.pbai4devs/rules/git/cursor.yaml +4 -0
  38. package/.pbai4devs/rules/proximos-passos/RULE.md +14 -0
  39. package/.pbai4devs/rules/qualidade/RULE.md +32 -0
  40. package/.pbai4devs/rules/qualidade/cursor.yaml +4 -0
  41. package/.pbai4devs/scripts/README.md +69 -0
  42. package/.pbai4devs/scripts/diagnosticar-ambiente/SCRIPT.mjs +41 -0
  43. package/.pbai4devs/scripts/diagnosticar-ambiente/tests/TEST.mjs +30 -0
  44. package/.pbai4devs/scripts/executar-script/README.md +28 -0
  45. package/.pbai4devs/scripts/executar-script/SCRIPT.mjs +78 -0
  46. package/.pbai4devs/scripts/executar-script/tests/TEST.mjs +122 -0
  47. package/.pbai4devs/scripts/gerenciar-skills-externas/README.md +31 -0
  48. package/.pbai4devs/scripts/gerenciar-skills-externas/SCRIPT.mjs +182 -0
  49. package/.pbai4devs/scripts/gerenciar-skills-externas/tests/TEST.mjs +134 -0
  50. package/.pbai4devs/scripts/inspecionar-projeto/SCRIPT.mjs +190 -0
  51. package/.pbai4devs/scripts/inspecionar-projeto/tests/TEST.mjs +161 -0
  52. package/.pbai4devs/scripts/lib/README.md +9 -0
  53. package/.pbai4devs/scripts/lib/adapters.mjs +135 -0
  54. package/.pbai4devs/scripts/lib/catalog.mjs +170 -0
  55. package/.pbai4devs/scripts/lib/gitignore.mjs +348 -0
  56. package/.pbai4devs/scripts/lib/npm.mjs +17 -0
  57. package/.pbai4devs/scripts/lib/resource-path.mjs +20 -0
  58. package/.pbai4devs/scripts/lib/runtime.mjs +28 -0
  59. package/.pbai4devs/scripts/lib/script-config.mjs +8 -0
  60. package/.pbai4devs/scripts/preparar-ferramentas/BOOTSTRAP.md +34 -0
  61. package/.pbai4devs/scripts/preparar-ferramentas/BOOTSTRAP.mjs +189 -0
  62. package/.pbai4devs/scripts/preparar-ferramentas/README.md +71 -0
  63. package/.pbai4devs/scripts/preparar-ferramentas/SCRIPT.mjs +455 -0
  64. package/.pbai4devs/scripts/preparar-ferramentas/tests/FIXTURE.html +20 -0
  65. package/.pbai4devs/scripts/preparar-ferramentas/tests/SMOKE_BROWSER.mjs +55 -0
  66. package/.pbai4devs/scripts/preparar-ferramentas/tests/SMOKE_DESKTOP.mjs +61 -0
  67. package/.pbai4devs/scripts/preparar-ferramentas/tests/SMOKE_VERCEL.mjs +192 -0
  68. package/.pbai4devs/scripts/preparar-ferramentas/tests/TEST.mjs +552 -0
  69. package/.pbai4devs/scripts/preparar-ferramentas/tests/bootstrap.test.mjs +94 -0
  70. package/.pbai4devs/scripts/preparar-ferramentas/tests/fixtures-vercel/just-bash/input.txt +2 -0
  71. package/.pbai4devs/scripts/preparar-ferramentas/tests/fixtures-vercel/just-bash-overlay/input.txt +1 -0
  72. package/.pbai4devs/scripts/preparar-ferramentas/tests/fixtures-vercel/skills/agentdevkit-smoke/SKILL.md +8 -0
  73. package/.pbai4devs/scripts/preparar-ferramentas/tests/fixtures-vercel/webreel/index.html +6 -0
  74. package/.pbai4devs/scripts/preparar-ferramentas/tests/fixtures-vercel/webreel/webreel.config.json +10 -0
  75. package/.pbai4devs/scripts/revisar-entrega/README.md +36 -0
  76. package/.pbai4devs/scripts/revisar-entrega/SCRIPT.mjs +249 -0
  77. package/.pbai4devs/scripts/revisar-entrega/tests/TEST.mjs +249 -0
  78. package/.pbai4devs/scripts/sincronizar-agentes/README.md +41 -0
  79. package/.pbai4devs/scripts/sincronizar-agentes/SCRIPT.mjs +473 -0
  80. package/.pbai4devs/scripts/sincronizar-agentes/tests/LOCAL_IGNORE.mjs +290 -0
  81. package/.pbai4devs/scripts/sincronizar-agentes/tests/TEST.mjs +869 -0
  82. package/.pbai4devs/scripts/testar-infraestrutura/SCRIPT.mjs +39 -0
  83. package/.pbai4devs/scripts/testar-infraestrutura/tests/TEST.mjs +29 -0
  84. package/.pbai4devs/scripts/testar-maturidade/README.md +54 -0
  85. package/.pbai4devs/scripts/testar-maturidade/SCRIPT.mjs +477 -0
  86. package/.pbai4devs/scripts/testar-maturidade/assets/calculator.mjs +1 -0
  87. package/.pbai4devs/scripts/testar-maturidade/assets/calculator.test.mjs.template +8 -0
  88. package/.pbai4devs/scripts/testar-maturidade/assets/http-api.test.mjs.template +28 -0
  89. package/.pbai4devs/scripts/testar-maturidade/assets/server.mjs +34 -0
  90. package/.pbai4devs/scripts/testar-maturidade/tests/TEST.mjs +305 -0
  91. package/.pbai4devs/scripts/testar-navegador/REFERENCE.md +49 -0
  92. package/.pbai4devs/scripts/testar-navegador/SCRIPT.conf +1 -0
  93. package/.pbai4devs/scripts/testar-navegador/SCRIPT.js +64 -0
  94. package/.pbai4devs/scripts/testar-navegador/tests/FAIL.js +8 -0
  95. package/.pbai4devs/scripts/testar-navegador/tests/SUCCESS.js +13 -0
  96. package/.pbai4devs/scripts/verificar-recursos/README.md +25 -0
  97. package/.pbai4devs/scripts/verificar-recursos/SCRIPT.mjs +209 -0
  98. package/.pbai4devs/scripts/verificar-recursos/tests/TEST.mjs +310 -0
  99. package/.pbai4devs/scripts/verificar-recursos/tests/ambiente-local.mjs +80 -0
  100. package/.pbai4devs/skills/README.md +24 -0
  101. package/.pbai4devs/skills/git/git-branch/SKILL.md +11 -0
  102. package/.pbai4devs/skills/git/git-commit/SKILL.md +16 -0
  103. package/.pbai4devs/skills/git/git-diff/SKILL.md +9 -0
  104. package/.pbai4devs/skills/git/git-fetch/SKILL.md +10 -0
  105. package/.pbai4devs/skills/git/git-log/SKILL.md +9 -0
  106. package/.pbai4devs/skills/git/git-merge/SKILL.md +13 -0
  107. package/.pbai4devs/skills/git/git-pull/SKILL.md +12 -0
  108. package/.pbai4devs/skills/git/git-push/SKILL.md +12 -0
  109. package/.pbai4devs/skills/git/git-status/SKILL.md +9 -0
  110. package/.pbai4devs/skills/git/git-worktree/SKILL.md +10 -0
  111. package/.pbai4devs/skills/produto/criar-design-doc/SKILL.md +37 -0
  112. package/.pbai4devs/skills/produto/criar-prd/SKILL.md +35 -0
  113. package/.pbai4devs/skills/produto/criar-ux-ui/SKILL.md +34 -0
  114. package/.pbai4devs/skills/projeto/atualizar-documentacao/SKILL.md +26 -0
  115. package/.pbai4devs/skills/projeto/configurar-projeto/SKILL.md +62 -0
  116. package/.pbai4devs/skills/projeto/criar-agente/SKILL.md +20 -0
  117. package/.pbai4devs/skills/projeto/criar-comando/SKILL.md +25 -0
  118. package/.pbai4devs/skills/projeto/criar-recurso/SKILL.md +41 -0
  119. package/.pbai4devs/skills/projeto/criar-regra/SKILL.md +19 -0
  120. package/.pbai4devs/skills/projeto/criar-skill/SKILL.md +22 -0
  121. package/.pbai4devs/skills/projeto/executar-script/SKILL.md +29 -0
  122. package/.pbai4devs/skills/projeto/preparar-dev/SKILL.md +45 -0
  123. package/.pbai4devs/skills/projeto/preparar-ferramentas/SKILL.md +56 -0
  124. package/.pbai4devs/skills/projeto/proximos-passos/SKILL.md +23 -0
  125. package/.pbai4devs/skills/projeto/sincronizar-agentes/SKILL.md +42 -0
  126. package/.pbai4devs/skills/projeto/usar-skills-externas/SKILL.md +28 -0
  127. package/.pbai4devs/skills/projeto/verificar-trabalho/SKILL.md +45 -0
  128. package/.pbai4devs/skills/specs/criar-spec/SKILL.md +33 -0
  129. package/.pbai4devs/skills/specs/gerenciar-roadmap/SKILL.md +26 -0
  130. package/.pbai4devs/skills/specs/implementar-spec/SKILL.md +48 -0
  131. package/.pbai4devs/templates/README.md +65 -0
  132. package/.pbai4devs/templates/adr/TEMPLATE.md +21 -0
  133. package/.pbai4devs/templates/ambiente-local/Makefile.template +48 -0
  134. package/.pbai4devs/templates/ambiente-local/TEMPLATE.md +48 -0
  135. package/.pbai4devs/templates/ambiente-local/compose.local.yml.template +16 -0
  136. package/.pbai4devs/templates/ambiente-local/dockerignore.template +28 -0
  137. package/.pbai4devs/templates/changelog/TEMPLATE.md +17 -0
  138. package/.pbai4devs/templates/claude/TEMPLATE.md +8 -0
  139. package/.pbai4devs/templates/clients/ADAPTERS.json +306 -0
  140. package/.pbai4devs/templates/clients/TEMPLATE.md +12 -0
  141. package/.pbai4devs/templates/comando/TEMPLATE.md +15 -0
  142. package/.pbai4devs/templates/configuracao/TEMPLATE.md +46 -0
  143. package/.pbai4devs/templates/configuracao-raiz/TEMPLATE.md +22 -0
  144. package/.pbai4devs/templates/configuracao-raiz/editorconfig.template +21 -0
  145. package/.pbai4devs/templates/configuracao-raiz/env.example.template +3 -0
  146. package/.pbai4devs/templates/configuracao-raiz/gitattributes.template +6 -0
  147. package/.pbai4devs/templates/contribuicao/TEMPLATE.md +23 -0
  148. package/.pbai4devs/templates/design/TEMPLATE.md +30 -0
  149. package/.pbai4devs/templates/entrypoints/AGENTS.md +19 -0
  150. package/.pbai4devs/templates/entrypoints/CLAUDE.md +7 -0
  151. package/.pbai4devs/templates/entrypoints/GEMINI.md +7 -0
  152. package/.pbai4devs/templates/entrypoints/TEMPLATE.md +12 -0
  153. package/.pbai4devs/templates/gitignore/TEMPLATE.md +42 -0
  154. package/.pbai4devs/templates/gitignore/agents.ignore +45 -0
  155. package/.pbai4devs/templates/gitignore/clients.json +20 -0
  156. package/.pbai4devs/templates/gitignore/local.ignore +10 -0
  157. package/.pbai4devs/templates/gitignore/shared.ignore +60 -0
  158. package/.pbai4devs/templates/instrucoes-agentes/TEMPLATE.md +25 -0
  159. package/.pbai4devs/templates/plano-implementacao/TEMPLATE.md +27 -0
  160. package/.pbai4devs/templates/prd/TEMPLATE.md +30 -0
  161. package/.pbai4devs/templates/readme-pasta/TEMPLATE.md +16 -0
  162. package/.pbai4devs/templates/readme-projeto/TEMPLATE.md +34 -0
  163. package/.pbai4devs/templates/release/TEMPLATE.md +23 -0
  164. package/.pbai4devs/templates/revisao-entrega/TEMPLATE.md +41 -0
  165. package/.pbai4devs/templates/roadmap/TEMPLATE.md +18 -0
  166. package/.pbai4devs/templates/seguranca/TEMPLATE.md +22 -0
  167. package/.pbai4devs/templates/spec/TEMPLATE.md +61 -0
  168. package/.pbai4devs/templates/tasks/TEMPLATE.md +20 -0
  169. package/.pbai4devs/templates/ux-ui/TEMPLATE.md +26 -0
  170. package/.pbai4devs/tools/README.md +87 -0
  171. package/.pbai4devs/tools/agent-browser/README.md +26 -0
  172. package/.pbai4devs/tools/agent-browser/SCRIPT.mjs +5 -0
  173. package/.pbai4devs/tools/agent-browser/TOOL.json +33 -0
  174. package/.pbai4devs/tools/agent-desktop/README.md +26 -0
  175. package/.pbai4devs/tools/agent-desktop/SCRIPT.mjs +5 -0
  176. package/.pbai4devs/tools/agent-desktop/TOOL.json +30 -0
  177. package/.pbai4devs/tools/just-bash/README.md +23 -0
  178. package/.pbai4devs/tools/just-bash/SCRIPT.mjs +5 -0
  179. package/.pbai4devs/tools/just-bash/TOOL.json +27 -0
  180. package/.pbai4devs/tools/markdownlint-cli2/README.md +18 -0
  181. package/.pbai4devs/tools/markdownlint-cli2/SCRIPT.mjs +5 -0
  182. package/.pbai4devs/tools/markdownlint-cli2/TOOL.json +28 -0
  183. package/.pbai4devs/tools/opensrc/README.md +25 -0
  184. package/.pbai4devs/tools/opensrc/SCRIPT.mjs +5 -0
  185. package/.pbai4devs/tools/opensrc/TOOL.json +29 -0
  186. package/.pbai4devs/tools/portless/README.md +21 -0
  187. package/.pbai4devs/tools/portless/SCRIPT.mjs +5 -0
  188. package/.pbai4devs/tools/portless/TOOL.json +30 -0
  189. package/.pbai4devs/tools/skills/README.md +24 -0
  190. package/.pbai4devs/tools/skills/SCRIPT.mjs +5 -0
  191. package/.pbai4devs/tools/skills/TOOL.json +33 -0
  192. package/.pbai4devs/tools/webreel/README.md +23 -0
  193. package/.pbai4devs/tools/webreel/SCRIPT.mjs +5 -0
  194. package/.pbai4devs/tools/webreel/TOOL.json +25 -0
  195. package/CHANGELOG.md +65 -0
  196. package/CONTRIBUTING.md +73 -0
  197. package/LICENSE +21 -0
  198. package/README.en.md +89 -0
  199. package/README.es.md +91 -0
  200. package/README.md +94 -2
  201. package/bin/README.md +8 -0
  202. package/bin/agentdevkit.mjs +35 -0
  203. package/docs/README.md +81 -0
  204. package/docs/guides/README.md +14 -0
  205. package/docs/guides/cli.md +81 -0
  206. package/docs/guides/installation.md +86 -0
  207. package/docs/guides/resources.md +121 -0
  208. package/docs/guides/tools-and-testing.md +85 -0
  209. package/docs/guides/troubleshooting.md +151 -0
  210. package/docs/guides/workflow.md +130 -0
  211. package/docs/maintainers/README.md +12 -0
  212. package/docs/maintainers/community.md +49 -0
  213. package/docs/maintainers/development.md +54 -0
  214. package/docs/maintainers/maintenance.md +104 -0
  215. package/docs/maintainers/packages.md +87 -0
  216. package/docs/product/README.md +12 -0
  217. package/docs/product/design.md +104 -0
  218. package/docs/product/prd.md +70 -0
  219. package/docs/product/roadmap.md +38 -0
  220. package/docs/product/ux-ui.md +42 -0
  221. package/docs/specs/README.md +21 -0
  222. package/docs/specs/github-packages/SPEC.md +45 -0
  223. package/docs/specs/v0.0.1/README.md +10 -0
  224. package/docs/specs/v0.0.1/SPEC.md +57 -0
  225. package/docs/specs/v0.0.2/README.md +10 -0
  226. package/docs/specs/v0.0.2/SPEC.md +67 -0
  227. package/docs/specs/v0.0.3/README.md +10 -0
  228. package/docs/specs/v0.0.3/SPEC.md +64 -0
  229. package/docs/specs/v0.0.4/README.md +10 -0
  230. package/docs/specs/v0.0.4/SPEC.md +53 -0
  231. package/docs/specs/v0.0.5/README.md +9 -0
  232. package/docs/specs/v0.0.5/SPEC.md +42 -0
  233. package/docs/specs/v0.0.6/README.md +10 -0
  234. package/docs/specs/v0.0.6/SPEC.md +77 -0
  235. package/package.json +67 -4
  236. package/src/README.md +16 -0
  237. package/src/adapters/index.mjs +1 -0
  238. package/src/cli.mjs +162 -0
  239. package/src/config.mjs +14 -0
  240. package/src/i18n.mjs +42 -0
  241. package/src/install.mjs +373 -0
  242. package/src/next.mjs +79 -0
@@ -0,0 +1,121 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "allowlist": [
4
+ "vercel-labs/skills",
5
+ "vercel-labs/agent-skills",
6
+ "cloudflare/skills",
7
+ "microsoft/skills",
8
+ "oracle/skills",
9
+ "anthropics/skills",
10
+ "openai/skills",
11
+ "tech-leads-club/agent-skills"
12
+ ],
13
+ "skills": [
14
+ {
15
+ "id": "vercel-writing-guidelines",
16
+ "repository": "vercel-labs/agent-skills",
17
+ "commit": "1a2c79d4e6c4a2283dc2c614b6538cbe1ed5ca62",
18
+ "path": "skills/writing-guidelines/SKILL.md",
19
+ "name": "writing-guidelines",
20
+ "license": "MIT",
21
+ "use": "Revisar textos e documentação quando a tarefa pedir orientação editorial.",
22
+ "status": "reviewed",
23
+ "notes": "Licença declarada no README da origem. O pin não congela regras buscadas em main. Aplicar somente princípios editoriais compatíveis; Markdown, Node, autoria Git e demais regras locais prevalecem sobre recomendações de MDX/TypeScript ou atribuição de agentes.",
24
+ "licenseSource": "https://github.com/vercel-labs/agent-skills/blob/1a2c79d4e6c4a2283dc2c614b6538cbe1ed5ca62/README.md#license"
25
+ },
26
+ {
27
+ "id": "cloudflare-web-perf",
28
+ "repository": "cloudflare/skills",
29
+ "commit": "cbf893b954222276bf1af57e5f23379231e0efb9",
30
+ "path": "skills/web-perf/SKILL.md",
31
+ "name": "web-perf",
32
+ "license": "Apache-2.0",
33
+ "use": "Investigar desempenho web com medições reais quando houver página e ferramenta disponíveis.",
34
+ "status": "reviewed",
35
+ "notes": "Depende das ferramentas de navegador necessárias à investigação. Salvar evidências em .agent-tests e informar medições não executadas.",
36
+ "licenseSource": "https://github.com/cloudflare/skills/blob/cbf893b954222276bf1af57e5f23379231e0efb9/LICENSE"
37
+ },
38
+ {
39
+ "id": "anthropic-frontend-design",
40
+ "repository": "anthropics/skills",
41
+ "commit": "2c5958ecac7cee2b583967a2c4981d0f4a75c579",
42
+ "path": "skills/frontend-design/SKILL.md",
43
+ "name": "frontend-design",
44
+ "license": "Apache-2.0",
45
+ "use": "Apoiar implementação visual após decisões de produto e design.",
46
+ "status": "reviewed",
47
+ "notes": "LICENSE.txt presente na pasta. Aplicar às interfaces solicitadas, respeitando o design aprovado e a stack do projeto.",
48
+ "licenseSource": "https://github.com/anthropics/skills/blob/2c5958ecac7cee2b583967a2c4981d0f4a75c579/skills/frontend-design/LICENSE.txt"
49
+ },
50
+ {
51
+ "id": "openai-security-best-practices",
52
+ "repository": "openai/skills",
53
+ "commit": "49f948faa9258a0c61caceaf225e179651397431",
54
+ "path": "skills/.curated/security-best-practices/SKILL.md",
55
+ "name": "security-best-practices",
56
+ "license": "Apache-2.0",
57
+ "use": "Revisar práticas de segurança quando solicitado explicitamente.",
58
+ "status": "reviewed",
59
+ "notes": "LICENSE.txt e referências devem ser preservados. Suporte orientado a Python, JavaScript/TypeScript e Go; sem auditoria automática fora do escopo.",
60
+ "licenseSource": "https://github.com/openai/skills/blob/49f948faa9258a0c61caceaf225e179651397431/skills/.curated/security-best-practices/LICENSE.txt"
61
+ },
62
+ {
63
+ "id": "microsoft-frontend-review",
64
+ "repository": "microsoft/skills",
65
+ "commit": "4cfa010138972d45a7bb92edea90094f4f443da8",
66
+ "path": ".github/skills/frontend-design-review/SKILL.md",
67
+ "name": "frontend-design-review",
68
+ "license": "MIT",
69
+ "use": "Revisar uma interface existente quando essa revisão fizer parte da tarefa.",
70
+ "status": "reviewed",
71
+ "notes": "Licença MIT na raiz da origem. Respeitar a revisão pedida e complementar recomendações com validação real no navegador.",
72
+ "licenseSource": "https://github.com/microsoft/skills/blob/4cfa010138972d45a7bb92edea90094f4f443da8/LICENSE"
73
+ },
74
+ {
75
+ "id": "vercel-react-best-practices",
76
+ "repository": "vercel-labs/agent-skills",
77
+ "commit": "1a2c79d4e6c4a2283dc2c614b6538cbe1ed5ca62",
78
+ "path": "skills/react-best-practices/SKILL.md",
79
+ "name": "vercel-react-best-practices",
80
+ "license": "MIT",
81
+ "use": "Revisar React/Next.js quando essa stack tiver sido aprovada.",
82
+ "status": "candidate",
83
+ "notes": "Adoção depende da stack e da revisão da pasta. Não define a tecnologia do produto.",
84
+ "licenseSource": "https://github.com/vercel-labs/agent-skills/blob/1a2c79d4e6c4a2283dc2c614b6538cbe1ed5ca62/README.md#license"
85
+ },
86
+ {
87
+ "id": "cloudflare-workers-best-practices",
88
+ "repository": "cloudflare/skills",
89
+ "commit": "cbf893b954222276bf1af57e5f23379231e0efb9",
90
+ "path": "skills/workers-best-practices/SKILL.md",
91
+ "name": "workers-best-practices",
92
+ "license": "Apache-2.0",
93
+ "use": "Revisar Workers quando a arquitetura utilizar Cloudflare.",
94
+ "status": "candidate",
95
+ "notes": "Consultar versão e documentação atual; não criar infraestrutura nem fazer deploy por iniciativa própria.",
96
+ "licenseSource": "https://github.com/cloudflare/skills/blob/cbf893b954222276bf1af57e5f23379231e0efb9/LICENSE"
97
+ },
98
+ {
99
+ "id": "oracle-database",
100
+ "repository": "oracle/skills",
101
+ "commit": "0779f030fdee393ee418a3a76f6a4b09bf1408db",
102
+ "path": "db/SKILL.md",
103
+ "name": "db",
104
+ "license": "UPL-1.0",
105
+ "use": "Trabalhar com Oracle Database se escolhido no design.",
106
+ "status": "candidate",
107
+ "notes": "Pode chamar SQLcl/MCP e operações de banco. Exige revisão do escopo, licença e ferramentas; não faz parte da configuração base."
108
+ },
109
+ {
110
+ "id": "community-spec-driven-eval",
111
+ "repository": "tech-leads-club/agent-skills",
112
+ "commit": "e74dc8a7e8d59bb36f267afd089580e0858e224a",
113
+ "path": "packages/skills-catalog/skills/(development)/spec-driven-eval/SKILL.md",
114
+ "name": "spec-driven-eval",
115
+ "license": "CC-BY-4.0",
116
+ "use": "Avaliar implementação contra critérios de aceite.",
117
+ "status": "candidate",
118
+ "notes": "Fonte comunitária com atribuição. Revisar licença e adaptar destino de relatórios para .agent-tests; a origem grava junto da spec."
119
+ }
120
+ ]
121
+ }
@@ -0,0 +1,48 @@
1
+ ---
2
+ description: Catálogo revisado e cópias locais de skills externas.
3
+ ---
4
+
5
+ # Skills externas
6
+
7
+ [CATALOG.json](CATALOG.json) registra origem, commit imutável, arquivo,
8
+ nome, licença, finalidade e revisão local. `reviewed` indica curadoria para o
9
+ uso descrito. As instruções do usuário e as regras do projeto prevalecem.
10
+
11
+ Use o [gerenciador](../scripts/gerenciar-skills-externas/README.md) para listar,
12
+ descobrir, instalar, verificar ou ler uma entrada. Instale antes o CLI `skills`
13
+ pelo gerenciador de ferramentas. Node.js 24+ é o runtime comum.
14
+
15
+ As cópias completas ficam em `.local/<id>/`, com referências e licenças
16
+ incluídas pela origem. O CLI oficial faz o download e a cópia; nenhuma skill
17
+ é espelhada em `.pbai4devs/skills/`, pastas de clientes ou diretórios globais.
18
+ Somente catálogo, guias e automações próprias são versionados.
19
+ `licenseSource` aponta para a declaração de licença no mesmo commit, inclusive
20
+ quando ela fica na raiz do repositório e não vem junto da pasta da skill.
21
+
22
+ Atualizações exigem revisar e registrar um novo SHA no catálogo. Ler uma
23
+ skill não executa suas instruções: aplique-a somente à tarefa pertinente.
24
+ Evidências ficam em `.agent-tests/`; publicação, instalação global e fluxos
25
+ externos que alteram o projeto dependem do pedido correspondente. Spec Kit e
26
+ OpenSpec seguem seus próprios fluxos e não são iniciados por este catálogo.
27
+
28
+ As notas de cada entrada registram dependências e conteúdo remoto adicional.
29
+ O pin congela os arquivos copiados; regras buscadas depois em `main` precisam
30
+ de nova leitura antes de uso.
31
+
32
+ ## Outras fontes e fluxos
33
+
34
+ | Fonte | Aplicação |
35
+ | --- | --- |
36
+ | [Vercel](https://vercel.com/docs/agent-resources/skills), [CLI skills](https://github.com/vercel-labs/skills) | Descoberta e download pelo CLI já preparado. |
37
+ | [Cloudflare](https://github.com/cloudflare/skills), [APIs de skills](https://developers.cloudflare.com/agents/tools/skills/) | Catálogo local e APIs do runtime são recursos distintos. |
38
+ | [Microsoft](https://github.com/microsoft/skills), [Anthropic](https://github.com/anthropics/skills), [OpenAI](https://github.com/openai/skills) | Referências por tarefa; confira licença e dependências de cada pasta. |
39
+ | [Oracle](https://github.com/oracle/skills) | Candidatas para banco e Graal; uso depende da stack. |
40
+ | [Tech Leads Club](https://github.com/tech-leads-club/agent-skills) | Fonte comunitária; revisar licença e destinos de evidências. |
41
+ | [Spec Kit](https://github.github.com/spec-kit/), [código](https://github.com/github/spec-kit) | Aproveitar fases, artefatos e convergência; o CLI Python/uv fica fora do runtime Node adotado. |
42
+ | [OpenSpec](https://openspec.dev/), [código](https://github.com/Fission-AI/OpenSpec) | Fluxo próprio de proposal/design/tasks/verify; `init` depende de decisão explícita porque altera o projeto. |
43
+ | [Dotcontext](https://github.com/vinilana/dotcontext), antigo [AI Coders Context](https://www.npmjs.com/package/@ai-coders/context) | Avaliar manualmente o fluxo PREVC e `.context`; CLI, MCP, harness e hooks opcionais podem alterar destinos. |
44
+
45
+ As entradas revisadas de Microsoft, Anthropic e OpenAI estão identificadas no
46
+ catálogo. Vercel Writing Guidelines deve contribuir apenas com princípios
47
+ editoriais compatíveis: seus padrões de MDX/TypeScript e atribuição de agentes
48
+ não substituem os padrões locais de Markdown, Node e autoria Git.
@@ -0,0 +1,18 @@
1
+ ---
2
+ description: Finalidade e criação das regras compartilhadas.
3
+ ---
4
+
5
+ # Regras
6
+
7
+ Orientam contextos recorrentes. Use `criar-regra` quando uma convenção precisar
8
+ valer em várias tarefas; salve em `<nome>/RULE.md` e defina seu escopo.
9
+
10
+ - [Estrutura](estrutura/RULE.md): organização, concisão e sincronização.
11
+ - [Qualidade](qualidade/RULE.md): testes, evidências e Markdown.
12
+ - [Git](git/RULE.md): commits, autoria e publicação.
13
+ - [Ambiente local](ambiente-local/RULE.md): estrutura, Docker e comandos reais.
14
+ - [Documentação](documentacao/RULE.md): revisão após toda implementação.
15
+ - [Próximos passos](proximos-passos/RULE.md): continuidade explícita por etapa.
16
+
17
+ O Cursor usa regras `.mdc`; se o espelho não for carregado automaticamente,
18
+ peça leitura explícita. Preserve o escopo nos formatos nativos disponíveis.
@@ -0,0 +1,33 @@
1
+ ---
2
+ trigger: always_on
3
+ description: Estrutura mínima e ambiente local dos projetos com Docker Compose.
4
+ ---
5
+
6
+ # Ambiente local
7
+
8
+ Na configuração técnica de projetos novos, mantenha `.pbai4devs/` e gere apenas
9
+ os clientes selecionados. Configure `.vscode/` quando esse editor for adotado.
10
+ Para a aplicação, crie `src/`, `tests/` e `infra/compose/compose.local.yml`.
11
+ São obrigatórios `.gitignore`, `.gitattributes`, `.editorconfig`,
12
+ `.dockerignore`, `Makefile` e `README.md`; `scripts/` é opcional para automações
13
+ da aplicação. Em projetos existentes, preserve a organização até uma
14
+ padronização autorizada; preparar a máquina não implica migrar o projeto.
15
+
16
+ Execute o ambiente local em Docker Compose. Esclareça serviços e versões,
17
+ bancos, cache, filas, integrações, recursos, segredos, portas e dados existentes.
18
+ Pergunte a porta de entrada; se o usuário não souber, escolha uma livre e
19
+ registre-a. Publique somente o necessário em localhost, com healthchecks e
20
+ persistência explícita. Preserve volumes; não execute `down -v` como rotina.
21
+
22
+ Traefik é opcional para compartilhar a porta de entrada entre aplicações com
23
+ hosts distintos. Use configuração de arquivo ou proxy restrito para descoberta;
24
+ não exponha dashboard nem acesso irrestrito ao socket Docker.
25
+
26
+ O Makefile deve oferecer `help`, `doctor`, `setup`, `up`, `down`, `logs`,
27
+ `test`, `lint` e `build`, com comandos reais da stack. Etapas ainda indefinidas
28
+ devem falhar com mensagem útil; não simule sucesso. Documente os comandos,
29
+ dependências e URL/porta no README; valide Compose e saúde antes de concluir.
30
+
31
+ Use o [modelo de ambiente](../../templates/ambiente-local/TEMPLATE.md) para
32
+ perguntas e arquivos-base. Versões da aplicação seguem as decisões do projeto;
33
+ atualização de ferramentas locais não atualiza bancos ou dependências da stack.
@@ -0,0 +1,4 @@
1
+ ---
2
+ description: Estrutura mínima e ambiente local com Docker Compose.
3
+ alwaysApply: true
4
+ ---
@@ -0,0 +1,11 @@
1
+ ---
2
+ trigger: always_on
3
+ description: Documentação e revisão fazem parte de toda entrega implementada.
4
+ ---
5
+
6
+ # Documentação da entrega
7
+
8
+ Após implementar, siga `atualizar-documentacao` e o comando `revisar-entrega`
9
+ antes de commit ou merge. Use os modelos da fase atual; registre decisões sem
10
+ impacto com justificativa e resolva os achados da revisão independente.
11
+ Uma mudança sem spec também precisa de critérios e evidências verificáveis.
@@ -0,0 +1,4 @@
1
+ ---
2
+ description: Documentação e revisão fazem parte de toda entrega implementada.
3
+ alwaysApply: true
4
+ ---
@@ -0,0 +1,33 @@
1
+ ---
2
+ trigger: always_on
3
+ description: Organização, concisão e sincronização dos recursos compartilhados.
4
+ ---
5
+
6
+ # Estrutura
7
+
8
+ Use a skill específica ou `criar-recurso`. Reutilize antes de criar. Mantenha
9
+ uma origem por recurso, uma pasta por nome e um arquivo principal por tipo.
10
+ Escreva instruções curtas; carregue detalhes opcionais só quando necessários.
11
+
12
+ Após criar, alterar, renomear ou remover recursos do hub, execute
13
+ `sincronizar-agentes` e seu `--check`. Registre clientes agênticos nos templates
14
+ em `.pbai4devs/templates/clients/`, sem tratar tools como destinos.
15
+ Documentos de produto fora do hub seguem seus próprios índices; alterá-los
16
+ não exige sincronizar os agentes. Os espelhos contêm metadados e apontamentos.
17
+ Espelhe apenas os principais `SKILL.md`, `AGENT.md`, `COMMAND.md` e `RULE.md`.
18
+ Não replique templates, scripts, tools, estado, testes, docs ou guias.
19
+ Repare com `--force` quando necessário: os destinos gerenciados podem ser
20
+ sobrescritos e limpos; preserve a origem e os arquivos nativos fora desse escopo.
21
+ Cada pasta de primeiro nível de `.pbai4devs` tem um README curto sobre seu uso.
22
+ Cada pasta criada em `docs/`, incluindo ancestrais necessários, tem um README
23
+ conciso sobre finalidade e público; preserve os arquivos existentes.
24
+ Guias `README.md` e `INSTRUCTIONS.md` ficam só em `.pbai4devs`, sem espelhamento.
25
+ Automações seguem `executar-script`: identifique SO, runtimes e conectores;
26
+ reutilize scripts e ferramentas instaladas antes de gerar código na conversa.
27
+ Enquanto configurar os agentes, mantenha os documentos de produto como modelos.
28
+ Testes compartilhados ficam junto de cada script em `tests/`; testes do
29
+ próprio AgentDevKit ficam em `tests/`, na raiz. Em tools, versione fontes;
30
+ downloads e registros ficam em `<nome>/.local/`, cache em `.cache/`, launchers em
31
+ `bin/`. Não duplique o instalador nem espelhe esses recursos nas ferramentas.
32
+ Mantenha os derivados locais e ignorados pelo sincronizador. Novas fontes
33
+ precisam continuar versionáveis; confira o resultado com Git.
@@ -0,0 +1,4 @@
1
+ ---
2
+ description: Organização e sincronização dos recursos compartilhados.
3
+ alwaysApply: true
4
+ ---
@@ -0,0 +1,18 @@
1
+ ---
2
+ trigger: model_decision
3
+ description: Aplique ao preparar, integrar ou publicar alterações Git.
4
+ ---
5
+
6
+ # Regras Git
7
+
8
+ Use Conventional Commits (`tipo(escopo): descrição`, escopo opcional), inclusive
9
+ em checkpoints e merges; destaque mudanças incompatíveis com `!` ou
10
+ `BREAKING CHANGE:`. Autor e committer devem ser o usuário, nunca um agente;
11
+ confira as identidades efetivas e não adicione coautoria ou identificação de
12
+ agente. Se a identidade do usuário não estiver clara, pergunte. Não altere a
13
+ configuração ou a assinatura criptográfica automaticamente e não reescreva
14
+ autores humanos existentes.
15
+
16
+ Antes de publicar, confira o conteúdo, as verificações e o estado remoto; não
17
+ envie tarefas incompletas nem use push forçado. Consulte a skill correspondente
18
+ em `.pbai4devs/skills/git/`.
@@ -0,0 +1,4 @@
1
+ ---
2
+ description: Convenções de Git e autoria dos commits do projeto.
3
+ alwaysApply: true
4
+ ---
@@ -0,0 +1,14 @@
1
+ ---
2
+ trigger: always_on
3
+ description: Mantém os próximos passos explícitos após cada etapa do trabalho.
4
+ ---
5
+
6
+ # Próximos passos
7
+
8
+ Conclua respostas sobre trabalho com resultado, pendências e próxima ação
9
+ aplicável, usando o idioma escolhido no projeto. No chat ou tela, termine com
10
+ **[ Próximo passo ]** e a ação/comando; use **[ Next step ]** em inglês ou
11
+ **[ Próximo paso ]** em espanhol. Use a skill
12
+ [proximos-passos](../../skills/projeto/proximos-passos/SKILL.md) quando precisar
13
+ determinar a fase ou seus pré-requisitos. Não repita etapas concluídas nem
14
+ confunda instalação de instruções com aprovação de produto ou execução de testes.
@@ -0,0 +1,32 @@
1
+ ---
2
+ trigger: always_on
3
+ description: Padrões de testes, evidências e Markdown do projeto.
4
+ ---
5
+
6
+ # Qualidade
7
+
8
+ Versione código de testes e fixtures em `tests/`; testes da infraestrutura de
9
+ agentes ficam em `.pbai4devs/scripts/<nome>/tests/`. Não versione
10
+ resultados, relatórios, capturas ou artefatos temporários: use `.agent-tests/`,
11
+ diretórios ignorados ou uma pasta temporária fora do repositório. Informe as
12
+ verificações necessárias que não puder executar.
13
+
14
+ Use `verificar-trabalho` para provar as mudanças. Alterações web exigem testar
15
+ o fluxo real no navegador; desktop exige abrir e testar a aplicação. Código
16
+ revisado, build ou fixture isolada não substituem essa prova funcional.
17
+
18
+ Comece arquivos Markdown com frontmatter YAML adequado ao tipo e título H1;
19
+ preserve os metadados exigidos pela ferramenta.
20
+
21
+ Ao criar ou atualizar `.gitignore`, mantenha o bloco do
22
+ [modelo de gitignore](../../templates/gitignore/TEMPLATE.md)
23
+ como última seção CUSTOM IGNORE e acrescente os padrões específicos ali.
24
+ As políticas vêm desse modelo. `.pbai4devs/.gitignore` controla o hub; o gerador
25
+ protege os derivados externos no Git local. Sem Git, uma proteção temporária
26
+ na raiz evita versioná-los ao iniciar o repositório.
27
+ Confira com Git tanto os arquivos permitidos quanto os artefatos ignorados.
28
+ Scripts compartilhados devem ser versionados; resultados locais, ignorados.
29
+ Ignore o conteúdo baixado de tools, preservando `TOOL.json`, scripts próprios
30
+ e guias. Não esconda scripts, fixtures ou templates por nome genérico ou
31
+ extensão. Qualquer arquivo ou pasta `.playwright*` fica ignorado, em qualquer
32
+ caixa, inclusive `.playwright-mcp`.
@@ -0,0 +1,4 @@
1
+ ---
2
+ description: Testes, evidências e Markdown do projeto.
3
+ alwaysApply: true
4
+ ---
@@ -0,0 +1,69 @@
1
+ ---
2
+ description: Seleção e uso das automações compartilhadas.
3
+ ---
4
+
5
+ # Scripts
6
+
7
+ Pré-requisito: [Node.js 24+ com npm](https://nodejs.org/en/download),
8
+ preferencialmente uma versão LTS. Automações próprias usam `.mjs` e o mesmo
9
+ comando em macOS, Linux e Windows. Bun não faz parte do contrato validado.
10
+ Versione scripts e testes; salve somente resultados em `.agent-tests/`.
11
+ Prepare ferramentas locais com `preparar-ferramentas`, sem instalações globais.
12
+ O runtime da aplicação será decidido no design doc; este requisito é dos agentes.
13
+ Com Node 18+, use o [bootstrap JavaScript](preparar-ferramentas/BOOTSTRAP.md)
14
+ com `--runtime-only` para preparar Node 24+ e continuar a operação.
15
+ Sem Node/npm, o agente instala primeiro pelo mecanismo do sistema operacional.
16
+ Não há inicializadores `.sh` ou `.ps1` no kit.
17
+
18
+ Na raiz do repositório, use o seletor (adicione `--plan` antes do nome para
19
+ consultar sem executar):
20
+
21
+ ```sh
22
+ node .pbai4devs/scripts/executar-script/SCRIPT.mjs diagnosticar-ambiente
23
+ ```
24
+
25
+ | Nome | Finalidade |
26
+ | --- | --- |
27
+ | `diagnosticar-ambiente` | Runtimes, pacotes e navegadores disponíveis |
28
+ | `inspecionar-projeto` | Detecta manifests, comandos e estrutura |
29
+ | `preparar-ferramentas` | Instala/atualiza ferramentas locais |
30
+ | `gerenciar-skills-externas` | Instala/check/read de skills curadas locais |
31
+ | `revisar-entrega` | Confere documentação, revisão e provas da mudança |
32
+ | `sincronizar-agentes` | Repara com `--force`; `--check` só confere |
33
+ | `verificar-recursos` | Estrutura Markdown, links e espelhos |
34
+ | `testar-infraestrutura` | Executa `tests/TEST.mjs` com Node |
35
+ | `testar-maturidade` | Gera e executa cenários em `examples/generated/` |
36
+ | `testar-navegador` | Cenários via conector Playwright; veja a [referência](testar-navegador/REFERENCE.md) |
37
+
38
+ Cada [ferramenta](../tools/README.md) tem `TOOL.json` e um `SCRIPT.mjs`,
39
+ com ações `install`, `update`, `check`, `info` e `run`.
40
+ Esses scripts delegam ao mesmo instalador; downloads ficam em `.local/`.
41
+ `preparar-ferramentas setup` instala e verifica todos os CLIs compatíveis.
42
+ Para um grupo, use `setup base`, `install base` ou `update base`;
43
+ `check base` não instala nem consulta novas versões.
44
+
45
+ O teste `preparar-ferramentas/tests/SMOKE_VERCEL.mjs` verifica CLIs opcionais
46
+ instaladas com fixtures locais. Execute com Node; resultados ficam em
47
+ `.agent-tests/vercel-labs/`. A suíte comum permanece independente desses downloads.
48
+
49
+ O seletor aceita nome ou caminho JavaScript, repassa os argumentos e preserva
50
+ o código de saída. Ele não procura outros interpretadores após uma falha.
51
+ `playwright-mcp` exige o conector: seu `SCRIPT.js` é código para uma página,
52
+ não um programa Node. Novas automações usam `.mjs`; `.bun` não é necessário.
53
+ Os testes de cada script ficam em `<nome>/tests/`; resultados e capturas em
54
+ `.agent-tests/`. Scripts, modelos e ferramentas não têm cópias nos agentes.
55
+
56
+ Os layouts vêm de `templates/clients/ADAPTERS.json` no hub. O manifesto local
57
+ `espelhos.conf` é gerado dessa fonte. Os metadados nativos ficam ao lado dos
58
+ recursos, com frontmatter YAML sem corpo. Caminhos são relativos à raiz.
59
+ Somente os quatro arquivos principais são fontes; não registre documentos.
60
+ Use `gitignore|pasta` para gerar apenas o `.gitignore`, como em `.vscode`.
61
+
62
+ `sincronizar-agentes --force` reconstrói os destinos e limpa auxiliares,
63
+ preservando configurações e workflows fora do escopo gerenciado. Conteúdo
64
+ próprio substituído recebe backup em `.agent-tests/`; `--check` não altera nada.
65
+ O sincronizador também gera o catálogo completo e os índices auxiliares a partir
66
+ das fontes. Helpers e testes constam como suporte, sem fingir comandos próprios.
67
+ Ele protege os derivados contra versionamento e preserva regras humanas.
68
+ As políticas vêm dos modelos de gitignore; o estado e os índices são locais.
69
+ Os exemplos de maturidade usam cópias locais, sem downloads ou estado pessoal.
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env node
2
+ import { spawnSync } from 'node:child_process';
3
+ import { join } from 'node:path';
4
+ import { ToolManager } from '../preparar-ferramentas/SCRIPT.mjs';
5
+ import { findExecutable, isMain, projectRoot, requireNode } from '../lib/runtime.mjs';
6
+
7
+ export function diagnose({ root = projectRoot, environment = process.env, probe = spawnSync } = {}) {
8
+ requireNode();
9
+ const manager = new ToolManager({ root });
10
+ const docker = findExecutable('docker', environment);
11
+ const execute = args => docker ? probe(docker, args, { encoding: 'utf8', timeout: 5000, windowsHide: true }).status === 0 : false;
12
+ const browserCandidates = [
13
+ environment.AGENT_BROWSER_EXECUTABLE_PATH,
14
+ '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
15
+ '/Applications/Chromium.app/Contents/MacOS/Chromium',
16
+ environment.PROGRAMFILES && join(environment.PROGRAMFILES, 'Google/Chrome/Application/chrome.exe'),
17
+ environment['PROGRAMFILES(X86)'] && join(environment['PROGRAMFILES(X86)'], 'Google/Chrome/Application/chrome.exe'),
18
+ environment.LOCALAPPDATA && join(environment.LOCALAPPDATA, 'Google/Chrome/Application/chrome.exe'),
19
+ environment.LOCALAPPDATA && join(environment.LOCALAPPDATA, 'Chromium/Application/chrome.exe'),
20
+ 'google-chrome', 'chromium', 'chromium-browser',
21
+ ].filter(Boolean);
22
+ return {
23
+ platform: process.platform,
24
+ arch: process.arch,
25
+ runtime: { name: 'node', version: process.version, executable: process.execPath },
26
+ npm: findExecutable('npm', environment),
27
+ git: findExecutable('git', environment),
28
+ docker: { executable: docker, compose: execute(['compose', 'version']), daemon: execute(['info', '--format', '{{.ServerVersion}}']) },
29
+ browsers: [...new Set(browserCandidates.map(name => findExecutable(name, environment)).filter(Boolean))],
30
+ tools: Object.keys(manager.catalog).map(name => {
31
+ const info = manager.info(name);
32
+ return { name, installed: info.installed?.version || null, supported: info.supported, ...(info.issue ? { issue: info.issue } : {}) };
33
+ }),
34
+ playwrightMcp: 'discover-through-agent-tools',
35
+ };
36
+ }
37
+
38
+ if (isMain(import.meta.url)) {
39
+ try { console.log(JSON.stringify(diagnose(), null, 2)); }
40
+ catch (error) { console.error(error.message); process.exitCode = 1; }
41
+ }
@@ -0,0 +1,30 @@
1
+ import { test } from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { chmodSync, existsSync, mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs';
4
+ import { dirname, join } from 'node:path';
5
+ import { diagnose } from '../SCRIPT.mjs';
6
+ import { findExecutable, projectRoot, requireNode } from '../../lib/runtime.mjs';
7
+
8
+ test('diagnostico funciona so com Node e informa dependencias opcionais ausentes', t => {
9
+ const output = join(projectRoot, '.agent-tests'); mkdirSync(output, { recursive: true });
10
+ const root = mkdtempSync(join(output, 'diagnose-'));
11
+ t.after(() => rmSync(root, { recursive: true, force: true }));
12
+ const report = diagnose({ root, environment: { PATH: '' }, probe: () => { throw new Error('Nenhum processo opcional esperado.'); } });
13
+ assert.equal(report.runtime.name, 'node'); assert.equal(report.runtime.executable, process.execPath);
14
+ assert.equal(report.npm, null); assert.equal(report.git, null);
15
+ assert.equal(report.docker.executable, null); assert.equal(report.docker.compose, false);
16
+ assert.deepEqual(report.tools, []); assert.equal(existsSync(join(root, '.pbai4devs')), false);
17
+ });
18
+
19
+ test('requisito comum recusa Node antigo e procura executaveis sem shell', t => {
20
+ assert.throws(() => requireNode(24, '22.22.0'), /Node.js >=24/);
21
+ assert.doesNotThrow(() => requireNode(24, '24.13.0'));
22
+ const output = join(projectRoot, '.agent-tests'); mkdirSync(output, { recursive: true });
23
+ const root = mkdtempSync(join(output, 'runtime-'));
24
+ t.after(() => rmSync(root, { recursive: true, force: true }));
25
+ const file = join(root, process.platform === 'win32' ? 'fixture.exe' : 'fixture');
26
+ writeFileSync(file, 'fixture'); chmodSync(file, 0o755);
27
+ assert.equal(findExecutable(file), file);
28
+ assert.equal(findExecutable('fixture', { PATH: dirname(file) }), file);
29
+ assert.equal(findExecutable('missing', { PATH: dirname(file) }), null);
30
+ });
@@ -0,0 +1,28 @@
1
+ ---
2
+ description: Executor comum dos scripts Node do projeto.
3
+ ---
4
+
5
+ # Executar script
6
+
7
+ Use Node 24+ com o nome de uma pasta em `.pbai4devs/scripts/`, uma pasta do
8
+ repositório ou o caminho de um arquivo `.mjs`. O comando funciona nos três SOs:
9
+
10
+ ```console
11
+ node .pbai4devs/scripts/executar-script/SCRIPT.mjs --plan preparar-ferramentas
12
+ node .pbai4devs/scripts/executar-script/SCRIPT.mjs preparar-ferramentas list
13
+ ```
14
+
15
+ `--plan` mostra o arquivo sem executá-lo. Os argumentos e o código de saída
16
+ são preservados; falhas não tentam outro runtime. Scripts shell/Python e links
17
+ simbólicos são recusados. Arquivos `.js`/`.cjs` existentes usam o mesmo Node.
18
+
19
+ Com Node 18+, o [bootstrap JavaScript](../preparar-ferramentas/BOOTSTRAP.md)
20
+ aceita `--runtime-only` e prepara Node 24+ antes da operação solicitada.
21
+ Sem Node/npm, o agente instala primeiro o runtime pelo mecanismo do SO.
22
+ O modo padrão do bootstrap prepara também as ferramentas; reserve-o ao setup.
23
+
24
+ `testar-navegador` mantém o executor Playwright indicado em `SCRIPT.conf`;
25
+ sem `--plan`, retorna 69 para o agente usar o conector, sem executar o arquivo.
26
+ Quando presente, `SCRIPT.conf` exige uma única entrada `executor=node` ou
27
+ `executor=playwright-mcp`; comentários `#` são permitidos. Configurações vazias,
28
+ desconhecidas ou duplicadas falham antes de executar qualquer script.
@@ -0,0 +1,78 @@
1
+ #!/usr/bin/env node
2
+ import { existsSync, lstatSync, readFileSync, realpathSync } from 'node:fs';
3
+ import { dirname, extname, isAbsolute, join, relative, resolve, sep } from 'node:path';
4
+ import { spawnSync } from 'node:child_process';
5
+ import { isMain, projectRoot, requireNode } from '../lib/runtime.mjs';
6
+ import { parseScriptConfig } from '../lib/script-config.mjs';
7
+
8
+ const fail = message => { throw Object.assign(new Error(message), { exitCode: 2 }); };
9
+ const within = (root, path) => { const part = relative(root, path); return !isAbsolute(part) && part !== '..' && !part.startsWith(`..${sep}`); };
10
+
11
+ function checkedPath(root, path) {
12
+ if (!within(root, path)) fail('Script fora do repositorio.');
13
+ let current = root;
14
+ for (const part of relative(root, path).split(sep).filter(Boolean)) {
15
+ current = join(current, part);
16
+ let stat;
17
+ try { stat = lstatSync(current); } catch { fail(`Script ausente: ${path}`); }
18
+ if (stat.isSymbolicLink()) fail('Link simbolico nao permitido em scripts.');
19
+ }
20
+ if (!within(root, realpathSync(path))) fail('Script fora do repositorio.');
21
+ return path;
22
+ }
23
+
24
+ function configuredExecutor(root, config) {
25
+ checkedPath(root, config);
26
+ if (!lstatSync(config).isFile()) fail('SCRIPT.conf deve ser um arquivo.');
27
+ try { return parseScriptConfig(readFileSync(config, 'utf8')); }
28
+ catch (error) { fail(error.message); }
29
+ }
30
+
31
+ export function resolveScript(input, { root = projectRoot } = {}) {
32
+ if (typeof input !== 'string' || !input || input.includes('\0')) fail('Informe o nome ou caminho de um script.');
33
+ root = realpathSync(root);
34
+ let path = resolve(root, input);
35
+ if (!within(root, path)) fail('Script fora do repositorio.');
36
+ if (!existsSync(path)) path = resolve(root, '.pbai4devs/scripts', input);
37
+ checkedPath(root, path);
38
+ const directory = lstatSync(path).isDirectory() ? path : dirname(path);
39
+ if (!lstatSync(path).isDirectory() && !['.mjs', '.js', '.cjs'].includes(extname(path))) fail('Use um script JavaScript Node (.mjs, .js ou .cjs).');
40
+ const config = join(directory, 'SCRIPT.conf');
41
+ if (lstatSync(config, { throwIfNoEntry: false })) {
42
+ if (configuredExecutor(root, config) === 'playwright-mcp') {
43
+ const file = checkedPath(root, join(directory, 'SCRIPT.js'));
44
+ if (!lstatSync(file).isFile()) fail('SCRIPT.js do conector deve ser um arquivo.');
45
+ if (!lstatSync(path).isDirectory() && path !== file) fail('O executor Playwright exige o arquivo SCRIPT.js configurado.');
46
+ return { root, file, executor: 'playwright-mcp' };
47
+ }
48
+ }
49
+ if (lstatSync(path).isDirectory()) {
50
+ path = ['SCRIPT.mjs', 'SCRIPT.cjs', 'SCRIPT.js'].map(name => join(directory, name)).find(existsSync);
51
+ if (!path) fail('Nenhum SCRIPT.mjs encontrado; scripts shell e Python nao sao executados.');
52
+ checkedPath(root, path);
53
+ }
54
+ if (!lstatSync(path).isFile()) fail('O caminho nao e um arquivo de script.');
55
+ return { root, file: path, executor: 'node' };
56
+ }
57
+
58
+ export function main(input = process.argv.slice(2), options = {}) {
59
+ requireNode();
60
+ const args = [...input]; const plan = args[0] === '--plan'; if (plan) args.shift();
61
+ if (['--help', '-h'].includes(args[0])) { console.log('Uso: node SCRIPT.mjs [--plan] <nome-ou-caminho> [argumentos]'); return 0; }
62
+ if (!args.length) fail('Uso: node SCRIPT.mjs [--plan] <nome-ou-caminho> [argumentos]');
63
+ const selected = resolveScript(args.shift(), options);
64
+ console.log(`${selected.executor === 'node' ? 'runtime=node' : 'executor=playwright-mcp'}\nfile=${relative(selected.root, selected.file).split(sep).join('/')}`);
65
+ if (plan) return 0;
66
+ if (selected.executor === 'playwright-mcp') {
67
+ console.error('Use o conector Playwright pelo agente; este script nao e um programa Node.');
68
+ return 69;
69
+ }
70
+ const result = spawnSync(process.execPath, [selected.file, ...args], { cwd: selected.root, stdio: 'inherit', windowsHide: true });
71
+ if (result.error) throw result.error;
72
+ return result.status ?? 1;
73
+ }
74
+
75
+ if (isMain(import.meta.url)) {
76
+ try { process.exitCode = main(); }
77
+ catch (error) { console.error(error.message); process.exitCode = error.exitCode || 1; }
78
+ }