opencode-design-system 0.1.0
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 +17 -0
- package/README.md +251 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +1588 -0
- package/package.json +52 -0
- package/templates/generate-preview.mjs +101 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 OpenCode Design System contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
package/README.md
ADDED
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
# OpenCode Design System
|
|
2
|
+
|
|
3
|
+
Plugin de **OpenCode v2** para crear, importar, mantener y aplicar Design Systems colaborativos, neutrales respecto al framework y legibles por agentes de IA.
|
|
4
|
+
|
|
5
|
+
El Design System persistente es la memoria visual del proyecto: **Markdown + JSON**, con manifest indexado, preferencias explícitas, historial de decisiones y especificaciones de componentes/patrones. La preview es salida generada, no una fuente paralela.
|
|
6
|
+
|
|
7
|
+
## Instalar
|
|
8
|
+
|
|
9
|
+
### Desde GitHub
|
|
10
|
+
|
|
11
|
+
Con OpenCode v2, instala directamente desde el repositorio público:
|
|
12
|
+
|
|
13
|
+
```sh
|
|
14
|
+
opencode plugin add github:BraveOtter/opencode-design-system
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Para fijar la versión inicial cuando esté publicada, usa `opencode plugin add github:BraveOtter/opencode-design-system#v0.1.0`.
|
|
18
|
+
|
|
19
|
+
### Paquete publicado
|
|
20
|
+
|
|
21
|
+
Añade el paquete a `plugins` en `opencode.json` o `opencode.jsonc`:
|
|
22
|
+
|
|
23
|
+
```jsonc
|
|
24
|
+
{
|
|
25
|
+
"$schema": "https://opencode.ai/config.json",
|
|
26
|
+
"plugins": ["opencode-design-system"]
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
OpenCode cargará el plugin al iniciar el proyecto. Los commands y tools se registran mediante la API de plugin v2. El paquete apunta a `@opencode/plugin` y `Plugin.define`; no utiliza la API de plugins v1.
|
|
31
|
+
|
|
32
|
+
### Desarrollo local o fork
|
|
33
|
+
|
|
34
|
+
Requiere Node.js **22.19 o posterior** para el desarrollo local y el renderer portable.
|
|
35
|
+
|
|
36
|
+
```sh
|
|
37
|
+
npm install
|
|
38
|
+
npm run build
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Este checkout incluye `opencode.jsonc` para cargar `./plugins/local`, un entrypoint local que reexporta `dist/index.js`. Después de compilar, inicia OpenCode desde la raíz del repositorio para probar los comandos. Ese entrypoint de desarrollo no forma parte del paquete publicado.
|
|
42
|
+
|
|
43
|
+
Apunta OpenCode al directorio del paquete:
|
|
44
|
+
|
|
45
|
+
```jsonc
|
|
46
|
+
{
|
|
47
|
+
"$schema": "https://opencode.ai/config.json",
|
|
48
|
+
"plugins": ["./tools/opencode-design-system"]
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
También se puede referenciar una ruta absoluta o un directorio local siguiendo las formas de `plugins` documentadas por OpenCode.
|
|
53
|
+
|
|
54
|
+
## Commands
|
|
55
|
+
|
|
56
|
+
| Command | Función |
|
|
57
|
+
| --- | --- |
|
|
58
|
+
| `/design-system [idea]` | Conversar para crear un sistema desde cero o analizar la interfaz existente antes de proponer su formalización. |
|
|
59
|
+
| `/design-system/update [cambio]` | Interpretar un cambio, encontrar tokens y documentos dependientes, actualizar versiones/decisiones y regenerar preview. |
|
|
60
|
+
| `/design-system/preview` | Regenerar la preview interactiva a partir de las fuentes estructuradas. |
|
|
61
|
+
| `/design-system/check` | Inspección heurística y de solo lectura de estilos frente a los tokens. |
|
|
62
|
+
| `/design-screen [pantalla]` | Diseñar y guardar una especificación de pantalla sin implementar código UI. |
|
|
63
|
+
|
|
64
|
+
Ejemplos:
|
|
65
|
+
|
|
66
|
+
```text
|
|
67
|
+
/design-system Quiero una interfaz sobria, compacta, sin degradados y con verdes apagados.
|
|
68
|
+
/design-system/update Los botones y las cards se ven demasiado redondeados.
|
|
69
|
+
/design-screen Administración de usuarios con búsqueda, filtros e invitaciones.
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
También se puede pedir una pantalla en lenguaje natural, sin command. El plugin añade una instrucción breve al contexto del agente si existe `design-system/manifest.json`; el `AGENTS.md` generado conserva esta convención aunque el plugin no esté instalado.
|
|
73
|
+
|
|
74
|
+
### Conversación e identidad visual
|
|
75
|
+
|
|
76
|
+
El agente pregunta solamente por decisiones de identidad que falten: producto/audiencia, referencias, tono, preferencias de color/superficie, densidad, tipografía, plataformas, motion y accesibilidad cuando sean relevantes. Puede explicar alternativas con lenguaje sencillo. No convierte el proceso en un formulario ni toma decisiones importantes en nombre del usuario.
|
|
77
|
+
|
|
78
|
+
Las preferencias explícitas se guardan en `preferences.json`, `DECISIONS.md` y `AI-GUIDELINES.md`. El modelo puede explicar consecuencias y accesibilidad, pero no cambiar una preferencia sin consultarlo. Analizar una app existente es de solo lectura y no concede permiso para rediseñar o modificar código de aplicación.
|
|
79
|
+
|
|
80
|
+
## Arquitectura del plugin
|
|
81
|
+
|
|
82
|
+
Implementación V2 basada en las APIs oficiales actuales:
|
|
83
|
+
|
|
84
|
+
- `Plugin.define({ id, setup })` para el entrypoint del paquete.
|
|
85
|
+
- `ctx.command.transform` para commands.
|
|
86
|
+
- `ctx.tool.transform` para herramientas de creación, lectura progresiva, análisis, actualización, preview, comprobación y especificaciones de pantalla.
|
|
87
|
+
- `ctx.skill.transform` para anunciar la Skill de uso del sistema.
|
|
88
|
+
- `ctx.session.hook("context", ...)` para indicar a los agentes que usen la Skill cuando ya exista un manifest, sin inyectar todos los archivos.
|
|
89
|
+
- Markdown estándar bajo `.opencode/agents`, `.opencode/commands` y `.opencode/skills` para hacer que los artefactos sobrevivan a la desinstalación.
|
|
90
|
+
|
|
91
|
+
No se ejecutan migraciones de componentes de la aplicación. El análisis del proyecto está acotado y solo lee archivos candidatos de UI/estilos, configuraciones conocidas y dependencias declaradas.
|
|
92
|
+
|
|
93
|
+
### Agentes
|
|
94
|
+
|
|
95
|
+
Al crear el sistema se generan agentes V2 estándar:
|
|
96
|
+
|
|
97
|
+
- `design-system-designer`: diseñador UI/UX, arquitecto, especialista en accesibilidad e interlocutor para decisiones de identidad.
|
|
98
|
+
- `screen-designer`: genera especificaciones de pantalla y mantiene separado el diseño de su implementación.
|
|
99
|
+
|
|
100
|
+
Los agentes son subagentes Markdown descubiertos por OpenCode, no dependen de un formato privado del plugin. Los commands incluyen las instrucciones de trabajo necesarias desde la primera sesión, antes de que esos archivos existan.
|
|
101
|
+
|
|
102
|
+
### Skill
|
|
103
|
+
|
|
104
|
+
La Skill `design-system` dirige a cualquier agente a:
|
|
105
|
+
|
|
106
|
+
1. Comprobar el manifest.
|
|
107
|
+
2. Leer las reglas y preferencias.
|
|
108
|
+
3. Cargar solo los tokens, componentes y patterns ligados a la tarea.
|
|
109
|
+
4. Respetar decisiones explícitas y documentar cambios reutilizables.
|
|
110
|
+
5. Tratar una especificación de pantalla como un artefacto distinto del código.
|
|
111
|
+
|
|
112
|
+
No carga permanentemente todas las tablas, componentes y patrones en el contexto. El `manifest.json` sirve como índice para recuperación progresiva.
|
|
113
|
+
|
|
114
|
+
## Formato generado
|
|
115
|
+
|
|
116
|
+
```text
|
|
117
|
+
design-system/
|
|
118
|
+
├── README.md
|
|
119
|
+
├── manifest.json
|
|
120
|
+
├── tokens.json
|
|
121
|
+
├── preferences.json
|
|
122
|
+
├── FOUNDATIONS.md
|
|
123
|
+
├── AI-GUIDELINES.md
|
|
124
|
+
├── DECISIONS.md
|
|
125
|
+
├── CHANGELOG.md
|
|
126
|
+
├── schema/
|
|
127
|
+
│ ├── manifest.schema.json
|
|
128
|
+
│ └── tokens.schema.json
|
|
129
|
+
├── components/
|
|
130
|
+
│ ├── button.md
|
|
131
|
+
│ └── ...
|
|
132
|
+
├── patterns/
|
|
133
|
+
│ ├── form.md
|
|
134
|
+
│ └── ...
|
|
135
|
+
├── screens/
|
|
136
|
+
│ └── user-management.md
|
|
137
|
+
├── preview/
|
|
138
|
+
│ └── index.html
|
|
139
|
+
└── tools/
|
|
140
|
+
└── generate-preview.mjs
|
|
141
|
+
|
|
142
|
+
AGENTS.md # Bloque administrado, conserva el contenido previo
|
|
143
|
+
.opencode/
|
|
144
|
+
├── agents/
|
|
145
|
+
│ ├── design-system-designer.md
|
|
146
|
+
│ └── screen-designer.md
|
|
147
|
+
├── commands/
|
|
148
|
+
│ ├── design-system.md
|
|
149
|
+
│ ├── design-system/update.md
|
|
150
|
+
│ ├── design-system/preview.md
|
|
151
|
+
│ ├── design-system/check.md
|
|
152
|
+
│ └── design-screen.md
|
|
153
|
+
└── skills/
|
|
154
|
+
└── design-system/SKILL.md
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
`manifest.json` incluye versiones, estado, temas, archivos y referencias de tokens por componente/pattern. Los estados son `draft`, `review` y `stable`. El schema base usa `schemaVersion: "1.0.0"`; la versión del sistema comienza en `0.1.0`.
|
|
158
|
+
|
|
159
|
+
Los tokens son framework-neutrales y semánticos, por tema:
|
|
160
|
+
|
|
161
|
+
```json
|
|
162
|
+
{
|
|
163
|
+
"$schema": "./schema/tokens.schema.json",
|
|
164
|
+
"schemaVersion": "1.0.0",
|
|
165
|
+
"themes": {
|
|
166
|
+
"light": {
|
|
167
|
+
"color": {
|
|
168
|
+
"surface": { "base": "#f6f8f7", "raised": "#ffffff" },
|
|
169
|
+
"text": { "primary": "#17211f", "secondary": "#65726d" },
|
|
170
|
+
"accent": { "primary": "#276f55" }
|
|
171
|
+
},
|
|
172
|
+
"radius": { "control": "6px", "card": "8px" },
|
|
173
|
+
"spacing": { "sm": "8px", "md": "16px" }
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
El vocabulario puede ampliarse con tipografía, jerarquías, grids, layout, bordes, elevación, iconografía, motion, breakpoints, foco, estados y otros temas. Se recomiendan rutas semánticas como `color.text.secondary`; cualquier consumidor puede generar CSS variables, temas de framework u otros adaptadores sin que estos definan el sistema.
|
|
180
|
+
|
|
181
|
+
### Componentes y patterns
|
|
182
|
+
|
|
183
|
+
Cada archivo de componente documenta propósito, variantes, tamaños, tokens, estados, comportamiento, accesibilidad, responsive, cuándo usarlo/evitarlo y relaciones. Se crean los componentes útiles para el producto y se pueden ampliar más adelante; no se obliga a generar un catálogo innecesario.
|
|
184
|
+
|
|
185
|
+
Los patterns describen composiciones como formularios, navegación, búsquedas, filtros, acciones destructivas, tablas, errores, estados vacíos y onboarding. Sus referencias a componentes y tokens permiten mostrar dependencias al actualizar el sistema.
|
|
186
|
+
|
|
187
|
+
## Crear desde una aplicación existente
|
|
188
|
+
|
|
189
|
+
El agente usa la herramienta `design_system_analyze`, que:
|
|
190
|
+
|
|
191
|
+
- Busca CSS/SCSS/LESS, vistas y componentes habituales, y reconoce frameworks/librerías desde `package.json`.
|
|
192
|
+
- Resume variables CSS, colores, radios, valores de spacing y candidatos de componentes.
|
|
193
|
+
- Marca radios cercanos o muchas decisiones visuales como posibles inconsistencias, no como errores confirmados.
|
|
194
|
+
- Limita directorios, número y tamaño de archivos; omite dependencias, builds y artefactos generados.
|
|
195
|
+
- No escribe en los archivos analizados.
|
|
196
|
+
|
|
197
|
+
El agente explica las evidencias, incertidumbres y variaciones detectadas. Pregunta antes de normalizar decisiones ambiguas; conserva por defecto la identidad reconocible y distingue formalizar/normalizar de rediseñar. Solo después de la conversación crea `design-system/`.
|
|
198
|
+
|
|
199
|
+
## Modificar, dependencias y versiones
|
|
200
|
+
|
|
201
|
+
`/design-system/update` lee el manifest, tokens y documentos relacionados antes de escoger un cambio. Las actualizaciones de token solo aceptan rutas existentes; por defecto una ruta semántica se actualiza coherentemente en todos los temas. Se puede limitar a un tema con una ruta como `themes.dark.color.accent.primary`.
|
|
202
|
+
|
|
203
|
+
El plugin resuelve dependencias a partir de la lista de tokens declarada en cada componente/pattern. Registra el razonamiento en `DECISIONS.md`, actualiza `preferences.json`/`FOUNDATIONS.md` si corresponde, actualiza reglas, manifest, README y changelog, y regenera la preview. Clasificación inicial:
|
|
204
|
+
|
|
205
|
+
- **PATCH** (`patch`): corrección o documentación sin cambio compatible de contrato.
|
|
206
|
+
- **MINOR** (`minor`): nuevo comportamiento/token compatible.
|
|
207
|
+
- **MAJOR** (`major`): cambio con posibilidad de alterar interfaces existentes.
|
|
208
|
+
|
|
209
|
+
La expansión puede incorporar nuevos tokens (un valor por tema), componentes y patterns mediante la misma operación, sin reemplazar archivos existentes. Añadir un token/componente/pattern escala a `MINOR` como mínimo. El agente elige el impacto y comunica los consumidores afectados. Los cambios dejan el sistema en `draft` de forma predeterminada, hasta que el usuario lo revise.
|
|
210
|
+
|
|
211
|
+
## Preview interactiva
|
|
212
|
+
|
|
213
|
+
`preview/index.html` se genera desde tokens y especificaciones. Incluye navegación responsive, swatches y referencias de tokens, ejemplos de componentes, temas disponibles, tabs, switch, modal, toast, estados de inputs y tabla. La implementación respeta `prefers-reduced-motion` y ofrece foco visible.
|
|
214
|
+
|
|
215
|
+
La preview embebida se regenera con `/design-system/preview`. Para trabajar **sin el plugin**, el archivo incluido puede ejecutarse desde la raíz del proyecto:
|
|
216
|
+
|
|
217
|
+
```sh
|
|
218
|
+
node design-system/tools/generate-preview.mjs
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
Este renderer no tiene dependencias externas; lee el manifest, los tokens y documentos actuales.
|
|
222
|
+
|
|
223
|
+
## Diseñar e implementar pantallas
|
|
224
|
+
|
|
225
|
+
`/design-screen` crea únicamente `design-system/screens/<nombre>.md`. La especificación incluye propósito, layout, jerarquía, componentes/tokens, contenido/datos, estados/interacciones, responsive y accesibilidad. Otro agente de programación puede implementar ese brief después.
|
|
226
|
+
|
|
227
|
+
Cuando un agente de código recibe una solicitud UI ordinaria, `AGENTS.md` y la Skill del proyecto le indican cómo detectar el sistema y cargar solo lo relevante. Este mecanismo también funciona sin el plugin: los tokens y documentación no dependen de React, Vue, Tailwind u OpenCode.
|
|
228
|
+
|
|
229
|
+
## Comprobación
|
|
230
|
+
|
|
231
|
+
`/design-system/check` realiza una exploración de solo lectura, compara literales de color, radios y algunas alturas de controles con los valores encontrados en tokens y presenta candidatos con ruta de archivo. Es heurística: informa la evidencia en lugar de cambiar estilos automáticamente. La arquitectura puede ampliarse con adaptadores y reglas específicas de cada framework sin cambiar el formato base.
|
|
232
|
+
|
|
233
|
+
## Desarrollo
|
|
234
|
+
|
|
235
|
+
```sh
|
|
236
|
+
npm install
|
|
237
|
+
npm run typecheck
|
|
238
|
+
npm test
|
|
239
|
+
npm run build
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
Los tests ejercitan un flujo integrado en un proyecto temporal: análisis de UI existente, creación y preservación de archivos, instrucción `AGENTS.md`, creación de especificación, propagación de token entre temas, dependencias, preview, checks y protección de rutas.
|
|
243
|
+
|
|
244
|
+
## Documentación oficial de OpenCode v2
|
|
245
|
+
|
|
246
|
+
- [Plugins](https://opencode.ai/v2/docs/build/plugins)
|
|
247
|
+
- [Commands](https://opencode.ai/v2/docs/commands)
|
|
248
|
+
- [Agents](https://opencode.ai/v2/docs/agents)
|
|
249
|
+
- [Skills](https://opencode.ai/v2/docs/skills)
|
|
250
|
+
- [AGENTS.md / instructions](https://opencode.ai/v2/docs/instructions)
|
|
251
|
+
- [Plugin API reference](https://opencode.ai/v2/docs/api)
|