@dynamicworks/br-openspec 1.3.1 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/LICENSE +22 -22
  2. package/README.md +210 -210
  3. package/README.pt-BR.md +212 -212
  4. package/bin/openspec.js +2 -2
  5. package/dist/commands/feedback.js +4 -4
  6. package/dist/commands/schema.js +60 -60
  7. package/dist/core/artifact-graph/instruction-loader.js +4 -4
  8. package/dist/core/artifact-graph/schema.js +5 -4
  9. package/dist/core/command-generation/adapters/amazon-q.js +5 -5
  10. package/dist/core/command-generation/adapters/antigravity.js +5 -5
  11. package/dist/core/command-generation/adapters/auggie.js +6 -6
  12. package/dist/core/command-generation/adapters/bob.js +6 -6
  13. package/dist/core/command-generation/adapters/claude.js +8 -8
  14. package/dist/core/command-generation/adapters/cline.js +5 -5
  15. package/dist/core/command-generation/adapters/codebuddy.js +7 -7
  16. package/dist/core/command-generation/adapters/codex.js +6 -6
  17. package/dist/core/command-generation/adapters/continue.js +7 -7
  18. package/dist/core/command-generation/adapters/costrict.js +6 -6
  19. package/dist/core/command-generation/adapters/crush.js +8 -8
  20. package/dist/core/command-generation/adapters/cursor.js +8 -8
  21. package/dist/core/command-generation/adapters/factory.js +6 -6
  22. package/dist/core/command-generation/adapters/gemini.js +5 -5
  23. package/dist/core/command-generation/adapters/github-copilot.js +5 -5
  24. package/dist/core/command-generation/adapters/iflow.js +8 -8
  25. package/dist/core/command-generation/adapters/junie.js +5 -5
  26. package/dist/core/command-generation/adapters/kilocode.js +1 -1
  27. package/dist/core/command-generation/adapters/kiro.js +5 -5
  28. package/dist/core/command-generation/adapters/lingma.js +8 -8
  29. package/dist/core/command-generation/adapters/opencode.js +5 -5
  30. package/dist/core/command-generation/adapters/pi.js +5 -5
  31. package/dist/core/command-generation/adapters/qoder.js +8 -8
  32. package/dist/core/command-generation/adapters/qwen.js +5 -5
  33. package/dist/core/command-generation/adapters/roocode.js +5 -5
  34. package/dist/core/command-generation/adapters/windsurf.js +8 -8
  35. package/dist/core/completions/factory.js +3 -2
  36. package/dist/core/completions/generators/bash-generator.js +41 -41
  37. package/dist/core/completions/generators/fish-generator.js +7 -7
  38. package/dist/core/completions/generators/powershell-generator.js +29 -29
  39. package/dist/core/completions/generators/zsh-generator.js +33 -33
  40. package/dist/core/completions/installers/fish-installer.js +13 -12
  41. package/dist/core/completions/installers/powershell-installer.js +16 -17
  42. package/dist/core/completions/installers/zsh-installer.js +1 -1
  43. package/dist/core/completions/templates/bash-templates.js +18 -18
  44. package/dist/core/completions/templates/fish-templates.js +32 -32
  45. package/dist/core/completions/templates/powershell-templates.js +19 -19
  46. package/dist/core/completions/templates/zsh-templates.js +30 -30
  47. package/dist/core/parsers/change-parser.js +7 -6
  48. package/dist/core/project-config.js +12 -13
  49. package/dist/core/shared/skill-generation.js +12 -12
  50. package/dist/core/specs-apply.js +37 -38
  51. package/dist/core/templates/workflows/apply-change.js +288 -288
  52. package/dist/core/templates/workflows/archive-change.js +251 -251
  53. package/dist/core/templates/workflows/bulk-archive-change.js +472 -472
  54. package/dist/core/templates/workflows/continue-change.js +212 -212
  55. package/dist/core/templates/workflows/explore.js +443 -443
  56. package/dist/core/templates/workflows/feedback.js +97 -97
  57. package/dist/core/templates/workflows/ff-change.js +178 -178
  58. package/dist/core/templates/workflows/propose.js +196 -196
  59. package/dist/core/templates/workflows/sync-specs.js +252 -252
  60. package/dist/core/templates/workflows/upstream-sync.js +93 -93
  61. package/dist/core/tools-manager.js +2 -2
  62. package/dist/messages/index.d.ts +111 -0
  63. package/dist/messages/index.js +1115 -977
  64. package/dist/utils/change-metadata.js +8 -7
  65. package/dist/utils/change-utils.js +12 -11
  66. package/package.json +82 -84
  67. package/schemas/spec-driven/schema.yaml +153 -153
  68. package/schemas/spec-driven/templates/design.md +19 -19
  69. package/schemas/spec-driven/templates/proposal.md +23 -23
  70. package/schemas/spec-driven/templates/spec.md +8 -8
  71. package/schemas/spec-driven/templates/tasks.md +9 -9
  72. package/scripts/postinstall.js +83 -83
@@ -2,242 +2,242 @@ export function getBulkArchiveChangeSkillTemplate() {
2
2
  return {
3
3
  name: 'openspec-bulk-archive-change',
4
4
  description: 'Arquiva múltiplas changes concluídas de uma vez. Use ao arquivar várias changes paralelas.',
5
- instructions: `Arquiva múltiplas changes concluídas em uma única operação.
6
-
7
- Esta skill permite arquivar changes em lote, tratando conflitos de specs de forma inteligente verificando a codebase para determinar o que está realmente implementado.
8
-
9
- **Entrada**: Nenhuma necessária (solicita seleção)
10
-
11
- **Passos**
12
-
13
- 1. **Obtenha as changes ativas**
14
-
15
- Execute \`openspec list --json\` para obter todas as changes ativas.
16
-
17
- Se não existirem changes ativas, informe o usuário e pare.
18
-
19
- 2. **Solicite a seleção de changes**
20
-
21
- Use a ferramenta **AskUserQuestion** com multi-seleção para permitir que o usuário escolha as changes:
22
- - Mostre cada change com seu schema
23
- - Inclua uma opção para "Todas as changes"
24
- - Permita qualquer número de seleções (1+ funciona, 2+ é o caso típico)
25
-
26
- **IMPORTANTE**: NÃO selecione automaticamente. Sempre deixe o usuário escolher.
27
-
28
- 3. **Validação em lote - colete o status de todas as changes selecionadas**
29
-
30
- Para cada change selecionada, colete:
31
-
32
- a. **Status dos artifacts** - Execute \`openspec status --change "<nome>" --json\`
33
- - Analise \`schemaName\` e lista de \`artifacts\`
34
- - Note quais artifacts estão \`done\` vs outros estados
35
-
36
- b. **Conclusão de tarefas** - Leia \`openspec/changes/<nome>/tasks.md\`
37
- - Conte \`- [ ]\` (incompleto) vs \`- [x]\` (concluído)
38
- - Se não existir arquivo de tasks, note como "Sem tarefas"
39
-
40
- c. **Delta specs** - Verifique o diretório \`openspec/changes/<nome>/specs/\`
41
- - Liste quais capability specs existem
42
- - Para cada um, extraia os nomes dos requisitos (linhas correspondentes a \`### Requirement: <nome>\`)
43
-
44
- 4. **Detecte conflitos de specs**
45
-
46
- Construa um mapa de \`capability -> [changes que a tocam]\`:
47
-
48
- \`\`\`
49
- auth -> [change-a, change-b] <- CONFLITO (2+ changes)
50
- api -> [change-c] <- OK (apenas 1 change)
51
- \`\`\`
52
-
53
- Um conflito existe quando 2+ changes selecionadas têm delta specs para a mesma capability.
54
-
55
- 5. **Resolva conflitos de forma agentica**
56
-
57
- **Para cada conflito**, investigue a codebase:
58
-
59
- a. **Leia os delta specs** de cada change conflitante para entender o que cada uma pretende adicionar/modificar
60
-
61
- b. **Pesquise a codebase** por evidências de implementação:
62
- - Procure por código implementando requisitos de cada delta spec
63
- - Verifique arquivos, funções ou testes relacionados
64
-
65
- c. **Determine a resolução**:
66
- - Se apenas uma change está realmente implementada -> sincronize os specs dessa
67
- - Se ambas estão implementadas -> aplique em ordem cronológica (mais antiga primeiro, mais recente sobrescreve)
68
- - Se nenhuma está implementada -> ignore o sync de specs, avise o usuário
69
-
70
- d. **Registre a resolução** para cada conflito:
71
- - Quais specs de qual change aplicar
72
- - Em qual ordem (se ambas)
73
- - Racional (o que foi encontrado na codebase)
74
-
75
- 6. **Mostre a tabela de status consolidada**
76
-
77
- Exiba uma tabela resumindo todas as changes:
78
-
79
- \`\`\`
80
- | Change | Artifacts | Tarefas | Specs | Conflitos | Status |
81
- |---------------------|-----------|---------|---------|-----------|--------|
82
- | schema-management | Done | 5/5 | 2 delta | Nenhum | Pronto |
83
- | project-config | Done | 3/3 | 1 delta | Nenhum | Pronto |
84
- | add-oauth | Done | 4/4 | 1 delta | auth (!) | Pronto*|
85
- | add-verify-skill | 1 restante| 2/5 | Nenhum | Nenhum | Aviso |
86
- \`\`\`
87
-
88
- Para conflitos, mostre a resolução:
89
- \`\`\`
90
- * Resolução de conflito:
91
- - auth spec: Aplicará add-oauth depois add-jwt (ambas implementadas, ordem cronológica)
92
- \`\`\`
93
-
94
- Para changes incompletas, mostre avisos:
95
- \`\`\`
96
- Avisos:
97
- - add-verify-skill: 1 artifact incompleto, 3 tarefas incompletas
98
- \`\`\`
99
-
100
- 7. **Confirme a operação em lote**
101
-
102
- Use a ferramenta **AskUserQuestion** com uma única confirmação:
103
-
104
- - "Arquivar N changes?" com opções baseadas no status
105
- - As opções podem incluir:
106
- - "Arquivar todas as N changes"
107
- - "Arquivar apenas as N changes prontas (ignorar incompletas)"
108
- - "Cancelar"
109
-
110
- Se houver changes incompletas, deixe claro que elas serão arquivadas com avisos.
111
-
112
- 8. **Execute o arquivamento para cada change confirmada**
113
-
114
- Processe as changes na ordem determinada (respeitando a resolução de conflitos):
115
-
116
- a. **Sincronize specs** se delta specs existirem:
117
- - Use a abordagem openspec-sync-specs (merge inteligente agent-driven)
118
- - Para conflitos, aplique na ordem resolvida
119
- - Rastreie se o sync foi feito
120
-
121
- b. **Realize o arquivamento**:
122
- \`\`\`bash
123
- openspec archive <nome>
124
- \`\`\`
125
-
126
- Se precisar manipular programaticamente, construa os caminhos com \`path.join()\`
127
- ou \`path.resolve()\` e use \`fs.rename()\` — evite comandos shell e separadores \`/\` hardcoded.
128
-
129
- c. **Rastreie o resultado** para cada change:
130
- - Sucesso: arquivado com sucesso
131
- - Falha: erro durante o arquivamento (registre o erro)
132
- - Ignorado: usuário escolheu não arquivar (se aplicável)
133
-
134
- 9. **Exiba o resumo**
135
-
136
- Mostre os resultados finais:
137
-
138
- \`\`\`
139
- ## Arquivamento em Lote Concluído
140
-
141
- 3 changes arquivadas:
142
- - schema-management-cli -> archive/2026-01-19-schema-management-cli/
143
- - project-config -> archive/2026-01-19-project-config/
144
- - add-oauth -> archive/2026-01-19-add-oauth/
145
-
146
- 1 change ignorada:
147
- - add-verify-skill (usuário escolheu não arquivar incompleta)
148
-
149
- Resumo de sync de specs:
150
- - 4 delta specs sincronizados com os specs principais
151
- - 1 conflito resolvido (auth: aplicadas ambas em ordem cronológica)
152
- \`\`\`
153
-
154
- Se houver falhas:
155
- \`\`\`
156
- 1 change falhou:
157
- - some-change: O diretório de arquivo já existe
158
- \`\`\`
159
-
160
- **Exemplos de Resolução de Conflitos**
161
-
162
- Exemplo 1: Apenas uma implementada
163
- \`\`\`
164
- Conflito: specs/auth/spec.md tocado por [add-oauth, add-jwt]
165
-
166
- Verificando add-oauth:
167
- - Delta adiciona requisito "OAuth Provider Integration"
168
- - Pesquisando codebase... encontrado src/auth/oauth.ts implementando fluxo OAuth
169
-
170
- Verificando add-jwt:
171
- - Delta adiciona requisito "JWT Token Handling"
172
- - Pesquisando codebase... nenhuma implementação JWT encontrada
173
-
174
- Resolução: Apenas add-oauth está implementada. Sincronizará apenas os specs de add-oauth.
175
- \`\`\`
176
-
177
- Exemplo 2: Ambas implementadas
178
- \`\`\`
179
- Conflito: specs/api/spec.md tocado por [add-rest-api, add-graphql]
180
-
181
- Verificando add-rest-api (criada 2026-01-10):
182
- - Delta adiciona requisito "REST Endpoints"
183
- - Pesquisando codebase... encontrado src/api/rest.ts
184
-
185
- Verificando add-graphql (criada 2026-01-15):
186
- - Delta adiciona requisito "GraphQL Schema"
187
- - Pesquisando codebase... encontrado src/api/graphql.ts
188
-
189
- Resolução: Ambas implementadas. Aplicará specs de add-rest-api primeiro,
190
- depois specs de add-graphql (ordem cronológica, mais recente tem precedência).
191
- \`\`\`
192
-
193
- **Saída em Sucesso**
194
-
195
- \`\`\`
196
- ## Arquivamento em Lote Concluído
197
-
198
- N changes arquivadas:
199
- - <change-1> -> archive/YYYY-MM-DD-<change-1>/
200
- - <change-2> -> archive/YYYY-MM-DD-<change-2>/
201
-
202
- Resumo de sync de specs:
203
- - N delta specs sincronizados com os specs principais
204
- - Nenhum conflito (ou: M conflitos resolvidos)
205
- \`\`\`
206
-
207
- **Saída em Sucesso Parcial**
208
-
209
- \`\`\`
210
- ## Arquivamento em Lote Concluído (parcial)
211
-
212
- N changes arquivadas:
213
- - <change-1> -> archive/YYYY-MM-DD-<change-1>/
214
-
215
- M changes ignoradas:
216
- - <change-2> (usuário escolheu não arquivar incompleta)
217
-
218
- K changes falharam:
219
- - <change-3>: O diretório de arquivo já existe
220
- \`\`\`
221
-
222
- **Saída Quando Não Há Changes**
223
-
224
- \`\`\`
225
- ## Nenhuma Change para Arquivar
226
-
227
- Nenhuma change ativa encontrada. Crie uma nova change para começar.
228
- \`\`\`
229
-
230
- **Guardrails**
231
- - Permita qualquer número de changes (1+ está ok, 2+ é o caso típico)
232
- - Sempre solicite seleção, nunca selecione automaticamente
233
- - Detecte conflitos de specs cedo e resolva verificando a codebase
234
- - Quando ambas as changes estiverem implementadas, aplique specs em ordem cronológica
235
- - Ignore o sync de specs apenas quando a implementação estiver ausente (avise o usuário)
236
- - Mostre o status claro por change antes de confirmar
237
- - Use uma única confirmação para todo o lote
238
- - Rastreie e reporte todos os resultados (sucesso/ignorado/falha)
239
- - Preservar .openspec.yaml ao mover para o arquivo
240
- - O diretório de destino do arquivo usa a data atual: YYYY-MM-DD-<nome>
5
+ instructions: `Arquiva múltiplas changes concluídas em uma única operação.
6
+
7
+ Esta skill permite arquivar changes em lote, tratando conflitos de specs de forma inteligente verificando a codebase para determinar o que está realmente implementado.
8
+
9
+ **Entrada**: Nenhuma necessária (solicita seleção)
10
+
11
+ **Passos**
12
+
13
+ 1. **Obtenha as changes ativas**
14
+
15
+ Execute \`openspec list --json\` para obter todas as changes ativas.
16
+
17
+ Se não existirem changes ativas, informe o usuário e pare.
18
+
19
+ 2. **Solicite a seleção de changes**
20
+
21
+ Use a ferramenta **AskUserQuestion** com multi-seleção para permitir que o usuário escolha as changes:
22
+ - Mostre cada change com seu schema
23
+ - Inclua uma opção para "Todas as changes"
24
+ - Permita qualquer número de seleções (1+ funciona, 2+ é o caso típico)
25
+
26
+ **IMPORTANTE**: NÃO selecione automaticamente. Sempre deixe o usuário escolher.
27
+
28
+ 3. **Validação em lote - colete o status de todas as changes selecionadas**
29
+
30
+ Para cada change selecionada, colete:
31
+
32
+ a. **Status dos artifacts** - Execute \`openspec status --change "<nome>" --json\`
33
+ - Analise \`schemaName\` e lista de \`artifacts\`
34
+ - Note quais artifacts estão \`done\` vs outros estados
35
+
36
+ b. **Conclusão de tarefas** - Leia \`openspec/changes/<nome>/tasks.md\`
37
+ - Conte \`- [ ]\` (incompleto) vs \`- [x]\` (concluído)
38
+ - Se não existir arquivo de tasks, note como "Sem tarefas"
39
+
40
+ c. **Delta specs** - Verifique o diretório \`openspec/changes/<nome>/specs/\`
41
+ - Liste quais capability specs existem
42
+ - Para cada um, extraia os nomes dos requisitos (linhas correspondentes a \`### Requirement: <nome>\`)
43
+
44
+ 4. **Detecte conflitos de specs**
45
+
46
+ Construa um mapa de \`capability -> [changes que a tocam]\`:
47
+
48
+ \`\`\`
49
+ auth -> [change-a, change-b] <- CONFLITO (2+ changes)
50
+ api -> [change-c] <- OK (apenas 1 change)
51
+ \`\`\`
52
+
53
+ Um conflito existe quando 2+ changes selecionadas têm delta specs para a mesma capability.
54
+
55
+ 5. **Resolva conflitos de forma agentica**
56
+
57
+ **Para cada conflito**, investigue a codebase:
58
+
59
+ a. **Leia os delta specs** de cada change conflitante para entender o que cada uma pretende adicionar/modificar
60
+
61
+ b. **Pesquise a codebase** por evidências de implementação:
62
+ - Procure por código implementando requisitos de cada delta spec
63
+ - Verifique arquivos, funções ou testes relacionados
64
+
65
+ c. **Determine a resolução**:
66
+ - Se apenas uma change está realmente implementada -> sincronize os specs dessa
67
+ - Se ambas estão implementadas -> aplique em ordem cronológica (mais antiga primeiro, mais recente sobrescreve)
68
+ - Se nenhuma está implementada -> ignore o sync de specs, avise o usuário
69
+
70
+ d. **Registre a resolução** para cada conflito:
71
+ - Quais specs de qual change aplicar
72
+ - Em qual ordem (se ambas)
73
+ - Racional (o que foi encontrado na codebase)
74
+
75
+ 6. **Mostre a tabela de status consolidada**
76
+
77
+ Exiba uma tabela resumindo todas as changes:
78
+
79
+ \`\`\`
80
+ | Change | Artifacts | Tarefas | Specs | Conflitos | Status |
81
+ |---------------------|-----------|---------|---------|-----------|--------|
82
+ | schema-management | Done | 5/5 | 2 delta | Nenhum | Pronto |
83
+ | project-config | Done | 3/3 | 1 delta | Nenhum | Pronto |
84
+ | add-oauth | Done | 4/4 | 1 delta | auth (!) | Pronto*|
85
+ | add-verify-skill | 1 restante| 2/5 | Nenhum | Nenhum | Aviso |
86
+ \`\`\`
87
+
88
+ Para conflitos, mostre a resolução:
89
+ \`\`\`
90
+ * Resolução de conflito:
91
+ - auth spec: Aplicará add-oauth depois add-jwt (ambas implementadas, ordem cronológica)
92
+ \`\`\`
93
+
94
+ Para changes incompletas, mostre avisos:
95
+ \`\`\`
96
+ Avisos:
97
+ - add-verify-skill: 1 artifact incompleto, 3 tarefas incompletas
98
+ \`\`\`
99
+
100
+ 7. **Confirme a operação em lote**
101
+
102
+ Use a ferramenta **AskUserQuestion** com uma única confirmação:
103
+
104
+ - "Arquivar N changes?" com opções baseadas no status
105
+ - As opções podem incluir:
106
+ - "Arquivar todas as N changes"
107
+ - "Arquivar apenas as N changes prontas (ignorar incompletas)"
108
+ - "Cancelar"
109
+
110
+ Se houver changes incompletas, deixe claro que elas serão arquivadas com avisos.
111
+
112
+ 8. **Execute o arquivamento para cada change confirmada**
113
+
114
+ Processe as changes na ordem determinada (respeitando a resolução de conflitos):
115
+
116
+ a. **Sincronize specs** se delta specs existirem:
117
+ - Use a abordagem openspec-sync-specs (merge inteligente agent-driven)
118
+ - Para conflitos, aplique na ordem resolvida
119
+ - Rastreie se o sync foi feito
120
+
121
+ b. **Realize o arquivamento**:
122
+ \`\`\`bash
123
+ openspec archive <nome>
124
+ \`\`\`
125
+
126
+ Se precisar manipular programaticamente, construa os caminhos com \`path.join()\`
127
+ ou \`path.resolve()\` e use \`fs.rename()\` — evite comandos shell e separadores \`/\` hardcoded.
128
+
129
+ c. **Rastreie o resultado** para cada change:
130
+ - Sucesso: arquivado com sucesso
131
+ - Falha: erro durante o arquivamento (registre o erro)
132
+ - Ignorado: usuário escolheu não arquivar (se aplicável)
133
+
134
+ 9. **Exiba o resumo**
135
+
136
+ Mostre os resultados finais:
137
+
138
+ \`\`\`
139
+ ## Arquivamento em Lote Concluído
140
+
141
+ 3 changes arquivadas:
142
+ - schema-management-cli -> archive/2026-01-19-schema-management-cli/
143
+ - project-config -> archive/2026-01-19-project-config/
144
+ - add-oauth -> archive/2026-01-19-add-oauth/
145
+
146
+ 1 change ignorada:
147
+ - add-verify-skill (usuário escolheu não arquivar incompleta)
148
+
149
+ Resumo de sync de specs:
150
+ - 4 delta specs sincronizados com os specs principais
151
+ - 1 conflito resolvido (auth: aplicadas ambas em ordem cronológica)
152
+ \`\`\`
153
+
154
+ Se houver falhas:
155
+ \`\`\`
156
+ 1 change falhou:
157
+ - some-change: O diretório de arquivo já existe
158
+ \`\`\`
159
+
160
+ **Exemplos de Resolução de Conflitos**
161
+
162
+ Exemplo 1: Apenas uma implementada
163
+ \`\`\`
164
+ Conflito: specs/auth/spec.md tocado por [add-oauth, add-jwt]
165
+
166
+ Verificando add-oauth:
167
+ - Delta adiciona requisito "OAuth Provider Integration"
168
+ - Pesquisando codebase... encontrado src/auth/oauth.ts implementando fluxo OAuth
169
+
170
+ Verificando add-jwt:
171
+ - Delta adiciona requisito "JWT Token Handling"
172
+ - Pesquisando codebase... nenhuma implementação JWT encontrada
173
+
174
+ Resolução: Apenas add-oauth está implementada. Sincronizará apenas os specs de add-oauth.
175
+ \`\`\`
176
+
177
+ Exemplo 2: Ambas implementadas
178
+ \`\`\`
179
+ Conflito: specs/api/spec.md tocado por [add-rest-api, add-graphql]
180
+
181
+ Verificando add-rest-api (criada 2026-01-10):
182
+ - Delta adiciona requisito "REST Endpoints"
183
+ - Pesquisando codebase... encontrado src/api/rest.ts
184
+
185
+ Verificando add-graphql (criada 2026-01-15):
186
+ - Delta adiciona requisito "GraphQL Schema"
187
+ - Pesquisando codebase... encontrado src/api/graphql.ts
188
+
189
+ Resolução: Ambas implementadas. Aplicará specs de add-rest-api primeiro,
190
+ depois specs de add-graphql (ordem cronológica, mais recente tem precedência).
191
+ \`\`\`
192
+
193
+ **Saída em Sucesso**
194
+
195
+ \`\`\`
196
+ ## Arquivamento em Lote Concluído
197
+
198
+ N changes arquivadas:
199
+ - <change-1> -> archive/YYYY-MM-DD-<change-1>/
200
+ - <change-2> -> archive/YYYY-MM-DD-<change-2>/
201
+
202
+ Resumo de sync de specs:
203
+ - N delta specs sincronizados com os specs principais
204
+ - Nenhum conflito (ou: M conflitos resolvidos)
205
+ \`\`\`
206
+
207
+ **Saída em Sucesso Parcial**
208
+
209
+ \`\`\`
210
+ ## Arquivamento em Lote Concluído (parcial)
211
+
212
+ N changes arquivadas:
213
+ - <change-1> -> archive/YYYY-MM-DD-<change-1>/
214
+
215
+ M changes ignoradas:
216
+ - <change-2> (usuário escolheu não arquivar incompleta)
217
+
218
+ K changes falharam:
219
+ - <change-3>: O diretório de arquivo já existe
220
+ \`\`\`
221
+
222
+ **Saída Quando Não Há Changes**
223
+
224
+ \`\`\`
225
+ ## Nenhuma Change para Arquivar
226
+
227
+ Nenhuma change ativa encontrada. Crie uma nova change para começar.
228
+ \`\`\`
229
+
230
+ **Guardrails**
231
+ - Permita qualquer número de changes (1+ está ok, 2+ é o caso típico)
232
+ - Sempre solicite seleção, nunca selecione automaticamente
233
+ - Detecte conflitos de specs cedo e resolva verificando a codebase
234
+ - Quando ambas as changes estiverem implementadas, aplique specs em ordem cronológica
235
+ - Ignore o sync de specs apenas quando a implementação estiver ausente (avise o usuário)
236
+ - Mostre o status claro por change antes de confirmar
237
+ - Use uma única confirmação para todo o lote
238
+ - Rastreie e reporte todos os resultados (sucesso/ignorado/falha)
239
+ - Preservar .openspec.yaml ao mover para o arquivo
240
+ - O diretório de destino do arquivo usa a data atual: YYYY-MM-DD-<nome>
241
241
  - Se o destino do arquivo existir, falhe aquela change mas continue com as outras`,
242
242
  license: 'MIT',
243
243
  compatibility: 'Requer openspec CLI.',
@@ -250,242 +250,242 @@ export function getOpsxBulkArchiveCommandTemplate() {
250
250
  description: 'Arquiva múltiplas changes concluídas de uma vez',
251
251
  category: 'Workflow',
252
252
  tags: ['workflow', 'archive', 'experimental', 'bulk'],
253
- content: `Arquiva múltiplas changes concluídas em uma única operação.
254
-
255
- Esta skill permite arquivar changes em lote, tratando conflitos de specs de forma inteligente verificando a codebase para determinar o que está realmente implementado.
256
-
257
- **Entrada**: Nenhuma necessária (solicita seleção)
258
-
259
- **Passos**
260
-
261
- 1. **Obtenha as changes ativas**
262
-
263
- Execute \`openspec list --json\` para obter todas as changes ativas.
264
-
265
- Se não existirem changes ativas, informe o usuário e pare.
266
-
267
- 2. **Solicite a seleção de changes**
268
-
269
- Use a ferramenta **AskUserQuestion** com multi-seleção para permitir que o usuário escolha as changes:
270
- - Mostre cada change com seu schema
271
- - Inclua uma opção para "Todas as changes"
272
- - Permita qualquer número de seleções (1+ funciona, 2+ é o caso típico)
273
-
274
- **IMPORTANTE**: NÃO selecione automaticamente. Sempre deixe o usuário escolher.
275
-
276
- 3. **Validação em lote - colete o status de todas as changes selecionadas**
277
-
278
- Para cada change selecionada, colete:
279
-
280
- a. **Status dos artifacts** - Execute \`openspec status --change "<nome>" --json\`
281
- - Analise \`schemaName\` e lista de \`artifacts\`
282
- - Note quais artifacts estão \`done\` vs outros estados
283
-
284
- b. **Conclusão de tarefas** - Leia \`openspec/changes/<nome>/tasks.md\`
285
- - Conte \`- [ ]\` (incompleto) vs \`- [x]\` (concluído)
286
- - Se não existir arquivo de tasks, note como "Sem tarefas"
287
-
288
- c. **Delta specs** - Verifique o diretório \`openspec/changes/<nome>/specs/\`
289
- - Liste quais capability specs existem
290
- - Para cada um, extraia os nomes dos requisitos (linhas correspondentes a \`### Requirement: <nome>\`)
291
-
292
- 4. **Detecte conflitos de specs**
293
-
294
- Construa um mapa de \`capability -> [changes que a tocam]\`:
295
-
296
- \`\`\`
297
- auth -> [change-a, change-b] <- CONFLITO (2+ changes)
298
- api -> [change-c] <- OK (apenas 1 change)
299
- \`\`\`
300
-
301
- Um conflito existe quando 2+ changes selecionadas têm delta specs para a mesma capability.
302
-
303
- 5. **Resolva conflitos de forma agentica**
304
-
305
- **Para cada conflito**, investigue a codebase:
306
-
307
- a. **Leia os delta specs** de cada change conflitante para entender o que cada uma pretende adicionar/modificar
308
-
309
- b. **Pesquise a codebase** por evidências de implementação:
310
- - Procure por código implementando requisitos de cada delta spec
311
- - Verifique arquivos, funções ou testes relacionados
312
-
313
- c. **Determine a resolução**:
314
- - Se apenas uma change está realmente implementada -> sincronize os specs dessa
315
- - Se ambas estão implementadas -> aplique em ordem cronológica (mais antiga primeiro, mais recente sobrescreve)
316
- - Se nenhuma está implementada -> ignore o sync de specs, avise o usuário
317
-
318
- d. **Registre a resolução** para cada conflito:
319
- - Quais specs de qual change aplicar
320
- - Em qual ordem (se ambas)
321
- - Racional (o que foi encontrado na codebase)
322
-
323
- 6. **Mostre a tabela de status consolidada**
324
-
325
- Exiba uma tabela resumindo todas as changes:
326
-
327
- \`\`\`
328
- | Change | Artifacts | Tarefas | Specs | Conflitos | Status |
329
- |---------------------|-----------|---------|---------|-----------|--------|
330
- | schema-management | Done | 5/5 | 2 delta | Nenhum | Pronto |
331
- | project-config | Done | 3/3 | 1 delta | Nenhum | Pronto |
332
- | add-oauth | Done | 4/4 | 1 delta | auth (!) | Pronto*|
333
- | add-verify-skill | 1 restante| 2/5 | Nenhum | Nenhum | Aviso |
334
- \`\`\`
335
-
336
- Para conflitos, mostre a resolução:
337
- \`\`\`
338
- * Resolução de conflito:
339
- - auth spec: Aplicará add-oauth depois add-jwt (ambas implementadas, ordem cronológica)
340
- \`\`\`
341
-
342
- Para changes incompletas, mostre avisos:
343
- \`\`\`
344
- Avisos:
345
- - add-verify-skill: 1 artifact incompleto, 3 tarefas incompletas
346
- \`\`\`
347
-
348
- 7. **Confirme a operação em lote**
349
-
350
- Use a ferramenta **AskUserQuestion** com uma única confirmação:
351
-
352
- - "Arquivar N changes?" com opções baseadas no status
353
- - As opções podem incluir:
354
- - "Arquivar todas as N changes"
355
- - "Arquivar apenas as N changes prontas (ignorar incompletas)"
356
- - "Cancelar"
357
-
358
- Se houver changes incompletas, deixe claro que elas serão arquivadas com avisos.
359
-
360
- 8. **Execute o arquivamento para cada change confirmada**
361
-
362
- Processe as changes na ordem determinada (respeitando a resolução de conflitos):
363
-
364
- a. **Sincronize specs** se delta specs existirem:
365
- - Use a abordagem openspec-sync-specs (merge inteligente agent-driven)
366
- - Para conflitos, aplique na ordem resolvida
367
- - Rastreie se o sync foi feito
368
-
369
- b. **Realize o arquivamento**:
370
- \`\`\`bash
371
- openspec archive <nome>
372
- \`\`\`
373
-
374
- Se precisar manipular programaticamente, construa os caminhos com \`path.join()\`
375
- ou \`path.resolve()\` e use \`fs.rename()\` — evite comandos shell e separadores \`/\` hardcoded.
376
-
377
- c. **Rastreie o resultado** para cada change:
378
- - Sucesso: arquivado com sucesso
379
- - Falha: erro durante o arquivamento (registre o erro)
380
- - Ignorado: usuário escolheu não arquivar (se aplicável)
381
-
382
- 9. **Exiba o resumo**
383
-
384
- Mostre os resultados finais:
385
-
386
- \`\`\`
387
- ## Arquivamento em Lote Concluído
388
-
389
- 3 changes arquivadas:
390
- - schema-management-cli -> archive/2026-01-19-schema-management-cli/
391
- - project-config -> archive/2026-01-19-project-config/
392
- - add-oauth -> archive/2026-01-19-add-oauth/
393
-
394
- 1 change ignorada:
395
- - add-verify-skill (usuário escolheu não arquivar incompleta)
396
-
397
- Resumo de sync de specs:
398
- - 4 delta specs sincronizados com os specs principais
399
- - 1 conflito resolvido (auth: aplicadas ambas em ordem cronológica)
400
- \`\`\`
401
-
402
- Se houver falhas:
403
- \`\`\`
404
- 1 change falhou:
405
- - some-change: O diretório de arquivo já existe
406
- \`\`\`
407
-
408
- **Exemplos de Resolução de Conflitos**
409
-
410
- Exemplo 1: Apenas uma implementada
411
- \`\`\`
412
- Conflito: specs/auth/spec.md tocado por [add-oauth, add-jwt]
413
-
414
- Verificando add-oauth:
415
- - Delta adiciona requisito "OAuth Provider Integration"
416
- - Pesquisando codebase... encontrado src/auth/oauth.ts implementando fluxo OAuth
417
-
418
- Verificando add-jwt:
419
- - Delta adiciona requisito "JWT Token Handling"
420
- - Pesquisando codebase... nenhuma implementação JWT encontrada
421
-
422
- Resolução: Apenas add-oauth está implementada. Sincronizará apenas os specs de add-oauth.
423
- \`\`\`
424
-
425
- Exemplo 2: Ambas implementadas
426
- \`\`\`
427
- Conflito: specs/api/spec.md tocado por [add-rest-api, add-graphql]
428
-
429
- Verificando add-rest-api (criada 2026-01-10):
430
- - Delta adiciona requisito "REST Endpoints"
431
- - Pesquisando codebase... encontrado src/api/rest.ts
432
-
433
- Verificando add-graphql (criada 2026-01-15):
434
- - Delta adiciona requisito "GraphQL Schema"
435
- - Pesquisando codebase... encontrado src/api/graphql.ts
436
-
437
- Resolução: Ambas implementadas. Aplicará specs de add-rest-api primeiro,
438
- depois specs de add-graphql (ordem cronológica, mais recente tem precedência).
439
- \`\`\`
440
-
441
- **Saída em Sucesso**
442
-
443
- \`\`\`
444
- ## Arquivamento em Lote Concluído
445
-
446
- N changes arquivadas:
447
- - <change-1> -> archive/YYYY-MM-DD-<change-1>/
448
- - <change-2> -> archive/YYYY-MM-DD-<change-2>/
449
-
450
- Resumo de sync de specs:
451
- - N delta specs sincronizados com os specs principais
452
- - Nenhum conflito (ou: M conflitos resolvidos)
453
- \`\`\`
454
-
455
- **Saída em Sucesso Parcial**
456
-
457
- \`\`\`
458
- ## Arquivamento em Lote Concluído (parcial)
459
-
460
- N changes arquivadas:
461
- - <change-1> -> archive/YYYY-MM-DD-<change-1>/
462
-
463
- M changes ignoradas:
464
- - <change-2> (usuário escolheu não arquivar incompleta)
465
-
466
- K changes falharam:
467
- - <change-3>: O diretório de arquivo já existe
468
- \`\`\`
469
-
470
- **Saída Quando Não Há Changes**
471
-
472
- \`\`\`
473
- ## Nenhuma Change para Arquivar
474
-
475
- Nenhuma change ativa encontrada. Crie uma nova change para começar.
476
- \`\`\`
477
-
478
- **Guardrails**
479
- - Permita qualquer número de changes (1+ está ok, 2+ é o caso típico)
480
- - Sempre solicite seleção, nunca selecione automaticamente
481
- - Detecte conflitos de specs cedo e resolva verificando a codebase
482
- - Quando ambas as changes estiverem implementadas, aplique specs em ordem cronológica
483
- - Ignore o sync de specs apenas quando a implementação estiver ausente (avise o usuário)
484
- - Mostre o status claro por change antes de confirmar
485
- - Use uma única confirmação para todo o lote
486
- - Rastreie e reporte todos os resultados (sucesso/ignorado/falha)
487
- - Preservar .openspec.yaml ao mover para o arquivo
488
- - O diretório de destino do arquivo usa a data atual: YYYY-MM-DD-<nome>
253
+ content: `Arquiva múltiplas changes concluídas em uma única operação.
254
+
255
+ Esta skill permite arquivar changes em lote, tratando conflitos de specs de forma inteligente verificando a codebase para determinar o que está realmente implementado.
256
+
257
+ **Entrada**: Nenhuma necessária (solicita seleção)
258
+
259
+ **Passos**
260
+
261
+ 1. **Obtenha as changes ativas**
262
+
263
+ Execute \`openspec list --json\` para obter todas as changes ativas.
264
+
265
+ Se não existirem changes ativas, informe o usuário e pare.
266
+
267
+ 2. **Solicite a seleção de changes**
268
+
269
+ Use a ferramenta **AskUserQuestion** com multi-seleção para permitir que o usuário escolha as changes:
270
+ - Mostre cada change com seu schema
271
+ - Inclua uma opção para "Todas as changes"
272
+ - Permita qualquer número de seleções (1+ funciona, 2+ é o caso típico)
273
+
274
+ **IMPORTANTE**: NÃO selecione automaticamente. Sempre deixe o usuário escolher.
275
+
276
+ 3. **Validação em lote - colete o status de todas as changes selecionadas**
277
+
278
+ Para cada change selecionada, colete:
279
+
280
+ a. **Status dos artifacts** - Execute \`openspec status --change "<nome>" --json\`
281
+ - Analise \`schemaName\` e lista de \`artifacts\`
282
+ - Note quais artifacts estão \`done\` vs outros estados
283
+
284
+ b. **Conclusão de tarefas** - Leia \`openspec/changes/<nome>/tasks.md\`
285
+ - Conte \`- [ ]\` (incompleto) vs \`- [x]\` (concluído)
286
+ - Se não existir arquivo de tasks, note como "Sem tarefas"
287
+
288
+ c. **Delta specs** - Verifique o diretório \`openspec/changes/<nome>/specs/\`
289
+ - Liste quais capability specs existem
290
+ - Para cada um, extraia os nomes dos requisitos (linhas correspondentes a \`### Requirement: <nome>\`)
291
+
292
+ 4. **Detecte conflitos de specs**
293
+
294
+ Construa um mapa de \`capability -> [changes que a tocam]\`:
295
+
296
+ \`\`\`
297
+ auth -> [change-a, change-b] <- CONFLITO (2+ changes)
298
+ api -> [change-c] <- OK (apenas 1 change)
299
+ \`\`\`
300
+
301
+ Um conflito existe quando 2+ changes selecionadas têm delta specs para a mesma capability.
302
+
303
+ 5. **Resolva conflitos de forma agentica**
304
+
305
+ **Para cada conflito**, investigue a codebase:
306
+
307
+ a. **Leia os delta specs** de cada change conflitante para entender o que cada uma pretende adicionar/modificar
308
+
309
+ b. **Pesquise a codebase** por evidências de implementação:
310
+ - Procure por código implementando requisitos de cada delta spec
311
+ - Verifique arquivos, funções ou testes relacionados
312
+
313
+ c. **Determine a resolução**:
314
+ - Se apenas uma change está realmente implementada -> sincronize os specs dessa
315
+ - Se ambas estão implementadas -> aplique em ordem cronológica (mais antiga primeiro, mais recente sobrescreve)
316
+ - Se nenhuma está implementada -> ignore o sync de specs, avise o usuário
317
+
318
+ d. **Registre a resolução** para cada conflito:
319
+ - Quais specs de qual change aplicar
320
+ - Em qual ordem (se ambas)
321
+ - Racional (o que foi encontrado na codebase)
322
+
323
+ 6. **Mostre a tabela de status consolidada**
324
+
325
+ Exiba uma tabela resumindo todas as changes:
326
+
327
+ \`\`\`
328
+ | Change | Artifacts | Tarefas | Specs | Conflitos | Status |
329
+ |---------------------|-----------|---------|---------|-----------|--------|
330
+ | schema-management | Done | 5/5 | 2 delta | Nenhum | Pronto |
331
+ | project-config | Done | 3/3 | 1 delta | Nenhum | Pronto |
332
+ | add-oauth | Done | 4/4 | 1 delta | auth (!) | Pronto*|
333
+ | add-verify-skill | 1 restante| 2/5 | Nenhum | Nenhum | Aviso |
334
+ \`\`\`
335
+
336
+ Para conflitos, mostre a resolução:
337
+ \`\`\`
338
+ * Resolução de conflito:
339
+ - auth spec: Aplicará add-oauth depois add-jwt (ambas implementadas, ordem cronológica)
340
+ \`\`\`
341
+
342
+ Para changes incompletas, mostre avisos:
343
+ \`\`\`
344
+ Avisos:
345
+ - add-verify-skill: 1 artifact incompleto, 3 tarefas incompletas
346
+ \`\`\`
347
+
348
+ 7. **Confirme a operação em lote**
349
+
350
+ Use a ferramenta **AskUserQuestion** com uma única confirmação:
351
+
352
+ - "Arquivar N changes?" com opções baseadas no status
353
+ - As opções podem incluir:
354
+ - "Arquivar todas as N changes"
355
+ - "Arquivar apenas as N changes prontas (ignorar incompletas)"
356
+ - "Cancelar"
357
+
358
+ Se houver changes incompletas, deixe claro que elas serão arquivadas com avisos.
359
+
360
+ 8. **Execute o arquivamento para cada change confirmada**
361
+
362
+ Processe as changes na ordem determinada (respeitando a resolução de conflitos):
363
+
364
+ a. **Sincronize specs** se delta specs existirem:
365
+ - Use a abordagem openspec-sync-specs (merge inteligente agent-driven)
366
+ - Para conflitos, aplique na ordem resolvida
367
+ - Rastreie se o sync foi feito
368
+
369
+ b. **Realize o arquivamento**:
370
+ \`\`\`bash
371
+ openspec archive <nome>
372
+ \`\`\`
373
+
374
+ Se precisar manipular programaticamente, construa os caminhos com \`path.join()\`
375
+ ou \`path.resolve()\` e use \`fs.rename()\` — evite comandos shell e separadores \`/\` hardcoded.
376
+
377
+ c. **Rastreie o resultado** para cada change:
378
+ - Sucesso: arquivado com sucesso
379
+ - Falha: erro durante o arquivamento (registre o erro)
380
+ - Ignorado: usuário escolheu não arquivar (se aplicável)
381
+
382
+ 9. **Exiba o resumo**
383
+
384
+ Mostre os resultados finais:
385
+
386
+ \`\`\`
387
+ ## Arquivamento em Lote Concluído
388
+
389
+ 3 changes arquivadas:
390
+ - schema-management-cli -> archive/2026-01-19-schema-management-cli/
391
+ - project-config -> archive/2026-01-19-project-config/
392
+ - add-oauth -> archive/2026-01-19-add-oauth/
393
+
394
+ 1 change ignorada:
395
+ - add-verify-skill (usuário escolheu não arquivar incompleta)
396
+
397
+ Resumo de sync de specs:
398
+ - 4 delta specs sincronizados com os specs principais
399
+ - 1 conflito resolvido (auth: aplicadas ambas em ordem cronológica)
400
+ \`\`\`
401
+
402
+ Se houver falhas:
403
+ \`\`\`
404
+ 1 change falhou:
405
+ - some-change: O diretório de arquivo já existe
406
+ \`\`\`
407
+
408
+ **Exemplos de Resolução de Conflitos**
409
+
410
+ Exemplo 1: Apenas uma implementada
411
+ \`\`\`
412
+ Conflito: specs/auth/spec.md tocado por [add-oauth, add-jwt]
413
+
414
+ Verificando add-oauth:
415
+ - Delta adiciona requisito "OAuth Provider Integration"
416
+ - Pesquisando codebase... encontrado src/auth/oauth.ts implementando fluxo OAuth
417
+
418
+ Verificando add-jwt:
419
+ - Delta adiciona requisito "JWT Token Handling"
420
+ - Pesquisando codebase... nenhuma implementação JWT encontrada
421
+
422
+ Resolução: Apenas add-oauth está implementada. Sincronizará apenas os specs de add-oauth.
423
+ \`\`\`
424
+
425
+ Exemplo 2: Ambas implementadas
426
+ \`\`\`
427
+ Conflito: specs/api/spec.md tocado por [add-rest-api, add-graphql]
428
+
429
+ Verificando add-rest-api (criada 2026-01-10):
430
+ - Delta adiciona requisito "REST Endpoints"
431
+ - Pesquisando codebase... encontrado src/api/rest.ts
432
+
433
+ Verificando add-graphql (criada 2026-01-15):
434
+ - Delta adiciona requisito "GraphQL Schema"
435
+ - Pesquisando codebase... encontrado src/api/graphql.ts
436
+
437
+ Resolução: Ambas implementadas. Aplicará specs de add-rest-api primeiro,
438
+ depois specs de add-graphql (ordem cronológica, mais recente tem precedência).
439
+ \`\`\`
440
+
441
+ **Saída em Sucesso**
442
+
443
+ \`\`\`
444
+ ## Arquivamento em Lote Concluído
445
+
446
+ N changes arquivadas:
447
+ - <change-1> -> archive/YYYY-MM-DD-<change-1>/
448
+ - <change-2> -> archive/YYYY-MM-DD-<change-2>/
449
+
450
+ Resumo de sync de specs:
451
+ - N delta specs sincronizados com os specs principais
452
+ - Nenhum conflito (ou: M conflitos resolvidos)
453
+ \`\`\`
454
+
455
+ **Saída em Sucesso Parcial**
456
+
457
+ \`\`\`
458
+ ## Arquivamento em Lote Concluído (parcial)
459
+
460
+ N changes arquivadas:
461
+ - <change-1> -> archive/YYYY-MM-DD-<change-1>/
462
+
463
+ M changes ignoradas:
464
+ - <change-2> (usuário escolheu não arquivar incompleta)
465
+
466
+ K changes falharam:
467
+ - <change-3>: O diretório de arquivo já existe
468
+ \`\`\`
469
+
470
+ **Saída Quando Não Há Changes**
471
+
472
+ \`\`\`
473
+ ## Nenhuma Change para Arquivar
474
+
475
+ Nenhuma change ativa encontrada. Crie uma nova change para começar.
476
+ \`\`\`
477
+
478
+ **Guardrails**
479
+ - Permita qualquer número de changes (1+ está ok, 2+ é o caso típico)
480
+ - Sempre solicite seleção, nunca selecione automaticamente
481
+ - Detecte conflitos de specs cedo e resolva verificando a codebase
482
+ - Quando ambas as changes estiverem implementadas, aplique specs em ordem cronológica
483
+ - Ignore o sync de specs apenas quando a implementação estiver ausente (avise o usuário)
484
+ - Mostre o status claro por change antes de confirmar
485
+ - Use uma única confirmação para todo o lote
486
+ - Rastreie e reporte todos os resultados (sucesso/ignorado/falha)
487
+ - Preservar .openspec.yaml ao mover para o arquivo
488
+ - O diretório de destino do arquivo usa a data atual: YYYY-MM-DD-<nome>
489
489
  - Se o destino do arquivo existir, falhe aquela change mas continue com as outras`
490
490
  };
491
491
  }