@rudderjs/ai 1.12.0 → 1.14.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.
- package/dist/agent-run-store.d.ts +161 -0
- package/dist/agent-run-store.d.ts.map +1 -0
- package/dist/agent-run-store.js +98 -0
- package/dist/agent-run-store.js.map +1 -0
- package/dist/agent-sse.d.ts +149 -0
- package/dist/agent-sse.d.ts.map +1 -0
- package/dist/agent-sse.js +280 -0
- package/dist/agent-sse.js.map +1 -0
- package/dist/agent.d.ts +58 -8
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +26 -1
- package/dist/agent.js.map +1 -1
- package/dist/conversation-orm/index.d.ts.map +1 -1
- package/dist/conversation-orm/index.js +5 -1
- package/dist/conversation-orm/index.js.map +1 -1
- package/dist/gateway/http-gateway-adapter.d.ts +94 -0
- package/dist/gateway/http-gateway-adapter.d.ts.map +1 -0
- package/dist/gateway/http-gateway-adapter.js +106 -0
- package/dist/gateway/http-gateway-adapter.js.map +1 -0
- package/dist/gateway/index.d.ts +11 -0
- package/dist/gateway/index.d.ts.map +1 -0
- package/dist/gateway/index.js +11 -0
- package/dist/gateway/index.js.map +1 -0
- package/dist/gateway/sse.d.ts +28 -0
- package/dist/gateway/sse.d.ts.map +1 -0
- package/dist/gateway/sse.js +78 -0
- package/dist/gateway/sse.js.map +1 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/sanitize-conversation.d.ts +43 -0
- package/dist/sanitize-conversation.d.ts.map +1 -0
- package/dist/sanitize-conversation.js +85 -0
- package/dist/sanitize-conversation.js.map +1 -0
- package/package.json +5 -1
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Named-event SSE protocol for streaming an agent loop to a browser.
|
|
3
|
+
*
|
|
4
|
+
* `@rudderjs/ai` already ships the Vercel AI SDK data-stream protocol
|
|
5
|
+
* ({@link toVercelDataStream}) - the numeric-prefix wire (`0:` / `9:` / `a:`
|
|
6
|
+
* ...). This is the alternative for apps that want a plain
|
|
7
|
+
* `text/event-stream` with self-describing event names that mirror the agent
|
|
8
|
+
* loop's own lifecycle (`text`, `tool_call`, `tool_update`, `tool_result`,
|
|
9
|
+
* `pending_client_tools`, `tool_approval_required`, `handoff`, `complete`,
|
|
10
|
+
* `error`).
|
|
11
|
+
*
|
|
12
|
+
* Both ends live here so the wire vocabulary can never drift:
|
|
13
|
+
*
|
|
14
|
+
* - Server: {@link toAgentSseStream} / {@link toAgentSseResponse} project an
|
|
15
|
+
* `agent.stream()` result onto the named events and frame them as SSE.
|
|
16
|
+
* - Browser: {@link readAgentStream} decodes the same events back into an
|
|
17
|
+
* {@link AgentStreamTurn} and fires per-event callbacks for UI side effects.
|
|
18
|
+
* {@link applyAgentSseEvent} is exposed so the per-event reducer can be
|
|
19
|
+
* unit-tested against a synthetic turn.
|
|
20
|
+
*
|
|
21
|
+
* Runtime-agnostic: uses only web globals (`ReadableStream`, `Response`,
|
|
22
|
+
* `TextEncoder` / `TextDecoder`, `crypto.randomUUID`), no `node:` imports, so
|
|
23
|
+
* the module is safe in the main entry and runs server-side (Node / edge) and
|
|
24
|
+
* client-side alike.
|
|
25
|
+
*
|
|
26
|
+
* This ships the framework-generic core. App-specific events (conversation
|
|
27
|
+
* ids, billing, sub-run fan-out bookkeeping, server-authoritative history
|
|
28
|
+
* sync) are not part of it - emit and decode those alongside this protocol on
|
|
29
|
+
* your own channel.
|
|
30
|
+
*/
|
|
31
|
+
// ─── Server: project a stream onto SSE ────────────────────
|
|
32
|
+
/** Map a finish reason to the pause it represents, if any. */
|
|
33
|
+
function awaitingFor(reason) {
|
|
34
|
+
if (reason === 'client_tool_calls')
|
|
35
|
+
return 'client_tools';
|
|
36
|
+
if (reason === 'tool_approval_required')
|
|
37
|
+
return 'approval';
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
function frame(event, data) {
|
|
41
|
+
return `event: ${event}\ndata: ${JSON.stringify(data)}\n\n`;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Project an `agent.stream()` result onto the named-event SSE wire as a
|
|
45
|
+
* `ReadableStream<Uint8Array>`.
|
|
46
|
+
*
|
|
47
|
+
* Iterates the chunk stream, emits one named event per loop chunk, then
|
|
48
|
+
* awaits the `response` promise and emits a terminal `complete` event
|
|
49
|
+
* carrying `done`, `finishReason`, the `awaiting` pause (if any), step count,
|
|
50
|
+
* and usage. If iteration or the response throws, an `error` event is emitted
|
|
51
|
+
* and the stream closes cleanly so the browser reader's `onError` fires.
|
|
52
|
+
*/
|
|
53
|
+
export function toAgentSseStream(streaming) {
|
|
54
|
+
const { stream, response } = streaming;
|
|
55
|
+
const encoder = new TextEncoder();
|
|
56
|
+
return new ReadableStream({
|
|
57
|
+
async start(controller) {
|
|
58
|
+
const emit = (event, data) => controller.enqueue(encoder.encode(frame(event, data)));
|
|
59
|
+
try {
|
|
60
|
+
for await (const chunk of stream) {
|
|
61
|
+
emitChunk(chunk, emit);
|
|
62
|
+
}
|
|
63
|
+
const res = await response;
|
|
64
|
+
const awaiting = awaitingFor(res.finishReason);
|
|
65
|
+
const complete = {
|
|
66
|
+
done: true,
|
|
67
|
+
steps: res.steps.length,
|
|
68
|
+
usage: res.usage,
|
|
69
|
+
};
|
|
70
|
+
if (res.finishReason)
|
|
71
|
+
complete.finishReason = res.finishReason;
|
|
72
|
+
if (awaiting)
|
|
73
|
+
complete.awaiting = awaiting;
|
|
74
|
+
emit('complete', complete);
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
78
|
+
emit('error', { message });
|
|
79
|
+
}
|
|
80
|
+
finally {
|
|
81
|
+
controller.close();
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
function emitChunk(chunk, emit) {
|
|
87
|
+
switch (chunk.type) {
|
|
88
|
+
case 'text-delta':
|
|
89
|
+
if (chunk.text)
|
|
90
|
+
emit('text', { text: chunk.text });
|
|
91
|
+
return;
|
|
92
|
+
case 'tool-call':
|
|
93
|
+
emit('tool_call', {
|
|
94
|
+
...(chunk.toolCall?.id ? { id: chunk.toolCall.id } : {}),
|
|
95
|
+
tool: chunk.toolCall?.name ?? '',
|
|
96
|
+
input: chunk.toolCall?.arguments ?? {},
|
|
97
|
+
});
|
|
98
|
+
return;
|
|
99
|
+
case 'tool-update':
|
|
100
|
+
emit('tool_update', {
|
|
101
|
+
...(chunk.toolCall?.id ? { id: chunk.toolCall.id } : {}),
|
|
102
|
+
...(chunk.toolCall?.name ? { tool: chunk.toolCall.name } : {}),
|
|
103
|
+
update: chunk.update,
|
|
104
|
+
});
|
|
105
|
+
return;
|
|
106
|
+
case 'tool-result': {
|
|
107
|
+
const id = chunk.toolCall?.id;
|
|
108
|
+
emit('tool_result', {
|
|
109
|
+
...(id ? { id, toolCallId: id } : {}),
|
|
110
|
+
...(chunk.toolCall?.name ? { tool: chunk.toolCall.name } : {}),
|
|
111
|
+
content: typeof chunk.result === 'string' ? chunk.result : JSON.stringify(chunk.result),
|
|
112
|
+
});
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
case 'pending-client-tools':
|
|
116
|
+
emit('pending_client_tools', { toolCalls: chunk.toolCalls ?? [] });
|
|
117
|
+
return;
|
|
118
|
+
case 'pending-approval':
|
|
119
|
+
if (chunk.toolCall) {
|
|
120
|
+
emit('tool_approval_required', {
|
|
121
|
+
toolCall: chunk.toolCall,
|
|
122
|
+
isClientTool: chunk.isClientTool ?? false,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
return;
|
|
126
|
+
case 'handoff':
|
|
127
|
+
if (chunk.handoff)
|
|
128
|
+
emit('handoff', chunk.handoff);
|
|
129
|
+
return;
|
|
130
|
+
// 'tool-call-delta' | 'usage' | 'finish' carry no named event - the
|
|
131
|
+
// terminal `complete` event reports finish reason + usage from the
|
|
132
|
+
// resolved AgentResponse.
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Wrap {@link toAgentSseStream} in a `Response` with the standard
|
|
137
|
+
* `text/event-stream` headers (no caching, no proxy buffering). Return it
|
|
138
|
+
* directly from a route handler.
|
|
139
|
+
*/
|
|
140
|
+
export function toAgentSseResponse(streaming, init) {
|
|
141
|
+
const headers = new Headers(init?.headers);
|
|
142
|
+
headers.set('Content-Type', 'text/event-stream; charset=utf-8');
|
|
143
|
+
headers.set('Cache-Control', 'no-cache, no-transform');
|
|
144
|
+
headers.set('Connection', 'keep-alive');
|
|
145
|
+
// Disable nginx response buffering so events flush as they're produced.
|
|
146
|
+
headers.set('X-Accel-Buffering', 'no');
|
|
147
|
+
return new Response(toAgentSseStream(streaming), { ...init, headers });
|
|
148
|
+
}
|
|
149
|
+
/** A fresh, empty {@link AgentStreamTurn}. */
|
|
150
|
+
export function newAgentStreamTurn() {
|
|
151
|
+
return {
|
|
152
|
+
assistantText: '',
|
|
153
|
+
assistantToolCalls: [],
|
|
154
|
+
serverToolResults: [],
|
|
155
|
+
pendingClientTools: [],
|
|
156
|
+
pendingApproval: null,
|
|
157
|
+
handoffPath: [],
|
|
158
|
+
done: false,
|
|
159
|
+
awaiting: undefined,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
function randomId() {
|
|
163
|
+
return typeof crypto !== 'undefined' && crypto.randomUUID
|
|
164
|
+
? crypto.randomUUID()
|
|
165
|
+
: `tc-${Date.now()}-${Math.round(Math.random() * 1e9)}`;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Read a named-event agent-SSE response body, applying each event to a fresh
|
|
169
|
+
* {@link AgentStreamTurn} and firing the matching callback. Resolves with the
|
|
170
|
+
* accumulated turn once the stream closes.
|
|
171
|
+
*
|
|
172
|
+
* The caller owns the `fetch` and the `!resp.ok` branch (so a rich error body
|
|
173
|
+
* can be read for non-2xx responses); pass an already-OK response. A missing
|
|
174
|
+
* body resolves to an empty turn. Malformed event JSON is skipped.
|
|
175
|
+
*/
|
|
176
|
+
export async function readAgentStream(resp, callbacks = {}) {
|
|
177
|
+
const turn = newAgentStreamTurn();
|
|
178
|
+
if (!resp.body)
|
|
179
|
+
return turn;
|
|
180
|
+
const reader = resp.body.getReader();
|
|
181
|
+
const decoder = new TextDecoder();
|
|
182
|
+
let buffer = '';
|
|
183
|
+
// Hoisted across reads: an `event:` line and its `data:` line can land in
|
|
184
|
+
// separate `read()` chunks when the body is sliced mid-frame.
|
|
185
|
+
let currentEvent = '';
|
|
186
|
+
for (;;) {
|
|
187
|
+
const { done, value } = await reader.read();
|
|
188
|
+
if (done)
|
|
189
|
+
break;
|
|
190
|
+
buffer += decoder.decode(value, { stream: true });
|
|
191
|
+
const lines = buffer.split('\n');
|
|
192
|
+
buffer = lines.pop() ?? '';
|
|
193
|
+
for (const line of lines) {
|
|
194
|
+
if (line.startsWith('event: ')) {
|
|
195
|
+
currentEvent = line.slice(7);
|
|
196
|
+
}
|
|
197
|
+
else if (line.startsWith('data: ') && currentEvent) {
|
|
198
|
+
try {
|
|
199
|
+
applyAgentSseEvent(currentEvent, JSON.parse(line.slice(6)), turn, callbacks);
|
|
200
|
+
}
|
|
201
|
+
catch { /* skip malformed JSON */ }
|
|
202
|
+
currentEvent = '';
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return turn;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Apply a single parsed SSE event to the turn state and fire the matching
|
|
210
|
+
* callback. Mutates `turn`; otherwise pure. Exposed for unit-testing the
|
|
211
|
+
* reducer against a synthetic turn without a live stream.
|
|
212
|
+
*/
|
|
213
|
+
export function applyAgentSseEvent(event, data, turn, callbacks = {}) {
|
|
214
|
+
switch (event) {
|
|
215
|
+
case 'text': {
|
|
216
|
+
const d = data;
|
|
217
|
+
turn.assistantText += d.text;
|
|
218
|
+
callbacks.onText?.(d.text);
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
case 'tool_call': {
|
|
222
|
+
const d = data;
|
|
223
|
+
turn.assistantToolCalls.push({
|
|
224
|
+
id: d.id ?? randomId(),
|
|
225
|
+
name: d.tool,
|
|
226
|
+
arguments: d.input ?? {},
|
|
227
|
+
});
|
|
228
|
+
callbacks.onToolCall?.(d);
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
case 'tool_update': {
|
|
232
|
+
callbacks.onToolUpdate?.(data);
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
case 'tool_result': {
|
|
236
|
+
const d = data;
|
|
237
|
+
const toolCallId = d.toolCallId ?? d.id;
|
|
238
|
+
if (toolCallId) {
|
|
239
|
+
turn.serverToolResults.push({ role: 'tool', content: d.content, toolCallId });
|
|
240
|
+
}
|
|
241
|
+
callbacks.onToolResult?.(d);
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
case 'pending_client_tools': {
|
|
245
|
+
const d = data;
|
|
246
|
+
turn.pendingClientTools = d.toolCalls ?? [];
|
|
247
|
+
callbacks.onPendingClientTools?.(turn.pendingClientTools);
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
case 'tool_approval_required': {
|
|
251
|
+
const d = data;
|
|
252
|
+
turn.pendingApproval = { toolCall: d.toolCall, isClientTool: d.isClientTool };
|
|
253
|
+
callbacks.onToolApprovalRequired?.(d);
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
case 'handoff': {
|
|
257
|
+
const d = data;
|
|
258
|
+
if (turn.handoffPath.length === 0 && d.from)
|
|
259
|
+
turn.handoffPath.push(d.from);
|
|
260
|
+
if (d.to)
|
|
261
|
+
turn.handoffPath.push(d.to);
|
|
262
|
+
callbacks.onHandoff?.(d);
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
case 'complete': {
|
|
266
|
+
const d = data;
|
|
267
|
+
if (d.done === true)
|
|
268
|
+
turn.done = true;
|
|
269
|
+
turn.awaiting = d.awaiting;
|
|
270
|
+
callbacks.onComplete?.(d);
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
case 'error': {
|
|
274
|
+
const d = data;
|
|
275
|
+
callbacks.onError?.(d);
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=agent-sse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-sse.js","sourceRoot":"","sources":["../src/agent-sse.ts"],"names":[],"mappings":"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"}
|
package/dist/agent.d.ts
CHANGED
|
@@ -9,6 +9,34 @@ import type { AgentPromptOptions, AiMessage, AiMiddleware, AgentResponse, AgentS
|
|
|
9
9
|
export declare function stepCountIs(n: number): StopCondition;
|
|
10
10
|
/** Stop when a specific tool is called in the latest step */
|
|
11
11
|
export declare function hasToolCall(toolName: string): StopCondition;
|
|
12
|
+
/** Options for {@link Agent.resumeAsTool}. */
|
|
13
|
+
export interface SubAgentResumeOptions {
|
|
14
|
+
/** Shared run store the snapshot lives in. */
|
|
15
|
+
runStore: SubAgentRunStore;
|
|
16
|
+
/** The sub-agent instance to resume. */
|
|
17
|
+
agent: Agent;
|
|
18
|
+
/** Approved ids for an `approval` pause. */
|
|
19
|
+
approvedToolCallIds?: string[];
|
|
20
|
+
/** Rejected ids for an `approval` pause. */
|
|
21
|
+
rejectedToolCallIds?: string[];
|
|
22
|
+
/**
|
|
23
|
+
* Opt-in live progress during the resume. When set, the resumed inner loop
|
|
24
|
+
* runs via `stream()` instead of `prompt()` and each chunk is projected into
|
|
25
|
+
* a {@link SubAgentUpdate} forwarded to {@link onUpdate}. `true` uses
|
|
26
|
+
* {@link defaultSubAgentProjector} (emits `tool_call` / `agent_pending_approval`);
|
|
27
|
+
* a function is your own projector. Mirrors {@link Agent.asTool}'s `streaming`
|
|
28
|
+
* on the initial-dispatch path. Unset → the legacy non-streaming `prompt()`
|
|
29
|
+
* resume (no behavior change). The pause/completion partition is identical
|
|
30
|
+
* either way — this only adds a progress channel.
|
|
31
|
+
*/
|
|
32
|
+
streaming?: AsToolStreamingOption;
|
|
33
|
+
/**
|
|
34
|
+
* Sink for projected updates. Only fires when {@link streaming} is set, once
|
|
35
|
+
* per non-null projection, in stream order. Awaited, so a slow sink applies
|
|
36
|
+
* backpressure to the resume.
|
|
37
|
+
*/
|
|
38
|
+
onUpdate?: (update: SubAgentUpdate) => void | Promise<void>;
|
|
39
|
+
}
|
|
12
40
|
/**
|
|
13
41
|
* One entry in a {@link Agent.resumeManyAsTool} batch — a single paused
|
|
14
42
|
* sub-agent to resume. Mirrors the positional args of the singular
|
|
@@ -75,6 +103,23 @@ export interface SubAgentResumeManyOptions {
|
|
|
75
103
|
* side-effect ordering when sub-agents touch shared state.
|
|
76
104
|
*/
|
|
77
105
|
concurrency?: 'parallel' | 'serial';
|
|
106
|
+
/**
|
|
107
|
+
* Shared live-progress projector applied to every resumed item — same option
|
|
108
|
+
* as {@link SubAgentResumeOptions.streaming}. Unset → every item resumes
|
|
109
|
+
* non-streaming (legacy behavior). Set → each item streams and its projected
|
|
110
|
+
* updates flow to {@link onUpdate} tagged with the originating request.
|
|
111
|
+
*/
|
|
112
|
+
streaming?: AsToolStreamingOption;
|
|
113
|
+
/**
|
|
114
|
+
* Sink for projected updates across the whole batch. Only fires when
|
|
115
|
+
* {@link streaming} is set. Each call carries the originating item's `key`
|
|
116
|
+
* (when supplied) and `originalSubRunId`, so a host can correlate a chunk
|
|
117
|
+
* back to its request and fan it out (e.g. to a per-sub-agent SSE channel).
|
|
118
|
+
*/
|
|
119
|
+
onUpdate?: (update: SubAgentUpdate, ctx: {
|
|
120
|
+
key?: string;
|
|
121
|
+
originalSubRunId: string;
|
|
122
|
+
}) => void | Promise<void>;
|
|
78
123
|
}
|
|
79
124
|
/** Aggregated result of a {@link Agent.resumeManyAsTool} batch. */
|
|
80
125
|
export interface SubAgentResumeManyResult {
|
|
@@ -299,12 +344,7 @@ export declare abstract class Agent {
|
|
|
299
344
|
static resumeAsTool(subRunId: string, clientToolResults: ReadonlyArray<{
|
|
300
345
|
toolCallId: string;
|
|
301
346
|
result: unknown;
|
|
302
|
-
}>, options: {
|
|
303
|
-
runStore: SubAgentRunStore;
|
|
304
|
-
agent: Agent;
|
|
305
|
-
approvedToolCallIds?: string[];
|
|
306
|
-
rejectedToolCallIds?: string[];
|
|
307
|
-
}): Promise<{
|
|
347
|
+
}>, options: SubAgentResumeOptions): Promise<{
|
|
308
348
|
kind: 'completed';
|
|
309
349
|
response: AgentResponse;
|
|
310
350
|
} | {
|
|
@@ -340,8 +380,18 @@ export declare abstract class Agent {
|
|
|
340
380
|
*/
|
|
341
381
|
static resumeManyAsTool(requests: ReadonlyArray<SubAgentResumeRequest>, options: SubAgentResumeManyOptions): Promise<SubAgentResumeManyResult>;
|
|
342
382
|
}
|
|
343
|
-
|
|
344
|
-
|
|
383
|
+
/**
|
|
384
|
+
* Projects an inner-agent {@link StreamChunk} into a {@link SubAgentUpdate} the
|
|
385
|
+
* host can render, or `null` to suppress it. Used by both {@link Agent.asTool}
|
|
386
|
+
* (`streaming`) and the streaming resume path ({@link SubAgentResumeOptions.streaming}).
|
|
387
|
+
*/
|
|
388
|
+
export type ChunkProjector = (chunk: StreamChunk) => SubAgentUpdate | null;
|
|
389
|
+
/**
|
|
390
|
+
* Live-progress option shared by {@link Agent.asTool} and the streaming resume
|
|
391
|
+
* surface: `true` uses {@link defaultSubAgentProjector}; a function is your own
|
|
392
|
+
* {@link ChunkProjector}.
|
|
393
|
+
*/
|
|
394
|
+
export type AsToolStreamingOption = boolean | ChunkProjector;
|
|
345
395
|
type AsToolSuspendableOption = {
|
|
346
396
|
runStore: SubAgentRunStore;
|
|
347
397
|
};
|
package/dist/agent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EAAyD,YAAY,EAAE,MAAM,WAAW,CAAA;AAC/F,OAAO,KAAK,EAAmD,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAGnG,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AASpD,OAAO,KAAK,EAAE,iBAAiB,EAAuB,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAoBxG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,KAAK,EACV,kBAAkB,EAClB,SAAS,EACT,YAAY,EAEZ,aAAa,EACb,SAAS,EACT,mBAAmB,EACnB,OAAO,EACP,eAAe,EAIf,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,iBAAiB,EACjB,iBAAiB,EAEjB,aAAa,EACb,aAAa,EACb,WAAW,EAEX,QAAQ,EAGR,UAAU,EAEV,UAAU,EACX,MAAM,YAAY,CAAA;AA8BnB,yBAAyB;AACzB,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,aAAa,CAEpD;AAED,6DAA6D;AAC7D,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,CAK3D;AAID;;;;;;GAMG;AACH,MAAM,WAAW,qBAAqB;IACpC,0EAA0E;IAC1E,QAAQ,EAAc,MAAM,CAAA;IAC5B,6EAA6E;IAC7E,KAAK,EAAiB,KAAK,CAAA;IAC3B,0EAA0E;IAC1E,iBAAiB,CAAC,EAAI,aAAa,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;IAC5E,4CAA4C;IAC5C,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC9B,4CAA4C;IAC5C,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC9B,iEAAiE;IACjE,GAAG,CAAC,EAAkB,MAAM,CAAA;CAC7B;AAED,2EAA2E;AAC3E,MAAM,MAAM,qBAAqB,GAC7B;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,aAAa,CAAA;CAAE,GACtF;IACE,GAAG,CAAC,EAAgB,MAAM,CAAA;IAC1B,gBAAgB,EAAI,MAAM,CAAA;IAC1B,IAAI,EAAgB,QAAQ,CAAA;IAC5B,QAAQ,EAAY,MAAM,CAAA;IAC1B,SAAS,EAAW,iBAAiB,CAAA;IACrC,kBAAkB,EAAE,MAAM,EAAE,CAAA;IAC5B,QAAQ,CAAC,EAAW,QAAQ,CAAA;IAC5B,YAAY,CAAC,EAAO,OAAO,CAAA;CAC5B,GACD;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAA;AAE3E,MAAM,WAAW,yBAAyB;IACxC,kDAAkD;IAClD,QAAQ,EAAM,gBAAgB,CAAA;IAC9B;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAM,SAAS,GAAG,OAAO,CAAA;IACjC;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/agent.js
CHANGED
|
@@ -360,7 +360,25 @@ export class Agent {
|
|
|
360
360
|
promptOpts.rejectedToolCallIds = rejected;
|
|
361
361
|
}
|
|
362
362
|
promptOpts.messages = messages;
|
|
363
|
-
|
|
363
|
+
// Default path: non-streaming resume — one prompt() call, one response.
|
|
364
|
+
// Opt-in streaming path: run the inner loop via stream() and forward each
|
|
365
|
+
// projected chunk to onUpdate, so a host can keep a resumed sub-agent's
|
|
366
|
+
// progress live across the round-trip. Either way `result` is the same
|
|
367
|
+
// AgentResponse and the pause/completion partition below is unchanged.
|
|
368
|
+
let result;
|
|
369
|
+
if (options.streaming) {
|
|
370
|
+
const project = options.streaming === true ? defaultSubAgentProjector : options.streaming;
|
|
371
|
+
const { stream, response } = options.agent.stream('', promptOpts);
|
|
372
|
+
for await (const chunk of stream) {
|
|
373
|
+
const update = project(chunk);
|
|
374
|
+
if (update && options.onUpdate)
|
|
375
|
+
await options.onUpdate(update);
|
|
376
|
+
}
|
|
377
|
+
result = await response;
|
|
378
|
+
}
|
|
379
|
+
else {
|
|
380
|
+
result = await options.agent.prompt('', promptOpts);
|
|
381
|
+
}
|
|
364
382
|
if (result.finishReason === 'client_tool_calls' &&
|
|
365
383
|
result.pendingClientToolCalls?.length) {
|
|
366
384
|
const newSubRunId = generateSubRunId();
|
|
@@ -439,6 +457,13 @@ export class Agent {
|
|
|
439
457
|
opts.approvedToolCallIds = req.approvedToolCallIds;
|
|
440
458
|
if (req.rejectedToolCallIds)
|
|
441
459
|
opts.rejectedToolCallIds = req.rejectedToolCallIds;
|
|
460
|
+
// Thread the shared projector + correlate each update back to this item.
|
|
461
|
+
if (options.streaming !== undefined)
|
|
462
|
+
opts.streaming = options.streaming;
|
|
463
|
+
if (options.onUpdate) {
|
|
464
|
+
const batchOnUpdate = options.onUpdate;
|
|
465
|
+
opts.onUpdate = (update) => batchOnUpdate(update, base);
|
|
466
|
+
}
|
|
442
467
|
const r = await Agent.resumeAsTool(req.subRunId, req.clientToolResults ?? [], opts);
|
|
443
468
|
if (r.kind === 'completed')
|
|
444
469
|
return { ...base, kind: 'completed', response: r.response };
|