orbitx 0.2.8 → 0.3.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 (141) 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-provider.d.ts +3 -0
  39. package/dist/core/ai-provider.d.ts.map +1 -1
  40. package/dist/core/ai-provider.js.map +1 -1
  41. package/dist/core/anthropic-provider.d.ts +1 -0
  42. package/dist/core/anthropic-provider.d.ts.map +1 -1
  43. package/dist/core/anthropic-provider.js +3 -0
  44. package/dist/core/anthropic-provider.js.map +1 -1
  45. package/dist/core/base-agent.d.ts +52 -29
  46. package/dist/core/base-agent.d.ts.map +1 -1
  47. package/dist/core/base-agent.js +123 -27
  48. package/dist/core/base-agent.js.map +1 -1
  49. package/dist/core/deepseek-provider.d.ts +1 -0
  50. package/dist/core/deepseek-provider.d.ts.map +1 -1
  51. package/dist/core/deepseek-provider.js +3 -0
  52. package/dist/core/deepseek-provider.js.map +1 -1
  53. package/dist/core/mcp-computer.d.ts +14 -1
  54. package/dist/core/mcp-computer.d.ts.map +1 -1
  55. package/dist/core/mcp-computer.js +352 -71
  56. package/dist/core/mcp-computer.js.map +1 -1
  57. package/dist/core/ollama-provider.d.ts +1 -0
  58. package/dist/core/ollama-provider.d.ts.map +1 -1
  59. package/dist/core/ollama-provider.js +3 -0
  60. package/dist/core/ollama-provider.js.map +1 -1
  61. package/dist/core/openai-provider.d.ts +1 -0
  62. package/dist/core/openai-provider.d.ts.map +1 -1
  63. package/dist/core/openai-provider.js +3 -0
  64. package/dist/core/openai-provider.js.map +1 -1
  65. package/dist/core/swarm-base.d.ts +88 -0
  66. package/dist/core/swarm-base.d.ts.map +1 -0
  67. package/dist/core/swarm-base.js +427 -0
  68. package/dist/core/swarm-base.js.map +1 -0
  69. package/dist/index.d.ts +7 -5
  70. package/dist/index.d.ts.map +1 -1
  71. package/dist/index.js +4 -3
  72. package/dist/index.js.map +1 -1
  73. package/dist/tests/agents/default-agents.test.d.ts +2 -0
  74. package/dist/tests/agents/default-agents.test.d.ts.map +1 -0
  75. package/dist/tests/agents/default-agents.test.js +106 -0
  76. package/dist/tests/agents/default-agents.test.js.map +1 -0
  77. package/dist/tests/core/agent-definition.test.d.ts +2 -0
  78. package/dist/tests/core/agent-definition.test.d.ts.map +1 -0
  79. package/dist/tests/core/agent-definition.test.js +99 -0
  80. package/dist/tests/core/agent-definition.test.js.map +1 -0
  81. package/dist/tests/core/scripted-provider.d.ts +38 -0
  82. package/dist/tests/core/scripted-provider.d.ts.map +1 -0
  83. package/dist/tests/core/scripted-provider.js +85 -0
  84. package/dist/tests/core/scripted-provider.js.map +1 -0
  85. package/dist/tests/core/swarm-base.test.d.ts +2 -0
  86. package/dist/tests/core/swarm-base.test.d.ts.map +1 -0
  87. package/dist/tests/core/swarm-base.test.js +387 -0
  88. package/dist/tests/core/swarm-base.test.js.map +1 -0
  89. package/dist/tests/index.d.ts +3 -0
  90. package/dist/tests/index.d.ts.map +1 -1
  91. package/dist/tests/index.js +3 -0
  92. package/dist/tests/index.js.map +1 -1
  93. package/dist/tests/tools/agent/agent-tools.test.js +225 -153
  94. package/dist/tests/tools/agent/agent-tools.test.js.map +1 -1
  95. package/dist/tools/agent/active.d.ts +5 -0
  96. package/dist/tools/agent/active.d.ts.map +1 -0
  97. package/dist/tools/agent/active.js +40 -0
  98. package/dist/tools/agent/active.js.map +1 -0
  99. package/dist/tools/agent/fire.d.ts +5 -0
  100. package/dist/tools/agent/fire.d.ts.map +1 -0
  101. package/dist/tools/agent/fire.js +38 -0
  102. package/dist/tools/agent/fire.js.map +1 -0
  103. package/dist/tools/agent/hire.d.ts +2 -2
  104. package/dist/tools/agent/hire.d.ts.map +1 -1
  105. package/dist/tools/agent/hire.js +43 -10
  106. package/dist/tools/agent/hire.js.map +1 -1
  107. package/dist/tools/agent/index.d.ts +22 -19
  108. package/dist/tools/agent/index.d.ts.map +1 -1
  109. package/dist/tools/agent/index.js +29 -21
  110. package/dist/tools/agent/index.js.map +1 -1
  111. package/dist/tools/agent/prompt.d.ts +2 -2
  112. package/dist/tools/agent/prompt.d.ts.map +1 -1
  113. package/dist/tools/agent/prompt.js +19 -53
  114. package/dist/tools/agent/prompt.js.map +1 -1
  115. package/dist/tools/agent/registry.d.ts +74 -24
  116. package/dist/tools/agent/registry.d.ts.map +1 -1
  117. package/dist/tools/agent/registry.js +93 -48
  118. package/dist/tools/agent/registry.js.map +1 -1
  119. package/dist/tools/agent/report-group.d.ts +5 -0
  120. package/dist/tools/agent/report-group.d.ts.map +1 -0
  121. package/dist/tools/agent/report-group.js +50 -0
  122. package/dist/tools/agent/report-group.js.map +1 -0
  123. package/dist/tools/agent/report-parent.d.ts +5 -0
  124. package/dist/tools/agent/report-parent.d.ts.map +1 -0
  125. package/dist/tools/agent/report-parent.js +36 -0
  126. package/dist/tools/agent/report-parent.js.map +1 -0
  127. package/dist/tools/agent/types.d.ts +5 -0
  128. package/dist/tools/agent/types.d.ts.map +1 -0
  129. package/dist/tools/agent/types.js +17 -0
  130. package/dist/tools/agent/types.js.map +1 -0
  131. package/docs/agents.md +173 -212
  132. package/docs/api-reference.md +9 -4
  133. package/docs/getting-started.md +78 -78
  134. package/docs/index.md +24 -23
  135. package/docs/mcp-architecture.md +29 -6
  136. package/docs/providers.md +258 -254
  137. package/docs/skills.md +0 -1
  138. package/docs/streaming.md +133 -133
  139. package/docs/swarm.md +503 -0
  140. package/docs/tools.md +214 -212
  141. package/package.json +1 -1
@@ -0,0 +1,387 @@
1
+ import { test, describe } from "node:test";
2
+ import assert from "node:assert/strict";
3
+ import { SwarmBase, AgentDefinition, MCPTool, getAgentTools, selectTools, GetCurrentTimeTool, } from "../../index.js";
4
+ import { ScriptedProvider, lastToolOutput, lastUserMessage } from "./scripted-provider.js";
5
+ const idle = () => ({ content: "idle" });
6
+ /** A tool that reaches for a provider mid-call — the thing `executeProvider` exists for. */
7
+ const DescribeTool = () => new MCPTool({
8
+ name: "describe",
9
+ description: "asks for a description",
10
+ inputs: [],
11
+ execute: async (_envID, _inputs, toolCallId, mcp) => mcp.executeProvider(toolCallId, "image-describer", { content: "describe this" }),
12
+ });
13
+ function buildSwarm({ plannerScript, workerScript = idle, maxHired, initData, describer, features }) {
14
+ const agentTools = getAgentTools({ maxHired });
15
+ const tools = [...agentTools.tools, GetCurrentTimeTool(), DescribeTool()];
16
+ const plannerProvider = new ScriptedProvider("planner", plannerScript);
17
+ const workerProvider = new ScriptedProvider("worker", workerScript);
18
+ const planner = new AgentDefinition({
19
+ type: "planner",
20
+ description: "hires and coordinates",
21
+ instruction: "You are the planner.",
22
+ tools: selectTools(tools, ["agent-types", "agent-hire", "agent-fire", "agent-active", "agent-prompt"]),
23
+ aiProvider: plannerProvider,
24
+ });
25
+ const worker = new AgentDefinition({
26
+ type: "worker",
27
+ description: "does the work",
28
+ rating: { work: 10 },
29
+ instruction: "You are a worker.",
30
+ tools: selectTools(tools, ["agent-report-parent", "agent-report-group", "get-current-time", "describe"]),
31
+ aiProvider: workerProvider,
32
+ });
33
+ const swarmProvider = describer
34
+ ? [{ type: "main", provider: new ScriptedProvider("unused", idle) }, { type: "image-describer", provider: describer }]
35
+ : new ScriptedProvider("unused", idle);
36
+ const swarm = new SwarmBase({
37
+ tools,
38
+ agents: [planner, worker],
39
+ default: "planner",
40
+ agentTools,
41
+ aiProvider: swarmProvider,
42
+ ...(features ? { features } : {}),
43
+ ...(initData ? { initData } : {}),
44
+ });
45
+ return { swarm, plannerProvider, workerProvider, agentTools };
46
+ }
47
+ /** Every message an agent holds, retired and current, as one searchable blob. */
48
+ function transcript(swarm, agentId) {
49
+ const agent = swarm.getAgent(agentId);
50
+ assert.ok(agent, `no agent "${agentId}" in this swarm`);
51
+ const state = agent.getCurrentAgentStates();
52
+ return [...state.retiredMessages, ...state.messagesCompact]
53
+ .map(m => `${m.role}: ${m.content ?? ""}`)
54
+ .join("\n");
55
+ }
56
+ /**
57
+ * Call an agent tool exactly the way the agent would: from inside that agent's
58
+ * own turn. Hiring, firing and reporting are things agents ask for, so this is
59
+ * the only way to ask for them — the swarm has no such methods of its own.
60
+ */
61
+ const callAs = (handle, agentId, name, inputs = {}) => {
62
+ const tool = handle.tools.find(t => t.getOptions().name === name);
63
+ assert.ok(tool, `no tool named ${name}`);
64
+ return handle.runAs(agentId, () => tool.getOptions().execute("ENV", inputs));
65
+ };
66
+ /** Hire a worker, task it, then stop talking — the planner half of the round trip. */
67
+ const hireAndDispatch = [
68
+ () => ({ toolCalls: [{ name: "agent-hire", inputs: { type: "worker" } }] }),
69
+ ({ messages }) => ({
70
+ toolCalls: [{
71
+ name: "agent-prompt",
72
+ inputs: { agentId: lastToolOutput(messages, "agent-hire").agentId, prompt: "do the thing" },
73
+ }],
74
+ }),
75
+ () => ({ content: "dispatched, my turn is over" }),
76
+ ];
77
+ /**
78
+ * Reach for the provider once, then stop. Keyed off this agent's own messages
79
+ * rather than the provider's call count, because every worker in a swarm shares
80
+ * one ScriptedProvider.
81
+ */
82
+ const describeOnce = ({ messages }) => messages.some(m => m.role === "tool")
83
+ ? { content: "done looking" }
84
+ : { toolCalls: [{ name: "describe", inputs: {} }] };
85
+ /** Do the task, report, stop — the worker half. */
86
+ const reportBack = ({ messages }) => lastUserMessage(messages).includes("[task from")
87
+ ? { toolCalls: [{ name: "agent-report-parent", inputs: { report: "WORK DONE" } }] }
88
+ : { content: "nothing to do" };
89
+ describe("core/swarm-base", () => {
90
+ test("run() hires, dispatches, and only resolves once the hired agent has reported", async () => {
91
+ const { swarm, plannerProvider } = buildSwarm({
92
+ plannerScript: hireAndDispatch,
93
+ workerScript: reportBack,
94
+ });
95
+ const done = await swarm.run("build the thing");
96
+ assert.strictEqual(done, true);
97
+ assert.match(transcript(swarm, "worker-1"), /do the thing/);
98
+ assert.match(transcript(swarm, "worker-1"), /task from planner-1/);
99
+ // The planner was woken by the report after its own turn had ended —
100
+ // which is the whole point: run() outlived the planner's last word.
101
+ assert.match(transcript(swarm, "planner-1"), /WORK DONE/);
102
+ assert.ok(plannerProvider.getCallCount() >= 4, `planner should have been woken again, got ${plannerProvider.getCallCount()} turns`);
103
+ assert.deepStrictEqual(swarm.getFailures(), []);
104
+ swarm.close();
105
+ });
106
+ test("streamed chunks are tagged with the agent that produced them", async () => {
107
+ const { swarm } = buildSwarm({ plannerScript: hireAndDispatch, workerScript: reportBack });
108
+ const seen = new Set();
109
+ await swarm.run("build the thing", chunk => { seen.add(chunk.agentId); });
110
+ assert.deepStrictEqual([...seen].sort(), ["planner-1", "worker-1"]);
111
+ swarm.close();
112
+ });
113
+ test("a group message reaches the sender's peers and never the parent", async () => {
114
+ const plannerScript = [
115
+ () => ({ toolCalls: [{ name: "agent-hire", inputs: { type: "worker", group: "api" } }] }),
116
+ () => ({ toolCalls: [{ name: "agent-hire", inputs: { type: "worker", group: "api" } }] }),
117
+ () => ({ toolCalls: [{ name: "agent-prompt", inputs: { agentId: "worker-1", prompt: "start" } }] }),
118
+ () => ({ content: "dispatched" }),
119
+ ];
120
+ const workerScript = ({ messages }) => {
121
+ if (lastUserMessage(messages).includes("group \"api\" message"))
122
+ return { content: "noted" };
123
+ if (messages.some(m => m.role === "tool" && m.toolName === "agent-report-group")) {
124
+ return { toolCalls: [{ name: "agent-report-parent", inputs: { report: "WORK DONE" } }] };
125
+ }
126
+ return { toolCalls: [{ name: "agent-report-group", inputs: { message: "SHARED NOTE" } }] };
127
+ };
128
+ const { swarm } = buildSwarm({ plannerScript, workerScript });
129
+ const done = await swarm.run("build the thing");
130
+ assert.strictEqual(done, true);
131
+ assert.match(transcript(swarm, "worker-2"), /SHARED NOTE/);
132
+ assert.doesNotMatch(transcript(swarm, "planner-1"), /SHARED NOTE/);
133
+ assert.match(transcript(swarm, "planner-1"), /WORK DONE/);
134
+ swarm.close();
135
+ });
136
+ test("run() goes to the entrypoint agent by default, and to a named agent when asked", async () => {
137
+ const workerScript = () => ({ content: "answered" });
138
+ const { swarm, agentTools } = buildSwarm({ plannerScript: idle, workerScript });
139
+ await callAs(agentTools, "planner-1", "agent-hire", { type: "worker" });
140
+ await swarm.run("a question for the planner");
141
+ assert.match(transcript(swarm, "planner-1"), /a question for the planner/);
142
+ // Straight to the worker: no parent in the middle, and no "[task from …]"
143
+ // wrapper — this is the user talking, not another agent.
144
+ const done = await swarm.run("a question for the worker", { agentId: "worker-1" });
145
+ assert.strictEqual(done, true);
146
+ assert.match(transcript(swarm, "worker-1"), /user: a question for the worker/);
147
+ assert.doesNotMatch(transcript(swarm, "worker-1"), /task from/);
148
+ assert.doesNotMatch(transcript(swarm, "planner-1"), /a question for the worker/);
149
+ swarm.close();
150
+ });
151
+ test("run() refuses an agent that has been fired", async () => {
152
+ const { swarm, agentTools } = buildSwarm({ plannerScript: idle });
153
+ await callAs(agentTools, "planner-1", "agent-hire", { type: "worker" });
154
+ await callAs(agentTools, "planner-1", "agent-fire", { agentId: "worker-1" });
155
+ await assert.rejects(() => swarm.run("hello", { agentId: "worker-1" }), /has been fired/);
156
+ await assert.rejects(() => swarm.run("hello", { agentId: "ghost-1" }), /no agent "ghost-1"/);
157
+ swarm.close();
158
+ });
159
+ test("the hire cap is one shared pool, and firing gives the slot back", async () => {
160
+ const { swarm, agentTools } = buildSwarm({ plannerScript: idle, maxHired: 1 });
161
+ const first = await callAs(agentTools, "planner-1", "agent-hire", { type: "worker" });
162
+ assert.strictEqual(first.agentId, "worker-1");
163
+ await assert.rejects(() => callAs(agentTools, "planner-1", "agent-hire", { type: "worker" }), /shared limit of 1 hired agent/);
164
+ await callAs(agentTools, "planner-1", "agent-fire", { agentId: "worker-1" });
165
+ const second = await callAs(agentTools, "planner-1", "agent-hire", { type: "worker" });
166
+ assert.strictEqual(second.agentId, "worker-2");
167
+ assert.strictEqual(second.remaining, 0);
168
+ swarm.close();
169
+ });
170
+ test("the entrypoint agent holds no hire slot and cannot be fired", async () => {
171
+ const { swarm, agentTools } = buildSwarm({ plannerScript: idle, maxHired: 1 });
172
+ assert.strictEqual(swarm.getMainAgentId(), "planner-1");
173
+ assert.strictEqual((await callAs(agentTools, "planner-1", "agent-types")).hired, 0);
174
+ await assert.rejects(() => callAs(agentTools, "planner-1", "agent-fire", { agentId: "planner-1" }), /entrypoint agent cannot be fired/);
175
+ swarm.close();
176
+ });
177
+ test("only the agent that hired someone can prompt or fire them", async () => {
178
+ const { swarm, agentTools } = buildSwarm({ plannerScript: idle });
179
+ await callAs(agentTools, "planner-1", "agent-hire", { type: "worker" });
180
+ await callAs(agentTools, "planner-1", "agent-hire", { type: "worker" });
181
+ await assert.rejects(() => callAs(agentTools, "worker-1", "agent-fire", { agentId: "worker-2" }), /only planner-1/);
182
+ await assert.rejects(() => callAs(agentTools, "worker-1", "agent-prompt", { agentId: "worker-2", prompt: "x" }), /only planner-1/);
183
+ await callAs(agentTools, "planner-1", "agent-fire", { agentId: "worker-1" });
184
+ await assert.rejects(() => callAs(agentTools, "planner-1", "agent-prompt", { agentId: "worker-1", prompt: "x" }), /has been fired/);
185
+ await assert.rejects(() => callAs(agentTools, "planner-1", "agent-fire", { agentId: "worker-1" }), /already fired/);
186
+ await assert.rejects(() => callAs(agentTools, "worker-1", "agent-hire", { type: "worker" }), /fired agent cannot hire/);
187
+ swarm.close();
188
+ });
189
+ test("hiring an unknown type lists the types that do exist", async () => {
190
+ const { swarm, agentTools } = buildSwarm({ plannerScript: idle });
191
+ await assert.rejects(() => callAs(agentTools, "planner-1", "agent-hire", { type: "designer" }), /no agent type "designer".*planner, worker/s);
192
+ swarm.close();
193
+ });
194
+ test("reporting has to have somewhere to go", async () => {
195
+ const { swarm, agentTools } = buildSwarm({ plannerScript: idle });
196
+ await assert.rejects(() => callAs(agentTools, "planner-1", "agent-report-parent", { report: "x" }), /no parent/);
197
+ await callAs(agentTools, "planner-1", "agent-hire", { type: "worker" });
198
+ await assert.rejects(() => callAs(agentTools, "worker-1", "agent-report-group", { message: "x" }), /not in any group/);
199
+ swarm.close();
200
+ });
201
+ test("listTypes and listAgents describe the live roster", async () => {
202
+ const { swarm, agentTools } = buildSwarm({ plannerScript: idle, maxHired: 4 });
203
+ await callAs(agentTools, "planner-1", "agent-hire", { type: "worker", group: "api" });
204
+ const types = swarm.listTypes();
205
+ assert.deepStrictEqual(types.map(t => t.type).sort(), ["planner", "worker"]);
206
+ assert.strictEqual(types.find(t => t.type === "worker")?.active, 1);
207
+ assert.strictEqual(types.find(t => t.type === "planner")?.active, 0);
208
+ assert.deepStrictEqual(types.find(t => t.type === "worker")?.rating, { work: 10 });
209
+ assert.deepStrictEqual(swarm.listAgents(), [
210
+ { agentId: "planner-1", type: "planner", groups: [], active: true, busy: false, awaitingReport: false },
211
+ { agentId: "worker-1", type: "worker", parentId: "planner-1", groups: ["api"], active: true, busy: false, awaitingReport: false },
212
+ ]);
213
+ assert.strictEqual(swarm.getAgentInfo("nobody-1"), undefined);
214
+ assert.strictEqual(swarm.isEntrypoint("planner-1"), true);
215
+ assert.strictEqual(swarm.isEntrypoint("worker-1"), false);
216
+ swarm.close();
217
+ });
218
+ test("a briefing given at hire time is appended to the agent's standing instruction", async () => {
219
+ const { swarm, agentTools } = buildSwarm({ plannerScript: idle });
220
+ await callAs(agentTools, "planner-1", "agent-hire", { type: "worker", briefing: "This project uses Postgres." });
221
+ const worker = swarm.getAgent("worker-1");
222
+ assert.ok(worker);
223
+ // Reaches the model through the system prompt, so the simplest honest
224
+ // check is that hiring twice with different briefings gives different agents.
225
+ await callAs(agentTools, "planner-1", "agent-hire", { type: "worker", briefing: "This project uses MySQL." });
226
+ assert.notStrictEqual(swarm.getAgent("worker-2"), worker);
227
+ swarm.close();
228
+ });
229
+ test("swarm state round-trips: ids, parents, groups, conversations, and the id counter", async () => {
230
+ const { swarm } = buildSwarm({ plannerScript: hireAndDispatch, workerScript: reportBack });
231
+ await swarm.run("build the thing");
232
+ const saved = swarm.getCurrentSwarmStates();
233
+ swarm.close();
234
+ // Plain JSON, so it survives a file or a database on the way back.
235
+ const { swarm: restored, agentTools } = buildSwarm({ plannerScript: idle, initData: JSON.parse(JSON.stringify(saved)) });
236
+ assert.strictEqual(restored.getMainAgentId(), "planner-1");
237
+ assert.deepStrictEqual(restored.getAgentIds(), ["planner-1", "worker-1"]);
238
+ assert.strictEqual(restored.getAgentInfo("worker-1")?.parentId, "planner-1");
239
+ assert.match(transcript(restored, "worker-1"), /do the thing/);
240
+ assert.match(transcript(restored, "planner-1"), /WORK DONE/);
241
+ // Ids continue from what was restored rather than colliding with it.
242
+ const next = await callAs(agentTools, "planner-1", "agent-hire", { type: "worker" });
243
+ assert.strictEqual(next.agentId, "worker-2");
244
+ restored.close();
245
+ });
246
+ test("who was fired is not saved — a restored roster comes back hired", async () => {
247
+ const { swarm, agentTools } = buildSwarm({ plannerScript: idle });
248
+ await callAs(agentTools, "planner-1", "agent-hire", { type: "worker" });
249
+ await callAs(agentTools, "planner-1", "agent-fire", { agentId: "worker-1" });
250
+ assert.strictEqual(swarm.getAgentInfo("worker-1")?.active, false);
251
+ const saved = swarm.getCurrentSwarmStates();
252
+ swarm.close();
253
+ assert.ok(saved.agents.every(agent => !("active" in agent)), "active must not be part of the saved state");
254
+ const { swarm: restored } = buildSwarm({ plannerScript: idle, initData: saved });
255
+ assert.strictEqual(restored.getAgentInfo("worker-1")?.active, true);
256
+ restored.close();
257
+ });
258
+ test("restoring with a default that isn't in the saved roster is rejected", () => {
259
+ assert.throws(() => buildSwarm({
260
+ plannerScript: idle,
261
+ initData: { default: "ghost-1", agents: [] },
262
+ }), /initData.default "ghost-1" is not one of the restored agents/);
263
+ });
264
+ test("concurrent run() calls: the older one ends with the planner's turn, the newest owns the finish", async () => {
265
+ const slowThenIdle = ({ call }) => (call === 0 ? { content: "thinking", delayMs: 30 } : { content: "done" });
266
+ const { swarm } = buildSwarm({ plannerScript: slowThenIdle });
267
+ const first = swarm.run("first");
268
+ const second = swarm.run("second");
269
+ assert.strictEqual(await first, false);
270
+ assert.strictEqual(await second, true);
271
+ assert.match(transcript(swarm, "planner-1"), /second/);
272
+ swarm.close();
273
+ });
274
+ test("a hired agent that throws is recorded and its parent is told", async () => {
275
+ const plannerScript = [
276
+ () => ({ toolCalls: [{ name: "agent-hire", inputs: { type: "worker" } }] }),
277
+ () => ({ toolCalls: [{ name: "agent-prompt", inputs: { agentId: "worker-1", prompt: "do the thing" } }] }),
278
+ () => ({ content: "dispatched" }),
279
+ ];
280
+ const workerScript = () => { throw new Error("worker exploded"); };
281
+ const { swarm } = buildSwarm({ plannerScript, workerScript });
282
+ const done = await swarm.run("build the thing");
283
+ assert.strictEqual(done, true);
284
+ const failures = swarm.getFailures();
285
+ assert.strictEqual(failures.length, 1);
286
+ assert.strictEqual(failures[0].agentId, "worker-1");
287
+ assert.match(failures[0].error, /worker exploded/);
288
+ assert.match(transcript(swarm, "planner-1"), /failure from worker-1/);
289
+ swarm.close();
290
+ });
291
+ test("a tool's provider call is answered by the swarm, out of the swarm's own provider set", async () => {
292
+ const describer = new ScriptedProvider("describer", () => ({ content: "a red square" }));
293
+ const { swarm, agentTools } = buildSwarm({
294
+ plannerScript: idle,
295
+ workerScript: describeOnce,
296
+ describer,
297
+ features: { executeProviderFromMCPTool: true },
298
+ });
299
+ await callAs(agentTools, "planner-1", "agent-hire", { type: "worker" });
300
+ await swarm.run("look at it", { agentId: "worker-1" });
301
+ assert.strictEqual(describer.getCallCount(), 1);
302
+ assert.match(transcript(swarm, "worker-1"), /a red square/);
303
+ // The swarm answered out of its own provider set, but the tokens were spent
304
+ // for one agent's tool call, so they are recorded on that agent — and the
305
+ // swarm's totals pick them up from there rather than counting them twice.
306
+ assert.deepStrictEqual(swarm.getFullTotalToken("image-describer"), { total: 2, inputHit: 0, inputMiss: 1, output: 1 });
307
+ assert.deepStrictEqual(swarm.getAgent("worker-1").getFullTotalToken("image-describer"), { total: 2, inputHit: 0, inputMiss: 1, output: 1 });
308
+ // ...and it rides on the tool-result message of the call that spent it,
309
+ // written by the swarm rather than taken from what the tool returned.
310
+ const toolMessage = swarm.getAgent("worker-1").getCurrentAgentStates().messagesCompact
311
+ .find(m => m.role === "tool" && (m.usage ?? []).some(u => u.type === "image-describer"));
312
+ assert.ok(toolMessage, "the provider call should be recorded on the tool message that made it");
313
+ assert.deepStrictEqual(toolMessage.usage, [{
314
+ type: "image-describer",
315
+ model: "scripted-describer",
316
+ unit: "tokens",
317
+ inputMissTokens: 1,
318
+ inputCacheTokens: 0,
319
+ outputTokens: 1,
320
+ }]);
321
+ swarm.close();
322
+ });
323
+ test("any agent's tool reaches the same provider set, so nobody has to be identified", async () => {
324
+ const describer = new ScriptedProvider("describer", () => ({ content: "a red square" }));
325
+ const { swarm, agentTools } = buildSwarm({
326
+ plannerScript: idle,
327
+ workerScript: describeOnce,
328
+ describer,
329
+ features: { executeProviderFromMCPTool: true },
330
+ });
331
+ await callAs(agentTools, "planner-1", "agent-hire", { type: "worker" });
332
+ await callAs(agentTools, "planner-1", "agent-hire", { type: "worker" });
333
+ await Promise.all([
334
+ swarm.run("look", { agentId: "worker-1" }),
335
+ swarm.run("look", { agentId: "worker-2" }),
336
+ ]);
337
+ assert.strictEqual(describer.getCallCount(), 2);
338
+ assert.match(transcript(swarm, "worker-1"), /a red square/);
339
+ assert.match(transcript(swarm, "worker-2"), /a red square/);
340
+ assert.strictEqual(swarm.getFullTotalToken("image-describer").total, 4);
341
+ swarm.close();
342
+ });
343
+ test("the swarm's feature flag is the whole gate, and a missing provider type says so", async () => {
344
+ const offSwarm = buildSwarm({
345
+ plannerScript: idle,
346
+ workerScript: describeOnce,
347
+ describer: new ScriptedProvider("describer", () => ({ content: "a red square" })),
348
+ });
349
+ await callAs(offSwarm.agentTools, "planner-1", "agent-hire", { type: "worker" });
350
+ await offSwarm.swarm.run("look", { agentId: "worker-1" });
351
+ // Refused by the swarm rather than by the agent — that is the whole point.
352
+ assert.match(transcript(offSwarm.swarm, "worker-1"), /SwarmBase#executeProvider: this feature is disabled/);
353
+ offSwarm.swarm.close();
354
+ const noProvider = buildSwarm({
355
+ plannerScript: idle,
356
+ workerScript: describeOnce,
357
+ features: { executeProviderFromMCPTool: true },
358
+ });
359
+ await callAs(noProvider.agentTools, "planner-1", "agent-hire", { type: "worker" });
360
+ await noProvider.swarm.run("look", { agentId: "worker-1" });
361
+ // The tool result reaches the model as JSON, so the type name arrives quoted-and-escaped.
362
+ assert.match(transcript(noProvider.swarm, "worker-1"), /no provider for type \\"image-describer\\"/);
363
+ noProvider.swarm.close();
364
+ });
365
+ test("a roster needs agents, and a default that exists", () => {
366
+ assert.throws(() => new SwarmBase({ agents: [], default: "planner", aiProvider: new ScriptedProvider("x", idle) }), /`agents` must contain at least one/);
367
+ assert.throws(() => new SwarmBase({
368
+ agents: [new AgentDefinition({ type: "planner", description: "d", instruction: "i", tools: [] })],
369
+ default: "missing",
370
+ aiProvider: new ScriptedProvider("x", idle),
371
+ }), /no agent type "missing"/);
372
+ });
373
+ test("one getAgentTools handle drives one swarm", () => {
374
+ const agentTools = getAgentTools({ maxHired: 1 });
375
+ const definition = new AgentDefinition({ type: "planner", description: "d", instruction: "i", tools: agentTools.tools });
376
+ const props = {
377
+ agents: [definition],
378
+ default: "planner",
379
+ agentTools,
380
+ aiProvider: new ScriptedProvider("x", idle),
381
+ };
382
+ const first = new SwarmBase(props);
383
+ assert.throws(() => new SwarmBase(props), /already attached to another swarm/);
384
+ first.close();
385
+ });
386
+ });
387
+ //# sourceMappingURL=swarm-base.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swarm-base.test.js","sourceRoot":"","sources":["../../../src/tests/core/swarm-base.test.ts"],"names":[],"mappings":"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"}
@@ -34,4 +34,7 @@ import "./tools/bash/terminate.test.js";
34
34
  import "./tools/question-answer/question-answer.test.js";
35
35
  import "./tools/browser/browser-tools.test.js";
36
36
  import "./tools/agent/agent-tools.test.js";
37
+ import "./core/agent-definition.test.js";
38
+ import "./core/swarm-base.test.js";
39
+ import "./agents/default-agents.test.js";
37
40
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tests/index.ts"],"names":[],"mappings":"AAAA,OAAO,6BAA6B,CAAC;AACrC,OAAO,+BAA+B,CAAC;AACvC,OAAO,mCAAmC,CAAC;AAC3C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,qCAAqC,CAAC;AAG7C,OAAO,6BAA6B,CAAC;AACrC,OAAO,wCAAwC,CAAC;AAChD,OAAO,kCAAkC,CAAC;AAE1C,OAAO,8BAA8B,CAAC;AACtC,OAAO,+BAA+B,CAAC;AACvC,OAAO,8BAA8B,CAAC;AACtC,OAAO,6BAA6B,CAAC;AACrC,OAAO,+BAA+B,CAAC;AACvC,OAAO,2BAA2B,CAAC;AACnC,OAAO,yBAAyB,CAAC;AACjC,OAAO,yBAAyB,CAAC;AAEjC,OAAO,kCAAkC,CAAC;AAC1C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,gCAAgC,CAAC;AACxC,OAAO,+BAA+B,CAAC;AACvC,OAAO,kCAAkC,CAAC;AAC1C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,iCAAiC,CAAC;AAEzC,OAAO,6BAA6B,CAAC;AACrC,OAAO,+BAA+B,CAAC;AACvC,OAAO,kCAAkC,CAAC;AAE1C,OAAO,0BAA0B,CAAC;AAClC,OAAO,2BAA2B,CAAC;AACnC,OAAO,2BAA2B,CAAC;AACnC,OAAO,2BAA2B,CAAC;AACnC,OAAO,kCAAkC,CAAC;AAC1C,OAAO,gCAAgC,CAAC;AAExC,OAAO,iDAAiD,CAAC;AAEzD,OAAO,uCAAuC,CAAC;AAE/C,OAAO,mCAAmC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tests/index.ts"],"names":[],"mappings":"AAAA,OAAO,6BAA6B,CAAC;AACrC,OAAO,+BAA+B,CAAC;AACvC,OAAO,mCAAmC,CAAC;AAC3C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,qCAAqC,CAAC;AAG7C,OAAO,6BAA6B,CAAC;AACrC,OAAO,wCAAwC,CAAC;AAChD,OAAO,kCAAkC,CAAC;AAE1C,OAAO,8BAA8B,CAAC;AACtC,OAAO,+BAA+B,CAAC;AACvC,OAAO,8BAA8B,CAAC;AACtC,OAAO,6BAA6B,CAAC;AACrC,OAAO,+BAA+B,CAAC;AACvC,OAAO,2BAA2B,CAAC;AACnC,OAAO,yBAAyB,CAAC;AACjC,OAAO,yBAAyB,CAAC;AAEjC,OAAO,kCAAkC,CAAC;AAC1C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,gCAAgC,CAAC;AACxC,OAAO,+BAA+B,CAAC;AACvC,OAAO,kCAAkC,CAAC;AAC1C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,iCAAiC,CAAC;AAEzC,OAAO,6BAA6B,CAAC;AACrC,OAAO,+BAA+B,CAAC;AACvC,OAAO,kCAAkC,CAAC;AAE1C,OAAO,0BAA0B,CAAC;AAClC,OAAO,2BAA2B,CAAC;AACnC,OAAO,2BAA2B,CAAC;AACnC,OAAO,2BAA2B,CAAC;AACnC,OAAO,kCAAkC,CAAC;AAC1C,OAAO,gCAAgC,CAAC;AAExC,OAAO,iDAAiD,CAAC;AAEzD,OAAO,uCAAuC,CAAC;AAE/C,OAAO,mCAAmC,CAAC;AAE3C,OAAO,iCAAiC,CAAC;AACzC,OAAO,2BAA2B,CAAC;AAEnC,OAAO,iCAAiC,CAAC"}
@@ -34,4 +34,7 @@ import "./tools/bash/terminate.test.js";
34
34
  import "./tools/question-answer/question-answer.test.js";
35
35
  import "./tools/browser/browser-tools.test.js";
36
36
  import "./tools/agent/agent-tools.test.js";
37
+ import "./core/agent-definition.test.js";
38
+ import "./core/swarm-base.test.js";
39
+ import "./agents/default-agents.test.js";
37
40
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tests/index.ts"],"names":[],"mappings":"AAAA,OAAO,6BAA6B,CAAC;AACrC,OAAO,+BAA+B,CAAC;AACvC,OAAO,mCAAmC,CAAC;AAC3C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,qCAAqC,CAAC;AAG7C,OAAO,6BAA6B,CAAC;AACrC,OAAO,wCAAwC,CAAC;AAChD,OAAO,kCAAkC,CAAC;AAE1C,OAAO,8BAA8B,CAAC;AACtC,OAAO,+BAA+B,CAAC;AACvC,OAAO,8BAA8B,CAAC;AACtC,OAAO,6BAA6B,CAAC;AACrC,OAAO,+BAA+B,CAAC;AACvC,OAAO,2BAA2B,CAAC;AACnC,OAAO,yBAAyB,CAAC;AACjC,OAAO,yBAAyB,CAAC;AAEjC,OAAO,kCAAkC,CAAC;AAC1C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,gCAAgC,CAAC;AACxC,OAAO,+BAA+B,CAAC;AACvC,OAAO,kCAAkC,CAAC;AAC1C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,iCAAiC,CAAC;AAEzC,OAAO,6BAA6B,CAAC;AACrC,OAAO,+BAA+B,CAAC;AACvC,OAAO,kCAAkC,CAAC;AAE1C,OAAO,0BAA0B,CAAC;AAClC,OAAO,2BAA2B,CAAC;AACnC,OAAO,2BAA2B,CAAC;AACnC,OAAO,2BAA2B,CAAC;AACnC,OAAO,kCAAkC,CAAC;AAC1C,OAAO,gCAAgC,CAAC;AAExC,OAAO,iDAAiD,CAAC;AAEzD,OAAO,uCAAuC,CAAC;AAE/C,OAAO,mCAAmC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tests/index.ts"],"names":[],"mappings":"AAAA,OAAO,6BAA6B,CAAC;AACrC,OAAO,+BAA+B,CAAC;AACvC,OAAO,mCAAmC,CAAC;AAC3C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,qCAAqC,CAAC;AAG7C,OAAO,6BAA6B,CAAC;AACrC,OAAO,wCAAwC,CAAC;AAChD,OAAO,kCAAkC,CAAC;AAE1C,OAAO,8BAA8B,CAAC;AACtC,OAAO,+BAA+B,CAAC;AACvC,OAAO,8BAA8B,CAAC;AACtC,OAAO,6BAA6B,CAAC;AACrC,OAAO,+BAA+B,CAAC;AACvC,OAAO,2BAA2B,CAAC;AACnC,OAAO,yBAAyB,CAAC;AACjC,OAAO,yBAAyB,CAAC;AAEjC,OAAO,kCAAkC,CAAC;AAC1C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,gCAAgC,CAAC;AACxC,OAAO,+BAA+B,CAAC;AACvC,OAAO,kCAAkC,CAAC;AAC1C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,iCAAiC,CAAC;AAEzC,OAAO,6BAA6B,CAAC;AACrC,OAAO,+BAA+B,CAAC;AACvC,OAAO,kCAAkC,CAAC;AAE1C,OAAO,0BAA0B,CAAC;AAClC,OAAO,2BAA2B,CAAC;AACnC,OAAO,2BAA2B,CAAC;AACnC,OAAO,2BAA2B,CAAC;AACnC,OAAO,kCAAkC,CAAC;AAC1C,OAAO,gCAAgC,CAAC;AAExC,OAAO,iDAAiD,CAAC;AAEzD,OAAO,uCAAuC,CAAC;AAE/C,OAAO,mCAAmC,CAAC;AAE3C,OAAO,iCAAiC,CAAC;AACzC,OAAO,2BAA2B,CAAC;AAEnC,OAAO,iCAAiC,CAAC"}