@oni.bot/core 0.6.1

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 (234) hide show
  1. package/README.md +308 -0
  2. package/dist/agents/context.d.ts +24 -0
  3. package/dist/agents/context.d.ts.map +1 -0
  4. package/dist/agents/context.js +93 -0
  5. package/dist/agents/context.js.map +1 -0
  6. package/dist/agents/define-agent.d.ts +10 -0
  7. package/dist/agents/define-agent.d.ts.map +1 -0
  8. package/dist/agents/define-agent.js +121 -0
  9. package/dist/agents/define-agent.js.map +1 -0
  10. package/dist/agents/functional-agent.d.ts +12 -0
  11. package/dist/agents/functional-agent.d.ts.map +1 -0
  12. package/dist/agents/functional-agent.js +115 -0
  13. package/dist/agents/functional-agent.js.map +1 -0
  14. package/dist/agents/index.d.ts +6 -0
  15. package/dist/agents/index.d.ts.map +1 -0
  16. package/dist/agents/index.js +7 -0
  17. package/dist/agents/index.js.map +1 -0
  18. package/dist/agents/types.d.ts +62 -0
  19. package/dist/agents/types.d.ts.map +1 -0
  20. package/dist/agents/types.js +8 -0
  21. package/dist/agents/types.js.map +1 -0
  22. package/dist/checkpoint.d.ts +27 -0
  23. package/dist/checkpoint.d.ts.map +1 -0
  24. package/dist/checkpoint.js +91 -0
  25. package/dist/checkpoint.js.map +1 -0
  26. package/dist/checkpointers/index.d.ts +4 -0
  27. package/dist/checkpointers/index.d.ts.map +1 -0
  28. package/dist/checkpointers/index.js +5 -0
  29. package/dist/checkpointers/index.js.map +1 -0
  30. package/dist/checkpointers/namespaced.d.ts +12 -0
  31. package/dist/checkpointers/namespaced.d.ts.map +1 -0
  32. package/dist/checkpointers/namespaced.js +37 -0
  33. package/dist/checkpointers/namespaced.js.map +1 -0
  34. package/dist/checkpointers/postgres.d.ts +13 -0
  35. package/dist/checkpointers/postgres.d.ts.map +1 -0
  36. package/dist/checkpointers/postgres.js +100 -0
  37. package/dist/checkpointers/postgres.js.map +1 -0
  38. package/dist/checkpointers/sqlite.d.ts +14 -0
  39. package/dist/checkpointers/sqlite.d.ts.map +1 -0
  40. package/dist/checkpointers/sqlite.js +98 -0
  41. package/dist/checkpointers/sqlite.js.map +1 -0
  42. package/dist/context.d.ts +24 -0
  43. package/dist/context.d.ts.map +1 -0
  44. package/dist/context.js +47 -0
  45. package/dist/context.js.map +1 -0
  46. package/dist/coordination/index.d.ts +3 -0
  47. package/dist/coordination/index.d.ts.map +1 -0
  48. package/dist/coordination/index.js +3 -0
  49. package/dist/coordination/index.js.map +1 -0
  50. package/dist/coordination/pubsub.d.ts +38 -0
  51. package/dist/coordination/pubsub.d.ts.map +1 -0
  52. package/dist/coordination/pubsub.js +73 -0
  53. package/dist/coordination/pubsub.js.map +1 -0
  54. package/dist/coordination/request-reply.d.ts +40 -0
  55. package/dist/coordination/request-reply.d.ts.map +1 -0
  56. package/dist/coordination/request-reply.js +77 -0
  57. package/dist/coordination/request-reply.js.map +1 -0
  58. package/dist/errors.d.ts +27 -0
  59. package/dist/errors.d.ts.map +1 -0
  60. package/dist/errors.js +41 -0
  61. package/dist/errors.js.map +1 -0
  62. package/dist/events/bus.d.ts +13 -0
  63. package/dist/events/bus.d.ts.map +1 -0
  64. package/dist/events/bus.js +52 -0
  65. package/dist/events/bus.js.map +1 -0
  66. package/dist/events/index.d.ts +3 -0
  67. package/dist/events/index.d.ts.map +1 -0
  68. package/dist/events/index.js +3 -0
  69. package/dist/events/index.js.map +1 -0
  70. package/dist/events/types.d.ts +87 -0
  71. package/dist/events/types.d.ts.map +1 -0
  72. package/dist/events/types.js +2 -0
  73. package/dist/events/types.js.map +1 -0
  74. package/dist/functional.d.ts +36 -0
  75. package/dist/functional.d.ts.map +1 -0
  76. package/dist/functional.js +103 -0
  77. package/dist/functional.js.map +1 -0
  78. package/dist/graph.d.ts +74 -0
  79. package/dist/graph.d.ts.map +1 -0
  80. package/dist/graph.js +119 -0
  81. package/dist/graph.js.map +1 -0
  82. package/dist/guardrails/audit.d.ts +13 -0
  83. package/dist/guardrails/audit.d.ts.map +1 -0
  84. package/dist/guardrails/audit.js +31 -0
  85. package/dist/guardrails/audit.js.map +1 -0
  86. package/dist/guardrails/budget.d.ts +30 -0
  87. package/dist/guardrails/budget.d.ts.map +1 -0
  88. package/dist/guardrails/budget.js +154 -0
  89. package/dist/guardrails/budget.js.map +1 -0
  90. package/dist/guardrails/filters.d.ts +24 -0
  91. package/dist/guardrails/filters.d.ts.map +1 -0
  92. package/dist/guardrails/filters.js +87 -0
  93. package/dist/guardrails/filters.js.map +1 -0
  94. package/dist/guardrails/index.d.ts +8 -0
  95. package/dist/guardrails/index.d.ts.map +1 -0
  96. package/dist/guardrails/index.js +9 -0
  97. package/dist/guardrails/index.js.map +1 -0
  98. package/dist/guardrails/permissions.d.ts +9 -0
  99. package/dist/guardrails/permissions.d.ts.map +1 -0
  100. package/dist/guardrails/permissions.js +29 -0
  101. package/dist/guardrails/permissions.js.map +1 -0
  102. package/dist/guardrails/types.d.ts +30 -0
  103. package/dist/guardrails/types.d.ts.map +1 -0
  104. package/dist/guardrails/types.js +2 -0
  105. package/dist/guardrails/types.js.map +1 -0
  106. package/dist/hitl/index.d.ts +5 -0
  107. package/dist/hitl/index.d.ts.map +1 -0
  108. package/dist/hitl/index.js +3 -0
  109. package/dist/hitl/index.js.map +1 -0
  110. package/dist/hitl/interrupt.d.ts +81 -0
  111. package/dist/hitl/interrupt.d.ts.map +1 -0
  112. package/dist/hitl/interrupt.js +116 -0
  113. package/dist/hitl/interrupt.js.map +1 -0
  114. package/dist/hitl/resume.d.ts +33 -0
  115. package/dist/hitl/resume.d.ts.map +1 -0
  116. package/dist/hitl/resume.js +72 -0
  117. package/dist/hitl/resume.js.map +1 -0
  118. package/dist/index.d.ts +57 -0
  119. package/dist/index.d.ts.map +1 -0
  120. package/dist/index.js +58 -0
  121. package/dist/index.js.map +1 -0
  122. package/dist/injected.d.ts +26 -0
  123. package/dist/injected.d.ts.map +1 -0
  124. package/dist/injected.js +25 -0
  125. package/dist/injected.js.map +1 -0
  126. package/dist/inspect.d.ts +31 -0
  127. package/dist/inspect.d.ts.map +1 -0
  128. package/dist/inspect.js +139 -0
  129. package/dist/inspect.js.map +1 -0
  130. package/dist/messages/index.d.ts +66 -0
  131. package/dist/messages/index.d.ts.map +1 -0
  132. package/dist/messages/index.js +123 -0
  133. package/dist/messages/index.js.map +1 -0
  134. package/dist/models/anthropic.d.ts +6 -0
  135. package/dist/models/anthropic.d.ts.map +1 -0
  136. package/dist/models/anthropic.js +317 -0
  137. package/dist/models/anthropic.js.map +1 -0
  138. package/dist/models/google.d.ts +3 -0
  139. package/dist/models/google.d.ts.map +1 -0
  140. package/dist/models/google.js +310 -0
  141. package/dist/models/google.js.map +1 -0
  142. package/dist/models/index.d.ts +6 -0
  143. package/dist/models/index.d.ts.map +1 -0
  144. package/dist/models/index.js +5 -0
  145. package/dist/models/index.js.map +1 -0
  146. package/dist/models/ollama.d.ts +7 -0
  147. package/dist/models/ollama.d.ts.map +1 -0
  148. package/dist/models/ollama.js +205 -0
  149. package/dist/models/ollama.js.map +1 -0
  150. package/dist/models/openai.d.ts +3 -0
  151. package/dist/models/openai.d.ts.map +1 -0
  152. package/dist/models/openai.js +331 -0
  153. package/dist/models/openai.js.map +1 -0
  154. package/dist/models/types.d.ts +77 -0
  155. package/dist/models/types.d.ts.map +1 -0
  156. package/dist/models/types.js +2 -0
  157. package/dist/models/types.js.map +1 -0
  158. package/dist/prebuilt/index.d.ts +5 -0
  159. package/dist/prebuilt/index.d.ts.map +1 -0
  160. package/dist/prebuilt/index.js +4 -0
  161. package/dist/prebuilt/index.js.map +1 -0
  162. package/dist/prebuilt/react-agent.d.ts +35 -0
  163. package/dist/prebuilt/react-agent.d.ts.map +1 -0
  164. package/dist/prebuilt/react-agent.js +55 -0
  165. package/dist/prebuilt/react-agent.js.map +1 -0
  166. package/dist/prebuilt/tool-node.d.ts +15 -0
  167. package/dist/prebuilt/tool-node.d.ts.map +1 -0
  168. package/dist/prebuilt/tool-node.js +61 -0
  169. package/dist/prebuilt/tool-node.js.map +1 -0
  170. package/dist/pregel.d.ts +48 -0
  171. package/dist/pregel.d.ts.map +1 -0
  172. package/dist/pregel.js +583 -0
  173. package/dist/pregel.js.map +1 -0
  174. package/dist/retry.d.ts +3 -0
  175. package/dist/retry.d.ts.map +1 -0
  176. package/dist/retry.js +40 -0
  177. package/dist/retry.js.map +1 -0
  178. package/dist/store/index.d.ts +90 -0
  179. package/dist/store/index.d.ts.map +1 -0
  180. package/dist/store/index.js +214 -0
  181. package/dist/store/index.js.map +1 -0
  182. package/dist/stream-events.d.ts +15 -0
  183. package/dist/stream-events.d.ts.map +1 -0
  184. package/dist/stream-events.js +53 -0
  185. package/dist/stream-events.js.map +1 -0
  186. package/dist/streaming.d.ts +56 -0
  187. package/dist/streaming.d.ts.map +1 -0
  188. package/dist/streaming.js +143 -0
  189. package/dist/streaming.js.map +1 -0
  190. package/dist/swarm/graph.d.ts +184 -0
  191. package/dist/swarm/graph.d.ts.map +1 -0
  192. package/dist/swarm/graph.js +534 -0
  193. package/dist/swarm/graph.js.map +1 -0
  194. package/dist/swarm/index.d.ts +11 -0
  195. package/dist/swarm/index.d.ts.map +1 -0
  196. package/dist/swarm/index.js +10 -0
  197. package/dist/swarm/index.js.map +1 -0
  198. package/dist/swarm/mailbox.d.ts +12 -0
  199. package/dist/swarm/mailbox.d.ts.map +1 -0
  200. package/dist/swarm/mailbox.js +36 -0
  201. package/dist/swarm/mailbox.js.map +1 -0
  202. package/dist/swarm/pool.d.ts +27 -0
  203. package/dist/swarm/pool.d.ts.map +1 -0
  204. package/dist/swarm/pool.js +87 -0
  205. package/dist/swarm/pool.js.map +1 -0
  206. package/dist/swarm/registry.d.ts +37 -0
  207. package/dist/swarm/registry.d.ts.map +1 -0
  208. package/dist/swarm/registry.js +115 -0
  209. package/dist/swarm/registry.js.map +1 -0
  210. package/dist/swarm/supervisor.d.ts +18 -0
  211. package/dist/swarm/supervisor.d.ts.map +1 -0
  212. package/dist/swarm/supervisor.js +117 -0
  213. package/dist/swarm/supervisor.js.map +1 -0
  214. package/dist/swarm/types.d.ts +111 -0
  215. package/dist/swarm/types.d.ts.map +1 -0
  216. package/dist/swarm/types.js +16 -0
  217. package/dist/swarm/types.js.map +1 -0
  218. package/dist/tools/define.d.ts +14 -0
  219. package/dist/tools/define.d.ts.map +1 -0
  220. package/dist/tools/define.js +39 -0
  221. package/dist/tools/define.js.map +1 -0
  222. package/dist/tools/index.d.ts +3 -0
  223. package/dist/tools/index.d.ts.map +1 -0
  224. package/dist/tools/index.js +2 -0
  225. package/dist/tools/index.js.map +1 -0
  226. package/dist/tools/types.d.ts +23 -0
  227. package/dist/tools/types.d.ts.map +1 -0
  228. package/dist/tools/types.js +2 -0
  229. package/dist/tools/types.js.map +1 -0
  230. package/dist/types.d.ts +204 -0
  231. package/dist/types.d.ts.map +1 -0
  232. package/dist/types.js +45 -0
  233. package/dist/types.js.map +1 -0
  234. package/package.json +108 -0
@@ -0,0 +1,534 @@
1
+ // ============================================================
2
+ // @oni.bot/core/swarm — SwarmGraph
3
+ // ============================================================
4
+ // Extends StateGraph with swarm-aware primitives:
5
+ // - addAgent() register an agent as a node
6
+ // - addSupervisor() mount supervisor routing node
7
+ // - addHandoffEdge() explicit agent-to-agent wires
8
+ // - compile() returns a full ONISkeleton
9
+ // ============================================================
10
+ import { StateGraph } from "../graph.js";
11
+ import { START, END, appendList, lastValue, mergeObject } from "../types.js";
12
+ import { Command, Send } from "../types.js";
13
+ import { Handoff } from "./types.js";
14
+ import { AgentRegistry } from "./registry.js";
15
+ import { createSupervisorNode } from "./supervisor.js";
16
+ import { getInbox } from "./mailbox.js";
17
+ import { RequestReplyBroker } from "../coordination/request-reply.js";
18
+ import { PubSub } from "../coordination/pubsub.js";
19
+ export const baseSwarmChannels = {
20
+ task: lastValue(() => ""),
21
+ context: mergeObject(() => ({})),
22
+ agentResults: mergeObject(() => ({})),
23
+ messages: appendList(() => []),
24
+ swarmMessages: appendList(() => []),
25
+ supervisorRound: lastValue(() => 0),
26
+ currentAgent: lastValue(() => null),
27
+ done: lastValue(() => false),
28
+ handoffHistory: appendList(() => []),
29
+ };
30
+ // ----------------------------------------------------------------
31
+ // SwarmGraph
32
+ // ----------------------------------------------------------------
33
+ export class SwarmGraph {
34
+ inner;
35
+ registry;
36
+ channels;
37
+ agentIds = new Set();
38
+ supervisorNodeName = "__supervisor__";
39
+ hasSupervisor = false;
40
+ _broker;
41
+ _pubsub;
42
+ get broker() {
43
+ return this._broker ??= new RequestReplyBroker();
44
+ }
45
+ get pubsub() {
46
+ return this._pubsub ??= new PubSub();
47
+ }
48
+ constructor(channels) {
49
+ this.channels = {
50
+ ...baseSwarmChannels,
51
+ ...(channels ?? {}),
52
+ };
53
+ this.inner = new StateGraph({ channels: this.channels });
54
+ this.registry = new AgentRegistry();
55
+ }
56
+ // ---- Static factory: hierarchical template ----
57
+ /**
58
+ * Create a complete supervisor-workers swarm from a config object.
59
+ * Registers all agents, wires a supervisor node, and returns the
60
+ * ready-to-compile SwarmGraph.
61
+ */
62
+ static hierarchical(config) {
63
+ const swarm = new SwarmGraph(config.channels);
64
+ for (const agentDef of config.agents) {
65
+ swarm.addAgent(agentDef);
66
+ }
67
+ swarm.addSupervisor({
68
+ model: config.supervisor.model,
69
+ strategy: config.supervisor.strategy,
70
+ taskField: "task",
71
+ contextField: "context",
72
+ rules: config.supervisor.rules,
73
+ systemPrompt: config.supervisor.systemPrompt,
74
+ maxRounds: config.supervisor.maxRounds,
75
+ });
76
+ return swarm;
77
+ }
78
+ // ---- Static factory: fan-out template ----
79
+ /**
80
+ * Create a fan-out swarm that runs all agents in parallel via Send
81
+ * and collects results through a reducer node.
82
+ */
83
+ static fanOut(config) {
84
+ const swarm = new SwarmGraph(config.channels);
85
+ for (const agentDef of config.agents) {
86
+ swarm.addAgent(agentDef);
87
+ }
88
+ // Fan-out node: passthrough that triggers conditional edges with Send
89
+ const agentIds = config.agents.map((a) => a.id);
90
+ swarm.inner.addNode("__fanout__", (_state) => {
91
+ // No state mutation — the conditional edge handles fan-out via Send
92
+ return {};
93
+ });
94
+ // Reducer node: collects agentResults and applies user reducer
95
+ swarm.inner.addNode("__reducer__", (state) => {
96
+ return config.reducer(state.agentResults ?? {});
97
+ });
98
+ // Wiring: START → __fanout__
99
+ swarm.inner.addEdge(START, "__fanout__");
100
+ // __fanout__ → Send to all agents in parallel
101
+ swarm.inner.addConditionalEdges("__fanout__", ((state) => agentIds.map((id) => new Send(id, { ...state }))));
102
+ // Each agent → __reducer__
103
+ for (const id of agentIds) {
104
+ swarm.inner.addEdge(id, "__reducer__");
105
+ }
106
+ // __reducer__ → END
107
+ swarm.inner.addEdge("__reducer__", END);
108
+ return swarm;
109
+ }
110
+ // ---- Static factory: pipeline template ----
111
+ /**
112
+ * Create a linear agent pipeline: stage1 → stage2 → … → END.
113
+ * Optionally override any stage's outgoing edge with a conditional
114
+ * transition (e.g. loop back for review cycles).
115
+ */
116
+ static pipeline(config) {
117
+ const swarm = new SwarmGraph(config.channels);
118
+ const ids = config.stages.map((a) => a.id);
119
+ for (const agentDef of config.stages) {
120
+ swarm.addAgent(agentDef);
121
+ }
122
+ // Wire: START → first stage
123
+ swarm.inner.addEdge(START, ids[0]);
124
+ // Wire each stage to the next (or conditional)
125
+ for (let i = 0; i < ids.length - 1; i++) {
126
+ const id = ids[i];
127
+ if (config.transitions?.[id]) {
128
+ swarm.addConditionalHandoff(id, config.transitions[id]);
129
+ }
130
+ else {
131
+ swarm.inner.addEdge(id, ids[i + 1]);
132
+ }
133
+ }
134
+ // Wire last stage
135
+ const lastId = ids[ids.length - 1];
136
+ if (config.transitions?.[lastId]) {
137
+ swarm.addConditionalHandoff(lastId, config.transitions[lastId]);
138
+ }
139
+ else {
140
+ swarm.inner.addEdge(lastId, END);
141
+ }
142
+ return swarm;
143
+ }
144
+ // ---- Static factory: peer network template ----
145
+ /**
146
+ * Create a decentralized peer network: agents route to each other
147
+ * via conditional handoffs, with no supervisor.
148
+ */
149
+ static peerNetwork(config) {
150
+ const swarm = new SwarmGraph(config.channels);
151
+ for (const agentDef of config.agents) {
152
+ swarm.addAgent(agentDef);
153
+ }
154
+ // Wire: START → entrypoint
155
+ swarm.inner.addEdge(START, config.entrypoint);
156
+ // Wire each agent's conditional handoff
157
+ for (const [agentId, handoffFn] of Object.entries(config.handoffs)) {
158
+ swarm.addConditionalHandoff(agentId, handoffFn);
159
+ }
160
+ return swarm;
161
+ }
162
+ // ---- Static factory: map-reduce template ----
163
+ /**
164
+ * Distribute N inputs across poolSize copies of a mapper agent,
165
+ * fan-out via Send, and collect results through a reducer node.
166
+ */
167
+ static mapReduce(config) {
168
+ const swarm = new SwarmGraph(config.channels);
169
+ const poolSize = config.poolSize ?? 1;
170
+ // Register poolSize copies of the mapper agent
171
+ const mapperIds = [];
172
+ for (let i = 0; i < poolSize; i++) {
173
+ const id = poolSize === 1 ? config.mapper.id : `${config.mapper.id}_${i}`;
174
+ mapperIds.push(id);
175
+ swarm.addAgent({
176
+ ...config.mapper,
177
+ id,
178
+ });
179
+ }
180
+ // Splitter node: passthrough — the conditional edge handles fan-out via Send
181
+ swarm.inner.addNode("__splitter__", (_state) => {
182
+ return {};
183
+ });
184
+ // Reducer node: collects agentResults and applies user reducer
185
+ swarm.inner.addNode("__reducer__", (state) => {
186
+ return config.reducer(state.agentResults ?? {});
187
+ });
188
+ // Wiring: START → __splitter__
189
+ swarm.inner.addEdge(START, "__splitter__");
190
+ // __splitter__ → Send to mapper agents round-robin across pool
191
+ const inputField = config.inputField;
192
+ swarm.inner.addConditionalEdges("__splitter__", ((state) => {
193
+ const items = state[inputField];
194
+ if (!Array.isArray(items) || items.length === 0) {
195
+ return "__reducer__";
196
+ }
197
+ return items.map((item, idx) => {
198
+ const targetId = mapperIds[idx % mapperIds.length];
199
+ return new Send(targetId, { ...state, task: String(item) });
200
+ });
201
+ }));
202
+ // Each mapper → __reducer__
203
+ for (const id of mapperIds) {
204
+ swarm.inner.addEdge(id, "__reducer__");
205
+ }
206
+ // __reducer__ → END
207
+ swarm.inner.addEdge("__reducer__", END);
208
+ return swarm;
209
+ }
210
+ // ---- Static factory: debate template ----
211
+ /**
212
+ * Create a multi-round parallel debate with judge termination.
213
+ * All debaters argue in parallel each round; a judge evaluates
214
+ * and decides whether consensus has been reached.
215
+ */
216
+ static debate(config) {
217
+ const swarm = new SwarmGraph(config.channels);
218
+ const debaterIds = config.debaters.map((d) => d.id);
219
+ const consensusKeyword = config.judge.consensusKeyword ?? "CONSENSUS";
220
+ for (const debater of config.debaters) {
221
+ swarm.addAgent(debater);
222
+ }
223
+ // Judge node: evaluates arguments, decides continue or consensus
224
+ swarm.inner.addNode("__judge__", async (state) => {
225
+ const round = state.supervisorRound ?? 0;
226
+ // If no agent results yet (first round), just kick off debaters
227
+ const results = state.agentResults ?? {};
228
+ if (round === 0 && Object.keys(results).length === 0) {
229
+ return {
230
+ supervisorRound: round + 1,
231
+ };
232
+ }
233
+ // Evaluate arguments via judge model
234
+ const argsText = Object.entries(results)
235
+ .map(([id, r]) => `${id}: ${JSON.stringify(r)}`)
236
+ .join("\n\n");
237
+ const response = await config.judge.model.chat({
238
+ messages: [{
239
+ role: "user",
240
+ content: `Round ${round}. Evaluate these arguments:\n\n${argsText}\n\nRespond "${consensusKeyword}" if consensus reached, otherwise "CONTINUE".`,
241
+ }],
242
+ systemPrompt: config.judge.systemPrompt ?? "You are a debate judge.",
243
+ });
244
+ const isConsensus = response.content.includes(consensusKeyword);
245
+ const nextRound = round + 1;
246
+ // Force done if consensus or max rounds exhausted
247
+ // (round 0 is kick-off only, so chat is called maxRounds times)
248
+ const isDone = isConsensus || nextRound > config.judge.maxRounds;
249
+ return {
250
+ done: isDone,
251
+ supervisorRound: nextRound,
252
+ messages: [{ role: "system", content: `Judge round ${round}: ${isDone ? "Consensus" : "Continue"}` }],
253
+ };
254
+ });
255
+ // Fan-out node: passthrough — conditional edges handle the Send dispatch
256
+ swarm.inner.addNode("__fanout__", (_state) => {
257
+ return {};
258
+ });
259
+ // Wiring: START → __judge__
260
+ swarm.inner.addEdge(START, "__judge__");
261
+ // __judge__ → conditional (done → END, else → __fanout__)
262
+ swarm.inner.addConditionalEdges("__judge__", (state) => {
263
+ if (state.done)
264
+ return END;
265
+ return "__fanout__";
266
+ });
267
+ // __fanout__ → Send to all debaters in parallel
268
+ swarm.inner.addConditionalEdges("__fanout__", ((state) => debaterIds.map((id) => new Send(id, { ...state }))));
269
+ // Each debater → __judge__
270
+ for (const id of debaterIds) {
271
+ swarm.inner.addEdge(id, "__judge__");
272
+ }
273
+ return swarm;
274
+ }
275
+ // ---- Static factory: hierarchical mesh template ----
276
+ /**
277
+ * Create a hierarchical mesh with a coordinator routing to team
278
+ * sub-graphs. Each team is built using pipeline() or peerNetwork()
279
+ * and compiled into a single node in the outer graph.
280
+ */
281
+ static hierarchicalMesh(config) {
282
+ const swarm = new SwarmGraph(config.channels);
283
+ const teamIds = Object.keys(config.teams);
284
+ const maxRounds = config.coordinator.maxRounds ?? 10;
285
+ // Build each team as a compiled sub-skeleton and mount as a node
286
+ for (const [teamId, teamConfig] of Object.entries(config.teams)) {
287
+ let teamSwarm;
288
+ if (teamConfig.topology === "pipeline") {
289
+ teamSwarm = SwarmGraph.pipeline({ stages: teamConfig.agents });
290
+ }
291
+ else {
292
+ teamSwarm = SwarmGraph.peerNetwork({
293
+ agents: teamConfig.agents,
294
+ entrypoint: teamConfig.agents[0].id,
295
+ handoffs: teamConfig.handoffs ?? {},
296
+ });
297
+ }
298
+ const teamSkeleton = teamSwarm.compile();
299
+ // Mount team as a single node in the outer graph
300
+ swarm.inner.addNode(teamId, async (state, cfg) => {
301
+ const teamResult = await teamSkeleton.invoke(state, cfg);
302
+ return {
303
+ agentResults: {
304
+ ...(state.agentResults ?? {}),
305
+ [teamId]: teamResult,
306
+ },
307
+ messages: teamResult.messages ?? [],
308
+ };
309
+ });
310
+ }
311
+ // Coordinator node: routes to teams
312
+ swarm.inner.addNode("__coordinator__", async (state) => {
313
+ const round = state.supervisorRound ?? 0;
314
+ if (round >= maxRounds || state.done) {
315
+ return { done: true };
316
+ }
317
+ if (config.coordinator.strategy === "llm" && config.coordinator.model) {
318
+ const teamList = teamIds.map((id) => `- ${id}`).join("\n");
319
+ const response = await config.coordinator.model.chat({
320
+ messages: [{
321
+ role: "user",
322
+ content: `Task: ${state.task}\n\nAvailable teams:\n${teamList}\n\nRespond with the team name to route to, or "DONE" if complete.`,
323
+ }],
324
+ systemPrompt: config.coordinator.systemPrompt ?? "You coordinate teams.",
325
+ });
326
+ const picked = response.content.trim();
327
+ if (picked === "DONE" || !teamIds.includes(picked)) {
328
+ return { done: true, supervisorRound: round + 1 };
329
+ }
330
+ return new Command({
331
+ update: { supervisorRound: round + 1, currentAgent: picked },
332
+ goto: picked,
333
+ });
334
+ }
335
+ // Round-robin strategy: route to teams in order, mark done after all visited
336
+ if (config.coordinator.strategy === "round-robin") {
337
+ const target = teamIds[round % teamIds.length];
338
+ if (round >= teamIds.length) {
339
+ return { done: true };
340
+ }
341
+ return new Command({
342
+ update: { supervisorRound: round + 1 },
343
+ goto: target,
344
+ });
345
+ }
346
+ return { done: true };
347
+ });
348
+ // Wiring: START → coordinator
349
+ swarm.inner.addEdge(START, "__coordinator__");
350
+ // Each team → coordinator (loop back unless done)
351
+ for (const teamId of teamIds) {
352
+ swarm.inner.addConditionalEdges(teamId, (state) => {
353
+ if (state.done)
354
+ return END;
355
+ return "__coordinator__";
356
+ });
357
+ }
358
+ // Coordinator → conditional (done → END, else handled by Command.goto)
359
+ swarm.inner.addConditionalEdges("__coordinator__", (state) => {
360
+ if (state.done)
361
+ return END;
362
+ // Command.goto handles routing — this is the fallback
363
+ return END;
364
+ });
365
+ return swarm;
366
+ }
367
+ // ---- Agent registration ----
368
+ addAgent(def) {
369
+ this.registry.register(def);
370
+ this.agentIds.add(def.id);
371
+ // Wrap the agent's skeleton as a node
372
+ // The node executes the agent's skeleton and handles Handoff returns
373
+ const agentNode = async (state, config) => {
374
+ console.log(`[swarm] agent="${def.id}" (${def.role}) starting`);
375
+ this.registry.markBusy(def.id);
376
+ const maxRetries = def.maxRetries ?? 2;
377
+ let lastError;
378
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
379
+ try {
380
+ const agentInput = {
381
+ ...state,
382
+ context: {
383
+ ...(state.context ?? {}),
384
+ inbox: getInbox(state.swarmMessages ?? [], def.id),
385
+ },
386
+ };
387
+ const result = await def.skeleton.invoke(agentInput, {
388
+ ...config,
389
+ agentId: def.id,
390
+ });
391
+ this.registry.markIdle(def.id);
392
+ console.log(`[swarm] agent="${def.id}" completed`);
393
+ // ---- Handoff detection ----
394
+ if (result instanceof Handoff || (result && result.isHandoff)) {
395
+ const handoff = result instanceof Handoff
396
+ ? result
397
+ : new Handoff(result.opts);
398
+ return new Command({
399
+ update: {
400
+ context: { ...(state.context ?? {}), ...(handoff.context ?? {}) },
401
+ handoffHistory: [{
402
+ from: def.id,
403
+ to: handoff.to,
404
+ message: handoff.message,
405
+ step: state.supervisorRound ?? 0,
406
+ timestamp: Date.now(),
407
+ resume: handoff.resume,
408
+ }],
409
+ currentAgent: handoff.to,
410
+ },
411
+ goto: handoff.to,
412
+ });
413
+ }
414
+ // ---- Normal result ----
415
+ return {
416
+ ...result,
417
+ agentResults: {
418
+ ...(state.agentResults ?? {}),
419
+ [def.id]: result,
420
+ },
421
+ handoffHistory: [
422
+ ...(state.handoffHistory ?? []),
423
+ {
424
+ from: def.id,
425
+ to: "__completed__",
426
+ message: "Agent completed",
427
+ step: state.supervisorRound ?? 0,
428
+ timestamp: Date.now(),
429
+ },
430
+ ],
431
+ };
432
+ }
433
+ catch (err) {
434
+ lastError = err;
435
+ this.registry.markError(def.id);
436
+ console.warn(`[swarm] agent="${def.id}" attempt ${attempt + 1}/${maxRetries + 1} failed: ${err}`);
437
+ if (attempt < maxRetries) {
438
+ continue; // retry
439
+ }
440
+ }
441
+ }
442
+ // All retries exhausted — fallback to supervisor if one exists
443
+ console.warn(`[swarm] agent="${def.id}" exhausted retries, falling back`);
444
+ this.registry.markIdle(def.id);
445
+ if (this.hasSupervisor) {
446
+ return new Command({
447
+ update: {
448
+ context: {
449
+ ...(state.context ?? {}),
450
+ lastAgentError: { agent: def.id, error: String(lastError) },
451
+ },
452
+ },
453
+ goto: this.supervisorNodeName,
454
+ });
455
+ }
456
+ // No supervisor — rethrow
457
+ throw lastError;
458
+ };
459
+ this.inner.addNode(def.id, agentNode);
460
+ return this;
461
+ }
462
+ // ---- Supervisor ----
463
+ addSupervisor(config, nodeName = this.supervisorNodeName) {
464
+ this.supervisorNodeName = nodeName;
465
+ this.hasSupervisor = true;
466
+ const supervisorFn = createSupervisorNode(this.registry, config);
467
+ this.inner.addNode(nodeName, supervisorFn);
468
+ // Wire: START → Supervisor
469
+ this.inner.addEdge(START, nodeName);
470
+ // Wire: each agent → Supervisor (return path)
471
+ for (const agentId of this.agentIds) {
472
+ this.inner.addConditionalEdges(agentId, (state) => {
473
+ // If agent marked done, go to END
474
+ if (state.done)
475
+ return END;
476
+ return nodeName;
477
+ });
478
+ }
479
+ return this;
480
+ }
481
+ // ---- Peer-to-peer handoff edges ----
482
+ /**
483
+ * Wire two agents to hand off directly to each other.
484
+ * The "from" agent's node will inspect its output for a Handoff
485
+ * and route accordingly.
486
+ */
487
+ addHandoffEdge(fromAgentId, toAgentId) {
488
+ this.inner.addEdge(fromAgentId, toAgentId);
489
+ return this;
490
+ }
491
+ /**
492
+ * Add a conditional handoff: fromAgent routes to different agents
493
+ * based on state.
494
+ */
495
+ addConditionalHandoff(fromAgentId, condition) {
496
+ this.inner.addConditionalEdges(fromAgentId, condition);
497
+ return this;
498
+ }
499
+ // ---- Static edge passthrough ----
500
+ addEdge(from, to) {
501
+ this.inner.addEdge(from, to);
502
+ return this;
503
+ }
504
+ // ---- Pipeline shorthand ----
505
+ /**
506
+ * Wire agents as a linear pipeline: A → B → C → END
507
+ */
508
+ pipeline(...agentIds) {
509
+ if (agentIds.length < 1)
510
+ return this;
511
+ this.inner.addEdge(START, agentIds[0]);
512
+ for (let i = 0; i < agentIds.length - 1; i++) {
513
+ this.inner.addEdge(agentIds[i], agentIds[i + 1]);
514
+ }
515
+ this.inner.addEdge(agentIds[agentIds.length - 1], END);
516
+ return this;
517
+ }
518
+ // ---- Compile ----
519
+ compile(opts = {}) {
520
+ const skeleton = this.inner.compile({
521
+ ...(opts.checkpointer ? { checkpointer: opts.checkpointer } : {}),
522
+ ...(opts.interruptBefore ? { interruptBefore: opts.interruptBefore } : {}),
523
+ ...(opts.interruptAfter ? { interruptAfter: opts.interruptAfter } : {}),
524
+ });
525
+ // Attach swarm-specific extensions
526
+ const extensions = {
527
+ registry: this.registry,
528
+ agentStats: () => this.registry.stats(),
529
+ toMermaid: () => this.inner.toMermaid(),
530
+ };
531
+ return Object.assign(skeleton, extensions);
532
+ }
533
+ }
534
+ //# sourceMappingURL=graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/swarm/graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export { SwarmGraph, baseSwarmChannels } from "./graph.js";
2
+ export type { BaseSwarmState, SwarmCompileOpts, SwarmExtensions, HierarchicalConfig, FanOutConfig, PipelineConfig, PeerNetworkConfig, MapReduceConfig, DebateConfig, HierarchicalMeshConfig } from "./graph.js";
3
+ export { AgentRegistry } from "./registry.js";
4
+ export type { AgentRecord } from "./registry.js";
5
+ export { AgentPool } from "./pool.js";
6
+ export { createSupervisorNode } from "./supervisor.js";
7
+ export type { SupervisorState } from "./supervisor.js";
8
+ export { createMessage, getInbox, consumeInbox, formatInbox } from "./mailbox.js";
9
+ export { Handoff } from "./types.js";
10
+ export type { SwarmAgentDef, AgentStatus, AgentCapability, HandoffOptions, HandoffRecord, SwarmMessage, SwarmMeta, SupervisorConfig, SupervisorRoutingStrategy, RuleRoute, AgentPoolConfig, SwarmCompileOptions, SwarmTopology, } from "./types.js";
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/swarm/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAW,YAAY,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,kBAAkB,EAAE,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,eAAe,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEhN,OAAO,EAAE,aAAa,EAAE,MAA2B,eAAe,CAAC;AACnE,YAAY,EAAE,WAAW,EAAE,MAAwB,eAAe,CAAC;AAEnE,OAAO,EAAE,SAAS,EAAE,MAA+B,WAAW,CAAC;AAE/D,OAAO,EAAE,oBAAoB,EAAE,MAAoB,iBAAiB,CAAC;AACrE,YAAY,EAAE,eAAe,EAAE,MAAoB,iBAAiB,CAAC;AAErE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAElF,OAAO,EAAE,OAAO,EAAE,MAAiC,YAAY,CAAC;AAChE,YAAY,EACV,aAAa,EACb,WAAW,EACX,eAAe,EACf,cAAc,EACd,aAAa,EACb,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,yBAAyB,EACzB,SAAS,EACT,eAAe,EACf,mBAAmB,EACnB,aAAa,GACd,MAAM,YAAY,CAAC"}
@@ -0,0 +1,10 @@
1
+ // ============================================================
2
+ // @oni.bot/core/swarm — Public API
3
+ // ============================================================
4
+ export { SwarmGraph, baseSwarmChannels } from "./graph.js";
5
+ export { AgentRegistry } from "./registry.js";
6
+ export { AgentPool } from "./pool.js";
7
+ export { createSupervisorNode } from "./supervisor.js";
8
+ export { createMessage, getInbox, consumeInbox, formatInbox } from "./mailbox.js";
9
+ export { Handoff } from "./types.js";
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/swarm/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,mCAAmC;AACnC,+DAA+D;AAE/D,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAW,YAAY,CAAC;AAGhE,OAAO,EAAE,aAAa,EAAE,MAA2B,eAAe,CAAC;AAGnE,OAAO,EAAE,SAAS,EAAE,MAA+B,WAAW,CAAC;AAE/D,OAAO,EAAE,oBAAoB,EAAE,MAAoB,iBAAiB,CAAC;AAGrE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAElF,OAAO,EAAE,OAAO,EAAE,MAAiC,YAAY,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { SwarmMessage } from "./types.js";
2
+ export declare function createMessage(from: string, to: string, content: string, opts?: {
3
+ metadata?: Record<string, unknown>;
4
+ replyTo?: string;
5
+ }): SwarmMessage;
6
+ /** Extract messages addressed to a specific agent (or broadcasts) */
7
+ export declare function getInbox(messages: SwarmMessage[], agentId: string): SwarmMessage[];
8
+ /** Mark messages as consumed — returns messages NOT consumed by agentId */
9
+ export declare function consumeInbox(messages: SwarmMessage[], agentId: string): SwarmMessage[];
10
+ /** Format inbox as readable string for LLM context */
11
+ export declare function formatInbox(messages: SwarmMessage[]): string;
12
+ //# sourceMappingURL=mailbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mailbox.d.ts","sourceRoot":"","sources":["../../src/swarm/mailbox.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAI/C,wBAAgB,aAAa,CAC3B,IAAI,EAAO,MAAM,EACjB,EAAE,EAAS,MAAM,EACjB,OAAO,EAAI,MAAM,EACjB,IAAI,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9D,YAAY,CAUd;AAED,qEAAqE;AACrE,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE,CAElF;AAED,2EAA2E;AAC3E,wBAAgB,YAAY,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE,CAEtF;AAED,sDAAsD;AACtD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,MAAM,CAK5D"}
@@ -0,0 +1,36 @@
1
+ // ============================================================
2
+ // @oni.bot/core/swarm — Mailbox (async inter-agent messaging)
3
+ // ============================================================
4
+ // Agents communicate by posting messages to the shared mailbox.
5
+ // Each message is addressed to a specific agent ID or "*" for
6
+ // broadcast. Consumers pull their inbox by agent ID.
7
+ // ============================================================
8
+ let msgCounter = 0;
9
+ export function createMessage(from, to, content, opts) {
10
+ return {
11
+ id: `msg-${++msgCounter}-${Date.now()}`,
12
+ from,
13
+ to,
14
+ content,
15
+ metadata: opts?.metadata,
16
+ replyTo: opts?.replyTo,
17
+ timestamp: Date.now(),
18
+ };
19
+ }
20
+ /** Extract messages addressed to a specific agent (or broadcasts) */
21
+ export function getInbox(messages, agentId) {
22
+ return messages.filter((m) => m.to === agentId || m.to === "*");
23
+ }
24
+ /** Mark messages as consumed — returns messages NOT consumed by agentId */
25
+ export function consumeInbox(messages, agentId) {
26
+ return messages.filter((m) => m.to !== agentId && m.to !== "*");
27
+ }
28
+ /** Format inbox as readable string for LLM context */
29
+ export function formatInbox(messages) {
30
+ if (!messages.length)
31
+ return "(no messages)";
32
+ return messages
33
+ .map((m) => `[From: ${m.from}]${m.replyTo ? ` [Re: ${m.replyTo}]` : ""}\n${m.content}`)
34
+ .join("\n---\n");
35
+ }
36
+ //# sourceMappingURL=mailbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mailbox.js","sourceRoot":"","sources":["../../src/swarm/mailbox.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,8DAA8D;AAC9D,+DAA+D;AAC/D,gEAAgE;AAChE,8DAA8D;AAC9D,qDAAqD;AACrD,+DAA+D;AAI/D,IAAI,UAAU,GAAG,CAAC,CAAC;AAEnB,MAAM,UAAU,aAAa,CAC3B,IAAiB,EACjB,EAAiB,EACjB,OAAiB,EACjB,IAA+D;IAE/D,OAAO;QACL,EAAE,EAAS,OAAO,EAAE,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;QAC9C,IAAI;QACJ,EAAE;QACF,OAAO;QACP,QAAQ,EAAG,IAAI,EAAE,QAAQ;QACzB,OAAO,EAAI,IAAI,EAAE,OAAO;QACxB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAC;AACJ,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,QAAQ,CAAC,QAAwB,EAAE,OAAe;IAChE,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,IAAI,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;AAClE,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,YAAY,CAAC,QAAwB,EAAE,OAAe;IACpE,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,IAAI,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;AAClE,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,WAAW,CAAC,QAAwB;IAClD,IAAI,CAAC,QAAQ,CAAC,MAAM;QAAE,OAAO,eAAe,CAAC;IAC7C,OAAO,QAAQ;SACZ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;SACtF,IAAI,CAAC,SAAS,CAAC,CAAC;AACrB,CAAC"}