@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.
- package/.pbai4devs/README.md +4 -1
- package/.pbai4devs/scripts/lib/gitignore.mjs +61 -13
- package/.pbai4devs/scripts/sincronizar-agentes/tests/LOCAL_IGNORE.mjs +66 -0
- package/CHANGELOG.md +14 -0
- package/README.en.md +14 -3
- package/README.es.md +14 -3
- package/README.md +28 -22
- package/docs/guides/installation.md +19 -2
- package/docs/maintainers/packages.md +13 -2
- package/docs/product/design.md +10 -0
- package/docs/product/prd.md +8 -2
- package/docs/product/roadmap.md +6 -2
- package/docs/specs/README.md +2 -0
- package/docs/specs/v0.0.6/README.md +10 -0
- package/docs/specs/v0.0.6/SPEC.md +77 -0
- package/docs/specs/v0.0.7/README.md +10 -0
- package/docs/specs/v0.0.7/SPEC.md +59 -0
- package/package.json +21 -5
- package/src/install.mjs +7 -1
package/.pbai4devs/README.md
CHANGED
|
@@ -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
|
|
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 =
|
|
164
|
-
if (
|
|
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
|
|
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
|
|
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.
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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.
|
|
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) · [
|
|
92
|
+
[Wiki](../README.md) · [Spec v0.0.7][spec]
|
|
76
93
|
|
|
77
94
|
[bootstrap]: ../../.pbai4devs/scripts/preparar-ferramentas/BOOTSTRAP.md
|
|
78
|
-
[
|
|
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
|
|
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.
|
|
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.
|
package/docs/product/design.md
CHANGED
|
@@ -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
|
package/docs/product/prd.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: Requisitos da distribuição portátil AgentDevKit.
|
|
3
3
|
status: aprovado
|
|
4
|
-
version: 0.0.
|
|
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) ·
|
|
69
|
+
[Wiki](../README.md) · [Design](design.md) ·
|
|
70
|
+
[Fluxo de uso](../guides/workflow.md)
|
package/docs/product/roadmap.md
CHANGED
|
@@ -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
|
|
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)
|
|
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
|
package/docs/specs/README.md
CHANGED
|
@@ -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.
|
|
4
|
-
"description": "
|
|
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 || {})) {
|