@pathbit/agentdevkit 0.0.8 → 0.0.10

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 (58) hide show
  1. package/.pbai4devs/COMPATIBILIDADE.md +4 -2
  2. package/.pbai4devs/INSTRUCTIONS.md +4 -0
  3. package/.pbai4devs/commands/sincronizar/COMMAND.md +4 -3
  4. package/.pbai4devs/rules/documentacao/RULE.md +4 -0
  5. package/.pbai4devs/rules/qualidade/RULE.md +4 -2
  6. package/.pbai4devs/scripts/README.md +3 -3
  7. package/.pbai4devs/scripts/inspecionar-projeto/README.md +31 -0
  8. package/.pbai4devs/scripts/inspecionar-projeto/SCRIPT.mjs +142 -1
  9. package/.pbai4devs/scripts/inspecionar-projeto/tests/TEST.mjs +168 -1
  10. package/.pbai4devs/scripts/lib/native-paths.mjs +35 -0
  11. package/.pbai4devs/scripts/sincronizar-agentes/README.md +3 -0
  12. package/.pbai4devs/scripts/sincronizar-agentes/SCRIPT.mjs +73 -29
  13. package/.pbai4devs/scripts/sincronizar-agentes/tests/COEXISTENCE.mjs +190 -0
  14. package/.pbai4devs/scripts/sincronizar-agentes/tests/HUMAN_OWNERSHIP.mjs +8 -2
  15. package/.pbai4devs/scripts/sincronizar-agentes/tests/TEST.mjs +28 -28
  16. package/.pbai4devs/scripts/verificar-recursos/SCRIPT.mjs +56 -8
  17. package/.pbai4devs/scripts/verificar-recursos/tests/TEST.mjs +92 -1
  18. package/.pbai4devs/skills/produto/criar-design-doc/SKILL.md +2 -0
  19. package/.pbai4devs/skills/produto/criar-prd/SKILL.md +2 -0
  20. package/.pbai4devs/skills/produto/criar-ux-ui/SKILL.md +2 -0
  21. package/.pbai4devs/skills/projeto/atualizar-documentacao/SKILL.md +18 -4
  22. package/.pbai4devs/skills/projeto/configurar-projeto/SKILL.md +2 -0
  23. package/.pbai4devs/skills/projeto/criar-recurso/SKILL.md +1 -0
  24. package/.pbai4devs/skills/projeto/sincronizar-agentes/SKILL.md +3 -2
  25. package/.pbai4devs/skills/specs/criar-spec/SKILL.md +1 -0
  26. package/.pbai4devs/skills/specs/gerenciar-roadmap/SKILL.md +2 -1
  27. package/.pbai4devs/templates/README.md +4 -1
  28. package/.pbai4devs/templates/configuracao/TEMPLATE.md +6 -0
  29. package/CHANGELOG.md +18 -0
  30. package/README.en.md +18 -5
  31. package/README.es.md +19 -6
  32. package/README.md +16 -3
  33. package/docs/README.md +4 -2
  34. package/docs/guides/README.md +3 -1
  35. package/docs/guides/cli.md +5 -0
  36. package/docs/guides/documentation.md +63 -0
  37. package/docs/guides/installation.md +71 -14
  38. package/docs/guides/prerequisites.md +123 -0
  39. package/docs/guides/resources.md +6 -5
  40. package/docs/guides/tools-and-testing.md +2 -1
  41. package/docs/guides/troubleshooting.md +29 -13
  42. package/docs/guides/workflow.md +2 -0
  43. package/docs/maintainers/README.md +1 -1
  44. package/docs/maintainers/maintenance.md +8 -4
  45. package/docs/maintainers/packages.md +45 -13
  46. package/docs/product/design.md +12 -0
  47. package/docs/product/prd.md +4 -1
  48. package/docs/product/roadmap.md +4 -0
  49. package/docs/specs/README.md +3 -0
  50. package/docs/specs/dual-registry/SPEC.md +43 -0
  51. package/docs/specs/v0.0.10/README.md +9 -0
  52. package/docs/specs/v0.0.10/SPEC.md +42 -0
  53. package/docs/specs/v0.0.9/README.md +9 -0
  54. package/docs/specs/v0.0.9/SPEC.md +68 -0
  55. package/package.json +3 -2
  56. package/src/cli.mjs +3 -0
  57. package/src/i18n.mjs +3 -0
  58. package/src/install.mjs +84 -16
@@ -20,6 +20,39 @@ function checkedStat(root, location) {
20
20
  return item;
21
21
  }
22
22
 
23
+ function checkedPath(root, path) {
24
+ if (typeof path !== 'string' || !path || isAbsolute(path) || /[\\\x00-\x1f\x7f:]/.test(path) || path.split('/').some(part => !part || part === '.' || part === '..')) fail(`Caminho gerenciado invalido: ${path}`);
25
+ let location = root;
26
+ for (const part of path.split('/')) { location = join(location, part); checkedStat(root, location); }
27
+ return location;
28
+ }
29
+
30
+ function ownership(root) {
31
+ const file = checkedPath(root, '.pbai4devs/estado/agentdevkit.json');
32
+ if (!checkedStat(root, file)) return null;
33
+ const readState = location => {
34
+ try { return JSON.parse(readFileSync(location, 'utf8')); }
35
+ catch { fail(`Estado invalido: ${normalize(relative(root, location))}`); }
36
+ };
37
+ const state = readState(file);
38
+ const validMap = value => value && typeof value === 'object' && !Array.isArray(value)
39
+ && Object.values(value).every(hash => typeof hash === 'string' && /^[a-f0-9]{64}$/.test(hash));
40
+ if (state?.schemaVersion !== 1 || !validMap(state.files) || !validMap(state.blocks)) fail('Estado de propriedade invalido.');
41
+ const files = { ...state.files };
42
+ const derivedFile = checkedPath(root, '.pbai4devs/estado/derived.json');
43
+ if (checkedStat(root, derivedFile)) {
44
+ const derived = readState(derivedFile);
45
+ if (derived?.schemaVersion !== 1 || !validMap(derived.entries) || Object.keys(derived.entries).some(path => !['AGENTS.md', 'CLAUDE.md', 'GEMINI.md'].includes(path))
46
+ || !validMap(derived.outputs ?? {}) || Object.keys(derived.outputs ?? {}).some(path => !/^\.[a-z0-9][a-z0-9-]*\/(?:skills|rules|agents)\.json$/.test(path))) fail('Estado de entradas derivadas invalido.');
47
+ Object.assign(files, derived.entries, derived.outputs);
48
+ }
49
+ for (const path of [...Object.keys(files), ...Object.keys(state.blocks)]) {
50
+ const location = checkedPath(root, path);
51
+ if (!checkedStat(root, location)?.isFile()) fail(`Arquivo gerenciado ausente: ${path}`);
52
+ }
53
+ return { files, blocks: state.blocks };
54
+ }
55
+
23
56
  export function registryRoots(root) {
24
57
  checkedStat(root, join(root, '.pbai4devs'));
25
58
  const file = join(root, '.pbai4devs/espelhos.conf');
@@ -44,7 +77,7 @@ function walk(root, location, files, { skipTools = true } = {}) {
44
77
  } else if (item.isFile() && ['.md', '.mdc'].includes(extname(location).toLowerCase())) files.add(location);
45
78
  }
46
79
 
47
- export function collectMarkdown(root, registry = registryRoots(root)) {
80
+ export function collectMarkdown(root, registry = registryRoots(root), { installed = ownership(root) } = {}) {
48
81
  const agents = join(root, '.pbai4devs');
49
82
  checkedStat(root, agents);
50
83
  for (const directory of readdirSync(agents, { withFileTypes: true })) {
@@ -54,10 +87,18 @@ export function collectMarkdown(root, registry = registryRoots(root)) {
54
87
  if (item?.isDirectory() && !checkedStat(root, join(location, 'README.md'))?.isFile()) fail(`README ausente: .pbai4devs/${directory.name}/`);
55
88
  }
56
89
  const files = new Set();
57
- const rootMarkdown = readdirSync(root).filter(name => ['.md', '.mdc'].includes(extname(name).toLowerCase()));
58
- const sources = ['.pbai4devs', 'docs', 'src', 'bin', 'tests', 'scripts', 'examples',
59
- '.github/PULL_REQUEST_TEMPLATE.md', '.github/ISSUE_TEMPLATE', ...rootMarkdown];
60
- for (const name of [...sources, ...registry.paths]) walk(root, resolve(root, name), files);
90
+ if (installed) {
91
+ walk(root, agents, files);
92
+ for (const path of Object.keys(installed.files)) {
93
+ const file = checkedPath(root, path);
94
+ if (['.md', '.mdc'].includes(extname(path).toLowerCase())) files.add(file);
95
+ }
96
+ } else {
97
+ const rootMarkdown = readdirSync(root).filter(name => ['.md', '.mdc'].includes(extname(name).toLowerCase()));
98
+ const sources = ['.pbai4devs', 'docs', 'src', 'bin', 'tests', 'scripts', 'examples',
99
+ '.github/PULL_REQUEST_TEMPLATE.md', '.github/ISSUE_TEMPLATE', ...rootMarkdown];
100
+ for (const name of [...sources, ...registry.paths]) walk(root, resolve(root, name), files);
101
+ }
61
102
  const tools = join(agents, 'tools');
62
103
  if (checkedStat(root, tools)) {
63
104
  const guide = join(tools, 'README.md');
@@ -154,8 +195,14 @@ export function checkCatalog(root, build = buildCatalog) {
154
195
  return result.catalog;
155
196
  }
156
197
 
157
- export function checkAgentExtras(root, agents) {
198
+ export function checkAgentExtras(root, agents, { installed = null } = {}) {
158
199
  for (const agent of agents) {
200
+ if (installed) {
201
+ const files = Object.keys(installed.files).filter(path => path.startsWith(`${agent}/`));
202
+ if (files.some(path => auxiliary.some(name => path === `${agent}/${name}` || path.startsWith(`${agent}/${name}/`)))) fail(`Auxiliar gerenciado indevido em ${agent}`);
203
+ if (files.some(path => ['README.md', 'INSTRUCTIONS.md'].includes(basename(path)))) fail(`Guia gerenciado indevido em ${agent}`);
204
+ continue;
205
+ }
159
206
  for (const name of auxiliary) if (existsSync(join(root, agent, name))) fail(`Auxiliar indevido em ${agent}/${name}`);
160
207
  const files = new Set();
161
208
  walk(root, join(root, agent), files);
@@ -183,14 +230,15 @@ export function checkLint(root, files, run = spawnSync) {
183
230
 
184
231
  export function verifyResources({ root = projectRoot, sourceOnly = false, synchronize = checkSynchronization, lint = checkLint, catalogCheck = checkCatalog } = {}) {
185
232
  requireNode();
233
+ const installed = sourceOnly ? null : ownership(root);
186
234
  const built = sourceOnly ? buildCatalog(root) : null;
187
235
  if (!sourceOnly) { synchronize(root); catalogCheck(root); }
188
236
  const registry = sourceOnly ? { agents: [], paths: [] } : registryRoots(root);
189
- const files = collectMarkdown(root, registry);
237
+ const files = collectMarkdown(root, registry, { installed });
190
238
  const virtualPaths = new Set(sourceOnly ? [...built.outputs.keys(), '.pbai4devs/espelhos.conf'] : []);
191
239
  checkMarkdown(root, files, { virtualPaths });
192
240
  checkResourceReferences(root, files);
193
- checkAgentExtras(root, registry.agents);
241
+ checkAgentExtras(root, registry.agents, { installed });
194
242
  return { files, messages: [...lint(root, files), 'recursos=passed'] };
195
243
  }
196
244
 
@@ -1,5 +1,6 @@
1
1
  import assert from 'node:assert/strict';
2
- import { mkdirSync, mkdtempSync, readFileSync, readdirSync, rmSync, symlinkSync, writeFileSync } from 'node:fs';
2
+ import { lstatSync, mkdirSync, mkdtempSync, readFileSync, readlinkSync, readdirSync, rmSync, symlinkSync, writeFileSync } from 'node:fs';
3
+ import { createHash } from 'node:crypto';
3
4
  import { join, relative } from 'node:path';
4
5
  import { spawnSync } from 'node:child_process';
5
6
  import test from 'node:test';
@@ -40,6 +41,16 @@ function resourceFixture(t) {
40
41
  }
41
42
  const verify = root => verifyResources({ root, synchronize() {}, catalogCheck() {}, lint: () => ['lint=fixture'] });
42
43
 
44
+ function installedFixture(t) {
45
+ const context = resourceFixture(t);
46
+ context.file('.pbai4devs/estado/README.md');
47
+ const generated = '.agents/skills/managed/SKILL.md';
48
+ context.file(generated, document('# Gerado\n'));
49
+ const files = { [generated]: createHash('sha256').update(readFileSync(join(context.root, generated))).digest('hex') };
50
+ context.file('.pbai4devs/estado/agentdevkit.json', JSON.stringify({ schemaVersion: 1, version: '0.0.9', language: 'pt', files, blocks: {} }));
51
+ return { ...context, generated };
52
+ }
53
+
43
54
  function writeCatalog(root) {
44
55
  for (const [path, content] of buildCatalog(root).outputs) { mkdirSync(join(root, path, '..'), { recursive: true }); writeFileSync(join(root, path), content); }
45
56
  }
@@ -96,6 +107,86 @@ test('coleta source-only ignora exemplos gerados e clientes, sem exigir Git', t
96
107
  for (const path of result.files) assert.doesNotMatch(relative(root, path), /examples[\\/]generated|node_modules|TEST-RESULTS|\.github[\\/]skills|\.codex/);
97
108
  });
98
109
 
110
+ test('instalação valida somente fontes e Markdown próprio, preservando conteúdo humano', t => {
111
+ const { root, file, generated } = installedFixture(t);
112
+ const own = ['README.md', 'AGENTS.md', 'docs/product.md', 'src/README.md', '.codex/README.md', '.codex/templates/custom.md', '.codex/skills/human/SKILL.md'];
113
+ for (const path of own) file(path, '# Texto humano sem frontmatter\n\n[Link próprio](missing-human-file.md)\n');
114
+ let linted;
115
+ const result = verifyResources({ root, synchronize() {}, catalogCheck() {}, lint(_root, files) { linted = files; return ['lint=fixture']; } });
116
+ assert.ok(result.files.includes(join(root, generated)));
117
+ assert.ok(result.files.includes(join(root, '.pbai4devs/skills/exemplo/SKILL.md')));
118
+ for (const path of own) assert.equal(result.files.includes(join(root, path)), false, path);
119
+ assert.deepEqual(linted, result.files);
120
+ file('.pbai4devs/skills/exemplo/SKILL.md', '# Fonte do kit inválida\n');
121
+ assert.throws(() => verify(root), /Frontmatter\/H1 invalido: .pbai4devs\/skills\/exemplo\/SKILL.md/);
122
+ });
123
+
124
+ test('instalação não atravessa links humanos de entradas e skills', t => {
125
+ const { root, file } = installedFixture(t);
126
+ file('AGENTS.md', '# Instrução humana sem frontmatter\n');
127
+ file('own-docs/README.md', '# README humano\n');
128
+ file('own-skills/human/SKILL.md', '# Skill humana\n');
129
+ rmSync(join(root, '.codex/skills'), { recursive: true });
130
+ const links = [['CLAUDE.md', 'AGENTS.md', 'file'], ['README.md', 'own-docs/README.md', 'file'], ['.codex/skills', '../own-skills', 'dir']];
131
+ for (const [path, target, type] of links) {
132
+ try { symlinkSync(type === 'dir' && process.platform === 'win32' ? join(root, 'own-skills') : target, join(root, path), process.platform === 'win32' && type === 'dir' ? 'junction' : type); }
133
+ catch (error) {
134
+ if (process.platform === 'win32' && ['EPERM', 'EACCES'].includes(error.code)) { t.skip('Sem permissão para criar links no Windows.'); return; }
135
+ throw error;
136
+ }
137
+ }
138
+ const before = links.map(([path]) => readlinkSync(join(root, path)));
139
+ const result = verify(root);
140
+ for (const [path] of links) {
141
+ assert.equal(lstatSync(join(root, path)).isSymbolicLink(), true);
142
+ assert.equal(result.files.includes(join(root, path)), false);
143
+ }
144
+ assert.deepEqual(links.map(([path]) => readlinkSync(join(root, path))), before);
145
+ });
146
+
147
+ test('instalação recusa caminho gerenciado substituído por link', t => {
148
+ const { root, file, generated } = installedFixture(t);
149
+ const target = file('external.md', '# Conteúdo externo\n');
150
+ rmSync(join(root, generated));
151
+ try { symlinkSync(target, join(root, generated), 'file'); }
152
+ catch (error) {
153
+ if (process.platform === 'win32' && ['EPERM', 'EACCES'].includes(error.code)) { t.skip('Sem permissão para criar links no Windows.'); return; }
154
+ throw error;
155
+ }
156
+ assert.throws(() => verify(root), /Link simbolico: .agents\/skills\/managed\/SKILL.md/);
157
+ assert.equal(readFileSync(target, 'utf8'), '# Conteúdo externo\n');
158
+ });
159
+
160
+ test('instalação confere entradas derivadas sem aplicar lint a blocos humanos', t => {
161
+ const { root, file } = installedFixture(t);
162
+ const contents = document('# Entrada gerada\n');
163
+ file('GEMINI.md', contents);
164
+ file('.pbai4devs/estado/derived.json', JSON.stringify({ schemaVersion: 1, entries: { 'GEMINI.md': createHash('sha256').update(contents).digest('hex') } }));
165
+ file('AGENTS.md', '# Instruções humanas sem frontmatter\n\n<!-- BEGIN AGENTDEVKIT -->\nLeia as fontes.\n<!-- END AGENTDEVKIT -->\n');
166
+ const statePath = join(root, '.pbai4devs/estado/agentdevkit.json');
167
+ const state = JSON.parse(readFileSync(statePath, 'utf8'));
168
+ state.blocks['AGENTS.md'] = createHash('sha256').update('bloco registrado').digest('hex');
169
+ state.files['.pbai4devs/skills/exemplo/SKILL.md'] = createHash('sha256').update('fonte anterior').digest('hex');
170
+ writeFileSync(statePath, JSON.stringify(state));
171
+ const result = verify(root);
172
+ assert.ok(result.files.includes(join(root, 'GEMINI.md')));
173
+ assert.equal(result.files.includes(join(root, 'AGENTS.md')), false);
174
+ assert.ok(result.files.includes(join(root, '.pbai4devs/skills/exemplo/SKILL.md')));
175
+ file('GEMINI.md', document('# Fonte sincronizada com hash de instalação anterior\n'));
176
+ assert.ok(verify(root).files.includes(join(root, 'GEMINI.md')));
177
+ });
178
+
179
+ test('instalação também protege manifestos registrados em derived.outputs', t => {
180
+ const { root, file } = installedFixture(t);
181
+ const manifest = '.agents/skills.json';
182
+ const contents = '{"entries":[]}\n';
183
+ file(manifest, contents);
184
+ file('.pbai4devs/estado/derived.json', JSON.stringify({ schemaVersion: 1, entries: {}, outputs: { [manifest]: createHash('sha256').update(contents).digest('hex') } }));
185
+ assert.ok(!verify(root).files.includes(join(root, manifest)));
186
+ rmSync(join(root, manifest));
187
+ assert.throws(() => verify(root), /Arquivo gerenciado ausente: .agents\/skills.json/);
188
+ });
189
+
99
190
  test('catalogo derivado cobre recursos e detecta JSON editado sem reescrever', t => {
100
191
  const { root, file } = resourceFixture(t);
101
192
  file('.pbai4devs/commands/inspecionar/COMMAND.md', document('# Inspecionar\n\n[Script](../../scripts/inspecionar/SCRIPT.mjs).\n'));
@@ -6,6 +6,8 @@ description: Define e revisa o design técnico do produto com o usuário.
6
6
  # Criar design técnico
7
7
 
8
8
  Siga `.pbai4devs/rules/qualidade/RULE.md` ao criar arquivos Markdown.
9
+ Antes de escrever, use `atualizar-documentacao` para ler e reaproveitar documentos
10
+ existentes; aplique o template somente às lacunas.
9
11
 
10
12
  Consulte `.pbai4devs/estado/configuracao/ESTADO.md` e confira o PRD aprovado
11
13
  e UX/UI aprovado ou não aplicável com justificativa,
@@ -6,6 +6,8 @@ description: Define e revisa o documento de requisitos do produto com o usuário
6
6
  # Criar PRD
7
7
 
8
8
  Siga `.pbai4devs/rules/qualidade/RULE.md` ao criar arquivos Markdown.
9
+ Antes de escrever, use `atualizar-documentacao` para ler e reaproveitar documentos
10
+ existentes; aplique o template somente às lacunas.
9
11
 
10
12
  Confira a preparação em `.pbai4devs/estado/configuracao/ESTADO.md`. Se não estiver
11
13
  concluída e comprovada, encaminhe a `configurar-projeto` para a fase
@@ -6,6 +6,8 @@ description: Define ou justifica a não aplicação de UX e interface com o usu
6
6
  # Criar UX/UI
7
7
 
8
8
  Siga `.pbai4devs/rules/qualidade/RULE.md` ao criar arquivos Markdown.
9
+ Antes de escrever, use `atualizar-documentacao` para ler e reaproveitar documentos
10
+ existentes; aplique o template somente às lacunas.
9
11
 
10
12
  Consulte `.pbai4devs/estado/configuracao/ESTADO.md` e confira o PRD
11
13
  com `status: aprovado` e a
@@ -5,9 +5,21 @@ description: Atualiza documentos afetados e sua coerência com a entrega.
5
5
 
6
6
  # Atualizar documentação
7
7
 
8
- Leia o diff, os critérios e o comportamento comprovado. Reúna no início as
9
- dúvidas que mudam contratos; use o [catálogo](../../../templates/README.md) para
10
- escolher modelos da fase atual, sem criar documentos de produto antecipados.
8
+ Antes de escrever, execute `inspecionar-projeto` por `executar-script` e consulte
9
+ `documentation`. Abra os documentos relevantes: o inventário não substitui a
10
+ leitura nem comprova aprovação. Confira também o diff e os critérios da tarefa.
11
+ Reúna no início somente dúvidas que os arquivos não respondem.
12
+
13
+ Proponha por caminho: manter, complementar uma seção ou criar arquivo ausente.
14
+ Reutilize nomes, formatos, decisões, links e estrutura existentes; um documento
15
+ como `ARCHITECTURE.md` pode cumprir o papel de design sem ser renomeado.
16
+ Organize primeiro por índices e links. Não apague, mova ou substitua arquivos
17
+ para padronizá-los. Acrescente apenas fatos comprovados e preserve o conteúdo
18
+ anterior; trate contradições com o usuário antes de editar.
19
+
20
+ Use o [catálogo](../../../templates/README.md) como lista de lacunas, nunca como
21
+ substituto de um documento existente. Crie somente o que a fase e o pedido
22
+ exigem; ausência de respostas não autoriza inventar PRD, design ou aprovação.
11
23
 
12
24
  Confira README da raiz/pastas, AGENTS/CLAUDE/GEMINI, contribuição, notas de versão,
13
25
  produto/design/specs, ADRs, configuração/exemplos e comentários/docstrings
@@ -17,7 +29,9 @@ Segurança pública depende de suporte e canal confirmado, sem dados fictícios.
17
29
 
18
30
  Registre por caminho a decisão `updated`, `no-impact` ou `not-applicable`, com
19
31
  justificativa, no relatório da entrega ou no resultado da tarefa. Verifique
20
- links e exemplos; código de teste é versionado, evidências ficam ignoradas.
32
+ links e exemplos; compare o conteúdo anterior e confirme que arquivos fora
33
+ do plano permanecem intactos. Repetir a tarefa não deve duplicar seções.
34
+ Código de teste é versionado, evidências ficam ignoradas.
21
35
 
22
36
  Acione o [revisor](../../../agents/revisor/AGENT.md) em leitura com o diff,
23
37
  documentos, critérios e provas. Aplique os achados pertinentes e peça nova
@@ -17,6 +17,8 @@ as ferramentas e rode o diagnóstico. Isso não escolhe a stack da aplicação.
17
17
 
18
18
  ## Preparar o projeto
19
19
 
20
+ Antes de criar estado ou documentos, faça o inventário de `atualizar-documentacao`.
21
+ Mapeie os documentos já existentes aos seus papéis, sem reiniciar o produto.
20
22
  Reúna dúvidas no início e aproveite decisões existentes. Quando o projeto
21
23
  começar, crie ou retome `.pbai4devs/estado/configuracao/ESTADO.md` pelo modelo.
22
24
  Combine os arquivos `prd`, `ux_ui`, `design`, `roadmap` e diretórios `releases`,
@@ -7,6 +7,7 @@ description: Encaminha criações e cria documentos, modelos ou novos recursos.
7
7
 
8
8
  Se o pedido for um modelo, trabalhe em `.pbai4devs/templates/` sem iniciar a
9
9
  definição do produto. Encaminhe documentos reais à skill correspondente.
10
+ Para documentos, comece pelo inventário e plano de `atualizar-documentacao`.
10
11
 
11
12
  Confira se o recurso já existe e use a skill específica quando disponível:
12
13
  `criar-skill`, `criar-agente`, `criar-comando`, `criar-regra`, `criar-prd`,
@@ -21,8 +21,9 @@ com as fontes, detectando inclusões, alterações, remoções e links inválido
21
21
  Os `.gitignore` de `.pbai4devs` e dos clientes também são gerados dos
22
22
  [modelos](../../../templates/gitignore/TEMPLATE.md). Preserve regras próprias
23
23
  fora do bloco gerenciado; `--check` identifica blocos ausentes ou divergentes.
24
- `--force` repara os destinos gerenciados, sobrescreve conflitos e limpa extras
25
- nesses destinos, com backup local do conteúdo próprio em `.agent-tests/`.
24
+ `--force` repara conflitos gerenciados com backup local em `.agent-tests/`.
25
+ Preserve recursos nativos humanos, inclusive colisões de nomes; links humanos
26
+ são opacos e nunca devem ser atravessados. Confira `preserved` no JSON da CLI.
26
27
  Não apague raízes inteiras: workflows, configurações nativas e a origem ficam
27
28
  fora da limpeza. `--check` só confere, sem corrigir nem criar backups.
28
29
 
@@ -5,6 +5,7 @@ description: Cria uma spec de incremento, esclarecendo requisitos e dúvidas com
5
5
 
6
6
  # Criar spec
7
7
 
8
+ Antes de escrever, aplique o inventário e plano de `atualizar-documentacao`.
8
9
  Leia os caminhos em `.pbai4devs/estado/configuracao/ESTADO.md`. Exija PRD/design
9
10
  aprovados e UX/UI aprovado ou não aplicável com justificativa aprovada.
10
11
  Confira evidências, atualidade e decisões essenciais ao incremento; se faltar
@@ -10,7 +10,8 @@ mostre preparação, releases, specs e tarefas com dependências e bloqueios.
10
10
  Use `[ ]`, `[-]` e `[x]` conforme evidências; informe estados desconhecidos.
11
11
  Sem roadmap, diga que ainda não foi criado. Não conclua entregas sem prova.
12
12
 
13
- Ao planejar ou atualizar, use o modelo de roadmap no caminho acordado. Registre
13
+ Antes de alterar documentos, aplique o inventário de `atualizar-documentacao`.
14
+ Ao planejar ou atualizar, use o modelo só para lacunas no caminho acordado. Registre
14
15
  objetivos, prioridades, etapas, dependências e pendências de PRD, UX/UI e design.
15
16
  Mantenha referências e estados coerentes ao aprovar ou revisar documentos;
16
17
  não invente escopo, datas ou releases. Identifique as specs do primeiro entregável
@@ -30,7 +30,10 @@ enquanto o usuário estiver preparando somente a estrutura dos agentes.
30
30
  | [SECURITY][security] | Suporte público | Política/suporte mudar. |
31
31
  | [Comando][comando] | Recurso agêntico | Entrada ou fluxo mudar. |
32
32
 
33
- Copie só artefatos aplicáveis, remova instruções/placeholders e confirme fatos.
33
+ Antes, inventarie e leia os documentos existentes com `atualizar-documentacao`.
34
+ Use os modelos como lista de lacunas. Copie somente artefatos aplicáveis ainda
35
+ ausentes; nunca substitua documentos existentes. Remova placeholders e confirme
36
+ fatos nos novos arquivos; preserve nomes, formatos, seções e decisões anteriores.
34
37
  README acompanha o projeto desde a preparação; documentos de produto surgem
35
38
  após descoberta. Segurança depende de suporte e canal realmente definidos.
36
39
 
@@ -24,6 +24,12 @@ documentos:
24
24
 
25
25
  # Configuração do projeto
26
26
 
27
+ ## Documentos existentes
28
+
29
+ - Inventário e leitura inicial: a registrar antes de criar documentos.
30
+ - Caminhos e papéis reaproveitados: a definir; não impor novos nomes.
31
+ - Lacunas e complementos acordados: a definir, preservando o conteúdo anterior.
32
+
27
33
  ## Preparação
28
34
 
29
35
  - Evidências e pendências: a definir.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,24 @@ description: Alterações verificáveis por versão do AgentDevKit.
4
4
 
5
5
  # Changelog
6
6
 
7
+ ## 0.0.10 — 2026-11-12
8
+
9
+ - Mesmo pacote publicado no npm e GitHub Packages, com versão e bytes iguais.
10
+ - Instalação via npx nos dois registries, com credenciais isoladas por destino.
11
+ - Guias de pré-requisitos para Windows, macOS e Linux, incluindo Node/npm.
12
+ - README, wiki e notas de release com os dois caminhos de instalação.
13
+ - Diagnóstico de mapeamentos antigos de registry sem apagar configurações.
14
+
15
+ ## 0.0.9 — 2026-11-12
16
+
17
+ - Links e configurações humanos preservados na instalação dos agentes.
18
+ - Colisões com recursos nativos próprios não são sobrescritas pelo kit.
19
+ - Sincronização mantém recursos humanos, inclusive com `--force`.
20
+ - Caminhos preservados são informados sem registrar propriedade indevida.
21
+ - Matriz OSS verifica agentes preexistentes e sincronização independente.
22
+ - Inventário e fluxo documental exigem leitura e complementos sem substituição.
23
+ - Exercícios documentais cobrem projetos reais e um projeto vazio.
24
+
7
25
  ## 0.0.8 — 2026-11-11
8
26
 
9
27
  - Preservação de arquivos humanos que parecem apontamentos gerados.
package/README.en.md CHANGED
@@ -18,12 +18,21 @@ See the [supported clients][clients].
18
18
 
19
19
  ## Start in your project
20
20
 
21
- With Node.js 18+ and npm, run this in your project. No login is required:
21
+ Use Node.js 24+ with npm. The [prerequisites guide][prerequisites] explains
22
+ installation on Windows, macOS and Linux.
23
+
24
+ From your project folder, install through **npm**, without logging in:
22
25
 
23
26
  ```console
24
27
  npx @pathbit/agentdevkit init
25
28
  ```
26
29
 
30
+ Or use **GitHub Packages**, after [authenticating with GitHub][github-install]:
31
+
32
+ ```console
33
+ npx --registry=https://npm.pkg.github.com @pathbit/agentdevkit init
34
+ ```
35
+
27
36
  Choose your coding agents when prompted, or pass `--agents codex,claude`.
28
37
  The project saves your selection; use `agents` to view or change it later.
29
38
  Without interaction or a saved choice, the default is `all` clients.
@@ -32,9 +41,9 @@ Then open the project in your coding agent and ask:
32
41
 
33
42
  > Read AGENTS.md and use the proximos-passos skill to guide my next steps.
34
43
 
35
- See [installation](docs/guides/installation.md) for Windows, missing Node, previews
36
- and updates. Install and update through the [public npm package][packages]; the
37
- [v0.0.8 release][release] retains artifacts and checksums for verification.
44
+ See [installation](docs/guides/installation.md) for runtime preparation, previews
45
+ and updates. Both [package registries][packages] provide the same version;
46
+ the [v0.0.10 release][release] retains artifacts and checksums for verification.
38
47
  No global installation is required.
39
48
  The CLI supports `pt`, `en` and `es`; it saves your selection per project.
40
49
 
@@ -42,8 +51,10 @@ The CLI supports `pt`, `en` and `es`; it saves your selection per project.
42
51
 
43
52
  | I want to… | Read |
44
53
  | --- | --- |
54
+ | Prepare Node.js and npm | [Prerequisites][prerequisites] |
45
55
  | Understand the kit | [Documentation wiki](docs/README.md) |
46
56
  | Plan or resume a project | [Workflow](docs/guides/workflow.md) |
57
+ | Improve existing documentation | [Inventory and additions](docs/guides/documentation.md) |
47
58
  | Create a skill or command | [Resources](docs/guides/resources.md) |
48
59
  | Install tools and verify work | [Tools and tests][tests] |
49
60
  | Look up options or fix an error | [CLI][cli] · [Troubleshooting][help] |
@@ -78,7 +89,7 @@ forms. See [how to participate](docs/maintainers/community.md).
78
89
  agent to read `AGENTS.md`.
79
90
 
80
91
  [clients]: .pbai4devs/COMPATIBILIDADE.md
81
- [release]: https://github.com/pathbit/AgentDevKit/releases/tag/v0.0.8
92
+ [release]: https://github.com/pathbit/AgentDevKit/releases/tag/v0.0.10
82
93
  [npm-package]: https://www.npmjs.com/package/@pathbit/agentdevkit
83
94
  [npm-badge]: https://img.shields.io/npm/v/%40pathbit%2Fagentdevkit
84
95
  [license-badge]: https://img.shields.io/badge/license-MIT-blue
@@ -87,3 +98,5 @@ agent to read `AGENTS.md`.
87
98
  [help]: docs/guides/troubleshooting.md
88
99
  [issues]: https://github.com/pathbit/AgentDevKit/issues/new/choose
89
100
  [packages]: docs/maintainers/packages.md
101
+ [prerequisites]: docs/guides/prerequisites.md
102
+ [github-install]: docs/guides/installation.md#github-packages
package/README.es.md CHANGED
@@ -18,12 +18,21 @@ son locales y no se versionan.
18
18
 
19
19
  ## Empezar en tu proyecto
20
20
 
21
- Con Node.js 18+ y npm, ejecuta en tu proyecto, sin iniciar sesión:
21
+ Usa Node.js 24+ con npm. La [guía de requisitos][prerequisites] explica
22
+ la instalación en Windows, macOS y Linux.
23
+
24
+ Desde la carpeta de tu proyecto, instala mediante **npm**, sin iniciar sesión:
22
25
 
23
26
  ```console
24
27
  npx @pathbit/agentdevkit init
25
28
  ```
26
29
 
30
+ O usa **GitHub Packages**, después de [autenticarte en GitHub][github-install]:
31
+
32
+ ```console
33
+ npx --registry=https://npm.pkg.github.com @pathbit/agentdevkit init
34
+ ```
35
+
27
36
  Elige tus agentes en la pregunta inicial o usa `--agents codex,claude`.
28
37
  La selección se guarda en el proyecto; `agents` permite consultarla o cambiarla.
29
38
  Sin interacción ni selección anterior, el valor predeterminado es `all`.
@@ -32,10 +41,10 @@ Después, abre el proyecto en tu agente y pide:
32
41
 
33
42
  > Lee AGENTS.md y usa la skill proximos-passos para orientar mi trabajo.
34
43
 
35
- La [guía de instalación](docs/guides/installation.md) incluye Windows, Node ausente,
36
- simulación y actualización. Instala y actualiza mediante el
37
- [paquete npm público][packages];
38
- la [release v0.0.8][release] conserva artefactos y checksums para verificarlos.
44
+ La [guía de instalación](docs/guides/installation.md) incluye preparación del
45
+ runtime, simulación y actualización. Los dos [registros][packages] ofrecen
46
+ la misma versión;
47
+ la [release v0.0.10][release] conserva artefactos y checksums para verificarlos.
39
48
  No requiere instalación global.
40
49
  La CLI guarda el idioma `pt`, `en` o `es` por proyecto.
41
50
 
@@ -43,8 +52,10 @@ La CLI guarda el idioma `pt`, `en` o `es` por proyecto.
43
52
 
44
53
  | Quiero… | Leer |
45
54
  | --- | --- |
55
+ | Preparar Node.js y npm | [Requisitos][prerequisites] |
46
56
  | Entender el kit | [Wiki](docs/README.md) |
47
57
  | Planificar o retomar un proyecto | [Flujo](docs/guides/workflow.md) |
58
+ | Mejorar documentación existente | [Inventario y complementos](docs/guides/documentation.md) |
48
59
  | Crear una skill o comando | [Recursos](docs/guides/resources.md) |
49
60
  | Instalar herramientas y verificar | [Herramientas y pruebas][tests] |
50
61
  | Consultar opciones o resolver un error | [CLI][cli] · [Soluciones][help] |
@@ -80,7 +91,7 @@ formularios. Consulta [cómo participar](docs/maintainers/community.md).
80
91
  al agente que lea `AGENTS.md`.
81
92
 
82
93
  [clients]: .pbai4devs/COMPATIBILIDADE.md
83
- [release]: https://github.com/pathbit/AgentDevKit/releases/tag/v0.0.8
94
+ [release]: https://github.com/pathbit/AgentDevKit/releases/tag/v0.0.10
84
95
  [npm-package]: https://www.npmjs.com/package/@pathbit/agentdevkit
85
96
  [npm-badge]: https://img.shields.io/npm/v/%40pathbit%2Fagentdevkit
86
97
  [license-badge]: https://img.shields.io/badge/license-MIT-blue
@@ -89,3 +100,5 @@ al agente que lea `AGENTS.md`.
89
100
  [help]: docs/guides/troubleshooting.md
90
101
  [issues]: https://github.com/pathbit/AgentDevKit/issues/new/choose
91
102
  [packages]: docs/maintainers/packages.md
103
+ [prerequisites]: docs/guides/prerequisites.md
104
+ [github-install]: docs/guides/installation.md#github-packages
package/README.md CHANGED
@@ -16,12 +16,22 @@ fica em `src/`, os testes em `tests/` e os recursos compartilhados em
16
16
 
17
17
  ## Começar em um projeto
18
18
 
19
- Com Node.js 18+ e npm, execute na pasta do seu projeto, sem login:
19
+ Prepare [Node.js 24+ e npm](https://github.com/pathbit/AgentDevKit/blob/master/docs/guides/prerequisites.md) no Windows, macOS ou
20
+ Linux. Na pasta do seu projeto, instale pelo **npm público**, sem login:
20
21
 
21
22
  ```console
22
23
  npx @pathbit/agentdevkit init
23
24
  ```
24
25
 
26
+ Ou use **GitHub Packages**, após [autenticar no GitHub][github-install]:
27
+
28
+ ```console
29
+ npx --registry=https://npm.pkg.github.com @pathbit/agentdevkit init
30
+ ```
31
+
32
+ Os dois registries oferecem o mesmo pacote. O GitHub exige token para download,
33
+ mesmo sendo público; o npm continua sendo a opção sem login.
34
+
25
35
  Escolha os agentes na pergunta inicial ou informe `--agents codex,claude`.
26
36
  A escolha fica salva no projeto; `agents` permite consultá-la ou alterá-la.
27
37
  Sem interação ou escolha anterior, o padrão é `all` (todos os clientes).
@@ -32,7 +42,7 @@ Depois, abra o projeto no seu agente e peça:
32
42
 
33
43
  Windows, instalação sem Node, simulação e atualização estão no
34
44
  [guia de instalação](https://github.com/pathbit/AgentDevKit/blob/master/docs/guides/installation.md). A distribuição usa a
35
- versão publicada no [npm público][packages] e na [release v0.0.8][release],
45
+ versão publicada no [npm e GitHub Packages][packages] e na [release v0.0.10][release],
36
46
  sem instalação global. Instalação e atualização usam o pacote do registro;
37
47
  os arquivos da release servem para conferir os artefatos publicados.
38
48
  O idioma da CLI pode ser `pt`, `en` ou `es`.
@@ -41,8 +51,10 @@ O idioma da CLI pode ser `pt`, `en` ou `es`.
41
51
 
42
52
  | Quero… | Ler |
43
53
  | --- | --- |
54
+ | Preparar Node/npm e instalar o kit | [Pré-requisitos](https://github.com/pathbit/AgentDevKit/blob/master/docs/guides/prerequisites.md) · [Instalação](https://github.com/pathbit/AgentDevKit/blob/master/docs/guides/installation.md) |
44
55
  | Entender e começar | [Wiki](https://github.com/pathbit/AgentDevKit/blob/master/docs/README.md) |
45
56
  | Planejar ou retomar um projeto | [Fluxo de trabalho](https://github.com/pathbit/AgentDevKit/blob/master/docs/guides/workflow.md) |
57
+ | Evoluir documentos existentes | [Inventário e complementos](https://github.com/pathbit/AgentDevKit/blob/master/docs/guides/documentation.md) |
46
58
  | Criar uma skill ou comando | [Recursos](https://github.com/pathbit/AgentDevKit/blob/master/docs/guides/resources.md) |
47
59
  | Instalar ferramentas e comprovar uma entrega | [Ferramentas e testes][tests] |
48
60
  | Consultar opções ou resolver um erro | [CLI][cli] · [Soluções][help] |
@@ -89,7 +101,8 @@ ao seu agente para ler `AGENTS.md`.
89
101
  [help]: https://github.com/pathbit/AgentDevKit/blob/master/docs/guides/troubleshooting.md
90
102
  [issues]: https://github.com/pathbit/AgentDevKit/issues/new/choose
91
103
  [packages]: https://github.com/pathbit/AgentDevKit/blob/master/docs/maintainers/packages.md
92
- [release]: https://github.com/pathbit/AgentDevKit/releases/tag/v0.0.8
104
+ [release]: https://github.com/pathbit/AgentDevKit/releases/tag/v0.0.10
93
105
  [npm-package]: https://www.npmjs.com/package/@pathbit/agentdevkit
94
106
  [npm-badge]: https://img.shields.io/npm/v/%40pathbit%2Fagentdevkit
95
107
  [license-badge]: https://img.shields.io/badge/license-MIT-blue
108
+ [github-install]: https://github.com/pathbit/AgentDevKit/blob/master/docs/guides/installation.md#github-packages
package/docs/README.md CHANGED
@@ -22,15 +22,17 @@ pode trocar de agente sem manter várias cópias das mesmas instruções.
22
22
 
23
23
  | Objetivo | Caminho |
24
24
  | --- | --- |
25
- | Primeiro uso | [Instalar][install] → [seguir o fluxo][flow] |
25
+ | Preparar o computador | [Node/npm no Windows, macOS e Linux](guides/prerequisites.md) |
26
+ | Primeiro uso | [Instalar via npm ou GitHub Packages][install] → [seguir o fluxo][flow] |
26
27
  | Projeto em andamento | [Instalar com simulação][install] → [retomar][flow] |
28
+ | Evoluir documentação existente | [Inventariar e complementar](guides/documentation.md) |
27
29
  | Personalizar agentes | [Recursos][resources] → [compatibilidade][clients] |
28
30
  | Executar ou verificar algo | [CLI](guides/cli.md) → [ferramentas e testes][tests] |
29
31
  | Corrigir uma dificuldade | [Soluções e recuperação](guides/troubleshooting.md) |
30
32
  | Contribuir com o kit | [Contribuir][contrib] → [design](product/design.md) |
31
33
  | Desenvolver e experimentar | [Guia rápido][development] → [exemplos][examples] |
32
34
  | Preparar uma versão | [Manutenção e releases](maintainers/maintenance.md) |
33
- | Publicar ou instalar o pacote npm | [npm público](maintainers/packages.md) |
35
+ | Publicar o pacote nos dois registries | [npm e GitHub Packages](maintainers/packages.md) |
34
36
  | Relatar um bug ou propor melhoria | [Participar](maintainers/community.md) |
35
37
 
36
38
  ## Entenda os termos
@@ -4,9 +4,11 @@ description: Guias de instalação, uso e verificação do AgentDevKit.
4
4
 
5
5
  # Guias de uso
6
6
 
7
- - [Instalação](installation.md)
7
+ - [Pré-requisitos: Node/npm no Windows, macOS e Linux](prerequisites.md)
8
+ - [Instalação: npm e GitHub Packages](installation.md)
8
9
  - [Comandos da CLI](cli.md)
9
10
  - [Fluxo de trabalho](workflow.md)
11
+ - [Evoluir documentação existente](documentation.md)
10
12
  - [Recursos dos agentes](resources.md)
11
13
  - [Ferramentas e testes](tools-and-testing.md)
12
14
  - [Solução de problemas](troubleshooting.md)
@@ -10,6 +10,9 @@ Execute o pacote do npm público por `npx`, sem login:
10
10
  npx @pathbit/agentdevkit --help
11
11
  ```
12
12
 
13
+ Para GitHub Packages, autentique conforme a [instalação](installation.md#github-packages)
14
+ e use o prefixo `npx --registry=https://npm.pkg.github.com` nos mesmos comandos.
15
+
13
16
  Nas tabelas, `agentdevkit` representa esse executável. No checkout das fontes,
14
17
  use `npm run cli -- <comando>` ou `node bin/agentdevkit.mjs`.
15
18
  Esse código não é copiado ao projeto
@@ -77,6 +80,8 @@ do separador. `--help` e `--version` do kit não exigem um projeto instalado.
77
80
  As respostas incluem `ok`, `command`, `version`, `language`, `target` e
78
81
  `next`. Conforme a operação, há seleção, plano, conflitos, backup e erros.
79
82
  Leia os campos estruturados, não dependa da tradução da mensagem.
83
+ `preserved` lista caminhos nativos humanos mantidos pelo projeto, com o motivo.
84
+ Eles não integram os arquivos gerenciados e não são substituídos por `--force`.
80
85
 
81
86
  | Código | Significado |
82
87
  | --- | --- |