@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.
Files changed (245) hide show
  1. package/README.md +586 -0
  2. package/dashboard/dist/assets/index-DFb8p7xI.js +9 -0
  3. package/dashboard/dist/assets/index-RKiEoHEo.css +1 -0
  4. package/dashboard/dist/index.html +13 -0
  5. package/dist/agent/acp/claim-manager.d.ts +24 -0
  6. package/dist/agent/acp/claim-manager.js +64 -0
  7. package/dist/agent/acp/claim-manager.js.map +1 -0
  8. package/dist/agent/acp/direct-runtime.d.ts +90 -0
  9. package/dist/agent/acp/direct-runtime.js +364 -0
  10. package/dist/agent/acp/direct-runtime.js.map +1 -0
  11. package/dist/agent/acp/event-client.d.ts +20 -0
  12. package/dist/agent/acp/event-client.js +60 -0
  13. package/dist/agent/acp/event-client.js.map +1 -0
  14. package/dist/agent/acp/event-matcher.d.ts +13 -0
  15. package/dist/agent/acp/event-matcher.js +31 -0
  16. package/dist/agent/acp/event-matcher.js.map +1 -0
  17. package/dist/agent/acp/progress.d.ts +23 -0
  18. package/dist/agent/acp/progress.js +54 -0
  19. package/dist/agent/acp/progress.js.map +1 -0
  20. package/dist/agent/acp/runtime.d.ts +156 -0
  21. package/dist/agent/acp/runtime.js +337 -0
  22. package/dist/agent/acp/runtime.js.map +1 -0
  23. package/dist/agent/acp/ws-event-client.d.ts +64 -0
  24. package/dist/agent/acp/ws-event-client.js +263 -0
  25. package/dist/agent/acp/ws-event-client.js.map +1 -0
  26. package/dist/agent/agent.d.ts +60 -0
  27. package/dist/agent/agent.js +121 -0
  28. package/dist/agent/agent.js.map +1 -0
  29. package/dist/agent/cli.d.ts +2 -0
  30. package/dist/agent/cli.js +311 -0
  31. package/dist/agent/cli.js.map +1 -0
  32. package/dist/agent/mcp-client.d.ts +37 -0
  33. package/dist/agent/mcp-client.js +92 -0
  34. package/dist/agent/mcp-client.js.map +1 -0
  35. package/dist/agent/mock-runner.d.ts +14 -0
  36. package/dist/agent/mock-runner.js +159 -0
  37. package/dist/agent/mock-runner.js.map +1 -0
  38. package/dist/agent/native-client.d.ts +18 -0
  39. package/dist/agent/native-client.js +42 -0
  40. package/dist/agent/native-client.js.map +1 -0
  41. package/dist/agent/prompt.d.ts +45 -0
  42. package/dist/agent/prompt.js +115 -0
  43. package/dist/agent/prompt.js.map +1 -0
  44. package/dist/agent/providers.d.ts +25 -0
  45. package/dist/agent/providers.js +696 -0
  46. package/dist/agent/providers.js.map +1 -0
  47. package/dist/agent/runner.d.ts +15 -0
  48. package/dist/agent/runner.js +625 -0
  49. package/dist/agent/runner.js.map +1 -0
  50. package/dist/agent/tool-client.d.ts +12 -0
  51. package/dist/agent/tool-client.js +2 -0
  52. package/dist/agent/tool-client.js.map +1 -0
  53. package/dist/agent/types.d.ts +116 -0
  54. package/dist/agent/types.js +2 -0
  55. package/dist/agent/types.js.map +1 -0
  56. package/dist/agent-pool.d.ts +44 -0
  57. package/dist/agent-pool.js +228 -0
  58. package/dist/agent-pool.js.map +1 -0
  59. package/dist/bin.d.ts +2 -0
  60. package/dist/bin.js +7 -0
  61. package/dist/bin.js.map +1 -0
  62. package/dist/bus.d.ts +24 -0
  63. package/dist/bus.js +79 -0
  64. package/dist/bus.js.map +1 -0
  65. package/dist/dances.d.ts +73 -0
  66. package/dist/dances.js +122 -0
  67. package/dist/dances.js.map +1 -0
  68. package/dist/guard.d.ts +52 -0
  69. package/dist/guard.js +210 -0
  70. package/dist/guard.js.map +1 -0
  71. package/dist/heartbeat.d.ts +41 -0
  72. package/dist/heartbeat.js +104 -0
  73. package/dist/heartbeat.js.map +1 -0
  74. package/dist/honeycomb.d.ts +63 -0
  75. package/dist/honeycomb.js +222 -0
  76. package/dist/honeycomb.js.map +1 -0
  77. package/dist/index.d.ts +2 -0
  78. package/dist/index.js +601 -0
  79. package/dist/index.js.map +1 -0
  80. package/dist/integrations/config.d.ts +15 -0
  81. package/dist/integrations/config.js +62 -0
  82. package/dist/integrations/config.js.map +1 -0
  83. package/dist/integrations/index.d.ts +4 -0
  84. package/dist/integrations/index.js +4 -0
  85. package/dist/integrations/index.js.map +1 -0
  86. package/dist/integrations/loader.d.ts +8 -0
  87. package/dist/integrations/loader.js +27 -0
  88. package/dist/integrations/loader.js.map +1 -0
  89. package/dist/integrations/manager.d.ts +29 -0
  90. package/dist/integrations/manager.js +108 -0
  91. package/dist/integrations/manager.js.map +1 -0
  92. package/dist/log.d.ts +25 -0
  93. package/dist/log.js +67 -0
  94. package/dist/log.js.map +1 -0
  95. package/dist/namespaces.d.ts +28 -0
  96. package/dist/namespaces.js +100 -0
  97. package/dist/namespaces.js.map +1 -0
  98. package/dist/orchestrator.d.ts +119 -0
  99. package/dist/orchestrator.js +463 -0
  100. package/dist/orchestrator.js.map +1 -0
  101. package/dist/persistence.d.ts +7 -0
  102. package/dist/persistence.js +62 -0
  103. package/dist/persistence.js.map +1 -0
  104. package/dist/plugins/index.d.ts +2 -0
  105. package/dist/plugins/index.js +3 -0
  106. package/dist/plugins/index.js.map +1 -0
  107. package/dist/plugins/loader.d.ts +12 -0
  108. package/dist/plugins/loader.js +122 -0
  109. package/dist/plugins/loader.js.map +1 -0
  110. package/dist/plugins/manager.d.ts +76 -0
  111. package/dist/plugins/manager.js +238 -0
  112. package/dist/plugins/manager.js.map +1 -0
  113. package/dist/propolis/guard.d.ts +23 -0
  114. package/dist/propolis/guard.js +49 -0
  115. package/dist/propolis/guard.js.map +1 -0
  116. package/dist/propolis/tools/types.d.ts +9 -0
  117. package/dist/propolis/tools/types.js +9 -0
  118. package/dist/propolis/tools/types.js.map +1 -0
  119. package/dist/rest.d.ts +4 -0
  120. package/dist/rest.js +962 -0
  121. package/dist/rest.js.map +1 -0
  122. package/dist/run-watcher.d.ts +20 -0
  123. package/dist/run-watcher.js +74 -0
  124. package/dist/run-watcher.js.map +1 -0
  125. package/dist/server.d.ts +17 -0
  126. package/dist/server.js +412 -0
  127. package/dist/server.js.map +1 -0
  128. package/dist/stores/backend.d.ts +15 -0
  129. package/dist/stores/backend.js +28 -0
  130. package/dist/stores/backend.js.map +1 -0
  131. package/dist/stores/claims.d.ts +14 -0
  132. package/dist/stores/claims.js +77 -0
  133. package/dist/stores/claims.js.map +1 -0
  134. package/dist/stores/conflicts.d.ts +10 -0
  135. package/dist/stores/conflicts.js +39 -0
  136. package/dist/stores/conflicts.js.map +1 -0
  137. package/dist/stores/control.d.ts +37 -0
  138. package/dist/stores/control.js +105 -0
  139. package/dist/stores/control.js.map +1 -0
  140. package/dist/stores/discoveries.d.ts +11 -0
  141. package/dist/stores/discoveries.js +45 -0
  142. package/dist/stores/discoveries.js.map +1 -0
  143. package/dist/stores/events.d.ts +14 -0
  144. package/dist/stores/events.js +42 -0
  145. package/dist/stores/events.js.map +1 -0
  146. package/dist/stores/help.d.ts +11 -0
  147. package/dist/stores/help.js +46 -0
  148. package/dist/stores/help.js.map +1 -0
  149. package/dist/stores/interfaces.d.ts +125 -0
  150. package/dist/stores/interfaces.js +2 -0
  151. package/dist/stores/interfaces.js.map +1 -0
  152. package/dist/stores/messages.d.ts +8 -0
  153. package/dist/stores/messages.js +29 -0
  154. package/dist/stores/messages.js.map +1 -0
  155. package/dist/stores/progress.d.ts +8 -0
  156. package/dist/stores/progress.js +21 -0
  157. package/dist/stores/progress.js.map +1 -0
  158. package/dist/stores/proposals.d.ts +11 -0
  159. package/dist/stores/proposals.js +46 -0
  160. package/dist/stores/proposals.js.map +1 -0
  161. package/dist/stores/redis/claims.d.ts +16 -0
  162. package/dist/stores/redis/claims.js +126 -0
  163. package/dist/stores/redis/claims.js.map +1 -0
  164. package/dist/stores/redis/db.d.ts +39 -0
  165. package/dist/stores/redis/db.js +34 -0
  166. package/dist/stores/redis/db.js.map +1 -0
  167. package/dist/stores/redis/discoveries.d.ts +13 -0
  168. package/dist/stores/redis/discoveries.js +54 -0
  169. package/dist/stores/redis/discoveries.js.map +1 -0
  170. package/dist/stores/redis/events.d.ts +17 -0
  171. package/dist/stores/redis/events.js +57 -0
  172. package/dist/stores/redis/events.js.map +1 -0
  173. package/dist/stores/redis/index.d.ts +3 -0
  174. package/dist/stores/redis/index.js +31 -0
  175. package/dist/stores/redis/index.js.map +1 -0
  176. package/dist/stores/redis/state.d.ts +14 -0
  177. package/dist/stores/redis/state.js +83 -0
  178. package/dist/stores/redis/state.js.map +1 -0
  179. package/dist/stores/reinforcements.d.ts +11 -0
  180. package/dist/stores/reinforcements.js +42 -0
  181. package/dist/stores/reinforcements.js.map +1 -0
  182. package/dist/stores/roles.d.ts +9 -0
  183. package/dist/stores/roles.js +22 -0
  184. package/dist/stores/roles.js.map +1 -0
  185. package/dist/stores/runs.d.ts +15 -0
  186. package/dist/stores/runs.js +50 -0
  187. package/dist/stores/runs.js.map +1 -0
  188. package/dist/stores/sqlite/claims.d.ts +17 -0
  189. package/dist/stores/sqlite/claims.js +121 -0
  190. package/dist/stores/sqlite/claims.js.map +1 -0
  191. package/dist/stores/sqlite/db.d.ts +16 -0
  192. package/dist/stores/sqlite/db.js +77 -0
  193. package/dist/stores/sqlite/db.js.map +1 -0
  194. package/dist/stores/sqlite/discoveries.d.ts +14 -0
  195. package/dist/stores/sqlite/discoveries.js +66 -0
  196. package/dist/stores/sqlite/discoveries.js.map +1 -0
  197. package/dist/stores/sqlite/events.d.ts +16 -0
  198. package/dist/stores/sqlite/events.js +75 -0
  199. package/dist/stores/sqlite/events.js.map +1 -0
  200. package/dist/stores/sqlite/index.d.ts +2 -0
  201. package/dist/stores/sqlite/index.js +33 -0
  202. package/dist/stores/sqlite/index.js.map +1 -0
  203. package/dist/stores/sqlite/state.d.ts +15 -0
  204. package/dist/stores/sqlite/state.js +99 -0
  205. package/dist/stores/sqlite/state.js.map +1 -0
  206. package/dist/stores/state.d.ts +11 -0
  207. package/dist/stores/state.js +67 -0
  208. package/dist/stores/state.js.map +1 -0
  209. package/dist/transports/broker.d.ts +20 -0
  210. package/dist/transports/broker.js +102 -0
  211. package/dist/transports/broker.js.map +1 -0
  212. package/dist/transports/index.d.ts +3 -0
  213. package/dist/transports/index.js +3 -0
  214. package/dist/transports/index.js.map +1 -0
  215. package/dist/transports/ipc.d.ts +26 -0
  216. package/dist/transports/ipc.js +93 -0
  217. package/dist/transports/ipc.js.map +1 -0
  218. package/dist/transports/types.d.ts +39 -0
  219. package/dist/transports/types.js +8 -0
  220. package/dist/transports/types.js.map +1 -0
  221. package/dist/types.d.ts +45 -0
  222. package/dist/types.js +2 -0
  223. package/dist/types.js.map +1 -0
  224. package/dist/utils.d.ts +3 -0
  225. package/dist/utils.js +36 -0
  226. package/dist/utils.js.map +1 -0
  227. package/dist/waggle/client.d.ts +16 -0
  228. package/dist/waggle/client.js +28 -0
  229. package/dist/waggle/client.js.map +1 -0
  230. package/dist/waggle/compound.d.ts +22 -0
  231. package/dist/waggle/compound.js +194 -0
  232. package/dist/waggle/compound.js.map +1 -0
  233. package/dist/waggle/index.d.ts +25 -0
  234. package/dist/waggle/index.js +77 -0
  235. package/dist/waggle/index.js.map +1 -0
  236. package/dist/waggle/types.d.ts +54 -0
  237. package/dist/waggle/types.js +2 -0
  238. package/dist/waggle/types.js.map +1 -0
  239. package/dist/webhooks.d.ts +26 -0
  240. package/dist/webhooks.js +79 -0
  241. package/dist/webhooks.js.map +1 -0
  242. package/dist/ws.d.ts +33 -0
  243. package/dist/ws.js +195 -0
  244. package/dist/ws.js.map +1 -0
  245. 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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -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
+ }
@@ -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":"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"}
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
+ }