@seedgrid/ai-toolkit 0.0.0-stage → 0.3.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 (225) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +151 -2
  3. package/dist/adapters/claude.js +114 -0
  4. package/dist/adapters/codex.js +108 -0
  5. package/dist/adapters/index.js +17 -0
  6. package/dist/adapters/shared.js +142 -0
  7. package/dist/adapters/types.js +1 -0
  8. package/dist/cli.js +203 -0
  9. package/dist/commands/common.js +98 -0
  10. package/dist/commands/doctor.js +290 -0
  11. package/dist/commands/init.js +9 -0
  12. package/dist/commands/install.js +107 -0
  13. package/dist/commands/remove.js +54 -0
  14. package/dist/commands/review.js +127 -0
  15. package/dist/commands/status.js +73 -0
  16. package/dist/commands/update.js +8 -0
  17. package/dist/commands/validate.js +27 -0
  18. package/dist/core/apply.js +181 -0
  19. package/dist/core/blocks.js +64 -0
  20. package/dist/core/content.js +528 -0
  21. package/dist/core/env.js +40 -0
  22. package/dist/core/frontmatter.js +29 -0
  23. package/dist/core/hash.js +14 -0
  24. package/dist/core/inspect.js +51 -0
  25. package/dist/core/lock.js +124 -0
  26. package/dist/core/paths.js +65 -0
  27. package/dist/core/plan.js +242 -0
  28. package/dist/core/tools.js +62 -0
  29. package/dist/core/types.js +11 -0
  30. package/dist/core/updates.js +121 -0
  31. package/docs/arquitetura.md +80 -0
  32. package/docs/compatibilidade.md +50 -0
  33. package/docs/formato.md +155 -0
  34. package/docs/instalacao.md +105 -0
  35. package/docs/manutencao.md +115 -0
  36. package/package.json +43 -4
  37. package/seedgridKB/SeedGrid/Extensions/Catalogo-de-enums.md +161 -0
  38. package/seedgridKB/SeedGrid/Extensions/Catalogo-de-propriedades.md +971 -0
  39. package/seedgridKB/SeedGrid/Extensions/Indice.md +63 -0
  40. package/seedgridKB/SeedGrid/Extensions/ai-pricing/Configuracao.md +124 -0
  41. package/seedgridKB/SeedGrid/Extensions/ai-pricing/Enums.md +40 -0
  42. package/seedgridKB/SeedGrid/Extensions/ai-pricing/Exemplos.md +97 -0
  43. package/seedgridKB/SeedGrid/Extensions/ai-pricing/Visao-geral.md +114 -0
  44. package/seedgridKB/SeedGrid/Extensions/apikeys/Configuracao-Rust.md +69 -0
  45. package/seedgridKB/SeedGrid/Extensions/apikeys/Configuracao.md +88 -0
  46. package/seedgridKB/SeedGrid/Extensions/apikeys/Enums.md +33 -0
  47. package/seedgridKB/SeedGrid/Extensions/apikeys/Exemplos.md +121 -0
  48. package/seedgridKB/SeedGrid/Extensions/apikeys/Rust.md +126 -0
  49. package/seedgridKB/SeedGrid/Extensions/apikeys/Visao-geral.md +111 -0
  50. package/seedgridKB/SeedGrid/Extensions/audit/Configuracao-Rust.md +93 -0
  51. package/seedgridKB/SeedGrid/Extensions/audit/Configuracao.md +127 -0
  52. package/seedgridKB/SeedGrid/Extensions/audit/Enums.md +66 -0
  53. package/seedgridKB/SeedGrid/Extensions/audit/Exemplos.md +151 -0
  54. package/seedgridKB/SeedGrid/Extensions/audit/Rust.md +120 -0
  55. package/seedgridKB/SeedGrid/Extensions/audit/Visao-geral.md +114 -0
  56. package/seedgridKB/SeedGrid/Extensions/backup/Configuracao-Rust.md +136 -0
  57. package/seedgridKB/SeedGrid/Extensions/backup/Configuracao.md +319 -0
  58. package/seedgridKB/SeedGrid/Extensions/backup/Enums.md +131 -0
  59. package/seedgridKB/SeedGrid/Extensions/backup/Exemplos.md +210 -0
  60. package/seedgridKB/SeedGrid/Extensions/backup/Rust.md +135 -0
  61. package/seedgridKB/SeedGrid/Extensions/backup/Visao-geral.md +150 -0
  62. package/seedgridKB/SeedGrid/Extensions/billing/Configuracao-Rust.md +86 -0
  63. package/seedgridKB/SeedGrid/Extensions/billing/Configuracao.md +243 -0
  64. package/seedgridKB/SeedGrid/Extensions/billing/Enums.md +165 -0
  65. package/seedgridKB/SeedGrid/Extensions/billing/Exemplos.md +205 -0
  66. package/seedgridKB/SeedGrid/Extensions/billing/Rust.md +109 -0
  67. package/seedgridKB/SeedGrid/Extensions/billing/Visao-geral.md +181 -0
  68. package/seedgridKB/SeedGrid/Extensions/broker/Configuracao-Rust.md +40 -0
  69. package/seedgridKB/SeedGrid/Extensions/broker/Visao-geral.md +114 -0
  70. package/seedgridKB/SeedGrid/Extensions/cache/Configuracao-Rust.md +73 -0
  71. package/seedgridKB/SeedGrid/Extensions/cache/Configuracao.md +112 -0
  72. package/seedgridKB/SeedGrid/Extensions/cache/Enums.md +36 -0
  73. package/seedgridKB/SeedGrid/Extensions/cache/Exemplos.md +149 -0
  74. package/seedgridKB/SeedGrid/Extensions/cache/Rust.md +81 -0
  75. package/seedgridKB/SeedGrid/Extensions/cache/Visao-geral.md +90 -0
  76. package/seedgridKB/SeedGrid/Extensions/commons/Configuracao.md +107 -0
  77. package/seedgridKB/SeedGrid/Extensions/commons/Enums.md +105 -0
  78. package/seedgridKB/SeedGrid/Extensions/commons/Exemplos.md +141 -0
  79. package/seedgridKB/SeedGrid/Extensions/commons/Visao-geral.md +99 -0
  80. package/seedgridKB/SeedGrid/Extensions/exchange/Configuracao.md +122 -0
  81. package/seedgridKB/SeedGrid/Extensions/exchange/Enums.md +29 -0
  82. package/seedgridKB/SeedGrid/Extensions/exchange/Exemplos.md +82 -0
  83. package/seedgridKB/SeedGrid/Extensions/exchange/Visao-geral.md +118 -0
  84. package/seedgridKB/SeedGrid/Extensions/filemanagement/Configuracao-Rust.md +110 -0
  85. package/seedgridKB/SeedGrid/Extensions/filemanagement/Configuracao.md +157 -0
  86. package/seedgridKB/SeedGrid/Extensions/filemanagement/Exemplos.md +157 -0
  87. package/seedgridKB/SeedGrid/Extensions/filemanagement/Rust.md +70 -0
  88. package/seedgridKB/SeedGrid/Extensions/filemanagement/Visao-geral.md +88 -0
  89. package/seedgridKB/SeedGrid/Extensions/login-tenancy/Configuracao-Rust.md +124 -0
  90. package/seedgridKB/SeedGrid/Extensions/login-tenancy/Configuracao.md +195 -0
  91. package/seedgridKB/SeedGrid/Extensions/login-tenancy/Enums.md +71 -0
  92. package/seedgridKB/SeedGrid/Extensions/login-tenancy/Exemplos.md +149 -0
  93. package/seedgridKB/SeedGrid/Extensions/login-tenancy/Rust.md +139 -0
  94. package/seedgridKB/SeedGrid/Extensions/login-tenancy/Visao-geral.md +130 -0
  95. package/seedgridKB/SeedGrid/Extensions/notification/Configuracao.md +141 -0
  96. package/seedgridKB/SeedGrid/Extensions/notification/Enums.md +52 -0
  97. package/seedgridKB/SeedGrid/Extensions/notification/Exemplos.md +141 -0
  98. package/seedgridKB/SeedGrid/Extensions/notification/Visao-geral.md +113 -0
  99. package/seedgridKB/SeedGrid/Extensions/privacy/Configuracao-Rust.md +67 -0
  100. package/seedgridKB/SeedGrid/Extensions/privacy/Configuracao.md +94 -0
  101. package/seedgridKB/SeedGrid/Extensions/privacy/Enums.md +79 -0
  102. package/seedgridKB/SeedGrid/Extensions/privacy/Exemplos.md +172 -0
  103. package/seedgridKB/SeedGrid/Extensions/privacy/Rust.md +107 -0
  104. package/seedgridKB/SeedGrid/Extensions/privacy/Visao-geral.md +90 -0
  105. package/seedgridKB/SeedGrid/Extensions/realtime/Configuracao-Rust.md +72 -0
  106. package/seedgridKB/SeedGrid/Extensions/realtime/Configuracao.md +104 -0
  107. package/seedgridKB/SeedGrid/Extensions/realtime/Exemplos.md +104 -0
  108. package/seedgridKB/SeedGrid/Extensions/realtime/Rust.md +69 -0
  109. package/seedgridKB/SeedGrid/Extensions/realtime/Visao-geral.md +105 -0
  110. package/seedgridKB/SeedGrid/Extensions/resilience/Configuracao-Rust.md +68 -0
  111. package/seedgridKB/SeedGrid/Extensions/resilience/Configuracao.md +186 -0
  112. package/seedgridKB/SeedGrid/Extensions/resilience/Enums.md +96 -0
  113. package/seedgridKB/SeedGrid/Extensions/resilience/Exemplos.md +229 -0
  114. package/seedgridKB/SeedGrid/Extensions/resilience/Rust.md +80 -0
  115. package/seedgridKB/SeedGrid/Extensions/resilience/Visao-geral.md +112 -0
  116. package/seedgridKB/SeedGrid/Extensions/runtime/Configuracao-Rust.md +90 -0
  117. package/seedgridKB/SeedGrid/Extensions/runtime/Visao-geral.md +114 -0
  118. package/seedgridKB/SeedGrid/Extensions/security/Configuracao-Rust.md +327 -0
  119. package/seedgridKB/SeedGrid/Extensions/security/Configuracao.md +510 -0
  120. package/seedgridKB/SeedGrid/Extensions/security/Enums.md +95 -0
  121. package/seedgridKB/SeedGrid/Extensions/security/Exemplos.md +218 -0
  122. package/seedgridKB/SeedGrid/Extensions/security/Rust.md +203 -0
  123. package/seedgridKB/SeedGrid/Extensions/security/Visao-geral.md +131 -0
  124. package/seedgridKB/SeedGrid/Extensions/subdomain-tenancy/Configuracao-Rust.md +188 -0
  125. package/seedgridKB/SeedGrid/Extensions/subdomain-tenancy/Configuracao.md +345 -0
  126. package/seedgridKB/SeedGrid/Extensions/subdomain-tenancy/Enums.md +117 -0
  127. package/seedgridKB/SeedGrid/Extensions/subdomain-tenancy/Exemplos.md +205 -0
  128. package/seedgridKB/SeedGrid/Extensions/subdomain-tenancy/Rust.md +161 -0
  129. package/seedgridKB/SeedGrid/Extensions/subdomain-tenancy/Visao-geral.md +142 -0
  130. package/seedgridKB/SeedGrid/Extensions/whatsapp/Configuracao-Rust.md +75 -0
  131. package/seedgridKB/SeedGrid/Extensions/whatsapp/Configuracao.md +152 -0
  132. package/seedgridKB/SeedGrid/Extensions/whatsapp/Enums.md +198 -0
  133. package/seedgridKB/SeedGrid/Extensions/whatsapp/Exemplos.md +173 -0
  134. package/seedgridKB/SeedGrid/Extensions/whatsapp/Rust.md +83 -0
  135. package/seedgridKB/SeedGrid/Extensions/whatsapp/Visao-geral.md +99 -0
  136. package/seedgridKB/SeedGrid/Mapa-dos-repositorios.md +112 -0
  137. package/seedgridKB/SeedGrid/SeedGrid-components/Indice.md +323 -0
  138. package/seedgridKB/SeedGrid/SeedGrid-components/buttons/API.md +257 -0
  139. package/seedgridKB/SeedGrid/SeedGrid-components/buttons/Exemplos.md +307 -0
  140. package/seedgridKB/SeedGrid/SeedGrid-components/buttons/Visao-geral.md +51 -0
  141. package/seedgridKB/SeedGrid/SeedGrid-components/datatable/API.md +174 -0
  142. package/seedgridKB/SeedGrid/SeedGrid-components/datatable/Exemplos.md +236 -0
  143. package/seedgridKB/SeedGrid/SeedGrid-components/datatable/Visao-geral.md +76 -0
  144. package/seedgridKB/SeedGrid/SeedGrid-components/digits/API.md +339 -0
  145. package/seedgridKB/SeedGrid/SeedGrid-components/digits/Exemplos.md +311 -0
  146. package/seedgridKB/SeedGrid/SeedGrid-components/digits/Visao-geral.md +57 -0
  147. package/seedgridKB/SeedGrid/SeedGrid-components/editor/API.md +125 -0
  148. package/seedgridKB/SeedGrid/SeedGrid-components/editor/Exemplos.md +116 -0
  149. package/seedgridKB/SeedGrid/SeedGrid-components/editor/Visao-geral.md +86 -0
  150. package/seedgridKB/SeedGrid/SeedGrid-components/feedback-e-exibicao/API.md +490 -0
  151. package/seedgridKB/SeedGrid/SeedGrid-components/feedback-e-exibicao/Exemplos.md +544 -0
  152. package/seedgridKB/SeedGrid/SeedGrid-components/feedback-e-exibicao/Visao-geral.md +69 -0
  153. package/seedgridKB/SeedGrid/SeedGrid-components/fundamentos/API.md +113 -0
  154. package/seedgridKB/SeedGrid/SeedGrid-components/fundamentos/Exemplos.md +159 -0
  155. package/seedgridKB/SeedGrid/SeedGrid-components/fundamentos/Visao-geral.md +92 -0
  156. package/seedgridKB/SeedGrid/SeedGrid-components/gadgets/API.md +516 -0
  157. package/seedgridKB/SeedGrid/SeedGrid-components/gadgets/Exemplos.md +629 -0
  158. package/seedgridKB/SeedGrid/SeedGrid-components/gadgets/Visao-geral.md +80 -0
  159. package/seedgridKB/SeedGrid/SeedGrid-components/inputs-selecao/API.md +615 -0
  160. package/seedgridKB/SeedGrid/SeedGrid-components/inputs-selecao/Exemplos.md +384 -0
  161. package/seedgridKB/SeedGrid/SeedGrid-components/inputs-selecao/Visao-geral.md +111 -0
  162. package/seedgridKB/SeedGrid/SeedGrid-components/inputs-texto/API.md +661 -0
  163. package/seedgridKB/SeedGrid/SeedGrid-components/inputs-texto/Exemplos.md +312 -0
  164. package/seedgridKB/SeedGrid/SeedGrid-components/inputs-texto/Visao-geral.md +123 -0
  165. package/seedgridKB/SeedGrid/SeedGrid-components/layout/API.md +1090 -0
  166. package/seedgridKB/SeedGrid/SeedGrid-components/layout/Exemplos.md +1172 -0
  167. package/seedgridKB/SeedGrid/SeedGrid-components/layout/Visao-geral.md +98 -0
  168. package/seedgridKB/SeedGrid/SeedGrid-components/modulos/Visao-geral.md +98 -0
  169. package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-apikeys.md +118 -0
  170. package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-audit.md +88 -0
  171. package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-backup.md +131 -0
  172. package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-billing-platform.md +132 -0
  173. package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-billing-user.md +120 -0
  174. package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-login-tenancy.md +119 -0
  175. package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-security.md +427 -0
  176. package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-self-enter.md +104 -0
  177. package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-subdomain-tenancy.md +110 -0
  178. package/seedgridKB/SeedGrid/SeedGrid-components/navegacao-e-overlay/API.md +490 -0
  179. package/seedgridKB/SeedGrid/SeedGrid-components/navegacao-e-overlay/Exemplos.md +561 -0
  180. package/seedgridKB/SeedGrid/SeedGrid-components/navegacao-e-overlay/Visao-geral.md +82 -0
  181. package/seedgridKB/SeedGrid/SeedGrid-components/pacotes/Visao-geral.md +68 -0
  182. package/seedgridKB/SeedGrid/SeedGrid-components/pacotes/fe-commons.md +61 -0
  183. package/seedgridKB/SeedGrid/SeedGrid-components/pacotes/fe-core.md +140 -0
  184. package/seedgridKB/SeedGrid/SeedGrid-components/pacotes/fe-playground.md +112 -0
  185. package/seedgridKB/SeedGrid/SeedGrid-components/pacotes/fe-theme.md +97 -0
  186. package/seedgridKB/SeedGrid/SeedGrid-components/providers/API.md +177 -0
  187. package/seedgridKB/SeedGrid/SeedGrid-components/providers/Exemplos.md +332 -0
  188. package/seedgridKB/SeedGrid/SeedGrid-components/providers/Visao-geral.md +106 -0
  189. package/seedgridKB/SeedGrid/SeedGrid-components/showcase.md +70 -0
  190. package/seedgridKB/SeedGrid/Toolkit/agents/arquiteto.md +53 -0
  191. package/seedgridKB/SeedGrid/Toolkit/agents/backend-java.md +45 -0
  192. package/seedgridKB/SeedGrid/Toolkit/agents/backend-rust.md +43 -0
  193. package/seedgridKB/SeedGrid/Toolkit/agents/frontend-react.md +41 -0
  194. package/seedgridKB/SeedGrid/Toolkit/agents/qa.md +44 -0
  195. package/seedgridKB/SeedGrid/Toolkit/agents/revisor.md +40 -0
  196. package/seedgridKB/SeedGrid/Toolkit/references/fluxo-de-trabalho.md +78 -0
  197. package/seedgridKB/SeedGrid/Toolkit/references/glossario.md +15 -0
  198. package/seedgridKB/SeedGrid/Toolkit/references/modos-shared-native.md +27 -0
  199. package/seedgridKB/SeedGrid/Toolkit/rules/backend-java-seedgrid.md +54 -0
  200. package/seedgridKB/SeedGrid/Toolkit/rules/coordenacao.md +39 -0
  201. package/seedgridKB/SeedGrid/Toolkit/rules/formato-entrega.md +29 -0
  202. package/seedgridKB/SeedGrid/Toolkit/rules/frontend-seedgrid.md +47 -0
  203. package/seedgridKB/SeedGrid/Toolkit/rules/personalizacao-local.md +22 -0
  204. package/seedgridKB/SeedGrid/Toolkit/skills/planejar-mudanca/SKILL.md +38 -0
  205. package/seedgridKB/SeedGrid/Toolkit/skills/revisar-codigo/SKILL.md +33 -0
  206. package/seedgridKB/SeedGrid/Toolkit/skills/revisar-codigo/references/checklist.md +25 -0
  207. package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-backend-crud/SKILL.md +29 -0
  208. package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-bump/SKILL.md +26 -0
  209. package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-crud/SKILL.md +221 -0
  210. package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-crud/agents/openai.yaml +4 -0
  211. package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-crud/references/checklist.md +31 -0
  212. package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-crud/references/patterns.md +185 -0
  213. package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-crud/references/routing.md +66 -0
  214. package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-new-screen/SKILL.md +56 -0
  215. package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-new-screen/agents/openai.yaml +4 -0
  216. package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-new-screen/references/checklist.md +32 -0
  217. package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-new-screen/references/steps.md +114 -0
  218. package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-review/SKILL.md +61 -0
  219. package/seedgridKB/SeedGrid/Toolkit/skills/validar-mudanca/SKILL.md +29 -0
  220. package/seedgridKB/SeedGrid/Toolkit/templates/decisao-arquitetura.md +29 -0
  221. package/seedgridKB/SeedGrid/Toolkit/templates/especificacao-tarefa.md +32 -0
  222. package/seedgridKB/SeedGrid/Toolkit/templates/relatorio-validacao.md +30 -0
  223. package/seedgridKB/SeedGrid/Versoes.md +64 -0
  224. package/seedgridKB/SeedGrid/Visao-geral.md +35 -0
  225. package/seedgridKB/manifest.json +142 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 SeedGrid
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,152 @@
1
- # Temporary Holding Version
1
+ # SeedGrid AI Toolkit
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ Fonte versionada de **agentes (papéis), skills, regras, templates, referências e a base de conhecimento SeedGrid (KB)** para assistentes de código, independente de provedor, e um CLI (`seedgrid-ai`) que instala esse conteúdo em projetos locais para o **Claude Code** e o **Codex**, pelos mecanismos nativos de cada ferramenta.
4
+
5
+ O toolkit **não** é um orquestrador de modelos: não chama APIs da OpenAI ou da Anthropic, não guarda credenciais e não escolhe fornecedores. Ele instala instruções e configurações; a ferramenta de IA executa e coordena o trabalho.
6
+
7
+ > Estado: versão 0.3.0 (pacote e conteúdo), pronta para publicar no npm como `@seedgrid/ai-toolkit`. Licença MIT. O pacote ainda **não foi publicado** no npm e o repositório GitHub ainda não existe.
8
+
9
+ ## O que é instalado
10
+
11
+ Cada pasta de `.ai/` (`rules`, `agents`, `skills`, `templates`, `references`) tem um `index.md` **gerado** a partir do frontmatter dos arquivos. O bloco do `AGENTS.md` aponta para as pastas e manda começar pelo `index.md`; ele não lista arquivos, então não cresce quando entram novas rules, skills ou templates.
12
+
13
+ | Destino | Conteúdo |
14
+ | --- | --- |
15
+ | `.ai/agents/` | Papéis (`arquiteto`, `backend-java`, `backend-rust`, `frontend-react`, `qa`, `revisor`) e `index.md` gerado |
16
+ | `.ai/rules/` | Coordenação, formato de entrega, personalização local e os **padrões SeedGrid obrigatórios** (`frontend-seedgrid`, `backend-java-seedgrid`) |
17
+ | `.ai/templates/` | Especificação de tarefa, decisão de arquitetura, relatório de validação |
18
+ | `.ai/references/` | Modos shared/native e glossário |
19
+ | `.ai/skills/index.md` | Índice gerado das skills (o que faz e quando usar) |
20
+ | `.ai/brain/SeedGrid/` | **Base de conhecimento SeedGrid** (extensions Quarkus, componentes React, propriedades, enums): ~157 notas Markdown, somente leitura |
21
+ | `.ai/toolkit-lock.json` | Versões, opções e hashes SHA-256 dos arquivos e blocos gerenciados |
22
+ | `.ai/backups/` | Backups locais por operação (ignorados pelo Git via `.ai/backups/.gitignore`) |
23
+ | `.claude/skills/<nome>/` | Skills para o Claude Code |
24
+ | `.agents/skills/<nome>/` | Skills para o Codex |
25
+ | `AGENTS.md` | Bloco gerenciado que referencia o toolkit (lido pelo Codex) |
26
+ | `CLAUDE.md` | Bloco gerenciado com `@AGENTS.md` (o Claude Code lê CLAUDE.md, não AGENTS.md) |
27
+ | `.claude/agents/<id>.md` | Somente `--mode native`: subagentes do Claude Code |
28
+ | `.codex/agents/<id>.toml` | Somente `--mode native`: agentes personalizados do Codex |
29
+
30
+ Skills: `planejar-mudanca`, `revisar-codigo`, `validar-mudanca` (genéricas) e `seedgrid-crud`, `seedgrid-new-screen`, `seedgrid-review` (padrões SeedGrid). Toda instalação recebe todas as skills.
31
+
32
+ ## A base de conhecimento (seedgridKB)
33
+
34
+ O repositório é, ao mesmo tempo, um **vault do Obsidian**: abra a pasta `seedgridKB/` no Obsidian para navegar, buscar e editar tudo (KB, skills, agentes e regras) com grafo e backlinks. O mesmo vault é a fonte do que o CLI distribui:
35
+
36
+ - `seedgridKB/SeedGrid/` (documentação das extensions e dos componentes) vira `.ai/brain/SeedGrid/` nos projetos;
37
+ - `seedgridKB/SeedGrid/Toolkit/` (agents, rules, templates, references, skills) vira `.ai/`, `.claude/skills/` e `.agents/skills/`.
38
+
39
+ O bloco que o CLI grava no `AGENTS.md` do projeto manda o Claude/Codex consultar a KB pelos índices antes de usar ou configurar qualquer extension ou componente SeedGrid, e não inventar o que a KB não traz. Veja [docs/formato.md](docs/formato.md#o-vault).
40
+
41
+ Em `AGENTS.md` e `CLAUDE.md`, o toolkit altera **somente** o trecho entre `<!-- BEGIN SEEDGRID AI TOOLKIT -->` e `<!-- END SEEDGRID AI TOOLKIT -->`. Personalizações do projeto ficam em `.ai/local/`, que o toolkit nunca toca.
42
+
43
+ ## Uso local (sem npm público)
44
+
45
+ Requisitos: Node.js 22.12 ou superior (LTS).
46
+
47
+ ```bash
48
+ # na pasta do toolkit
49
+ npm install
50
+ npm run build
51
+ npm test # opcional: 34 testes em diretórios temporários
52
+
53
+ # executar o JavaScript compilado contra um projeto
54
+ node dist/cli.js init --project "C:/caminho/do/projeto" --target both --mode shared
55
+ ```
56
+
57
+ Opcionalmente, registre o comando `seedgrid-ai` globalmente via link (aponta para esta pasta; recompile após mudanças):
58
+
59
+ ```bash
60
+ npm link
61
+ cd /caminho/do/projeto
62
+ seedgrid-ai init --target both --mode shared
63
+ # para desfazer: npm unlink -g @seedgrid/ai-toolkit
64
+ ```
65
+
66
+ ## Comandos
67
+
68
+ ```bash
69
+ seedgrid-ai init --target both --mode shared # padrão; idempotente
70
+ seedgrid-ai init --target both --mode native # também registra subagentes nativos
71
+ seedgrid-ai init --source ./seedgridKB --dry-run # fonte local (desenvolvimento), só o plano
72
+ seedgrid-ai status # versões, opções e divergências
73
+ seedgrid-ai doctor # diagnóstico de sintaxe, consistência e limitações
74
+ seedgrid-ai doctor --probe # + confirma descoberta real no Codex (sem chamar o modelo)
75
+ seedgrid-ai update --dry-run # plano da atualização
76
+ seedgrid-ai update # aplica o conteúdo empacotado no CLI em execução
77
+ seedgrid-ai remove --dry-run
78
+ seedgrid-ai remove
79
+ seedgrid-ai validate --source ./seedgridKB # valida uma fonte de conteúdo
80
+ seedgrid-ai review # confere o código contra os padrões SeedGrid (front e back, só os arquivos alterados)
81
+ seedgrid-ai review front --full # só o front-end, projeto inteiro
82
+ seedgrid-ai review back --tool codex # só o back-end, usando o Codex
83
+ ```
84
+
85
+ - `--target`: `claude`, `codex` ou `both` (padrão `both`). `--mode`: `shared` (padrão) ou `native`.
86
+ - `--project <caminho>`: projeto alvo (padrão: pasta atual). Caminhos com espaços e Unicode são suportados.
87
+ - `--source <pasta>`: fonte de conteúdo local, relativa à pasta atual. Sem ela, usa o conteúdo empacotado no CLI.
88
+ - `--dry-run`: gera o plano e não escreve nenhum arquivo. `--json`: saída para scripts.
89
+ - Códigos de saída: `0` sucesso, `1` erro, `2` conflito (nada foi alterado), `3` (`review`) revisão concluída com violações.
90
+
91
+ ### `seedgrid-ai review`
92
+
93
+ Executa a skill `seedgrid-review` na ferramenta de IA instalada, em modo não interativo e somente leitura (Claude Code: `claude -p` com ferramentas de leitura; Codex: `codex exec --sandbox read-only`). A skill confere o código contra as regras `FE-nn` e `BE-nn` (`.ai/rules/frontend-seedgrid.md` e `backend-java-seedgrid.md`) e o CLI mostra o relatório e devolve o código de saída.
94
+
95
+ - **Escopo:** `front`, `back` ou nenhum (os dois). Por padrão revisa os arquivos alterados (diff); `--full` revisa o projeto inteiro.
96
+ - **Ferramenta:** `--tool claude|codex`. Sem a opção, usa a primeira disponível nesta ordem: Claude Code, Codex. Considera só os targets instalados no projeto que tenham a skill e o executável no `PATH`. O CLI não detecta em qual ferramenta você está trabalhando.
97
+ - **Custo e login:** chama o modelo com o seu login na ferramenta e **consome tokens**. É o único comando que faz isso. Nenhum token é lido nem gravado pelo CLI.
98
+ - **Resultado não determinístico:** a revisão é feita por um modelo; execuções repetidas podem apontar itens um pouco diferentes (nos testes, as duas ferramentas acharam as violações óbvias e divergiram nos itens de julgamento). Trate o resultado como revisão, não como prova.
99
+ - **Saída estruturada:** a skill termina com um bloco `seedgrid-review-json`. Se a ferramenta falhar, esgotar o tempo (15 min) ou responder sem o bloco, o comando sai com `1` e mostra o texto bruto; nunca conta como "sem violações".
100
+ - Exige o toolkit instalado (`init`) com a skill `seedgrid-review` (`update` leva as skills novas a projetos já instalados).
101
+
102
+ Depois de instalar ou atualizar, **abra uma nova sessão** do Claude Code ou do Codex. Não há recarga garantida em todas as ferramentas.
103
+
104
+ ## Conflitos e segurança
105
+
106
+ - Arquivo gerenciado modificado localmente, arquivo preexistente diferente ou bloco editado → **conflito**: a operação inteira é abortada antes de qualquer escrita. Não existe opção que force sobrescrita de customizações.
107
+ - Antes de alterar ou apagar arquivos existentes, o CLI guarda cópias em `.ai/backups/<operação>/`. Se uma escrita falhar, tenta desfazer tudo e informa se o rollback foi incompleto.
108
+ - `remove` apaga apenas arquivos gerenciados intactos e blocos intactos; pastas com conteúdo de terceiros permanecem.
109
+ - O lock é tratado como entrada não confiável: caminhos fora das áreas gerenciadas, absolutos ou com `..` são rejeitados, assim como destinos que passem por links simbólicos para fora do projeto.
110
+ - Scripts de skills nunca são executados na instalação. Nenhum token é gravado e nenhuma permissão das ferramentas de IA é alterada.
111
+
112
+ ## shared x native
113
+
114
+ - **shared** (padrão): catálogo e papéis em `.ai/`. A sessão principal lê o catálogo, escolhe papéis e delega pelo mecanismo disponível; sem subagentes, aplica o papel na própria sessão e informa isso.
115
+ - **native**: além do shared, gera `.claude/agents/` e `.codex/agents/` a partir dos mesmos papéis (sem duplicar autoria). Validado no Claude Code 2.1.299 e no Codex 0.160.1 (veja [docs/compatibilidade.md](docs/compatibilidade.md)). No Codex, os agentes de projeto **só carregam se o projeto for confiável** (trusted).
116
+
117
+ Seleção de papéis e delegação são comportamentos orientados por instruções, não garantias do instalador.
118
+
119
+ ## Uso via npm
120
+
121
+ Depois que a versão for publicada:
122
+
123
+ ```bash
124
+ cd /caminho/do/projeto
125
+ npx @seedgrid/ai-toolkit@0.2.0 init --target both # primeira instalação
126
+ npx @seedgrid/ai-toolkit@latest update # traz o conteúdo da versão mais recente
127
+ ```
128
+
129
+ Ou instale o comando globalmente: `npm i -g @seedgrid/ai-toolkit` e use `seedgrid-ai`. Se houver versão mais nova publicada, `init`, `update` e `status` avisam e, no terminal, perguntam se devem usá-la (`[Y/n]`); desative com `--no-update-check`. Detalhes em [docs/instalacao.md](docs/instalacao.md#aviso-de-versão-nova). O pacote leva o CLI compilado e o conteúdo; a versão do pacote identifica o conteúdo instalado, e `update` nunca baixa conteúdo por conta própria. Faça commit do resultado no projeto: o restante da equipe recebe tudo pelo Git, sem rodar o CLI.
130
+
131
+ ## Repositório e publicação
132
+
133
+ O código-fonte fica no GitHub; usuários não precisam cloná-lo. Para criar o repositório:
134
+
135
+ ```bash
136
+ git init
137
+ git add .
138
+ git commit -m "SeedGrid AI Toolkit 0.2.0"
139
+ git branch -M main
140
+ git remote add origin git@github.com:SeedGrid/seedgrid-ai.git
141
+ git push -u origin main
142
+ ```
143
+
144
+ O `.gitignore` já exclui `node_modules/`, `dist/`, `build-test/`, `*.tgz` e arquivos `.env`. O CI (`.github/workflows/ci.yml`) testa cada push e pull request; o workflow `release.yml` publica no npm a cada tag `vX.Y.Z`. Passo a passo da primeira publicação e do lançamento de versões: [docs/manutencao.md](docs/manutencao.md#publicação-no-npm).
145
+
146
+ ## Documentação
147
+
148
+ - [docs/arquitetura.md](docs/arquitetura.md) — módulos, fluxo de planejamento e escrita, lock.
149
+ - [docs/instalacao.md](docs/instalacao.md) — instalação, atualização, remoção e recuperação em projetos.
150
+ - [docs/formato.md](docs/formato.md) — autoria de conteúdo: manifesto, papéis, skills, templates.
151
+ - [docs/manutencao.md](docs/manutencao.md) — versões, testes, empacotamento, publicação e smoke test.
152
+ - [docs/compatibilidade.md](docs/compatibilidade.md) — versões testadas, caminhos validados e limitações reais.
@@ -0,0 +1,114 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { parseFrontmatter, renderFrontmatter } from '../core/frontmatter.js';
4
+ import { scanBlock } from '../core/blocks.js';
5
+ import { GENERATED_NOTICE } from './types.js';
6
+ /**
7
+ * Tradução de capacidades portáveis para ferramentas do Claude Code.
8
+ * Restringir "tools" limita o subagente, mas não é um mecanismo de segurança do projeto.
9
+ */
10
+ const TOOLS_BY_CAPABILITY = {
11
+ 'read-files': ['Read', 'Grep', 'Glob'],
12
+ 'edit-files': ['Edit', 'Write'],
13
+ 'run-checks': ['Bash'],
14
+ };
15
+ export function claudeTools(agent) {
16
+ if (agent.capabilities.length === 0)
17
+ return null; // herda as ferramentas da sessão
18
+ const tools = new Set();
19
+ for (const c of agent.capabilities)
20
+ for (const t of TOOLS_BY_CAPABILITY[c])
21
+ tools.add(t);
22
+ if (agent.preferredSkills.length > 0)
23
+ tools.add('Skill');
24
+ return [...tools];
25
+ }
26
+ export function renderClaudeAgent(agent, contentVersion) {
27
+ const data = { name: agent.id, description: agent.description };
28
+ const tools = claudeTools(agent);
29
+ if (tools)
30
+ data.tools = tools.join(', ');
31
+ const skills = agent.preferredSkills.length > 0 ? `Skills preferidas: ${agent.preferredSkills.join(', ')}.\n\n` : '';
32
+ const body = [
33
+ `<!-- ${GENERATED_NOTICE} a partir de .ai/agents/${agent.id}.md (conteúdo ${contentVersion}). Não edite; personalize em .ai/local/. -->`,
34
+ '',
35
+ `Você atua no papel \`${agent.id}\` do SeedGrid AI Toolkit. Siga AGENTS.md, .ai/rules/formato-entrega.md e, se existir, .ai/local/.`,
36
+ '',
37
+ `${skills}${agent.body.trim()}`,
38
+ '',
39
+ ].join('\n');
40
+ return renderFrontmatter(data, body);
41
+ }
42
+ export const claudeAdapter = {
43
+ target: 'claude',
44
+ displayName: 'Claude Code',
45
+ skillsDir: '.claude/skills',
46
+ nativeAgentsDir: '.claude/agents',
47
+ nativeAgentExtension: '.md',
48
+ versionCommand: 'claude --version',
49
+ validatedVersions: ['2.1.299'],
50
+ reviewCommand: (prompt) => `claude -p "${prompt}" --allowedTools "Read,Grep,Glob,Bash(git diff:*),Bash(git status:*),Bash(git log:*),Bash(git ls-files:*)"`,
51
+ probeCommand: null, // não há comando que liste skills/agentes sem abrir uma sessão com o modelo
52
+ skillFiles(bundle) {
53
+ return bundle.skills.flatMap((s) => s.files.map((f) => ({ path: `.claude/skills/${s.name}/${f.path}`, content: f.content, component: `skill:${s.name}` })));
54
+ },
55
+ nativeAgentFiles(bundle) {
56
+ return bundle.agents.map((a) => ({
57
+ path: `.claude/agents/${a.id}.md`,
58
+ content: renderClaudeAgent(a, bundle.contentVersion),
59
+ component: 'native:claude',
60
+ }));
61
+ },
62
+ blocks() {
63
+ return [
64
+ {
65
+ file: 'CLAUDE.md',
66
+ inner: [
67
+ '## SeedGrid AI Toolkit',
68
+ '',
69
+ '@AGENTS.md',
70
+ '',
71
+ 'Bloco gerenciado pelo `seedgrid-ai`. As instruções do projeto estão em `AGENTS.md` (importado acima) e as regras compartilhadas em `.ai/rules/`. Siga-as também no Claude Code. Não edite entre os marcadores.',
72
+ ].join('\n'),
73
+ },
74
+ ];
75
+ },
76
+ checkNativeAgent(relPath, content) {
77
+ const fm = parseFrontmatter(content);
78
+ if ('error' in fm)
79
+ return [{ level: 'erro', message: `${relPath}: ${fm.error}` }];
80
+ const issues = [];
81
+ const name = fm.data.name;
82
+ if (typeof name !== 'string' || name.length === 0 || name.length > 256 || name.includes(':') || name.startsWith('-')) {
83
+ issues.push({ level: 'erro', message: `${relPath}: name ausente ou inválido; o Claude Code ignora o arquivo` });
84
+ }
85
+ if (typeof fm.data.description !== 'string' || fm.data.description.trim() === '') {
86
+ issues.push({ level: 'erro', message: `${relPath}: description ausente; o Claude Code ignora o arquivo` });
87
+ }
88
+ return issues;
89
+ },
90
+ async projectChecks(projectRoot) {
91
+ const issues = [];
92
+ try {
93
+ const text = await readFile(path.join(projectRoot, 'CLAUDE.md'), 'utf8');
94
+ const scan = scanBlock(text);
95
+ if (scan.status === 'one' && !/^@AGENTS\.md\s*$/m.test(scan.inner)) {
96
+ issues.push({ level: 'erro', message: 'CLAUDE.md: o bloco gerenciado não importa @AGENTS.md' });
97
+ }
98
+ }
99
+ catch {
100
+ issues.push({ level: 'erro', message: 'CLAUDE.md ausente: o Claude Code não lê AGENTS.md diretamente' });
101
+ }
102
+ return issues;
103
+ },
104
+ limitations(mode) {
105
+ const out = [
106
+ 'O Claude Code lê CLAUDE.md, não AGENTS.md; o bloco em CLAUDE.md importa AGENTS.md com @AGENTS.md.',
107
+ 'Skills e agentes de projeto só são carregados em sessões abertas na pasta do projeto (ou subpastas até a raiz do repositório).',
108
+ ];
109
+ if (mode === 'native') {
110
+ out.push('Se .claude/agents/ não existia quando a sessão começou, reinicie a sessão para o Claude Code observar a pasta.', 'O campo tools limita as ferramentas do subagente, mas não substitui permissões nem sandbox.');
111
+ }
112
+ return out;
113
+ },
114
+ };
@@ -0,0 +1,108 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { parse as parseToml } from 'smol-toml';
4
+ import { GENERATED_NOTICE } from './types.js';
5
+ function tomlBasicString(value) {
6
+ return JSON.stringify(value); // strings JSON simples são strings básicas TOML válidas
7
+ }
8
+ /** String multilinha legível; usa literal ''' quando possível. */
9
+ export function tomlMultiline(value) {
10
+ const text = value.replace(/\r\n/g, '\n');
11
+ if (!text.includes("'''") && !/[\x00-\x08\x0b-\x1f\x7f]/.test(text)) {
12
+ return `'''\n${text}'''`;
13
+ }
14
+ const escaped = text
15
+ .replace(/\\/g, '\\\\')
16
+ .replace(/"""/g, '""\\"')
17
+ .replace(/[\x00-\x08\x0b-\x1f\x7f]/g, (c) => `\\u${c.charCodeAt(0).toString(16).padStart(4, '0')}`);
18
+ return `"""\n${escaped}"""`;
19
+ }
20
+ export function renderCodexAgent(agent, contentVersion) {
21
+ const skills = agent.preferredSkills.length > 0 ? `Skills preferidas: ${agent.preferredSkills.join(', ')}.\n\n` : '';
22
+ const instructions = [
23
+ `Você atua no papel \`${agent.id}\` do SeedGrid AI Toolkit. Siga AGENTS.md, .ai/rules/formato-entrega.md e, se existir, .ai/local/.`,
24
+ '',
25
+ `${skills}${agent.body.trim()}`,
26
+ '',
27
+ ].join('\n');
28
+ return [
29
+ `# ${GENERATED_NOTICE} a partir de .ai/agents/${agent.id}.md (conteúdo ${contentVersion}).`,
30
+ '# Não edite; personalize em .ai/local/.',
31
+ `name = ${tomlBasicString(agent.id)}`,
32
+ `description = ${tomlBasicString(agent.description)}`,
33
+ `developer_instructions = ${tomlMultiline(instructions)}`,
34
+ '',
35
+ ].join('\n');
36
+ }
37
+ export const codexAdapter = {
38
+ target: 'codex',
39
+ displayName: 'Codex',
40
+ skillsDir: '.agents/skills',
41
+ nativeAgentsDir: '.codex/agents',
42
+ nativeAgentExtension: '.toml',
43
+ versionCommand: 'codex --version',
44
+ validatedVersions: ['0.160.1'],
45
+ // Renderiza o prompt visível ao modelo (AGENTS.md e lista de skills) sem chamar o modelo.
46
+ reviewCommand: (prompt) => `codex exec --sandbox read-only "${prompt}"`,
47
+ probeCommand: 'codex debug prompt-input "seedgrid-ai doctor --probe"',
48
+ skillFiles(bundle) {
49
+ return bundle.skills.flatMap((s) => s.files.map((f) => ({ path: `.agents/skills/${s.name}/${f.path}`, content: f.content, component: `skill:${s.name}` })));
50
+ },
51
+ nativeAgentFiles(bundle) {
52
+ // Um arquivo por agente em .codex/agents/; .codex/config.toml não é alterado.
53
+ return bundle.agents.map((a) => ({
54
+ path: `.codex/agents/${a.id}.toml`,
55
+ content: renderCodexAgent(a, bundle.contentVersion),
56
+ component: 'native:codex',
57
+ }));
58
+ },
59
+ blocks() {
60
+ return []; // o Codex lê AGENTS.md nativamente
61
+ },
62
+ checkNativeAgent(relPath, content) {
63
+ let data;
64
+ try {
65
+ data = parseToml(content);
66
+ }
67
+ catch (err) {
68
+ return [{ level: 'erro', message: `${relPath}: TOML inválido: ${err.message.split('\n')[0]}` }];
69
+ }
70
+ const issues = [];
71
+ for (const key of ['name', 'description', 'developer_instructions']) {
72
+ if (typeof data[key] !== 'string' || data[key].trim() === '') {
73
+ issues.push({ level: 'erro', message: `${relPath}: campo obrigatório "${key}" ausente` });
74
+ }
75
+ }
76
+ return issues;
77
+ },
78
+ async projectChecks(projectRoot, mode) {
79
+ const issues = [];
80
+ if (mode !== 'native')
81
+ return issues;
82
+ let raw = null;
83
+ try {
84
+ raw = await readFile(path.join(projectRoot, '.codex', 'config.toml'), 'utf8');
85
+ }
86
+ catch {
87
+ return issues;
88
+ }
89
+ try {
90
+ const cfg = parseToml(raw);
91
+ const agents = cfg.agents;
92
+ if (agents && agents.enabled === false) {
93
+ issues.push({ level: 'aviso', message: '.codex/config.toml define [agents] enabled = false; subagentes estão desativados' });
94
+ }
95
+ }
96
+ catch (err) {
97
+ issues.push({ level: 'erro', message: `.codex/config.toml inválido: ${err.message.split('\n')[0]}` });
98
+ }
99
+ return issues;
100
+ },
101
+ limitations(mode) {
102
+ const out = ['O Codex lê AGENTS.md e .agents/skills/ a partir da pasta atual até a raiz do repositório.'];
103
+ if (mode === 'native') {
104
+ out.push('O Codex só carrega camadas .codex/ do projeto (inclusive .codex/agents/) quando o projeto é confiável (trusted).', 'capabilities não são traduzidas para o Codex: a leitura de arquivos usa o shell, e sandbox_mode/approval_policy em arquivos de agente não sobrescrevem a sessão principal.');
105
+ }
106
+ return out;
107
+ },
108
+ };
@@ -0,0 +1,17 @@
1
+ import { claudeAdapter } from './claude.js';
2
+ import { codexAdapter } from './codex.js';
3
+ import { agentsMdBlock, sharedFiles } from './shared.js';
4
+ export const ADAPTERS = { claude: claudeAdapter, codex: codexAdapter };
5
+ /** Estado completo desejado no projeto para os targets e o modo escolhidos. */
6
+ export function buildDesiredState(bundle, targets, mode) {
7
+ const files = sharedFiles(bundle, targets);
8
+ const blocks = [agentsMdBlock(bundle, targets, mode)];
9
+ for (const t of targets) {
10
+ const a = ADAPTERS[t];
11
+ files.push(...a.skillFiles(bundle));
12
+ if (mode === 'native')
13
+ files.push(...a.nativeAgentFiles(bundle));
14
+ blocks.push(...a.blocks(bundle));
15
+ }
16
+ return { files, blocks };
17
+ }
@@ -0,0 +1,142 @@
1
+ import { GENERATED_NOTICE } from './types.js';
2
+ export const SHARED_ROOT = '.ai';
3
+ /** Destino instalado de um arquivo compartilhado (ex.: rules/x.md -> .ai/rules/x.md). */
4
+ export function sharedDest(contentPath) {
5
+ return `${SHARED_ROOT}/${contentPath}`;
6
+ }
7
+ function escapeCell(text) {
8
+ return text.replace(/\|/g, '\\|').replace(/\s*\n\s*/g, ' ');
9
+ }
10
+ /** Catálogo curto, gerado do frontmatter dos papéis para não duplicar autoria. */
11
+ export function renderCatalog(bundle) {
12
+ const lines = [
13
+ '# Índice de papéis',
14
+ '',
15
+ `<!-- ${GENERATED_NOTICE} a partir do frontmatter de agents/*.md (conteúdo ${bundle.contentVersion}). Não edite. -->`,
16
+ '',
17
+ 'Escolha papéis por esta tabela. Leia a definição completa apenas dos papéis selecionados.',
18
+ '',
19
+ '| Papel | Quando usar | Capacidades | Skills preferidas | Definição |',
20
+ '| --- | --- | --- | --- | --- |',
21
+ ...bundle.agents.map((a) => `| ${a.id} | ${escapeCell(a.description)} | ${a.capabilities.join(', ') || '-'} | ${a.preferredSkills.join(', ') || '-'} | [${a.id}.md](${a.id}.md) |`),
22
+ '',
23
+ ];
24
+ return lines.join('\n');
25
+ }
26
+ const FOLDER_INDEX = {
27
+ rules: { title: 'Índice de regras', intro: 'Leia a regra quando a descrição combinar com a tarefa.' },
28
+ templates: {
29
+ title: 'Índice de templates',
30
+ intro: 'Copie o modelo para o local de documentação do projeto antes de preencher; não edite o modelo.',
31
+ },
32
+ references: { title: 'Índice de referências', intro: 'Conhecimento estático do toolkit. Leia só o que a tarefa pedir.' },
33
+ };
34
+ /** Índice de rules, templates ou references, gerado do frontmatter para o AGENTS.md não listar arquivos. */
35
+ export function renderFolderIndex(bundle, type) {
36
+ const files = bundle.shared.filter((s) => s.type === type).sort((a, b) => a.path.localeCompare(b.path));
37
+ const { title, intro } = FOLDER_INDEX[type];
38
+ return [
39
+ `# ${title}`,
40
+ '',
41
+ `<!-- ${GENERATED_NOTICE} a partir do frontmatter de ${type}/*.md (conteúdo ${bundle.contentVersion}). Não edite. -->`,
42
+ '',
43
+ intro,
44
+ '',
45
+ '| Arquivo | O que é e quando usar |',
46
+ '| --- | --- |',
47
+ ...files.map((f) => {
48
+ const name = f.path.slice(type.length + 1);
49
+ return `| [${name}](${name}) | ${escapeCell(f.description ?? '')} |`;
50
+ }),
51
+ '',
52
+ ].join('\n');
53
+ }
54
+ export const SKILLS_INDEX_FILE = '.ai/skills/index.md';
55
+ /** Índice das skills do toolkit, gerado das descrições para o AGENTS.md não crescer a cada skill nova. */
56
+ export function renderSkillsIndex(bundle, targets) {
57
+ const cell = (t) => t.replace(/\|/g, '\\|').replace(/\s*\n\s*/g, ' ').trim();
58
+ const dirs = [targets.includes('claude') ? '.claude/skills' : null, targets.includes('codex') ? '.agents/skills' : null].filter((d) => d !== null);
59
+ const lines = [
60
+ '# Índice de skills',
61
+ '',
62
+ `<!-- ${GENERATED_NOTICE} a partir do frontmatter de cada SKILL.md (conteúdo ${bundle.contentVersion}). Não edite. -->`,
63
+ '',
64
+ 'Skills instaladas pelo SeedGrid AI Toolkit. Antes de uma tarefa que combine com a descrição, leia o `SKILL.md` indicado e siga-o. Skills do próprio projeto que não são do toolkit não aparecem aqui.',
65
+ '',
66
+ '| Skill | O que faz e quando usar | Arquivo |',
67
+ '| --- | --- | --- |',
68
+ ...bundle.skills.map((k) => `| \`${k.name}\` | ${cell(k.description)} | ${dirs.map((d) => `\`${d}/${k.name}/SKILL.md\``).join(' ou ')} |`),
69
+ '',
70
+ ];
71
+ return lines.join('\n');
72
+ }
73
+ export function sharedFiles(bundle, targets) {
74
+ const files = bundle.shared.map((s) => ({
75
+ path: sharedDest(s.path),
76
+ content: s.content,
77
+ component: s.component,
78
+ }));
79
+ files.push({ path: sharedDest('agents/index.md'), content: renderCatalog(bundle), component: 'agents' });
80
+ for (const type of ['rules', 'templates', 'references']) {
81
+ files.push({ path: sharedDest(`${type}/index.md`), content: renderFolderIndex(bundle, type), component: type });
82
+ }
83
+ files.push({ path: SKILLS_INDEX_FILE, content: renderSkillsIndex(bundle, targets), component: 'skills-index' });
84
+ return files;
85
+ }
86
+ /** Instruções de consulta à base de conhecimento SeedGrid (.ai/brain/), quando o conteúdo a inclui. */
87
+ function brainLines(bundle) {
88
+ if (!bundle.brain)
89
+ return [];
90
+ const entries = bundle.brain.entrypoints.map((e) => `\`${e}\``).join(', ');
91
+ return [
92
+ `- **Base de conhecimento SeedGrid** (extensions Quarkus, componentes React, propriedades e enums): \`.ai/brain/\` (${bundle.brain.notes} notas, somente leitura). Consulte-a antes de usar ou configurar qualquer extension ou componente SeedGrid.`,
93
+ ` - Comece pelos índices, sem varrer a pasta inteira: ${entries}.`,
94
+ ' - Links `[[SeedGrid/...]]` nas notas são caminhos a partir de `.ai/brain/` (acrescente `.md`).',
95
+ ' - O frontmatter (`commit`, `analisado-em`) diz a que versão do código a nota se refere. Se a versão usada no projeto puder diferir, confirme no código-fonte, no jar ou no pacote e avise o usuário.',
96
+ ' - Não invente propriedades, valores padrão ou enums que não estejam nas notas; diga que não encontrou.',
97
+ ' - Não edite `.ai/brain/`: ela é atualizada por `seedgrid-ai update`.',
98
+ ];
99
+ }
100
+ const STANDARD_RULES = [
101
+ ['rules/frontend-seedgrid.md', 'front-end'],
102
+ ['rules/backend-java-seedgrid.md', 'back-end Java'],
103
+ ];
104
+ /** Padrões SeedGrid obrigatórios (front e back), quando o conteúdo os inclui. */
105
+ function standardsLines(bundle) {
106
+ const present = STANDARD_RULES.filter(([p]) => bundle.shared.some((s) => s.path === p));
107
+ if (present.length === 0)
108
+ return [];
109
+ const review = bundle.skills.some((k) => k.name === 'seedgrid-review')
110
+ ? ' Para conferir se o código segue o padrão, use a skill `seedgrid-review`.'
111
+ : '';
112
+ const list = present.map(([p, label]) => `\`.ai/${p}\` (${label})`).join(' e ');
113
+ return [`- **Padrões SeedGrid obrigatórios:** ao implementar ou alterar código, siga ${list}.${review}`];
114
+ }
115
+ export function agentsMdBlock(bundle, targets, mode) {
116
+ const nativeDirs = [
117
+ targets.includes('claude') ? '`.claude/agents/`' : null,
118
+ targets.includes('codex') ? '`.codex/agents/`' : null,
119
+ ]
120
+ .filter(Boolean)
121
+ .join(' e ');
122
+ const delegation = mode === 'native'
123
+ ? `- Modo \`native\`: os papéis do catálogo também estão registrados como subagentes em ${nativeDirs}, com os mesmos ids. Use-os quando a ferramenta os reconhecer; caso contrário, siga o modo shared e informe a indisponibilidade.`
124
+ : '- Modo `shared`: para delegar, use o mecanismo de subagentes disponível na ferramenta e passe a definição do papel. Sem subagentes, aplique o papel na sessão principal e informe isso.';
125
+ const inner = [
126
+ '## SeedGrid AI Toolkit',
127
+ '',
128
+ `Bloco gerenciado pelo \`seedgrid-ai\` (conteúdo ${bundle.contentVersion}, modo \`${mode}\`). Não edite entre os marcadores; personalize em \`.ai/local/\`.`,
129
+ '',
130
+ 'Cada pasta de `.ai/` tem um `index.md` com o que há nela: comece por ele e leia só o que a tarefa pedir.',
131
+ '',
132
+ '- Regras: `.ai/rules/`. Antes de tarefas não triviais, leia `coordenacao.md`.',
133
+ ...standardsLines(bundle),
134
+ '- Papéis: `.ai/agents/`.',
135
+ `- Skills: \`.ai/skills/\` (${bundle.skills.length}). Antes de uma tarefa que combine com a descrição, leia o \`SKILL.md\` indicado no índice.`,
136
+ '- Templates: `.ai/templates/`. Referências: `.ai/references/`.',
137
+ ...brainLines(bundle),
138
+ '- Personalizações do projeto ficam em `.ai/local/` (se existir) e prevalecem sobre as regras compartilhadas; veja `.ai/rules/personalizacao-local.md`.',
139
+ delegation,
140
+ ].join('\n');
141
+ return { file: 'AGENTS.md', inner };
142
+ }
@@ -0,0 +1 @@
1
+ export const GENERATED_NOTICE = 'Gerado por seedgrid-ai';