@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,122 @@
1
+ /**
2
+ * Unified plugin/integration loader.
3
+ *
4
+ * Handles both new IncubatorPlugin and legacy IntegrationModule patterns.
5
+ * Detection order: createPlugin factory > default export factory > direct module.
6
+ */
7
+ /**
8
+ * Load a package and return an IncubatorPlugin.
9
+ * If the package exports a legacy IntegrationModule, wraps it automatically.
10
+ */
11
+ export async function loadPlugin(packageName, config) {
12
+ const mod = await import(packageName);
13
+ // 1. New plugin factory: named export createPlugin(config?)
14
+ const pluginFactory = mod.createPlugin ??
15
+ mod.default?.createPlugin;
16
+ if (typeof pluginFactory === 'function') {
17
+ const plugin = pluginFactory(config);
18
+ if (plugin && typeof plugin.start === 'function' && typeof plugin.stop === 'function' && plugin.name) {
19
+ return plugin;
20
+ }
21
+ }
22
+ // 2. Default export plugin factory
23
+ const defaultFactory = mod.default?.default ?? // CJS interop
24
+ mod.default;
25
+ if (typeof defaultFactory === 'function') {
26
+ const instance = defaultFactory(config);
27
+ if (instance && typeof instance.start === 'function' && typeof instance.stop === 'function') {
28
+ // Check if it's a full IncubatorPlugin (has getToolEntries)
29
+ if (typeof instance.getToolEntries === 'function') {
30
+ return instance;
31
+ }
32
+ // Legacy IntegrationModule — wrap it
33
+ return wrapIntegration(instance);
34
+ }
35
+ }
36
+ // 3. Direct module (already instantiated)
37
+ if (mod.default && typeof mod.default.start === 'function') {
38
+ if (typeof mod.default.getToolEntries === 'function') {
39
+ return mod.default;
40
+ }
41
+ return wrapIntegration(mod.default);
42
+ }
43
+ // 4. TOOL_DEFS export (propolis legacy path — wrap into plugin)
44
+ if (typeof mod.TOOL_DEFS === 'function') {
45
+ return wrapToolDefs(packageName, mod);
46
+ }
47
+ throw new Error(`Package "${packageName}" does not export a valid PluginFactory, IntegrationModule, or TOOL_DEFS. ` +
48
+ `Expected createPlugin(), default export factory, or TOOL_DEFS function.`);
49
+ }
50
+ /**
51
+ * Wrap a legacy IntegrationModule into an IncubatorPlugin.
52
+ * getTools() results get auto-converted to ToolEntry[] with wrapped handlers.
53
+ */
54
+ function wrapIntegration(module) {
55
+ return {
56
+ name: module.name,
57
+ async start(ctx) {
58
+ await module.start(ctx);
59
+ },
60
+ async stop() {
61
+ await module.stop();
62
+ },
63
+ onEvent: module.onEvent
64
+ ? async (event) => { await module.onEvent(event); }
65
+ : undefined,
66
+ getTools: module.getTools
67
+ ? () => module.getTools()
68
+ : undefined,
69
+ getToolEntries: module.getTools
70
+ ? () => convertToolDefinitions(module.getTools())
71
+ : undefined,
72
+ };
73
+ }
74
+ /**
75
+ * Wrap a module with TOOL_DEFS (propolis legacy) into an IncubatorPlugin.
76
+ */
77
+ function wrapToolDefs(packageName, mod) {
78
+ const name = packageName.replace(/^@[^/]+\//, '');
79
+ return {
80
+ name,
81
+ async start() { },
82
+ async stop() { },
83
+ getToolEntries(ctx) {
84
+ return mod.TOOL_DEFS(ctx.workDir, ctx.guard, ctx.verbose);
85
+ },
86
+ destroy: mod.destroyAllPtySessions
87
+ ? () => { mod.destroyAllPtySessions(); }
88
+ : undefined,
89
+ };
90
+ }
91
+ /**
92
+ * Convert simple ToolDefinition[] (from IntegrationModule.getTools()) to ToolEntry[].
93
+ */
94
+ function convertToolDefinitions(tools) {
95
+ return tools.map(tool => ({
96
+ def: {
97
+ type: 'function',
98
+ function: {
99
+ name: tool.name,
100
+ description: tool.description,
101
+ parameters: {
102
+ type: 'object',
103
+ properties: tool.inputSchema.properties,
104
+ required: tool.inputSchema.required ?? [],
105
+ },
106
+ },
107
+ },
108
+ schema: {},
109
+ handler: async (args) => {
110
+ const result = await tool.handler(args);
111
+ // If handler already returns ToolResult shape, pass through
112
+ if (result && typeof result === 'object' && 'content' in result) {
113
+ return result;
114
+ }
115
+ // Wrap raw result as text
116
+ return {
117
+ content: [{ type: 'text', text: typeof result === 'string' ? result : JSON.stringify(result) }],
118
+ };
119
+ },
120
+ }));
121
+ }
122
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/plugins/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * PluginManager — unified plugin lifecycle, tool aggregation, auto-discovery.
3
+ *
4
+ * Replaces both IntegrationManager and tool-loader.ts with a single system.
5
+ * Propolis auto-loads if installed. Legacy IntegrationModule packages are
6
+ * wrapped automatically via the loader.
7
+ */
8
+ import type { ToolEntry, ToolResult } from '@honeybee-ai/hivemind-sdk/integrations';
9
+ import type { NotificationBus } from '../bus.js';
10
+ import type { IEventStore } from '../stores/interfaces.js';
11
+ import type { IntegrationEntry } from '../integrations/config.js';
12
+ export interface BroodPluginEntry {
13
+ package: string;
14
+ config?: Record<string, string>;
15
+ }
16
+ export interface PluginManagerOptions {
17
+ /** Try to auto-discover propolis on init(). Default: true. */
18
+ autoDiscover?: boolean;
19
+ /** Plugin packages passed via --plugin= CLI flags. */
20
+ cliPlugins?: string[];
21
+ /** Plugin entries from brood.yaml. */
22
+ broodPlugins?: BroodPluginEntry[];
23
+ /** Legacy integration entries (from integrations.json). */
24
+ integrations?: Record<string, IntegrationEntry>;
25
+ /** CLI-specified integration names (--integration= flags). */
26
+ cliIntegrations?: string[];
27
+ }
28
+ type EnvHandler = (args: Record<string, unknown>) => Promise<ToolResult>;
29
+ export declare class PluginManager {
30
+ private plugins;
31
+ private _toolNameSet;
32
+ private _handlerMap;
33
+ private _allToolEntries;
34
+ private verbose;
35
+ private namespace;
36
+ private bus?;
37
+ private eventStore?;
38
+ constructor(opts?: {
39
+ verbose?: boolean;
40
+ namespace?: string;
41
+ bus?: NotificationBus;
42
+ eventStore?: IEventStore;
43
+ });
44
+ /**
45
+ * Initialize the plugin system.
46
+ * Auto-discovers propolis, loads CLI/brood plugins, wraps legacy integrations.
47
+ */
48
+ init(opts?: PluginManagerOptions): Promise<void>;
49
+ /**
50
+ * Load a single plugin by package name.
51
+ * Deduplicates by name — loading the same name twice is a no-op.
52
+ */
53
+ load(name: string, packageName: string, config?: Record<string, string>): Promise<void>;
54
+ /**
55
+ * Build tool entries from all plugins for the given context.
56
+ * Must be called after init() and before getHandlerMap()/getToolEntries().
57
+ */
58
+ buildToolEntries(workDir: string, guard: unknown, verbose: boolean): void;
59
+ /** All tool entries across all plugins. */
60
+ getToolEntries(): ToolEntry[];
61
+ /** Handler map (tool name → handler) for compound tool dispatch. */
62
+ getHandlerMap(): Map<string, EnvHandler>;
63
+ /** Set of all available tool names (for ENV_ACTIONS replacement). */
64
+ getToolNames(): Set<string>;
65
+ /** Whether any plugins provide tool entries. */
66
+ hasToolEntries(): boolean;
67
+ /** Names of all loaded plugins. */
68
+ getLoadedNames(): string[];
69
+ /** Tool count across all plugins. */
70
+ getToolCount(): number;
71
+ /** Graceful shutdown: stop all plugins, destroy resources. */
72
+ destroyAll(): Promise<void>;
73
+ private buildContext;
74
+ private log;
75
+ }
76
+ export {};
@@ -0,0 +1,238 @@
1
+ /**
2
+ * PluginManager — unified plugin lifecycle, tool aggregation, auto-discovery.
3
+ *
4
+ * Replaces both IntegrationManager and tool-loader.ts with a single system.
5
+ * Propolis auto-loads if installed. Legacy IntegrationModule packages are
6
+ * wrapped automatically via the loader.
7
+ */
8
+ import { loadPlugin } from './loader.js';
9
+ export class PluginManager {
10
+ plugins = [];
11
+ _toolNameSet = new Set();
12
+ _handlerMap = new Map();
13
+ _allToolEntries = [];
14
+ verbose;
15
+ namespace;
16
+ bus;
17
+ eventStore;
18
+ constructor(opts) {
19
+ this.verbose = opts?.verbose ?? false;
20
+ this.namespace = opts?.namespace ?? 'default';
21
+ this.bus = opts?.bus;
22
+ this.eventStore = opts?.eventStore;
23
+ }
24
+ /**
25
+ * Initialize the plugin system.
26
+ * Auto-discovers propolis, loads CLI/brood plugins, wraps legacy integrations.
27
+ */
28
+ async init(opts) {
29
+ const autoDiscover = opts?.autoDiscover ?? true;
30
+ // 1. Auto-discover propolis
31
+ if (autoDiscover) {
32
+ try {
33
+ await this.load('propolis', '@honeybee-ai/propolis');
34
+ }
35
+ catch {
36
+ this.log('No plugins auto-discovered');
37
+ }
38
+ }
39
+ // 2. CLI plugins (--plugin=)
40
+ if (opts?.cliPlugins) {
41
+ for (const pkg of opts.cliPlugins) {
42
+ try {
43
+ await this.load(pkg, pkg);
44
+ }
45
+ catch (err) {
46
+ console.error(`[plugins] Failed to load "${pkg}": ${err.message}`);
47
+ }
48
+ }
49
+ }
50
+ // 3. Brood.yaml plugins
51
+ if (opts?.broodPlugins) {
52
+ for (const entry of opts.broodPlugins) {
53
+ // Skip propolis if already auto-discovered
54
+ if (entry.package === '@honeybee-ai/propolis' && this.plugins.some(p => p.name === 'propolis')) {
55
+ continue;
56
+ }
57
+ try {
58
+ const name = entry.package.replace(/^@[^/]+\//, '');
59
+ await this.load(name, entry.package, entry.config);
60
+ }
61
+ catch (err) {
62
+ console.error(`[plugins] Failed to load "${entry.package}": ${err.message}`);
63
+ }
64
+ }
65
+ }
66
+ // 4. Legacy integrations
67
+ if (opts?.integrations) {
68
+ const cliIntNames = opts?.cliIntegrations ?? [];
69
+ if (cliIntNames.length > 0) {
70
+ // Load only CLI-specified integrations
71
+ for (const name of cliIntNames) {
72
+ const entry = opts.integrations[name];
73
+ if (entry) {
74
+ try {
75
+ await this.load(name, entry.package, entry.config);
76
+ }
77
+ catch (err) {
78
+ console.error(`[plugins] Failed to load integration "${name}": ${err.message}`);
79
+ }
80
+ }
81
+ else {
82
+ // Treat name as npm package name
83
+ try {
84
+ await this.load(name, name);
85
+ }
86
+ catch (err) {
87
+ console.error(`[plugins] Failed to load integration "${name}": ${err.message}`);
88
+ }
89
+ }
90
+ }
91
+ }
92
+ else {
93
+ // Load all enabled integrations
94
+ for (const [name, entry] of Object.entries(opts.integrations)) {
95
+ if (!entry.enabled)
96
+ continue;
97
+ try {
98
+ await this.load(name, entry.package, entry.config);
99
+ }
100
+ catch (err) {
101
+ console.error(`[plugins] Failed to load integration "${name}": ${err.message}`);
102
+ }
103
+ }
104
+ }
105
+ }
106
+ }
107
+ /**
108
+ * Load a single plugin by package name.
109
+ * Deduplicates by name — loading the same name twice is a no-op.
110
+ */
111
+ async load(name, packageName, config) {
112
+ // Deduplicate
113
+ if (this.plugins.some(p => p.name === name))
114
+ return;
115
+ const plugin = await loadPlugin(packageName, config);
116
+ // Start the plugin with a minimal context for lifecycle
117
+ const ctx = this.buildContext(config);
118
+ await plugin.start(ctx);
119
+ // Subscribe to bus events if plugin has onEvent
120
+ let unsubscribe;
121
+ if (plugin.onEvent && this.bus) {
122
+ unsubscribe = this.bus.subscribe(this.namespace, (event) => {
123
+ const integrationEvent = {
124
+ type: event.type,
125
+ data: event.data,
126
+ agentId: event.publishedBy,
127
+ namespace: this.namespace,
128
+ timestamp: Date.now(),
129
+ };
130
+ plugin.onEvent(integrationEvent).catch((err) => {
131
+ console.error(`[plugins:${plugin.name}] onEvent error: ${err.message}`);
132
+ });
133
+ });
134
+ }
135
+ this.plugins.push({ name, plugin, unsubscribe, toolEntries: [] });
136
+ this.log(`Loaded: ${plugin.name}`);
137
+ }
138
+ /**
139
+ * Build tool entries from all plugins for the given context.
140
+ * Must be called after init() and before getHandlerMap()/getToolEntries().
141
+ */
142
+ buildToolEntries(workDir, guard, verbose) {
143
+ this._allToolEntries = [];
144
+ this._handlerMap.clear();
145
+ this._toolNameSet.clear();
146
+ const ctx = {
147
+ ...this.buildContext(),
148
+ workDir,
149
+ guard,
150
+ verbose,
151
+ };
152
+ for (const loaded of this.plugins) {
153
+ if (loaded.plugin.getToolEntries) {
154
+ const entries = loaded.plugin.getToolEntries(ctx);
155
+ loaded.toolEntries = entries;
156
+ for (const entry of entries) {
157
+ const name = entry.def.function.name;
158
+ if (this._toolNameSet.has(name)) {
159
+ console.error(`[plugins] Tool name collision: "${name}" from "${loaded.name}" — skipping duplicate`);
160
+ continue;
161
+ }
162
+ this._toolNameSet.add(name);
163
+ this._handlerMap.set(name, entry.handler);
164
+ this._allToolEntries.push(entry);
165
+ }
166
+ }
167
+ }
168
+ }
169
+ /** All tool entries across all plugins. */
170
+ getToolEntries() {
171
+ return this._allToolEntries;
172
+ }
173
+ /** Handler map (tool name → handler) for compound tool dispatch. */
174
+ getHandlerMap() {
175
+ return this._handlerMap;
176
+ }
177
+ /** Set of all available tool names (for ENV_ACTIONS replacement). */
178
+ getToolNames() {
179
+ return this._toolNameSet;
180
+ }
181
+ /** Whether any plugins provide tool entries. */
182
+ hasToolEntries() {
183
+ return this._allToolEntries.length > 0;
184
+ }
185
+ /** Names of all loaded plugins. */
186
+ getLoadedNames() {
187
+ return this.plugins.map(p => p.name);
188
+ }
189
+ /** Tool count across all plugins. */
190
+ getToolCount() {
191
+ return this._allToolEntries.length;
192
+ }
193
+ /** Graceful shutdown: stop all plugins, destroy resources. */
194
+ async destroyAll() {
195
+ for (const loaded of this.plugins) {
196
+ try {
197
+ if (loaded.unsubscribe)
198
+ loaded.unsubscribe();
199
+ await loaded.plugin.stop();
200
+ if (loaded.plugin.destroy)
201
+ loaded.plugin.destroy();
202
+ }
203
+ catch (err) {
204
+ console.error(`[plugins] Error stopping "${loaded.name}": ${err.message}`);
205
+ }
206
+ }
207
+ this.plugins = [];
208
+ this._allToolEntries = [];
209
+ this._handlerMap.clear();
210
+ this._toolNameSet.clear();
211
+ }
212
+ buildContext(config) {
213
+ return {
214
+ namespace: this.namespace,
215
+ config: config ?? {},
216
+ logger: {
217
+ info: (msg) => { if (this.verbose)
218
+ console.error(`[plugins] ${msg}`); },
219
+ warn: (msg) => { console.error(`[plugins] WARN: ${msg}`); },
220
+ error: (msg) => { console.error(`[plugins] ERROR: ${msg}`); },
221
+ },
222
+ publishEvent: async (type, data) => {
223
+ if (this.eventStore) {
224
+ await this.eventStore.publish(type, data, 'plugin');
225
+ }
226
+ },
227
+ workDir: process.cwd(),
228
+ guard: null,
229
+ verbose: this.verbose,
230
+ };
231
+ }
232
+ log(msg) {
233
+ if (this.verbose) {
234
+ console.error(`[plugins] ${msg}`);
235
+ }
236
+ }
237
+ }
238
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/plugins/manager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AA6BzC,MAAM,OAAO,aAAa;IAChB,OAAO,GAAmB,EAAE,CAAC;IAC7B,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,WAAW,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC5C,eAAe,GAAgB,EAAE,CAAC;IAClC,OAAO,CAAU;IACjB,SAAS,CAAS;IAClB,GAAG,CAAmB;IACtB,UAAU,CAAe;IAEjC,YAAY,IAKX;QACC,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,KAAK,CAAC;QACtC,IAAI,CAAC,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,SAAS,CAAC;QAC9C,IAAI,CAAC,GAAG,GAAG,IAAI,EAAE,GAAG,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,IAAI,EAAE,UAAU,CAAC;IACrC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI,CAAC,IAA2B;QACpC,MAAM,YAAY,GAAG,IAAI,EAAE,YAAY,IAAI,IAAI,CAAC;QAEhD,4BAA4B;QAC5B,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,uBAAuB,CAAC,CAAC;YACvD,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;QAED,6BAA6B;QAC7B,IAAI,IAAI,EAAE,UAAU,EAAE,CAAC;YACrB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBAClC,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAC5B,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,CAAC,KAAK,CAAC,6BAA6B,GAAG,MAAO,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;gBAChF,CAAC;YACH,CAAC;QACH,CAAC;QAED,wBAAwB;QACxB,IAAI,IAAI,EAAE,YAAY,EAAE,CAAC;YACvB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtC,2CAA2C;gBAC3C,IAAI,KAAK,CAAC,OAAO,KAAK,uBAAuB,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,EAAE,CAAC;oBAC/F,SAAS;gBACX,CAAC;gBACD,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;oBACpD,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;gBACrD,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,CAAC,KAAK,CAAC,6BAA6B,KAAK,CAAC,OAAO,MAAO,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC1F,CAAC;YACH,CAAC;QACH,CAAC;QAED,yBAAyB;QACzB,IAAI,IAAI,EAAE,YAAY,EAAE,CAAC;YACvB,MAAM,WAAW,GAAG,IAAI,EAAE,eAAe,IAAI,EAAE,CAAC;YAEhD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,uCAAuC;gBACvC,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;oBAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;oBACtC,IAAI,KAAK,EAAE,CAAC;wBACV,IAAI,CAAC;4BACH,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;wBACrD,CAAC;wBAAC,OAAO,GAAG,EAAE,CAAC;4BACb,OAAO,CAAC,KAAK,CAAC,yCAAyC,IAAI,MAAO,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;wBAC7F,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACN,iCAAiC;wBACjC,IAAI,CAAC;4BACH,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;wBAC9B,CAAC;wBAAC,OAAO,GAAG,EAAE,CAAC;4BACb,OAAO,CAAC,KAAK,CAAC,yCAAyC,IAAI,MAAO,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;wBAC7F,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,gCAAgC;gBAChC,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;oBAC9D,IAAI,CAAC,KAAK,CAAC,OAAO;wBAAE,SAAS;oBAC7B,IAAI,CAAC;wBACH,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;oBACrD,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,OAAO,CAAC,KAAK,CAAC,yCAAyC,IAAI,MAAO,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;oBAC7F,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI,CAAC,IAAY,EAAE,WAAmB,EAAE,MAA+B;QAC3E,cAAc;QACd,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC;YAAE,OAAO;QAEpD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAErD,wDAAwD;QACxD,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAExB,gDAAgD;QAChD,IAAI,WAAqC,CAAC;QAC1C,IAAI,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YAC/B,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;gBACzD,MAAM,gBAAgB,GAAqB;oBACzC,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,OAAO,EAAE,KAAK,CAAC,WAAW;oBAC1B,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;iBACtB,CAAC;gBACF,MAAM,CAAC,OAAQ,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;oBACvD,OAAO,CAAC,KAAK,CAAC,YAAY,MAAM,CAAC,IAAI,oBAAqB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;gBACrF,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACrC,CAAC;IAED;;;OAGG;IACH,gBAAgB,CAAC,OAAe,EAAE,KAAc,EAAE,OAAgB;QAChE,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAE1B,MAAM,GAAG,GAAkB;YACzB,GAAG,IAAI,CAAC,YAAY,EAAE;YACtB,OAAO;YACP,KAAK;YACL,OAAO;SACR,CAAC;QAEF,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,IAAI,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;gBACjC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;gBAClD,MAAM,CAAC,WAAW,GAAG,OAAO,CAAC;gBAE7B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;oBAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACrC,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;wBAChC,OAAO,CAAC,KAAK,CAAC,mCAAmC,IAAI,WAAW,MAAM,CAAC,IAAI,wBAAwB,CAAC,CAAC;wBACrG,SAAS;oBACX,CAAC;oBACD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBAC5B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;oBAC1C,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,2CAA2C;IAC3C,cAAc;QACZ,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED,oEAAoE;IACpE,aAAa;QACX,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,qEAAqE;IACrE,YAAY;QACV,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,gDAAgD;IAChD,cAAc;QACZ,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;IACzC,CAAC;IAED,mCAAmC;IACnC,cAAc;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,qCAAqC;IACrC,YAAY;QACV,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;IACrC,CAAC;IAED,8DAA8D;IAC9D,KAAK,CAAC,UAAU;QACd,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,IAAI,MAAM,CAAC,WAAW;oBAAE,MAAM,CAAC,WAAW,EAAE,CAAC;gBAC7C,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC3B,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO;oBAAE,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACrD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,6BAA6B,MAAM,CAAC,IAAI,MAAO,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YACxF,CAAC;QACH,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAEO,YAAY,CAAC,MAA+B;QAClD,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,MAAM,IAAI,EAAE;YACpB,MAAM,EAAE;gBACN,IAAI,EAAE,CAAC,GAAW,EAAE,EAAE,GAAG,IAAI,IAAI,CAAC,OAAO;oBAAE,OAAO,CAAC,KAAK,CAAC,aAAa,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC/E,IAAI,EAAE,CAAC,GAAW,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;gBACnE,KAAK,EAAE,CAAC,GAAW,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;aACtE;YACD,YAAY,EAAE,KAAK,EAAE,IAAY,EAAE,IAAa,EAAE,EAAE;gBAClD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;oBACpB,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;YACD,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE;YACtB,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC;IACJ,CAAC;IAEO,GAAG,CAAC,GAAW;QACrB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,aAAa,GAAG,EAAE,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,23 @@
1
+ interface ScanResult {
2
+ pass: boolean;
3
+ score: number;
4
+ action: 'PASS' | 'LOG' | 'WARN' | 'BLOCK';
5
+ findings: Array<{
6
+ category: string;
7
+ severity: string;
8
+ description: string;
9
+ }>;
10
+ summary: string;
11
+ }
12
+ export interface Guard {
13
+ scan(message: string): ScanResult;
14
+ }
15
+ /**
16
+ * Load Carapace scanner. Returns null if not installed.
17
+ */
18
+ export declare function loadGuard(verbose?: boolean): Guard | null;
19
+ /**
20
+ * Scan input fields with Carapace. Returns an error message if blocked, null if clean.
21
+ */
22
+ export declare function scanInput(guard: Guard | null, fields: (string | undefined)[], verbose?: boolean): string | null;
23
+ export {};
@@ -0,0 +1,49 @@
1
+ import { createRequire } from 'node:module';
2
+ let cachedGuard;
3
+ /**
4
+ * Load Carapace scanner. Returns null if not installed.
5
+ */
6
+ export function loadGuard(verbose) {
7
+ if (cachedGuard !== undefined)
8
+ return cachedGuard;
9
+ try {
10
+ const require = createRequire(import.meta.url);
11
+ const mod = require('@honeybee-ai/carapace');
12
+ cachedGuard = mod;
13
+ if (verbose) {
14
+ console.error('[propolis] Carapace loaded');
15
+ }
16
+ return cachedGuard;
17
+ }
18
+ catch {
19
+ cachedGuard = null;
20
+ if (verbose) {
21
+ console.error('[propolis] Carapace not installed — guard disabled');
22
+ }
23
+ return null;
24
+ }
25
+ }
26
+ /**
27
+ * Scan input fields with Carapace. Returns an error message if blocked, null if clean.
28
+ */
29
+ export function scanInput(guard, fields, verbose) {
30
+ if (!guard)
31
+ return null;
32
+ const text = fields.filter(Boolean).join('\n');
33
+ if (!text)
34
+ return null;
35
+ const result = guard.scan(text);
36
+ if (verbose && result.findings.length > 0) {
37
+ const ts = new Date().toISOString().slice(11, 23);
38
+ console.error(` ${ts} [carapace] score=${result.score} action=${result.action} findings=${result.findings.length}`);
39
+ }
40
+ if (result.action === 'BLOCK') {
41
+ return `Blocked by security policy: ${result.summary}`;
42
+ }
43
+ if (result.action === 'WARN' && verbose) {
44
+ const ts = new Date().toISOString().slice(11, 23);
45
+ console.error(` ${ts} [carapace] WARN: ${result.summary}`);
46
+ }
47
+ return null;
48
+ }
49
+ //# sourceMappingURL=guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guard.js","sourceRoot":"","sources":["../../src/propolis/guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAc5C,IAAI,WAAqC,CAAC;AAE1C;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,OAAiB;IACzC,IAAI,WAAW,KAAK,SAAS;QAAE,OAAO,WAAW,CAAC;IAElD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;QAC7C,WAAW,GAAG,GAAY,CAAC;QAC3B,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC9C,CAAC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,WAAW,GAAG,IAAI,CAAC;QACnB,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,KAAmB,EAAE,MAA8B,EAAE,OAAiB;IAC9F,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAEvB,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEhC,IAAI,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,qBAAqB,MAAM,CAAC,KAAK,WAAW,MAAM,CAAC,MAAM,aAAa,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACvH,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QAC9B,OAAO,+BAA+B,MAAM,CAAC,OAAO,EAAE,CAAC;IACzD,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,IAAI,OAAO,EAAE,CAAC;QACxC,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,qBAAqB,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Re-export canonical tool types from SDK.
3
+ * Kept for backward compatibility — internal code imports from here.
4
+ */
5
+ export type { ToolResult } from '@honeybee-ai/hivemind-sdk/integrations';
6
+ /** Helper: wrap data as a ToolResult. */
7
+ export declare function textResult(data: unknown): import('@honeybee-ai/hivemind-sdk/integrations').ToolResult;
8
+ /** Helper: wrap error message as a ToolResult. */
9
+ export declare function errorResult(msg: string): import('@honeybee-ai/hivemind-sdk/integrations').ToolResult;
@@ -0,0 +1,9 @@
1
+ /** Helper: wrap data as a ToolResult. */
2
+ export function textResult(data) {
3
+ return { content: [{ type: 'text', text: typeof data === 'string' ? data : JSON.stringify(data) }] };
4
+ }
5
+ /** Helper: wrap error message as a ToolResult. */
6
+ export function errorResult(msg) {
7
+ return textResult({ error: msg });
8
+ }
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/propolis/tools/types.ts"],"names":[],"mappings":"AAMA,yCAAyC;AACzC,MAAM,UAAU,UAAU,CAAC,IAAa;IACtC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;AAChH,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,OAAO,UAAU,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;AACpC,CAAC"}
package/dist/rest.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ import type { IncomingMessage, ServerResponse } from 'node:http';
2
+ import type { NamespaceRegistry } from './namespaces.js';
3
+ import type { DanceSupport } from './ws.js';
4
+ export declare function handleRestRequest(req: IncomingMessage, res: ServerResponse, registry: NamespaceRegistry, verbose: boolean, danceSupport?: DanceSupport): Promise<boolean>;