@johpaz/hive 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. package/CONTRIBUTING.md +44 -0
  2. package/README.md +310 -0
  3. package/package.json +96 -0
  4. package/packages/cli/package.json +28 -0
  5. package/packages/cli/src/commands/agent-run.ts +168 -0
  6. package/packages/cli/src/commands/agents.ts +398 -0
  7. package/packages/cli/src/commands/chat.ts +142 -0
  8. package/packages/cli/src/commands/config.ts +50 -0
  9. package/packages/cli/src/commands/cron.ts +161 -0
  10. package/packages/cli/src/commands/dev.ts +95 -0
  11. package/packages/cli/src/commands/doctor.ts +133 -0
  12. package/packages/cli/src/commands/gateway.ts +443 -0
  13. package/packages/cli/src/commands/logs.ts +57 -0
  14. package/packages/cli/src/commands/mcp.ts +175 -0
  15. package/packages/cli/src/commands/message.ts +77 -0
  16. package/packages/cli/src/commands/onboard.ts +1868 -0
  17. package/packages/cli/src/commands/security.ts +144 -0
  18. package/packages/cli/src/commands/service.ts +50 -0
  19. package/packages/cli/src/commands/sessions.ts +116 -0
  20. package/packages/cli/src/commands/skills.ts +187 -0
  21. package/packages/cli/src/commands/update.ts +25 -0
  22. package/packages/cli/src/index.ts +185 -0
  23. package/packages/cli/src/utils/token.ts +6 -0
  24. package/packages/code-bridge/README.md +78 -0
  25. package/packages/code-bridge/package.json +18 -0
  26. package/packages/code-bridge/src/index.ts +95 -0
  27. package/packages/code-bridge/src/process-manager.ts +212 -0
  28. package/packages/code-bridge/src/schemas.ts +133 -0
  29. package/packages/core/package.json +46 -0
  30. package/packages/core/src/agent/agent-loop.ts +369 -0
  31. package/packages/core/src/agent/compaction.ts +140 -0
  32. package/packages/core/src/agent/context-compiler.ts +378 -0
  33. package/packages/core/src/agent/context-guard.ts +91 -0
  34. package/packages/core/src/agent/context.ts +138 -0
  35. package/packages/core/src/agent/conversation-store.ts +198 -0
  36. package/packages/core/src/agent/curator.ts +158 -0
  37. package/packages/core/src/agent/hooks.ts +166 -0
  38. package/packages/core/src/agent/index.ts +116 -0
  39. package/packages/core/src/agent/llm-client.ts +503 -0
  40. package/packages/core/src/agent/native-tools.ts +505 -0
  41. package/packages/core/src/agent/prompt-builder.ts +532 -0
  42. package/packages/core/src/agent/providers/index.ts +167 -0
  43. package/packages/core/src/agent/providers.ts +1 -0
  44. package/packages/core/src/agent/reflector.ts +170 -0
  45. package/packages/core/src/agent/service.ts +64 -0
  46. package/packages/core/src/agent/stuck-loop.ts +133 -0
  47. package/packages/core/src/agent/supervisor.ts +39 -0
  48. package/packages/core/src/agent/tracer.ts +102 -0
  49. package/packages/core/src/agent/workspace.ts +110 -0
  50. package/packages/core/src/canvas/canvas-manager.test.ts +161 -0
  51. package/packages/core/src/canvas/canvas-manager.ts +319 -0
  52. package/packages/core/src/canvas/canvas-tools.ts +420 -0
  53. package/packages/core/src/canvas/emitter.ts +115 -0
  54. package/packages/core/src/canvas/index.ts +2 -0
  55. package/packages/core/src/channels/base.ts +138 -0
  56. package/packages/core/src/channels/discord.ts +260 -0
  57. package/packages/core/src/channels/index.ts +7 -0
  58. package/packages/core/src/channels/manager.ts +383 -0
  59. package/packages/core/src/channels/slack.ts +287 -0
  60. package/packages/core/src/channels/telegram.ts +502 -0
  61. package/packages/core/src/channels/webchat.ts +128 -0
  62. package/packages/core/src/channels/whatsapp.ts +375 -0
  63. package/packages/core/src/config/index.ts +12 -0
  64. package/packages/core/src/config/loader.ts +529 -0
  65. package/packages/core/src/events/event-bus.ts +169 -0
  66. package/packages/core/src/gateway/index.ts +5 -0
  67. package/packages/core/src/gateway/initializer.ts +290 -0
  68. package/packages/core/src/gateway/lane-queue.ts +169 -0
  69. package/packages/core/src/gateway/resolver.ts +108 -0
  70. package/packages/core/src/gateway/router.ts +124 -0
  71. package/packages/core/src/gateway/server.ts +3317 -0
  72. package/packages/core/src/gateway/session.ts +95 -0
  73. package/packages/core/src/gateway/slash-commands.ts +192 -0
  74. package/packages/core/src/heartbeat/index.ts +157 -0
  75. package/packages/core/src/index.ts +19 -0
  76. package/packages/core/src/integrations/catalog.ts +286 -0
  77. package/packages/core/src/integrations/env.ts +64 -0
  78. package/packages/core/src/integrations/index.ts +2 -0
  79. package/packages/core/src/memory/index.ts +1 -0
  80. package/packages/core/src/memory/notes.ts +68 -0
  81. package/packages/core/src/plugins/api.ts +128 -0
  82. package/packages/core/src/plugins/index.ts +2 -0
  83. package/packages/core/src/plugins/loader.ts +365 -0
  84. package/packages/core/src/resilience/circuit-breaker.ts +225 -0
  85. package/packages/core/src/security/google-chat.ts +269 -0
  86. package/packages/core/src/security/index.ts +192 -0
  87. package/packages/core/src/security/pairing.ts +250 -0
  88. package/packages/core/src/security/rate-limit.ts +270 -0
  89. package/packages/core/src/security/signal.ts +321 -0
  90. package/packages/core/src/state/store.ts +312 -0
  91. package/packages/core/src/storage/bun-sqlite-store.ts +188 -0
  92. package/packages/core/src/storage/crypto.ts +101 -0
  93. package/packages/core/src/storage/db-context.ts +333 -0
  94. package/packages/core/src/storage/onboarding.ts +1087 -0
  95. package/packages/core/src/storage/schema.ts +541 -0
  96. package/packages/core/src/storage/seed.ts +571 -0
  97. package/packages/core/src/storage/sqlite.ts +387 -0
  98. package/packages/core/src/storage/usage.ts +212 -0
  99. package/packages/core/src/tools/bridge-events.ts +74 -0
  100. package/packages/core/src/tools/browser.ts +275 -0
  101. package/packages/core/src/tools/codebridge.ts +421 -0
  102. package/packages/core/src/tools/coordinator-tools.ts +179 -0
  103. package/packages/core/src/tools/cron.ts +611 -0
  104. package/packages/core/src/tools/exec.ts +140 -0
  105. package/packages/core/src/tools/fs.ts +364 -0
  106. package/packages/core/src/tools/index.ts +12 -0
  107. package/packages/core/src/tools/memory.ts +176 -0
  108. package/packages/core/src/tools/notify.ts +113 -0
  109. package/packages/core/src/tools/project-management.ts +376 -0
  110. package/packages/core/src/tools/project.ts +375 -0
  111. package/packages/core/src/tools/read.ts +158 -0
  112. package/packages/core/src/tools/web.ts +436 -0
  113. package/packages/core/src/tools/workspace.ts +171 -0
  114. package/packages/core/src/utils/benchmark.ts +80 -0
  115. package/packages/core/src/utils/crypto.ts +73 -0
  116. package/packages/core/src/utils/date.ts +42 -0
  117. package/packages/core/src/utils/index.ts +4 -0
  118. package/packages/core/src/utils/logger.ts +388 -0
  119. package/packages/core/src/utils/retry.ts +70 -0
  120. package/packages/core/src/voice/index.ts +583 -0
  121. package/packages/core/tsconfig.json +9 -0
  122. package/packages/mcp/package.json +26 -0
  123. package/packages/mcp/src/config.ts +13 -0
  124. package/packages/mcp/src/index.ts +1 -0
  125. package/packages/mcp/src/logger.ts +42 -0
  126. package/packages/mcp/src/manager.ts +434 -0
  127. package/packages/mcp/src/transports/index.ts +67 -0
  128. package/packages/mcp/src/transports/sse.ts +241 -0
  129. package/packages/mcp/src/transports/websocket.ts +159 -0
  130. package/packages/skills/package.json +21 -0
  131. package/packages/skills/src/bundled/agent_management/SKILL.md +24 -0
  132. package/packages/skills/src/bundled/browser_automation/SKILL.md +30 -0
  133. package/packages/skills/src/bundled/context_compact/SKILL.md +35 -0
  134. package/packages/skills/src/bundled/cron_manager/SKILL.md +52 -0
  135. package/packages/skills/src/bundled/file_manager/SKILL.md +76 -0
  136. package/packages/skills/src/bundled/http_client/SKILL.md +24 -0
  137. package/packages/skills/src/bundled/memory/SKILL.md +42 -0
  138. package/packages/skills/src/bundled/project_management/SKILL.md +26 -0
  139. package/packages/skills/src/bundled/shell/SKILL.md +43 -0
  140. package/packages/skills/src/bundled/system_notify/SKILL.md +52 -0
  141. package/packages/skills/src/bundled/voice/SKILL.md +25 -0
  142. package/packages/skills/src/bundled/web_search/SKILL.md +29 -0
  143. package/packages/skills/src/index.ts +1 -0
  144. package/packages/skills/src/loader.ts +282 -0
  145. package/packages/tools/package.json +43 -0
  146. package/packages/tools/src/browser/browser.test.ts +111 -0
  147. package/packages/tools/src/browser/index.ts +272 -0
  148. package/packages/tools/src/canvas/index.ts +220 -0
  149. package/packages/tools/src/cron/cron.test.ts +164 -0
  150. package/packages/tools/src/cron/index.ts +304 -0
  151. package/packages/tools/src/filesystem/filesystem.test.ts +240 -0
  152. package/packages/tools/src/filesystem/index.ts +379 -0
  153. package/packages/tools/src/git/index.ts +239 -0
  154. package/packages/tools/src/index.ts +4 -0
  155. package/packages/tools/src/shell/detect-env.ts +70 -0
  156. package/packages/tools/tsconfig.json +9 -0
@@ -0,0 +1,44 @@
1
+ # Contribuir a Hive
2
+
3
+ ¡Gracias por tu interés en contribuir a Hive! Este documento te ayuda a saber dónde hacer tu cambio.
4
+
5
+ ## ¿Dónde hacer cambios?
6
+
7
+ | Tipo de cambio | Carpeta |
8
+ |---------------|---------|
9
+ | Canal nuevo (Telegram, Discord, WhatsApp, etc.) | `packages/core/src/channels` |
10
+ | Tool nueva (navegador, filesystem, etc.) | `packages/core/src/tools` |
11
+ | Skill nuevo (web_search, shell, memory, etc.) | `packages/core/src/skills` |
12
+ | MCP nuevo | `packages/core/src/mcp` |
13
+ | Mejora al CLI | `packages/cli/src` |
14
+ | Bug fix | Donde corresponda según el error |
15
+
16
+ ## Proceso de Pull Request
17
+
18
+ 1. **Fork** el repositorio
19
+ 2. Crea una rama: `git checkout -b feature/mi-nueva-feature`
20
+ 3. Haz tus cambios con pruebas si es posible
21
+ 4. Asegúrate de que pasa el lint: `bun run lint`
22
+ 5. Abre un PR describiendo tu cambio
23
+
24
+ Todos los cambios se revisan en un solo lugar. Un PR. Una revisión. Un merge.
25
+
26
+ ## Ejecutar en desarrollo
27
+
28
+ ```bash
29
+ bun install
30
+ bun run dev
31
+ ```
32
+
33
+ ## Commands disponibles
34
+
35
+ ```bash
36
+ bun run dev # Modo desarrollo
37
+ bun run start # Iniciar gateway
38
+ bun run test # Ejecutar tests
39
+ bun run lint # Verificar tipos
40
+ ```
41
+
42
+ ---
43
+
44
+ ¿Dudas? Únete a nuestro [Discord](https://discord.gg/hive) o abre un issue.
package/README.md ADDED
@@ -0,0 +1,310 @@
1
+ # Hive 🐝
2
+
3
+ > Tu colmena de agentes IA. Local-first. Multi-canal. Open source. Construido desde Colombia para el mundo.
4
+
5
+ [![npm version](https://img.shields.io/npm/v/@johpaz/hive)](https://www.npmjs.com/package/@johpaz/hive)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
+ [![npm downloads](https://img.shields.io/npm/dm/@johpaz/hive)](https://www.npmjs.com/package/@johpaz/hive)
8
+ [![Hecho en Colombia 🇨🇴](https://img.shields.io/badge/Hecho%20en-Colombia-brightgreen)](https://github.com/johpaz/hive)
9
+
10
+ ---
11
+
12
+ ## ¿Qué es Hive?
13
+
14
+ Hive es un Gateway de IA Orquestado — un Enjambre de Agentes Especializados que trabajan juntos bajo la coordinación de un gateway central. A diferencia de un asistente personal único, Hive implementa una arquitectura de enjambre donde múltiples agentes especializados trabajan en equipo.
15
+
16
+ **El problema que resolvemos**: Necesitas un asistente de IA que funcione en múltiples canales (Telegram, Discord, WhatsApp), que pueda ejecutar tareas automáticamente, que respete tu privacidad con datos locales, y que sea extensible con herramientas propias.
17
+
18
+ ---
19
+
20
+ ## Instalación
21
+
22
+ ### Opción 1: npm (Recomendado para desarrolladores)
23
+
24
+ ```bash
25
+ npm install -g @johpaz/hive
26
+ ```
27
+
28
+ Luego ejecuta el asistente de configuración:
29
+
30
+ ```bash
31
+ hive onboard
32
+ ```
33
+
34
+ ### Opción 2: Binario standalone (Cero dependencias)
35
+
36
+ Descarga el binario para tu plataforma:
37
+
38
+ | Plataforma | Descarga | Permisos |
39
+ |------------|----------|----------|
40
+ | Windows x64 | [hive-v1.1.0-windows-x64.exe](https://github.com/johpaz/hive/releases/latest) | `chmod +x hive-v1.1.0-windows-x64.exe` |
41
+ | macOS Intel | [hive-v1.1.0-macos-x64](https://github.com/johpaz/hive/releases/latest) | `chmod +x hive-v1.1.0-macos-x64` |
42
+ | macOS Apple Silicon | [hive-v1.1.0-macos-arm64](https://github.com/johpaz/hive/releases/latest) | `chmod +x hive-v1.1.0-macos-arm64` |
43
+ | Linux x64 | [hive-v1.1.0-linux-x64](https://github.com/johpaz/hive/releases/latest) | `chmod +x hive-v1.1.0-linux-x64` |
44
+ | Linux ARM64 | [hive-v1.1.0-linux-arm64](https://github.com/johpaz/hive/releases/latest) | `chmod +x hive-v1.1.0-linux-arm64` |
45
+
46
+ ```bash
47
+ # Ejemplo para Linux:
48
+ curl -L -o hive https://github.com/johpaz/hive/releases/latest/download/hive-v1.1.0-linux-x64
49
+ chmod +x hive
50
+ ./hive onboard
51
+ ```
52
+
53
+ ### Caso de uso USB (Portable)
54
+
55
+ Lleva tu agente contigo en una USB:
56
+
57
+ 1. Descarga el binario de tu plataforma
58
+ 2. Copia el binario a una USB
59
+ 3. En cualquier equipo compatible, ejecuta:
60
+ ```bash
61
+ ./hive onboard
62
+ ```
63
+
64
+ Tu configuración y base de datos se guardan en `~/.hive`. Puedes copiar esa carpeta a tu USB y tener tu agente completo siempre contigo.
65
+
66
+ ---
67
+
68
+ ## Los Cuatro Pilares
69
+
70
+ | Pilar | Descripción |
71
+ |-------|-------------|
72
+ | **Tools** | Herramientas nativas: navegador, sistema de archivos, cron, canvas. |
73
+ | **Skills** | Habilidades incluidas: búsqueda web, shell, memoria, HTTP client, file manager. |
74
+ | **MCP** | Compatible con Model Context Protocol para extender funcionalidades. |
75
+ | **Ética** | Límites claros definidos en ETHICS.md — tu agente siempre sabe qué puede y qué no puede hacer. |
76
+
77
+ ---
78
+
79
+ ## Arquitectura técnica
80
+
81
+ Hive usa un **Native Agent Loop** propio — sin dependencias de LangGraph ni LangChain. Todo corre sobre Bun + SQLite con cero abstracciones intermedias.
82
+
83
+ ### Loop principal
84
+
85
+ ```
86
+ mensaje entrante
87
+ → Context Compiler (compileContext)
88
+ → callLLM()
89
+ → [executeTool() → callLLM()]*
90
+ → respuesta al usuario
91
+ ```
92
+
93
+ ---
94
+
95
+ ### FASE 3 — Context Compiler
96
+
97
+ El Context Compiler es el componente central del motor. Se ejecuta antes de cada llamada al modelo y ensambla una "vista mínima" del contexto consultando SQLite directamente. Implementa cuatro estrategias de Context Engineering:
98
+
99
+ **3.1 — Selección de historial (SELECCIONAR)**
100
+ - Conversaciones cortas (< 20 mensajes): pasa todos los mensajes
101
+ - Conversaciones largas: usa el resumen de la tabla `summaries` + los últimos N mensajes recientes
102
+ - Nunca pasa la conversación cruda completa a modelos con ventana chica
103
+
104
+ **3.2 — Scratchpad (ESCRIBIR)**
105
+ - Carga las notas persistentes del thread actual desde la tabla `scratchpad`
106
+ - Las inyecta en el system prompt como "Información conocida sobre esta conversación"
107
+ - El agente puede escribir al scratchpad usando la tool `save_note(key, value)`
108
+
109
+ **3.3 — Playbook del ACE (SELECCIONAR)**
110
+ - Busca con FTS5 en la tabla `playbook` usando keywords del mensaje del usuario
111
+ - Inyecta máximo 5 reglas relevantes (`active=1`, `helpful_count > harmful_count`)
112
+ - Las reglas son aprendidas automáticamente por el Curator del ACE
113
+
114
+ **3.4 — Selección de tools en tres niveles (SELECCIONAR)**
115
+
116
+ | Nivel | Operación |
117
+ |-------|-----------|
118
+ | 1 — Catálogo | `collectNativeTools()` + tools de MCP activos |
119
+ | 2 — Agente | `filterToolsByAgent()` — filtra por `tools_json` del agente. `NULL` = todas permitidas |
120
+ | 3 — Turno | `selectToolLoadout()` — ALWAYS_INCLUDE + scoring por keywords del mensaje (máx. 20) |
121
+
122
+ El límite de 20 tools por turno es crítico para modelos locales con recursos limitados. Las tools del `ALWAYS_INCLUDE` siempre están disponibles sin consumir slots opcionales: `cron_add/list/remove/edit`, `project_create/task_create/task_update`, `read/write/edit`, `save_note`, `notify`, `report_progress`, `create_agent`.
123
+
124
+ **3.5 — Ética (capa constitucional)**
125
+ - Carga todas las reglas de la tabla `ethics` — sin filtrar, sin comprimir
126
+ - Siempre es el primer bloque del system prompt, en toda llamada al modelo
127
+
128
+ **Orden de ensamblaje del contexto:**
129
+
130
+ ```
131
+ [system prompt]
132
+ 1. Reglas de ética (completas, siempre)
133
+ 2. Identidad del agente (agents.system_prompt + description)
134
+ 3. Hive Capabilities Manifest (hive_capabilities table)
135
+ 4. Perfil del usuario (users table)
136
+ 5. Reglas del playbook relevantes (FTS5, máx. 5)
137
+ 6. Notas del scratchpad (filtradas por thread_id)
138
+ 7. Entorno (agent_id, thread_id, fecha/hora local)
139
+
140
+ [messages]
141
+ 8. Resumen del historial (si la conversación es larga)
142
+ 9. Mensajes recientes (últimos N)
143
+
144
+ [tools]
145
+ 10. Tools filtradas en tres niveles
146
+ ```
147
+
148
+ ---
149
+
150
+ ### FASE 4 — Proyectos, Tareas y Workers
151
+
152
+ El Coordinador puede descomponer problemas complejos en proyectos con tareas paralelas ejecutadas por workers autónomos.
153
+
154
+ **4.1 — Decisión simple vs proyecto**
155
+
156
+ El modelo decide en su system prompt:
157
+ - **Tarea simple** → el Coordinador la resuelve directamente o despacha a un worker existente
158
+ - **Tarea compleja** → crea un proyecto con subtareas y dependencias
159
+
160
+ **4.2 — Creación de proyecto y asignación de workers**
161
+
162
+ 1. `project_create` — registra el objetivo del proyecto
163
+ 2. `task_create` — crea cada subtarea con dependencias
164
+ 3. `find_agent` — busca por FTS5 sobre `name+description` del agente vs la tarea
165
+ - Si existe un worker compatible → `assign_task`
166
+ - Si no → `create_agent` con system prompt y tools necesarios, luego `assign_task`
167
+
168
+ **4.3 — Ejecución respetando dependencias**
169
+
170
+ - Tareas sin dependencias (o con dependencias ya `completed`) se ejecutan primero
171
+ - Tareas independientes entre sí corren en paralelo (`Promise.all`)
172
+ - Si una tarea falla: el Coordinador puede reintentar, reasignar a otro agente, o marcar el proyecto como `failed`
173
+
174
+ **4.4 — Contexto aislado por worker (AISLAR)**
175
+
176
+ Cada worker recibe **solo** lo necesario para su tarea:
177
+ - Reglas de ética + su system prompt propio
178
+ - Descripción de la tarea asignada
179
+ - Resultados de las tareas de las que depende
180
+
181
+ El worker **no** recibe la conversación completa del usuario. Esto mantiene el contexto mínimo y evita contaminación entre agentes.
182
+
183
+ ---
184
+
185
+ ### FASE 5 — ACE (Adaptive Context Engine)
186
+
187
+ El ACE convierte a Hive en un sistema que aprende automáticamente de sus propias ejecuciones.
188
+
189
+ **5.1 — Tracer (Generator)**
190
+
191
+ Después de cada ejecución se guarda automáticamente en la tabla `traces`:
192
+ - Qué agente, qué tool, qué recibió, qué produjo
193
+ - Si fue exitoso, cuánto tardó, cuántos tokens consumió
194
+
195
+ Pasivo — no agrega latencia al usuario.
196
+
197
+ **5.2 — Reflector (análisis periódico)**
198
+
199
+ Se ejecuta en segundo plano, nunca en el flujo del usuario:
200
+ - Trigger: cada 20 trazas nuevas, o por cron periódico
201
+ - Le pide al modelo que analice las trazas: patrones de éxito, fallos repetidos, oportunidades de mejora
202
+ - Guarda los insights en la tabla `reflections` (incluyendo `ethics_violation` con prioridad máxima)
203
+
204
+ **5.3 — Curator (playbook + poda de agentes)**
205
+
206
+ Transforma insights en reglas operativas:
207
+ - Si ya existe una regla similar → incrementa `helpful_count` o `harmful_count`
208
+ - Si es nueva → la inserta con `confidence` proporcional a cuántas trazas la respaldan
209
+ - Si `harmful_count > helpful_count` → marca la regla como `active=0`
210
+ - Si hay reglas duplicadas o contradictorias → fusiona o poda
211
+
212
+ Poda de agentes:
213
+ - Workers sin actividad por más de 14 días → `status='archived'`
214
+ - Workers con tasa de fallo alta → `archived` + regla en playbook explicando por qué fallaba
215
+ - Workers duplicados (skills similares) → archiva el menos exitoso
216
+
217
+ **Ciclo completo del ACE:**
218
+
219
+ ```
220
+ Agentes ejecutan tareas
221
+ → trazas en SQLite
222
+ → Reflector analiza periódicamente
223
+ → Curator actualiza playbook + poda agentes
224
+ → Context Compiler inyecta reglas
225
+ → Agentes ejecutan mejor la próxima vez
226
+ ```
227
+
228
+ ---
229
+
230
+ ### FASE 6 — Compaction (compresión de historial)
231
+
232
+ Mantiene el contexto dentro del presupuesto de tokens del modelo.
233
+
234
+ **Compresión de conversación (COMPRIMIR)**
235
+ - Trigger: cuando el token count acumulado del thread supera el 60% de la ventana del modelo
236
+ - Toma todos los mensajes excepto los últimos 5
237
+ - El modelo los resume preservando: datos del usuario, decisiones tomadas, resultados de tools, contexto para continuar
238
+ - El resumen se guarda en la tabla `summaries`; los mensajes originales permanecen como historial
239
+
240
+ **Tool result clearing**
241
+ - Resultados de tools con más de N turnos de antigüedad → reemplazados por un resumen corto
242
+ - Reduce tokens sin perder el registro de que la tool se ejecutó
243
+
244
+ ---
245
+
246
+ ### Providers LLM soportados
247
+
248
+ Hive llama directamente a los SDKs oficiales de cada provider:
249
+
250
+ | Provider | SDK | Modelos ejemplo |
251
+ |----------|-----|-----------------|
252
+ | Google Gemini | `@google/genai` | gemini-2.5-flash, gemini-2.0-flash |
253
+ | Anthropic | `@anthropic-ai/sdk` | claude-sonnet-4-6, claude-opus-4-6 |
254
+ | OpenAI | `openai` | gpt-4o, gpt-4.1 |
255
+ | Groq | `openai` (compat) | llama-3.3-70b, mixtral-8x7b |
256
+ | Mistral | `openai` (compat) | mistral-large |
257
+ | DeepSeek | `openai` (compat) | deepseek-chat |
258
+ | Ollama | `openai` (compat) | llama3, qwen2.5, etc. |
259
+ | OpenRouter | `openai` (compat) | cualquier modelo de la plataforma |
260
+
261
+ ### Onboarding → System Prompt
262
+
263
+ Al completar el onboarding, el campo `agents.system_prompt` se genera automáticamente con el nombre, descripción y tono del agente. El tono puede ser: `friendly`, `professional`, `direct` o `casual`.
264
+
265
+ ---
266
+
267
+ ## Desarrollo
268
+
269
+ ```bash
270
+ # Clonar el repo
271
+ git clone https://github.com/johpaz/hive.git
272
+ cd hive
273
+
274
+ # Instalar dependencias
275
+ bun install
276
+
277
+ # Modo desarrollo
278
+ bun run dev
279
+ ```
280
+
281
+ ---
282
+
283
+ ## Contribuir
284
+
285
+ ¿Quieres agregar una nueva funcionalidad? Consulta [CONTRIBUTING.md](CONTRIBUTING.md) para saber exactamente dónde hacer tu cambio.
286
+
287
+ | Tipo de cambio | Ubicación |
288
+ |---------------|-----------|
289
+ | Canal nuevo | `packages/core/src/channels/` + registrar en `manager.ts` |
290
+ | Tool nativa | `packages/core/src/tools/` + registrar en `native-tools.ts` |
291
+ | Skill nueva | `packages/skills/src/` |
292
+ | MCP nuevo | `packages/core/src/mcp/` |
293
+ | Capability en el manifest | tabla `hive_capabilities` vía `seed.ts` |
294
+ | Mejora al CLI | `packages/cli/src/commands/` |
295
+
296
+ Todo en un PR. Una revisión. Un merge.
297
+
298
+ ---
299
+
300
+ ## Links
301
+
302
+ - 🌐 [hiveagents.io](https://hiveagents.io)
303
+ - 💬 [Discord](https://discord.gg/hive)
304
+ - 📱 [Telegram](https://t.me/hive_agents)
305
+
306
+ ---
307
+
308
+ ## Licencia
309
+
310
+ MIT © 2024-2026 Hive Team — Construido con ❤️ desde Colombia
package/package.json ADDED
@@ -0,0 +1,96 @@
1
+ {
2
+ "name": "@johpaz/hive",
3
+ "version": "1.1.0",
4
+ "description": "Tu colmena de agentes IA. Local-first. Multi-canal. Open source. Construido desde Colombia para el mundo.",
5
+ "bin": {
6
+ "hive": "packages/cli/src/index.ts"
7
+ },
8
+ "main": "packages/core/src/index.ts",
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git+https://github.com/johpaz/hive.git"
12
+ },
13
+ "keywords": [
14
+ "hive",
15
+ "agents",
16
+ "ai",
17
+ "llm",
18
+ "context-engine",
19
+ "local-first",
20
+ "multi-channel",
21
+ "telegram",
22
+ "discord",
23
+ "whatsapp",
24
+ "bun",
25
+ "sqlite",
26
+ "mcp",
27
+ "open-source",
28
+ "latam",
29
+ "colombia"
30
+ ],
31
+ "license": "MIT",
32
+ "files": [
33
+ "packages/core/",
34
+ "packages/cli/",
35
+ "packages/mcp/",
36
+ "packages/skills/",
37
+ "packages/tools/",
38
+ "packages/code-bridge/",
39
+ "package.json",
40
+ "README.md",
41
+ "LICENSE",
42
+ "CONTRIBUTING.md"
43
+ ],
44
+ "workspaces": [
45
+ "packages/*"
46
+ ],
47
+ "scripts": {
48
+ "dev": "HIVE_HOME=$HOME/.hive-dev HIVE_DEV=true bun run packages/cli/src/index.ts dev",
49
+ "dev:keep": "HIVE_HOME=$HOME/.hive-dev HIVE_DEV=true HIVE_DEV_CLEAN=false bun run packages/cli/src/index.ts dev",
50
+ "start": "bun run packages/cli/src/index.ts start",
51
+ "test": "bun test",
52
+ "test:ci": "bun test --coverage",
53
+ "lint": "bunx tsc --noEmit",
54
+ "build": "echo 'No build needed - TypeScript is interpreted by Bun'",
55
+ "build:binaries": "bun run scripts/build-binaries.ts",
56
+ "bench": "bun run scripts/bench.ts",
57
+ "prepublishOnly": "bun run build",
58
+ "publish": "npm publish --access public"
59
+ },
60
+ "dependencies": {
61
+ "@ag-ui/core": "^0.0.46",
62
+ "@anthropic-ai/sdk": "^0.74.0",
63
+ "@clack/prompts": "^0.5.0",
64
+ "@google/genai": "^1.43.0",
65
+ "@modelcontextprotocol/sdk": "^1.26.0",
66
+ "@sapphire/snowflake": "latest",
67
+ "@slack/bolt": "latest",
68
+ "@vitejs/plugin-react": "^5.1.4",
69
+ "@whiskeysockets/baileys": "latest",
70
+ "async-mutex": "^0.5.0",
71
+ "cron-parser": "^5.5.0",
72
+ "discord.js": "latest",
73
+ "grammy": "latest",
74
+ "groq-sdk": "^0.37.0",
75
+ "isomorphic-git": "^1.37.2",
76
+ "js-yaml": "^4.1.1",
77
+ "ollama": "^0.6.3",
78
+ "openai": "^6.18.0",
79
+ "qrcode-terminal": "latest",
80
+ "react-markdown": "^10.1.0",
81
+ "toon-format-parser": "^1.1.0",
82
+ "zod": "latest"
83
+ },
84
+ "devDependencies": {
85
+ "@types/bun": "latest",
86
+ "@types/js-yaml": "^4.0.9",
87
+ "@types/react": "^18.3.23",
88
+ "typescript": "latest"
89
+ },
90
+ "overrides": {
91
+ "vite": "^7.3.1"
92
+ },
93
+ "resolutions": {
94
+ "vite": "^7.3.1"
95
+ }
96
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "@johpaz/hive-cli",
3
+ "version": "1.1.0",
4
+ "private": true,
5
+ "description": "Hive CLI — Command line interface for the Hive AI Gateway",
6
+ "bin": {
7
+ "hive": "src/index.ts"
8
+ },
9
+ "main": "./src/index.ts",
10
+ "license": "MIT",
11
+ "files": [
12
+ "src/"
13
+ ],
14
+ "scripts": {
15
+ "test": "bun test"
16
+ },
17
+ "dependencies": {
18
+ "@clack/prompts": "^",
19
+ "@johpaz/hive-core": "^1.1.0",
20
+ "@johpaz/hive-code-bridge": "^1.1.0",
21
+ "js-yaml": "latest",
22
+ "toon-format-parser": "^1.1.0"
23
+ },
24
+ "devDependencies": {
25
+ "typescript": "latest",
26
+ "@types/bun": "latest"
27
+ }
28
+ }
@@ -0,0 +1,168 @@
1
+ import * as p from "@clack/prompts";
2
+ import { loadConfig } from "@johpaz/hive-core/config/loader";
3
+
4
+ function getGatewayUrl(config: any): string {
5
+ const gateway = config?.gateway;
6
+ const host = gateway?.host ?? "localhost";
7
+ const port = gateway?.port ?? 3000;
8
+ return `http://${host}:${port}`;
9
+ }
10
+
11
+ export async function agent(subcommand: string | undefined, args: string[]): Promise<void> {
12
+ switch (subcommand) {
13
+ case "run":
14
+ await agentRun(args);
15
+ break;
16
+ default:
17
+ console.log(`
18
+ Usage: hive agent <command>
19
+
20
+ Commands:
21
+ run --message <text> Ejecutar agente con mensaje
22
+ run --thinking <level> Nivel de razonamiento (low/medium/high)
23
+ run --wait Esperar respuesta completa
24
+ `);
25
+ }
26
+ }
27
+
28
+ async function agentRun(args: string[]): Promise<void> {
29
+ const messageIndex = args.indexOf("--message");
30
+ const thinkingIndex = args.indexOf("--thinking");
31
+ const toolsIndex = args.indexOf("--tools");
32
+ const agentIndex = args.indexOf("--agent");
33
+ const waitIndex = args.indexOf("--wait");
34
+
35
+ if (messageIndex === -1) {
36
+ const msg = await p.text({
37
+ message: "Mensaje para el agente:",
38
+ placeholder: "Analiza el archivo README.md",
39
+ validate: (v) => (!v ? "El mensaje es requerido" : undefined),
40
+ });
41
+
42
+ if (p.isCancel(msg)) {
43
+ p.cancel("Cancelado");
44
+ return;
45
+ }
46
+
47
+ args.push("--message", msg as string);
48
+ return agentRun(args);
49
+ }
50
+
51
+ const message = args[messageIndex + 1];
52
+ const thinking = thinkingIndex !== -1 ? args[thinkingIndex + 1] : "medium";
53
+ const tools = toolsIndex !== -1 ? args[toolsIndex + 1] : "all";
54
+ const agentId = agentIndex !== -1 ? args[agentIndex + 1] : "main";
55
+ const wait = waitIndex !== -1;
56
+
57
+ if (!message) {
58
+ console.log("❌ Mensaje requerido");
59
+ return;
60
+ }
61
+
62
+ const config = loadConfig();
63
+ const gatewayUrl = getGatewayUrl(config);
64
+
65
+ const spinner = p.spinner();
66
+ spinner.start("Conectando con el agente...");
67
+
68
+ try {
69
+ if (wait) {
70
+ await executeWithStream(gatewayUrl, { message, thinking, tools, agentId }, spinner);
71
+ } else {
72
+ await executeAsync(gatewayUrl, { message, thinking, tools, agentId }, spinner);
73
+ }
74
+ } catch (error) {
75
+ spinner.stop("Error");
76
+ console.log(`❌ ${(error as Error).message}`);
77
+ console.log(" ¿Está corriendo el Gateway? Ejecuta: hive start");
78
+ }
79
+ }
80
+
81
+ async function executeWithStream(
82
+ gatewayUrl: string,
83
+ payload: { message: string; thinking: string; tools: string; agentId: string },
84
+ spinner: ReturnType<typeof p.spinner>
85
+ ): Promise<void> {
86
+ const response = await fetch(`${gatewayUrl}/api/agent/execute`, {
87
+ method: "POST",
88
+ headers: { "Content-Type": "application/json" },
89
+ body: JSON.stringify({ ...payload, stream: true }),
90
+ });
91
+
92
+ if (!response.ok) {
93
+ throw new Error(`Error: ${response.statusText}`);
94
+ }
95
+
96
+ spinner.stop("Conectado");
97
+
98
+ const reader = response.body?.getReader();
99
+ if (!reader) {
100
+ throw new Error("No se pudo obtener el stream");
101
+ }
102
+
103
+ const decoder = new TextDecoder();
104
+ let buffer = "";
105
+ let thinking = true;
106
+
107
+ process.stdout.write("\n");
108
+
109
+ while (true) {
110
+ const { done, value } = await reader.read();
111
+ if (done) break;
112
+
113
+ buffer += decoder.decode(value, { stream: true });
114
+ const lines = buffer.split("\n");
115
+ buffer = lines.pop() ?? "";
116
+
117
+ for (const line of lines) {
118
+ if (!line.trim() || !line.startsWith("data: ")) continue;
119
+
120
+ try {
121
+ const data = JSON.parse(line.slice(6));
122
+
123
+ if (data.type === "thinking" && thinking) {
124
+ process.stdout.write(".");
125
+ } else if (data.type === "response") {
126
+ if (thinking) {
127
+ process.stdout.write("\n\n");
128
+ thinking = false;
129
+ }
130
+ process.stdout.write(data.content ?? "");
131
+ } else if (data.type === "tool_call") {
132
+ process.stdout.write(`\n[Tool: ${data.toolName}]`);
133
+ } else if (data.type === "complete") {
134
+ process.stdout.write("\n\n");
135
+ }
136
+ } catch {
137
+ // Ignore parse errors
138
+ }
139
+ }
140
+ }
141
+ }
142
+
143
+ async function executeAsync(
144
+ gatewayUrl: string,
145
+ payload: { message: string; thinking: string; tools: string; agentId: string },
146
+ spinner: ReturnType<typeof p.spinner>
147
+ ): Promise<void> {
148
+ const response = await fetch(`${gatewayUrl}/api/agent/execute`, {
149
+ method: "POST",
150
+ headers: { "Content-Type": "application/json" },
151
+ body: JSON.stringify({ ...payload, stream: false }),
152
+ });
153
+
154
+ if (!response.ok) {
155
+ throw new Error(`Error: ${response.statusText}`);
156
+ }
157
+
158
+ const result = await response.json() as { taskId?: string; success: boolean };
159
+
160
+ spinner.stop("Enviado");
161
+
162
+ if (result.taskId) {
163
+ console.log(`✓ Tarea enviada: ${result.taskId}`);
164
+ console.log(" Usa `hive tasks list` para ver el estado");
165
+ } else {
166
+ console.log("✓ Tarea enviada");
167
+ }
168
+ }