ozali 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.
@@ -0,0 +1,143 @@
1
+ # Blueprint de la base de conocimiento (AI.md + carpeta dotted)
2
+
3
+ Se usa en la **ruta GENERATE** (Fase 2 de `ozali`), cuando el repo **no** tiene ya
4
+ `AI.md`/`.ai` ni `IA.md`/`.ia`. La fuente de verdad **no se descarga de ningún lado**:
5
+ se **genera evaluando el proyecto real**. Este documento define la estructura canónica,
6
+ las reglas de generación y las diferencias frontend/backend.
7
+
8
+ > **Regla anti-invención:** todo el contenido se deriva del código, los manifiestos y la
9
+ > configuración REALES del repo. Lo que no se pueda derivar se marca como
10
+ > `<!-- PROVISIONAL: confirmar con el usuario -->` o se pregunta. Nunca inventes reglas de
11
+ > negocio, módulos, comandos ni versiones.
12
+
13
+ ---
14
+
15
+ ## 1. Detección frontend vs backend
16
+
17
+ Evalúa señales en la raíz del repo (la primera categoría con coincidencias gana; si hay
18
+ ambigüedad —p. ej. monorepo full-stack— **pregunta al usuario**):
19
+
20
+ **Frontend**
21
+ - `angular.json`, `package.json` con `@angular/*`, `react`, `next`, `vue`, `vite`, `svelte`
22
+ - carpeta `src/app` (Angular) o `src/pages`/`src/components`
23
+
24
+ **Backend**
25
+ - `pom.xml`, `build.gradle` (Java/Spring)
26
+ - `requirements.txt`, `pyproject.toml`, `manage.py` (Python)
27
+ - `go.mod` (Go), `Cargo.toml` (Rust)
28
+ - `package.json` con `express`/`nestjs`/`fastify` y sin framework de UI
29
+
30
+ ---
31
+
32
+ ## 2. Qué inspeccionar del proyecto antes de generar
33
+
34
+ | Aspecto | Dónde leerlo |
35
+ |---|---|
36
+ | Nombre real del proyecto | manifiesto (`pom.xml` `<artifactId>`, `package.json` `name`), README |
37
+ | Stack y versiones | `pom.xml`/`package.json`/`build.gradle` — versiones EXACTAS, no supuestas |
38
+ | Estructura de capas/módulos | árbol real de `src/` (paquetes Java, carpetas Angular, etc.) |
39
+ | Comandos build/test/run | scripts del manifiesto, wrappers (`mvnw`, `gradlew`), CI (`.github/`, pipelines) |
40
+ | Patrones de arquitectura | leer 3-5 clases/componentes representativos por capa |
41
+ | Convenciones de código | observar nombres, inyección, manejo de errores, estilo en el código real |
42
+ | Configuración por entorno | `application*.yml`/`.properties`, `environments/`, `.env*` |
43
+ | Estado de pruebas | contar archivos en `src/test`/`*.spec.ts` — reportar cobertura real |
44
+
45
+ ---
46
+
47
+ ## 3. Estructura canónica de la carpeta dotted
48
+
49
+ Por defecto genera `.ai/` + `AI.md` (usa `.ia/` + `IA.md` solo si el usuario lo pide o el
50
+ ecosistema del equipo ya usa esa variante).
51
+
52
+ ```
53
+ .ai/
54
+ agents/ → identidades por rol (difieren según front/back, ver §5)
55
+ context/
56
+ architecture.md → capas/módulos REALES + diagrama de flujo (mermaid)
57
+ coding-standards.md → convenciones OBSERVADAS en el código + reglas de oro
58
+ tech-stack.md → stack, versiones exactas y comandos de build/test/run
59
+ knowledge/
60
+ README.md → qué es esta carpeta y cómo se alimenta
61
+ learning-notes.md → memoria técnica: gotchas, lecciones, decisiones (inicia con
62
+ los hallazgos de la propia inspección)
63
+ workflows/
64
+ feature.md → proceso para nueva funcionalidad
65
+ bugfix.md → proceso para corrección no crítica
66
+ hotfix.md → proceso express para incidente de producción (gate humano intacto)
67
+ refactor.md → proceso para mejora interna sin cambio de comportamiento
68
+ ```
69
+
70
+ ---
71
+
72
+ ## 4. Estructura canónica de `AI.md` (documento guía / "Project Brain")
73
+
74
+ Modelo: punto de entrada corto; el detalle vive en `.ai/`. Secciones obligatorias:
75
+
76
+ ```markdown
77
+ # <Proyecto> - Project Brain (AI.md)
78
+
79
+ Este archivo sirve como el "cerebro" del proyecto para asistir a agentes de IA y
80
+ desarrolladores en la comprensión de la arquitectura, flujos y estándares de <Proyecto>.
81
+
82
+ ## 🚀 Descripción del Proyecto
83
+ <2-4 frases: qué es, qué resuelve, integraciones clave — derivado del código real>
84
+
85
+ Para detalles sobre el comportamiento de la IA en este proyecto, consulta:
86
+ - **[<Rol 1>](.ai/agents/<rol1>.md)**
87
+ - **[<Rol 2>](.ai/agents/<rol2>.md)**
88
+ - ...
89
+
90
+ ## 📚 Contexto Global
91
+ | Documento | Alcance / Contenido |
92
+ |-----------|--------------------|
93
+ | **[Arquitectura](.ai/context/architecture.md)** | <resumen de una línea> |
94
+ | **[Stack Tecnológico](.ai/context/tech-stack.md)** | <resumen> |
95
+ | **[Estándares de Código](.ai/context/coding-standards.md)** | <resumen> |
96
+ | **[Log de Conocimiento](.ai/knowledge/learning-notes.md)** | Memoria técnica de la IA. |
97
+
98
+ ## ⚙️ Workflow & Comandos
99
+ | Comando | Descripción |
100
+ |---------|-------------|
101
+ | <comando real 1> | <qué hace> |
102
+ | <comando real 2> | <qué hace> |
103
+
104
+ ### Workflows de Agentes
105
+ - **[Desarrollo de Feature](.ai/workflows/feature.md)**
106
+ - **[Bugfix](.ai/workflows/bugfix.md)**
107
+ - **[Hotfix](.ai/workflows/hotfix.md)**
108
+ - **[Refactor](.ai/workflows/refactor.md)**
109
+
110
+ ---
111
+ *Este documento es el punto de entrada. Las definiciones técnicas detalladas residen en `.ai/`.*
112
+ ```
113
+
114
+ ---
115
+
116
+ ## 5. Diferencias frontend vs backend
117
+
118
+ | Aspecto | Frontend | Backend |
119
+ |---|---|---|
120
+ | `agents/` | `frontend.md`, `designer.md`, `reviewer.md`, `tester.md` | `architect.md`, `backend.md`, `dao-specialist.md` (si hay BD), `reviewer.md`, `tester.md` |
121
+ | `architecture.md` | estructura `src/app` (módulos, componentes, servicios, rutas, guards), flujo de datos UI ⇄ servicios ⇄ API | capas `Controller → Service → DAO/Repository → Entity` (+ DTO/Projection/Strategy según el repo), paquetes reales |
122
+ | `tech-stack.md` | framework UI + Node + tooling (versiones de `package.json`), comandos `npm ...` | lenguaje + framework + BD (versiones de `pom.xml`/etc.), comandos `mvn ...`/wrapper |
123
+ | `coding-standards.md` | reactividad, manejo de estado, i18n, accesibilidad, testing (Karma/Jest/Cypress) | inyección por constructor, DTO vs Entity, wrapper de respuesta, manejo de excepciones, transaccionalidad, testing (JUnit/mocks) |
124
+ | Comandos típicos | `npm start`, `npm run build`, `npm run test`, deploy (Firebase/CDN) | `mvn spring-boot:run`, `mvn test`, `mvn package`, perfiles por entorno |
125
+ | Zonas sensibles típicas | guards/auth, interceptores, modelos compartidos, config de entornos | config de datasource, clientes externos, exception handlers, DTOs de contrato público, ymls de uat/producción |
126
+
127
+ Los `workflows/` son comunes en estructura (feature/bugfix/hotfix/refactor) pero sus pasos
128
+ de validación usan los comandos reales del proyecto (npm vs mvn).
129
+
130
+ ---
131
+
132
+ ## 6. Reglas de generación
133
+
134
+ 1. **Nomenclatura del repo:** nombres, títulos y rutas reales del proyecto; nada de
135
+ placeholders genéricos de plantilla.
136
+ 2. **Versiones leídas, no recordadas:** copia las versiones de los manifiestos.
137
+ 3. **Convenciones observadas:** un estándar solo entra a `coding-standards.md` si se
138
+ observa de forma consistente en el código (o el usuario lo confirma).
139
+ 4. **Estado real de pruebas:** si `src/test` está casi vacío, dilo en `tech-stack.md` y en
140
+ `learning-notes.md` — no asumas cobertura.
141
+ 5. **Siembra `learning-notes.md`** con los hallazgos de la inspección (typos en nombres de
142
+ clases, paquetes con nombre inesperado, módulos sin uso aparente, etc.).
143
+ 6. **Todo lo generado es provisional** hasta pasar la validación de la Fase 3 de `ozali`.
@@ -0,0 +1,232 @@
1
+ # Perfiles de permiso de `cdk` (modo normal y `--auto`)
2
+
3
+ Plantillas y mecanismos de permisos para `cdk`, en **dos perfiles**, para **Claude Code** y
4
+ **opencode**.
5
+
6
+ > [!IMPORTANT]
7
+ > Una **skill no puede** otorgarse permisos ni cambiar el modo en caliente: el harness lee la
8
+ > configuración de los **archivos de settings** y de los **flags de lanzamiento**. Por eso
9
+ > esto es **configuración de entorno**, no algo que el `SKILL.md` ejecute. `cdk` solo
10
+ > **verifica/recuerda** que esté activa al iniciar.
11
+ >
12
+ > El **GATE es comportamiento de la skill**, no un prompt de permisos: liberar permisos y
13
+ > parar en el plan **no se contradicen**.
14
+
15
+ ## Perfiles
16
+
17
+ | Capacidad | **Modo normal** (sin `--auto`) | **Modo `--auto`** |
18
+ | :-- | :-- | :-- |
19
+ | Lectura dentro del proyecto | ✅ sin prompt | ✅ sin prompt |
20
+ | Lectura de rutas **fuera** del proyecto | ❓ pregunta | ✅ sin prompt |
21
+ | Líneas de comando (Bash/PowerShell) | ✅ sin prompt | ✅ sin prompt |
22
+ | Scripts de Python | ✅ sin prompt | ✅ sin prompt |
23
+ | Fetch de sitios externos (lectura) | ✅ sin prompt | ✅ sin prompt |
24
+ | **Ediciones/escrituras de código** | ❓ **pregunta** | ✅ auto-aplica |
25
+ | Comandos destructivos (`rm -rf`, `git push`) | ❓ pregunta | ⚠ circuit breakers / `ask` |
26
+ | 🛑 GATE del plan | siempre para | siempre para |
27
+
28
+ > En **modo normal** `cdk` puede analizar y ejecutar libremente, pero **confirma los cambios de
29
+ > código**. En **`--auto`** además auto-aplica los cambios y el **único alto es el GATE**.
30
+
31
+ ---
32
+
33
+ ## 1. Claude Code
34
+
35
+ ### 1.0 Modo normal (base) — lectura + comandos + Python + fetch
36
+ Perfil para el flujo **sin `--auto`**: libera análisis y ejecución, pero **las ediciones de
37
+ código siguen pidiendo confirmación**. Archivo `.claude/settings.json` (compartible) o
38
+ `.claude/settings.local.json`:
39
+
40
+ ```json
41
+ {
42
+ "permissions": {
43
+ "allow": [
44
+ "Bash",
45
+ "PowerShell",
46
+ "WebFetch",
47
+ "WebSearch"
48
+ ],
49
+ "deny": [
50
+ "Bash(rm -rf *)",
51
+ "Bash(git push *)",
52
+ "PowerShell(Remove-Item *)"
53
+ ]
54
+ }
55
+ }
56
+ ```
57
+
58
+ - **Lectura dentro del proyecto** ya es libre (ver §1.1), por eso no hace falta `Read` en el
59
+ `allow`; se mantiene **`ask` por defecto** para rutas fuera del proyecto (no se abre
60
+ `additionalDirectories` en este perfil).
61
+ - **Líneas de comando** y **Python** quedan cubiertos por `Bash`/`PowerShell` (p. ej.
62
+ `python script.py`, `python3 -m ...`, `mvn`, `node`).
63
+ - **Fetch externo de lectura** vía `WebFetch` (cualquier dominio) + `WebSearch`.
64
+ - **Ediciones/escrituras** (`Edit`/`Write`) **NO** están en `allow` → siguen preguntando.
65
+ - `deny` deja como red de seguridad los comandos destructivos más comunes (gana sobre `allow`).
66
+
67
+ > Variante **más acotada** (en vez de `Bash`/`PowerShell` completos): lista solo los comandos
68
+ > que usa el análisis, p. ej. `"Bash(python *)"`, `"Bash(python3 *)"`, `"Bash(node *)"`,
69
+ > `"Bash(mvn *)"`, `"Bash(git status*)"`, `"Bash(node .claude/skills/cdk/verify-structure.mjs*)"`.
70
+
71
+ ### 1.1 Qué ya NO pide permiso (no necesitas hacer nada)
72
+ - **Lecturas dentro del working dir** y herramientas read-only: `Read`, `Grep`, `Glob`.
73
+ - **Comandos Bash read-only**: `ls`, `cat`, `echo`, `pwd`, `head`, `tail`, `grep`, `find`,
74
+ `wc`, `which`, `diff`, `stat`, `du`, `cd` y formas read-only de `git`.
75
+
76
+ → La fricción real del análisis son **rutas FUERA del working dir** (otro repo, `~`, etc.).
77
+
78
+ ### 1.2 Opción A — Scoped (recomendada por seguridad)
79
+ Lecturas libres en el análisis + ediciones automáticas en la ejecución, sin abrir todo.
80
+ Archivo `.claude/settings.local.json` (o `.claude/settings.json` para compartir):
81
+
82
+ ```json
83
+ {
84
+ "permissions": {
85
+ "defaultMode": "acceptEdits",
86
+ "allow": [
87
+ "Read",
88
+ "Grep",
89
+ "Glob",
90
+ "Bash(node .claude/skills/cdk/verify-structure.mjs*)"
91
+ ],
92
+ "additionalDirectories": [
93
+ "../",
94
+ "//c/Users/<usuario>/ruta/a/otros/repos"
95
+ ]
96
+ }
97
+ }
98
+ ```
99
+
100
+ - `additionalDirectories` habilita **leer/editar rutas fuera del proyecto** sin prompt (úsalo
101
+ para las rutas no contempladas que el análisis pueda necesitar).
102
+ - `defaultMode: "acceptEdits"` auto-acepta ediciones y `mkdir/touch/mv/cp` en el working dir y
103
+ en `additionalDirectories` (cubre la ejecución post-GATE).
104
+ - Mantienes control sobre comandos Bash de escritura (siguen preguntando salvo los `allow`).
105
+
106
+ ### 1.3 Opción B — Bypass total (lo que pediste: solo parar en el plan)
107
+ Forma **fiable**: lanzar la sesión con el flag (NO depende de settings):
108
+
109
+ ```bash
110
+ claude --dangerously-skip-permissions
111
+ ```
112
+
113
+ - Salta **todos** los prompts; el único alto será el GATE de `cdk`.
114
+ - `defaultMode: "bypassPermissions"` en settings **puede no surtir efecto** (bug conocido); por
115
+ eso se prefiere el flag.
116
+ - **Circuit breakers que SIEMPRE preguntan** aunque el bypass esté activo: `rm -rf /`,
117
+ `rm -rf ~` y cualquier regla `ask` explícita.
118
+ - Escrituras a directorios protegidos (`.git`, `.claude`, `.vscode`, `.idea`, `.husky`, …)
119
+ pueden seguir avisando; excepciones: `.claude/commands`, `.claude/agents`, `.claude/skills`.
120
+ - ⚠ Úsalo solo en entornos aislados/confiables (contenedor, VM o repo controlado).
121
+
122
+ ### 1.4 Opción C — PreToolUse hook (avanzado)
123
+ Orden de evaluación: **PreToolUse hook → deny → ask → allow → modo**. Un hook puede
124
+ **auto-aprobar** llamadas (no puede saltarse `deny`/`ask`). Patrón típico: `allow` de `Bash` +
125
+ un hook que **rechace** solo los comandos peligrosos. Ver docs de hooks de Claude Code.
126
+
127
+ > Precedencia de settings: managed > flags CLI > `.claude/settings.local.json` >
128
+ > `.claude/settings.json` > `~/.claude/settings.json`. Un `deny` en cualquier nivel gana.
129
+
130
+ ---
131
+
132
+ ## 2. opencode
133
+
134
+ Config en `opencode.json` (raíz del proyecto) o `~/.config/opencode/opencode.json`. Valores:
135
+ `"allow"` | `"ask"` | `"deny"`. **Gana la última regla que coincide** → pon el catch-all `*`
136
+ primero y luego las excepciones.
137
+
138
+ ### 2.0 Modo normal (base) — lectura + comandos + Python + fetch
139
+ Perfil para el flujo **sin `--auto`**: libera análisis y ejecución, **confirma ediciones**.
140
+ `opencode.json` en la raíz del proyecto:
141
+
142
+ ```json
143
+ {
144
+ "$schema": "https://opencode.ai/config.json",
145
+ "permission": {
146
+ "read": "allow",
147
+ "grep": "allow",
148
+ "glob": "allow",
149
+ "webfetch": "allow",
150
+ "external_directory": "ask",
151
+ "edit": "ask",
152
+ "bash": {
153
+ "*": "allow",
154
+ "rm -rf *": "ask",
155
+ "git push *": "ask"
156
+ }
157
+ }
158
+ }
159
+ ```
160
+
161
+ - `bash: "*": "allow"` cubre **líneas de comando y Python** (`python ...`, `mvn`, `node`).
162
+ - `webfetch: "allow"` → **fetch externo de lectura**.
163
+ - `external_directory: "ask"` mantiene la confirmación para **rutas fuera del proyecto**
164
+ (en `--auto` pasa a `"allow"`, ver §2.1/§2.2).
165
+ - `edit: "ask"` → los **cambios de código siguen confirmándose**.
166
+
167
+ ### 2.1 Opción A — Scoped (recomendada)
168
+ La clave para "rutas fuera del scope" es **`external_directory`** (por defecto `"ask"`):
169
+
170
+ ```json
171
+ {
172
+ "$schema": "https://opencode.ai/config.json",
173
+ "permission": {
174
+ "read": "allow",
175
+ "grep": "allow",
176
+ "glob": "allow",
177
+ "external_directory": "allow",
178
+ "edit": "allow",
179
+ "bash": {
180
+ "*": "allow",
181
+ "rm -rf *": "ask",
182
+ "git push *": "ask"
183
+ }
184
+ }
185
+ }
186
+ ```
187
+
188
+ ### 2.2 Opción B — Bypass total
189
+ ```json
190
+ { "$schema": "https://opencode.ai/config.json", "permission": "allow" }
191
+ ```
192
+ (equivale a `{ "*": "allow" }`). Nota: los archivos `.env` están **denegados por defecto**.
193
+
194
+ ### 2.3 Opción C — Acotado solo al agente `cdk`
195
+ Deja el resto en `"ask"` y abre el bypass únicamente cuando corre `cdk`:
196
+
197
+ ```json
198
+ {
199
+ "$schema": "https://opencode.ai/config.json",
200
+ "permission": { "*": "ask" },
201
+ "agent": {
202
+ "cdk": {
203
+ "permission": {
204
+ "read": "allow",
205
+ "grep": "allow",
206
+ "glob": "allow",
207
+ "external_directory": "allow",
208
+ "edit": "allow",
209
+ "bash": { "*": "allow", "rm -rf *": "deny", "git push *": "ask" }
210
+ }
211
+ }
212
+ }
213
+ }
214
+ ```
215
+
216
+ Las reglas del agente **se fusionan** con las globales y **tienen prioridad**.
217
+
218
+ ---
219
+
220
+ ## 3. Resumen rápido
221
+
222
+ | Necesidad | Claude Code | opencode |
223
+ | :-- | :-- | :-- |
224
+ | **Base modo normal** (lectura proyecto + comandos + Python + fetch, edita con confirmación) | `allow: [Bash, PowerShell, WebFetch, WebSearch]` (§1.0) | `read/grep/glob/webfetch/bash: allow`, `edit: ask` (§2.0) |
225
+ | Leer rutas fuera del scope en análisis | `permissions.additionalDirectories` | `external_directory: "allow"` |
226
+ | Auto-aceptar ediciones (post-GATE) | `defaultMode: "acceptEdits"` o Shift+Tab | `edit: "allow"` |
227
+ | Bypass total (solo parar en el plan) | `claude --dangerously-skip-permissions` | `"permission": "allow"` |
228
+ | Acotar el bypass a un solo flujo | `allow` por patrón + hook | `agent.cdk.permission` |
229
+ | Siempre pregunta (no bypasseable) | `rm -rf /`, `rm -rf ~`, reglas `ask` | `.env` (deny por defecto) |
230
+
231
+ > El **GATE del plan no se configura aquí**: lo impone el `SKILL.md` de `cdk`. Esta config solo
232
+ > elimina los **prompts de permiso** alrededor de él.