@johpaz/hive-sdk 0.1.6 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +441 -0
- package/README.md +21 -3
- package/package.json +27 -5
- package/packages/core/src/agent/acceptance-checks.ts +9 -9
- package/packages/core/src/agent/agent-catalog.ts +82 -25
- package/packages/core/src/agent/agent-loop.ts +115 -26
- package/packages/core/src/agent/capability-search.ts +2 -2
- package/packages/core/src/agent/catalog-selector.ts +4 -4
- package/packages/core/src/agent/compaction.ts +30 -10
- package/packages/core/src/agent/context-compiler.ts +63 -36
- package/packages/core/src/agent/conversation-store.ts +167 -9
- package/packages/core/src/agent/curator.ts +16 -7
- package/packages/core/src/agent/delegation-runtime.ts +5 -5
- package/packages/core/src/agent/goal-runner.ts +9 -9
- package/packages/core/src/agent/index.ts +1 -0
- package/packages/core/src/agent/llm-client.ts +98 -37
- package/packages/core/src/agent/llm-providers/anthropic.ts +4 -4
- package/packages/core/src/agent/llm-providers/deepseek.ts +1 -1
- package/packages/core/src/agent/llm-providers/gemini.ts +4 -4
- package/packages/core/src/agent/llm-providers/groq.ts +1 -1
- package/packages/core/src/agent/llm-providers/hiveagents.ts +3 -3
- package/packages/core/src/agent/llm-providers/interface.ts +2 -2
- package/packages/core/src/agent/llm-providers/kimi.ts +1 -1
- package/packages/core/src/agent/llm-providers/minimax.ts +1 -1
- package/packages/core/src/agent/llm-providers/mistral.ts +1 -1
- package/packages/core/src/agent/llm-providers/modelscope.ts +1 -1
- package/packages/core/src/agent/llm-providers/nvidia.ts +40 -1
- package/packages/core/src/agent/llm-providers/ollama.ts +4 -4
- package/packages/core/src/agent/llm-providers/openai-compat-base.ts +47 -7
- package/packages/core/src/agent/llm-providers/openai.ts +1 -1
- package/packages/core/src/agent/llm-providers/opencode-go.ts +1 -1
- package/packages/core/src/agent/llm-providers/openrouter.ts +1 -1
- package/packages/core/src/agent/llm-providers/qwen.ts +1 -1
- package/packages/core/src/agent/llm-providers/z-ai.ts +1 -1
- package/packages/core/src/agent/mcp-result-normalizer.ts +192 -0
- package/packages/core/src/agent/playbook-selector.ts +22 -7
- package/packages/core/src/agent/prompt-builder.ts +5 -5
- package/packages/core/src/agent/proof-packet.ts +5 -5
- package/packages/core/src/agent/providers/index.ts +39 -4
- package/packages/core/src/agent/realtime-providers/gemini-live.ts +238 -0
- package/packages/core/src/agent/realtime-providers/index.ts +29 -0
- package/packages/core/src/agent/realtime-providers/interface.ts +108 -0
- package/packages/core/src/agent/reflector.ts +38 -15
- package/packages/core/src/agent/run-store.ts +8 -8
- package/packages/core/src/agent/service.ts +10 -10
- package/packages/core/src/agent/skill-selector.ts +6 -6
- package/packages/core/src/agent/thread-id.ts +71 -0
- package/packages/core/src/agent/thread-store.ts +293 -0
- package/packages/core/src/agent/tool-selector.ts +9 -5
- package/packages/core/src/agent/tracer.ts +5 -5
- package/packages/core/src/api/createAgent.ts +67 -2
- package/packages/core/src/artifacts/index.ts +15 -0
- package/packages/core/src/artifacts/store.ts +161 -5
- package/packages/core/src/canvas/emitter.ts +2 -2
- package/packages/core/src/canvas/index.ts +9 -0
- package/packages/core/src/channels/telegram.ts +1 -1
- package/packages/core/src/channels/webchat.ts +1 -1
- package/packages/core/src/config/loader.ts +14 -5
- package/packages/core/src/ethics/EthicsGuard.ts +7 -1
- package/packages/core/src/events/agent-bus.ts +3 -3
- package/packages/core/src/events/channel-narration.ts +3 -3
- package/packages/core/src/events/event-bus.ts +1 -1
- package/packages/core/src/events/index.ts +18 -0
- package/packages/core/src/events/narration.ts +3 -3
- package/packages/core/src/events/tool-narration.ts +4 -0
- package/packages/core/src/gateway/channel-notify.ts +103 -6
- package/packages/core/src/gateway/delegation-groups.ts +4 -4
- package/packages/core/src/gateway/durable-queue.ts +18 -6
- package/packages/core/src/gateway/index.ts +3 -0
- package/packages/core/src/gateway/job-store.ts +11 -5
- package/packages/core/src/gateway/notification-inbox.ts +2 -2
- package/packages/core/src/gateway/server.ts +2 -2
- package/packages/core/src/harness/executors.ts +493 -0
- package/packages/core/src/harness/index.ts +12 -2
- package/packages/core/src/hooks/index.ts +203 -0
- package/packages/core/src/images/index.ts +161 -0
- package/packages/core/src/index.ts +1 -0
- package/packages/core/src/mcp/MCPClient.ts +3 -3
- package/packages/core/src/mcp/hot-reload.ts +5 -5
- package/packages/core/src/mcp/tool-sync.ts +5 -5
- package/packages/core/src/mcp/transports/index.ts +2 -2
- package/packages/core/src/mcp/transports/sse.ts +1 -1
- package/packages/core/src/models/index.ts +36 -0
- package/packages/core/src/multimodal/index.ts +2 -2
- package/packages/core/src/multimodal/vision-service.ts +51 -19
- package/packages/core/src/plugins/loader.ts +4 -1
- package/packages/core/src/resilience/circuit-breaker.ts +16 -5
- package/packages/core/src/resilience/index.ts +13 -0
- package/packages/core/src/resilience/retry.ts +1 -1
- package/packages/core/src/scheduler/CronScheduler.ts +54 -27
- package/packages/core/src/scheduler/cron/expression.ts +165 -0
- package/packages/core/src/scheduler/cron/index.ts +10 -0
- package/packages/core/src/scheduler/cron/job.ts +339 -0
- package/packages/core/src/scheduler/cron/next-run.ts +121 -0
- package/packages/core/src/scheduler/cron/zoned-time.ts +138 -0
- package/packages/core/src/scheduler/index.ts +21 -3
- package/packages/core/src/scheduler/integration.ts +25 -14
- package/packages/core/src/scheduler/types.ts +3 -18
- package/packages/core/src/services/agents.ts +268 -0
- package/packages/core/src/services/cron.ts +257 -0
- package/packages/core/src/services/endpoints.ts +289 -0
- package/packages/core/src/services/ethics.ts +107 -0
- package/packages/core/src/services/images.ts +212 -0
- package/packages/core/src/services/index.ts +112 -0
- package/packages/core/src/services/mcp.ts +201 -0
- package/packages/core/src/services/memory.ts +133 -0
- package/packages/core/src/services/models.ts +179 -0
- package/packages/core/src/services/providers.ts +152 -0
- package/packages/core/src/services/setup.ts +222 -0
- package/packages/core/src/services/skills.ts +241 -0
- package/packages/core/src/services/swarms.ts +307 -0
- package/packages/core/src/services/tools.ts +106 -0
- package/packages/core/src/sessions/index.ts +268 -0
- package/packages/core/src/sessions/resolve.ts +108 -0
- package/packages/core/src/skills/SkillLoader.ts +8 -1
- package/packages/core/src/skills/bundled/artifacts/artifact_reader/SKILL.md +105 -0
- package/packages/core/src/skills/bundled/cron_manager/SKILL.md +21 -11
- package/packages/core/src/skills/bundled/images/image_editor/SKILL.md +120 -0
- package/packages/core/src/skills/bundled/web/browser_automate/SKILL.md +12 -3
- package/packages/core/src/skills/bundled/web/browser_scrape/SKILL.md +22 -7
- package/packages/core/src/skills/bundled-data.generated.ts +110 -12
- package/packages/core/src/storage/bootstrap.ts +107 -12
- package/packages/core/src/storage/causal-events.ts +1 -1
- package/packages/core/src/storage/collections.ts +138 -2
- package/packages/core/src/storage/crypto.ts +35 -4
- package/packages/core/src/storage/hive.ts +1 -1
- package/packages/core/src/storage/hivedb.ts +10 -1
- package/packages/core/src/storage/index.ts +2 -1
- package/packages/core/src/storage/onboarding.ts +61 -45
- package/packages/core/src/storage/reconcile.ts +11 -6
- package/packages/core/src/storage/seed.ts +191 -23
- package/packages/core/src/storage/usage.ts +3 -3
- package/packages/core/src/swarm/AgentExecutor.ts +2 -2
- package/packages/core/src/swarm/Coordinator.ts +8 -8
- package/packages/core/src/swarm/EventBridge.ts +2 -2
- package/packages/core/src/swarm/RoleSwarm.ts +234 -0
- package/packages/core/src/swarm/TaskGraph.ts +2 -2
- package/packages/core/src/swarm/index.ts +7 -0
- package/packages/core/src/swarm/presets/HiveLearnPreset.ts +2 -2
- package/packages/core/src/swarm/presets/ResearchPreset.ts +2 -2
- package/packages/core/src/swarm/strategies/ParallelStrategy.ts +1 -1
- package/packages/core/src/swarm/strategies/PriorityStrategy.ts +3 -3
- package/packages/core/src/swarm/types.ts +3 -18
- package/packages/core/src/tool-runtime/embedded-worker.generated.ts +21 -0
- package/packages/core/src/tool-runtime/index.ts +129 -14
- package/packages/core/src/tools/ToolExecutor.ts +7 -3
- package/packages/core/src/tools/agents/index.ts +18 -60
- package/packages/core/src/tools/cli/index.ts +55 -0
- package/packages/core/src/tools/core/index.ts +52 -4
- package/packages/core/src/tools/cron/index.ts +8 -8
- package/packages/core/src/tools/images/index.ts +130 -0
- package/packages/core/src/tools/index.ts +14 -1
- package/packages/core/src/tools/office/office-escribir-xlsx.ts +2 -1
- package/packages/core/src/tools/office/office-leer-xlsx.ts +2 -1
- package/packages/core/src/tools/office/xlsx-loader.ts +19 -0
- package/packages/core/src/tools/web/artifact-inspect.ts +2 -2
- package/packages/core/src/tools/web/artifact-read.ts +162 -0
- package/packages/core/src/tools/web/browser-backend.ts +141 -44
- package/packages/core/src/tools/web/browser-click.ts +2 -2
- package/packages/core/src/tools/web/browser-extract.ts +2 -2
- package/packages/core/src/tools/web/browser-navigate.ts +2 -2
- package/packages/core/src/tools/web/browser-screenshot.ts +12 -5
- package/packages/core/src/tools/web/browser-script.ts +2 -2
- package/packages/core/src/tools/web/browser-service.ts +63 -384
- package/packages/core/src/tools/web/browser-session.ts +125 -0
- package/packages/core/src/tools/web/browser-type.ts +2 -2
- package/packages/core/src/tools/web/browser-wait.ts +2 -2
- package/packages/core/src/tools/web/computer-use.ts +553 -0
- package/packages/core/src/tools/web/index.ts +8 -1
- package/packages/core/src/tools/web/webview-backend.ts +460 -21
- package/packages/core/src/utils/index.ts +1 -0
- package/packages/core/src/utils/logger.ts +12 -4
- package/packages/core/src/utils/redact-binary.ts +17 -0
- package/packages/core/src/utils/toon.ts +1 -1
- package/packages/core/src/voice/index.ts +6 -6
- package/bun.lock +0 -859
- package/bunfig.toml +0 -9
- package/docs/API-AGENTS.md +0 -367
- package/docs/API-CONTEXT-COMPILER.md +0 -249
- package/docs/API-DAG-SCHEDULER.md +0 -273
- package/docs/API-TOOLS-SKILLS-CHANNELS.md +0 -446
- package/docs/API-WORKERS-EVENTS.md +0 -299
- package/docs/HIVE-HARNESS.md +0 -113
- package/docs/INDEX.md +0 -190
- package/docs/TEMPLATE-HIVE-APP.md +0 -360
- package/packages/cli/package.json +0 -17
- package/packages/cli/src/commands/create-app.test.ts +0 -180
- package/packages/core/package.json +0 -70
- package/packages/core/src/api/createAgent.test.ts +0 -160
- package/packages/core/src/canvas/canvas.test.ts +0 -36
- package/packages/core/src/channels/channels.test.ts +0 -18
- package/packages/core/src/ethics/EthicsGuard.test.ts +0 -108
- package/packages/core/src/gateway/gateway.test.ts +0 -38
- package/packages/core/src/memory/Scratchpad.test.ts +0 -68
- package/packages/core/src/scheduler/scheduler.test.ts +0 -15
- package/packages/core/src/skills/skills.test.ts +0 -62
- package/packages/core/src/swarm/swarm.test.ts +0 -24
- package/packages/core/src/tool-runtime/tool-runtime.test.ts +0 -99
- package/packages/core/src/tools/ToolRegistry.test.ts +0 -98
- package/packages/core/src/tools/api/api-request.test.ts +0 -164
- package/packages/core/src/tools/web/browser-service.test.ts +0 -83
- package/packages/core/src/workers/workers.test.ts +0 -41
- package/scripts/bump-version.ts +0 -248
- package/scripts/generate-skill-bundle.ts +0 -108
- package/test/acceptance-checks.test.ts +0 -403
- package/test/agent-loop-terminal-synthesis.test.ts +0 -32
- package/test/browser-backend.test.ts +0 -308
- package/test/catalog-agents-stay-enabled.test.ts +0 -117
- package/test/causal-events.test.ts +0 -117
- package/test/compaction.test.ts +0 -105
- package/test/context-compiler.test.ts +0 -269
- package/test/curator.test.ts +0 -130
- package/test/durable-queue.test.ts +0 -114
- package/test/harness-barrel.test.ts +0 -64
- package/test/hive-helpers.test.ts +0 -130
- package/test/hivedb-search.test.ts +0 -189
- package/test/internal-turns.test.ts +0 -166
- package/test/job-idempotency.test.ts +0 -68
- package/test/job-retry-backoff.test.ts +0 -184
- package/test/job-store.test.ts +0 -381
- package/test/llm-retry.test.ts +0 -97
- package/test/memory-perf.test.ts +0 -774
- package/test/minimal-loadout.test.ts +0 -78
- package/test/model-catalog.test.ts +0 -105
- package/test/preload.ts +0 -12
- package/test/reflector.test.ts +0 -320
- package/test/retention-cap.test.ts +0 -91
- package/test/retired-capabilities-pruned.test.ts +0 -192
- package/test/run-store.test.ts +0 -355
- package/test/scratchpad.test.ts +0 -74
- package/test/secrets-durability.test.ts +0 -119
- package/test/seed-model-reseed.test.ts +0 -155
- package/test/setup-agent-seed.test.ts +0 -264
- package/test/tool-inventory.test.ts +0 -65
- package/test/tool-runtime.test.ts +0 -258
- package/test/tool-selector-runtime-tools.test.ts +0 -117
- package/test/toon.test.ts +0 -429
- package/tsconfig.json +0 -42
|
@@ -1,360 +0,0 @@
|
|
|
1
|
-
# Template `hive-app` — Documentación Completa
|
|
2
|
-
|
|
3
|
-
El template `hive-app` genera una **aplicación harness completa** lista para ejecutar. Incluye gateway HTTP/WebSocket, agente coordinador, configuración de canales, base de datos HiveDB, y deployment con Docker.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Generar una app
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
hives create-app my-hive
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
Esto crea el directorio `my-hive/` con la estructura completa.
|
|
14
|
-
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
## Estructura generada
|
|
18
|
-
|
|
19
|
-
```
|
|
20
|
-
my-hive/
|
|
21
|
-
├── package.json # Dependencias y scripts
|
|
22
|
-
├── hive.config.ts # Configuración del harness
|
|
23
|
-
├── docker-compose.yml # Deployment con Docker
|
|
24
|
-
├── .env.example # Variables de entorno de ejemplo
|
|
25
|
-
├── .gitignore # Archivos ignorados por git
|
|
26
|
-
└── src/
|
|
27
|
-
├── main.ts # Entry point — arranca gateway + agente
|
|
28
|
-
└── agents/
|
|
29
|
-
└── coordinator.ts # Definición del agente coordinador
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
---
|
|
33
|
-
|
|
34
|
-
## Archivos y opciones
|
|
35
|
-
|
|
36
|
-
### `package.json`
|
|
37
|
-
|
|
38
|
-
```json
|
|
39
|
-
{
|
|
40
|
-
"name": "my-hive",
|
|
41
|
-
"version": "0.1.0",
|
|
42
|
-
"type": "module",
|
|
43
|
-
"scripts": {
|
|
44
|
-
"dev": "bun run src/main.ts",
|
|
45
|
-
"start": "bun run src/main.ts",
|
|
46
|
-
"build": "bun build src/main.ts --outdir dist --target bun"
|
|
47
|
-
},
|
|
48
|
-
"dependencies": {
|
|
49
|
-
"@johpaz/hive-sdk": "latest"
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
| Script | Comando | Descripción |
|
|
55
|
-
|--------|---------|-------------|
|
|
56
|
-
| `dev` | `bun run src/main.ts` | Ejecutar en desarrollo |
|
|
57
|
-
| `start` | `bun run src/main.ts` | Ejecutar en producción |
|
|
58
|
-
| `build` | `bun build ...` | Compilar a `dist/` |
|
|
59
|
-
|
|
60
|
-
---
|
|
61
|
-
|
|
62
|
-
### `hive.config.ts`
|
|
63
|
-
|
|
64
|
-
Configuración central del harness.
|
|
65
|
-
|
|
66
|
-
```typescript
|
|
67
|
-
import type { Config } from "@johpaz/hive-sdk";
|
|
68
|
-
|
|
69
|
-
export default {
|
|
70
|
-
name: "my-hive",
|
|
71
|
-
gateway: {
|
|
72
|
-
host: process.env.HIVE_HOST ?? "127.0.0.1",
|
|
73
|
-
port: Number(process.env.HIVE_PORT ?? 18790),
|
|
74
|
-
},
|
|
75
|
-
channels: {
|
|
76
|
-
webchat: { enabled: true }, // Siempre habilitado
|
|
77
|
-
telegram: { enabled: false }, // Requiere TELEGRAM_BOT_TOKEN
|
|
78
|
-
discord: { enabled: false }, // Requiere DISCORD_BOT_TOKEN
|
|
79
|
-
whatsapp: { enabled: false }, // Requiere configuración adicional
|
|
80
|
-
slack: { enabled: false }, // Requiere SLACK_BOT_TOKEN
|
|
81
|
-
},
|
|
82
|
-
database: {
|
|
83
|
-
path: process.env.HIVE_DATA_DIR ?? "./data/hive.db",
|
|
84
|
-
},
|
|
85
|
-
} satisfies Config;
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
#### Opciones de configuración
|
|
89
|
-
|
|
90
|
-
| Opción | Tipo | Default | Descripción |
|
|
91
|
-
|--------|------|---------|-------------|
|
|
92
|
-
| `name` | `string` | `"my-hive"` | Nombre de la aplicación |
|
|
93
|
-
| `gateway.host` | `string` | `"127.0.0.1"` | Host del gateway |
|
|
94
|
-
| `gateway.port` | `number` | `18790` | Puerto del gateway |
|
|
95
|
-
| `channels.webchat.enabled` | `boolean` | `true` | Canal webchat integrado |
|
|
96
|
-
| `channels.telegram.enabled` | `boolean` | `false` | Bot de Telegram |
|
|
97
|
-
| `channels.discord.enabled` | `boolean` | `false` | Bot de Discord |
|
|
98
|
-
| `channels.whatsapp.enabled` | `boolean` | `false` | Bot de WhatsApp |
|
|
99
|
-
| `channels.slack.enabled` | `boolean` | `false` | Bot de Slack |
|
|
100
|
-
| `database.path` | `string` | `"./data/hive"` | Ruta de la base de datos HiveDB |
|
|
101
|
-
|
|
102
|
-
---
|
|
103
|
-
|
|
104
|
-
### `src/main.ts`
|
|
105
|
-
|
|
106
|
-
Entry point de la aplicación. Realiza:
|
|
107
|
-
|
|
108
|
-
1. Inicializa la base de datos (`ensureHiveDb`, que además siembra el catálogo)
|
|
109
|
-
2. Crea el agente coordinador (`createAgent`)
|
|
110
|
-
3. Inicializa el ChannelManager
|
|
111
|
-
4. Arranca el gateway (`startGateway`)
|
|
112
|
-
5. Maneja shutdown graceful (`SIGINT`)
|
|
113
|
-
|
|
114
|
-
```typescript
|
|
115
|
-
import {
|
|
116
|
-
createAgent,
|
|
117
|
-
startGateway,
|
|
118
|
-
ensureHiveDb,
|
|
119
|
-
ChannelManager,
|
|
120
|
-
logger,
|
|
121
|
-
} from "@johpaz/hive-sdk";
|
|
122
|
-
import config from "../hive.config.ts";
|
|
123
|
-
|
|
124
|
-
const log = logger.child("app");
|
|
125
|
-
|
|
126
|
-
async function main() {
|
|
127
|
-
log.info(`Starting my-hive...`);
|
|
128
|
-
|
|
129
|
-
await ensureHiveDb();
|
|
130
|
-
|
|
131
|
-
const agent = await createAgent({
|
|
132
|
-
name: "coordinator",
|
|
133
|
-
provider: "openai",
|
|
134
|
-
model: "gpt-5.6-luna",
|
|
135
|
-
systemPrompt: "You are a helpful AI assistant...",
|
|
136
|
-
});
|
|
137
|
-
|
|
138
|
-
const channelManager = new ChannelManager();
|
|
139
|
-
// TODO: configure channels from hive.config.ts
|
|
140
|
-
|
|
141
|
-
const gateway = await startGateway({
|
|
142
|
-
host: config.gateway?.host,
|
|
143
|
-
port: config.gateway?.port,
|
|
144
|
-
agentId: "coordinator",
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
log.info(`my-hive is running at http://${gateway.hostname}:${gateway.port}`);
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
main().catch((err) => {
|
|
151
|
-
log.error("Fatal error:", err);
|
|
152
|
-
process.exit(1);
|
|
153
|
-
});
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
#### Personalizar el agente
|
|
157
|
-
|
|
158
|
-
Puedes cambiar el `provider`, `model`, y `systemPrompt`:
|
|
159
|
-
|
|
160
|
-
```typescript
|
|
161
|
-
const agent = await createAgent({
|
|
162
|
-
name: "coordinator",
|
|
163
|
-
provider: "anthropic", // cualquiera de los 16 del catálogo
|
|
164
|
-
model: "claude-3-5-sonnet-20241022",
|
|
165
|
-
systemPrompt: "Tu system prompt personalizado...",
|
|
166
|
-
});
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
#### Añadir tools al agente
|
|
170
|
-
|
|
171
|
-
```typescript
|
|
172
|
-
import { defineTool } from "@johpaz/hive-sdk";
|
|
173
|
-
|
|
174
|
-
const searchTool = defineTool({
|
|
175
|
-
name: "search",
|
|
176
|
-
description: "Search the web",
|
|
177
|
-
execute: async (args: { query: string }) => {
|
|
178
|
-
// Implementation
|
|
179
|
-
return { results: [] };
|
|
180
|
-
},
|
|
181
|
-
});
|
|
182
|
-
|
|
183
|
-
const agent = await createAgent({
|
|
184
|
-
name: "coordinator",
|
|
185
|
-
provider: "openai",
|
|
186
|
-
model: "gpt-5.6-luna",
|
|
187
|
-
tools: [searchTool],
|
|
188
|
-
});
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
---
|
|
192
|
-
|
|
193
|
-
### `src/agents/coordinator.ts`
|
|
194
|
-
|
|
195
|
-
Definición standalone del agente coordinador. Puedes importarlo desde `main.ts` o usarlo directamente.
|
|
196
|
-
|
|
197
|
-
```typescript
|
|
198
|
-
import { createAgent } from "@johpaz/hive-sdk";
|
|
199
|
-
|
|
200
|
-
export const coordinatorAgent = await createAgent({
|
|
201
|
-
name: "coordinator",
|
|
202
|
-
provider: "openai",
|
|
203
|
-
model: "gpt-5.6-luna",
|
|
204
|
-
systemPrompt: "You are the coordinator agent...",
|
|
205
|
-
});
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
---
|
|
209
|
-
|
|
210
|
-
### `docker-compose.yml`
|
|
211
|
-
|
|
212
|
-
Deployment containerizado.
|
|
213
|
-
|
|
214
|
-
```yaml
|
|
215
|
-
services:
|
|
216
|
-
app:
|
|
217
|
-
image: oven/bun:latest
|
|
218
|
-
working_dir: /app
|
|
219
|
-
volumes:
|
|
220
|
-
- .:/app
|
|
221
|
-
- hive-data:/app/data
|
|
222
|
-
ports:
|
|
223
|
-
- "${HIVE_PORT:-18790}:18790"
|
|
224
|
-
environment:
|
|
225
|
-
- HIVE_HOST=0.0.0.0
|
|
226
|
-
- HIVE_PORT=18790
|
|
227
|
-
- HIVE_DATA_DIR=/app/data
|
|
228
|
-
- OPENAI_API_KEY=${OPENAI_API_KEY}
|
|
229
|
-
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
|
|
230
|
-
command: ["bun", "run", "src/main.ts"]
|
|
231
|
-
restart: unless-stopped
|
|
232
|
-
|
|
233
|
-
volumes:
|
|
234
|
-
hive-data:
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
#### Deployment
|
|
238
|
-
|
|
239
|
-
```bash
|
|
240
|
-
# Copiar variables de entorno
|
|
241
|
-
cp .env.example .env
|
|
242
|
-
# Editar .env con tus API keys
|
|
243
|
-
|
|
244
|
-
# Levantar con Docker
|
|
245
|
-
docker compose up -d
|
|
246
|
-
|
|
247
|
-
# Ver logs
|
|
248
|
-
docker compose logs -f
|
|
249
|
-
```
|
|
250
|
-
|
|
251
|
-
---
|
|
252
|
-
|
|
253
|
-
### `.env.example`
|
|
254
|
-
|
|
255
|
-
Variables de entorno disponibles:
|
|
256
|
-
|
|
257
|
-
```bash
|
|
258
|
-
# Hive Harness Configuration
|
|
259
|
-
HIVE_HOST=127.0.0.1
|
|
260
|
-
HIVE_PORT=18790
|
|
261
|
-
HIVE_DATA_DIR=./data
|
|
262
|
-
|
|
263
|
-
# LLM Providers
|
|
264
|
-
OPENAI_API_KEY=sk-...
|
|
265
|
-
ANTHROPIC_API_KEY=sk-ant-...
|
|
266
|
-
GOOGLE_API_KEY=...
|
|
267
|
-
|
|
268
|
-
# Channels (enable as needed)
|
|
269
|
-
TELEGRAM_BOT_TOKEN=
|
|
270
|
-
DISCORD_BOT_TOKEN=
|
|
271
|
-
SLACK_BOT_TOKEN=
|
|
272
|
-
|
|
273
|
-
# Logging
|
|
274
|
-
LOG_LEVEL=info
|
|
275
|
-
```
|
|
276
|
-
|
|
277
|
-
| Variable | Requerida | Descripción |
|
|
278
|
-
|----------|-----------|-------------|
|
|
279
|
-
| `HIVE_HOST` | No | Host del gateway |
|
|
280
|
-
| `HIVE_PORT` | No | Puerto del gateway |
|
|
281
|
-
| `HIVE_HOME` | No | Directorio de datos (HiveDB en `<HIVE_HOME>/data`) |
|
|
282
|
-
| `OPENAI_API_KEY` | Sí* | API key de OpenAI |
|
|
283
|
-
| `ANTHROPIC_API_KEY` | Sí* | API key de Anthropic |
|
|
284
|
-
| `GOOGLE_API_KEY` | Sí* | API key de Gemini |
|
|
285
|
-
| `TELEGRAM_BOT_TOKEN` | No | Token del bot de Telegram |
|
|
286
|
-
| `DISCORD_BOT_TOKEN` | No | Token del bot de Discord |
|
|
287
|
-
| `SLACK_BOT_TOKEN` | No | Token del bot de Slack |
|
|
288
|
-
| `LOG_LEVEL` | No | `debug` \| `info` \| `warn` \| `error` |
|
|
289
|
-
|
|
290
|
-
\* Al menos una API key de LLM es requerida.
|
|
291
|
-
|
|
292
|
-
---
|
|
293
|
-
|
|
294
|
-
## Personalización avanzada
|
|
295
|
-
|
|
296
|
-
### Añadir canales
|
|
297
|
-
|
|
298
|
-
```typescript
|
|
299
|
-
// src/main.ts
|
|
300
|
-
import { TelegramChannel, DiscordChannel } from "@johpaz/hive-sdk";
|
|
301
|
-
|
|
302
|
-
const channelManager = new ChannelManager(config);
|
|
303
|
-
|
|
304
|
-
if (config.channels.telegram.enabled) {
|
|
305
|
-
channelManager.register("telegram", new TelegramChannel({
|
|
306
|
-
botToken: process.env.TELEGRAM_BOT_TOKEN!,
|
|
307
|
-
}));
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
if (config.channels.discord.enabled) {
|
|
311
|
-
channelManager.register("discord", new DiscordChannel({
|
|
312
|
-
botToken: process.env.DISCORD_BOT_TOKEN!,
|
|
313
|
-
}));
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
await channelManager.initialize();
|
|
317
|
-
```
|
|
318
|
-
|
|
319
|
-
### Añadir workers especializados
|
|
320
|
-
|
|
321
|
-
```bash
|
|
322
|
-
cd my-hive
|
|
323
|
-
hives add-worker researcher
|
|
324
|
-
hives add-worker coder
|
|
325
|
-
```
|
|
326
|
-
|
|
327
|
-
Esto genera `src/workers/researcher.worker.ts` y `src/workers/coder.worker.ts`.
|
|
328
|
-
|
|
329
|
-
### Añadir tools
|
|
330
|
-
|
|
331
|
-
```bash
|
|
332
|
-
cd my-hive
|
|
333
|
-
hives add-tool search-docs
|
|
334
|
-
```
|
|
335
|
-
|
|
336
|
-
Genera `src/tools/search-docs.ts`.
|
|
337
|
-
|
|
338
|
-
### Añadir skills
|
|
339
|
-
|
|
340
|
-
```bash
|
|
341
|
-
cd my-hive
|
|
342
|
-
hives add-skill onboarding
|
|
343
|
-
```
|
|
344
|
-
|
|
345
|
-
Genera `src/skills/onboarding.ts`.
|
|
346
|
-
|
|
347
|
-
---
|
|
348
|
-
|
|
349
|
-
## Tests del template
|
|
350
|
-
|
|
351
|
-
El template incluye tests para verificar que la estructura se genera correctamente.
|
|
352
|
-
|
|
353
|
-
```bash
|
|
354
|
-
cd my-hive
|
|
355
|
-
bun test
|
|
356
|
-
```
|
|
357
|
-
|
|
358
|
-
---
|
|
359
|
-
|
|
360
|
-
*Documentación Hive SDK v0.0.17*
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@hive/cli",
|
|
3
|
-
"version": "0.1.6",
|
|
4
|
-
"description": "Hive CLI — init, run, test, trace",
|
|
5
|
-
"license": "MIT",
|
|
6
|
-
"type": "module",
|
|
7
|
-
"bin": {
|
|
8
|
-
"hives": "./src/index.ts"
|
|
9
|
-
},
|
|
10
|
-
"main": "./src/index.ts",
|
|
11
|
-
"exports": {
|
|
12
|
-
".": "./src/index.ts"
|
|
13
|
-
},
|
|
14
|
-
"dependencies": {
|
|
15
|
-
"@hive/core": "workspace:*"
|
|
16
|
-
}
|
|
17
|
-
}
|
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it, beforeEach, afterEach } from "bun:test";
|
|
2
|
-
import { existsSync, rmSync, readFileSync } from "node:fs";
|
|
3
|
-
import { join } from "node:path";
|
|
4
|
-
import * as process from "node:process";
|
|
5
|
-
|
|
6
|
-
const TEST_DIR = join(process.cwd(), "test-create-app-output");
|
|
7
|
-
|
|
8
|
-
describe("hive create-app", () => {
|
|
9
|
-
beforeEach(() => {
|
|
10
|
-
// Clean up before each test
|
|
11
|
-
if (existsSync(TEST_DIR)) {
|
|
12
|
-
rmSync(TEST_DIR, { recursive: true });
|
|
13
|
-
}
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
afterEach(() => {
|
|
17
|
-
// Clean up after each test
|
|
18
|
-
if (existsSync(TEST_DIR)) {
|
|
19
|
-
rmSync(TEST_DIR, { recursive: true });
|
|
20
|
-
}
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
it("generates a hive-app template with correct structure", async () => {
|
|
24
|
-
const { copyTemplate } = await import("./create-app-utils.ts");
|
|
25
|
-
|
|
26
|
-
copyTemplate(TEST_DIR, { "{{APP_NAME}}": "my-test-app" });
|
|
27
|
-
|
|
28
|
-
// Check all expected files exist
|
|
29
|
-
expect(existsSync(join(TEST_DIR, "package.json"))).toBe(true);
|
|
30
|
-
expect(existsSync(join(TEST_DIR, "hive.config.ts"))).toBe(true);
|
|
31
|
-
expect(existsSync(join(TEST_DIR, "docker-compose.yml"))).toBe(true);
|
|
32
|
-
expect(existsSync(join(TEST_DIR, ".env.example"))).toBe(true);
|
|
33
|
-
expect(existsSync(join(TEST_DIR, ".gitignore"))).toBe(true);
|
|
34
|
-
// Sin README el que corre `hives create-app` queda sin una sola instrucción.
|
|
35
|
-
expect(existsSync(join(TEST_DIR, "README.md"))).toBe(true);
|
|
36
|
-
expect(existsSync(join(TEST_DIR, "src", "main.ts"))).toBe(true);
|
|
37
|
-
expect(existsSync(join(TEST_DIR, "src", "agents", "coordinator.ts"))).toBe(true);
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
it("el README del scaffold lleva el nombre de la app y arranca con los pasos", async () => {
|
|
41
|
-
const { copyTemplate } = await import("./create-app-utils.ts");
|
|
42
|
-
|
|
43
|
-
copyTemplate(TEST_DIR, { "{{APP_NAME}}": "mi-app" });
|
|
44
|
-
|
|
45
|
-
const readme = readFileSync(join(TEST_DIR, "README.md"), "utf-8");
|
|
46
|
-
expect(readme).toContain("# mi-app");
|
|
47
|
-
expect(readme).not.toContain("{{APP_NAME}}");
|
|
48
|
-
expect(readme).toContain("bun install");
|
|
49
|
-
expect(readme).toContain("bun run dev");
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
it("replaces {{APP_NAME}} placeholder in all files", async () => {
|
|
53
|
-
const { copyTemplate } = await import("./create-app-utils.ts");
|
|
54
|
-
|
|
55
|
-
copyTemplate(TEST_DIR, { "{{APP_NAME}}": "my-awesome-app" });
|
|
56
|
-
|
|
57
|
-
const packageJson = readFileSync(join(TEST_DIR, "package.json"), "utf-8");
|
|
58
|
-
expect(packageJson).toContain('"name": "my-awesome-app"');
|
|
59
|
-
|
|
60
|
-
// `Config` no tiene una clave `name`, así que el nombre de la app sólo se
|
|
61
|
-
// sustituye en el comentario de cabecera y en package.json.
|
|
62
|
-
const config = readFileSync(join(TEST_DIR, "hive.config.ts"), "utf-8");
|
|
63
|
-
expect(config).toContain("my-awesome-app");
|
|
64
|
-
|
|
65
|
-
const main = readFileSync(join(TEST_DIR, "src", "main.ts"), "utf-8");
|
|
66
|
-
expect(main).toContain("Starting my-awesome-app...");
|
|
67
|
-
expect(main).toContain("my-awesome-app is running at");
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
it("generates valid package.json", async () => {
|
|
71
|
-
const { copyTemplate } = await import("./create-app-utils.ts");
|
|
72
|
-
|
|
73
|
-
copyTemplate(TEST_DIR, { "{{APP_NAME}}": "test-app" });
|
|
74
|
-
|
|
75
|
-
const packageJson = JSON.parse(readFileSync(join(TEST_DIR, "package.json"), "utf-8"));
|
|
76
|
-
|
|
77
|
-
expect(packageJson.name).toBe("test-app");
|
|
78
|
-
expect(packageJson.version).toBe("0.1.0");
|
|
79
|
-
expect(packageJson.type).toBe("module");
|
|
80
|
-
expect(packageJson.scripts.dev).toBe("bun run src/main.ts");
|
|
81
|
-
expect(packageJson.scripts.build).toBeDefined();
|
|
82
|
-
expect(packageJson.dependencies["@johpaz/hive-sdk"]).toBe("latest");
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
it("generates hive.config.ts with correct defaults", async () => {
|
|
86
|
-
const { copyTemplate } = await import("./create-app-utils.ts");
|
|
87
|
-
|
|
88
|
-
copyTemplate(TEST_DIR, { "{{APP_NAME}}": "config-test" });
|
|
89
|
-
|
|
90
|
-
const config = readFileSync(join(TEST_DIR, "hive.config.ts"), "utf-8");
|
|
91
|
-
|
|
92
|
-
expect(config).toContain('host: process.env.HIVE_HOST ?? "127.0.0.1"');
|
|
93
|
-
expect(config).toContain('port: Number(process.env.HIVE_PORT ?? 18790)');
|
|
94
|
-
expect(config).toContain("webchat: { enabled: true }");
|
|
95
|
-
expect(config).toContain("telegram: { enabled: false }");
|
|
96
|
-
expect(config).toContain("discord: { enabled: false }");
|
|
97
|
-
expect(config).toContain("whatsapp: { enabled: false }");
|
|
98
|
-
expect(config).toContain("slack: { enabled: false }");
|
|
99
|
-
// HiveDB no se configura por `hive.config.ts`: la ruta sale de HIVE_HOME /
|
|
100
|
-
// HIVE_DB_PATH. Una clave `database` acá rompería el `satisfies Config`.
|
|
101
|
-
expect(config).not.toContain("database:");
|
|
102
|
-
expect(config).not.toContain("hive.db");
|
|
103
|
-
expect(config).toContain("satisfies Config");
|
|
104
|
-
});
|
|
105
|
-
|
|
106
|
-
it("generates main.ts with all required imports", async () => {
|
|
107
|
-
const { copyTemplate } = await import("./create-app-utils.ts");
|
|
108
|
-
|
|
109
|
-
copyTemplate(TEST_DIR, { "{{APP_NAME}}": "main-test" });
|
|
110
|
-
|
|
111
|
-
const main = readFileSync(join(TEST_DIR, "src", "main.ts"), "utf-8");
|
|
112
|
-
|
|
113
|
-
expect(main).toContain('from "@johpaz/hive-sdk"');
|
|
114
|
-
expect(main).toContain("startGateway");
|
|
115
|
-
// `initializeDatabase()` desapareció con la capa SQLite: `ensureHiveDb()`
|
|
116
|
-
// abre HiveDB, crea los índices y siembra el catálogo en un solo paso.
|
|
117
|
-
expect(main).toContain("ensureHiveDb");
|
|
118
|
-
expect(main).not.toContain("initializeDatabase");
|
|
119
|
-
expect(main).toContain("ChannelManager");
|
|
120
|
-
expect(main).toContain("logger");
|
|
121
|
-
expect(main).toContain('import config from "../hive.config.ts"');
|
|
122
|
-
expect(main).toContain("await ensureHiveDb()");
|
|
123
|
-
expect(main).toContain('await startGateway({');
|
|
124
|
-
expect(main).toContain('process.on("SIGINT"');
|
|
125
|
-
// El coordinador se define una sola vez, en su módulo, y main.ts lo usa —
|
|
126
|
-
// antes el template creaba uno propio y dejaba coordinator.ts huérfano.
|
|
127
|
-
expect(main).toContain('from "./agents/coordinator.ts"');
|
|
128
|
-
expect(main).toContain("agentId: coordinatorAgent.id");
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
it("generates coordinator agent with correct config", async () => {
|
|
132
|
-
const { copyTemplate } = await import("./create-app-utils.ts");
|
|
133
|
-
|
|
134
|
-
copyTemplate(TEST_DIR, { "{{APP_NAME}}": "agent-test" });
|
|
135
|
-
|
|
136
|
-
const agent = readFileSync(join(TEST_DIR, "src", "agents", "coordinator.ts"), "utf-8");
|
|
137
|
-
|
|
138
|
-
expect(agent).toContain('import { createAgent } from "@johpaz/hive-sdk"');
|
|
139
|
-
expect(agent).toContain('name: "coordinator"');
|
|
140
|
-
expect(agent).toContain('provider: "openai"');
|
|
141
|
-
// El modelo del scaffold tiene que existir en SEED_DATA.models, o el primer
|
|
142
|
-
// `bun run dev` de un usuario nuevo muere con "no está en el catálogo".
|
|
143
|
-
expect(agent).toContain('model: "gpt-5.6-luna"');
|
|
144
|
-
expect(agent).toContain("export const coordinatorAgent");
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
it("generates docker-compose.yml with correct ports", async () => {
|
|
148
|
-
const { copyTemplate } = await import("./create-app-utils.ts");
|
|
149
|
-
|
|
150
|
-
copyTemplate(TEST_DIR, { "{{APP_NAME}}": "docker-test" });
|
|
151
|
-
|
|
152
|
-
const docker = readFileSync(join(TEST_DIR, "docker-compose.yml"), "utf-8");
|
|
153
|
-
|
|
154
|
-
expect(docker).toContain('image: oven/bun:latest');
|
|
155
|
-
expect(docker).toContain('"${HIVE_PORT:-18790}:18790"');
|
|
156
|
-
expect(docker).toContain('HIVE_HOST=0.0.0.0');
|
|
157
|
-
expect(docker).toContain('HIVE_PORT=18790');
|
|
158
|
-
expect(docker).toContain('command: ["bun", "run", "src/main.ts"]');
|
|
159
|
-
expect(docker).toContain('restart: unless-stopped');
|
|
160
|
-
});
|
|
161
|
-
|
|
162
|
-
it("generates .env.example with all required variables", async () => {
|
|
163
|
-
const { copyTemplate } = await import("./create-app-utils.ts");
|
|
164
|
-
|
|
165
|
-
copyTemplate(TEST_DIR, { "{{APP_NAME}}": "env-test" });
|
|
166
|
-
|
|
167
|
-
const env = readFileSync(join(TEST_DIR, ".env.example"), "utf-8");
|
|
168
|
-
|
|
169
|
-
expect(env).toContain("HIVE_HOST=");
|
|
170
|
-
expect(env).toContain("HIVE_PORT=");
|
|
171
|
-
expect(env).toContain("HIVE_HOME=");
|
|
172
|
-
expect(env).toContain("OPENAI_API_KEY=");
|
|
173
|
-
expect(env).toContain("ANTHROPIC_API_KEY=");
|
|
174
|
-
expect(env).toContain("GOOGLE_API_KEY=");
|
|
175
|
-
expect(env).toContain("TELEGRAM_BOT_TOKEN=");
|
|
176
|
-
expect(env).toContain("DISCORD_BOT_TOKEN=");
|
|
177
|
-
expect(env).toContain("SLACK_BOT_TOKEN=");
|
|
178
|
-
expect(env).toContain("LOG_LEVEL=");
|
|
179
|
-
});
|
|
180
|
-
});
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@hive/core",
|
|
3
|
-
"version": "0.1.6",
|
|
4
|
-
"description": "Hive Core — runtime de agentes con context engineering, catálogo de modelos y HiveDB",
|
|
5
|
-
"license": "MIT",
|
|
6
|
-
"type": "module",
|
|
7
|
-
"main": "./src/index.ts",
|
|
8
|
-
"types": "./src/index.ts",
|
|
9
|
-
"exports": {
|
|
10
|
-
".": "./src/index.ts",
|
|
11
|
-
"./agent": "./src/agent/index.ts",
|
|
12
|
-
"./agent/providers": "./src/agent/providers/index.ts",
|
|
13
|
-
"./tools": "./src/tools/index.ts",
|
|
14
|
-
"./skills": "./src/skills/index.ts",
|
|
15
|
-
"./storage": "./src/storage/index.ts",
|
|
16
|
-
"./swarm": "./src/swarm/index.ts",
|
|
17
|
-
"./swarm/strategies": "./src/swarm/strategies/index.ts",
|
|
18
|
-
"./swarm/presets": "./src/swarm/presets/index.ts",
|
|
19
|
-
"./scheduler": "./src/scheduler/index.ts",
|
|
20
|
-
"./workers": "./src/workers/index.ts",
|
|
21
|
-
"./events": "./src/events/event-bus.ts",
|
|
22
|
-
"./ethics": "./src/ethics/index.ts",
|
|
23
|
-
"./canvas": "./src/canvas/index.ts",
|
|
24
|
-
"./config": "./src/config/index.ts",
|
|
25
|
-
"./mcp": "./src/mcp/index.ts",
|
|
26
|
-
"./mcp/transports": "./src/mcp/transports/index.ts",
|
|
27
|
-
"./memory": "./src/memory/index.ts",
|
|
28
|
-
"./multimodal": "./src/multimodal/index.ts",
|
|
29
|
-
"./security": "./src/security/index.ts",
|
|
30
|
-
"./state": "./src/state/index.ts",
|
|
31
|
-
"./utils": "./src/utils/index.ts",
|
|
32
|
-
"./gateway": "./src/gateway/index.ts",
|
|
33
|
-
"./api": "./src/api/index.ts",
|
|
34
|
-
"./harness": "./src/harness/index.ts"
|
|
35
|
-
},
|
|
36
|
-
"dependencies": {
|
|
37
|
-
"@johpaz/hive-db": "^0.4.0",
|
|
38
|
-
"@anthropic-ai/sdk": "^0.74.0",
|
|
39
|
-
"@google/genai": "^1.43.0",
|
|
40
|
-
"@modelcontextprotocol/sdk": "^1.26.0",
|
|
41
|
-
"@sapphire/snowflake": "^3.5.5",
|
|
42
|
-
"@slack/bolt": "^4.7.2",
|
|
43
|
-
"@whiskeysockets/baileys": "7.0.0-rc11",
|
|
44
|
-
"async-mutex": "^0.5.0",
|
|
45
|
-
"cron-parser": "^5.5.0",
|
|
46
|
-
"croner": "^10.0.1",
|
|
47
|
-
"discord.js": "^14.26.4",
|
|
48
|
-
"docx": "^9.6.1",
|
|
49
|
-
"grammy": "^1.42.0",
|
|
50
|
-
"groq-sdk": "^0.37.0",
|
|
51
|
-
"jsonwebtoken": "^9.0.3",
|
|
52
|
-
"jszip": "^3.10.1",
|
|
53
|
-
"pdf-lib": "^1.17.1",
|
|
54
|
-
"mammoth": "^1.12.0",
|
|
55
|
-
"ollama": "^0.6.3",
|
|
56
|
-
"openai": "^6.18.0",
|
|
57
|
-
"pdfjs-dist": "^5.6.205",
|
|
58
|
-
"pptxgenjs": "^4.0.1",
|
|
59
|
-
"qrcode-terminal": "^0.12.0",
|
|
60
|
-
"toon-format-parser": "^1.1.0",
|
|
61
|
-
"xlsx": "^0.18.5",
|
|
62
|
-
"zod": "^4.4.3"
|
|
63
|
-
},
|
|
64
|
-
"devDependencies": {
|
|
65
|
-
"@types/jsonwebtoken": "^9.0.10"
|
|
66
|
-
},
|
|
67
|
-
"peerDependencies": {
|
|
68
|
-
"typescript": "^5.0.0"
|
|
69
|
-
}
|
|
70
|
-
}
|