@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
package/dist/index.js ADDED
@@ -0,0 +1,601 @@
1
+ #!/usr/bin/env node
2
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
+ import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
4
+ import { createServer } from './server.js';
5
+ import { createServer as createHttpServer } from 'node:http';
6
+ import { createServer as createHttpsServer } from 'node:https';
7
+ import { randomUUID } from 'node:crypto';
8
+ import { handleRestRequest } from './rest.js';
9
+ import { loadGuard, scanSnapshot } from './guard.js';
10
+ import { NamespaceRegistry } from './namespaces.js';
11
+ import { saveAllSnapshots, loadAllSnapshots } from './persistence.js';
12
+ import { LocalBus, RedisBus } from './bus.js';
13
+ import { loadSpecFile } from '@agentcoordinationprotocol/spec';
14
+ import { fileURLToPath } from 'node:url';
15
+ import { dirname, join, resolve as resolvePath } from 'node:path';
16
+ import { existsSync, readFileSync } from 'node:fs';
17
+ import yaml from 'js-yaml';
18
+ import { loadIntegrationsConfig } from './integrations/index.js';
19
+ import { PluginManager } from './plugins/index.js';
20
+ import { RunWatcher } from './run-watcher.js';
21
+ import { BroodOrchestrator } from './orchestrator.js';
22
+ import { WebhookManager } from './webhooks.js';
23
+ import { setLogFormat, setLogLevel } from './log.js';
24
+ import { createTelemetryFromEnv } from '@honeybee-ai/hivemind-sdk/telemetry';
25
+ function parseArgs(argv) {
26
+ const args = {};
27
+ for (const arg of argv.slice(2)) {
28
+ if (arg.startsWith('--')) {
29
+ const [key, ...rest] = arg.slice(2).split('=');
30
+ args[key] = rest.length > 0 ? rest.join('=') : true;
31
+ }
32
+ }
33
+ return args;
34
+ }
35
+ export async function main() {
36
+ const args = parseArgs(process.argv);
37
+ // --mode=http (default) or --mode=mcp. Legacy --http flag still works.
38
+ const mode = typeof args['mode'] === 'string' ? args['mode'] : (args['http'] === true ? 'http' : 'http');
39
+ if (mode !== 'http' && mode !== 'mcp') {
40
+ console.error(`[incubator] Unknown mode: ${mode}. Use 'http' (default) or 'mcp'.`);
41
+ process.exit(1);
42
+ }
43
+ const isHttp = mode === 'http';
44
+ const port = typeof args['port'] === 'string' ? parseInt(args['port'], 10) : 3100;
45
+ const agentId = typeof args['agent-id'] === 'string' ? args['agent-id'] : undefined;
46
+ const persistPath = typeof args['persist'] === 'string' ? args['persist'] : undefined;
47
+ const verbose = args['verbose'] === true;
48
+ const noGuard = args['no-guard'] === true;
49
+ const logFormat = typeof args['log-format'] === 'string' ? args['log-format'] : 'text';
50
+ if (logFormat !== 'text' && logFormat !== 'json') {
51
+ console.error(`[incubator] Unknown log format: ${logFormat}. Use 'text' (default) or 'json'.`);
52
+ process.exit(1);
53
+ }
54
+ setLogFormat(logFormat);
55
+ if (verbose)
56
+ setLogLevel('debug');
57
+ // TLS configuration
58
+ const tlsCert = typeof args['tls-cert'] === 'string' ? args['tls-cert'] : undefined;
59
+ const tlsKey = typeof args['tls-key'] === 'string' ? args['tls-key'] : undefined;
60
+ const useTls = !!(tlsCert && tlsKey);
61
+ // Custom static directory (overrides dashboard)
62
+ const staticDir = typeof args['static'] === 'string' ? args['static'] : undefined;
63
+ // Brood config — preloads protocol + agent definitions for WS spawn
64
+ const broodPath = typeof args['brood'] === 'string' ? args['brood'] : undefined;
65
+ // Backend configuration
66
+ const backendType = typeof args['backend'] === 'string' ? args['backend'] : 'memory';
67
+ if (backendType !== 'memory' && backendType !== 'sqlite' && backendType !== 'redis') {
68
+ console.error(`[incubator] Unknown backend: ${backendType}. Use 'memory', 'sqlite', or 'redis'.`);
69
+ process.exit(1);
70
+ }
71
+ const dbPath = typeof args['db'] === 'string' ? args['db'] : undefined;
72
+ const redisUrl = typeof args['redis-url'] === 'string' ? args['redis-url'] : 'redis://localhost:6379';
73
+ const isSqlite = backendType === 'sqlite';
74
+ const isRedis = backendType === 'redis';
75
+ if (isSqlite && !dbPath) {
76
+ console.error('[incubator] SQLite backend requires --db=<path>');
77
+ process.exit(1);
78
+ }
79
+ if ((isSqlite || isRedis) && persistPath) {
80
+ console.error(`[incubator] WARNING: --persist is ignored with ${backendType} backend (data is already persistent)`);
81
+ }
82
+ // Connect Redis client before server starts
83
+ let redisClient;
84
+ if (isRedis) {
85
+ const { getRedisClient, waitForReady } = await import('./stores/redis/db.js');
86
+ redisClient = getRedisClient(redisUrl);
87
+ await waitForReady(redisClient);
88
+ }
89
+ const backendConfig = { type: backendType, dbPath, redisClient };
90
+ const skipPersistence = isSqlite || isRedis;
91
+ // Protocol loading
92
+ const protocolPath = typeof args['protocol'] === 'string' ? args['protocol'] : undefined;
93
+ // Dance file loading
94
+ const dancesPath = typeof args['dances'] === 'string' ? args['dances'] : undefined;
95
+ // Agent orchestration (delegated from CLI's `wgl up`)
96
+ let agentsConfig;
97
+ if (typeof args['agents'] === 'string') {
98
+ try {
99
+ agentsConfig = JSON.parse(args['agents']);
100
+ }
101
+ catch (err) {
102
+ console.error(`[incubator] Failed to parse --agents JSON: ${err.message}`);
103
+ process.exit(1);
104
+ }
105
+ }
106
+ // Integration loading (--integration=name or reads from config file)
107
+ const cliIntegrations = [];
108
+ for (const arg of process.argv.slice(2)) {
109
+ if (arg.startsWith('--integration=')) {
110
+ cliIntegrations.push(arg.slice('--integration='.length));
111
+ }
112
+ }
113
+ const loadIntegrations = cliIntegrations.length > 0 || args['integrations'] === true;
114
+ const registry = new NamespaceRegistry(backendConfig);
115
+ let sanitizeSnapshotFn;
116
+ let carapaceGuard;
117
+ if (noGuard) {
118
+ console.error('[incubator] WARNING: Carapace disabled — no prompt injection scanning');
119
+ }
120
+ else {
121
+ carapaceGuard = loadGuard(verbose);
122
+ registry.setGuard(carapaceGuard, verbose);
123
+ sanitizeSnapshotFn = (snapshot) => scanSnapshot(snapshot, carapaceGuard, verbose);
124
+ console.error('[incubator] Carapace active — scanning writes, reads, and snapshots');
125
+ }
126
+ // Load persisted snapshots (memory backend only)
127
+ if (persistPath && !skipPersistence) {
128
+ const count = await loadAllSnapshots(persistPath, registry, sanitizeSnapshotFn);
129
+ if (count > 0) {
130
+ console.error(`[incubator] Restored ${count} namespace(s) from ${persistPath}`);
131
+ }
132
+ }
133
+ // Load protocol spec if provided
134
+ if (protocolPath) {
135
+ try {
136
+ const spec = await loadSpecFile(protocolPath);
137
+ // Always load into 'default' so agents connecting without X-Namespace get it.
138
+ // In HTTP mode, also load into the spec-name namespace for explicit namespace use.
139
+ registry.setProtocol('default', spec);
140
+ if (isHttp && spec.name !== 'default') {
141
+ registry.setProtocol(spec.name, spec);
142
+ }
143
+ console.error(`[incubator] Protocol loaded: "${spec.title}" (${spec.name})`);
144
+ }
145
+ catch (err) {
146
+ console.error(`[incubator] Failed to load protocol: ${err.message}`);
147
+ process.exit(1);
148
+ }
149
+ }
150
+ // Load dance module: --dances flag > brood hive dances field
151
+ let danceModule;
152
+ let effectiveDancesPath = dancesPath;
153
+ if (!effectiveDancesPath && broodPath) {
154
+ // Peek into brood for dances field
155
+ try {
156
+ const broodPeek = readFileSync(resolvePath(broodPath), 'utf-8');
157
+ const broodObj = (broodPath.endsWith('.json') ? JSON.parse(broodPeek) : yaml.load(broodPeek));
158
+ const hives = (broodObj.hives ?? {});
159
+ const firstHive = Object.values(hives)[0];
160
+ const dancesRef = firstHive?.dances ?? firstHive?.logic ?? broodObj.dances ?? broodObj.logic;
161
+ if (typeof dancesRef === 'string') {
162
+ effectiveDancesPath = resolvePath(dirname(broodPath), dancesRef);
163
+ }
164
+ }
165
+ catch { /* brood parse will fail properly later */ }
166
+ }
167
+ if (effectiveDancesPath) {
168
+ const { loadDances } = await import('./dances.js');
169
+ const absolutePath = resolvePath(effectiveDancesPath);
170
+ const fileUrl = new URL(`file://${absolutePath}`).href;
171
+ danceModule = await loadDances(fileUrl);
172
+ const toolNames = [...danceModule.tools.keys()];
173
+ console.error(`[incubator] Dances loaded: ${toolNames.join(', ')}${danceModule.inject ? ' + inject' : ''}`);
174
+ }
175
+ if (isSqlite) {
176
+ console.error(`[incubator] Backend: sqlite (${dbPath})`);
177
+ }
178
+ else if (isRedis) {
179
+ console.error(`[incubator] Backend: redis (${redisUrl})`);
180
+ }
181
+ else {
182
+ console.error('[incubator] Backend: memory');
183
+ }
184
+ if (isHttp) {
185
+ // HTTP mode: one server, multiple agent connections
186
+ // Each session gets its own McpServer instance with a unique agent ID
187
+ const sessions = new Map();
188
+ // Create notification bus for WebSocket push
189
+ let bus;
190
+ if (isRedis && redisClient) {
191
+ const subClient = redisClient.duplicate();
192
+ const { waitForReady } = await import('./stores/redis/db.js');
193
+ await waitForReady(subClient);
194
+ bus = new RedisBus(redisClient, subClient);
195
+ }
196
+ else {
197
+ bus = new LocalBus();
198
+ }
199
+ // Cross-hive transport via IPC (set by wgl up)
200
+ let routerOptions;
201
+ const brokerSocket = process.env['HONEYCOMB_BROKER_SOCKET'];
202
+ const hiveName = process.env['HONEYCOMB_HIVE_NAME'];
203
+ if (brokerSocket && hiveName) {
204
+ const hivePublishes = process.env['HONEYCOMB_PUBLISHES']?.split(',').filter(Boolean) ?? [];
205
+ const hiveSubscribes = process.env['HONEYCOMB_SUBSCRIBES']?.split(',').filter(Boolean) ?? [];
206
+ const { IPCTransport } = await import('./transports/ipc.js');
207
+ const transport = new IPCTransport({
208
+ socketPath: brokerSocket,
209
+ hiveName,
210
+ publishes: hivePublishes,
211
+ subscribes: hiveSubscribes,
212
+ });
213
+ await transport.connect();
214
+ console.error(`[incubator] Honeycomb: connected to broker as "${hiveName}"`);
215
+ routerOptions = { transport, hiveName, hivePublishes, hiveSubscribes };
216
+ }
217
+ registry.setBus(bus, routerOptions);
218
+ // Watch for agent lifecycle events → populate RunStore
219
+ const defaultStoresForWatcher = registry.get('default');
220
+ const runWatcher = new RunWatcher(bus, defaultStoresForWatcher.runs);
221
+ runWatcher.start();
222
+ const spawnedOrchestrators = [];
223
+ // Webhook manager — register webhooks from protocol governance
224
+ const webhookManager = new WebhookManager(verbose);
225
+ if (protocolPath) {
226
+ const spec = registry.getProtocol('default');
227
+ if (spec?.governance?.webhooks?.length) {
228
+ webhookManager.register('default', spec.governance.webhooks, bus);
229
+ }
230
+ }
231
+ const proto = useTls ? 'https' : 'http';
232
+ const wsProto = useTls ? 'wss' : 'ws';
233
+ let serveDashboard;
234
+ let serveCustom;
235
+ try {
236
+ const sirvModule = await import('sirv');
237
+ const sirv = (sirvModule.default ?? sirvModule);
238
+ // Dashboard always at /dashboard
239
+ const __dirname = dirname(fileURLToPath(import.meta.url));
240
+ const dashboardDir = join(__dirname, '..', 'dashboard', 'dist');
241
+ if (existsSync(dashboardDir)) {
242
+ serveDashboard = sirv(dashboardDir, { single: true, dev: true });
243
+ console.error(`[incubator] Dashboard: ${proto}://localhost:${port}/dashboard`);
244
+ }
245
+ // Custom static dir at /
246
+ if (staticDir && existsSync(staticDir)) {
247
+ serveCustom = sirv(staticDir, { single: true, dev: true });
248
+ console.error(`[incubator] Static: ${proto}://localhost:${port}/`);
249
+ }
250
+ }
251
+ catch {
252
+ // sirv not installed — static serving disabled
253
+ }
254
+ const requestHandler = async (req, res) => {
255
+ // REST API routes - handled before MCP
256
+ if (req.url?.startsWith('/api/')) {
257
+ await handleRestRequest(req, res, registry, verbose, danceSupport);
258
+ return;
259
+ }
260
+ const url = new URL(req.url ?? '/', `${proto}://localhost:${port}`);
261
+ // Dashboard routes: /dashboard and /dashboard/*
262
+ if (url.pathname === '/dashboard' || url.pathname.startsWith('/dashboard/')) {
263
+ if (serveDashboard) {
264
+ // Strip /dashboard prefix so sirv serves from its root
265
+ const originalUrl = req.url;
266
+ req.url = url.pathname.replace(/^\/dashboard/, '') || '/';
267
+ if (url.search)
268
+ req.url += url.search;
269
+ serveDashboard(req, res, () => {
270
+ req.url = originalUrl;
271
+ res.writeHead(404, { 'Content-Type': 'application/json' });
272
+ res.end(JSON.stringify({ error: 'Not found.' }));
273
+ });
274
+ return;
275
+ }
276
+ res.writeHead(404, { 'Content-Type': 'application/json' });
277
+ res.end(JSON.stringify({ error: 'Dashboard not available.' }));
278
+ return;
279
+ }
280
+ if (url.pathname !== '/mcp') {
281
+ // Root redirect to dashboard when no custom static
282
+ if (url.pathname === '/' && !serveCustom) {
283
+ if (serveDashboard) {
284
+ res.writeHead(302, { Location: '/dashboard' });
285
+ res.end();
286
+ return;
287
+ }
288
+ }
289
+ // Custom static content at /
290
+ if (serveCustom) {
291
+ serveCustom(req, res, () => {
292
+ res.writeHead(404, { 'Content-Type': 'application/json' });
293
+ res.end(JSON.stringify({ error: 'Not found. Use /mcp or /api/ endpoints.' }));
294
+ });
295
+ }
296
+ else {
297
+ res.writeHead(404, { 'Content-Type': 'application/json' });
298
+ res.end(JSON.stringify({ error: 'Not found. Use /mcp or /api/ endpoints.' }));
299
+ }
300
+ return;
301
+ }
302
+ // Extract namespace from X-Namespace header
303
+ const namespace = req.headers['x-namespace'] || 'default';
304
+ const stores = registry.get(namespace);
305
+ // Check for existing session
306
+ const sessionId = req.headers['mcp-session-id'];
307
+ if (sessionId && sessions.has(sessionId)) {
308
+ const session = sessions.get(sessionId);
309
+ await session.transport.handleRequest(req, res);
310
+ return;
311
+ }
312
+ // New session - create transport and server
313
+ const newAgentId = `agent_${randomUUID().slice(0, 8)}`;
314
+ const transport = new StreamableHTTPServerTransport({
315
+ sessionIdGenerator: () => randomUUID(),
316
+ onsessioninitialized: (sid) => {
317
+ const nsLabel = namespace === 'default' ? '' : `@${namespace}`;
318
+ console.error(`[incubator] Session ${sid} started (${newAgentId}${nsLabel})`);
319
+ sessions.set(sid, { server: mcpServer, transport });
320
+ },
321
+ });
322
+ transport.onclose = () => {
323
+ const sid = transport.sessionId;
324
+ if (sid) {
325
+ sessions.delete(sid);
326
+ console.error(`[incubator] Session ${sid} closed`);
327
+ }
328
+ };
329
+ const onSave = (persistPath && !skipPersistence) ? () => { saveAllSnapshots(persistPath, registry); } : undefined;
330
+ const mcpServer = createServer(stores, {
331
+ agentId: newAgentId,
332
+ namespace,
333
+ persistPath: skipPersistence ? undefined : persistPath,
334
+ verbose,
335
+ sanitizeSnapshot: sanitizeSnapshotFn,
336
+ onSave,
337
+ getProtocol: () => registry.getProtocol(namespace),
338
+ });
339
+ await mcpServer.connect(transport);
340
+ await transport.handleRequest(req, res);
341
+ };
342
+ const httpServer = useTls
343
+ ? createHttpsServer({ key: readFileSync(tlsKey), cert: readFileSync(tlsCert) }, requestHandler)
344
+ : createHttpServer(requestHandler);
345
+ // Set up WebSocket push (optional: requires "ws" package)
346
+ // setupWebSocket loads ws via import() — throws if ws not installed
347
+ // Build dance support if dance module loaded
348
+ let danceSupport;
349
+ if (danceModule) {
350
+ const { buildAcpHelper } = await import('./dances.js');
351
+ danceSupport = {
352
+ module: danceModule,
353
+ getState: async (ns) => {
354
+ const stores = registry.get(ns);
355
+ const entries = await stores.state.query();
356
+ const state = {};
357
+ for (const entry of entries) {
358
+ state[entry.key] = typeof entry.value === 'string' ? entry.value : JSON.stringify(entry.value);
359
+ }
360
+ return state;
361
+ },
362
+ getAcpHelper: (ns, agentId) => {
363
+ const stores = registry.get(ns);
364
+ return buildAcpHelper({
365
+ publishEvent: async (_namespace, type, data, aid) => {
366
+ const event = await stores.events.publish(type, data ?? {}, aid ?? agentId);
367
+ bus.publish(ns, event);
368
+ },
369
+ claimResource: async (_namespace, resource, aid, ttl) => {
370
+ const result = await stores.claims.claim(resource, resource, aid, ttl);
371
+ return result.claim.resource;
372
+ },
373
+ releaseResource: async (_namespace, resource) => {
374
+ await stores.claims.release(resource, agentId);
375
+ },
376
+ setState: async (_namespace, key, value) => {
377
+ await stores.state.set(key, value, agentId);
378
+ },
379
+ }, ns, agentId);
380
+ },
381
+ };
382
+ }
383
+ let wsManager;
384
+ try {
385
+ const { setupWebSocket } = await import('./ws.js');
386
+ wsManager = await setupWebSocket(httpServer, registry, bus, verbose, undefined, danceSupport);
387
+ }
388
+ catch {
389
+ // ws not installed or failed to load — WebSocket disabled
390
+ }
391
+ // Brood config: preload agent definitions, spawn on "start" event
392
+ if (broodPath) {
393
+ const broodRaw = readFileSync(resolvePath(broodPath), 'utf-8');
394
+ const broodData = (broodPath.endsWith('.json') ? JSON.parse(broodRaw) : yaml.load(broodRaw));
395
+ // Extract agents from first hive
396
+ const hives = (broodData.hives ?? {});
397
+ const firstHive = Object.values(hives)[0];
398
+ const broodAgents = (firstHive?.agents ?? firstHive?.workers ?? []).map(a => ({
399
+ role: String(a.role ?? ''),
400
+ type: a.type ?? 'worker',
401
+ prompt: typeof a.prompt === 'string' ? a.prompt : undefined,
402
+ wakeOn: a.wake_on ? {
403
+ types: a.wake_on.types,
404
+ maxWakes: a.wake_on.max_wakes,
405
+ } : undefined,
406
+ }));
407
+ // Load protocol from brood if specified
408
+ const specRef = firstHive?.acp ?? firstHive?.spec ?? firstHive?.protocol;
409
+ if (typeof specRef === 'string' && protocolPath === undefined) {
410
+ const specPath = resolvePath(dirname(broodPath), specRef);
411
+ if (existsSync(specPath)) {
412
+ const specData = await loadSpecFile(specPath);
413
+ registry.setProtocol('default', specData);
414
+ console.error(`[incubator] Protocol loaded from brood: ${specRef}`);
415
+ // Auto-derive agents from spec roles when brood has no explicit agents
416
+ if (broodAgents.length === 0 && specData.roles) {
417
+ for (const [roleName, roleDef] of Object.entries(specData.roles)) {
418
+ const count = typeof roleDef.agents === 'number' ? roleDef.agents : 1;
419
+ for (let i = 0; i < count; i++) {
420
+ broodAgents.push({ role: roleName, type: 'worker', prompt: undefined, wakeOn: undefined });
421
+ }
422
+ }
423
+ console.error(`[incubator] Derived ${broodAgents.length} agents from spec roles`);
424
+ }
425
+ }
426
+ }
427
+ const stagger = typeof broodData.stagger === 'number' ? broodData.stagger : 0;
428
+ const broodProvider = typeof broodData.provider === 'string' ? broodData.provider : 'ollama/qwen3:8b';
429
+ const broodEnv = (broodData.env ?? {});
430
+ // Resolve hive entry point (agent CLI within incubator)
431
+ const __dirname_brood = dirname(fileURLToPath(import.meta.url));
432
+ const hiveEntryPath = join(__dirname_brood, 'agent', 'cli.js');
433
+ console.error(`[incubator] Brood loaded: ${broodAgents.length} agents (${broodProvider}), waiting for "start" event`);
434
+ // Subscribe to bus — spawn agents when "start" event fires
435
+ let gameRunning = false;
436
+ bus.subscribe('default', (event) => {
437
+ if (event.type === 'start' && !gameRunning) {
438
+ gameRunning = true;
439
+ console.error('[orchestrator] Start event received, spawning agents...');
440
+ const config = {
441
+ provider: broodProvider,
442
+ stagger,
443
+ noAcp: false,
444
+ propolisPort: 0,
445
+ worktree: process.cwd(),
446
+ hiveEntry: hiveEntryPath,
447
+ tls: useTls,
448
+ env: broodEnv,
449
+ agents: broodAgents,
450
+ };
451
+ const orch = new BroodOrchestrator(config, port, bus, defaultStoresForWatcher.runs, verbose, defaultStoresForWatcher, registry, danceSupport?.module, telemetry, pluginManager);
452
+ orch.start().catch(err => {
453
+ console.error(`[orchestrator] Spawn failed: ${err.message}`);
454
+ });
455
+ spawnedOrchestrators.push(orch);
456
+ }
457
+ // Reset — shut down running agents, allow new game
458
+ if (event.type === 'reset') {
459
+ gameRunning = false;
460
+ for (const orch of spawnedOrchestrators) {
461
+ orch.shutdown().catch(() => { });
462
+ }
463
+ spawnedOrchestrators.length = 0;
464
+ console.error('[orchestrator] Reset — agents stopped, ready for new game');
465
+ }
466
+ });
467
+ }
468
+ // Initialize plugin system (replaces IntegrationManager + tool-loader)
469
+ const defaultStoresForPlugins = registry.get('default');
470
+ const pluginManager = new PluginManager({
471
+ verbose,
472
+ namespace: 'default',
473
+ bus,
474
+ eventStore: defaultStoresForPlugins.events,
475
+ });
476
+ // Extract brood plugins (if brood.yaml has a plugins: section)
477
+ let broodPlugins;
478
+ if (broodPath) {
479
+ try {
480
+ const broodPeekRaw = readFileSync(resolvePath(broodPath), 'utf-8');
481
+ const broodPeek = (broodPath.endsWith('.json') ? JSON.parse(broodPeekRaw) : yaml.load(broodPeekRaw));
482
+ if (Array.isArray(broodPeek.plugins)) {
483
+ broodPlugins = broodPeek.plugins.map(p => ({
484
+ package: String(p.package ?? ''),
485
+ config: p.config ?? undefined,
486
+ })).filter(p => p.package);
487
+ }
488
+ }
489
+ catch { /* brood parse will fail properly later */ }
490
+ }
491
+ // Build integration config for plugins
492
+ const intConfig = loadIntegrations ? loadIntegrationsConfig() : {};
493
+ await pluginManager.init({
494
+ autoDiscover: true,
495
+ broodPlugins,
496
+ integrations: loadIntegrations ? intConfig : undefined,
497
+ cliIntegrations: cliIntegrations.length > 0 ? cliIntegrations : undefined,
498
+ });
499
+ // Build tool entries for the working directory
500
+ pluginManager.buildToolEntries(process.cwd(), carapaceGuard ?? null, verbose);
501
+ const loadedPlugins = pluginManager.getLoadedNames();
502
+ if (loadedPlugins.length > 0) {
503
+ const toolCount = pluginManager.getToolCount();
504
+ console.error(`[incubator] Plugins: ${loadedPlugins.join(', ')} (${toolCount} tools)`);
505
+ }
506
+ // Create telemetry reporter (local-first, cloud opt-in via env vars)
507
+ let telemetry;
508
+ try {
509
+ telemetry = createTelemetryFromEnv();
510
+ telemetry.start();
511
+ if (telemetry.localEnabled) {
512
+ console.error(`[incubator] Telemetry: local JSONL${telemetry.cloudEnabled ? ' + cloud sync' : ''}`);
513
+ }
514
+ // Wire telemetry into guard (guard was set before telemetry was created)
515
+ if (carapaceGuard && telemetry) {
516
+ registry.setGuard(carapaceGuard, verbose, telemetry);
517
+ sanitizeSnapshotFn = (snapshot) => scanSnapshot(snapshot, carapaceGuard, verbose, telemetry);
518
+ }
519
+ // Wire telemetry into dance support for WS metrics push
520
+ if (danceSupport && telemetry) {
521
+ danceSupport.telemetry = telemetry;
522
+ }
523
+ }
524
+ catch {
525
+ // Non-fatal — telemetry must never break the host
526
+ }
527
+ httpServer.listen(port, () => {
528
+ console.error(`[incubator] ${useTls ? 'HTTPS' : 'HTTP'} server listening on port ${port}`);
529
+ console.error(`[incubator] MCP endpoint: ${proto}://localhost:${port}/mcp`);
530
+ console.error(`[incubator] REST API: ${proto}://localhost:${port}/api/`);
531
+ if (wsManager) {
532
+ console.error(`[incubator] WebSocket: ${wsProto}://localhost:${port}/ws`);
533
+ }
534
+ else {
535
+ console.error(`[incubator] WebSocket: disabled (install "ws" to enable)`);
536
+ }
537
+ if (persistPath && !skipPersistence) {
538
+ console.error(`[incubator] Persistence: ${persistPath}`);
539
+ }
540
+ // Orchestrator mode: spawn propolis + drones (delegated from CLI)
541
+ if (agentsConfig) {
542
+ orchestrator = new BroodOrchestrator(agentsConfig, port, bus, defaultStoresForWatcher.runs, verbose, defaultStoresForWatcher, registry, danceSupport?.module, telemetry, pluginManager);
543
+ orchestrator.start().catch(err => {
544
+ console.error(`[orchestrator] Fatal: ${err.message}`);
545
+ process.exit(1);
546
+ });
547
+ }
548
+ });
549
+ let orchestrator;
550
+ // Graceful shutdown
551
+ process.on('SIGINT', async () => {
552
+ console.error('\n[incubator] Shutting down...');
553
+ if (orchestrator)
554
+ await orchestrator.shutdown();
555
+ for (const orch of spawnedOrchestrators)
556
+ await orch.shutdown();
557
+ if (telemetry)
558
+ await telemetry.stop();
559
+ runWatcher.stop();
560
+ webhookManager.close();
561
+ await pluginManager.destroyAll();
562
+ if (wsManager)
563
+ wsManager.close();
564
+ await bus.close();
565
+ if (persistPath && !skipPersistence) {
566
+ await saveAllSnapshots(persistPath, registry);
567
+ console.error('[incubator] Snapshots saved');
568
+ }
569
+ if (redisClient) {
570
+ await redisClient.quit();
571
+ console.error('[incubator] Redis disconnected');
572
+ }
573
+ for (const [, session] of sessions) {
574
+ session.server.close();
575
+ }
576
+ httpServer.close();
577
+ process.exit(0);
578
+ });
579
+ }
580
+ else {
581
+ // Stdio mode: single agent, default namespace
582
+ const stores = registry.get('default');
583
+ const onSave = (persistPath && !skipPersistence) ? () => { saveAllSnapshots(persistPath, registry); } : undefined;
584
+ const server = createServer(stores, {
585
+ agentId: agentId ?? 'agent_stdio',
586
+ persistPath: skipPersistence ? undefined : persistPath,
587
+ verbose,
588
+ sanitizeSnapshot: sanitizeSnapshotFn,
589
+ onSave,
590
+ getProtocol: () => registry.getProtocol('default'),
591
+ });
592
+ const transport = new StdioServerTransport();
593
+ await server.connect(transport);
594
+ console.error(`[incubator] Running on stdio (agent: ${agentId ?? 'agent_stdio'})`);
595
+ if (persistPath && !skipPersistence) {
596
+ console.error(`[incubator] Persistence: ${persistPath}`);
597
+ }
598
+ }
599
+ }
600
+ // Auto-execution moved to bin.ts — this file is import-only
601
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}