@johpaz/hive-sdk 0.4.3 → 0.4.5
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/CHANGELOG.md +20 -4
- package/README.md +48 -7
- package/SECURITY.md +17 -0
- package/docs/API-AGENTS.md +430 -0
- package/docs/API-ARTIFACTS.md +55 -0
- package/docs/API-CONTEXT-COMPILER.md +285 -0
- package/docs/API-CRON.md +188 -0
- package/docs/API-DAG-SCHEDULER.md +291 -0
- package/docs/API-HOOKS.md +147 -0
- package/docs/API-RESILIENCE.md +45 -0
- package/docs/API-SERVICES.md +458 -0
- package/docs/API-SESSIONS.md +146 -0
- package/docs/API-TOOLS-SKILLS-CHANNELS.md +499 -0
- package/docs/API-WORKERS-EVENTS.md +311 -0
- package/docs/HIVE-HARNESS.md +232 -0
- package/docs/INDEX.md +198 -0
- package/docs/SECURITY-GUARDRAILS.md +87 -0
- package/docs/TEMPLATE-HIVE-APP.md +360 -0
- package/docs/UPGRADING.md +65 -0
- package/docs/assets/logoblack.png +0 -0
- package/docs/assets/logocolor-dark.png +0 -0
- package/docs/assets/logocolorbg.png +0 -0
- package/docs/plans/2026-09-05-office-dependency-hardening-design.md +28 -0
- package/docs/plans/2026-09-06-dependency-audit-remediation-design.md +25 -0
- package/docs/plans/2026-09-06-pptx-image-size-remediation-design.md +54 -0
- package/docs/plans/2026-09-06-typescript7-bun142-documentation-design.md +48 -0
- package/package.json +9 -8
- package/packages/cli/templates/hive-app/package.json +3 -0
- package/packages/core/src/agent/llm-providers/hiveagents.ts +2 -2
- package/packages/core/src/agent/providers/index.ts +17 -1
- package/packages/core/src/api/createAgent.ts +4 -2
- package/packages/core/src/config/loader.ts +2 -1
- package/packages/core/src/gateway/server.ts +1 -1
- package/packages/core/src/mcp/transports/sse.ts +22 -8
- package/packages/core/src/mcp/transports/websocket.ts +11 -9
- package/packages/core/src/scheduler/CronScheduler.ts +4 -2
- package/packages/core/src/scheduler/cron/job.ts +2 -1
- package/packages/core/src/scheduler/cron/zoned-time.ts +2 -1
- package/packages/core/src/tool-runtime/tool-worker.ts +3 -1
- package/packages/core/src/tools/office/office-escribir-pptx.ts +3 -1
- package/packages/core/src/tools/office/office-leer-pdf.ts +93 -44
- package/packages/core/src/tools/office/office-leer-xlsx.ts +36 -10
- package/packages/core/src/tools/office/security-limits.ts +28 -0
- package/packages/core/src/utils/port.ts +33 -0
- package/packages/core/src/vendor/pptxgenjs/LICENSE +21 -0
- package/packages/core/src/vendor/pptxgenjs/README.md +17 -0
- package/packages/core/src/vendor/pptxgenjs/pptxgen.es.d.ts +17 -0
- package/packages/core/src/vendor/pptxgenjs/pptxgen.es.js +7368 -0
- package/packages/core/src/voice/index.ts +6 -5
package/docs/INDEX.md
ADDED
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
# Índice de Documentación — Hive SDK
|
|
2
|
+
|
|
3
|
+
## Documentos de Usuario
|
|
4
|
+
|
|
5
|
+
| Documento | Descripción |
|
|
6
|
+
|-----------|-------------|
|
|
7
|
+
| [README.md](../README.md) | Introducción, instalación, CLI, guía rápida |
|
|
8
|
+
| [UPGRADING.md](./UPGRADING.md) | Migración a Bun 1.4.2 y TypeScript 7.0.2 |
|
|
9
|
+
| [SECURITY-GUARDRAILS.md](./SECURITY-GUARDRAILS.md) | Límites de archivos, dependencias, runtime y controles de publicación |
|
|
10
|
+
| [API-HOOKS.md](./API-HOOKS.md) | Engancharse al ciclo de vida: bloquear una tool, auditar, observar la compactación |
|
|
11
|
+
| [API-ARTIFACTS.md](./API-ARTIFACTS.md) | Archivos fuera de la ventana de contexto, y su retención |
|
|
12
|
+
| [API-RESILIENCE.md](./API-RESILIENCE.md) | Reintentos con backoff y circuit breakers |
|
|
13
|
+
| [API-SESSIONS.md](./API-SESSIONS.md) | Sesiones por canal, historial, reanudación tras un corte |
|
|
14
|
+
| [API-SERVICES.md](./API-SERVICES.md) | **La superficie para una UI** — CRUD de agentes, enjambres, skills, modelos, MCP, cron |
|
|
15
|
+
| [API-AGENTS.md](./API-AGENTS.md) | createAgent, AgentLoop, Tool/Skill Selector, LLM Providers |
|
|
16
|
+
| [API-DAG-SCHEDULER.md](./API-DAG-SCHEDULER.md) | DAGScheduler, TaskGraph, Estrategias, Presets |
|
|
17
|
+
| [API-CRON.md](./API-CRON.md) | Tareas programadas: expresiones, zona horaria, misfires, motor sin dependencias |
|
|
18
|
+
| [API-WORKERS-EVENTS.md](./API-WORKERS-EVENTS.md) | **Bun Workers**, createWorker, WorkerPool, AgentBus, EventBus, Canvas |
|
|
19
|
+
| [API-TOOLS-SKILLS-CHANNELS.md](./API-TOOLS-SKILLS-CHANNELS.md) | Tools, Skills, MCP, Gateway, Channels, Tool Runtime, Storage |
|
|
20
|
+
| [API-CONTEXT-COMPILER.md](./API-CONTEXT-COMPILER.md) | Context Compiler, Message History, Scratchpad, EthicsGuard, ACE |
|
|
21
|
+
| [TEMPLATE-HIVE-APP.md](./TEMPLATE-HIVE-APP.md) | **Template hive-app** — estructura, opciones, personalización |
|
|
22
|
+
| [HIVE-HARNESS.md](../docs/HIVE-HARNESS.md) | Posicionamiento: Hive como Agent Harness vertical |
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Guía de Inicio Rápido
|
|
27
|
+
|
|
28
|
+
### 1. Crear una app harness completa
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
hives create-app my-hive
|
|
32
|
+
cd my-hive
|
|
33
|
+
bun install
|
|
34
|
+
cp .env.example .env
|
|
35
|
+
bun run dev
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### 2. Crear Agente
|
|
39
|
+
|
|
40
|
+
```typescript
|
|
41
|
+
import { createAgent, defineTool } from "@johpaz/hive-sdk";
|
|
42
|
+
|
|
43
|
+
const tool = defineTool({
|
|
44
|
+
name: "saludar",
|
|
45
|
+
description: "Saluda a alguien",
|
|
46
|
+
execute: async (args: { nombre: string }) => `¡Hola ${args.nombre}!`,
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
const agent = await createAgent({
|
|
50
|
+
name: "asistente",
|
|
51
|
+
provider: "openai",
|
|
52
|
+
model: "gpt-5.6-luna",
|
|
53
|
+
tools: [tool],
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
const respuesta = await agent.run("Saluda a Juan");
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### 3. Crear un Bun Worker
|
|
60
|
+
|
|
61
|
+
```typescript
|
|
62
|
+
import { createWorker } from "@johpaz/hive-sdk";
|
|
63
|
+
|
|
64
|
+
const worker = createWorker({
|
|
65
|
+
name: "researcher",
|
|
66
|
+
systemPrompt: "You are a research specialist...",
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
const result = await worker.run("Research quantum computing");
|
|
70
|
+
worker.terminate();
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### 4. Ejecutar un Swarm (DAG)
|
|
74
|
+
|
|
75
|
+
```typescript
|
|
76
|
+
import { DAGScheduler, TaskGraph } from "@johpaz/hive-sdk";
|
|
77
|
+
|
|
78
|
+
const graph = new TaskGraph([
|
|
79
|
+
{ id: "task1", agentId: "worker", name: "T1", taskDescription: "Tarea 1", deps: [] },
|
|
80
|
+
{ id: "task2", agentId: "worker", name: "T2", taskDescription: "Tarea 2", deps: ["task1"] },
|
|
81
|
+
]);
|
|
82
|
+
|
|
83
|
+
const result = await new DAGScheduler().execute(graph);
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### 5. Gateway + Canales
|
|
87
|
+
|
|
88
|
+
```typescript
|
|
89
|
+
import { startGateway, ChannelManager, TelegramChannel } from "@johpaz/hive-sdk";
|
|
90
|
+
|
|
91
|
+
const server = await startGateway({ host: "127.0.0.1", port: 18790 });
|
|
92
|
+
|
|
93
|
+
const channels = new ChannelManager(config);
|
|
94
|
+
// channels.register("telegram", new TelegramChannel({ botToken: "..." }));
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Estructura de Paquetes
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
packages/
|
|
103
|
+
├── core/ # @johpaz/hive-sdk
|
|
104
|
+
│ └── src/
|
|
105
|
+
│ ├── api/ # createAgent(), Agent interface
|
|
106
|
+
│ ├── agent/ # AgentLoop, ContextCompiler, ConversationStore
|
|
107
|
+
│ │ ├── providers/ # LLM providers (OpenAI, Anthropic, Gemini, Ollama)
|
|
108
|
+
│ │ └── tool-selector.ts, skill-selector.ts, playbook-selector.ts (BM25 sobre HiveDB)
|
|
109
|
+
│ ├── tools/ # 59 built-in tools + ToolRegistry + ToolExecutor
|
|
110
|
+
│ ├── skills/ # SkillLoader, defineSkill()
|
|
111
|
+
│ ├── swarm/ # DAGScheduler, TaskGraph, WorkerPool
|
|
112
|
+
│ ├── workers/ # Bun Workers: createWorker, WorkerPool, agent.worker.ts
|
|
113
|
+
│ ├── gateway/ # HTTP/WebSocket server (Bun.serve)
|
|
114
|
+
│ ├── channels/ # Telegram, Discord, WhatsApp, Slack, Webchat
|
|
115
|
+
│ ├── mcp/ # MCPClientManager + transports (SSE, WS, STDIO)
|
|
116
|
+
│ ├── storage/ # HiveDB (colecciones + BM25)
|
|
117
|
+
│ ├── canvas/ # CanvasManager + A2UI emitter
|
|
118
|
+
│ ├── scheduler/ # CronScheduler + DAG execution
|
|
119
|
+
│ ├── tool-runtime/ # Bun Worker pool para ejecución paralela de tools
|
|
120
|
+
│ ├── ethics/ # EthicsGuard
|
|
121
|
+
│ ├── memory/ # Scratchpad
|
|
122
|
+
│ ├── config/ # loadConfig, loadEnv, getHiveDir
|
|
123
|
+
│ ├── utils/ # logger, toon, crypto, retry
|
|
124
|
+
│ └── index.ts # Public API barrel
|
|
125
|
+
│
|
|
126
|
+
└── cli/ # Hive CLI
|
|
127
|
+
└── src/
|
|
128
|
+
├── index.ts # Entry: hive <command>
|
|
129
|
+
└── commands/
|
|
130
|
+
├── init.ts
|
|
131
|
+
├── create-app.ts # Generar app harness completa
|
|
132
|
+
├── add-tool.ts # Generar boilerplate de tool
|
|
133
|
+
├── add-skill.ts # Generar boilerplate de skill
|
|
134
|
+
├── add-worker.ts # Generar Bun Worker
|
|
135
|
+
├── run.ts
|
|
136
|
+
├── test.ts
|
|
137
|
+
└── trace.ts
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Conceptos Clave
|
|
143
|
+
|
|
144
|
+
### Agente
|
|
145
|
+
Unidad de ejecución con configuración, contexto y ciclo de ejecución.
|
|
146
|
+
|
|
147
|
+
### Tool
|
|
148
|
+
Función invocable por el agente. Definida con `defineTool()`, seleccionada por búsqueda BM25.
|
|
149
|
+
|
|
150
|
+
### Skill
|
|
151
|
+
Composición de tools con triggers semánticos. Definida con `defineSkill()`.
|
|
152
|
+
|
|
153
|
+
### Bun Worker
|
|
154
|
+
Thread aislado que ejecuta un agente con system prompt propio. Creado con `createWorker()`.
|
|
155
|
+
|
|
156
|
+
### WorkerPool
|
|
157
|
+
Gestiona múltiples Bun Workers para ejecución paralela de tareas.
|
|
158
|
+
|
|
159
|
+
### Swarm (DAG)
|
|
160
|
+
Ejecución paralela de múltiples agentes con dependencias. Topological sort automático.
|
|
161
|
+
|
|
162
|
+
### Gateway
|
|
163
|
+
Servidor HTTP/WebSocket que expone el agente como API.
|
|
164
|
+
|
|
165
|
+
### Channel
|
|
166
|
+
Integración con plataformas de mensajería (Telegram, Discord, WhatsApp, Slack, Webchat).
|
|
167
|
+
|
|
168
|
+
### MCP
|
|
169
|
+
Model Context Protocol — herramientas externas via STDIO/SSE/WebSocket.
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## Variables de Entorno
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
HIVE_HOME=~/.hive # Raíz de datos (base, artefactos, config)
|
|
177
|
+
HIVE_HOST=127.0.0.1 # Gateway host
|
|
178
|
+
HIVE_PORT=18790 # Gateway port
|
|
179
|
+
OPENAI_API_KEY=sk-... # OpenAI
|
|
180
|
+
ANTHROPIC_API_KEY=sk-ant-... # Anthropic
|
|
181
|
+
LOG_LEVEL=info # debug | info | warn | error
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## Tests
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
# Tests unitarios (paralelo)
|
|
190
|
+
bun test
|
|
191
|
+
|
|
192
|
+
# Tests con timeout extendido
|
|
193
|
+
bun test --timeout 60000
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
*Documentación Hive SDK — ver `version` en package.json*
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# Guardrails de seguridad y compatibilidad
|
|
2
|
+
|
|
3
|
+
Este documento enumera controles implementados y verificables. No sustituye la
|
|
4
|
+
actualización de dependencias ni convierte un límite cooperativo en aislamiento
|
|
5
|
+
de proceso.
|
|
6
|
+
|
|
7
|
+
## Dependencias y cadena de suministro
|
|
8
|
+
|
|
9
|
+
- `bun.lock` fija el grafo reproducible y CI instala con
|
|
10
|
+
`bun install --frozen-lockfile`.
|
|
11
|
+
- `bun audit` es el control de aceptación para advisories conocidos. No existen
|
|
12
|
+
exclusiones generales ni overrides usados sólo para silenciar el auditor.
|
|
13
|
+
- PDF.js está en 6.3.289 o posterior dentro de esa línea segura.
|
|
14
|
+
- SheetJS CE se instala desde la distribución oficial 0.20.3; el paquete npm
|
|
15
|
+
abandonado en 0.18.5 no forma parte del grafo.
|
|
16
|
+
- Baileys está fijado exactamente en `7.0.0-rc14` para evitar retroceder a una
|
|
17
|
+
release candidate vulnerable.
|
|
18
|
+
- PptxGenJS 4.0.1 se conserva como artefacto ESM vendorizado, con licencia,
|
|
19
|
+
procedencia y SHA-256. No se instala su dependencia muerta `image-size`.
|
|
20
|
+
|
|
21
|
+
Toda actualización del artefacto PPTX debe verificar su origen y hash, ejecutar
|
|
22
|
+
la prueba OOXML y volver a ejecutar el audit.
|
|
23
|
+
|
|
24
|
+
## Archivos PDF
|
|
25
|
+
|
|
26
|
+
Antes de leer un PDF, `office_leer_pdf` exige un archivo regular y limita el
|
|
27
|
+
tamaño a **25 MiB**. El parser se configura con:
|
|
28
|
+
|
|
29
|
+
```typescript
|
|
30
|
+
enableScripting: false
|
|
31
|
+
isEvalSupported: false
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Cada solicitud puede extraer como máximo **200 páginas**. Los rangos deben usar
|
|
35
|
+
enteros válidos y el lector comprueba un deadline de **30 segundos** entre
|
|
36
|
+
páginas. `loadingTask.destroy()` se ejecuta siempre al terminar.
|
|
37
|
+
|
|
38
|
+
El deadline es cooperativo: no puede interrumpir una operación interna de
|
|
39
|
+
PDF.js que bloquee antes de devolver el control. El límite de bytes, el límite
|
|
40
|
+
de páginas y la versión corregida de la dependencia son los controles primarios.
|
|
41
|
+
|
|
42
|
+
## Archivos XLSX
|
|
43
|
+
|
|
44
|
+
`office_leer_xlsx` exige un archivo regular y rechaza entradas mayores a
|
|
45
|
+
**15 MiB** antes de cargarlas. El workbook acepta como máximo **50 hojas** y se
|
|
46
|
+
leen como máximo **10.000 filas por hoja**; `sheetRows` limita además el trabajo
|
|
47
|
+
del parser. Hay un deadline cooperativo de **30 segundos** comprobado entre
|
|
48
|
+
hojas.
|
|
49
|
+
|
|
50
|
+
SheetJS se carga bajo demanda. Si la distribución oficial no está instalada, la
|
|
51
|
+
herramienta devuelve un error operativo explícito en vez de propagar un
|
|
52
|
+
`Cannot find module` ambiguo.
|
|
53
|
+
|
|
54
|
+
## Escritura PPTX
|
|
55
|
+
|
|
56
|
+
`office_escribir_pptx` expone sólo portada, texto, viñetas y notas. No acepta
|
|
57
|
+
rutas, buffers ni datos de imágenes. El artefacto vendorizado importa `jszip`,
|
|
58
|
+
pero no `image-size`; su hash y procedimiento de actualización están en
|
|
59
|
+
`packages/core/src/vendor/pptxgenjs/README.md`.
|
|
60
|
+
|
|
61
|
+
Agregar `addImage`, fondos con imágenes o cualquier entrada binaria invalida
|
|
62
|
+
este guardrail y requiere una revisión de seguridad antes de publicarse.
|
|
63
|
+
|
|
64
|
+
## Runtime, tipos y transportes
|
|
65
|
+
|
|
66
|
+
- Bun **>=1.4.2** está declarado en `engines`; CI usa exactamente 1.4.2.
|
|
67
|
+
- TypeScript **7.0.2** está fijado para hacer reproducible el typecheck.
|
|
68
|
+
- SSE acepta sólo el contrato de stream que consume (`read`) y no depende de la
|
|
69
|
+
extensión Bun `readMany`.
|
|
70
|
+
- WebSocket delimita `Bun.WebSocketOptions` sin desactivar el chequeo de tipos;
|
|
71
|
+
conserva reintentos limitados y distingue cierres intencionales.
|
|
72
|
+
- Audio usa `Uint8Array<ArrayBuffer>` antes de construir `Blob`, evitando
|
|
73
|
+
compartir memoria respaldada por `SharedArrayBuffer` con la petición.
|
|
74
|
+
|
|
75
|
+
## Verificación antes de publicar
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
bun --version
|
|
79
|
+
bun install --frozen-lockfile
|
|
80
|
+
bun run typecheck
|
|
81
|
+
bun test
|
|
82
|
+
bun audit
|
|
83
|
+
git diff --check
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
El resultado aceptable es Bun 1.4.2 o posterior, typecheck y pruebas sin fallos,
|
|
87
|
+
audit sin vulnerabilidades y un diff sin errores de whitespace.
|
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
# Template `hive-app` — Documentación Completa
|
|
2
|
+
|
|
3
|
+
El template `hive-app` genera una **aplicación harness completa** lista para ejecutar. Incluye gateway HTTP/WebSocket, agente coordinador, configuración de canales, base de datos HiveDB, y deployment con Docker.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Generar una app
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
hives create-app my-hive
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Esto crea el directorio `my-hive/` con la estructura completa.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Estructura generada
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
my-hive/
|
|
21
|
+
├── package.json # Dependencias y scripts
|
|
22
|
+
├── hive.config.ts # Configuración del harness
|
|
23
|
+
├── docker-compose.yml # Deployment con Docker
|
|
24
|
+
├── .env.example # Variables de entorno de ejemplo
|
|
25
|
+
├── .gitignore # Archivos ignorados por git
|
|
26
|
+
└── src/
|
|
27
|
+
├── main.ts # Entry point — arranca gateway + agente
|
|
28
|
+
└── agents/
|
|
29
|
+
└── coordinator.ts # Definición del agente coordinador
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Archivos y opciones
|
|
35
|
+
|
|
36
|
+
### `package.json`
|
|
37
|
+
|
|
38
|
+
```json
|
|
39
|
+
{
|
|
40
|
+
"name": "my-hive",
|
|
41
|
+
"version": "0.1.0",
|
|
42
|
+
"type": "module",
|
|
43
|
+
"scripts": {
|
|
44
|
+
"dev": "bun run src/main.ts",
|
|
45
|
+
"start": "bun run src/main.ts",
|
|
46
|
+
"build": "bun build src/main.ts --outdir dist --target bun"
|
|
47
|
+
},
|
|
48
|
+
"dependencies": {
|
|
49
|
+
"@johpaz/hive-sdk": "latest"
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
| Script | Comando | Descripción |
|
|
55
|
+
|--------|---------|-------------|
|
|
56
|
+
| `dev` | `bun run src/main.ts` | Ejecutar en desarrollo |
|
|
57
|
+
| `start` | `bun run src/main.ts` | Ejecutar en producción |
|
|
58
|
+
| `build` | `bun build ...` | Compilar a `dist/` |
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
### `hive.config.ts`
|
|
63
|
+
|
|
64
|
+
Configuración central del harness.
|
|
65
|
+
|
|
66
|
+
```typescript
|
|
67
|
+
import type { Config } from "@johpaz/hive-sdk";
|
|
68
|
+
|
|
69
|
+
export default {
|
|
70
|
+
name: "my-hive",
|
|
71
|
+
gateway: {
|
|
72
|
+
host: process.env.HIVE_HOST ?? "127.0.0.1",
|
|
73
|
+
port: Number(process.env.HIVE_PORT ?? 18790),
|
|
74
|
+
},
|
|
75
|
+
channels: {
|
|
76
|
+
webchat: { enabled: true }, // Siempre habilitado
|
|
77
|
+
telegram: { enabled: false }, // Requiere TELEGRAM_BOT_TOKEN
|
|
78
|
+
discord: { enabled: false }, // Requiere DISCORD_BOT_TOKEN
|
|
79
|
+
whatsapp: { enabled: false }, // Requiere configuración adicional
|
|
80
|
+
slack: { enabled: false }, // Requiere SLACK_BOT_TOKEN
|
|
81
|
+
},
|
|
82
|
+
database: {
|
|
83
|
+
path: process.env.HIVE_DATA_DIR ?? "./data/hive.db",
|
|
84
|
+
},
|
|
85
|
+
} satisfies Config;
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
#### Opciones de configuración
|
|
89
|
+
|
|
90
|
+
| Opción | Tipo | Default | Descripción |
|
|
91
|
+
|--------|------|---------|-------------|
|
|
92
|
+
| `name` | `string` | `"my-hive"` | Nombre de la aplicación |
|
|
93
|
+
| `gateway.host` | `string` | `"127.0.0.1"` | Host del gateway |
|
|
94
|
+
| `gateway.port` | `number` | `18790` | Puerto del gateway |
|
|
95
|
+
| `channels.webchat.enabled` | `boolean` | `true` | Canal webchat integrado |
|
|
96
|
+
| `channels.telegram.enabled` | `boolean` | `false` | Bot de Telegram |
|
|
97
|
+
| `channels.discord.enabled` | `boolean` | `false` | Bot de Discord |
|
|
98
|
+
| `channels.whatsapp.enabled` | `boolean` | `false` | Bot de WhatsApp |
|
|
99
|
+
| `channels.slack.enabled` | `boolean` | `false` | Bot de Slack |
|
|
100
|
+
| `database.path` | `string` | `"./data/hive"` | Ruta de la base de datos HiveDB |
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
### `src/main.ts`
|
|
105
|
+
|
|
106
|
+
Entry point de la aplicación. Realiza:
|
|
107
|
+
|
|
108
|
+
1. Inicializa la base de datos (`ensureHiveDb`, que además siembra el catálogo)
|
|
109
|
+
2. Crea el agente coordinador (`createAgent`)
|
|
110
|
+
3. Inicializa el ChannelManager
|
|
111
|
+
4. Arranca el gateway (`startGateway`)
|
|
112
|
+
5. Maneja shutdown graceful (`SIGINT`)
|
|
113
|
+
|
|
114
|
+
```typescript
|
|
115
|
+
import {
|
|
116
|
+
createAgent,
|
|
117
|
+
startGateway,
|
|
118
|
+
ensureHiveDb,
|
|
119
|
+
ChannelManager,
|
|
120
|
+
logger,
|
|
121
|
+
} from "@johpaz/hive-sdk";
|
|
122
|
+
import config from "../hive.config.ts";
|
|
123
|
+
|
|
124
|
+
const log = logger.child("app");
|
|
125
|
+
|
|
126
|
+
async function main() {
|
|
127
|
+
log.info(`Starting my-hive...`);
|
|
128
|
+
|
|
129
|
+
await ensureHiveDb();
|
|
130
|
+
|
|
131
|
+
const agent = await createAgent({
|
|
132
|
+
name: "coordinator",
|
|
133
|
+
provider: "openai",
|
|
134
|
+
model: "gpt-5.6-luna",
|
|
135
|
+
systemPrompt: "You are a helpful AI assistant...",
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
const channelManager = new ChannelManager();
|
|
139
|
+
// TODO: configure channels from hive.config.ts
|
|
140
|
+
|
|
141
|
+
const gateway = await startGateway({
|
|
142
|
+
host: config.gateway?.host,
|
|
143
|
+
port: config.gateway?.port,
|
|
144
|
+
agentId: "coordinator",
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
log.info(`my-hive is running at http://${gateway.hostname}:${gateway.port}`);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
main().catch((err) => {
|
|
151
|
+
log.error("Fatal error:", err);
|
|
152
|
+
process.exit(1);
|
|
153
|
+
});
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
#### Personalizar el agente
|
|
157
|
+
|
|
158
|
+
Puedes cambiar el `provider`, `model`, y `systemPrompt`:
|
|
159
|
+
|
|
160
|
+
```typescript
|
|
161
|
+
const agent = await createAgent({
|
|
162
|
+
name: "coordinator",
|
|
163
|
+
provider: "anthropic", // cualquiera de los 16 del catálogo
|
|
164
|
+
model: "claude-3-5-sonnet-20241022",
|
|
165
|
+
systemPrompt: "Tu system prompt personalizado...",
|
|
166
|
+
});
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
#### Añadir tools al agente
|
|
170
|
+
|
|
171
|
+
```typescript
|
|
172
|
+
import { defineTool } from "@johpaz/hive-sdk";
|
|
173
|
+
|
|
174
|
+
const searchTool = defineTool({
|
|
175
|
+
name: "search",
|
|
176
|
+
description: "Search the web",
|
|
177
|
+
execute: async (args: { query: string }) => {
|
|
178
|
+
// Implementation
|
|
179
|
+
return { results: [] };
|
|
180
|
+
},
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
const agent = await createAgent({
|
|
184
|
+
name: "coordinator",
|
|
185
|
+
provider: "openai",
|
|
186
|
+
model: "gpt-5.6-luna",
|
|
187
|
+
tools: [searchTool],
|
|
188
|
+
});
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
### `src/agents/coordinator.ts`
|
|
194
|
+
|
|
195
|
+
Definición standalone del agente coordinador. Puedes importarlo desde `main.ts` o usarlo directamente.
|
|
196
|
+
|
|
197
|
+
```typescript
|
|
198
|
+
import { createAgent } from "@johpaz/hive-sdk";
|
|
199
|
+
|
|
200
|
+
export const coordinatorAgent = await createAgent({
|
|
201
|
+
name: "coordinator",
|
|
202
|
+
provider: "openai",
|
|
203
|
+
model: "gpt-5.6-luna",
|
|
204
|
+
systemPrompt: "You are the coordinator agent...",
|
|
205
|
+
});
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
### `docker-compose.yml`
|
|
211
|
+
|
|
212
|
+
Deployment containerizado.
|
|
213
|
+
|
|
214
|
+
```yaml
|
|
215
|
+
services:
|
|
216
|
+
app:
|
|
217
|
+
image: oven/bun:latest
|
|
218
|
+
working_dir: /app
|
|
219
|
+
volumes:
|
|
220
|
+
- .:/app
|
|
221
|
+
- hive-data:/app/data
|
|
222
|
+
ports:
|
|
223
|
+
- "${HIVE_PORT:-18790}:18790"
|
|
224
|
+
environment:
|
|
225
|
+
- HIVE_HOST=0.0.0.0
|
|
226
|
+
- HIVE_PORT=18790
|
|
227
|
+
- HIVE_DATA_DIR=/app/data
|
|
228
|
+
- OPENAI_API_KEY=${OPENAI_API_KEY}
|
|
229
|
+
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
|
|
230
|
+
command: ["bun", "run", "src/main.ts"]
|
|
231
|
+
restart: unless-stopped
|
|
232
|
+
|
|
233
|
+
volumes:
|
|
234
|
+
hive-data:
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
#### Deployment
|
|
238
|
+
|
|
239
|
+
```bash
|
|
240
|
+
# Copiar variables de entorno
|
|
241
|
+
cp .env.example .env
|
|
242
|
+
# Editar .env con tus API keys
|
|
243
|
+
|
|
244
|
+
# Levantar con Docker
|
|
245
|
+
docker compose up -d
|
|
246
|
+
|
|
247
|
+
# Ver logs
|
|
248
|
+
docker compose logs -f
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
### `.env.example`
|
|
254
|
+
|
|
255
|
+
Variables de entorno disponibles:
|
|
256
|
+
|
|
257
|
+
```bash
|
|
258
|
+
# Hive Harness Configuration
|
|
259
|
+
HIVE_HOST=127.0.0.1
|
|
260
|
+
HIVE_PORT=18790
|
|
261
|
+
HIVE_DATA_DIR=./data
|
|
262
|
+
|
|
263
|
+
# LLM Providers
|
|
264
|
+
OPENAI_API_KEY=sk-...
|
|
265
|
+
ANTHROPIC_API_KEY=sk-ant-...
|
|
266
|
+
GOOGLE_API_KEY=...
|
|
267
|
+
|
|
268
|
+
# Channels (enable as needed)
|
|
269
|
+
TELEGRAM_BOT_TOKEN=
|
|
270
|
+
DISCORD_BOT_TOKEN=
|
|
271
|
+
SLACK_BOT_TOKEN=
|
|
272
|
+
|
|
273
|
+
# Logging
|
|
274
|
+
LOG_LEVEL=info
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
| Variable | Requerida | Descripción |
|
|
278
|
+
|----------|-----------|-------------|
|
|
279
|
+
| `HIVE_HOST` | No | Host del gateway |
|
|
280
|
+
| `HIVE_PORT` | No | Puerto del gateway |
|
|
281
|
+
| `HIVE_HOME` | No | Directorio de datos (HiveDB en `<HIVE_HOME>/data`) |
|
|
282
|
+
| `OPENAI_API_KEY` | Sí* | API key de OpenAI |
|
|
283
|
+
| `ANTHROPIC_API_KEY` | Sí* | API key de Anthropic |
|
|
284
|
+
| `GOOGLE_API_KEY` | Sí* | API key de Gemini |
|
|
285
|
+
| `TELEGRAM_BOT_TOKEN` | No | Token del bot de Telegram |
|
|
286
|
+
| `DISCORD_BOT_TOKEN` | No | Token del bot de Discord |
|
|
287
|
+
| `SLACK_BOT_TOKEN` | No | Token del bot de Slack |
|
|
288
|
+
| `LOG_LEVEL` | No | `debug` \| `info` \| `warn` \| `error` |
|
|
289
|
+
|
|
290
|
+
\* Al menos una API key de LLM es requerida.
|
|
291
|
+
|
|
292
|
+
---
|
|
293
|
+
|
|
294
|
+
## Personalización avanzada
|
|
295
|
+
|
|
296
|
+
### Añadir canales
|
|
297
|
+
|
|
298
|
+
```typescript
|
|
299
|
+
// src/main.ts
|
|
300
|
+
import { TelegramChannel, DiscordChannel } from "@johpaz/hive-sdk";
|
|
301
|
+
|
|
302
|
+
const channelManager = new ChannelManager(config);
|
|
303
|
+
|
|
304
|
+
if (config.channels.telegram.enabled) {
|
|
305
|
+
channelManager.register("telegram", new TelegramChannel({
|
|
306
|
+
botToken: process.env.TELEGRAM_BOT_TOKEN!,
|
|
307
|
+
}));
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
if (config.channels.discord.enabled) {
|
|
311
|
+
channelManager.register("discord", new DiscordChannel({
|
|
312
|
+
botToken: process.env.DISCORD_BOT_TOKEN!,
|
|
313
|
+
}));
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
await channelManager.initialize();
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
### Añadir workers especializados
|
|
320
|
+
|
|
321
|
+
```bash
|
|
322
|
+
cd my-hive
|
|
323
|
+
hives add-worker researcher
|
|
324
|
+
hives add-worker coder
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
Esto genera `src/workers/researcher.worker.ts` y `src/workers/coder.worker.ts`.
|
|
328
|
+
|
|
329
|
+
### Añadir tools
|
|
330
|
+
|
|
331
|
+
```bash
|
|
332
|
+
cd my-hive
|
|
333
|
+
hives add-tool search-docs
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
Genera `src/tools/search-docs.ts`.
|
|
337
|
+
|
|
338
|
+
### Añadir skills
|
|
339
|
+
|
|
340
|
+
```bash
|
|
341
|
+
cd my-hive
|
|
342
|
+
hives add-skill onboarding
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
Genera `src/skills/onboarding.ts`.
|
|
346
|
+
|
|
347
|
+
---
|
|
348
|
+
|
|
349
|
+
## Tests del template
|
|
350
|
+
|
|
351
|
+
El template incluye tests para verificar que la estructura se genera correctamente.
|
|
352
|
+
|
|
353
|
+
```bash
|
|
354
|
+
cd my-hive
|
|
355
|
+
bun test
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
---
|
|
359
|
+
|
|
360
|
+
*Documentación Hive SDK — ver `version` en package.json*
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Actualización a Bun 1.4.2 y TypeScript 7
|
|
2
|
+
|
|
3
|
+
Hive SDK requiere **Bun 1.4.2 o posterior** y usa **TypeScript 7.0.2** para
|
|
4
|
+
desarrollo y verificación. El SDK se publica como TypeScript, por lo que estas
|
|
5
|
+
versiones también importan al compilar una aplicación consumidora.
|
|
6
|
+
|
|
7
|
+
## Actualizar un checkout del SDK
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
bun --version # debe ser 1.4.2 o posterior
|
|
11
|
+
bun install --frozen-lockfile
|
|
12
|
+
bun run typecheck
|
|
13
|
+
bun test
|
|
14
|
+
bun audit
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
El `package.json` raíz fija TypeScript 7.0.2 para que CI y desarrollo resuelvan
|
|
18
|
+
el mismo compilador. `@hive/core` acepta versiones compatibles desde 7.0.2
|
|
19
|
+
mediante su peer `^7.0.2`, porque publica sus fuentes. `@types/bun` permanece en
|
|
20
|
+
1.4.1: es la versión publicada de tipos correspondiente disponible al cerrar
|
|
21
|
+
esta migración.
|
|
22
|
+
|
|
23
|
+
## Actualizar una aplicación consumidora
|
|
24
|
+
|
|
25
|
+
1. Instala Bun 1.4.2 o una versión posterior compatible.
|
|
26
|
+
2. Actualiza el compilador de la aplicación:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
bun add --dev typescript@7.0.2 @types/bun@^1.4.1
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
3. Regenera la instalación con `bun install` y ejecuta el typecheck propio.
|
|
33
|
+
4. No añadas `skipLibCheck` para ocultar errores nuevos del SDK. Hive ya lo usa
|
|
34
|
+
internamente para declaraciones de terceros, pero su código fuente debe
|
|
35
|
+
seguir compilando completo.
|
|
36
|
+
|
|
37
|
+
## Cambios de tipos relevantes
|
|
38
|
+
|
|
39
|
+
TypeScript 7 distingue el respaldo de memoria de los typed arrays. Un
|
|
40
|
+
`Uint8Array<ArrayBufferLike>` podría usar `SharedArrayBuffer` y ya no es válido
|
|
41
|
+
automáticamente como `BlobPart`; Hive conserva bytes respaldados por
|
|
42
|
+
`ArrayBuffer` al construir audio para APIs de transcripción.
|
|
43
|
+
|
|
44
|
+
Con `DOM` y los tipos de Bun activos simultáneamente también aparecen dos APIs
|
|
45
|
+
con definiciones superpuestas:
|
|
46
|
+
|
|
47
|
+
- `ReadableStreamDefaultReader` de Bun añade `readMany()`, aunque el transporte
|
|
48
|
+
SSE sólo necesita `read()`. El transporte depende de ese contrato mínimo.
|
|
49
|
+
- El constructor DOM de `WebSocket` sólo conoce subprotocolos; Bun permite
|
|
50
|
+
`Bun.WebSocketOptions`, incluidos headers. El transporte delimita esa
|
|
51
|
+
extensión en un tipo de constructor local.
|
|
52
|
+
|
|
53
|
+
Estos adaptadores están en la frontera con el runtime. No deben reemplazarse por
|
|
54
|
+
`any`, `@ts-ignore` o `@ts-expect-error`: hacerlo convertiría una incompatibilidad
|
|
55
|
+
real de plataforma en un falso resultado verde.
|
|
56
|
+
|
|
57
|
+
## Compatibilidad y CI
|
|
58
|
+
|
|
59
|
+
Los workflows fijan Bun 1.4.2, instalan con `--frozen-lockfile`, ejecutan el
|
|
60
|
+
typecheck de TypeScript 7 y la suite. También generan una aplicación nueva y la
|
|
61
|
+
compilan enlazada contra el SDK del commit, no contra la última versión de npm.
|
|
62
|
+
|
|
63
|
+
Antes de elevar Bun o TypeScript otra vez, actualiza primero CI, reproduce el
|
|
64
|
+
typecheck localmente y documenta cualquier cambio de tipos observable para los
|
|
65
|
+
consumidores.
|
|
Binary file
|