@johpaz/hive-sdk 0.1.3 → 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.
- package/CHANGELOG.md +97 -0
- package/README.md +78 -23
- package/bunfig.toml +4 -2
- package/docs/API-AGENTS.md +78 -27
- package/docs/API-CONTEXT-COMPILER.md +31 -34
- package/docs/API-TOOLS-SKILLS-CHANNELS.md +58 -22
- package/docs/HIVE-HARNESS.md +1 -1
- package/docs/INDEX.md +4 -4
- package/docs/TEMPLATE-HIVE-APP.md +10 -10
- package/package.json +9 -4
- package/packages/cli/package.json +2 -2
- package/packages/cli/src/commands/create-app.test.ts +36 -7
- package/packages/cli/src/commands/init.ts +3 -3
- package/packages/cli/src/commands/run.ts +1 -1
- package/packages/cli/src/commands/test.ts +37 -25
- package/packages/cli/src/commands/trace.ts +30 -28
- package/packages/cli/templates/hive-app/.env.example +10 -2
- package/packages/cli/templates/hive-app/README.md +103 -0
- package/packages/cli/templates/hive-app/hive.config.ts +9 -3
- package/packages/cli/templates/hive-app/src/agents/coordinator.ts +8 -1
- package/packages/cli/templates/hive-app/src/main.ts +12 -19
- package/packages/core/package.json +5 -4
- package/packages/core/src/agent/acceptance-checks.ts +166 -0
- package/packages/core/src/agent/agent-catalog.ts +348 -0
- package/packages/core/src/agent/agent-loop.ts +1373 -0
- package/packages/core/src/agent/capability-search.ts +186 -0
- package/packages/core/src/agent/catalog-selector.ts +103 -0
- package/packages/core/src/agent/{Compaction.ts → compaction.ts} +86 -63
- package/packages/core/src/agent/context-compiler.ts +689 -0
- package/packages/core/src/agent/conversation-store.ts +381 -0
- package/packages/core/src/agent/curator.ts +276 -0
- package/packages/core/src/agent/delegation-runtime.ts +241 -0
- package/packages/core/src/agent/goal-runner.ts +323 -0
- package/packages/core/src/agent/index.ts +17 -12
- package/packages/core/src/agent/llm-client.ts +266 -0
- package/packages/core/src/agent/llm-providers/anthropic.ts +264 -0
- package/packages/core/src/agent/llm-providers/deepseek.ts +8 -0
- package/packages/core/src/agent/{providers → llm-providers}/gemini.ts +98 -60
- package/packages/core/src/agent/llm-providers/groq.ts +5 -0
- package/packages/core/src/agent/llm-providers/hiveagents.ts +253 -0
- package/packages/core/src/agent/{providers → llm-providers}/interface.ts +73 -13
- package/packages/core/src/agent/llm-providers/kimi.ts +8 -0
- package/packages/core/src/agent/llm-providers/minimax.ts +13 -0
- package/packages/core/src/agent/llm-providers/mistral.ts +5 -0
- package/packages/core/src/agent/llm-providers/modelscope.ts +5 -0
- package/packages/core/src/agent/llm-providers/nvidia.ts +5 -0
- package/packages/core/src/agent/{providers → llm-providers}/ollama.ts +31 -5
- package/packages/core/src/agent/llm-providers/openai-compat-base.ts +418 -0
- package/packages/core/src/agent/llm-providers/openai.ts +5 -0
- package/packages/core/src/agent/llm-providers/opencode-go.ts +9 -0
- package/packages/core/src/agent/llm-providers/openrouter.ts +5 -0
- package/packages/core/src/agent/llm-providers/qwen.ts +5 -0
- package/packages/core/src/agent/llm-providers/z-ai.ts +5 -0
- package/packages/core/src/agent/minimal-loadout.ts +47 -0
- package/packages/core/src/agent/playbook-selector.ts +119 -0
- package/packages/core/src/agent/{PromptBuilder.ts → prompt-builder.ts} +21 -22
- package/packages/core/src/{harness → agent}/proof-packet.ts +16 -21
- package/packages/core/src/agent/providers/index.ts +35 -16
- package/packages/core/src/agent/reflector.ts +320 -0
- package/packages/core/src/agent/routing-intent.ts +22 -0
- package/packages/core/src/{harness → agent}/run-epoch.ts +4 -3
- package/packages/core/src/{harness → agent}/run-store.ts +142 -81
- package/packages/core/src/agent/{Service.ts → service.ts} +37 -26
- package/packages/core/src/agent/skill-selector.ts +374 -0
- package/packages/core/src/agent/stuck-loop.ts +209 -0
- package/packages/core/src/agent/{selectors/ToolSelector.ts → tool-selector.ts} +188 -178
- package/packages/core/src/{ace/Tracer.ts → agent/tracer.ts} +37 -27
- package/packages/core/src/api/createAgent.test.ts +139 -27
- package/packages/core/src/api/createAgent.ts +232 -44
- package/packages/core/src/artifacts/store.ts +162 -0
- package/packages/core/src/canvas/canvas-manager.ts +161 -0
- package/packages/core/src/canvas/canvas.test.ts +8 -4
- package/packages/core/src/canvas/emitter.ts +131 -80
- package/packages/core/src/canvas/index.ts +1 -3
- package/packages/core/src/channels/base.ts +9 -1
- package/packages/core/src/channels/discord.ts +5 -4
- package/packages/core/src/channels/manager.ts +122 -30
- package/packages/core/src/channels/slack.ts +5 -4
- package/packages/core/src/channels/telegram.ts +36 -6
- package/packages/core/src/channels/webchat.ts +11 -10
- package/packages/core/src/channels/whatsapp.ts +23 -7
- package/packages/core/src/config/index.ts +13 -2
- package/packages/core/src/config/loader.ts +71 -29
- package/packages/core/src/ethics/EthicsGuard.test.ts +90 -36
- package/packages/core/src/ethics/EthicsGuard.ts +51 -47
- package/packages/core/src/events/agent-bus.ts +44 -68
- package/packages/core/src/events/channel-narration.ts +150 -0
- package/packages/core/src/events/narration.ts +82 -0
- package/packages/core/src/events/tool-narration.ts +62 -0
- package/packages/core/src/gateway/delegation-groups.ts +258 -0
- package/packages/core/src/{harness → gateway}/durable-queue.ts +102 -42
- package/packages/core/src/{harness → gateway}/job-store.ts +85 -48
- package/packages/core/src/gateway/lane-queue.ts +173 -0
- package/packages/core/src/gateway/notification-inbox.ts +57 -0
- package/packages/core/src/gateway/server.ts +1 -1
- package/packages/core/src/harness/index.ts +46 -27
- package/packages/core/src/index.ts +33 -20
- package/packages/core/src/mcp/hot-reload.ts +32 -23
- package/packages/core/src/mcp/index.ts +6 -3
- package/packages/core/src/mcp/singleton.ts +1 -4
- package/packages/core/src/mcp/tool-sync.ts +138 -0
- package/packages/core/src/memory/Scratchpad.test.ts +39 -20
- package/packages/core/src/memory/Scratchpad.ts +27 -34
- package/packages/core/src/multimodal/vision-service.ts +44 -38
- package/packages/core/src/resilience/retry.ts +95 -0
- package/packages/core/src/scheduler/CronScheduler.ts +334 -287
- package/packages/core/src/scheduler/index.ts +9 -7
- package/packages/core/src/scheduler/integration.ts +46 -26
- package/packages/core/src/scheduler/scheduler.test.ts +9 -13
- package/packages/core/src/scheduler/types.ts +7 -2
- package/packages/core/src/security/Pairing.ts +1 -1
- package/packages/core/src/skills/bundled/a2ui/a2ui_dashboard/SKILL.md +176 -0
- package/packages/core/src/skills/bundled/a2ui/a2ui_form/SKILL.md +202 -0
- package/packages/core/src/skills/bundled/a2ui/a2ui_interactive/SKILL.md +206 -0
- package/packages/core/src/skills/bundled/agents/agent_spawner/SKILL.md +173 -0
- package/packages/core/src/skills/bundled/agents/memory_manager/SKILL.md +143 -0
- package/packages/core/src/skills/bundled/agents/research_and_remember/SKILL.md +139 -0
- package/packages/core/src/skills/bundled/agents/task_orchestrator/SKILL.md +98 -0
- package/packages/core/src/skills/bundled/api/api_client/SKILL.md +132 -0
- package/packages/core/src/skills/bundled/cli/cli_pipeline/SKILL.md +135 -0
- package/packages/core/src/skills/bundled/cli/cli_safe_exec/SKILL.md +125 -0
- package/packages/core/src/skills/bundled/cli/software_engineering/SKILL.md +23 -0
- package/packages/core/src/skills/bundled/cron_manager/SKILL.md +188 -0
- package/packages/core/src/skills/bundled/cron_reminder/SKILL.md +112 -0
- package/packages/core/src/skills/bundled/filesystem/file_manager/SKILL.md +118 -0
- package/packages/core/src/skills/bundled/filesystem/file_read_and_summarize/SKILL.md +109 -0
- package/packages/core/src/skills/bundled/filesystem/file_writer/SKILL.md +129 -0
- package/packages/core/src/skills/bundled/filesystem/workspace_file_operator/SKILL.md +22 -0
- package/packages/core/src/skills/bundled/office/office_document_manager/SKILL.md +262 -0
- package/packages/core/src/skills/bundled/search_knowledge/capability_discovery/SKILL.md +75 -0
- package/packages/core/src/skills/bundled/web/browser_automate/SKILL.md +120 -0
- package/packages/core/src/skills/bundled/web/browser_scrape/SKILL.md +109 -0
- package/packages/core/src/skills/bundled/web/web_monitor/SKILL.md +127 -0
- package/packages/core/src/skills/bundled/web/web_research/SKILL.md +119 -0
- package/packages/core/src/skills/bundled-data.generated.ts +731 -2678
- package/packages/core/src/skills/skills.test.ts +52 -11
- package/packages/core/src/{harness → storage}/boot-id.ts +5 -2
- package/packages/core/src/storage/bootstrap.ts +151 -0
- package/packages/core/src/storage/causal-events.ts +84 -0
- package/packages/core/src/storage/collections.ts +680 -0
- package/packages/core/src/storage/crypto.ts +205 -74
- package/packages/core/src/{harness/db-helpers.ts → storage/hive.ts} +63 -7
- package/packages/core/src/storage/hivedb.ts +61 -0
- package/packages/core/src/storage/index.ts +111 -17
- package/packages/core/src/storage/model-id.ts +53 -0
- package/packages/core/src/storage/onboarding.ts +540 -972
- package/packages/core/src/storage/reconcile.ts +238 -0
- package/packages/core/src/storage/seed.ts +572 -406
- package/packages/core/src/storage/usage.ts +285 -225
- package/packages/core/src/storage/user-email.ts +11 -0
- package/packages/core/src/swarm/AgentExecutor.ts +1 -1
- package/packages/core/src/swarm/EventBridge.ts +1 -1
- package/packages/core/src/swarm/index.ts +12 -9
- package/packages/core/src/tool-runtime/index.ts +146 -23
- package/packages/core/src/tool-runtime/tool-worker.ts +2 -2
- package/packages/core/src/tool-runtime/worker-tools.ts +27 -0
- package/packages/core/src/{canvas/a2ui-tools.ts → tools/a2ui/index.ts} +17 -8
- package/packages/core/src/tools/agents/get-available-models.ts +36 -54
- package/packages/core/src/tools/agents/index.ts +784 -292
- package/packages/core/src/tools/api/api-request.test.ts +164 -0
- package/packages/core/src/tools/api/api-request.ts +174 -0
- package/packages/core/src/tools/api/index.ts +16 -0
- package/packages/core/src/tools/cli/index.ts +4 -0
- package/packages/core/src/tools/core/index.ts +281 -112
- package/packages/core/src/tools/cron/index.ts +121 -124
- package/packages/core/src/tools/index.ts +63 -78
- package/packages/core/src/tools/office/office-escribir-xlsx.ts +3 -1
- package/packages/core/src/tools/types.ts +3 -1
- package/packages/core/src/tools/web/artifact-inspect.ts +23 -0
- package/packages/core/src/tools/web/browser-screenshot.ts +26 -5
- package/packages/core/src/tools/web/browser-service.ts +5 -0
- package/packages/core/src/tools/web/browser-type.ts +3 -8
- package/packages/core/src/tools/web/index.ts +4 -4
- package/packages/core/src/voice/index.ts +89 -63
- package/packages/core/src/workers/agent.worker.ts +2 -2
- package/packages/core/src/workers/workers.test.ts +3 -10
- package/scripts/bump-version.ts +248 -0
- package/scripts/generate-skill-bundle.ts +108 -0
- package/test/agent-loop-terminal-synthesis.test.ts +32 -0
- package/test/catalog-agents-stay-enabled.test.ts +117 -0
- package/test/causal-events.test.ts +117 -0
- package/test/compaction.test.ts +105 -0
- package/test/context-compiler.test.ts +269 -0
- package/test/curator.test.ts +130 -0
- package/test/durable-queue.test.ts +114 -0
- package/test/harness-barrel.test.ts +64 -0
- package/test/hive-helpers.test.ts +130 -0
- package/test/hivedb-search.test.ts +189 -0
- package/test/internal-turns.test.ts +166 -0
- package/test/job-idempotency.test.ts +68 -0
- package/test/job-retry-backoff.test.ts +184 -0
- package/test/job-store.test.ts +381 -0
- package/test/llm-retry.test.ts +97 -0
- package/test/memory-perf.test.ts +774 -0
- package/test/minimal-loadout.test.ts +78 -0
- package/test/model-catalog.test.ts +105 -0
- package/test/preload.ts +12 -0
- package/test/reflector.test.ts +320 -0
- package/test/retention-cap.test.ts +91 -0
- package/test/retired-capabilities-pruned.test.ts +192 -0
- package/test/run-store.test.ts +355 -0
- package/test/scratchpad.test.ts +74 -0
- package/test/secrets-durability.test.ts +119 -0
- package/test/seed-model-reseed.test.ts +155 -0
- package/test/setup-agent-seed.test.ts +264 -0
- package/test/tool-inventory.test.ts +65 -0
- package/test/tool-runtime.test.ts +258 -0
- package/test/toon.test.ts +429 -0
- package/tsconfig.json +2 -0
- package/packages/core/src/ace/Curator.ts +0 -158
- package/packages/core/src/ace/Reflector.ts +0 -200
- package/packages/core/src/ace/index.ts +0 -4
- package/packages/core/src/agent/AgentRunner.ts +0 -711
- package/packages/core/src/agent/ContextCompiler.ts +0 -567
- package/packages/core/src/agent/ContextGuard.ts +0 -91
- package/packages/core/src/agent/ConversationStore.ts +0 -254
- package/packages/core/src/agent/Hooks.ts +0 -166
- package/packages/core/src/agent/StuckLoop.ts +0 -133
- package/packages/core/src/agent/providers/LLMClient.ts +0 -149
- package/packages/core/src/agent/providers/anthropic.ts +0 -212
- package/packages/core/src/agent/providers/openai-compat.ts +0 -231
- package/packages/core/src/agent/selectors/PlaybookSelector.ts +0 -121
- package/packages/core/src/agent/selectors/SkillSelector.ts +0 -322
- package/packages/core/src/agent/selectors/index.ts +0 -6
- package/packages/core/src/auth/auth.ts +0 -121
- package/packages/core/src/auth/index.ts +0 -1
- package/packages/core/src/canvas/CanvasManager.ts +0 -390
- package/packages/core/src/canvas/canvas-tools.ts +0 -448
- package/packages/core/src/harness/collections.ts +0 -98
- package/packages/core/src/harness/goal-verifier.ts +0 -141
- package/packages/core/src/harness/harness.test.ts +0 -236
- package/packages/core/src/harness/reconcile.ts +0 -149
- package/packages/core/src/mcp/MCPToolAdapter.ts +0 -176
- package/packages/core/src/multimodal/VisionService.ts +0 -293
- package/packages/core/src/scheduler/dag/AgentExecutor.ts +0 -53
- package/packages/core/src/scheduler/dag/DAGScheduler.ts +0 -250
- package/packages/core/src/scheduler/dag/EventBridge.ts +0 -122
- package/packages/core/src/scheduler/dag/TaskGraph.ts +0 -192
- package/packages/core/src/scheduler/dag/TaskNode.ts +0 -97
- package/packages/core/src/scheduler/dag/TaskResult.ts +0 -22
- package/packages/core/src/scheduler/dag/errors.ts +0 -37
- package/packages/core/src/scheduler/dag/index.ts +0 -26
- package/packages/core/src/scheduler/dag/presets/ResearchPreset.ts +0 -97
- package/packages/core/src/scheduler/dag/strategies/ParallelStrategy.ts +0 -21
- package/packages/core/src/scheduler/dag/strategies/PriorityStrategy.ts +0 -46
- package/packages/core/src/storage/HiveDBStorage.ts +0 -64
- package/packages/core/src/storage/SQLiteStorage.ts +0 -414
- package/packages/core/src/storage/hiveSeed.ts +0 -308
- package/packages/core/src/storage/hiveStorage.test.ts +0 -38
- package/packages/core/src/storage/schema.ts +0 -689
- package/packages/core/src/storage/storage.test.ts +0 -37
- package/packages/core/src/swarm/AgentBus.ts +0 -460
- package/packages/core/src/swarm/EventBus.ts +0 -169
- package/packages/core/src/swarm/WorkerPool.ts +0 -236
- package/packages/core/src/tools/bridge-events.ts +0 -26
- package/packages/core/src/tools/canvas/index.ts +0 -375
- package/packages/core/src/tools/codebridge/index.ts +0 -342
- package/packages/core/src/tools/meeting/index.ts +0 -353
- package/packages/core/src/tools/projects/index.ts +0 -37
- package/packages/core/src/tools/projects/project-create.ts +0 -94
- package/packages/core/src/tools/projects/project-done.ts +0 -66
- package/packages/core/src/tools/projects/project-fail.ts +0 -66
- package/packages/core/src/tools/projects/project-list.ts +0 -96
- package/packages/core/src/tools/projects/project-update.ts +0 -72
- package/packages/core/src/tools/projects/task-create.ts +0 -68
- package/packages/core/src/tools/projects/task-evaluate.ts +0 -93
- package/packages/core/src/tools/projects/task-update.ts +0 -93
- package/packages/core/src/tools/voice/index.ts +0 -104
- package/packages/core/src/tools/web/api-request.test.ts +0 -170
- package/packages/core/src/tools/web/api-request.ts +0 -239
- package/test/setup-db.ts +0 -216
- /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
|
-
#
|
|
1
|
+
# @johpaz/hive-sdk
|
|
2
2
|
|
|
3
|
-
> **Hive Agent Harness SDK** —
|
|
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
|
-
|
|
5
|
+
[](https://www.npmjs.com/package/@johpaz/hive-sdk)
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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,
|
|
21
|
-
- **
|
|
22
|
-
- **
|
|
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**:
|
|
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-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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/"
|
package/docs/API-AGENTS.md
CHANGED
|
@@ -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;
|
|
31
|
-
provider?:
|
|
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-
|
|
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
|
|
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
|
-
|
|
233
|
-
|
|
234
|
-
| Categoría | Descripción |
|
|
235
|
-
|
|
236
|
-
|
|
|
237
|
-
| web | web_search
|
|
238
|
-
|
|
|
239
|
-
|
|
|
240
|
-
|
|
|
241
|
-
|
|
|
242
|
-
|
|
|
243
|
-
|
|
|
244
|
-
|
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
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
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
|
273
|
-
|
|
274
|
-
|
|
|
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-
|
|
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 (
|
|
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
|
|
120
|
-
const pad = new Scratchpad(db);
|
|
118
|
+
const pad = new Scratchpad();
|
|
121
119
|
|
|
122
|
-
|
|
123
|
-
pad.
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
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
|
-
|
|
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
|
|
149
|
-
const guard = new EthicsGuard(db);
|
|
143
|
+
const guard = new EthicsGuard();
|
|
150
144
|
|
|
151
|
-
//
|
|
152
|
-
const
|
|
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
|
-
|
|
156
|
-
const prompt = guard.injectIntoPrompt(
|
|
157
|
-
"Eres un asistente.",
|
|
158
|
-
rules
|
|
159
|
-
);
|
|
148
|
+
const prompt = guard.injectIntoPrompt("Eres un asistente.", rules);
|
|
160
149
|
|
|
161
|
-
|
|
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-
|
|
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-
|
|
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 (
|
|
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
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
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
|
-
//
|
|
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
|
|
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
|
-
|
|
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 {
|
|
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
|
|
380
|
-
const db = getTestDb();
|
|
404
|
+
const agents = await col<AgentDoc>("agents");
|
|
381
405
|
|
|
382
|
-
const
|
|
383
|
-
const
|
|
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
|
-
|
|
411
|
+
// Escritura con concurrencia optimista
|
|
412
|
+
await agents.put(agentId, { ...one.doc, status: "idle" }, { expectedVersion: one.version });
|
|
386
413
|
```
|
|
387
414
|
|
|
388
|
-
|
|
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
|
-
```
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
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
|