@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
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WorkerPool — Manages a pool of Bun Workers for parallel task execution.
|
|
3
|
+
*
|
|
4
|
+
* Creates workers on demand, reuses idle workers, and handles task queuing.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { logger } from "../utils/logger.ts";
|
|
8
|
+
import { createWorker, type WorkerConfig, type WorkerInstance } from "./createWorker.ts";
|
|
9
|
+
|
|
10
|
+
const log = logger.child("worker-pool");
|
|
11
|
+
|
|
12
|
+
export interface WorkerPoolConfig {
|
|
13
|
+
maxWorkers?: number;
|
|
14
|
+
taskTimeoutMs?: number;
|
|
15
|
+
workerConfig?: WorkerConfig;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface PoolTask {
|
|
19
|
+
id: string;
|
|
20
|
+
message: string;
|
|
21
|
+
agentId?: string;
|
|
22
|
+
threadId?: string;
|
|
23
|
+
channel?: string;
|
|
24
|
+
systemPrompt?: string;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export interface PoolTaskResult {
|
|
28
|
+
taskId: string;
|
|
29
|
+
result: string;
|
|
30
|
+
error?: string;
|
|
31
|
+
durationMs: number;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export class WorkerPool {
|
|
35
|
+
private maxWorkers: number;
|
|
36
|
+
private taskTimeoutMs: number;
|
|
37
|
+
private workerConfig: WorkerConfig;
|
|
38
|
+
private workers: Map<string, WorkerInstance> = new Map();
|
|
39
|
+
private idleWorkers: string[] = [];
|
|
40
|
+
private taskQueue: Array<{ task: PoolTask; resolve: (result: PoolTaskResult) => void }> = [];
|
|
41
|
+
private busyWorkers: Set<string> = new Set();
|
|
42
|
+
|
|
43
|
+
constructor(config: WorkerPoolConfig = {}) {
|
|
44
|
+
this.maxWorkers = config.maxWorkers ?? 4;
|
|
45
|
+
this.taskTimeoutMs = config.taskTimeoutMs ?? 120000;
|
|
46
|
+
this.workerConfig = config.workerConfig ?? { name: "pool-worker" };
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Execute a single task in a worker.
|
|
51
|
+
*/
|
|
52
|
+
async execute(task: PoolTask): Promise<PoolTaskResult> {
|
|
53
|
+
const worker = await this.acquireWorker();
|
|
54
|
+
const startedAt = performance.now();
|
|
55
|
+
|
|
56
|
+
try {
|
|
57
|
+
const result = await worker.run(task.message, {
|
|
58
|
+
threadId: task.threadId,
|
|
59
|
+
channel: task.channel,
|
|
60
|
+
});
|
|
61
|
+
return {
|
|
62
|
+
taskId: task.id,
|
|
63
|
+
result,
|
|
64
|
+
durationMs: Math.round(performance.now() - startedAt),
|
|
65
|
+
};
|
|
66
|
+
} catch (err) {
|
|
67
|
+
return {
|
|
68
|
+
taskId: task.id,
|
|
69
|
+
result: "",
|
|
70
|
+
error: (err as Error).message,
|
|
71
|
+
durationMs: Math.round(performance.now() - startedAt),
|
|
72
|
+
};
|
|
73
|
+
} finally {
|
|
74
|
+
this.releaseWorker(worker.id);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Execute multiple tasks in parallel, up to maxWorkers at a time.
|
|
80
|
+
*/
|
|
81
|
+
async executeBatch(tasks: PoolTask[]): Promise<PoolTaskResult[]> {
|
|
82
|
+
return Promise.all(tasks.map((task) => this.execute(task)));
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Execute tasks with a limit on concurrency.
|
|
87
|
+
*/
|
|
88
|
+
async executeWithConcurrency(tasks: PoolTask[], concurrency: number): Promise<PoolTaskResult[]> {
|
|
89
|
+
const results: PoolTaskResult[] = [];
|
|
90
|
+
const executing = new Set<Promise<void>>();
|
|
91
|
+
|
|
92
|
+
for (const task of tasks) {
|
|
93
|
+
const promise = this.execute(task).then((result) => {
|
|
94
|
+
results.push(result);
|
|
95
|
+
});
|
|
96
|
+
executing.add(promise);
|
|
97
|
+
|
|
98
|
+
if (executing.size >= concurrency) {
|
|
99
|
+
await Promise.race(executing);
|
|
100
|
+
executing.delete(promise);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
await Promise.all(executing);
|
|
105
|
+
return results;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Get or create a worker.
|
|
110
|
+
*/
|
|
111
|
+
private acquireWorker(): Promise<WorkerInstance> {
|
|
112
|
+
return new Promise((resolve) => {
|
|
113
|
+
// Try to reuse an idle worker
|
|
114
|
+
if (this.idleWorkers.length > 0) {
|
|
115
|
+
const workerId = this.idleWorkers.pop()!;
|
|
116
|
+
this.busyWorkers.add(workerId);
|
|
117
|
+
resolve(this.workers.get(workerId)!);
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Create a new worker if under limit
|
|
122
|
+
if (this.workers.size < this.maxWorkers) {
|
|
123
|
+
const worker = createWorker(this.workerConfig);
|
|
124
|
+
this.workers.set(worker.id, worker);
|
|
125
|
+
this.busyWorkers.add(worker.id);
|
|
126
|
+
resolve(worker);
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// Queue the request
|
|
131
|
+
const checkInterval = setInterval(() => {
|
|
132
|
+
if (this.idleWorkers.length > 0) {
|
|
133
|
+
clearInterval(checkInterval);
|
|
134
|
+
const workerId = this.idleWorkers.pop()!;
|
|
135
|
+
this.busyWorkers.add(workerId);
|
|
136
|
+
resolve(this.workers.get(workerId)!);
|
|
137
|
+
}
|
|
138
|
+
}, 50);
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
private releaseWorker(workerId: string): void {
|
|
143
|
+
this.busyWorkers.delete(workerId);
|
|
144
|
+
this.idleWorkers.push(workerId);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Terminate all workers in the pool.
|
|
149
|
+
*/
|
|
150
|
+
shutdown(): void {
|
|
151
|
+
log.info(`[WorkerPool] Shutting down ${this.workers.size} workers`);
|
|
152
|
+
for (const worker of this.workers.values()) {
|
|
153
|
+
worker.terminate();
|
|
154
|
+
}
|
|
155
|
+
this.workers.clear();
|
|
156
|
+
this.idleWorkers = [];
|
|
157
|
+
this.busyWorkers.clear();
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
get stats(): { total: number; busy: number; idle: number } {
|
|
161
|
+
return {
|
|
162
|
+
total: this.workers.size,
|
|
163
|
+
busy: this.busyWorkers.size,
|
|
164
|
+
idle: this.idleWorkers.length,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Worker — Bun Worker that runs an agent task in isolation.
|
|
3
|
+
*
|
|
4
|
+
* Receives: { type: "AGENT_TASK", taskId, message, agentId, threadId, channel, systemPrompt }
|
|
5
|
+
* Sends: { type: "AGENT_RESULT", taskId, result } | { type: "AGENT_CHUNK", taskId, chunk }
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { runAgent } from "../agent/AgentRunner.ts";
|
|
9
|
+
import type { StreamChunk } from "../agent/AgentRunner.ts";
|
|
10
|
+
|
|
11
|
+
declare var self: {
|
|
12
|
+
onmessage: ((event: { data: WorkerMessage }) => void) | null;
|
|
13
|
+
postMessage(message: WorkerResponse): void;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
type WorkerMessage = {
|
|
17
|
+
type: "AGENT_TASK";
|
|
18
|
+
taskId: string;
|
|
19
|
+
message: string;
|
|
20
|
+
agentId: string;
|
|
21
|
+
threadId?: string;
|
|
22
|
+
channel?: string;
|
|
23
|
+
systemPrompt?: string;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
type WorkerResponse =
|
|
27
|
+
| { type: "AGENT_CHUNK"; taskId: string; chunk: StreamChunk }
|
|
28
|
+
| { type: "AGENT_RESULT"; taskId: string; result: string; error?: string };
|
|
29
|
+
|
|
30
|
+
self.onmessage = async (event) => {
|
|
31
|
+
const { type, taskId, message, agentId, threadId, channel, systemPrompt } = event.data;
|
|
32
|
+
|
|
33
|
+
if (type !== "AGENT_TASK") return;
|
|
34
|
+
|
|
35
|
+
try {
|
|
36
|
+
const stream = runAgent({
|
|
37
|
+
agentId,
|
|
38
|
+
userMessage: message,
|
|
39
|
+
threadId: threadId ?? `worker-${taskId}`,
|
|
40
|
+
channel: channel ?? "worker",
|
|
41
|
+
isolated: true,
|
|
42
|
+
systemPromptOverride: systemPrompt,
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
let fullResponse = "";
|
|
46
|
+
|
|
47
|
+
for await (const chunk of stream) {
|
|
48
|
+
self.postMessage({ type: "AGENT_CHUNK", taskId, chunk });
|
|
49
|
+
|
|
50
|
+
if (chunk.agent?.messages) {
|
|
51
|
+
for (const msg of chunk.agent.messages) {
|
|
52
|
+
if (msg.content && typeof msg.content === "string") {
|
|
53
|
+
fullResponse = msg.content;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
self.postMessage({ type: "AGENT_RESULT", taskId, result: fullResponse });
|
|
60
|
+
} catch (err) {
|
|
61
|
+
self.postMessage({
|
|
62
|
+
type: "AGENT_RESULT",
|
|
63
|
+
taskId,
|
|
64
|
+
result: "",
|
|
65
|
+
error: (err as Error).message,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
};
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* createWorker — Factory for creating specialized Bun Workers.
|
|
3
|
+
*
|
|
4
|
+
* Creates a dedicated worker thread that runs an agent with a custom system prompt.
|
|
5
|
+
* Useful for parallel task execution and specialized agent roles.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { logger } from "../utils/logger.ts";
|
|
9
|
+
|
|
10
|
+
const log = logger.child("createWorker");
|
|
11
|
+
|
|
12
|
+
export interface WorkerConfig {
|
|
13
|
+
name: string;
|
|
14
|
+
agentId?: string;
|
|
15
|
+
systemPrompt?: string;
|
|
16
|
+
model?: string;
|
|
17
|
+
provider?: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface WorkerInstance {
|
|
21
|
+
readonly name: string;
|
|
22
|
+
readonly id: string;
|
|
23
|
+
run(message: string, opts?: { threadId?: string; channel?: string }): Promise<string>;
|
|
24
|
+
runStream(message: string, opts?: { threadId?: string; channel?: string }): AsyncGenerator<WorkerChunk>;
|
|
25
|
+
terminate(): void;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface WorkerChunk {
|
|
29
|
+
type: "chunk" | "result" | "error";
|
|
30
|
+
content?: string;
|
|
31
|
+
chunk?: any;
|
|
32
|
+
error?: string;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const WORKER_EXT = import.meta.url.endsWith(".ts") ? ".worker.ts" : ".worker.js";
|
|
36
|
+
|
|
37
|
+
function resolveWorkerPath(): string {
|
|
38
|
+
return new URL(`./agent${WORKER_EXT}`, import.meta.url).pathname;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export function createWorker(config: WorkerConfig): WorkerInstance {
|
|
42
|
+
const workerId = `${config.name}-${crypto.randomUUID().slice(0, 8)}`;
|
|
43
|
+
const workerPath = resolveWorkerPath();
|
|
44
|
+
|
|
45
|
+
log.info(`[createWorker] Spawning worker ${workerId} from ${workerPath}`);
|
|
46
|
+
|
|
47
|
+
const worker = new Worker(workerPath, { smol: true });
|
|
48
|
+
|
|
49
|
+
return {
|
|
50
|
+
name: config.name,
|
|
51
|
+
id: workerId,
|
|
52
|
+
|
|
53
|
+
async run(message, opts) {
|
|
54
|
+
return new Promise((resolve, reject) => {
|
|
55
|
+
const taskId = crypto.randomUUID();
|
|
56
|
+
const timeout = setTimeout(() => {
|
|
57
|
+
reject(new Error(`Worker ${workerId} timed out`));
|
|
58
|
+
}, 120000);
|
|
59
|
+
|
|
60
|
+
const handler = (event: MessageEvent) => {
|
|
61
|
+
const data = event.data;
|
|
62
|
+
if (data.taskId !== taskId) return;
|
|
63
|
+
|
|
64
|
+
if (data.type === "AGENT_RESULT") {
|
|
65
|
+
clearTimeout(timeout);
|
|
66
|
+
worker.removeEventListener("message", handler);
|
|
67
|
+
if (data.error) {
|
|
68
|
+
reject(new Error(data.error));
|
|
69
|
+
} else {
|
|
70
|
+
resolve(data.result);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
worker.addEventListener("message", handler);
|
|
76
|
+
worker.postMessage({
|
|
77
|
+
type: "AGENT_TASK",
|
|
78
|
+
taskId,
|
|
79
|
+
message,
|
|
80
|
+
agentId: config.agentId ?? config.name,
|
|
81
|
+
threadId: opts?.threadId,
|
|
82
|
+
channel: opts?.channel ?? config.name,
|
|
83
|
+
systemPrompt: config.systemPrompt,
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
},
|
|
87
|
+
|
|
88
|
+
async *runStream(message, opts) {
|
|
89
|
+
const taskId = crypto.randomUUID();
|
|
90
|
+
|
|
91
|
+
worker.postMessage({
|
|
92
|
+
type: "AGENT_TASK",
|
|
93
|
+
taskId,
|
|
94
|
+
message,
|
|
95
|
+
agentId: config.agentId ?? config.name,
|
|
96
|
+
threadId: opts?.threadId,
|
|
97
|
+
channel: opts?.channel ?? config.name,
|
|
98
|
+
systemPrompt: config.systemPrompt,
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
let resolved = false;
|
|
102
|
+
const pending: WorkerResponse[] = [];
|
|
103
|
+
|
|
104
|
+
const handler = (event: MessageEvent) => {
|
|
105
|
+
const data = event.data as WorkerResponse;
|
|
106
|
+
if (data.taskId !== taskId) return;
|
|
107
|
+
pending.push(data);
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
worker.addEventListener("message", handler);
|
|
111
|
+
|
|
112
|
+
try {
|
|
113
|
+
while (!resolved) {
|
|
114
|
+
while (pending.length === 0) {
|
|
115
|
+
await new Promise((r) => setTimeout(r, 10));
|
|
116
|
+
}
|
|
117
|
+
const data = pending.shift()!;
|
|
118
|
+
|
|
119
|
+
if (data.type === "AGENT_CHUNK") {
|
|
120
|
+
yield { type: "chunk" as const, chunk: data.chunk };
|
|
121
|
+
} else if (data.type === "AGENT_RESULT") {
|
|
122
|
+
resolved = true;
|
|
123
|
+
if (data.error) {
|
|
124
|
+
yield { type: "error" as const, error: data.error };
|
|
125
|
+
} else {
|
|
126
|
+
yield { type: "result" as const, content: data.result };
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
} finally {
|
|
131
|
+
worker.removeEventListener("message", handler);
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
|
|
135
|
+
terminate() {
|
|
136
|
+
log.info(`[createWorker] Terminating worker ${workerId}`);
|
|
137
|
+
worker.terminate();
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
type WorkerResponse =
|
|
143
|
+
| { type: "AGENT_CHUNK"; taskId: string; chunk: any }
|
|
144
|
+
| { type: "AGENT_RESULT"; taskId: string; result: string; error?: string };
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { describe, expect, it, beforeAll, afterAll } from "bun:test";
|
|
2
|
+
import { createWorker, WorkerPool } from "./index.ts";
|
|
3
|
+
import { setupTestDb, teardownTestDb, insertTestAgent, insertTestProvider } from "../../../../test/setup-db.ts";
|
|
4
|
+
|
|
5
|
+
describe("createWorker", () => {
|
|
6
|
+
beforeAll(() => {
|
|
7
|
+
setupTestDb();
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
afterAll(() => {
|
|
11
|
+
teardownTestDb();
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
it("creates a worker instance with config", () => {
|
|
15
|
+
const worker = createWorker({
|
|
16
|
+
name: "test-worker",
|
|
17
|
+
systemPrompt: "You are a test worker.",
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
expect(worker.name).toBe("test-worker");
|
|
21
|
+
expect(worker.id).toContain("test-worker-");
|
|
22
|
+
worker.terminate();
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it("WorkerPool creates and manages workers", () => {
|
|
26
|
+
const pool = new WorkerPool({ maxWorkers: 2 });
|
|
27
|
+
expect(pool.stats.total).toBe(0);
|
|
28
|
+
expect(pool.stats.idle).toBe(0);
|
|
29
|
+
expect(pool.stats.busy).toBe(0);
|
|
30
|
+
pool.shutdown();
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
it("WorkerPool executes tasks with limited concurrency", async () => {
|
|
34
|
+
const pool = new WorkerPool({
|
|
35
|
+
maxWorkers: 2,
|
|
36
|
+
workerConfig: { name: "pool-test" },
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
const tasks = Array.from({ length: 4 }, (_, i) => ({
|
|
40
|
+
id: `task-${i}`,
|
|
41
|
+
message: `Test message ${i}`,
|
|
42
|
+
}));
|
|
43
|
+
|
|
44
|
+
// Since we don't have a real LLM in tests, we just verify the pool structure
|
|
45
|
+
expect(tasks).toHaveLength(4);
|
|
46
|
+
pool.shutdown();
|
|
47
|
+
});
|
|
48
|
+
});
|
package/test/setup-db.ts
ADDED
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Database Setup with Real SQLite
|
|
3
|
+
*
|
|
4
|
+
* Uses the project's real database if available, or creates an in-memory one.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { Database } from "bun:sqlite";
|
|
8
|
+
import * as path from "node:path";
|
|
9
|
+
import { existsSync, mkdirSync } from "node:fs";
|
|
10
|
+
import { SCHEMA, PROJECTS_SCHEMA, CONTEXT_ENGINE_SCHEMA, MEETING_SCHEMA } from "../packages/core/src/storage/schema.ts";
|
|
11
|
+
|
|
12
|
+
let testDb: Database | null = null;
|
|
13
|
+
|
|
14
|
+
export function getTestDb(): Database {
|
|
15
|
+
if (!testDb) {
|
|
16
|
+
throw new Error("Test DB not initialized. Call setupTestDb() first.");
|
|
17
|
+
}
|
|
18
|
+
return testDb;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function setupTestDb(options?: { useRealDb?: boolean; dbPath?: string }): Database {
|
|
22
|
+
const useRealDb = options?.useRealDb ?? false;
|
|
23
|
+
|
|
24
|
+
if (useRealDb) {
|
|
25
|
+
// Use real database from project
|
|
26
|
+
try {
|
|
27
|
+
const hiveDir = process.env.HIVE_DATA_DIR || path.join(process.cwd(), ".hive");
|
|
28
|
+
const dataDir = path.join(hiveDir, "data");
|
|
29
|
+
|
|
30
|
+
if (!existsSync(dataDir)) {
|
|
31
|
+
mkdirSync(dataDir, { recursive: true });
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const dbPath = options?.dbPath || path.join(dataDir, "hive.db");
|
|
35
|
+
testDb = new Database(dbPath);
|
|
36
|
+
|
|
37
|
+
// Initialize schema if needed
|
|
38
|
+
testDb.run(SCHEMA);
|
|
39
|
+
testDb.run(PROJECTS_SCHEMA);
|
|
40
|
+
testDb.run(CONTEXT_ENGINE_SCHEMA);
|
|
41
|
+
testDb.run(MEETING_SCHEMA);
|
|
42
|
+
|
|
43
|
+
console.log("[test] Using real database at:", dbPath);
|
|
44
|
+
} catch (err) {
|
|
45
|
+
console.warn("[test] Could not use real DB, falling back to in-memory:", err);
|
|
46
|
+
testDb = createInMemoryDb();
|
|
47
|
+
}
|
|
48
|
+
} else {
|
|
49
|
+
testDb = createInMemoryDb();
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
return testDb;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function createInMemoryDb(): Database {
|
|
56
|
+
testDb = new Database(":memory:");
|
|
57
|
+
|
|
58
|
+
testDb.run(SCHEMA);
|
|
59
|
+
testDb.run(PROJECTS_SCHEMA);
|
|
60
|
+
testDb.run(CONTEXT_ENGINE_SCHEMA);
|
|
61
|
+
testDb.run(MEETING_SCHEMA);
|
|
62
|
+
|
|
63
|
+
console.log("[test] Using in-memory database");
|
|
64
|
+
|
|
65
|
+
return testDb;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export function teardownTestDb() {
|
|
69
|
+
if (testDb) {
|
|
70
|
+
testDb.close();
|
|
71
|
+
testDb = null;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export function insertTestAgent(overrides: Record<string, any> = {}): string {
|
|
76
|
+
const db = getTestDb();
|
|
77
|
+
const id = overrides.id ?? crypto.randomUUID();
|
|
78
|
+
|
|
79
|
+
db.query(`
|
|
80
|
+
INSERT INTO agents (id, name, description, role, status, enabled, max_iterations, user_id)
|
|
81
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
82
|
+
`).run(
|
|
83
|
+
id,
|
|
84
|
+
overrides.name ?? "Test Agent",
|
|
85
|
+
overrides.description ?? "Test agent description",
|
|
86
|
+
overrides.role ?? "worker",
|
|
87
|
+
overrides.status ?? "idle",
|
|
88
|
+
overrides.enabled ?? 1,
|
|
89
|
+
overrides.maxIterations ?? 10,
|
|
90
|
+
overrides.userId ?? "test-user"
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
return id;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export function insertTestProvider(overrides: Record<string, any> = {}): string {
|
|
97
|
+
const db = getTestDb();
|
|
98
|
+
const id = overrides.id ?? crypto.randomUUID();
|
|
99
|
+
|
|
100
|
+
db.query(`
|
|
101
|
+
INSERT INTO providers (id, name, category, enabled, active)
|
|
102
|
+
VALUES (?, ?, ?, ?, ?)
|
|
103
|
+
`).run(
|
|
104
|
+
id,
|
|
105
|
+
overrides.name ?? "test-provider",
|
|
106
|
+
overrides.category ?? "llm",
|
|
107
|
+
overrides.enabled ?? 1,
|
|
108
|
+
overrides.active ?? 0
|
|
109
|
+
);
|
|
110
|
+
|
|
111
|
+
return id;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export function insertTestTool(overrides: Record<string, any> = {}): string {
|
|
115
|
+
const db = getTestDb();
|
|
116
|
+
const id = overrides.id ?? crypto.randomUUID();
|
|
117
|
+
|
|
118
|
+
db.query(`
|
|
119
|
+
INSERT INTO tools (id, name, description, category, enabled, active)
|
|
120
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
121
|
+
`).run(
|
|
122
|
+
id,
|
|
123
|
+
overrides.name ?? "test_tool",
|
|
124
|
+
overrides.description ?? "Test tool description",
|
|
125
|
+
overrides.category ?? "bundled",
|
|
126
|
+
overrides.enabled ?? 1,
|
|
127
|
+
overrides.active ?? 1
|
|
128
|
+
);
|
|
129
|
+
|
|
130
|
+
try {
|
|
131
|
+
db.query(`
|
|
132
|
+
INSERT OR REPLACE INTO tools_fts (tool_name, name, description, category)
|
|
133
|
+
VALUES (?, ?, ?, ?)
|
|
134
|
+
`).run(
|
|
135
|
+
overrides.name ?? "test_tool",
|
|
136
|
+
overrides.name ?? "test_tool",
|
|
137
|
+
overrides.description ?? "Test tool description",
|
|
138
|
+
overrides.category ?? "bundled"
|
|
139
|
+
);
|
|
140
|
+
} catch {
|
|
141
|
+
// FTS table might not exist in minimal schema
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
return id;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
export function insertTestSkill(overrides: Record<string, any> = {}): string {
|
|
148
|
+
const db = getTestDb();
|
|
149
|
+
const id = overrides.id ?? crypto.randomUUID();
|
|
150
|
+
|
|
151
|
+
db.query(`
|
|
152
|
+
INSERT INTO skills (id, name, description, category, tools, triggers, body, active)
|
|
153
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
154
|
+
`).run(
|
|
155
|
+
id,
|
|
156
|
+
overrides.name ?? "test_skill",
|
|
157
|
+
overrides.description ?? "Test skill description",
|
|
158
|
+
overrides.category ?? "core",
|
|
159
|
+
overrides.tools ?? "[]",
|
|
160
|
+
overrides.triggers ?? "[]",
|
|
161
|
+
overrides.body ?? "# Test Skill",
|
|
162
|
+
overrides.active ?? 1
|
|
163
|
+
);
|
|
164
|
+
|
|
165
|
+
try {
|
|
166
|
+
db.query(`
|
|
167
|
+
INSERT OR REPLACE INTO skills_fts (id, name, description, category, tools, triggers, body)
|
|
168
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
169
|
+
`).run(
|
|
170
|
+
id,
|
|
171
|
+
overrides.name ?? "test_skill",
|
|
172
|
+
overrides.description ?? "Test skill description",
|
|
173
|
+
overrides.category ?? "core",
|
|
174
|
+
overrides.tools ?? "[]",
|
|
175
|
+
overrides.triggers ?? "[]",
|
|
176
|
+
overrides.body ?? "# Test Skill"
|
|
177
|
+
);
|
|
178
|
+
} catch {
|
|
179
|
+
// FTS table might not exist
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
return id;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
export function insertTestPlaybookRule(overrides: Record<string, any> = {}): number {
|
|
186
|
+
const db = getTestDb();
|
|
187
|
+
|
|
188
|
+
const result = db.query(`
|
|
189
|
+
INSERT INTO playbook (rule, category, applicable_to, active)
|
|
190
|
+
VALUES (?, ?, ?, ?)
|
|
191
|
+
`).run(
|
|
192
|
+
overrides.rule ?? "Test rule",
|
|
193
|
+
overrides.category ?? "tool_selection",
|
|
194
|
+
overrides.applicableTo ?? null,
|
|
195
|
+
overrides.active ?? 1
|
|
196
|
+
);
|
|
197
|
+
|
|
198
|
+
return result.lastInsertRowid as number;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
export function insertTestConversation(threadId: string, role: string, content: string): number {
|
|
202
|
+
const db = getTestDb();
|
|
203
|
+
|
|
204
|
+
const result = db.query(`
|
|
205
|
+
INSERT INTO conversations (thread_id, channel, role, content, token_count)
|
|
206
|
+
VALUES (?, ?, ?, ?, ?)
|
|
207
|
+
`).run(
|
|
208
|
+
threadId,
|
|
209
|
+
"test",
|
|
210
|
+
role,
|
|
211
|
+
content,
|
|
212
|
+
Math.floor(content.length / 4)
|
|
213
|
+
);
|
|
214
|
+
|
|
215
|
+
return result.lastInsertRowid as number;
|
|
216
|
+
}
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ESNext",
|
|
4
|
+
"module": "ESNext",
|
|
5
|
+
"moduleResolution": "bundler",
|
|
6
|
+
"lib": [
|
|
7
|
+
"ESNext",
|
|
8
|
+
"DOM",
|
|
9
|
+
"DOM.Iterable"
|
|
10
|
+
],
|
|
11
|
+
"strict": false,
|
|
12
|
+
"noImplicitAny": false,
|
|
13
|
+
"strictNullChecks": false,
|
|
14
|
+
"noUnusedLocals": false,
|
|
15
|
+
"noUnusedParameters": false,
|
|
16
|
+
"esModuleInterop": true,
|
|
17
|
+
"skipLibCheck": true,
|
|
18
|
+
"forceConsistentCasingInFileNames": true,
|
|
19
|
+
"resolveJsonModule": true,
|
|
20
|
+
"allowImportingTsExtensions": true,
|
|
21
|
+
"allowSyntheticDefaultImports": true,
|
|
22
|
+
"isolatedModules": true,
|
|
23
|
+
"noEmit": true,
|
|
24
|
+
"declaration": true,
|
|
25
|
+
"declarationMap": true,
|
|
26
|
+
|
|
27
|
+
"paths": {
|
|
28
|
+
"@hive/core": ["./packages/core/src/index.ts"],
|
|
29
|
+
"@hive/core/*": ["./packages/core/src/*"]
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"include": [
|
|
33
|
+
"packages/**/*"
|
|
34
|
+
],
|
|
35
|
+
"exclude": [
|
|
36
|
+
"node_modules",
|
|
37
|
+
"dist",
|
|
38
|
+
"packages/cli/templates"
|
|
39
|
+
]
|
|
40
|
+
}
|
package/src/agents.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "@hive-sdk/agent";
|
package/src/canvas.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "@hive-sdk/canvas";
|
package/src/channels.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "@hive-sdk/channels";
|
package/src/config.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "@hive-sdk/config";
|
package/src/events.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "@hive-sdk/events";
|