@researchcomputer/agents-sdk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (274) hide show
  1. package/README.md +60 -0
  2. package/dist/agents/messages.d.ts +29 -0
  3. package/dist/agents/messages.d.ts.map +1 -0
  4. package/dist/agents/messages.js +56 -0
  5. package/dist/agents/messages.js.map +1 -0
  6. package/dist/agents/messages.test.d.ts +2 -0
  7. package/dist/agents/messages.test.d.ts.map +1 -0
  8. package/dist/agents/messages.test.js +80 -0
  9. package/dist/agents/messages.test.js.map +1 -0
  10. package/dist/agents/subagent.d.ts +16 -0
  11. package/dist/agents/subagent.d.ts.map +1 -0
  12. package/dist/agents/subagent.js +46 -0
  13. package/dist/agents/subagent.js.map +1 -0
  14. package/dist/agents/swarm.d.ts +22 -0
  15. package/dist/agents/swarm.d.ts.map +1 -0
  16. package/dist/agents/swarm.js +140 -0
  17. package/dist/agents/swarm.js.map +1 -0
  18. package/dist/agents/tools.d.ts +6 -0
  19. package/dist/agents/tools.d.ts.map +1 -0
  20. package/dist/agents/tools.js +71 -0
  21. package/dist/agents/tools.js.map +1 -0
  22. package/dist/agents/tools.test.d.ts +2 -0
  23. package/dist/agents/tools.test.d.ts.map +1 -0
  24. package/dist/agents/tools.test.js +70 -0
  25. package/dist/agents/tools.test.js.map +1 -0
  26. package/dist/bridge/config.d.ts +21 -0
  27. package/dist/bridge/config.d.ts.map +1 -0
  28. package/dist/bridge/config.js +35 -0
  29. package/dist/bridge/config.js.map +1 -0
  30. package/dist/bridge/config.test.d.ts +2 -0
  31. package/dist/bridge/config.test.d.ts.map +1 -0
  32. package/dist/bridge/config.test.js +79 -0
  33. package/dist/bridge/config.test.js.map +1 -0
  34. package/dist/bridge/server.d.ts +3 -0
  35. package/dist/bridge/server.d.ts.map +1 -0
  36. package/dist/bridge/server.js +316 -0
  37. package/dist/bridge/server.js.map +1 -0
  38. package/dist/context/compression.d.ts +27 -0
  39. package/dist/context/compression.d.ts.map +1 -0
  40. package/dist/context/compression.js +117 -0
  41. package/dist/context/compression.js.map +1 -0
  42. package/dist/context/compression.test.d.ts +2 -0
  43. package/dist/context/compression.test.d.ts.map +1 -0
  44. package/dist/context/compression.test.js +170 -0
  45. package/dist/context/compression.test.js.map +1 -0
  46. package/dist/context/converter.d.ts +11 -0
  47. package/dist/context/converter.d.ts.map +1 -0
  48. package/dist/context/converter.js +40 -0
  49. package/dist/context/converter.js.map +1 -0
  50. package/dist/context/converter.test.d.ts +2 -0
  51. package/dist/context/converter.test.d.ts.map +1 -0
  52. package/dist/context/converter.test.js +110 -0
  53. package/dist/context/converter.test.js.map +1 -0
  54. package/dist/context/run-context.d.ts +9 -0
  55. package/dist/context/run-context.d.ts.map +1 -0
  56. package/dist/context/run-context.js +14 -0
  57. package/dist/context/run-context.js.map +1 -0
  58. package/dist/context/run-context.test.d.ts +2 -0
  59. package/dist/context/run-context.test.d.ts.map +1 -0
  60. package/dist/context/run-context.test.js +34 -0
  61. package/dist/context/run-context.test.js.map +1 -0
  62. package/dist/context/system-prompt.d.ts +24 -0
  63. package/dist/context/system-prompt.d.ts.map +1 -0
  64. package/dist/context/system-prompt.js +69 -0
  65. package/dist/context/system-prompt.js.map +1 -0
  66. package/dist/context/system-prompt.test.d.ts +2 -0
  67. package/dist/context/system-prompt.test.d.ts.map +1 -0
  68. package/dist/context/system-prompt.test.js +134 -0
  69. package/dist/context/system-prompt.test.js.map +1 -0
  70. package/dist/errors.d.ts +24 -0
  71. package/dist/errors.d.ts.map +1 -0
  72. package/dist/errors.js +47 -0
  73. package/dist/errors.js.map +1 -0
  74. package/dist/errors.test.d.ts +2 -0
  75. package/dist/errors.test.d.ts.map +1 -0
  76. package/dist/errors.test.js +68 -0
  77. package/dist/errors.test.js.map +1 -0
  78. package/dist/factory.d.ts +58 -0
  79. package/dist/factory.d.ts.map +1 -0
  80. package/dist/factory.js +282 -0
  81. package/dist/factory.js.map +1 -0
  82. package/dist/factory.test.d.ts +2 -0
  83. package/dist/factory.test.d.ts.map +1 -0
  84. package/dist/factory.test.js +63 -0
  85. package/dist/factory.test.js.map +1 -0
  86. package/dist/fork.test.d.ts +2 -0
  87. package/dist/fork.test.d.ts.map +1 -0
  88. package/dist/fork.test.js +456 -0
  89. package/dist/fork.test.js.map +1 -0
  90. package/dist/index.d.ts +29 -0
  91. package/dist/index.d.ts.map +1 -0
  92. package/dist/index.js +32 -0
  93. package/dist/index.js.map +1 -0
  94. package/dist/mcp/client.d.ts +3 -0
  95. package/dist/mcp/client.d.ts.map +1 -0
  96. package/dist/mcp/client.js +75 -0
  97. package/dist/mcp/client.js.map +1 -0
  98. package/dist/mcp/schema-convert.d.ts +3 -0
  99. package/dist/mcp/schema-convert.d.ts.map +1 -0
  100. package/dist/mcp/schema-convert.js +73 -0
  101. package/dist/mcp/schema-convert.js.map +1 -0
  102. package/dist/mcp/schema-convert.test.d.ts +2 -0
  103. package/dist/mcp/schema-convert.test.d.ts.map +1 -0
  104. package/dist/mcp/schema-convert.test.js +95 -0
  105. package/dist/mcp/schema-convert.test.js.map +1 -0
  106. package/dist/mcp/tools.d.ts +14 -0
  107. package/dist/mcp/tools.d.ts.map +1 -0
  108. package/dist/mcp/tools.js +23 -0
  109. package/dist/mcp/tools.js.map +1 -0
  110. package/dist/mcp/tools.test.d.ts +2 -0
  111. package/dist/mcp/tools.test.d.ts.map +1 -0
  112. package/dist/mcp/tools.test.js +45 -0
  113. package/dist/mcp/tools.test.js.map +1 -0
  114. package/dist/memory/memory.d.ts +3 -0
  115. package/dist/memory/memory.d.ts.map +1 -0
  116. package/dist/memory/memory.js +130 -0
  117. package/dist/memory/memory.js.map +1 -0
  118. package/dist/memory/memory.test.d.ts +2 -0
  119. package/dist/memory/memory.test.d.ts.map +1 -0
  120. package/dist/memory/memory.test.js +94 -0
  121. package/dist/memory/memory.test.js.map +1 -0
  122. package/dist/middleware/hooks.d.ts +18 -0
  123. package/dist/middleware/hooks.d.ts.map +1 -0
  124. package/dist/middleware/hooks.js +71 -0
  125. package/dist/middleware/hooks.js.map +1 -0
  126. package/dist/middleware/hooks.test.d.ts +2 -0
  127. package/dist/middleware/hooks.test.d.ts.map +1 -0
  128. package/dist/middleware/hooks.test.js +172 -0
  129. package/dist/middleware/hooks.test.js.map +1 -0
  130. package/dist/middleware/index.d.ts +7 -0
  131. package/dist/middleware/index.d.ts.map +1 -0
  132. package/dist/middleware/index.js +5 -0
  133. package/dist/middleware/index.js.map +1 -0
  134. package/dist/middleware/permission-middleware.d.ts +11 -0
  135. package/dist/middleware/permission-middleware.d.ts.map +1 -0
  136. package/dist/middleware/permission-middleware.js +56 -0
  137. package/dist/middleware/permission-middleware.js.map +1 -0
  138. package/dist/middleware/permission-middleware.test.d.ts +2 -0
  139. package/dist/middleware/permission-middleware.test.d.ts.map +1 -0
  140. package/dist/middleware/permission-middleware.test.js +170 -0
  141. package/dist/middleware/permission-middleware.test.js.map +1 -0
  142. package/dist/middleware/permissions.d.ts +14 -0
  143. package/dist/middleware/permissions.d.ts.map +1 -0
  144. package/dist/middleware/permissions.js +118 -0
  145. package/dist/middleware/permissions.js.map +1 -0
  146. package/dist/middleware/permissions.test.d.ts +2 -0
  147. package/dist/middleware/permissions.test.d.ts.map +1 -0
  148. package/dist/middleware/permissions.test.js +187 -0
  149. package/dist/middleware/permissions.test.js.map +1 -0
  150. package/dist/middleware/pipeline.d.ts +13 -0
  151. package/dist/middleware/pipeline.d.ts.map +1 -0
  152. package/dist/middleware/pipeline.js +28 -0
  153. package/dist/middleware/pipeline.js.map +1 -0
  154. package/dist/middleware/pipeline.test.d.ts +2 -0
  155. package/dist/middleware/pipeline.test.d.ts.map +1 -0
  156. package/dist/middleware/pipeline.test.js +189 -0
  157. package/dist/middleware/pipeline.test.js.map +1 -0
  158. package/dist/observability/cost-tracker.d.ts +3 -0
  159. package/dist/observability/cost-tracker.d.ts.map +1 -0
  160. package/dist/observability/cost-tracker.js +26 -0
  161. package/dist/observability/cost-tracker.js.map +1 -0
  162. package/dist/observability/cost-tracker.test.d.ts +2 -0
  163. package/dist/observability/cost-tracker.test.d.ts.map +1 -0
  164. package/dist/observability/cost-tracker.test.js +49 -0
  165. package/dist/observability/cost-tracker.test.js.map +1 -0
  166. package/dist/observability/trace.d.ts +2 -0
  167. package/dist/observability/trace.d.ts.map +1 -0
  168. package/dist/observability/trace.js +5 -0
  169. package/dist/observability/trace.js.map +1 -0
  170. package/dist/session/session.d.ts +3 -0
  171. package/dist/session/session.d.ts.map +1 -0
  172. package/dist/session/session.js +62 -0
  173. package/dist/session/session.js.map +1 -0
  174. package/dist/session/session.test.d.ts +2 -0
  175. package/dist/session/session.test.d.ts.map +1 -0
  176. package/dist/session/session.test.js +84 -0
  177. package/dist/session/session.test.js.map +1 -0
  178. package/dist/skills.d.ts +14 -0
  179. package/dist/skills.d.ts.map +1 -0
  180. package/dist/skills.js +31 -0
  181. package/dist/skills.js.map +1 -0
  182. package/dist/skills.test.d.ts +2 -0
  183. package/dist/skills.test.d.ts.map +1 -0
  184. package/dist/skills.test.js +61 -0
  185. package/dist/skills.test.js.map +1 -0
  186. package/dist/tools/ask-user.d.ts +10 -0
  187. package/dist/tools/ask-user.d.ts.map +1 -0
  188. package/dist/tools/ask-user.js +27 -0
  189. package/dist/tools/ask-user.js.map +1 -0
  190. package/dist/tools/bash.d.ts +11 -0
  191. package/dist/tools/bash.d.ts.map +1 -0
  192. package/dist/tools/bash.js +54 -0
  193. package/dist/tools/bash.js.map +1 -0
  194. package/dist/tools/bash.test.d.ts +2 -0
  195. package/dist/tools/bash.test.d.ts.map +1 -0
  196. package/dist/tools/bash.test.js +63 -0
  197. package/dist/tools/bash.test.js.map +1 -0
  198. package/dist/tools/edit.d.ts +10 -0
  199. package/dist/tools/edit.d.ts.map +1 -0
  200. package/dist/tools/edit.js +65 -0
  201. package/dist/tools/edit.js.map +1 -0
  202. package/dist/tools/edit.test.d.ts +2 -0
  203. package/dist/tools/edit.test.d.ts.map +1 -0
  204. package/dist/tools/edit.test.js +60 -0
  205. package/dist/tools/edit.test.js.map +1 -0
  206. package/dist/tools/glob.d.ts +8 -0
  207. package/dist/tools/glob.d.ts.map +1 -0
  208. package/dist/tools/glob.js +43 -0
  209. package/dist/tools/glob.js.map +1 -0
  210. package/dist/tools/glob.test.d.ts +2 -0
  211. package/dist/tools/glob.test.d.ts.map +1 -0
  212. package/dist/tools/glob.test.js +54 -0
  213. package/dist/tools/glob.test.js.map +1 -0
  214. package/dist/tools/grep.d.ts +9 -0
  215. package/dist/tools/grep.d.ts.map +1 -0
  216. package/dist/tools/grep.js +74 -0
  217. package/dist/tools/grep.js.map +1 -0
  218. package/dist/tools/grep.test.d.ts +2 -0
  219. package/dist/tools/grep.test.d.ts.map +1 -0
  220. package/dist/tools/grep.test.js +48 -0
  221. package/dist/tools/grep.test.js.map +1 -0
  222. package/dist/tools/index.d.ts +25 -0
  223. package/dist/tools/index.d.ts.map +1 -0
  224. package/dist/tools/index.js +40 -0
  225. package/dist/tools/index.js.map +1 -0
  226. package/dist/tools/index.test.d.ts +2 -0
  227. package/dist/tools/index.test.d.ts.map +1 -0
  228. package/dist/tools/index.test.js +102 -0
  229. package/dist/tools/index.test.js.map +1 -0
  230. package/dist/tools/notebook-edit.d.ts +9 -0
  231. package/dist/tools/notebook-edit.d.ts.map +1 -0
  232. package/dist/tools/notebook-edit.js +55 -0
  233. package/dist/tools/notebook-edit.js.map +1 -0
  234. package/dist/tools/read.d.ts +9 -0
  235. package/dist/tools/read.d.ts.map +1 -0
  236. package/dist/tools/read.js +48 -0
  237. package/dist/tools/read.js.map +1 -0
  238. package/dist/tools/read.test.d.ts +2 -0
  239. package/dist/tools/read.test.d.ts.map +1 -0
  240. package/dist/tools/read.test.js +68 -0
  241. package/dist/tools/read.test.js.map +1 -0
  242. package/dist/tools/util.d.ts +19 -0
  243. package/dist/tools/util.d.ts.map +1 -0
  244. package/dist/tools/util.js +44 -0
  245. package/dist/tools/util.js.map +1 -0
  246. package/dist/tools/util.test.d.ts +2 -0
  247. package/dist/tools/util.test.d.ts.map +1 -0
  248. package/dist/tools/util.test.js +75 -0
  249. package/dist/tools/util.test.js.map +1 -0
  250. package/dist/tools/web-fetch.d.ts +7 -0
  251. package/dist/tools/web-fetch.d.ts.map +1 -0
  252. package/dist/tools/web-fetch.js +35 -0
  253. package/dist/tools/web-fetch.js.map +1 -0
  254. package/dist/tools/web-search.d.ts +7 -0
  255. package/dist/tools/web-search.d.ts.map +1 -0
  256. package/dist/tools/web-search.js +20 -0
  257. package/dist/tools/web-search.js.map +1 -0
  258. package/dist/tools/write.d.ts +8 -0
  259. package/dist/tools/write.d.ts.map +1 -0
  260. package/dist/tools/write.js +33 -0
  261. package/dist/tools/write.js.map +1 -0
  262. package/dist/tools/write.test.d.ts +2 -0
  263. package/dist/tools/write.test.d.ts.map +1 -0
  264. package/dist/tools/write.test.js +49 -0
  265. package/dist/tools/write.test.js.map +1 -0
  266. package/dist/types.d.ts +257 -0
  267. package/dist/types.d.ts.map +1 -0
  268. package/dist/types.js +2 -0
  269. package/dist/types.js.map +1 -0
  270. package/dist/types.test.d.ts +2 -0
  271. package/dist/types.test.d.ts.map +1 -0
  272. package/dist/types.test.js +69 -0
  273. package/dist/types.test.js.map +1 -0
  274. package/package.json +51 -0
package/README.md ADDED
@@ -0,0 +1,60 @@
1
+ # @researchcomputer/agents-sdk
2
+
3
+ A TypeScript SDK for building coding agents powered by large language models. Built on `@mariozechner/pi-agent-core`, it provides a high-level framework for creating agents with file operations, shell execution, web access, permission controls, memory, sessions, MCP servers, and multi-agent swarms.
4
+
5
+ ## Documentation
6
+
7
+ | Document | Description |
8
+ |---|---|
9
+ | [Getting Started](./docs/getting-started.md) | Installation, quick start, and first agent |
10
+ | [Concepts](./docs/concepts.md) | Core abstractions: tools, permissions, memory, context |
11
+ | [API Reference](./docs/api-reference.md) | Full API: types, factory, all modules |
12
+ | [Examples](./docs/examples.md) | Practical usage patterns and recipes |
13
+
14
+ ## Overview
15
+
16
+ ```
17
+ @researchcomputer/agents-sdk
18
+ ├── Factory createCodingAgent() — main entry point
19
+ ├── Tools Built-in: Read, Write, Edit, Bash, Glob, Grep, WebFetch, ...
20
+ ├── Permissions Capability-based access control with multiple modes
21
+ ├── Memory Persistent, queryable per-agent memories
22
+ ├── Sessions Snapshot-based conversation persistence
23
+ ├── MCP Connect external tool servers via Model Context Protocol
24
+ ├── Swarm Multi-agent coordination with mailbox messaging
25
+ ├── Middleware Hooks, permission gates, and pipeline composition
26
+ ├── Context Message conversion, system prompt construction, compression
27
+ └── Observability Token/cost tracking and trace IDs
28
+ ```
29
+
30
+ ## Quick Example
31
+
32
+ ```typescript
33
+ import { createCodingAgent } from '@researchcomputer/agents-sdk';
34
+ import { getModel } from '@mariozechner/pi-ai';
35
+
36
+ const agent = await createCodingAgent({
37
+ model: getModel('openai', 'gpt-4o'),
38
+ cwd: process.cwd(),
39
+ });
40
+
41
+ await agent.prompt('List all TypeScript files and summarize what they do');
42
+ await agent.dispose();
43
+ ```
44
+
45
+ ## Bridge Server
46
+
47
+ The bridge server now lives inside the main package under [`src/bridge/`](./src/bridge) and builds with the rest of the SDK.
48
+
49
+ Build and run it from the root package:
50
+
51
+ ```bash
52
+ npm run build
53
+ npm run bridge:start
54
+ ```
55
+
56
+ Python example clients live under [`examples/bridge/`](./examples/bridge).
57
+
58
+ ## Example CLI
59
+
60
+ A runnable Ink-based terminal UI example lives in [cli/README.md](./cli/README.md). It wraps `createCodingAgent()` in an interactive agent shell with a configurable cute agent name, slash commands, model pickers, live streaming, permission prompts, and support for arbitrary OpenAI-compatible endpoints.
@@ -0,0 +1,29 @@
1
+ /**
2
+ * A simple async queue for swarm agent communication (mailbox pattern).
3
+ */
4
+ export declare class AsyncQueue<T> {
5
+ private items;
6
+ private waiters;
7
+ /**
8
+ * Add an item to the queue. If a waiter exists, resolve it immediately.
9
+ */
10
+ enqueue(item: T): void;
11
+ /**
12
+ * Non-blocking dequeue. Returns undefined if queue is empty.
13
+ */
14
+ tryDequeue(): T | undefined;
15
+ /**
16
+ * Async dequeue. Resolves when an item is available.
17
+ * Rejects if the queue is cleared while waiting.
18
+ */
19
+ dequeue(): Promise<T>;
20
+ /**
21
+ * Returns true if the queue has no items.
22
+ */
23
+ isEmpty(): boolean;
24
+ /**
25
+ * Clear all items and reject pending waiters.
26
+ */
27
+ clear(): void;
28
+ }
29
+ //# sourceMappingURL=messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/agents/messages.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,UAAU,CAAC,CAAC;IACvB,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,OAAO,CAA2E;IAE1F;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAStB;;OAEG;IACH,UAAU,IAAI,CAAC,GAAG,SAAS;IAI3B;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC;IAUrB;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,KAAK,IAAI,IAAI;CAQd"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * A simple async queue for swarm agent communication (mailbox pattern).
3
+ */
4
+ export class AsyncQueue {
5
+ items = [];
6
+ waiters = [];
7
+ /**
8
+ * Add an item to the queue. If a waiter exists, resolve it immediately.
9
+ */
10
+ enqueue(item) {
11
+ const waiter = this.waiters.shift();
12
+ if (waiter) {
13
+ waiter.resolve(item);
14
+ }
15
+ else {
16
+ this.items.push(item);
17
+ }
18
+ }
19
+ /**
20
+ * Non-blocking dequeue. Returns undefined if queue is empty.
21
+ */
22
+ tryDequeue() {
23
+ return this.items.shift();
24
+ }
25
+ /**
26
+ * Async dequeue. Resolves when an item is available.
27
+ * Rejects if the queue is cleared while waiting.
28
+ */
29
+ dequeue() {
30
+ const item = this.items.shift();
31
+ if (item !== undefined) {
32
+ return Promise.resolve(item);
33
+ }
34
+ return new Promise((resolve, reject) => {
35
+ this.waiters.push({ resolve, reject });
36
+ });
37
+ }
38
+ /**
39
+ * Returns true if the queue has no items.
40
+ */
41
+ isEmpty() {
42
+ return this.items.length === 0;
43
+ }
44
+ /**
45
+ * Clear all items and reject pending waiters.
46
+ */
47
+ clear() {
48
+ this.items = [];
49
+ const waiters = this.waiters;
50
+ this.waiters = [];
51
+ for (const waiter of waiters) {
52
+ waiter.reject(new Error('Queue cleared'));
53
+ }
54
+ }
55
+ }
56
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/agents/messages.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,UAAU;IACb,KAAK,GAAQ,EAAE,CAAC;IAChB,OAAO,GAAwE,EAAE,CAAC;IAE1F;;OAEG;IACH,OAAO,CAAC,IAAO;QACb,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACpC,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACH,OAAO;QACL,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,OAAO;QACL,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=messages.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.test.d.ts","sourceRoot":"","sources":["../../src/agents/messages.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,80 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { AsyncQueue } from './messages.js';
3
+ describe('AsyncQueue', () => {
4
+ it('enqueue and tryDequeue work synchronously', () => {
5
+ const q = new AsyncQueue();
6
+ q.enqueue(1);
7
+ q.enqueue(2);
8
+ expect(q.tryDequeue()).toBe(1);
9
+ expect(q.tryDequeue()).toBe(2);
10
+ expect(q.tryDequeue()).toBeUndefined();
11
+ });
12
+ it('tryDequeue returns undefined when empty', () => {
13
+ const q = new AsyncQueue();
14
+ expect(q.tryDequeue()).toBeUndefined();
15
+ });
16
+ it('dequeue resolves immediately if item available', async () => {
17
+ const q = new AsyncQueue();
18
+ q.enqueue('hello');
19
+ const result = await q.dequeue();
20
+ expect(result).toBe('hello');
21
+ });
22
+ it('dequeue waits for enqueue', async () => {
23
+ const q = new AsyncQueue();
24
+ // Start dequeue before any item is enqueued
25
+ const promise = q.dequeue();
26
+ // Enqueue after a microtask
27
+ setTimeout(() => q.enqueue(42), 10);
28
+ const result = await promise;
29
+ expect(result).toBe(42);
30
+ });
31
+ it('multiple waiters are resolved in order', async () => {
32
+ const q = new AsyncQueue();
33
+ const p1 = q.dequeue();
34
+ const p2 = q.dequeue();
35
+ q.enqueue(1);
36
+ q.enqueue(2);
37
+ expect(await p1).toBe(1);
38
+ expect(await p2).toBe(2);
39
+ });
40
+ it('enqueue resolves waiter immediately instead of queueing', async () => {
41
+ const q = new AsyncQueue();
42
+ const promise = q.dequeue();
43
+ q.enqueue('direct');
44
+ // The item should have gone directly to the waiter, not the queue
45
+ expect(q.isEmpty()).toBe(true);
46
+ expect(await promise).toBe('direct');
47
+ });
48
+ it('isEmpty returns true when empty', () => {
49
+ const q = new AsyncQueue();
50
+ expect(q.isEmpty()).toBe(true);
51
+ });
52
+ it('isEmpty returns false when items exist', () => {
53
+ const q = new AsyncQueue();
54
+ q.enqueue(1);
55
+ expect(q.isEmpty()).toBe(false);
56
+ });
57
+ it('clear removes all items', () => {
58
+ const q = new AsyncQueue();
59
+ q.enqueue(1);
60
+ q.enqueue(2);
61
+ q.enqueue(3);
62
+ q.clear();
63
+ expect(q.isEmpty()).toBe(true);
64
+ expect(q.tryDequeue()).toBeUndefined();
65
+ });
66
+ it('clear rejects pending waiters', async () => {
67
+ const q = new AsyncQueue();
68
+ // Create waiters that will be rejected on clear
69
+ const p1 = q.dequeue().catch((e) => e.message);
70
+ const p2 = q.dequeue().catch((e) => e.message);
71
+ q.clear();
72
+ // Pending waiters should be rejected
73
+ expect(await p1).toBe('Queue cleared');
74
+ expect(await p2).toBe('Queue cleared');
75
+ // After clear, new enqueue should go to the queue, not old waiters
76
+ q.enqueue(99);
77
+ expect(q.tryDequeue()).toBe(99);
78
+ });
79
+ });
80
+ //# sourceMappingURL=messages.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.test.js","sourceRoot":"","sources":["../../src/agents/messages.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { AgentMessage } from '@mariozechner/pi-agent-core';
2
+ import type { Message, Model } from '@mariozechner/pi-ai';
3
+ import type { SdkTool } from '../types.js';
4
+ export interface SubAgentConfig {
5
+ model: Model<any>;
6
+ systemPrompt?: string;
7
+ tools?: SdkTool<any, any>[];
8
+ convertToLlm?: (messages: AgentMessage[]) => Message[] | Promise<Message[]>;
9
+ getApiKey?: (provider: string) => Promise<string | undefined> | string | undefined;
10
+ }
11
+ /**
12
+ * Runs a sub-agent with the given prompt, waits for it to finish,
13
+ * and extracts the last assistant text response.
14
+ */
15
+ export declare function runSubAgent(prompt: string, config: SubAgentConfig): Promise<string>;
16
+ //# sourceMappingURL=subagent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent.d.ts","sourceRoot":"","sources":["../../src/agents/subagent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,6BAA6B,CAAC;AAC/E,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;IAC5B,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5E,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,GAAG,SAAS,CAAC;CACpF;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAoCzF"}
@@ -0,0 +1,46 @@
1
+ import { Agent } from '@mariozechner/pi-agent-core';
2
+ /**
3
+ * Runs a sub-agent with the given prompt, waits for it to finish,
4
+ * and extracts the last assistant text response.
5
+ */
6
+ export async function runSubAgent(prompt, config) {
7
+ const agent = new Agent({
8
+ initialState: {
9
+ systemPrompt: config.systemPrompt ?? 'You are a helpful assistant.',
10
+ model: config.model,
11
+ tools: config.tools ?? [],
12
+ thinkingLevel: 'off',
13
+ },
14
+ convertToLlm: config.convertToLlm ?? defaultConvertToLlm,
15
+ getApiKey: config.getApiKey,
16
+ toolExecution: 'parallel',
17
+ });
18
+ await agent.prompt(prompt);
19
+ await agent.waitForIdle();
20
+ // Extract last assistant text response
21
+ const messages = agent.state.messages;
22
+ for (let i = messages.length - 1; i >= 0; i--) {
23
+ const msg = messages[i];
24
+ if (msg.role === 'assistant') {
25
+ if (typeof msg.content === 'string') {
26
+ return msg.content;
27
+ }
28
+ if (Array.isArray(msg.content)) {
29
+ const texts = msg.content
30
+ .filter((c) => c.type === 'text')
31
+ .map((c) => c.text);
32
+ if (texts.length > 0) {
33
+ return texts.join('\n');
34
+ }
35
+ }
36
+ }
37
+ }
38
+ return '';
39
+ }
40
+ function defaultConvertToLlm(messages) {
41
+ return messages.filter((m) => {
42
+ const role = m.role;
43
+ return role === 'user' || role === 'assistant' || role === 'toolResult';
44
+ });
45
+ }
46
+ //# sourceMappingURL=subagent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent.js","sourceRoot":"","sources":["../../src/agents/subagent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAapD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAc,EAAE,MAAsB;IACtE,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;QACtB,YAAY,EAAE;YACZ,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,8BAA8B;YACnE,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;YACzB,aAAa,EAAE,KAAsB;SACtC;QACD,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,mBAAmB;QACxD,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,aAAa,EAAE,UAAU;KAC1B,CAAC,CAAC;IAEH,MAAM,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3B,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;IAE1B,uCAAuC;IACvC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;IACtC,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAuC,CAAC;QAC9D,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC7B,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACpC,OAAO,GAAG,CAAC,OAAO,CAAC;YACrB,CAAC;YACD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO;qBACtB,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;qBACrC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC3B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACrB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAwB;IACnD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QAC3B,MAAM,IAAI,GAAI,CAAsB,CAAC,IAAI,CAAC;QAC1C,OAAO,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,YAAY,CAAC;IAC1E,CAAC,CAAc,CAAC;AAClB,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { Agent } from '@mariozechner/pi-agent-core';
2
+ import type { AgentMessage } from '@mariozechner/pi-agent-core';
3
+ import type { Model } from '@mariozechner/pi-ai';
4
+ import type { SdkTool, SwarmManager } from '../types.js';
5
+ export interface SwarmManagerDefaults {
6
+ model: Model<any>;
7
+ tools?: SdkTool<any, any>[];
8
+ convertToLlm: (messages: AgentMessage[]) => import('@mariozechner/pi-ai').Message[] | Promise<import('@mariozechner/pi-ai').Message[]>;
9
+ getApiKey?: (provider: string) => Promise<string | undefined> | string | undefined;
10
+ beforeToolCall?: ConstructorParameters<typeof Agent>[0] extends infer O ? O extends {
11
+ beforeToolCall?: infer B;
12
+ } ? B : never : never;
13
+ afterToolCall?: ConstructorParameters<typeof Agent>[0] extends infer O ? O extends {
14
+ afterToolCall?: infer A;
15
+ } ? A : never : never;
16
+ transformContext?: (messages: AgentMessage[], signal?: AbortSignal) => Promise<AgentMessage[]>;
17
+ }
18
+ /**
19
+ * Creates a SwarmManager for coordinating teams of agents.
20
+ */
21
+ export declare function createSwarmManager(defaults: SwarmManagerDefaults): SwarmManager;
22
+ //# sourceMappingURL=swarm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swarm.d.ts","sourceRoot":"","sources":["../../src/agents/swarm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,6BAA6B,CAAC;AAC/E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,KAAK,EACV,OAAO,EACP,YAAY,EAKb,MAAM,aAAa,CAAC;AAkBrB,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;IAC5B,YAAY,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,OAAO,qBAAqB,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,qBAAqB,EAAE,OAAO,EAAE,CAAC,CAAC;IACvI,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,GAAG,SAAS,CAAC;IACnF,cAAc,CAAC,EAAE,qBAAqB,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,CAAC,SAAS;QAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAA;KAAE,GAAG,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC;IACrI,aAAa,CAAC,EAAE,qBAAqB,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,CAAC,SAAS;QAAE,aAAa,CAAC,EAAE,MAAM,CAAC,CAAA;KAAE,GAAG,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC;IACnI,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;CAChG;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,YAAY,CAoK/E"}
@@ -0,0 +1,140 @@
1
+ import { Agent } from '@mariozechner/pi-agent-core';
2
+ import { SdkError } from '../errors.js';
3
+ import { AsyncQueue } from './messages.js';
4
+ /**
5
+ * Creates a SwarmManager for coordinating teams of agents.
6
+ */
7
+ export function createSwarmManager(defaults) {
8
+ const teams = new Map();
9
+ function createInternalAgent(systemPrompt, model, tools, abortSignal) {
10
+ const agentModel = model ?? defaults.model;
11
+ const agentTools = tools ?? defaults.tools ?? [];
12
+ const agent = new Agent({
13
+ initialState: {
14
+ systemPrompt,
15
+ model: agentModel,
16
+ tools: agentTools,
17
+ thinkingLevel: 'off',
18
+ },
19
+ convertToLlm: defaults.convertToLlm,
20
+ beforeToolCall: defaults.beforeToolCall,
21
+ afterToolCall: defaults.afterToolCall,
22
+ transformContext: defaults.transformContext,
23
+ getApiKey: defaults.getApiKey,
24
+ toolExecution: 'parallel',
25
+ });
26
+ return agent;
27
+ }
28
+ return {
29
+ createTeam(config) {
30
+ const abortController = new AbortController();
31
+ const leaderSystemPrompt = config.leaderSystemPrompt ?? 'You are a team leader coordinating tasks.';
32
+ const agent = createInternalAgent(leaderSystemPrompt, config.model);
33
+ const leader = {
34
+ name: 'leader',
35
+ taskId: `team-${config.name}-leader`,
36
+ status: 'idle',
37
+ budget: { maxTurns: Infinity },
38
+ agent,
39
+ mailbox: new AsyncQueue(),
40
+ abortController,
41
+ };
42
+ const team = {
43
+ name: config.name,
44
+ leader,
45
+ teammates: new Map(),
46
+ };
47
+ teams.set(config.name, team);
48
+ return team;
49
+ },
50
+ async spawnTeammate(teamName, config) {
51
+ const team = teams.get(teamName);
52
+ if (!team) {
53
+ throw new SdkError(`Team not found: ${teamName}`, 'TEAM_NOT_FOUND', false);
54
+ }
55
+ const abortController = new AbortController();
56
+ const systemPrompt = config.systemPrompt ?? 'You are a team member working on assigned tasks.';
57
+ const agent = createInternalAgent(systemPrompt, config.model, config.tools);
58
+ // Budget enforcement: if timeoutMs is set, use AbortSignal.timeout
59
+ if (config.budget.timeoutMs) {
60
+ const timeoutSignal = AbortSignal.timeout(config.budget.timeoutMs);
61
+ timeoutSignal.addEventListener('abort', () => {
62
+ abortController.abort();
63
+ agent.abort();
64
+ });
65
+ }
66
+ const teammate = {
67
+ name: config.name,
68
+ taskId: config.taskId,
69
+ status: 'running',
70
+ budget: config.budget,
71
+ agent,
72
+ mailbox: new AsyncQueue(),
73
+ abortController,
74
+ };
75
+ team.teammates.set(config.name, teammate);
76
+ // Start agent.prompt non-blocking
77
+ agent.prompt(config.prompt).then(() => {
78
+ teammate.status = 'idle';
79
+ teammate.terminationReason = 'taskComplete';
80
+ }, (err) => {
81
+ teammate.status = 'stopped';
82
+ if (err instanceof Error && (err.name === 'AbortError' || err.message.includes('aborted'))) {
83
+ teammate.terminationReason = 'budgetExhausted';
84
+ }
85
+ else {
86
+ teammate.terminationReason = 'error';
87
+ teammate.error = err instanceof Error ? err.message : String(err);
88
+ }
89
+ });
90
+ return teammate;
91
+ },
92
+ sendMessage(from, to, message) {
93
+ // Search across all teams for the recipient
94
+ for (const team of teams.values()) {
95
+ if (team.leader.name === to) {
96
+ team.leader.agent.followUp(message);
97
+ return;
98
+ }
99
+ const teammate = team.teammates.get(to);
100
+ if (teammate) {
101
+ teammate.agent.followUp(message);
102
+ return;
103
+ }
104
+ }
105
+ throw new SdkError(`Teammate not found: ${to}`, 'TEAMMATE_NOT_FOUND', false);
106
+ },
107
+ async removeTeammate(teamName, name) {
108
+ const team = teams.get(teamName);
109
+ if (!team)
110
+ return;
111
+ const teammate = team.teammates.get(name);
112
+ if (!teammate)
113
+ return;
114
+ teammate.abortController.abort();
115
+ teammate.agent.abort();
116
+ teammate.status = 'stopped';
117
+ teammate.mailbox.clear();
118
+ team.teammates.delete(name);
119
+ },
120
+ async destroyTeam(teamName) {
121
+ const team = teams.get(teamName);
122
+ if (!team)
123
+ return;
124
+ // Remove all teammates
125
+ for (const name of Array.from(team.teammates.keys())) {
126
+ await this.removeTeammate(teamName, name);
127
+ }
128
+ // Abort leader
129
+ team.leader.abortController.abort();
130
+ team.leader.agent.abort();
131
+ team.leader.status = 'stopped';
132
+ team.leader.mailbox.clear();
133
+ teams.delete(teamName);
134
+ },
135
+ getTeam(name) {
136
+ return teams.get(name);
137
+ },
138
+ };
139
+ }
140
+ //# sourceMappingURL=swarm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swarm.js","sourceRoot":"","sources":["../../src/agents/swarm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { SdkTool, SwarmManager } from '../types.js';
2
+ /**
3
+ * Creates swarm management tools for a team leader.
4
+ */
5
+ export declare function createSwarmTools(teamName: string, swarm: SwarmManager): SdkTool<any, any>[];
6
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/agents/tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEzD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAmE3F"}
@@ -0,0 +1,71 @@
1
+ import { Type } from '@sinclair/typebox';
2
+ import { randomUUID } from 'node:crypto';
3
+ /**
4
+ * Creates swarm management tools for a team leader.
5
+ */
6
+ export function createSwarmTools(teamName, swarm) {
7
+ const spawnTool = {
8
+ name: 'SpawnTeammate',
9
+ label: 'Spawn Teammate',
10
+ description: 'Spawn a new teammate agent to work on a task',
11
+ parameters: Type.Object({
12
+ name: Type.String({ description: 'Name for the teammate' }),
13
+ prompt: Type.String({ description: 'Task prompt for the teammate' }),
14
+ systemPrompt: Type.Optional(Type.String({ description: 'Optional system prompt override' })),
15
+ }),
16
+ capabilities: [],
17
+ async execute(_toolCallId, params) {
18
+ const teammate = await swarm.spawnTeammate(teamName, {
19
+ name: params.name,
20
+ prompt: params.prompt,
21
+ taskId: randomUUID(),
22
+ budget: { maxTurns: 20 },
23
+ systemPrompt: params.systemPrompt,
24
+ });
25
+ return {
26
+ content: [{ type: 'text', text: `Spawned teammate "${teammate.name}" (task: ${teammate.taskId})` }],
27
+ details: { name: teammate.name, taskId: teammate.taskId },
28
+ };
29
+ },
30
+ };
31
+ const sendTool = {
32
+ name: 'SendMessage',
33
+ label: 'Send Message',
34
+ description: 'Send a message to a teammate',
35
+ parameters: Type.Object({
36
+ to: Type.String({ description: 'Name of the recipient teammate' }),
37
+ message: Type.String({ description: 'Message content to send' }),
38
+ }),
39
+ capabilities: [],
40
+ async execute(_toolCallId, params) {
41
+ const agentMessage = {
42
+ role: 'user',
43
+ content: params.message,
44
+ timestamp: Date.now(),
45
+ };
46
+ swarm.sendMessage(teamName, params.to, agentMessage);
47
+ return {
48
+ content: [{ type: 'text', text: `Message sent to "${params.to}"` }],
49
+ details: { to: params.to },
50
+ };
51
+ },
52
+ };
53
+ const dismissTool = {
54
+ name: 'DismissTeammate',
55
+ label: 'Dismiss Teammate',
56
+ description: 'Remove a teammate from the team',
57
+ parameters: Type.Object({
58
+ name: Type.String({ description: 'Name of the teammate to dismiss' }),
59
+ }),
60
+ capabilities: [],
61
+ async execute(_toolCallId, params) {
62
+ await swarm.removeTeammate(teamName, params.name);
63
+ return {
64
+ content: [{ type: 'text', text: `Dismissed teammate "${params.name}"` }],
65
+ details: { name: params.name },
66
+ };
67
+ },
68
+ };
69
+ return [spawnTool, sendTool, dismissTool];
70
+ }
71
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/agents/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tools.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.test.d.ts","sourceRoot":"","sources":["../../src/agents/tools.test.ts"],"names":[],"mappings":""}