@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.
- package/README.md +20 -9
- package/dist/adapters/shared.js +12 -7
- package/dist/cli.js +8 -2
- package/dist/commands/review.js +2 -2
- package/dist/commands/selfinstall.js +63 -0
- package/dist/core/plan.js +5 -0
- package/docs/arquitetura.md +2 -2
- package/docs/compatibilidade.md +1 -1
- package/docs/formato.md +4 -4
- package/docs/instalacao.md +1 -1
- package/package.json +1 -1
- package/seedgridKB/SeedGrid/Extensions/Catalogo-de-propriedades.md +971 -971
- package/seedgridKB/SeedGrid/Extensions/audit/Configuracao-Rust.md +93 -93
- package/seedgridKB/SeedGrid/Extensions/resilience/Configuracao.md +186 -186
- package/seedgridKB/SeedGrid/Extensions/resilience/Visao-geral.md +112 -112
- package/seedgridKB/SeedGrid/SeedGrid-components/Indice.md +323 -323
- package/seedgridKB/SeedGrid/SeedGrid-components/editor/API.md +103 -103
- package/seedgridKB/SeedGrid/SeedGrid-components/editor/Visao-geral.md +86 -86
- package/seedgridKB/SeedGrid/SeedGrid-components/gadgets/Exemplos.md +629 -629
- package/seedgridKB/SeedGrid/SeedGrid-components/inputs-texto/Visao-geral.md +123 -123
- package/seedgridKB/SeedGrid/SeedGrid-components/navegacao-e-overlay/Exemplos.md +59 -59
- package/seedgridKB/SeedGrid/Toolkit/agents/arquiteto.md +1 -1
- package/seedgridKB/SeedGrid/Toolkit/agents/backend-java.md +2 -2
- package/seedgridKB/SeedGrid/Toolkit/agents/backend-rust.md +1 -1
- package/seedgridKB/SeedGrid/Toolkit/agents/frontend-react.md +1 -1
- package/seedgridKB/SeedGrid/Toolkit/agents/qa.md +2 -2
- package/seedgridKB/SeedGrid/Toolkit/agents/revisor.md +2 -2
- package/seedgridKB/SeedGrid/Toolkit/references/fluxo-de-trabalho.md +3 -3
- package/seedgridKB/SeedGrid/Toolkit/rules/backend-java-seedgrid.md +2 -2
- package/seedgridKB/SeedGrid/Toolkit/rules/coordenacao.md +1 -1
- package/seedgridKB/SeedGrid/Toolkit/rules/documentos.md +26 -0
- package/seedgridKB/SeedGrid/Toolkit/rules/frontend-seedgrid.md +2 -2
- package/seedgridKB/SeedGrid/Toolkit/skills/{seedgrid-bump → sg-bump}/SKILL.md +1 -1
- package/seedgridKB/SeedGrid/Toolkit/skills/{revisar-codigo → sg-code-review}/SKILL.md +1 -1
- package/seedgridKB/SeedGrid/Toolkit/skills/{seedgrid-backend-crud → sg-crud-back}/SKILL.md +3 -3
- package/seedgridKB/SeedGrid/Toolkit/skills/{seedgrid-crud → sg-crud-front}/SKILL.md +2 -2
- package/seedgridKB/SeedGrid/Toolkit/skills/{seedgrid-crud → sg-crud-front}/agents/openai.yaml +1 -1
- package/seedgridKB/SeedGrid/Toolkit/skills/{seedgrid-crud → sg-crud-front}/references/routing.md +1 -1
- package/seedgridKB/SeedGrid/Toolkit/skills/{seedgrid-new-screen → sg-new-screen}/SKILL.md +1 -1
- package/seedgridKB/SeedGrid/Toolkit/skills/sg-new-screen/agents/openai.yaml +4 -0
- package/seedgridKB/SeedGrid/Toolkit/skills/sg-new-skill/SKILL.md +35 -0
- package/seedgridKB/SeedGrid/Toolkit/skills/{planejar-mudanca → sg-plan-change}/SKILL.md +1 -1
- package/seedgridKB/SeedGrid/Toolkit/skills/{seedgrid-review → sg-review}/SKILL.md +1 -1
- package/seedgridKB/SeedGrid/Toolkit/skills/{validar-mudanca → sg-validate-change}/SKILL.md +1 -1
- package/seedgridKB/manifest.json +26 -17
- package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-new-screen/agents/openai.yaml +0 -4
- /package/seedgridKB/SeedGrid/Toolkit/skills/{revisar-codigo → sg-code-review}/references/checklist.md +0 -0
- /package/seedgridKB/SeedGrid/Toolkit/skills/{seedgrid-crud → sg-crud-front}/references/checklist.md +0 -0
- /package/seedgridKB/SeedGrid/Toolkit/skills/{seedgrid-crud → sg-crud-front}/references/patterns.md +0 -0
- /package/seedgridKB/SeedGrid/Toolkit/skills/{seedgrid-new-screen → sg-new-screen}/references/checklist.md +0 -0
- /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
|
-
>
|
|
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: `
|
|
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 `
|
|
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 `
|
|
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
|
-
|
|
126
|
-
|
|
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
|
-
|
|
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
|
|
package/dist/adapters/shared.js
CHANGED
|
@@ -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
|
|
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
|
|
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)} | ${
|
|
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
|
-
|
|
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 === '
|
|
110
|
-
? ' Para conferir se o código segue o padrão, use a skill `
|
|
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
|
|
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) {
|
package/dist/commands/review.js
CHANGED
|
@@ -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 = '
|
|
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
|
|
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
|
}
|
package/docs/arquitetura.md
CHANGED
|
@@ -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 `
|
|
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
|
|
package/docs/compatibilidade.md
CHANGED
|
@@ -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 `
|
|
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.
|
|
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:
|
|
68
|
+
"id": "skill:sg-plan-change",
|
|
69
69
|
"type": "skill",
|
|
70
|
-
"name": "
|
|
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: [
|
|
114
|
+
preferred_skills: [sg-validate-change]
|
|
115
115
|
---
|
|
116
116
|
```
|
|
117
117
|
|
package/docs/instalacao.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Instalação em projetos
|
|
2
2
|
|
|
3
|
-
Os exemplos usam `seedgrid-ai`.
|
|
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