@honeybee-ai/incubator 1.1.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/README.md +586 -0
- package/dashboard/dist/assets/index-DFb8p7xI.js +9 -0
- package/dashboard/dist/assets/index-RKiEoHEo.css +1 -0
- package/dashboard/dist/index.html +13 -0
- package/dist/agent/acp/claim-manager.d.ts +24 -0
- package/dist/agent/acp/claim-manager.js +64 -0
- package/dist/agent/acp/claim-manager.js.map +1 -0
- package/dist/agent/acp/direct-runtime.d.ts +90 -0
- package/dist/agent/acp/direct-runtime.js +364 -0
- package/dist/agent/acp/direct-runtime.js.map +1 -0
- package/dist/agent/acp/event-client.d.ts +20 -0
- package/dist/agent/acp/event-client.js +60 -0
- package/dist/agent/acp/event-client.js.map +1 -0
- package/dist/agent/acp/event-matcher.d.ts +13 -0
- package/dist/agent/acp/event-matcher.js +31 -0
- package/dist/agent/acp/event-matcher.js.map +1 -0
- package/dist/agent/acp/progress.d.ts +23 -0
- package/dist/agent/acp/progress.js +54 -0
- package/dist/agent/acp/progress.js.map +1 -0
- package/dist/agent/acp/runtime.d.ts +156 -0
- package/dist/agent/acp/runtime.js +337 -0
- package/dist/agent/acp/runtime.js.map +1 -0
- package/dist/agent/acp/ws-event-client.d.ts +64 -0
- package/dist/agent/acp/ws-event-client.js +263 -0
- package/dist/agent/acp/ws-event-client.js.map +1 -0
- package/dist/agent/agent.d.ts +60 -0
- package/dist/agent/agent.js +121 -0
- package/dist/agent/agent.js.map +1 -0
- package/dist/agent/cli.d.ts +2 -0
- package/dist/agent/cli.js +311 -0
- package/dist/agent/cli.js.map +1 -0
- package/dist/agent/mcp-client.d.ts +37 -0
- package/dist/agent/mcp-client.js +92 -0
- package/dist/agent/mcp-client.js.map +1 -0
- package/dist/agent/mock-runner.d.ts +14 -0
- package/dist/agent/mock-runner.js +159 -0
- package/dist/agent/mock-runner.js.map +1 -0
- package/dist/agent/native-client.d.ts +18 -0
- package/dist/agent/native-client.js +42 -0
- package/dist/agent/native-client.js.map +1 -0
- package/dist/agent/prompt.d.ts +45 -0
- package/dist/agent/prompt.js +115 -0
- package/dist/agent/prompt.js.map +1 -0
- package/dist/agent/providers.d.ts +25 -0
- package/dist/agent/providers.js +696 -0
- package/dist/agent/providers.js.map +1 -0
- package/dist/agent/runner.d.ts +15 -0
- package/dist/agent/runner.js +625 -0
- package/dist/agent/runner.js.map +1 -0
- package/dist/agent/tool-client.d.ts +12 -0
- package/dist/agent/tool-client.js +2 -0
- package/dist/agent/tool-client.js.map +1 -0
- package/dist/agent/types.d.ts +116 -0
- package/dist/agent/types.js +2 -0
- package/dist/agent/types.js.map +1 -0
- package/dist/agent-pool.d.ts +44 -0
- package/dist/agent-pool.js +228 -0
- package/dist/agent-pool.js.map +1 -0
- package/dist/bin.d.ts +2 -0
- package/dist/bin.js +7 -0
- package/dist/bin.js.map +1 -0
- package/dist/bus.d.ts +24 -0
- package/dist/bus.js +79 -0
- package/dist/bus.js.map +1 -0
- package/dist/dances.d.ts +73 -0
- package/dist/dances.js +122 -0
- package/dist/dances.js.map +1 -0
- package/dist/guard.d.ts +52 -0
- package/dist/guard.js +210 -0
- package/dist/guard.js.map +1 -0
- package/dist/heartbeat.d.ts +41 -0
- package/dist/heartbeat.js +104 -0
- package/dist/heartbeat.js.map +1 -0
- package/dist/honeycomb.d.ts +63 -0
- package/dist/honeycomb.js +222 -0
- package/dist/honeycomb.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +601 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/config.d.ts +15 -0
- package/dist/integrations/config.js +62 -0
- package/dist/integrations/config.js.map +1 -0
- package/dist/integrations/index.d.ts +4 -0
- package/dist/integrations/index.js +4 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/integrations/loader.d.ts +8 -0
- package/dist/integrations/loader.js +27 -0
- package/dist/integrations/loader.js.map +1 -0
- package/dist/integrations/manager.d.ts +29 -0
- package/dist/integrations/manager.js +108 -0
- package/dist/integrations/manager.js.map +1 -0
- package/dist/log.d.ts +25 -0
- package/dist/log.js +67 -0
- package/dist/log.js.map +1 -0
- package/dist/namespaces.d.ts +28 -0
- package/dist/namespaces.js +100 -0
- package/dist/namespaces.js.map +1 -0
- package/dist/orchestrator.d.ts +119 -0
- package/dist/orchestrator.js +463 -0
- package/dist/orchestrator.js.map +1 -0
- package/dist/persistence.d.ts +7 -0
- package/dist/persistence.js +62 -0
- package/dist/persistence.js.map +1 -0
- package/dist/plugins/index.d.ts +2 -0
- package/dist/plugins/index.js +3 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/loader.d.ts +12 -0
- package/dist/plugins/loader.js +122 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/manager.d.ts +76 -0
- package/dist/plugins/manager.js +238 -0
- package/dist/plugins/manager.js.map +1 -0
- package/dist/propolis/guard.d.ts +23 -0
- package/dist/propolis/guard.js +49 -0
- package/dist/propolis/guard.js.map +1 -0
- package/dist/propolis/tools/types.d.ts +9 -0
- package/dist/propolis/tools/types.js +9 -0
- package/dist/propolis/tools/types.js.map +1 -0
- package/dist/rest.d.ts +4 -0
- package/dist/rest.js +962 -0
- package/dist/rest.js.map +1 -0
- package/dist/run-watcher.d.ts +20 -0
- package/dist/run-watcher.js +74 -0
- package/dist/run-watcher.js.map +1 -0
- package/dist/server.d.ts +17 -0
- package/dist/server.js +412 -0
- package/dist/server.js.map +1 -0
- package/dist/stores/backend.d.ts +15 -0
- package/dist/stores/backend.js +28 -0
- package/dist/stores/backend.js.map +1 -0
- package/dist/stores/claims.d.ts +14 -0
- package/dist/stores/claims.js +77 -0
- package/dist/stores/claims.js.map +1 -0
- package/dist/stores/conflicts.d.ts +10 -0
- package/dist/stores/conflicts.js +39 -0
- package/dist/stores/conflicts.js.map +1 -0
- package/dist/stores/control.d.ts +37 -0
- package/dist/stores/control.js +105 -0
- package/dist/stores/control.js.map +1 -0
- package/dist/stores/discoveries.d.ts +11 -0
- package/dist/stores/discoveries.js +45 -0
- package/dist/stores/discoveries.js.map +1 -0
- package/dist/stores/events.d.ts +14 -0
- package/dist/stores/events.js +42 -0
- package/dist/stores/events.js.map +1 -0
- package/dist/stores/help.d.ts +11 -0
- package/dist/stores/help.js +46 -0
- package/dist/stores/help.js.map +1 -0
- package/dist/stores/interfaces.d.ts +125 -0
- package/dist/stores/interfaces.js +2 -0
- package/dist/stores/interfaces.js.map +1 -0
- package/dist/stores/messages.d.ts +8 -0
- package/dist/stores/messages.js +29 -0
- package/dist/stores/messages.js.map +1 -0
- package/dist/stores/progress.d.ts +8 -0
- package/dist/stores/progress.js +21 -0
- package/dist/stores/progress.js.map +1 -0
- package/dist/stores/proposals.d.ts +11 -0
- package/dist/stores/proposals.js +46 -0
- package/dist/stores/proposals.js.map +1 -0
- package/dist/stores/redis/claims.d.ts +16 -0
- package/dist/stores/redis/claims.js +126 -0
- package/dist/stores/redis/claims.js.map +1 -0
- package/dist/stores/redis/db.d.ts +39 -0
- package/dist/stores/redis/db.js +34 -0
- package/dist/stores/redis/db.js.map +1 -0
- package/dist/stores/redis/discoveries.d.ts +13 -0
- package/dist/stores/redis/discoveries.js +54 -0
- package/dist/stores/redis/discoveries.js.map +1 -0
- package/dist/stores/redis/events.d.ts +17 -0
- package/dist/stores/redis/events.js +57 -0
- package/dist/stores/redis/events.js.map +1 -0
- package/dist/stores/redis/index.d.ts +3 -0
- package/dist/stores/redis/index.js +31 -0
- package/dist/stores/redis/index.js.map +1 -0
- package/dist/stores/redis/state.d.ts +14 -0
- package/dist/stores/redis/state.js +83 -0
- package/dist/stores/redis/state.js.map +1 -0
- package/dist/stores/reinforcements.d.ts +11 -0
- package/dist/stores/reinforcements.js +42 -0
- package/dist/stores/reinforcements.js.map +1 -0
- package/dist/stores/roles.d.ts +9 -0
- package/dist/stores/roles.js +22 -0
- package/dist/stores/roles.js.map +1 -0
- package/dist/stores/runs.d.ts +15 -0
- package/dist/stores/runs.js +50 -0
- package/dist/stores/runs.js.map +1 -0
- package/dist/stores/sqlite/claims.d.ts +17 -0
- package/dist/stores/sqlite/claims.js +121 -0
- package/dist/stores/sqlite/claims.js.map +1 -0
- package/dist/stores/sqlite/db.d.ts +16 -0
- package/dist/stores/sqlite/db.js +77 -0
- package/dist/stores/sqlite/db.js.map +1 -0
- package/dist/stores/sqlite/discoveries.d.ts +14 -0
- package/dist/stores/sqlite/discoveries.js +66 -0
- package/dist/stores/sqlite/discoveries.js.map +1 -0
- package/dist/stores/sqlite/events.d.ts +16 -0
- package/dist/stores/sqlite/events.js +75 -0
- package/dist/stores/sqlite/events.js.map +1 -0
- package/dist/stores/sqlite/index.d.ts +2 -0
- package/dist/stores/sqlite/index.js +33 -0
- package/dist/stores/sqlite/index.js.map +1 -0
- package/dist/stores/sqlite/state.d.ts +15 -0
- package/dist/stores/sqlite/state.js +99 -0
- package/dist/stores/sqlite/state.js.map +1 -0
- package/dist/stores/state.d.ts +11 -0
- package/dist/stores/state.js +67 -0
- package/dist/stores/state.js.map +1 -0
- package/dist/transports/broker.d.ts +20 -0
- package/dist/transports/broker.js +102 -0
- package/dist/transports/broker.js.map +1 -0
- package/dist/transports/index.d.ts +3 -0
- package/dist/transports/index.js +3 -0
- package/dist/transports/index.js.map +1 -0
- package/dist/transports/ipc.d.ts +26 -0
- package/dist/transports/ipc.js +93 -0
- package/dist/transports/ipc.js.map +1 -0
- package/dist/transports/types.d.ts +39 -0
- package/dist/transports/types.js +8 -0
- package/dist/transports/types.js.map +1 -0
- package/dist/types.d.ts +45 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +3 -0
- package/dist/utils.js +36 -0
- package/dist/utils.js.map +1 -0
- package/dist/waggle/client.d.ts +16 -0
- package/dist/waggle/client.js +28 -0
- package/dist/waggle/client.js.map +1 -0
- package/dist/waggle/compound.d.ts +22 -0
- package/dist/waggle/compound.js +194 -0
- package/dist/waggle/compound.js.map +1 -0
- package/dist/waggle/index.d.ts +25 -0
- package/dist/waggle/index.js +77 -0
- package/dist/waggle/index.js.map +1 -0
- package/dist/waggle/types.d.ts +54 -0
- package/dist/waggle/types.js +2 -0
- package/dist/waggle/types.js.map +1 -0
- package/dist/webhooks.d.ts +26 -0
- package/dist/webhooks.js +79 -0
- package/dist/webhooks.js.map +1 -0
- package/dist/ws.d.ts +33 -0
- package/dist/ws.js +195 -0
- package/dist/ws.js.map +1 -0
- package/package.json +122 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Duck-typed wait parameter.
|
|
3
|
+
* true = wait for any event, "type" = specific event, ["a","b"] = any of these,
|
|
4
|
+
* number = pure sleep (ms), { types, timeout } = explicit form.
|
|
5
|
+
*/
|
|
6
|
+
export type WaitSpec = boolean | string | string[] | number | {
|
|
7
|
+
types?: string[];
|
|
8
|
+
timeout?: number;
|
|
9
|
+
};
|
|
10
|
+
/** Normalized wait condition after duck-type resolution. */
|
|
11
|
+
export interface NormalizedWait {
|
|
12
|
+
types: string[] | null;
|
|
13
|
+
timeout: number;
|
|
14
|
+
pureDelay: boolean;
|
|
15
|
+
}
|
|
16
|
+
/** A single operation in the waggle batch. */
|
|
17
|
+
export interface Operation {
|
|
18
|
+
do: string;
|
|
19
|
+
[key: string]: unknown;
|
|
20
|
+
}
|
|
21
|
+
/** Result of a single operation. */
|
|
22
|
+
export interface OpResult {
|
|
23
|
+
op: string;
|
|
24
|
+
ok: boolean;
|
|
25
|
+
data?: unknown;
|
|
26
|
+
error?: string;
|
|
27
|
+
}
|
|
28
|
+
/** Full waggle tool input. */
|
|
29
|
+
export interface WaggleInput {
|
|
30
|
+
dance: Operation[];
|
|
31
|
+
wait?: WaitSpec;
|
|
32
|
+
}
|
|
33
|
+
/** Full waggle tool result. */
|
|
34
|
+
export interface WaggleResult {
|
|
35
|
+
results: OpResult[];
|
|
36
|
+
wakeEvents?: string[];
|
|
37
|
+
}
|
|
38
|
+
/** Allowed primitives per role (from protocol spec). */
|
|
39
|
+
export interface Primitives {
|
|
40
|
+
env?: string[];
|
|
41
|
+
acp?: string[];
|
|
42
|
+
}
|
|
43
|
+
/** ACP backend interface — anything that provides coordination ops. */
|
|
44
|
+
export interface AcpBackend {
|
|
45
|
+
publishEvent(type: string, data?: Record<string, unknown>): Promise<string>;
|
|
46
|
+
claimResource(resource: string, reason?: string): Promise<string>;
|
|
47
|
+
releaseResource(resource: string): Promise<string>;
|
|
48
|
+
getState(): Promise<string>;
|
|
49
|
+
setState(key: string, value: unknown): Promise<string>;
|
|
50
|
+
waitForWake(condition: {
|
|
51
|
+
types?: string[] | null;
|
|
52
|
+
timeout?: number;
|
|
53
|
+
}): Promise<string[]>;
|
|
54
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/waggle/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { NotificationBus } from './bus.js';
|
|
2
|
+
export interface WebhookConfig {
|
|
3
|
+
url: string;
|
|
4
|
+
events?: string[];
|
|
5
|
+
headers?: Record<string, string>;
|
|
6
|
+
secret?: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Manages webhook subscriptions for a namespace.
|
|
10
|
+
* Subscribes to the notification bus and fires HTTP POSTs when events match.
|
|
11
|
+
* Fire-and-forget: failures are logged, never block the event bus.
|
|
12
|
+
*/
|
|
13
|
+
export declare class WebhookManager {
|
|
14
|
+
private unsubscribers;
|
|
15
|
+
private verbose;
|
|
16
|
+
constructor(verbose?: boolean);
|
|
17
|
+
/**
|
|
18
|
+
* Register webhooks for a namespace. Subscribes to the bus and fires POSTs on match.
|
|
19
|
+
*/
|
|
20
|
+
register(namespace: string, webhooks: WebhookConfig[], bus: NotificationBus): void;
|
|
21
|
+
/**
|
|
22
|
+
* Unsubscribe all webhook listeners.
|
|
23
|
+
*/
|
|
24
|
+
close(): void;
|
|
25
|
+
private fire;
|
|
26
|
+
}
|
package/dist/webhooks.js
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { createHmac } from 'node:crypto';
|
|
2
|
+
/**
|
|
3
|
+
* Manages webhook subscriptions for a namespace.
|
|
4
|
+
* Subscribes to the notification bus and fires HTTP POSTs when events match.
|
|
5
|
+
* Fire-and-forget: failures are logged, never block the event bus.
|
|
6
|
+
*/
|
|
7
|
+
export class WebhookManager {
|
|
8
|
+
unsubscribers = [];
|
|
9
|
+
verbose;
|
|
10
|
+
constructor(verbose = false) {
|
|
11
|
+
this.verbose = verbose;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Register webhooks for a namespace. Subscribes to the bus and fires POSTs on match.
|
|
15
|
+
*/
|
|
16
|
+
register(namespace, webhooks, bus) {
|
|
17
|
+
for (const webhook of webhooks) {
|
|
18
|
+
const filterSet = webhook.events ? new Set(webhook.events) : null;
|
|
19
|
+
const unsub = bus.subscribe(namespace, (event) => {
|
|
20
|
+
// Check event type filter
|
|
21
|
+
if (filterSet && !filterSet.has(event.type))
|
|
22
|
+
return;
|
|
23
|
+
// Fire and forget
|
|
24
|
+
this.fire(webhook, event).catch(err => {
|
|
25
|
+
if (this.verbose) {
|
|
26
|
+
console.error(`[webhooks] Failed to deliver to ${webhook.url}: ${err.message}`);
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
this.unsubscribers.push(unsub);
|
|
31
|
+
}
|
|
32
|
+
if (this.verbose && webhooks.length > 0) {
|
|
33
|
+
console.error(`[webhooks] Registered ${webhooks.length} webhook(s) for namespace "${namespace}"`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Unsubscribe all webhook listeners.
|
|
38
|
+
*/
|
|
39
|
+
close() {
|
|
40
|
+
for (const unsub of this.unsubscribers) {
|
|
41
|
+
unsub();
|
|
42
|
+
}
|
|
43
|
+
this.unsubscribers = [];
|
|
44
|
+
}
|
|
45
|
+
async fire(webhook, event) {
|
|
46
|
+
const payload = JSON.stringify({
|
|
47
|
+
event: event.type,
|
|
48
|
+
data: event.data,
|
|
49
|
+
publishedBy: event.publishedBy,
|
|
50
|
+
publishedAt: event.publishedAt,
|
|
51
|
+
id: event.id,
|
|
52
|
+
});
|
|
53
|
+
const headers = {
|
|
54
|
+
'Content-Type': 'application/json',
|
|
55
|
+
...webhook.headers,
|
|
56
|
+
};
|
|
57
|
+
// HMAC-SHA256 signature if secret provided
|
|
58
|
+
if (webhook.secret) {
|
|
59
|
+
const signature = createHmac('sha256', webhook.secret)
|
|
60
|
+
.update(payload)
|
|
61
|
+
.digest('hex');
|
|
62
|
+
headers['X-Webhook-Signature'] = signature;
|
|
63
|
+
}
|
|
64
|
+
const controller = new AbortController();
|
|
65
|
+
const timer = setTimeout(() => controller.abort(), 10_000);
|
|
66
|
+
try {
|
|
67
|
+
await fetch(webhook.url, {
|
|
68
|
+
method: 'POST',
|
|
69
|
+
headers,
|
|
70
|
+
body: payload,
|
|
71
|
+
signal: controller.signal,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
finally {
|
|
75
|
+
clearTimeout(timer);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=webhooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../src/webhooks.ts"],"names":[],"mappings":"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"}
|
package/dist/ws.d.ts
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { Server as HttpServer, IncomingMessage } from 'node:http';
|
|
2
|
+
import type { Duplex } from 'node:stream';
|
|
3
|
+
import type { NotificationBus } from './bus.js';
|
|
4
|
+
import type { NamespaceRegistry } from './namespaces.js';
|
|
5
|
+
import type { DanceModule, DanceAcpHelper } from './dances.js';
|
|
6
|
+
import type { TelemetryReporter } from '@honeybee-ai/hivemind-sdk/telemetry';
|
|
7
|
+
export interface DanceSupport {
|
|
8
|
+
module: DanceModule;
|
|
9
|
+
getState: (namespace: string) => Promise<Record<string, string>>;
|
|
10
|
+
getAcpHelper: (namespace: string, agentId: string) => DanceAcpHelper;
|
|
11
|
+
telemetry?: TelemetryReporter;
|
|
12
|
+
}
|
|
13
|
+
interface WebSocketLike {
|
|
14
|
+
send(data: string): void;
|
|
15
|
+
close(): void;
|
|
16
|
+
readyState: number;
|
|
17
|
+
on(event: string, cb: (...args: unknown[]) => void): void;
|
|
18
|
+
OPEN: number;
|
|
19
|
+
}
|
|
20
|
+
interface WebSocketServerLike {
|
|
21
|
+
handleUpgrade(req: IncomingMessage, socket: Duplex, head: Buffer, cb: (ws: WebSocketLike) => void): void;
|
|
22
|
+
close(): void;
|
|
23
|
+
clients: Set<WebSocketLike>;
|
|
24
|
+
}
|
|
25
|
+
export interface WsManager {
|
|
26
|
+
close(): void;
|
|
27
|
+
}
|
|
28
|
+
export declare function setupWebSocket(httpServer: HttpServer, registry: NamespaceRegistry, bus: NotificationBus, verbose?: boolean,
|
|
29
|
+
/** @internal for testing — inject WebSocketServer to avoid createRequire issues in vitest */
|
|
30
|
+
WebSocketServerOverride?: new (opts: {
|
|
31
|
+
noServer: true;
|
|
32
|
+
}) => WebSocketServerLike, danceSupport?: DanceSupport): Promise<WsManager>;
|
|
33
|
+
export {};
|
package/dist/ws.js
ADDED
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
const PING_INTERVAL = 30_000;
|
|
2
|
+
async function loadWebSocketServer() {
|
|
3
|
+
const wsModule = await import('ws');
|
|
4
|
+
const ws = (wsModule.default ?? wsModule);
|
|
5
|
+
return ws.WebSocketServer;
|
|
6
|
+
}
|
|
7
|
+
export async function setupWebSocket(httpServer, registry, bus, verbose,
|
|
8
|
+
/** @internal for testing — inject WebSocketServer to avoid createRequire issues in vitest */
|
|
9
|
+
WebSocketServerOverride, danceSupport) {
|
|
10
|
+
const WebSocketServer = WebSocketServerOverride ?? await loadWebSocketServer();
|
|
11
|
+
const wss = new WebSocketServer({ noServer: true });
|
|
12
|
+
httpServer.on('upgrade', (req, socket, head) => {
|
|
13
|
+
const url = new URL(req.url ?? '/', `http://localhost`);
|
|
14
|
+
if (url.pathname !== '/ws') {
|
|
15
|
+
socket.destroy();
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
wss.handleUpgrade(req, socket, head, (ws) => {
|
|
19
|
+
handleConnection(ws, url, registry, bus, verbose, danceSupport);
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
return {
|
|
23
|
+
close() {
|
|
24
|
+
wss.close();
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function handleConnection(ws, url, registry, bus, verbose, danceSupport) {
|
|
29
|
+
const namespace = url.searchParams.get('namespace') ?? 'default';
|
|
30
|
+
const sinceParam = url.searchParams.get('since');
|
|
31
|
+
const since = sinceParam !== null ? parseInt(sinceParam, 10) : undefined;
|
|
32
|
+
const typesParam = url.searchParams.get('types');
|
|
33
|
+
let typeFilter = typesParam ? new Set(typesParam.split(',').filter(Boolean)) : null;
|
|
34
|
+
const agentId = url.searchParams.get('agentId') ?? undefined;
|
|
35
|
+
const agentRole = url.searchParams.get('role') ?? undefined;
|
|
36
|
+
// Buffer for events arriving during replay
|
|
37
|
+
const buffer = [];
|
|
38
|
+
let replaying = true;
|
|
39
|
+
let replayCursor = since ?? 0;
|
|
40
|
+
function send(msg) {
|
|
41
|
+
if (ws.readyState === ws.OPEN) {
|
|
42
|
+
ws.send(JSON.stringify(msg));
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function matchesFilter(event) {
|
|
46
|
+
if (!typeFilter)
|
|
47
|
+
return true;
|
|
48
|
+
return typeFilter.has(event.type);
|
|
49
|
+
}
|
|
50
|
+
async function sendEventWithInject(event) {
|
|
51
|
+
if (danceSupport && agentId && agentRole) {
|
|
52
|
+
const state = await danceSupport.getState(namespace);
|
|
53
|
+
const { runInject } = await import('./dances.js');
|
|
54
|
+
const injectStr = runInject(danceSupport.module, state, agentRole, agentId);
|
|
55
|
+
send({ type: 'event', event, ...(injectStr ? { inject: injectStr } : {}) });
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
send({ type: 'event', event });
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// Subscribe to bus FIRST (buffer during replay)
|
|
62
|
+
const unsubscribe = bus.subscribe(namespace, (event) => {
|
|
63
|
+
if (!matchesFilter(event))
|
|
64
|
+
return;
|
|
65
|
+
if (replaying) {
|
|
66
|
+
buffer.push(event);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
sendEventWithInject(event);
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
// Replay from store
|
|
73
|
+
const stores = registry.get(namespace);
|
|
74
|
+
stores.events.getEvents(since).then(async ({ events, cursor }) => {
|
|
75
|
+
// Send replayed events
|
|
76
|
+
for (const event of events) {
|
|
77
|
+
if (matchesFilter(event)) {
|
|
78
|
+
await sendEventWithInject(event);
|
|
79
|
+
replayCursor = Math.max(replayCursor, event.id);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
replayCursor = Math.max(replayCursor, cursor);
|
|
83
|
+
// Send replay_done marker
|
|
84
|
+
send({ type: 'replay_done', cursor: replayCursor });
|
|
85
|
+
// Send dance tool defs if dance support is available
|
|
86
|
+
if (danceSupport) {
|
|
87
|
+
const { danceToolDefs } = await import('./dances.js');
|
|
88
|
+
send({ type: 'dance_tools', tools: danceToolDefs(danceSupport.module) });
|
|
89
|
+
}
|
|
90
|
+
// Flush buffer (de-dup: skip events already sent via replay)
|
|
91
|
+
replaying = false;
|
|
92
|
+
for (const event of buffer) {
|
|
93
|
+
if (event.id > replayCursor) {
|
|
94
|
+
await sendEventWithInject(event);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
buffer.length = 0;
|
|
98
|
+
if (verbose) {
|
|
99
|
+
console.error(`[incubator] WS client connected: ns=${namespace} since=${since ?? 'start'} replayed=${events.length}`);
|
|
100
|
+
}
|
|
101
|
+
}).catch((err) => {
|
|
102
|
+
send({ type: 'error', message: 'Replay failed' });
|
|
103
|
+
if (verbose)
|
|
104
|
+
console.error('[incubator] WS replay error:', err);
|
|
105
|
+
ws.close();
|
|
106
|
+
});
|
|
107
|
+
// Handle client messages
|
|
108
|
+
ws.on('message', (raw) => {
|
|
109
|
+
try {
|
|
110
|
+
const msg = JSON.parse(String(raw));
|
|
111
|
+
if (msg.type === 'subscribe') {
|
|
112
|
+
typeFilter = msg.types ? new Set(msg.types) : null;
|
|
113
|
+
}
|
|
114
|
+
else if (msg.type === 'publish' && typeof msg.event === 'string') {
|
|
115
|
+
// Publish an event to the bus (e.g. "start" from UI)
|
|
116
|
+
const stores = registry.get(namespace);
|
|
117
|
+
stores.events.publish(msg.event, msg.data ?? {}, msg.agentId ?? 'ui').then((event) => {
|
|
118
|
+
bus.publish(namespace, event);
|
|
119
|
+
send({ type: 'publish_ack', eventId: event.id });
|
|
120
|
+
}).catch(() => {
|
|
121
|
+
send({ type: 'error', message: 'Failed to publish event' });
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
else if (msg.type === 'reset') {
|
|
125
|
+
// Clear all state + publish reset event (for starting new games)
|
|
126
|
+
const stores = registry.get(namespace);
|
|
127
|
+
stores.state.getAll().then(async (entries) => {
|
|
128
|
+
for (const entry of entries)
|
|
129
|
+
await stores.state.delete(entry.key);
|
|
130
|
+
const resetEvent = await stores.events.publish('reset', {}, 'ui');
|
|
131
|
+
bus.publish(namespace, resetEvent);
|
|
132
|
+
send({ type: 'reset_ack' });
|
|
133
|
+
if (verbose)
|
|
134
|
+
console.error(`[incubator] WS reset: ns=${namespace} (cleared ${entries.length} keys)`);
|
|
135
|
+
}).catch(() => {
|
|
136
|
+
send({ type: 'error', message: 'Failed to reset state' });
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
else if (msg.type === 'dance_call' && danceSupport && typeof msg.tool === 'string') {
|
|
140
|
+
const callAgentId = msg.agentId ?? agentId ?? 'unknown';
|
|
141
|
+
const callRole = msg.role ?? agentRole ?? 'unknown';
|
|
142
|
+
const callId = msg.callId;
|
|
143
|
+
const getStateFn = () => danceSupport.getState(namespace);
|
|
144
|
+
const acpHelper = danceSupport.getAcpHelper(namespace, callAgentId);
|
|
145
|
+
const danceStart = Date.now();
|
|
146
|
+
void import('./dances.js').then(({ callDanceTool: call }) => call(danceSupport.module, msg.tool, msg.args ?? {}, callRole, callAgentId, getStateFn, acpHelper)).then(result => {
|
|
147
|
+
// Unwrap: handlers return { result, wait? } or { error }.
|
|
148
|
+
// Send only the inner result or error — strip runner metadata (wait).
|
|
149
|
+
const payload = 'error' in result ? { error: result.error } : result.result;
|
|
150
|
+
danceSupport?.telemetry?.record('dance_call', {
|
|
151
|
+
tool: msg.tool, role: callRole, agentId: callAgentId,
|
|
152
|
+
success: !('error' in result), latency_ms: Date.now() - danceStart,
|
|
153
|
+
});
|
|
154
|
+
send({ type: 'dance_result', callId, result: payload });
|
|
155
|
+
}).catch(err => {
|
|
156
|
+
danceSupport?.telemetry?.record('dance_call', {
|
|
157
|
+
tool: msg.tool, role: callRole, agentId: callAgentId,
|
|
158
|
+
success: false, error: err.message, latency_ms: Date.now() - danceStart,
|
|
159
|
+
});
|
|
160
|
+
send({ type: 'dance_result', callId, result: { error: err.message } });
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
// ignore malformed messages
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
// Ping keepalive
|
|
169
|
+
const pingTimer = setInterval(() => {
|
|
170
|
+
send({ type: 'ping', ts: Date.now() });
|
|
171
|
+
}, PING_INTERVAL);
|
|
172
|
+
// Metrics push (every 10s, if telemetry available)
|
|
173
|
+
const METRICS_INTERVAL = 10_000;
|
|
174
|
+
const metricsTimer = danceSupport?.telemetry ? setInterval(() => {
|
|
175
|
+
if (ws.readyState !== ws.OPEN)
|
|
176
|
+
return;
|
|
177
|
+
const snapshot = danceSupport.telemetry.getSnapshot?.();
|
|
178
|
+
if (snapshot) {
|
|
179
|
+
send({ type: 'metrics', data: snapshot });
|
|
180
|
+
}
|
|
181
|
+
}, METRICS_INTERVAL) : null;
|
|
182
|
+
// Cleanup on close/error
|
|
183
|
+
const cleanup = () => {
|
|
184
|
+
clearInterval(pingTimer);
|
|
185
|
+
if (metricsTimer)
|
|
186
|
+
clearInterval(metricsTimer);
|
|
187
|
+
unsubscribe();
|
|
188
|
+
if (verbose) {
|
|
189
|
+
console.error(`[incubator] WS client disconnected: ns=${namespace}`);
|
|
190
|
+
}
|
|
191
|
+
};
|
|
192
|
+
ws.on('close', cleanup);
|
|
193
|
+
ws.on('error', cleanup);
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=ws.js.map
|
package/dist/ws.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws.js","sourceRoot":"","sources":["../src/ws.ts"],"names":[],"mappings":"AAiCA,MAAM,aAAa,GAAG,MAAM,CAAC;AAE7B,KAAK,UAAU,mBAAmB;IAChC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAA0F,CAAC;IACnI,OAAO,EAAE,CAAC,eAAe,CAAC;AAC5B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,UAAsB,EACtB,QAA2B,EAC3B,GAAoB,EACpB,OAAiB;AACjB,6FAA6F;AAC7F,uBAA+E,EAC/E,YAA2B;IAE3B,MAAM,eAAe,GAAG,uBAAuB,IAAI,MAAM,mBAAmB,EAAE,CAAC;IAC/E,MAAM,GAAG,GAAG,IAAI,eAAe,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAEpD,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAoB,EAAE,MAAc,EAAE,IAAY,EAAE,EAAE;QAC9E,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,kBAAkB,CAAC,CAAC;QACxD,IAAI,GAAG,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;YAC3B,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,GAAG,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE;YAC1C,gBAAgB,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,KAAK;YACH,GAAG,CAAC,KAAK,EAAE,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CACvB,EAAiB,EACjB,GAAQ,EACR,QAA2B,EAC3B,GAAoB,EACpB,OAAiB,EACjB,YAA2B;IAE3B,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,SAAS,CAAC;IACjE,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzE,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACjD,IAAI,UAAU,GAAuB,UAAU,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACxG,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC;IAC7D,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;IAE5D,2CAA2C;IAC3C,MAAM,MAAM,GAAqB,EAAE,CAAC;IACpC,IAAI,SAAS,GAAG,IAAI,CAAC;IACrB,IAAI,YAAY,GAAG,KAAK,IAAI,CAAC,CAAC;IAE9B,SAAS,IAAI,CAAC,GAAY;QACxB,IAAI,EAAE,CAAC,UAAU,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;YAC9B,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,SAAS,aAAa,CAAC,KAAqB;QAC1C,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;QAC7B,OAAO,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,UAAU,mBAAmB,CAAC,KAAqB;QACtD,IAAI,YAAY,IAAI,OAAO,IAAI,SAAS,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACrD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YAClD,MAAM,SAAS,GAAG,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;YAC5E,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9E,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,gDAAgD;IAChD,MAAM,WAAW,GAAG,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;QACrD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;YAAE,OAAO;QAClC,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,oBAAoB;IACpB,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACvC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE;QAC/D,uBAAuB;QACvB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,MAAM,mBAAmB,CAAC,KAAK,CAAC,CAAC;gBACjC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QACD,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAE9C,0BAA0B;QAC1B,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;QAEpD,qDAAqD;QACrD,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YACtD,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC3E,CAAC;QAED,6DAA6D;QAC7D,SAAS,GAAG,KAAK,CAAC;QAClB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,KAAK,CAAC,EAAE,GAAG,YAAY,EAAE,CAAC;gBAC5B,MAAM,mBAAmB,CAAC,KAAK,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;QACD,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QAElB,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,uCAAuC,SAAS,UAAU,KAAK,IAAI,OAAO,aAAa,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACxH,CAAC;IACH,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACf,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;QAClD,IAAI,OAAO;YAAE,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,GAAG,CAAC,CAAC;QAChE,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,yBAAyB;IACzB,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAY,EAAE,EAAE;QAChC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAA4B,CAAC;YAC/D,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAC7B,UAAU,GAAI,GAAG,CAAC,KAAyB,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,KAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACtF,CAAC;iBAAM,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACnE,qDAAqD;gBACrD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACvC,MAAM,CAAC,MAAM,CAAC,OAAO,CACnB,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,IAAI,IAAI,EAAE,EACb,GAAG,CAAC,OAAkB,IAAI,IAAI,CAChC,CAAC,IAAI,CAAC,CAAC,KAAqB,EAAE,EAAE;oBAC/B,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;oBAC9B,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;gBACnD,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;oBACZ,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC,CAAC;gBAC9D,CAAC,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAChC,iEAAiE;gBACjE,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACvC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;oBAC3C,KAAK,MAAM,KAAK,IAAI,OAAO;wBAAE,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAClE,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;oBAClE,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;oBACnC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;oBAC5B,IAAI,OAAO;wBAAE,OAAO,CAAC,KAAK,CAAC,4BAA4B,SAAS,aAAa,OAAO,CAAC,MAAM,QAAQ,CAAC,CAAC;gBACvG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;oBACZ,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC,CAAC;gBAC5D,CAAC,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,IAAI,YAAY,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACrF,MAAM,WAAW,GAAI,GAAG,CAAC,OAAkB,IAAI,OAAO,IAAI,SAAS,CAAC;gBACpE,MAAM,QAAQ,GAAI,GAAG,CAAC,IAAe,IAAI,SAAS,IAAI,SAAS,CAAC;gBAChE,MAAM,MAAM,GAAG,GAAG,CAAC,MAAgB,CAAC;gBAEpC,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,YAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAC3D,MAAM,SAAS,GAAG,YAAa,CAAC,YAAY,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;gBAErE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC9B,KAAK,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,EAAE,CAC1D,IAAI,CACF,YAAa,CAAC,MAAM,EACpB,GAAG,CAAC,IAAc,EACjB,GAAG,CAAC,IAAgC,IAAI,EAAE,EAC3C,QAAQ,EACR,WAAW,EACX,UAAU,EACV,SAAS,CACV,CACF,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;oBACd,0DAA0D;oBAC1D,sEAAsE;oBACtE,MAAM,OAAO,GAAG,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;oBAC5E,YAAY,EAAE,SAAS,EAAE,MAAM,CAAC,YAAY,EAAE;wBAC5C,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW;wBACpD,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU;qBACnE,CAAC,CAAC;oBACH,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC1D,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;oBACb,YAAY,EAAE,SAAS,EAAE,MAAM,CAAC,YAAY,EAAE;wBAC5C,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW;wBACpD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU;qBACnF,CAAC,CAAC;oBACH,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBACpF,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,4BAA4B;QAC9B,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,iBAAiB;IACjB,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE;QACjC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACzC,CAAC,EAAE,aAAa,CAAC,CAAC;IAElB,mDAAmD;IACnD,MAAM,gBAAgB,GAAG,MAAM,CAAC;IAChC,MAAM,YAAY,GAAG,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE;QAC9D,IAAI,EAAE,CAAC,UAAU,KAAK,EAAE,CAAC,IAAI;YAAE,OAAO;QACtC,MAAM,QAAQ,GAAG,YAAa,CAAC,SAAU,CAAC,WAAW,EAAE,EAAE,CAAC;QAC1D,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE5B,yBAAyB;IACzB,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,aAAa,CAAC,SAAS,CAAC,CAAC;QACzB,IAAI,YAAY;YAAE,aAAa,CAAC,YAAY,CAAC,CAAC;QAC9C,WAAW,EAAE,CAAC;QACd,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,0CAA0C,SAAS,EAAE,CAAC,CAAC;QACvE,CAAC;IACH,CAAC,CAAC;IAEF,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACxB,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC1B,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@honeybee-ai/incubator",
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"description": "Give your agent swarm shared memory. MCP server + REST API for multi-agent coordination.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"incubator": "dist/bin.js"
|
|
10
|
+
},
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"import": "./dist/index.js",
|
|
14
|
+
"types": "./dist/index.d.ts"
|
|
15
|
+
},
|
|
16
|
+
"./stores": {
|
|
17
|
+
"import": "./dist/stores/interfaces.js",
|
|
18
|
+
"types": "./dist/stores/interfaces.d.ts"
|
|
19
|
+
},
|
|
20
|
+
"./runtime": {
|
|
21
|
+
"import": "./dist/agent/runner.js",
|
|
22
|
+
"types": "./dist/agent/runner.d.ts"
|
|
23
|
+
},
|
|
24
|
+
"./providers": {
|
|
25
|
+
"import": "./dist/agent/providers.js",
|
|
26
|
+
"types": "./dist/agent/providers.d.ts"
|
|
27
|
+
},
|
|
28
|
+
"./waggle": {
|
|
29
|
+
"import": "./dist/waggle/compound.js",
|
|
30
|
+
"types": "./dist/waggle/compound.d.ts"
|
|
31
|
+
},
|
|
32
|
+
"./acp": {
|
|
33
|
+
"import": "./dist/agent/acp/direct-runtime.js",
|
|
34
|
+
"types": "./dist/agent/acp/direct-runtime.d.ts"
|
|
35
|
+
},
|
|
36
|
+
"./bus": {
|
|
37
|
+
"import": "./dist/bus.js",
|
|
38
|
+
"types": "./dist/bus.d.ts"
|
|
39
|
+
},
|
|
40
|
+
"./types": {
|
|
41
|
+
"import": "./dist/types.js",
|
|
42
|
+
"types": "./dist/types.d.ts"
|
|
43
|
+
},
|
|
44
|
+
"./event-matcher": {
|
|
45
|
+
"import": "./dist/agent/acp/event-matcher.js",
|
|
46
|
+
"types": "./dist/agent/acp/event-matcher.d.ts"
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
"files": [
|
|
50
|
+
"dist",
|
|
51
|
+
"dashboard/dist",
|
|
52
|
+
"README.md"
|
|
53
|
+
],
|
|
54
|
+
"scripts": {
|
|
55
|
+
"build": "tsc",
|
|
56
|
+
"start": "node dist/index.js",
|
|
57
|
+
"dev": "tsc --watch",
|
|
58
|
+
"test": "vitest run",
|
|
59
|
+
"test:watch": "node --experimental-vm-modules node_modules/.bin/vitest",
|
|
60
|
+
"prepublishOnly": "pnpm run build && pnpm test"
|
|
61
|
+
},
|
|
62
|
+
"keywords": [
|
|
63
|
+
"mcp",
|
|
64
|
+
"multi-agent",
|
|
65
|
+
"coordination",
|
|
66
|
+
"ai-agents",
|
|
67
|
+
"swarm",
|
|
68
|
+
"claims",
|
|
69
|
+
"shared-state",
|
|
70
|
+
"model-context-protocol",
|
|
71
|
+
"claude",
|
|
72
|
+
"llm",
|
|
73
|
+
"agent-coordination",
|
|
74
|
+
"rest-api",
|
|
75
|
+
"sqlite",
|
|
76
|
+
"redis",
|
|
77
|
+
"persistent"
|
|
78
|
+
],
|
|
79
|
+
"author": "Honeybee AI <hello@honeyb.dev>",
|
|
80
|
+
"license": "MIT",
|
|
81
|
+
"repository": {
|
|
82
|
+
"type": "git",
|
|
83
|
+
"url": "https://github.com/honeybee-ai/incubator"
|
|
84
|
+
},
|
|
85
|
+
"engines": {
|
|
86
|
+
"node": ">=18"
|
|
87
|
+
},
|
|
88
|
+
"dependencies": {
|
|
89
|
+
"@agentcoordinationprotocol/sdk": "^0.1.0",
|
|
90
|
+
"@agentcoordinationprotocol/spec": "^0.2.2",
|
|
91
|
+
"@anthropic-ai/sdk": "^0.74.0",
|
|
92
|
+
"@cerebras/cerebras_cloud_sdk": "^1.64.1",
|
|
93
|
+
"@honeybee-ai/carapace": "^1.0.1",
|
|
94
|
+
"@honeybee-ai/hivemind-sdk": "^0.2.7",
|
|
95
|
+
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
96
|
+
"groq-sdk": "^0.37.0",
|
|
97
|
+
"js-yaml": "^4.1.1",
|
|
98
|
+
"zod": "^3.24.2"
|
|
99
|
+
},
|
|
100
|
+
"devDependencies": {
|
|
101
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
102
|
+
"@types/js-yaml": "^4.0.9",
|
|
103
|
+
"@types/node": "^22.13.1",
|
|
104
|
+
"@types/ws": "^8.5.14",
|
|
105
|
+
"typescript": "^5.7.3",
|
|
106
|
+
"vitest": "^3.0.5"
|
|
107
|
+
},
|
|
108
|
+
"pnpm": {
|
|
109
|
+
"onlyBuiltDependencies": [
|
|
110
|
+
"better-sqlite3",
|
|
111
|
+
"esbuild"
|
|
112
|
+
]
|
|
113
|
+
},
|
|
114
|
+
"optionalDependencies": {
|
|
115
|
+
"@anthropic-ai/claude-agent-sdk": "^0.2.39",
|
|
116
|
+
"@honeybee-ai/propolis": "^0.1.0",
|
|
117
|
+
"better-sqlite3": "^12.6.2",
|
|
118
|
+
"ioredis": "^5.9.2",
|
|
119
|
+
"sirv": "^3.0.0",
|
|
120
|
+
"ws": "^8.18.0"
|
|
121
|
+
}
|
|
122
|
+
}
|