@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,92 @@
1
+ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
2
+ import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
3
+ import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
4
+ /**
5
+ * MCP client that connects to a Propolis (or any MCP) server.
6
+ * Discovers tools and forwards calls. Implements ToolClient interface.
7
+ */
8
+ export class McpToolClient {
9
+ client;
10
+ tools = [];
11
+ toolNames = new Set();
12
+ constructor(name = 'hive') {
13
+ this.client = new Client({ name, version: '0.1.0' });
14
+ }
15
+ /**
16
+ * Connect via stdio (spawn Propolis as child process).
17
+ * Target format: "stdio:--work-dir=/tmp --no-guard"
18
+ */
19
+ async connectStdio(command, args) {
20
+ const transport = new StdioClientTransport({ command, args });
21
+ await this.client.connect(transport);
22
+ await this.discoverTools();
23
+ }
24
+ /**
25
+ * Connect via HTTP to an existing MCP server.
26
+ */
27
+ async connectHttp(url) {
28
+ const mcpUrl = url.endsWith('/mcp') ? url : `${url}/mcp`;
29
+ const transport = new StreamableHTTPClientTransport(new URL(mcpUrl));
30
+ await this.client.connect(transport);
31
+ await this.discoverTools();
32
+ }
33
+ async discoverTools() {
34
+ const { tools } = await this.client.listTools();
35
+ this.tools = tools.map(t => ({
36
+ type: 'function',
37
+ function: {
38
+ name: t.name,
39
+ description: t.description ?? '',
40
+ parameters: (t.inputSchema ?? { type: 'object', properties: {}, required: [] }),
41
+ },
42
+ }));
43
+ this.toolNames = new Set(this.tools.map(t => t.function.name));
44
+ }
45
+ getToolDefs() {
46
+ return this.tools;
47
+ }
48
+ hasToolName(name) {
49
+ return this.toolNames.has(name);
50
+ }
51
+ async callTool(name, args) {
52
+ const result = await this.client.callTool({ name, arguments: args });
53
+ const content = result.content;
54
+ if (content && content.length > 0) {
55
+ return content.map(c => c.text ?? '').join('\n');
56
+ }
57
+ return JSON.stringify(result);
58
+ }
59
+ async close() {
60
+ await this.client.close();
61
+ }
62
+ }
63
+ /**
64
+ * Parse propolis target string and return connected client.
65
+ * Formats:
66
+ * - "stdio:--work-dir=/tmp --no-guard" → spawn propolis subprocess
67
+ * - "http://localhost:3200" → connect to existing server
68
+ */
69
+ export async function connectPropolis(target) {
70
+ const client = new McpToolClient('hive-propolis');
71
+ if (target.startsWith('stdio:')) {
72
+ const argsStr = target.slice('stdio:'.length);
73
+ const args = argsStr.split(/\s+/).filter(Boolean);
74
+ await client.connectStdio('propolis', args);
75
+ }
76
+ else if (target.startsWith('http://') || target.startsWith('https://')) {
77
+ await client.connectHttp(target);
78
+ }
79
+ else {
80
+ throw new Error(`Invalid propolis target: "${target}". Use "stdio:..." or "http://..."`);
81
+ }
82
+ return client;
83
+ }
84
+ /**
85
+ * Connect to incubator via MCP (for --no-acp benchmarking mode).
86
+ */
87
+ export async function connectIncubatorMcp(serverUrl, _namespace) {
88
+ const client = new McpToolClient('hive-incubator');
89
+ await client.connectHttp(serverUrl);
90
+ return client;
91
+ }
92
+ //# sourceMappingURL=mcp-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../../src/agent/mcp-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Mock agent runner — deterministic action sequences without LLM calls.
3
+ * Used for testing all agent tiers (drone, worker, queen) with real stores/tools.
4
+ */
5
+ import type { AgentResult, AgentConfig } from './types.js';
6
+ import type { ToolClient } from './tool-client.js';
7
+ import type { DirectRuntime } from './acp/direct-runtime.js';
8
+ import type { TelemetryReporter } from '@honeybee-ai/hivemind-sdk/telemetry';
9
+ import type { MockBehavior } from '../orchestrator.js';
10
+ /**
11
+ * Run a mock agent that executes a scripted sequence of tool calls.
12
+ * No LLM is involved — the "intelligence" is the action script.
13
+ */
14
+ export declare function runMockAgent(behavior: MockBehavior, config: AgentConfig, toolClient: ToolClient | null, runtime: DirectRuntime | null, telemetry?: TelemetryReporter): Promise<AgentResult>;
@@ -0,0 +1,159 @@
1
+ /**
2
+ * Run a mock agent that executes a scripted sequence of tool calls.
3
+ * No LLM is involved — the "intelligence" is the action script.
4
+ */
5
+ export async function runMockAgent(behavior, config, toolClient, runtime, telemetry) {
6
+ const actions = behavior.actions;
7
+ const maxIterations = behavior.maxIterations ?? actions.length;
8
+ const iterationDelay = behavior.iterationDelay ?? 0;
9
+ let iterations = 0;
10
+ let lastResult = null;
11
+ let error;
12
+ for (let i = 0; i < maxIterations; i++) {
13
+ if (actions.length === 0)
14
+ break;
15
+ const action = actions[i % actions.length];
16
+ const opStart = Date.now();
17
+ try {
18
+ // Resolve $last templates in args
19
+ const resolvedArgs = resolveTemplates(action.args, lastResult);
20
+ // Dispatch to appropriate handler
21
+ const result = await dispatchTool(action.tool, resolvedArgs, toolClient, runtime);
22
+ lastResult = result;
23
+ telemetry?.record('tool_call', {
24
+ agentId: config.agentId,
25
+ tool: action.tool,
26
+ success: true,
27
+ latency_ms: Date.now() - opStart,
28
+ mock: true,
29
+ });
30
+ }
31
+ catch (err) {
32
+ const msg = err instanceof Error ? err.message : String(err);
33
+ telemetry?.record('tool_call', {
34
+ agentId: config.agentId,
35
+ tool: action.tool,
36
+ success: false,
37
+ error: msg,
38
+ latency_ms: Date.now() - opStart,
39
+ mock: true,
40
+ });
41
+ error = msg;
42
+ // Continue with remaining actions — don't abort on first error
43
+ }
44
+ iterations++;
45
+ if (iterationDelay > 0 && i < maxIterations - 1) {
46
+ await new Promise(r => setTimeout(r, iterationDelay));
47
+ }
48
+ }
49
+ telemetry?.record('agent_complete', {
50
+ agentId: config.agentId,
51
+ role: config.role,
52
+ iterations,
53
+ exitReason: error ? 'error' : 'completed',
54
+ mock: true,
55
+ });
56
+ return {
57
+ agentId: config.agentId,
58
+ role: config.role,
59
+ status: error ? 'error' : 'completed',
60
+ iterations,
61
+ error,
62
+ usage: { promptTokens: 0, completionTokens: 0, totalTokens: 0 },
63
+ };
64
+ }
65
+ // ─── ACP tool names ─────────────────────────────────────────────
66
+ const ACP_TOOLS = new Set(['publish', 'claim', 'release', 'get_state', 'set_state']);
67
+ // ─── Tool dispatch ──────────────────────────────────────────────
68
+ async function dispatchTool(toolName, args, toolClient, runtime) {
69
+ // ACP tools → runtime
70
+ if (ACP_TOOLS.has(toolName) && runtime) {
71
+ return dispatchAcpTool(toolName, args, runtime);
72
+ }
73
+ // Dance tools → runtime
74
+ if (runtime && toolName.startsWith('dance:')) {
75
+ const danceTool = toolName.slice(6);
76
+ return runtime.callDanceTool(danceTool, args);
77
+ }
78
+ // Check if it's a dance tool without prefix
79
+ if (runtime) {
80
+ try {
81
+ const result = await runtime.callDanceTool(toolName, args);
82
+ return result;
83
+ }
84
+ catch {
85
+ // Not a dance tool — fall through to env tools
86
+ }
87
+ }
88
+ // Env tools → toolClient (propolis)
89
+ if (toolClient && toolClient.hasToolName(toolName)) {
90
+ const resultStr = await toolClient.callTool(toolName, args);
91
+ try {
92
+ return JSON.parse(resultStr);
93
+ }
94
+ catch {
95
+ return resultStr;
96
+ }
97
+ }
98
+ throw new Error(`Unknown tool: ${toolName}`);
99
+ }
100
+ async function dispatchAcpTool(toolName, args, runtime) {
101
+ switch (toolName) {
102
+ case 'publish':
103
+ return runtime.publishEvent(args.type, args.data ?? {});
104
+ case 'claim':
105
+ return runtime.claimResource(args.resource, args.value);
106
+ case 'release':
107
+ return runtime.releaseResource(args.resource);
108
+ case 'get_state':
109
+ return runtime.getState();
110
+ case 'set_state':
111
+ return runtime.setState(args.key, args.value);
112
+ default:
113
+ throw new Error(`Unknown ACP tool: ${toolName}`);
114
+ }
115
+ }
116
+ // ─── Template resolution ────────────────────────────────────────
117
+ /**
118
+ * Resolve $last.field templates in args.
119
+ * $last refers to the previous tool call's result.
120
+ * $last.foo.bar navigates nested objects.
121
+ */
122
+ function resolveTemplates(args, lastResult) {
123
+ const resolved = {};
124
+ for (const [key, value] of Object.entries(args)) {
125
+ resolved[key] = resolveValue(value, lastResult);
126
+ }
127
+ return resolved;
128
+ }
129
+ function resolveValue(value, lastResult) {
130
+ if (typeof value === 'string' && value.startsWith('$last')) {
131
+ return resolveLastPath(value, lastResult);
132
+ }
133
+ if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
134
+ return resolveTemplates(value, lastResult);
135
+ }
136
+ if (Array.isArray(value)) {
137
+ return value.map(v => resolveValue(v, lastResult));
138
+ }
139
+ return value;
140
+ }
141
+ function resolveLastPath(template, lastResult) {
142
+ if (template === '$last')
143
+ return lastResult;
144
+ const path = template.slice(6); // Remove '$last.'
145
+ const parts = path.split('.');
146
+ let current = lastResult;
147
+ for (const part of parts) {
148
+ if (current === null || current === undefined)
149
+ return undefined;
150
+ if (typeof current === 'object') {
151
+ current = current[part];
152
+ }
153
+ else {
154
+ return undefined;
155
+ }
156
+ }
157
+ return current;
158
+ }
159
+ //# sourceMappingURL=mock-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-runner.js","sourceRoot":"","sources":["../../src/agent/mock-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { ToolClient } from './tool-client.js';
2
+ import type { ToolDef } from './types.js';
3
+ import type { ToolEntry } from '@honeybee-ai/hivemind-sdk/integrations';
4
+ /**
5
+ * In-process tool client — runs tool handlers directly.
6
+ * No MCP overhead, no child process. Used in Worker mode.
7
+ *
8
+ * Accepts ToolEntry[] from PluginManager.
9
+ */
10
+ export declare class NativeToolClient implements ToolClient {
11
+ private entryMap;
12
+ private _defs;
13
+ constructor(entries: ToolEntry[], toolFilter?: string[] | null);
14
+ getToolDefs(): ToolDef[];
15
+ hasToolName(name: string): boolean;
16
+ callTool(name: string, args: Record<string, unknown>): Promise<string>;
17
+ close(): Promise<void>;
18
+ }
@@ -0,0 +1,42 @@
1
+ /**
2
+ * In-process tool client — runs tool handlers directly.
3
+ * No MCP overhead, no child process. Used in Worker mode.
4
+ *
5
+ * Accepts ToolEntry[] from PluginManager.
6
+ */
7
+ export class NativeToolClient {
8
+ entryMap;
9
+ _defs;
10
+ constructor(entries, toolFilter) {
11
+ let filtered = entries;
12
+ // Filter tools if whitelist provided
13
+ if (toolFilter) {
14
+ const filterSet = new Set(toolFilter);
15
+ filtered = entries.filter(e => filterSet.has(e.def.function.name));
16
+ }
17
+ this.entryMap = new Map(filtered.map(e => [e.def.function.name, e]));
18
+ this._defs = filtered.map(e => e.def);
19
+ }
20
+ getToolDefs() {
21
+ return this._defs;
22
+ }
23
+ hasToolName(name) {
24
+ return this.entryMap.has(name);
25
+ }
26
+ async callTool(name, args) {
27
+ const entry = this.entryMap.get(name);
28
+ if (!entry) {
29
+ return JSON.stringify({ error: `Unknown tool: ${name}` });
30
+ }
31
+ const result = await entry.handler(args);
32
+ // Unwrap ToolResult { content: [{ text }] } → string
33
+ if (result.content && result.content.length > 0) {
34
+ return result.content.map((c) => c.text ?? '').join('\n');
35
+ }
36
+ return JSON.stringify(result);
37
+ }
38
+ async close() {
39
+ // No-op — no connections to close
40
+ }
41
+ }
42
+ //# sourceMappingURL=native-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-client.js","sourceRoot":"","sources":["../../src/agent/native-client.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,MAAM,OAAO,gBAAgB;IACnB,QAAQ,CAA4E;IACpF,KAAK,CAAY;IAEzB,YAAY,OAAoB,EAAE,UAA4B;QAC5D,IAAI,QAAQ,GAAG,OAAO,CAAC;QAEvB,qCAAqC;QACrC,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;YACtC,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACrE,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAyB,CAAC,CAAC;IAC9D,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,WAAW,CAAC,IAAY;QACtB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAY,EAAE,IAA6B;QACxD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,iBAAiB,IAAI,EAAE,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAEzC,qDAAqD;QACrD,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChD,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAoB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/E,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,KAAK;QACT,kCAAkC;IACpC,CAAC;CACF"}
@@ -0,0 +1,45 @@
1
+ import type { ToolDef } from './types.js';
2
+ interface ProtocolResponse {
3
+ protocol: {
4
+ name: string;
5
+ title: string;
6
+ };
7
+ role: {
8
+ name: string;
9
+ description: string;
10
+ };
11
+ current_phase: string;
12
+ instructions: string;
13
+ phases: Record<string, {
14
+ description: string;
15
+ terminal?: boolean;
16
+ }>;
17
+ governance?: Record<string, unknown>;
18
+ team?: Array<{
19
+ agent: string;
20
+ role: string;
21
+ }>;
22
+ rules?: Record<string, {
23
+ loop?: boolean;
24
+ steps: Array<{
25
+ action: string;
26
+ description?: string;
27
+ hint?: string;
28
+ params?: Record<string, unknown>;
29
+ }>;
30
+ }>;
31
+ resources?: Record<string, unknown>;
32
+ }
33
+ /**
34
+ * Generate system prompt for an agent.
35
+ * When a protocol is loaded, renders the full role description, phase rules, and resources.
36
+ * Without a protocol, falls back to generic coding-assistant instructions.
37
+ */
38
+ export declare function generateSystemPrompt(agentId: string, role: string, tools: ToolDef[], protocol?: ProtocolResponse | null, options?: {
39
+ disableReasoning?: boolean;
40
+ }): string;
41
+ /**
42
+ * Generate a minimal prompt when no protocol is loaded.
43
+ */
44
+ export declare function generateFallbackPrompt(agentId: string, role: string, tools: ToolDef[]): string;
45
+ export {};
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Generate system prompt for an agent.
3
+ * When a protocol is loaded, renders the full role description, phase rules, and resources.
4
+ * Without a protocol, falls back to generic coding-assistant instructions.
5
+ */
6
+ export function generateSystemPrompt(agentId, role, tools, protocol, options) {
7
+ const lines = [];
8
+ lines.push(`You are agent "${agentId}" with the role of "${role}".`);
9
+ lines.push('');
10
+ if (protocol) {
11
+ lines.push(`## Protocol: ${protocol.protocol.title}`);
12
+ lines.push('');
13
+ // Role description — this is the critical "what you do" section
14
+ lines.push(`## Your Role: ${protocol.role.name}`);
15
+ lines.push(protocol.role.description);
16
+ lines.push('');
17
+ // Current phase
18
+ lines.push(`## Current Phase: ${protocol.current_phase}`);
19
+ if (protocol.phases[protocol.current_phase]) {
20
+ lines.push(protocol.phases[protocol.current_phase].description);
21
+ }
22
+ lines.push('');
23
+ // Rules for current phase — step-by-step instructions
24
+ if (protocol.rules) {
25
+ const phaseRules = protocol.rules[protocol.current_phase];
26
+ if (phaseRules) {
27
+ lines.push('## Your Steps (follow in order):');
28
+ if (phaseRules.loop) {
29
+ lines.push('*Repeat these steps until no work remains, then say DONE.*');
30
+ }
31
+ lines.push('');
32
+ for (let i = 0; i < phaseRules.steps.length; i++) {
33
+ const step = phaseRules.steps[i];
34
+ const desc = step.hint ?? step.description ?? step.action;
35
+ lines.push(`${i + 1}. ${desc}`);
36
+ }
37
+ lines.push('');
38
+ }
39
+ }
40
+ // Resources — claim patterns, event types, instances
41
+ if (protocol.resources) {
42
+ const res = protocol.resources;
43
+ if (res.instances && Array.isArray(res.instances)) {
44
+ lines.push('## Available Resources');
45
+ for (const inst of res.instances) {
46
+ lines.push(`- ${inst}`);
47
+ }
48
+ lines.push('');
49
+ }
50
+ if (res.claim_patterns) {
51
+ lines.push('## Claim Patterns');
52
+ for (const [name, pattern] of Object.entries(res.claim_patterns)) {
53
+ lines.push(`- ${name}: \`${pattern}\``);
54
+ }
55
+ lines.push('');
56
+ }
57
+ }
58
+ // Phase overview
59
+ lines.push('## All Phases');
60
+ for (const [name, phase] of Object.entries(protocol.phases)) {
61
+ const marker = name === protocol.current_phase ? ' (CURRENT)' : phase.terminal ? ' (TERMINAL)' : '';
62
+ lines.push(`- **${name}**${marker}: ${phase.description}`);
63
+ }
64
+ lines.push('');
65
+ // Team
66
+ if (protocol.team && protocol.team.length > 0) {
67
+ lines.push('## Team');
68
+ const byRole = new Map();
69
+ for (const member of protocol.team) {
70
+ const list = byRole.get(member.role) ?? [];
71
+ list.push(member.agent);
72
+ byRole.set(member.role, list);
73
+ }
74
+ for (const [roleName, agents] of byRole) {
75
+ const marker = roleName === role ? ' (your role)' : '';
76
+ lines.push(`- **${roleName}**${marker}: ${agents.join(', ')}`);
77
+ }
78
+ lines.push('');
79
+ }
80
+ }
81
+ // Tool overview
82
+ lines.push('## Available Tools');
83
+ lines.push('');
84
+ for (const tool of tools) {
85
+ lines.push(`- **${tool.function.name}**: ${tool.function.description}`);
86
+ }
87
+ lines.push('');
88
+ // Instructions — context-aware
89
+ lines.push('## Instructions');
90
+ if (protocol) {
91
+ lines.push('- Follow the steps above for your role. Use the available tools to complete each step.');
92
+ lines.push('- Work through the workspace files as described in your role description.');
93
+ lines.push('- When you have completed ALL your work and have no more actions to take, respond with just the word "DONE".');
94
+ }
95
+ else {
96
+ lines.push('- Use the tools to complete your assigned work.');
97
+ lines.push('- Read files before modifying them to understand existing code.');
98
+ lines.push('- Use grep and glob to explore the codebase before making changes.');
99
+ lines.push('- When you have completed your work and have no more actions to take, say "DONE".');
100
+ }
101
+ lines.push('');
102
+ // Qwen-3 /no_think: suppress <think> blocks when reasoning disabled
103
+ if (options?.disableReasoning) {
104
+ lines.push('/no_think');
105
+ lines.push('');
106
+ }
107
+ return lines.join('\n');
108
+ }
109
+ /**
110
+ * Generate a minimal prompt when no protocol is loaded.
111
+ */
112
+ export function generateFallbackPrompt(agentId, role, tools) {
113
+ return generateSystemPrompt(agentId, role, tools, null);
114
+ }
115
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/agent/prompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { ProviderConfig, ChatMessage, ToolCall, ToolDef, CompletionResult } from './types.js';
2
+ export interface ProviderEntry {
3
+ tier: 'fast' | 'smart' | 'local';
4
+ baseUrl: string;
5
+ format: 'openai' | 'anthropic' | 'ollama';
6
+ defaultModel: string;
7
+ envVar: string;
8
+ cost: {
9
+ prompt: number;
10
+ completion: number;
11
+ };
12
+ }
13
+ export declare const PROVIDER_CATALOG: Record<string, ProviderEntry>;
14
+ export declare function resolveProvider(shorthand: string): ProviderConfig;
15
+ export declare function checkConnection(provider: ProviderConfig): Promise<boolean>;
16
+ export declare function checkModel(provider: ProviderConfig): Promise<boolean>;
17
+ export interface CompletionOptions {
18
+ temperature?: number;
19
+ /** Disable model reasoning/thinking (e.g. gpt-oss disable_reasoning). */
20
+ disableReasoning?: boolean;
21
+ /** Reasoning effort level (e.g. 'low', 'medium', 'high'). */
22
+ reasoningEffort?: string;
23
+ }
24
+ export declare function chatCompletion(provider: ProviderConfig, messages: ChatMessage[], tools: ToolDef[], temperature?: number, options?: CompletionOptions): Promise<CompletionResult>;
25
+ export declare function getToolCallArgs(tc: ToolCall): Record<string, unknown>;