@copilotkit/channels-core 0.4.1-canary.1785375021 → 0.4.1-canary.narrowinstall1
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/codec.d.ts +3 -2
- package/dist/codec.d.ts.map +1 -1
- package/dist/create-channel.d.ts.map +1 -1
- package/dist/create-channel.js +31 -35
- package/dist/create-channel.test.js +0 -75
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/platform-adapter.d.ts +9 -64
- package/dist/platform-adapter.d.ts.map +1 -1
- package/dist/run-loop.d.ts +6 -25
- package/dist/run-loop.d.ts.map +1 -1
- package/dist/run-loop.js +39 -280
- package/dist/thread.d.ts +0 -4
- package/dist/thread.d.ts.map +1 -1
- package/dist/thread.js +243 -319
- package/package.json +4 -4
- package/dist/canonical-run-loop.test.d.ts +0 -2
- package/dist/canonical-run-loop.test.d.ts.map +0 -1
- package/dist/canonical-run-loop.test.js +0 -393
- package/dist/managed-v1-await-choice-guard.test.d.ts +0 -2
- package/dist/managed-v1-await-choice-guard.test.d.ts.map +0 -1
- package/dist/managed-v1-await-choice-guard.test.js +0 -52
- package/dist/source-platform.test.d.ts +0 -2
- package/dist/source-platform.test.d.ts.map +0 -1
- package/dist/source-platform.test.js +0 -149
- package/dist/thread-promise-contract.test.d.ts +0 -2
- package/dist/thread-promise-contract.test.d.ts.map +0 -1
- package/dist/thread-promise-contract.test.js +0 -37
package/dist/run-loop.js
CHANGED
|
@@ -1,178 +1,4 @@
|
|
|
1
|
-
import { EventType } from "@ag-ui/client";
|
|
2
1
|
import { parseToolArgs, stringifyHandlerResult } from "./tools.js";
|
|
3
|
-
/**
|
|
4
|
-
* Merge two subscriber callback results while preserving either subscriber's
|
|
5
|
-
* request to stop propagation.
|
|
6
|
-
*/
|
|
7
|
-
function mergeSubscriberResults(firstResult, secondResult) {
|
|
8
|
-
if ((firstResult === undefined || firstResult === null) &&
|
|
9
|
-
(secondResult === undefined || secondResult === null)) {
|
|
10
|
-
return undefined;
|
|
11
|
-
}
|
|
12
|
-
return {
|
|
13
|
-
...(typeof firstResult === "object" ? firstResult : {}),
|
|
14
|
-
...(typeof secondResult === "object" ? secondResult : {}),
|
|
15
|
-
stopPropagation: (typeof firstResult === "object" &&
|
|
16
|
-
firstResult !== null &&
|
|
17
|
-
"stopPropagation" in firstResult &&
|
|
18
|
-
firstResult.stopPropagation === true) ||
|
|
19
|
-
(typeof secondResult === "object" &&
|
|
20
|
-
secondResult !== null &&
|
|
21
|
-
"stopPropagation" in secondResult &&
|
|
22
|
-
secondResult.stopPropagation === true),
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Invoke canonical ingestion before rendering, but always invoke both. A
|
|
27
|
-
* renderer failure therefore cannot prevent the same event from reaching the
|
|
28
|
-
* runner.
|
|
29
|
-
*/
|
|
30
|
-
async function invokeSubscriberPair(rendererCallback, ingestionCallback, params, onRendererError, isRendererClosed) {
|
|
31
|
-
let rendererResult;
|
|
32
|
-
let ingestionResult;
|
|
33
|
-
let rendererError;
|
|
34
|
-
let ingestionError;
|
|
35
|
-
let rendererFailed = false;
|
|
36
|
-
let ingestionFailed = false;
|
|
37
|
-
try {
|
|
38
|
-
ingestionResult = await ingestionCallback?.(params);
|
|
39
|
-
}
|
|
40
|
-
catch (error) {
|
|
41
|
-
ingestionFailed = true;
|
|
42
|
-
ingestionError = error;
|
|
43
|
-
}
|
|
44
|
-
if (!isRendererClosed?.()) {
|
|
45
|
-
try {
|
|
46
|
-
rendererResult = await rendererCallback?.(params);
|
|
47
|
-
}
|
|
48
|
-
catch (error) {
|
|
49
|
-
rendererFailed = true;
|
|
50
|
-
rendererError = error;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
if (ingestionFailed)
|
|
54
|
-
throw ingestionError;
|
|
55
|
-
if (rendererFailed) {
|
|
56
|
-
if (!onRendererError)
|
|
57
|
-
throw rendererError;
|
|
58
|
-
onRendererError(rendererError);
|
|
59
|
-
}
|
|
60
|
-
return mergeSubscriberResults(rendererResult, ingestionResult);
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Return one stamped event object for every callback generated from the same
|
|
64
|
-
* raw AG-UI event.
|
|
65
|
-
*/
|
|
66
|
-
function canonicalizeSubscriberParams(params, options, stampedEvents) {
|
|
67
|
-
if (typeof params !== "object" ||
|
|
68
|
-
params === null ||
|
|
69
|
-
!("event" in params) ||
|
|
70
|
-
typeof params.event !== "object" ||
|
|
71
|
-
params.event === null ||
|
|
72
|
-
!("type" in params.event)) {
|
|
73
|
-
return params;
|
|
74
|
-
}
|
|
75
|
-
const event = params.event;
|
|
76
|
-
if (options.canonicalRun &&
|
|
77
|
-
(event.type === EventType.RUN_STARTED ||
|
|
78
|
-
event.type === EventType.RUN_FINISHED ||
|
|
79
|
-
event.type === EventType.RUN_ERROR)) {
|
|
80
|
-
if (event.type === EventType.RUN_ERROR) {
|
|
81
|
-
options.onInnerRunError?.(event);
|
|
82
|
-
}
|
|
83
|
-
return undefined;
|
|
84
|
-
}
|
|
85
|
-
if (!options.canonicalRun)
|
|
86
|
-
return params;
|
|
87
|
-
let stamped = stampedEvents.get(event);
|
|
88
|
-
if (!stamped) {
|
|
89
|
-
stamped = {
|
|
90
|
-
...event,
|
|
91
|
-
threadId: options.canonicalRun.threadId,
|
|
92
|
-
runId: options.canonicalRun.runId,
|
|
93
|
-
};
|
|
94
|
-
stampedEvents.set(event, stamped);
|
|
95
|
-
}
|
|
96
|
-
return { ...params, event: stamped };
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Fan one agent event stream out to both the provider renderer and a canonical
|
|
100
|
-
* runner subscriber. The proxy covers every current and future subscriber
|
|
101
|
-
* callback without keeping a second callback-name registry in Channels.
|
|
102
|
-
*/
|
|
103
|
-
export function mergeAgentSubscribers(first, second, options = {}) {
|
|
104
|
-
const stampedEvents = new WeakMap();
|
|
105
|
-
return new Proxy({}, {
|
|
106
|
-
get(_target, property) {
|
|
107
|
-
const firstCallback = first[property];
|
|
108
|
-
const secondCallback = second[property];
|
|
109
|
-
if (typeof firstCallback !== "function" &&
|
|
110
|
-
typeof secondCallback !== "function") {
|
|
111
|
-
return undefined;
|
|
112
|
-
}
|
|
113
|
-
return async (params) => {
|
|
114
|
-
const canonicalParams = canonicalizeSubscriberParams(params, options, stampedEvents);
|
|
115
|
-
if (canonicalParams === undefined)
|
|
116
|
-
return undefined;
|
|
117
|
-
return invokeSubscriberPair(typeof firstCallback === "function"
|
|
118
|
-
? firstCallback
|
|
119
|
-
: undefined, typeof secondCallback === "function"
|
|
120
|
-
? secondCallback
|
|
121
|
-
: undefined, canonicalParams, options.onRendererError, options.isRendererClosed);
|
|
122
|
-
};
|
|
123
|
-
},
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
/** Convert an inner AG-UI error event into the error rejected by the outer run. */
|
|
127
|
-
function errorFromInnerRun(event) {
|
|
128
|
-
const error = new Error(event.message);
|
|
129
|
-
error.name = "ChannelInnerRunError";
|
|
130
|
-
if (event.code)
|
|
131
|
-
error.code = event.code;
|
|
132
|
-
return error;
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Emit one canonical lifecycle event through the same ingestion-first fanout
|
|
136
|
-
* used by streamed events.
|
|
137
|
-
*/
|
|
138
|
-
async function emitCanonicalLifecycleEvent(event, result, args, onRendererError, isRendererClosed) {
|
|
139
|
-
const canonicalRun = args.canonicalRun;
|
|
140
|
-
if (!canonicalRun)
|
|
141
|
-
return;
|
|
142
|
-
const input = {
|
|
143
|
-
threadId: canonicalRun.threadId,
|
|
144
|
-
runId: canonicalRun.runId,
|
|
145
|
-
messages: args.agent.messages,
|
|
146
|
-
state: args.agent.state,
|
|
147
|
-
tools: [...args.toolDescriptors],
|
|
148
|
-
context: [...args.context],
|
|
149
|
-
forwardedProps: {},
|
|
150
|
-
};
|
|
151
|
-
const baseParams = {
|
|
152
|
-
messages: args.agent.messages,
|
|
153
|
-
state: args.agent.state,
|
|
154
|
-
agent: args.agent,
|
|
155
|
-
input,
|
|
156
|
-
};
|
|
157
|
-
const ingestion = args.subscriber ?? {};
|
|
158
|
-
const renderer = args.renderer.subscriber;
|
|
159
|
-
const eventParams = { ...baseParams, event };
|
|
160
|
-
await invokeSubscriberPair(renderer.onEvent, ingestion.onEvent, eventParams, onRendererError, isRendererClosed);
|
|
161
|
-
if (event.type === EventType.RUN_STARTED) {
|
|
162
|
-
await invokeSubscriberPair(renderer.onRunStartedEvent, ingestion.onRunStartedEvent, eventParams, onRendererError, isRendererClosed);
|
|
163
|
-
}
|
|
164
|
-
else if (event.type === EventType.RUN_FINISHED) {
|
|
165
|
-
await invokeSubscriberPair(renderer.onRunFinishedEvent, ingestion.onRunFinishedEvent, {
|
|
166
|
-
...baseParams,
|
|
167
|
-
event,
|
|
168
|
-
outcome: "success",
|
|
169
|
-
result,
|
|
170
|
-
}, onRendererError, isRendererClosed);
|
|
171
|
-
}
|
|
172
|
-
else if (event.type === EventType.RUN_ERROR) {
|
|
173
|
-
await invokeSubscriberPair(renderer.onRunErrorEvent, ingestion.onRunErrorEvent, eventParams, onRendererError, isRendererClosed);
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
2
|
/**
|
|
177
3
|
* Drive the agent, executing frontend-tool calls and re-invoking until the
|
|
178
4
|
* agent stops calling them (or we hit the iteration cap). On a captured
|
|
@@ -182,122 +8,55 @@ async function emitCanonicalLifecycleEvent(event, result, args, onRendererError,
|
|
|
182
8
|
*/
|
|
183
9
|
export async function runAgentLoop(args) {
|
|
184
10
|
const { agent, renderer, tools, toolDescriptors, context, makeToolCtx, handleInterrupt, isAborted, initialResume, } = args;
|
|
185
|
-
let innerRunError;
|
|
186
|
-
let hasDeliveryError = false;
|
|
187
|
-
let deliveryError;
|
|
188
|
-
const deferRendererError = (error) => {
|
|
189
|
-
if (hasDeliveryError)
|
|
190
|
-
return;
|
|
191
|
-
hasDeliveryError = true;
|
|
192
|
-
deliveryError = error;
|
|
193
|
-
};
|
|
194
|
-
const isRendererClosed = () => hasDeliveryError;
|
|
195
|
-
const subscriber = args.subscriber || args.canonicalRun
|
|
196
|
-
? mergeAgentSubscribers(renderer.subscriber, args.subscriber ?? {}, args.canonicalRun
|
|
197
|
-
? {
|
|
198
|
-
canonicalRun: args.canonicalRun,
|
|
199
|
-
onInnerRunError: (event) => {
|
|
200
|
-
innerRunError ??= errorFromInnerRun(event);
|
|
201
|
-
},
|
|
202
|
-
onRendererError: deferRendererError,
|
|
203
|
-
isRendererClosed,
|
|
204
|
-
}
|
|
205
|
-
: {})
|
|
206
|
-
: renderer.subscriber;
|
|
207
11
|
const maxIterations = args.maxIterations ?? 6;
|
|
208
12
|
const executed = new Set();
|
|
209
13
|
let resume = initialResume;
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
14
|
+
for (let i = 0; i < maxIterations; i++) {
|
|
15
|
+
if (resume) {
|
|
16
|
+
await agent.runAgent({ forwardedProps: { command: resume } }, renderer.subscriber);
|
|
17
|
+
resume = undefined;
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
await agent.runAgent({ tools: toolDescriptors, context: context }, renderer.subscriber);
|
|
21
|
+
}
|
|
22
|
+
if (isAborted?.())
|
|
23
|
+
return { iterations: i + 1, interrupted: false };
|
|
24
|
+
const pending = renderer.getPendingInterrupt();
|
|
25
|
+
if (pending) {
|
|
26
|
+
renderer.clearPendingInterrupt();
|
|
27
|
+
if (handleInterrupt)
|
|
28
|
+
await handleInterrupt(pending);
|
|
29
|
+
// ack-first: picker posted; thread.resume re-enters later
|
|
30
|
+
return { iterations: i + 1, interrupted: true };
|
|
31
|
+
}
|
|
32
|
+
const calls = renderer
|
|
33
|
+
.getCapturedToolCalls()
|
|
34
|
+
.filter((c) => tools.has(c.toolCallName) && !executed.has(c.toolCallId));
|
|
35
|
+
if (calls.length === 0)
|
|
36
|
+
return { iterations: i + 1, interrupted: false };
|
|
37
|
+
ensureAssistantToolCallMessage(agent, calls);
|
|
38
|
+
for (const call of calls) {
|
|
39
|
+
const tool = tools.get(call.toolCallName);
|
|
40
|
+
let result;
|
|
41
|
+
const parsed = await parseToolArgs(tool.parameters, call.toolCallArgs);
|
|
42
|
+
if (!parsed.ok) {
|
|
43
|
+
result = JSON.stringify({
|
|
44
|
+
error: `invalid arguments: ${parsed.error}`,
|
|
45
|
+
});
|
|
215
46
|
}
|
|
216
47
|
else {
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
if (innerRunError)
|
|
220
|
-
throw innerRunError;
|
|
221
|
-
if (isAborted?.())
|
|
222
|
-
return { iterations: i + 1, interrupted: false };
|
|
223
|
-
const pending = renderer.getPendingInterrupt();
|
|
224
|
-
if (pending) {
|
|
225
|
-
renderer.clearPendingInterrupt();
|
|
226
|
-
if (handleInterrupt)
|
|
227
|
-
await handleInterrupt(pending);
|
|
228
|
-
// ack-first: picker posted; thread.resume re-enters later
|
|
229
|
-
return { iterations: i + 1, interrupted: true };
|
|
230
|
-
}
|
|
231
|
-
const calls = renderer
|
|
232
|
-
.getCapturedToolCalls()
|
|
233
|
-
.filter((c) => tools.has(c.toolCallName) && !executed.has(c.toolCallId));
|
|
234
|
-
if (calls.length === 0)
|
|
235
|
-
return { iterations: i + 1, interrupted: false };
|
|
236
|
-
ensureAssistantToolCallMessage(agent, calls);
|
|
237
|
-
for (const call of calls) {
|
|
238
|
-
const tool = tools.get(call.toolCallName);
|
|
239
|
-
let result;
|
|
240
|
-
const parsed = await parseToolArgs(tool.parameters, call.toolCallArgs);
|
|
241
|
-
if (!parsed.ok) {
|
|
242
|
-
result = JSON.stringify({
|
|
243
|
-
error: `invalid arguments: ${parsed.error}`,
|
|
244
|
-
});
|
|
48
|
+
try {
|
|
49
|
+
result = stringifyHandlerResult(await tool.handler(parsed.value, makeToolCtx(call)));
|
|
245
50
|
}
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
result = stringifyHandlerResult(await tool.handler(parsed.value, makeToolCtx(call)));
|
|
249
|
-
}
|
|
250
|
-
catch (err) {
|
|
251
|
-
result = JSON.stringify({ error: err.message });
|
|
252
|
-
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
result = JSON.stringify({ error: err.message });
|
|
253
53
|
}
|
|
254
|
-
pushToolResult(agent, call.toolCallId, result);
|
|
255
|
-
executed.add(call.toolCallId);
|
|
256
54
|
}
|
|
55
|
+
pushToolResult(agent, call.toolCallId, result);
|
|
56
|
+
executed.add(call.toolCallId);
|
|
257
57
|
}
|
|
258
|
-
return { iterations: maxIterations, interrupted: false };
|
|
259
|
-
};
|
|
260
|
-
if (!args.canonicalRun) {
|
|
261
|
-
return executeIterations();
|
|
262
|
-
}
|
|
263
|
-
const startEvent = {
|
|
264
|
-
type: EventType.RUN_STARTED,
|
|
265
|
-
threadId: args.canonicalRun.threadId,
|
|
266
|
-
runId: args.canonicalRun.runId,
|
|
267
|
-
};
|
|
268
|
-
try {
|
|
269
|
-
await emitCanonicalLifecycleEvent(startEvent, undefined, args, deferRendererError, isRendererClosed);
|
|
270
|
-
const result = await executeIterations();
|
|
271
|
-
const finishedEvent = {
|
|
272
|
-
type: EventType.RUN_FINISHED,
|
|
273
|
-
threadId: args.canonicalRun.threadId,
|
|
274
|
-
runId: args.canonicalRun.runId,
|
|
275
|
-
};
|
|
276
|
-
await emitCanonicalLifecycleEvent(finishedEvent, result, args, deferRendererError, isRendererClosed);
|
|
277
|
-
return hasDeliveryError ? { ...result, deliveryError } : result;
|
|
278
|
-
}
|
|
279
|
-
catch (error) {
|
|
280
|
-
const runError = {
|
|
281
|
-
type: EventType.RUN_ERROR,
|
|
282
|
-
threadId: args.canonicalRun.threadId,
|
|
283
|
-
runId: args.canonicalRun.runId,
|
|
284
|
-
message: error instanceof Error ? error.message : String(error),
|
|
285
|
-
...(typeof error === "object" &&
|
|
286
|
-
error !== null &&
|
|
287
|
-
"code" in error &&
|
|
288
|
-
typeof error.code === "string"
|
|
289
|
-
? { code: error.code }
|
|
290
|
-
: {}),
|
|
291
|
-
};
|
|
292
|
-
try {
|
|
293
|
-
await emitCanonicalLifecycleEvent(runError, undefined, args, deferRendererError, isRendererClosed);
|
|
294
|
-
}
|
|
295
|
-
catch {
|
|
296
|
-
// Preserve the original run failure after canonical ingestion got its
|
|
297
|
-
// chance to record the terminal error.
|
|
298
|
-
}
|
|
299
|
-
throw error;
|
|
300
58
|
}
|
|
59
|
+
return { iterations: maxIterations, interrupted: false };
|
|
301
60
|
}
|
|
302
61
|
/**
|
|
303
62
|
* If the agent's latest message isn't already the assistant message that
|
package/dist/thread.d.ts
CHANGED
|
@@ -8,8 +8,6 @@ import type { StateStore } from "./state/state-store.js";
|
|
|
8
8
|
import type { StandardSchemaV1 } from "./standard-schema.js";
|
|
9
9
|
export interface ThreadDeps {
|
|
10
10
|
adapter: PlatformAdapter;
|
|
11
|
-
/** Source provider for this ingress event; falls back to the adapter identity. */
|
|
12
|
-
platform?: string;
|
|
13
11
|
replyTarget: ReplyTarget;
|
|
14
12
|
conversationKey: string;
|
|
15
13
|
registry: ActionRegistry;
|
|
@@ -52,10 +50,8 @@ export declare class Thread implements ThreadInterface {
|
|
|
52
50
|
/** Mirrors the adapter's `supportsBlockingChoice` capability (see SurfaceCapabilities). */
|
|
53
51
|
readonly supportsBlockingChoice?: boolean;
|
|
54
52
|
private readonly store;
|
|
55
|
-
private implicitInboundConsumed;
|
|
56
53
|
constructor(deps: ThreadDeps);
|
|
57
54
|
private bindForPost;
|
|
58
|
-
private trackOperation;
|
|
59
55
|
/**
|
|
60
56
|
* Wire a posted message's `onReaction` to its returned id: cache it for this
|
|
61
57
|
* process and, when it came from a component, persist a durable snapshot so a
|
package/dist/thread.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thread.d.ts","sourceRoot":"","sources":["../src/thread.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EACV,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,YAAY,EACZ,aAAa,EACb,eAAe,EACf,MAAM,IAAI,eAAe,EACzB,UAAU,EACV,eAAe,EAChB,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"thread.d.ts","sourceRoot":"","sources":["../src/thread.ts"],"names":[],"mappings":"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"}
|