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.
@@ -0,0 +1,244 @@
1
+ # OpenCode Design System
2
+
3
+ [![versão no npm](https://img.shields.io/npm/v/opencode-design-system)](https://www.npmjs.com/package/opencode-design-system)
4
+ [![Licença MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/BraveOtter/opencode-design-system/blob/main/LICENSE)
5
+ [![OpenCode v2](https://img.shields.io/badge/OpenCode-v2-6f42c1)](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).