@copilotkit/channels-core 0.9.0 → 0.9.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.
@@ -0,0 +1,161 @@
1
+ import { jsx as _jsx } from "@copilotkit/channels-core/jsx-runtime";
2
+ import { Button } from "@copilotkit/channels-ui";
3
+ import { afterEach, expect, test } from "vitest";
4
+ import { createChannel } from "./create-channel.js";
5
+ import { MemoryStore } from "./state/memory-store.js";
6
+ import { FakeAdapter } from "./testing/fake-adapter.js";
7
+ import { FakeAgent } from "./testing/fake-agent.js";
8
+ const activeChannels = [];
9
+ afterEach(async () => {
10
+ await Promise.all(activeChannels.splice(0).map((channel) => channel.stop()));
11
+ });
12
+ /** The correlation-bearing shape a Mastra-style bridge sends and requires back. */
13
+ const MASTRA_LIKE_VALUE = {
14
+ type: "mastra_suspend",
15
+ toolCallId: "call_abc123",
16
+ runId: "run_xyz789",
17
+ suspendPayload: {
18
+ kind: "confirm_create_thing",
19
+ action: "Create thing: widget",
20
+ },
21
+ };
22
+ /**
23
+ * Records the `RunAgentParameters` of every run so the wire shape is assertable.
24
+ *
25
+ * `clone()` is overridden for two reasons, both enforced by createChannel's
26
+ * clone guard: `FakeAgent.clone()` returns a base `FakeAgent` (which would strip
27
+ * this recorder entirely), and every turn runs on a fresh clone — so `params`
28
+ * must be SHARED, not copied, or the resume run's parameters land on an instance
29
+ * the test never sees.
30
+ */
31
+ class RecordingAgent extends FakeAgent {
32
+ params;
33
+ script0;
34
+ constructor(script, params = []) {
35
+ super(script);
36
+ this.script0 = script;
37
+ this.params = params;
38
+ }
39
+ clone() {
40
+ const cloned = new RecordingAgent(this.script0, this.params);
41
+ cloned.threadId = this.threadId;
42
+ cloned.agentId = this.agentId;
43
+ return cloned;
44
+ }
45
+ async runAgent(parameters, subscriber) {
46
+ this.params.push(parameters);
47
+ return super.runAgent(parameters, subscriber);
48
+ }
49
+ }
50
+ /** The `forwardedProps.command` of the first run that carried one. */
51
+ function sentCommand(agent) {
52
+ for (const p of agent.params) {
53
+ const command = p?.forwardedProps
54
+ ?.command;
55
+ if (command)
56
+ return command;
57
+ }
58
+ return undefined;
59
+ }
60
+ function firstActionId(adapter) {
61
+ const button = adapter.posted.flat().find((node) => node.type === "button");
62
+ const action = button?.props.onClick;
63
+ if (typeof action?.id !== "string")
64
+ throw new Error("missing action id");
65
+ return action.id;
66
+ }
67
+ /**
68
+ * Drives one interrupt → picker → click → resume cycle.
69
+ * `interruptValue: undefined` emits a named custom event with NO value, which is
70
+ * how the "nothing captured" case is reached.
71
+ */
72
+ async function runCycle(interruptValue) {
73
+ const adapter = new FakeAdapter();
74
+ const state = new MemoryStore();
75
+ // Interrupt on the FIRST run only. Clones restart the script (the shift happens
76
+ // on the clone, not the original), so without this shared counter the resume run
77
+ // would interrupt again — re-storing the value straight after the resume consumed
78
+ // it, and quietly invalidating the one-use assertion below.
79
+ const runs = { count: 0 };
80
+ const agent = new RecordingAgent([
81
+ (subscriber) => {
82
+ if (runs.count++ === 0) {
83
+ subscriber.onCustomEvent?.({
84
+ event: { name: "approval", value: interruptValue },
85
+ });
86
+ }
87
+ subscriber.onRunFinishedEvent?.({ event: {} });
88
+ },
89
+ ]);
90
+ function Approval() {
91
+ return (_jsx(Button, { value: { approved: true }, onClick: async ({ thread }) => {
92
+ await thread.resume({ approved: true });
93
+ }, children: "Approve" }));
94
+ }
95
+ const channel = createChannel({
96
+ name: "approvals",
97
+ identifyUser: "platform",
98
+ adapters: [adapter],
99
+ agent,
100
+ components: [Approval],
101
+ store: { adapter: state },
102
+ });
103
+ channel.onMessage(async ({ thread }) => {
104
+ await thread.runAgent();
105
+ });
106
+ channel.onInterrupt("approval", async ({ thread }) => {
107
+ await thread.post(_jsx(Approval, {}));
108
+ });
109
+ await channel.ɵruntime.start();
110
+ activeChannels.push({ stop: () => channel.ɵruntime.stop() });
111
+ await adapter.getSink().onTurn({
112
+ conversationKey: "thread-1",
113
+ replyTarget: {},
114
+ userText: "start",
115
+ platform: "fake",
116
+ actor: { id: "alice", kind: "human", name: "Alice" },
117
+ });
118
+ return { adapter, agent, state, Approval };
119
+ }
120
+ async function click(adapter) {
121
+ await adapter.getSink().onInteraction({
122
+ id: firstActionId(adapter),
123
+ conversationKey: "thread-1",
124
+ replyTarget: {},
125
+ eventId: "click-1",
126
+ actor: { id: "alice", kind: "human", name: "Alice" },
127
+ });
128
+ }
129
+ test("resume echoes the captured interrupt value as command.interruptEvent", async () => {
130
+ const { adapter, agent } = await runCycle(MASTRA_LIKE_VALUE);
131
+ await click(adapter);
132
+ const command = sentCommand(agent);
133
+ expect(command).toBeDefined();
134
+ expect(command?.resume).toEqual({ approved: true });
135
+ // Opaque round-trip: byte-for-byte what the agent sent, not a reshaped subset.
136
+ expect(command?.interruptEvent).toEqual(MASTRA_LIKE_VALUE);
137
+ });
138
+ test("the interrupt value is persisted, so a resume can survive a restart", async () => {
139
+ const { state } = await runCycle(MASTRA_LIKE_VALUE);
140
+ // In the DURABLE store, not process memory — the click can arrive in a later
141
+ // process, which is the entire point of the interrupt path over awaitChoice.
142
+ await expect(state.kv.get("interruptevent:thread-1")).resolves.toEqual(MASTRA_LIKE_VALUE);
143
+ });
144
+ test("the retained value is one-use: consumed by the resume that sends it", async () => {
145
+ const { adapter, state } = await runCycle(MASTRA_LIKE_VALUE);
146
+ await click(adapter);
147
+ // Matches the one-use continuation the resume already claims: a replayed click
148
+ // must not resurrect a spent resume.
149
+ await expect(state.kv.get("interruptevent:thread-1")).resolves.toBeUndefined();
150
+ });
151
+ test("omits interruptEvent entirely when no value was captured", async () => {
152
+ const { adapter, agent } = await runCycle(undefined);
153
+ await click(adapter);
154
+ const command = sentCommand(agent);
155
+ expect(command?.resume).toEqual({ approved: true });
156
+ // The compatibility guarantee: not `interruptEvent: undefined` — absent. The
157
+ // serialized command is identical to what channels sent before this change,
158
+ // so agents that never carry correlation data see no difference at all.
159
+ expect(command).not.toHaveProperty("interruptEvent");
160
+ expect(Object.keys(command ?? {})).toEqual(["resume"]);
161
+ });
@@ -1,5 +1,5 @@
1
1
  import type { AgentSubscriber, AbstractAgent } from "@ag-ui/client";
2
- import type { AgentContentPart, ChannelNode, EmojiValue, EphemeralResult, MessageRef, MessageOperation, ProviderActor, ThreadMessage } from "@copilotkit/channels-ui";
2
+ import type { AgentContentPart, ApplicationUser, ChannelNode, EmojiValue, EphemeralResult, MessageRef, MessageOperation, ProviderActor, ThreadMessage } from "@copilotkit/channels-ui";
3
3
  import type { IngressIdentityContext } from "./identity.js";
4
4
  import type { ResolvedChannelMemory } from "./memory.js";
5
5
  import type { CommandSpec } from "./commands.js";
@@ -96,6 +96,8 @@ export interface ChannelAgentLifecycleArgs {
96
96
  * agent command and never crosses the managed run-open boundary.
97
97
  */
98
98
  isResume?: boolean;
99
+ /** Canonical application user resolved for the current Channel event. */
100
+ user?: ApplicationUser | null;
99
101
  /** Explicit Memory access resolved before agent execution. */
100
102
  memory?: ResolvedChannelMemory;
101
103
  execute(subscriber: AgentSubscriber, canonicalRun?: CanonicalRunIdentity): Promise<ChannelAgentLoopResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"platform-adapter.d.ts","sourceRoot":"","sources":["../src/platform-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"platform-adapter.d.ts","sourceRoot":"","sources":["../src/platform-adapter.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
- import type { AbstractAgent, AgentSubscriber, RunErrorEvent } from "@ag-ui/client";
1
+ import type { AbstractAgent, AgentSubscriber, RunErrorEvent, RunFinishedEvent } from "@ag-ui/client";
2
2
  import type { RunRenderer, CapturedToolCall, CapturedInterrupt, CanonicalRunIdentity, ChannelAgentLoopResult } from "./platform-adapter.js";
3
3
  import type { ChannelTool, ChannelToolContext, AgentToolDescriptor, ContextEntry } from "./tools.js";
4
+ import type { ChannelActorIdentity } from "./identity.js";
4
5
  export interface RunLoopArgs {
5
6
  agent: AbstractAgent;
6
7
  renderer: RunRenderer;
@@ -14,9 +15,15 @@ export interface RunLoopArgs {
14
15
  isAborted?: () => boolean;
15
16
  /** Hard cap on loop iterations. Default 6. */
16
17
  maxIterations?: number;
17
- /** When re-entering via thread.resume, the resume command to replay. */
18
+ /**
19
+ * When re-entering via thread.resume, the resume command to replay. Sent
20
+ * verbatim as `forwardedProps.command`, so any field here reaches the agent.
21
+ * `interruptEvent` echoes the originating interrupt back for bridges that key
22
+ * their resume off it (@ag-ui/mastra); it is absent unless one was captured.
23
+ */
18
24
  initialResume?: {
19
25
  resume: unknown;
26
+ interruptEvent?: unknown;
20
27
  };
21
28
  /** Subscriber used for each underlying agent step. Defaults to the renderer. */
22
29
  subscriber?: AgentSubscriber;
@@ -26,10 +33,22 @@ export interface RunLoopArgs {
26
33
  * lifecycle around the whole loop.
27
34
  */
28
35
  canonicalRun?: CanonicalRunIdentity;
36
+ /**
37
+ * Who is speaking this turn. Forwarded to the agent as
38
+ * `forwardedProps.channelActor` on every run this loop performs, including a
39
+ * resume — a resume's actor is whoever pressed the button, which is not
40
+ * always whoever started the turn.
41
+ *
42
+ * Supplied by the Thread from the ingress event, never by a caller passing a
43
+ * value of its own: an agent that acts as this person has to be reading the
44
+ * platform's word for who spoke.
45
+ */
46
+ identity?: ChannelActorIdentity;
29
47
  }
30
48
  interface SubscriberFanoutOptions {
31
49
  canonicalRun?: CanonicalRunIdentity;
32
50
  onInnerRunError?: (event: RunErrorEvent) => void;
51
+ onInnerRunFinished?: (event: RunFinishedEvent) => void;
33
52
  onRendererError?: (error: unknown) => void;
34
53
  /** Stops provider callbacks after their first terminal delivery error. */
35
54
  isRendererClosed?: () => boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"run-loop.d.ts","sourceRoot":"","sources":["../src/run-loop.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EAGf,aAAa,EACd,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EACV,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAClB,mBAAmB,EACnB,YAAY,EACb,MAAM,YAAY,CAAC;AAOpB,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,aAAa,CAAC;IACrB,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAChC,eAAe,EAAE,mBAAmB,EAAE,CAAC;IACvC,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,sDAAsD;IACtD,WAAW,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,kBAAkB,CAAC;IAC5D,sFAAsF;IACtF,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACzE,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC;IAC1B,8CAA8C;IAC9C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wEAAwE;IACxE,aAAa,CAAC,EAAE;QAAE,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC;IACpC,gFAAgF;IAChF,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B;;;;OAIG;IACH,YAAY,CAAC,EAAE,oBAAoB,CAAC;CACrC;AAED,UAAU,uBAAuB;IAC/B,YAAY,CAAC,EAAE,oBAAoB,CAAC;IACpC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IACjD,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,MAAM,OAAO,CAAC;CAClC;AAyHD;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,eAAe,EACvB,OAAO,GAAE,uBAA4B,GACpC,eAAe,CAkCjB;AAkFD;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,sBAAsB,CAAC,CA0LjC;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,aAAa,CAAC,gBAAgB,CAAC,GACrC,IAAI,CA4BN;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,aAAa,EACpB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GACd,IAAI,CAQN"}
1
+ {"version":3,"file":"run-loop.d.ts","sourceRoot":"","sources":["../src/run-loop.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EAGf,aAAa,EACb,gBAAgB,EACjB,MAAM,eAAe,CAAC;AAGvB,OAAO,KAAK,EACV,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAClB,mBAAmB,EACnB,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAM1D,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,aAAa,CAAC;IACrB,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAChC,eAAe,EAAE,mBAAmB,EAAE,CAAC;IACvC,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,sDAAsD;IACtD,WAAW,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,kBAAkB,CAAC;IAC5D,sFAAsF;IACtF,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACzE,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC;IAC1B,8CAA8C;IAC9C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,aAAa,CAAC,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAC9D,gFAAgF;IAChF,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B;;;;OAIG;IACH,YAAY,CAAC,EAAE,oBAAoB,CAAC;IACpC;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,oBAAoB,CAAC;CACjC;AAgBD,UAAU,uBAAuB;IAC/B,YAAY,CAAC,EAAE,oBAAoB,CAAC;IACpC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IACjD,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACvD,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,MAAM,OAAO,CAAC;CAClC;AA8HD;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,eAAe,EACvB,OAAO,GAAE,uBAA4B,GACpC,eAAe,CAkCjB;AAoFD;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,sBAAsB,CAAC,CA8MjC;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,aAAa,CAAC,gBAAgB,CAAC,GACrC,IAAI,CA4BN;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,aAAa,EACpB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GACd,IAAI,CAQN"}
package/dist/run-loop.js CHANGED
@@ -1,6 +1,18 @@
1
1
  import { EventType } from "@ag-ui/client";
2
+ import { aggregateTokenUsage } from "@ag-ui/core";
2
3
  import { parseToolArgs, stringifyHandlerResult } from "./tools.js";
3
4
  import { channelDeliveryErrorDetails, isChannelDeliveryTerminatedError, } from "./delivery-error.js";
5
+ /**
6
+ * The identity half of `forwardedProps`, as a spreadable object.
7
+ *
8
+ * Empty when the turn named nobody, so the run carries no `channelActor` key at
9
+ * all rather than one holding `undefined`. An agent then gets the same answer
10
+ * from a missing key and an anonymous turn, instead of two shapes meaning one
11
+ * thing.
12
+ */
13
+ function forwardedIdentity(identity) {
14
+ return identity ? { channelActor: identity } : {};
15
+ }
4
16
  /**
5
17
  * Merge two subscriber callback results while preserving either subscriber's
6
18
  * request to stop propagation.
@@ -78,8 +90,14 @@ function canonicalizeSubscriberParams(params, options, stampedEvents) {
78
90
  (event.type === EventType.RUN_STARTED ||
79
91
  event.type === EventType.RUN_FINISHED ||
80
92
  event.type === EventType.RUN_ERROR)) {
81
- if (event.type === EventType.RUN_ERROR) {
82
- options.onInnerRunError?.(event);
93
+ if (!stampedEvents.has(event)) {
94
+ stampedEvents.set(event, event);
95
+ if (event.type === EventType.RUN_ERROR) {
96
+ options.onInnerRunError?.(event);
97
+ }
98
+ else if (event.type === EventType.RUN_FINISHED) {
99
+ options.onInnerRunFinished?.(event);
100
+ }
83
101
  }
84
102
  return undefined;
85
103
  }
@@ -147,7 +165,9 @@ async function emitCanonicalLifecycleEvent(event, result, args, onRendererError,
147
165
  state: args.agent.state,
148
166
  tools: [...args.toolDescriptors],
149
167
  context: [...args.context],
150
- forwardedProps: {},
168
+ // Mirrors what the loop actually sends, so a subscriber reading `input`
169
+ // sees the same turn the agent saw.
170
+ forwardedProps: forwardedIdentity(args.identity),
151
171
  };
152
172
  const baseParams = {
153
173
  messages: args.agent.messages,
@@ -184,6 +204,8 @@ async function emitCanonicalLifecycleEvent(event, result, args, onRendererError,
184
204
  export async function runAgentLoop(args) {
185
205
  const { agent, renderer, tools, toolDescriptors, context, makeToolCtx, handleInterrupt, isAborted, initialResume, } = args;
186
206
  let innerRunError;
207
+ const innerRunUsage = [];
208
+ let innerRunFinishReason;
187
209
  let hasDeliveryError = false;
188
210
  let deliveryError;
189
211
  const deferRendererError = (error) => {
@@ -200,6 +222,11 @@ export async function runAgentLoop(args) {
200
222
  onInnerRunError: (event) => {
201
223
  innerRunError ??= errorFromInnerRun(event);
202
224
  },
225
+ onInnerRunFinished: (event) => {
226
+ innerRunFinishReason = event.finishReason;
227
+ if (event.usage)
228
+ innerRunUsage.push(...event.usage);
229
+ },
203
230
  onRendererError: deferRendererError,
204
231
  isRendererClosed,
205
232
  }
@@ -211,11 +238,20 @@ export async function runAgentLoop(args) {
211
238
  const executeIterations = async () => {
212
239
  for (let i = 0; i < maxIterations; i++) {
213
240
  if (resume) {
214
- await agent.runAgent({ forwardedProps: { command: resume } }, subscriber);
241
+ await agent.runAgent({
242
+ forwardedProps: {
243
+ ...forwardedIdentity(args.identity),
244
+ command: resume,
245
+ },
246
+ }, subscriber);
215
247
  resume = undefined;
216
248
  }
217
249
  else {
218
- await agent.runAgent({ tools: toolDescriptors, context: context }, subscriber);
250
+ await agent.runAgent({
251
+ tools: toolDescriptors,
252
+ context: context,
253
+ forwardedProps: forwardedIdentity(args.identity),
254
+ }, subscriber);
219
255
  }
220
256
  if (innerRunError)
221
257
  throw innerRunError;
@@ -277,10 +313,15 @@ export async function runAgentLoop(args) {
277
313
  try {
278
314
  await emitCanonicalLifecycleEvent(startEvent, undefined, args, deferRendererError, isRendererClosed);
279
315
  const result = await executeIterations();
316
+ const usage = aggregateTokenUsage(innerRunUsage);
280
317
  const finishedEvent = {
281
318
  type: EventType.RUN_FINISHED,
282
319
  threadId: args.canonicalRun.threadId,
283
320
  runId: args.canonicalRun.runId,
321
+ ...(usage.length > 0 ? { usage } : {}),
322
+ ...(innerRunFinishReason !== undefined
323
+ ? { finishReason: innerRunFinishReason }
324
+ : {}),
284
325
  };
285
326
  await emitCanonicalLifecycleEvent(finishedEvent, result, args, deferRendererError, isRendererClosed);
286
327
  return hasDeliveryError ? { ...result, deliveryError } : result;
@@ -184,4 +184,60 @@ describe("runAgentLoop", () => {
184
184
  expect(result.interrupted).toBe(false);
185
185
  expect(result.iterations).toBeGreaterThanOrEqual(1);
186
186
  });
187
+ describe("forwarded identity", () => {
188
+ const finishOnce = () => [
189
+ (sub) => {
190
+ sub.onRunFinishedEvent?.({ event: {} });
191
+ },
192
+ ];
193
+ const baseArgs = (agent) => ({
194
+ agent,
195
+ renderer: makeFakeRunRenderer(),
196
+ tools: new Map(),
197
+ toolDescriptors,
198
+ context,
199
+ makeToolCtx: () => ({
200
+ thread: {},
201
+ user: null,
202
+ actor: { id: "actor", kind: "unknown" },
203
+ platform: "fake",
204
+ }),
205
+ });
206
+ const identity = {
207
+ id: "29:1a2b3c",
208
+ kind: "human",
209
+ platform: "teams",
210
+ name: "Ada",
211
+ };
212
+ it("forwards the actor to the agent on a normal run", async () => {
213
+ const agent = new FakeAgent(finishOnce());
214
+ await runAgentLoop({ ...baseArgs(agent), identity });
215
+ expect(agent.runAgentParameters[0]?.forwardedProps).toEqual({
216
+ channelActor: identity,
217
+ });
218
+ });
219
+ it("keeps a provider id verbatim, including characters a model provider would reject", async () => {
220
+ const agent = new FakeAgent(finishOnce());
221
+ await runAgentLoop({ ...baseArgs(agent), identity });
222
+ const forwarded = agent.runAgentParameters[0]?.forwardedProps;
223
+ expect(forwarded.channelActor.id).toBe("29:1a2b3c");
224
+ });
225
+ it("forwards the actor alongside the resume command", async () => {
226
+ const agent = new FakeAgent(finishOnce());
227
+ await runAgentLoop({
228
+ ...baseArgs(agent),
229
+ identity,
230
+ initialResume: { resume: { decision: "approve" } },
231
+ });
232
+ expect(agent.runAgentParameters[0]?.forwardedProps).toEqual({
233
+ channelActor: identity,
234
+ command: { resume: { decision: "approve" } },
235
+ });
236
+ });
237
+ it("carries no actor key at all when the turn named nobody", async () => {
238
+ const agent = new FakeAgent(finishOnce());
239
+ await runAgentLoop(baseArgs(agent));
240
+ expect(agent.runAgentParameters[0]?.forwardedProps).toEqual({});
241
+ });
242
+ });
187
243
  });
@@ -24,8 +24,15 @@ function streamResponse(chunks, contentType = "text/event-stream") {
24
24
  }
25
25
  /**
26
26
  * A run whose `TOOL_CALL_START` carries `parentMessageId: null` — the shape
27
- * `@ag-ui/langgraph` emits for the tool call that triggers an interrupt, and
28
- * the one `EventSchemas.parse` rejects with "Expected string, received null".
27
+ * `@ag-ui/langgraph` emits for the tool call that triggers an interrupt.
28
+ *
29
+ * Up to @ag-ui/client 0.0.57 this was rejected by `EventSchemas.parse` with
30
+ * "Expected string, received null", which is why the sanitizer exists. As of
31
+ * 0.0.59 the client accepts it: a null `parentMessageId` on TOOL_CALL_START is
32
+ * one of a small set of receive tolerances kept for producers that still emit
33
+ * it, and the reducer treats the null as absent. The sanitizer still coerces
34
+ * the byte on the wire (see the coercion tests below), but it is no longer
35
+ * what keeps such a run alive.
29
36
  */
30
37
  const nullParentRun = () => [
31
38
  frame({ type: "RUN_STARTED", threadId: "t1", runId: "r1" }),
@@ -60,9 +67,20 @@ describe("sanitizeAgentEventStream", () => {
60
67
  });
61
68
  expect(started).toEqual(["ask_human"]);
62
69
  });
63
- it("aborts that same run when the sanitizer is not applied", async () => {
70
+ it("survives that same run without the sanitizer, since 0.0.59 tolerates the null", async () => {
71
+ // Before @ag-ui/client 0.0.59 this rejected with "Expected string,
72
+ // received null" — the failure the sanitizer was written to prevent. The
73
+ // client now accepts the null and treats it as absent, so the raw run
74
+ // reaches the tool call on its own. Asserting the tool call still arrives
75
+ // (rather than just "does not throw") keeps this a real check: a client
76
+ // that dropped the malformed event instead of tolerating it would fail
77
+ // here.
64
78
  const agent = agentServing(nullParentRun());
65
- await expect(agent.runAgent({})).rejects.toThrow(/parentMessageId|received null/);
79
+ const started = [];
80
+ await agent.runAgent({}, {
81
+ onToolCallStartEvent: ({ event }) => void started.push(event.toolCallName),
82
+ });
83
+ expect(started).toEqual(["ask_human"]);
66
84
  });
67
85
  it("coerces the null to an empty string and leaves every other byte alone", async () => {
68
86
  const agent = sanitizeAgentEventStream(agentServing([
@@ -187,10 +205,13 @@ describe("createChannel({ sanitizeAgentEvents })", () => {
187
205
  await tick();
188
206
  expect(failure).toBeUndefined();
189
207
  });
190
- it("lets the run abort when sanitizing is disabled", async () => {
208
+ it("no longer aborts the turn when sanitizing is disabled", async () => {
209
+ // The channel-level counterpart of the test above: with 0.0.59 tolerating
210
+ // the null parentMessageId, opting out of the sanitizer no longer costs
211
+ // the turn.
191
212
  const failure = await runTurn(agentServing(nullParentRun()), {
192
213
  sanitizeAgentEvents: false,
193
214
  });
194
- expect(String(failure)).toMatch(/parentMessageId|received null/);
215
+ expect(failure).toBeUndefined();
195
216
  });
196
217
  });
@@ -17,12 +17,14 @@ export declare class FakeAgent extends AbstractAgent {
17
17
  private script;
18
18
  /** Number of `runAgent` invocations seen — handy for loop-termination asserts. */
19
19
  runAgentCalls: number;
20
+ /** Every `runAgent` argument in order, for asserting what a run carried. */
21
+ runAgentParameters: Array<RunAgentParameters | undefined>;
20
22
  /** Flipped to true by `abortRun()`. */
21
23
  aborted: boolean;
22
24
  constructor(script?: FakeAgentScriptStep[]);
23
25
  setScript(script: FakeAgentScriptStep[]): void;
24
26
  run(_input: RunAgentInput): ReturnType<AbstractAgent["run"]>;
25
- runAgent(_parameters?: RunAgentParameters, subscriber?: AgentSubscriber): Promise<RunAgentResult>;
27
+ runAgent(parameters?: RunAgentParameters, subscriber?: AgentSubscriber): Promise<RunAgentResult>;
26
28
  abortRun(): void;
27
29
  /**
28
30
  * Distinct instance for concurrent channel turns (singleton agent isolation).
@@ -1 +1 @@
1
- {"version":3,"file":"fake-agent.d.ts","sourceRoot":"","sources":["../../src/testing/fake-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,cAAc,EACf,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAChC,UAAU,EAAE,eAAe,KACxB,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1B;;;;GAIG;AACH,qBAAa,SAAU,SAAQ,aAAa;IAC1C,OAAO,CAAC,MAAM,CAAwB;IACtC,kFAAkF;IAClF,aAAa,SAAK;IAClB,uCAAuC;IACvC,OAAO,UAAS;gBAEJ,MAAM,GAAE,mBAAmB,EAAO;IAK9C,SAAS,CAAC,MAAM,EAAE,mBAAmB,EAAE,GAAG,IAAI;IAM9C,GAAG,CAAC,MAAM,EAAE,aAAa,GAAG,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAI7C,QAAQ,CACrB,WAAW,CAAC,EAAE,kBAAkB,EAChC,UAAU,CAAC,EAAE,eAAe,GAC3B,OAAO,CAAC,cAAc,CAAC;IASjB,QAAQ,IAAI,IAAI;IAIzB;;;OAGG;IACM,KAAK,IAAI,SAAS;CAQ5B"}
1
+ {"version":3,"file":"fake-agent.d.ts","sourceRoot":"","sources":["../../src/testing/fake-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,cAAc,EACf,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAChC,UAAU,EAAE,eAAe,KACxB,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1B;;;;GAIG;AACH,qBAAa,SAAU,SAAQ,aAAa;IAC1C,OAAO,CAAC,MAAM,CAAwB;IACtC,kFAAkF;IAClF,aAAa,SAAK;IAClB,4EAA4E;IAC5E,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAAM;IAC/D,uCAAuC;IACvC,OAAO,UAAS;gBAEJ,MAAM,GAAE,mBAAmB,EAAO;IAK9C,SAAS,CAAC,MAAM,EAAE,mBAAmB,EAAE,GAAG,IAAI;IAM9C,GAAG,CAAC,MAAM,EAAE,aAAa,GAAG,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAI7C,QAAQ,CACrB,UAAU,CAAC,EAAE,kBAAkB,EAC/B,UAAU,CAAC,EAAE,eAAe,GAC3B,OAAO,CAAC,cAAc,CAAC;IAUjB,QAAQ,IAAI,IAAI;IAIzB;;;OAGG;IACM,KAAK,IAAI,SAAS;CAQ5B"}
@@ -8,6 +8,8 @@ export class FakeAgent extends AbstractAgent {
8
8
  script;
9
9
  /** Number of `runAgent` invocations seen — handy for loop-termination asserts. */
10
10
  runAgentCalls = 0;
11
+ /** Every `runAgent` argument in order, for asserting what a run carried. */
12
+ runAgentParameters = [];
11
13
  /** Flipped to true by `abortRun()`. */
12
14
  aborted = false;
13
15
  constructor(script = []) {
@@ -22,8 +24,9 @@ export class FakeAgent extends AbstractAgent {
22
24
  run(_input) {
23
25
  throw new Error("FakeAgent.run unused; runAgent is overridden");
24
26
  }
25
- async runAgent(_parameters, subscriber) {
27
+ async runAgent(parameters, subscriber) {
26
28
  this.runAgentCalls += 1;
29
+ this.runAgentParameters.push(parameters);
27
30
  const step = this.script.shift();
28
31
  if (step && subscriber) {
29
32
  await step(subscriber);
package/dist/thread.d.ts CHANGED
@@ -48,6 +48,13 @@ export interface ThreadDeps {
48
48
  }) => void | Promise<void>>;
49
49
  /** Pluggable persistence. Injected by createChannel; always required. */
50
50
  state: StateStore;
51
+ /**
52
+ * How long a captured interrupt value is retained so `resume` can echo it back
53
+ * as `command.interruptEvent`. Should match the action retention, since the
54
+ * button that triggers the resume is what bounds its useful life. Defaults to
55
+ * {@link DEFAULT_INTERRUPT_RETENTION_MS}.
56
+ */
57
+ interruptRetentionMs?: number;
51
58
  /**
52
59
  * Optional Standard Schema for per-thread state. When set, `setState`
53
60
  * validates its argument before persisting and throws on a schema mismatch.
@@ -160,6 +167,21 @@ export declare class Thread implements ThreadInterface {
160
167
  setState<T>(v: T): Promise<void>;
161
168
  /** Read back per-thread state previously written with `setState`. */
162
169
  state<T>(): Promise<T | undefined>;
170
+ private interruptEventKey;
171
+ /**
172
+ * Retain the raw value of a captured interrupt so a later {@link resume} can
173
+ * echo it back to the agent as `command.interruptEvent`.
174
+ *
175
+ * PERSISTED, not in-memory, because the resume arrives in a DIFFERENT run —
176
+ * possibly in a different process after a restart, which is the whole reason
177
+ * this HITL path exists. Stored per conversation, matching the fact that a
178
+ * renderer tracks a single pending interrupt: a second interrupt in the same
179
+ * conversation legitimately supersedes the first.
180
+ *
181
+ * Best-effort: an agent that needs no correlation data (LangGraph) resumes
182
+ * fine without this, so a store failure must not take the interrupt down.
183
+ */
184
+ private rememberInterruptEvent;
163
185
  /** Read the conversation's messages (returns `[]` when the adapter can't read history). */
164
186
  getMessages(): Promise<ThreadMessage[]>;
165
187
  /** Resolve a platform user by free-form query (returns `undefined` when unsupported). */
@@ -1 +1 @@
1
- {"version":3,"file":"thread.d.ts","sourceRoot":"","sources":["../src/thread.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"thread.d.ts","sourceRoot":"","sources":["../src/thread.ts"],"names":[],"mappings":"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"}