@johpaz/hive-sdk 0.1.5 → 0.2.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 (182) hide show
  1. package/CHANGELOG.md +167 -0
  2. package/README.md +11 -1
  3. package/package.json +26 -10
  4. package/packages/core/src/agent/acceptance-checks.ts +16 -10
  5. package/packages/core/src/agent/agent-catalog.ts +3 -3
  6. package/packages/core/src/agent/agent-loop.ts +115 -26
  7. package/packages/core/src/agent/capability-search.ts +2 -2
  8. package/packages/core/src/agent/catalog-selector.ts +4 -4
  9. package/packages/core/src/agent/compaction.ts +10 -9
  10. package/packages/core/src/agent/context-compiler.ts +58 -34
  11. package/packages/core/src/agent/conversation-store.ts +31 -7
  12. package/packages/core/src/agent/curator.ts +4 -4
  13. package/packages/core/src/agent/delegation-runtime.ts +5 -5
  14. package/packages/core/src/agent/goal-runner.ts +9 -9
  15. package/packages/core/src/agent/index.ts +1 -0
  16. package/packages/core/src/agent/llm-client.ts +98 -37
  17. package/packages/core/src/agent/llm-providers/anthropic.ts +4 -4
  18. package/packages/core/src/agent/llm-providers/deepseek.ts +1 -1
  19. package/packages/core/src/agent/llm-providers/gemini.ts +4 -4
  20. package/packages/core/src/agent/llm-providers/groq.ts +1 -1
  21. package/packages/core/src/agent/llm-providers/hiveagents.ts +3 -3
  22. package/packages/core/src/agent/llm-providers/interface.ts +2 -2
  23. package/packages/core/src/agent/llm-providers/kimi.ts +1 -1
  24. package/packages/core/src/agent/llm-providers/minimax.ts +1 -1
  25. package/packages/core/src/agent/llm-providers/mistral.ts +1 -1
  26. package/packages/core/src/agent/llm-providers/modelscope.ts +1 -1
  27. package/packages/core/src/agent/llm-providers/nvidia.ts +1 -1
  28. package/packages/core/src/agent/llm-providers/ollama.ts +4 -4
  29. package/packages/core/src/agent/llm-providers/openai-compat-base.ts +9 -5
  30. package/packages/core/src/agent/llm-providers/openai.ts +1 -1
  31. package/packages/core/src/agent/llm-providers/opencode-go.ts +1 -1
  32. package/packages/core/src/agent/llm-providers/openrouter.ts +1 -1
  33. package/packages/core/src/agent/llm-providers/qwen.ts +1 -1
  34. package/packages/core/src/agent/llm-providers/z-ai.ts +1 -1
  35. package/packages/core/src/agent/mcp-result-normalizer.ts +192 -0
  36. package/packages/core/src/agent/playbook-selector.ts +4 -4
  37. package/packages/core/src/agent/prompt-builder.ts +5 -5
  38. package/packages/core/src/agent/proof-packet.ts +5 -5
  39. package/packages/core/src/agent/providers/index.ts +4 -4
  40. package/packages/core/src/agent/realtime-providers/gemini-live.ts +238 -0
  41. package/packages/core/src/agent/realtime-providers/index.ts +29 -0
  42. package/packages/core/src/agent/realtime-providers/interface.ts +108 -0
  43. package/packages/core/src/agent/reflector.ts +6 -6
  44. package/packages/core/src/agent/run-store.ts +8 -8
  45. package/packages/core/src/agent/service.ts +10 -10
  46. package/packages/core/src/agent/skill-selector.ts +6 -6
  47. package/packages/core/src/agent/thread-id.ts +71 -0
  48. package/packages/core/src/agent/thread-store.ts +250 -0
  49. package/packages/core/src/agent/tool-selector.ts +7 -5
  50. package/packages/core/src/agent/tracer.ts +5 -5
  51. package/packages/core/src/api/createAgent.ts +1 -1
  52. package/packages/core/src/artifacts/store.ts +84 -3
  53. package/packages/core/src/canvas/emitter.ts +2 -2
  54. package/packages/core/src/channels/telegram.ts +1 -1
  55. package/packages/core/src/channels/webchat.ts +1 -1
  56. package/packages/core/src/config/loader.ts +15 -1
  57. package/packages/core/src/events/agent-bus.ts +3 -3
  58. package/packages/core/src/events/channel-narration.ts +3 -3
  59. package/packages/core/src/events/event-bus.ts +1 -1
  60. package/packages/core/src/events/narration.ts +3 -3
  61. package/packages/core/src/gateway/delegation-groups.ts +4 -4
  62. package/packages/core/src/gateway/durable-queue.ts +5 -5
  63. package/packages/core/src/gateway/job-store.ts +5 -5
  64. package/packages/core/src/gateway/notification-inbox.ts +2 -2
  65. package/packages/core/src/gateway/server.ts +2 -2
  66. package/packages/core/src/mcp/MCPClient.ts +3 -3
  67. package/packages/core/src/mcp/hot-reload.ts +5 -5
  68. package/packages/core/src/mcp/tool-sync.ts +5 -5
  69. package/packages/core/src/mcp/transports/index.ts +2 -2
  70. package/packages/core/src/mcp/transports/sse.ts +1 -1
  71. package/packages/core/src/models/index.ts +36 -0
  72. package/packages/core/src/multimodal/index.ts +2 -2
  73. package/packages/core/src/multimodal/vision-service.ts +6 -6
  74. package/packages/core/src/plugins/loader.ts +4 -1
  75. package/packages/core/src/resilience/circuit-breaker.ts +16 -5
  76. package/packages/core/src/resilience/retry.ts +1 -1
  77. package/packages/core/src/scheduler/CronScheduler.ts +6 -6
  78. package/packages/core/src/scheduler/integration.ts +9 -9
  79. package/packages/core/src/sessions/index.ts +266 -0
  80. package/packages/core/src/storage/bootstrap.ts +34 -8
  81. package/packages/core/src/storage/causal-events.ts +1 -1
  82. package/packages/core/src/storage/collections.ts +32 -1
  83. package/packages/core/src/storage/crypto.ts +16 -2
  84. package/packages/core/src/storage/hive.ts +1 -1
  85. package/packages/core/src/storage/hivedb.ts +10 -1
  86. package/packages/core/src/storage/onboarding.ts +6 -6
  87. package/packages/core/src/storage/reconcile.ts +5 -5
  88. package/packages/core/src/storage/seed.ts +103 -13
  89. package/packages/core/src/storage/usage.ts +3 -3
  90. package/packages/core/src/swarm/AgentExecutor.ts +2 -2
  91. package/packages/core/src/swarm/Coordinator.ts +8 -8
  92. package/packages/core/src/swarm/EventBridge.ts +2 -2
  93. package/packages/core/src/swarm/RoleSwarm.ts +234 -0
  94. package/packages/core/src/swarm/TaskGraph.ts +2 -2
  95. package/packages/core/src/swarm/index.ts +7 -0
  96. package/packages/core/src/swarm/presets/HiveLearnPreset.ts +2 -2
  97. package/packages/core/src/swarm/presets/ResearchPreset.ts +2 -2
  98. package/packages/core/src/swarm/strategies/ParallelStrategy.ts +1 -1
  99. package/packages/core/src/swarm/strategies/PriorityStrategy.ts +3 -3
  100. package/packages/core/src/tools/ToolExecutor.ts +7 -3
  101. package/packages/core/src/tools/core/index.ts +2 -2
  102. package/packages/core/src/tools/cron/index.ts +4 -4
  103. package/packages/core/src/tools/web/artifact-inspect.ts +2 -2
  104. package/packages/core/src/tools/web/artifact-read.ts +162 -0
  105. package/packages/core/src/tools/web/browser-backend.ts +226 -0
  106. package/packages/core/src/tools/web/browser-click.ts +2 -2
  107. package/packages/core/src/tools/web/browser-extract.ts +2 -2
  108. package/packages/core/src/tools/web/browser-navigate.ts +2 -2
  109. package/packages/core/src/tools/web/browser-screenshot.ts +12 -5
  110. package/packages/core/src/tools/web/browser-script.ts +2 -2
  111. package/packages/core/src/tools/web/browser-service.ts +85 -366
  112. package/packages/core/src/tools/web/browser-session.ts +125 -0
  113. package/packages/core/src/tools/web/browser-type.ts +2 -2
  114. package/packages/core/src/tools/web/browser-wait.ts +2 -2
  115. package/packages/core/src/tools/web/computer-use.ts +553 -0
  116. package/packages/core/src/tools/web/index.ts +8 -1
  117. package/packages/core/src/tools/web/webview-backend.ts +851 -0
  118. package/packages/core/src/utils/index.ts +1 -0
  119. package/packages/core/src/utils/logger.ts +12 -4
  120. package/packages/core/src/utils/redact-binary.ts +17 -0
  121. package/packages/core/src/utils/toon.ts +1 -1
  122. package/packages/core/src/voice/index.ts +6 -6
  123. package/bun.lock +0 -833
  124. package/bunfig.toml +0 -9
  125. package/docs/API-AGENTS.md +0 -367
  126. package/docs/API-CONTEXT-COMPILER.md +0 -249
  127. package/docs/API-DAG-SCHEDULER.md +0 -273
  128. package/docs/API-TOOLS-SKILLS-CHANNELS.md +0 -446
  129. package/docs/API-WORKERS-EVENTS.md +0 -299
  130. package/docs/HIVE-HARNESS.md +0 -113
  131. package/docs/INDEX.md +0 -190
  132. package/docs/TEMPLATE-HIVE-APP.md +0 -360
  133. package/packages/cli/package.json +0 -17
  134. package/packages/cli/src/commands/create-app.test.ts +0 -180
  135. package/packages/core/package.json +0 -70
  136. package/packages/core/src/api/createAgent.test.ts +0 -160
  137. package/packages/core/src/canvas/canvas.test.ts +0 -36
  138. package/packages/core/src/channels/channels.test.ts +0 -18
  139. package/packages/core/src/ethics/EthicsGuard.test.ts +0 -108
  140. package/packages/core/src/gateway/gateway.test.ts +0 -38
  141. package/packages/core/src/memory/Scratchpad.test.ts +0 -68
  142. package/packages/core/src/scheduler/scheduler.test.ts +0 -15
  143. package/packages/core/src/skills/skills.test.ts +0 -62
  144. package/packages/core/src/swarm/swarm.test.ts +0 -24
  145. package/packages/core/src/tool-runtime/tool-runtime.test.ts +0 -99
  146. package/packages/core/src/tools/ToolRegistry.test.ts +0 -98
  147. package/packages/core/src/tools/api/api-request.test.ts +0 -164
  148. package/packages/core/src/tools/web/browser-service.test.ts +0 -83
  149. package/packages/core/src/workers/workers.test.ts +0 -41
  150. package/scripts/bump-version.ts +0 -248
  151. package/scripts/generate-skill-bundle.ts +0 -108
  152. package/test/agent-loop-terminal-synthesis.test.ts +0 -32
  153. package/test/catalog-agents-stay-enabled.test.ts +0 -117
  154. package/test/causal-events.test.ts +0 -117
  155. package/test/compaction.test.ts +0 -105
  156. package/test/context-compiler.test.ts +0 -269
  157. package/test/curator.test.ts +0 -130
  158. package/test/durable-queue.test.ts +0 -114
  159. package/test/harness-barrel.test.ts +0 -64
  160. package/test/hive-helpers.test.ts +0 -130
  161. package/test/hivedb-search.test.ts +0 -189
  162. package/test/internal-turns.test.ts +0 -166
  163. package/test/job-idempotency.test.ts +0 -68
  164. package/test/job-retry-backoff.test.ts +0 -184
  165. package/test/job-store.test.ts +0 -381
  166. package/test/llm-retry.test.ts +0 -97
  167. package/test/memory-perf.test.ts +0 -774
  168. package/test/minimal-loadout.test.ts +0 -78
  169. package/test/model-catalog.test.ts +0 -105
  170. package/test/preload.ts +0 -12
  171. package/test/reflector.test.ts +0 -320
  172. package/test/retention-cap.test.ts +0 -91
  173. package/test/retired-capabilities-pruned.test.ts +0 -192
  174. package/test/run-store.test.ts +0 -355
  175. package/test/scratchpad.test.ts +0 -74
  176. package/test/secrets-durability.test.ts +0 -119
  177. package/test/seed-model-reseed.test.ts +0 -155
  178. package/test/setup-agent-seed.test.ts +0 -264
  179. package/test/tool-inventory.test.ts +0 -65
  180. package/test/tool-runtime.test.ts +0 -258
  181. package/test/toon.test.ts +0 -429
  182. package/tsconfig.json +0 -42
@@ -1,360 +0,0 @@
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 v0.0.17*
@@ -1,17 +0,0 @@
1
- {
2
- "name": "@hive/cli",
3
- "version": "0.1.5",
4
- "description": "Hive CLI — init, run, test, trace",
5
- "license": "MIT",
6
- "type": "module",
7
- "bin": {
8
- "hives": "./src/index.ts"
9
- },
10
- "main": "./src/index.ts",
11
- "exports": {
12
- ".": "./src/index.ts"
13
- },
14
- "dependencies": {
15
- "@hive/core": "workspace:*"
16
- }
17
- }
@@ -1,180 +0,0 @@
1
- import { describe, expect, it, beforeEach, afterEach } from "bun:test";
2
- import { existsSync, rmSync, readFileSync } from "node:fs";
3
- import { join } from "node:path";
4
- import * as process from "node:process";
5
-
6
- const TEST_DIR = join(process.cwd(), "test-create-app-output");
7
-
8
- describe("hive create-app", () => {
9
- beforeEach(() => {
10
- // Clean up before each test
11
- if (existsSync(TEST_DIR)) {
12
- rmSync(TEST_DIR, { recursive: true });
13
- }
14
- });
15
-
16
- afterEach(() => {
17
- // Clean up after each test
18
- if (existsSync(TEST_DIR)) {
19
- rmSync(TEST_DIR, { recursive: true });
20
- }
21
- });
22
-
23
- it("generates a hive-app template with correct structure", async () => {
24
- const { copyTemplate } = await import("./create-app-utils.ts");
25
-
26
- copyTemplate(TEST_DIR, { "{{APP_NAME}}": "my-test-app" });
27
-
28
- // Check all expected files exist
29
- expect(existsSync(join(TEST_DIR, "package.json"))).toBe(true);
30
- expect(existsSync(join(TEST_DIR, "hive.config.ts"))).toBe(true);
31
- expect(existsSync(join(TEST_DIR, "docker-compose.yml"))).toBe(true);
32
- expect(existsSync(join(TEST_DIR, ".env.example"))).toBe(true);
33
- expect(existsSync(join(TEST_DIR, ".gitignore"))).toBe(true);
34
- // Sin README el que corre `hives create-app` queda sin una sola instrucción.
35
- expect(existsSync(join(TEST_DIR, "README.md"))).toBe(true);
36
- expect(existsSync(join(TEST_DIR, "src", "main.ts"))).toBe(true);
37
- expect(existsSync(join(TEST_DIR, "src", "agents", "coordinator.ts"))).toBe(true);
38
- });
39
-
40
- it("el README del scaffold lleva el nombre de la app y arranca con los pasos", async () => {
41
- const { copyTemplate } = await import("./create-app-utils.ts");
42
-
43
- copyTemplate(TEST_DIR, { "{{APP_NAME}}": "mi-app" });
44
-
45
- const readme = readFileSync(join(TEST_DIR, "README.md"), "utf-8");
46
- expect(readme).toContain("# mi-app");
47
- expect(readme).not.toContain("{{APP_NAME}}");
48
- expect(readme).toContain("bun install");
49
- expect(readme).toContain("bun run dev");
50
- });
51
-
52
- it("replaces {{APP_NAME}} placeholder in all files", async () => {
53
- const { copyTemplate } = await import("./create-app-utils.ts");
54
-
55
- copyTemplate(TEST_DIR, { "{{APP_NAME}}": "my-awesome-app" });
56
-
57
- const packageJson = readFileSync(join(TEST_DIR, "package.json"), "utf-8");
58
- expect(packageJson).toContain('"name": "my-awesome-app"');
59
-
60
- // `Config` no tiene una clave `name`, así que el nombre de la app sólo se
61
- // sustituye en el comentario de cabecera y en package.json.
62
- const config = readFileSync(join(TEST_DIR, "hive.config.ts"), "utf-8");
63
- expect(config).toContain("my-awesome-app");
64
-
65
- const main = readFileSync(join(TEST_DIR, "src", "main.ts"), "utf-8");
66
- expect(main).toContain("Starting my-awesome-app...");
67
- expect(main).toContain("my-awesome-app is running at");
68
- });
69
-
70
- it("generates valid package.json", async () => {
71
- const { copyTemplate } = await import("./create-app-utils.ts");
72
-
73
- copyTemplate(TEST_DIR, { "{{APP_NAME}}": "test-app" });
74
-
75
- const packageJson = JSON.parse(readFileSync(join(TEST_DIR, "package.json"), "utf-8"));
76
-
77
- expect(packageJson.name).toBe("test-app");
78
- expect(packageJson.version).toBe("0.1.0");
79
- expect(packageJson.type).toBe("module");
80
- expect(packageJson.scripts.dev).toBe("bun run src/main.ts");
81
- expect(packageJson.scripts.build).toBeDefined();
82
- expect(packageJson.dependencies["@johpaz/hive-sdk"]).toBe("latest");
83
- });
84
-
85
- it("generates hive.config.ts with correct defaults", async () => {
86
- const { copyTemplate } = await import("./create-app-utils.ts");
87
-
88
- copyTemplate(TEST_DIR, { "{{APP_NAME}}": "config-test" });
89
-
90
- const config = readFileSync(join(TEST_DIR, "hive.config.ts"), "utf-8");
91
-
92
- expect(config).toContain('host: process.env.HIVE_HOST ?? "127.0.0.1"');
93
- expect(config).toContain('port: Number(process.env.HIVE_PORT ?? 18790)');
94
- expect(config).toContain("webchat: { enabled: true }");
95
- expect(config).toContain("telegram: { enabled: false }");
96
- expect(config).toContain("discord: { enabled: false }");
97
- expect(config).toContain("whatsapp: { enabled: false }");
98
- expect(config).toContain("slack: { enabled: false }");
99
- // HiveDB no se configura por `hive.config.ts`: la ruta sale de HIVE_HOME /
100
- // HIVE_DB_PATH. Una clave `database` acá rompería el `satisfies Config`.
101
- expect(config).not.toContain("database:");
102
- expect(config).not.toContain("hive.db");
103
- expect(config).toContain("satisfies Config");
104
- });
105
-
106
- it("generates main.ts with all required imports", async () => {
107
- const { copyTemplate } = await import("./create-app-utils.ts");
108
-
109
- copyTemplate(TEST_DIR, { "{{APP_NAME}}": "main-test" });
110
-
111
- const main = readFileSync(join(TEST_DIR, "src", "main.ts"), "utf-8");
112
-
113
- expect(main).toContain('from "@johpaz/hive-sdk"');
114
- expect(main).toContain("startGateway");
115
- // `initializeDatabase()` desapareció con la capa SQLite: `ensureHiveDb()`
116
- // abre HiveDB, crea los índices y siembra el catálogo en un solo paso.
117
- expect(main).toContain("ensureHiveDb");
118
- expect(main).not.toContain("initializeDatabase");
119
- expect(main).toContain("ChannelManager");
120
- expect(main).toContain("logger");
121
- expect(main).toContain('import config from "../hive.config.ts"');
122
- expect(main).toContain("await ensureHiveDb()");
123
- expect(main).toContain('await startGateway({');
124
- expect(main).toContain('process.on("SIGINT"');
125
- // El coordinador se define una sola vez, en su módulo, y main.ts lo usa —
126
- // antes el template creaba uno propio y dejaba coordinator.ts huérfano.
127
- expect(main).toContain('from "./agents/coordinator.ts"');
128
- expect(main).toContain("agentId: coordinatorAgent.id");
129
- });
130
-
131
- it("generates coordinator agent with correct config", async () => {
132
- const { copyTemplate } = await import("./create-app-utils.ts");
133
-
134
- copyTemplate(TEST_DIR, { "{{APP_NAME}}": "agent-test" });
135
-
136
- const agent = readFileSync(join(TEST_DIR, "src", "agents", "coordinator.ts"), "utf-8");
137
-
138
- expect(agent).toContain('import { createAgent } from "@johpaz/hive-sdk"');
139
- expect(agent).toContain('name: "coordinator"');
140
- expect(agent).toContain('provider: "openai"');
141
- // El modelo del scaffold tiene que existir en SEED_DATA.models, o el primer
142
- // `bun run dev` de un usuario nuevo muere con "no está en el catálogo".
143
- expect(agent).toContain('model: "gpt-5.6-luna"');
144
- expect(agent).toContain("export const coordinatorAgent");
145
- });
146
-
147
- it("generates docker-compose.yml with correct ports", async () => {
148
- const { copyTemplate } = await import("./create-app-utils.ts");
149
-
150
- copyTemplate(TEST_DIR, { "{{APP_NAME}}": "docker-test" });
151
-
152
- const docker = readFileSync(join(TEST_DIR, "docker-compose.yml"), "utf-8");
153
-
154
- expect(docker).toContain('image: oven/bun:latest');
155
- expect(docker).toContain('"${HIVE_PORT:-18790}:18790"');
156
- expect(docker).toContain('HIVE_HOST=0.0.0.0');
157
- expect(docker).toContain('HIVE_PORT=18790');
158
- expect(docker).toContain('command: ["bun", "run", "src/main.ts"]');
159
- expect(docker).toContain('restart: unless-stopped');
160
- });
161
-
162
- it("generates .env.example with all required variables", async () => {
163
- const { copyTemplate } = await import("./create-app-utils.ts");
164
-
165
- copyTemplate(TEST_DIR, { "{{APP_NAME}}": "env-test" });
166
-
167
- const env = readFileSync(join(TEST_DIR, ".env.example"), "utf-8");
168
-
169
- expect(env).toContain("HIVE_HOST=");
170
- expect(env).toContain("HIVE_PORT=");
171
- expect(env).toContain("HIVE_HOME=");
172
- expect(env).toContain("OPENAI_API_KEY=");
173
- expect(env).toContain("ANTHROPIC_API_KEY=");
174
- expect(env).toContain("GOOGLE_API_KEY=");
175
- expect(env).toContain("TELEGRAM_BOT_TOKEN=");
176
- expect(env).toContain("DISCORD_BOT_TOKEN=");
177
- expect(env).toContain("SLACK_BOT_TOKEN=");
178
- expect(env).toContain("LOG_LEVEL=");
179
- });
180
- });
@@ -1,70 +0,0 @@
1
- {
2
- "name": "@hive/core",
3
- "version": "0.1.5",
4
- "description": "Hive Core — runtime de agentes con context engineering, catálogo de modelos y HiveDB",
5
- "license": "MIT",
6
- "type": "module",
7
- "main": "./src/index.ts",
8
- "types": "./src/index.ts",
9
- "exports": {
10
- ".": "./src/index.ts",
11
- "./agent": "./src/agent/index.ts",
12
- "./agent/providers": "./src/agent/providers/index.ts",
13
- "./tools": "./src/tools/index.ts",
14
- "./skills": "./src/skills/index.ts",
15
- "./storage": "./src/storage/index.ts",
16
- "./swarm": "./src/swarm/index.ts",
17
- "./swarm/strategies": "./src/swarm/strategies/index.ts",
18
- "./swarm/presets": "./src/swarm/presets/index.ts",
19
- "./scheduler": "./src/scheduler/index.ts",
20
- "./workers": "./src/workers/index.ts",
21
- "./events": "./src/events/event-bus.ts",
22
- "./ethics": "./src/ethics/index.ts",
23
- "./canvas": "./src/canvas/index.ts",
24
- "./config": "./src/config/index.ts",
25
- "./mcp": "./src/mcp/index.ts",
26
- "./mcp/transports": "./src/mcp/transports/index.ts",
27
- "./memory": "./src/memory/index.ts",
28
- "./multimodal": "./src/multimodal/index.ts",
29
- "./security": "./src/security/index.ts",
30
- "./state": "./src/state/index.ts",
31
- "./utils": "./src/utils/index.ts",
32
- "./gateway": "./src/gateway/index.ts",
33
- "./api": "./src/api/index.ts",
34
- "./harness": "./src/harness/index.ts"
35
- },
36
- "dependencies": {
37
- "@johpaz/hive-db": "^0.4.0",
38
- "@anthropic-ai/sdk": "^0.74.0",
39
- "@google/genai": "^1.43.0",
40
- "@modelcontextprotocol/sdk": "latest",
41
- "@sapphire/snowflake": "latest",
42
- "@slack/bolt": "latest",
43
- "@whiskeysockets/baileys": "latest",
44
- "async-mutex": "^0.5.0",
45
- "cron-parser": "^5.5.0",
46
- "croner": "^10.0.1",
47
- "discord.js": "latest",
48
- "docx": "^9.6.1",
49
- "grammy": "latest",
50
- "groq-sdk": "^0.37.0",
51
- "jsonwebtoken": "^9.0.3",
52
- "jszip": "^3.10.1",
53
- "pdf-lib": "^1.17.1",
54
- "mammoth": "^1.12.0",
55
- "ollama": "^0.6.3",
56
- "openai": "^6.18.0",
57
- "pdfjs-dist": "^5.6.205",
58
- "pptxgenjs": "^4.0.1",
59
- "qrcode-terminal": "latest",
60
- "toon-format-parser": "^1.1.0",
61
- "xlsx": "^0.18.5",
62
- "zod": "latest"
63
- },
64
- "devDependencies": {
65
- "@types/jsonwebtoken": "^9.0.10"
66
- },
67
- "peerDependencies": {
68
- "typescript": "^5.0.0"
69
- }
70
- }