@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.
- package/LICENSE +22 -22
- package/README.md +210 -210
- package/README.pt-BR.md +212 -212
- package/bin/openspec.js +2 -2
- package/dist/commands/feedback.js +4 -4
- package/dist/commands/schema.js +60 -60
- package/dist/core/artifact-graph/instruction-loader.js +4 -4
- package/dist/core/artifact-graph/schema.js +5 -4
- package/dist/core/command-generation/adapters/amazon-q.js +5 -5
- package/dist/core/command-generation/adapters/antigravity.js +5 -5
- package/dist/core/command-generation/adapters/auggie.js +6 -6
- package/dist/core/command-generation/adapters/bob.js +6 -6
- package/dist/core/command-generation/adapters/claude.js +8 -8
- package/dist/core/command-generation/adapters/cline.js +5 -5
- package/dist/core/command-generation/adapters/codebuddy.js +7 -7
- package/dist/core/command-generation/adapters/codex.js +6 -6
- package/dist/core/command-generation/adapters/continue.js +7 -7
- package/dist/core/command-generation/adapters/costrict.js +6 -6
- package/dist/core/command-generation/adapters/crush.js +8 -8
- package/dist/core/command-generation/adapters/cursor.js +8 -8
- package/dist/core/command-generation/adapters/factory.js +6 -6
- package/dist/core/command-generation/adapters/gemini.js +5 -5
- package/dist/core/command-generation/adapters/github-copilot.js +5 -5
- package/dist/core/command-generation/adapters/iflow.js +8 -8
- package/dist/core/command-generation/adapters/junie.js +5 -5
- package/dist/core/command-generation/adapters/kilocode.js +1 -1
- package/dist/core/command-generation/adapters/kiro.js +5 -5
- package/dist/core/command-generation/adapters/lingma.js +8 -8
- package/dist/core/command-generation/adapters/opencode.js +5 -5
- package/dist/core/command-generation/adapters/pi.js +5 -5
- package/dist/core/command-generation/adapters/qoder.js +8 -8
- package/dist/core/command-generation/adapters/qwen.js +5 -5
- package/dist/core/command-generation/adapters/roocode.js +5 -5
- package/dist/core/command-generation/adapters/windsurf.js +8 -8
- package/dist/core/completions/factory.js +3 -2
- package/dist/core/completions/generators/bash-generator.js +41 -41
- package/dist/core/completions/generators/fish-generator.js +7 -7
- package/dist/core/completions/generators/powershell-generator.js +29 -29
- package/dist/core/completions/generators/zsh-generator.js +33 -33
- package/dist/core/completions/installers/fish-installer.js +13 -12
- package/dist/core/completions/installers/powershell-installer.js +16 -17
- package/dist/core/completions/installers/zsh-installer.js +1 -1
- package/dist/core/completions/templates/bash-templates.js +18 -18
- package/dist/core/completions/templates/fish-templates.js +32 -32
- package/dist/core/completions/templates/powershell-templates.js +19 -19
- package/dist/core/completions/templates/zsh-templates.js +30 -30
- package/dist/core/parsers/change-parser.js +7 -6
- package/dist/core/project-config.js +12 -13
- package/dist/core/shared/skill-generation.js +12 -12
- package/dist/core/specs-apply.js +37 -38
- package/dist/core/templates/workflows/apply-change.js +288 -288
- package/dist/core/templates/workflows/archive-change.js +251 -251
- package/dist/core/templates/workflows/bulk-archive-change.js +472 -472
- package/dist/core/templates/workflows/continue-change.js +212 -212
- package/dist/core/templates/workflows/explore.js +443 -443
- package/dist/core/templates/workflows/feedback.js +97 -97
- package/dist/core/templates/workflows/ff-change.js +178 -178
- package/dist/core/templates/workflows/propose.js +196 -196
- package/dist/core/templates/workflows/sync-specs.js +252 -252
- package/dist/core/templates/workflows/upstream-sync.js +93 -93
- package/dist/core/tools-manager.js +2 -2
- package/dist/messages/index.d.ts +111 -0
- package/dist/messages/index.js +1115 -977
- package/dist/utils/change-metadata.js +8 -7
- package/dist/utils/change-utils.js +12 -11
- package/package.json +82 -84
- package/schemas/spec-driven/schema.yaml +153 -153
- package/schemas/spec-driven/templates/design.md +19 -19
- package/schemas/spec-driven/templates/proposal.md +23 -23
- package/schemas/spec-driven/templates/spec.md +8 -8
- package/schemas/spec-driven/templates/tasks.md +9 -9
- package/scripts/postinstall.js +83 -83
package/README.pt-BR.md
CHANGED
|
@@ -1,212 +1,212 @@
|
|
|
1
|
-
<p align="center">
|
|
2
|
-
<a href="https://github.com/dynamicworks-com-br/BR-OpenSpec">
|
|
3
|
-
<picture>
|
|
4
|
-
<source srcset="assets/openspec_bg.png">
|
|
5
|
-
<img src="assets/openspec_bg.png" alt="OpenSpec logo">
|
|
6
|
-
</picture>
|
|
7
|
-
</a>
|
|
8
|
-
</p>
|
|
9
|
-
|
|
10
|
-
<p align="center">
|
|
11
|
-
<a href="https://github.com/dynamicworks-com-br/BR-OpenSpec/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/dynamicworks-com-br/BR-OpenSpec/actions/workflows/ci.yml/badge.svg" /></a>
|
|
12
|
-
<a href="https://www.npmjs.com/package/@dynamicworks/br-openspec"><img alt="npm version" src="https://img.shields.io/npm/v/@dynamicworks/br-openspec?style=flat-square" /></a>
|
|
13
|
-
<a href="./LICENSE"><img alt="License: MIT" src="https://img.shields.io/badge/License-MIT-blue.svg?style=flat-square" /></a>
|
|
14
|
-
</p>
|
|
15
|
-
|
|
16
|
-
<details>
|
|
17
|
-
<summary><strong>O framework de spec mais querido.</strong></summary>
|
|
18
|
-
|
|
19
|
-
[](https://github.com/dynamicworks-com-br/BR-OpenSpec/stargazers)
|
|
20
|
-
[](https://www.npmjs.com/package/@dynamicworks/br-openspec)
|
|
21
|
-
[](https://github.com/dynamicworks-com-br/BR-OpenSpec/graphs/contributors)
|
|
22
|
-
|
|
23
|
-
</details>
|
|
24
|
-
<p></p>
|
|
25
|
-
Nossa filosofia:
|
|
26
|
-
|
|
27
|
-
> Esta filosofia foi definida pelo projeto original [OpenSpec](https://github.com/tab-tools/openspec) e o BR-OpenSpec fará o possível para honrá-la em cada decisão.
|
|
28
|
-
|
|
29
|
-
```text
|
|
30
|
-
→ fluido, não rígido
|
|
31
|
-
→ iterativo, não em cascata
|
|
32
|
-
→ simples, não complexo
|
|
33
|
-
→ feito para brownfield, não apenas greenfield
|
|
34
|
-
→ escalável de projetos pessoais a empresas
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
> [!TIP]
|
|
38
|
-
> **Novo fluxo de trabalho disponível!** Reconstruímos o BR-OpenSpec com um novo fluxo de trabalho guiado por artefatos.
|
|
39
|
-
>
|
|
40
|
-
> Execute `/opsx:propose "sua ideia"` para começar. → [Saiba mais aqui](docs/pt-BR/opsx.md)
|
|
41
|
-
|
|
42
|
-
<p align="center">
|
|
43
|
-
Siga <a href="https://x.com/0xTab">@0xTab no X</a> para atualizações.
|
|
44
|
-
</p>
|
|
45
|
-
|
|
46
|
-
<!-- TODO: Add GIF demo of /opsx:propose → /opsx:archive workflow -->
|
|
47
|
-
|
|
48
|
-
## Veja em ação
|
|
49
|
-
|
|
50
|
-
```text
|
|
51
|
-
Você: /opsx:propose add-dark-mode
|
|
52
|
-
IA: Criado openspec/changes/add-dark-mode/
|
|
53
|
-
✓ proposal.md — por que estamos fazendo isso, o que está mudando
|
|
54
|
-
✓ specs/ — requisitos e cenários
|
|
55
|
-
✓ design.md — abordagem técnica
|
|
56
|
-
✓ tasks.md — checklist de implementação
|
|
57
|
-
Pronto para implementação!
|
|
58
|
-
|
|
59
|
-
Você: /opsx:apply
|
|
60
|
-
IA: Implementando tarefas...
|
|
61
|
-
✓ 1.1 Adicionar provedor de contexto de tema
|
|
62
|
-
✓ 1.2 Criar componente de alternância
|
|
63
|
-
✓ 2.1 Adicionar variáveis CSS
|
|
64
|
-
✓ 2.2 Conectar localStorage
|
|
65
|
-
Todas as tarefas concluídas!
|
|
66
|
-
|
|
67
|
-
Você: /opsx:archive
|
|
68
|
-
IA: Arquivado em openspec/changes/archive/2025-01-23-add-dark-mode/
|
|
69
|
-
Specs atualizadas. Pronto para a próxima funcionalidade.
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
<details>
|
|
73
|
-
<summary><strong>Dashboard do BR-OpenSpec</strong></summary>
|
|
74
|
-
|
|
75
|
-
<p align="center">
|
|
76
|
-
<img src="assets/openspec_dashboard.png" alt="OpenSpec dashboard preview" width="90%">
|
|
77
|
-
</p>
|
|
78
|
-
|
|
79
|
-
</details>
|
|
80
|
-
|
|
81
|
-
## Início Rápido
|
|
82
|
-
|
|
83
|
-
**Requer Node.js 20.19.0 ou superior.**
|
|
84
|
-
|
|
85
|
-
Instale o BR-OpenSpec globalmente:
|
|
86
|
-
|
|
87
|
-
```bash
|
|
88
|
-
npm install -g @dynamicworks/br-openspec@latest
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
Em seguida, navegue até o diretório do seu projeto e inicialize:
|
|
92
|
-
|
|
93
|
-
```bash
|
|
94
|
-
cd your-project
|
|
95
|
-
openspec init
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
Agora diga à sua IA: `/opsx:propose <o-que-você-quer-construir>`
|
|
99
|
-
|
|
100
|
-
Se você quiser o fluxo de trabalho expandido (`/opsx:new`, `/opsx:continue`, `/opsx:ff`, `/opsx:verify`, `/opsx:sync`, `/opsx:bulk-archive`, `/opsx:onboard`), selecione-o com `openspec config profile` e aplique com `openspec update`.
|
|
101
|
-
|
|
102
|
-
> [!NOTE]
|
|
103
|
-
> Não tem certeza se sua ferramenta é suportada? [Veja a lista completa](docs/pt-BR/supported-tools.md) – suportamos mais de 25 ferramentas e crescendo.
|
|
104
|
-
>
|
|
105
|
-
> Também funciona com pnpm, yarn, bun e nix. [Veja as opções de instalação](docs/pt-BR/installation.md).
|
|
106
|
-
|
|
107
|
-
## Documentação
|
|
108
|
-
|
|
109
|
-
→ **[Primeiros Passos](docs/pt-BR/getting-started.md)**: primeiros passos<br>
|
|
110
|
-
→ **[Fluxos de Trabalho](docs/pt-BR/workflows.md)**: combinações e padrões<br>
|
|
111
|
-
→ **[Comandos](docs/pt-BR/commands.md)**: slash commands e skills<br>
|
|
112
|
-
→ **[CLI](docs/pt-BR/cli.md)**: referência do terminal<br>
|
|
113
|
-
→ **[Ferramentas Suportadas](docs/pt-BR/supported-tools.md)**: integrações e caminhos de instalação<br>
|
|
114
|
-
→ **[Conceitos](docs/pt-BR/concepts.md)**: como tudo se encaixa<br>
|
|
115
|
-
→ **[Multi-Idioma](docs/pt-BR/multi-language.md)**: suporte a múltiplos idiomas<br>
|
|
116
|
-
→ **[Personalização](docs/pt-BR/customization.md)**: faça do seu jeito
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
## Por que o BR-OpenSpec?
|
|
120
|
-
|
|
121
|
-
Assistentes de codificação com IA são poderosos, mas imprevisíveis quando os requisitos vivem apenas no histórico do chat. O BR-OpenSpec adiciona uma camada leve de especificação para que você concorde sobre o que construir antes de qualquer código ser escrito.
|
|
122
|
-
|
|
123
|
-
> **Por que este fork?** O BR-OpenSpec é mantido em **Português Brasileiro** e destina-se a quem implementa e mantém projetos com domínios de negócio primariamente em pt-BR, bem como a quem não tem o inglês como língua nativa. Ter specs, propostas e tarefas no idioma do time e do negócio reduz o risco de interpretações erradas e acelera o alinhamento entre humanos e IA.
|
|
124
|
-
|
|
125
|
-
- **Alinhe antes de construir** — humano e IA alinham as specs antes de o código ser escrito
|
|
126
|
-
- **Mantenha-se organizado** — cada mudança tem sua própria pasta com proposta, specs, design e tarefas
|
|
127
|
-
- **Trabalhe com fluidez** — atualize qualquer artefato a qualquer momento, sem fases rígidas
|
|
128
|
-
- **Use suas ferramentas** — funciona com mais de 20 assistentes de IA via slash commands
|
|
129
|
-
|
|
130
|
-
### Como nos comparamos
|
|
131
|
-
|
|
132
|
-
**vs. [Spec Kit](https://github.com/github/spec-kit)** (GitHub) — Completo, mas pesado. Fases rígidas, muito Markdown, configuração em Python. O BR-OpenSpec é mais leve e permite iterar livremente.
|
|
133
|
-
|
|
134
|
-
**vs. [Kiro](https://kiro.dev)** (AWS) — Poderoso, mas você fica preso à IDE deles e limitado aos modelos Claude. O BR-OpenSpec funciona com as ferramentas que você já usa.
|
|
135
|
-
|
|
136
|
-
**vs. nada** — Codificação com IA sem specs significa prompts vagos e resultados imprevisíveis. O BR-OpenSpec traz previsibilidade sem a burocracia.
|
|
137
|
-
|
|
138
|
-
## Atualizando o BR-OpenSpec
|
|
139
|
-
|
|
140
|
-
**Atualize o pacote**
|
|
141
|
-
|
|
142
|
-
```bash
|
|
143
|
-
npm install -g @dynamicworks/br-openspec@latest
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
**Atualize as instruções do agente**
|
|
147
|
-
|
|
148
|
-
Execute dentro de cada projeto para regenerar a orientação da IA e garantir que os slash commands mais recentes estejam ativos:
|
|
149
|
-
|
|
150
|
-
```bash
|
|
151
|
-
openspec update
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
**Gerenciar configurações de IDE/Code Agent**
|
|
155
|
-
|
|
156
|
-
Adicione ou remova integrações de IDE e Code Agent suportadas sem precisar executar `init` novamente:
|
|
157
|
-
|
|
158
|
-
```bash
|
|
159
|
-
openspec tools # lista interativa
|
|
160
|
-
openspec tools --add claude,cursor
|
|
161
|
-
openspec tools --remove windsurf
|
|
162
|
-
```
|
|
163
|
-
|
|
164
|
-
## Notas de Uso
|
|
165
|
-
|
|
166
|
-
**Seleção de modelo**: O BR-OpenSpec funciona melhor com modelos de alto raciocínio. Recomendamos Opus 4.5 e GPT 5.2 tanto para planejamento quanto para implementação.
|
|
167
|
-
|
|
168
|
-
**Higiene de contexto**: O BR-OpenSpec se beneficia de uma janela de contexto limpa. Limpe seu contexto antes de iniciar a implementação e mantenha uma boa higiene de contexto ao longo da sua sessão.
|
|
169
|
-
|
|
170
|
-
## Contribuindo
|
|
171
|
-
|
|
172
|
-
**Pequenas correções** — Correções de bugs, erros de digitação e melhorias menores podem ser enviadas diretamente como PRs.
|
|
173
|
-
|
|
174
|
-
**Mudanças maiores** — Para novas funcionalidades, refatorações significativas ou mudanças arquiteturais, envie primeiro uma proposta de mudança do BR-OpenSpec para que possamos alinhar a intenção e os objetivos antes de começar a implementação.
|
|
175
|
-
|
|
176
|
-
Ao escrever propostas, tenha em mente a filosofia do BR-OpenSpec: servimos a uma grande variedade de usuários em diferentes agentes de codificação, modelos e casos de uso. As mudanças devem funcionar bem para todos.
|
|
177
|
-
|
|
178
|
-
**Código gerado por IA é bem-vindo** — desde que tenha sido testado e verificado. PRs contendo código gerado por IA devem mencionar o agente de codificação e o modelo usado (ex.: "Gerado com Claude Code usando claude-opus-4-5-20251101").
|
|
179
|
-
|
|
180
|
-
### Desenvolvimento
|
|
181
|
-
|
|
182
|
-
- Instalar dependências: `pnpm install`
|
|
183
|
-
- Compilar: `pnpm run build`
|
|
184
|
-
- Testar: `pnpm test`
|
|
185
|
-
- Desenvolver CLI localmente: `pnpm run dev` ou `pnpm run dev:cli`
|
|
186
|
-
- Commits convencionais (uma linha): `type(scope): subject`
|
|
187
|
-
|
|
188
|
-
## Outros
|
|
189
|
-
|
|
190
|
-
<details>
|
|
191
|
-
<summary><strong>Telemetria</strong></summary>
|
|
192
|
-
|
|
193
|
-
O BR-OpenSpec coleta estatísticas de uso anônimas.
|
|
194
|
-
|
|
195
|
-
Coletamos apenas nomes de comandos e versão para entender padrões de uso. Sem argumentos, caminhos, conteúdo ou PII. Desativado automaticamente em CI.
|
|
196
|
-
|
|
197
|
-
**Desativar:** `export OPENSPEC_TELEMETRY=0` ou `export DO_NOT_TRACK=1`
|
|
198
|
-
|
|
199
|
-
</details>
|
|
200
|
-
|
|
201
|
-
<details>
|
|
202
|
-
<summary><strong>Mantenedores e Consultores</strong></summary>
|
|
203
|
-
|
|
204
|
-
Veja [MAINTAINERS.md](MAINTAINERS.md) para a lista de mantenedores principais e consultores que ajudam a guiar o projeto.
|
|
205
|
-
|
|
206
|
-
</details>
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
## Licença
|
|
211
|
-
|
|
212
|
-
MIT
|
|
1
|
+
<p align="center">
|
|
2
|
+
<a href="https://github.com/dynamicworks-com-br/BR-OpenSpec">
|
|
3
|
+
<picture>
|
|
4
|
+
<source srcset="assets/openspec_bg.png">
|
|
5
|
+
<img src="assets/openspec_bg.png" alt="OpenSpec logo">
|
|
6
|
+
</picture>
|
|
7
|
+
</a>
|
|
8
|
+
</p>
|
|
9
|
+
|
|
10
|
+
<p align="center">
|
|
11
|
+
<a href="https://github.com/dynamicworks-com-br/BR-OpenSpec/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/dynamicworks-com-br/BR-OpenSpec/actions/workflows/ci.yml/badge.svg" /></a>
|
|
12
|
+
<a href="https://www.npmjs.com/package/@dynamicworks/br-openspec"><img alt="npm version" src="https://img.shields.io/npm/v/@dynamicworks/br-openspec?style=flat-square" /></a>
|
|
13
|
+
<a href="./LICENSE"><img alt="License: MIT" src="https://img.shields.io/badge/License-MIT-blue.svg?style=flat-square" /></a>
|
|
14
|
+
</p>
|
|
15
|
+
|
|
16
|
+
<details>
|
|
17
|
+
<summary><strong>O framework de spec mais querido.</strong></summary>
|
|
18
|
+
|
|
19
|
+
[](https://github.com/dynamicworks-com-br/BR-OpenSpec/stargazers)
|
|
20
|
+
[](https://www.npmjs.com/package/@dynamicworks/br-openspec)
|
|
21
|
+
[](https://github.com/dynamicworks-com-br/BR-OpenSpec/graphs/contributors)
|
|
22
|
+
|
|
23
|
+
</details>
|
|
24
|
+
<p></p>
|
|
25
|
+
Nossa filosofia:
|
|
26
|
+
|
|
27
|
+
> Esta filosofia foi definida pelo projeto original [OpenSpec](https://github.com/tab-tools/openspec) e o BR-OpenSpec fará o possível para honrá-la em cada decisão.
|
|
28
|
+
|
|
29
|
+
```text
|
|
30
|
+
→ fluido, não rígido
|
|
31
|
+
→ iterativo, não em cascata
|
|
32
|
+
→ simples, não complexo
|
|
33
|
+
→ feito para brownfield, não apenas greenfield
|
|
34
|
+
→ escalável de projetos pessoais a empresas
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
> [!TIP]
|
|
38
|
+
> **Novo fluxo de trabalho disponível!** Reconstruímos o BR-OpenSpec com um novo fluxo de trabalho guiado por artefatos.
|
|
39
|
+
>
|
|
40
|
+
> Execute `/opsx:propose "sua ideia"` para começar. → [Saiba mais aqui](docs/pt-BR/opsx.md)
|
|
41
|
+
|
|
42
|
+
<p align="center">
|
|
43
|
+
Siga <a href="https://x.com/0xTab">@0xTab no X</a> para atualizações.
|
|
44
|
+
</p>
|
|
45
|
+
|
|
46
|
+
<!-- TODO: Add GIF demo of /opsx:propose → /opsx:archive workflow -->
|
|
47
|
+
|
|
48
|
+
## Veja em ação
|
|
49
|
+
|
|
50
|
+
```text
|
|
51
|
+
Você: /opsx:propose add-dark-mode
|
|
52
|
+
IA: Criado openspec/changes/add-dark-mode/
|
|
53
|
+
✓ proposal.md — por que estamos fazendo isso, o que está mudando
|
|
54
|
+
✓ specs/ — requisitos e cenários
|
|
55
|
+
✓ design.md — abordagem técnica
|
|
56
|
+
✓ tasks.md — checklist de implementação
|
|
57
|
+
Pronto para implementação!
|
|
58
|
+
|
|
59
|
+
Você: /opsx:apply
|
|
60
|
+
IA: Implementando tarefas...
|
|
61
|
+
✓ 1.1 Adicionar provedor de contexto de tema
|
|
62
|
+
✓ 1.2 Criar componente de alternância
|
|
63
|
+
✓ 2.1 Adicionar variáveis CSS
|
|
64
|
+
✓ 2.2 Conectar localStorage
|
|
65
|
+
Todas as tarefas concluídas!
|
|
66
|
+
|
|
67
|
+
Você: /opsx:archive
|
|
68
|
+
IA: Arquivado em openspec/changes/archive/2025-01-23-add-dark-mode/
|
|
69
|
+
Specs atualizadas. Pronto para a próxima funcionalidade.
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
<details>
|
|
73
|
+
<summary><strong>Dashboard do BR-OpenSpec</strong></summary>
|
|
74
|
+
|
|
75
|
+
<p align="center">
|
|
76
|
+
<img src="assets/openspec_dashboard.png" alt="OpenSpec dashboard preview" width="90%">
|
|
77
|
+
</p>
|
|
78
|
+
|
|
79
|
+
</details>
|
|
80
|
+
|
|
81
|
+
## Início Rápido
|
|
82
|
+
|
|
83
|
+
**Requer Node.js 20.19.0 ou superior.**
|
|
84
|
+
|
|
85
|
+
Instale o BR-OpenSpec globalmente:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
npm install -g @dynamicworks/br-openspec@latest
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Em seguida, navegue até o diretório do seu projeto e inicialize:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
cd your-project
|
|
95
|
+
openspec init
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Agora diga à sua IA: `/opsx:propose <o-que-você-quer-construir>`
|
|
99
|
+
|
|
100
|
+
Se você quiser o fluxo de trabalho expandido (`/opsx:new`, `/opsx:continue`, `/opsx:ff`, `/opsx:verify`, `/opsx:sync`, `/opsx:bulk-archive`, `/opsx:onboard`), selecione-o com `openspec config profile` e aplique com `openspec update`.
|
|
101
|
+
|
|
102
|
+
> [!NOTE]
|
|
103
|
+
> Não tem certeza se sua ferramenta é suportada? [Veja a lista completa](docs/pt-BR/supported-tools.md) – suportamos mais de 25 ferramentas e crescendo.
|
|
104
|
+
>
|
|
105
|
+
> Também funciona com pnpm, yarn, bun e nix. [Veja as opções de instalação](docs/pt-BR/installation.md).
|
|
106
|
+
|
|
107
|
+
## Documentação
|
|
108
|
+
|
|
109
|
+
→ **[Primeiros Passos](docs/pt-BR/getting-started.md)**: primeiros passos<br>
|
|
110
|
+
→ **[Fluxos de Trabalho](docs/pt-BR/workflows.md)**: combinações e padrões<br>
|
|
111
|
+
→ **[Comandos](docs/pt-BR/commands.md)**: slash commands e skills<br>
|
|
112
|
+
→ **[CLI](docs/pt-BR/cli.md)**: referência do terminal<br>
|
|
113
|
+
→ **[Ferramentas Suportadas](docs/pt-BR/supported-tools.md)**: integrações e caminhos de instalação<br>
|
|
114
|
+
→ **[Conceitos](docs/pt-BR/concepts.md)**: como tudo se encaixa<br>
|
|
115
|
+
→ **[Multi-Idioma](docs/pt-BR/multi-language.md)**: suporte a múltiplos idiomas<br>
|
|
116
|
+
→ **[Personalização](docs/pt-BR/customization.md)**: faça do seu jeito
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
## Por que o BR-OpenSpec?
|
|
120
|
+
|
|
121
|
+
Assistentes de codificação com IA são poderosos, mas imprevisíveis quando os requisitos vivem apenas no histórico do chat. O BR-OpenSpec adiciona uma camada leve de especificação para que você concorde sobre o que construir antes de qualquer código ser escrito.
|
|
122
|
+
|
|
123
|
+
> **Por que este fork?** O BR-OpenSpec é mantido em **Português Brasileiro** e destina-se a quem implementa e mantém projetos com domínios de negócio primariamente em pt-BR, bem como a quem não tem o inglês como língua nativa. Ter specs, propostas e tarefas no idioma do time e do negócio reduz o risco de interpretações erradas e acelera o alinhamento entre humanos e IA.
|
|
124
|
+
|
|
125
|
+
- **Alinhe antes de construir** — humano e IA alinham as specs antes de o código ser escrito
|
|
126
|
+
- **Mantenha-se organizado** — cada mudança tem sua própria pasta com proposta, specs, design e tarefas
|
|
127
|
+
- **Trabalhe com fluidez** — atualize qualquer artefato a qualquer momento, sem fases rígidas
|
|
128
|
+
- **Use suas ferramentas** — funciona com mais de 20 assistentes de IA via slash commands
|
|
129
|
+
|
|
130
|
+
### Como nos comparamos
|
|
131
|
+
|
|
132
|
+
**vs. [Spec Kit](https://github.com/github/spec-kit)** (GitHub) — Completo, mas pesado. Fases rígidas, muito Markdown, configuração em Python. O BR-OpenSpec é mais leve e permite iterar livremente.
|
|
133
|
+
|
|
134
|
+
**vs. [Kiro](https://kiro.dev)** (AWS) — Poderoso, mas você fica preso à IDE deles e limitado aos modelos Claude. O BR-OpenSpec funciona com as ferramentas que você já usa.
|
|
135
|
+
|
|
136
|
+
**vs. nada** — Codificação com IA sem specs significa prompts vagos e resultados imprevisíveis. O BR-OpenSpec traz previsibilidade sem a burocracia.
|
|
137
|
+
|
|
138
|
+
## Atualizando o BR-OpenSpec
|
|
139
|
+
|
|
140
|
+
**Atualize o pacote**
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
npm install -g @dynamicworks/br-openspec@latest
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
**Atualize as instruções do agente**
|
|
147
|
+
|
|
148
|
+
Execute dentro de cada projeto para regenerar a orientação da IA e garantir que os slash commands mais recentes estejam ativos:
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
openspec update
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
**Gerenciar configurações de IDE/Code Agent**
|
|
155
|
+
|
|
156
|
+
Adicione ou remova integrações de IDE e Code Agent suportadas sem precisar executar `init` novamente:
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
openspec tools # lista interativa
|
|
160
|
+
openspec tools --add claude,cursor
|
|
161
|
+
openspec tools --remove windsurf
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## Notas de Uso
|
|
165
|
+
|
|
166
|
+
**Seleção de modelo**: O BR-OpenSpec funciona melhor com modelos de alto raciocínio. Recomendamos Opus 4.5 e GPT 5.2 tanto para planejamento quanto para implementação.
|
|
167
|
+
|
|
168
|
+
**Higiene de contexto**: O BR-OpenSpec se beneficia de uma janela de contexto limpa. Limpe seu contexto antes de iniciar a implementação e mantenha uma boa higiene de contexto ao longo da sua sessão.
|
|
169
|
+
|
|
170
|
+
## Contribuindo
|
|
171
|
+
|
|
172
|
+
**Pequenas correções** — Correções de bugs, erros de digitação e melhorias menores podem ser enviadas diretamente como PRs.
|
|
173
|
+
|
|
174
|
+
**Mudanças maiores** — Para novas funcionalidades, refatorações significativas ou mudanças arquiteturais, envie primeiro uma proposta de mudança do BR-OpenSpec para que possamos alinhar a intenção e os objetivos antes de começar a implementação.
|
|
175
|
+
|
|
176
|
+
Ao escrever propostas, tenha em mente a filosofia do BR-OpenSpec: servimos a uma grande variedade de usuários em diferentes agentes de codificação, modelos e casos de uso. As mudanças devem funcionar bem para todos.
|
|
177
|
+
|
|
178
|
+
**Código gerado por IA é bem-vindo** — desde que tenha sido testado e verificado. PRs contendo código gerado por IA devem mencionar o agente de codificação e o modelo usado (ex.: "Gerado com Claude Code usando claude-opus-4-5-20251101").
|
|
179
|
+
|
|
180
|
+
### Desenvolvimento
|
|
181
|
+
|
|
182
|
+
- Instalar dependências: `pnpm install`
|
|
183
|
+
- Compilar: `pnpm run build`
|
|
184
|
+
- Testar: `pnpm test`
|
|
185
|
+
- Desenvolver CLI localmente: `pnpm run dev` ou `pnpm run dev:cli`
|
|
186
|
+
- Commits convencionais (uma linha): `type(scope): subject`
|
|
187
|
+
|
|
188
|
+
## Outros
|
|
189
|
+
|
|
190
|
+
<details>
|
|
191
|
+
<summary><strong>Telemetria</strong></summary>
|
|
192
|
+
|
|
193
|
+
O BR-OpenSpec coleta estatísticas de uso anônimas.
|
|
194
|
+
|
|
195
|
+
Coletamos apenas nomes de comandos e versão para entender padrões de uso. Sem argumentos, caminhos, conteúdo ou PII. Desativado automaticamente em CI.
|
|
196
|
+
|
|
197
|
+
**Desativar:** `export OPENSPEC_TELEMETRY=0` ou `export DO_NOT_TRACK=1`
|
|
198
|
+
|
|
199
|
+
</details>
|
|
200
|
+
|
|
201
|
+
<details>
|
|
202
|
+
<summary><strong>Mantenedores e Consultores</strong></summary>
|
|
203
|
+
|
|
204
|
+
Veja [MAINTAINERS.md](MAINTAINERS.md) para a lista de mantenedores principais e consultores que ajudam a guiar o projeto.
|
|
205
|
+
|
|
206
|
+
</details>
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
## Licença
|
|
211
|
+
|
|
212
|
+
MIT
|
package/bin/openspec.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
3
|
import '../dist/cli/index.js';
|
|
@@ -60,10 +60,10 @@ function generateMetadata() {
|
|
|
60
60
|
const version = getVersion();
|
|
61
61
|
const platform = getPlatform();
|
|
62
62
|
const timestamp = getTimestamp();
|
|
63
|
-
return `---
|
|
64
|
-
${FEEDBACK_MESSAGES.submittedVia}
|
|
65
|
-
${FEEDBACK_MESSAGES.versionLabel(version)}
|
|
66
|
-
${FEEDBACK_MESSAGES.platformLabel(platform)}
|
|
63
|
+
return `---
|
|
64
|
+
${FEEDBACK_MESSAGES.submittedVia}
|
|
65
|
+
${FEEDBACK_MESSAGES.versionLabel(version)}
|
|
66
|
+
${FEEDBACK_MESSAGES.platformLabel(platform)}
|
|
67
67
|
${FEEDBACK_MESSAGES.timestampLabel(timestamp)}`;
|
|
68
68
|
}
|
|
69
69
|
/**
|
package/dist/commands/schema.js
CHANGED
|
@@ -795,74 +795,74 @@ export function registerSchemaCommand(program) {
|
|
|
795
795
|
function createDefaultTemplate(artifactId) {
|
|
796
796
|
switch (artifactId) {
|
|
797
797
|
case 'proposal':
|
|
798
|
-
return `## Why
|
|
799
|
-
|
|
800
|
-
<!-- Describe the motivation for this change -->
|
|
801
|
-
|
|
802
|
-
## What Changes
|
|
803
|
-
|
|
804
|
-
<!-- Describe what will change -->
|
|
805
|
-
|
|
806
|
-
## Capabilities
|
|
807
|
-
|
|
808
|
-
### New Capabilities
|
|
809
|
-
<!-- List new capabilities -->
|
|
810
|
-
|
|
811
|
-
### Modified Capabilities
|
|
812
|
-
<!-- List modified capabilities -->
|
|
813
|
-
|
|
814
|
-
## Impact
|
|
815
|
-
|
|
816
|
-
<!-- Describe the impact on existing functionality -->
|
|
798
|
+
return `## Why
|
|
799
|
+
|
|
800
|
+
<!-- Describe the motivation for this change -->
|
|
801
|
+
|
|
802
|
+
## What Changes
|
|
803
|
+
|
|
804
|
+
<!-- Describe what will change -->
|
|
805
|
+
|
|
806
|
+
## Capabilities
|
|
807
|
+
|
|
808
|
+
### New Capabilities
|
|
809
|
+
<!-- List new capabilities -->
|
|
810
|
+
|
|
811
|
+
### Modified Capabilities
|
|
812
|
+
<!-- List modified capabilities -->
|
|
813
|
+
|
|
814
|
+
## Impact
|
|
815
|
+
|
|
816
|
+
<!-- Describe the impact on existing functionality -->
|
|
817
817
|
`;
|
|
818
818
|
case 'specs':
|
|
819
|
-
return `## ADDED Requirements
|
|
820
|
-
|
|
821
|
-
### Requirement: Example requirement
|
|
822
|
-
|
|
823
|
-
Description of the requirement.
|
|
824
|
-
|
|
825
|
-
#### Scenario: Example scenario
|
|
826
|
-
- **WHEN** some condition
|
|
827
|
-
- **THEN** some outcome
|
|
819
|
+
return `## ADDED Requirements
|
|
820
|
+
|
|
821
|
+
### Requirement: Example requirement
|
|
822
|
+
|
|
823
|
+
Description of the requirement.
|
|
824
|
+
|
|
825
|
+
#### Scenario: Example scenario
|
|
826
|
+
- **WHEN** some condition
|
|
827
|
+
- **THEN** some outcome
|
|
828
828
|
`;
|
|
829
829
|
case 'design':
|
|
830
|
-
return `## Context
|
|
831
|
-
|
|
832
|
-
<!-- Background and context -->
|
|
833
|
-
|
|
834
|
-
## Goals / Non-Goals
|
|
835
|
-
|
|
836
|
-
**Goals:**
|
|
837
|
-
<!-- List goals -->
|
|
838
|
-
|
|
839
|
-
**Non-Goals:**
|
|
840
|
-
<!-- List non-goals -->
|
|
841
|
-
|
|
842
|
-
## Decisions
|
|
843
|
-
|
|
844
|
-
### 1. Decision Name
|
|
845
|
-
|
|
846
|
-
Description and rationale.
|
|
847
|
-
|
|
848
|
-
**Alternatives considered:**
|
|
849
|
-
- Alternative 1: Rejected because...
|
|
850
|
-
|
|
851
|
-
## Risks / Trade-offs
|
|
852
|
-
|
|
853
|
-
<!-- List risks and trade-offs -->
|
|
830
|
+
return `## Context
|
|
831
|
+
|
|
832
|
+
<!-- Background and context -->
|
|
833
|
+
|
|
834
|
+
## Goals / Non-Goals
|
|
835
|
+
|
|
836
|
+
**Goals:**
|
|
837
|
+
<!-- List goals -->
|
|
838
|
+
|
|
839
|
+
**Non-Goals:**
|
|
840
|
+
<!-- List non-goals -->
|
|
841
|
+
|
|
842
|
+
## Decisions
|
|
843
|
+
|
|
844
|
+
### 1. Decision Name
|
|
845
|
+
|
|
846
|
+
Description and rationale.
|
|
847
|
+
|
|
848
|
+
**Alternatives considered:**
|
|
849
|
+
- Alternative 1: Rejected because...
|
|
850
|
+
|
|
851
|
+
## Risks / Trade-offs
|
|
852
|
+
|
|
853
|
+
<!-- List risks and trade-offs -->
|
|
854
854
|
`;
|
|
855
855
|
case 'tasks':
|
|
856
|
-
return `## Implementation Tasks
|
|
857
|
-
|
|
858
|
-
- [ ] Task 1
|
|
859
|
-
- [ ] Task 2
|
|
860
|
-
- [ ] Task 3
|
|
856
|
+
return `## Implementation Tasks
|
|
857
|
+
|
|
858
|
+
- [ ] Task 1
|
|
859
|
+
- [ ] Task 2
|
|
860
|
+
- [ ] Task 3
|
|
861
861
|
`;
|
|
862
862
|
default:
|
|
863
|
-
return `## ${artifactId}
|
|
864
|
-
|
|
865
|
-
<!-- Add content here -->
|
|
863
|
+
return `## ${artifactId}
|
|
864
|
+
|
|
865
|
+
<!-- Add content here -->
|
|
866
866
|
`;
|
|
867
867
|
}
|
|
868
868
|
}
|
|
@@ -4,7 +4,7 @@ import { getSchemaDir, resolveSchema } from './resolver.js';
|
|
|
4
4
|
import { ArtifactGraph } from './graph.js';
|
|
5
5
|
import { detectCompleted } from './state.js';
|
|
6
6
|
import { resolveSchemaForChange } from '../../utils/change-metadata.js';
|
|
7
|
-
import { WORKFLOW_MESSAGES } from '../../messages/index.js';
|
|
7
|
+
import { WORKFLOW_MESSAGES, ARTIFACT_GRAPH_MESSAGES } from '../../messages/index.js';
|
|
8
8
|
import { FileSystemUtils } from '../../utils/file-system.js';
|
|
9
9
|
import { readProjectConfig, validateConfigRules } from '../project-config.js';
|
|
10
10
|
// Session-level cache for validation warnings (avoid repeating same warnings)
|
|
@@ -36,7 +36,7 @@ export function loadTemplate(schemaName, templatePath, projectRoot) {
|
|
|
36
36
|
}
|
|
37
37
|
const templatePathOnDisk = path.join(schemaDir, 'templates', templatePath);
|
|
38
38
|
if (!fs.existsSync(templatePathOnDisk)) {
|
|
39
|
-
throw new TemplateLoadError(
|
|
39
|
+
throw new TemplateLoadError(ARTIFACT_GRAPH_MESSAGES.templateNotFound(templatePathOnDisk), templatePathOnDisk);
|
|
40
40
|
}
|
|
41
41
|
const fullPath = FileSystemUtils.canonicalizeExistingPath(templatePathOnDisk);
|
|
42
42
|
try {
|
|
@@ -44,7 +44,7 @@ export function loadTemplate(schemaName, templatePath, projectRoot) {
|
|
|
44
44
|
}
|
|
45
45
|
catch (err) {
|
|
46
46
|
const ioError = err instanceof Error ? err : new Error(String(err));
|
|
47
|
-
throw new TemplateLoadError(
|
|
47
|
+
throw new TemplateLoadError(ARTIFACT_GRAPH_MESSAGES.failedToReadTemplate(ioError.message), fullPath);
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
/**
|
|
@@ -93,7 +93,7 @@ export function loadChangeContext(projectRoot, changeName, schemaName) {
|
|
|
93
93
|
export function generateInstructions(context, artifactId, projectRoot) {
|
|
94
94
|
const artifact = context.graph.getArtifact(artifactId);
|
|
95
95
|
if (!artifact) {
|
|
96
|
-
throw new Error(
|
|
96
|
+
throw new Error(ARTIFACT_GRAPH_MESSAGES.artifactNotFound(artifactId, context.schemaName));
|
|
97
97
|
}
|
|
98
98
|
const templateContent = loadTemplate(context.schemaName, artifact.template, context.projectRoot);
|
|
99
99
|
const dependencies = getDependencyInfo(artifact, context.graph, context.completed);
|