@copilotkit/channels-core 0.7.2 → 0.7.3

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.
@@ -305,7 +305,17 @@ test("managed renderer failure freezes later rendering while canonical ingestion
305
305
  ]);
306
306
  });
307
307
  test("terminal delivery tool failure stops the loop and closes renderer fanout", async () => {
308
- const deliveryError = new ChannelDeliveryTerminatedError("provider delivery timed out");
308
+ const details = {
309
+ category: "validation",
310
+ provider: "slack",
311
+ operation: "chat.postMessage",
312
+ effectKind: "slack.message.create",
313
+ providerCode: "invalid_blocks",
314
+ validationMessages: ["invalid field at /blocks/2/elements/0/children"],
315
+ retryable: false,
316
+ deliveryId: "dlv_delivery_1",
317
+ };
318
+ const deliveryError = new ChannelDeliveryTerminatedError("provider delivery timed out", { cause: details, details });
309
319
  let agent;
310
320
  agent = new FakeAgent([
311
321
  (subscriber) => emitBatch(subscriber, agent, "inner-run-1", [
@@ -360,6 +370,12 @@ test("terminal delivery tool failure stops the loop and closes renderer fanout",
360
370
  type === EventType.RUN_FINISHED ||
361
371
  type === EventType.RUN_ERROR)
362
372
  .map(({ type }) => type)).toEqual([EventType.RUN_STARTED, EventType.RUN_ERROR]);
373
+ expect(ingestedEvents.find(({ type }) => type === EventType.RUN_ERROR)).toMatchObject({
374
+ message: "provider delivery timed out",
375
+ category: "validation",
376
+ details,
377
+ cause: details,
378
+ });
363
379
  });
364
380
  test("inner RUN_ERROR becomes one canonical outer RUN_ERROR", async () => {
365
381
  let agent;
@@ -5,13 +5,32 @@
5
5
  * continuing the agent would let later events render through a closed delivery.
6
6
  */
7
7
  declare const CHANNEL_DELIVERY_TERMINATED: unique symbol;
8
+ declare const CHANNEL_DELIVERY_ERROR_DETAILS: unique symbol;
9
+ /** Safe provider diagnostics that may cross the canonical AG-UI error path. */
10
+ export interface ChannelDeliveryErrorDetails {
11
+ readonly category: "validation";
12
+ readonly provider: "slack" | "teams";
13
+ readonly operation: string;
14
+ readonly effectKind: string;
15
+ readonly providerCode: "invalid_arguments" | "invalid_blocks";
16
+ readonly validationMessages: readonly string[];
17
+ readonly retryable: false;
18
+ readonly deliveryId: string;
19
+ }
20
+ export interface ChannelDeliveryTerminatedErrorOptions extends ErrorOptions {
21
+ readonly details?: ChannelDeliveryErrorDetails;
22
+ }
8
23
  export declare class ChannelDeliveryTerminatedError extends Error {
9
24
  readonly [CHANNEL_DELIVERY_TERMINATED] = true;
10
- constructor(message: string, options?: ErrorOptions);
25
+ readonly [CHANNEL_DELIVERY_ERROR_DETAILS]?: ChannelDeliveryErrorDetails;
26
+ readonly details?: ChannelDeliveryErrorDetails;
27
+ constructor(message: string, options?: ChannelDeliveryTerminatedErrorOptions);
11
28
  }
12
29
  /**
13
30
  * Recognize terminal delivery errors across duplicated package installations.
14
31
  */
15
32
  export declare function isChannelDeliveryTerminatedError(error: unknown): error is ChannelDeliveryTerminatedError;
33
+ /** Return only diagnostics stamped by the Channel delivery boundary. */
34
+ export declare function channelDeliveryErrorDetails(error: unknown): ChannelDeliveryErrorDetails | undefined;
16
35
  export {};
17
36
  //# sourceMappingURL=delivery-error.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"delivery-error.d.ts","sourceRoot":"","sources":["../src/delivery-error.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,QAAA,MAAM,2BAA2B,eAEhC,CAAC;AAEF,qBAAa,8BAA+B,SAAQ,KAAK;IACvD,QAAQ,CAAC,CAAC,2BAA2B,CAAC,QAAQ;gBAElC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAIpD;AAED;;GAEG;AACH,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,8BAA8B,CAQzC"}
1
+ {"version":3,"file":"delivery-error.d.ts","sourceRoot":"","sources":["../src/delivery-error.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,QAAA,MAAM,2BAA2B,eAEhC,CAAC;AACF,QAAA,MAAM,8BAA8B,eAEnC,CAAC;AAEF,+EAA+E;AAC/E,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,mBAAmB,GAAG,gBAAgB,CAAC;IAC9D,QAAQ,CAAC,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/C,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,qCAAsC,SAAQ,YAAY;IACzE,QAAQ,CAAC,OAAO,CAAC,EAAE,2BAA2B,CAAC;CAChD;AAED,qBAAa,8BAA+B,SAAQ,KAAK;IACvD,QAAQ,CAAC,CAAC,2BAA2B,CAAC,QAAQ;IAC9C,QAAQ,CAAC,CAAC,8BAA8B,CAAC,CAAC,EAAE,2BAA2B,CAAC;IACxE,QAAQ,CAAC,OAAO,CAAC,EAAE,2BAA2B,CAAC;gBAG7C,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,qCAAqC;CASlD;AAED;;GAEG;AACH,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,8BAA8B,CAQzC;AAED,wEAAwE;AACxE,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,OAAO,GACb,2BAA2B,GAAG,SAAS,CAKzC"}
@@ -5,11 +5,18 @@
5
5
  * continuing the agent would let later events render through a closed delivery.
6
6
  */
7
7
  const CHANNEL_DELIVERY_TERMINATED = Symbol.for("copilotkit.channels.deliveryTerminated");
8
+ const CHANNEL_DELIVERY_ERROR_DETAILS = Symbol.for("copilotkit.channels.deliveryErrorDetails");
8
9
  export class ChannelDeliveryTerminatedError extends Error {
9
10
  [CHANNEL_DELIVERY_TERMINATED] = true;
11
+ [CHANNEL_DELIVERY_ERROR_DETAILS];
12
+ details;
10
13
  constructor(message, options) {
11
14
  super(message, options);
12
15
  this.name = "ChannelDeliveryTerminatedError";
16
+ if (isChannelDeliveryErrorDetails(options?.details)) {
17
+ this.details = options.details;
18
+ this[CHANNEL_DELIVERY_ERROR_DETAILS] = options.details;
19
+ }
13
20
  }
14
21
  }
15
22
  /**
@@ -20,3 +27,41 @@ export function isChannelDeliveryTerminatedError(error) {
20
27
  error !== null &&
21
28
  error[CHANNEL_DELIVERY_TERMINATED] === true);
22
29
  }
30
+ /** Return only diagnostics stamped by the Channel delivery boundary. */
31
+ export function channelDeliveryErrorDetails(error) {
32
+ if (typeof error !== "object" || error === null)
33
+ return undefined;
34
+ return error[CHANNEL_DELIVERY_ERROR_DETAILS];
35
+ }
36
+ function isChannelDeliveryErrorDetails(value) {
37
+ if (typeof value !== "object" || value === null)
38
+ return false;
39
+ const details = value;
40
+ const allowed = new Set([
41
+ "category",
42
+ "provider",
43
+ "operation",
44
+ "effectKind",
45
+ "providerCode",
46
+ "validationMessages",
47
+ "retryable",
48
+ "deliveryId",
49
+ ]);
50
+ return (Object.keys(details).every((field) => allowed.has(field)) &&
51
+ details.category === "validation" &&
52
+ (details.provider === "slack" || details.provider === "teams") &&
53
+ boundedString(details.operation, 80) &&
54
+ boundedString(details.effectKind, 80) &&
55
+ (details.providerCode === "invalid_arguments" ||
56
+ details.providerCode === "invalid_blocks") &&
57
+ details.retryable === false &&
58
+ boundedString(details.deliveryId, 512) &&
59
+ Array.isArray(details.validationMessages) &&
60
+ details.validationMessages.length <= 5 &&
61
+ details.validationMessages.every((message) => typeof message === "string" &&
62
+ message.length <= 256 &&
63
+ message.startsWith("invalid field at /")));
64
+ }
65
+ function boundedString(value, maxLength) {
66
+ return (typeof value === "string" && value.length > 0 && value.length <= maxLength);
67
+ }
package/dist/index.d.ts CHANGED
@@ -27,7 +27,8 @@ export { mintId, stableStringify } from "./mint-id.js";
27
27
  export { runAgentLoop } from "./run-loop.js";
28
28
  export type { RunLoopArgs } from "./run-loop.js";
29
29
  export { ChannelContinuationRequiredError, ChannelMemorySubjectRequiredError, ChannelMemoryUnavailableError, ChannelMemoryUserRequiredError, } from "./thread.js";
30
- export { ChannelDeliveryTerminatedError, isChannelDeliveryTerminatedError, } from "./delivery-error.js";
30
+ export { channelDeliveryErrorDetails, ChannelDeliveryTerminatedError, isChannelDeliveryTerminatedError, } from "./delivery-error.js";
31
+ export type { ChannelDeliveryErrorDetails, ChannelDeliveryTerminatedErrorOptions, } from "./delivery-error.js";
31
32
  export type { PlatformCodec } from "./codec.js";
32
33
  export { ChannelMemoryGrantInvalidError, hasMemoryAccess, resolveMemoryGrant, } from "./memory.js";
33
34
  export type { MemoryAccess, MemoryGrant, ResolvedChannelMemory, } from "./memory.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -35,7 +35,7 @@ export { mintId, stableStringify } from "./mint-id.js";
35
35
  // Run loop
36
36
  export { runAgentLoop } from "./run-loop.js";
37
37
  export { ChannelContinuationRequiredError, ChannelMemorySubjectRequiredError, ChannelMemoryUnavailableError, ChannelMemoryUserRequiredError, } from "./thread.js";
38
- export { ChannelDeliveryTerminatedError, isChannelDeliveryTerminatedError, } from "./delivery-error.js";
38
+ export { channelDeliveryErrorDetails, ChannelDeliveryTerminatedError, isChannelDeliveryTerminatedError, } from "./delivery-error.js";
39
39
  // Per-run Intelligence Memory grants.
40
40
  export { ChannelMemoryGrantInvalidError, hasMemoryAccess, resolveMemoryGrant, } from "./memory.js";
41
41
  // Test utilities (also surfaces them for downstream adapter packages' tests).
@@ -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;AAIpB,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,CA2KjC;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,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"}
package/dist/run-loop.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { EventType } from "@ag-ui/client";
2
2
  import { parseToolArgs, stringifyHandlerResult } from "./tools.js";
3
- import { isChannelDeliveryTerminatedError } from "./delivery-error.js";
3
+ import { channelDeliveryErrorDetails, isChannelDeliveryTerminatedError, } from "./delivery-error.js";
4
4
  /**
5
5
  * Merge two subscriber callback results while preserving either subscriber's
6
6
  * request to stop propagation.
@@ -286,6 +286,7 @@ export async function runAgentLoop(args) {
286
286
  return hasDeliveryError ? { ...result, deliveryError } : result;
287
287
  }
288
288
  catch (error) {
289
+ const details = channelDeliveryErrorDetails(error);
289
290
  const runError = {
290
291
  type: EventType.RUN_ERROR,
291
292
  threadId: args.canonicalRun.threadId,
@@ -297,6 +298,20 @@ export async function runAgentLoop(args) {
297
298
  typeof error.code === "string"
298
299
  ? { code: error.code }
299
300
  : {}),
301
+ ...(details
302
+ ? {
303
+ category: details.category,
304
+ provider: details.provider,
305
+ operation: details.operation,
306
+ effectKind: details.effectKind,
307
+ providerCode: details.providerCode,
308
+ validationMessages: details.validationMessages,
309
+ retryable: details.retryable,
310
+ deliveryId: details.deliveryId,
311
+ details,
312
+ cause: details,
313
+ }
314
+ : {}),
300
315
  };
301
316
  try {
302
317
  await emitCanonicalLifecycleEvent(runError, undefined, args, deferRendererError, isRendererClosed);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@copilotkit/channels-core",
3
- "version": "0.7.2",
3
+ "version": "0.7.3",
4
4
  "description": "Platform-agnostic JSX channel engine for CopilotKit (createChannel, Thread, PlatformAdapter, ActionStore).",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -51,9 +51,9 @@
51
51
  "@ag-ui/client": "0.0.57",
52
52
  "@ag-ui/core": "0.0.57",
53
53
  "zod-to-json-schema": "^3.24.1",
54
- "@copilotkit/channels-ui": "~0.7.2",
55
- "@copilotkit/core": "^1.66.1",
56
- "@copilotkit/shared": "^1.66.1"
54
+ "@copilotkit/channels-ui": "~0.7.3",
55
+ "@copilotkit/shared": "^1.66.1",
56
+ "@copilotkit/core": "^1.66.1"
57
57
  },
58
58
  "devDependencies": {
59
59
  "@types/node": "^22.10.0",