@pathbit/agentdevkit 0.0.5 → 0.0.7

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.
@@ -33,10 +33,13 @@ Somente `SKILL.md`, `AGENT.md`, `COMMAND.md` e `RULE.md` em suas pastas
33
33
  têm apontamentos nas ferramentas. A origem é agrupada; os destinos usam o
34
34
  layout registrado. Veja a [compatibilidade](COMPATIBILIDADE.md) dos clientes.
35
35
  Recursos auxiliares e guias ficam exclusivamente em `.pbai4devs`.
36
+ A licença do kit fica em `LICENSE` dentro deste hub após `init` ou `update`.
37
+ Ela vem do pacote e não substitui a licença do projeto consumidor.
36
38
  Os testes das automações ficam em `scripts/<nome>/tests/`; seus resultados são
37
39
  ignorados em `.agent-tests/`.
38
40
  O `.gitignore` desta pasta controla sua árvore. As saídas nos clientes são
39
- protegidas por regras locais geradas dos [modelos](templates/gitignore/TEMPLATE.md).
41
+ protegidas por regras locais geradas dos
42
+ [modelos](templates/gitignore/TEMPLATE.md).
40
43
  Um `.gitignore` não consegue ignorar irmãos com `../`; o gerador usa o local
41
44
  correto do Git e preserva configurações humanas.
42
45
  Os modelos acompanham cada fase. Após implementar, use `atualizar-documentacao`
@@ -114,6 +114,52 @@ function rootProbes(root, roots) {
114
114
  return roots.filter(path => { const item = localStat(join(root, path)); return !item || item.isDirectory(); }).map(path => `${path}/.agentdevkit-ignore-probe`);
115
115
  }
116
116
 
117
+ function artifactPolicy(templateFile) {
118
+ const adjacent = join(dirname(templateFile), 'agents.ignore');
119
+ const source = checkedLocalPath(localStat(adjacent) ? adjacent : fileURLToPath(new URL('../../templates/gitignore/agents.ignore', import.meta.url)));
120
+ const content = readFileSync(source, 'utf8');
121
+ const section = content.split(/^## Resultados e arquivos temporarios\r?$/m)[1]?.split(/^## /m)[0];
122
+ const patterns = section?.split(/\r?\n/).map(line => line.trim()).filter(line => line && !line.startsWith('#'));
123
+ if (!patterns?.length || patterns.some(pattern => !pattern.startsWith('**/') || /[!\\\x00-\x1f]/.test(pattern) || pattern.split('/').includes('..'))) throw new Error('Secao de artefatos invalida em agents.ignore.');
124
+ return patterns;
125
+ }
126
+
127
+ function artifactProbes(root, patterns) {
128
+ const probes = new Set();
129
+ for (const pattern of patterns) {
130
+ const stem = pattern.slice(3).replace(/\/$/, '').replace(/\[([^\]]+)\]/g, (_match, letters) => letters[0]).replace(/\?/g, 'x');
131
+ const names = stem.includes('*') ? ['', '-mcp', '-report', '-cache', '-agentdevkit'].map(suffix => stem.replace(/\*/g, suffix)) : [stem];
132
+ for (const name of names) for (const variant of new Set([name, name.toLowerCase()])) {
133
+ const leaves = stem.includes('*') ? ['.agentdevkit-artifact-probe', '.cache/.agentdevkit-artifact-probe'] : ['.agentdevkit-artifact-probe'];
134
+ for (const leaf of leaves) for (const path of [`${variant}/${leaf}`, `.agentdevkit-ignore-probes/${variant}/${leaf}`]) {
135
+ let parent = root, safe = true;
136
+ for (const part of path.split('/').slice(0, -1)) {
137
+ parent = join(parent, part); const item = localStat(parent);
138
+ if (item && !item.isDirectory()) { safe = false; break; }
139
+ }
140
+ if (safe) probes.add(path);
141
+ }
142
+ }
143
+ }
144
+ return [...probes];
145
+ }
146
+
147
+ function localIgnoreSource(location, source) {
148
+ const path = resolve(location.top, source);
149
+ if (path === location.exclude) return true;
150
+ const inside = relative(location.top, path);
151
+ return basename(path) === '.gitignore' && !isAbsolute(inside) && inside !== '..' && !inside.startsWith(`..${sep}`);
152
+ }
153
+
154
+ function ignoreMatches(location, probes) {
155
+ const paths = probes.map(path => location.prefix ? `${location.prefix}/${path}` : path);
156
+ const result = gitCommand(location.top, ['-c', 'core.excludesFile=', 'check-ignore', '--verbose', '--no-index', '--stdin', '-z'], paths.join('\0') + '\0');
157
+ if (result.error || ![0, 1].includes(result.status)) throw new Error(result.error?.message || result.stderr || 'Falha ao conferir exclusoes Git.');
158
+ const values = result.stdout.split('\0'), matches = new Map();
159
+ for (let index = 0; index + 3 < values.length; index += 4) matches.set(values[index + 3], { source: values[index], line: Number(values[index + 1]), pattern: values[index + 2] });
160
+ return { paths, matches };
161
+ }
162
+
117
163
  function localRoot(value) {
118
164
  const missing = []; let parent = resolve(value);
119
165
  while (!localStat(parent)) { missing.unshift(parent.slice(dirname(parent).length + 1)); parent = dirname(parent); }
@@ -128,6 +174,7 @@ export function planLocalIgnore(root, { outputs = [], templateRoot } = {}) {
128
174
  const localTemplate = join(root, '.pbai4devs/templates/gitignore/local.ignore');
129
175
  const templateFile = checkedLocalPath(templateRoot ? join(templateRoot, '.pbai4devs/templates/gitignore/local.ignore') : localStat(localTemplate) ? localTemplate : fileURLToPath(new URL('../../templates/gitignore/local.ignore', import.meta.url)));
130
176
  const template = readFileSync(templateFile, 'utf8');
177
+ const artifacts = artifactPolicy(templateFile);
131
178
  if (template.split('{{OUTPUTS}}').length !== 2) throw new Error('local.ignore exige um unico {{OUTPUTS}}.');
132
179
  if (template.split('{{ROOTS}}').length > 2) throw new Error('local.ignore permite um unico {{ROOTS}}.');
133
180
  const localPolicy = join(templateRoot || root, '.pbai4devs/templates/clients/ADAPTERS.json');
@@ -152,16 +199,18 @@ export function planLocalIgnore(root, { outputs = [], templateRoot } = {}) {
152
199
  }
153
200
  const id = createHash('sha256').update(root).digest('hex').slice(0, 16);
154
201
  const first = `# BEGIN AGENTDEVKIT LOCAL ${id}`, last = `# END AGENTDEVKIT LOCAL ${id}`;
155
- const fixed = template.replace('{{ROOTS}}', roots.map(path => `/${path}/`).join('\n')).replace('{{OUTPUTS}}', paths.filter(path => !roots.some(root => path === root || path.startsWith(root + '/'))).map(path => `/${escapePattern(path)}`).join('\n'));
202
+ const fixed = template.replace('{{ROOTS}}', roots.map(path => `/${path}/`).join('\n')).replace('{{OUTPUTS}}', paths.filter(path => !roots.some(root => path === root || path.startsWith(root + '/'))).map(path => `/${escapePattern(path)}`).join('\n'))
203
+ + '\n# Resultados e arquivos temporarios\n' + artifacts.map(pattern => `/${pattern}`).join('\n') + '\n';
156
204
  const body = fixed.split(/\r?\n/).map(line => location?.prefix && line.startsWith('/') ? `/${escapePattern(location.prefix)}${line}` : line).join('\n');
157
205
  const target = location?.exclude ?? checkedLocalPath(join(root, '.gitignore'));
158
206
  const before = localRead(target), after = localBlock(before, first, last, body);
159
207
  const edits = before === after ? [] : [{ path: target, before, after }];
160
208
  const probes = [...paths, ...rootProbes(root, roots)];
209
+ const artifactPaths = artifactProbes(root, artifacts);
161
210
  const wanted = new Set(probes.map(path => location?.prefix ? `${location.prefix}/${path}` : path));
162
211
  if (location && !before?.includes(first) && !localRead(join(root, '.gitignore'))?.includes(first)) {
163
- const ignored = gitCommand(location.top, ['check-ignore', '--no-index', '--stdin', '-z'], [...wanted].join('\0') + '\0');
164
- if (!ignored.error && [0, 1].includes(ignored.status) && ignored.stdout.split('\0').filter(Boolean).length === wanted.size) edits.length = 0;
212
+ const ignored = ignoreMatches(location, [...probes, ...artifactPaths]);
213
+ if (ignored.paths.every(path => { const match = ignored.matches.get(path); return match && !match.pattern.startsWith('!') && localIgnoreSource(location, match.source); })) edits.length = 0;
165
214
  }
166
215
  if (location) {
167
216
  const fallback = checkedLocalPath(join(root, '.gitignore'));
@@ -169,7 +218,7 @@ export function planLocalIgnore(root, { outputs = [], templateRoot } = {}) {
169
218
  if (old !== null && old !== next) edits.push({ path: fallback, before: old, after: next });
170
219
  }
171
220
  const tracked = location ? gitCommand(location.top, ['ls-files', '-z']).stdout.split('\0').filter(path => wanted.has(path)).map(path => location.prefix ? path.slice(location.prefix.length + 1) : path) : [];
172
- return { root, status: location ? 'git' : 'fallback', location, paths, roots, edits, trackedOutputs: tracked, first, last };
221
+ return { root, status: location ? 'git' : 'fallback', location, paths, roots, artifactProbes: artifactPaths, edits, trackedOutputs: tracked, first, last };
173
222
  }
174
223
 
175
224
  export function checkLocalIgnore(plan, { replacedBlocks = [] } = {}) {
@@ -185,19 +234,16 @@ export function checkLocalIgnore(plan, { replacedBlocks = [] } = {}) {
185
234
  if (createHash('sha256').update(block).digest('hex') !== item.sha256) throw new Error('Bloco de ignore mudou antes da verificacao.');
186
235
  return { ...item, path };
187
236
  });
188
- if (plan.location && plan.paths.length) {
189
- const probes = [...plan.paths, ...rootProbes(plan.root, plan.roots || [])];
190
- const relativePaths = probes.map(path => plan.location.prefix ? `${plan.location.prefix}/${path}` : path);
191
- const result = gitCommand(plan.location.top, ['check-ignore', '--verbose', '--no-index', '--stdin', '-z'], relativePaths.join('\0') + '\0');
192
- if (result.error || ![0, 1].includes(result.status)) throw new Error(result.error?.message || result.stderr || 'Falha ao conferir exclusoes Git.');
193
- const values = result.stdout.split('\0'), matches = new Map();
194
- for (let index = 0; index + 3 < values.length; index += 4) matches.set(values[index + 3], { source: values[index], line: Number(values[index + 1]), pattern: values[index + 2] });
237
+ if (plan.location && (plan.paths.length || plan.artifactProbes?.length)) {
238
+ const probes = [...plan.paths, ...rootProbes(plan.root, plan.roots || []), ...(plan.artifactProbes || [])];
239
+ const { paths: relativePaths, matches } = ignoreMatches(plan.location, probes);
195
240
  for (let index = 0; index < relativePaths.length; index++) {
196
241
  const match = matches.get(relativePaths[index]);
197
242
  const negative = match?.pattern.startsWith('!');
198
- const humanOverride = negative && /(?:^|[\\/])\.gitignore$/.test(match.source);
243
+ const local = match && localIgnoreSource(plan.location, match.source);
244
+ const humanOverride = negative && local && /(?:^|[\\/])\.gitignore$/.test(match.source);
199
245
  const replaced = negative && replacements.some(item => item.path === canonicalExisting(resolve(plan.location.top, match.source)) && match.line >= item.firstLine && match.line <= item.lastLine);
200
- if (!replaced && ((!plan.edits.length && (!match || negative)) || humanOverride)) missing.push(probes[index]);
246
+ if (!replaced && ((!plan.edits.length && (!match || negative || !local)) || humanOverride)) missing.push(probes[index]);
201
247
  }
202
248
  }
203
249
  return { ok: plan.edits.length === 0 && missing.length === 0 && plan.trackedOutputs.length === 0, status: plan.status, missing, trackedOutputs: plan.trackedOutputs, changed: plan.edits.length };
@@ -212,6 +258,8 @@ export function assertLocalIgnoreUnchanged(plan) {
212
258
 
213
259
  export function applyLocalIgnore(plan) {
214
260
  assertLocalIgnoreUnchanged(plan);
261
+ const before = checkLocalIgnore(plan);
262
+ if (before.missing.length) throw new Error(`Regras humanas reabrem derivados locais: ${before.missing.join(', ')}`);
215
263
  const written = [];
216
264
  try {
217
265
  for (const edit of plan.edits) {
@@ -129,6 +129,72 @@ test('raízes dedicadas são locais, enquanto configurações de GitHub e VS Cod
129
129
  assert.ok(tracked.includes('.github/settings.json')); assert.ok(tracked.includes('.vscode/settings.json'));
130
130
  });
131
131
 
132
+ test('artefatos vêm da política compartilhada e não entram na lista de outputs', t => {
133
+ const root = fixture(t); git(root, ['init', '-q']);
134
+ put(root, '.agent-tests/human.txt', 'evidência humana'); git(root, ['add', '-f', '.agent-tests/human.txt']);
135
+ const plan = planLocalIgnore(root, { outputs: ['AGENTS.md'] });
136
+ assert.ok(plan.artifactProbes.some(path => path.startsWith('.agent-tests/')));
137
+ assert.ok(plan.artifactProbes.some(path => path.startsWith('.agentdevkit-ignore-probes/')));
138
+ assert.ok(plan.paths.every(path => !plan.artifactProbes.includes(path)));
139
+ assert.ok(!plan.trackedOutputs.includes('.agent-tests/human.txt'));
140
+ applyLocalIgnore(plan);
141
+ for (const path of ['.agent-tests/x', 'TMP/x', 'nested/TeMp/x', '.PlAyWrIgHt-McP/x', 'nested/playwright-report/x', 'TEST-RESULTS/x', 'nested/TestResults/x', 'BLOB-REPORT/x']) {
142
+ assert.equal(git(root, ['check-ignore', '--no-index', path]).trim(), path);
143
+ }
144
+ assert.equal(git(root, ['ls-files', '.agent-tests/human.txt']).trim(), '.agent-tests/human.txt');
145
+ assert.equal(readFileSync(join(root, '.agent-tests/human.txt'), 'utf8'), 'evidência humana');
146
+ assert.equal(checkLocalIgnore(planLocalIgnore(root, { outputs: ['AGENTS.md'] })).ok, true);
147
+ });
148
+
149
+ test('regras de artefatos são limitadas ao projeto dentro do monorepo', t => {
150
+ const root = fixture(t); git(root, ['init', '-q']);
151
+ const child = join(root, 'apps', 'my project'); mkdirSync(child, { recursive: true });
152
+ applyLocalIgnore(planLocalIgnore(child, { outputs: ['AGENTS.md'] }));
153
+ for (const path of ['apps/my project/.agent-tests/x', 'apps/my project/nested/.Playwright-MCP/x', 'apps/my project/sub/test-results/x']) {
154
+ assert.equal(git(root, ['check-ignore', '--no-index', path]).trim(), path);
155
+ }
156
+ for (const path of ['apps/other/.agent-tests/x', 'apps/other/tmp/x', '.agent-tests/x']) {
157
+ const result = spawnSync('git', ['-C', root, 'check-ignore', '--no-index', path], { encoding: 'utf8' });
158
+ assert.equal(result.status, 1, path + result.stderr);
159
+ }
160
+ });
161
+
162
+ test('ignore global não mascara a ausência das regras locais de artefatos', t => {
163
+ const root = fixture(t), outside = fixture(t); git(root, ['init', '-q']);
164
+ put(outside, 'global.ignore', '*\n');
165
+ git(root, ['config', 'core.excludesFile', join(outside, 'global.ignore')]);
166
+ const plan = planLocalIgnore(root, { outputs: ['AGENTS.md'] });
167
+ assert.equal(plan.edits.length, 1);
168
+ const missing = checkLocalIgnore({ ...plan, edits: [] });
169
+ assert.ok(missing.missing.some(path => path.startsWith('.agent-tests/')));
170
+ applyLocalIgnore(plan);
171
+ assert.equal(checkLocalIgnore(planLocalIgnore(root, { outputs: ['AGENTS.md'] })).ok, true);
172
+ });
173
+
174
+ test('negação humana de artefatos bloqueia aplicação sem modificar regras ou índice', t => {
175
+ const root = fixture(t); git(root, ['init', '-q']);
176
+ const human = '!/.agent-tests/**\n'; put(root, '.gitignore', human);
177
+ const exclude = readFileSync(join(root, '.git/info/exclude'));
178
+ const plan = planLocalIgnore(root, { outputs: ['AGENTS.md'] });
179
+ assert.ok(checkLocalIgnore(plan).missing.some(path => path.startsWith('.agent-tests/')));
180
+ assert.throws(() => applyLocalIgnore(plan), /Regras humanas/);
181
+ assert.deepEqual(readFileSync(join(root, '.git/info/exclude')), exclude);
182
+ assert.equal(readFileSync(join(root, '.gitignore'), 'utf8'), human);
183
+ });
184
+
185
+ test('probes reconhecem exceções humanas para nomes reais de Playwright', async t => {
186
+ for (const path of ['.playwright-mcp', 'playwright-report', 'playwright/.cache']) await t.test(path, subtest => {
187
+ const root = fixture(subtest); git(root, ['init', '-q']);
188
+ const prefixes = path.split('/').map((_part, index, parts) => '!/' + parts.slice(0, index + 1).join('/') + '/');
189
+ const human = [...prefixes, `!/${path}/**`, ''].join('\n'); put(root, '.gitignore', human);
190
+ const before = readFileSync(join(root, '.git/info/exclude'));
191
+ const plan = planLocalIgnore(root, { outputs: ['AGENTS.md'] });
192
+ assert.ok(checkLocalIgnore(plan).missing.some(probe => probe.startsWith(path + '/')));
193
+ assert.throws(() => applyLocalIgnore(plan), /Regras humanas/);
194
+ assert.deepEqual(readFileSync(join(root, '.git/info/exclude')), before);
195
+ });
196
+ });
197
+
132
198
  test('milhares de caminhos usam stdin e não ampliam metadata de área já ignorada', t => {
133
199
  const root = fixture(t); git(root, ['init', '-q']); put(root, '.gitignore', '/ignored/\n');
134
200
  const before = readFileSync(join(root, '.git/info/exclude'), 'utf8');
package/CHANGELOG.md CHANGED
@@ -4,6 +4,20 @@ description: Alterações verificáveis por versão do AgentDevKit.
4
4
 
5
5
  # Changelog
6
6
 
7
+ ## 0.0.7 — 2026-11-11
8
+
9
+ - Artefatos de testes e pastas temporárias protegidos em projetos existentes.
10
+ - Regras locais respeitam o escopo do projeto e as exceções do usuário.
11
+ - Teste opt-in em clones reais, com commits fixos e comparação de arquivos.
12
+ - Relato explícito de bloqueios por links simbólicos preexistentes.
13
+
14
+ ## 0.0.6 — 2026-11-11
15
+
16
+ - Metadados npm com autoria PathBit, palavras-chave e licença MIT.
17
+ - README público sem frontmatter, com links absolutos para o GitHub.
18
+ - Licença canônica instalada no hub, preservando a licença do consumidor.
19
+ - Verificação de versão estável, consumo anônimo e atualização do router.
20
+
7
21
  ## 0.0.5 — 2026-11-11
8
22
 
9
23
  - Documentação organizada em guias, produto e manutenção, com índices próprios.
package/README.en.md CHANGED
@@ -7,6 +7,8 @@ language: en
7
7
 
8
8
  [Português](README.md) · [Español](README.es.md) · [npm package][npm-package]
9
9
 
10
+ [![npm][npm-badge]][npm-package] [![MIT][license-badge]](LICENSE)
11
+
10
12
  Organize work with coding agents, from planning to verification. Keep skills,
11
13
  rules, commands and agent profiles in `.pbai4devs`; the kit generates the
12
14
  references each client can discover. Code lives in `src/`, product tests in
@@ -32,7 +34,7 @@ Then open the project in your coding agent and ask:
32
34
 
33
35
  See [installation](docs/guides/installation.md) for Windows, missing Node, previews
34
36
  and updates. Install and update through the [public npm package][packages]; the
35
- [v0.0.5 release][release] retains artifacts and checksums for verification.
37
+ [v0.0.7 release][release] retains artifacts and checksums for verification.
36
38
  No global installation is required.
37
39
  The CLI supports `pt`, `en` and `es`; it saves your selection per project.
38
40
 
@@ -60,7 +62,14 @@ tools are installed separately. Product documents follow your planning
60
62
  decisions. Existing projects retain their code and decisions. Discovery
61
63
  depends on the client; references alone do not prove a skill was loaded.
62
64
 
63
- [Changelog](CHANGELOG.md) · [Roadmap](docs/product/roadmap.md) · [MIT license](LICENSE)
65
+ ## License and authorship
66
+
67
+ Maintained by [PathBit](https://www.pathbit.com.br),
68
+ under the [MIT license](LICENSE).
69
+ Installation includes the kit license in `.pbai4devs/LICENSE` and preserves
70
+ your project's license and files.
71
+
72
+ [Changelog](CHANGELOG.md) · [Roadmap](docs/product/roadmap.md)
64
73
 
65
74
  Found a bug or have an idea? [Open an issue][issues] using the contribution
66
75
  forms. See [how to participate](docs/maintainers/community.md).
@@ -69,8 +78,10 @@ forms. See [how to participate](docs/maintainers/community.md).
69
78
  agent to read `AGENTS.md`.
70
79
 
71
80
  [clients]: .pbai4devs/COMPATIBILIDADE.md
72
- [release]: https://github.com/pathbit/AgentDevKit/releases/tag/v0.0.5
81
+ [release]: https://github.com/pathbit/AgentDevKit/releases/tag/v0.0.7
73
82
  [npm-package]: https://www.npmjs.com/package/@pathbit/agentdevkit
83
+ [npm-badge]: https://img.shields.io/npm/v/%40pathbit%2Fagentdevkit
84
+ [license-badge]: https://img.shields.io/badge/license-MIT-blue
74
85
  [tests]: docs/guides/tools-and-testing.md
75
86
  [cli]: docs/guides/cli.md
76
87
  [help]: docs/guides/troubleshooting.md
package/README.es.md CHANGED
@@ -7,6 +7,8 @@ language: es
7
7
 
8
8
  [Português](README.md) · [English](README.en.md) · [Paquete npm][npm-package]
9
9
 
10
+ [![npm][npm-badge]][npm-package] [![MIT][license-badge]](LICENSE)
11
+
10
12
  Organiza el trabajo con agentes de código, desde la planificación hasta la
11
13
  verificación. Mantén skills, reglas, comandos y perfiles en `.pbai4devs`;
12
14
  el kit genera las referencias de cada [cliente compatible][clients].
@@ -33,7 +35,7 @@ Después, abre el proyecto en tu agente y pide:
33
35
  La [guía de instalación](docs/guides/installation.md) incluye Windows, Node ausente,
34
36
  simulación y actualización. Instala y actualiza mediante el
35
37
  [paquete npm público][packages];
36
- la [release v0.0.5][release] conserva artefactos y checksums para verificarlos.
38
+ la [release v0.0.7][release] conserva artefactos y checksums para verificarlos.
37
39
  No requiere instalación global.
38
40
  La CLI guarda el idioma `pt`, `en` o `es` por proyecto.
39
41
 
@@ -62,7 +64,14 @@ las herramientas se instalan por separado. Los documentos de producto siguen
62
64
  las decisiones de planificación. Los proyectos existentes conservan su código.
63
65
  Una referencia no demuestra que un cliente haya cargado la skill.
64
66
 
65
- [Changelog](CHANGELOG.md) · [Roadmap](docs/product/roadmap.md) · [Licencia MIT](LICENSE)
67
+ ## Licencia y autoría
68
+
69
+ Mantenido por [PathBit](https://www.pathbit.com.br),
70
+ con licencia [MIT](LICENSE).
71
+ La instalación incluye la licencia del kit en `.pbai4devs/LICENSE` y conserva
72
+ la licencia y los archivos propios de tu proyecto.
73
+
74
+ [Changelog](CHANGELOG.md) · [Roadmap](docs/product/roadmap.md)
66
75
 
67
76
  ¿Encontraste un problema o tienes una idea? [Abre una issue][issues] con los
68
77
  formularios. Consulta [cómo participar](docs/maintainers/community.md).
@@ -71,8 +80,10 @@ formularios. Consulta [cómo participar](docs/maintainers/community.md).
71
80
  al agente que lea `AGENTS.md`.
72
81
 
73
82
  [clients]: .pbai4devs/COMPATIBILIDADE.md
74
- [release]: https://github.com/pathbit/AgentDevKit/releases/tag/v0.0.5
83
+ [release]: https://github.com/pathbit/AgentDevKit/releases/tag/v0.0.7
75
84
  [npm-package]: https://www.npmjs.com/package/@pathbit/agentdevkit
85
+ [npm-badge]: https://img.shields.io/npm/v/%40pathbit%2Fagentdevkit
86
+ [license-badge]: https://img.shields.io/badge/license-MIT-blue
76
87
  [tests]: docs/guides/tools-and-testing.md
77
88
  [cli]: docs/guides/cli.md
78
89
  [help]: docs/guides/troubleshooting.md
package/README.md CHANGED
@@ -1,18 +1,15 @@
1
- ---
2
- description: Instruções e fluxo de trabalho para agentes de código.
3
- language: pt
4
- ---
5
-
6
1
  # AgentDevKit
7
2
 
8
- [English](README.en.md) · [Español](README.es.md) · [Pacote npm][npm-package]
3
+ [English](https://github.com/pathbit/AgentDevKit/blob/master/README.en.md) · [Español](https://github.com/pathbit/AgentDevKit/blob/master/README.es.md) · [Pacote npm][npm-package]
4
+
5
+ [![npm][npm-badge]][npm-package] [![MIT][license-badge]](https://github.com/pathbit/AgentDevKit/blob/master/LICENSE)
9
6
 
10
7
  Uma forma de organizar o trabalho com agentes de código, do planejamento à
11
8
  verificação. Você mantém skills, regras, comandos e perfis em `.pbai4devs`;
12
9
  o kit gera os apontamentos que cada cliente sabe encontrar.
13
10
 
14
11
  Use com Codex, Claude, Cursor, Copilot, OpenCode e outros
15
- [clientes compatíveis](.pbai4devs/COMPATIBILIDADE.md). Há uma origem;
12
+ [clientes compatíveis](https://github.com/pathbit/AgentDevKit/blob/master/.pbai4devs/COMPATIBILIDADE.md). Há uma origem;
16
13
  cada cliente conserva seu formato de descoberta. No repositório, o código
17
14
  fica em `src/`, os testes em `tests/` e os recursos compartilhados em
18
15
  `.pbai4devs/`. Pastas nativas, entradas e preferências são geradas localmente.
@@ -34,8 +31,8 @@ Depois, abra o projeto no seu agente e peça:
34
31
  > Leia AGENTS.md e use a skill proximos-passos para orientar meu trabalho.
35
32
 
36
33
  Windows, instalação sem Node, simulação e atualização estão no
37
- [guia de instalação](docs/guides/installation.md). A distribuição usa a
38
- versão publicada no [npm público][packages] e na [release v0.0.5][release],
34
+ [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.7][release],
39
36
  sem instalação global. Instalação e atualização usam o pacote do registro;
40
37
  os arquivos da release servem para conferir os artefatos publicados.
41
38
  O idioma da CLI pode ser `pt`, `en` ou `es`.
@@ -44,12 +41,12 @@ O idioma da CLI pode ser `pt`, `en` ou `es`.
44
41
 
45
42
  | Quero… | Ler |
46
43
  | --- | --- |
47
- | Entender e começar | [Wiki](docs/README.md) |
48
- | Planejar ou retomar um projeto | [Fluxo de trabalho](docs/guides/workflow.md) |
49
- | Criar uma skill ou comando | [Recursos](docs/guides/resources.md) |
44
+ | Entender e começar | [Wiki](https://github.com/pathbit/AgentDevKit/blob/master/docs/README.md) |
45
+ | Planejar ou retomar um projeto | [Fluxo de trabalho](https://github.com/pathbit/AgentDevKit/blob/master/docs/guides/workflow.md) |
46
+ | Criar uma skill ou comando | [Recursos](https://github.com/pathbit/AgentDevKit/blob/master/docs/guides/resources.md) |
50
47
  | Instalar ferramentas e comprovar uma entrega | [Ferramentas e testes][tests] |
51
48
  | Consultar opções ou resolver um erro | [CLI][cli] · [Soluções][help] |
52
- | Melhorar o próprio kit | [Contribuir](CONTRIBUTING.md) |
49
+ | Melhorar o próprio kit | [Contribuir](https://github.com/pathbit/AgentDevKit/blob/master/CONTRIBUTING.md) |
53
50
  | Experimentar os cenários | [Exemplos](https://github.com/pathbit/AgentDevKit/tree/master/examples) |
54
51
 
55
52
  ## Desenvolver este repositório
@@ -65,25 +62,34 @@ npm run examples
65
62
 
66
63
  Os exemplos aparecem em `examples/generated/`. Para testar todos os cenários,
67
64
  use `npm run test:examples`; para verificar o pacote, `npm run verify`.
68
- O [guia de desenvolvimento](docs/maintainers/development.md) explica a árvore
65
+ O [guia de desenvolvimento](https://github.com/pathbit/AgentDevKit/blob/master/docs/maintainers/development.md) explica a árvore
69
66
  e os comandos.
70
67
 
71
68
  Instalar o kit prepara instruções. As ferramentas são instaladas por uma ação
72
69
  separada; PRD, design e specs surgem quando você inicia o planejamento.
73
70
  Projetos existentes preservam seu código e suas decisões.
74
71
 
75
- [Changelog](CHANGELOG.md) · [Roadmap](docs/product/roadmap.md) · [Licença MIT](LICENSE)
72
+ ## Licença e autoria
73
+
74
+ Mantido pela [PathBit](https://www.pathbit.com.br),
75
+ sob a licença [MIT](https://github.com/pathbit/AgentDevKit/blob/master/LICENSE).
76
+ A instalação inclui a licença do kit em `.pbai4devs/LICENSE` e preserva
77
+ a licença e os arquivos próprios do seu projeto.
78
+
79
+ [Changelog](https://github.com/pathbit/AgentDevKit/blob/master/CHANGELOG.md) · [Roadmap](https://github.com/pathbit/AgentDevKit/blob/master/docs/product/roadmap.md)
76
80
 
77
81
  Encontrou um problema ou tem uma ideia? [Abra uma issue][issues] pelos
78
- [formulários de contribuição](docs/maintainers/community.md).
82
+ [formulários de contribuição](https://github.com/pathbit/AgentDevKit/blob/master/docs/maintainers/community.md).
79
83
 
80
- **[ Próximo passo ]** Siga a [instalação](docs/guides/installation.md) e peça
84
+ **[ Próximo passo ]** Siga a [instalação](https://github.com/pathbit/AgentDevKit/blob/master/docs/guides/installation.md) e peça
81
85
  ao seu agente para ler `AGENTS.md`.
82
86
 
83
- [tests]: docs/guides/tools-and-testing.md
84
- [cli]: docs/guides/cli.md
85
- [help]: docs/guides/troubleshooting.md
87
+ [tests]: https://github.com/pathbit/AgentDevKit/blob/master/docs/guides/tools-and-testing.md
88
+ [cli]: https://github.com/pathbit/AgentDevKit/blob/master/docs/guides/cli.md
89
+ [help]: https://github.com/pathbit/AgentDevKit/blob/master/docs/guides/troubleshooting.md
86
90
  [issues]: https://github.com/pathbit/AgentDevKit/issues/new/choose
87
- [packages]: docs/maintainers/packages.md
88
- [release]: https://github.com/pathbit/AgentDevKit/releases/tag/v0.0.5
91
+ [packages]: https://github.com/pathbit/AgentDevKit/blob/master/docs/maintainers/packages.md
92
+ [release]: https://github.com/pathbit/AgentDevKit/releases/tag/v0.0.7
89
93
  [npm-package]: https://www.npmjs.com/package/@pathbit/agentdevkit
94
+ [npm-badge]: https://img.shields.io/npm/v/%40pathbit%2Fagentdevkit
95
+ [license-badge]: https://img.shields.io/badge/license-MIT-blue
@@ -44,10 +44,13 @@ Sem escolha explícita ou salva, `all` mantém todos os clientes compatíveis.
44
44
  | Índices, manifesto e seleção pessoal | Derivados locais ignorados. |
45
45
  | Código, documentos e configurações humanas | Preservados. |
46
46
  | Downloads e resultados de testes | Locais e ignorados. |
47
+ | `.pbai4devs/LICENSE` | Licença MIT do kit, copiada do pacote. |
47
48
 
48
49
  O gerador completo permanece no pacote npm. Ele não copia `bin/`, `src/`,
49
50
  `scripts/release/` ou os testes do produto para o projeto atendido.
50
51
  Instalar o kit não inicia uma aplicação nem instala todas as ferramentas.
52
+ A licença existente na raiz do projeto não é substituída. A cópia do hub
53
+ identifica a licença dos recursos do AgentDevKit, sem redefinir a do projeto.
51
54
 
52
55
  ## Git e migração
53
56
 
@@ -57,6 +60,11 @@ workflows, formulários de issues ou configurações humanas em `.github`.
57
60
  Sem Git, uma proteção no `.gitignore` da raiz evita incluir os derivados
58
61
  quando o repositório for iniciado.
59
62
 
63
+ O bloco local também protege `.agent-tests`, `tmp`, `temp`, `.playwright*`
64
+ e relatórios de testes, inclusive com letras maiúsculas e em subpastas.
65
+ O `.gitignore` existente e seus arquivos rastreados são preservados;
66
+ uma exceção humana que conflite com essa proteção é informada como conflito.
67
+
60
68
  Arquivos já rastreados exigem migração do índice: apenas saídas identificadas
61
69
  do kit podem deixar de ser rastreadas, preservando seus bytes no disco.
62
70
  Revise o plano e os conflitos em um projeto existente; use `--dry-run` antes
@@ -69,10 +77,19 @@ continua válida; `agents` consulta e `agents codex,claude` altera a seleção.
69
77
  `agents all` habilita todos. As pastas compartilhadas permanecem quando
70
78
  necessárias para outro cliente, como `.agents` para Codex e Antigravity.
71
79
 
80
+ Confira a simulação antes de atualizar um projeto existente. Arquivos
81
+ gerenciados alterados geram conflito; use `--force` somente após revisar o
82
+ backup e o conteúdo que será substituído. Preserve os dados locais, as
83
+ configurações próprias e os commits do projeto.
84
+
85
+ Links simbólicos em caminhos usados pela instalação podem bloquear a operação.
86
+ O kit informa o caminho e não converte nem remove o link automaticamente.
87
+ Use a simulação para identificar esse caso antes de aplicar.
88
+
72
89
  O [fluxo de trabalho](workflow.md) orienta a próxima etapa do projeto.
73
90
  Se houver erro, consulte [solução de problemas](troubleshooting.md).
74
91
 
75
- [Wiki](../README.md) · [Release 0.0.5][release]
92
+ [Wiki](../README.md) · [Spec v0.0.7][spec]
76
93
 
77
94
  [bootstrap]: ../../.pbai4devs/scripts/preparar-ferramentas/BOOTSTRAP.md
78
- [release]: https://github.com/pathbit/AgentDevKit/releases/tag/v0.0.5
95
+ [spec]: ../specs/v0.0.7/SPEC.md
@@ -8,6 +8,13 @@ O AgentDevKit é um único pacote: [`@pathbit/agentdevkit`][package]. Ele conté
8
8
  a CLI e os recursos compartilhados; a instalação prepara os apontamentos dos
9
9
  agentes escolhidos no projeto.
10
10
 
11
+ Os metadados identificam PathBit como autor, palavras-chave do kit e licença
12
+ MIT. O README público é gerado sem frontmatter e com links absolutos do GitHub;
13
+ a fonte versionada conserva o YAML. O `LICENSE` canônico acompanha o pacote e
14
+ é instalado em `.pbai4devs/LICENSE`, sem alterar a licença do consumidor.
15
+ Ferramentas de terceiros baixadas à parte mantêm suas próprias licenças e
16
+ não integram o TGZ do AgentDevKit.
17
+
11
18
  ## Instalar no projeto
12
19
 
13
20
  Com Node.js 18+ e npm, execute na pasta do projeto. Não é necessário login:
@@ -16,7 +23,7 @@ Com Node.js 18+ e npm, execute na pasta do projeto. Não é necessário login:
16
23
  npx @pathbit/agentdevkit init
17
24
  ```
18
25
 
19
- Para fixar a versão, use `npx @pathbit/agentdevkit@0.0.5 init`.
26
+ Para repetir uma instalação, fixe a versão desejada após o nome do pacote.
20
27
 
21
28
  Acrescente `--agents codex,claude` para selecionar clientes, `--dry-run` para
22
29
  simular ou use `update`, `doctor` e `sync --check` no lugar de `init`.
@@ -57,13 +64,17 @@ existir; a primeira publicação pode usar o secret `NPMJS_TOKEN`.
57
64
  Para publicar somente o pacote de uma tag que já tem artefato aprovado:
58
65
 
59
66
  ```console
60
- gh workflow run release.yml --ref master -f tag=v0.0.5 -F package_only=true
67
+ gh workflow run release.yml --ref master -f tag=v0.0.7 -F package_only=true
61
68
  ```
62
69
 
63
70
  Se o artefato expirou, reexecute o CI original da tag antes da publicação.
64
71
  Depois do envio, o job usa um ambiente sem credenciais e cache novo para
65
72
  executar `--version`, `init`, `doctor` e `sync --check` pelo nome e versão
66
73
  publicados. Assim, a verificação comprova o acesso de um usuário comum.
74
+ Confirme também que `latest` aponta para a versão estável e que o tarball é
75
+ baixável; metadados visíveis sozinhos não comprovam uma instalação funcional.
76
+ Se o registro ainda não disponibilizar o pacote, aguarde a verificação sem
77
+ republicar automaticamente a mesma versão.
67
78
 
68
79
  As versões antigas no [GitHub Packages][legacy] permanecem disponíveis;
69
80
  o canal de instalação padrão é o npm público.
@@ -39,6 +39,11 @@ as automações de release ou os testes exclusivos do produto. Os layouts dos
39
39
  clientes vêm da [configuração declarativa][clients]. Os arquivos nativos são
40
40
  pequenos apontamentos para o hub, sem symlinks.
41
41
 
42
+ O `LICENSE` da raiz do pacote é a fonte canônica da licença MIT do kit.
43
+ `init` e `update` copiam seus bytes para `.pbai4devs/LICENSE`; a licença da raiz
44
+ do projeto consumidor permanece intacta. Alterações na licença gerenciada
45
+ seguem a mesma proteção de conflitos e backup dos demais arquivos do hub.
46
+
42
47
  A escolha salva determina as derivações. Atualizações e sincronizações não
43
48
  reativam clientes desmarcados. `all` preserva a intenção de usar todos; estados
44
49
  antigos sem escolha explícita mantêm esse comportamento.
@@ -74,6 +79,11 @@ O CI separa a suíte completa dos testes de portabilidade. A publicação usa um
74
79
  artifact aprovado do mesmo commit e verifica versão, origem e checksum.
75
80
  Não há novo empacotamento entre teste e publicação.
76
81
 
82
+ Antes de empacotar, o estágio de distribuição deriva o README público da
83
+ fonte: remove o frontmatter YAML e resolve links locais para URLs absolutas
84
+ do GitHub. O README versionado mantém seu YAML e seus links de trabalho.
85
+ O pacote identifica PathBit como autor, inclui palavras-chave e declara MIT.
86
+
77
87
  O npm público recebe o mesmo tarball da release, como `@pathbit/agentdevkit`.
78
88
  O workflow prioriza o secret `NPMJS_TOKEN` do repositório, recebido pela
79
89
  variável interna `NPM_TOKEN`; sem token, usa OIDC. Confirma a integridade da
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  description: Requisitos da distribuição portátil AgentDevKit.
3
3
  status: aprovado
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  ---
6
6
 
7
7
  # PRD do AgentDevKit
@@ -37,6 +37,9 @@ extraído do projeto de origem como produto independente.
37
37
  | FR-015 | Publicar no npm público, instalável via npx sem autenticação. |
38
38
  | FR-016 | Organizar código e testes em `src/` e `tests/`, na raiz. |
39
39
  | FR-017 | Gerar exemplos isolados e acessíveis por comandos documentados. |
40
+ | FR-018 | Publicar autoria PathBit, palavras-chave e licença MIT no npm. |
41
+ | FR-019 | Exibir README legível no npm sem alterar o Markdown fonte. |
42
+ | FR-020 | Levar a licença do kit ao hub sem alterar a licença do projeto. |
40
43
 
41
44
  Execuções repetidas devem ser idempotentes; a CLI oferece simulação e JSON.
42
45
  As instruções permanecem concisas, com detalhes opcionais em referências.
@@ -54,6 +57,8 @@ A entrega exige testes de projeto vazio e existente, preservação de arquivos,
54
57
  atualização, idiomas, catálogos e distribuição sem artefatos locais.
55
58
  Os aceites da distribuição ficam na [spec inicial](../specs/v0.0.1/SPEC.md);
56
59
  a [spec de seleção](../specs/v0.0.2/SPEC.md) detalha a instalação por agente.
60
+ A [spec v0.0.6](../specs/v0.0.6/SPEC.md) trata a apresentação pública, a licença
61
+ distribuída e a atualização verificada do projeto de origem.
57
62
 
58
63
  ## Autorização
59
64
 
@@ -61,4 +66,5 @@ Escopo autorizado pela solicitação explícita de criação do AgentDevKit.
61
66
  Este estado registra requisitos aceitos; testes e publicação têm validação
62
67
  própria e não são considerados concluídos por esta aprovação.
63
68
 
64
- [Wiki](../README.md) · [Design](design.md) · [Fluxo de uso](../guides/workflow.md)
69
+ [Wiki](../README.md) · [Design](design.md) ·
70
+ [Fluxo de uso](../guides/workflow.md)
@@ -13,11 +13,13 @@ status: vigente
13
13
  | Release v0.0.1 | Aceites e revisão | Pacote versionado e changelog. |
14
14
  | Seleção de agentes v0.0.2 | CLI e adaptadores | [Spec][selection]. |
15
15
  | Fontes e geração local v0.0.3 | Seleção e distribuição | [Spec][source]. |
16
- | Pacote npm no GitHub Packages | Artefato aprovado da release | [Spec][packages]. |
16
+ | Pacote no GitHub Packages | Artefato aprovado | [Spec][packages]. |
17
17
  | Estrutura e exemplos v0.0.4 | CLI, distribuição e gerador | [Spec][layout]. |
18
18
  | Instalação pelo registro v0.0.5 | Pacote publicado | [Spec][registry]. |
19
+ | Apresentação e licença v0.0.6 | Distribuição e atualização | [Spec][public]. |
20
+ | Compatibilidade real v0.0.7 | Testes em clones existentes | [Spec][oss]. |
19
21
 
20
- A primeira entrega segue a [spec v0.0.1](../specs/v0.0.1/SPEC.md) e está disponível
22
+ A primeira entrega segue a [spec v0.0.1](../specs/v0.0.1/SPEC.md), disponível
21
23
  na [release v0.0.1][release]. Os detalhes de mudanças estão no
22
24
  [changelog](../../CHANGELOG.md), e o processo de publicação em
23
25
  [manutenção](../maintainers/maintenance.md).
@@ -34,3 +36,5 @@ comportamento existente, sem alterar a versão de uma release já publicada.
34
36
  [packages]: ../specs/github-packages/SPEC.md
35
37
  [layout]: ../specs/v0.0.4/SPEC.md
36
38
  [registry]: ../specs/v0.0.5/SPEC.md
39
+ [public]: ../specs/v0.0.6/SPEC.md
40
+ [oss]: ../specs/v0.0.7/SPEC.md
@@ -10,6 +10,8 @@ description: Incrementos verificáveis do AgentDevKit.
10
10
  - [GitHub Packages](github-packages/SPEC.md): pacote npm instalável via npx.
11
11
  - [v0.0.4](v0.0.4/SPEC.md): estrutura padrão e exemplos na raiz.
12
12
  - [v0.0.5](v0.0.5/SPEC.md): instalação pelo registro em todos os fluxos.
13
+ - [v0.0.6](v0.0.6/SPEC.md): apresentação pública, licença e atualização segura.
14
+ - [v0.0.7](v0.0.7/SPEC.md): projetos reais e proteção local de artefatos.
13
15
 
14
16
  Cada incremento vincula requisitos, critérios, testes e evidências locais.
15
17
 
@@ -0,0 +1,10 @@
1
+ ---
2
+ description: Apresentação pública e licença distribuída do AgentDevKit.
3
+ ---
4
+
5
+ # Versão 0.0.6
6
+
7
+ A [spec](SPEC.md) define metadados, README e licença do pacote, consumo
8
+ anônimo da versão estável e atualização segura do projeto de origem.
9
+
10
+ [Specs](../README.md)
@@ -0,0 +1,77 @@
1
+ ---
2
+ description: Apresentação pública, licença e atualização verificada do kit.
3
+ status: aprovado
4
+ version: 0.0.6
5
+ ---
6
+
7
+ # Apresentação pública e licença
8
+
9
+ ## Objetivo e autorização
10
+
11
+ Publicar uma versão estável do AgentDevKit com identificação clara no npm,
12
+ README legível e licença incluída no hub instalado. Depois da publicação,
13
+ atualizar o `talquee-ai-router` preservando seus arquivos e dados.
14
+
15
+ Escopo autorizado pela solicitação do usuário. A aprovação permite executar
16
+ o trabalho; testes, publicação e atualização exigem suas próprias provas.
17
+ Dependências: [PRD](../../product/prd.md), [design](../../product/design.md) e
18
+ [instalação pelo registro](../v0.0.5/SPEC.md).
19
+
20
+ ## Contrato
21
+
22
+ - Declarar autor PathBit, palavras-chave relevantes e licença MIT no pacote.
23
+ - Derivar o README publicado da fonte sem alterar o arquivo versionado:
24
+ remover YAML e converter links locais para URLs absolutas do GitHub.
25
+ - Usar o `LICENSE` da raiz do pacote como fonte de `.pbai4devs/LICENSE`.
26
+ Preservar a licença da raiz do consumidor e proteger conflitos no hub.
27
+ - Manter Node 18+ no launcher e Node 24+ no núcleo; isolar credenciais e cache
28
+ nas provas de consumo público, sem instalar ferramentas implicitamente.
29
+ - Confirmar `latest`, integridade e download antes das provas anônimas.
30
+ - Simular a atualização do router, conferir propriedade e preservar dados,
31
+ configurações, ferramentas locais e commits humanos existentes.
32
+
33
+ Não criar documentos de produto no router, redefinir sua licença nem alterar
34
+ versões publicadas. A entrega não promete ausência total de bugs.
35
+
36
+ ## Critérios de aceite
37
+
38
+ | ID | Resultado observável |
39
+ | --- | --- |
40
+ | AC-001 | Pacote identifica PathBit, palavras-chave e licença MIT. |
41
+ | AC-002 | README do TGZ não tem YAML; links locais tornam-se absolutos. |
42
+ | AC-003 | Hub recebe a licença canônica sem alterar a do consumidor. |
43
+ | AC-004 | Runtime e consumo público mantêm os contratos de ambiente. |
44
+ | AC-005 | Versão estável em `latest` instala e opera sem autenticação. |
45
+ | AC-006 | Router atualizado preserva arquivos, dados e commits anteriores. |
46
+
47
+ ## Plano de verificação
48
+
49
+ Resultados ficam em `.agent-tests/public-package/`, separados desta spec.
50
+ O código dos testes é versionado. Cada prova registra comando, versão,
51
+ pré-requisitos, assertiva e caminho da evidência no relatório de revisão.
52
+
53
+ - **AC-001:** inspecionar o `package.json` do TGZ exato e os metadados do npm;
54
+ comparar autoria, palavras-chave, MIT e versão com a fonte aprovada.
55
+ - **AC-002:** testar empacotamento e extrair o TGZ; verificar a primeira linha,
56
+ links de arquivos/imagens e preservação dos bytes do README fonte.
57
+ - **AC-003:** executar testes de instalação e distribuição em projetos novos
58
+ e existentes; comparar as licenças, testar conflito, backup e diagnóstico.
59
+ - **AC-004:** executar testes do launcher, publicação e distribuição; provar
60
+ compatibilidade de runtime, cache isolado e ausência de tokens no consumidor.
61
+ - **AC-005:** publicar o artefato aprovado; consultar `latest` e baixar;
62
+ executar `--version`, `init`, `doctor` e `sync --check` em destino e cache
63
+ novos.
64
+ - **AC-006:** salvar hashes e estado Git do router, revisar `--dry-run`, aplicar
65
+ a versão fixada e repetir diagnóstico/sincronização; comparar arquivos
66
+ próprios, oito recibos de ferramentas e histórico com o estado anterior.
67
+
68
+ A revisão independente confere o relatório e os achados antes da conclusão.
69
+ Esta mudança exige terminal e registro npm; não altera interface web/desktop.
70
+
71
+ ## Documentação afetada
72
+
73
+ Atualizar README público, guias de instalação/publicação, PRD, design, roadmap,
74
+ índice de specs, changelog e descrição da licença no hub. Revisar somente os
75
+ trechos do README do router afetados pela atualização, preservando seu contexto.
76
+
77
+ [Specs](../README.md) · [Pacote npm](../../maintainers/packages.md)
@@ -0,0 +1,10 @@
1
+ ---
2
+ description: Compatibilidade do pacote com projetos open source existentes.
3
+ ---
4
+
5
+ # Versão 0.0.7
6
+
7
+ A [spec](SPEC.md) define testes em clones reais e a correção das exclusões
8
+ locais de artefatos, preservando os arquivos e as decisões dos projetos.
9
+
10
+ [Specs](../README.md)
@@ -0,0 +1,59 @@
1
+ ---
2
+ description: Testes em projetos reais e proteção de artefatos locais.
3
+ status: aprovado
4
+ version: 0.0.7
5
+ ---
6
+
7
+ # Compatibilidade com projetos existentes
8
+
9
+ ## Objetivo e autorização
10
+
11
+ Atender ao pedido de testar o pacote publicado em projetos open source com
12
+ conteúdo real, usando clones em `tmp/` ignorado. Corrigir a falta de proteção
13
+ de artefatos revelada em projetos que não tinham as regras do AgentDevKit.
14
+
15
+ O trabalho usa o [PRD](../../product/prd.md),
16
+ o [design](../../product/design.md) e a
17
+ [distribuição pública](../v0.0.6/SPEC.md). Não altera as aplicações clonadas.
18
+
19
+ ## Contrato
20
+
21
+ - Clonar commits fixos de Express, Zod e Chi; preservar os projetos originais.
22
+ - Comparar bytes, tipos, permissões, links, HEAD e alterações staged.
23
+ - Verificar instalação, atualização, repetição, skill própria e conflitos.
24
+ - Proteger artefatos no ignore local sem reescrever o `.gitignore` do usuário
25
+ nem desindexar arquivos humanos. Respeitar projetos irmãos e exceções.
26
+ - Manter as recusas de links simbólicos. Um bloqueio seguro não comprova
27
+ instalação bem-sucedida; relatá-lo e verificar ausência de alterações.
28
+ - Versionar o teste; guardar clones, logs e resultados somente em `tmp/`.
29
+ - Publicar correções como nova versão estável; repetir a prova pública.
30
+
31
+ ## Critérios de aceite
32
+
33
+ | ID | Resultado observável |
34
+ | --- | --- |
35
+ | AC-001 | Matriz real registra resultado e preservação por projeto. |
36
+ | AC-002 | Artefatos são ignorados sem alterar fontes ou projetos irmãos. |
37
+ | AC-003 | Regressões e revisão independente aprovam a correção. |
38
+ | AC-004 | Pacote estável publicado repete os resultados e atualiza o router. |
39
+
40
+ ## Verificação
41
+
42
+ - **AC-001:** executar o runner contra o npm, incluindo caso staged e bloqueios;
43
+ registrar commits, versão e hashes. Não confundir com testes das aplicações.
44
+ - **AC-002:** testar Git, instalação sem Git, projeto aninhado, caixa mista,
45
+ exceções humanas e artefatos já rastreados. Não forçar sobrescritas.
46
+ - **AC-003:** executar testes do pacote, infraestrutura, lint e distribuição.
47
+ Comparar testes nativos do Express antes e depois, sem modificar suas fontes.
48
+ - **AC-004:** conferir release, `latest`, checksum e instalação anônima; repetir
49
+ matriz com o pacote publicado e atualizar o router com backup e diagnóstico.
50
+
51
+ Evidências dos clones ficam em `tmp/oss-compatibility/`; o relatório de revisão
52
+ em `.agent-tests/oss-compatibility/` referencia cópias dessas provas.
53
+ Zod e Chi não terão testes nativos sem os runtimes/gerenciadores exigidos.
54
+ Não concluir compatibilidade universal a partir desta matriz.
55
+
56
+ ## Documentação afetada
57
+
58
+ Atualizar instalação, testes, changelog, índices e roadmap. Documentar a
59
+ proteção de artefatos locais e os limites de configurações preexistentes.
package/package.json CHANGED
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "name": "@pathbit/agentdevkit",
3
- "version": "0.0.5",
4
- "description": "PathBit AgentDevKit: specs, skills and workflows for coding agents.",
3
+ "version": "0.0.7",
4
+ "description": "Shared skills, specifications and workflows for AI coding agents.",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "publishConfig": {
8
8
  "registry": "https://registry.npmjs.org",
9
- "access": "public"
9
+ "access": "public",
10
+ "tag": "latest"
10
11
  },
11
12
  "repository": {
12
13
  "type": "git",
@@ -49,6 +50,21 @@
49
50
  "pack:release": "node scripts/release/assets.mjs",
50
51
  "ci:full": "node scripts/release/pipeline.mjs full",
51
52
  "ci:portable": "node scripts/release/pipeline.mjs portable",
52
- "ci:smoke": "node scripts/release/pipeline.mjs smoke"
53
- }
53
+ "ci:smoke": "node scripts/release/pipeline.mjs smoke",
54
+ "test:oss": "node tests/oss-compatibility.mjs"
55
+ },
56
+ "author": {
57
+ "name": "PathBit",
58
+ "url": "https://www.pathbit.com.br"
59
+ },
60
+ "keywords": [
61
+ "ai",
62
+ "coding-agents",
63
+ "agent-skills",
64
+ "spec-driven-development",
65
+ "developer-tools",
66
+ "codex",
67
+ "claude-code",
68
+ "github-copilot"
69
+ ]
54
70
  }
package/src/install.mjs CHANGED
@@ -52,7 +52,7 @@ export function safePath(root, path) {
52
52
  function resourceAllowed(path, directory = false) {
53
53
  const parts = path.split('/');
54
54
  const folders = new Set(['agents', 'commands', 'external-skills', 'rules', 'scripts', 'skills', 'templates', 'tools', 'estado']);
55
- const files = new Set(['README.md', 'INSTRUCTIONS.md', 'COMPATIBILIDADE.md', '.gitignore']);
55
+ const files = new Set(['README.md', 'INSTRUCTIONS.md', 'COMPATIBILIDADE.md', 'LICENSE', '.gitignore']);
56
56
  if (!folders.has(parts[0]) && !(parts.length === 1 && files.has(parts[0]))) return false;
57
57
  if (parts[0] === 'estado') return directory && parts.length === 1 || path === 'estado/README.md';
58
58
  if (isGeneratedOutput(path, directory) || parts.some(part => ignored.has(part)) || parts[0] === 'adapters' || path === 'estado/agentdevkit.json' || path === '.npmignore') return false;
@@ -178,6 +178,12 @@ export function planInstallation({ target, language = 'pt', mode = 'init', force
178
178
  try {
179
179
  const existing = copyResources(join(target, '.pbai4devs'), join(stage, '.pbai4devs'));
180
180
  const bundled = mode === 'init' || mode === 'update' ? copyResources(join(packageRoot, '.pbai4devs'), join(stage, '.pbai4devs')) : [];
181
+ if (mode === 'init' || mode === 'update') {
182
+ const license = read(packageRoot, 'LICENSE');
183
+ if (!license?.length) fail('E_LICENSE', 'The AgentDevKit package is missing its LICENSE.');
184
+ write(stage, '.pbai4devs/LICENSE', license);
185
+ bundled.push('LICENSE');
186
+ }
181
187
  const supplied = new Set(bundled);
182
188
  const internal = new Set(['catalog.json', 'skills.json', 'agents.json', 'rules.json', 'espelhos.conf', '.gitignore', 'estado/README.md']);
183
189
  if (bundled.length) for (const path of Object.keys(previous?.files || {})) {