@dogpile/sdk 0.1.2 → 0.2.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.
@@ -1 +1 @@
1
- {"version":3,"file":"openai-compatible.d.ts","sourceRoot":"","sources":["../../src/providers/openai-compatible.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,uBAAuB,EAEvB,UAAU,EAIV,YAAY,EACZ,aAAa,EACd,MAAM,aAAa,CAAC;AAKrB,MAAM,MAAM,qBAAqB,GAAG,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAExG,MAAM,WAAW,mCAAmC;IAClD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,sCAAsC,CAAC;IAC1D,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;CACzC;AAED,MAAM,MAAM,qCAAqC,GAAG,CAClD,OAAO,EAAE,mCAAmC,KACzC,MAAM,GAAG,SAAS,CAAC;AAExB,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAChE,QAAQ,CAAC,KAAK,CAAC,EAAE,qBAAqB,CAAC;IACvC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,aAAa,CAAC,EAAE,qCAAqC,CAAC;CAChE;AAED,MAAM,WAAW,sCAAsC;IACrD,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,oCAAoC,EAAE,CAAC;IACnE,QAAQ,CAAC,KAAK,CAAC,EAAE,qBAAqB,CAAC;CACxC;AAED,MAAM,WAAW,oCAAoC;IACnD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,OAAO,CAAC,EAAE;QACjB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;KAC5B,CAAC;CACH;AAED,MAAM,WAAW,qBAAsB,SAAQ,UAAU;IACvD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,+BAA+B,GAAG,uBAAuB,CA0DhH"}
1
+ {"version":3,"file":"openai-compatible.d.ts","sourceRoot":"","sources":["../../src/providers/openai-compatible.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,uBAAuB,EAEvB,UAAU,EAIV,YAAY,EACZ,aAAa,EACd,MAAM,aAAa,CAAC;AAKrB,MAAM,MAAM,qBAAqB,GAAG,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAExG,MAAM,WAAW,mCAAmC;IAClD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,sCAAsC,CAAC;IAC1D,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;CACzC;AAED,MAAM,MAAM,qCAAqC,GAAG,CAClD,OAAO,EAAE,mCAAmC,KACzC,MAAM,GAAG,SAAS,CAAC;AAExB,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAChE,QAAQ,CAAC,KAAK,CAAC,EAAE,qBAAqB,CAAC;IACvC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,aAAa,CAAC,EAAE,qCAAqC,CAAC;CAChE;AAED,MAAM,WAAW,sCAAsC;IACrD,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,oCAAoC,EAAE,CAAC;IACnE,QAAQ,CAAC,KAAK,CAAC,EAAE,qBAAqB,CAAC;CACxC;AAED,MAAM,WAAW,oCAAoC;IACnD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,OAAO,CAAC,EAAE;QACjB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;KAC5B,CAAC;CACH;AAED,MAAM,WAAW,qBAAsB,SAAQ,UAAU;IACvD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,+BAA+B,GAAG,uBAAuB,CAgEhH"}
@@ -21,12 +21,18 @@ export function createOpenAICompatibleProvider(options) {
21
21
  return {
22
22
  id: providerId,
23
23
  async generate(request) {
24
- const response = await fetchImplementation(createURL(options), {
25
- method: "POST",
26
- headers: createHeaders(options),
27
- body: JSON.stringify(createBody(options, request)),
28
- ...(request.signal !== undefined ? { signal: request.signal } : {})
29
- });
24
+ let response;
25
+ try {
26
+ response = await fetchImplementation(createURL(options), {
27
+ method: "POST",
28
+ headers: createHeaders(options),
29
+ body: JSON.stringify(createBody(options, request)),
30
+ ...(request.signal !== undefined ? { signal: request.signal } : {})
31
+ });
32
+ }
33
+ catch (error) {
34
+ throw normalizeFetchError(error, providerId);
35
+ }
30
36
  const payload = await readJson(response, providerId);
31
37
  if (!response.ok) {
32
38
  throw createProviderError(response, payload, providerId);
@@ -244,7 +250,7 @@ function responseMetadata(response) {
244
250
  function createProviderError(response, payload, providerId) {
245
251
  return new DogpileError({
246
252
  code: codeForStatus(response.status),
247
- message: errorMessage(response, payload),
253
+ message: providerResponseErrorMessage(response, payload),
248
254
  retryable: response.status === 408 || response.status === 429 || response.status >= 500,
249
255
  providerId,
250
256
  detail: removeUndefined({
@@ -254,6 +260,29 @@ function createProviderError(response, payload, providerId) {
254
260
  })
255
261
  });
256
262
  }
263
+ function normalizeFetchError(error, providerId) {
264
+ if (DogpileError.isInstance(error)) {
265
+ return error;
266
+ }
267
+ if (errorName(error) === "AbortError") {
268
+ return new DogpileError({
269
+ code: "aborted",
270
+ message: providerTransportErrorMessage(error, "OpenAI-compatible provider request was aborted."),
271
+ cause: error,
272
+ retryable: false,
273
+ providerId,
274
+ detail: errorDetail(error)
275
+ });
276
+ }
277
+ return new DogpileError({
278
+ code: "provider-error",
279
+ message: providerTransportErrorMessage(error, "OpenAI-compatible provider request failed before receiving a response."),
280
+ cause: error,
281
+ retryable: true,
282
+ providerId,
283
+ detail: errorDetail(error)
284
+ });
285
+ }
257
286
  function codeForStatus(status) {
258
287
  if (status === 401 || status === 403) {
259
288
  return "provider-authentication";
@@ -275,12 +304,26 @@ function codeForStatus(status) {
275
304
  }
276
305
  return "provider-error";
277
306
  }
278
- function errorMessage(response, payload) {
307
+ function providerResponseErrorMessage(response, payload) {
279
308
  const providerMessage = isRecord(payload) && isRecord(payload.error) && typeof payload.error.message === "string"
280
309
  ? payload.error.message
281
310
  : undefined;
282
311
  return providerMessage ?? `OpenAI-compatible provider request failed with HTTP ${response.status}.`;
283
312
  }
313
+ function errorDetail(error) {
314
+ const detail = {};
315
+ const name = errorName(error);
316
+ if (name !== undefined) {
317
+ detail.name = name;
318
+ }
319
+ return detail;
320
+ }
321
+ function errorName(error) {
322
+ return isRecord(error) && typeof error.name === "string" ? error.name : undefined;
323
+ }
324
+ function providerTransportErrorMessage(error, fallback) {
325
+ return error instanceof Error && error.message ? error.message : fallback;
326
+ }
284
327
  function removeUndefined(values) {
285
328
  return Object.fromEntries(Object.entries(values).filter(([, value]) => value !== undefined));
286
329
  }
@@ -1 +1 @@
1
- {"version":3,"file":"openai-compatible.js","sourceRoot":"","sources":["../../src/providers/openai-compatible.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"openai-compatible.js","sourceRoot":"","sources":["../../src/providers/openai-compatible.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dogpile/sdk",
3
- "version": "0.1.2",
3
+ "version": "0.2.1",
4
4
  "description": "TypeScript SDK for running multi-agent LLM coordination protocols.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -121,7 +121,18 @@
121
121
  "src/types.ts",
122
122
  "src/browser/index.ts",
123
123
  "src/providers/openai-compatible.ts",
124
- "src/runtime/*.ts",
124
+ "src/runtime/broadcast.ts",
125
+ "src/runtime/cancellation.ts",
126
+ "src/runtime/coordinator.ts",
127
+ "src/runtime/decisions.ts",
128
+ "src/runtime/defaults.ts",
129
+ "src/runtime/engine.ts",
130
+ "src/runtime/model.ts",
131
+ "src/runtime/sequential.ts",
132
+ "src/runtime/shared.ts",
133
+ "src/runtime/termination.ts",
134
+ "src/runtime/tools.ts",
135
+ "src/runtime/validation.ts",
125
136
  "README.md",
126
137
  "CHANGELOG.md",
127
138
  "LICENSE"
@@ -137,6 +148,7 @@
137
148
  "quickstart:smoke": "node scripts/consumer-import-smoke.mjs",
138
149
  "package:identity": "node scripts/check-package-identity.mjs",
139
150
  "package:sourcemaps": "node scripts/check-pack-sourcemaps.mjs",
151
+ "benchmark:baseline": "pnpm run build && node scripts/benchmark-baseline.mjs",
140
152
  "pack:check": "pnpm run package:identity && pnpm run build && pnpm run package:artifacts && pnpm run quickstart:smoke -- --skip-build && pnpm run package:sourcemaps && npm pack --dry-run --cache ./.npm-cache",
141
153
  "publish:check": "pnpm run verify && pnpm run package:artifacts && npm publish --dry-run --cache ./.npm-cache",
142
154
  "test": "vitest run",
@@ -145,11 +157,11 @@
145
157
  "verify": "pnpm run package:identity && pnpm run build && pnpm run package:artifacts && pnpm run quickstart:smoke -- --skip-build && pnpm run typecheck && pnpm run test"
146
158
  },
147
159
  "devDependencies": {
148
- "@types/node": "^22.10.2",
149
- "ai": ">=5.0.0",
150
- "typescript": "^5.7.2",
151
- "vite": "^5.4.21",
152
- "vitest": "^2.1.8"
160
+ "@types/node": "^22.19.17",
161
+ "ai": "^6.0.168",
162
+ "typescript": "^6.0.3",
163
+ "vite": "^8.0.10",
164
+ "vitest": "^4.1.5"
153
165
  },
154
166
  "engines": {
155
167
  "node": ">=22"
@@ -86,12 +86,18 @@ export function createOpenAICompatibleProvider(options: OpenAICompatibleProvider
86
86
  return {
87
87
  id: providerId,
88
88
  async generate(request: ModelRequest): Promise<ModelResponse> {
89
- const response = await fetchImplementation(createURL(options), {
90
- method: "POST",
91
- headers: createHeaders(options),
92
- body: JSON.stringify(createBody(options, request)),
93
- ...(request.signal !== undefined ? { signal: request.signal } : {})
94
- });
89
+ let response: Response;
90
+
91
+ try {
92
+ response = await fetchImplementation(createURL(options), {
93
+ method: "POST",
94
+ headers: createHeaders(options),
95
+ body: JSON.stringify(createBody(options, request)),
96
+ ...(request.signal !== undefined ? { signal: request.signal } : {})
97
+ });
98
+ } catch (error) {
99
+ throw normalizeFetchError(error, providerId);
100
+ }
95
101
 
96
102
  const payload = await readJson(response, providerId);
97
103
 
@@ -337,7 +343,7 @@ function responseMetadata(response: OpenAICompatibleChatCompletionResponse): Jso
337
343
  function createProviderError(response: Response, payload: unknown, providerId: string): DogpileError {
338
344
  return new DogpileError({
339
345
  code: codeForStatus(response.status),
340
- message: errorMessage(response, payload),
346
+ message: providerResponseErrorMessage(response, payload),
341
347
  retryable: response.status === 408 || response.status === 429 || response.status >= 500,
342
348
  providerId,
343
349
  detail: removeUndefined({
@@ -348,6 +354,35 @@ function createProviderError(response: Response, payload: unknown, providerId: s
348
354
  });
349
355
  }
350
356
 
357
+ function normalizeFetchError(error: unknown, providerId: string): DogpileError {
358
+ if (DogpileError.isInstance(error)) {
359
+ return error;
360
+ }
361
+
362
+ if (errorName(error) === "AbortError") {
363
+ return new DogpileError({
364
+ code: "aborted",
365
+ message: providerTransportErrorMessage(error, "OpenAI-compatible provider request was aborted."),
366
+ cause: error,
367
+ retryable: false,
368
+ providerId,
369
+ detail: errorDetail(error)
370
+ });
371
+ }
372
+
373
+ return new DogpileError({
374
+ code: "provider-error",
375
+ message: providerTransportErrorMessage(
376
+ error,
377
+ "OpenAI-compatible provider request failed before receiving a response."
378
+ ),
379
+ cause: error,
380
+ retryable: true,
381
+ providerId,
382
+ detail: errorDetail(error)
383
+ });
384
+ }
385
+
351
386
  function codeForStatus(status: number): DogpileErrorCode {
352
387
  if (status === 401 || status === 403) {
353
388
  return "provider-authentication";
@@ -370,13 +405,32 @@ function codeForStatus(status: number): DogpileErrorCode {
370
405
  return "provider-error";
371
406
  }
372
407
 
373
- function errorMessage(response: Response, payload: unknown): string {
408
+ function providerResponseErrorMessage(response: Response, payload: unknown): string {
374
409
  const providerMessage = isRecord(payload) && isRecord(payload.error) && typeof payload.error.message === "string"
375
410
  ? payload.error.message
376
411
  : undefined;
377
412
  return providerMessage ?? `OpenAI-compatible provider request failed with HTTP ${response.status}.`;
378
413
  }
379
414
 
415
+ function errorDetail(error: unknown): JsonObject {
416
+ const detail: Record<string, JsonValue> = {};
417
+ const name = errorName(error);
418
+
419
+ if (name !== undefined) {
420
+ detail.name = name;
421
+ }
422
+
423
+ return detail;
424
+ }
425
+
426
+ function errorName(error: unknown): string | undefined {
427
+ return isRecord(error) && typeof error.name === "string" ? error.name : undefined;
428
+ }
429
+
430
+ function providerTransportErrorMessage(error: unknown, fallback: string): string {
431
+ return error instanceof Error && error.message ? error.message : fallback;
432
+ }
433
+
380
434
  function removeUndefined(values: Record<string, JsonValue | undefined>): JsonObject {
381
435
  return Object.fromEntries(Object.entries(values).filter(([, value]) => value !== undefined)) as JsonObject;
382
436
  }
@@ -1,355 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { createDeterministicBroadcastTestMission } from "../internal.js";
3
- import { run, runtimeToolManifest, stream } from "../index.js";
4
- import type {
5
- AgentSpec,
6
- ConfiguredModelProvider,
7
- JsonObject,
8
- ModelRequest,
9
- ModelResponse,
10
- RuntimeTool
11
- } from "../index.js";
12
-
13
- describe("broadcast protocol", () => {
14
- it("dispatches the mission to every configured seat and aggregates their responses", async () => {
15
- const intent = "Assess whether the benchmark release should ship today.";
16
- const agents: readonly AgentSpec[] = [
17
- {
18
- id: "seat-release",
19
- role: "release",
20
- instructions: "Focus on release blocking risk."
21
- },
22
- {
23
- id: "seat-eval",
24
- role: "evaluator",
25
- instructions: "Focus on reproduction evidence."
26
- },
27
- {
28
- id: "seat-api",
29
- role: "api",
30
- instructions: "Focus on caller ergonomics."
31
- },
32
- {
33
- id: "seat-runtime",
34
- role: "runtime",
35
- instructions: "Focus on portability."
36
- }
37
- ];
38
- const requests: ModelRequest[] = [];
39
- const model: ConfiguredModelProvider = {
40
- id: "capturing-broadcast-model",
41
- async generate(request: ModelRequest): Promise<ModelResponse> {
42
- requests.push(request);
43
- const agentId = String(request.metadata.agentId);
44
- const role = String(request.metadata.role);
45
- return {
46
- text: `${agentId}(${role}) saw the shared broadcast mission`,
47
- usage: {
48
- inputTokens: 7,
49
- outputTokens: 5,
50
- totalTokens: 12
51
- },
52
- costUsd: 0.001
53
- };
54
- }
55
- };
56
-
57
- const result = await run({
58
- intent,
59
- protocol: { kind: "broadcast", maxRounds: 1 },
60
- tier: "balanced",
61
- model,
62
- agents
63
- });
64
-
65
- expect(requests).toHaveLength(agents.length);
66
- for (const [index, agent] of agents.entries()) {
67
- const request = requests[index];
68
- if (!request) {
69
- throw new Error(`missing broadcast request for ${agent.id}`);
70
- }
71
- const userMessage = request.messages.find((message) => message.role === "user");
72
- const systemMessage = request.messages.find((message) => message.role === "system");
73
-
74
- expect(request.metadata).toMatchObject({
75
- protocol: "broadcast",
76
- agentId: agent.id,
77
- role: agent.role,
78
- tier: "balanced",
79
- round: 1
80
- });
81
- expect(userMessage?.content).toContain(intent);
82
- expect(userMessage?.content).toContain("Broadcast round 1");
83
- expect(systemMessage?.content).toContain(agent.id);
84
- expect(systemMessage?.content).toContain(agent.role);
85
- expect(systemMessage?.content).toContain(agent.instructions);
86
- }
87
-
88
- const expectedOutputs = agents.map(
89
- (agent) => `${agent.id}(${agent.role}) saw the shared broadcast mission`
90
- );
91
- expect(result.transcript.map((entry) => entry.output)).toEqual(expectedOutputs);
92
- expect(result.output).toBe(
93
- agents
94
- .map((agent, index) => `${agent.role}:${agent.id} => ${expectedOutputs[index]}`)
95
- .join("\n")
96
- );
97
-
98
- const broadcastEvent = result.trace.events.find((event) => event.type === "broadcast");
99
- expect(broadcastEvent?.type).toBe("broadcast");
100
- if (broadcastEvent?.type !== "broadcast") {
101
- throw new Error("expected broadcast event");
102
- }
103
- expect(broadcastEvent.contributions.map((contribution) => contribution.output)).toEqual(expectedOutputs);
104
- });
105
-
106
- it("feeds round-one intentions into round-two final broadcast decisions", async () => {
107
- const requests: ModelRequest[] = [];
108
- const model: ConfiguredModelProvider = {
109
- id: "two-round-broadcast-model",
110
- async generate(request) {
111
- requests.push(request);
112
- const round = Number(request.metadata.round);
113
- const agentId = String(request.metadata.agentId);
114
- const selectedRole = agentId === "agent-a" ? "upload supervisor" : "release verifier";
115
- if (round === 1) {
116
- return {
117
- text: [
118
- `role_selected: ${selectedRole}`,
119
- "participation: contribute",
120
- "rationale: I am broadcasting my intended specialization before final decisions.",
121
- "contribution:",
122
- `Intention from ${agentId}: cover ${selectedRole}.`
123
- ].join("\n")
124
- };
125
- }
126
-
127
- return {
128
- text: [
129
- `role_selected: ${selectedRole}`,
130
- "participation: contribute",
131
- "rationale: I saw the round one intentions and can now make a final contribution.",
132
- "contribution:",
133
- `Final contribution from ${agentId}.`
134
- ].join("\n")
135
- };
136
- }
137
- };
138
-
139
- const result = await run({
140
- intent: "Plan an upload manager.",
141
- protocol: { kind: "broadcast", maxRounds: 2 },
142
- tier: "fast",
143
- model,
144
- agents: [
145
- { id: "agent-a", role: "autonomous-agent" },
146
- { id: "agent-b", role: "autonomous-agent" }
147
- ]
148
- });
149
-
150
- expect(requests).toHaveLength(4);
151
- const roundTwoPrompts = requests.slice(2).map((request) => request.messages.find((message) => message.role === "user")?.content);
152
- expect(roundTwoPrompts[0]).toContain("Round 1 intentions:");
153
- expect(roundTwoPrompts[0]).toContain("Intention from agent-a");
154
- expect(roundTwoPrompts[0]).toContain("Intention from agent-b");
155
- expect(roundTwoPrompts[1]).toContain("Intention from agent-a");
156
- expect(roundTwoPrompts[1]).toContain("Intention from agent-b");
157
- expect(result.output).toContain("Final contribution from agent-a.");
158
- expect(result.output).toContain("Final contribution from agent-b.");
159
- expect(result.output).not.toContain("Intention from agent-a");
160
- expect(result.transcript).toHaveLength(4);
161
- expect(result.transcript[0]?.decision).toMatchObject({
162
- selectedRole: "upload supervisor",
163
- participation: "contribute"
164
- });
165
- const broadcastEvents = result.trace.events.filter((event) => event.type === "broadcast");
166
- expect(broadcastEvents).toHaveLength(2);
167
- expect(broadcastEvents[1]?.type).toBe("broadcast");
168
- if (broadcastEvents[1]?.type !== "broadcast") {
169
- throw new Error("expected second broadcast event");
170
- }
171
- expect(broadcastEvents[1].contributions.map((contribution) => contribution.output)).toEqual([
172
- [
173
- "role_selected: upload supervisor",
174
- "participation: contribute",
175
- "rationale: I saw the round one intentions and can now make a final contribution.",
176
- "contribution:",
177
- "Final contribution from agent-a."
178
- ].join("\n"),
179
- [
180
- "role_selected: release verifier",
181
- "participation: contribute",
182
- "rationale: I saw the round one intentions and can now make a final contribution.",
183
- "contribution:",
184
- "Final contribution from agent-b."
185
- ].join("\n")
186
- ]);
187
- });
188
-
189
- it("runs a deterministic test mission against a configured model provider", async () => {
190
- const result = await run(createDeterministicBroadcastTestMission());
191
- const expectedTranscript = [
192
- {
193
- agentId: "agent-1",
194
- role: "release-engineer",
195
- input:
196
- "Mission: Decide whether to ship a portable multi-agent SDK release candidate.\nBroadcast round 1: contribute independently before synthesis.",
197
- output: "release-engineer:agent-1 independently assessed the broadcast mission."
198
- },
199
- {
200
- agentId: "agent-2",
201
- role: "paper-reviewer",
202
- input:
203
- "Mission: Decide whether to ship a portable multi-agent SDK release candidate.\nBroadcast round 1: contribute independently before synthesis.",
204
- output: "paper-reviewer:agent-2 independently assessed the broadcast mission."
205
- },
206
- {
207
- agentId: "agent-3",
208
- role: "developer-advocate",
209
- input:
210
- "Mission: Decide whether to ship a portable multi-agent SDK release candidate.\nBroadcast round 1: contribute independently before synthesis.",
211
- output: "developer-advocate:agent-3 independently assessed the broadcast mission."
212
- }
213
- ] as const;
214
- const expectedOutput = expectedTranscript
215
- .map((entry) => `${entry.role}:${entry.agentId} => ${entry.output}`)
216
- .join("\n");
217
-
218
- expect(result.output).toBe(expectedOutput);
219
- expect(result.transcript).toEqual(expectedTranscript);
220
- expect(result.trace.transcript).toEqual(expectedTranscript);
221
- expect(result.trace.transcript).toEqual(result.transcript);
222
- expect(result.trace.protocol).toBe("broadcast");
223
- expect(result.trace.modelProviderId).toBe("deterministic-broadcast-model");
224
- expect(result.trace.events.map((event) => event.type)).toEqual([
225
- "role-assignment",
226
- "role-assignment",
227
- "role-assignment",
228
- "agent-turn",
229
- "agent-turn",
230
- "agent-turn",
231
- "broadcast",
232
- "final"
233
- ]);
234
- for (const event of result.trace.events) {
235
- expect(event.runId).toBe(result.trace.runId);
236
- expect(new Date(event.at).toISOString()).toBe(event.at);
237
- }
238
-
239
- const broadcastEvent = result.trace.events.find((event) => event.type === "broadcast");
240
- expect(broadcastEvent?.type).toBe("broadcast");
241
- if (broadcastEvent?.type !== "broadcast") {
242
- throw new Error("expected broadcast event");
243
- }
244
- expect(broadcastEvent.round).toBe(1);
245
- expect(broadcastEvent.contributions).toHaveLength(3);
246
- expect(broadcastEvent.contributions.map((contribution) => contribution.agentId)).toEqual([
247
- "agent-1",
248
- "agent-2",
249
- "agent-3"
250
- ]);
251
- expect(broadcastEvent.contributions).toEqual(
252
- expectedTranscript.map((entry) => ({
253
- agentId: entry.agentId,
254
- role: entry.role,
255
- output: entry.output
256
- }))
257
- );
258
- const finalEvent = result.trace.events.at(-1);
259
- expect(finalEvent?.type).toBe("final");
260
- if (finalEvent?.type !== "final") {
261
- throw new Error("expected final event");
262
- }
263
- expect(finalEvent.output).toBe(expectedOutput);
264
- expect(finalEvent.cost).toEqual(result.cost);
265
- expect(JSON.parse(JSON.stringify(result.trace))).toEqual(result.trace);
266
- expect(result.cost.totalTokens).toBeGreaterThan(0);
267
- });
268
-
269
- it("streams broadcast coordination moments before resolving the final result", async () => {
270
- const handle = stream(createDeterministicBroadcastTestMission());
271
-
272
- const events: string[] = [];
273
- for await (const event of handle) {
274
- events.push(event.type);
275
- }
276
- const result = await handle.result;
277
-
278
- expect(events).toEqual([
279
- "role-assignment",
280
- "role-assignment",
281
- "role-assignment",
282
- "agent-turn",
283
- "agent-turn",
284
- "agent-turn",
285
- "broadcast",
286
- "final"
287
- ]);
288
- expect(result.output).toContain("developer-advocate:agent-3");
289
- });
290
-
291
- it("threads runtime tool availability through every broadcast model turn", async () => {
292
- interface LookupInput extends JsonObject {
293
- readonly query: string;
294
- }
295
-
296
- interface LookupOutput extends JsonObject {
297
- readonly answer: string;
298
- }
299
-
300
- const requests: ModelRequest[] = [];
301
- const lookupTool: RuntimeTool<LookupInput, LookupOutput> = {
302
- identity: {
303
- id: "fixture.lookup",
304
- name: "lookup",
305
- description: "Lookup contextual facts for the active mission."
306
- },
307
- inputSchema: {
308
- kind: "json-schema",
309
- schema: {
310
- type: "object",
311
- properties: {
312
- query: { type: "string" }
313
- },
314
- required: ["query"],
315
- additionalProperties: false
316
- }
317
- },
318
- execute(input, context) {
319
- return {
320
- type: "success",
321
- toolCallId: context.toolCallId,
322
- tool: this.identity,
323
- output: {
324
- answer: `found:${input.query}`
325
- }
326
- };
327
- }
328
- };
329
- const model: ConfiguredModelProvider = {
330
- id: "broadcast-tool-availability-model",
331
- async generate(request) {
332
- requests.push(request);
333
- return { text: `turn-${requests.length}` };
334
- }
335
- };
336
-
337
- await run({
338
- intent: "Use available tools while independently assessing a release.",
339
- protocol: { kind: "broadcast", maxRounds: 1 },
340
- tier: "fast",
341
- model,
342
- agents: [
343
- { id: "release-seat", role: "release" },
344
- { id: "eval-seat", role: "evaluator" }
345
- ],
346
- tools: [lookupTool]
347
- });
348
-
349
- expect(requests).toHaveLength(2);
350
- expect(requests.map((request) => request.metadata.tools)).toEqual([
351
- runtimeToolManifest([lookupTool]),
352
- runtimeToolManifest([lookupTool])
353
- ]);
354
- });
355
- });