orbitx 0.2.9 → 0.3.2

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 (213) hide show
  1. package/Readme.md +478 -456
  2. package/dist/agents/backend.d.ts +4 -0
  3. package/dist/agents/backend.d.ts.map +1 -0
  4. package/dist/agents/backend.js +54 -0
  5. package/dist/agents/backend.js.map +1 -0
  6. package/dist/agents/frontend.d.ts +4 -0
  7. package/dist/agents/frontend.d.ts.map +1 -0
  8. package/dist/agents/frontend.js +50 -0
  9. package/dist/agents/frontend.js.map +1 -0
  10. package/dist/agents/index.d.ts +10 -0
  11. package/dist/agents/index.d.ts.map +1 -0
  12. package/dist/agents/index.js +22 -0
  13. package/dist/agents/index.js.map +1 -0
  14. package/dist/agents/planner.d.ts +4 -0
  15. package/dist/agents/planner.d.ts.map +1 -0
  16. package/dist/agents/planner.js +86 -0
  17. package/dist/agents/planner.js.map +1 -0
  18. package/dist/agents/protocol.d.ts +5 -0
  19. package/dist/agents/protocol.d.ts.map +1 -0
  20. package/dist/agents/protocol.js +70 -0
  21. package/dist/agents/protocol.js.map +1 -0
  22. package/dist/agents/reasoner.d.ts +5 -0
  23. package/dist/agents/reasoner.d.ts.map +1 -0
  24. package/dist/agents/reasoner.js +96 -0
  25. package/dist/agents/reasoner.js.map +1 -0
  26. package/dist/agents/research.d.ts +4 -0
  27. package/dist/agents/research.d.ts.map +1 -0
  28. package/dist/agents/research.js +28 -0
  29. package/dist/agents/research.js.map +1 -0
  30. package/dist/agents/tester.d.ts +4 -0
  31. package/dist/agents/tester.d.ts.map +1 -0
  32. package/dist/agents/tester.js +70 -0
  33. package/dist/agents/tester.js.map +1 -0
  34. package/dist/core/agent-definition.d.ts +61 -0
  35. package/dist/core/agent-definition.d.ts.map +1 -0
  36. package/dist/core/agent-definition.js +82 -0
  37. package/dist/core/agent-definition.js.map +1 -0
  38. package/dist/core/ai-ask.d.ts +28 -0
  39. package/dist/core/ai-ask.d.ts.map +1 -0
  40. package/dist/core/ai-ask.js +80 -0
  41. package/dist/core/ai-ask.js.map +1 -0
  42. package/dist/core/ai-provider.d.ts +3 -0
  43. package/dist/core/ai-provider.d.ts.map +1 -1
  44. package/dist/core/ai-provider.js.map +1 -1
  45. package/dist/core/anthropic-provider.d.ts +1 -0
  46. package/dist/core/anthropic-provider.d.ts.map +1 -1
  47. package/dist/core/anthropic-provider.js +3 -0
  48. package/dist/core/anthropic-provider.js.map +1 -1
  49. package/dist/core/base-agent.d.ts +51 -28
  50. package/dist/core/base-agent.d.ts.map +1 -1
  51. package/dist/core/base-agent.js +118 -26
  52. package/dist/core/base-agent.js.map +1 -1
  53. package/dist/core/deepseek-provider.d.ts +1 -0
  54. package/dist/core/deepseek-provider.d.ts.map +1 -1
  55. package/dist/core/deepseek-provider.js +3 -0
  56. package/dist/core/deepseek-provider.js.map +1 -1
  57. package/dist/core/mcp-auto-execution-policy.d.ts +22 -0
  58. package/dist/core/mcp-auto-execution-policy.d.ts.map +1 -0
  59. package/dist/core/mcp-auto-execution-policy.js +85 -0
  60. package/dist/core/mcp-auto-execution-policy.js.map +1 -0
  61. package/dist/core/mcp-computer.d.ts +14 -1
  62. package/dist/core/mcp-computer.d.ts.map +1 -1
  63. package/dist/core/mcp-computer.js +352 -71
  64. package/dist/core/mcp-computer.js.map +1 -1
  65. package/dist/core/ollama-provider.d.ts +1 -0
  66. package/dist/core/ollama-provider.d.ts.map +1 -1
  67. package/dist/core/ollama-provider.js +3 -0
  68. package/dist/core/ollama-provider.js.map +1 -1
  69. package/dist/core/openai-provider.d.ts +1 -0
  70. package/dist/core/openai-provider.d.ts.map +1 -1
  71. package/dist/core/openai-provider.js +3 -0
  72. package/dist/core/openai-provider.js.map +1 -1
  73. package/dist/core/stateless-agent.d.ts +30 -0
  74. package/dist/core/stateless-agent.d.ts.map +1 -0
  75. package/dist/core/stateless-agent.js +79 -0
  76. package/dist/core/stateless-agent.js.map +1 -0
  77. package/dist/core/swarm-base.d.ts +88 -0
  78. package/dist/core/swarm-base.d.ts.map +1 -0
  79. package/dist/core/swarm-base.js +427 -0
  80. package/dist/core/swarm-base.js.map +1 -0
  81. package/dist/index.d.ts +13 -5
  82. package/dist/index.d.ts.map +1 -1
  83. package/dist/index.js +7 -3
  84. package/dist/index.js.map +1 -1
  85. package/dist/tests/agents/default-agents.test.d.ts +2 -0
  86. package/dist/tests/agents/default-agents.test.d.ts.map +1 -0
  87. package/dist/tests/agents/default-agents.test.js +106 -0
  88. package/dist/tests/agents/default-agents.test.js.map +1 -0
  89. package/dist/tests/core/agent-definition.test.d.ts +2 -0
  90. package/dist/tests/core/agent-definition.test.d.ts.map +1 -0
  91. package/dist/tests/core/agent-definition.test.js +99 -0
  92. package/dist/tests/core/agent-definition.test.js.map +1 -0
  93. package/dist/tests/core/ai-ask.test.d.ts +2 -0
  94. package/dist/tests/core/ai-ask.test.d.ts.map +1 -0
  95. package/dist/tests/core/ai-ask.test.js +101 -0
  96. package/dist/tests/core/ai-ask.test.js.map +1 -0
  97. package/dist/tests/core/mcp-auto-execution-policy.test.d.ts +2 -0
  98. package/dist/tests/core/mcp-auto-execution-policy.test.d.ts.map +1 -0
  99. package/dist/tests/core/mcp-auto-execution-policy.test.js +107 -0
  100. package/dist/tests/core/mcp-auto-execution-policy.test.js.map +1 -0
  101. package/dist/tests/core/scripted-provider.d.ts +38 -0
  102. package/dist/tests/core/scripted-provider.d.ts.map +1 -0
  103. package/dist/tests/core/scripted-provider.js +85 -0
  104. package/dist/tests/core/scripted-provider.js.map +1 -0
  105. package/dist/tests/core/stateless-agent.test.d.ts +2 -0
  106. package/dist/tests/core/stateless-agent.test.d.ts.map +1 -0
  107. package/dist/tests/core/stateless-agent.test.js +73 -0
  108. package/dist/tests/core/stateless-agent.test.js.map +1 -0
  109. package/dist/tests/core/swarm-base.test.d.ts +2 -0
  110. package/dist/tests/core/swarm-base.test.d.ts.map +1 -0
  111. package/dist/tests/core/swarm-base.test.js +387 -0
  112. package/dist/tests/core/swarm-base.test.js.map +1 -0
  113. package/dist/tests/index.d.ts +6 -0
  114. package/dist/tests/index.d.ts.map +1 -1
  115. package/dist/tests/index.js +6 -0
  116. package/dist/tests/index.js.map +1 -1
  117. package/dist/tests/tools/agent/agent-tools.test.js +225 -153
  118. package/dist/tests/tools/agent/agent-tools.test.js.map +1 -1
  119. package/dist/tools/agent/active.d.ts +5 -0
  120. package/dist/tools/agent/active.d.ts.map +1 -0
  121. package/dist/tools/agent/active.js +40 -0
  122. package/dist/tools/agent/active.js.map +1 -0
  123. package/dist/tools/agent/fire.d.ts +5 -0
  124. package/dist/tools/agent/fire.d.ts.map +1 -0
  125. package/dist/tools/agent/fire.js +38 -0
  126. package/dist/tools/agent/fire.js.map +1 -0
  127. package/dist/tools/agent/hire.d.ts +2 -2
  128. package/dist/tools/agent/hire.d.ts.map +1 -1
  129. package/dist/tools/agent/hire.js +43 -10
  130. package/dist/tools/agent/hire.js.map +1 -1
  131. package/dist/tools/agent/index.d.ts +22 -19
  132. package/dist/tools/agent/index.d.ts.map +1 -1
  133. package/dist/tools/agent/index.js +29 -21
  134. package/dist/tools/agent/index.js.map +1 -1
  135. package/dist/tools/agent/prompt.d.ts +2 -2
  136. package/dist/tools/agent/prompt.d.ts.map +1 -1
  137. package/dist/tools/agent/prompt.js +19 -53
  138. package/dist/tools/agent/prompt.js.map +1 -1
  139. package/dist/tools/agent/registry.d.ts +74 -24
  140. package/dist/tools/agent/registry.d.ts.map +1 -1
  141. package/dist/tools/agent/registry.js +93 -48
  142. package/dist/tools/agent/registry.js.map +1 -1
  143. package/dist/tools/agent/report-group.d.ts +5 -0
  144. package/dist/tools/agent/report-group.d.ts.map +1 -0
  145. package/dist/tools/agent/report-group.js +50 -0
  146. package/dist/tools/agent/report-group.js.map +1 -0
  147. package/dist/tools/agent/report-parent.d.ts +5 -0
  148. package/dist/tools/agent/report-parent.d.ts.map +1 -0
  149. package/dist/tools/agent/report-parent.js +36 -0
  150. package/dist/tools/agent/report-parent.js.map +1 -0
  151. package/dist/tools/agent/types.d.ts +5 -0
  152. package/dist/tools/agent/types.d.ts.map +1 -0
  153. package/dist/tools/agent/types.js +17 -0
  154. package/dist/tools/agent/types.js.map +1 -0
  155. package/docs/agents.md +249 -228
  156. package/docs/api-reference.md +9 -4
  157. package/docs/getting-started.md +78 -78
  158. package/docs/index.md +24 -23
  159. package/docs/mcp-architecture.md +71 -6
  160. package/docs/providers.md +258 -254
  161. package/docs/skills.md +0 -1
  162. package/docs/streaming.md +133 -133
  163. package/docs/swarm.md +503 -0
  164. package/docs/tools.md +214 -212
  165. package/package.json +1 -1
  166. package/dist/core/image-describer.d.ts +0 -19
  167. package/dist/core/image-describer.d.ts.map +0 -1
  168. package/dist/core/image-describer.js +0 -37
  169. package/dist/core/image-describer.js.map +0 -1
  170. package/dist/core/worker-agent.d.ts +0 -43
  171. package/dist/core/worker-agent.d.ts.map +0 -1
  172. package/dist/core/worker-agent.js +0 -40
  173. package/dist/core/worker-agent.js.map +0 -1
  174. package/dist/skills/shopping.d.ts +0 -4
  175. package/dist/skills/shopping.d.ts.map +0 -1
  176. package/dist/skills/shopping.js +0 -71
  177. package/dist/skills/shopping.js.map +0 -1
  178. package/dist/tools/agent/interaction.d.ts +0 -25
  179. package/dist/tools/agent/interaction.d.ts.map +0 -1
  180. package/dist/tools/agent/interaction.js +0 -14
  181. package/dist/tools/agent/interaction.js.map +0 -1
  182. package/dist/tools/agent/list.d.ts +0 -5
  183. package/dist/tools/agent/list.d.ts.map +0 -1
  184. package/dist/tools/agent/list.js +0 -16
  185. package/dist/tools/agent/list.js.map +0 -1
  186. package/dist/tools/agent/report.d.ts +0 -12
  187. package/dist/tools/agent/report.d.ts.map +0 -1
  188. package/dist/tools/agent/report.js +0 -31
  189. package/dist/tools/agent/report.js.map +0 -1
  190. package/dist/tools/bash/interaction.d.ts +0 -29
  191. package/dist/tools/bash/interaction.d.ts.map +0 -1
  192. package/dist/tools/bash/interaction.js +0 -13
  193. package/dist/tools/bash/interaction.js.map +0 -1
  194. package/dist/tools/browser/interaction.d.ts +0 -49
  195. package/dist/tools/browser/interaction.d.ts.map +0 -1
  196. package/dist/tools/browser/interaction.js +0 -14
  197. package/dist/tools/browser/interaction.js.map +0 -1
  198. package/dist/tools/fs/interaction.d.ts +0 -37
  199. package/dist/tools/fs/interaction.d.ts.map +0 -1
  200. package/dist/tools/fs/interaction.js +0 -13
  201. package/dist/tools/fs/interaction.js.map +0 -1
  202. package/dist/tools/present/interaction.d.ts +0 -17
  203. package/dist/tools/present/interaction.d.ts.map +0 -1
  204. package/dist/tools/present/interaction.js +0 -15
  205. package/dist/tools/present/interaction.js.map +0 -1
  206. package/dist/tools/question-answer/interaction.d.ts +0 -14
  207. package/dist/tools/question-answer/interaction.d.ts.map +0 -1
  208. package/dist/tools/question-answer/interaction.js +0 -13
  209. package/dist/tools/question-answer/interaction.js.map +0 -1
  210. package/dist/tools/todo/interaction.d.ts +0 -30
  211. package/dist/tools/todo/interaction.d.ts.map +0 -1
  212. package/dist/tools/todo/interaction.js +0 -13
  213. package/dist/tools/todo/interaction.js.map +0 -1
@@ -1,161 +1,233 @@
1
- import { describe, test } from "node:test";
1
+ import { test, describe } from "node:test";
2
2
  import assert from "node:assert/strict";
3
- import { AIProvider, AgentReportTool, AgentTools, MCPClient, MCPConnection, MCPServer, WorkerAgent, } from "../../../index.js";
4
- describe("agent/agent", () => {
5
- /**
6
- * Returns a fixed, scripted response (or repeats the last one once
7
- * exhausted) instead of calling a real model — lets the agent-management
8
- * tools be tested end to end (hire -> prompt -> worker's own tool loop ->
9
- * report) with no network access.
10
- */
11
- class ScriptedProvider extends AIProvider {
12
- #responses;
13
- #calls = 0;
14
- constructor(responses) {
15
- super();
16
- this.#responses = responses;
17
- }
18
- async chat(_messages, streamCallback, _tools) {
19
- const response = this.#responses[Math.min(this.#calls, this.#responses.length - 1)];
20
- this.#calls++;
21
- if (streamCallback) {
22
- if (response.content) {
23
- await streamCallback({ role: "assistant", content: response.content, done: false });
24
- }
25
- await streamCallback({
26
- role: "assistant",
27
- content: "",
28
- done: true,
29
- ...(response.toolCalls?.length ? { toolCalls: response.toolCalls } : {}),
30
- });
31
- }
32
- return response;
33
- }
34
- getCapabilities() {
35
- return { supportsTools: true, supportsImages: false, contextWindow: 200_000, safeUsageRatio: 0.9 };
36
- }
37
- setOption(key) {
38
- throw new Error(`ScriptedProvider does not support setting option "${key}"`);
39
- }
3
+ import { getAgentTools } from "../../../index.js";
4
+ /** The read-only half of a swarm: the roster the tools consult before deciding anything. */
5
+ class StubSwarm {
6
+ agents = [
7
+ { agentId: "planner-1", type: "planner", groups: [], active: true, busy: false, awaitingReport: false },
8
+ { agentId: "worker-1", type: "worker", parentId: "planner-1", groups: ["api"], active: true, busy: false, awaitingReport: false },
9
+ { agentId: "worker-2", type: "worker", parentId: "other-1", groups: ["api"], active: true, busy: true, awaitingReport: true },
10
+ ];
11
+ listTypes() {
12
+ return [{ type: "worker", description: "does work", rating: { work: 10 }, active: 2 }];
13
+ }
14
+ listAgents() {
15
+ return this.agents;
16
+ }
17
+ getAgentInfo(agentId) {
18
+ return this.agents.find(a => a.agentId === agentId);
40
19
  }
41
- function buildWorker(name, description, responses) {
42
- const connection = new MCPConnection();
43
- const server = new MCPServer(connection);
44
- const reportTool = AgentReportTool();
45
- server.registerTool(reportTool);
46
- const mcpClient = new MCPClient(`worker-${name}`, connection);
47
- return new WorkerAgent({
48
- name,
49
- description,
50
- rating: { backend: 8, frontend: 3 },
51
- instruction: "You are a worker agent.",
52
- aiProvider: new ScriptedProvider(responses),
53
- mcpClient,
54
- allowedTools: [reportTool],
20
+ isEntrypoint(agentId) {
21
+ return agentId === "planner-1";
22
+ }
23
+ }
24
+ const EVENTS = ["agent-hire", "agent-fire", "agent-prompt", "agent-report-parent", "agent-report-group"];
25
+ const toolNamed = (handle, name) => {
26
+ const tool = handle.tools.find(t => t.getOptions().name === name);
27
+ assert.ok(tool, `no tool named ${name}`);
28
+ return tool;
29
+ };
30
+ /** Exactly how an agent reaches a tool: inside its own labelled turn. */
31
+ const run = (handle, name, inputs = {}, agentId = "planner-1") => handle.runAs(agentId, () => toolNamed(handle, name).getOptions().execute("ENV", inputs));
32
+ /** A swarm that records every request the tools make and acks it the way SwarmBase would. */
33
+ function attached(maxHired) {
34
+ const handle = getAgentTools(maxHired === undefined ? {} : { maxHired });
35
+ const swarm = new StubSwarm();
36
+ handle.attach(swarm);
37
+ const asked = [];
38
+ for (const event of EVENTS) {
39
+ handle.on(event, (agentId, payload, done) => {
40
+ asked.push({ event, agentId, payload });
41
+ if (event === "agent-hire") {
42
+ const info = {
43
+ agentId: "worker-3",
44
+ type: payload.type,
45
+ parentId: agentId,
46
+ groups: payload.group ? [payload.group] : [],
47
+ active: true,
48
+ busy: false,
49
+ awaitingReport: false,
50
+ };
51
+ swarm.agents.push(info);
52
+ done(null, info);
53
+ return;
54
+ }
55
+ if (event === "agent-fire") {
56
+ const target = swarm.getAgentInfo(payload.agentId);
57
+ if (target)
58
+ target.active = false;
59
+ }
60
+ done();
55
61
  });
56
62
  }
57
- test("AgentTools: agent-list shows every worker, unhired by default", async () => {
58
- const worker = buildWorker("backend-worker", "Handles backend tasks.", [{ content: "unused", inputMissTokens: 0, inputCacheTokens: 0, outputTokens: 0 }]);
59
- const [listTool] = AgentTools([worker]);
60
- const result = await listTool.getOptions().execute("env", {});
61
- assert.strictEqual(result.agents.length, 1);
62
- assert.strictEqual(result.agents[0].name, "backend-worker");
63
- assert.strictEqual(result.agents[0].description, "Handles backend tasks.");
64
- assert.deepStrictEqual(result.agents[0].rating, { backend: 8, frontend: 3 });
65
- assert.strictEqual(result.agents[0].hired, false);
66
- });
67
- test("AgentTools: agent-hire marks a worker hired, reflected in agent-list", async () => {
68
- const worker = buildWorker("backend-worker", "Handles backend tasks.", [{ content: "unused", inputMissTokens: 0, inputCacheTokens: 0, outputTokens: 0 }]);
69
- const [listTool, hireTool] = AgentTools([worker]);
70
- const hireResult = await hireTool.getOptions().execute("env", { name: "backend-worker" });
71
- assert.deepStrictEqual(hireResult, { hired: true, name: "backend-worker" });
72
- const listResult = await listTool.getOptions().execute("env", {});
73
- assert.strictEqual(listResult.agents[0].hired, true);
74
- });
75
- test("AgentTools: agent-hire on an unknown name throws", async () => {
76
- const worker = buildWorker("backend-worker", "Handles backend tasks.", [{ content: "unused", inputMissTokens: 0, inputCacheTokens: 0, outputTokens: 0 }]);
77
- const [, hireTool] = AgentTools([worker]);
78
- await assert.rejects(() => hireTool.getOptions().execute("env", { name: "nonexistent" }), /no worker agent named "nonexistent"/);
79
- });
80
- test("AgentTools: agent-prompt on a worker that isn't hired yet throws", async () => {
81
- const worker = buildWorker("backend-worker", "Handles backend tasks.", [{ content: "unused", inputMissTokens: 0, inputCacheTokens: 0, outputTokens: 0 }]);
82
- const [, , promptTool] = AgentTools([worker]);
83
- await assert.rejects(() => promptTool.getOptions().execute("env", { name: "backend-worker", prompt: "do it" }), /is not hired yet/);
84
- });
85
- test("AgentTools: agent-prompt runs the worker and returns its agent-report text", async () => {
86
- const reportCall = { id: "call-1", name: "agent-report", inputs: { report: "answer is 42" } };
87
- const worker = buildWorker("backend-worker", "Handles backend tasks.", [
88
- { content: "", inputMissTokens: 10, inputCacheTokens: 0, outputTokens: 5, toolCalls: [reportCall] },
89
- ]);
90
- const [, hireTool, promptTool] = AgentTools([worker]);
91
- await hireTool.getOptions().execute("env", { name: "backend-worker" });
92
- const result = await promptTool.getOptions().execute("env", { name: "backend-worker", prompt: "what is the answer?" });
93
- assert.strictEqual(result.reported, true);
94
- assert.strictEqual(result.report, "answer is 42");
95
- });
96
- test("AgentTools: agent-prompt falls back to the worker's last assistant text when it never calls agent-report", async () => {
97
- const worker = buildWorker("backend-worker", "Handles backend tasks.", [
98
- { content: "I looked into it, no tool needed.", inputMissTokens: 10, inputCacheTokens: 0, outputTokens: 5 },
99
- ]);
100
- const [, hireTool, promptTool] = AgentTools([worker]);
101
- await hireTool.getOptions().execute("env", { name: "backend-worker" });
102
- const result = await promptTool.getOptions().execute("env", { name: "backend-worker", prompt: "check something" });
103
- assert.strictEqual(result.reported, false);
104
- assert.strictEqual(result.report, "I looked into it, no tool needed.");
105
- });
106
- test("AgentTools: a second agent-prompt call doesn't resurface a stale report from the first call", async () => {
107
- const reportCall = { id: "call-1", name: "agent-report", inputs: { report: "first answer" } };
108
- const worker = buildWorker("backend-worker", "Handles backend tasks.", [
109
- { content: "", inputMissTokens: 10, inputCacheTokens: 0, outputTokens: 5, toolCalls: [reportCall] },
110
- { content: "just acknowledging, no report this time", inputMissTokens: 10, inputCacheTokens: 0, outputTokens: 5 },
63
+ return { handle, swarm, asked };
64
+ }
65
+ describe("tools/agent", () => {
66
+ test("getAgentTools builds the whole management set, once", () => {
67
+ const handle = getAgentTools({ maxHired: 5 });
68
+ assert.deepStrictEqual(handle.tools.map(t => t.getOptions().name), ["agent-types", "agent-hire", "agent-fire", "agent-active", "agent-prompt", "agent-report-parent", "agent-report-group"]);
69
+ assert.strictEqual(handle.getMaxHired(), 5);
70
+ assert.ok(handle.id.length > 0);
71
+ assert.notStrictEqual(getAgentTools().id, handle.id);
72
+ });
73
+ test("the hire cap is surfaced in agent-hire's own description, so the model sees it", () => {
74
+ const capped = getAgentTools({ maxHired: 2 });
75
+ const uncapped = getAgentTools();
76
+ assert.match(toolNamed(capped, "agent-hire").getOptions().description, /At most 2 agents may be hired/);
77
+ assert.doesNotMatch(toolNamed(uncapped, "agent-hire").getOptions().description, /At most/);
78
+ });
79
+ test("only agent-report-parent ends the reporting agent's turn", () => {
80
+ const handle = getAgentTools();
81
+ assert.strictEqual(toolNamed(handle, "agent-report-parent").getOptions().stopIterationAfterUsingThisTool, true);
82
+ assert.strictEqual(toolNamed(handle, "agent-report-group").getOptions().stopIterationAfterUsingThisTool, false);
83
+ assert.strictEqual(toolNamed(handle, "agent-prompt").getOptions().stopIterationAfterUsingThisTool, false);
84
+ });
85
+ test("maxHired must be a positive integer", () => {
86
+ assert.throws(() => getAgentTools({ maxHired: 0 }), /maxHired must be a positive integer/);
87
+ assert.throws(() => getAgentTools({ maxHired: 1.5 }), /maxHired must be a positive integer/);
88
+ });
89
+ test("without a swarm the tools say so instead of failing obscurely", async () => {
90
+ const handle = getAgentTools();
91
+ await assert.rejects(() => run(handle, "agent-types"), /no swarm is attached/);
92
+ await assert.rejects(() => run(handle, "agent-hire", { type: "worker" }), /no swarm is attached/);
93
+ await assert.rejects(() => run(handle, "agent-report-parent", { report: "x" }), /no swarm is attached/);
94
+ });
95
+ test("called outside an agent's turn, a tool refuses rather than guessing who called it", async () => {
96
+ const { handle } = attached();
97
+ const execute = toolNamed(handle, "agent-hire").getOptions().execute;
98
+ await assert.rejects(() => execute("ENV", { type: "worker" }), /could not tell which agent/);
99
+ });
100
+ test("a swarm that reads the roster but never listens still fails legibly", async () => {
101
+ const handle = getAgentTools();
102
+ handle.attach(new StubSwarm());
103
+ await assert.rejects(() => run(handle, "agent-prompt", { agentId: "worker-1", prompt: "x" }), /no swarm is listening for "agent-prompt"/);
104
+ });
105
+ test("a handle cannot be shared between two swarms", () => {
106
+ const { handle } = attached();
107
+ assert.throws(() => handle.attach(new StubSwarm()), /already attached to another swarm/);
108
+ });
109
+ test("agent-types reports the roster and what's left of the shared cap", async () => {
110
+ const { handle } = attached(5);
111
+ const result = await run(handle, "agent-types");
112
+ assert.deepStrictEqual(result.types, [{ type: "worker", description: "does work", rating: { work: 10 }, active: 2 }]);
113
+ // The entrypoint agent is in the roster but holds no slot.
114
+ assert.strictEqual(result.hired, 2);
115
+ assert.strictEqual(result.maxHired, 5);
116
+ assert.strictEqual(result.remaining, 3);
117
+ });
118
+ test("agent-types reports no cap as null rather than a number", async () => {
119
+ const { handle } = attached();
120
+ const result = await run(handle, "agent-types");
121
+ assert.strictEqual(result.maxHired, null);
122
+ assert.strictEqual(result.remaining, null);
123
+ });
124
+ test("agent-hire asks the swarm as the calling agent, and passes type, group and briefing on", async () => {
125
+ const { handle, asked } = attached(5);
126
+ const result = await run(handle, "agent-hire", { type: "worker", group: "api", briefing: "uses Postgres" });
127
+ assert.deepStrictEqual(asked.at(-1), {
128
+ event: "agent-hire",
129
+ agentId: "planner-1",
130
+ payload: { type: "worker", group: "api", briefing: "uses Postgres" },
131
+ });
132
+ assert.strictEqual(result.agentId, "worker-3");
133
+ assert.strictEqual(result.remaining, 2);
134
+ });
135
+ test("a swarm that refuses the request fails the tool call with its reason", async () => {
136
+ const handle = getAgentTools();
137
+ handle.attach(new StubSwarm());
138
+ handle.on("agent-hire", (_agentId, _payload, done) => done(new Error(`no agent type "designer" in this swarm`)));
139
+ await assert.rejects(() => run(handle, "agent-hire", { type: "designer" }), /no agent type "designer"/);
140
+ });
141
+ test("agent-hire stops at the shared cap without asking the swarm", async () => {
142
+ const { handle, asked } = attached(2);
143
+ await assert.rejects(() => run(handle, "agent-hire", { type: "worker" }), /shared limit of 2 hired agent/);
144
+ assert.deepStrictEqual(asked, []);
145
+ });
146
+ test("agent-hire validates its inputs before reaching the swarm", async () => {
147
+ const { handle, asked } = attached();
148
+ await assert.rejects(() => run(handle, "agent-hire", {}), /type must be a non-empty string/);
149
+ await assert.rejects(() => run(handle, "agent-hire", { type: "worker", group: 5 }), /group must be a string/);
150
+ await assert.rejects(() => run(handle, "agent-hire", { type: "worker", briefing: 5 }), /briefing must be a string/);
151
+ assert.deepStrictEqual(asked, []);
152
+ });
153
+ test("agent-active lists the hired agents and marks which belong to the caller", async () => {
154
+ const { handle } = attached();
155
+ const result = await run(handle, "agent-active");
156
+ // The entrypoint agent is never listed — it is nobody's hire.
157
+ assert.deepStrictEqual(result.agents.map((a) => [a.agentId, a.yours]), [["worker-1", true], ["worker-2", false]]);
158
+ });
159
+ test("agent-active can filter by group", async () => {
160
+ const { handle, swarm } = attached();
161
+ swarm.agents[2].groups = [];
162
+ const result = await run(handle, "agent-active", { group: "api" });
163
+ assert.deepStrictEqual(result.agents.map((a) => a.agentId), ["worker-1"]);
164
+ });
165
+ test("agent-prompt hands the task over and says so without waiting for a result", async () => {
166
+ const { handle, asked } = attached();
167
+ const result = await run(handle, "agent-prompt", { agentId: "worker-1", prompt: "do the thing" });
168
+ assert.strictEqual(asked.at(-1)?.event, "agent-prompt");
169
+ assert.deepStrictEqual(asked.at(-1)?.payload.to, ["worker-1"]);
170
+ assert.match(asked.at(-1).payload.message, /^\[task from planner-1, the agent that hired you\]\ndo the thing$/);
171
+ assert.deepStrictEqual(result, { dispatched: true, agentId: "worker-1" });
172
+ });
173
+ test("agent-prompt and agent-fire only work on agents the caller hired", async () => {
174
+ const { handle, asked } = attached();
175
+ await assert.rejects(() => run(handle, "agent-prompt", { agentId: "worker-2", prompt: "x" }), /only other-1/);
176
+ await assert.rejects(() => run(handle, "agent-fire", { agentId: "worker-2" }), /only other-1/);
177
+ await assert.rejects(() => run(handle, "agent-fire", { agentId: "planner-1" }), /entrypoint agent cannot be fired/);
178
+ await assert.rejects(() => run(handle, "agent-prompt", { agentId: "ghost-1", prompt: "x" }), /no agent "ghost-1"/);
179
+ assert.deepStrictEqual(asked, []);
180
+ });
181
+ test("agent-prompt validates its inputs", async () => {
182
+ const { handle } = attached();
183
+ await assert.rejects(() => run(handle, "agent-prompt", { prompt: "x" }), /agentId must be a non-empty string/);
184
+ await assert.rejects(() => run(handle, "agent-prompt", { agentId: "worker-1" }), /prompt must be a non-empty string/);
185
+ });
186
+ test("agent-fire asks the swarm to drop the agent and reports the freed slot", async () => {
187
+ const { handle, asked } = attached(5);
188
+ const result = await run(handle, "agent-fire", { agentId: "worker-1" });
189
+ assert.deepStrictEqual(asked.at(-1), { event: "agent-fire", agentId: "planner-1", payload: { agentId: "worker-1" } });
190
+ assert.strictEqual(result.fired, true);
191
+ assert.strictEqual(result.remaining, 4);
192
+ await assert.rejects(() => run(handle, "agent-fire", { agentId: "worker-1" }), /already fired/);
193
+ await assert.rejects(() => run(handle, "agent-fire", {}), /agentId must be a non-empty string/);
194
+ });
195
+ test("agent-report-parent addresses the report to the caller's parent", async () => {
196
+ const { handle, asked } = attached();
197
+ const result = await run(handle, "agent-report-parent", { report: "WORK DONE" }, "worker-1");
198
+ assert.strictEqual(asked.at(-1)?.event, "agent-report-parent");
199
+ assert.deepStrictEqual(asked.at(-1)?.payload.to, ["planner-1"]);
200
+ assert.match(asked.at(-1).payload.message, /^\[report from worker-1 \(worker\), an agent you hired\]\nWORK DONE$/);
201
+ assert.deepStrictEqual(result, { delivered: true, to: "planner-1" });
202
+ await assert.rejects(() => run(handle, "agent-report-parent", {}, "worker-1"), /report must be a non-empty string/);
203
+ });
204
+ test("agent-report-parent has nothing to do for the entrypoint agent", async () => {
205
+ const { handle } = attached();
206
+ await assert.rejects(() => run(handle, "agent-report-parent", { report: "x" }), /no parent/);
207
+ });
208
+ test("agent-report-group addresses the caller's peers and not the caller itself", async () => {
209
+ const { handle, asked } = attached();
210
+ const result = await run(handle, "agent-report-group", { message: "SHARED NOTE" }, "worker-1");
211
+ assert.deepStrictEqual(asked.at(-1)?.payload.to, ["worker-2"]);
212
+ assert.match(asked.at(-1).payload.message, /^\[group "api" message from worker-1 \(worker\)\]\nSHARED NOTE$/);
213
+ assert.deepStrictEqual(result, { delivered: true, group: "api", to: ["worker-2"] });
214
+ await assert.rejects(() => run(handle, "agent-report-group", { message: "x", group: 5 }, "worker-1"), /group must be a string/);
215
+ await assert.rejects(() => run(handle, "agent-report-group", { message: "x", group: "ui" }, "worker-1"), /not in group "ui"/);
216
+ });
217
+ test("agent-report-group needs a group to send to", async () => {
218
+ const { handle, swarm } = attached();
219
+ await assert.rejects(() => run(handle, "agent-report-group", { message: "x" }), /not in any group/);
220
+ swarm.agents[1].groups = ["api", "ui"];
221
+ await assert.rejects(() => run(handle, "agent-report-group", { message: "x" }, "worker-1"), /more than one group.*api, ui/);
222
+ });
223
+ test("parallel turns don't mix up who is calling", async () => {
224
+ const { handle, swarm, asked } = attached();
225
+ swarm.agents.push({ agentId: "worker-9", type: "worker", parentId: "worker-1", groups: [], active: true, busy: false, awaitingReport: false });
226
+ await Promise.all([
227
+ run(handle, "agent-report-parent", { report: "from one" }, "worker-1"),
228
+ run(handle, "agent-report-parent", { report: "from two" }, "worker-9"),
111
229
  ]);
112
- const [, hireTool, promptTool] = AgentTools([worker]);
113
- await hireTool.getOptions().execute("env", { name: "backend-worker" });
114
- await promptTool.getOptions().execute("env", { name: "backend-worker", prompt: "first task" });
115
- const second = await promptTool.getOptions().execute("env", { name: "backend-worker", prompt: "second task" });
116
- assert.strictEqual(second.reported, false);
117
- assert.strictEqual(second.report, "just acknowledging, no report this time");
118
- });
119
- test("AgentTools: duplicate worker names are rejected at construction", async () => {
120
- const workerA = buildWorker("dup", "A", [{ content: "x", inputMissTokens: 0, inputCacheTokens: 0, outputTokens: 0 }]);
121
- const workerB = buildWorker("dup", "B", [{ content: "x", inputMissTokens: 0, inputCacheTokens: 0, outputTokens: 0 }]);
122
- assert.throws(() => AgentTools([workerA, workerB]), /duplicate worker agent name "dup"/);
123
- });
124
- test("AgentTools: maxHired is mentioned dynamically in agent-hire's description", async () => {
125
- const worker = buildWorker("backend-worker", "Handles backend tasks.", [{ content: "x", inputMissTokens: 0, inputCacheTokens: 0, outputTokens: 0 }]);
126
- const [, hireTool] = AgentTools([worker], { maxHired: 2 });
127
- assert.match(hireTool.getOptions().description, /At most 2 worker agents may be hired at once/);
128
- });
129
- test("AgentTools: agent-hire has no limit note when maxHired is omitted", async () => {
130
- const worker = buildWorker("backend-worker", "Handles backend tasks.", [{ content: "x", inputMissTokens: 0, inputCacheTokens: 0, outputTokens: 0 }]);
131
- const [, hireTool] = AgentTools([worker]);
132
- assert.doesNotMatch(hireTool.getOptions().description, /At most/);
133
- });
134
- test("AgentTools: hiring beyond maxHired throws, but re-hiring an already-hired worker doesn't count against it", async () => {
135
- const workerA = buildWorker("worker-a", "A", [{ content: "x", inputMissTokens: 0, inputCacheTokens: 0, outputTokens: 0 }]);
136
- const workerB = buildWorker("worker-b", "B", [{ content: "x", inputMissTokens: 0, inputCacheTokens: 0, outputTokens: 0 }]);
137
- const workerC = buildWorker("worker-c", "C", [{ content: "x", inputMissTokens: 0, inputCacheTokens: 0, outputTokens: 0 }]);
138
- const [listTool, hireTool] = AgentTools([workerA, workerB, workerC], { maxHired: 1 });
139
- await hireTool.getOptions().execute("env", { name: "worker-a" });
140
- // re-hiring the same worker is a no-op, must not count twice against the limit
141
- await hireTool.getOptions().execute("env", { name: "worker-a" });
142
- await assert.rejects(() => hireTool.getOptions().execute("env", { name: "worker-b" }), /maximum of 1 hired agent\(s\) already reached/);
143
- const listResult = await listTool.getOptions().execute("env", {});
144
- assert.strictEqual(listResult.hiredCount, 1);
145
- assert.strictEqual(listResult.maxHired, 1);
146
- });
147
- test("AgentTools: agent-list omits maxHired when no limit was configured", async () => {
148
- const worker = buildWorker("backend-worker", "Handles backend tasks.", [{ content: "x", inputMissTokens: 0, inputCacheTokens: 0, outputTokens: 0 }]);
149
- const [listTool] = AgentTools([worker]);
150
- const result = await listTool.getOptions().execute("env", {});
151
- assert.strictEqual(result.hiredCount, 0);
152
- assert.strictEqual("maxHired" in result, false);
153
- });
154
- test("AgentTools: maxHired must be a positive integer when given", async () => {
155
- const worker = buildWorker("backend-worker", "Handles backend tasks.", [{ content: "x", inputMissTokens: 0, inputCacheTokens: 0, outputTokens: 0 }]);
156
- assert.throws(() => AgentTools([worker], { maxHired: 0 }), /maxHired must be a positive integer/);
157
- assert.throws(() => AgentTools([worker], { maxHired: -1 }), /maxHired must be a positive integer/);
158
- assert.throws(() => AgentTools([worker], { maxHired: 1.5 }), /maxHired must be a positive integer/);
230
+ assert.deepStrictEqual(asked.map(a => [a.agentId, a.payload.to[0]]).sort(), [["worker-1", "planner-1"], ["worker-9", "worker-1"]]);
159
231
  });
160
232
  });
161
233
  //# sourceMappingURL=agent-tools.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-tools.test.js","sourceRoot":"","sources":["../../../../src/tests/tools/agent/agent-tools.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-tools.test.js","sourceRoot":"","sources":["../../../../src/tests/tools/agent/agent-tools.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { MCPTool } from "../../core/mcp.js";
2
+ import type AgentToolsRegistry from "./registry.js";
3
+ export declare const AgentActiveTool: (registry: AgentToolsRegistry) => MCPTool;
4
+ export default AgentActiveTool;
5
+ //# sourceMappingURL=active.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"active.d.ts","sourceRoot":"","sources":["../../../src/tools/agent/active.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,kBAAkB,MAAM,eAAe,CAAC;AAEpD,eAAO,MAAM,eAAe,GAAI,UAAU,kBAAkB,YA2C1D,CAAC;AAEH,eAAe,eAAe,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { MCPTool } from "../../core/mcp.js";
2
+ export const AgentActiveTool = (registry) => new MCPTool({
3
+ name: "agent-active",
4
+ description: "list the agents currently hired in this swarm — their ids, types, groups, who hired them, and what each one is doing. Use it to see what you already have working before hiring more, and to find the id of an agent you want to prompt or fire. Two fields say what an agent is doing, and they only mean anything together: `busy` is true while it is generating right now, and `awaitingReport` is true from the moment it was tasked until it reports back. busy+awaitingReport = working. awaitingReport without busy = tasked, paused mid-task, and still owes you an answer — it is blocked on something outside the swarm, most often a question it put to the user, so leave it alone. Neither = idle and owes you nothing.",
5
+ inputs: [
6
+ {
7
+ name: "group",
8
+ type: "string",
9
+ description: "optional group name to filter by — only agents in that group are listed",
10
+ required: false,
11
+ },
12
+ ],
13
+ execute: async (_envID, inputs) => {
14
+ const { group } = inputs;
15
+ if (group !== undefined && typeof group !== "string") {
16
+ throw new Error("group must be a string when given");
17
+ }
18
+ const { controller, agentId } = registry.requireCaller();
19
+ const agents = controller.listAgents()
20
+ .filter(agent => agent.active && !controller.isEntrypoint(agent.agentId))
21
+ .filter(agent => !group || agent.groups.includes(group))
22
+ .map(({ agentId: id, type, parentId, groups, busy, awaitingReport }) => ({
23
+ agentId: id,
24
+ type,
25
+ ...(parentId ? { parentId } : {}),
26
+ groups,
27
+ busy,
28
+ awaitingReport,
29
+ yours: parentId === agentId,
30
+ }));
31
+ return {
32
+ agents,
33
+ hired: registry.countHired(),
34
+ maxHired: registry.getMaxHired() ?? null,
35
+ remaining: registry.getRemaining() ?? null,
36
+ };
37
+ },
38
+ });
39
+ export default AgentActiveTool;
40
+ //# sourceMappingURL=active.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"active.js","sourceRoot":"","sources":["../../../src/tools/agent/active.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAG5C,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,QAA4B,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC;IACzE,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,usBAAusB;IACptB,MAAM,EAAE;QACJ;YACI,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,yEAAyE;YACtF,QAAQ,EAAE,KAAK;SAClB;KACJ;IACD,OAAO,EAAE,KAAK,EACV,MAAc,EACd,MAA2B,EACf,EAAE;QACd,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;QAEzB,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACzD,CAAC;QAED,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC;QAEzD,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,EAAE;aACjC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;aACxE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;aACvD,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC;YACrE,OAAO,EAAE,EAAE;YACX,IAAI;YACJ,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjC,MAAM;YACN,IAAI;YACJ,cAAc;YACd,KAAK,EAAE,QAAQ,KAAK,OAAO;SAC9B,CAAC,CAAC,CAAC;QAER,OAAO;YACH,MAAM;YACN,KAAK,EAAE,QAAQ,CAAC,UAAU,EAAE;YAC5B,QAAQ,EAAE,QAAQ,CAAC,WAAW,EAAE,IAAI,IAAI;YACxC,SAAS,EAAE,QAAQ,CAAC,YAAY,EAAE,IAAI,IAAI;SAC7C,CAAC;IACN,CAAC;CACJ,CAAC,CAAC;AAEH,eAAe,eAAe,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { MCPTool } from "../../core/mcp.js";
2
+ import type AgentToolsRegistry from "./registry.js";
3
+ export declare const AgentFireTool: (registry: AgentToolsRegistry) => MCPTool;
4
+ export default AgentFireTool;
5
+ //# sourceMappingURL=fire.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fire.d.ts","sourceRoot":"","sources":["../../../src/tools/agent/fire.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,kBAAkB,MAAM,eAAe,CAAC;AAEpD,eAAO,MAAM,aAAa,GAAI,UAAU,kBAAkB,YA0CxD,CAAC;AAEH,eAAe,aAAa,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { MCPTool } from "../../core/mcp.js";
2
+ export const AgentFireTool = (registry) => new MCPTool({
3
+ name: "agent-fire",
4
+ description: "fire an agent you hired, freeing its slot for anyone in the swarm. If it's still working it is stopped immediately, so only fire an agent whose work is done. Its conversation is kept for the record but it can no longer be prompted.",
5
+ inputs: [
6
+ {
7
+ name: "agentId",
8
+ type: "string",
9
+ description: "id of the agent to fire, as returned by agent-hire or shown in agent-active",
10
+ required: true,
11
+ },
12
+ ],
13
+ execute: async (_envID, inputs) => {
14
+ const { agentId: target } = inputs;
15
+ if (!target || typeof target !== "string") {
16
+ throw new Error("agentId must be a non-empty string");
17
+ }
18
+ const { controller, agentId } = registry.requireCaller();
19
+ const info = registry.requireAgent(controller, target);
20
+ if (!info.active) {
21
+ throw new Error(`"${target}" is already fired.`);
22
+ }
23
+ if (controller.isEntrypoint(target)) {
24
+ throw new Error("the swarm's entrypoint agent cannot be fired.");
25
+ }
26
+ if (info.parentId !== agentId) {
27
+ throw new Error(`only ${info.parentId}, the agent that hired "${target}", can fire it.`);
28
+ }
29
+ await registry.request("agent-fire", agentId, { agentId: target });
30
+ return {
31
+ fired: true,
32
+ agentId: target,
33
+ remaining: registry.getRemaining() ?? null,
34
+ };
35
+ },
36
+ });
37
+ export default AgentFireTool;
38
+ //# sourceMappingURL=fire.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fire.js","sourceRoot":"","sources":["../../../src/tools/agent/fire.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAG5C,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAA4B,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC;IACvE,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,yOAAyO;IACtP,MAAM,EAAE;QACJ;YACI,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,6EAA6E;YAC1F,QAAQ,EAAE,IAAI;SACjB;KACJ;IACD,OAAO,EAAE,KAAK,EACV,MAAc,EACd,MAA2B,EACf,EAAE;QACd,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;QAEnC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC;QACzD,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAEvD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,IAAI,MAAM,qBAAqB,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,QAAQ,2BAA2B,MAAM,iBAAiB,CAAC,CAAC;QAC7F,CAAC;QAED,MAAM,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QAEnE,OAAO;YACH,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,MAAM;YACf,SAAS,EAAE,QAAQ,CAAC,YAAY,EAAE,IAAI,IAAI;SAC7C,CAAC;IACN,CAAC;CACJ,CAAC,CAAC;AAEH,eAAe,aAAa,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { MCPTool } from "../../core/mcp.js";
2
- import type AgentRegistry from "./registry.js";
3
- export declare const AgentHireTool: (registry: AgentRegistry) => MCPTool;
2
+ import type AgentToolsRegistry from "./registry.js";
3
+ export declare const AgentHireTool: (registry: AgentToolsRegistry) => MCPTool;
4
4
  export default AgentHireTool;
5
5
  //# sourceMappingURL=hire.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hire.d.ts","sourceRoot":"","sources":["../../../src/tools/agent/hire.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAY,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,aAAa,MAAM,eAAe,CAAC;AAE/C,eAAO,MAAM,aAAa,GAAI,UAAU,aAAa,YAkCpD,CAAC;AAEF,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"hire.d.ts","sourceRoot":"","sources":["../../../src/tools/agent/hire.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,kBAAkB,MAAM,eAAe,CAAC;AAGpD,eAAO,MAAM,aAAa,GAAI,UAAU,kBAAkB,YAsEzD,CAAC;AAEF,eAAe,aAAa,CAAC"}