@dogpile/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 (88) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/LICENSE +16 -0
  3. package/README.md +842 -0
  4. package/dist/browser/index.d.ts +8 -0
  5. package/dist/browser/index.d.ts.map +1 -0
  6. package/dist/browser/index.js +4493 -0
  7. package/dist/browser/index.js.map +1 -0
  8. package/dist/index.d.ts +17 -0
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/index.js +14 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/providers/openai-compatible.d.ts +44 -0
  13. package/dist/providers/openai-compatible.d.ts.map +1 -0
  14. package/dist/providers/openai-compatible.js +305 -0
  15. package/dist/providers/openai-compatible.js.map +1 -0
  16. package/dist/runtime/broadcast.d.ts +18 -0
  17. package/dist/runtime/broadcast.d.ts.map +1 -0
  18. package/dist/runtime/broadcast.js +335 -0
  19. package/dist/runtime/broadcast.js.map +1 -0
  20. package/dist/runtime/cancellation.d.ts +6 -0
  21. package/dist/runtime/cancellation.d.ts.map +1 -0
  22. package/dist/runtime/cancellation.js +35 -0
  23. package/dist/runtime/cancellation.js.map +1 -0
  24. package/dist/runtime/coordinator.d.ts +18 -0
  25. package/dist/runtime/coordinator.d.ts.map +1 -0
  26. package/dist/runtime/coordinator.js +434 -0
  27. package/dist/runtime/coordinator.js.map +1 -0
  28. package/dist/runtime/decisions.d.ts +5 -0
  29. package/dist/runtime/decisions.d.ts.map +1 -0
  30. package/dist/runtime/decisions.js +31 -0
  31. package/dist/runtime/decisions.js.map +1 -0
  32. package/dist/runtime/defaults.d.ts +63 -0
  33. package/dist/runtime/defaults.d.ts.map +1 -0
  34. package/dist/runtime/defaults.js +426 -0
  35. package/dist/runtime/defaults.js.map +1 -0
  36. package/dist/runtime/engine.d.ts +79 -0
  37. package/dist/runtime/engine.d.ts.map +1 -0
  38. package/dist/runtime/engine.js +723 -0
  39. package/dist/runtime/engine.js.map +1 -0
  40. package/dist/runtime/model.d.ts +14 -0
  41. package/dist/runtime/model.d.ts.map +1 -0
  42. package/dist/runtime/model.js +82 -0
  43. package/dist/runtime/model.js.map +1 -0
  44. package/dist/runtime/sequential.d.ts +18 -0
  45. package/dist/runtime/sequential.d.ts.map +1 -0
  46. package/dist/runtime/sequential.js +277 -0
  47. package/dist/runtime/sequential.js.map +1 -0
  48. package/dist/runtime/shared.d.ts +18 -0
  49. package/dist/runtime/shared.d.ts.map +1 -0
  50. package/dist/runtime/shared.js +288 -0
  51. package/dist/runtime/shared.js.map +1 -0
  52. package/dist/runtime/termination.d.ts +77 -0
  53. package/dist/runtime/termination.d.ts.map +1 -0
  54. package/dist/runtime/termination.js +355 -0
  55. package/dist/runtime/termination.js.map +1 -0
  56. package/dist/runtime/tools.d.ts +314 -0
  57. package/dist/runtime/tools.d.ts.map +1 -0
  58. package/dist/runtime/tools.js +969 -0
  59. package/dist/runtime/tools.js.map +1 -0
  60. package/dist/runtime/validation.d.ts +23 -0
  61. package/dist/runtime/validation.d.ts.map +1 -0
  62. package/dist/runtime/validation.js +656 -0
  63. package/dist/runtime/validation.js.map +1 -0
  64. package/dist/types.d.ts +2434 -0
  65. package/dist/types.d.ts.map +1 -0
  66. package/dist/types.js +81 -0
  67. package/dist/types.js.map +1 -0
  68. package/package.json +157 -0
  69. package/src/browser/index.ts +7 -0
  70. package/src/index.ts +195 -0
  71. package/src/providers/openai-compatible.ts +406 -0
  72. package/src/runtime/broadcast.test.ts +355 -0
  73. package/src/runtime/broadcast.ts +428 -0
  74. package/src/runtime/cancellation.ts +40 -0
  75. package/src/runtime/coordinator.test.ts +468 -0
  76. package/src/runtime/coordinator.ts +581 -0
  77. package/src/runtime/decisions.ts +38 -0
  78. package/src/runtime/defaults.ts +547 -0
  79. package/src/runtime/engine.ts +880 -0
  80. package/src/runtime/model.ts +117 -0
  81. package/src/runtime/sequential.test.ts +262 -0
  82. package/src/runtime/sequential.ts +357 -0
  83. package/src/runtime/shared.test.ts +265 -0
  84. package/src/runtime/shared.ts +367 -0
  85. package/src/runtime/termination.ts +463 -0
  86. package/src/runtime/tools.ts +1518 -0
  87. package/src/runtime/validation.ts +771 -0
  88. package/src/types.ts +2729 -0
@@ -0,0 +1,288 @@
1
+ import { addCost, createReplayTraceBudget, createReplayTraceBudgetStateChanges, createReplayTraceFinalOutput, createReplayTraceProtocolDecision, createReplayTraceRunInputs, createReplayTraceSeed, createRunAccounting, createRunEventLog, createRunMetadata, createRunUsage, createTranscriptLink, emptyCost } from "./defaults.js";
2
+ import { throwIfAborted } from "./cancellation.js";
3
+ import { parseAgentDecision } from "./decisions.js";
4
+ import { generateModelTurn } from "./model.js";
5
+ import { evaluateTerminationStop } from "./termination.js";
6
+ import { createRuntimeToolExecutor, executeModelResponseToolRequests, runtimeToolAvailability } from "./tools.js";
7
+ export async function runShared(options) {
8
+ const runId = createRunId();
9
+ const events = [];
10
+ const transcript = [];
11
+ const protocolDecisions = [];
12
+ const providerCalls = [];
13
+ let totalCost = emptyCost();
14
+ const sharedState = options.protocol.organizationalMemory ?? "";
15
+ const maxTurns = options.protocol.maxTurns ?? options.agents.length;
16
+ const activeAgents = options.agents.slice(0, maxTurns);
17
+ const startedAtMs = nowMs();
18
+ let stopped = false;
19
+ let termination;
20
+ const emit = (event) => {
21
+ events.push(event);
22
+ options.emit?.(event);
23
+ };
24
+ const recordProtocolDecision = (event, decisionOptions) => {
25
+ protocolDecisions.push(createReplayTraceProtocolDecision("shared", event, events.length - 1, decisionOptions));
26
+ };
27
+ const toolExecutor = createRuntimeToolExecutor({
28
+ runId,
29
+ protocol: "shared",
30
+ tier: options.tier,
31
+ tools: options.tools,
32
+ emit(event) {
33
+ emit(event);
34
+ recordProtocolDecision(event);
35
+ },
36
+ getTrace: () => ({ events, transcript }),
37
+ ...(options.signal !== undefined ? { abortSignal: options.signal } : {})
38
+ });
39
+ const toolAvailability = runtimeToolAvailability(toolExecutor.tools);
40
+ throwIfAborted(options.signal, options.model.id);
41
+ for (const agent of activeAgents) {
42
+ const event = {
43
+ type: "role-assignment",
44
+ runId,
45
+ at: new Date().toISOString(),
46
+ agentId: agent.id,
47
+ role: agent.role
48
+ };
49
+ emit(event);
50
+ recordProtocolDecision(event);
51
+ }
52
+ if (!stopIfNeeded()) {
53
+ const providerCallSlots = [];
54
+ const turnResults = await Promise.all(activeAgents.map(async (agent, index) => {
55
+ const turn = index + 1;
56
+ const input = buildSharedInput(options.intent, sharedState, turn);
57
+ const request = {
58
+ temperature: options.temperature,
59
+ ...(options.signal !== undefined ? { signal: options.signal } : {}),
60
+ metadata: {
61
+ runId,
62
+ protocol: "shared",
63
+ agentId: agent.id,
64
+ role: agent.role,
65
+ tier: options.tier,
66
+ turn,
67
+ ...toolAvailability
68
+ },
69
+ messages: [
70
+ {
71
+ role: "system",
72
+ content: buildSystemPrompt(agent)
73
+ },
74
+ {
75
+ role: "user",
76
+ content: input
77
+ }
78
+ ]
79
+ };
80
+ const response = await generateModelTurn({
81
+ model: options.model,
82
+ request,
83
+ runId,
84
+ agent,
85
+ input,
86
+ emit,
87
+ callId: providerCallIdFor(runId, providerCalls.length + index + 1),
88
+ onProviderCall(call) {
89
+ providerCallSlots[index] = call;
90
+ }
91
+ });
92
+ const decision = parseAgentDecision(response.text);
93
+ const toolCalls = await executeModelResponseToolRequests({
94
+ response,
95
+ executor: toolExecutor,
96
+ agentId: agent.id,
97
+ role: agent.role,
98
+ turn
99
+ });
100
+ throwIfAborted(options.signal, options.model.id);
101
+ return {
102
+ agent,
103
+ turn,
104
+ input,
105
+ response,
106
+ decision,
107
+ toolCalls,
108
+ turnCost: responseCost(response)
109
+ };
110
+ }));
111
+ providerCalls.push(...providerCallSlots.filter((call) => call !== undefined));
112
+ for (const result of turnResults) {
113
+ totalCost = addCost(totalCost, result.turnCost);
114
+ transcript.push({
115
+ agentId: result.agent.id,
116
+ role: result.agent.role,
117
+ input: result.input,
118
+ output: result.response.text,
119
+ ...(result.decision !== undefined ? { decision: result.decision } : {}),
120
+ ...(result.toolCalls.length > 0 ? { toolCalls: result.toolCalls } : {})
121
+ });
122
+ const event = {
123
+ type: "agent-turn",
124
+ runId,
125
+ at: new Date().toISOString(),
126
+ agentId: result.agent.id,
127
+ role: result.agent.role,
128
+ input: result.input,
129
+ output: result.response.text,
130
+ ...(result.decision !== undefined ? { decision: result.decision } : {}),
131
+ cost: totalCost
132
+ };
133
+ emit(event);
134
+ recordProtocolDecision(event, {
135
+ turn: result.turn,
136
+ transcriptEntryCount: transcript.length
137
+ });
138
+ }
139
+ stopIfNeeded();
140
+ }
141
+ const output = synthesizeSharedOutput(transcript);
142
+ throwIfAborted(options.signal, options.model.id);
143
+ const final = {
144
+ type: "final",
145
+ runId,
146
+ at: new Date().toISOString(),
147
+ output,
148
+ cost: totalCost,
149
+ transcript: createTranscriptLink(transcript),
150
+ ...(termination !== undefined ? { termination } : {})
151
+ };
152
+ emit(final);
153
+ recordProtocolDecision(final, {
154
+ transcriptEntryCount: transcript.length
155
+ });
156
+ const finalEvent = events.at(-1);
157
+ return {
158
+ output,
159
+ eventLog: createRunEventLog(runId, "shared", events),
160
+ trace: {
161
+ schemaVersion: "1.0",
162
+ runId,
163
+ protocol: "shared",
164
+ tier: options.tier,
165
+ modelProviderId: options.model.id,
166
+ agentsUsed: activeAgents,
167
+ inputs: createReplayTraceRunInputs({
168
+ intent: options.intent,
169
+ protocol: options.protocol,
170
+ tier: options.tier,
171
+ modelProviderId: options.model.id,
172
+ agents: activeAgents,
173
+ temperature: options.temperature
174
+ }),
175
+ budget: createReplayTraceBudget({
176
+ tier: options.tier,
177
+ ...(options.budget ? { caps: options.budget } : {}),
178
+ ...(options.terminate ? { termination: options.terminate } : {})
179
+ }),
180
+ budgetStateChanges: createReplayTraceBudgetStateChanges(events),
181
+ seed: createReplayTraceSeed(options.seed),
182
+ protocolDecisions,
183
+ providerCalls,
184
+ finalOutput: createReplayTraceFinalOutput(output, finalEvent ?? {
185
+ type: "final",
186
+ runId,
187
+ at: "",
188
+ output,
189
+ cost: totalCost,
190
+ transcript: createTranscriptLink(transcript)
191
+ }),
192
+ events,
193
+ transcript
194
+ },
195
+ transcript,
196
+ usage: createRunUsage(totalCost),
197
+ metadata: createRunMetadata({
198
+ runId,
199
+ protocol: "shared",
200
+ tier: options.tier,
201
+ modelProviderId: options.model.id,
202
+ agentsUsed: activeAgents,
203
+ events
204
+ }),
205
+ accounting: createRunAccounting({
206
+ tier: options.tier,
207
+ ...(options.budget ? { budget: options.budget } : {}),
208
+ ...(options.terminate ? { termination: options.terminate } : {}),
209
+ cost: totalCost,
210
+ events
211
+ }),
212
+ cost: totalCost
213
+ };
214
+ function stopIfNeeded() {
215
+ throwIfAborted(options.signal, options.model.id);
216
+ if (stopped || !options.terminate) {
217
+ return stopped;
218
+ }
219
+ const stopRecord = evaluateTerminationStop(options.terminate, {
220
+ runId,
221
+ protocol: "shared",
222
+ tier: options.tier,
223
+ cost: totalCost,
224
+ events,
225
+ transcript,
226
+ iteration: transcript.length,
227
+ elapsedMs: elapsedMs(startedAtMs)
228
+ });
229
+ if (!stopRecord) {
230
+ return false;
231
+ }
232
+ stopped = true;
233
+ termination = stopRecord;
234
+ if (stopRecord.reason === "budget") {
235
+ emitBudgetStop(stopRecord);
236
+ }
237
+ return true;
238
+ }
239
+ function emitBudgetStop(record) {
240
+ const event = {
241
+ type: "budget-stop",
242
+ runId,
243
+ at: new Date().toISOString(),
244
+ reason: record.budgetReason ?? "cost",
245
+ cost: totalCost,
246
+ iteration: transcript.length,
247
+ elapsedMs: elapsedMs(startedAtMs),
248
+ detail: record.detail ?? {}
249
+ };
250
+ emit(event);
251
+ recordProtocolDecision(event, {
252
+ transcriptEntryCount: transcript.length
253
+ });
254
+ }
255
+ }
256
+ function buildSystemPrompt(agent) {
257
+ const instruction = agent.instructions ? `\nInstructions: ${agent.instructions}` : "";
258
+ return `You are ${agent.id}, acting as ${agent.role} in a Shared multi-agent protocol. Read the shared state, update it with your best contribution, and preserve useful prior work.${instruction}`;
259
+ }
260
+ function buildSharedInput(intent, sharedState, turn) {
261
+ const state = sharedState ? sharedState : "(empty)";
262
+ return `Mission: ${intent}\nShared turn ${turn}: read the shared state and return an improved shared-state update.\n\nShared state:\n${state}`;
263
+ }
264
+ function synthesizeSharedOutput(transcript) {
265
+ return transcript.map((entry) => `${entry.role}:${entry.agentId} => ${entry.output}`).join("\n");
266
+ }
267
+ function responseCost(response) {
268
+ return {
269
+ usd: response.costUsd ?? 0,
270
+ inputTokens: response.usage?.inputTokens ?? 0,
271
+ outputTokens: response.usage?.outputTokens ?? 0,
272
+ totalTokens: response.usage?.totalTokens ?? 0
273
+ };
274
+ }
275
+ function createRunId() {
276
+ const random = globalThis.crypto?.randomUUID?.();
277
+ return random ?? `run-${Date.now().toString(36)}`;
278
+ }
279
+ function nowMs() {
280
+ return globalThis.performance?.now() ?? Date.now();
281
+ }
282
+ function elapsedMs(startedAtMs) {
283
+ return Math.max(0, nowMs() - startedAtMs);
284
+ }
285
+ function providerCallIdFor(runId, oneBasedIndex) {
286
+ return `${runId}:provider-call:${oneBasedIndex}`;
287
+ }
288
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/runtime/shared.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ import type { BudgetTerminationCondition, ConvergenceTerminationCondition, FirstOfTerminationCondition, FirstOfTerminationConditions, FirstOfTerminationOutput, JudgeTerminationCondition, TerminationStopRecord, TerminationCondition, TerminationDecision, TerminationEvaluationContext } from "../types.js";
2
+ /**
3
+ * Create a budget termination condition.
4
+ *
5
+ * The returned object is JSON-serializable and can be used directly in
6
+ * `terminate` or composed with {@link firstOf}.
7
+ */
8
+ export declare function budget(options: Omit<BudgetTerminationCondition, "kind">): BudgetTerminationCondition;
9
+ /**
10
+ * Create a convergence termination condition.
11
+ *
12
+ * The condition fires when the run has produced `stableTurns` sufficiently
13
+ * similar protocol outputs.
14
+ */
15
+ export declare function convergence(options: Omit<ConvergenceTerminationCondition, "kind">): ConvergenceTerminationCondition;
16
+ /**
17
+ * Create a judge termination condition.
18
+ *
19
+ * The rubric is stored as serializable configuration so callers can replay or
20
+ * persist traces without SDK-owned state.
21
+ */
22
+ export declare function judge(options: Omit<JudgeTerminationCondition, "kind">): JudgeTerminationCondition;
23
+ /**
24
+ * Compose termination conditions so whichever child fires first wins.
25
+ *
26
+ * Conditions are evaluated in the order supplied by the caller. At least one
27
+ * condition is required so the composite is always meaningful and the public
28
+ * type remains a non-empty tuple.
29
+ */
30
+ export declare function firstOf(...conditions: FirstOfTerminationConditions): FirstOfTerminationCondition;
31
+ /**
32
+ * Evaluate a serializable termination condition against the current run state.
33
+ *
34
+ * Budget, convergence, judge, and firstOf conditions are enforced from their
35
+ * own normalized inputs so one stop class cannot accidentally satisfy another.
36
+ */
37
+ export declare function evaluateTermination(condition: TerminationCondition, context: TerminationEvaluationContext): TerminationDecision;
38
+ /**
39
+ * Evaluate an ordered firstOf composition and return the winning child, if any.
40
+ */
41
+ export declare function evaluateFirstOf(condition: FirstOfTerminationCondition, context: TerminationEvaluationContext): FirstOfTerminationOutput;
42
+ /**
43
+ * Evaluate a termination condition and return a trace-ready stop record.
44
+ *
45
+ * Protocol runners use this helper so the first policy decision that halts a
46
+ * run is recorded exactly once on the terminal event.
47
+ */
48
+ export declare function evaluateTerminationStop(condition: TerminationCondition, context: TerminationEvaluationContext): TerminationStopRecord | null;
49
+ /**
50
+ * Combine independently evaluated termination decisions with SDK precedence.
51
+ *
52
+ * Budget caps win over judge decisions, and judge decisions win over
53
+ * convergence. This keeps simultaneous stops deterministic while preserving
54
+ * each evaluator's normalized stop reason on the returned decision.
55
+ */
56
+ export declare function combineTerminationDecisions(decisions: readonly TerminationDecision[]): TerminationDecision;
57
+ /**
58
+ * Evaluate cost, token, iteration, and timeout caps for a budget condition.
59
+ */
60
+ export declare function evaluateBudget(condition: BudgetTerminationCondition, context: TerminationEvaluationContext): TerminationDecision;
61
+ /**
62
+ * Evaluate protocol-level convergence from recent coordination outputs.
63
+ *
64
+ * This intentionally ignores budget caps and judge quality state. Budget and
65
+ * judge conditions can be composed with convergence through `firstOf`, but a
66
+ * convergence condition itself only reads protocol output signals.
67
+ */
68
+ export declare function evaluateConvergence(condition: ConvergenceTerminationCondition, context: TerminationEvaluationContext): TerminationDecision;
69
+ /**
70
+ * Evaluate caller-owned judge state without reading budget or convergence data.
71
+ *
72
+ * Explicit accept/reject verdicts always halt. Score-only decisions halt when
73
+ * they meet `minScore`; when `minScore` is omitted, any score-only decision is
74
+ * treated as the judge's terminal decision.
75
+ */
76
+ export declare function evaluateJudge(condition: JudgeTerminationCondition, context: TerminationEvaluationContext): TerminationDecision;
77
+ //# sourceMappingURL=termination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"termination.d.ts","sourceRoot":"","sources":["../../src/runtime/termination.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,0BAA0B,EAC1B,+BAA+B,EAC/B,2BAA2B,EAC3B,4BAA4B,EAC5B,wBAAwB,EAGxB,yBAAyB,EAGzB,qBAAqB,EAErB,oBAAoB,EACpB,mBAAmB,EACnB,4BAA4B,EAE7B,MAAM,aAAa,CAAC;AAErB;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,0BAA0B,EAAE,MAAM,CAAC,GAAG,0BAA0B,CAKpG;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,+BAA+B,EAAE,MAAM,CAAC,GAAG,+BAA+B,CAKnH;AAED;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,yBAAyB,EAAE,MAAM,CAAC,GAAG,yBAAyB,CAKjG;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,GAAG,UAAU,EAAE,4BAA4B,GAAG,2BAA2B,CAShG;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,oBAAoB,EAC/B,OAAO,EAAE,4BAA4B,GACpC,mBAAmB,CAWrB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,2BAA2B,EACtC,OAAO,EAAE,4BAA4B,GACpC,wBAAwB,CAuB1B;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,oBAAoB,EAC/B,OAAO,EAAE,4BAA4B,GACpC,qBAAqB,GAAG,IAAI,CA2B9B;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,SAAS,mBAAmB,EAAE,GACxC,mBAAmB,CAcrB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,0BAA0B,EACrC,OAAO,EAAE,4BAA4B,GACpC,mBAAmB,CAyBrB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,+BAA+B,EAC1C,OAAO,EAAE,4BAA4B,GACpC,mBAAmB,CA4BrB;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,yBAAyB,EACpC,OAAO,EAAE,4BAA4B,GACpC,mBAAmB,CAoBrB"}