@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
package/CHANGELOG.md ADDED
@@ -0,0 +1,97 @@
1
+ # Changelog
2
+
3
+ ## 0.1.5
4
+
5
+ Sincronización del SDK con el runtime de agentes de `hive`. **Trae rupturas de
6
+ API** (permitidas en 0.x, pero léelas antes de actualizar): el SDK y hive habían
7
+ divergido hasta compartir sólo 87 de 224 nombres de archivo, y quien instalaba
8
+ `@johpaz/hive-sdk` recibía un runtime más viejo y con bugs que en hive ya estaban
9
+ arreglados.
10
+
11
+ ### Corregido
12
+
13
+ - **Las caídas del provider ya no se guardan como respuestas del agente.**
14
+ `callLLM` devolvía `{ content: "[LLM Error] …", stop_reason: "error" }` y nadie
15
+ chequeaba `stop_reason`: el texto del error se persistía con `addMessage` y —
16
+ peor — la compactación lo guardaba como **el resumen permanente** que reemplaza
17
+ N mensajes de historial. `LLMResponse` ahora tiene un campo `error` tipado y hay
18
+ guardas en el loop, en la síntesis terminal y en la compactación.
19
+ - **HTTP 404/410 se distinguen del resto.** Un modelo retirado por el proveedor
20
+ produce un mensaje accionable con `error.modelUnavailable`, en vez de un error
21
+ opaco y reintentos que no pueden funcionar.
22
+ - **Las claves de modelo ya no colisionan.** Dos providers que sirven el mismo
23
+ modelo (`z-ai/glm-5.2` bajo NVIDIA y bajo OpenRouter) se pisaban la fila. Los
24
+ cuatro revendedores (`nvidia`, `openrouter`, `opencode-go`, `modelscope`,
25
+ `groq`) prefijan sus ids; el prefijo no llega al cable.
26
+ - **Los precios salen de la base.** `MODEL_PRICING` era un mapa hardcodeado de
27
+ ~62 entradas en paralelo al catálogo, y mantener dos listas fallaba en silencio.
28
+ Ahora el precio vive en la fila del modelo (`input_per_1m` / `output_per_1m`) y
29
+ un modelo sin tarifa avisa una vez en vez de reportar $0 como si fuera gratis.
30
+ - **`createAgent` honra su configuración.** `provider`, `model`, `maxIterations`,
31
+ `skills` y `workspace` se aceptaban y se descartaban: el agente corría con lo
32
+ que hubiera en la base. Ahora se persisten en la fila del agente.
33
+ - **Las tools de la app son usables.** `defineTool` registraba la declaración pero
34
+ no el ejecutor, así que una llamada moría con "no matching executor found". Y
35
+ aunque lo tuviera, el índice de capacidad no se llenaba nunca por la vía del
36
+ SDK, así que el agente quedaba limitado al loadout mínimo para siempre.
37
+ - **El selector ya no descarta tools que el índice sí encontró.** `selectTools`
38
+ resolvía los resultados contra `CORE_TOOL_CATALOG` mientras el índice se
39
+ construía con ése **más** la colección `tools`: una tool registrada en runtime
40
+ podía puntuar primera en BM25 y aun así nunca ofrecerse al modelo.
41
+ - **`Scratchpad` escribe el documento completo.** Compartía colección e id con
42
+ `conversation-store` pero guardaba un doc sin `source`, `createdAt` ni `seq`,
43
+ así que sus notas se ordenaban mal dentro del prompt.
44
+ - **La suite de tests dejó de escribir en la base real del usuario.** Un preload
45
+ fija `HIVE_DB_PATH=":memory:"` antes de que cargue cualquier módulo.
46
+ - **`tool_choice` de Mistral.** Estaba en `"any"`, que según docs.mistral.ai
47
+ *fuerza* una llamada a tool en cada turno; ahora es `"auto"`.
48
+
49
+ ### Ruptura
50
+
51
+ | Antes | Ahora |
52
+ |---|---|
53
+ | `initializeDatabase()`, `dbService`, `getDb()` | `ensureHiveDb()`, `col()` |
54
+ | `seedHiveDB()` | `seedAllData()` (lo llama `ensureHiveDb`) |
55
+ | `getAverageTokenCost()`, `getProviderPricing()`, `estimateCostForTokens()` | `calculateCost()` |
56
+ | `new EthicsGuard(db)`, métodos sync | `new EthicsGuard()`, métodos async |
57
+ | `new CronScheduler(db, handler)` | `new CronScheduler(handler)` |
58
+ | `new Scratchpad(db)` | `new Scratchpad()` |
59
+ | subpath `./ace` | `curator`, `reflector`, `tracer` desde `./agent` |
60
+ | subpath `./agent/selectors` | selectores desde `./agent` |
61
+ | `AgentConfig.provider: "openai" \| "anthropic" \| "gemini" \| "ollama"` | los 16 providers del catálogo |
62
+ | `api_request` con `auth`, `body` objeto, `timeoutMs` | headers, `body` string, `timeout_ms` |
63
+ | evento de canvas `canvas:render` | `canvas:node_add` / `node_update` / `edge_*` |
64
+
65
+ Módulos eliminados: `auth/` (sin un solo import), `agent/ContextGuard.ts` y
66
+ `agent/Hooks.ts` (muertos), `storage/SQLiteStorage.ts`, `storage/schema.ts`,
67
+ `storage/hiveSeed.ts`, `scheduler/dag/` (copia byte-idéntica de `swarm/`),
68
+ `swarm/WorkerPool.ts` (copia rezagada de `scheduler/integration.ts`),
69
+ `swarm/AgentBus.ts` y `swarm/EventBus.ts` (duplicaban `events/`), y las tools
70
+ `canvas/`, `codebridge/`, `meeting/`, `projects/`, `voice/`.
71
+
72
+ `harness/` pasó de tener implementación propia a ser un barrel sobre la
73
+ implementación única. El subpath `@johpaz/hive-sdk/harness` exporta lo mismo.
74
+
75
+ ### Agregado
76
+
77
+ - 16 providers LLM con `OpenAICompatBase`, incluidos `nvidia`, `z-ai`,
78
+ `modelscope`, `opencode-go`, `minimax`, `hiveagents`.
79
+ - Catálogo sembrado de 18 providers y 106 modelos con precio, actualizable
80
+ editando `SEED_DATA.models`: las filas de catálogo se borran y se recrean en
81
+ cada arranque, preservando qué modelo tenía activo el usuario.
82
+ - `registerAppTool()` / `clearAppTools()` como punto de extensión del registry.
83
+ - `catalogModelKey()`, `wireModelId()`, `isResellerProvider()`.
84
+ - `callLLM` y los tipos de `llm-client` en la superficie pública: antes sólo se
85
+ exportaba el wrapper `AgentRunner`.
86
+ - `bun run skills:bundle` regenera el catálogo de skills desde los `SKILL.md`
87
+ (el generador apuntaba a una ruta que no existe en este repo).
88
+ - Subpaths `./scheduler`, `./workers` y `./events`.
89
+ - De 18 a 44 archivos de test (77 → 314 casos), incluyendo agent loop, context
90
+ compiler, compactación, seed, precios y claves de modelo, que no tenían ninguno.
91
+
92
+ ### Corregido en el CLI
93
+
94
+ `init`, `run`, `test` y `trace` importaban `@hive/core`, un nombre de workspace
95
+ que no está publicado en npm: los cuatro comandos estaban rotos para cualquier
96
+ usuario. `hives test` además hacía glob sobre `packages/core/src/**`, rutas del
97
+ repo del SDK y no del proyecto donde se ejecuta.
package/README.md CHANGED
@@ -1,30 +1,26 @@
1
- # Documentación — Hive SDK
1
+ # @johpaz/hive-sdk
2
2
 
3
- > **Hive Agent Harness SDK** — Build, deploy, and scale AI agent applications with multi-channel support, Bun Workers, and swarm orchestration.
3
+ > **Hive Agent Harness SDK** — construí, desplegá y escalá aplicaciones de agentes de IA, con soporte multi-canal, Bun Workers y orquestación en swarm.
4
4
 
5
- ## Documentos
5
+ [![npm](https://img.shields.io/npm/v/@johpaz/hive-sdk)](https://www.npmjs.com/package/@johpaz/hive-sdk)
6
6
 
7
- | Documento | Descripción |
8
- |-----------|-------------|
9
- | [API-AGENTS.md](docs/API-AGENTS.md) | createAgent, AgentLoop, Tool/Skill Selector, LLM Providers |
10
- | [API-DAG-SCHEDULER.md](docs/API-DAG-SCHEDULER.md) | DAGScheduler, TaskGraph, TaskNode, Estrategias, Presets |
11
- | [API-WORKERS-EVENTS.md](docs/API-WORKERS-EVENTS.md) | **Bun Workers**, createWorker, WorkerPool, AgentBus, EventBus, Canvas |
12
- | [API-TOOLS-SKILLS-CHANNELS.md](docs/API-TOOLS-SKILLS-CHANNELS.md) | Tools, Skills, MCP, **Gateway**, **Channels**, **Tool Runtime**, Storage |
13
- | [API-CONTEXT-COMPILER.md](docs/API-CONTEXT-COMPILER.md) | Context Compiler, Message History, Scratchpad, EthicsGuard, ACE |
14
- | [TEMPLATE-HIVE-APP.md](docs/TEMPLATE-HIVE-APP.md) | **Template hive-app** — estructura, opciones, personalización |
7
+ ```bash
8
+ bun add @johpaz/hive-sdk
9
+ ```
15
10
 
16
11
  ## ¿Qué es Hive SDK?
17
12
 
18
13
  **Hive SDK es un Agent Harness**: un marco de trabajo completo para construir, desplegar y escalar aplicaciones de agentes de IA. A diferencia de un simple wrapper de LLM, un *harness* provee todo lo necesario para que un agente opere en producción:
19
14
 
20
- - **Agentes**: ciclo ReAct, selección dinámica de tools/skills vía FTS5, múltiples providers (OpenAI, Anthropic, Gemini, Ollama).
21
- - **Tools**: 70+ tools incluidas filesystem, web search, browser automation (`agent-browser`), APIs (`api_request`), canvas, voz, office, cron.
22
- - **Skills**: workflows reutilizables con `defineSkill` y `SkillLoader`.
15
+ - **Agentes**: ciclo ReAct nativo con checkpoint durable, 16 providers LLM y descubrimiento de tools/skills por búsqueda BM25.
16
+ - **Catálogo**: 18 providers y 106 modelos sembrados, cada uno con su precio por millón de tokens una sola fuente de verdad para el costo.
17
+ - **Tools**: 58 tools incluidas — filesystem, web search, browser automation (`agent-browser`), APIs (`api_request`), a2ui, office, cron, delegación.
18
+ - **Skills**: 23 workflows bundled, más los tuyos con `defineSkill` y `SkillLoader`.
23
19
  - **Canales**: Telegram, Discord, WhatsApp, Slack y WebChat con `ChannelManager`.
24
20
  - **Swarm**: orquestación multi-agente con `DAGScheduler`, `TaskGraph` y `WorkerPool`.
25
21
  - **Runtime**: ejecución paralela de tools vía Bun Workers.
26
22
  - **Gateway**: servidor HTTP/WebSocket para exponer agentes como API.
27
- - **Memoria y estado**: SQLite + FTS5, scratchpad, context compiler.
23
+ - **Memoria y estado**: HiveDB (colecciones + índice BM25), scratchpad, context compiler con compactación.
28
24
 
29
25
  Con Hive SDK no montas un agente desde cero: **enganchas tu lógica de negocio en un harness ya armado**.
30
26
 
@@ -67,17 +63,19 @@ bun run dev
67
63
 
68
64
  ```typescript
69
65
  import { createAgent, defineTool } from "@johpaz/hive-sdk";
66
+ import { z } from "zod";
70
67
 
71
68
  const tool = defineTool({
72
69
  name: "saludar",
73
- description: "Saluda a alguien",
70
+ description: "Saluda a alguien por su nombre",
71
+ schema: z.object({ nombre: z.string().describe("a quién saludar") }),
74
72
  execute: async (args: { nombre: string }) => `¡Hola ${args.nombre}!`,
75
73
  });
76
74
 
77
75
  const agent = await createAgent({
78
76
  name: "asistente",
79
- provider: "openai",
80
- model: "gpt-4o-mini",
77
+ provider: "openai", // cualquiera de los 16 del catálogo
78
+ model: "gpt-5.6-luna", // tiene que existir en el catálogo sembrado
81
79
  tools: [tool],
82
80
  });
83
81
 
@@ -85,6 +83,11 @@ const respuesta = await agent.run("Saluda a Juan");
85
83
  console.log(respuesta);
86
84
  ```
87
85
 
86
+ `createAgent` abre HiveDB, siembra el catálogo de providers y modelos, persiste
87
+ la configuración en la fila del agente y deja tus tools indexadas para que el
88
+ modelo pueda descubrirlas. El `schema` de Zod es lo que se traduce a los
89
+ parámetros que ve el LLM — sin él, la tool se ofrece sin argumentos.
90
+
88
91
  ### 3. Crear un worker especializado
89
92
 
90
93
  ```typescript
@@ -135,15 +138,26 @@ console.log(`Gateway at http://127.0.0.1:18790`);
135
138
  ## Variables de Entorno
136
139
 
137
140
  ```bash
138
- HIVE_DATA_DIR=./data # Directorio de datos SQLite
141
+ HIVE_HOME=~/.hive # Directorio de datos (HiveDB vive en <HIVE_HOME>/data)
142
+ HIVE_DB_PATH= # Ruta explícita de la base; ":memory:" para efímera
139
143
  HIVE_HOST=127.0.0.1 # Gateway host
140
144
  HIVE_PORT=18790 # Gateway port
141
- OPENAI_API_KEY=sk-... # OpenAI
142
- ANTHROPIC_API_KEY=sk-ant-... # Anthropic
143
- GOOGLE_API_KEY=... # Gemini
144
145
  LOG_LEVEL=info # debug | info | warn | error
145
146
  ```
146
147
 
148
+ La API key de cada provider se guarda cifrada en la base. Como alternativa, el
149
+ SDK cae a `<PROVIDER>_API_KEY` del entorno, en mayúsculas y con el id del
150
+ provider tal cual:
151
+
152
+ ```bash
153
+ OPENAI_API_KEY=sk-...
154
+ ANTHROPIC_API_KEY=sk-ant-...
155
+ GOOGLE_API_KEY=... # provider "gemini"
156
+ MODELSCOPE_API_KEY=ms-...
157
+ NVIDIA_API_KEY=nvapi-...
158
+ OPENROUTER_API_KEY=sk-or-...
159
+ ```
160
+
147
161
  ## Tests
148
162
 
149
163
  ```bash
@@ -154,7 +168,48 @@ bun test
154
168
  bun test --timeout 60000
155
169
  ```
156
170
 
171
+ La suite usa una base efímera (`HIVE_DB_PATH=":memory:"`, fijado en
172
+ `test/preload.ts`) para no escribir en la del usuario.
173
+
174
+ ## Publicar
175
+
176
+ ```bash
177
+ # 1. Actualizar archivos, sin tocar git — revisá el diff
178
+ bun run version:set 0.1.6
179
+
180
+ # 2. Cuando estés conforme: typecheck + tests + commit + tag + push
181
+ bun run version:set 0.1.6 --push
182
+
183
+ # Preview que no se instala por defecto
184
+ bun run version:set 0.2.0-rc.1 --push --npm-tag=next
185
+ ```
186
+
187
+ `--push` corre `typecheck` y `bun test` antes de tocar git, y pide confirmación
188
+ explícita. El tag `vX.Y.Z` es lo que dispara `.github/workflows/publish.yml`, que
189
+ publica **sólo el paquete raíz** (`packages/*` son workspaces internos). El
190
+ dist-tag viaja en el mensaje del tag, así que `--npm-tag=next` publica bajo `next`
191
+ y no mueve `latest`.
157
192
 
193
+ El script aborta si la versión ya existe en npm — republicar da 403 — y si el tag
194
+ local ya existe.
158
195
 
196
+ ```bash
197
+ npm view @johpaz/hive-sdk dist-tags # verificar después del release
198
+ ```
199
+
200
+ ## Documentación
159
201
 
160
- *Documentación Hive SDK v0.0.18*
202
+ | Documento | Descripción |
203
+ |-----------|-------------|
204
+ | [API-AGENTS.md](docs/API-AGENTS.md) | createAgent, AgentLoop, Tool/Skill Selector, los 16 LLM Providers |
205
+ | [API-CONTEXT-COMPILER.md](docs/API-CONTEXT-COMPILER.md) | Context Compiler, historial, Scratchpad, EthicsGuard, ACE |
206
+ | [API-TOOLS-SKILLS-CHANNELS.md](docs/API-TOOLS-SKILLS-CHANNELS.md) | Tools, Skills, MCP, Gateway, Channels, Tool Runtime, Storage |
207
+ | [API-DAG-SCHEDULER.md](docs/API-DAG-SCHEDULER.md) | DAGScheduler, TaskGraph, TaskNode, estrategias, presets |
208
+ | [API-WORKERS-EVENTS.md](docs/API-WORKERS-EVENTS.md) | Bun Workers, createWorker, WorkerPool, AgentBus, EventBus, Canvas |
209
+ | [HIVE-HARNESS.md](docs/HIVE-HARNESS.md) | Ejecución durable: cola de jobs, checkpoints, leases, proof packets |
210
+ | [TEMPLATE-HIVE-APP.md](docs/TEMPLATE-HIVE-APP.md) | Template `hive-app` — estructura, opciones, personalización |
211
+ | [CHANGELOG.md](CHANGELOG.md) | Cambios por versión |
212
+
213
+ ---
214
+
215
+ *Hive SDK v0.1.5 — MIT*
package/bunfig.toml CHANGED
@@ -1,7 +1,9 @@
1
1
  [test]
2
- preload = ["./test/setup-db.ts"]
2
+ # Fija HIVE_DB_PATH=":memory:" antes de que cargue cualquier módulo — ver test/preload.ts.
3
+ # Sin esto la suite abre la base real del usuario (~/.hive/data/hive) y le escribe.
4
+ preload = ["./test/preload.ts"]
3
5
  timeout = 30000
4
6
  randomize = false
5
7
 
6
8
  [install]
7
- registry = "https://registry.npmjs.org/"
9
+ registry = "https://registry.npmjs.org/"
@@ -27,8 +27,8 @@ const agent = await createAgent(config: AgentConfig): Promise<Agent>
27
27
  ```typescript
28
28
  interface AgentConfig {
29
29
  name: string;
30
- model?: string; // default: gpt-4o-mini
31
- provider?: "openai" | "anthropic" | "gemini" | "ollama";
30
+ model?: string; // id tal como lo nombra su dueño, ej. "claude-opus-5"
31
+ provider?: Provider; // cualquiera de los 16 del catálogo
32
32
  systemPrompt?: string;
33
33
  tools?: ToolDefinition[]; // Tools custom
34
34
  skills?: SkillDefinition[]; // Skills custom
@@ -43,6 +43,21 @@ interface AgentConfig {
43
43
  }
44
44
  ```
45
45
 
46
+ La config **se persiste en la fila del agente**, que es de donde el loop resuelve
47
+ provider y modelo en cada turno. Consecuencias que conviene tener presentes:
48
+
49
+ - `model` exige `provider`: el mismo modelo lo sirven varios providers y la clave
50
+ del catálogo depende de cuál. Sin provider, `createAgent` lanza.
51
+ - El modelo tiene que existir en `SEED_DATA.models`, o lanza con el nombre del
52
+ provider al que no pertenece.
53
+ - `name` deriva el id del agente (`"Mi Agente"` → `mi_agente`), así que dos
54
+ `createAgent` con el mismo nombre comparten fila e historial.
55
+ - Las tools pasadas acá quedan registradas **y** indexadas, así que el modelo
56
+ puede descubrirlas con `search_knowledge` como a las nativas.
57
+
58
+ > Hasta 0.1.5 `provider`, `model`, `maxIterations`, `skills` y `workspace` se
59
+ > aceptaban y se descartaban: el agente corría con lo que hubiera en la base.
60
+
46
61
  ### Agent
47
62
 
48
63
  ```typescript
@@ -82,7 +97,7 @@ import { createAgent, defineTool } from "@johpaz/hive-sdk";
82
97
  const agent = await createAgent({
83
98
  name: "asistente",
84
99
  provider: "openai",
85
- model: "gpt-4o-mini",
100
+ model: "gpt-5.6-luna",
86
101
  systemPrompt: "Eres un asistente útil.",
87
102
  });
88
103
 
@@ -208,7 +223,7 @@ const result = await runAgentIsolated({
208
223
 
209
224
  ## Tool Selector
210
225
 
211
- Selección automática de tools basada en FTS5.
226
+ Selección automática de tools por búsqueda BM25 sobre el índice de capacidad.
212
227
 
213
228
  ```typescript
214
229
  import { selectTools, CORE_TOOL_CATALOG } from "@johpaz/hive-sdk";
@@ -229,22 +244,22 @@ const MIN_RELEVANCE_THRESHOLD = -30;
229
244
 
230
245
  ### CORE_TOOL_CATALOG
231
246
 
232
- ~50 tools built-in organizadas por categoría:
233
-
234
- | Categoría | Descripción |
235
- |-----------|-------------|
236
- | filesystem | read, write, edit, delete, list, glob |
237
- | web | web_search, web_fetch, browser automation |
238
- | projects | project/task CRUD |
239
- | cron | Croner-based scheduling |
240
- | cli | Shell command execution |
241
- | agents | Agent management, task delegation |
242
- | canvas | UI rendering, A2UI |
243
- | codebridge | Code execution bridge |
244
- | voice | TTS/STT |
245
- | core | save_note, notify, report_progress |
246
- | office | PDF, DOCX, XLSX, PPTX |
247
- | meeting | Meeting management |
247
+ 58 tools built-in organizadas por categoría:
248
+
249
+ | Categoría | # | Descripción |
250
+ |-----------|---|-------------|
251
+ | agents | 15 | delegación (`task_delegate`, `task_revise`), memoria, catálogo de modelos |
252
+ | web | 10 | `web_search`, `web_fetch`, automatización de browser, `artifact_inspect` |
253
+ | cron | 8 | scheduling con Croner |
254
+ | office | 8 | PDF, DOCX, XLSX, PPTX |
255
+ | filesystem | 7 | read, write, edit, delete, list, glob, exists |
256
+ | a2ui | 4 | superficies de UI generadas por el agente |
257
+ | core | 4 | `save_note`, `notify`, `report_progress`, `search_knowledge` |
258
+ | cli | 1 | ejecución de comandos |
259
+ | api | 1 | `api_request` |
260
+
261
+ Las categorías `projects`, `canvas`, `codebridge`, `voice` y `meeting`
262
+ desaparecieron en 0.1.5 junto con sus tools.
248
263
 
249
264
  ---
250
265
 
@@ -266,19 +281,55 @@ const minimal = getMinimalSkills();
266
281
 
267
282
  ### Providers Soportados
268
283
 
269
- | Provider | Modelos | Streaming |
270
- |----------|---------|-----------|
271
- | openai | gpt-4o, gpt-4o-mini | ✅ |
272
- | anthropic | claude-sonnet, claude-haiku | |
273
- | gemini | gemini-2.5-flash | ✅ |
274
- | ollama | modelos locales | |
284
+ 16 providers, todos sembrados con su catálogo de modelos y su precio por millón
285
+ de tokens. `provider` en `createAgent` acepta cualquiera de estos ids.
286
+
287
+ | Provider | Adapter | Notas |
288
+ |----------|---------|-------|
289
+ | `anthropic` | nativo | extended thinking, round-trip de thinking blocks |
290
+ | `gemini` | nativo | REST v1beta |
291
+ | `ollama` | nativo | modelos locales, flag `think` |
292
+ | `openai` | OpenAI-compat | Sol / Terra / Luna |
293
+ | `deepseek`, `kimi` | OpenAI-compat | round-trip de `reasoning_content` |
294
+ | `mistral`, `groq`, `qwen`, `minimax` | OpenAI-compat | |
295
+ | `z-ai` | OpenAI-compat | sirve en `/api/paas/v4`, no en `/v1` |
296
+ | `hiveagents` | OpenAI-compat | |
297
+ | `nvidia`, `openrouter`, `opencode-go`, `modelscope` | OpenAI-compat | **revendedores** |
298
+
299
+ Los cuatro revendedores prefijan sus ids de modelo con su propio id de provider
300
+ (`modelscope/Qwen/Qwen3.5-397B-A17B`), porque sirven modelos de terceros que se
301
+ solapan entre sí y la colección `models` se indexa por una sola clave. El
302
+ prefijo no llega al cable: el adapter lo quita antes del request.
303
+
304
+ ```typescript
305
+ import { catalogModelKey, wireModelId } from "@johpaz/hive-sdk";
306
+
307
+ catalogModelKey("modelscope", "Qwen/Qwen3.5-397B-A17B"); // modelscope/Qwen/Qwen3.5-397B-A17B
308
+ wireModelId("modelscope", "modelscope/Qwen/Qwen3.5-397B-A17B"); // Qwen/Qwen3.5-397B-A17B
309
+ ```
310
+
311
+ ### Errores del provider
312
+
313
+ `callLLM` nunca lanza: devuelve `stop_reason: "error"` con un campo `error`
314
+ tipado. Chequealo antes de persistir `content` en cualquier lado — es texto para
315
+ mostrar, no salida del modelo.
316
+
317
+ ```typescript
318
+ const response = await callLLM({ ... });
319
+
320
+ if (response.stop_reason === "error") {
321
+ console.error(response.error?.message);
322
+ // HTTP 404/410 → el proveedor retiró el modelo; reintentar no sirve.
323
+ if (response.error?.modelUnavailable) selectAnotherModel();
324
+ }
325
+ ```
275
326
 
276
327
  ### callLLM
277
328
 
278
329
  ```typescript
279
330
  import { callLLM, resolveProviderConfig } from "@johpaz/hive-sdk";
280
331
 
281
- const config = await resolveProviderConfig("openai", "gpt-4o-mini");
332
+ const config = await resolveProviderConfig("openai", "gpt-5.6-luna");
282
333
 
283
334
  const response = await callLLM({
284
335
  provider: config.provider,
@@ -41,7 +41,7 @@ El Context Compiler implementa 4 estrategias de Context Engineering:
41
41
  | Estrategia | Descripción |
42
42
  |------------|-------------|
43
43
  | **ESCRIBIR** | Guardar información fuera del contexto (Scratchpad, trazas) |
44
- | **SELECCIONAR** | Traer solo lo relevante (FTS5 tool/skill/playbook selection) |
44
+ | **SELECCIONAR** | Traer solo lo relevante (selección BM25 de tool/skill/playbook) |
45
45
  | **COMPRIMIR** | Reducir tokens (compaction, tool result clearing) |
46
46
  | **AISLAR** | Separar contextos por agente (workers reciben contexto mínimo) |
47
47
 
@@ -114,56 +114,53 @@ Memoria temporal por hilo de conversación.
114
114
 
115
115
  ```typescript
116
116
  import { Scratchpad } from "@johpaz/hive-sdk";
117
- import { getDb } from "@johpaz/hive-sdk";
118
117
 
119
- const db = getDb();
120
- const pad = new Scratchpad(db);
118
+ const pad = new Scratchpad();
121
119
 
122
- // Escribir nota
123
- pad.write("thread-1", "mi-nota", "contenido");
124
-
125
- // Leer nota
126
- const value = pad.read("thread-1", "mi-nota");
127
-
128
- // Listar notas de un hilo
129
- const all = pad.list("thread-1");
130
-
131
- // Eliminar nota
132
- pad.delete("thread-1", "mi-nota");
133
-
134
- // Limpiar todas las notas de un hilo
135
- pad.clear("thread-1");
120
+ await pad.write("thread-1", "mi-nota", "contenido");
121
+ const value = await pad.read("thread-1", "mi-nota");
122
+ const all = await pad.list("thread-1"); // { "mi-nota": "contenido" }
123
+ await pad.delete("thread-1", "mi-nota");
124
+ await pad.clear("thread-1");
136
125
  ```
137
126
 
127
+ El scratchpad se inyecta al system prompt en cada turno bajo
128
+ `# SCRATCHPAD (Persistent Notes)`, comprimido con TOON. La clase es una fachada
129
+ sobre las funciones de `conversation-store`: hasta 0.1.5 tenía implementación
130
+ propia y, como usaba el mismo id, escribía las mismas filas con un documento
131
+ incompleto que rompía el orden por recencia.
132
+
138
133
  ---
139
134
 
140
135
  ## EthicsGuard
141
136
 
142
- Guardián de reglas de calidad de respuesta desde la base de datos.
137
+ Capa opcional de reglas de calidad de respuesta, leídas de la colección
138
+ `playbook` (`category: "response_quality"`).
143
139
 
144
140
  ```typescript
145
141
  import { EthicsGuard } from "@johpaz/hive-sdk";
146
- import { getDb } from "@johpaz/hive-sdk";
147
142
 
148
- const db = getDb();
149
- const guard = new EthicsGuard(db);
143
+ const guard = new EthicsGuard();
150
144
 
151
- // Obtener reglas
152
- const rules = guard.getRules(); // Todas
153
- const rulesForRole = guard.getRules("agent"); // Con FTS5
145
+ const rules = await guard.getRules(); // todas las activas
146
+ const rulesForRole = await guard.getRules("coordinator"); // filtra por applicable_to
154
147
 
155
- // Inyectar en system prompt
156
- const prompt = guard.injectIntoPrompt(
157
- "Eres un asistente.",
158
- rules
159
- );
148
+ const prompt = guard.injectIntoPrompt("Eres un asistente.", rules);
160
149
 
161
- // Verificar si hay reglas
162
- if (guard.hasEthicsLayer()) {
150
+ if (await guard.hasEthicsLayer()) {
163
151
  console.log("Reglas de calidad activas");
164
152
  }
165
153
  ```
166
154
 
155
+ > El constructor ya no recibe un handle de base y todos los métodos son async:
156
+ > hasta 0.1.5 la clase armaba SQL a mano contra la tabla `playbook` y hacía un
157
+ > JOIN con la tabla virtual `playbook_fts`. Ninguna de las dos existe.
158
+
159
+ **Esto no es la ética constitucional del agente.** Esa vive en la colección
160
+ `ethics` y la ensambla `buildSystemPrompt()` como primera sección, completa y sin
161
+ comprimir. `EthicsGuard` es un complemento para hosts que quieran inyectar,
162
+ además, reglas aprendidas por ACE.
163
+
167
164
  ---
168
165
 
169
166
  ## ACE (Tracer, Reflector, Curator)
@@ -178,7 +175,7 @@ import { saveTrace, recordLLMUsage } from "@hive/core/ace";
178
175
  // Guardar traza de ejecución
179
176
  saveTrace({
180
177
  agentId: "analyst",
181
- model: "gpt-4o-mini",
178
+ model: "gpt-5.6-luna",
182
179
  messages: 5,
183
180
  toolCalls: ["web_search", "read_file"],
184
181
  durationMs: 1200,
@@ -188,7 +185,7 @@ saveTrace({
188
185
 
189
186
  // Registrar uso de LLM
190
187
  recordLLMUsage({
191
- model: "gpt-4o-mini",
188
+ model: "gpt-5.6-luna",
192
189
  inputTokens: 200,
193
190
  outputTokens: 250,
194
191
  durationMs: 800,
@@ -71,7 +71,7 @@ const exec = new ToolExecutor(reg);
71
71
  const result = await exec.execute("echo", { msg: "hola" });
72
72
  ```
73
73
 
74
- ### Tool Selection (FTS5)
74
+ ### Tool Selection (BM25)
75
75
 
76
76
  ```typescript
77
77
  import { selectTools, CORE_TOOL_CATALOG } from "@johpaz/hive-sdk";
@@ -120,17 +120,25 @@ Conecta APIs REST con autenticación y métodos HTTP:
120
120
 
121
121
  ```typescript
122
122
  const result = await apiRequestTool.execute({
123
- url: "https://api.example.com/items",
124
123
  method: "POST",
125
- headers: { "X-Custom": "value" },
126
- body: { name: "example" },
127
- auth: { type: "bearer", token: process.env.API_TOKEN! },
128
- timeoutMs: 30000,
124
+ url: "https://api.example.com/items",
125
+ headers: {
126
+ "Content-Type": "application/json",
127
+ Authorization: `Bearer ${process.env.API_TOKEN}`,
128
+ },
129
+ body: JSON.stringify({ name: "example" }),
130
+ query_params: { verbose: "1" },
131
+ timeout_ms: 30000,
129
132
  });
130
133
 
131
- // Auth soportada: bearer, basic, api_key (header o query)
134
+ // { ok, status, statusText, headers, body, contentType, url }
135
+ // `body` viene parseado si la respuesta es JSON, y como string si no.
132
136
  ```
133
137
 
138
+ Nunca lanza: un fallo de red o un método inválido vuelven como
139
+ `{ ok: false, error }`. No tiene helpers de autenticación — la credencial va
140
+ como un header más.
141
+
134
142
  ---
135
143
 
136
144
  ## Skills
@@ -168,12 +176,24 @@ const skill = loader.get("file-manager");
168
176
 
169
177
  ### Skills empaquetadas
170
178
 
171
- El SDK incluye skills empaquetadas para casos comunes. Algunas útiles para web y APIs:
179
+ El SDK incluye 23 skills empaquetadas. Algunas útiles para web y APIs:
172
180
 
173
181
  - `web_research` — búsqueda y síntesis con `web_search` + `web_fetch`.
174
- - `web_browser_research` — investigación profunda combinando `web_search` con navegación real (`browser_navigate`, `browser_extract`) para sitios dinámicos.
175
182
  - `browser_scrape` — captura de contenido renderizado con screenshots.
176
183
  - `browser_automate` — automatización de flujos web (clicks, formularios).
184
+ - `api_client` — consumo de APIs REST con `api_request`.
185
+ - `capability_discovery` — la skill mínima: enseña al agente a encontrar el resto.
186
+
187
+ Se generan desde los `SKILL.md` de `packages/core/src/skills/bundled/`:
188
+
189
+ ```bash
190
+ bun run skills:bundle
191
+ ```
192
+
193
+ En 0.1.5 se retiraron 21 skills que invocaban tools inexistentes (`voice_*`,
194
+ `meeting_transcription`, `canvas_*`, `code_*`, `project_*`): el selector se las
195
+ podía ofrecer al modelo y la ejecución moría sin ejecutor. Hay un test que falla
196
+ si alguna vuelve a declarar una tool que no está en el registry.
177
197
 
178
198
  ---
179
199
 
@@ -371,29 +391,45 @@ unsubscribeCanvas(handler);
371
391
 
372
392
  ## Storage
373
393
 
374
- Base de datos SQLite con FTS5.
394
+ HiveDB (`@johpaz/hive-db`), un motor embebido con colecciones de documentos e
395
+ índice BM25. Reemplazó a SQLite + FTS5 en 0.1.5.
375
396
 
376
397
  ```typescript
377
- import { initializeDatabase, dbService } from "@johpaz/hive-sdk";
398
+ import { ensureHiveDb, col } from "@johpaz/hive-sdk";
399
+ import type { AgentDoc } from "@johpaz/hive-sdk";
400
+
401
+ // Abre la base, crea los índices y siembra el catálogo. Idempotente.
402
+ await ensureHiveDb();
378
403
 
379
- await initializeDatabase();
380
- const db = getTestDb();
404
+ const agents = await col<AgentDoc>("agents");
381
405
 
382
- const results = db.query("SELECT * FROM agents WHERE id = ?").all(agentId);
383
- const single = db.query("SELECT * FROM agents WHERE id = ?").get(agentId);
406
+ const one = await agents.get(agentId); // { id, doc, version } | undefined
407
+ const workers = await agents.findBy("role", "worker");
408
+ const all = await agents.scan({});
409
+ const scoped = await agents.scan({ prefix: `${threadId}:` });
384
410
 
385
- dbService.close();
411
+ // Escritura con concurrencia optimista
412
+ await agents.put(agentId, { ...one.doc, status: "idle" }, { expectedVersion: one.version });
386
413
  ```
387
414
 
388
- ### Schemas FTS5
415
+ `HIVE_DB_PATH=":memory:"` abre una base efímera — es lo que usa la suite de
416
+ tests para no tocar la del usuario.
417
+
418
+ ### Búsqueda de capacidad
419
+
420
+ El índice BM25 es lo que hace funcionar a `search_knowledge`: el agente arranca
421
+ con un loadout mínimo y descubre el resto en runtime.
389
422
 
390
- ```sql
391
- CREATE VIRTUAL TABLE playbook_fts USING fts5(rule, category, applicable_to);
392
- CREATE VIRTUAL TABLE tools_fts USING fts5(tool_name, name, description, category);
393
- CREATE VIRTUAL TABLE skills_fts USING fts5(id, name, description, category, tools, triggers, body);
394
- CREATE VIRTUAL TABLE mcp_tools_fts USING fts5(id, name, description, category);
423
+ ```typescript
424
+ import { selectTools, selectSkills } from "@johpaz/hive-sdk";
425
+
426
+ const tools = await selectTools("leer un archivo del workspace");
427
+ const skills = await selectSkills("investigar en la web");
395
428
  ```
396
429
 
430
+ Una tool declarada con `defineTool` y pasada a `createAgent` queda indexada
431
+ automáticamente, así que el modelo puede descubrirla igual que a las nativas.
432
+
397
433
  ---
398
434
 
399
435
  ## Config