opencode-design-system 0.1.0 → 1.0.2
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/README.es.md +244 -0
- package/README.md +120 -127
- package/README.pt-BR.md +244 -0
- package/dist/index.js +212 -141
- package/package.json +3 -1
- package/templates/generate-preview.mjs +38 -68
- package/templates/preview-renderer.d.mts +33 -0
- package/templates/preview-renderer.mjs +199 -0
package/README.pt-BR.md
ADDED
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
# OpenCode Design System
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/opencode-design-system)
|
|
4
|
+
[](https://github.com/BraveOtter/opencode-design-system/blob/main/LICENSE)
|
|
5
|
+
[](https://opencode.ai/v2/docs/)
|
|
6
|
+
|
|
7
|
+
**Um plugin colaborativo do OpenCode v2 para criar e evoluir sistemas de design portáveis, independentes de framework e que agentes de IA conseguem seguir de verdade.**
|
|
8
|
+
|
|
9
|
+
[English](https://github.com/BraveOtter/opencode-design-system/blob/main/README.md) · [Español](https://github.com/BraveOtter/opencode-design-system/blob/main/README.es.md) · [Português (Brasil)](https://github.com/BraveOtter/opencode-design-system/blob/main/README.pt-BR.md)
|
|
10
|
+
|
|
11
|
+
O sistema de design se torna a memória visual duradoura do projeto: **Markdown e JSON** estruturados para tokens semânticos, preferências explícitas, decisões de design, componentes, padrões e especificações de telas. Uma prévia HTML interativa é gerada a partir dessas fontes; ela nunca é uma segunda fonte de verdade.
|
|
12
|
+
|
|
13
|
+
## Por que usar este plugin?
|
|
14
|
+
|
|
15
|
+
- **Comece com uma conversa, não com um questionário.** Esclareça apenas as decisões importantes de identidade que ainda não estão definidas e mantenha explícitas as preferências da pessoa usuária.
|
|
16
|
+
- **Documente o que já existe.** Uma análise limitada e somente leitura ajuda a formalizar uma interface existente sem redesenhá-la silenciosamente.
|
|
17
|
+
- **Forneça o contexto relevante aos agentes.** O carregamento progressivo entrega tokens, componentes, padrões e orientações pertinentes à tarefa de UI, sem despejar o sistema inteiro em cada prompt.
|
|
18
|
+
- **Evolua o sistema de forma coerente.** Registre decisões, dependências de tokens semânticos, componentes e padrões afetados, status e versões do sistema de design.
|
|
19
|
+
- **Evite dependência de framework.** O formato oficial é Markdown e JSON, não React, Vue, Tailwind ou uma prévia gerada.
|
|
20
|
+
- **Proteja os arquivos do projeto.** Análises e verificações são somente leitura. A criação não substitui um diretório `design-system/` existente e preserva o conteúdo de `AGENTS.md` fora do bloco gerenciado pelo plugin.
|
|
21
|
+
|
|
22
|
+
## Requisitos
|
|
23
|
+
|
|
24
|
+
- [OpenCode v2](https://opencode.ai/v2/docs/)
|
|
25
|
+
- Node.js **22.19 ou mais recente**
|
|
26
|
+
|
|
27
|
+
## Instalação
|
|
28
|
+
|
|
29
|
+
### Instale o pacote publicado no npm
|
|
30
|
+
|
|
31
|
+
Instale globalmente pela CLI do OpenCode:
|
|
32
|
+
|
|
33
|
+
```sh
|
|
34
|
+
opencode plugin add opencode-design-system
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Para fixar uma versão específica do npm, substitua `<version>` pela versão desejada:
|
|
38
|
+
|
|
39
|
+
```sh
|
|
40
|
+
opencode plugin add opencode-design-system@<version>
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Ou configure o plugin para um projeto em `opencode.json` ou `opencode.jsonc`:
|
|
44
|
+
|
|
45
|
+
```jsonc
|
|
46
|
+
{
|
|
47
|
+
"$schema": "https://opencode.ai/config.json",
|
|
48
|
+
"plugins": ["opencode-design-system"]
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
O OpenCode carrega os plugins configurados ao iniciar. Se o plugin não aparecer, reinicie o OpenCode ou o serviço do OpenCode.
|
|
53
|
+
|
|
54
|
+
### Instale diretamente do GitHub
|
|
55
|
+
|
|
56
|
+
Para instalar a versão mais recente da branch padrão:
|
|
57
|
+
|
|
58
|
+
```sh
|
|
59
|
+
opencode plugin add github:BraveOtter/opencode-design-system
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Para fixar uma versão marcada do GitHub, substitua `<tag>` pela tag desejada:
|
|
63
|
+
|
|
64
|
+
```sh
|
|
65
|
+
opencode plugin add github:BraveOtter/opencode-design-system#<tag>
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Use um checkout local
|
|
69
|
+
|
|
70
|
+
Clone o repositório, instale as dependências de desenvolvimento e compile:
|
|
71
|
+
|
|
72
|
+
```sh
|
|
73
|
+
npm install
|
|
74
|
+
npm run build
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Depois, aponte o OpenCode para o diretório do checkout (ajuste o caminho relativo ao seu projeto):
|
|
78
|
+
|
|
79
|
+
```jsonc
|
|
80
|
+
{
|
|
81
|
+
"$schema": "https://opencode.ai/config.json",
|
|
82
|
+
"plugins": ["../opencode-design-system"]
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
O repositório também contém um entrypoint local opcional para testes em `plugins/local/index.js`; ele não é carregado automaticamente e não faz parte do pacote npm.
|
|
87
|
+
|
|
88
|
+
## Comece agora
|
|
89
|
+
|
|
90
|
+
Crie um sistema a partir de uma direção visual:
|
|
91
|
+
|
|
92
|
+
```text
|
|
93
|
+
/design-system Um espaço de trabalho tranquilo e compacto, com verdes suaves, superfícies nítidas e sem gradientes.
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Se o projeto já tiver uma interface, peça ao agente para analisá-la primeiro. Ele explicará o que encontrou e perguntará se você quer documentar a identidade existente ou começar do zero antes de criar qualquer arquivo:
|
|
97
|
+
|
|
98
|
+
```text
|
|
99
|
+
/design-system Analise a interface deste app e me ajude a documentar sua linguagem visual atual.
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Para projetar uma tela sem pedir que o plugin implemente código de UI:
|
|
103
|
+
|
|
104
|
+
```text
|
|
105
|
+
/design-screen Gestão de usuários com busca, filtros, convites e estados vazios.
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Também é possível pedir uma especificação de tela em linguagem natural, sem usar `/design-screen`. Quando existe um manifest, o plugin direciona o agente para o `AGENTS.md` do projeto e para as orientações relevantes do sistema de design.
|
|
109
|
+
|
|
110
|
+
## Comandos
|
|
111
|
+
|
|
112
|
+
| Comando | O que faz |
|
|
113
|
+
| --- | --- |
|
|
114
|
+
| `/design-system [ideia]` | Criar um sistema em colaboração ou conversar sobre como documentar uma UI existente. |
|
|
115
|
+
| `/design-system/update [alteração]` | Aplicar uma mudança semântica versionada e identificar a documentação dependente. |
|
|
116
|
+
| `/design-system/preview` | Gerar novamente a prévia interativa a partir dos arquivos estruturados. |
|
|
117
|
+
| `/design-system/check` | Fazer uma verificação heurística e somente leitura de possíveis divergências entre os estilos de UI e os tokens documentados. |
|
|
118
|
+
| `/design-screen [tela]` | Salvar uma especificação de tela pronta para implementação, sem escrever código de UI do app. |
|
|
119
|
+
|
|
120
|
+
O plugin também registra as ferramentas `design_system_create`, `design_system_read`, `design_system_analyze`, `design_system_update`, `design_system_preview`, `design_system_check` e `design_system_screen_spec` para o agente usar quando necessário.
|
|
121
|
+
|
|
122
|
+
## Como funciona
|
|
123
|
+
|
|
124
|
+
### Um fluxo cuidadoso para produtos existentes
|
|
125
|
+
|
|
126
|
+
A ferramenta `design_system_analyze` lê possíveis fontes de UI e estilos, configurações reconhecidas de frameworks e dependências declaradas. Ela resume evidências como variáveis CSS, cores, raios, espaçamento, breakpoints responsivos e possíveis componentes. A análise é limitada, ignora diretórios de dependências e build, não segue links simbólicos e não modifica os arquivos lidos. Os resultados são indícios — não provas de que uma diferença seja um erro.
|
|
127
|
+
|
|
128
|
+
O agente explica as incertezas e pergunta antes de normalizar decisões visuais importantes ou ambíguas. Analisar não significa ter permissão para redesenhar ou editar o código da aplicação.
|
|
129
|
+
|
|
130
|
+
### Proteção dos arquivos do projeto
|
|
131
|
+
|
|
132
|
+
Criar um sistema grava um novo diretório `design-system/` e adiciona ou atualiza somente o bloco gerenciado pelo plugin no `AGENTS.md` da raiz. Se `design-system/` já contiver arquivos, a criação se recusa a substituí-los. As atualizações fazem alterações deliberadas nos artefatos do sistema; as ferramentas integradas de análise e verificação nunca editam os arquivos de UI do app.
|
|
133
|
+
|
|
134
|
+
As instruções gerenciadas do `AGENTS.md` são portáveis: ensinam o OpenCode e outros agentes de programação a encontrar as fontes independentes de framework e carregar apenas o necessário para cada tarefa. O plugin não copia agentes, comandos nem skills para o projeto.
|
|
135
|
+
|
|
136
|
+
### Uma fonte de verdade portável
|
|
137
|
+
|
|
138
|
+
O diretório gerado normalmente tem esta estrutura:
|
|
139
|
+
|
|
140
|
+
```text
|
|
141
|
+
design-system/
|
|
142
|
+
├── README.md
|
|
143
|
+
├── manifest.json
|
|
144
|
+
├── tokens.json
|
|
145
|
+
├── preferences.json
|
|
146
|
+
├── FOUNDATIONS.md
|
|
147
|
+
├── AI-GUIDELINES.md
|
|
148
|
+
├── DECISIONS.md
|
|
149
|
+
├── CHANGELOG.md
|
|
150
|
+
├── schema/
|
|
151
|
+
├── components/
|
|
152
|
+
├── patterns/
|
|
153
|
+
├── screens/
|
|
154
|
+
├── preview/
|
|
155
|
+
│ └── index.html
|
|
156
|
+
└── tools/
|
|
157
|
+
└── generate-preview.mjs
|
|
158
|
+
|
|
159
|
+
AGENTS.md # O conteúdo existente é preservado fora do bloco gerenciado.
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
O manifest indexa temas, versões, arquivos e referências de tokens declaradas por cada componente e padrão. Os sistemas começam em `0.1.0` com a versão de schema `1.0.0`; o status pode ser `draft`, `review` ou `stable`.
|
|
163
|
+
|
|
164
|
+
Os tokens usam caminhos semânticos e podem definir vários temas:
|
|
165
|
+
|
|
166
|
+
```json
|
|
167
|
+
{
|
|
168
|
+
"$schema": "./schema/tokens.schema.json",
|
|
169
|
+
"schemaVersion": "1.0.0",
|
|
170
|
+
"themes": {
|
|
171
|
+
"light": {
|
|
172
|
+
"color": {
|
|
173
|
+
"surface": { "base": "#f6f8f7", "raised": "#ffffff" },
|
|
174
|
+
"text": { "primary": "#17211f", "secondary": "#65726d" },
|
|
175
|
+
"accent": { "primary": "#276f55" }
|
|
176
|
+
},
|
|
177
|
+
"radius": { "control": "6px", "card": "8px" },
|
|
178
|
+
"spacing": { "sm": "8px", "md": "16px" }
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
O vocabulário pode crescer para incluir tipografia, layout, elevação, movimento, breakpoints, foco e estados. Componentes descrevem propósito, variantes, tokens, comportamento, acessibilidade, comportamento responsivo e relações. Padrões documentam composições úteis, como formulários, navegação, filtros, tabelas e estados vazios.
|
|
185
|
+
|
|
186
|
+
### Atualizações significativas e versionadas
|
|
187
|
+
|
|
188
|
+
`/design-system/update` lê o manifest e os documentos relevantes antes de alterar o sistema. Por padrão, uma atualização de token semântico aplica o caminho a todos os temas; use o prefixo `themes.<name>.` para alterar apenas um tema. A atualização registra a justificativa, encontra os dependentes declarados, atualiza a documentação relevante e gera novamente a prévia.
|
|
189
|
+
|
|
190
|
+
O impacto na versão do sistema de design segue estas regras:
|
|
191
|
+
|
|
192
|
+
- **PATCH** — correções compatíveis ou mudanças de documentação.
|
|
193
|
+
- **MINOR** — novas adições compatíveis, como um token, componente ou padrão.
|
|
194
|
+
- **MAJOR** — mudanças que podem quebrar contratos de design existentes.
|
|
195
|
+
|
|
196
|
+
Essas versões pertencem ao sistema de design gerado no projeto, não ao pacote npm do plugin. Por padrão, sistemas atualizados voltam para `draft` para que uma pessoa possa revisá-los.
|
|
197
|
+
|
|
198
|
+
## Prévia interativa
|
|
199
|
+
|
|
200
|
+
`design-system/preview/index.html` é gerado a partir do manifest, dos tokens e das especificações de componentes e padrões. Ele inclui amostras de tokens, exemplos de componentes, troca de tema quando há mais de um e exemplos interativos. Há foco visível para teclado e suporte a `prefers-reduced-motion`.
|
|
201
|
+
|
|
202
|
+
Gere novamente no OpenCode com `/design-system/preview` ou, sem o plugin, a partir da raiz do projeto:
|
|
203
|
+
|
|
204
|
+
```sh
|
|
205
|
+
node design-system/tools/generate-preview.mjs
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
O renderer independente não tem dependências externas. Edite os arquivos estruturados em Markdown e JSON — não o HTML gerado — para alterar o sistema.
|
|
209
|
+
|
|
210
|
+
## Desenvolvimento e testes
|
|
211
|
+
|
|
212
|
+
```sh
|
|
213
|
+
npm install
|
|
214
|
+
npm run typecheck
|
|
215
|
+
npm test
|
|
216
|
+
npm run build
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
Os testes cobrem um fluxo integrado em um projeto temporário, incluindo análise somente leitura, criação e preservação de arquivos do usuário, atualização do bloco gerenciado do `AGENTS.md`, especificações de tela, atualizações de tokens entre temas, prévias, verificações e segurança de caminhos.
|
|
220
|
+
|
|
221
|
+
## Publicar uma versão
|
|
222
|
+
|
|
223
|
+
O workflow do GitHub Actions `Publish to npm` publica quando uma tag `vX.Y.Z` é enviada, depois que as verificações passam e a tag corresponde à versão em `package.json`. Antes da primeira publicação, configure o Trusted Publishing no npm para o repositório `BraveOtter/opencode-design-system` e o workflow `publish.yml`, permitindo também a ação direta `npm publish`. O workflow usa OIDC, então não é necessário armazenar um token de publicação do npm no GitHub; além disso, o npm gera automaticamente a atestação de proveniência para este repositório público.
|
|
224
|
+
|
|
225
|
+
Para atualizar a versão do pacote e enviar o commit e a tag:
|
|
226
|
+
|
|
227
|
+
```sh
|
|
228
|
+
npm version patch # ou minor / major
|
|
229
|
+
git push --follow-tags
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
## Documentação
|
|
233
|
+
|
|
234
|
+
- [Guia de plugins do OpenCode v2](https://opencode.ai/v2/docs/build/plugins)
|
|
235
|
+
- [Configuração de plugins do OpenCode](https://opencode.ai/v2/docs/plugins)
|
|
236
|
+
- [Comandos do OpenCode](https://opencode.ai/v2/docs/commands)
|
|
237
|
+
- [Instruções do OpenCode e `AGENTS.md`](https://opencode.ai/v2/docs/instructions)
|
|
238
|
+
- [Referência da API de plugins](https://opencode.ai/v2/docs/api)
|
|
239
|
+
- [Pacote npm](https://www.npmjs.com/package/opencode-design-system)
|
|
240
|
+
- [Relatar um problema](https://github.com/BraveOtter/opencode-design-system/issues)
|
|
241
|
+
|
|
242
|
+
## Licença
|
|
243
|
+
|
|
244
|
+
Este projeto está licenciado sob a [Licença MIT](https://github.com/BraveOtter/opencode-design-system/blob/main/LICENSE).
|