@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,15 @@
1
+ /**
2
+ * Integration config — reads/writes ~/.honeyb/integrations.json
3
+ * Falls back to legacy ~/.config/honeybee/integrations.json
4
+ */
5
+ export interface IntegrationEntry {
6
+ package: string;
7
+ enabled: boolean;
8
+ config: Record<string, string>;
9
+ }
10
+ export type IntegrationsConfig = Record<string, IntegrationEntry>;
11
+ export declare function loadIntegrationsConfig(): IntegrationsConfig;
12
+ export declare function saveIntegrationsConfig(config: IntegrationsConfig): void;
13
+ export declare function enableIntegration(name: string, pkg: string, userConfig?: Record<string, string>): void;
14
+ export declare function disableIntegration(name: string): void;
15
+ export declare function removeIntegration(name: string): void;
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Integration config — reads/writes ~/.honeyb/integrations.json
3
+ * Falls back to legacy ~/.config/honeybee/integrations.json
4
+ */
5
+ import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'node:fs';
6
+ import { join } from 'node:path';
7
+ import { homedir } from 'node:os';
8
+ function honeybDir() {
9
+ return join(homedir(), '.honeyb');
10
+ }
11
+ function legacyDir() {
12
+ return join(homedir(), '.config', 'honeybee');
13
+ }
14
+ function configPath() {
15
+ const newPath = join(honeybDir(), 'integrations.json');
16
+ if (existsSync(newPath))
17
+ return newPath;
18
+ // Fallback to legacy
19
+ const legacyPath = join(legacyDir(), 'integrations.json');
20
+ if (existsSync(legacyPath))
21
+ return legacyPath;
22
+ return newPath;
23
+ }
24
+ function writeConfigPath() {
25
+ return join(honeybDir(), 'integrations.json');
26
+ }
27
+ export function loadIntegrationsConfig() {
28
+ const path = configPath();
29
+ if (!existsSync(path))
30
+ return {};
31
+ try {
32
+ return JSON.parse(readFileSync(path, 'utf8'));
33
+ }
34
+ catch {
35
+ return {};
36
+ }
37
+ }
38
+ export function saveIntegrationsConfig(config) {
39
+ const dir = honeybDir();
40
+ if (!existsSync(dir)) {
41
+ mkdirSync(dir, { recursive: true });
42
+ }
43
+ writeFileSync(writeConfigPath(), JSON.stringify(config, null, 2) + '\n');
44
+ }
45
+ export function enableIntegration(name, pkg, userConfig = {}) {
46
+ const config = loadIntegrationsConfig();
47
+ config[name] = { package: pkg, enabled: true, config: userConfig };
48
+ saveIntegrationsConfig(config);
49
+ }
50
+ export function disableIntegration(name) {
51
+ const config = loadIntegrationsConfig();
52
+ if (config[name]) {
53
+ config[name].enabled = false;
54
+ saveIntegrationsConfig(config);
55
+ }
56
+ }
57
+ export function removeIntegration(name) {
58
+ const config = loadIntegrationsConfig();
59
+ delete config[name];
60
+ saveIntegrationsConfig(config);
61
+ }
62
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/integrations/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAUlC,SAAS,SAAS;IAChB,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,UAAU;IACjB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,mBAAmB,CAAC,CAAC;IACvD,IAAI,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IACxC,qBAAqB;IACrB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,mBAAmB,CAAC,CAAC;IAC1D,IAAI,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,UAAU,CAAC;IAC9C,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,IAAI,CAAC,SAAS,EAAE,EAAE,mBAAmB,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;IAC1B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAA0B;IAC/D,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;IACxB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;IACD,aAAa,CAAC,eAAe,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,GAAW,EAAE,aAAqC,EAAE;IAClG,MAAM,MAAM,GAAG,sBAAsB,EAAE,CAAC;IACxC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IACnE,sBAAsB,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,MAAM,MAAM,GAAG,sBAAsB,EAAE,CAAC;IACxC,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACjB,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC;QAC7B,sBAAsB,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,MAAM,MAAM,GAAG,sBAAsB,EAAE,CAAC;IACxC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;IACpB,sBAAsB,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { IntegrationManager } from './manager.js';
2
+ export { loadIntegrationPackage } from './loader.js';
3
+ export { loadIntegrationsConfig, saveIntegrationsConfig, enableIntegration, disableIntegration, removeIntegration, } from './config.js';
4
+ export type { IntegrationEntry, IntegrationsConfig } from './config.js';
@@ -0,0 +1,4 @@
1
+ export { IntegrationManager } from './manager.js';
2
+ export { loadIntegrationPackage } from './loader.js';
3
+ export { loadIntegrationsConfig, saveIntegrationsConfig, enableIntegration, disableIntegration, removeIntegration, } from './config.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/integrations/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Dynamic loader for integration npm packages.
3
+ *
4
+ * Each integration package must default-export an IntegrationFactory,
5
+ * or export a named `createIntegration` factory.
6
+ */
7
+ import type { IntegrationModule } from '@honeybee-ai/hivemind-sdk/integrations';
8
+ export declare function loadIntegrationPackage(packageName: string): Promise<IntegrationModule>;
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Dynamic loader for integration npm packages.
3
+ *
4
+ * Each integration package must default-export an IntegrationFactory,
5
+ * or export a named `createIntegration` factory.
6
+ */
7
+ export async function loadIntegrationPackage(packageName) {
8
+ // Use string indirection to avoid TS module resolution errors for optional deps
9
+ const mod = await import(packageName);
10
+ // Support: default export factory, named createIntegration, or direct module
11
+ const factory = mod.default?.default ?? // double-default for CJS interop
12
+ mod.default ??
13
+ mod.createIntegration;
14
+ if (typeof factory === 'function') {
15
+ const integration = factory();
16
+ if (integration && typeof integration.start === 'function' && typeof integration.stop === 'function') {
17
+ return integration;
18
+ }
19
+ }
20
+ // Maybe the module IS the integration (already instantiated)
21
+ if (mod.default && typeof mod.default.start === 'function') {
22
+ return mod.default;
23
+ }
24
+ throw new Error(`Package "${packageName}" does not export a valid IntegrationFactory or IntegrationModule. ` +
25
+ `Expected default export function returning { name, start, stop }.`);
26
+ }
27
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/integrations/loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,WAAmB;IAC9D,gFAAgF;IAChF,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IAEtC,6EAA6E;IAC7E,MAAM,OAAO,GACX,GAAG,CAAC,OAAO,EAAE,OAAO,IAAK,iCAAiC;QAC1D,GAAG,CAAC,OAAO;QACX,GAAG,CAAC,iBAAiB,CAAC;IAExB,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;QAClC,MAAM,WAAW,GAAG,OAAO,EAAE,CAAC;QAC9B,IAAI,WAAW,IAAI,OAAO,WAAW,CAAC,KAAK,KAAK,UAAU,IAAI,OAAO,WAAW,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACrG,OAAO,WAAW,CAAC;QACrB,CAAC;IACH,CAAC;IAED,6DAA6D;IAC7D,IAAI,GAAG,CAAC,OAAO,IAAI,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;QAC3D,OAAO,GAAG,CAAC,OAAO,CAAC;IACrB,CAAC;IAED,MAAM,IAAI,KAAK,CACb,YAAY,WAAW,qEAAqE;QAC5F,mEAAmE,CACpE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * IntegrationManager — lifecycle, event routing, tool aggregation.
3
+ *
4
+ * Loads integration packages, calls start(ctx)/stop(), subscribes onEvent()
5
+ * to NotificationBus, and aggregates getTools() for MCP registration.
6
+ */
7
+ import type { ToolDefinition } from '@honeybee-ai/hivemind-sdk/integrations';
8
+ import type { NotificationBus } from '../bus.js';
9
+ import type { IEventStore } from '../stores/interfaces.js';
10
+ import type { IntegrationEntry } from './config.js';
11
+ export declare class IntegrationManager {
12
+ private integrations;
13
+ private bus?;
14
+ private namespace;
15
+ private eventStore?;
16
+ private verbose;
17
+ constructor(opts: {
18
+ namespace?: string;
19
+ bus?: NotificationBus;
20
+ eventStore?: IEventStore;
21
+ verbose?: boolean;
22
+ });
23
+ loadFromConfig(entries: Record<string, IntegrationEntry>): Promise<void>;
24
+ load(name: string, packageName: string, config?: Record<string, string>): Promise<void>;
25
+ getTools(): ToolDefinition[];
26
+ getLoadedNames(): string[];
27
+ stopAll(): Promise<void>;
28
+ private createLogger;
29
+ }
@@ -0,0 +1,108 @@
1
+ /**
2
+ * IntegrationManager — lifecycle, event routing, tool aggregation.
3
+ *
4
+ * Loads integration packages, calls start(ctx)/stop(), subscribes onEvent()
5
+ * to NotificationBus, and aggregates getTools() for MCP registration.
6
+ */
7
+ import { loadIntegrationPackage } from './loader.js';
8
+ export class IntegrationManager {
9
+ integrations = [];
10
+ bus;
11
+ namespace;
12
+ eventStore;
13
+ verbose;
14
+ constructor(opts) {
15
+ this.namespace = opts.namespace ?? 'default';
16
+ this.bus = opts.bus;
17
+ this.eventStore = opts.eventStore;
18
+ this.verbose = opts.verbose ?? false;
19
+ }
20
+ async loadFromConfig(entries) {
21
+ const enabled = Object.entries(entries).filter(([, e]) => e.enabled);
22
+ for (const [name, entry] of enabled) {
23
+ try {
24
+ await this.load(name, entry.package, entry.config);
25
+ }
26
+ catch (err) {
27
+ console.error(`[integrations] Failed to load "${name}": ${err.message}`);
28
+ }
29
+ }
30
+ }
31
+ async load(name, packageName, config = {}) {
32
+ const module = await loadIntegrationPackage(packageName);
33
+ const logger = this.createLogger(module.name);
34
+ const ctx = {
35
+ namespace: this.namespace,
36
+ config,
37
+ logger,
38
+ publishEvent: async (type, data) => {
39
+ if (this.eventStore) {
40
+ await this.eventStore.publish(type, data, `integration:${module.name}`);
41
+ }
42
+ },
43
+ };
44
+ await module.start(ctx);
45
+ logger.info('Started');
46
+ // Subscribe to bus events if integration has onEvent
47
+ let unsubscribe;
48
+ if (module.onEvent && this.bus) {
49
+ unsubscribe = this.bus.subscribe(this.namespace, (event) => {
50
+ const integrationEvent = {
51
+ type: event.type,
52
+ data: event.data,
53
+ agentId: event.publishedBy,
54
+ namespace: this.namespace,
55
+ timestamp: Date.now(),
56
+ };
57
+ module.onEvent(integrationEvent).catch((err) => {
58
+ logger.error(`onEvent error: ${err.message}`);
59
+ });
60
+ });
61
+ }
62
+ this.integrations.push({ name, module, unsubscribe });
63
+ }
64
+ getTools() {
65
+ const tools = [];
66
+ for (const { module } of this.integrations) {
67
+ if (module.getTools) {
68
+ tools.push(...module.getTools());
69
+ }
70
+ }
71
+ return tools;
72
+ }
73
+ getLoadedNames() {
74
+ return this.integrations.map((i) => i.name);
75
+ }
76
+ async stopAll() {
77
+ for (const integration of this.integrations) {
78
+ try {
79
+ if (integration.unsubscribe)
80
+ integration.unsubscribe();
81
+ await integration.module.stop();
82
+ if (this.verbose) {
83
+ console.error(`[integrations] Stopped: ${integration.name}`);
84
+ }
85
+ }
86
+ catch (err) {
87
+ console.error(`[integrations] Error stopping "${integration.name}": ${err.message}`);
88
+ }
89
+ }
90
+ this.integrations = [];
91
+ }
92
+ createLogger(name) {
93
+ const prefix = `[int:${name}]`;
94
+ return {
95
+ info: (msg, ...args) => {
96
+ if (this.verbose)
97
+ console.error(`${prefix} ${msg}`, ...args);
98
+ },
99
+ warn: (msg, ...args) => {
100
+ console.error(`${prefix} WARN: ${msg}`, ...args);
101
+ },
102
+ error: (msg, ...args) => {
103
+ console.error(`${prefix} ERROR: ${msg}`, ...args);
104
+ },
105
+ };
106
+ }
107
+ }
108
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/integrations/manager.ts"],"names":[],"mappings":"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"}
package/dist/log.d.ts ADDED
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Structured logging utility for the incubator.
3
+ *
4
+ * Supports two formats:
5
+ * - text (default): Human-readable ANSI output to stderr
6
+ * - json: JSONL output to stderr (machine-parseable)
7
+ *
8
+ * Set via --log-format=json flag.
9
+ */
10
+ export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
11
+ export type LogFormat = 'text' | 'json';
12
+ export declare function setLogFormat(format: LogFormat): void;
13
+ export declare function setLogLevel(level: LogLevel): void;
14
+ export declare function setLogPrefix(p: string): void;
15
+ export declare function getLogFormat(): LogFormat;
16
+ /** Log a message at the given level. In JSON mode, outputs JSONL to stderr. */
17
+ export declare function log(level: LogLevel, msg: string, data?: Record<string, unknown>): void;
18
+ /** Convenience: info-level log */
19
+ export declare function logInfo(msg: string, data?: Record<string, unknown>): void;
20
+ /** Convenience: warn-level log */
21
+ export declare function logWarn(msg: string, data?: Record<string, unknown>): void;
22
+ /** Convenience: error-level log */
23
+ export declare function logError(msg: string, data?: Record<string, unknown>): void;
24
+ /** Convenience: debug-level log */
25
+ export declare function logDebug(msg: string, data?: Record<string, unknown>): void;
package/dist/log.js ADDED
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Structured logging utility for the incubator.
3
+ *
4
+ * Supports two formats:
5
+ * - text (default): Human-readable ANSI output to stderr
6
+ * - json: JSONL output to stderr (machine-parseable)
7
+ *
8
+ * Set via --log-format=json flag.
9
+ */
10
+ let currentFormat = 'text';
11
+ let currentLevel = 'info';
12
+ let prefix = '[incubator]';
13
+ const LEVEL_ORDER = {
14
+ debug: 0,
15
+ info: 1,
16
+ warn: 2,
17
+ error: 3,
18
+ };
19
+ export function setLogFormat(format) {
20
+ currentFormat = format;
21
+ }
22
+ export function setLogLevel(level) {
23
+ currentLevel = level;
24
+ }
25
+ export function setLogPrefix(p) {
26
+ prefix = p;
27
+ }
28
+ export function getLogFormat() {
29
+ return currentFormat;
30
+ }
31
+ /** Log a message at the given level. In JSON mode, outputs JSONL to stderr. */
32
+ export function log(level, msg, data) {
33
+ if (LEVEL_ORDER[level] < LEVEL_ORDER[currentLevel])
34
+ return;
35
+ if (currentFormat === 'json') {
36
+ const entry = {
37
+ ts: new Date().toISOString(),
38
+ level,
39
+ source: 'incubator',
40
+ msg,
41
+ };
42
+ if (data)
43
+ entry.data = data;
44
+ console.error(JSON.stringify(entry));
45
+ }
46
+ else {
47
+ const ts = new Date().toISOString().slice(11, 23);
48
+ console.error(`${prefix} ${ts} ${msg}`);
49
+ }
50
+ }
51
+ /** Convenience: info-level log */
52
+ export function logInfo(msg, data) {
53
+ log('info', msg, data);
54
+ }
55
+ /** Convenience: warn-level log */
56
+ export function logWarn(msg, data) {
57
+ log('warn', msg, data);
58
+ }
59
+ /** Convenience: error-level log */
60
+ export function logError(msg, data) {
61
+ log('error', msg, data);
62
+ }
63
+ /** Convenience: debug-level log */
64
+ export function logDebug(msg, data) {
65
+ log('debug', msg, data);
66
+ }
67
+ //# sourceMappingURL=log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.js","sourceRoot":"","sources":["../src/log.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,IAAI,aAAa,GAAc,MAAM,CAAC;AACtC,IAAI,YAAY,GAAa,MAAM,CAAC;AACpC,IAAI,MAAM,GAAG,aAAa,CAAC;AAE3B,MAAM,WAAW,GAA6B;IAC5C,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;CACT,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,MAAiB;IAC5C,aAAa,GAAG,MAAM,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAe;IACzC,YAAY,GAAG,KAAK,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,CAAS;IACpC,MAAM,GAAG,CAAC,CAAC;AACb,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,GAAG,CAAC,KAAe,EAAE,GAAW,EAAE,IAA8B;IAC9E,IAAI,WAAW,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,YAAY,CAAC;QAAE,OAAO;IAE3D,IAAI,aAAa,KAAK,MAAM,EAAE,CAAC;QAC7B,MAAM,KAAK,GAA4B;YACrC,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC5B,KAAK;YACL,MAAM,EAAE,WAAW;YACnB,GAAG;SACJ,CAAC;QACF,IAAI,IAAI;YAAE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IACvC,CAAC;SAAM,CAAC;QACN,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC;AAED,kCAAkC;AAClC,MAAM,UAAU,OAAO,CAAC,GAAW,EAAE,IAA8B;IACjE,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AACzB,CAAC;AAED,kCAAkC;AAClC,MAAM,UAAU,OAAO,CAAC,GAAW,EAAE,IAA8B;IACjE,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AACzB,CAAC;AAED,mCAAmC;AACnC,MAAM,UAAU,QAAQ,CAAC,GAAW,EAAE,IAA8B;IAClE,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,mCAAmC;AACnC,MAAM,UAAU,QAAQ,CAAC,GAAW,EAAE,IAA8B;IAClE,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { type BackendConfig } from './stores/backend.js';
2
+ import { type Guard } from './guard.js';
3
+ import type { Stores } from './stores/interfaces.js';
4
+ import type { NotificationBus } from './bus.js';
5
+ import type { ProtocolSpec } from '@agentcoordinationprotocol/spec';
6
+ import { TopicRouter, type TopicRouterOptions } from './honeycomb.js';
7
+ export declare class NamespaceRegistry {
8
+ private namespaces;
9
+ private protocols;
10
+ private guard?;
11
+ private verbose?;
12
+ private telemetry?;
13
+ private backendConfig;
14
+ private bus?;
15
+ private router?;
16
+ constructor(backendConfig?: BackendConfig);
17
+ setGuard(guard: Guard, verbose?: boolean, telemetry?: {
18
+ record(type: string, meta: Record<string, unknown>): void;
19
+ }): void;
20
+ setBus(bus: NotificationBus, routerOptions?: TopicRouterOptions): void;
21
+ getRouter(): TopicRouter | undefined;
22
+ get(namespace: string): Stores;
23
+ list(): string[];
24
+ delete(namespace: string): boolean;
25
+ has(namespace: string): boolean;
26
+ setProtocol(namespace: string, spec: ProtocolSpec): void;
27
+ getProtocol(namespace: string): ProtocolSpec | undefined;
28
+ }
@@ -0,0 +1,100 @@
1
+ import { createBackend } from './stores/backend.js';
2
+ import { createGuardedStores } from './guard.js';
3
+ import { TopicRouter } from './honeycomb.js';
4
+ const RESERVED_NAMES = new Set(['_ns']);
5
+ function installNotifications(stores, bus, namespace) {
6
+ // Patch the event store's publish method IN PLACE so that claims/discoveries
7
+ // (which hold a direct reference to this same event store instance) also
8
+ // trigger bus notifications for their internal events (claim.acquired, etc.)
9
+ const original = stores.events.publish.bind(stores.events);
10
+ stores.events.publish = async (type, data, agentId) => {
11
+ const event = await original(type, data, agentId);
12
+ bus.publish(namespace, event);
13
+ return event;
14
+ };
15
+ }
16
+ export class NamespaceRegistry {
17
+ namespaces = new Map();
18
+ protocols = new Map();
19
+ guard;
20
+ verbose;
21
+ telemetry;
22
+ backendConfig;
23
+ bus;
24
+ router;
25
+ constructor(backendConfig) {
26
+ this.backendConfig = backendConfig ?? { type: 'memory' };
27
+ }
28
+ setGuard(guard, verbose, telemetry) {
29
+ this.guard = guard;
30
+ this.verbose = verbose;
31
+ this.telemetry = telemetry;
32
+ }
33
+ setBus(bus, routerOptions) {
34
+ this.bus = bus;
35
+ this.router = new TopicRouter((ns) => this.get(ns), bus, routerOptions);
36
+ // Re-register protocols loaded before the bus was set
37
+ for (const [ns, spec] of this.protocols) {
38
+ if (spec.topics) {
39
+ this.router.registerProtocol(ns, spec);
40
+ }
41
+ }
42
+ }
43
+ getRouter() {
44
+ return this.router;
45
+ }
46
+ get(namespace) {
47
+ if (RESERVED_NAMES.has(namespace)) {
48
+ throw new Error(`'${namespace}' is a reserved name and cannot be used as a namespace`);
49
+ }
50
+ // Validate namespace name
51
+ if (!/^[a-z0-9][a-z0-9_-]{0,63}$/.test(namespace)) {
52
+ throw new Error(`Invalid namespace: must match /^[a-z0-9][a-z0-9_-]{0,63}$/`);
53
+ }
54
+ let stores = this.namespaces.get(namespace);
55
+ if (stores)
56
+ return stores;
57
+ // Cap total namespace count
58
+ if (this.namespaces.size >= 100) {
59
+ throw new Error('Maximum namespace count (100) reached');
60
+ }
61
+ stores = createBackend({ ...this.backendConfig, namespace });
62
+ if (this.bus) {
63
+ // Install BEFORE guard wrapping — patches the raw event store that
64
+ // claims/discoveries hold a direct reference to, so their internal
65
+ // events (claim.acquired, discovery.published) also notify the bus.
66
+ installNotifications(stores, this.bus, namespace);
67
+ }
68
+ if (this.guard) {
69
+ stores = createGuardedStores(stores, this.guard, this.verbose, this.telemetry);
70
+ }
71
+ this.namespaces.set(namespace, stores);
72
+ // Watch this namespace for cross-namespace topic routing
73
+ if (this.router) {
74
+ this.router.watch(namespace);
75
+ }
76
+ return stores;
77
+ }
78
+ list() {
79
+ return [...this.namespaces.keys()];
80
+ }
81
+ delete(namespace) {
82
+ if (this.router) {
83
+ this.router.clearNamespace(namespace);
84
+ }
85
+ return this.namespaces.delete(namespace);
86
+ }
87
+ has(namespace) {
88
+ return this.namespaces.has(namespace);
89
+ }
90
+ setProtocol(namespace, spec) {
91
+ this.protocols.set(namespace, spec);
92
+ if (this.router && spec.topics) {
93
+ this.router.registerProtocol(namespace, spec);
94
+ }
95
+ }
96
+ getProtocol(namespace) {
97
+ return this.protocols.get(namespace);
98
+ }
99
+ }
100
+ //# sourceMappingURL=namespaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"namespaces.js","sourceRoot":"","sources":["../src/namespaces.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,119 @@
1
+ import type { NotificationBus } from './bus.js';
2
+ import type { Stores, IRunStore } from './stores/interfaces.js';
3
+ import type { NamespaceRegistry } from './namespaces.js';
4
+ import type { DanceModule } from './dances.js';
5
+ import type { TelemetryReporter } from '@honeybee-ai/hivemind-sdk/telemetry';
6
+ import type { PluginManager } from './plugins/index.js';
7
+ export interface MockAction {
8
+ tool: string;
9
+ args: Record<string, unknown>;
10
+ response?: string;
11
+ }
12
+ export interface MockBehavior {
13
+ actions: MockAction[];
14
+ maxIterations?: number;
15
+ iterationDelay?: number;
16
+ }
17
+ export interface AgentSpec {
18
+ role: string;
19
+ count?: number;
20
+ /** 'worker' = in-process tools (default), 'drone' = MCP tools, 'claude' = Claude Code instance, 'mock' = scripted test agent */
21
+ type?: 'worker' | 'drone' | 'claude' | 'mock';
22
+ tools?: string[] | 'all';
23
+ coordination?: string | string[];
24
+ modelHint?: string | null;
25
+ /** Custom prompt for claude agents. */
26
+ prompt?: string | null;
27
+ /** Path to a Claude Code plugin directory (--plugin-dir). */
28
+ pluginDir?: string | null;
29
+ startOn?: {
30
+ conditions: Array<{
31
+ event: string;
32
+ count: number;
33
+ }>;
34
+ timeout: number;
35
+ } | null;
36
+ wakeOn?: {
37
+ types?: string[] | null;
38
+ timeout?: number;
39
+ maxWakes?: number;
40
+ } | null;
41
+ /** Mock behavior for type: 'mock' agents. */
42
+ mock?: MockBehavior | null;
43
+ }
44
+ export interface AgentsConfig {
45
+ provider: string;
46
+ stagger: number;
47
+ noAcp: boolean;
48
+ propolisPort: number;
49
+ worktree: string;
50
+ /** When true, use https:// for INCUBATOR_URL. */
51
+ tls?: boolean;
52
+ /** Unified hive entry point (replaces droneEntry + propolisEntry) */
53
+ hiveEntry: string;
54
+ /** @deprecated Use hiveEntry. Kept for backwards compat with older CLI. */
55
+ droneEntry?: string;
56
+ /** @deprecated Use hiveEntry. Kept for backwards compat with older CLI. */
57
+ propolisEntry?: string;
58
+ protocolPath?: string;
59
+ agents: AgentSpec[];
60
+ models?: Record<string, string>;
61
+ env?: Record<string, string>;
62
+ }
63
+ export interface AgentInfo {
64
+ pid?: number;
65
+ agentId: string;
66
+ role: string;
67
+ type: 'propolis' | 'drone' | 'worker' | 'claude';
68
+ inProcess?: boolean;
69
+ }
70
+ /**
71
+ * Spawns and manages agent child processes within a single hive.
72
+ *
73
+ * Worker agents: run in-process via AgentPool (no child process).
74
+ * Drone agents: propolis process + drone processes (MCP tools over HTTP).
75
+ * Claude agents: Claude Code instances as child processes.
76
+ */
77
+ export declare class BroodOrchestrator {
78
+ private config;
79
+ private incubatorPort;
80
+ private bus?;
81
+ private runs?;
82
+ private verbose;
83
+ private stores?;
84
+ private registry?;
85
+ private danceModule?;
86
+ private telemetry?;
87
+ private pluginManager?;
88
+ private children;
89
+ private childInfo;
90
+ private propolisPid?;
91
+ private pool?;
92
+ constructor(config: AgentsConfig, incubatorPort: number, bus?: NotificationBus | undefined, runs?: IRunStore | undefined, verbose?: boolean, stores?: Stores | undefined, registry?: NamespaceRegistry | undefined, danceModule?: DanceModule | undefined, telemetry?: TelemetryReporter | undefined, pluginManager?: PluginManager | undefined);
93
+ private log;
94
+ /** Resolve hive entry point (supports old droneEntry/propolisEntry for backwards compat) */
95
+ private get hiveEntry();
96
+ /** Resolve propolis entry (from hive package or legacy propolisEntry) */
97
+ private get propolisEntry();
98
+ start(): Promise<void>;
99
+ private spawnPropolis;
100
+ /** Check if in-process mode is available (stores injected). */
101
+ private get canRunInProcess();
102
+ private spawnAgents;
103
+ /**
104
+ * Start a Claude agent using the Agent SDK (programmatic, no subprocess).
105
+ * Returns true if SDK was available and agent was started, false to fall back.
106
+ */
107
+ private startClaudeAgent;
108
+ /**
109
+ * Spawn a Claude Code instance with ACP coordination env vars.
110
+ * Claude Code's native tools handle the env side; the ACP plugin handles coordination.
111
+ */
112
+ private spawnClaude;
113
+ /** Get info about all agents (in-process + child processes). */
114
+ getAgents(): AgentInfo[];
115
+ /** Kill a specific agent. Pool agents: runner.stop(). Child processes: SIGTERM. */
116
+ killAgent(agentId: string): Promise<void>;
117
+ /** Graceful shutdown: stop pool agents → SIGTERM child processes → propolis. */
118
+ shutdown(): Promise<void>;
119
+ }