@seedgrid/ai-toolkit 0.3.0 → 0.3.2

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 (51) hide show
  1. package/README.md +20 -9
  2. package/dist/adapters/shared.js +12 -7
  3. package/dist/cli.js +8 -2
  4. package/dist/commands/review.js +2 -2
  5. package/dist/commands/selfinstall.js +63 -0
  6. package/dist/core/plan.js +5 -0
  7. package/docs/arquitetura.md +2 -2
  8. package/docs/compatibilidade.md +1 -1
  9. package/docs/formato.md +4 -4
  10. package/docs/instalacao.md +1 -1
  11. package/package.json +1 -1
  12. package/seedgridKB/SeedGrid/Extensions/Catalogo-de-propriedades.md +971 -971
  13. package/seedgridKB/SeedGrid/Extensions/audit/Configuracao-Rust.md +93 -93
  14. package/seedgridKB/SeedGrid/Extensions/resilience/Configuracao.md +186 -186
  15. package/seedgridKB/SeedGrid/Extensions/resilience/Visao-geral.md +112 -112
  16. package/seedgridKB/SeedGrid/SeedGrid-components/Indice.md +323 -323
  17. package/seedgridKB/SeedGrid/SeedGrid-components/editor/API.md +103 -103
  18. package/seedgridKB/SeedGrid/SeedGrid-components/editor/Visao-geral.md +86 -86
  19. package/seedgridKB/SeedGrid/SeedGrid-components/gadgets/Exemplos.md +629 -629
  20. package/seedgridKB/SeedGrid/SeedGrid-components/inputs-texto/Visao-geral.md +123 -123
  21. package/seedgridKB/SeedGrid/SeedGrid-components/navegacao-e-overlay/Exemplos.md +59 -59
  22. package/seedgridKB/SeedGrid/Toolkit/agents/arquiteto.md +1 -1
  23. package/seedgridKB/SeedGrid/Toolkit/agents/backend-java.md +2 -2
  24. package/seedgridKB/SeedGrid/Toolkit/agents/backend-rust.md +1 -1
  25. package/seedgridKB/SeedGrid/Toolkit/agents/frontend-react.md +1 -1
  26. package/seedgridKB/SeedGrid/Toolkit/agents/qa.md +2 -2
  27. package/seedgridKB/SeedGrid/Toolkit/agents/revisor.md +2 -2
  28. package/seedgridKB/SeedGrid/Toolkit/references/fluxo-de-trabalho.md +3 -3
  29. package/seedgridKB/SeedGrid/Toolkit/rules/backend-java-seedgrid.md +2 -2
  30. package/seedgridKB/SeedGrid/Toolkit/rules/coordenacao.md +1 -1
  31. package/seedgridKB/SeedGrid/Toolkit/rules/documentos.md +26 -0
  32. package/seedgridKB/SeedGrid/Toolkit/rules/frontend-seedgrid.md +2 -2
  33. package/seedgridKB/SeedGrid/Toolkit/skills/{seedgrid-bump → sg-bump}/SKILL.md +1 -1
  34. package/seedgridKB/SeedGrid/Toolkit/skills/{revisar-codigo → sg-code-review}/SKILL.md +1 -1
  35. package/seedgridKB/SeedGrid/Toolkit/skills/{seedgrid-backend-crud → sg-crud-back}/SKILL.md +3 -3
  36. package/seedgridKB/SeedGrid/Toolkit/skills/{seedgrid-crud → sg-crud-front}/SKILL.md +2 -2
  37. package/seedgridKB/SeedGrid/Toolkit/skills/{seedgrid-crud → sg-crud-front}/agents/openai.yaml +1 -1
  38. package/seedgridKB/SeedGrid/Toolkit/skills/{seedgrid-crud → sg-crud-front}/references/routing.md +1 -1
  39. package/seedgridKB/SeedGrid/Toolkit/skills/{seedgrid-new-screen → sg-new-screen}/SKILL.md +1 -1
  40. package/seedgridKB/SeedGrid/Toolkit/skills/sg-new-screen/agents/openai.yaml +4 -0
  41. package/seedgridKB/SeedGrid/Toolkit/skills/sg-new-skill/SKILL.md +35 -0
  42. package/seedgridKB/SeedGrid/Toolkit/skills/{planejar-mudanca → sg-plan-change}/SKILL.md +1 -1
  43. package/seedgridKB/SeedGrid/Toolkit/skills/{seedgrid-review → sg-review}/SKILL.md +1 -1
  44. package/seedgridKB/SeedGrid/Toolkit/skills/{validar-mudanca → sg-validate-change}/SKILL.md +1 -1
  45. package/seedgridKB/manifest.json +26 -17
  46. package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-new-screen/agents/openai.yaml +0 -4
  47. /package/seedgridKB/SeedGrid/Toolkit/skills/{revisar-codigo → sg-code-review}/references/checklist.md +0 -0
  48. /package/seedgridKB/SeedGrid/Toolkit/skills/{seedgrid-crud → sg-crud-front}/references/checklist.md +0 -0
  49. /package/seedgridKB/SeedGrid/Toolkit/skills/{seedgrid-crud → sg-crud-front}/references/patterns.md +0 -0
  50. /package/seedgridKB/SeedGrid/Toolkit/skills/{seedgrid-new-screen → sg-new-screen}/references/checklist.md +0 -0
  51. /package/seedgridKB/SeedGrid/Toolkit/skills/{seedgrid-new-screen → sg-new-screen}/references/steps.md +0 -0
package/README.md CHANGED
@@ -4,7 +4,17 @@ Fonte versionada de **agentes (papéis), skills, regras, templates, referências
4
4
 
5
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
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.
7
+ > Pacote público no npm como `@seedgrid/ai-toolkit` (licença MIT); código em https://github.com/SeedGrid/seedgrid-ai. A versão do pacote e a do conteúdo instalado são a mesma.
8
+
9
+ ## Instalação rápida
10
+
11
+ ```bash
12
+ npx @seedgrid/ai-toolkit@latest install # uma vez por máquina: instala o comando seedgrid-ai (npm install -g)
13
+ cd /caminho/do/projeto
14
+ seedgrid-ai init # instala o toolkit no projeto
15
+ ```
16
+
17
+ Depois é só `seedgrid-ai update`, `seedgrid-ai status`, `seedgrid-ai doctor`, `seedgrid-ai review` etc. (`seedgrid-ai --help` lista tudo). Sem instalar o comando, qualquer comando também funciona com `npx @seedgrid/ai-toolkit <comando>`. Abra uma **sessão nova** do Claude Code ou do Codex depois de instalar no projeto.
8
18
 
9
19
  ## O que é instalado
10
20
 
@@ -27,7 +37,7 @@ Cada pasta de `.ai/` (`rules`, `agents`, `skills`, `templates`, `references`) te
27
37
  | `.claude/agents/<id>.md` | Somente `--mode native`: subagentes do Claude Code |
28
38
  | `.codex/agents/<id>.toml` | Somente `--mode native`: agentes personalizados do Codex |
29
39
 
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.
40
+ Skills: `sg-plan-change`, `sg-code-review`, `sg-validate-change` (genéricas) e `sg-crud-front`, `sg-new-screen`, `sg-review` (padrões SeedGrid). Toda instalação recebe todas as skills.
31
41
 
32
42
  ## A base de conhecimento (seedgridKB)
33
43
 
@@ -66,6 +76,7 @@ seedgrid-ai init --target both --mode shared
66
76
  ## Comandos
67
77
 
68
78
  ```bash
79
+ seedgrid-ai install # instala o comando seedgrid-ai na máquina (npm install -g)
69
80
  seedgrid-ai init --target both --mode shared # padrão; idempotente
70
81
  seedgrid-ai init --target both --mode native # também registra subagentes nativos
71
82
  seedgrid-ai init --source ./seedgridKB --dry-run # fonte local (desenvolvimento), só o plano
@@ -90,14 +101,14 @@ seedgrid-ai review back --tool codex # só o back-end, usando o Code
90
101
 
91
102
  ### `seedgrid-ai review`
92
103
 
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.
104
+ Executa a skill `sg-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
105
 
95
106
  - **Escopo:** `front`, `back` ou nenhum (os dois). Por padrão revisa os arquivos alterados (diff); `--full` revisa o projeto inteiro.
96
107
  - **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
108
  - **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
109
  - **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
110
  - **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).
111
+ - Exige o toolkit instalado (`init`) com a skill `sg-review` (`update` leva as skills novas a projetos já instalados).
101
112
 
102
113
  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
114
 
@@ -118,15 +129,15 @@ Seleção de papéis e delegação são comportamentos orientados por instruçõ
118
129
 
119
130
  ## Uso via npm
120
131
 
121
- Depois que a versão for publicada:
122
-
123
132
  ```bash
133
+ npx @seedgrid/ai-toolkit@latest install # instala o comando seedgrid-ai nesta máquina (uma vez; repita para atualizar o comando)
124
134
  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
135
+ seedgrid-ai init --target both # primeira instalação no projeto
136
+ seedgrid-ai update # leva o projeto ao conteúdo da versão do comando instalado
137
+ npx @seedgrid/ai-toolkit@latest update # ou: usa a versão mais recente sem instalar nada
127
138
  ```
128
139
 
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.
140
+ `install` executa `npm install -g @seedgrid/ai-toolkit@<versão deste CLI>` e confere se `seedgrid-ai` ficou no PATH; não toca em nenhum projeto (`--dry-run` mostra o comando). Se der erro de permissão, configure um prefixo global do npm para o seu usuário ou continue usando `npx`. 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
141
 
131
142
  ## Repositório e publicação
132
143
 
@@ -53,19 +53,18 @@ export function renderFolderIndex(bundle, type) {
53
53
  }
54
54
  export const SKILLS_INDEX_FILE = '.ai/skills/index.md';
55
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) {
56
+ export function renderSkillsIndex(bundle) {
57
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
58
  const lines = [
60
59
  '# Índice de skills',
61
60
  '',
62
61
  `<!-- ${GENERATED_NOTICE} a partir do frontmatter de cada SKILL.md (conteúdo ${bundle.contentVersion}). Não edite. -->`,
63
62
  '',
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.',
63
+ '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 não aparecem aqui: se existir `projeto.md` nesta pasta, ele as lista.',
65
64
  '',
66
65
  '| Skill | O que faz e quando usar | Arquivo |',
67
66
  '| --- | --- | --- |',
68
- ...bundle.skills.map((k) => `| \`${k.name}\` | ${cell(k.description)} | ${dirs.map((d) => `\`${d}/${k.name}/SKILL.md\``).join(' ou ')} |`),
67
+ ...bundle.skills.map((k) => `| \`${k.name}\` | ${cell(k.description)} | [${k.name}/SKILL.md](${k.name}/SKILL.md) |`),
69
68
  '',
70
69
  ];
71
70
  return lines.join('\n');
@@ -80,7 +79,12 @@ export function sharedFiles(bundle, targets) {
80
79
  for (const type of ['rules', 'templates', 'references']) {
81
80
  files.push({ path: sharedDest(`${type}/index.md`), content: renderFolderIndex(bundle, type), component: type });
82
81
  }
83
- files.push({ path: SKILLS_INDEX_FILE, content: renderSkillsIndex(bundle, targets), component: 'skills-index' });
82
+ // Cópia canônica em .ai/skills (o AGENTS.md aponta para ela); as cópias nativas das ferramentas vêm dos adapters.
83
+ for (const k of bundle.skills) {
84
+ for (const f of k.files)
85
+ files.push({ path: `.ai/skills/${k.name}/${f.path}`, content: f.content, component: `skill:${k.name}` });
86
+ }
87
+ files.push({ path: SKILLS_INDEX_FILE, content: renderSkillsIndex(bundle), component: 'skills-index' });
84
88
  return files;
85
89
  }
86
90
  /** Instruções de consulta à base de conhecimento SeedGrid (.ai/brain/), quando o conteúdo a inclui. */
@@ -106,8 +110,8 @@ function standardsLines(bundle) {
106
110
  const present = STANDARD_RULES.filter(([p]) => bundle.shared.some((s) => s.path === p));
107
111
  if (present.length === 0)
108
112
  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`.'
113
+ const review = bundle.skills.some((k) => k.name === 'sg-review')
114
+ ? ' Para conferir se o código segue o padrão, use a skill `sg-review`.'
111
115
  : '';
112
116
  const list = present.map(([p, label]) => `\`.ai/${p}\` (${label})`).join(' e ');
113
117
  return [`- **Padrões SeedGrid obrigatórios:** ao implementar ou alterar código, siga ${list}.${review}`];
@@ -130,6 +134,7 @@ export function agentsMdBlock(bundle, targets, mode) {
130
134
  '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
135
  '',
132
136
  '- Regras: `.ai/rules/`. Antes de tarefas não triviais, leia `coordenacao.md`.',
137
+ '- **Documentos que você gerar** (planos, handoff, decisões, especificações, relatórios) são salvos em `.ai/docs/<tipo>/`, por exemplo `.ai/docs/plans/` e `.ai/docs/handoff/`; veja `.ai/rules/documentos.md`.',
133
138
  ...standardsLines(bundle),
134
139
  '- Papéis: `.ai/agents/`.',
135
140
  `- Skills: \`.ai/skills/\` (${bundle.skills.length}). Antes de uma tarefa que combine com a descrição, leia o \`SKILL.md\` indicado no índice.`,
package/dist/cli.js CHANGED
@@ -7,25 +7,29 @@ import { doctorCommand } from './commands/doctor.js';
7
7
  import { initCommand } from './commands/init.js';
8
8
  import { removeCommand } from './commands/remove.js';
9
9
  import { reviewCommand } from './commands/review.js';
10
+ import { selfInstallCommand } from './commands/selfinstall.js';
10
11
  import { statusCommand } from './commands/status.js';
11
12
  import { updateCommand } from './commands/update.js';
12
13
  import { validateCommand } from './commands/validate.js';
13
14
  import { cliVersion } from './core/env.js';
15
+ import { TOOL_NAME } from './core/lock.js';
14
16
  import { ToolkitError } from './core/types.js';
15
17
  import { checkLatest, confirm, isInteractive, npxCommandLine, runPublishedVersion, } from './core/updates.js';
16
18
  const HELP = `seedgrid-ai — instala o SeedGrid AI Toolkit em projetos locais (Claude Code e Codex)
17
19
 
18
20
  Comandos:
21
+ install Instala o comando seedgrid-ai nesta máquina (npm install -g), para usar sem npx; não altera nenhum projeto
19
22
  init Instala o toolkit (regras, papéis, skills, base de conhecimento) no projeto; idempotente
20
23
  update Leva o projeto ao conteúdo da versão do CLI em execução (use npx @seedgrid/ai-toolkit@latest para a mais nova)
21
24
  status Mostra versões, opções e divergências da instalação
22
25
  doctor Diagnostica sintaxe, consistência e limitações; --probe confirma a descoberta real no Codex
23
26
  remove Remove só o que o toolkit instalou e continua intacto
24
27
  validate Valida uma fonte de conteúdo (manifesto, papéis, skills, KB) sem tocar em projetos
25
- review Confere o código contra os padrões SeedGrid, chamando a skill seedgrid-review no Claude Code ou no Codex
28
+ review Confere o código contra os padrões SeedGrid, chamando a skill sg-review no Claude Code ou no Codex
26
29
  help Mostra esta ajuda
27
30
 
28
31
  Uso:
32
+ seedgrid-ai install [--dry-run]
29
33
  seedgrid-ai init [--target claude|codex|both] [--mode shared|native] [--source <pasta>] [--dry-run]
30
34
  seedgrid-ai update [--target ...] [--mode ...] [--source <pasta>] [--dry-run]
31
35
  seedgrid-ai status
@@ -46,10 +50,12 @@ Opções comuns:
46
50
  --no-update-check Não consulta o npm por versões mais novas (também: SEEDGRID_AI_NO_UPDATE_CHECK=1)
47
51
  --version, --help
48
52
 
53
+ Primeira vez: npx @seedgrid/ai-toolkit@latest install (depois use seedgrid-ai init, update, ... sem npx)
49
54
  Padrões do init: --target both --mode shared (ou as opções do lock existente).
50
55
  Em terminal interativo, init/update/status perguntam se devem usar uma versão mais nova publicada no npm.
51
56
  Conflitos abortam a operação inteira (código de saída 2); nada é sobrescrito.`;
52
57
  const COMMANDS = {
58
+ install: { handler: selfInstallCommand, allowed: ['dry-run'] },
53
59
  init: { handler: initCommand, allowed: ['target', 'mode', 'source', 'dry-run'] },
54
60
  update: { handler: updateCommand, allowed: ['target', 'mode', 'source', 'dry-run'] },
55
61
  status: { handler: statusCommand, allowed: [] },
@@ -174,7 +180,7 @@ export async function main(argv) {
174
180
  }
175
181
  }
176
182
  function updateNotice(info, args) {
177
- return `Aviso: versão ${info.latest} disponível no npm (este CLI: ${info.current}). Para usá-la: ${npxCommandLine(info.latest, args)}`;
183
+ return `Aviso: versão ${info.latest} disponível no npm (este CLI: ${info.current}). Para usá-la: ${npxCommandLine(info.latest, args)}. Para atualizar o comando seedgrid-ai instalado na máquina: npx ${TOOL_NAME}@latest install`;
178
184
  }
179
185
  /** Repassa o comando para a versão publicada mais nova. */
180
186
  async function delegate(info, args) {
@@ -6,7 +6,7 @@ import { readLock } from '../core/lock.js';
6
6
  import { detectTool, runReviewCommand } from '../core/tools.js';
7
7
  import { ALL_TARGETS, ToolkitError } from '../core/types.js';
8
8
  import { EXIT_ERROR, EXIT_OK, EXIT_VIOLATIONS } from './common.js';
9
- export const REVIEW_SKILL = 'seedgrid-review';
9
+ export const REVIEW_SKILL = 'sg-review';
10
10
  export const REVIEW_SCOPES = ['front', 'back', 'both'];
11
11
  const SCOPE_TEXT = { front: 'front', back: 'back', both: 'front e back' };
12
12
  export function parseScope(value) {
@@ -60,7 +60,7 @@ async function skillInstalled(projectRoot, target) {
60
60
  }
61
61
  /**
62
62
  * Revisa o código do projeto contra os padrões SeedGrid chamando, em modo somente leitura,
63
- * a skill seedgrid-review na ferramenta de IA instalada (Claude Code ou Codex).
63
+ * a skill sg-review na ferramenta de IA instalada (Claude Code ou Codex).
64
64
  * Usa o login do usuário na ferramenta e consome tokens; nenhum outro comando chama o modelo.
65
65
  */
66
66
  export async function reviewCommand(opts) {
@@ -0,0 +1,63 @@
1
+ import { exec } from 'node:child_process';
2
+ import { cliVersion } from '../core/env.js';
3
+ import { TOOL_NAME } from '../core/lock.js';
4
+ import { EXIT_ERROR, EXIT_OK } from './common.js';
5
+ /** Executa um comando fixo (sem entrada do usuário) e devolve o resultado. shell é necessário para npm.cmd no Windows. */
6
+ function runFixed(command, timeoutMs) {
7
+ return new Promise((resolve) => {
8
+ const child = exec(command, { timeout: timeoutMs, windowsHide: true, maxBuffer: 16 * 1024 * 1024 }, (err, stdout, stderr) => {
9
+ const e = err;
10
+ resolve({ code: e ? (typeof e.code === 'number' ? e.code : null) : 0, stdout: stdout.toString(), stderr: stderr.toString() });
11
+ });
12
+ child.stdin?.end();
13
+ });
14
+ }
15
+ /**
16
+ * Instala o comando `seedgrid-ai` na máquina (npm install -g), na versão deste CLI.
17
+ * Depois, os demais comandos ficam disponíveis sem npx. Não toca em nenhum projeto.
18
+ */
19
+ export async function selfInstallCommand(opts) {
20
+ const version = cliVersion();
21
+ const command = `npm install -g ${TOOL_NAME}@${version}`;
22
+ const base = { command: 'install', version, npmCommand: command };
23
+ if (opts.dryRun) {
24
+ return {
25
+ exitCode: EXIT_OK,
26
+ report: { ...base, dryRun: true },
27
+ lines: [`Executaria: ${command}`, 'Nada foi instalado (--dry-run).'],
28
+ };
29
+ }
30
+ const run = opts.npmRunner ?? runFixed;
31
+ const result = await run(command, 5 * 60 * 1000);
32
+ if (result.code !== 0) {
33
+ const detail = (result.stderr.trim() || result.stdout.trim() || '(sem saída)').split('\n').slice(-8).join('\n');
34
+ return {
35
+ exitCode: EXIT_ERROR,
36
+ report: { ...base, ok: false, code: result.code, stderr: result.stderr },
37
+ lines: [
38
+ `Não foi possível instalar com "${command}" (código ${result.code ?? 'desconhecido'}).`,
39
+ detail,
40
+ '',
41
+ 'Se for permissão, configure um prefixo global do npm para o seu usuário ou rode o terminal com a permissão necessária.',
42
+ 'Sem instalar, você ainda pode usar: npx @seedgrid/ai-toolkit <comando>',
43
+ ],
44
+ };
45
+ }
46
+ const check = await run('seedgrid-ai --version', 30 * 1000);
47
+ const found = check.code === 0 && check.stdout.trim() === version;
48
+ return {
49
+ exitCode: EXIT_OK,
50
+ report: { ...base, ok: true, onPath: found },
51
+ lines: [
52
+ `Instalado: ${TOOL_NAME}@${version} (comando seedgrid-ai).`,
53
+ found
54
+ ? 'O comando já está disponível neste terminal.'
55
+ : 'Se "seedgrid-ai" não for reconhecido, abra um novo terminal ou confira se a pasta global do npm (npm prefix -g) está no PATH.',
56
+ '',
57
+ 'Próximos passos, na pasta do projeto:',
58
+ ' seedgrid-ai init # instala o toolkit no projeto',
59
+ ' seedgrid-ai --help # lista todos os comandos',
60
+ `Para atualizar o próprio comando no futuro: npx ${TOOL_NAME}@latest install`,
61
+ ],
62
+ };
63
+ }
package/dist/core/plan.js CHANGED
@@ -116,6 +116,11 @@ export async function planInstall(projectRoot, desired, lockState, meta) {
116
116
  else if (prev) {
117
117
  conflicts.push({ path: d.path, reason: 'modificado localmente desde a última instalação' });
118
118
  }
119
+ else if (d.component.startsWith('skill:')) {
120
+ // Padronização: a skill do toolkit prevalece sobre uma skill de projeto com o mesmo nome (o original vai para o backup).
121
+ fileOps.push({ path: d.path, action: 'update', reason: 'skill do toolkit substitui arquivo existente de mesmo nome', content: d.content, expectedHash: cur.hash });
122
+ warnings.push(`${d.path}: substituído pela skill do toolkit; o original fica no backup da operação`);
123
+ }
119
124
  else {
120
125
  conflicts.push({ path: d.path, reason: 'arquivo existente não gerenciado pelo toolkit, com conteúdo diferente' });
121
126
  }
@@ -22,7 +22,7 @@ Cada etapa é pura até `applyPlan`: carregar, validar e planejar só leem o dis
22
22
  | Caminho | Responsabilidade |
23
23
  | --- | --- |
24
24
  | `src/cli.ts` | Parsing de argumentos (`node:util.parseArgs`), saída texto/JSON, códigos de saída |
25
- | `src/commands/` | `init`, `update` (fluxo comum em `install.ts`), `status`, `doctor`, `remove`, `validate`, `review` (única que chama o modelo: executa a skill `seedgrid-review` via `claude -p` ou `codex exec`, somente leitura) |
25
+ | `src/commands/` | `init`, `update` (fluxo comum em `install.ts`), `status`, `doctor`, `remove`, `validate`, `review` (única que chama o modelo: executa a skill `sg-review` via `claude -p` ou `codex exec`, somente leitura) |
26
26
  | `src/core/content.ts` | Leitura do manifesto (vault) e validação de schema, nomes, IDs, arquivos, links, referências e da KB (wikilinks, caminhos locais, segredos) |
27
27
  | `src/core/plan.ts` | Comparação entre estado desejado, lock e disco; classifica cada item e detecta conflitos |
28
28
  | `src/core/apply.ts` | Revalidação, backup, escrita via temporário + renomeação, rollback, limpeza de pastas vazias |
@@ -47,7 +47,7 @@ Para cada arquivo desejado:
47
47
  | igual ao desejado | presente / ausente | sem mudança / adotar |
48
48
  | igual ao hash do lock | presente | atualizar |
49
49
  | diferente de ambos | presente | **conflito** (modificado localmente) |
50
- | diferente do desejado | ausente | **conflito** (arquivo não gerenciado) |
50
+ | diferente do desejado | ausente | **conflito** (arquivo não gerenciado; exceção: arquivos de skill do toolkit são substituídos, com backup) |
51
51
 
52
52
  Arquivos no lock que saíram do estado desejado (troca de target/modo, item removido do conteúdo) são apagados se intactos; se modificados, geram conflito.
53
53
 
@@ -31,7 +31,7 @@ Fontes consultadas: [Claude Code skills](https://code.claude.com/docs/en/skills)
31
31
 
32
32
  - **Base de conhecimento** (Claude Code 2.1.299, `claude -p`, projeto vazio com `.ai/brain/` instalada): perguntado pelo valor padrão, tipo e classe de `seedgrid.app.ai-pricing.timezone`, respondeu `America/Sao_Paulo`, `String`, `AiPricingScheduler`, citando as notas consultadas; perguntado por uma propriedade inexistente, respondeu que não a encontrou e se recusou a inventar o padrão.
33
33
 
34
- - **`seedgrid-ai review`** (Claude Code 2.1.300 via `claude -p`; Codex 0.160.1 via `codex exec --sandbox read-only`): em projeto descartável com violações plantadas (telefone e CPF em `SgInputText`, `<input>` cru, `window.confirm`, `@Inject` em atributo, `RuntimeException`, pacote no singular), as duas ferramentas executaram a skill `seedgrid-review`, apontaram essas violações com arquivo e linha e fecharam com o bloco `seedgrid-review-json`; o CLI saiu com código 3. Tempos: cerca de 27 s (Claude Code) e 80 s (Codex). Os itens de julgamento divergiram entre as duas ferramentas.
34
+ - **`seedgrid-ai review`** (Claude Code 2.1.300 via `claude -p`; Codex 0.160.1 via `codex exec --sandbox read-only`): em projeto descartável com violações plantadas (telefone e CPF em `SgInputText`, `<input>` cru, `window.confirm`, `@Inject` em atributo, `RuntimeException`, pacote no singular), as duas ferramentas executaram a skill `sg-review`, apontaram essas violações com arquivo e linha e fecharam com o bloco `seedgrid-review-json`; o CLI saiu com código 3. Tempos: cerca de 27 s (Claude Code) e 80 s (Codex). Os itens de julgamento divergiram entre as duas ferramentas.
35
35
 
36
36
  Nenhuma tarefa publicou ou modificou serviços externos.
37
37
 
package/docs/formato.md CHANGED
@@ -57,7 +57,7 @@ Arquivos e pastas que começam com ponto são ignorados.
57
57
  ```json
58
58
  {
59
59
  "schemaVersion": 2,
60
- "contentVersion": "0.3.0",
60
+ "contentVersion": "0.3.2",
61
61
  "toolkitBase": "SeedGrid/Toolkit",
62
62
  "components": [
63
63
  { "id": "agents", "type": "agents", "files": ["agents/arquiteto.md"] },
@@ -65,9 +65,9 @@ Arquivos e pastas que começam com ponto são ignorados.
65
65
  { "id": "templates", "type": "templates", "files": ["templates/especificacao-tarefa.md"] },
66
66
  { "id": "references", "type": "references", "files": ["references/glossario.md"] },
67
67
  {
68
- "id": "skill:planejar-mudanca",
68
+ "id": "skill:sg-plan-change",
69
69
  "type": "skill",
70
- "name": "planejar-mudanca",
70
+ "name": "sg-plan-change",
71
71
  "files": [
72
72
  "SKILL.md",
73
73
  { "path": "assets/especificacao-tarefa.md", "from": "templates/especificacao-tarefa.md" }
@@ -111,7 +111,7 @@ Schema próprio do toolkit, em frontmatter YAML:
111
111
  id: backend-java
112
112
  description: Implementa APIs Java e persistência quando a tarefa altera o backend.
113
113
  capabilities: [read-files, edit-files, run-checks]
114
- preferred_skills: [validar-mudanca]
114
+ preferred_skills: [sg-validate-change]
115
115
  ---
116
116
  ```
117
117
 
@@ -1,6 +1,6 @@
1
1
  # Instalação em projetos
2
2
 
3
- Os exemplos usam `seedgrid-ai`. Sem `npm link`, troque por `node <pasta-do-toolkit>/dist/cli.js`.
3
+ Os exemplos usam o comando `seedgrid-ai`. Para tê-lo na máquina: `npx @seedgrid/ai-toolkit@latest install` (executa `npm install -g`, uma vez; repita para atualizar o comando). Sem instalar, troque `seedgrid-ai` por `npx @seedgrid/ai-toolkit`; em desenvolvimento do toolkit, por `node <pasta-do-toolkit>/dist/cli.js`.
4
4
 
5
5
  ## Primeira instalação
6
6
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seedgrid/ai-toolkit",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "description": "Instala agentes, skills, regras, templates e referências versionados em projetos locais para Claude Code e Codex.",
5
5
  "type": "module",
6
6
  "license": "MIT",