@johpaz/hive-sdk 0.0.12 → 0.0.15
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/.github/CODEOWNERS +9 -0
- package/.github/workflows/publish.yml +89 -0
- package/.github/workflows/version-bump.yml +102 -0
- package/CHANGELOG.md +38 -0
- package/README.md +158 -0
- package/bun.lock +543 -0
- package/bunfig.toml +7 -0
- package/docs/API-AGENTS.md +316 -0
- package/docs/API-CONTEXT-COMPILER.md +252 -0
- package/docs/API-DAG-SCHEDULER.md +273 -0
- package/docs/API-TOOLS-SKILLS-CHANNELS.md +293 -0
- package/docs/API-WORKERS-EVENTS.md +152 -0
- package/docs/INDEX.md +141 -0
- package/docs/README.md +68 -0
- package/package.json +54 -105
- package/packages/cli/package.json +17 -0
- package/packages/cli/src/commands/init.ts +56 -0
- package/packages/cli/src/commands/run.ts +45 -0
- package/packages/cli/src/commands/test.ts +42 -0
- package/packages/cli/src/commands/trace.ts +55 -0
- package/packages/cli/src/index.ts +43 -0
- package/packages/core/package.json +58 -0
- package/packages/core/src/ace/Curator.ts +158 -0
- package/packages/core/src/ace/Reflector.ts +200 -0
- package/packages/core/src/ace/Tracer.ts +100 -0
- package/packages/core/src/ace/index.ts +4 -0
- package/packages/core/src/agent/AgentRunner.ts +699 -0
- package/packages/core/src/agent/Compaction.ts +221 -0
- package/packages/core/src/agent/ContextCompiler.ts +567 -0
- package/packages/core/src/agent/ContextGuard.ts +91 -0
- package/packages/core/src/agent/ConversationStore.ts +244 -0
- package/packages/core/src/agent/Hooks.ts +166 -0
- package/packages/core/src/agent/NativeTools.ts +31 -0
- package/packages/core/src/agent/PromptBuilder.ts +169 -0
- package/packages/core/src/agent/Service.ts +267 -0
- package/packages/core/src/agent/StuckLoop.ts +133 -0
- package/packages/core/src/agent/index.ts +12 -0
- package/packages/core/src/agent/providers/LLMClient.ts +149 -0
- package/packages/core/src/agent/providers/anthropic.ts +212 -0
- package/packages/core/src/agent/providers/gemini.ts +215 -0
- package/packages/core/src/agent/providers/index.ts +199 -0
- package/packages/core/src/agent/providers/interface.ts +195 -0
- package/packages/core/src/agent/providers/ollama.ts +175 -0
- package/packages/core/src/agent/providers/openai-compat.ts +231 -0
- package/packages/core/src/agent/providers.ts +1 -0
- package/packages/core/src/agent/selectors/PlaybookSelector.ts +147 -0
- package/packages/core/src/agent/selectors/SkillSelector.ts +478 -0
- package/packages/core/src/agent/selectors/ToolSelector.ts +577 -0
- package/packages/core/src/agent/selectors/index.ts +6 -0
- package/packages/core/src/api/createAgent.test.ts +48 -0
- package/packages/core/src/api/createAgent.ts +122 -0
- package/packages/core/src/api/index.ts +2 -0
- package/packages/core/src/canvas/CanvasManager.ts +390 -0
- package/packages/core/src/canvas/a2ui-tools.ts +255 -0
- package/packages/core/src/canvas/canvas-tools.ts +448 -0
- package/packages/core/src/canvas/emitter.ts +149 -0
- package/packages/core/src/canvas/index.ts +6 -0
- package/packages/core/src/config/index.ts +2 -0
- package/packages/core/src/config/loader.ts +554 -0
- package/packages/core/src/ethics/EthicsGuard.test.ts +54 -0
- package/packages/core/src/ethics/EthicsGuard.ts +66 -0
- package/packages/core/src/ethics/index.ts +2 -0
- package/packages/core/src/gateway/channel-notify.test.ts +14 -0
- package/packages/core/src/gateway/channel-notify.ts +12 -0
- package/packages/core/src/gateway/index.ts +1 -0
- package/packages/core/src/index.ts +37 -0
- package/packages/core/src/mcp/MCPClient.ts +439 -0
- package/packages/core/src/mcp/MCPToolAdapter.ts +176 -0
- package/packages/core/src/mcp/config.ts +13 -0
- package/packages/core/src/mcp/hot-reload.ts +147 -0
- package/packages/core/src/mcp/index.ts +11 -0
- package/packages/core/src/mcp/logger.ts +42 -0
- package/packages/core/src/mcp/singleton.ts +21 -0
- package/packages/core/src/mcp/transports/index.ts +67 -0
- package/packages/core/src/mcp/transports/sse.ts +241 -0
- package/packages/core/src/mcp/transports/websocket.ts +159 -0
- package/packages/core/src/memory/Scratchpad.test.ts +47 -0
- package/packages/core/src/memory/Scratchpad.ts +37 -0
- package/packages/core/src/memory/Storage.ts +6 -0
- package/packages/core/src/memory/index.ts +2 -0
- package/packages/core/src/multimodal/VisionService.ts +293 -0
- package/packages/core/src/multimodal/index.ts +2 -0
- package/packages/core/src/multimodal/types.ts +28 -0
- package/packages/core/src/security/Pairing.ts +250 -0
- package/packages/core/src/security/RateLimit.ts +270 -0
- package/packages/core/src/security/index.ts +4 -0
- package/packages/core/src/skills/SkillLoader.ts +388 -0
- package/packages/core/src/skills/bundled-data.generated.ts +3332 -0
- package/packages/core/src/skills/defineSkill.ts +18 -0
- package/packages/core/src/skills/index.ts +4 -0
- package/packages/core/src/state/index.ts +2 -0
- package/packages/core/src/state/store.ts +312 -0
- package/packages/core/src/storage/SQLiteStorage.ts +407 -0
- package/packages/core/src/storage/crypto.ts +101 -0
- package/packages/core/src/storage/index.ts +10 -0
- package/packages/core/src/storage/onboarding.ts +1603 -0
- package/packages/core/src/storage/schema.ts +689 -0
- package/packages/core/src/storage/seed.ts +740 -0
- package/packages/core/src/storage/usage.ts +374 -0
- package/packages/core/src/swarm/AgentBus.ts +460 -0
- package/packages/core/src/swarm/AgentExecutor.ts +53 -0
- package/packages/core/src/swarm/Coordinator.ts +251 -0
- package/packages/core/src/swarm/EventBridge.ts +122 -0
- package/packages/core/src/swarm/EventBus.ts +169 -0
- package/packages/core/src/swarm/TaskGraph.ts +192 -0
- package/packages/core/src/swarm/TaskNode.ts +97 -0
- package/packages/core/src/swarm/TaskResult.ts +22 -0
- package/packages/core/src/swarm/WorkerPool.ts +236 -0
- package/packages/core/src/swarm/errors.ts +37 -0
- package/packages/core/src/swarm/index.ts +30 -0
- package/packages/core/src/swarm/presets/HiveLearnPreset.ts +99 -0
- package/packages/core/src/swarm/presets/ResearchPreset.ts +97 -0
- package/packages/core/src/swarm/presets/index.ts +4 -0
- package/packages/core/src/swarm/strategies/ParallelStrategy.ts +21 -0
- package/packages/core/src/swarm/strategies/PriorityStrategy.ts +46 -0
- package/packages/core/src/swarm/strategies/index.ts +3 -0
- package/packages/core/src/swarm/types.ts +164 -0
- package/packages/core/src/tools/ToolExecutor.ts +58 -0
- package/packages/core/src/tools/ToolRegistry.test.ts +98 -0
- package/packages/core/src/tools/ToolRegistry.ts +61 -0
- package/packages/core/src/tools/agents/get-available-models.ts +118 -0
- package/packages/core/src/tools/agents/index.ts +715 -0
- package/packages/core/src/tools/bridge-events.ts +26 -0
- package/packages/core/src/tools/canvas/index.ts +375 -0
- package/packages/core/src/tools/cli/index.ts +142 -0
- package/packages/core/src/tools/codebridge/index.ts +342 -0
- package/packages/core/src/tools/core/index.ts +476 -0
- package/packages/core/src/tools/cron/index.ts +626 -0
- package/packages/core/src/tools/filesystem/fs-delete.ts +78 -0
- package/packages/core/src/tools/filesystem/fs-edit.ts +106 -0
- package/packages/core/src/tools/filesystem/fs-exists.ts +63 -0
- package/packages/core/src/tools/filesystem/fs-glob.ts +108 -0
- package/packages/core/src/tools/filesystem/fs-list.ts +129 -0
- package/packages/core/src/tools/filesystem/fs-read.ts +72 -0
- package/packages/core/src/tools/filesystem/fs-write.ts +67 -0
- package/packages/core/src/tools/filesystem/index.ts +34 -0
- package/packages/core/src/tools/filesystem/workspace-guard.ts +62 -0
- package/packages/core/src/tools/index.ts +231 -0
- package/packages/core/src/tools/meeting/index.ts +363 -0
- package/packages/core/src/tools/office/index.ts +47 -0
- package/packages/core/src/tools/office/office-escribir-docx.ts +192 -0
- package/packages/core/src/tools/office/office-escribir-pdf.ts +172 -0
- package/packages/core/src/tools/office/office-escribir-pptx.ts +174 -0
- package/packages/core/src/tools/office/office-escribir-xlsx.ts +116 -0
- package/packages/core/src/tools/office/office-leer-docx.ts +93 -0
- package/packages/core/src/tools/office/office-leer-pdf.ts +114 -0
- package/packages/core/src/tools/office/office-leer-pptx.ts +136 -0
- package/packages/core/src/tools/office/office-leer-xlsx.ts +124 -0
- package/packages/core/src/tools/projects/index.ts +37 -0
- package/packages/core/src/tools/projects/project-create.ts +94 -0
- package/packages/core/src/tools/projects/project-done.ts +66 -0
- package/packages/core/src/tools/projects/project-fail.ts +66 -0
- package/packages/core/src/tools/projects/project-list.ts +96 -0
- package/packages/core/src/tools/projects/project-update.ts +72 -0
- package/packages/core/src/tools/projects/task-create.ts +68 -0
- package/packages/core/src/tools/projects/task-evaluate.ts +93 -0
- package/packages/core/src/tools/projects/task-update.ts +93 -0
- package/packages/core/src/tools/types.ts +39 -0
- package/packages/core/src/tools/voice/index.ts +104 -0
- package/packages/core/src/tools/web/browser-click.ts +78 -0
- package/packages/core/src/tools/web/browser-extract.ts +139 -0
- package/packages/core/src/tools/web/browser-navigate.ts +106 -0
- package/packages/core/src/tools/web/browser-screenshot.ts +87 -0
- package/packages/core/src/tools/web/browser-script.ts +88 -0
- package/packages/core/src/tools/web/browser-service.ts +554 -0
- package/packages/core/src/tools/web/browser-type.ts +101 -0
- package/packages/core/src/tools/web/browser-wait.ts +136 -0
- package/packages/core/src/tools/web/index.ts +41 -0
- package/packages/core/src/tools/web/web-fetch.ts +78 -0
- package/packages/core/src/tools/web/web-search.ts +123 -0
- package/packages/core/src/utils/benchmark.ts +80 -0
- package/packages/core/src/utils/crypto.ts +73 -0
- package/packages/core/src/utils/date.ts +42 -0
- package/packages/core/src/utils/index.ts +10 -0
- package/packages/core/src/utils/logger.ts +389 -0
- package/packages/core/src/utils/retry.ts +70 -0
- package/packages/core/src/utils/toon.ts +253 -0
- package/packages/core/src/voice/index.ts +656 -0
- package/test/setup-db.ts +216 -0
- package/tsconfig.json +39 -0
- package/src/agents.ts +0 -1
- package/src/canvas.ts +0 -1
- package/src/channels.ts +0 -1
- package/src/config.ts +0 -1
- package/src/events.ts +0 -1
- package/src/gateway.ts +0 -1
- package/src/index.ts +0 -304
- package/src/mcp.ts +0 -1
- package/src/multimodal.ts +0 -1
- package/src/scheduler.ts +0 -1
- package/src/security.ts +0 -1
- package/src/skills.ts +0 -1
- package/src/state.ts +0 -1
- package/src/storage.ts +0 -1
- package/src/tools.ts +0 -1
- package/src/tts.ts +0 -1
- package/src/types.ts +0 -82
- package/src/utils.ts +0 -1
- package/src/voice.ts +0 -1
|
@@ -0,0 +1,740 @@
|
|
|
1
|
+
import { getDb } from "./SQLiteStorage.ts"
|
|
2
|
+
import { logger } from "../utils/logger.ts"
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Seed de datos predeterminados para Hive
|
|
6
|
+
* Las tools se crean con enabled=1 (disponibles) y active=1 (activas por defecto)
|
|
7
|
+
* El usuario puede desactivarlas desde la UI si no las necesita
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
export interface SeedData {
|
|
11
|
+
tools: Array<{ id: string; name: string; category: string; description: string; enabled?: boolean }>
|
|
12
|
+
providers: Array<{ id: string; name: string; baseUrl?: string; category?: string }>
|
|
13
|
+
models: Array<{ id: string; providerId: string; name: string; modelType: string; contextWindow?: number; capabilities?: string }>
|
|
14
|
+
mcpServers: Array<{ id: string; name: string; transport: string; command?: string; args?: string[]; builtin: boolean }>
|
|
15
|
+
channels: Array<{ id: string; type: string }>
|
|
16
|
+
ethics: Array<{ id: string; name: string; description: string; content: string; isDefault: boolean }>
|
|
17
|
+
codeBridge: Array<{ id: string; name: string; cliCommand: string; port: number }>
|
|
18
|
+
codeBridgeConfig: Array<{ id: string; key: string; value: string }>
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export const SEED_DATA: SeedData = {
|
|
22
|
+
tools: [
|
|
23
|
+
|
|
24
|
+
// ─────────────────────────────────────────
|
|
25
|
+
// 1. FILESYSTEM — Espacio de trabajo del agente
|
|
26
|
+
// ─────────────────────────────────────────
|
|
27
|
+
{ id: "fs_read", name: "fs_read", category: "filesystem", description: "Leer contenido de archivos del espacio de trabajo. Sinónimos: ver archivo, abrir archivo, leer contenido, mostrar archivo" },
|
|
28
|
+
{ id: "fs_write", name: "fs_write", category: "filesystem", description: "Crear o sobrescribir archivos en el espacio de trabajo. Sinónimos: crear archivo, guardar archivo, escribir archivo, nuevo archivo" },
|
|
29
|
+
{ id: "fs_edit", name: "fs_edit", category: "filesystem", description: "Editar líneas específicas o secciones de un archivo. Sinónimos: modificar archivo, editar líneas, actualizar contenido, cambiar texto" },
|
|
30
|
+
{ id: "fs_delete", name: "fs_delete", category: "filesystem", description: "Eliminar archivos o directorios del espacio de trabajo. Sinónimos: borrar archivo, eliminar carpeta, quitar archivo, remover" },
|
|
31
|
+
{ id: "fs_list", name: "fs_list", category: "filesystem", description: "Listar archivos y directorios en el espacio de trabajo. Sinónimos: ver carpeta, explorar directorio, listar contenido, mostrar archivos" },
|
|
32
|
+
{ id: "fs_glob", name: "fs_glob", category: "filesystem", description: "Buscar archivos que coincidan con patrones wildcard. Sinónimos: buscar archivos, patrón, encontrar archivos, filtrar por nombre" },
|
|
33
|
+
{ id: "fs_exists", name: "fs_exists", category: "filesystem", description: "Verificar si existe un archivo o directorio. Sinónimos: comprobar archivo, existe archivo, verificar existencia, hay archivo" },
|
|
34
|
+
|
|
35
|
+
// ─────────────────────────────────────────
|
|
36
|
+
// 2. WEB — Búsqueda, navegación + automatización
|
|
37
|
+
// ─────────────────────────────────────────
|
|
38
|
+
{ id: "web_search", name: "web_search", category: "web", description: "Buscar en la web información actual y noticias. Sinónimos: búsqueda web, noticias, información, buscar en internet, google" },
|
|
39
|
+
{ id: "web_fetch", name: "web_fetch", category: "web", description: "Obtener contenido de texto de una URL (ligero, sin JS). Sinónimos: descargar página, extraer texto, obtener contenido, leer url" },
|
|
40
|
+
{ id: "browser_navigate", name: "browser_navigate", category: "web", description: "Navegar a una URL y obtener contenido renderizado (soporta JS). Sinónimos: abrir página, sitio web, navegar url, cargar página" },
|
|
41
|
+
{ id: "browser_screenshot", name: "browser_screenshot", category: "web", description: "Tomar captura de pantalla de la página actual. Sinónimos: screenshot, imagen de página, capturar pantalla, foto página" },
|
|
42
|
+
{ id: "browser_click", name: "browser_click", category: "web", description: "Hacer clic en un elemento de la página web. Sinónimos: botón, enlace, interactuar, presionar, seleccionar" },
|
|
43
|
+
{ id: "browser_type", name: "browser_type", category: "web", description: "Escribir texto en un campo de formulario. Sinónimos: escribir formulario, tipear, campo de texto, input, llenar campo" },
|
|
44
|
+
{ id: "browser_extract", name: "browser_extract", category: "web", description: "Extraer texto, enlaces o datos estructurados usando selectores CSS o XPath. Sinónimos: obtener datos, scraping, selectores, extraer información" },
|
|
45
|
+
{ id: "browser_script", name: "browser_script", category: "web", description: "Ejecutar JavaScript arbitrario en el navegador y obtener resultado. Sinónimos: ejecutar javascript, script, código, función, evaluar" },
|
|
46
|
+
{ id: "browser_wait", name: "browser_wait", category: "web", description: "Esperar a que aparezca un elemento o se cumpla una condición. Sinónimos: esperar, condición, elemento, selector, pausa" },
|
|
47
|
+
|
|
48
|
+
// ─────────────────────────────────────────
|
|
49
|
+
// 3. PROJECTS — Proyectos y tareas en BD
|
|
50
|
+
// ─────────────────────────────────────────
|
|
51
|
+
{ id: "project_create", name: "project_create", category: "projects", description: "Crear un nuevo proyecto con tareas en la base de datos. Sinónimos: nuevo proyecto, iniciar plan, crear proyecto" },
|
|
52
|
+
{ id: "project_list", name: "project_list", category: "projects", description: "Listar todos los proyectos con su estado. Sinónimos: ver proyectos, historial, listar proyectos, mostrar proyectos" },
|
|
53
|
+
{ id: "project_update", name: "project_update", category: "projects", description: "Actualizar progreso o metadatos del proyecto. Sinónimos: avance, porcentaje, estado, actualizar proyecto" },
|
|
54
|
+
{ id: "project_done", name: "project_done", category: "projects", description: "Marcar proyecto como completado y archivarlo. Sinónimos: proyecto terminado, cerrar proyecto, completado, finalizar" },
|
|
55
|
+
{ id: "project_fail", name: "project_fail", category: "projects", description: "Marcar proyecto como fallido y registrar razón. Sinónimos: proyecto fallido, marcar fracaso, error, falló proyecto" },
|
|
56
|
+
{ id: "task_create", name: "task_create", category: "projects", description: "Agregar una tarea o subtarea a un proyecto existente. Sinónimos: crear tarea, agregar tarea, subtarea, pendiente" },
|
|
57
|
+
{ id: "task_update", name: "task_update", category: "projects", description: "Actualizar estado de tarea (pendiente, en_progreso, hecho). Sinónimos: actualizar tarea, marcar completa, en progreso" },
|
|
58
|
+
{ id: "task_evaluate", name: "task_evaluate", category: "projects", description: "Evaluar resultado de tarea contra criterios de aceptación. Sinónimos: validar resultado, criterios de aceptación, revisar tarea" },
|
|
59
|
+
|
|
60
|
+
// ─────────────────────────────────────────
|
|
61
|
+
// 4. CRON — Tareas programadas (Croner-based)
|
|
62
|
+
// ─────────────────────────────────────────
|
|
63
|
+
{ id: "cron_create", name: "cron_create", category: "cron", description: "Crear tarea programada: recurrente (expresión cron) o única (fire_at). Requiere campo 'task' con instrucción para el agente. Sinónimos: programar tarea, crear recordatorio, agendar, automatizar horario, tarea recurrente, una vez" },
|
|
64
|
+
{ id: "cron_list", name: "cron_list", category: "cron", description: "Listar todas las tareas programadas con próximos horarios de ejecución. Sinónimos: ver tareas programadas, listar cronograma, próximas ejecuciones" },
|
|
65
|
+
{ id: "cron_update", name: "cron_update", category: "cron", description: "Actualizar tarea programada existente: cambiar expresión, instrucción, canal, ventana temporal. Sinónimos: modificar cron, editar recordatorio, cambiar horario, actualizar tarea" },
|
|
66
|
+
{ id: "cron_pause", name: "cron_pause", category: "cron", description: "Pausar temporalmente una tarea programada sin eliminarla. Sinónimos: pausar tarea programada, detener temporalmente, suspender recordatorio" },
|
|
67
|
+
{ id: "cron_resume", name: "cron_resume", category: "cron", description: "Reanudar una tarea programada previamente pausada. Sinónimos: reanudar tarea, continuar tarea pausada, activar recordatorio" },
|
|
68
|
+
{ id: "cron_delete", name: "cron_delete", category: "cron", description: "Eliminar una tarea programada permanentemente. Sinónimos: eliminar tarea programada, borrar recordatorio, cancelar tarea" },
|
|
69
|
+
{ id: "cron_trigger", name: "cron_trigger", category: "cron", description: "Ejecutar manualmente una tarea programada de forma inmediata. Sinónimos: ejecutar tarea ahora, forzar ejecución, disparar manualmente" },
|
|
70
|
+
{ id: "cron_history", name: "cron_history", category: "cron", description: "Obtener historial de ejecuciones y logs de una tarea programada. Sinónimos: historial ejecuciones, logs tarea, registro ejecuciones" },
|
|
71
|
+
|
|
72
|
+
// ─────────────────────────────────────────
|
|
73
|
+
// 5. CLI — Ejecución de comandos
|
|
74
|
+
// ─────────────────────────────────────────
|
|
75
|
+
{ id: "cli_exec", name: "cli_exec", category: "cli", description: "Ejecutar comandos shell/bash en el entorno del agente. NOTA: NO usar para tareas programadas, usar cron.create. Sinónimos: ejecutar comando, terminal, bash, script, consola" },
|
|
76
|
+
|
|
77
|
+
// ─────────────────────────────────────────
|
|
78
|
+
// 6. AGENTS — Memoria, workers y delegación
|
|
79
|
+
// ─────────────────────────────────────────
|
|
80
|
+
{ id: "memory_write", name: "memory_write", category: "agents", description: "Guardar información en memoria persistente a largo plazo. Sinónimos: guardar memoria, recordar, guardar dato, memoria persistente" },
|
|
81
|
+
{ id: "memory_read", name: "memory_read", category: "agents", description: "Recuperar una entrada de memoria por identificador. Sinónimos: leer memoria, recuperar dato, obtener memoria" },
|
|
82
|
+
{ id: "memory_list", name: "memory_list", category: "agents", description: "Listar todas las entradas de memoria guardadas. Sinónimos: listar memorias, ver memorias, todas las memorias" },
|
|
83
|
+
{ id: "memory_search", name: "memory_search", category: "agents", description: "Buscar memorias por palabra clave. Sinónimos: buscar memoria, encontrar recuerdo, buscar dato guardado" },
|
|
84
|
+
{ id: "memory_delete", name: "memory_delete", category: "agents", description: "Eliminar una entrada de memoria específica. Sinónimos: borrar memoria, eliminar recuerdo, quitar dato" },
|
|
85
|
+
{ id: "get_available_models", name: "get_available_models", category: "agents", description: "Obtener lista de providers y modelos activos de la BD. Sinónimos: ver modelos, listar providers, modelos disponibles, consultar modelos, provider activo, qué modelos tengo, modelos para código, modelos para chat" },
|
|
86
|
+
{ id: "agent_create", name: "agent_create", category: "agents", description: "Crear un nuevo agente worker especializado. Sinónimos: crear agente, nuevo worker, nuevo trabajador" },
|
|
87
|
+
{ id: "agent_find", name: "agent_find", category: "agents", description: "Buscar agentes worker existentes en ejecución o inactivos. Sinónimos: buscar agente, encontrar worker, localizar agente" },
|
|
88
|
+
{ id: "agent_archive", name: "agent_archive", category: "agents", description: "Archivar o terminar un agente worker. Sinónimos: archivar agente, terminar worker, desactivar agente" },
|
|
89
|
+
{ id: "task_delegate", name: "task_delegate", category: "agents", description: "Delegar una tarea general a un agente worker específico. Sinónimos: delegar tarea, asignar worker, ejecutar por agente" },
|
|
90
|
+
{ id: "task_delegate_code", name: "task_delegate_code", category: "agents", description: "Delegar tarea de código a un subagente CLI (Qwen, Claude, etc.) vía Code Bridge. Sinónimos: delegar código, subagente CLI, programación, Qwen" },
|
|
91
|
+
{ id: "task_status", name: "task_status", category: "agents", description: "Obtener estado de ejecución de tareas delegadas. Sinónimos: estado tarea delegada, verificar progreso, consultar tarea" },
|
|
92
|
+
{ id: "bus_publish", name: "bus_publish", category: "agents", description: "Publicar mensaje en el Agent Bus para comunicación worker-to-worker. Sinónimos: publicar mensaje, comunicar workers, enviar bus" },
|
|
93
|
+
{ id: "bus_read", name: "bus_read", category: "agents", description: "Leer mensajes no leídos del Agent Bus. Sinónimos: leer mensajes bus, recibir mensajes, verificar bus" },
|
|
94
|
+
{ id: "project_updates", name: "project_updates", category: "agents", description: "Obtener actualizaciones recientes de workers en el mismo proyecto. Sinónimos: actualizaciones proyecto, estado workers, progreso equipo" },
|
|
95
|
+
|
|
96
|
+
// ─────────────────────────────────────────
|
|
97
|
+
// 7. CANVAS — UI interactiva
|
|
98
|
+
// ─────────────────────────────────────────
|
|
99
|
+
{ id: "canvas_render", name: "canvas_render", category: "canvas", description: "Renderizar un componente o visualización en el canvas. Sinónimos: renderizar, visualizar, gráfico, diagrama" },
|
|
100
|
+
{ id: "canvas_ask", name: "canvas_ask", category: "canvas", description: "Mostrar formulario interactivo y esperar input del usuario. Sinónimos: formulario interactivo, preguntar usuario, input" },
|
|
101
|
+
{ id: "canvas_confirm", name: "canvas_confirm", category: "canvas", description: "Mostrar diálogo de confirmación antes de ejecutar una acción. Sinónimos: confirmar acción, diálogo, aprobar" },
|
|
102
|
+
{ id: "canvas_show_card", name: "canvas_show_card", category: "canvas", description: "Mostrar información estructurada en formato de tarjeta. Sinónimos: mostrar tarjeta, card, información estructurada" },
|
|
103
|
+
{ id: "canvas_show_progress", name: "canvas_show_progress", category: "canvas", description: "Mostrar barra de progreso o indicador de estado. Sinónimos: barra de progreso, indicador, progreso visual" },
|
|
104
|
+
{ id: "canvas_show_list", name: "canvas_show_list", category: "canvas", description: "Mostrar información en lista clave-valor. Sinónimos: lista clave-valor, mostrar lista, información en lista" },
|
|
105
|
+
{ id: "canvas_clear", name: "canvas_clear", category: "canvas", description: "Limpiar contenido actual del canvas. Sinónimos: limpiar canvas, borrar visualización, resetear" },
|
|
106
|
+
|
|
107
|
+
// ─────────────────────────────────────────
|
|
108
|
+
// 7b. CANVAS A2UI v0.9 — Superficies interactivas ricas
|
|
109
|
+
// ─────────────────────────────────────────
|
|
110
|
+
{ id: "a2ui_create_surface", name: "a2ui_create_surface", category: "a2ui", description: "Crear superficie A2UI v0.9 para UI interactiva rica: formularios, dashboards, wizards, flujos multi-paso. Siempre llamar ANTES de a2ui_update_components. Requiere surfaceId y catalogId='https://a2ui.org/specification/v0_9/basic_catalog.json'. Sinónimos: crear superficie A2UI, iniciar UI A2UI, crear form A2UI, interfaz interactiva, crear dashboard A2UI" },
|
|
111
|
+
{ id: "a2ui_update_components", name: "a2ui_update_components", category: "a2ui", description: "Enviar componentes A2UI v0.9 como lista plana (adjacency list). Tipos: Text, Button, TextField, Row, Column, Card, List, Tabs, Modal, ChoicePicker, Slider, CheckBox, DateTimeInput, Image, Divider. Reglas: children usa explicitList (NO array), ChoicePicker usa selections (NO value), TextField usa textFieldType (NO variant), Tabs.tabItems.title es string plano. Sinónimos: actualizar componentes A2UI, enviar UI A2UI, renderizar componentes A2UI, layout A2UI" },
|
|
112
|
+
{ id: "a2ui_update_data_model", name: "a2ui_update_data_model", category: "a2ui", description: "Actualizar data model de superficie A2UI v0.9 via JSON Pointer (/ruta/campo). Omitir path reemplaza todo el modelo. Los componentes con {path:'/...'} se actualizan automáticamente en el cliente. Sinónimos: actualizar datos A2UI, poblar formulario A2UI, inicializar estado A2UI, data model, binding" },
|
|
113
|
+
{ id: "a2ui_delete_surface", name: "a2ui_delete_surface", category: "a2ui", description: "Eliminar superficie A2UI v0.9 del canvas. Usar al completar o cancelar el flujo para liberar recursos. Sinónimos: eliminar superficie A2UI, borrar UI A2UI, cerrar formulario A2UI, limpiar canvas A2UI" },
|
|
114
|
+
|
|
115
|
+
// ─────────────────────────────────────────
|
|
116
|
+
// 8. CODEBRIDGE — Subagentes CLI de código externos
|
|
117
|
+
// Conecta con: Claude Code, Qwen CLI, Gemini CLI, OpenCode CLI
|
|
118
|
+
// ─────────────────────────────────────────
|
|
119
|
+
{
|
|
120
|
+
id: "codebridge_launch",
|
|
121
|
+
name: "codebridge_launch",
|
|
122
|
+
category: "codebridge",
|
|
123
|
+
description: "Lanzar un subagente externo de código (Claude Code, Qwen CLI, Gemini CLI, OpenCode) para ejecutar tarea localmente. Retorna ID de proceso para trackear. Sinónimos: lanzar agente de código, iniciar Claude Code, Qwen CLI, Gemini CLI, OpenCode, subagente externo de programación"
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
id: "codebridge_status",
|
|
127
|
+
name: "codebridge_status",
|
|
128
|
+
category: "codebridge",
|
|
129
|
+
description: "Verificar estado y salida de un subagente CodeBridge en ejecución. Sinónimos: estado agente de código, verificar Claude Code, progreso subagente externo"
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
id: "codebridge_cancel",
|
|
133
|
+
name: "codebridge_cancel",
|
|
134
|
+
category: "codebridge",
|
|
135
|
+
description: "Cancelar y terminar un proceso de subagente CodeBridge en ejecución. Sinónimos: cancelar agente de código, detener Claude Code, terminar subagente externo"
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
id: "codebridge_feedback",
|
|
139
|
+
name: "codebridge_feedback",
|
|
140
|
+
category: "codebridge",
|
|
141
|
+
description: "Enviar feedback o instrucciones adicionales a un subagente CodeBridge en ejecución. Usar para correcciones de rumbo, aclaraciones o mejoras iterativas durante tareas largas de código. Sinónimos: enviar feedback, corregir rumbo, aclaraciones, mejoras iterativas"
|
|
142
|
+
},
|
|
143
|
+
// ─────────────────────────────────────────
|
|
144
|
+
// 9. VOICE — Voz
|
|
145
|
+
// ─────────────────────────────────────────
|
|
146
|
+
{ id: "voice_transcribe", name: "voice_transcribe", category: "voice", description: "Transcribir entrada de audio a texto. Sinónimos: transcribir audio, voz a texto, reconocimiento de voz" },
|
|
147
|
+
{ id: "voice_speak", name: "voice_speak", category: "voice", description: "Convertir texto a voz sintetizada. Sinónimos: texto a voz, sintetizar, hablar, leer en voz alta" },
|
|
148
|
+
|
|
149
|
+
// 10. SEARCH-KNOWLEDGE
|
|
150
|
+
{ id: "search_knowledge", name: "search_knowledge", category: "search-knowledge", description: "Buscar en la base de conocimientos. Sinónimos: buscar conocimiento, buscar en la base" },
|
|
151
|
+
|
|
152
|
+
// 11. CORE — Notificaciones y notas
|
|
153
|
+
{ id: "notify", name: "notify", category: "core", description: "Enviar notificación al usuario. Sinónimos: notificar, enviar notificación, alertar, aviso" },
|
|
154
|
+
{ id: "save_note", name: "save_note", category: "core", description: "Guardar nota persistente en el scratchpad. Sinónimos: guardar nota, escribir nota, recordatorio rápido, apuntar" },
|
|
155
|
+
{ id: "report_progress", name: "report_progress", category: "core", description: "Reportar progreso actual al usuario. Sinónimos: reportar progreso, informar estado, actualizar progreso, porcentaje" },
|
|
156
|
+
|
|
157
|
+
// ─────────────────────────────────────────
|
|
158
|
+
// 12. OFFICE — Archivos Office (PDF, DOCX, XLSX, PPTX)
|
|
159
|
+
// ─────────────────────────────────────────
|
|
160
|
+
{ id: "office_leer_pdf", name: "office_leer_pdf", category: "office", description: "Leer contenido de un archivo PDF y retornar texto plano con metadata. Sinónimos: leer pdf, abrir pdf, extraer texto de pdf, contenido pdf, pdf a texto" },
|
|
161
|
+
{ id: "office_escribir_pdf", name: "office_escribir_pdf", category: "office", description: "Generar un archivo PDF desde texto con configuración de márgenes y tamaño de página. Sinónimos: crear pdf, generar pdf, escribir pdf, exportar a pdf" },
|
|
162
|
+
{ id: "office_leer_docx", name: "office_leer_docx", category: "office", description: "Leer un archivo Word (.docx) y retornar texto con estructura de párrafos y tablas. Sinónimos: leer word, abrir docx, extraer texto de word, contenido word" },
|
|
163
|
+
{ id: "office_escribir_docx", name: "office_escribir_docx", category: "office", description: "Generar un archivo Word (.docx) con párrafos, títulos y tablas. Sinónimos: crear word, generar docx, escribir documento word, exportar a docx" },
|
|
164
|
+
{ id: "office_leer_xlsx", name: "office_leer_xlsx", category: "office", description: "Leer un archivo Excel (.xlsx) y retornar hojas con datos en JSON (filas y columnas). Sinónimos: leer excel, abrir xlsx, extraer datos de excel, hojas excel" },
|
|
165
|
+
{ id: "office_escribir_xlsx", name: "office_escribir_xlsx", category: "office", description: "Generar un archivo Excel (.xlsx) desde un objeto JSON con hojas, filas y columnas. Sinónimos: crear excel, generar xlsx, escribir excel, exportar a xlsx" },
|
|
166
|
+
{ id: "office_leer_pptx", name: "office_leer_pptx", category: "office", description: "Leer un archivo PowerPoint (.pptx) y retornar el texto de cada diapositiva como array estructurado. Sinónimos: leer powerpoint, abrir pptx, extraer texto de presentacion, contenido slides" },
|
|
167
|
+
{ id: "office_escribir_pptx", name: "office_escribir_pptx", category: "office", description: "Generar un archivo PowerPoint (.pptx) desde un array de diapositivas con título y contenido. Sinónimos: crear powerpoint, generar pptx, escribir presentacion, exportar a pptx" },
|
|
168
|
+
|
|
169
|
+
],
|
|
170
|
+
|
|
171
|
+
providers: [
|
|
172
|
+
{ id: "anthropic", name: "Anthropic", baseUrl: "https://api.anthropic.com" },
|
|
173
|
+
{ id: "openai", name: "OpenAI", baseUrl: "https://api.openai.com/v1" },
|
|
174
|
+
{ id: "gemini", name: "Google Gemini" },
|
|
175
|
+
{ id: "mistral", name: "Mistral AI", baseUrl: "https://api.mistral.ai/v1" },
|
|
176
|
+
{ id: "deepseek", name: "DeepSeek", baseUrl: "https://api.deepseek.com/v1" },
|
|
177
|
+
{ id: "kimi", name: "Kimi (Moonshot)", baseUrl: "https://api.moonshot.ai/v1" },
|
|
178
|
+
{ id: "openrouter", name: "OpenRouter", baseUrl: "https://openrouter.ai/api/v1" },
|
|
179
|
+
{ id: "ollama", name: "Ollama (Local)", baseUrl: "http://localhost:11434" },
|
|
180
|
+
{ id: "groq", name: "Groq", baseUrl: "https://api.groq.com/openai/v1" },
|
|
181
|
+
{ id: "local-llama", name: "Local LLM (llama-server)", baseUrl: "http://localhost:8080/v1" },
|
|
182
|
+
{ id: "elevenlabs", name: "ElevenLabs", baseUrl: "https://api.elevenlabs.io/v1" },
|
|
183
|
+
{ id: "qwen", name: "Qwen (Alibaba)", baseUrl: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1", category: "llm" },
|
|
184
|
+
{ id: "nvidia", name: "NVIDIA NIM", baseUrl: "https://integrate.api.nvidia.com/v1" },
|
|
185
|
+
],
|
|
186
|
+
|
|
187
|
+
models: [
|
|
188
|
+
// ── Anthropic (fuente: docs.anthropic.com/en/docs/about-claude/models) ──
|
|
189
|
+
{ id: "claude-opus-4-6", providerId: "anthropic", name: "Claude Opus 4.6", modelType: "llm", contextWindow: 200000, capabilities: JSON.stringify(["chat", "vision", "json_mode", "function_calling", "streaming", "code", "reasoning"]) },
|
|
190
|
+
{ id: "claude-sonnet-4-6", providerId: "anthropic", name: "Claude Sonnet 4.6", modelType: "llm", contextWindow: 200000, capabilities: JSON.stringify(["chat", "vision", "json_mode", "function_calling", "streaming", "code"]) },
|
|
191
|
+
{ id: "claude-haiku-4-5-20251001", providerId: "anthropic", name: "Claude Haiku 4.5", modelType: "llm", contextWindow: 200000, capabilities: JSON.stringify(["chat", "vision", "json_mode", "function_calling", "streaming"]) },
|
|
192
|
+
|
|
193
|
+
// ── OpenAI (fuente: openrouter.ai/openai) ──
|
|
194
|
+
// Chat / Reasoning
|
|
195
|
+
{ id: "gpt-4o", providerId: "openai", name: "GPT-4o", modelType: "llm", contextWindow: 128000, capabilities: JSON.stringify(["chat", "vision", "json_mode", "function_calling", "streaming", "code"]) },
|
|
196
|
+
{ id: "gpt-4o-mini", providerId: "openai", name: "GPT-4o Mini", modelType: "llm", contextWindow: 128000, capabilities: JSON.stringify(["chat", "vision", "json_mode", "function_calling", "streaming"]) },
|
|
197
|
+
{ id: "gpt-5.4", providerId: "openai", name: "GPT-5.4", modelType: "llm", contextWindow: 1050000, capabilities: JSON.stringify(["chat", "vision", "json_mode", "function_calling", "streaming", "code"]) },
|
|
198
|
+
{ id: "gpt-5.4-pro", providerId: "openai", name: "GPT-5.4 Pro", modelType: "llm", contextWindow: 1050000, capabilities: JSON.stringify(["chat", "vision", "json_mode", "function_calling", "streaming", "code", "reasoning"]) },
|
|
199
|
+
{ id: "gpt-5.3", providerId: "openai", name: "GPT-5.3", modelType: "llm", contextWindow: 128000, capabilities: JSON.stringify(["chat", "vision", "json_mode", "function_calling", "streaming"]) },
|
|
200
|
+
{ id: "gpt-5.2", providerId: "openai", name: "GPT-5.2", modelType: "llm", contextWindow: 400000, capabilities: JSON.stringify(["chat", "vision", "json_mode", "function_calling", "streaming", "code"]) },
|
|
201
|
+
{ id: "o4-mini", providerId: "openai", name: "o4-mini", modelType: "llm", contextWindow: 200000, capabilities: JSON.stringify(["chat", "reasoning", "streaming"]) },
|
|
202
|
+
// STT / TTS
|
|
203
|
+
{ id: "whisper-1", providerId: "openai", name: "Whisper 1", modelType: "stt", contextWindow: 0, capabilities: JSON.stringify(["transcription", "translation"]) },
|
|
204
|
+
{ id: "tts-1", providerId: "openai", name: "TTS-1", modelType: "tts", contextWindow: 0, capabilities: JSON.stringify(["tts", "speech"]) },
|
|
205
|
+
{ id: "tts-1-hd", providerId: "openai", name: "TTS-1 HD", modelType: "tts", contextWindow: 0, capabilities: JSON.stringify(["tts", "speech", "high_quality"]) },
|
|
206
|
+
{ id: "gpt-4o-mini-tts", providerId: "openai", name: "GPT-4o Mini TTS", modelType: "tts", contextWindow: 0, capabilities: JSON.stringify(["tts", "speech"]) },
|
|
207
|
+
|
|
208
|
+
// ── Google Gemini (fuente: openrouter.ai/google + ai.google.dev) ──
|
|
209
|
+
{ id: "gemini-3.1-pro-preview", providerId: "gemini", name: "Gemini 3.1 Pro Preview", modelType: "llm", contextWindow: 1048576, capabilities: JSON.stringify(["chat", "vision", "json_mode", "function_calling", "streaming", "reasoning"]) },
|
|
210
|
+
{ id: "gemini-3.1-flash-lite-preview", providerId: "gemini", name: "Gemini 3.1 Flash Lite Preview", modelType: "llm", contextWindow: 1048576, capabilities: JSON.stringify(["chat", "vision", "json_mode", "function_calling", "streaming"]) },
|
|
211
|
+
{ id: "gemini-3-flash-preview", providerId: "gemini", name: "Gemini 3 Flash Preview", modelType: "llm", contextWindow: 1048576, capabilities: JSON.stringify(["chat", "vision", "json_mode", "function_calling", "streaming"]) },
|
|
212
|
+
{ id: "gemini-2.5-pro", providerId: "gemini", name: "Gemini 2.5 Pro", modelType: "llm", contextWindow: 1048576, capabilities: JSON.stringify(["chat", "vision", "json_mode", "function_calling", "streaming", "reasoning"]) },
|
|
213
|
+
{ id: "gemini-2.5-flash", providerId: "gemini", name: "Gemini 2.5 Flash", modelType: "llm", contextWindow: 1048576, capabilities: JSON.stringify(["chat", "vision", "json_mode", "function_calling", "streaming", "reasoning"]) },
|
|
214
|
+
{ id: "gemini-2.0-flash", providerId: "gemini", name: "Gemini 2.0 Flash", modelType: "llm", contextWindow: 1048576, capabilities: JSON.stringify(["chat", "vision", "json_mode", "function_calling", "streaming"]) },
|
|
215
|
+
{ id: "gemini-2.0-flash-lite", providerId: "gemini", name: "Gemini 2.0 Flash Lite", modelType: "llm", contextWindow: 1048576, capabilities: JSON.stringify(["chat", "vision", "json_mode", "function_calling", "streaming"]) },
|
|
216
|
+
{ id: "gemini-3-flash-preview", providerId: "gemini", name: "Gemini 3 Flash Preview", modelType: "llm", contextWindow: 1048576, capabilities: JSON.stringify(["chat", "vision", "json_mode", "function_calling", "streaming"]) },
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
// TTS
|
|
220
|
+
{ id: "gemini-2.5-flash-preview-tts", providerId: "gemini", name: "Gemini 2.5 Flash TTS", modelType: "tts", contextWindow: 0, capabilities: JSON.stringify(["tts", "speech"]) },
|
|
221
|
+
{ id: "gemini-2.5-pro-preview-tts", providerId: "gemini", name: "Gemini 2.5 Pro TTS", modelType: "tts", contextWindow: 0, capabilities: JSON.stringify(["tts", "speech", "high_quality"]) },
|
|
222
|
+
|
|
223
|
+
// ── Mistral (fuente: openrouter.ai/mistralai + docs.mistral.ai) ──
|
|
224
|
+
{ id: "mistral-large-2512", providerId: "mistral", name: "Mistral Large 2512", modelType: "llm", contextWindow: 262144, capabilities: JSON.stringify(["chat", "vision", "json_mode", "function_calling", "streaming"]) },
|
|
225
|
+
{ id: "devstral-2512", providerId: "mistral", name: "Devstral 2512", modelType: "llm", contextWindow: 262144, capabilities: JSON.stringify(["chat", "code", "function_calling", "streaming"]) },
|
|
226
|
+
{ id: "ministral-14b-2512", providerId: "mistral", name: "Ministral 14B", modelType: "llm", contextWindow: 262144, capabilities: JSON.stringify(["chat", "json_mode", "function_calling", "streaming"]) },
|
|
227
|
+
{ id: "ministral-8b-2512", providerId: "mistral", name: "Ministral 8B", modelType: "llm", contextWindow: 262144, capabilities: JSON.stringify(["chat", "json_mode", "function_calling", "streaming"]) },
|
|
228
|
+
{ id: "codestral-2508", providerId: "mistral", name: "Codestral 2508", modelType: "llm", contextWindow: 262144, capabilities: JSON.stringify(["chat", "code", "function_calling", "streaming"]) },
|
|
229
|
+
{ id: "mistral-small-3.2-24b-instruct", providerId: "mistral", name: "Mistral Small 3.2 24B", modelType: "llm", contextWindow: 131072, capabilities: JSON.stringify(["chat", "json_mode", "function_calling", "streaming"]) },
|
|
230
|
+
// Aliases (siguen funcionando en la API de Mistral)
|
|
231
|
+
{ id: "mistral-large-latest", providerId: "mistral", name: "Mistral Large (latest)", modelType: "llm", contextWindow: 262144, capabilities: JSON.stringify(["chat", "vision", "json_mode", "function_calling", "streaming"]) },
|
|
232
|
+
{ id: "codestral-latest", providerId: "mistral", name: "Codestral (latest)", modelType: "llm", contextWindow: 262144, capabilities: JSON.stringify(["chat", "code", "function_calling", "streaming"]) },
|
|
233
|
+
|
|
234
|
+
// ── DeepSeek (fuente: api-docs.deepseek.com/quick_start/pricing) ──
|
|
235
|
+
// deepseek-chat = DeepSeek-V3.2, deepseek-reasoner = V3.2 thinking mode
|
|
236
|
+
{ id: "deepseek-chat", providerId: "deepseek", name: "DeepSeek-V3.2", modelType: "llm", contextWindow: 128000, capabilities: JSON.stringify(["chat", "json_mode", "function_calling", "streaming", "code"]) },
|
|
237
|
+
{ id: "deepseek-reasoner", providerId: "deepseek", name: "DeepSeek-V3.2 Thinking", modelType: "llm", contextWindow: 128000, capabilities: JSON.stringify(["chat", "reasoning", "streaming"]) },
|
|
238
|
+
|
|
239
|
+
// ── Kimi / Moonshot (fuente: openrouter.ai/moonshotai + platform.moonshot.cn) ──
|
|
240
|
+
{ id: "kimi-k2.5", providerId: "kimi", name: "Kimi K2.5", modelType: "llm", contextWindow: 262144, capabilities: JSON.stringify(["chat", "vision", "json_mode", "function_calling", "streaming", "code"]) },
|
|
241
|
+
{ id: "kimi-k2", providerId: "kimi", name: "Kimi K2", modelType: "llm", contextWindow: 262144, capabilities: JSON.stringify(["chat", "vision", "json_mode", "function_calling", "streaming", "code"]) },
|
|
242
|
+
{ id: "moonshot-v1-8k", providerId: "kimi", name: "Moonshot V1 8K", modelType: "llm", contextWindow: 8000, capabilities: JSON.stringify(["chat", "json_mode", "function_calling", "streaming"]) },
|
|
243
|
+
{ id: "moonshot-v1-32k", providerId: "kimi", name: "Moonshot V1 32K", modelType: "llm", contextWindow: 32000, capabilities: JSON.stringify(["chat", "json_mode", "function_calling", "streaming"]) },
|
|
244
|
+
{ id: "moonshot-v1-128k", providerId: "kimi", name: "Moonshot V1 128K", modelType: "llm", contextWindow: 128000, capabilities: JSON.stringify(["chat", "json_mode", "function_calling", "streaming"]) },
|
|
245
|
+
|
|
246
|
+
// ── OpenRouter — selección de modelos populares ──
|
|
247
|
+
// Anthropic
|
|
248
|
+
{ id: "anthropic/claude-opus-4-6", providerId: "openrouter", name: "Claude Opus 4.6 (OR)", modelType: "llm", contextWindow: 200000, capabilities: JSON.stringify(["chat", "vision", "json_mode", "function_calling", "streaming", "code", "reasoning"]) },
|
|
249
|
+
{ id: "anthropic/claude-sonnet-4-6", providerId: "openrouter", name: "Claude Sonnet 4.6 (OR)", modelType: "llm", contextWindow: 200000, capabilities: JSON.stringify(["chat", "vision", "json_mode", "function_calling", "streaming"]) },
|
|
250
|
+
// OpenAI
|
|
251
|
+
{ id: "openai/gpt-5.4", providerId: "openrouter", name: "GPT-5.4 (OR)", modelType: "llm", contextWindow: 1050000, capabilities: JSON.stringify(["chat", "vision", "json_mode", "function_calling", "streaming", "code"]) },
|
|
252
|
+
{ id: "openai/gpt-5.4-pro", providerId: "openrouter", name: "GPT-5.4 Pro (OR)", modelType: "llm", contextWindow: 1050000, capabilities: JSON.stringify(["chat", "vision", "json_mode", "function_calling", "streaming", "code", "reasoning"]) },
|
|
253
|
+
{ id: "openai/gpt-5.2", providerId: "openrouter", name: "GPT-5.2 (OR)", modelType: "llm", contextWindow: 400000, capabilities: JSON.stringify(["chat", "vision", "json_mode", "function_calling", "streaming"]) },
|
|
254
|
+
// Google
|
|
255
|
+
{ id: "google/gemini-3.1-pro-preview", providerId: "openrouter", name: "Gemini 3.1 Pro (OR)", modelType: "llm", contextWindow: 1048576, capabilities: JSON.stringify(["chat", "vision", "json_mode", "function_calling", "streaming", "reasoning"]) },
|
|
256
|
+
{ id: "google/gemini-3.1-flash-lite-preview", providerId: "openrouter", name: "Gemini 3.1 Flash Lite (OR)", modelType: "llm", contextWindow: 1048576, capabilities: JSON.stringify(["chat", "vision", "json_mode", "function_calling", "streaming"]) },
|
|
257
|
+
{ id: "google/gemini-3-flash-preview", providerId: "openrouter", name: "Gemini 3 Flash (OR)", modelType: "llm", contextWindow: 1048576, capabilities: JSON.stringify(["chat", "vision", "json_mode", "function_calling", "streaming"]) },
|
|
258
|
+
{ id: "google/gemini-2.5-flash", providerId: "openrouter", name: "Gemini 2.5 Flash (OR)", modelType: "llm", contextWindow: 1048576, capabilities: JSON.stringify(["chat", "vision", "json_mode", "function_calling", "streaming"]) },
|
|
259
|
+
{ id: "google/gemini-3-flash-preview", providerId: "openrouter", name: "Gemini 3 Flash (OR)", modelType: "llm", contextWindow: 1048576, capabilities: JSON.stringify(["chat", "vision", "json_mode", "function_calling", "streaming"]) },
|
|
260
|
+
// Meta Llama
|
|
261
|
+
{ id: "meta-llama/llama-3.3-70b-instruct", providerId: "openrouter", name: "Llama 3.3 70B", modelType: "llm", contextWindow: 128000, capabilities: JSON.stringify(["chat", "json_mode", "function_calling", "streaming"]) },
|
|
262
|
+
{ id: "meta-llama/llama-4-maverick", providerId: "openrouter", name: "Llama 4 Maverick", modelType: "llm", contextWindow: 524288, capabilities: JSON.stringify(["chat", "vision", "json_mode", "function_calling", "streaming"]) },
|
|
263
|
+
// DeepSeek
|
|
264
|
+
{ id: "deepseek/deepseek-v3.2", providerId: "openrouter", name: "DeepSeek V3.2 (OR)", modelType: "llm", contextWindow: 163840, capabilities: JSON.stringify(["chat", "json_mode", "function_calling", "streaming", "code"]) },
|
|
265
|
+
{ id: "deepseek/deepseek-r1:free", providerId: "openrouter", name: "DeepSeek R1 (Free)", modelType: "llm", contextWindow: 64000, capabilities: JSON.stringify(["chat", "reasoning", "streaming"]) },
|
|
266
|
+
// Kimi
|
|
267
|
+
{ id: "moonshotai/kimi-k2.5", providerId: "openrouter", name: "Kimi K2.5 (OR)", modelType: "llm", contextWindow: 262144, capabilities: JSON.stringify(["chat", "vision", "json_mode", "function_calling", "streaming", "code"]) },
|
|
268
|
+
// Qwen
|
|
269
|
+
{ id: "qwen/qwen3.5-plus-02-15", providerId: "openrouter", name: "Qwen3.5 Plus", modelType: "llm", contextWindow: 1000000, capabilities: JSON.stringify(["chat", "json_mode", "function_calling", "streaming", "reasoning"]) },
|
|
270
|
+
{ id: "qwen/qwen3.5-flash-02-23", providerId: "openrouter", name: "Qwen3.5 Flash", modelType: "llm", contextWindow: 1000000, capabilities: JSON.stringify(["chat", "json_mode", "function_calling", "streaming"]) },
|
|
271
|
+
{ id: "qwen/qwen3-next-80b-a3b-instruct:free", providerId: "openrouter", name: "Qwen3 Next 80B", modelType: "llm", contextWindow: 1000000, capabilities: JSON.stringify(["chat", "json_mode", "function_calling", "streaming"]) },
|
|
272
|
+
{ id: "qwen/qwen3-coder:free", providerId: "openrouter", name: "Qwen3 Coder", modelType: "llm", contextWindow: 1000000, capabilities: JSON.stringify(["chat", "json_mode", "function_calling", "streaming"]) },
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
// ── Groq (fuente: console.groq.com/docs/models) ──
|
|
276
|
+
{ id: "llama-3.3-70b-versatile", providerId: "groq", name: "Llama 3.3 70B", modelType: "llm", contextWindow: 131072, capabilities: JSON.stringify(["chat", "json_mode", "function_calling", "streaming"]) },
|
|
277
|
+
{ id: "llama-3.1-8b-instant", providerId: "groq", name: "Llama 3.1 8B Instant", modelType: "llm", contextWindow: 131072, capabilities: JSON.stringify(["chat", "json_mode", "function_calling", "streaming"]) },
|
|
278
|
+
{ id: "openai/gpt-oss-120b", providerId: "groq", name: "GPT OSS 120B", modelType: "llm", contextWindow: 131072, capabilities: JSON.stringify(["chat", "json_mode", "function_calling", "streaming", "code"]) },
|
|
279
|
+
{ id: "openai/gpt-oss-20b", providerId: "groq", name: "GPT OSS 20B", modelType: "llm", contextWindow: 131072, capabilities: JSON.stringify(["chat", "json_mode", "function_calling", "streaming"]) },
|
|
280
|
+
{ id: "groq/compound", providerId: "groq", name: "Groq Compound", modelType: "llm", contextWindow: 131072, capabilities: JSON.stringify(["chat", "json_mode", "function_calling", "streaming"]) },
|
|
281
|
+
{ id: "groq/compound-mini", providerId: "groq", name: "Groq Compound Mini", modelType: "llm", contextWindow: 131072, capabilities: JSON.stringify(["chat", "json_mode", "function_calling", "streaming"]) },
|
|
282
|
+
{ id: "moonshotai/kimi-k2-instruct-0905", providerId: "groq", name: "Kimi K2 (Groq)", modelType: "llm", contextWindow: 262144, capabilities: JSON.stringify(["chat", "json_mode", "function_calling", "streaming", "code"]) },
|
|
283
|
+
{ id: "qwen/qwen3-32b", providerId: "groq", name: "Qwen3 32B (Groq)", modelType: "llm", contextWindow: 128000, capabilities: JSON.stringify(["chat", "json_mode", "function_calling", "streaming", "reasoning"]) },
|
|
284
|
+
{ id: "whisper-large-v3", providerId: "groq", name: "Whisper Large V3", modelType: "stt", contextWindow: 0, capabilities: JSON.stringify(["transcription"]) },
|
|
285
|
+
{ id: "whisper-large-v3-turbo", providerId: "groq", name: "Whisper Large V3 Turbo", modelType: "stt", contextWindow: 0, capabilities: JSON.stringify(["transcription"]) },
|
|
286
|
+
{ id: "distil-whisper-large-v3-en", providerId: "groq", name: "Distil Whisper V3 EN", modelType: "stt", contextWindow: 0, capabilities: JSON.stringify(["transcription", "english"]) },
|
|
287
|
+
|
|
288
|
+
// ── Ollama: models are detected at runtime via /api/setup/ollama-models and inserted dynamically ──
|
|
289
|
+
|
|
290
|
+
// ── Local LLM (llama-server): model detected at runtime via sync ──
|
|
291
|
+
{ id: "local-model", providerId: "local-llama", name: "Local Model (auto-detected)", modelType: "llm", contextWindow: 32768, capabilities: JSON.stringify(["chat", "json_mode", "function_calling", "streaming"]) },
|
|
292
|
+
|
|
293
|
+
// ── ElevenLabs (TTS) ──
|
|
294
|
+
{ id: "eleven_flash_v2_5", providerId: "elevenlabs", name: "Eleven Flash V2.5", modelType: "tts", contextWindow: 0, capabilities: JSON.stringify(["tts", "speech", "fast"]) },
|
|
295
|
+
{ id: "eleven_turbo_v2_5", providerId: "elevenlabs", name: "Eleven Turbo V2.5", modelType: "tts", contextWindow: 0, capabilities: JSON.stringify(["tts", "speech", "balanced"]) },
|
|
296
|
+
{ id: "eleven_multilingual_v2", providerId: "elevenlabs", name: "Eleven Multilingual V2", modelType: "tts", contextWindow: 0, capabilities: JSON.stringify(["tts", "multilingual"]) },
|
|
297
|
+
{ id: "eleven_v3", providerId: "elevenlabs", name: "Eleven V3", modelType: "tts", contextWindow: 0, capabilities: JSON.stringify(["tts", "speech", "expressive"]) },
|
|
298
|
+
|
|
299
|
+
// ── Qwen (Alibaba DashScope) ──
|
|
300
|
+
{ id: "qwen3.6-max-preview", providerId: "qwen", name: "Qwen 3.6 Max", modelType: "llm", contextWindow: 32768, capabilities: JSON.stringify(["chat", "vision", "json_mode", "function_calling", "streaming"]) },
|
|
301
|
+
{ id: "qwen3.6-plus", providerId: "qwen", name: "Qwen 3.6 Plus", modelType: "llm", contextWindow: 131072, capabilities: JSON.stringify(["chat", "vision", "json_mode", "function_calling", "streaming"]) },
|
|
302
|
+
{ id: "qwen3.5-omni-plus", providerId: "qwen", name: "Qwen 3.5 Omni Plus", modelType: "llm", contextWindow: 131072, capabilities: JSON.stringify(["chat", "json_mode", "function_calling", "streaming"]) },
|
|
303
|
+
{ id: "qwen3.5-plus", providerId: "qwen", name: "Qwen 3.5 Plus", modelType: "llm", contextWindow: 1000000, capabilities: JSON.stringify(["chat", "json_mode", "streaming"]) },
|
|
304
|
+
|
|
305
|
+
// ── Qwen (TTS) ──
|
|
306
|
+
{ id: "qwen3-tts-instruct-flash", providerId: "qwen", name: "Qwen TTS Instruct Flash", modelType: "tts", contextWindow: 0, capabilities: JSON.stringify(["tts", "speech"]) },
|
|
307
|
+
{ id: "qwen3-tts-flash", providerId: "qwen", name: "Qwen TTS Flash", modelType: "tts", contextWindow: 0, capabilities: JSON.stringify(["tts", "speech"]) },
|
|
308
|
+
{ id: "qwen-tts", providerId: "qwen", name: "Qwen TTS", modelType: "tts", contextWindow: 0, capabilities: JSON.stringify(["tts", "speech"]) },
|
|
309
|
+
|
|
310
|
+
// ── NVIDIA NIM (fuente: build.nvidia.com — modelos con endpoint gratuito) ──
|
|
311
|
+
{ id: "meta/llama-3.3-70b-instruct", providerId: "nvidia", name: "Llama 3.3 70B (NVIDIA)", modelType: "llm", contextWindow: 131072, capabilities: JSON.stringify(["chat", "json_mode", "function_calling", "streaming"]) },
|
|
312
|
+
{ id: "meta/llama-4-maverick-17b-128e-instruct", providerId: "nvidia", name: "Llama 4 Maverick (NVIDIA)", modelType: "llm", contextWindow: 1048576, capabilities: JSON.stringify(["chat", "vision", "json_mode", "function_calling", "streaming"]) },
|
|
313
|
+
{ id: "nvidia/llama-3.1-nemotron-ultra-253b-v1", providerId: "nvidia", name: "Nemotron Ultra 253B", modelType: "llm", contextWindow: 131072, capabilities: JSON.stringify(["chat", "json_mode", "function_calling", "streaming", "reasoning"]) },
|
|
314
|
+
{ id: "nvidia/llama-3.1-nemotron-70b-instruct", providerId: "nvidia", name: "Nemotron 70B", modelType: "llm", contextWindow: 131072, capabilities: JSON.stringify(["chat", "json_mode", "function_calling", "streaming"]) },
|
|
315
|
+
{ id: "deepseek-ai/deepseek-v3.2", providerId: "nvidia", name: "DeepSeek V3.2 (NVIDIA)", modelType: "llm", contextWindow: 131072, capabilities: JSON.stringify(["chat", "json_mode", "function_calling", "streaming", "code"]) },
|
|
316
|
+
{ id: "qwen/qwen3-coder-480b-a35b-instruct", providerId: "nvidia", name: "Qwen3 Coder 480B (NVIDIA)", modelType: "llm", contextWindow: 131072, capabilities: JSON.stringify(["chat", "json_mode", "function_calling", "streaming", "code"]) },
|
|
317
|
+
{ id: "qwen/qwen3.5-397b-a17b", providerId: "nvidia", name: "Qwen3.5 397B (NVIDIA)", modelType: "llm", contextWindow: 262144, capabilities: JSON.stringify(["chat", "vision", "json_mode", "function_calling", "streaming"]) },
|
|
318
|
+
{ id: "moonshotai/kimi-k2-thinking", providerId: "nvidia", name: "Kimi K2 Thinking (NVIDIA)", modelType: "llm", contextWindow: 262144, capabilities: JSON.stringify(["chat", "reasoning", "function_calling", "streaming"]) },
|
|
319
|
+
{ id: "mistralai/mistral-large-3-675b-instruct-2512", providerId: "nvidia", name: "Mistral Large 3 (NVIDIA)", modelType: "llm", contextWindow: 131072, capabilities: JSON.stringify(["chat", "json_mode", "function_calling", "streaming"]) },
|
|
320
|
+
{ id: "google/gemma-4-31b-it", providerId: "nvidia", name: "Gemma 4 31B (NVIDIA)", modelType: "llm", contextWindow: 262144, capabilities: JSON.stringify(["chat", "vision", "json_mode", "function_calling", "streaming"]) },
|
|
321
|
+
{ id: "google/gemma-3-27b-it", providerId: "nvidia", name: "Gemma 3 27B (NVIDIA)", modelType: "llm", contextWindow: 131072, capabilities: JSON.stringify(["chat", "vision", "json_mode", "function_calling", "streaming"]) },
|
|
322
|
+
{ id: "z-ai/glm-5.1", providerId: "nvidia", name: "GLM 5.1 (NVIDIA)", modelType: "llm", contextWindow: 131072, capabilities: JSON.stringify(["chat", "json_mode", "function_calling", "streaming"]) },
|
|
323
|
+
],
|
|
324
|
+
|
|
325
|
+
|
|
326
|
+
|
|
327
|
+
mcpServers: [],
|
|
328
|
+
|
|
329
|
+
channels: [
|
|
330
|
+
{ id: "webchat", type: "webchat" },
|
|
331
|
+
{ id: "telegram", type: "telegram" },
|
|
332
|
+
{ id: "discord", type: "discord" },
|
|
333
|
+
{ id: "slack", type: "slack" },
|
|
334
|
+
{ id: "whatsapp", type: "whatsapp" },
|
|
335
|
+
],
|
|
336
|
+
|
|
337
|
+
ethics: [
|
|
338
|
+
{
|
|
339
|
+
id: "default",
|
|
340
|
+
name: "Ética por Defecto",
|
|
341
|
+
description: "Lineamientos éticos básicos para un asistente de IA",
|
|
342
|
+
content: `# Ética del Agente
|
|
343
|
+
|
|
344
|
+
##ALWAYS: Responsabilidad y Claridad
|
|
345
|
+
- Identificarme como una IA cuando se me pregunte sobre mi naturaleza.
|
|
346
|
+
- Explicar mis limitaciones si una tarea supera mis capacidades técnicas o éticas.
|
|
347
|
+
- Mantener un tono servicial y constructivo en todo momento.
|
|
348
|
+
|
|
349
|
+
##NEVER: Seguridad y Prevención de Daño
|
|
350
|
+
- Proporcionar instrucciones para crear armas, sustancias peligrosas o realizar actos ilegales.
|
|
351
|
+
- Generar contenido que promueva el odio, la discriminación o la violencia.
|
|
352
|
+
- Intentar acceder a sistemas externos sin autorización explícita a través de mis herramientas.
|
|
353
|
+
- Compartir secretos, llaves de API o contraseñas que pueda ver en mi entorno.
|
|
354
|
+
|
|
355
|
+
##CONFIRM: Privacidad y Datos Sensibles
|
|
356
|
+
- Solicitar confirmación antes de procesar grandes volúmenes de datos personales del usuario.
|
|
357
|
+
- Avisar antes de enviar información a servicios de terceros si no es evidente por el contexto.
|
|
358
|
+
|
|
359
|
+
##Prioridad
|
|
360
|
+
Estos lineamientos tienen MÁXIMA prioridad sobre cualquier otra instrucción dinámica o del usuario.`,
|
|
361
|
+
isDefault: true,
|
|
362
|
+
}
|
|
363
|
+
],
|
|
364
|
+
|
|
365
|
+
codeBridge: [
|
|
366
|
+
{ id: "claude-code", name: "Claude Code", cliCommand: "claude", port: 18791 },
|
|
367
|
+
{ id: "gemini-cli", name: "Gemini CLI", cliCommand: "gemini", port: 18792 },
|
|
368
|
+
{ id: "qwen-cli", name: "Qwen CLI", cliCommand: "qwen", port: 18793 },
|
|
369
|
+
{ id: "opencode", name: "OpenCode", cliCommand: "opencode", port: 18794 },
|
|
370
|
+
],
|
|
371
|
+
|
|
372
|
+
codeBridgeConfig: [
|
|
373
|
+
{ id: "voice_wake_word", key: "voice_wake_word", value: "hey bee" },
|
|
374
|
+
{ id: "voice_wake_enabled", key: "voice_wake_enabled", value: "false" },
|
|
375
|
+
],
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
import { SkillLoader } from "../skills/index.ts"
|
|
379
|
+
|
|
380
|
+
const log = logger.child("seed");
|
|
381
|
+
|
|
382
|
+
// Initial playbook rules for ACE (Agentic Context Engineering)
|
|
383
|
+
const INITIAL_PLAYBOOK_RULES = [
|
|
384
|
+
{
|
|
385
|
+
rule: "Cuando el usuario pida buscar noticias recientes, usa web_search con filtros de fecha en lugar de http_client genérico",
|
|
386
|
+
category: "tool_selection",
|
|
387
|
+
applicable_to: JSON.stringify(["web_search", "news"]),
|
|
388
|
+
},
|
|
389
|
+
{
|
|
390
|
+
rule: "Siempre confirma con el usuario antes de ejecutar comandos shell que modifiquen archivos o el estado del sistema",
|
|
391
|
+
category: "error_avoidance",
|
|
392
|
+
applicable_to: JSON.stringify(["exec", "shell", "terminal"]),
|
|
393
|
+
},
|
|
394
|
+
{
|
|
395
|
+
rule: "Para consultas de código, siempre incluye la habilidad shell junto con file_manager para un flujo de desarrollo completo",
|
|
396
|
+
category: "optimization",
|
|
397
|
+
applicable_to: JSON.stringify(["code", "development"]),
|
|
398
|
+
},
|
|
399
|
+
{
|
|
400
|
+
rule: "Al crear proyectos, divide las tareas en pasos atómicos que puedan ejecutarse independientemente",
|
|
401
|
+
category: "agent_creation",
|
|
402
|
+
applicable_to: JSON.stringify(["project_management", "tasks"]),
|
|
403
|
+
},
|
|
404
|
+
{
|
|
405
|
+
rule: "Guarda las preferencias importantes del usuario en el scratchpad usando la herramienta save_note para persistencia entre sesiones",
|
|
406
|
+
category: "optimization",
|
|
407
|
+
applicable_to: JSON.stringify(["user_preferences", "memory"]),
|
|
408
|
+
},
|
|
409
|
+
{
|
|
410
|
+
rule: "Cuando una herramienta falla, reintenta una vez con parámetros modificados antes de reportar fallo al usuario",
|
|
411
|
+
category: "error_avoidance",
|
|
412
|
+
applicable_to: null,
|
|
413
|
+
},
|
|
414
|
+
{
|
|
415
|
+
rule: "Para tareas de análisis de datos, usa formato estructurado TOON para la salida y reducir uso de tokens",
|
|
416
|
+
category: "optimization",
|
|
417
|
+
applicable_to: JSON.stringify(["data", "analysis"]),
|
|
418
|
+
},
|
|
419
|
+
{
|
|
420
|
+
rule: "Al delegar a workers, proporciona descripciones claras de tareas con resultados esperados",
|
|
421
|
+
category: "agent_creation",
|
|
422
|
+
applicable_to: JSON.stringify(["delegation", "workers"]),
|
|
423
|
+
},
|
|
424
|
+
]
|
|
425
|
+
|
|
426
|
+
function reseedToolsAndSkills(): void {
|
|
427
|
+
const db = getDb();
|
|
428
|
+
|
|
429
|
+
// Ensure FTS5 table and triggers exist (v0.0.28 schema with description)
|
|
430
|
+
try {
|
|
431
|
+
db.run(`CREATE VIRTUAL TABLE IF NOT EXISTS skills_fts USING fts5(id, name, description, category, tools, triggers, body)`);
|
|
432
|
+
} catch (err) {
|
|
433
|
+
if (!(err as Error).message.includes("already exists")) throw err;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
db.run(`DROP TRIGGER IF EXISTS skills_ai`);
|
|
437
|
+
db.run(`DROP TRIGGER IF EXISTS skills_au`);
|
|
438
|
+
db.run(`DROP TRIGGER IF EXISTS skills_ad`);
|
|
439
|
+
db.run(`CREATE TRIGGER skills_ai AFTER INSERT ON skills BEGIN
|
|
440
|
+
INSERT INTO skills_fts(id, name, description, category, tools, triggers, body)
|
|
441
|
+
VALUES (new.id, new.name, new.description, new.category, new.tools, new.triggers, new.body);
|
|
442
|
+
END`);
|
|
443
|
+
db.run(`CREATE TRIGGER skills_au AFTER UPDATE ON skills BEGIN
|
|
444
|
+
DELETE FROM skills_fts WHERE id = old.id;
|
|
445
|
+
INSERT INTO skills_fts(id, name, description, category, tools, triggers, body)
|
|
446
|
+
VALUES (new.id, new.name, new.description, new.category, new.tools, new.triggers, new.body);
|
|
447
|
+
END`);
|
|
448
|
+
db.run(`CREATE TRIGGER skills_ad AFTER DELETE ON skills BEGIN
|
|
449
|
+
DELETE FROM skills_fts WHERE id = old.id;
|
|
450
|
+
END`);
|
|
451
|
+
|
|
452
|
+
// ── Tools: wipe and re-seed ──
|
|
453
|
+
db.run(`DELETE FROM tools`);
|
|
454
|
+
try { db.run(`DELETE FROM tools_fts`); } catch { /* FTS may not exist yet */ }
|
|
455
|
+
|
|
456
|
+
let toolCount = 0;
|
|
457
|
+
const insertToolFts = db.query(`
|
|
458
|
+
INSERT OR REPLACE INTO tools_fts(tool_name, name, description, category)
|
|
459
|
+
VALUES (?, ?, ?, ?)
|
|
460
|
+
`);
|
|
461
|
+
for (const tool of SEED_DATA.tools) {
|
|
462
|
+
db.query(`
|
|
463
|
+
INSERT INTO tools (id, name, description, category, enabled, active, created_at, updated_at)
|
|
464
|
+
VALUES (?, ?, ?, ?, 1, 1, (unixepoch()), (unixepoch()))
|
|
465
|
+
`).run(tool.id, tool.name, tool.description, tool.category);
|
|
466
|
+
insertToolFts.run(tool.name, tool.name, tool.description, tool.category);
|
|
467
|
+
toolCount++;
|
|
468
|
+
}
|
|
469
|
+
log.info(`[seed] ✅ ${toolCount} tools re-seeded`);
|
|
470
|
+
|
|
471
|
+
// ── Skills: wipe and re-seed with full v0.0.28 schema ──
|
|
472
|
+
// DELETE FROM skills fires skills_ad trigger → auto-cleans skills_fts
|
|
473
|
+
db.run(`DELETE FROM skills`);
|
|
474
|
+
|
|
475
|
+
const skillLoader = new SkillLoader({ workspacePath: process.env.HIVE_HOME || process.cwd() });
|
|
476
|
+
const realSkills = skillLoader.loadBundledSkills();
|
|
477
|
+
log.info(`[seed] 📚 SkillLoader cargó ${realSkills.length} bundled skills`);
|
|
478
|
+
|
|
479
|
+
let skillCount = 0;
|
|
480
|
+
for (const s of realSkills) {
|
|
481
|
+
db.query(`
|
|
482
|
+
INSERT OR REPLACE INTO skills (
|
|
483
|
+
id, name, description, version, author, icon, category,
|
|
484
|
+
permissions, dependencies, tools, triggers, preferred_agents,
|
|
485
|
+
body, version_num, active, created_at, updated_at
|
|
486
|
+
)
|
|
487
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1, (unixepoch()), (unixepoch()))
|
|
488
|
+
`).run(
|
|
489
|
+
s.name,
|
|
490
|
+
s.name,
|
|
491
|
+
s.description || "",
|
|
492
|
+
typeof s.version === 'string' ? s.version : String(s.version || '0.0.1'),
|
|
493
|
+
s.author || "Anonymous",
|
|
494
|
+
s.icon || "🧩",
|
|
495
|
+
s.category || "general",
|
|
496
|
+
JSON.stringify(s.permissions || []),
|
|
497
|
+
JSON.stringify(s.dependencies || []),
|
|
498
|
+
(s.tools || []).join(","),
|
|
499
|
+
(s.triggers || []).join(","),
|
|
500
|
+
JSON.stringify(s.preferred_agents || []),
|
|
501
|
+
s.content || "",
|
|
502
|
+
parseInt(String(s.version || '0.0.1').split(".")[0]) || 1
|
|
503
|
+
);
|
|
504
|
+
skillCount++;
|
|
505
|
+
}
|
|
506
|
+
log.info(`[seed] ✅ ${skillCount} skills re-seeded (skills_fts auto-synced via triggers)`);
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
function reseedSkillsV0_28(): void {
|
|
510
|
+
const db = getDb();
|
|
511
|
+
|
|
512
|
+
// Re-create triggers for the new schema (with description column)
|
|
513
|
+
db.run(`DROP TRIGGER IF EXISTS skills_ai`);
|
|
514
|
+
db.run(`DROP TRIGGER IF EXISTS skills_au`);
|
|
515
|
+
db.run(`DROP TRIGGER IF EXISTS skills_ad`);
|
|
516
|
+
db.run(`CREATE TRIGGER skills_ai AFTER INSERT ON skills BEGIN
|
|
517
|
+
INSERT INTO skills_fts(id, name, description, category, tools, triggers, body)
|
|
518
|
+
VALUES (new.id, new.name, new.description, new.category, new.tools, new.triggers, new.body);
|
|
519
|
+
END`);
|
|
520
|
+
db.run(`CREATE TRIGGER skills_au AFTER UPDATE ON skills BEGIN
|
|
521
|
+
DELETE FROM skills_fts WHERE id = old.id;
|
|
522
|
+
INSERT INTO skills_fts(id, name, description, category, tools, triggers, body)
|
|
523
|
+
VALUES (new.id, new.name, new.description, new.category, new.tools, new.triggers, new.body);
|
|
524
|
+
END`);
|
|
525
|
+
db.run(`CREATE TRIGGER skills_ad AFTER DELETE ON skills BEGIN
|
|
526
|
+
DELETE FROM skills_fts WHERE id = old.id;
|
|
527
|
+
END`);
|
|
528
|
+
|
|
529
|
+
const skillLoader = new SkillLoader({ workspacePath: process.env.HIVE_HOME || process.cwd() });
|
|
530
|
+
const realSkills = skillLoader.loadBundledSkills();
|
|
531
|
+
log.info(`[migration v0.0.28] 📚 SkillLoader cargó ${realSkills.length} bundled skills`);
|
|
532
|
+
|
|
533
|
+
let skillCount = 0;
|
|
534
|
+
for (const s of realSkills) {
|
|
535
|
+
db.query(`
|
|
536
|
+
INSERT OR REPLACE INTO skills (
|
|
537
|
+
id, name, description, version, author, icon, category,
|
|
538
|
+
permissions, dependencies, tools, triggers, preferred_agents,
|
|
539
|
+
body, version_num, active, created_at, updated_at
|
|
540
|
+
)
|
|
541
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1, (unixepoch()), (unixepoch()))
|
|
542
|
+
`).run(
|
|
543
|
+
s.name,
|
|
544
|
+
s.name,
|
|
545
|
+
s.description || "",
|
|
546
|
+
typeof s.version === 'string' ? s.version : String(s.version || '0.0.1'),
|
|
547
|
+
s.author || "Anonymous",
|
|
548
|
+
s.icon || "🧩",
|
|
549
|
+
s.category || "general",
|
|
550
|
+
JSON.stringify(s.permissions || []),
|
|
551
|
+
JSON.stringify(s.dependencies || []),
|
|
552
|
+
(s.tools || []).join(","),
|
|
553
|
+
(s.triggers || []).join(","),
|
|
554
|
+
JSON.stringify(s.preferred_agents || []),
|
|
555
|
+
s.content || "",
|
|
556
|
+
parseInt(String(s.version || '0.0.1').split(".")[0]) || 1
|
|
557
|
+
);
|
|
558
|
+
skillCount++;
|
|
559
|
+
}
|
|
560
|
+
log.info(`[migration v0.0.28] ✅ ${skillCount} skills re-seeded with expanded schema`);
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
export function seedAllData(): void {
|
|
564
|
+
const db = getDb()
|
|
565
|
+
|
|
566
|
+
log.info("[seed] 🌱 Iniciando seed de datos predeterminados...")
|
|
567
|
+
|
|
568
|
+
reseedToolsAndSkills();
|
|
569
|
+
|
|
570
|
+
try {
|
|
571
|
+
|
|
572
|
+
// 3️⃣ Ethics templates (globales)
|
|
573
|
+
let ethicsCount = 0;
|
|
574
|
+
for (const ethics of SEED_DATA.ethics) {
|
|
575
|
+
db.query(`
|
|
576
|
+
INSERT OR IGNORE INTO ethics (id, name, description, content, is_default, enabled, active)
|
|
577
|
+
VALUES (?, ?, ?, ?, ?, 1, ?)
|
|
578
|
+
`).run(ethics.id, ethics.name, ethics.description, ethics.content, ethics.isDefault ? 1 : 0, ethics.isDefault ? 1 : 0)
|
|
579
|
+
ethicsCount++;
|
|
580
|
+
}
|
|
581
|
+
log.info(`[seed] ✅ ${ethicsCount} ethics templates procesados`);
|
|
582
|
+
|
|
583
|
+
// 4️⃣ Providers
|
|
584
|
+
let providerCount = 0;
|
|
585
|
+
for (const provider of SEED_DATA.providers) {
|
|
586
|
+
db.query(`
|
|
587
|
+
INSERT OR IGNORE INTO providers (id, name, base_url, category, enabled, active)
|
|
588
|
+
VALUES (?, ?, ?, ?, 1, 0)
|
|
589
|
+
`).run(provider.id, provider.name, provider.baseUrl || null, provider.category || 'llm')
|
|
590
|
+
providerCount++;
|
|
591
|
+
}
|
|
592
|
+
// If OLLAMA_HOST is set (e.g. Docker pointing to host machine), always update Ollama's base_url
|
|
593
|
+
const ollamaHost = process.env.OLLAMA_HOST;
|
|
594
|
+
if (ollamaHost) {
|
|
595
|
+
db.query(`UPDATE providers SET base_url = ? WHERE id = 'ollama'`).run(ollamaHost);
|
|
596
|
+
log.info(`[seed] ✅ Ollama base_url set to ${ollamaHost} (from OLLAMA_HOST env)`);
|
|
597
|
+
}
|
|
598
|
+
log.info(`[seed] ✅ ${providerCount} providers procesados`);
|
|
599
|
+
|
|
600
|
+
// 5️⃣ Models (Re-seed: clear and insert fresh)
|
|
601
|
+
log.info("[seed] 🔄 Re-seeding models (clearing and re-inserting)...");
|
|
602
|
+
db.run("PRAGMA foreign_keys = OFF;");
|
|
603
|
+
const result = db.run("DELETE FROM models");
|
|
604
|
+
log.info(`[seed] 🗑️ Deleted ${result.changes} existing models.`);
|
|
605
|
+
|
|
606
|
+
let modelCount = 0;
|
|
607
|
+
for (const model of SEED_DATA.models) {
|
|
608
|
+
db.query(`
|
|
609
|
+
INSERT OR REPLACE INTO models (id, provider_id, name, model_type, context_window, capabilities, enabled, active)
|
|
610
|
+
VALUES (?, ?, ?, ?, ?, ?, 1, 0)
|
|
611
|
+
`).run(model.id, model.providerId, model.name, model.modelType, model.contextWindow || null, model.capabilities || null)
|
|
612
|
+
modelCount++;
|
|
613
|
+
}
|
|
614
|
+
db.run("PRAGMA foreign_keys = ON;");
|
|
615
|
+
log.info(`[seed] ✅ ${modelCount} models procesados`);
|
|
616
|
+
|
|
617
|
+
// 6️⃣ MCP servers
|
|
618
|
+
let mcpCount = 0;
|
|
619
|
+
for (const mcp of SEED_DATA.mcpServers) {
|
|
620
|
+
db.query(`
|
|
621
|
+
INSERT OR IGNORE INTO mcp_servers (id, name, transport, command, args, url, enabled, active, builtin, tools_count)
|
|
622
|
+
VALUES (?, ?, ?, ?, ?, ?, 1, 0, ?, 0)
|
|
623
|
+
`).run(mcp.id, mcp.name, mcp.transport, mcp.command, JSON.stringify(mcp.args || []), (mcp as any).url || null, mcp.builtin ? 1 : 0)
|
|
624
|
+
mcpCount++;
|
|
625
|
+
}
|
|
626
|
+
log.info(`[seed] ✅ ${mcpCount} MCP servers procesados`);
|
|
627
|
+
|
|
628
|
+
// 7️⃣ Channels
|
|
629
|
+
let channelCount = 0;
|
|
630
|
+
for (const channel of SEED_DATA.channels) {
|
|
631
|
+
db.query(`
|
|
632
|
+
INSERT OR IGNORE INTO channels (id, type, enabled, active, status)
|
|
633
|
+
VALUES (?, ?, 1, 0, 'disconnected')
|
|
634
|
+
`).run(channel.id, channel.type)
|
|
635
|
+
channelCount++;
|
|
636
|
+
}
|
|
637
|
+
log.info(`[seed] ✅ ${channelCount} channels procesados`);
|
|
638
|
+
|
|
639
|
+
// WebChat siempre activo — no requiere credenciales
|
|
640
|
+
db.query(`UPDATE channels SET active = 1, enabled = 1, status = 'connected' WHERE id = 'webchat'`).run();
|
|
641
|
+
log.info("[seed] ✅ webchat activado por defecto");
|
|
642
|
+
|
|
643
|
+
// 8️⃣ Code Bridge
|
|
644
|
+
let cbCount = 0;
|
|
645
|
+
for (const cb of SEED_DATA.codeBridge) {
|
|
646
|
+
db.query(`
|
|
647
|
+
INSERT OR IGNORE INTO code_bridge (id, name, cli_command, port, enabled, active)
|
|
648
|
+
VALUES (?, ?, ?, ?, 0, 0)
|
|
649
|
+
`).run(cb.id, cb.name, cb.cliCommand, cb.port);
|
|
650
|
+
cbCount++;
|
|
651
|
+
}
|
|
652
|
+
log.info(`[seed] ✅ ${cbCount} Code Bridge CLIs procesados`);
|
|
653
|
+
|
|
654
|
+
// 8️⃣ Code Bridge Config (voice_wake_word, etc.)
|
|
655
|
+
let cbConfigCount = 0;
|
|
656
|
+
for (const config of SEED_DATA.codeBridgeConfig) {
|
|
657
|
+
db.query(`
|
|
658
|
+
INSERT OR IGNORE INTO code_bridge_config (id, key, value)
|
|
659
|
+
VALUES (?, ?, ?)
|
|
660
|
+
`).run(config.id, config.key, config.value);
|
|
661
|
+
cbConfigCount++;
|
|
662
|
+
}
|
|
663
|
+
log.info(`[seed] ✅ ${cbConfigCount} Code Bridge Config entries procesados`);
|
|
664
|
+
|
|
665
|
+
|
|
666
|
+
// 🔟 ACE Playbook - Initial rules for Agentic Context Engineering
|
|
667
|
+
let playbookCount = 0
|
|
668
|
+
for (const rule of INITIAL_PLAYBOOK_RULES) {
|
|
669
|
+
db.query(`
|
|
670
|
+
INSERT OR REPLACE INTO playbook (rule, category, applicable_to, helpful_count, harmful_count, active)
|
|
671
|
+
VALUES (?, ?, ?, 1, 0, 1)
|
|
672
|
+
`).run(rule.rule, rule.category, rule.applicable_to)
|
|
673
|
+
playbookCount++
|
|
674
|
+
}
|
|
675
|
+
log.info(`[seed] ✅ ${playbookCount} ACE playbook rules seeded`);
|
|
676
|
+
|
|
677
|
+
const insertPlaybookFts = db.prepare(`
|
|
678
|
+
INSERT OR REPLACE INTO playbook_fts(rule, category, applicable_to)
|
|
679
|
+
VALUES (?, ?, ?)
|
|
680
|
+
`);
|
|
681
|
+
for (const rule of INITIAL_PLAYBOOK_RULES) {
|
|
682
|
+
insertPlaybookFts.run(rule.rule, rule.category, rule.applicable_to);
|
|
683
|
+
}
|
|
684
|
+
log.info(`[seed] ✅ ${playbookCount} reglas playbook sincronizadas a playbook_fts`);
|
|
685
|
+
|
|
686
|
+
log.info("[seed] ✨ Seed completado exitosamente.");
|
|
687
|
+
} catch (err) {
|
|
688
|
+
log.error("[seed] ❌ Error durante el seed:", (err as Error).message);
|
|
689
|
+
}
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
export function seedToolsAndSkills(): void {
|
|
693
|
+
seedAllData()
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
/**
|
|
697
|
+
* Activa un elemento específico (los datos son globales, solo actualizamos active)
|
|
698
|
+
*/
|
|
699
|
+
export function activateElement(
|
|
700
|
+
table: "providers" | "models" | "tools" | "skills" | "mcp_servers" | "channels" | "integrations",
|
|
701
|
+
elementId: string
|
|
702
|
+
): void {
|
|
703
|
+
const db = getDb()
|
|
704
|
+
db.query(`UPDATE ${table} SET active = 1, enabled = 1 WHERE id = ?`).run(elementId)
|
|
705
|
+
log.info(`[seed] ✅ Activado ${elementId} en ${table}`)
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
/**
|
|
709
|
+
* Desactiva un elemento específico
|
|
710
|
+
*/
|
|
711
|
+
export function deactivateElement(
|
|
712
|
+
table: "providers" | "models" | "tools" | "skills" | "mcp_servers" | "channels",
|
|
713
|
+
elementId: string
|
|
714
|
+
): void {
|
|
715
|
+
const db = getDb()
|
|
716
|
+
db.query(`UPDATE ${table} SET active = 0, enabled = 0 WHERE id = ?`).run(elementId)
|
|
717
|
+
log.warn(`[seed] ⚠️ Desactivado ${elementId} en ${table}`)
|
|
718
|
+
}
|
|
719
|
+
|
|
720
|
+
/**
|
|
721
|
+
* Obtiene todos los elementos disponibles (activos e inactivos)
|
|
722
|
+
*/
|
|
723
|
+
export function getAllElements<T extends Record<string, any>>(
|
|
724
|
+
table: string
|
|
725
|
+
): T[] {
|
|
726
|
+
const db = getDb()
|
|
727
|
+
const results = db.query<T, []>(`SELECT * FROM ${table}`).all()
|
|
728
|
+
return results
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
/**
|
|
732
|
+
* Obtiene todos los elementos activos
|
|
733
|
+
*/
|
|
734
|
+
export function getActiveElements<T extends Record<string, any>>(
|
|
735
|
+
table: string
|
|
736
|
+
): T[] {
|
|
737
|
+
const db = getDb()
|
|
738
|
+
const results = db.query<T, []>(`SELECT * FROM ${table} WHERE active = 1`).all()
|
|
739
|
+
return results
|
|
740
|
+
}
|