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.
- package/Readme.md +478 -456
- package/dist/agents/backend.d.ts +4 -0
- package/dist/agents/backend.d.ts.map +1 -0
- package/dist/agents/backend.js +54 -0
- package/dist/agents/backend.js.map +1 -0
- package/dist/agents/frontend.d.ts +4 -0
- package/dist/agents/frontend.d.ts.map +1 -0
- package/dist/agents/frontend.js +50 -0
- package/dist/agents/frontend.js.map +1 -0
- package/dist/agents/index.d.ts +10 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +22 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/planner.d.ts +4 -0
- package/dist/agents/planner.d.ts.map +1 -0
- package/dist/agents/planner.js +86 -0
- package/dist/agents/planner.js.map +1 -0
- package/dist/agents/protocol.d.ts +5 -0
- package/dist/agents/protocol.d.ts.map +1 -0
- package/dist/agents/protocol.js +70 -0
- package/dist/agents/protocol.js.map +1 -0
- package/dist/agents/reasoner.d.ts +5 -0
- package/dist/agents/reasoner.d.ts.map +1 -0
- package/dist/agents/reasoner.js +96 -0
- package/dist/agents/reasoner.js.map +1 -0
- package/dist/agents/research.d.ts +4 -0
- package/dist/agents/research.d.ts.map +1 -0
- package/dist/agents/research.js +28 -0
- package/dist/agents/research.js.map +1 -0
- package/dist/agents/tester.d.ts +4 -0
- package/dist/agents/tester.d.ts.map +1 -0
- package/dist/agents/tester.js +70 -0
- package/dist/agents/tester.js.map +1 -0
- package/dist/core/agent-definition.d.ts +61 -0
- package/dist/core/agent-definition.d.ts.map +1 -0
- package/dist/core/agent-definition.js +82 -0
- package/dist/core/agent-definition.js.map +1 -0
- package/dist/core/ai-ask.d.ts +28 -0
- package/dist/core/ai-ask.d.ts.map +1 -0
- package/dist/core/ai-ask.js +80 -0
- package/dist/core/ai-ask.js.map +1 -0
- package/dist/core/ai-provider.d.ts +3 -0
- package/dist/core/ai-provider.d.ts.map +1 -1
- package/dist/core/ai-provider.js.map +1 -1
- package/dist/core/anthropic-provider.d.ts +1 -0
- package/dist/core/anthropic-provider.d.ts.map +1 -1
- package/dist/core/anthropic-provider.js +3 -0
- package/dist/core/anthropic-provider.js.map +1 -1
- package/dist/core/base-agent.d.ts +51 -28
- package/dist/core/base-agent.d.ts.map +1 -1
- package/dist/core/base-agent.js +118 -26
- package/dist/core/base-agent.js.map +1 -1
- package/dist/core/deepseek-provider.d.ts +1 -0
- package/dist/core/deepseek-provider.d.ts.map +1 -1
- package/dist/core/deepseek-provider.js +3 -0
- package/dist/core/deepseek-provider.js.map +1 -1
- package/dist/core/mcp-auto-execution-policy.d.ts +22 -0
- package/dist/core/mcp-auto-execution-policy.d.ts.map +1 -0
- package/dist/core/mcp-auto-execution-policy.js +85 -0
- package/dist/core/mcp-auto-execution-policy.js.map +1 -0
- package/dist/core/mcp-computer.d.ts +14 -1
- package/dist/core/mcp-computer.d.ts.map +1 -1
- package/dist/core/mcp-computer.js +352 -71
- package/dist/core/mcp-computer.js.map +1 -1
- package/dist/core/ollama-provider.d.ts +1 -0
- package/dist/core/ollama-provider.d.ts.map +1 -1
- package/dist/core/ollama-provider.js +3 -0
- package/dist/core/ollama-provider.js.map +1 -1
- package/dist/core/openai-provider.d.ts +1 -0
- package/dist/core/openai-provider.d.ts.map +1 -1
- package/dist/core/openai-provider.js +3 -0
- package/dist/core/openai-provider.js.map +1 -1
- package/dist/core/stateless-agent.d.ts +30 -0
- package/dist/core/stateless-agent.d.ts.map +1 -0
- package/dist/core/stateless-agent.js +79 -0
- package/dist/core/stateless-agent.js.map +1 -0
- package/dist/core/swarm-base.d.ts +88 -0
- package/dist/core/swarm-base.d.ts.map +1 -0
- package/dist/core/swarm-base.js +427 -0
- package/dist/core/swarm-base.js.map +1 -0
- package/dist/index.d.ts +13 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -3
- package/dist/index.js.map +1 -1
- package/dist/tests/agents/default-agents.test.d.ts +2 -0
- package/dist/tests/agents/default-agents.test.d.ts.map +1 -0
- package/dist/tests/agents/default-agents.test.js +106 -0
- package/dist/tests/agents/default-agents.test.js.map +1 -0
- package/dist/tests/core/agent-definition.test.d.ts +2 -0
- package/dist/tests/core/agent-definition.test.d.ts.map +1 -0
- package/dist/tests/core/agent-definition.test.js +99 -0
- package/dist/tests/core/agent-definition.test.js.map +1 -0
- package/dist/tests/core/ai-ask.test.d.ts +2 -0
- package/dist/tests/core/ai-ask.test.d.ts.map +1 -0
- package/dist/tests/core/ai-ask.test.js +101 -0
- package/dist/tests/core/ai-ask.test.js.map +1 -0
- package/dist/tests/core/mcp-auto-execution-policy.test.d.ts +2 -0
- package/dist/tests/core/mcp-auto-execution-policy.test.d.ts.map +1 -0
- package/dist/tests/core/mcp-auto-execution-policy.test.js +107 -0
- package/dist/tests/core/mcp-auto-execution-policy.test.js.map +1 -0
- package/dist/tests/core/scripted-provider.d.ts +38 -0
- package/dist/tests/core/scripted-provider.d.ts.map +1 -0
- package/dist/tests/core/scripted-provider.js +85 -0
- package/dist/tests/core/scripted-provider.js.map +1 -0
- package/dist/tests/core/stateless-agent.test.d.ts +2 -0
- package/dist/tests/core/stateless-agent.test.d.ts.map +1 -0
- package/dist/tests/core/stateless-agent.test.js +73 -0
- package/dist/tests/core/stateless-agent.test.js.map +1 -0
- package/dist/tests/core/swarm-base.test.d.ts +2 -0
- package/dist/tests/core/swarm-base.test.d.ts.map +1 -0
- package/dist/tests/core/swarm-base.test.js +387 -0
- package/dist/tests/core/swarm-base.test.js.map +1 -0
- package/dist/tests/index.d.ts +6 -0
- package/dist/tests/index.d.ts.map +1 -1
- package/dist/tests/index.js +6 -0
- package/dist/tests/index.js.map +1 -1
- package/dist/tests/tools/agent/agent-tools.test.js +225 -153
- package/dist/tests/tools/agent/agent-tools.test.js.map +1 -1
- package/dist/tools/agent/active.d.ts +5 -0
- package/dist/tools/agent/active.d.ts.map +1 -0
- package/dist/tools/agent/active.js +40 -0
- package/dist/tools/agent/active.js.map +1 -0
- package/dist/tools/agent/fire.d.ts +5 -0
- package/dist/tools/agent/fire.d.ts.map +1 -0
- package/dist/tools/agent/fire.js +38 -0
- package/dist/tools/agent/fire.js.map +1 -0
- package/dist/tools/agent/hire.d.ts +2 -2
- package/dist/tools/agent/hire.d.ts.map +1 -1
- package/dist/tools/agent/hire.js +43 -10
- package/dist/tools/agent/hire.js.map +1 -1
- package/dist/tools/agent/index.d.ts +22 -19
- package/dist/tools/agent/index.d.ts.map +1 -1
- package/dist/tools/agent/index.js +29 -21
- package/dist/tools/agent/index.js.map +1 -1
- package/dist/tools/agent/prompt.d.ts +2 -2
- package/dist/tools/agent/prompt.d.ts.map +1 -1
- package/dist/tools/agent/prompt.js +19 -53
- package/dist/tools/agent/prompt.js.map +1 -1
- package/dist/tools/agent/registry.d.ts +74 -24
- package/dist/tools/agent/registry.d.ts.map +1 -1
- package/dist/tools/agent/registry.js +93 -48
- package/dist/tools/agent/registry.js.map +1 -1
- package/dist/tools/agent/report-group.d.ts +5 -0
- package/dist/tools/agent/report-group.d.ts.map +1 -0
- package/dist/tools/agent/report-group.js +50 -0
- package/dist/tools/agent/report-group.js.map +1 -0
- package/dist/tools/agent/report-parent.d.ts +5 -0
- package/dist/tools/agent/report-parent.d.ts.map +1 -0
- package/dist/tools/agent/report-parent.js +36 -0
- package/dist/tools/agent/report-parent.js.map +1 -0
- package/dist/tools/agent/types.d.ts +5 -0
- package/dist/tools/agent/types.d.ts.map +1 -0
- package/dist/tools/agent/types.js +17 -0
- package/dist/tools/agent/types.js.map +1 -0
- package/docs/agents.md +249 -228
- package/docs/api-reference.md +9 -4
- package/docs/getting-started.md +78 -78
- package/docs/index.md +24 -23
- package/docs/mcp-architecture.md +71 -6
- package/docs/providers.md +258 -254
- package/docs/skills.md +0 -1
- package/docs/streaming.md +133 -133
- package/docs/swarm.md +503 -0
- package/docs/tools.md +214 -212
- package/package.json +1 -1
- package/dist/core/image-describer.d.ts +0 -19
- package/dist/core/image-describer.d.ts.map +0 -1
- package/dist/core/image-describer.js +0 -37
- package/dist/core/image-describer.js.map +0 -1
- package/dist/core/worker-agent.d.ts +0 -43
- package/dist/core/worker-agent.d.ts.map +0 -1
- package/dist/core/worker-agent.js +0 -40
- package/dist/core/worker-agent.js.map +0 -1
- package/dist/skills/shopping.d.ts +0 -4
- package/dist/skills/shopping.d.ts.map +0 -1
- package/dist/skills/shopping.js +0 -71
- package/dist/skills/shopping.js.map +0 -1
- package/dist/tools/agent/interaction.d.ts +0 -25
- package/dist/tools/agent/interaction.d.ts.map +0 -1
- package/dist/tools/agent/interaction.js +0 -14
- package/dist/tools/agent/interaction.js.map +0 -1
- package/dist/tools/agent/list.d.ts +0 -5
- package/dist/tools/agent/list.d.ts.map +0 -1
- package/dist/tools/agent/list.js +0 -16
- package/dist/tools/agent/list.js.map +0 -1
- package/dist/tools/agent/report.d.ts +0 -12
- package/dist/tools/agent/report.d.ts.map +0 -1
- package/dist/tools/agent/report.js +0 -31
- package/dist/tools/agent/report.js.map +0 -1
- package/dist/tools/bash/interaction.d.ts +0 -29
- package/dist/tools/bash/interaction.d.ts.map +0 -1
- package/dist/tools/bash/interaction.js +0 -13
- package/dist/tools/bash/interaction.js.map +0 -1
- package/dist/tools/browser/interaction.d.ts +0 -49
- package/dist/tools/browser/interaction.d.ts.map +0 -1
- package/dist/tools/browser/interaction.js +0 -14
- package/dist/tools/browser/interaction.js.map +0 -1
- package/dist/tools/fs/interaction.d.ts +0 -37
- package/dist/tools/fs/interaction.d.ts.map +0 -1
- package/dist/tools/fs/interaction.js +0 -13
- package/dist/tools/fs/interaction.js.map +0 -1
- package/dist/tools/present/interaction.d.ts +0 -17
- package/dist/tools/present/interaction.d.ts.map +0 -1
- package/dist/tools/present/interaction.js +0 -15
- package/dist/tools/present/interaction.js.map +0 -1
- package/dist/tools/question-answer/interaction.d.ts +0 -14
- package/dist/tools/question-answer/interaction.d.ts.map +0 -1
- package/dist/tools/question-answer/interaction.js +0 -13
- package/dist/tools/question-answer/interaction.js.map +0 -1
- package/dist/tools/todo/interaction.d.ts +0 -30
- package/dist/tools/todo/interaction.d.ts.map +0 -1
- package/dist/tools/todo/interaction.js +0 -13
- package/dist/tools/todo/interaction.js.map +0 -1
|
@@ -1,161 +1,233 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { test, describe } from "node:test";
|
|
2
2
|
import assert from "node:assert/strict";
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
assert.
|
|
63
|
-
assert.strictEqual(
|
|
64
|
-
assert.
|
|
65
|
-
assert.
|
|
66
|
-
});
|
|
67
|
-
test("
|
|
68
|
-
const
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
assert.
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
const
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
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
|
-
|
|
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 @@
|
|
|
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 @@
|
|
|
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
|
|
3
|
-
export declare const AgentHireTool: (registry:
|
|
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,
|
|
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"}
|