@johpaz/hive-sdk 0.1.4 → 0.1.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.
Files changed (272) hide show
  1. package/CHANGELOG.md +97 -0
  2. package/README.md +78 -23
  3. package/bunfig.toml +4 -2
  4. package/docs/API-AGENTS.md +78 -27
  5. package/docs/API-CONTEXT-COMPILER.md +31 -34
  6. package/docs/API-TOOLS-SKILLS-CHANNELS.md +58 -22
  7. package/docs/HIVE-HARNESS.md +1 -1
  8. package/docs/INDEX.md +4 -4
  9. package/docs/TEMPLATE-HIVE-APP.md +10 -10
  10. package/package.json +9 -4
  11. package/packages/cli/package.json +2 -2
  12. package/packages/cli/src/commands/create-app.test.ts +36 -7
  13. package/packages/cli/src/commands/init.ts +3 -3
  14. package/packages/cli/src/commands/run.ts +1 -1
  15. package/packages/cli/src/commands/test.ts +37 -25
  16. package/packages/cli/src/commands/trace.ts +30 -28
  17. package/packages/cli/templates/hive-app/.env.example +10 -2
  18. package/packages/cli/templates/hive-app/README.md +103 -0
  19. package/packages/cli/templates/hive-app/hive.config.ts +9 -3
  20. package/packages/cli/templates/hive-app/src/agents/coordinator.ts +8 -1
  21. package/packages/cli/templates/hive-app/src/main.ts +12 -19
  22. package/packages/core/package.json +5 -4
  23. package/packages/core/src/agent/acceptance-checks.ts +166 -0
  24. package/packages/core/src/agent/agent-catalog.ts +348 -0
  25. package/packages/core/src/agent/agent-loop.ts +1373 -0
  26. package/packages/core/src/agent/capability-search.ts +186 -0
  27. package/packages/core/src/agent/catalog-selector.ts +103 -0
  28. package/packages/core/src/agent/{Compaction.ts → compaction.ts} +86 -63
  29. package/packages/core/src/agent/context-compiler.ts +689 -0
  30. package/packages/core/src/agent/conversation-store.ts +381 -0
  31. package/packages/core/src/agent/curator.ts +276 -0
  32. package/packages/core/src/agent/delegation-runtime.ts +241 -0
  33. package/packages/core/src/agent/goal-runner.ts +323 -0
  34. package/packages/core/src/agent/index.ts +17 -12
  35. package/packages/core/src/agent/llm-client.ts +266 -0
  36. package/packages/core/src/agent/llm-providers/anthropic.ts +264 -0
  37. package/packages/core/src/agent/llm-providers/deepseek.ts +8 -0
  38. package/packages/core/src/agent/{providers → llm-providers}/gemini.ts +98 -60
  39. package/packages/core/src/agent/llm-providers/groq.ts +5 -0
  40. package/packages/core/src/agent/llm-providers/hiveagents.ts +253 -0
  41. package/packages/core/src/agent/{providers → llm-providers}/interface.ts +73 -13
  42. package/packages/core/src/agent/llm-providers/kimi.ts +8 -0
  43. package/packages/core/src/agent/llm-providers/minimax.ts +13 -0
  44. package/packages/core/src/agent/llm-providers/mistral.ts +5 -0
  45. package/packages/core/src/agent/llm-providers/modelscope.ts +5 -0
  46. package/packages/core/src/agent/llm-providers/nvidia.ts +5 -0
  47. package/packages/core/src/agent/{providers → llm-providers}/ollama.ts +31 -5
  48. package/packages/core/src/agent/llm-providers/openai-compat-base.ts +418 -0
  49. package/packages/core/src/agent/llm-providers/openai.ts +5 -0
  50. package/packages/core/src/agent/llm-providers/opencode-go.ts +9 -0
  51. package/packages/core/src/agent/llm-providers/openrouter.ts +5 -0
  52. package/packages/core/src/agent/llm-providers/qwen.ts +5 -0
  53. package/packages/core/src/agent/llm-providers/z-ai.ts +5 -0
  54. package/packages/core/src/agent/minimal-loadout.ts +47 -0
  55. package/packages/core/src/agent/playbook-selector.ts +119 -0
  56. package/packages/core/src/agent/{PromptBuilder.ts → prompt-builder.ts} +21 -22
  57. package/packages/core/src/{harness → agent}/proof-packet.ts +16 -21
  58. package/packages/core/src/agent/providers/index.ts +35 -16
  59. package/packages/core/src/agent/reflector.ts +320 -0
  60. package/packages/core/src/agent/routing-intent.ts +22 -0
  61. package/packages/core/src/{harness → agent}/run-epoch.ts +4 -3
  62. package/packages/core/src/{harness → agent}/run-store.ts +142 -81
  63. package/packages/core/src/agent/{Service.ts → service.ts} +37 -26
  64. package/packages/core/src/agent/skill-selector.ts +374 -0
  65. package/packages/core/src/agent/stuck-loop.ts +209 -0
  66. package/packages/core/src/agent/{selectors/ToolSelector.ts → tool-selector.ts} +188 -178
  67. package/packages/core/src/{ace/Tracer.ts → agent/tracer.ts} +37 -27
  68. package/packages/core/src/api/createAgent.test.ts +139 -27
  69. package/packages/core/src/api/createAgent.ts +232 -44
  70. package/packages/core/src/artifacts/store.ts +162 -0
  71. package/packages/core/src/canvas/canvas-manager.ts +161 -0
  72. package/packages/core/src/canvas/canvas.test.ts +8 -4
  73. package/packages/core/src/canvas/emitter.ts +131 -80
  74. package/packages/core/src/canvas/index.ts +1 -3
  75. package/packages/core/src/channels/base.ts +9 -1
  76. package/packages/core/src/channels/discord.ts +5 -4
  77. package/packages/core/src/channels/manager.ts +122 -30
  78. package/packages/core/src/channels/slack.ts +5 -4
  79. package/packages/core/src/channels/telegram.ts +36 -6
  80. package/packages/core/src/channels/webchat.ts +11 -10
  81. package/packages/core/src/channels/whatsapp.ts +23 -7
  82. package/packages/core/src/config/index.ts +13 -2
  83. package/packages/core/src/config/loader.ts +71 -29
  84. package/packages/core/src/ethics/EthicsGuard.test.ts +90 -36
  85. package/packages/core/src/ethics/EthicsGuard.ts +51 -47
  86. package/packages/core/src/events/agent-bus.ts +44 -68
  87. package/packages/core/src/events/channel-narration.ts +150 -0
  88. package/packages/core/src/events/narration.ts +82 -0
  89. package/packages/core/src/events/tool-narration.ts +62 -0
  90. package/packages/core/src/gateway/delegation-groups.ts +258 -0
  91. package/packages/core/src/{harness → gateway}/durable-queue.ts +102 -42
  92. package/packages/core/src/{harness → gateway}/job-store.ts +85 -48
  93. package/packages/core/src/gateway/lane-queue.ts +173 -0
  94. package/packages/core/src/gateway/notification-inbox.ts +57 -0
  95. package/packages/core/src/gateway/server.ts +1 -1
  96. package/packages/core/src/harness/index.ts +46 -27
  97. package/packages/core/src/index.ts +33 -27
  98. package/packages/core/src/mcp/hot-reload.ts +32 -23
  99. package/packages/core/src/mcp/index.ts +6 -3
  100. package/packages/core/src/mcp/singleton.ts +1 -4
  101. package/packages/core/src/mcp/tool-sync.ts +138 -0
  102. package/packages/core/src/memory/Scratchpad.test.ts +39 -20
  103. package/packages/core/src/memory/Scratchpad.ts +27 -34
  104. package/packages/core/src/multimodal/vision-service.ts +44 -38
  105. package/packages/core/src/resilience/retry.ts +95 -0
  106. package/packages/core/src/scheduler/CronScheduler.ts +334 -287
  107. package/packages/core/src/scheduler/index.ts +9 -7
  108. package/packages/core/src/scheduler/integration.ts +46 -26
  109. package/packages/core/src/scheduler/scheduler.test.ts +9 -13
  110. package/packages/core/src/scheduler/types.ts +7 -2
  111. package/packages/core/src/security/Pairing.ts +1 -1
  112. package/packages/core/src/skills/bundled/a2ui/a2ui_dashboard/SKILL.md +176 -0
  113. package/packages/core/src/skills/bundled/a2ui/a2ui_form/SKILL.md +202 -0
  114. package/packages/core/src/skills/bundled/a2ui/a2ui_interactive/SKILL.md +206 -0
  115. package/packages/core/src/skills/bundled/agents/agent_spawner/SKILL.md +173 -0
  116. package/packages/core/src/skills/bundled/agents/memory_manager/SKILL.md +143 -0
  117. package/packages/core/src/skills/bundled/agents/research_and_remember/SKILL.md +139 -0
  118. package/packages/core/src/skills/bundled/agents/task_orchestrator/SKILL.md +98 -0
  119. package/packages/core/src/skills/bundled/api/api_client/SKILL.md +132 -0
  120. package/packages/core/src/skills/bundled/cli/cli_pipeline/SKILL.md +135 -0
  121. package/packages/core/src/skills/bundled/cli/cli_safe_exec/SKILL.md +125 -0
  122. package/packages/core/src/skills/bundled/cli/software_engineering/SKILL.md +23 -0
  123. package/packages/core/src/skills/bundled/cron_manager/SKILL.md +188 -0
  124. package/packages/core/src/skills/bundled/cron_reminder/SKILL.md +112 -0
  125. package/packages/core/src/skills/bundled/filesystem/file_manager/SKILL.md +118 -0
  126. package/packages/core/src/skills/bundled/filesystem/file_read_and_summarize/SKILL.md +109 -0
  127. package/packages/core/src/skills/bundled/filesystem/file_writer/SKILL.md +129 -0
  128. package/packages/core/src/skills/bundled/filesystem/workspace_file_operator/SKILL.md +22 -0
  129. package/packages/core/src/skills/bundled/office/office_document_manager/SKILL.md +262 -0
  130. package/packages/core/src/skills/bundled/search_knowledge/capability_discovery/SKILL.md +75 -0
  131. package/packages/core/src/skills/bundled/web/browser_automate/SKILL.md +120 -0
  132. package/packages/core/src/skills/bundled/web/browser_scrape/SKILL.md +109 -0
  133. package/packages/core/src/skills/bundled/web/web_monitor/SKILL.md +127 -0
  134. package/packages/core/src/skills/bundled/web/web_research/SKILL.md +119 -0
  135. package/packages/core/src/skills/bundled-data.generated.ts +731 -2678
  136. package/packages/core/src/skills/skills.test.ts +52 -11
  137. package/packages/core/src/{harness → storage}/boot-id.ts +5 -2
  138. package/packages/core/src/storage/bootstrap.ts +151 -0
  139. package/packages/core/src/storage/causal-events.ts +84 -0
  140. package/packages/core/src/storage/collections.ts +680 -0
  141. package/packages/core/src/storage/crypto.ts +205 -74
  142. package/packages/core/src/{harness/db-helpers.ts → storage/hive.ts} +63 -7
  143. package/packages/core/src/storage/hivedb.ts +61 -0
  144. package/packages/core/src/storage/index.ts +111 -18
  145. package/packages/core/src/storage/model-id.ts +53 -0
  146. package/packages/core/src/storage/onboarding.ts +540 -972
  147. package/packages/core/src/storage/reconcile.ts +238 -0
  148. package/packages/core/src/storage/seed.ts +572 -406
  149. package/packages/core/src/storage/usage.ts +285 -225
  150. package/packages/core/src/storage/user-email.ts +11 -0
  151. package/packages/core/src/swarm/AgentExecutor.ts +1 -1
  152. package/packages/core/src/swarm/EventBridge.ts +1 -1
  153. package/packages/core/src/swarm/index.ts +12 -9
  154. package/packages/core/src/tool-runtime/index.ts +146 -23
  155. package/packages/core/src/tool-runtime/tool-worker.ts +2 -2
  156. package/packages/core/src/tool-runtime/worker-tools.ts +27 -0
  157. package/packages/core/src/{canvas/a2ui-tools.ts → tools/a2ui/index.ts} +17 -8
  158. package/packages/core/src/tools/agents/get-available-models.ts +36 -54
  159. package/packages/core/src/tools/agents/index.ts +784 -292
  160. package/packages/core/src/tools/api/api-request.test.ts +164 -0
  161. package/packages/core/src/tools/api/api-request.ts +174 -0
  162. package/packages/core/src/tools/api/index.ts +16 -0
  163. package/packages/core/src/tools/cli/index.ts +4 -0
  164. package/packages/core/src/tools/core/index.ts +281 -112
  165. package/packages/core/src/tools/cron/index.ts +121 -124
  166. package/packages/core/src/tools/index.ts +63 -78
  167. package/packages/core/src/tools/office/office-escribir-xlsx.ts +3 -1
  168. package/packages/core/src/tools/types.ts +3 -1
  169. package/packages/core/src/tools/web/artifact-inspect.ts +23 -0
  170. package/packages/core/src/tools/web/browser-screenshot.ts +26 -5
  171. package/packages/core/src/tools/web/browser-service.ts +5 -0
  172. package/packages/core/src/tools/web/browser-type.ts +3 -8
  173. package/packages/core/src/tools/web/index.ts +4 -4
  174. package/packages/core/src/voice/index.ts +89 -63
  175. package/packages/core/src/workers/agent.worker.ts +2 -2
  176. package/packages/core/src/workers/workers.test.ts +3 -10
  177. package/scripts/bump-version.ts +248 -0
  178. package/scripts/generate-skill-bundle.ts +108 -0
  179. package/test/agent-loop-terminal-synthesis.test.ts +32 -0
  180. package/test/catalog-agents-stay-enabled.test.ts +117 -0
  181. package/test/causal-events.test.ts +117 -0
  182. package/test/compaction.test.ts +105 -0
  183. package/test/context-compiler.test.ts +269 -0
  184. package/test/curator.test.ts +130 -0
  185. package/test/durable-queue.test.ts +114 -0
  186. package/test/harness-barrel.test.ts +64 -0
  187. package/test/hive-helpers.test.ts +130 -0
  188. package/test/hivedb-search.test.ts +189 -0
  189. package/test/internal-turns.test.ts +166 -0
  190. package/test/job-idempotency.test.ts +68 -0
  191. package/test/job-retry-backoff.test.ts +184 -0
  192. package/test/job-store.test.ts +381 -0
  193. package/test/llm-retry.test.ts +97 -0
  194. package/test/memory-perf.test.ts +774 -0
  195. package/test/minimal-loadout.test.ts +78 -0
  196. package/test/model-catalog.test.ts +105 -0
  197. package/test/preload.ts +12 -0
  198. package/test/reflector.test.ts +320 -0
  199. package/test/retention-cap.test.ts +91 -0
  200. package/test/retired-capabilities-pruned.test.ts +192 -0
  201. package/test/run-store.test.ts +355 -0
  202. package/test/scratchpad.test.ts +74 -0
  203. package/test/secrets-durability.test.ts +119 -0
  204. package/test/seed-model-reseed.test.ts +155 -0
  205. package/test/setup-agent-seed.test.ts +264 -0
  206. package/test/tool-inventory.test.ts +65 -0
  207. package/test/tool-runtime.test.ts +258 -0
  208. package/test/toon.test.ts +429 -0
  209. package/tsconfig.json +2 -0
  210. package/packages/core/src/ace/Curator.ts +0 -158
  211. package/packages/core/src/ace/Reflector.ts +0 -200
  212. package/packages/core/src/ace/index.ts +0 -4
  213. package/packages/core/src/agent/AgentRunner.ts +0 -711
  214. package/packages/core/src/agent/ContextCompiler.ts +0 -567
  215. package/packages/core/src/agent/ContextGuard.ts +0 -91
  216. package/packages/core/src/agent/ConversationStore.ts +0 -254
  217. package/packages/core/src/agent/Hooks.ts +0 -166
  218. package/packages/core/src/agent/StuckLoop.ts +0 -133
  219. package/packages/core/src/agent/providers/LLMClient.ts +0 -149
  220. package/packages/core/src/agent/providers/anthropic.ts +0 -212
  221. package/packages/core/src/agent/providers/openai-compat.ts +0 -231
  222. package/packages/core/src/agent/selectors/PlaybookSelector.ts +0 -121
  223. package/packages/core/src/agent/selectors/SkillSelector.ts +0 -322
  224. package/packages/core/src/agent/selectors/index.ts +0 -6
  225. package/packages/core/src/auth/auth.ts +0 -121
  226. package/packages/core/src/auth/index.ts +0 -1
  227. package/packages/core/src/canvas/CanvasManager.ts +0 -390
  228. package/packages/core/src/canvas/canvas-tools.ts +0 -448
  229. package/packages/core/src/harness/collections.ts +0 -98
  230. package/packages/core/src/harness/goal-verifier.ts +0 -141
  231. package/packages/core/src/harness/harness.test.ts +0 -236
  232. package/packages/core/src/harness/reconcile.ts +0 -149
  233. package/packages/core/src/mcp/MCPToolAdapter.ts +0 -176
  234. package/packages/core/src/multimodal/VisionService.ts +0 -293
  235. package/packages/core/src/scheduler/dag/AgentExecutor.ts +0 -53
  236. package/packages/core/src/scheduler/dag/DAGScheduler.ts +0 -250
  237. package/packages/core/src/scheduler/dag/EventBridge.ts +0 -122
  238. package/packages/core/src/scheduler/dag/TaskGraph.ts +0 -192
  239. package/packages/core/src/scheduler/dag/TaskNode.ts +0 -97
  240. package/packages/core/src/scheduler/dag/TaskResult.ts +0 -22
  241. package/packages/core/src/scheduler/dag/errors.ts +0 -37
  242. package/packages/core/src/scheduler/dag/index.ts +0 -26
  243. package/packages/core/src/scheduler/dag/presets/ResearchPreset.ts +0 -97
  244. package/packages/core/src/scheduler/dag/strategies/ParallelStrategy.ts +0 -21
  245. package/packages/core/src/scheduler/dag/strategies/PriorityStrategy.ts +0 -46
  246. package/packages/core/src/storage/HiveDBStorage.ts +0 -64
  247. package/packages/core/src/storage/SQLiteStorage.ts +0 -414
  248. package/packages/core/src/storage/hiveSeed.ts +0 -308
  249. package/packages/core/src/storage/hiveStorage.test.ts +0 -38
  250. package/packages/core/src/storage/schema.ts +0 -689
  251. package/packages/core/src/storage/storage.test.ts +0 -37
  252. package/packages/core/src/swarm/AgentBus.ts +0 -460
  253. package/packages/core/src/swarm/EventBus.ts +0 -169
  254. package/packages/core/src/swarm/WorkerPool.ts +0 -236
  255. package/packages/core/src/tools/bridge-events.ts +0 -26
  256. package/packages/core/src/tools/canvas/index.ts +0 -375
  257. package/packages/core/src/tools/codebridge/index.ts +0 -342
  258. package/packages/core/src/tools/meeting/index.ts +0 -353
  259. package/packages/core/src/tools/projects/index.ts +0 -37
  260. package/packages/core/src/tools/projects/project-create.ts +0 -94
  261. package/packages/core/src/tools/projects/project-done.ts +0 -66
  262. package/packages/core/src/tools/projects/project-fail.ts +0 -66
  263. package/packages/core/src/tools/projects/project-list.ts +0 -96
  264. package/packages/core/src/tools/projects/project-update.ts +0 -72
  265. package/packages/core/src/tools/projects/task-create.ts +0 -68
  266. package/packages/core/src/tools/projects/task-evaluate.ts +0 -93
  267. package/packages/core/src/tools/projects/task-update.ts +0 -93
  268. package/packages/core/src/tools/voice/index.ts +0 -104
  269. package/packages/core/src/tools/web/api-request.test.ts +0 -170
  270. package/packages/core/src/tools/web/api-request.ts +0 -239
  271. package/test/setup-db.ts +0 -216
  272. /package/packages/core/src/agent/{NativeTools.ts → native-tools.ts} +0 -0
@@ -7,7 +7,7 @@ packets. It's what lets a host app (a `hive-app`, or a production service like
7
7
  Hive Cloud) survive a process restart mid-task without losing work or
8
8
  double-executing a tool call.
9
9
 
10
- It is deliberately **not** wired into `AgentRunner` automatically, and it has
10
+ It is deliberately **not** wired into the agent loop automatically, and it has
11
11
  no built-in notion of "chat" vs "project task" vs any other app-specific job
12
12
  type — job `type` and run `kind` are plain strings. The host app defines its
13
13
  own vocabulary and registers executors for it. This is the same infrastructure
package/docs/INDEX.md CHANGED
@@ -41,7 +41,7 @@ const tool = defineTool({
41
41
  const agent = await createAgent({
42
42
  name: "asistente",
43
43
  provider: "openai",
44
- model: "gpt-4o-mini",
44
+ model: "gpt-5.6-luna",
45
45
  tools: [tool],
46
46
  });
47
47
 
@@ -97,7 +97,7 @@ packages/
97
97
  │ ├── api/ # createAgent(), Agent interface
98
98
  │ ├── agent/ # AgentLoop, ContextCompiler, ConversationStore
99
99
  │ │ ├── providers/ # LLM providers (OpenAI, Anthropic, Gemini, Ollama)
100
- │ │ └── selectors/ # FTS5 ToolSelector, SkillSelector, PlaybookSelector
100
+ │ │ └── tool-selector.ts, skill-selector.ts, playbook-selector.ts (BM25 sobre HiveDB)
101
101
  │ ├── tools/ # 70+ built-in tools + ToolRegistry + ToolExecutor
102
102
  │ ├── skills/ # SkillLoader, defineSkill()
103
103
  │ ├── swarm/ # DAGScheduler, TaskGraph, WorkerPool
@@ -105,7 +105,7 @@ packages/
105
105
  │ ├── gateway/ # HTTP/WebSocket server (Bun.serve)
106
106
  │ ├── channels/ # Telegram, Discord, WhatsApp, Slack, Webchat
107
107
  │ ├── mcp/ # MCPClientManager + transports (SSE, WS, STDIO)
108
- │ ├── storage/ # SQLite (bun:sqlite) + FTS5
108
+ │ ├── storage/ # HiveDB (colecciones + BM25)
109
109
  │ ├── canvas/ # CanvasManager + A2UI emitter
110
110
  │ ├── scheduler/ # CronScheduler + DAG execution
111
111
  │ ├── tool-runtime/ # Bun Worker pool para ejecución paralela de tools
@@ -137,7 +137,7 @@ packages/
137
137
  Unidad de ejecución con configuración, contexto y ciclo de ejecución.
138
138
 
139
139
  ### Tool
140
- Función invocable por el agente. Definida con `defineTool()`, seleccionada vía FTS5.
140
+ Función invocable por el agente. Definida con `defineTool()`, seleccionada por búsqueda BM25.
141
141
 
142
142
  ### Skill
143
143
  Composición de tools con triggers semánticos. Definida con `defineSkill()`.
@@ -1,6 +1,6 @@
1
1
  # Template `hive-app` — Documentación Completa
2
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 SQLite, y deployment con Docker.
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
4
 
5
5
  ---
6
6
 
@@ -97,7 +97,7 @@ export default {
97
97
  | `channels.discord.enabled` | `boolean` | `false` | Bot de Discord |
98
98
  | `channels.whatsapp.enabled` | `boolean` | `false` | Bot de WhatsApp |
99
99
  | `channels.slack.enabled` | `boolean` | `false` | Bot de Slack |
100
- | `database.path` | `string` | `"./data/hive.db"` | Ruta de la base de datos SQLite |
100
+ | `database.path` | `string` | `"./data/hive"` | Ruta de la base de datos HiveDB |
101
101
 
102
102
  ---
103
103
 
@@ -105,7 +105,7 @@ export default {
105
105
 
106
106
  Entry point de la aplicación. Realiza:
107
107
 
108
- 1. Inicializa la base de datos (`initializeDatabase`)
108
+ 1. Inicializa la base de datos (`ensureHiveDb`, que además siembra el catálogo)
109
109
  2. Crea el agente coordinador (`createAgent`)
110
110
  3. Inicializa el ChannelManager
111
111
  4. Arranca el gateway (`startGateway`)
@@ -115,7 +115,7 @@ Entry point de la aplicación. Realiza:
115
115
  import {
116
116
  createAgent,
117
117
  startGateway,
118
- initializeDatabase,
118
+ ensureHiveDb,
119
119
  ChannelManager,
120
120
  logger,
121
121
  } from "@johpaz/hive-sdk";
@@ -126,12 +126,12 @@ const log = logger.child("app");
126
126
  async function main() {
127
127
  log.info(`Starting my-hive...`);
128
128
 
129
- await initializeDatabase();
129
+ await ensureHiveDb();
130
130
 
131
131
  const agent = await createAgent({
132
132
  name: "coordinator",
133
133
  provider: "openai",
134
- model: "gpt-4o-mini",
134
+ model: "gpt-5.6-luna",
135
135
  systemPrompt: "You are a helpful AI assistant...",
136
136
  });
137
137
 
@@ -160,7 +160,7 @@ Puedes cambiar el `provider`, `model`, y `systemPrompt`:
160
160
  ```typescript
161
161
  const agent = await createAgent({
162
162
  name: "coordinator",
163
- provider: "anthropic", // "openai" | "anthropic" | "gemini" | "ollama"
163
+ provider: "anthropic", // cualquiera de los 16 del catálogo
164
164
  model: "claude-3-5-sonnet-20241022",
165
165
  systemPrompt: "Tu system prompt personalizado...",
166
166
  });
@@ -183,7 +183,7 @@ const searchTool = defineTool({
183
183
  const agent = await createAgent({
184
184
  name: "coordinator",
185
185
  provider: "openai",
186
- model: "gpt-4o-mini",
186
+ model: "gpt-5.6-luna",
187
187
  tools: [searchTool],
188
188
  });
189
189
  ```
@@ -200,7 +200,7 @@ import { createAgent } from "@johpaz/hive-sdk";
200
200
  export const coordinatorAgent = await createAgent({
201
201
  name: "coordinator",
202
202
  provider: "openai",
203
- model: "gpt-4o-mini",
203
+ model: "gpt-5.6-luna",
204
204
  systemPrompt: "You are the coordinator agent...",
205
205
  });
206
206
  ```
@@ -278,7 +278,7 @@ LOG_LEVEL=info
278
278
  |----------|-----------|-------------|
279
279
  | `HIVE_HOST` | No | Host del gateway |
280
280
  | `HIVE_PORT` | No | Puerto del gateway |
281
- | `HIVE_DATA_DIR` | No | Directorio de datos SQLite |
281
+ | `HIVE_HOME` | No | Directorio de datos (HiveDB en `<HIVE_HOME>/data`) |
282
282
  | `OPENAI_API_KEY` | Sí* | API key de OpenAI |
283
283
  | `ANTHROPIC_API_KEY` | Sí* | API key de Anthropic |
284
284
  | `GOOGLE_API_KEY` | Sí* | API key de Gemini |
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "@johpaz/hive-sdk",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
+ "private": false,
4
5
  "description": "Hive SDK — The Agent Harness SDK. Build, deploy, and scale AI agent applications with multi-channel support, context engineering, and swarm orchestration.",
5
6
  "license": "MIT",
6
7
  "homepage": "https://github.com/johpaz/hive-sdk#readme",
@@ -31,14 +32,15 @@
31
32
  ".": "./packages/core/src/index.ts",
32
33
  "./agent": "./packages/core/src/agent/index.ts",
33
34
  "./agent/providers": "./packages/core/src/agent/providers/index.ts",
34
- "./agent/selectors": "./packages/core/src/agent/selectors/index.ts",
35
35
  "./tools": "./packages/core/src/tools/index.ts",
36
36
  "./skills": "./packages/core/src/skills/index.ts",
37
37
  "./storage": "./packages/core/src/storage/index.ts",
38
38
  "./swarm": "./packages/core/src/swarm/index.ts",
39
39
  "./swarm/strategies": "./packages/core/src/swarm/strategies/index.ts",
40
40
  "./swarm/presets": "./packages/core/src/swarm/presets/index.ts",
41
- "./ace": "./packages/core/src/ace/index.ts",
41
+ "./scheduler": "./packages/core/src/scheduler/index.ts",
42
+ "./workers": "./packages/core/src/workers/index.ts",
43
+ "./events": "./packages/core/src/events/event-bus.ts",
42
44
  "./ethics": "./packages/core/src/ethics/index.ts",
43
45
  "./canvas": "./packages/core/src/canvas/index.ts",
44
46
  "./config": "./packages/core/src/config/index.ts",
@@ -63,8 +65,11 @@
63
65
  ],
64
66
  "scripts": {
65
67
  "build": "bun run typecheck",
66
- "typecheck": "tsc --build --force",
68
+ "typecheck": "tsc --noEmit -p tsconfig.json",
67
69
  "test": "bun test",
70
+ "skills:bundle": "bun scripts/generate-skill-bundle.ts",
71
+ "version:set": "bun scripts/bump-version.ts",
72
+ "release": "bun scripts/bump-version.ts --push",
68
73
  "prepublish": "echo 'No build needed - Bun runs TypeScript directly'"
69
74
  },
70
75
  "dependencies": {
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@hive/cli",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "description": "Hive CLI — init, run, test, trace",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
7
  "bin": {
8
- "hive": "./src/index.ts"
8
+ "hives": "./src/index.ts"
9
9
  },
10
10
  "main": "./src/index.ts",
11
11
  "exports": {
@@ -31,10 +31,24 @@ describe("hive create-app", () => {
31
31
  expect(existsSync(join(TEST_DIR, "docker-compose.yml"))).toBe(true);
32
32
  expect(existsSync(join(TEST_DIR, ".env.example"))).toBe(true);
33
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);
34
36
  expect(existsSync(join(TEST_DIR, "src", "main.ts"))).toBe(true);
35
37
  expect(existsSync(join(TEST_DIR, "src", "agents", "coordinator.ts"))).toBe(true);
36
38
  });
37
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
+
38
52
  it("replaces {{APP_NAME}} placeholder in all files", async () => {
39
53
  const { copyTemplate } = await import("./create-app-utils.ts");
40
54
 
@@ -43,8 +57,10 @@ describe("hive create-app", () => {
43
57
  const packageJson = readFileSync(join(TEST_DIR, "package.json"), "utf-8");
44
58
  expect(packageJson).toContain('"name": "my-awesome-app"');
45
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.
46
62
  const config = readFileSync(join(TEST_DIR, "hive.config.ts"), "utf-8");
47
- expect(config).toContain('name: "my-awesome-app"');
63
+ expect(config).toContain("my-awesome-app");
48
64
 
49
65
  const main = readFileSync(join(TEST_DIR, "src", "main.ts"), "utf-8");
50
66
  expect(main).toContain("Starting my-awesome-app...");
@@ -80,7 +96,11 @@ describe("hive create-app", () => {
80
96
  expect(config).toContain("discord: { enabled: false }");
81
97
  expect(config).toContain("whatsapp: { enabled: false }");
82
98
  expect(config).toContain("slack: { enabled: false }");
83
- expect(config).toContain('path: process.env.HIVE_DATA_DIR ?? "./data/hive.db"');
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");
84
104
  });
85
105
 
86
106
  it("generates main.ts with all required imports", async () => {
@@ -91,15 +111,21 @@ describe("hive create-app", () => {
91
111
  const main = readFileSync(join(TEST_DIR, "src", "main.ts"), "utf-8");
92
112
 
93
113
  expect(main).toContain('from "@johpaz/hive-sdk"');
94
- expect(main).toContain("createAgent");
95
114
  expect(main).toContain("startGateway");
96
- expect(main).toContain("initializeDatabase");
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");
97
119
  expect(main).toContain("ChannelManager");
98
120
  expect(main).toContain("logger");
99
121
  expect(main).toContain('import config from "../hive.config.ts"');
100
- expect(main).toContain("await initializeDatabase()");
122
+ expect(main).toContain("await ensureHiveDb()");
101
123
  expect(main).toContain('await startGateway({');
102
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");
103
129
  });
104
130
 
105
131
  it("generates coordinator agent with correct config", async () => {
@@ -112,7 +138,10 @@ describe("hive create-app", () => {
112
138
  expect(agent).toContain('import { createAgent } from "@johpaz/hive-sdk"');
113
139
  expect(agent).toContain('name: "coordinator"');
114
140
  expect(agent).toContain('provider: "openai"');
115
- expect(agent).toContain('model: "gpt-4o-mini"');
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");
116
145
  });
117
146
 
118
147
  it("generates docker-compose.yml with correct ports", async () => {
@@ -139,7 +168,7 @@ describe("hive create-app", () => {
139
168
 
140
169
  expect(env).toContain("HIVE_HOST=");
141
170
  expect(env).toContain("HIVE_PORT=");
142
- expect(env).toContain("HIVE_DATA_DIR=");
171
+ expect(env).toContain("HIVE_HOME=");
143
172
  expect(env).toContain("OPENAI_API_KEY=");
144
173
  expect(env).toContain("ANTHROPIC_API_KEY=");
145
174
  expect(env).toContain("GOOGLE_API_KEY=");
@@ -9,12 +9,12 @@ const HIVE_CONFIG = `{
9
9
  "version": "0.1.0",
10
10
  "type": "module",
11
11
  "dependencies": {
12
- "@hive/core": "latest"
12
+ "@johpaz/hive-sdk": "latest"
13
13
  }
14
14
  }
15
15
  `;
16
16
 
17
- const HIVE_AGENT_TS = `import { createAgent, defineTool } from "@hive/core";
17
+ const HIVE_AGENT_TS = `import { createAgent, defineTool } from "@johpaz/hive-sdk";
18
18
 
19
19
  const myTool = defineTool({
20
20
  name: "hello",
@@ -26,7 +26,7 @@ const myTool = defineTool({
26
26
 
27
27
  const agent = await createAgent({
28
28
  name: "my-agent",
29
- model: "gpt-4o",
29
+ model: "gpt-5.6-luna",
30
30
  provider: "openai",
31
31
  tools: [myTool],
32
32
  });
@@ -10,7 +10,7 @@ async function runCommand() {
10
10
  }
11
11
 
12
12
  console.log(`Running agent from ${agentFile}...`);
13
- const { createAgent } = await import("@hive/core");
13
+ const { createAgent } = await import("@johpaz/hive-sdk");
14
14
  const agentModule = await import(agentFile);
15
15
 
16
16
  if (agentModule.agent) {
@@ -1,42 +1,54 @@
1
1
  export {};
2
+
3
+ /**
4
+ * `hives test` — corre los tests del proyecto del usuario.
5
+ *
6
+ * Antes hacía glob sobre `packages/core/src/**` — rutas del repo del SDK, no del
7
+ * proyecto donde se ejecuta el comando, así que en la práctica no encontraba
8
+ * nada. Ahora busca en `src/` y `test(s)/` del cwd.
9
+ */
2
10
  async function testCommand() {
3
11
  const filter = process.argv[3];
4
12
 
5
13
  console.log("Hive Test Runner\n");
6
14
 
7
- const { initializeDatabase, dbService } = await import("@hive/core");
8
- await initializeDatabase();
15
+ const { ensureHiveDb } = await import("@johpaz/hive-sdk");
16
+ await ensureHiveDb();
9
17
 
10
18
  const { Glob } = await import("bun");
11
- const glob = new Glob("packages/core/src/**/*.{test,spec}.ts");
12
- const testFiles = Array.from(glob.scanSync({ cwd: process.cwd(), absolute: true }));
19
+ const patterns = ["src/**/*.{test,spec}.ts", "test/**/*.{test,spec}.ts", "tests/**/*.{test,spec}.ts"];
20
+
21
+ const seen = new Set<string>();
22
+ for (const pattern of patterns) {
23
+ for (const file of new Glob(pattern).scanSync({ cwd: process.cwd(), absolute: true })) {
24
+ seen.add(file);
25
+ }
26
+ }
13
27
 
14
- const tests = filter
15
- ? testFiles.filter((f: string) => f.includes(filter))
16
- : testFiles;
28
+ const tests = [...seen].filter((f) => !filter || f.includes(filter)).sort();
17
29
 
18
30
  if (tests.length === 0) {
19
- console.log("No tests found.");
20
- } else {
21
- console.log(`Found ${tests.length} test(s)\n`);
22
- let passed = 0;
23
- let failed = 0;
24
-
25
- for (const test of tests as string[]) {
26
- try {
27
- await import(test);
28
- console.log(` ✓ ${test.split("/").pop()}`);
29
- passed++;
30
- } catch (err) {
31
- console.error(` ✗ ${test.split("/").pop()}: ${(err as Error).message}`);
32
- failed++;
33
- }
34
- }
31
+ console.log("No tests found under src/, test/ or tests/.");
32
+ return;
33
+ }
35
34
 
36
- console.log(`\n${passed} passed, ${failed} failed`);
35
+ console.log(`Found ${tests.length} test(s)\n`);
36
+ let passed = 0;
37
+ let failed = 0;
38
+
39
+ for (const test of tests) {
40
+ try {
41
+ await import(test);
42
+ console.log(` ✓ ${test.split("/").pop()}`);
43
+ passed++;
44
+ } catch (err) {
45
+ console.error(` ✗ ${test.split("/").pop()}: ${(err as Error).message}`);
46
+ failed++;
47
+ }
37
48
  }
38
49
 
39
- dbService.close();
50
+ console.log(`\n${passed} passed, ${failed} failed`);
51
+ if (failed > 0) process.exitCode = 1;
40
52
  }
41
53
 
42
54
  testCommand();
@@ -1,10 +1,15 @@
1
1
  export {};
2
+
3
+ /**
4
+ * `hives trace` — últimas ejecuciones registradas por el ACE Tracer.
5
+ *
6
+ * Los traces pasaron de una tabla SQLite a la colección `traces` de HiveDB en
7
+ * 0.1.5, así que esto ya no es una query SQL.
8
+ */
2
9
  async function traceCommand() {
3
- const { initializeDatabase } = await import("@hive/core");
4
- const { getDb } = await import("@hive/core/storage");
10
+ const { ensureHiveDb, col } = await import("@johpaz/hive-sdk");
5
11
 
6
- await initializeDatabase();
7
- const db = getDb();
12
+ await ensureHiveDb();
8
13
 
9
14
  const limit = parseInt(process.argv[3] || "20", 10);
10
15
 
@@ -12,43 +17,40 @@ async function traceCommand() {
12
17
  console.log("─".repeat(80));
13
18
 
14
19
  try {
15
- const rows = db
16
- .query(
17
- `SELECT id, agent_id, model, tool_calls, duration_ms, tokens_used, created_at
18
- FROM traces
19
- ORDER BY created_at DESC
20
- LIMIT ?`
21
- )
22
- .all(limit) as Array<{
23
- id: string;
20
+ const tracesCol = await col<{
24
21
  agent_id: string;
25
22
  model: string;
26
- tool_calls: string;
27
- duration_ms: number;
28
- tokens_used: number;
29
- created_at: string;
30
- }>;
23
+ provider?: string;
24
+ tool_calls?: string | null;
25
+ duration_ms?: number;
26
+ tokens_used?: number;
27
+ created_at: number;
28
+ }>("traces");
29
+
30
+ const rows = (await tracesCol.scan({}))
31
+ .sort((a, b) => b.doc.created_at - a.doc.created_at)
32
+ .slice(0, limit);
31
33
 
32
34
  if (rows.length === 0) {
33
- console.log("No traces found.");
35
+ console.log("No traces found (run the agent first).");
34
36
  return;
35
37
  }
36
38
 
37
39
  for (const row of rows) {
38
40
  console.log(`ID: ${row.id}`);
39
- console.log(`Agent: ${row.agent_id}`);
40
- console.log(`Model: ${row.model}`);
41
- console.log(`Duration: ${row.duration_ms}ms`);
42
- console.log(`Tokens: ${row.tokens_used}`);
43
- console.log(`Time: ${row.created_at}`);
44
- if (row.tool_calls) {
45
- const tools = JSON.parse(row.tool_calls);
46
- console.log(`Tools: ${Array.isArray(tools) ? tools.join(", ") : row.tool_calls}`);
41
+ console.log(`Agent: ${row.doc.agent_id}`);
42
+ console.log(`Model: ${row.doc.provider ? `${row.doc.provider}/` : ""}${row.doc.model}`);
43
+ console.log(`Duration: ${row.doc.duration_ms ?? 0}ms`);
44
+ console.log(`Tokens: ${row.doc.tokens_used ?? 0}`);
45
+ console.log(`Time: ${new Date(row.doc.created_at).toISOString()}`);
46
+ if (row.doc.tool_calls) {
47
+ const tools = JSON.parse(row.doc.tool_calls);
48
+ console.log(`Tools: ${Array.isArray(tools) ? tools.join(", ") : row.doc.tool_calls}`);
47
49
  }
48
50
  console.log("─".repeat(80));
49
51
  }
50
52
  } catch (err) {
51
- console.log("No traces table found (run the agent first).");
53
+ console.error(`No se pudieron leer los traces: ${(err as Error).message}`);
52
54
  }
53
55
  }
54
56
 
@@ -1,12 +1,20 @@
1
1
  # Hive Harness Configuration
2
2
  HIVE_HOST=127.0.0.1
3
3
  HIVE_PORT=18790
4
- HIVE_DATA_DIR=./data
5
4
 
6
- # LLM Providers
5
+ # Directorio de datos. HiveDB vive en <HIVE_HOME>/data.
6
+ HIVE_HOME=./.hive
7
+ # Ruta explícita de la base (opcional). ":memory:" para una base efímera.
8
+ # HIVE_DB_PATH=
9
+
10
+ # LLM Providers — <PROVIDER>_API_KEY, en mayúsculas y con el id del provider.
11
+ # La clave también se puede cargar cifrada en la base desde la app.
7
12
  OPENAI_API_KEY=sk-...
8
13
  ANTHROPIC_API_KEY=sk-ant-...
9
14
  GOOGLE_API_KEY=...
15
+ # MODELSCOPE_API_KEY=ms-...
16
+ # NVIDIA_API_KEY=nvapi-...
17
+ # OPENROUTER_API_KEY=sk-or-...
10
18
 
11
19
  # Channels (enable as needed)
12
20
  TELEGRAM_BOT_TOKEN=
@@ -0,0 +1,103 @@
1
+ # {{APP_NAME}}
2
+
3
+ Aplicación de agentes construida sobre [`@johpaz/hive-sdk`](https://www.npmjs.com/package/@johpaz/hive-sdk).
4
+
5
+ ## Arrancar
6
+
7
+ ```bash
8
+ bun install
9
+ cp .env.example .env # cargá al menos una API key
10
+ bun run dev
11
+ ```
12
+
13
+ El gateway queda en `http://127.0.0.1:18790`. Probalo:
14
+
15
+ ```bash
16
+ curl -X POST http://127.0.0.1:18790/chat \
17
+ -H "Content-Type: application/json" \
18
+ -d '{"message":"Hola","threadId":"t1"}'
19
+ ```
20
+
21
+ ## Estructura
22
+
23
+ ```
24
+ src/
25
+ main.ts # arranque: base de datos, canales y gateway
26
+ agents/coordinator.ts # el agente principal
27
+ hive.config.ts # gateway, canales y logging
28
+ ```
29
+
30
+ `main.ts` llama a `ensureHiveDb()`, que abre HiveDB, crea los índices y siembra
31
+ el catálogo de providers y modelos. Es idempotente: correrlo en cada arranque es
32
+ justamente cómo se actualiza el catálogo.
33
+
34
+ ## Cambiar de modelo
35
+
36
+ En `src/agents/coordinator.ts`. `provider` y `model` tienen que existir en el
37
+ catálogo sembrado, o `createAgent` lanza avisando cuál falta:
38
+
39
+ ```typescript
40
+ export const coordinatorAgent = await createAgent({
41
+ name: "coordinator",
42
+ provider: "anthropic",
43
+ model: "claude-opus-5",
44
+ systemPrompt: "...",
45
+ });
46
+ ```
47
+
48
+ Hay 18 providers y 106 modelos disponibles. La API key sale de la variable
49
+ `<PROVIDER>_API_KEY` (`ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, `MODELSCOPE_API_KEY`…).
50
+
51
+ ## Agregar una tool
52
+
53
+ ```typescript
54
+ import { createAgent, defineTool } from "@johpaz/hive-sdk";
55
+ import { z } from "zod";
56
+
57
+ const clima = defineTool({
58
+ name: "get_weather",
59
+ description: "Consulta el clima de una ciudad. Sinónimos: tiempo, temperatura",
60
+ schema: z.object({ city: z.string().describe("la ciudad") }),
61
+ execute: async ({ city }) => `Soleado en ${city}`,
62
+ });
63
+
64
+ export const coordinatorAgent = await createAgent({
65
+ name: "coordinator",
66
+ provider: "anthropic",
67
+ model: "claude-opus-5",
68
+ tools: [clima],
69
+ });
70
+ ```
71
+
72
+ Dos cosas que conviene saber sobre cómo el agente usa las tools:
73
+
74
+ - El **`description` es lo que la hace encontrable**. El agente arranca con un
75
+ loadout mínimo y descubre el resto buscando por capacidad, así que poner
76
+ sinónimos en la descripción es lo que hace que aparezca cuando corresponde.
77
+ - El **`schema` de Zod se traduce a los parámetros que ve el modelo**. Sin
78
+ schema, la tool se le ofrece sin argumentos.
79
+
80
+ ## Comandos
81
+
82
+ ```bash
83
+ bun run dev # desarrollo
84
+ bun run start # producción
85
+ hives add-tool <nombre> # scaffold de una tool
86
+ hives add-skill <nombre> # scaffold de una skill
87
+ hives trace # últimas ejecuciones del agente
88
+ ```
89
+
90
+ ## Datos
91
+
92
+ HiveDB vive en `<HIVE_HOME>/data` (por defecto `./.hive/data`). Para una base
93
+ efímera —tests— usá `HIVE_DB_PATH=":memory:"`.
94
+
95
+ ## Docker
96
+
97
+ ```bash
98
+ docker compose up -d
99
+ ```
100
+
101
+ ## Documentación
102
+
103
+ [github.com/johpaz/hive-sdk](https://github.com/johpaz/hive-sdk#readme)
@@ -1,7 +1,13 @@
1
1
  import type { Config } from "@johpaz/hive-sdk";
2
2
 
3
+ /**
4
+ * Configuración de {{APP_NAME}}.
5
+ *
6
+ * La ruta de la base no se configura acá: HiveDB vive en `<HIVE_HOME>/data`, o
7
+ * en `HIVE_DB_PATH` si lo definís. Usá `HIVE_DB_PATH=":memory:"` para una base
8
+ * efímera (tests).
9
+ */
3
10
  export default {
4
- name: "{{APP_NAME}}",
5
11
  gateway: {
6
12
  host: process.env.HIVE_HOST ?? "127.0.0.1",
7
13
  port: Number(process.env.HIVE_PORT ?? 18790),
@@ -13,7 +19,7 @@ export default {
13
19
  whatsapp: { enabled: false },
14
20
  slack: { enabled: false },
15
21
  },
16
- database: {
17
- path: process.env.HIVE_DATA_DIR ?? "./data/hive.db",
22
+ logging: {
23
+ level: (process.env.LOG_LEVEL as "debug" | "info" | "warn" | "error") ?? "info",
18
24
  },
19
25
  } satisfies Config;
@@ -1,9 +1,16 @@
1
1
  import { createAgent } from "@johpaz/hive-sdk";
2
2
 
3
+ /**
4
+ * El coordinador de la app.
5
+ *
6
+ * `provider` y `model` tienen que existir en el catálogo sembrado (ver
7
+ * `SEED_DATA.models`): `createAgent` los valida y los persiste en la fila del
8
+ * agente, que es de donde el loop resuelve a qué modelo llamar.
9
+ */
3
10
  export const coordinatorAgent = await createAgent({
4
11
  name: "coordinator",
5
12
  provider: "openai",
6
- model: "gpt-4o-mini",
13
+ model: "gpt-5.6-luna",
7
14
  systemPrompt:
8
15
  "You are the coordinator agent. You orchestrate tasks, answer questions, and delegate to specialized agents when needed.",
9
16
  });