@pathbit/agentdevkit 0.0.17 → 0.0.19

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.
@@ -375,19 +375,36 @@ function ignoreFixture(t) {
375
375
  return context;
376
376
  }
377
377
 
378
- test('fontes novas permanecem elegíveis e derivados locais ficam fora do índice', t => {
378
+ test('fontes permanecem elegíveis e pastas de clientes aceitam opt-in explícito', t => {
379
379
  const { root, file } = ignoreFixture(t);
380
380
  const outputs = ['.github/skills/generated/SKILL.md', '.vscode/.gitignore', '.github/.gitignore'];
381
- applyLocalIgnore(planLocalIgnore(root, { outputs }));
382
- const sources = ['src/new.mjs', 'bin/new.mjs', 'tests/new.test.mjs', 'scripts/release/new.mjs', '.github/workflows/own.yml', '.github/ISSUE_TEMPLATE/bug.yml', '.github/skills/human/SKILL.md', '.vscode/settings.json'];
381
+ const sources = ['src/new.mjs', 'bin/new.mjs', 'tests/new.test.mjs', 'scripts/release/new.mjs'];
382
+ const clients = ['.github/workflows/own.yml', '.github/ISSUE_TEMPLATE/bug.yml', '.github/skills/human/SKILL.md', '.vscode/settings.json'];
383
383
  const generated = [...outputs, '.pbai4devs/catalog.json', '.pbai4devs/skills.json', '.pbai4devs/espelhos.conf', '.pbai4devs/state/agentdevkit.json'];
384
- for (const path of [...sources, ...generated]) file(path, 'fixture\n');
384
+ for (const path of [...sources, ...clients, ...generated.filter(path => !path.endsWith('/.gitignore'))]) file(path, 'fixture\n');
385
+ file('.github/auth.json', 'credencial local\n');
386
+ file('.vscode/logs/session.log', 'artefato local\n');
387
+ assert.equal(git(root, ['add', '--', clients[0], sources[0]]).status, 0);
388
+ const index = git(root, ['ls-files', '--stage', '-z']).stdout;
389
+ applyLocalIgnore(planLocalIgnore(root, { outputs }));
385
390
  assert.deepEqual(ignoredPaths(root, sources), []);
391
+ assert.deepEqual(new Set(ignoredPaths(root, clients)), new Set(clients));
386
392
  assert.deepEqual(new Set(ignoredPaths(root, generated)), new Set(generated));
393
+ assert.equal(git(root, ['ls-files', '--stage', '-z']).stdout, index);
394
+ for (const path of clients) assert.equal(readFileSync(join(root, path), 'utf8'), 'fixture\n', path);
395
+
396
+ const exceptions = '!/.github/\n!/.vscode/\n';
397
+ file('.gitignore', exceptions);
398
+ applyLocalIgnore(planLocalIgnore(root, { outputs }));
399
+ assert.equal(readFileSync(join(root, '.gitignore'), 'utf8'), exceptions);
400
+ assert.equal(git(root, ['ls-files', '--stage', '-z']).stdout, index);
401
+ assert.deepEqual(ignoredPaths(root, clients), []);
402
+ const privateFiles = ['.github/auth.json', '.vscode/logs/session.log'];
403
+ assert.deepEqual(new Set(ignoredPaths(root, privateFiles)), new Set(privateFiles));
387
404
  assert.equal(git(root, ['add', '--all']).status, 0);
388
405
  const tracked = git(root, ['ls-files', '-z']).stdout.split('\0');
389
- for (const path of sources) assert.ok(tracked.includes(path), path);
390
- for (const path of generated) assert.equal(tracked.includes(path), false, path);
406
+ for (const path of [...sources, ...clients, ...outputs]) assert.ok(tracked.includes(path), path);
407
+ for (const path of [...generated.filter(path => !outputs.includes(path)), ...privateFiles]) assert.equal(tracked.includes(path), false, path);
391
408
  });
392
409
 
393
410
  test('ignores locais cobrem resultados em qualquer caixa sem bloquear fixtures', t => {
@@ -7,14 +7,21 @@ description: Exemplo opcional de regras de ignore para o projeto.
7
7
  O `.gitignore` da raiz pertence ao projeto; o kit não o cria nem o altera.
8
8
  O projeto pode adotar este exemplo e seus próprios padrões se desejar.
9
9
  Regras de artefatos locais vêm de [shared.ignore](shared.ignore) e
10
- [agents.ignore](agents.ignore). As saídas calculadas usam
11
- [local.ignore](local.ignore) em `.git/info/exclude`; sem Git, essa proteção
12
- fica pendente até `git init` e sincronização, antes de adicionar arquivos.
10
+ [agents.ignore](agents.ignore). As pastas dos clientes usam
11
+ [local.ignore](local.ignore) em `.git/info/exclude`; o `.gitignore` deste hub
12
+ não alcança pastas irmãs com `../`. As regras locais não são copiadas pelo Git:
13
+ execute `init` ou `sync` em cada clone com Git inicializado, antes de adicionar
14
+ arquivos. Worktrees do mesmo repositório podem compartilhar as exclusões;
15
+ sem Git, essa proteção fica pendente.
13
16
  O sincronizador mantém o bloco `BEGIN AGENT IGNORE` / `END AGENT IGNORE`;
14
- regras próprias ficam fora dele, com exceções depois do bloco. Para permitir
15
- novos arquivos compartilhados, ajuste as fontes e sincronize. Raízes dedicadas
16
- dos clientes são locais. Em `.github` e `.vscode`, arquivos próprios continuam
17
- elegíveis; somente os derivados são excluídos.
17
+ regras próprias ficam fora dele, com exceções depois do bloco. Arquivos já
18
+ rastreados permanecem no índice; o kit não os desindexa automaticamente.
19
+ Pastas dos clientes também podem conter arquivos humanos ainda não rastreados.
20
+ Em especial, `.github` pode conter workflows e formulários do projeto.
21
+ Para permitir o versionamento, acrescente uma exceção literal ao `.gitignore`
22
+ da raiz, como `!/.claude/` ou `!/.github/`. Regras mais profundas continuam
23
+ válidas. Evite exceções amplas como `!/.claude/**`, que podem expor arquivos
24
+ privados e artefatos; `doctor` informa regras conflitantes.
18
25
  Ignore binários baixados por local, não por extensão: `.bat`, `.exe` e outros
19
26
  arquivos podem ser scripts ou fixtures necessários. Não use regras genéricas
20
27
  como `Release/`, `Scripts/` ou `Lib/` que escondam fontes e modelos.
@@ -1,3 +1,4 @@
1
+ # Pastas irmas: templates/gitignore/local.ignore e .git/info/exclude.
1
2
  # Derivados locais
2
3
  /catalog.json
3
4
  /skills.json
package/CHANGELOG.md CHANGED
@@ -4,6 +4,17 @@ description: Alterações verificáveis por versão do AgentDevKit.
4
4
 
5
5
  # Changelog
6
6
 
7
+ ## 0.0.19 — 2026-11-13
8
+
9
+ - Pastas dos clientes são ignoradas localmente por padrão, com exceções do projeto.
10
+ - O índice Git e os arquivos já rastreados permanecem intactos.
11
+
12
+ ## 0.0.18 — 2026-11-13
13
+
14
+ - Sincronização preserva recursos próprios, colisões e alterações humanas.
15
+ - Limpeza de recursos obsoletos exige comprovação de propriedade.
16
+ - Comandos e efeitos sobre arquivos, índice e backups documentados.
17
+
7
18
  ## 0.0.17 — 2026-11-13
8
19
 
9
20
  - A pasta compartilhada de estado passa a se chamar `.pbai4devs/state`.
package/README.en.md CHANGED
@@ -13,7 +13,7 @@ Organize work with coding agents, from planning to verification. Keep skills,
13
13
  rules, commands and agent profiles in `.pbai4devs`; the kit generates the
14
14
  references each client can discover. Code lives in `src/`, product tests in
15
15
  `tests/`, and shared agent resources in `.pbai4devs/`. Generated client
16
- folders, entrypoints and preferences stay local and untracked.
16
+ folders are ignored locally by default; projects can opt in to tracking them.
17
17
  See the [supported clients][clients].
18
18
 
19
19
  ## Start in your project
package/README.es.md CHANGED
@@ -13,8 +13,8 @@ Organiza el trabajo con agentes de código, desde la planificación hasta la
13
13
  verificación. Mantén skills, reglas, comandos y perfiles en `.pbai4devs`;
14
14
  el kit genera las referencias de cada [cliente compatible][clients].
15
15
  El código vive en `src/`, las pruebas del producto en `tests/` y los recursos
16
- compartidos en `.pbai4devs/`. Las carpetas, entradas y preferencias generadas
17
- son locales y no se versionan.
16
+ compartidos en `.pbai4devs/`. Las carpetas de clientes se ignoran localmente
17
+ por defecto; cada proyecto puede elegir versionarlas.
18
18
 
19
19
  ## Empezar en tu proyecto
20
20
 
@@ -22,17 +22,17 @@ atendido; lá os comandos de manutenção usam o pacote por `npx`.
22
22
 
23
23
  | Comando | Resultado |
24
24
  | --- | --- |
25
- | `init [pasta]` | Instala ou reaplica os recursos. |
26
- | `update` | Usa os recursos da versão do pacote executado. |
27
- | `sync` | Reconstrói as derivações da fonte do projeto. |
28
- | `sync --check` | Confere as derivações sem escrever. |
29
- | `doctor` | Diagnostica a instalação. |
30
- | `next` | Orienta a próxima etapa do projeto. |
25
+ | `init [pasta]` | Instala o kit no projeto ou reaplica a instalação. |
26
+ | `update` | Atualiza a fonte usando a versão do pacote executado. |
27
+ | `sync` | Atualiza catálogos e apontamentos a partir da fonte local. |
28
+ | `sync --check` | Confere sincronização sem alterar o projeto. |
29
+ | `doctor` | Diagnostica o kit e indica divergências. |
30
+ | `next` | Mostra a próxima etapa, sem iniciá-la. |
31
31
  | `lang [idioma]` | Consulta ou altera o idioma: pt, en ou es. |
32
- | `agents` | Consulta clientes disponíveis e seleção local. |
33
- | `agents codex,claude` | Altera a seleção local. |
34
- | `agents all` | Habilita todos os clientes. |
35
- | `tools <ação>` | Executa o gerenciador de ferramentas. |
32
+ | `agents` | Mostra os clientes disponíveis e a seleção salva. |
33
+ | `agents codex,claude` | Altera a seleção e os apontamentos necessários. |
34
+ | `agents all` | Seleciona todos os clientes compatíveis. |
35
+ | `tools <ação>` | Consulta, instala, atualiza ou executa ferramentas. |
36
36
  | `--help`, `--version` | Ajuda ou versão do pacote. |
37
37
 
38
38
  Sem comando, a CLI executa `init`, que pode criar arquivos. `language` é alias
@@ -48,16 +48,49 @@ de `lang`; `clients`, de `agents`. O idioma não traduz documentos existentes.
48
48
  | `--clients <lista>` | Alias de `--agents`. |
49
49
  | `--yes`, `-y` | Evita perguntas iniciais; não força conflitos. |
50
50
  | `--dry-run` | Exibe o plano sem aplicar alterações. |
51
- | `--force` | Substitui conflitos gerenciados, com backup. |
51
+ | `--force` | Solicita reparos gerenciados permitidos, com backup. |
52
52
  | `--json` | Produz uma resposta JSON para automação. |
53
53
 
54
54
  O primeiro uso interativo reúne idioma e clientes. Sem interação, valem as
55
55
  opções explícitas, a escolha local salva e, por último, `all`. Confira os
56
56
  [IDs e dependências](../../.pbai4devs/COMPATIBILIDADE.md).
57
57
 
58
- `update` não procura automaticamente a próxima versão: execute o pacote
59
- da versão desejada. `sync` não atualiza a fonte distribuída.
60
- A seleção e os derivados são locais; o source compartilhado permanece no Git.
58
+ `update` usa a versão executada; para escolher outra, fixe-a no nome do
59
+ pacote. `sync` usa o que já está em `.pbai4devs`: ele não baixa outra versão.
60
+ Ambos conciliam recursos e removem apontamentos obsoletos quando a propriedade
61
+ do kit é comprovada. Recursos e configurações próprios permanecem no projeto.
62
+ Diretórios antigos sem comprovação de propriedade podem permanecer vazios.
63
+ Ao mudar a seleção, pastas compartilhadas continuam quando outro cliente
64
+ precisa delas; arquivos adicionais da equipe devem ser preservados.
65
+
66
+ Antes de aplicar em projeto existente, confira o plano e depois o diagnóstico:
67
+
68
+ ```console
69
+ npx @pathbit/agentdevkit update --dry-run --json
70
+ npx @pathbit/agentdevkit update
71
+ npx @pathbit/agentdevkit doctor
72
+ npx @pathbit/agentdevkit sync --check
73
+ ```
74
+
75
+ Use `init --dry-run --json`, `sync --dry-run --json` ou
76
+ `agents codex,claude --dry-run --json` para as outras operações. Examine
77
+ `plan`, `conflicts`, `preserved`, `untrackedPaths` e `localIgnore` antes de
78
+ aplicar. Conflitos sem solução interrompem a operação; não presuma que uma
79
+ colisão de nomes torna um arquivo propriedade do kit.
80
+
81
+ O sincronizador independente também pode ser executado pelo
82
+ [script local](../../.pbai4devs/scripts/sincronizar-agentes/README.md). Seu
83
+ `--check` apenas confere e `--force` é explícito na linha de comando. O
84
+ comando agêntico [sincronizar](../../.pbai4devs/commands/sincronizar/COMMAND.md)
85
+ orienta executar o script com `--force`; ele não é o mesmo que `sync` da CLI.
86
+
87
+ No Git, o kit preserva o `.gitignore` da raiz e pode atualizar
88
+ `.git/info/exclude` para ocultar por padrão as pastas dos clientes. O projeto
89
+ pode reabri-las no `.gitignore` da raiz, como em `!/.claude/`; consulte as
90
+ [exceções e seus efeitos](installation.md#git-e-migração). Os comandos não
91
+ retiram arquivos já rastreados do índice, e `untrackedPaths` permanece vazio
92
+ por compatibilidade. Backups locais ficam em `.agent-tests/` e não substituem
93
+ o histórico Git.
61
94
 
62
95
  ## Ferramentas
63
96
 
@@ -80,7 +113,7 @@ do separador. `--help` e `--version` do kit não exigem um projeto instalado.
80
113
  As respostas incluem `ok`, `command`, `version`, `language`, `target` e
81
114
  `next`. Conforme a operação, há seleção, plano, conflitos, backup e erros.
82
115
  Leia os campos estruturados, não dependa da tradução da mensagem.
83
- `preserved` lista caminhos nativos humanos mantidos pelo projeto, com o motivo.
116
+ `preserved` lista caminhos mantidos pelo projeto e o motivo.
84
117
  Um complemento pode ser gerenciado por bloco sem tornar o arquivo propriedade
85
118
  do kit. Conteúdo humano não é substituído por `--force`.
86
119
 
@@ -87,7 +87,7 @@ O próximo passo é [preparar as ferramentas](prerequisites.md#depois-de-instala
87
87
  | Conteúdo | Tratamento |
88
88
  | --- | --- |
89
89
  | `.pbai4devs` com recursos e templates | Fonte compartilhada versionável. |
90
- | Skills, regras e comandos nos clientes | Apontamentos locais gerados. |
90
+ | Recursos nos clientes | Apontamentos locais; pastas ignoradas por padrão. |
91
91
  | Entradas da raiz criadas pelo kit | Arquivos locais gerados. |
92
92
  | Índices, manifesto e seleção pessoal | Derivados locais ignorados. |
93
93
  | Código, documentos e configurações humanas | Preservados. |
@@ -102,16 +102,35 @@ identifica a licença dos recursos do AgentDevKit, sem redefinir a do projeto.
102
102
 
103
103
  ## Git e migração
104
104
 
105
- Um `.gitignore` dentro de `.pbai4devs` só controla essa árvore. Para os
106
- apontamentos externos, o kit gera exclusões locais do Git, sem ignorar
107
- workflows, formulários de issues ou configurações humanas em `.github`.
108
- O kit não cria nem altera o `.gitignore` da raiz. Sem Git, a exclusão local
109
- fica pendente; execute `git init` e `npx @pathbit/agentdevkit sync` antes de
110
- usar `git add`. No GitHub Packages, use o prefixo de registry da instalação.
105
+ Um `.gitignore` dentro de `.pbai4devs` só controla essa árvore: `../` não
106
+ alcança pastas irmãs. O kit gera regras em `.git/info/exclude` para ignorar
107
+ por padrão as pastas dos clientes, sem alterar o `.gitignore` da raiz.
108
+ Essas regras são locais, não acompanham o clone; execute `init` ou `sync`
109
+ em cada clone com Git inicializado, antes de usar `git add`. Sem Git, a
110
+ exclusão fica pendente até `git init` e sincronização.
111
+ Worktrees do mesmo repositório podem compartilhar esse arquivo de exclusões.
112
+
113
+ Para versionar uma pasta de cliente, o projeto pode acrescentar uma exceção
114
+ literal ao seu próprio `.gitignore` da raiz, por exemplo:
115
+
116
+ ```gitignore
117
+ !/.claude/
118
+ !/.github/
119
+ ```
120
+
121
+ A exceção da raiz tem precedência sobre `.git/info/exclude`; regras de um
122
+ `.gitignore` mais profundo continuam valendo. Não use `!/.claude/**`: um
123
+ curinga amplo pode reabrir credenciais e artefatos que devem ficar locais.
124
+ O diagnóstico informa exceções que exponham esses arquivos.
125
+
126
+ O padrão também oculta arquivos humanos ainda não rastreados nas pastas dos
127
+ clientes. Em especial, `.github` pode conter workflows, formulários de issues
128
+ e outras configurações do projeto; use `!/.github/` se precisar versioná-los.
129
+ O mesmo cuidado vale para `.vscode` e configurações próprias de outros agentes.
111
130
 
112
131
  O bloco local também protege `.agent-tests`, `tmp`, `temp`, `.playwright*`
113
132
  e relatórios de testes, inclusive com letras maiúsculas e em subpastas.
114
- O conteúdo do `.gitignore` existente e os arquivos rastreados são preservados.
133
+ O conteúdo do `.gitignore` existente na raiz é preservado.
115
134
  Uma exceção que reabra arquivo privado ou artefato é informada como conflito;
116
135
  o projeto decide como ajustar suas próprias regras.
117
136
  Negativas com curingas também podem ser recusadas preventivamente, mesmo antes
@@ -119,12 +138,10 @@ de existir um arquivo correspondente. Examine a regra indicada no diagnóstico.
119
138
  Nomes próprios de artefatos e arquivos existentes também são conferidos;
120
139
  a validação fica restrita ao projeto e aos ignores de seus ancestrais.
121
140
 
122
- Arquivos já rastreados exigem migração do índice: apenas saídas identificadas
123
- do kit podem deixar de ser rastreadas, preservando seus bytes no disco.
124
- Artefatos já rastreados são informados por `doctor` e `sync --check` para
125
- revisão; não são removidos automaticamente do índice.
126
- Revise o plano e os conflitos em um projeto existente; use `--dry-run` antes
127
- de aplicar. Conteúdo humano não deve ser classificado como saída do gerador.
141
+ Ignorar uma pasta não retira arquivos já rastreados do índice. O kit preserva
142
+ o índice, inclusive alterações preparadas; para mudar o rastreamento, o projeto
143
+ decide a ação Git. `--dry-run` e `sync --check` também não alteram o índice.
144
+ Revise o plano e os conflitos antes de aplicar em um projeto existente.
128
145
 
129
146
  ## Atualizar e escolher agentes
130
147
 
@@ -133,13 +150,20 @@ continua válida; `agents` consulta e `agents codex,claude` altera a seleção.
133
150
  `agents all` habilita todos. As pastas compartilhadas permanecem quando
134
151
  necessárias para outro cliente, como `.agents` para Codex e Antigravity.
135
152
 
136
- Confira a simulação antes de atualizar um projeto existente. Arquivos
137
- gerenciados alterados geram conflito; use `--force` somente após revisar o
138
- backup e o conteúdo que será substituído. Preserve os dados locais, as
139
- configurações próprias e os commits do projeto.
153
+ Confira `update --dry-run --json` antes de atualizar um projeto existente.
154
+ Revise arquivos criados, atualizados e removidos, conflitos e `preserved`.
155
+ `sync` usa as fontes já instaladas e não baixa uma nova versão. Consulte a
156
+ [referência da CLI](cli.md) para todos os comandos.
157
+
158
+ Skills e outros recursos próprios podem coexistir com os do kit. Um nome
159
+ igual não comprova propriedade: conteúdo humano e arquivos adicionais não
160
+ devem ser descartados para reconstruir apontamentos. Remoções automáticas
161
+ ficam restritas a arquivos obsoletos cuja propriedade possa ser comprovada.
162
+ `--force` não autoriza substituir conteúdo próprio; backups ficam em
163
+ `.agent-tests/` e devem ser revisados quando houver reparo gerenciado.
140
164
 
141
- Entradas como `AGENTS.md`, `claude.md` e `GEMINI.md`, além de skills, agentes,
142
- comandos e regras existentes, recebem apenas um complemento do kit:
165
+ Em entradas como `AGENTS.md`, `claude.md` e `GEMINI.md`, e em recursos nativos
166
+ compatíveis, o kit pode acrescentar apenas uma referência delimitada:
143
167
 
144
168
  ```markdown
145
169
  <!-- BEGIN AGENTDEVKIT -->
@@ -148,13 +172,15 @@ Leia e siga [origem](caminho/para/.pbai4devs/recurso.md).
148
172
  ```
149
173
 
150
174
  O texto e o frontmatter humanos permanecem; a referência usa o caminho real
151
- do recurso. Repetir a operação não duplica o bloco. Edite suas instruções fora
175
+ do recurso. Um arquivo que não possa receber o bloco é preservado e informado,
176
+ sem prometer a adição do apontamento. Repetir a operação não duplica o bloco.
177
+ Edite suas instruções fora
152
178
  dele: atualizações alteram somente a contribuição do kit. Nomes de entradas
153
179
  com caixa diferente são reaproveitados quando há uma única opção.
154
180
  Comandos Gemini mantêm a referência dentro do valor `prompt` em TOML válido.
155
181
  Configurações que não são instruções não recebem uma mesclagem arbitrária.
156
- Arquivos mistos permanecem sob controle do Git do projeto; somente derivados
157
- integralmente gerados pelo kit recebem exclusão local.
182
+ Arquivos mistos não passam a pertencer ao kit. Sua visibilidade para o Git
183
+ também depende da regra aplicada à pasta do cliente.
158
184
 
159
185
  Links simbólicos preexistentes são preservados sem atravessá-los. O campo
160
186
  `preserved` informa rotas que continuam sob controle do projeto. Um formato
@@ -164,8 +164,9 @@ não devem ser versionados. Verifique com `git status` e `git check-ignore -v
164
164
  retira automaticamente do Git; revise a remoção do índice sem apagar dados.
165
165
 
166
166
  O `.gitignore` do hub não controla pastas irmãs. Confira a proteção local
167
- gerada pelo kit, incluindo `info/exclude` nos repositórios Git. Preserve
168
- configurações humanas em `.github` e `.vscode` ao migrar arquivos antigos.
167
+ gerada pelo kit em `info/exclude`. Para versionar configurações humanas novas
168
+ em `.github` ou `.vscode`, reabra a pasta com `!/.github/` ou `!/.vscode/`
169
+ no `.gitignore` da raiz. Confira as regras com `git check-ignore -v`.
169
170
 
170
171
  Para pedir ajuda, inclua SO/arquitetura, versões de Node/npm/AgentDevKit,
171
172
  comando executado, código de saída e trecho relevante do JSON, sem segredos.
@@ -60,13 +60,13 @@ bloco exigem revisão e não autorizam sobrescrever o arquivo com `--force`.
60
60
  Arquivos novos e integralmente gerados continuam com propriedade integral.
61
61
  Comandos TOML recebem a referência no valor de `prompt`, preservando as demais
62
62
  chaves. Configurações nativas fora desse escopo permanecem sob controle humano.
63
- Nunca é possível ignorar somente um trecho de arquivo no Git: arquivos mistos
64
- não entram nas exclusões do kit. Veja a [spec de integração][additive].
63
+ Nunca é possível ignorar somente um trecho de arquivo no Git. Veja a
64
+ [spec de integração][additive].
65
65
 
66
- Saídas identificadas são excluídas localmente do versionamento. O Git local
67
- usa `info/exclude`; fora de um repositório, a proteção fica no `.gitignore`
68
- da raiz. A política vem dos templates, não de listas copiadas por cliente.
69
- Os arquivos humanos de `.github` e `.vscode` continuam versionáveis.
66
+ O Git usa `info/exclude` para ignorar localmente pastas de clientes, inclusive
67
+ seus arquivos humanos ainda não rastreados. Exceções literais no `.gitignore`
68
+ da raiz permitem versioná-las. Arquivos já rastreados e o índice permanecem;
69
+ sem Git, a proteção fica pendente. A política vem dos templates.
70
70
 
71
71
  O estado registra versão, escolha e propriedade local. Índices e manifesto
72
72
  podem ser reconstruídos. Downloads, credenciais e relatórios ficam fora do
@@ -21,9 +21,11 @@ description: Incrementos verificáveis do AgentDevKit.
21
21
  especialistas, colaboração e provas.
22
22
  - [Confiabilidade da pipeline](ci-resilience/SPEC.md): testes e releases.
23
23
  - [Pasta de estado](state-directory/SPEC.md): migração segura para `state`.
24
+ - [Sincronização segura](safe-synchronization/SPEC.md): preservar recursos próprios.
24
25
  - [Integração sem substituição][additive]: acréscimos em arquivos existentes.
25
26
  - [Compatibilidade com projetos reais][oss]: projetos públicos e exemplos reproduzíveis.
26
27
  - [Ignore do projeto](project-ignore/SPEC.md): preservar o arquivo da raiz.
28
+ - [Ignore de clientes](client-ignore/SPEC.md): padrão local e exceções do projeto.
27
29
 
28
30
  Cada incremento vincula requisitos, critérios, testes e evidências locais.
29
31
 
@@ -0,0 +1,21 @@
1
+ ---
2
+ description: Exclusão local de clientes com escolha explícita do projeto.
3
+ ---
4
+
5
+ # Ignore de clientes
6
+
7
+ O Git não aplica `../` no `.gitignore` do hub às pastas irmãs. O kit usa
8
+ exclusões locais do Git e o projeto escolhe exceções no seu `.gitignore`.
9
+
10
+ ## Critérios de aceite
11
+
12
+ - AC-001: Pastas de clientes são ignoradas por padrão em repositórios Git,
13
+ sem modificar o `.gitignore` da raiz.
14
+ - AC-002: Uma exceção literal da raiz, como `!/.claude/`, permite versionar
15
+ o cliente e continua válida após instalação, atualização e sincronização.
16
+ - AC-003: Credenciais e artefatos continuam protegidos; exceções inseguras
17
+ são informadas antes de qualquer mudança.
18
+ - AC-004: Arquivos humanos e o índice Git, incluindo alterações preparadas,
19
+ são preservados. Arquivos já rastreados continuam rastreados.
20
+ - AC-005: Documentação e testes explicam e verificam precedência, limites,
21
+ clones, clientes compartilhados, cenários sem Git e sistemas suportados.
@@ -0,0 +1,21 @@
1
+ ---
2
+ description: Sincronização segura com recursos e alterações próprios do projeto.
3
+ ---
4
+
5
+ # Sincronização segura
6
+
7
+ Projetos podem ter arquivos próprios e recursos adicionais aos do pacote.
8
+ Os comandos devem preservar esse conteúdo ao instalar, atualizar e sincronizar.
9
+
10
+ ## Critérios de aceite
11
+
12
+ - AC-001: Recursos humanos ou modificados no hub e nos clientes são
13
+ preservados, inclusive em colisões e com `--force`.
14
+ - AC-002: A limpeza remove somente saídas obsoletas com propriedade comprovada;
15
+ pastas e arquivos adicionais da equipe não são removidos.
16
+ - AC-003: Um conteúdo divergente preparado no índice não é descartado pela
17
+ sincronização; `.gitignore` da raiz e dados humanos são preservados.
18
+ - AC-004: `init`, `update`, `sync`, consultas e opções estão documentados com
19
+ seus efeitos sobre arquivos, backups, seleção de clientes e Git.
20
+ - AC-005: Testes exercitam instalações existentes, obsolescência, colisões,
21
+ execução repetida, Git e falhas; a CI contempla Linux, Windows e macOS.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pathbit/agentdevkit",
3
- "version": "0.0.17",
3
+ "version": "0.0.19",
4
4
  "description": "Shared skills, specifications and workflows for AI coding agents.",
5
5
  "type": "module",
6
6
  "license": "MIT",
package/src/i18n.mjs CHANGED
@@ -42,6 +42,16 @@ const messages = {
42
42
  };
43
43
  export const text = (language, key) => messages[language || 'pt'][key] || key;
44
44
  export function explainError(language, code) {
45
+ if (code === 'E_STAGED') return {
46
+ pt: 'Há alterações preparadas diferentes dos arquivos locais; revise-as antes de atualizar.',
47
+ en: 'Staged changes differ from the working files; review them before updating.',
48
+ es: 'Hay cambios preparados distintos de los archivos locales; revíselos antes de actualizar.',
49
+ }[language || 'pt'];
50
+ if (code === 'E_GIT') return {
51
+ pt: 'Não foi possível verificar o índice Git com segurança; nenhum arquivo foi alterado.',
52
+ en: 'The Git index could not be checked safely; no files were changed.',
53
+ es: 'No se pudo verificar el índice Git de forma segura; no se modificaron archivos.',
54
+ }[language || 'pt'];
45
55
  if (code === 'E_CONFIG_PARSE') return {
46
56
  pt: 'Não foi possível analisar a configuração legada com segurança; revise o frontmatter e as aspas antes de executar update.',
47
57
  en: 'The legacy configuration could not be safely parsed; review its frontmatter and quoted values before running update.',