@honeybee-ai/incubator 1.0.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.

Potentially problematic release.


This version of @honeybee-ai/incubator might be problematic. Click here for more details.

Files changed (167) hide show
  1. package/README.md +586 -0
  2. package/dashboard/dist/assets/index-CVqcfjV3.js +9 -0
  3. package/dashboard/dist/assets/index-CyFMIiFl.css +1 -0
  4. package/dashboard/dist/index.html +13 -0
  5. package/dist/agent/prompt.d.ts +70 -0
  6. package/dist/agent/prompt.js +165 -0
  7. package/dist/agent/prompt.js.map +1 -0
  8. package/dist/agent/providers.d.ts +6 -0
  9. package/dist/agent/providers.js +320 -0
  10. package/dist/agent/providers.js.map +1 -0
  11. package/dist/agent/runner.d.ts +22 -0
  12. package/dist/agent/runner.js +282 -0
  13. package/dist/agent/runner.js.map +1 -0
  14. package/dist/agent/test-helpers.d.ts +11 -0
  15. package/dist/agent/test-helpers.js +63 -0
  16. package/dist/agent/test-helpers.js.map +1 -0
  17. package/dist/agent/tools.d.ts +4 -0
  18. package/dist/agent/tools.js +545 -0
  19. package/dist/agent/tools.js.map +1 -0
  20. package/dist/agent/types.d.ts +54 -0
  21. package/dist/agent/types.js +2 -0
  22. package/dist/agent/types.js.map +1 -0
  23. package/dist/bus.d.ts +24 -0
  24. package/dist/bus.js +79 -0
  25. package/dist/bus.js.map +1 -0
  26. package/dist/guard.d.ts +44 -0
  27. package/dist/guard.js +178 -0
  28. package/dist/guard.js.map +1 -0
  29. package/dist/heartbeat.d.ts +41 -0
  30. package/dist/heartbeat.js +104 -0
  31. package/dist/heartbeat.js.map +1 -0
  32. package/dist/honeycomb.d.ts +49 -0
  33. package/dist/honeycomb.js +176 -0
  34. package/dist/honeycomb.js.map +1 -0
  35. package/dist/index.d.ts +2 -0
  36. package/dist/index.js +371 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/integrations/config.d.ts +14 -0
  39. package/dist/integrations/config.js +48 -0
  40. package/dist/integrations/config.js.map +1 -0
  41. package/dist/integrations/index.d.ts +4 -0
  42. package/dist/integrations/index.js +4 -0
  43. package/dist/integrations/index.js.map +1 -0
  44. package/dist/integrations/loader.d.ts +8 -0
  45. package/dist/integrations/loader.js +27 -0
  46. package/dist/integrations/loader.js.map +1 -0
  47. package/dist/integrations/manager.d.ts +29 -0
  48. package/dist/integrations/manager.js +108 -0
  49. package/dist/integrations/manager.js.map +1 -0
  50. package/dist/namespaces.d.ts +25 -0
  51. package/dist/namespaces.js +84 -0
  52. package/dist/namespaces.js.map +1 -0
  53. package/dist/persistence.d.ts +7 -0
  54. package/dist/persistence.js +62 -0
  55. package/dist/persistence.js.map +1 -0
  56. package/dist/protocol/index.d.ts +5 -0
  57. package/dist/protocol/index.js +5 -0
  58. package/dist/protocol/index.js.map +1 -0
  59. package/dist/protocol/parser.d.ts +31 -0
  60. package/dist/protocol/parser.js +193 -0
  61. package/dist/protocol/parser.js.map +1 -0
  62. package/dist/protocol/renderer.d.ts +16 -0
  63. package/dist/protocol/renderer.js +193 -0
  64. package/dist/protocol/renderer.js.map +1 -0
  65. package/dist/protocol/schema.d.ts +341 -0
  66. package/dist/protocol/schema.js +285 -0
  67. package/dist/protocol/schema.js.map +1 -0
  68. package/dist/protocol/types.d.ts +144 -0
  69. package/dist/protocol/types.js +8 -0
  70. package/dist/protocol/types.js.map +1 -0
  71. package/dist/protocol/variables.d.ts +22 -0
  72. package/dist/protocol/variables.js +58 -0
  73. package/dist/protocol/variables.js.map +1 -0
  74. package/dist/rest.d.ts +3 -0
  75. package/dist/rest.js +794 -0
  76. package/dist/rest.js.map +1 -0
  77. package/dist/server.d.ts +17 -0
  78. package/dist/server.js +410 -0
  79. package/dist/server.js.map +1 -0
  80. package/dist/stores/backend.d.ts +15 -0
  81. package/dist/stores/backend.js +28 -0
  82. package/dist/stores/backend.js.map +1 -0
  83. package/dist/stores/claims.d.ts +14 -0
  84. package/dist/stores/claims.js +77 -0
  85. package/dist/stores/claims.js.map +1 -0
  86. package/dist/stores/conflicts.d.ts +10 -0
  87. package/dist/stores/conflicts.js +39 -0
  88. package/dist/stores/conflicts.js.map +1 -0
  89. package/dist/stores/control.d.ts +37 -0
  90. package/dist/stores/control.js +105 -0
  91. package/dist/stores/control.js.map +1 -0
  92. package/dist/stores/discoveries.d.ts +11 -0
  93. package/dist/stores/discoveries.js +45 -0
  94. package/dist/stores/discoveries.js.map +1 -0
  95. package/dist/stores/events.d.ts +14 -0
  96. package/dist/stores/events.js +37 -0
  97. package/dist/stores/events.js.map +1 -0
  98. package/dist/stores/help.d.ts +11 -0
  99. package/dist/stores/help.js +46 -0
  100. package/dist/stores/help.js.map +1 -0
  101. package/dist/stores/interfaces.d.ts +87 -0
  102. package/dist/stores/interfaces.js +2 -0
  103. package/dist/stores/interfaces.js.map +1 -0
  104. package/dist/stores/messages.d.ts +8 -0
  105. package/dist/stores/messages.js +29 -0
  106. package/dist/stores/messages.js.map +1 -0
  107. package/dist/stores/progress.d.ts +8 -0
  108. package/dist/stores/progress.js +21 -0
  109. package/dist/stores/progress.js.map +1 -0
  110. package/dist/stores/proposals.d.ts +11 -0
  111. package/dist/stores/proposals.js +46 -0
  112. package/dist/stores/proposals.js.map +1 -0
  113. package/dist/stores/redis/claims.d.ts +15 -0
  114. package/dist/stores/redis/claims.js +96 -0
  115. package/dist/stores/redis/claims.js.map +1 -0
  116. package/dist/stores/redis/db.d.ts +39 -0
  117. package/dist/stores/redis/db.js +34 -0
  118. package/dist/stores/redis/db.js.map +1 -0
  119. package/dist/stores/redis/discoveries.d.ts +13 -0
  120. package/dist/stores/redis/discoveries.js +54 -0
  121. package/dist/stores/redis/discoveries.js.map +1 -0
  122. package/dist/stores/redis/events.d.ts +17 -0
  123. package/dist/stores/redis/events.js +57 -0
  124. package/dist/stores/redis/events.js.map +1 -0
  125. package/dist/stores/redis/index.d.ts +3 -0
  126. package/dist/stores/redis/index.js +29 -0
  127. package/dist/stores/redis/index.js.map +1 -0
  128. package/dist/stores/redis/state.d.ts +14 -0
  129. package/dist/stores/redis/state.js +83 -0
  130. package/dist/stores/redis/state.js.map +1 -0
  131. package/dist/stores/reinforcements.d.ts +11 -0
  132. package/dist/stores/reinforcements.js +42 -0
  133. package/dist/stores/reinforcements.js.map +1 -0
  134. package/dist/stores/roles.d.ts +9 -0
  135. package/dist/stores/roles.js +22 -0
  136. package/dist/stores/roles.js.map +1 -0
  137. package/dist/stores/sqlite/claims.d.ts +17 -0
  138. package/dist/stores/sqlite/claims.js +121 -0
  139. package/dist/stores/sqlite/claims.js.map +1 -0
  140. package/dist/stores/sqlite/db.d.ts +16 -0
  141. package/dist/stores/sqlite/db.js +77 -0
  142. package/dist/stores/sqlite/db.js.map +1 -0
  143. package/dist/stores/sqlite/discoveries.d.ts +14 -0
  144. package/dist/stores/sqlite/discoveries.js +66 -0
  145. package/dist/stores/sqlite/discoveries.js.map +1 -0
  146. package/dist/stores/sqlite/events.d.ts +16 -0
  147. package/dist/stores/sqlite/events.js +75 -0
  148. package/dist/stores/sqlite/events.js.map +1 -0
  149. package/dist/stores/sqlite/index.d.ts +2 -0
  150. package/dist/stores/sqlite/index.js +31 -0
  151. package/dist/stores/sqlite/index.js.map +1 -0
  152. package/dist/stores/sqlite/state.d.ts +15 -0
  153. package/dist/stores/sqlite/state.js +99 -0
  154. package/dist/stores/sqlite/state.js.map +1 -0
  155. package/dist/stores/state.d.ts +11 -0
  156. package/dist/stores/state.js +67 -0
  157. package/dist/stores/state.js.map +1 -0
  158. package/dist/types.d.ts +45 -0
  159. package/dist/types.js +2 -0
  160. package/dist/types.js.map +1 -0
  161. package/dist/utils.d.ts +3 -0
  162. package/dist/utils.js +20 -0
  163. package/dist/utils.js.map +1 -0
  164. package/dist/ws.d.ts +25 -0
  165. package/dist/ws.js +117 -0
  166. package/dist/ws.js.map +1 -0
  167. package/package.json +74 -0
@@ -0,0 +1,67 @@
1
+ import { matchGlob, isExpired } from '../utils.js';
2
+ export class StateStore {
3
+ entries = new Map();
4
+ async get(key) {
5
+ const entry = this.entries.get(key);
6
+ if (!entry)
7
+ return null;
8
+ if (isExpired(entry.setAt, entry.ttlMs)) {
9
+ this.entries.delete(key);
10
+ return null;
11
+ }
12
+ return entry;
13
+ }
14
+ async set(key, value, agentId, category, ttlMs) {
15
+ const now = new Date().toISOString();
16
+ const existing = this.entries.get(key);
17
+ const entry = {
18
+ key,
19
+ value,
20
+ category,
21
+ setBy: agentId,
22
+ setAt: existing?.setAt ?? now,
23
+ updatedAt: now,
24
+ ttlMs,
25
+ };
26
+ this.entries.set(key, entry);
27
+ return entry;
28
+ }
29
+ async delete(key) {
30
+ return this.entries.delete(key);
31
+ }
32
+ async query(pattern, category) {
33
+ const results = [];
34
+ for (const entry of this.entries.values()) {
35
+ if (isExpired(entry.setAt, entry.ttlMs)) {
36
+ this.entries.delete(entry.key);
37
+ continue;
38
+ }
39
+ if (pattern && !matchGlob(pattern, entry.key))
40
+ continue;
41
+ if (category && entry.category !== category)
42
+ continue;
43
+ results.push(entry);
44
+ }
45
+ return results;
46
+ }
47
+ // For persistence
48
+ async getAll() {
49
+ // Clean expired on export
50
+ const results = [];
51
+ for (const entry of this.entries.values()) {
52
+ if (!isExpired(entry.setAt, entry.ttlMs)) {
53
+ results.push(entry);
54
+ }
55
+ }
56
+ return results;
57
+ }
58
+ async load(entries) {
59
+ this.entries.clear();
60
+ for (const entry of entries) {
61
+ if (!isExpired(entry.setAt, entry.ttlMs)) {
62
+ this.entries.set(entry.key, entry);
63
+ }
64
+ }
65
+ }
66
+ }
67
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/stores/state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ export interface StateEntry {
2
+ key: string;
3
+ value: unknown;
4
+ category?: string;
5
+ setBy: string;
6
+ setAt: string;
7
+ updatedAt: string;
8
+ ttlMs?: number;
9
+ }
10
+ export interface Claim {
11
+ resource: string;
12
+ value: string;
13
+ owner: string;
14
+ status: 'active' | 'released' | 'expired';
15
+ claimedAt: string;
16
+ ttlMs?: number;
17
+ }
18
+ export interface IncubatorEvent {
19
+ id: number;
20
+ type: string;
21
+ data: unknown;
22
+ publishedBy: string;
23
+ publishedAt: string;
24
+ }
25
+ export interface Discovery {
26
+ id: string;
27
+ topic: string;
28
+ content: string;
29
+ category?: string;
30
+ publishedBy: string;
31
+ publishedAt: string;
32
+ }
33
+ export interface ClaimResult {
34
+ status: 'approved' | 'rejected';
35
+ claim: Claim;
36
+ }
37
+ export type { Message, HelpRequest, ProgressReport, Conflict, RoleAssignment, ReinforcementRequest, Proposal, } from '@agentcoordinationprotocol/spec';
38
+ export interface Snapshot {
39
+ state: StateEntry[];
40
+ claims: Claim[];
41
+ events: IncubatorEvent[];
42
+ discoveries: Discovery[];
43
+ eventCursor: number;
44
+ savedAt: string;
45
+ }
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export declare function generateId(): string;
2
+ export declare function matchGlob(pattern: string, text: string): boolean;
3
+ export declare function isExpired(timestamp: string, ttlMs?: number): boolean;
package/dist/utils.js ADDED
@@ -0,0 +1,20 @@
1
+ let idCounter = 0;
2
+ export function generateId() {
3
+ return `${Date.now()}-${++idCounter}`;
4
+ }
5
+ export function matchGlob(pattern, text) {
6
+ // Convert glob pattern to regex
7
+ // Supports * (any chars) and ? (single char)
8
+ const escaped = pattern
9
+ .replace(/[.+^${}()|[\]\\]/g, '\\$&')
10
+ .replace(/\*/g, '.*')
11
+ .replace(/\?/g, '.');
12
+ return new RegExp(`^${escaped}$`).test(text);
13
+ }
14
+ export function isExpired(timestamp, ttlMs) {
15
+ if (!ttlMs)
16
+ return false;
17
+ const created = new Date(timestamp).getTime();
18
+ return Date.now() > created + ttlMs;
19
+ }
20
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,IAAI,SAAS,GAAG,CAAC,CAAC;AAElB,MAAM,UAAU,UAAU;IACxB,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAAe,EAAE,IAAY;IACrD,gCAAgC;IAChC,6CAA6C;IAC7C,MAAM,OAAO,GAAG,OAAO;SACpB,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC;SACpC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;SACpB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACvB,OAAO,IAAI,MAAM,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,SAAiB,EAAE,KAAc;IACzD,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;IAC9C,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,GAAG,KAAK,CAAC;AACtC,CAAC"}
package/dist/ws.d.ts ADDED
@@ -0,0 +1,25 @@
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
+ interface WebSocketLike {
6
+ send(data: string): void;
7
+ close(): void;
8
+ readyState: number;
9
+ on(event: string, cb: (...args: unknown[]) => void): void;
10
+ OPEN: number;
11
+ }
12
+ interface WebSocketServerLike {
13
+ handleUpgrade(req: IncomingMessage, socket: Duplex, head: Buffer, cb: (ws: WebSocketLike) => void): void;
14
+ close(): void;
15
+ clients: Set<WebSocketLike>;
16
+ }
17
+ export interface WsManager {
18
+ close(): void;
19
+ }
20
+ export declare function setupWebSocket(httpServer: HttpServer, registry: NamespaceRegistry, bus: NotificationBus, verbose?: boolean,
21
+ /** @internal for testing — inject WebSocketServer to avoid createRequire issues in vitest */
22
+ WebSocketServerOverride?: new (opts: {
23
+ noServer: true;
24
+ }) => WebSocketServerLike): WsManager;
25
+ export {};
package/dist/ws.js ADDED
@@ -0,0 +1,117 @@
1
+ import { createRequire } from 'node:module';
2
+ const PING_INTERVAL = 30_000;
3
+ function loadWebSocketServer() {
4
+ const require = createRequire(import.meta.url);
5
+ const ws = require('ws');
6
+ return ws.WebSocketServer;
7
+ }
8
+ export function setupWebSocket(httpServer, registry, bus, verbose,
9
+ /** @internal for testing — inject WebSocketServer to avoid createRequire issues in vitest */
10
+ WebSocketServerOverride) {
11
+ const WebSocketServer = WebSocketServerOverride ?? loadWebSocketServer();
12
+ const wss = new WebSocketServer({ noServer: true });
13
+ httpServer.on('upgrade', (req, socket, head) => {
14
+ const url = new URL(req.url ?? '/', `http://localhost`);
15
+ if (url.pathname !== '/ws') {
16
+ socket.destroy();
17
+ return;
18
+ }
19
+ wss.handleUpgrade(req, socket, head, (ws) => {
20
+ handleConnection(ws, url, registry, bus, verbose);
21
+ });
22
+ });
23
+ return {
24
+ close() {
25
+ wss.close();
26
+ },
27
+ };
28
+ }
29
+ function handleConnection(ws, url, registry, bus, verbose) {
30
+ const namespace = url.searchParams.get('namespace') ?? 'default';
31
+ const sinceParam = url.searchParams.get('since');
32
+ const since = sinceParam !== null ? parseInt(sinceParam, 10) : undefined;
33
+ const typesParam = url.searchParams.get('types');
34
+ let typeFilter = typesParam ? new Set(typesParam.split(',').filter(Boolean)) : null;
35
+ // Buffer for events arriving during replay
36
+ const buffer = [];
37
+ let replaying = true;
38
+ let replayCursor = since ?? 0;
39
+ function send(msg) {
40
+ if (ws.readyState === ws.OPEN) {
41
+ ws.send(JSON.stringify(msg));
42
+ }
43
+ }
44
+ function matchesFilter(event) {
45
+ if (!typeFilter)
46
+ return true;
47
+ return typeFilter.has(event.type);
48
+ }
49
+ // Subscribe to bus FIRST (buffer during replay)
50
+ const unsubscribe = bus.subscribe(namespace, (event) => {
51
+ if (!matchesFilter(event))
52
+ return;
53
+ if (replaying) {
54
+ buffer.push(event);
55
+ }
56
+ else {
57
+ send({ type: 'event', event });
58
+ }
59
+ });
60
+ // Replay from store
61
+ const stores = registry.get(namespace);
62
+ stores.events.getEvents(since).then(({ events, cursor }) => {
63
+ // Send replayed events
64
+ for (const event of events) {
65
+ if (matchesFilter(event)) {
66
+ send({ type: 'event', event });
67
+ replayCursor = Math.max(replayCursor, event.id);
68
+ }
69
+ }
70
+ replayCursor = Math.max(replayCursor, cursor);
71
+ // Send replay_done marker
72
+ send({ type: 'replay_done', cursor: replayCursor });
73
+ // Flush buffer (de-dup: skip events already sent via replay)
74
+ replaying = false;
75
+ for (const event of buffer) {
76
+ if (event.id > replayCursor) {
77
+ send({ type: 'event', event });
78
+ }
79
+ }
80
+ buffer.length = 0;
81
+ if (verbose) {
82
+ console.error(`[incubator] WS client connected: ns=${namespace} since=${since ?? 'start'} replayed=${events.length}`);
83
+ }
84
+ }).catch((err) => {
85
+ send({ type: 'error', message: 'Replay failed' });
86
+ if (verbose)
87
+ console.error('[incubator] WS replay error:', err);
88
+ ws.close();
89
+ });
90
+ // Handle client messages
91
+ ws.on('message', (raw) => {
92
+ try {
93
+ const msg = JSON.parse(String(raw));
94
+ if (msg.type === 'subscribe') {
95
+ typeFilter = msg.types ? new Set(msg.types) : null;
96
+ }
97
+ }
98
+ catch {
99
+ // ignore malformed messages
100
+ }
101
+ });
102
+ // Ping keepalive
103
+ const pingTimer = setInterval(() => {
104
+ send({ type: 'ping', ts: Date.now() });
105
+ }, PING_INTERVAL);
106
+ // Cleanup on close/error
107
+ const cleanup = () => {
108
+ clearInterval(pingTimer);
109
+ unsubscribe();
110
+ if (verbose) {
111
+ console.error(`[incubator] WS client disconnected: ns=${namespace}`);
112
+ }
113
+ };
114
+ ws.on('close', cleanup);
115
+ ws.on('error', cleanup);
116
+ }
117
+ //# 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,74 @@
1
+ {
2
+ "name": "@honeybee-ai/incubator",
3
+ "version": "1.0.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/index.js"
10
+ },
11
+ "files": [
12
+ "dist",
13
+ "dashboard/dist",
14
+ "README.md"
15
+ ],
16
+ "scripts": {
17
+ "build": "tsc",
18
+ "start": "node dist/index.js",
19
+ "dev": "tsc --watch",
20
+ "test": "vitest run",
21
+ "test:watch": "node --experimental-vm-modules node_modules/.bin/vitest",
22
+ "prepublishOnly": "pnpm run build && pnpm test"
23
+ },
24
+ "keywords": [
25
+ "mcp",
26
+ "multi-agent",
27
+ "coordination",
28
+ "ai-agents",
29
+ "swarm",
30
+ "claims",
31
+ "shared-state",
32
+ "model-context-protocol",
33
+ "claude",
34
+ "llm",
35
+ "agent-coordination",
36
+ "rest-api",
37
+ "sqlite",
38
+ "redis",
39
+ "persistent"
40
+ ],
41
+ "author": "Honeybee AI <hello@honeyb.dev>",
42
+ "license": "MIT",
43
+ "repository": {
44
+ "type": "git",
45
+ "url": "https://github.com/honeybee-ai/incubator"
46
+ },
47
+ "engines": {
48
+ "node": ">=18"
49
+ },
50
+ "dependencies": {
51
+ "@agentcoordinationprotocol/sdk": "^0.1.0",
52
+ "@agentcoordinationprotocol/spec": "^0.2.1",
53
+ "@honeybee-ai/integration-sdk": "^0.1.0",
54
+ "@modelcontextprotocol/sdk": "^1.12.1",
55
+ "@honeybee-ai/carapace": "^1.0.0",
56
+ "zod": "^3.24.2"
57
+ },
58
+ "devDependencies": {
59
+ "@types/better-sqlite3": "^7.6.13",
60
+ "@types/node": "^22.13.1",
61
+ "@types/ws": "^8.5.14",
62
+ "typescript": "^5.7.3",
63
+ "vitest": "^3.0.5"
64
+ },
65
+ "pnpm": {
66
+ "onlyBuiltDependencies": ["better-sqlite3", "esbuild"]
67
+ },
68
+ "optionalDependencies": {
69
+ "better-sqlite3": "^12.6.2",
70
+ "ioredis": "^5.9.2",
71
+ "sirv": "^3.0.0",
72
+ "ws": "^8.18.0"
73
+ }
74
+ }