7d299554bf
Nuevos modulos: - services/ai.ts: cliente IA provider-agnostico (OpenRouter, MiniMax) - services/db.ts: Dexie core con tabla settings + project_docs - services/storage.ts: Cache-Aside + Write-Through (L1 Map → L2 Dexie → L3 localStorage) - services/parse-transcription.ts: parser .docx/.vtt/.txt/.md - services/session-analyzer.ts: extraccion IA de sesiones (resumen, tareas, decisiones) - services/project-doc.ts: documento maestro MD (Bloque 1 resumen + Bloque 2 sesiones) - stores/settings.ts: proveedores IA, modelos, API keys separadas por provider - stores/transcriptions.ts: pipeline upload → analyze → create HU en KAPPA - views/SettingsView.vue: configuracion IA (OpenRouter, MiniMax, OpenCode bridge) - views/TranscriptionsView.vue: subida multiple + analisis sesion + visor MD + calendario - components/AiProjectChat.vue: chat contextual por proyecto con selector de modelo Cambios en existentes: - stores/auth.ts, kappa-api.ts, upload-hu.ts: migrados a storage service (Dexie + localStorage) - stores/projects.ts, workitems.ts: kappa_last_project via storage - DashboardView.vue: descripcion reemplazada por AiProjectChat - NewDashboardView.vue: tabs transcriptions + settings + navigate-settings events - NavMain.vue: items Transcripciones + Configuracion - SiteHeader.vue: labels tabs + language via storage - LoginView.vue: remember_email via storage - i18n: +80 keys español/ingles - vite.config.ts: proxy CORS para MiniMax - package.json: +mammoth.js
155 lines
6.3 KiB
Markdown
155 lines
6.3 KiB
Markdown
# KAPPA Hub
|
|
|
|
> Asistente multi-proyecto para KAPPA. Semilla de RUMBO.
|
|
> POC → validación diaria → lo que funciona migra a RUMBO.
|
|
|
|
## Stack
|
|
|
|
| Capa | Tecnología | Versión |
|
|
|------|-----------|---------|
|
|
| Desktop shell | Tauri v2 | 2.11 |
|
|
| Frontend | Vue 3 + TypeScript + Vite | 3.4 / 5.x |
|
|
| Runtime JS | Bun | 1.3+ |
|
|
| Estado | Pinia | 2.1 |
|
|
| BD local | Turso (libSQL) | Embedded |
|
|
| HTTP | fetch() directo a KAPPA (proxy Vite en dev) |
|
|
| Auth | Bearer token (POST /api/users/login/) |
|
|
| UI | shadcn-vue (New York) + Tailwind CSS v4 | 2.7 |
|
|
| Tablas | AG Grid Community + tanstack/vue-table | 35.3 |
|
|
| i18n | vue-i18n (es.json + en.json) — **PROHIBIDO hardcodear texto** | 11.4 |
|
|
|
|
## Reglas de código
|
|
|
|
1. **PROHIBIDO hardcodear texto visible al usuario.** Todo texto debe usar `t('clave')` de vue-i18n. Si no existe la clave, agregarla a `es.json` y `en.json`.
|
|
2. **KAPPA retorna tipos mixtos**: strings, números y booleanos para el mismo campo (ej: `status` puede ser `"active"`, `true`, o `3`). Siempre usar `String(valor)` o `safeStr()` antes de operar.
|
|
3. **No usar `.catch(() => {})`** sin loguear el error. Siempre `console.error()`.
|
|
4. **Los nombres de funciones y archivos van en español** cuando son semánticos del dominio (ej: `syncHUsToTurso` → OK, pero labels visibles van en i18n).
|
|
5. **Toda función debe tener observabilidad**: loguear entrada con `[Alpha]` + acción + datos clave, loguear errores con `[Alpha]` + descripción + error completo. Sin logs no se puede diagnosticar.
|
|
6. **IDs jerárquicos obligatorios en componentes**: todo elemento raíz de sección debe tener `id="{view}-{section}-{element}"` en kebab-case. Ej: `dashboard-stats-epics`, `login-card`, `users-table`. Permite ubicar cualquier componente por su ID sin ambigüedad.
|
|
|
|
## Sincronización entre máquinas (Mac Mini ↔ MacBook Air)
|
|
|
|
El proyecto vive en iCloud Drive: `com~apple~CloudDocs/AI/Teloprax/02_productos/kappa-hub/`.
|
|
|
|
- **Código**: se sincroniza automáticamente vía iCloud. Solo `bun install` una vez por máquina.
|
|
- **Datos de KAPPA**: viven en el servidor (kappa.lambdaanalytics.co). El Hub es solo un cliente.
|
|
- **Token**: localStorage del navegador. Loguearse una vez por máquina.
|
|
- **Datos locales futuros** (borradores, caché): se guardarán como archivos en `data/` dentro del proyecto, sincronizados vía iCloud. Ver `../rumbo/sincronizacion.md`.
|
|
|
|
## Calendarios externos (K-21)
|
|
|
|
| Servicio | Auth | Capacidad |
|
|
|----------|------|-----------|
|
|
| Google Calendar | OAuth2 | Leer eventos, escribir eventos |
|
|
| Microsoft Graph (Outlook/Teams) | OAuth2 | Leer eventos, escribir eventos |
|
|
| iCal (.ics) | Archivo | Importar/exportar |
|
|
|
|
### Flujo post-reunión (K-22)
|
|
|
|
```
|
|
1. RUMBO lee calendario (Google/Outlook)
|
|
2. Detecta: "Reunión con Cliente X, 8-9am"
|
|
3. Después de la reunión (+15/30 min):
|
|
→ 🔔 "Terminó tu reunión con Cliente X"
|
|
→ "¿Ya capturaste las notas?"
|
|
→ "¿Hay transcripción?"
|
|
→ "¿Se extrajeron las tareas?"
|
|
4. Si no → RUMBO guía a completar
|
|
```
|
|
|
|
**Analogía**: RUMBO como Apple Watch — te alerta cuando llevas mucho tiempo sentado (reuniones sin seguimiento = deuda de contexto).
|
|
|
|
### API de recordatorios (futuro)
|
|
|
|
```typescript
|
|
interface Reminder {
|
|
id: string
|
|
trigger_at: string // ISO datetime
|
|
title: string
|
|
body: string
|
|
action_url?: string // deep link a la vista correspondiente
|
|
dismissed: boolean
|
|
source: 'calendar' | 'scheduler' | 'hu_deadline'
|
|
}
|
|
```
|
|
|
|
## APIs KAPPA integradas
|
|
|
|
| Endpoint | Método | Uso en el hub |
|
|
|----------|--------|--------------|
|
|
| `/users/login/` | POST | Auth |
|
|
| `/initiatives-all/` | GET | Listar proyectos |
|
|
| `/users/all/` | GET | Listar usuarios |
|
|
| `/userstorys/create/` | POST | Crear HU desde transcripción |
|
|
| `/logbooks_master/create/` | POST | Crear bitácora |
|
|
| `/logbooks/create/` | POST | Entrada de bitácora |
|
|
| `/plannings_master/create/` | POST | Crear planeación |
|
|
| `/plannings/create/` | POST | Entrada de planeación |
|
|
| `/business-rules/create/` | POST | Reglas de negocio |
|
|
| `/functionalrequirements/create/` | POST | Requisitos funcionales/no funcionales |
|
|
|
|
## Estructura
|
|
|
|
```
|
|
kappa-hub/
|
|
├── src/
|
|
│ ├── types/kappa.ts # Tipos TypeScript
|
|
│ ├── services/kappa-api.ts # Cliente HTTP KAPPA
|
|
│ ├── stores/ # Pinia
|
|
│ │ ├── auth.ts
|
|
│ │ ├── projects.ts
|
|
│ │ └── workitems.ts
|
|
│ ├── views/
|
|
│ │ ├── LoginView.vue
|
|
│ │ └── DashboardView.vue
|
|
│ ├── components/layout/
|
|
│ │ └── AppShell.vue
|
|
│ ├── App.vue
|
|
│ └── main.ts
|
|
├── package.json
|
|
└── vite.config.ts
|
|
```
|
|
|
|
## Cómo ejecutar
|
|
|
|
```bash
|
|
cd "02_productos/kappa-hub"
|
|
bun install # una vez por máquina
|
|
bun dev # http://localhost:5173
|
|
```
|
|
|
|
Abre http://localhost:5173. El proxy de Vite redirige `/api/*` a `https://kappa.lambdaanalytics.co`.
|
|
|
|
## Pipeline de transcripciones (K-10) ✅
|
|
|
|
Nueva vista **Transcripciones** en la barra lateral (icono upload).
|
|
|
|
**Flujo:**
|
|
1. Configurar API key de OpenRouter (DeepSeek) — se guarda en localStorage
|
|
2. Seleccionar proyecto destino desde el dropdown
|
|
3. Arrastrar o seleccionar archivo (.docx, .vtt, .txt, .md)
|
|
4. El archivo se parsea localmente (mammoth.js para docx, parseo manual para VTT)
|
|
5. Click "Analizar con IA" → se envía a OpenRouter DeepSeek
|
|
6. La IA devuelve HUs estructuradas (título, descripción, criterios de aceptación, prioridad, tipo)
|
|
7. Revisar, seleccionar/deseleccionar, eliminar HUs
|
|
8. Click "Crear en KAPPA" → se crean vía API
|
|
9. Las HUs creadas se marcan en verde y se refresca el store de workitems
|
|
|
|
**Archivos nuevos:**
|
|
- `src/services/ai.ts` — Cliente OpenRouter DeepSeek
|
|
- `src/services/parse-transcription.ts` — Parseo de .docx/.vtt/.txt/.md
|
|
- `src/stores/transcriptions.ts` — Pinia store del pipeline
|
|
- `src/views/TranscriptionsView.vue` — Vista completa con upload, preview, análisis, resultados
|
|
|
|
**Modelo usado:** `deepseek/deepseek-chat-v3-0324:free` (free tier de OpenRouter)
|
|
|
|
## Próximos pasos
|
|
|
|
1. ~~Agregar Dexie.js para cache offline~~ (K-15)
|
|
2. ~~Pipeline de transcripciones~~ (K-10)
|
|
3. ⬜ **Dashboard multi-proyecto** (K-11)
|
|
4. ⬜ **Priorizador diario** (K-12)
|
|
5. ⬜ **Generador de reportes** (K-13)
|
|
6. ⬜ **Integración calendario Google/Outlook** (K-21)
|
|
7. ⬜ **Alertas post-reunión** (K-22)
|