@johpaz/hive-sdk 0.0.14 → 0.0.16
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 +64 -0
- package/README.md +280 -0
- package/docs/API-AGENTS.md +316 -0
- package/docs/API-CONTEXT-COMPILER.md +252 -0
- package/docs/API-DAG-SCHEDULER.md +273 -0
- package/docs/API-TOOLS-SKILLS-CHANNELS.md +350 -0
- package/docs/API-WORKERS-EVENTS.md +299 -0
- package/docs/INDEX.md +190 -0
- package/docs/README.md +161 -0
- package/docs/TEMPLATE-HIVE-APP.md +360 -0
- package/package.json +60 -104
- package/packages/cli/bin/hive +2 -0
- package/packages/cli/package.json +17 -0
- package/packages/cli/src/commands/add-skill.ts +42 -0
- package/packages/cli/src/commands/add-tool.ts +45 -0
- package/packages/cli/src/commands/add-worker.ts +49 -0
- package/packages/cli/src/commands/create-app-utils.ts +32 -0
- package/packages/cli/src/commands/create-app.test.ts +151 -0
- package/packages/cli/src/commands/create-app.ts +35 -0
- package/packages/cli/src/commands/init.ts +56 -0
- package/packages/cli/src/commands/run.ts +45 -0
- package/packages/cli/src/commands/test.ts +42 -0
- package/packages/cli/src/commands/trace.ts +55 -0
- package/packages/cli/src/index.ts +59 -0
- package/packages/cli/templates/hive-app/.env.example +17 -0
- package/packages/cli/templates/hive-app/docker-compose.yml +20 -0
- package/packages/cli/templates/hive-app/hive.config.ts +19 -0
- package/packages/cli/templates/hive-app/package.json +16 -0
- package/packages/cli/templates/hive-app/src/agents/coordinator.ts +9 -0
- package/packages/cli/templates/hive-app/src/main.ts +56 -0
- package/packages/core/package.json +58 -0
- package/packages/core/src/ace/Curator.ts +158 -0
- package/packages/core/src/ace/Reflector.ts +200 -0
- package/packages/core/src/ace/Tracer.ts +100 -0
- package/packages/core/src/ace/index.ts +4 -0
- package/packages/core/src/agent/AgentRunner.ts +699 -0
- package/packages/core/src/agent/Compaction.ts +221 -0
- package/packages/core/src/agent/ContextCompiler.ts +567 -0
- package/packages/core/src/agent/ContextGuard.ts +91 -0
- package/packages/core/src/agent/ConversationStore.ts +244 -0
- package/packages/core/src/agent/Hooks.ts +166 -0
- package/packages/core/src/agent/NativeTools.ts +31 -0
- package/packages/core/src/agent/PromptBuilder.ts +169 -0
- package/packages/core/src/agent/Service.ts +267 -0
- package/packages/core/src/agent/StuckLoop.ts +133 -0
- package/packages/core/src/agent/index.ts +12 -0
- package/packages/core/src/agent/providers/LLMClient.ts +149 -0
- package/packages/core/src/agent/providers/anthropic.ts +212 -0
- package/packages/core/src/agent/providers/gemini.ts +215 -0
- package/packages/core/src/agent/providers/index.ts +199 -0
- package/packages/core/src/agent/providers/interface.ts +195 -0
- package/packages/core/src/agent/providers/ollama.ts +175 -0
- package/packages/core/src/agent/providers/openai-compat.ts +231 -0
- package/packages/core/src/agent/selectors/PlaybookSelector.ts +147 -0
- package/packages/core/src/agent/selectors/SkillSelector.ts +478 -0
- package/packages/core/src/agent/selectors/ToolSelector.ts +577 -0
- package/packages/core/src/agent/selectors/index.ts +6 -0
- package/packages/core/src/api/createAgent.test.ts +48 -0
- package/packages/core/src/api/createAgent.ts +122 -0
- package/packages/core/src/api/index.ts +2 -0
- package/packages/core/src/auth/auth.ts +108 -0
- package/packages/core/src/auth/index.ts +1 -0
- package/packages/core/src/canvas/CanvasManager.ts +390 -0
- package/packages/core/src/canvas/a2ui-tools.ts +255 -0
- package/packages/core/src/canvas/canvas-tools.ts +448 -0
- package/packages/core/src/canvas/canvas.test.ts +32 -0
- package/packages/core/src/canvas/emitter.ts +149 -0
- package/packages/core/src/canvas/index.ts +3 -0
- package/packages/core/src/channels/base.ts +154 -0
- package/packages/core/src/channels/channels.test.ts +18 -0
- package/packages/core/src/channels/discord.ts +273 -0
- package/packages/core/src/channels/index.ts +7 -0
- package/packages/core/src/channels/manager.ts +450 -0
- package/packages/core/src/channels/slack.ts +323 -0
- package/packages/core/src/channels/telegram.ts +612 -0
- package/packages/core/src/channels/webchat.ts +139 -0
- package/packages/core/src/channels/whatsapp.ts +548 -0
- package/packages/core/src/config/index.ts +2 -0
- package/packages/core/src/config/loader.ts +554 -0
- package/packages/core/src/ethics/EthicsGuard.test.ts +54 -0
- package/packages/core/src/ethics/EthicsGuard.ts +66 -0
- package/packages/core/src/ethics/index.ts +2 -0
- package/packages/core/src/events/agent-bus.ts +460 -0
- package/packages/core/src/events/event-bus.ts +169 -0
- package/packages/core/src/gateway/channel-notify.ts +37 -0
- package/packages/core/src/gateway/gateway.test.ts +38 -0
- package/packages/core/src/gateway/index.ts +2 -0
- package/packages/core/src/gateway/server.ts +139 -0
- package/packages/core/src/heartbeat/index.ts +157 -0
- package/packages/core/src/index.ts +81 -0
- package/packages/core/src/mcp/MCPClient.ts +439 -0
- package/packages/core/src/mcp/MCPToolAdapter.ts +176 -0
- package/packages/core/src/mcp/config.ts +13 -0
- package/packages/core/src/mcp/hot-reload.ts +147 -0
- package/packages/core/src/mcp/index.ts +11 -0
- package/packages/core/src/mcp/logger.ts +42 -0
- package/packages/core/src/mcp/singleton.ts +21 -0
- package/packages/core/src/mcp/transports/index.ts +67 -0
- package/packages/core/src/mcp/transports/sse.ts +241 -0
- package/packages/core/src/mcp/transports/websocket.ts +159 -0
- package/packages/core/src/memory/Scratchpad.test.ts +47 -0
- package/packages/core/src/memory/Scratchpad.ts +37 -0
- package/packages/core/src/memory/Storage.ts +6 -0
- package/packages/core/src/memory/index.ts +2 -0
- package/packages/core/src/multimodal/VisionService.ts +293 -0
- package/packages/core/src/multimodal/index.ts +2 -0
- package/packages/core/src/multimodal/types.ts +28 -0
- package/packages/core/src/multimodal/vision-service.ts +283 -0
- package/packages/core/src/plugins/api.ts +128 -0
- package/packages/core/src/plugins/index.ts +2 -0
- package/packages/core/src/plugins/loader.ts +365 -0
- package/packages/core/src/resilience/circuit-breaker.ts +225 -0
- package/packages/core/src/scheduler/CronScheduler.ts +699 -0
- package/packages/core/src/scheduler/dag/AgentExecutor.ts +53 -0
- package/packages/core/src/scheduler/dag/DAGScheduler.ts +250 -0
- package/packages/core/src/scheduler/dag/EventBridge.ts +122 -0
- package/packages/core/src/scheduler/dag/TaskGraph.ts +192 -0
- package/packages/core/src/scheduler/dag/TaskNode.ts +97 -0
- package/packages/core/src/scheduler/dag/TaskResult.ts +22 -0
- package/packages/core/src/scheduler/dag/errors.ts +37 -0
- package/packages/core/src/scheduler/dag/index.ts +26 -0
- package/packages/core/src/scheduler/dag/presets/ResearchPreset.ts +97 -0
- package/packages/core/src/scheduler/dag/strategies/ParallelStrategy.ts +21 -0
- package/packages/core/src/scheduler/dag/strategies/PriorityStrategy.ts +46 -0
- package/packages/core/src/scheduler/index.ts +22 -0
- package/packages/core/src/scheduler/integration.ts +237 -0
- package/packages/core/src/scheduler/scheduler.test.ts +19 -0
- package/packages/core/src/scheduler/types.ts +164 -0
- package/packages/core/src/security/Pairing.ts +250 -0
- package/packages/core/src/security/RateLimit.ts +270 -0
- package/packages/core/src/security/google-chat.ts +269 -0
- package/packages/core/src/security/index.ts +192 -0
- package/packages/core/src/security/rate-limit.ts +270 -0
- package/packages/core/src/security/signal.ts +321 -0
- package/packages/core/src/skills/SkillLoader.ts +388 -0
- package/packages/core/src/skills/bundled-data.generated.ts +3332 -0
- package/packages/core/src/skills/defineSkill.ts +18 -0
- package/packages/core/src/skills/index.ts +4 -0
- package/packages/core/src/state/index.ts +2 -0
- package/packages/core/src/state/store.ts +312 -0
- package/packages/core/src/storage/SQLiteStorage.ts +407 -0
- package/packages/core/src/storage/crypto.ts +233 -0
- package/packages/core/src/storage/index.ts +10 -0
- package/packages/core/src/storage/onboarding.ts +1603 -0
- package/packages/core/src/storage/schema.ts +689 -0
- package/packages/core/src/storage/seed.ts +740 -0
- package/packages/core/src/storage/storage.test.ts +37 -0
- package/packages/core/src/storage/usage.ts +374 -0
- package/packages/core/src/swarm/AgentBus.ts +460 -0
- package/packages/core/src/swarm/AgentExecutor.ts +53 -0
- package/packages/core/src/swarm/Coordinator.ts +251 -0
- package/packages/core/src/swarm/EventBridge.ts +122 -0
- package/packages/core/src/swarm/EventBus.ts +169 -0
- package/packages/core/src/swarm/TaskGraph.ts +192 -0
- package/packages/core/src/swarm/TaskNode.ts +97 -0
- package/packages/core/src/swarm/TaskResult.ts +22 -0
- package/packages/core/src/swarm/WorkerPool.ts +236 -0
- package/packages/core/src/swarm/errors.ts +37 -0
- package/packages/core/src/swarm/index.ts +30 -0
- package/packages/core/src/swarm/presets/HiveLearnPreset.ts +99 -0
- package/packages/core/src/swarm/presets/ResearchPreset.ts +97 -0
- package/packages/core/src/swarm/presets/index.ts +4 -0
- package/packages/core/src/swarm/strategies/ParallelStrategy.ts +21 -0
- package/packages/core/src/swarm/strategies/PriorityStrategy.ts +46 -0
- package/packages/core/src/swarm/strategies/index.ts +3 -0
- package/packages/core/src/swarm/swarm.test.ts +24 -0
- package/packages/core/src/swarm/types.ts +164 -0
- package/packages/core/src/tool-runtime/index.ts +522 -0
- package/packages/core/src/tool-runtime/tool-runtime.test.ts +91 -0
- package/packages/core/src/tool-runtime/tool-worker.ts +125 -0
- package/packages/core/src/tools/ToolExecutor.ts +58 -0
- package/packages/core/src/tools/ToolRegistry.test.ts +98 -0
- package/packages/core/src/tools/ToolRegistry.ts +61 -0
- package/packages/core/src/tools/agents/get-available-models.ts +118 -0
- package/packages/core/src/tools/agents/index.ts +715 -0
- package/packages/core/src/tools/bridge-events.ts +26 -0
- package/packages/core/src/tools/canvas/index.ts +375 -0
- package/packages/core/src/tools/cli/index.ts +142 -0
- package/packages/core/src/tools/codebridge/index.ts +342 -0
- package/packages/core/src/tools/core/index.ts +476 -0
- package/packages/core/src/tools/cron/index.ts +626 -0
- package/packages/core/src/tools/filesystem/fs-delete.ts +78 -0
- package/packages/core/src/tools/filesystem/fs-edit.ts +106 -0
- package/packages/core/src/tools/filesystem/fs-exists.ts +63 -0
- package/packages/core/src/tools/filesystem/fs-glob.ts +108 -0
- package/packages/core/src/tools/filesystem/fs-list.ts +129 -0
- package/packages/core/src/tools/filesystem/fs-read.ts +72 -0
- package/packages/core/src/tools/filesystem/fs-write.ts +67 -0
- package/packages/core/src/tools/filesystem/index.ts +34 -0
- package/packages/core/src/tools/filesystem/workspace-guard.ts +62 -0
- package/packages/core/src/tools/index.ts +231 -0
- package/packages/core/src/tools/meeting/index.ts +363 -0
- package/packages/core/src/tools/office/index.ts +47 -0
- package/packages/core/src/tools/office/office-escribir-docx.ts +192 -0
- package/packages/core/src/tools/office/office-escribir-pdf.ts +172 -0
- package/packages/core/src/tools/office/office-escribir-pptx.ts +174 -0
- package/packages/core/src/tools/office/office-escribir-xlsx.ts +116 -0
- package/packages/core/src/tools/office/office-leer-docx.ts +93 -0
- package/packages/core/src/tools/office/office-leer-pdf.ts +114 -0
- package/packages/core/src/tools/office/office-leer-pptx.ts +136 -0
- package/packages/core/src/tools/office/office-leer-xlsx.ts +124 -0
- package/packages/core/src/tools/projects/index.ts +37 -0
- package/packages/core/src/tools/projects/project-create.ts +94 -0
- package/packages/core/src/tools/projects/project-done.ts +66 -0
- package/packages/core/src/tools/projects/project-fail.ts +66 -0
- package/packages/core/src/tools/projects/project-list.ts +96 -0
- package/packages/core/src/tools/projects/project-update.ts +72 -0
- package/packages/core/src/tools/projects/task-create.ts +68 -0
- package/packages/core/src/tools/projects/task-evaluate.ts +93 -0
- package/packages/core/src/tools/projects/task-update.ts +93 -0
- package/packages/core/src/tools/types.ts +39 -0
- package/packages/core/src/tools/voice/index.ts +104 -0
- package/packages/core/src/tools/web/browser-click.ts +78 -0
- package/packages/core/src/tools/web/browser-extract.ts +139 -0
- package/packages/core/src/tools/web/browser-navigate.ts +106 -0
- package/packages/core/src/tools/web/browser-screenshot.ts +87 -0
- package/packages/core/src/tools/web/browser-script.ts +88 -0
- package/packages/core/src/tools/web/browser-service.ts +554 -0
- package/packages/core/src/tools/web/browser-type.ts +101 -0
- package/packages/core/src/tools/web/browser-wait.ts +136 -0
- package/packages/core/src/tools/web/index.ts +41 -0
- package/packages/core/src/tools/web/web-fetch.ts +78 -0
- package/packages/core/src/tools/web/web-search.ts +123 -0
- package/packages/core/src/utils/benchmark.ts +80 -0
- package/packages/core/src/utils/crypto.ts +73 -0
- package/packages/core/src/utils/date.ts +42 -0
- package/packages/core/src/utils/index.ts +10 -0
- package/packages/core/src/utils/logger.ts +389 -0
- package/packages/core/src/utils/retry.ts +70 -0
- package/packages/core/src/utils/toon.ts +253 -0
- package/packages/core/src/voice/index.ts +643 -0
- package/packages/core/src/workers/WorkerPool.ts +167 -0
- package/packages/core/src/workers/agent.worker.ts +68 -0
- package/packages/core/src/workers/createWorker.ts +144 -0
- package/packages/core/src/workers/index.ts +5 -0
- package/packages/core/src/workers/workers.test.ts +48 -0
- package/test/setup-db.ts +216 -0
- package/tsconfig.json +40 -0
- package/src/agents.ts +0 -1
- package/src/canvas.ts +0 -1
- package/src/channels.ts +0 -1
- package/src/config.ts +0 -1
- package/src/events.ts +0 -1
- package/src/gateway.ts +0 -1
- package/src/index.ts +0 -304
- package/src/mcp.ts +0 -1
- package/src/multimodal.ts +0 -1
- package/src/scheduler.ts +0 -1
- package/src/security.ts +0 -1
- package/src/skills.ts +0 -1
- package/src/state.ts +0 -1
- package/src/storage.ts +0 -1
- package/src/tools.ts +0 -1
- package/src/tts.ts +0 -1
- package/src/types.ts +0 -82
- package/src/utils.ts +0 -1
- package/src/voice.ts +0 -1
package/package.json
CHANGED
|
@@ -1,113 +1,69 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@johpaz/hive-sdk",
|
|
3
|
-
"version": "0.0.
|
|
4
|
-
"
|
|
3
|
+
"version": "0.0.16",
|
|
4
|
+
"private": false,
|
|
5
|
+
"description": "Hive SDK — The Agent Harness SDK. Build, deploy, and scale AI agent applications with multi-channel support, context engineering, and swarm orchestration.",
|
|
5
6
|
"license": "MIT",
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
"
|
|
9
|
-
|
|
10
|
-
"main": "./src/index.ts",
|
|
11
|
-
"module": "./src/index.ts",
|
|
12
|
-
"types": "./src/index.ts",
|
|
13
|
-
"exports": {
|
|
14
|
-
".": {
|
|
15
|
-
"types": "./src/index.ts",
|
|
16
|
-
"default": "./src/index.ts"
|
|
17
|
-
},
|
|
18
|
-
"./agents": {
|
|
19
|
-
"types": "./src/agents.ts",
|
|
20
|
-
"default": "./src/agents.ts"
|
|
21
|
-
},
|
|
22
|
-
"./tools": {
|
|
23
|
-
"types": "./src/tools.ts",
|
|
24
|
-
"default": "./src/tools.ts"
|
|
25
|
-
},
|
|
26
|
-
"./skills": {
|
|
27
|
-
"types": "./src/skills.ts",
|
|
28
|
-
"default": "./src/skills.ts"
|
|
29
|
-
},
|
|
30
|
-
"./mcp": {
|
|
31
|
-
"types": "./src/mcp.ts",
|
|
32
|
-
"default": "./src/mcp.ts"
|
|
33
|
-
},
|
|
34
|
-
"./tts": {
|
|
35
|
-
"types": "./src/tts.ts",
|
|
36
|
-
"default": "./src/tts.ts"
|
|
37
|
-
},
|
|
38
|
-
"./channels": {
|
|
39
|
-
"types": "./src/channels.ts",
|
|
40
|
-
"default": "./src/channels.ts"
|
|
41
|
-
},
|
|
42
|
-
"./storage": {
|
|
43
|
-
"types": "./src/storage.ts",
|
|
44
|
-
"default": "./src/storage.ts"
|
|
45
|
-
},
|
|
46
|
-
"./gateway": {
|
|
47
|
-
"types": "./src/gateway.ts",
|
|
48
|
-
"default": "./src/gateway.ts"
|
|
49
|
-
},
|
|
50
|
-
"./scheduler": {
|
|
51
|
-
"types": "./src/scheduler.ts",
|
|
52
|
-
"default": "./src/scheduler.ts"
|
|
53
|
-
},
|
|
54
|
-
"./events": {
|
|
55
|
-
"types": "./src/events.ts",
|
|
56
|
-
"default": "./src/events.ts"
|
|
57
|
-
},
|
|
58
|
-
"./state": {
|
|
59
|
-
"types": "./src/state.ts",
|
|
60
|
-
"default": "./src/state.ts"
|
|
61
|
-
},
|
|
62
|
-
"./security": {
|
|
63
|
-
"types": "./src/security.ts",
|
|
64
|
-
"default": "./src/security.ts"
|
|
65
|
-
},
|
|
66
|
-
"./config": {
|
|
67
|
-
"types": "./src/config.ts",
|
|
68
|
-
"default": "./src/config.ts"
|
|
69
|
-
},
|
|
70
|
-
"./canvas": {
|
|
71
|
-
"types": "./src/canvas.ts",
|
|
72
|
-
"default": "./src/canvas.ts"
|
|
73
|
-
},
|
|
74
|
-
"./voice": {
|
|
75
|
-
"types": "./src/voice.ts",
|
|
76
|
-
"default": "./src/voice.ts"
|
|
77
|
-
},
|
|
78
|
-
"./multimodal": {
|
|
79
|
-
"types": "./src/multimodal.ts",
|
|
80
|
-
"default": "./src/multimodal.ts"
|
|
81
|
-
},
|
|
82
|
-
"./utils": {
|
|
83
|
-
"types": "./src/utils.ts",
|
|
84
|
-
"default": "./src/utils.ts"
|
|
85
|
-
},
|
|
86
|
-
"./types": {
|
|
87
|
-
"types": "./src/types.ts",
|
|
88
|
-
"default": "./src/types.ts"
|
|
89
|
-
}
|
|
7
|
+
"homepage": "https://github.com/johpaz/hive-sdk#readme",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "https://github.com/johpaz/hive-sdk.git"
|
|
90
11
|
},
|
|
91
|
-
"
|
|
92
|
-
"
|
|
93
|
-
},
|
|
94
|
-
"peerDependenciesMeta": {
|
|
95
|
-
"typescript": {
|
|
96
|
-
"optional": true
|
|
97
|
-
}
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/johpaz/hive-sdk/issues"
|
|
98
14
|
},
|
|
99
15
|
"keywords": [
|
|
100
|
-
"hive",
|
|
101
|
-
"sdk",
|
|
102
|
-
"agents",
|
|
103
16
|
"ai",
|
|
17
|
+
"agent",
|
|
104
18
|
"llm",
|
|
105
|
-
"
|
|
106
|
-
"
|
|
19
|
+
"harness",
|
|
20
|
+
"context-engineering",
|
|
21
|
+
"fts5",
|
|
22
|
+
"swarm",
|
|
23
|
+
"ace",
|
|
24
|
+
"bun",
|
|
25
|
+
"langchain-alternative",
|
|
107
26
|
"multi-channel",
|
|
108
|
-
"
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
27
|
+
"gateway"
|
|
28
|
+
],
|
|
29
|
+
"main": "./packages/core/src/index.ts",
|
|
30
|
+
"types": "./packages/core/src/index.ts",
|
|
31
|
+
"bin": {
|
|
32
|
+
"hive": "./packages/cli/bin/hive"
|
|
33
|
+
},
|
|
34
|
+
"workspaces": [
|
|
35
|
+
"packages/core",
|
|
36
|
+
"packages/cli"
|
|
37
|
+
],
|
|
38
|
+
"scripts": {
|
|
39
|
+
"build": "bun run typecheck",
|
|
40
|
+
"typecheck": "tsc --build --force",
|
|
41
|
+
"test": "bun test",
|
|
42
|
+
"prepublish": "echo 'No build needed - Bun runs TypeScript directly'"
|
|
43
|
+
},
|
|
44
|
+
"dependencies": {
|
|
45
|
+
"@anthropic-ai/sdk": "^0.74.0",
|
|
46
|
+
"@google/genai": "^1.43.0",
|
|
47
|
+
"@modelcontextprotocol/sdk": "latest",
|
|
48
|
+
"@sapphire/snowflake": "latest",
|
|
49
|
+
"async-mutex": "^0.5.0",
|
|
50
|
+
"cron-parser": "^5.5.0",
|
|
51
|
+
"croner": "^10.0.1",
|
|
52
|
+
"docx": "^9.6.1",
|
|
53
|
+
"groq-sdk": "^0.37.0",
|
|
54
|
+
"jszip": "^3.10.1",
|
|
55
|
+
"pdf-lib": "^1.17.1",
|
|
56
|
+
"mammoth": "^1.12.0",
|
|
57
|
+
"ollama": "^0.6.3",
|
|
58
|
+
"openai": "^6.18.0",
|
|
59
|
+
"pdfjs-dist": "^5.6.205",
|
|
60
|
+
"pptxgenjs": "^4.0.1",
|
|
61
|
+
"toon-format-parser": "^1.1.0",
|
|
62
|
+
"xlsx": "^0.18.5",
|
|
63
|
+
"zod": "latest"
|
|
64
|
+
},
|
|
65
|
+
"devDependencies": {
|
|
66
|
+
"@types/bun": "^1.3.13",
|
|
67
|
+
"typescript": "6.0.2"
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@hive/cli",
|
|
3
|
+
"version": "0.0.15",
|
|
4
|
+
"description": "Hive CLI — init, run, test, trace",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"bin": {
|
|
8
|
+
"hive": "./src/index.ts"
|
|
9
|
+
},
|
|
10
|
+
"main": "./src/index.ts",
|
|
11
|
+
"exports": {
|
|
12
|
+
".": "./src/index.ts"
|
|
13
|
+
},
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"@hive/core": "workspace:*"
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import * as process from "node:process";
|
|
4
|
+
|
|
5
|
+
async function runAddSkill() {
|
|
6
|
+
const skillName = process.argv[3];
|
|
7
|
+
|
|
8
|
+
if (!skillName) {
|
|
9
|
+
console.error("Usage: hive add-skill <name>");
|
|
10
|
+
process.exit(1);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const skillsDir = join(process.cwd(), "src", "skills");
|
|
14
|
+
const filePath = join(skillsDir, `${skillName}.ts`);
|
|
15
|
+
|
|
16
|
+
if (existsSync(filePath)) {
|
|
17
|
+
console.error(`Skill '${skillName}' already exists.`);
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
mkdirSync(skillsDir, { recursive: true });
|
|
22
|
+
|
|
23
|
+
const content = `import { defineSkill } from "@johpaz/hive-sdk";
|
|
24
|
+
|
|
25
|
+
export const ${skillName}Skill = defineSkill({
|
|
26
|
+
name: "${skillName}",
|
|
27
|
+
description: "Description of what ${skillName} skill does.",
|
|
28
|
+
steps: [
|
|
29
|
+
{
|
|
30
|
+
name: "step-1",
|
|
31
|
+
description: "First step of the skill",
|
|
32
|
+
tool: "notify",
|
|
33
|
+
},
|
|
34
|
+
],
|
|
35
|
+
});
|
|
36
|
+
`;
|
|
37
|
+
|
|
38
|
+
writeFileSync(filePath, content);
|
|
39
|
+
console.log(`✅ Created skill: ${filePath}`);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
runAddSkill();
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import * as process from "node:process";
|
|
4
|
+
|
|
5
|
+
function toPascalCase(str: string): string {
|
|
6
|
+
return str.replace(/[-_](.)/g, (_, char) => char.toUpperCase()).replace(/^(.)/, (_, char) => char.toUpperCase());
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
async function runAddTool() {
|
|
10
|
+
const toolName = process.argv[3];
|
|
11
|
+
|
|
12
|
+
if (!toolName) {
|
|
13
|
+
console.error("Usage: hive add-tool <name>");
|
|
14
|
+
process.exit(1);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const toolsDir = join(process.cwd(), "src", "tools");
|
|
18
|
+
const filePath = join(toolsDir, `${toolName}.ts`);
|
|
19
|
+
|
|
20
|
+
if (existsSync(filePath)) {
|
|
21
|
+
console.error(`Tool '${toolName}' already exists.`);
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
mkdirSync(toolsDir, { recursive: true });
|
|
26
|
+
|
|
27
|
+
const className = toPascalCase(toolName) + "Tool";
|
|
28
|
+
|
|
29
|
+
const content = `import { defineTool } from "@johpaz/hive-sdk";
|
|
30
|
+
|
|
31
|
+
export const ${toolName} = defineTool({
|
|
32
|
+
name: "${toolName}",
|
|
33
|
+
description: "Description of what ${toolName} does.",
|
|
34
|
+
execute: async (args: { input: string }) => {
|
|
35
|
+
// TODO: implement tool logic
|
|
36
|
+
return { result: args.input };
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
`;
|
|
40
|
+
|
|
41
|
+
writeFileSync(filePath, content);
|
|
42
|
+
console.log(`✅ Created tool: ${filePath}`);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
runAddTool();
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import * as process from "node:process";
|
|
4
|
+
|
|
5
|
+
function toPascalCase(str: string): string {
|
|
6
|
+
return str.replace(/[-_](.)/g, (_, char) => char.toUpperCase()).replace(/^(.)/, (_, char) => char.toUpperCase());
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
async function runAddWorker() {
|
|
10
|
+
const workerName = process.argv[3];
|
|
11
|
+
|
|
12
|
+
if (!workerName) {
|
|
13
|
+
console.error("Usage: hive add-worker <name>");
|
|
14
|
+
process.exit(1);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const workersDir = join(process.cwd(), "src", "workers");
|
|
18
|
+
const filePath = join(workersDir, `${workerName}.worker.ts`);
|
|
19
|
+
|
|
20
|
+
if (existsSync(filePath)) {
|
|
21
|
+
console.error(`Worker '${workerName}' already exists.`);
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
mkdirSync(workersDir, { recursive: true });
|
|
26
|
+
|
|
27
|
+
const className = toPascalCase(workerName) + "Worker";
|
|
28
|
+
|
|
29
|
+
const content = `import { createWorker } from "@johpaz/hive-sdk";
|
|
30
|
+
|
|
31
|
+
export const ${workerName}Worker = createWorker({
|
|
32
|
+
name: "${workerName}",
|
|
33
|
+
systemPrompt: \`
|
|
34
|
+
You are the ${className} specialist.
|
|
35
|
+
You handle tasks related to ${workerName} with precision and expertise.
|
|
36
|
+
Always provide clear, actionable results.
|
|
37
|
+
\`,
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
// Example usage:
|
|
41
|
+
// const result = await ${workerName}Worker.run("Your task here");
|
|
42
|
+
// console.log(result);
|
|
43
|
+
`;
|
|
44
|
+
|
|
45
|
+
writeFileSync(filePath, content);
|
|
46
|
+
console.log(`Created worker: ${filePath}`);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
runAddWorker();
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync, statSync } from "node:fs";
|
|
2
|
+
import { join, dirname } from "node:path";
|
|
3
|
+
|
|
4
|
+
const TEMPLATE_DIR = join(import.meta.dir, "..", "..", "templates", "hive-app");
|
|
5
|
+
|
|
6
|
+
export function copyTemplate(dest: string, replacements: Record<string, string>) {
|
|
7
|
+
if (!existsSync(TEMPLATE_DIR)) {
|
|
8
|
+
throw new Error("Template not found: " + TEMPLATE_DIR);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
copyDir(TEMPLATE_DIR, dest, replacements);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function copyDir(src: string, dest: string, replacements: Record<string, string>) {
|
|
15
|
+
for (const entry of readdirSync(src)) {
|
|
16
|
+
const srcPath = join(src, entry);
|
|
17
|
+
const destPath = join(dest, entry);
|
|
18
|
+
const stat = statSync(srcPath);
|
|
19
|
+
|
|
20
|
+
if (stat.isDirectory()) {
|
|
21
|
+
mkdirSync(destPath, { recursive: true });
|
|
22
|
+
copyDir(srcPath, destPath, replacements);
|
|
23
|
+
} else {
|
|
24
|
+
let content = readFileSync(srcPath, "utf-8");
|
|
25
|
+
for (const [key, value] of Object.entries(replacements)) {
|
|
26
|
+
content = content.replaceAll(key, value);
|
|
27
|
+
}
|
|
28
|
+
mkdirSync(dirname(destPath), { recursive: true });
|
|
29
|
+
writeFileSync(destPath, content);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,151 @@
|
|
|
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
|
+
expect(existsSync(join(TEST_DIR, "src", "main.ts"))).toBe(true);
|
|
35
|
+
expect(existsSync(join(TEST_DIR, "src", "agents", "coordinator.ts"))).toBe(true);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it("replaces {{APP_NAME}} placeholder in all files", async () => {
|
|
39
|
+
const { copyTemplate } = await import("./create-app-utils.ts");
|
|
40
|
+
|
|
41
|
+
copyTemplate(TEST_DIR, { "{{APP_NAME}}": "my-awesome-app" });
|
|
42
|
+
|
|
43
|
+
const packageJson = readFileSync(join(TEST_DIR, "package.json"), "utf-8");
|
|
44
|
+
expect(packageJson).toContain('"name": "my-awesome-app"');
|
|
45
|
+
|
|
46
|
+
const config = readFileSync(join(TEST_DIR, "hive.config.ts"), "utf-8");
|
|
47
|
+
expect(config).toContain('name: "my-awesome-app"');
|
|
48
|
+
|
|
49
|
+
const main = readFileSync(join(TEST_DIR, "src", "main.ts"), "utf-8");
|
|
50
|
+
expect(main).toContain("Starting my-awesome-app...");
|
|
51
|
+
expect(main).toContain("my-awesome-app is running at");
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
it("generates valid package.json", async () => {
|
|
55
|
+
const { copyTemplate } = await import("./create-app-utils.ts");
|
|
56
|
+
|
|
57
|
+
copyTemplate(TEST_DIR, { "{{APP_NAME}}": "test-app" });
|
|
58
|
+
|
|
59
|
+
const packageJson = JSON.parse(readFileSync(join(TEST_DIR, "package.json"), "utf-8"));
|
|
60
|
+
|
|
61
|
+
expect(packageJson.name).toBe("test-app");
|
|
62
|
+
expect(packageJson.version).toBe("0.1.0");
|
|
63
|
+
expect(packageJson.type).toBe("module");
|
|
64
|
+
expect(packageJson.scripts.dev).toBe("bun run src/main.ts");
|
|
65
|
+
expect(packageJson.scripts.build).toBeDefined();
|
|
66
|
+
expect(packageJson.dependencies["@johpaz/hive-sdk"]).toBe("latest");
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
it("generates hive.config.ts with correct defaults", async () => {
|
|
70
|
+
const { copyTemplate } = await import("./create-app-utils.ts");
|
|
71
|
+
|
|
72
|
+
copyTemplate(TEST_DIR, { "{{APP_NAME}}": "config-test" });
|
|
73
|
+
|
|
74
|
+
const config = readFileSync(join(TEST_DIR, "hive.config.ts"), "utf-8");
|
|
75
|
+
|
|
76
|
+
expect(config).toContain('host: process.env.HIVE_HOST ?? "127.0.0.1"');
|
|
77
|
+
expect(config).toContain('port: Number(process.env.HIVE_PORT ?? 18790)');
|
|
78
|
+
expect(config).toContain("webchat: { enabled: true }");
|
|
79
|
+
expect(config).toContain("telegram: { enabled: false }");
|
|
80
|
+
expect(config).toContain("discord: { enabled: false }");
|
|
81
|
+
expect(config).toContain("whatsapp: { enabled: false }");
|
|
82
|
+
expect(config).toContain("slack: { enabled: false }");
|
|
83
|
+
expect(config).toContain('path: process.env.HIVE_DATA_DIR ?? "./data/hive.db"');
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
it("generates main.ts with all required imports", async () => {
|
|
87
|
+
const { copyTemplate } = await import("./create-app-utils.ts");
|
|
88
|
+
|
|
89
|
+
copyTemplate(TEST_DIR, { "{{APP_NAME}}": "main-test" });
|
|
90
|
+
|
|
91
|
+
const main = readFileSync(join(TEST_DIR, "src", "main.ts"), "utf-8");
|
|
92
|
+
|
|
93
|
+
expect(main).toContain('from "@johpaz/hive-sdk"');
|
|
94
|
+
expect(main).toContain("createAgent");
|
|
95
|
+
expect(main).toContain("startGateway");
|
|
96
|
+
expect(main).toContain("initializeDatabase");
|
|
97
|
+
expect(main).toContain("ChannelManager");
|
|
98
|
+
expect(main).toContain("logger");
|
|
99
|
+
expect(main).toContain('import config from "../hive.config.ts"');
|
|
100
|
+
expect(main).toContain("await initializeDatabase()");
|
|
101
|
+
expect(main).toContain('await startGateway({');
|
|
102
|
+
expect(main).toContain('process.on("SIGINT"');
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
it("generates coordinator agent with correct config", async () => {
|
|
106
|
+
const { copyTemplate } = await import("./create-app-utils.ts");
|
|
107
|
+
|
|
108
|
+
copyTemplate(TEST_DIR, { "{{APP_NAME}}": "agent-test" });
|
|
109
|
+
|
|
110
|
+
const agent = readFileSync(join(TEST_DIR, "src", "agents", "coordinator.ts"), "utf-8");
|
|
111
|
+
|
|
112
|
+
expect(agent).toContain('import { createAgent } from "@johpaz/hive-sdk"');
|
|
113
|
+
expect(agent).toContain('name: "coordinator"');
|
|
114
|
+
expect(agent).toContain('provider: "openai"');
|
|
115
|
+
expect(agent).toContain('model: "gpt-4o-mini"');
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
it("generates docker-compose.yml with correct ports", async () => {
|
|
119
|
+
const { copyTemplate } = await import("./create-app-utils.ts");
|
|
120
|
+
|
|
121
|
+
copyTemplate(TEST_DIR, { "{{APP_NAME}}": "docker-test" });
|
|
122
|
+
|
|
123
|
+
const docker = readFileSync(join(TEST_DIR, "docker-compose.yml"), "utf-8");
|
|
124
|
+
|
|
125
|
+
expect(docker).toContain('image: oven/bun:latest');
|
|
126
|
+
expect(docker).toContain('"${HIVE_PORT:-18790}:18790"');
|
|
127
|
+
expect(docker).toContain('HIVE_HOST=0.0.0.0');
|
|
128
|
+
expect(docker).toContain('HIVE_PORT=18790');
|
|
129
|
+
expect(docker).toContain('command: ["bun", "run", "src/main.ts"]');
|
|
130
|
+
expect(docker).toContain('restart: unless-stopped');
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
it("generates .env.example with all required variables", async () => {
|
|
134
|
+
const { copyTemplate } = await import("./create-app-utils.ts");
|
|
135
|
+
|
|
136
|
+
copyTemplate(TEST_DIR, { "{{APP_NAME}}": "env-test" });
|
|
137
|
+
|
|
138
|
+
const env = readFileSync(join(TEST_DIR, ".env.example"), "utf-8");
|
|
139
|
+
|
|
140
|
+
expect(env).toContain("HIVE_HOST=");
|
|
141
|
+
expect(env).toContain("HIVE_PORT=");
|
|
142
|
+
expect(env).toContain("HIVE_DATA_DIR=");
|
|
143
|
+
expect(env).toContain("OPENAI_API_KEY=");
|
|
144
|
+
expect(env).toContain("ANTHROPIC_API_KEY=");
|
|
145
|
+
expect(env).toContain("GOOGLE_API_KEY=");
|
|
146
|
+
expect(env).toContain("TELEGRAM_BOT_TOKEN=");
|
|
147
|
+
expect(env).toContain("DISCORD_BOT_TOKEN=");
|
|
148
|
+
expect(env).toContain("SLACK_BOT_TOKEN=");
|
|
149
|
+
expect(env).toContain("LOG_LEVEL=");
|
|
150
|
+
});
|
|
151
|
+
});
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { existsSync, mkdirSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import * as process from "node:process";
|
|
4
|
+
import { copyTemplate } from "./create-app-utils.ts";
|
|
5
|
+
|
|
6
|
+
async function runCreateApp() {
|
|
7
|
+
const appName = process.argv[3];
|
|
8
|
+
|
|
9
|
+
if (!appName) {
|
|
10
|
+
console.error("Usage: hive create-app <name>");
|
|
11
|
+
process.exit(1);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const targetDir = join(process.cwd(), appName);
|
|
15
|
+
|
|
16
|
+
if (existsSync(targetDir)) {
|
|
17
|
+
console.error(`Directory '${appName}' already exists.`);
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
console.log(`Creating Hive app '${appName}'...`);
|
|
22
|
+
|
|
23
|
+
copyTemplate(targetDir, {
|
|
24
|
+
"{{APP_NAME}}": appName,
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
console.log(`\n✅ Created ${appName} in ${targetDir}`);
|
|
28
|
+
console.log("\nNext steps:");
|
|
29
|
+
console.log(` cd ${appName}`);
|
|
30
|
+
console.log(" bun install");
|
|
31
|
+
console.log(" cp .env.example .env");
|
|
32
|
+
console.log(" bun run dev");
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
runCreateApp();
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import * as process from "node:process";
|
|
4
|
+
|
|
5
|
+
const TEMPLATE_DIR = join(import.meta.dir, "..", "..", "templates");
|
|
6
|
+
|
|
7
|
+
const HIVE_CONFIG = `{
|
|
8
|
+
"name": "my-hive-agent",
|
|
9
|
+
"version": "0.1.0",
|
|
10
|
+
"type": "module",
|
|
11
|
+
"dependencies": {
|
|
12
|
+
"@hive/core": "latest"
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
`;
|
|
16
|
+
|
|
17
|
+
const HIVE_AGENT_TS = `import { createAgent, defineTool } from "@hive/core";
|
|
18
|
+
|
|
19
|
+
const myTool = defineTool({
|
|
20
|
+
name: "hello",
|
|
21
|
+
description: "Say hello",
|
|
22
|
+
execute: async (args: { name?: string }) => {
|
|
23
|
+
return { greeting: \`Hello, \${args.name ?? "world"}!\` };
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
const agent = await createAgent({
|
|
28
|
+
name: "my-agent",
|
|
29
|
+
model: "gpt-4o",
|
|
30
|
+
provider: "openai",
|
|
31
|
+
tools: [myTool],
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
console.log("Agent ready:", agent.name);
|
|
35
|
+
`;
|
|
36
|
+
|
|
37
|
+
async function runInit() {
|
|
38
|
+
const targetDir = process.argv[3] || process.cwd();
|
|
39
|
+
|
|
40
|
+
if (existsSync(join(targetDir, "hive.json"))) {
|
|
41
|
+
console.error("A hive project already exists in this directory.");
|
|
42
|
+
process.exit(1);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
writeFileSync(join(targetDir, "hive.json"), HIVE_CONFIG.trim());
|
|
46
|
+
writeFileSync(join(targetDir, "hive.agent.ts"), HIVE_AGENT_TS.trim());
|
|
47
|
+
|
|
48
|
+
console.log(`\nInitialized Hive project in ${targetDir}`);
|
|
49
|
+
console.log("\nFiles created:");
|
|
50
|
+
console.log(" hive.json - Project configuration");
|
|
51
|
+
console.log(" hive.agent.ts - Agent definition");
|
|
52
|
+
console.log("\nNext steps:");
|
|
53
|
+
console.log(" Run: hive run");
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
runInit();
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
|
|
4
|
+
async function runCommand() {
|
|
5
|
+
const agentFile = findAgentFile();
|
|
6
|
+
if (!agentFile) {
|
|
7
|
+
console.error("No hive.agent.ts or hive.agent.js found in current directory.");
|
|
8
|
+
console.error("Run 'hive init' to create one.");
|
|
9
|
+
process.exit(1);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
console.log(`Running agent from ${agentFile}...`);
|
|
13
|
+
const { createAgent } = await import("@hive/core");
|
|
14
|
+
const agentModule = await import(agentFile);
|
|
15
|
+
|
|
16
|
+
if (agentModule.agent) {
|
|
17
|
+
const input = process.argv[3] || process.env.HIVE_INPUT || "Hello!";
|
|
18
|
+
console.log(`\n--- Agent: ${agentModule.agent.name} ---`);
|
|
19
|
+
console.log(`Input: ${input}\n`);
|
|
20
|
+
|
|
21
|
+
for await (const event of agentModule.agent.chat(input)) {
|
|
22
|
+
if (event.type === "text") {
|
|
23
|
+
process.stdout.write(event.content);
|
|
24
|
+
} else if (event.type === "tool_call") {
|
|
25
|
+
console.log(`\n[Tool: ${event.name}]`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
console.log("\n--- Done ---");
|
|
29
|
+
} else {
|
|
30
|
+
console.error("Agent module does not export an 'agent' instance.");
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function findAgentFile(): string | null {
|
|
36
|
+
const candidates = ["hive.agent.ts", "hive.agent.js", "agent.ts", "agent.js"];
|
|
37
|
+
const cwd = process.cwd();
|
|
38
|
+
for (const name of candidates) {
|
|
39
|
+
const full = join(cwd, name);
|
|
40
|
+
if (existsSync(full)) return full;
|
|
41
|
+
}
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
runCommand();
|