zugzbot 1.0.38 → 1.0.39

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.
@@ -66,7 +66,7 @@ Eres el Programador de Código (sdd-coder) del arnés SDD. Tu trabajo es codific
66
66
  </bootstrap_obligatorio>
67
67
 
68
68
  <consolidar_instalaciones>
69
- Si necesitas paquetes adicionales o componentes shadcn, instálalos agrupados en un solo comando de terminal o llamada de herramienta (`npm install a b` o `npx shadcn@2.1.8 add x y --yes`). No los instales uno a uno.
69
+ Si necesitas paquetes adicionales o componentes shadcn, instálalos agrupados en un solo comando de terminal o llamada de herramienta (`npm install a b` o `npx shadcn@latest add x y --yes`). No los instales uno a uno.
70
70
  </consolidar_instalaciones>
71
71
 
72
72
  <tests_y_contratos>
@@ -85,7 +85,12 @@ Eres el Programador de Código (sdd-coder) del arnés SDD. Tu trabajo es codific
85
85
  <coding_cheatsheet>
86
86
  - **Linear/Brand tokens**: Los tokens se inyectan en `globals.css` vía CSS vars. PROHIBIDO reescribir `globals.css` desde cero o usar colores Hex manuales en componentes. Usa variables como `var(--color-brand-primary)`.
87
87
  - **Estado**: Declara estados centralizados con `useState` en el componente padre (`owner` o `AppLayout`) y pásalos como props. Evita declarar estados compartidos en hijos.
88
- - **Instalación de Shadcn Segura**: La herramienta de shadcn a utilizar en F2 es ESTRICTAMENTE `npx shadcn@2.1.8 add <componentes>`. TIENES PROHIBIDO USAR `@latest` (ej. `npx shadcn@latest add`). Usar `@latest` rompe la aplicación instalando dependencias en pre-release de base-ui. Usa siempre `npx shadcn@2.1.8`.
88
+ - **Instalación de Shadcn Segura**: La herramienta de shadcn a utilizar en F2 es `npx shadcn@latest add <componentes>` (o simplemente `npx shadcn add`). Utiliza siempre la última versión final estable de Shadcn para garantizar la compatibilidad con Tailwind v4 y permitir la descarga de bloques complejos de la comunidad y del registro oficial (como dashboards, sidebars y formularios modernos) sin errores 404.
89
+ - **Next.js & Tailwind v4 Style Resolution**: En Tailwind v4, si `globals.css` importa `@import "shadcn/tailwind.css";`, debes asegurarte de instalar el paquete ejecutable `shadcn` ejecutando `npm install shadcn` o el compilador fallará.
90
+ - **Next.js Auth Redirects robustas (Evitar bucles/parpadeo)**:
91
+ - Usa siempre `router.replace("/")` en lugar de `push` para redirecciones de login.
92
+ - Para evitar efectos concurrentes o solapados en Strict Mode, usa un `useRef(false)` en redirecciones asíncronas para dispararlas solo una vez.
93
+ - En layouts protegidos por SSR, para evitar que parpadeen spinners o modales antes de hidratar la sesión en cliente, declara un estado `mounted` (`useEffect` asignando `setMounted(true)`) y retorna `null` si `!mounted`.
89
94
  - **Iconos**: Importa desde `lucide-react`. Usa `data-icon="inline-start"` para espaciados automáticos.
90
95
  </coding_cheatsheet>
91
96
 
@@ -46,6 +46,10 @@ Eres el Validador de Contratos (sdd-tester) del flujo SDD. Tu trabajo es ejecuta
46
46
  - **Minimizar Lecturas/Búsquedas**: No realices búsquedas ciegas (`glob` repetidos) ni lecturas innecesarias. Guíate estrictamente por la lista `files_affected` provista en tu sección del brief activo para conocer qué archivos de producción se han modificado y dónde están ubicados los tests correspondientes.
47
47
  - **Memoria de Errores**: Tienes PROHIBIDO llamar a `brain_read_memory`. Toda la información histórica sobre fallos técnicos ha sido inyectada directamente en `.opencode/active-brief.md`. Consúltala allí.
48
48
  - **Restricción de Archivos**: Solo se te permite modificar/escribir archivos en la fase 'F3_VERIFICATION', y únicamente archivos que contengan 'test', 'spec', 'tests/' o '.openspec/' en su ruta. Tienes estrictamente prohibido modificar el código fuente de producción.
49
+ - **Extensión JSX en Tests**: Todo archivo de pruebas que contenga JSX, monte componentes o simule iconos (mocks de Lucide con `<svg>`) **DEBE** tener la extensión `.tsx` obligatoriamente (nunca `.ts` ya que esbuild/Vitest fallarán en la compilación).
50
+ - **Selectores de Formularios Robustos**: Evita usar `getByLabelText(/password/i)` si hay botones con aria-label que coincidan de forma ambigua. Prefiere placeholders como `getByPlaceholderText()` o expresiones regulares con anclajes estrictos como `/^Password$/` para aislar el input deseado.
51
+ - **Ocultamiento CSS vs Presencia DOM**: Para barras de navegación o sidebars colapsados por CSS (`hidden`, `w-0`), evita usar `.not.toBeInTheDocument()`. El texto sigue existiendo físicamente en el DOM, por lo que el test fallará. Verifica clases CSS de visibilidad directamente o usa `.not.toBeVisible()` de `@testing-library/jest-dom`.
52
+ - **Mocks Dinámicos de Hooks**: Mocks de hooks que controlan toggles (como `useTheme` de `next-themes`) deben usar getters locales reactivos en la definición del mock, o las pruebas sucesivas de clics de toggle reportarán el mismo valor (el mock estático no retiene el cambio).
49
53
  - **PROHIBIDO EL USO DE `todowrite`**: Tienes ESTRICTAMENTE PROHIBIDO usar la herramienta `todowrite`. El seguimiento de progreso está centralizado en el Orquestador. No la invoques en absoluto.
50
54
  - **Batcheo Extremo de ESCRITURA/EDICIÓN (CRÍTICO)**: NO modifiques ni crees archivos de tests uno a uno para luego correr el test runner cada vez en un bucle lento. Debes usar BATCH EXTREMO. Si tienes que modificar o crear 5 archivos de pruebas, debes enviar en TU MISMA respuesta todas las llamadas a `write` o `edit` necesarias al mismo tiempo (concurrencia). Solo después de enviar todos los cambios corres `vitest run` o `pytest`.
51
55
  </constraints>
@@ -49,8 +49,19 @@ Cualquier desarrollo de interfaz de usuario (Dashboards, Landings, Formularios,
49
49
  - **Tooltips:** Todo botón que contenga únicamente un icono de acción debe estar envuelto en un componente `Tooltip` con su descripción respectiva.
50
50
  - **Skeletons y Empty States:** Las vistas de carga deben contar con animaciones de `Skeleton` fluidas. Las listas o tablas vacías deben presentar un `Empty State` visual y explicativo agradable con iconos y un botón de acción alternativo, nunca una página o cuadro en blanco.
51
51
 
52
- ## 6. Mockups Visuales y Validación Temprana de Layout (F0/F1)
52
+ ## 6. Estándar de Robustez en Autenticación, Ruteo y SSR (Next.js)
53
+ Para evitar bucles de redirección ("redirect loops") y pantallas parpadeantes (flickers/blinking) tras iniciar sesión:
54
+ - **Evitar Race Conditions en Redirecciones:** En el formulario de login, usa siempre `router.replace("/")` en lugar de `push` tras un login exitoso para evitar empujar estados duplicados al historial.
55
+ - **Evitar useEffects Cruzados Activos:** Si usas un guard de redirección en `LoginPage` o similar para usuarios ya autenticados, utiliza un `useRef(false)` para controlar que la redirección asíncrona solo se dispare una vez y no se encadene con re-renderizados concurrentes de React.
56
+ - **Evitar Flash de Carga SSR en Layouts:** Para layouts o guards protegidos, nunca asumas estados por defecto que pinten elementos cargando (spinners) durante el servidor. Comprueba si el componente está montado (`mounted === true`) antes de evaluar la sesión en el cliente y renderizar el contenido. Retorna `null` antes de montar para evitar desajustes de hidratación (hydration mismatch).
57
+
58
+ ## 7. Mockups Visuales y Validación Temprana de Layout (F0/F1)
53
59
  Para optimizar el diseño, evitar cambios de arquitectura estructurales a mitad del desarrollo (como rediseñar pestañas a layouts de sidebar lateral) y garantizar alineación inmediata con las expectativas del usuario:
54
60
  - **Propuesta de Layout Visual:** Durante la transición de F0 a F1, el `@sdd-spec-writer` **debe** proponer un mockup textual o diagrama de cajas ASCII detallando la distribución estructural de la pantalla (Layout general, barras laterales sticky, contenedores de contenido responsivos y anchos de pantalla recomendados, ej. `max-w-6xl` vs `w-full`).
55
61
  - **Ancho y Densidad Modernos:** Por defecto, los layouts complejos deben evitar contenedores angostos restrictivos como `max-w-3xl` para maximizar el aprovechamiento de pantallas de escritorio modernas mediante rejillas responsivas (`grid grid-cols-1 md:grid-cols-X gap-6`).
56
62
  - **Aprobación Temprana:** El orquestador presentará esta propuesta visual al usuario en la fase F1. Una vez aprobada la disposición espacial y la estructura de navegación local (ej: sidebar split vs horizontal tabs), el `@sdd-coder` la ejecutará exactamente como se acordó, previniendo loops redundantes de maquetación en fases tardías.
63
+
64
+ ## 8. Abstracción y Prohibición de Parchar Código en F3/Orquestador
65
+ Para mantener la limpieza y disciplina en la ventana de contexto de la sesión:
66
+ - **Orquestador No-Coder:** El orquestador principal (`sdd-orchestrator`) tiene estrictamente prohibido usar herramientas de edición (`edit` o `write`) para modificar código de producción o archivos de test.
67
+ - **Rollback Disciplinado:** Si en la fase `F3_VERIFICATION` el linter o los tests reportan errores, el orquestador **debe** transicionar el estado a `F2_IMPLEMENTATION` mediante `sdd_core_set_phase` y re-invocar al subagente experto (`sdd-coder`) para que realice la corrección cleanly. No se permiten parches rápidos a mitad de fase de test.
@@ -95,11 +95,35 @@ Cada fase tiene un **gate explícito** (HIL del usuario) antes de transicionar a
95
95
  **NO HAGAS**: Redactar el contrato en F1 listando únicamente archivos de forma abstracta sin definir o validar la geometría estructural y distribución de la UI (ej. si se requieren Sidebars locales de navegación vs pestañas horizontales planas), asumiendo anchos angostos y estáticos (como `max-w-3xl`) o rompiendo el soporte de modo oscuro con colores absolutos (`bg-white`).
96
96
  **HAZ**: El spec-writer debe proponer proactivamente en F1 un bosquejo textual o diagrama ASCII de la interfaz y validar con el usuario un layout responsivo amplio (`max-w-6xl` o superior). Además, el coder debe implementar soporte semántico dinámico de temas de entrada (sin colores duros) y sincronizar colores SVG/gráficos dinámicamente con el tema actual.
97
97
 
98
+ ### Trampa 14: Guardar archivos de tests que contienen JSX con extensión `.ts` en vez de `.tsx`
99
+ **NO HAGAS**: Usar la extensión `.ts` para archivos de tests que mockean iconos de lucide o renderizan primitivas de HTML o JSX (esbuild/Vitest fallarán en la compilación con errores como `Expected ">" but found "data"`).
100
+ **HAZ**: Toda suite de pruebas unitarias o de integración que monte componentes o contenga JSX debe grabarse con la extensión `.tsx` obligatoriamente.
101
+
102
+ ### Trampa 15: Selectores de Testing Library ambiguos para campos comunes
103
+ **NO HAGAS**: Usar queries amplias y con insensibilidad a mayúsculas como `screen.getByLabelText(/password/i)` si hay botones como "Show password" con `aria-label` que repiten la palabra clave. Esto lanzará un error de "Found multiple elements".
104
+ **HAZ**: Usa selectores de coincidencia exacta como `screen.getByLabelText(/^Password$/)` o busca mediante `screen.getByPlaceholderText(...)` para aislar de forma unívoca el input deseado.
105
+
106
+ ### Trampa 16: Probar la ausencia de elementos ocultos por CSS con `not.toBeInTheDocument()`
107
+ **NO HAGAS**: Tratar de validar que un menú, etiqueta de barra lateral colapsada o modal ya no es visible utilizando `expect(queryByText("...")).not.toBeInTheDocument()`. Al ocultar layouts mediante clases CSS de ancho cero (`w-0`), opacidad (`opacity-0`) o display (`hidden`), los elementos siguen existiendo físicamente en el DOM de pruebas.
108
+ **HAZ**: Verifica las clases CSS de visibilidad directamente (ej. `expect(sidebarEl.className).toContain("w-16")`) o usa `.not.toBeVisible()` de `@testing-library/jest-dom`.
109
+
110
+ ### Trampa 17: Mocks estáticos para toggles y hooks con estado
111
+ **NO HAGAS**: Mockear hooks que controlan transiciones (como `useTheme` de `next-themes`) con retornos fijos y estáticos, ej. `vi.mock('next-themes', () => ({ useTheme: () => ({ theme: 'light', setTheme: vi.fn() }) }))`. El segundo clic en el toggle intentará pasar de 'light' a 'dark' pero fallará porque el estado simulado sigue en 'light' (llamando a setTheme('dark') por segunda vez).
112
+ **HAZ**: Define variables mutables a nivel de archivo dentro de la suite de mocks y usa getters en la definición del mock para reflejar los cambios en caliente.
113
+
114
+ ### Trampa 18: Fallos en resolución de `@import "shadcn/tailwind.css"` en Tailwind v4 con Next.js 16/Shadcn
115
+ **NO HAGAS**: Importar `@import "shadcn/tailwind.css"` en `globals.css` sin comprobar si el paquete npm `shadcn` está instalado en la máquina, provocando fallos fatales de compilación durante el comando `next build`.
116
+ **HAZ**: El coder siempre debe instalar explícitamente el paquete base ejecutable y estilizado `npm install shadcn` en proyectos Next + Tailwind v4.
117
+
118
+ ### Trampa 19: Bucle infinito y parpadeo de pantalla (Flicker) tras el inicio de sesión
119
+ **NO HAGAS**: Usar redirecciones cruzadas en `useEffect` con `router.push()` tanto en el formulario de login como en la propia página de login, o renderizar spinners por defecto antes de verificar la sesión en el cliente, causando que el router encadene múltiples repeticiones de renderizado y la pantalla parpadee.
120
+ **HAZ**: Usa `router.replace()` para evitar ensuciar el historial. Proporciona siempre una bandera de montaje (`mounted === true`) y retorna `null` para evitar desajustes de hidratación (hydration mismatch). Protege las redirecciones del login mediante una referencia `useRef(false)` para controlar que no se solapen redirecciones de estado concurrentes de React.
121
+
98
122
  ---
99
123
 
100
124
  ## 4. Stack cerrado (NO abrir)
101
125
 
102
- - **Frontend**: Next.js 15/16 + React 19 + TypeScript + Tailwind v4 + Shadcn UI v2.1.8 (Radix UI) + lucide-react + Vitest. **PROHIBIDO**: Shadcn v4/Base-UI (por inestabilidad y falta de soporte actual), HeroUI, Chakra, Material-UI.
126
+ - **Frontend**: Next.js 15/16 + React 19 + TypeScript + Tailwind v4 + Shadcn UI @latest (Radix UI) + lucide-react + Vitest. **PROHIBIDO**: Shadcn v4/Base-UI (por inestabilidad y falta de soporte actual), HeroUI, Chakra, Material-UI.
103
127
  - **Backend**: Python 3.11+ + FastAPI + Pydantic v2 + Uvicorn + Pytest + Ruff. **PROHIBIDO**: Django, Flask, sync SQLAlchemy.
104
128
  - **Persistencia**: localStorage (frontend-only) o PostgreSQL con pgvector. **PROHIBIDO**: MongoDB (excepto si se justifica), Redis como primary store.
105
129
  - **Containerización**: Docker multi-stage con `node:20-alpine` (Next) o `python:3.11-slim` (FastAPI). Usuario no-root. Healthcheck via `node -e` (no wget en alpine).
@@ -74,6 +74,38 @@ if (!globalThis.crypto) {
74
74
  }
75
75
  ```
76
76
 
77
+ #### Mock de `next-themes` (Soporte reactivo de Tema)
78
+ Para probar toggles de tema sin que fallen en clics sucesivos:
79
+ ```typescript
80
+ let currentTheme = 'light';
81
+ const mockSetTheme = vi.fn((newTheme: string) => {
82
+ currentTheme = newTheme;
83
+ });
84
+
85
+ vi.mock('next-themes', () => ({
86
+ useTheme: () => ({
87
+ get theme() { return currentTheme; },
88
+ setTheme: mockSetTheme,
89
+ get resolvedTheme() { return currentTheme; },
90
+ }),
91
+ }));
92
+ ```
93
+
94
+ #### Mock de `next/navigation` (Router y Pathname)
95
+ ```typescript
96
+ const mockPush = vi.fn();
97
+ const mockReplace = vi.fn();
98
+
99
+ vi.mock('next/navigation', () => ({
100
+ useRouter: () => ({
101
+ push: mockPush,
102
+ replace: mockReplace,
103
+ prefetch: vi.fn(),
104
+ }),
105
+ usePathname: () => '/',
106
+ }));
107
+ ```
108
+
77
109
  ### Paso 4: Ejecutar Lint y Tests consolidando comandos
78
110
  1. Corre el linter enfocado en el código fuente:
79
111
  ```bash
@@ -9,19 +9,19 @@ compatibility: opencode
9
9
 
10
10
  A framework for building ui, components and design systems. Components are added as source code to the user's project via the CLI.
11
11
 
12
- > **IMPORTANT:** Run all CLI commands using the project's package runner: `npx shadcn@2.1.8`, `pnpm dlx shadcn@2.1.8`, or `bunx --bun shadcn@2.1.8` — based on the project's `packageManager`. Examples below use `npx shadcn@2.1.8` but substitute the correct runner for the project.
12
+ > **IMPORTANT:** Run all CLI commands using the project's package runner: `npx shadcn@latest`, `pnpm dlx shadcn@latest`, or `bunx --bun shadcn@latest` — based on the project's `packageManager`. Examples below use `npx shadcn@latest` but substitute the correct runner for the project.
13
13
 
14
14
  ## Current Project Context
15
15
 
16
16
  ```json
17
- !`npx shadcn@2.1.8 info --json`
17
+ !`npx shadcn@latest info --json`
18
18
  ```
19
19
 
20
- The JSON above contains the project config and installed components. Use `npx shadcn@2.1.8 docs <component>` to get documentation and example URLs for any component.
20
+ The JSON above contains the project config and installed components. Use `npx shadcn@latest docs <component>` to get documentation and example URLs for any component.
21
21
 
22
22
  ## Principles
23
23
 
24
- 1. **Use existing components first.** Use `npx shadcn@2.1.8 search` to check registries before writing custom UI. Check community registries too.
24
+ 1. **Use existing components first.** Use `npx shadcn@latest search` to check registries before writing custom UI. Check community registries too.
25
25
  2. **Compose, don't reinvent.** Settings page = Tabs + Card + form controls. Dashboard = Sidebar + Card + Chart + Table.
26
26
  3. **Use built-in variants before custom styles.** `variant="outline"`, `size="sm"`, etc.
27
27
  4. **Use semantic colors.** `bg-primary`, `text-muted-foreground` — never raw values like `bg-blue-500`.
@@ -52,7 +52,7 @@ These rules are **always enforced**. Each links to a file with Incorrect/Correct
52
52
  ### Component Structure → [composition.md](../../docs/shadcn/rules/composition.md)
53
53
 
54
54
  - **Items always inside their Group.** `SelectItem` → `SelectGroup`. `DropdownMenuItem` → `DropdownMenuGroup`. `CommandItem` → `CommandGroup`.
55
- - **Use `asChild` (radix) or `render` (base) for custom triggers.** Check `base` field from `npx shadcn@2.1.8 info`. → [base-vs-radix.md](../../docs/shadcn/rules/base-vs-radix.md)
55
+ - **Use `asChild` (radix) or `render` (base) for custom triggers.** Check `base` field from `npx shadcn@latest info`. → [base-vs-radix.md](../../docs/shadcn/rules/base-vs-radix.md)
56
56
  - **Dialog, Sheet, and Drawer always need a Title.** `DialogTitle`, `SheetTitle`, `DrawerTitle` required for accessibility. Use `className="sr-only"` if visually hidden.
57
57
  - **Use full Card composition.** `CardHeader`/`CardTitle`/`CardDescription`/`CardContent`/`CardFooter`. Don't dump everything in `CardContent`.
58
58
  - **Button has no `isPending`/`isLoading`.** Compose with `Spinner` + `data-icon` + `disabled`.
@@ -77,8 +77,8 @@ These rules are **always enforced**. Each links to a file with Incorrect/Correct
77
77
 
78
78
  ### CLI
79
79
 
80
- - **Never decode preset codes or build preset URLs manually.** Use `npx shadcn@2.1.8 preset decode <code>`, `preset url <code>`, or `preset open <code>`. For project-aware preset detection, use `npx shadcn@2.1.8 preset resolve`.
81
- - **Apply preset codes directly with the CLI.** Use `npx shadcn@2.1.8 apply <code>` for existing projects, or `npx shadcn@2.1.8 init --preset <code>` when initializing.
80
+ - **Never decode preset codes or build preset URLs manually.** Use `npx shadcn@latest preset decode <code>`, `preset url <code>`, or `preset open <code>`. For project-aware preset detection, use `npx shadcn@latest preset resolve`.
81
+ - **Apply preset codes directly with the CLI.** Use `npx shadcn@latest apply <code>` for existing projects, or `npx shadcn@latest init --preset <code>` when initializing.
82
82
 
83
83
  ## Key Patterns
84
84
 
@@ -151,7 +151,7 @@ The injected project context contains these key fields:
151
151
  - **`resolvedPaths`** → exact file-system destinations for components, utils, hooks, etc.
152
152
  - **`framework`** → routing and file conventions (e.g. Next.js App Router vs Vite SPA).
153
153
  - **`packageManager`** → use this for any non-shadcn dependency installs (e.g. `pnpm add date-fns` vs `npm install date-fns`).
154
- - **`preset`** → resolved preset code and values for the current project. Use `npx shadcn@2.1.8 preset resolve --json` when you only need preset information.
154
+ - **`preset`** → resolved preset code and values for the current project. Use `npx shadcn@latest preset resolve --json` when you only need preset information.
155
155
 
156
156
  See [cli.md — `info` command](../../docs/shadcn/cli.md) for the full field reference.
157
157
 
@@ -166,29 +166,29 @@ DO NOT run bash commands to view docs. Instead, explicitly use the built-in MCP
166
166
 
167
167
  ## Workflow
168
168
 
169
- 1. **Get project context** — already injected above. Run `npx shadcn@2.1.8 info` again if you need to refresh.
169
+ 1. **Get project context** — already injected above. Run `npx shadcn@latest info` again if you need to refresh.
170
170
  2. **Check installed components first** — before running `add`, always check the `components` list from project context or list the `resolvedPaths.ui` directory. Don't import components that haven't been added, and don't re-add ones already installed.
171
- 3. **Find components** — `npx shadcn@2.1.8 search`.
172
- 4. **Get docs and examples** — use the MCP tool `shadcn_get_item_examples_from_registries` with query strings like `'button demo'` or `'login block example'` to see exact implementations. To preview changes to installed components, use `npx shadcn@2.1.8 add --diff`.
173
- 5. **Install or update** — `npx shadcn@2.1.8 add`. When updating existing components, use `--dry-run` and `--diff` to preview changes first (see [Updating Components](#updating-components) below).
174
- 6. **Fix imports in third-party components** — After adding components from community registries (e.g. `@bundui`, `@magicui`), check the added non-UI files for hardcoded import paths like `@/components/ui/...`. These won't match the project's actual aliases. Use `npx shadcn@2.1.8 info` to get the correct `ui` alias (e.g. `@workspace/ui/components`) and rewrite the imports accordingly. The CLI rewrites imports for its own UI files, but third-party registry components may use default paths that don't match the project.
171
+ 3. **Find components** — `npx shadcn@latest search`.
172
+ 4. **Get docs and examples** — use the MCP tool `shadcn_get_item_examples_from_registries` with query strings like `'button demo'` or `'login block example'` to see exact implementations. To preview changes to installed components, use `npx shadcn@latest add --diff`.
173
+ 5. **Install or update** — `npx shadcn@latest add`. When updating existing components, use `--dry-run` and `--diff` to preview changes first (see [Updating Components](#updating-components) below).
174
+ 6. **Fix imports in third-party components** — After adding components from community registries (e.g. `@bundui`, `@magicui`), check the added non-UI files for hardcoded import paths like `@/components/ui/...`. These won't match the project's actual aliases. Use `npx shadcn@latest info` to get the correct `ui` alias (e.g. `@workspace/ui/components`) and rewrite the imports accordingly. The CLI rewrites imports for its own UI files, but third-party registry components may use default paths that don't match the project.
175
175
  7. **Review added components** — After adding a component or block from any registry, **always read the added files and verify they are correct**. Check for missing sub-components (e.g. `SelectItem` without `SelectGroup`), missing imports, incorrect composition, or violations of the [Critical Rules](#critical-rules). Also replace any icon imports with the project's `iconLibrary` from the project context (e.g. if the registry item uses `lucide-react` but the project uses `hugeicons`, swap the imports and icon names accordingly). Fix all issues before moving on.
176
176
  8. **Registry must be explicit** — When the user asks to add a block or component, **do not guess the registry**. If no registry is specified (e.g. user says "add a login block" without specifying `@shadcn`, `@tailark`, `owner/repo`, etc.), ask which registry to use. Never default to a registry on behalf of the user.
177
177
  9. **Switching presets** — Ask the user first: **overwrite**, **partial**, **merge**, or **skip**?
178
- - **Inspect current preset**: `npx shadcn@2.1.8 preset resolve`. Use `--json` when you need structured values.
179
- - **Inspect incoming preset**: `npx shadcn@2.1.8 preset decode <code>`. Use `preset url <code>` or `preset open <code>` to share or open the preset builder.
180
- - **Overwrite**: `npx shadcn@2.1.8 apply <code>`. Overwrites detected components, fonts, and CSS variables.
181
- - **Partial**: `npx shadcn@2.1.8 apply <code> --only theme,font`. Updates only the selected preset parts without reinstalling UI components. Supported values are `theme` and `font`; comma-separated combinations are allowed. `icon` is intentionally not supported, because icon changes may require full component reinstall and transforms.
182
- - **Merge**: `npx shadcn@2.1.8 init --preset <code> --force --no-reinstall`, then run `npx shadcn@2.1.8 info` to list installed components, then for each installed component use `--dry-run` and `--diff` to [smart merge](#updating-components) it individually.
183
- - **Skip**: `npx shadcn@2.1.8 init --preset <code> --force --no-reinstall`. Only updates config and CSS, leaves components as-is.
178
+ - **Inspect current preset**: `npx shadcn@latest preset resolve`. Use `--json` when you need structured values.
179
+ - **Inspect incoming preset**: `npx shadcn@latest preset decode <code>`. Use `preset url <code>` or `preset open <code>` to share or open the preset builder.
180
+ - **Overwrite**: `npx shadcn@latest apply <code>`. Overwrites detected components, fonts, and CSS variables.
181
+ - **Partial**: `npx shadcn@latest apply <code> --only theme,font`. Updates only the selected preset parts without reinstalling UI components. Supported values are `theme` and `font`; comma-separated combinations are allowed. `icon` is intentionally not supported, because icon changes may require full component reinstall and transforms.
182
+ - **Merge**: `npx shadcn@latest init --preset <code> --force --no-reinstall`, then run `npx shadcn@latest info` to list installed components, then for each installed component use `--dry-run` and `--diff` to [smart merge](#updating-components) it individually.
183
+ - **Skip**: `npx shadcn@latest init --preset <code> --force --no-reinstall`. Only updates config and CSS, leaves components as-is.
184
184
  - **Important**: Always run preset commands inside the user's project directory. `apply` only works in an existing project with a `components.json` file. The CLI automatically preserves the current base (`base` vs `radix`) from `components.json`. If you must use a scratch/temp directory (e.g. for `--dry-run` comparisons), pass `--base <current-base>` explicitly — preset codes do not encode the base.
185
185
 
186
186
  ## Updating Components
187
187
 
188
188
  When the user asks to update a component from upstream while keeping their local changes, use `--dry-run` and `--diff` to intelligently merge. **NEVER fetch raw files from GitHub manually — always use the CLI.**
189
189
 
190
- 1. Run `npx shadcn@2.1.8 add <component> --dry-run` to see all files that would be affected.
191
- 2. For each file, run `npx shadcn@2.1.8 add <component> --diff <file>` to see what changed upstream vs local.
190
+ 1. Run `npx shadcn@latest add <component> --dry-run` to see all files that would be affected.
191
+ 2. For each file, run `npx shadcn@latest add <component> --diff <file>` to see what changed upstream vs local.
192
192
  3. Decide per file based on the diff:
193
193
  - No local changes → safe to overwrite.
194
194
  - Has local changes → read the local file, analyze the diff, and apply upstream updates while preserving local modifications.
@@ -199,55 +199,55 @@ When the user asks to update a component from upstream while keeping their local
199
199
 
200
200
  ```bash
201
201
  # Create a new project.
202
- npx shadcn@2.1.8 init --name my-app --preset base-nova
203
- npx shadcn@2.1.8 init --name my-app --preset a2r6bw --template vite
202
+ npx shadcn@latest init --name my-app --preset base-nova
203
+ npx shadcn@latest init --name my-app --preset a2r6bw --template vite
204
204
 
205
205
  # Create a monorepo project.
206
- npx shadcn@2.1.8 init --name my-app --preset base-nova --monorepo
207
- npx shadcn@2.1.8 init --name my-app --preset base-nova --template next --monorepo
206
+ npx shadcn@latest init --name my-app --preset base-nova --monorepo
207
+ npx shadcn@latest init --name my-app --preset base-nova --template next --monorepo
208
208
 
209
209
  # Initialize existing project.
210
- npx shadcn@2.1.8 init --preset base-nova
211
- npx shadcn@2.1.8 init --defaults # shortcut: --template=next --preset=nova (base style implied)
210
+ npx shadcn@latest init --preset base-nova
211
+ npx shadcn@latest init --defaults # shortcut: --template=next --preset=nova (base style implied)
212
212
 
213
213
  # Apply a preset to an existing project.
214
- npx shadcn@2.1.8 apply a2r6bw
215
- npx shadcn@2.1.8 apply a2r6bw --only theme
216
- npx shadcn@2.1.8 apply a2r6bw --only font
217
- npx shadcn@2.1.8 apply a2r6bw --only theme,font
214
+ npx shadcn@latest apply a2r6bw
215
+ npx shadcn@latest apply a2r6bw --only theme
216
+ npx shadcn@latest apply a2r6bw --only font
217
+ npx shadcn@latest apply a2r6bw --only theme,font
218
218
 
219
219
  # Inspect preset codes and project preset state.
220
- npx shadcn@2.1.8 preset decode a2r6bw
221
- npx shadcn@2.1.8 preset url a2r6bw
222
- npx shadcn@2.1.8 preset open a2r6bw
223
- npx shadcn@2.1.8 preset resolve
224
- npx shadcn@2.1.8 preset resolve --json
220
+ npx shadcn@latest preset decode a2r6bw
221
+ npx shadcn@latest preset url a2r6bw
222
+ npx shadcn@latest preset open a2r6bw
223
+ npx shadcn@latest preset resolve
224
+ npx shadcn@latest preset resolve --json
225
225
 
226
226
  # Add components.
227
- npx shadcn@2.1.8 add button card dialog
228
- npx shadcn@2.1.8 add @magicui/shimmer-button
229
- npx shadcn@2.1.8 add owner/repo/item
230
- npx shadcn@2.1.8 add --all
227
+ npx shadcn@latest add button card dialog
228
+ npx shadcn@latest add @magicui/shimmer-button
229
+ npx shadcn@latest add owner/repo/item
230
+ npx shadcn@latest add --all
231
231
 
232
232
  # Preview changes before adding/updating.
233
- npx shadcn@2.1.8 add button --dry-run
234
- npx shadcn@2.1.8 add button --diff button.tsx
235
- npx shadcn@2.1.8 add @acme/form --view button.tsx
236
- npx shadcn@2.1.8 add owner/repo/item --dry-run
233
+ npx shadcn@latest add button --dry-run
234
+ npx shadcn@latest add button --diff button.tsx
235
+ npx shadcn@latest add @acme/form --view button.tsx
236
+ npx shadcn@latest add owner/repo/item --dry-run
237
237
 
238
238
  # Search registries.
239
- npx shadcn@2.1.8 search @shadcn -q "sidebar"
240
- npx shadcn@2.1.8 search @tailark -q "stats"
241
- npx shadcn@2.1.8 search owner/repo -q "login"
242
- npx shadcn@2.1.8 search # all configured registries
243
- npx shadcn@2.1.8 search @shadcn -q "menu" -t ui # filter by item type
239
+ npx shadcn@latest search @shadcn -q "sidebar"
240
+ npx shadcn@latest search @tailark -q "stats"
241
+ npx shadcn@latest search owner/repo -q "login"
242
+ npx shadcn@latest search # all configured registries
243
+ npx shadcn@latest search @shadcn -q "menu" -t ui # filter by item type
244
244
 
245
245
  # Get component docs and example URLs.
246
246
  # ALWAYS use your MCP Tools (shadcn_get_item_examples_from_registries) instead of bash for docs.
247
247
 
248
248
  # View registry item details (for items not yet installed).
249
- npx shadcn@2.1.8 view @shadcn/button
250
- npx shadcn@2.1.8 view owner/repo/item
249
+ npx shadcn@latest view @shadcn/button
250
+ npx shadcn@latest view owner/repo/item
251
251
  ```
252
252
 
253
253
  **Named presets:** `nova`, `vega`, `maia`, `lyra`, `mira`, `luma`
@@ -73,13 +73,13 @@ npx shadcn@latest add <component-name>
73
73
  Al diseñar o codificar páginas con Shadcn UI, sigue estas reglas estrictas:
74
74
 
75
75
  ### 3.1 Componer, no reinventar (MANDATORIO)
76
- Utiliza las plantillas y bloques existentes de Shadcn como el estándar absoluto de tu interfaz. Queda **estrictamente prohibido** escribir layouts, páginas de autenticación o cuadros de mando desde cero si ya existe un bloque oficial que resuelva el caso de uso:
77
- - **Dashboards**: Utiliza `dashboard-01` como base para cualquier panel de control interactivo.
76
+ Utiliza las plantillas y bloques existentes de Shadcn como el estándar absoluto de tu interfaz. Queda **estrictamente prohibido** escribir layouts, páginas de autenticación o cuadros de mando desde cero si ya existe un bloque oficial que resuelva el caso de uso. **No estás restringido a ningún subconjunto fijo de componentes**: tienes total libertad para buscar en el catálogo completo de 97+ bloques oficiales y componentes primitivos de Shadcn:
77
+ - **Dashboards**: Utiliza `dashboard-01` o cualquier variante de panel de control interactivo oficial.
78
78
  - **Sidebars / Barras de Navegación**: Utiliza `sidebar-01` al `16` para paneles laterales funcionales, colapsables, dinámicos o anidados. No programes componentes de navegación complejos a mano.
79
79
  - **Login / Registro**: Utiliza `login-01` al `05` y `signup-01` al `05` para flujos de login y registro de usuarios.
80
80
  - **Gráficos y Métricas**: Busca y añade bloques de gráficos oficiales de Recharts (`chart-area-*`, `chart-bar-*`, `chart-pie-*`, `chart-radar-*`) para dar vida a la visualización de datos.
81
81
 
82
- Busca layouts de dashboards o formularios complejos en el registro mediante el MCP `shadcn` antes de escribir cualquier código personalizado. Una vez agregado el bloque, distribuye y adapta sus elementos con el estado y la lógica de tu aplicación.
82
+ Busca layouts de dashboards o formularios complejos en el registro mediante el MCP `shadcn` antes de escribir cualquier código personalizado. Una vez agregado el bloque, distribuye y adapta sus elementos con el estado y la lógica de tu aplicación. Te motivamos a explorar todo el ecosistema de bloques pre-creados por Shadcn para armar una UI robusta y moderna.
83
83
 
84
84
  ### 3.2 Form Layouts (FieldGroup + Field)
85
85
  Para estructurar campos de formularios, no uses `div`s arbitrarios con clases de espaciado complejas. Usa las composiciones semánticas oficiales de Shadcn:
@@ -66,11 +66,12 @@ Para garantizar consistencia y escalabilidad en todos los proyectos, la estructu
66
66
  className={cn("base-classes", condition && "extra", className)}
67
67
  ```
68
68
  5. **Iconos**: usar `lucide-react` (`import { Icon } from "lucide-react"`).
69
- 6. **Block/Template installation**: usar el MCP `shadcn` para browse/search/install:
70
- - Dashboards → `mcp__shadcn__get_item` con `@shadcn/dashboard-01`
69
+ 6. **Block/Template installation**: usar el MCP `shadcn` para browse/search/install. **NOTA CRÍTICA: NO existe ninguna restricción de lista fija**. Tienes libertad absoluta y la obligación proactiva de buscar e instalar CUALQUIER componente primitivo o bloque del catálogo oficial de Shadcn UI que se adapte al caso de uso de la aplicación (entre los 97+ bloques disponibles como dashboards, sidebars colapsables, login, charts, etc.):
70
+ - Dashboards → `@shadcn/dashboard-01`
71
71
  - Landings → `@shadcn/landing-hero`, `@shadcn/pricing`, etc.
72
- - Auth flows → `@shadcn/login-01`, `@shadcn/signup-01`
72
+ - Auth flows → `@shadcn/login-01` al `05`, `@shadcn/signup-01` al `05`
73
73
  - Forms complejos → `@shadcn/settings`, `@shadcn/data-table`
74
+ - Sidebars → `@shadcn/sidebar-01` al `16`
74
75
  7. **Shadcn v4 (Base UI)**: En Shadcn UI v4.11.0+, la biblioteca primitiva es `@base-ui/react` (no Radix UI). La propiedad `asChild` **no existe**. Para evitar HTML inválido y problemas de SEO/accesibilidad, no anides interactives (`<Button><Link>`). Aplica las clases de estilo del botón directamente sobre el elemento `<Link>` de Next.js.
75
76
  8. **Compatibilidad Turbopack + CSS**: Turbopack no resuelve directivas `@import` para archivos CSS de `node_modules` (ej. `@import "tw-animate-css"` o `@import "shadcn/tailwind.css"`). En Tailwind CSS v4, define las variables y estilos inline en `globals.css` en lugar de importar desde `node_modules`.
76
77
  9. **Despliegue y Next Config**: Todo proyecto de Next.js debe estar configurado para Docker standalone en `next.config.ts`:
@@ -297,7 +297,7 @@ export const bootstrap_nextjs_shadcn = tool({
297
297
  let componentsError: string | null = null
298
298
  if (args.components && args.components.length > 0) {
299
299
  try {
300
- const cmd = `npx shadcn@2.1.8 add ${args.components.join(" ")} --yes --overwrite`
300
+ const cmd = `npx shadcn@latest add ${args.components.join(" ")} --yes --overwrite`
301
301
  execSync(cmd, {
302
302
  cwd: targetPath,
303
303
  stdio: "ignore",
@@ -9,7 +9,7 @@ DB_PATH = "/Users/wavesbyte/.local/share/opencode/opencode.db"
9
9
 
10
10
  # Escribe aquí el ID de la sesión que deseas exportar (ejemplo: "ses_1234...")
11
11
  # Si se deja vacío, el script requerirá el ID como argumento al ejecutarlo
12
- TARGET_SESSION_ID = "ses_11d2"
12
+ TARGET_SESSION_ID = "ses_11ca"
13
13
 
14
14
 
15
15
  def format_timestamp(ts):
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zugzbot",
3
- "version": "1.0.38",
3
+ "version": "1.0.39",
4
4
  "description": "Fácil instalador del arnés SDD de Zugzbot para proyectos OpenCode",
5
5
  "type": "module",
6
6
  "bin": {