diff --git a/packages/runtime/package.json b/packages/runtime/package.json
index 245bf8135ce..2365cf8cbc7 100644
--- a/packages/runtime/package.json
+++ b/packages/runtime/package.json
@@ -77,11 +77,11 @@
"attw": "attw --pack . --profile node16"
},
"dependencies": {
- "@ag-ui/a2ui-middleware": "0.0.8",
+ "@ag-ui/a2ui-middleware": "0.0.10",
"@ag-ui/client": "0.0.57",
"@ag-ui/core": "0.0.57",
"@ag-ui/encoder": "0.0.57",
- "@ag-ui/langgraph": "0.0.41",
+ "@ag-ui/langgraph": "0.0.42",
"@ag-ui/mcp-apps-middleware": "0.0.3",
"@ag-ui/mcp-middleware": "0.0.1",
"@ai-sdk/anthropic": "^3.0.49",
diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json
index e67c8ec95fc..ec24308aa32 100644
--- a/packages/sdk-js/package.json
+++ b/packages/sdk-js/package.json
@@ -59,7 +59,7 @@
"attw": "attw --pack . --profile node16"
},
"dependencies": {
- "@ag-ui/langgraph": "0.0.41",
+ "@ag-ui/langgraph": "0.0.42",
"@copilotkit/shared": "workspace:*"
},
"devDependencies": {
diff --git a/packages/sdk-js/src/langgraph/__tests__/middleware.a2ui-params.test.ts b/packages/sdk-js/src/langgraph/__tests__/middleware.a2ui-params.test.ts
new file mode 100644
index 00000000000..baee467f464
--- /dev/null
+++ b/packages/sdk-js/src/langgraph/__tests__/middleware.a2ui-params.test.ts
@@ -0,0 +1,134 @@
+/**
+ * Tests for the host `a2uiParams` override on the auto-injected generate_a2ui
+ * tool (the design-guidelines parity gap).
+ *
+ * Before this, the auto-inject path hardwired getA2UITools to the toolkit
+ * defaults: a host serving via copilotkitMiddleware could NOT override the
+ * design/generation guidelines (e.g. to favor a repeating-card layout). The
+ * `a2uiParams` option threads a host override through; the middleware still
+ * injects the bound model and folds the registered catalog in (host wins).
+ *
+ * We mock @ag-ui/langgraph's getA2UITools to capture the params it is handed —
+ * the real factory's bound guidelines are a closure the tool object never
+ * exposes, so capture-at-the-boundary is the only way to assert what reached
+ * the subagent. Isolated in its own file so the module-wide mock does not
+ * affect the behavior tests in middleware.test.ts.
+ */
+
+import { describe, it, expect, beforeEach, vi } from "vitest";
+
+const { captured } = vi.hoisted(() => ({ captured: [] as any[] }));
+
+vi.mock("@ag-ui/langgraph", () => ({
+ getA2UITools: (params: any) => {
+ captured.push(params);
+ return { name: "generate_a2ui" };
+ },
+}));
+
+// Imported AFTER vi.mock so the middleware binds the mocked getA2UITools.
+import { createCopilotkitMiddleware } from "../middleware";
+
+function makeRequest(overrides: any = {}): any {
+ return {
+ model: { _modelType: () => "fake" },
+ messages: [],
+ systemPrompt: undefined,
+ tools: [],
+ state: { messages: [] },
+ runtime: {},
+ ...overrides,
+ };
+}
+
+async function runWrap(middleware: any, request: any) {
+ const handler = async (_req: any) => ({ content: "ok" }) as any;
+ await middleware.wrapModelCall(request, handler);
+}
+
+// Native path: schema present but non-JSON, so no catalogId / compositionGuide.
+const NATIVE_STATE = {
+ messages: [],
+ thread_id: "native",
+ "ag-ui": { a2ui_schema: "", inject_a2ui_tool: true },
+};
+
+// Runtime-proxy path: the catalog arrives as a context entry, so the middleware
+// derives a compositionGuide + catalogId to fold in.
+const CONTEXT_STATE = {
+ messages: [],
+ thread_id: "context",
+ "ag-ui": { inject_a2ui_tool: true },
+ copilotkit: {
+ context: [
+ {
+ description: "A2UI catalog capabilities",
+ value: "Available A2UI catalog:\n- my-custom-catalog\n - Card: {...}",
+ },
+ ],
+ },
+};
+
+describe("auto-A2UI host a2uiParams override", () => {
+ beforeEach(() => {
+ captured.length = 0;
+ });
+
+ it("threads host guidelines through to getA2UITools (native path)", async () => {
+ const middleware = createCopilotkitMiddleware({
+ a2uiParams: { guidelines: { designGuidelines: "REPEAT_CARDS_MARK" } },
+ });
+ const request = makeRequest({ state: { ...NATIVE_STATE } });
+
+ await runWrap(middleware, request);
+
+ expect(captured).toHaveLength(1);
+ const params = captured[0];
+ // Host override survives...
+ expect(params.guidelines.designGuidelines).toBe("REPEAT_CARDS_MARK");
+ // ...the middleware still injects the bound model...
+ expect(params.model).toBe(request.model);
+ // ...and the native path contributes no compositionGuide.
+ expect(params.guidelines.compositionGuide).toBeUndefined();
+ });
+
+ it("merges host guidelines with the registered catalog (context path)", async () => {
+ const middleware = createCopilotkitMiddleware({
+ a2uiParams: { guidelines: { designGuidelines: "REPEAT_CARDS_MARK" } },
+ });
+
+ await runWrap(middleware, makeRequest({ state: { ...CONTEXT_STATE } }));
+
+ const params = captured[0];
+ expect(params.guidelines.designGuidelines).toBe("REPEAT_CARDS_MARK");
+ expect(params.guidelines.compositionGuide).toContain("my-custom-catalog");
+ expect(params.defaultCatalogId).toBe("my-custom-catalog");
+ });
+
+ it("host compositionGuide + defaultCatalogId win over the catalog", async () => {
+ const middleware = createCopilotkitMiddleware({
+ a2uiParams: {
+ defaultCatalogId: "host-catalog",
+ guidelines: { compositionGuide: "HOST_COMP" },
+ },
+ });
+
+ await runWrap(middleware, makeRequest({ state: { ...CONTEXT_STATE } }));
+
+ const params = captured[0];
+ expect(params.guidelines.compositionGuide).toBe("HOST_COMP");
+ expect(params.defaultCatalogId).toBe("host-catalog");
+ });
+
+ it("default (no a2uiParams) carries only the inferred model", async () => {
+ const middleware = createCopilotkitMiddleware();
+ const request = makeRequest({ state: { ...NATIVE_STATE } });
+
+ await runWrap(middleware, request);
+
+ const params = captured[0];
+ expect(params.model).toBe(request.model);
+ expect(params.guidelines).toBeUndefined();
+ expect(params.defaultCatalogId).toBeUndefined();
+ });
+});
diff --git a/packages/sdk-js/src/langgraph/middleware.ts b/packages/sdk-js/src/langgraph/middleware.ts
index 2d87c4bcc24..c2348431438 100644
--- a/packages/sdk-js/src/langgraph/middleware.ts
+++ b/packages/sdk-js/src/langgraph/middleware.ts
@@ -359,7 +359,10 @@ const copilotKitStateSchema = z.object({
),
});
-const buildMiddlewareInput = (exposeState: ExposeStateOption) => ({
+const buildMiddlewareInput = (
+ exposeState: ExposeStateOption,
+ a2uiParams?: Omit,
+) => ({
name: "CopilotKitMiddleware",
stateSchema: copilotKitStateSchema as unknown as InteropZodObject,
@@ -395,12 +398,24 @@ const buildMiddlewareInput = (exposeState: ExposeStateOption) => ({
if (typeof getA2UITools === "function" && decision) {
const catalog = resolveA2uiCatalog(request.state);
// Shared A2UIToolParams: a single params object owned by the toolkit.
- // `model` lives inside it; `compositionGuide` is folded into the
- // `guidelines` bag alongside generation/design overrides.
- const params: A2UIToolParams = { model: request.model };
- if (catalog?.catalogId) params.defaultCatalogId = catalog.catalogId;
- if (catalog?.compositionGuide)
- params.guidelines = { compositionGuide: catalog.compositionGuide };
+ // Start from the host overrides (guidelines / catalog id / tool name /
+ // recovery) so a host can steer the subagent, then layer in only what the
+ // host cannot know — the bound model, and the registered catalog id +
+ // compositionGuide — without clobbering any host-set value.
+ const params: A2UIToolParams = {
+ ...(a2uiParams ?? {}),
+ model: request.model,
+ };
+ if (catalog?.catalogId && params.defaultCatalogId == null)
+ params.defaultCatalogId = catalog.catalogId;
+ // Merge the registered catalog schema into any host `guidelines` bag; a
+ // host-set compositionGuide wins, host generation/design overrides stay.
+ if (catalog?.compositionGuide) {
+ const guidelines = { ...(params.guidelines ?? {}) };
+ if (guidelines.compositionGuide == null)
+ guidelines.compositionGuide = catalog.compositionGuide;
+ params.guidelines = guidelines;
+ }
const candidate = getA2UITools(params);
const existingNames = new Set(
(request.tools || []).map((t: any) => t?.name),
@@ -546,7 +561,15 @@ const buildMiddlewareInput = (exposeState: ExposeStateOption) => ({
* Build a CopilotKit middleware instance with custom options.
*
* Use this when you want to override the default state-exposure behavior
- * (for example to hide a sensitive key, or to use an explicit allowlist).
+ * (for example to hide a sensitive key, or to use an explicit allowlist), or
+ * to steer the auto-injected `generate_a2ui` subagent via `a2uiParams`.
+ *
+ * `a2uiParams` is an `A2UIToolParams` without `model` (the middleware always
+ * injects the bound model). Use it to override the subagent guidelines
+ * (`generationGuidelines` / `designGuidelines` / `compositionGuide`),
+ * `defaultCatalogId`, `toolName`, `recovery`, etc. on the auto-inject path —
+ * which otherwise only ever uses the toolkit defaults. The registered catalog
+ * is still folded in, but host-set values win.
*
* @example
* ```typescript
@@ -554,14 +577,20 @@ const buildMiddlewareInput = (exposeState: ExposeStateOption) => ({
*
* const middleware = createCopilotkitMiddleware({
* exposeState: ["liked", "todos"],
+ * a2uiParams: { guidelines: { designGuidelines: "...repeating-card layout..." } },
* });
* ```
*/
export const createCopilotkitMiddleware = (
- options: { exposeState?: ExposeStateOption } = {},
+ options: {
+ exposeState?: ExposeStateOption;
+ a2uiParams?: Omit;
+ } = {},
) => {
const exposeState = options.exposeState ?? false;
- return createMiddleware(buildMiddlewareInput(exposeState) as any);
+ return createMiddleware(
+ buildMiddlewareInput(exposeState, options.a2uiParams) as any,
+ );
};
/**
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index f68080648a7..55f1afafe2d 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -132,7 +132,7 @@ importers:
version: 0.13.0
jscodeshift:
specifier: ^17.3.0
- version: 17.3.0(@babel/preset-env@7.29.2(@babel/core@7.28.5))
+ version: 17.3.0(@babel/preset-env@7.29.2(@babel/core@7.29.0))
lefthook:
specifier: ^2.1.1
version: 2.1.1
@@ -261,7 +261,7 @@ importers:
version: 0.447.0(react@19.2.3)
next:
specifier: 16.2.3
- version: 16.2.3(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.3)
+ version: 16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.3)
openai:
specifier: ^4.96.2
version: 4.104.0(encoding@0.1.13)(ws@8.19.0)(zod@3.25.76)
@@ -349,7 +349,7 @@ importers:
version: 4.12.15
next:
specifier: 16.2.3
- version: 16.2.3(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.3)
+ version: 16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.3)
openai:
specifier: ^6.16.0
version: 6.24.0(ws@8.19.0)(zod@3.25.76)
@@ -489,7 +489,7 @@ importers:
version: 0.476.0(react@19.2.3)
next:
specifier: 16.2.3
- version: 16.2.3(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.3)
+ version: 16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.3)
react:
specifier: 19.2.3
version: 19.2.3
@@ -574,7 +574,7 @@ importers:
version: 0.476.0(react@19.2.3)
next:
specifier: ^16.0.10
- version: 16.1.3(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.3)
+ version: 16.1.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.3)
react:
specifier: 19.2.3
version: 19.2.3
@@ -653,7 +653,7 @@ importers:
version: 0.1.13
eslint-config-next:
specifier: ^15.0.2
- version: 15.4.4(eslint@9.39.2(jiti@2.7.0))(typescript@5.9.2)
+ version: 15.4.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.2)
flowtoken:
specifier: ^1.0.40
version: 1.0.40(@types/react@19.1.8)(react@19.2.3)
@@ -665,10 +665,10 @@ importers:
version: 0.3.37(@langchain/anthropic@0.3.34(@langchain/core@1.1.42(@opentelemetry/api@1.9.0)(openai@4.104.0(encoding@0.1.13)(ws@8.19.0)(zod@3.25.76))(ws@8.19.0))(zod@3.25.76))(@langchain/aws@1.1.1(@langchain/core@1.1.42(@opentelemetry/api@1.9.0)(openai@4.104.0(encoding@0.1.13)(ws@8.19.0)(zod@3.25.76))(ws@8.19.0)))(@langchain/core@1.1.42(@opentelemetry/api@1.9.0)(openai@4.104.0(encoding@0.1.13)(ws@8.19.0)(zod@3.25.76))(ws@8.19.0))(@opentelemetry/api@1.9.0)(axios@1.15.2)(encoding@0.1.13)(handlebars@4.7.9)(openai@4.104.0(encoding@0.1.13)(ws@8.19.0)(zod@3.25.76))(ws@8.19.0)
next:
specifier: ^16.0.10
- version: 16.1.3(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.3)
+ version: 16.1.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.3)
next-themes:
specifier: ^0.2.1
- version: 0.2.1(next@16.1.3(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ version: 0.2.1(next@16.1.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
openai:
specifier: ^4.85.1
version: 4.104.0(encoding@0.1.13)(ws@8.19.0)(zod@3.25.76)
@@ -747,7 +747,7 @@ importers:
version: 1.2.1
next:
specifier: ^16.0.10
- version: 16.1.3(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.3)
+ version: 16.1.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.3)
openai:
specifier: ^4.85.1
version: 4.104.0(encoding@0.1.13)(ws@8.19.0)(zod@3.25.76)
@@ -894,7 +894,7 @@ importers:
version: 0.451.0(react@19.2.3)
next:
specifier: ^16.0.10
- version: 16.1.3(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.3)
+ version: 16.1.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.3)
openai:
specifier: ^4.85.1
version: 4.104.0(encoding@0.1.13)(ws@8.19.0)(zod@3.25.76)
@@ -955,7 +955,7 @@ importers:
version: 11.18.2(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
next:
specifier: ^16.0.10
- version: 16.1.3(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.3)
+ version: 16.1.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.3)
react:
specifier: 19.2.3
version: 19.2.3
@@ -1055,7 +1055,7 @@ importers:
version: 0.414.0(react@19.2.3)
next:
specifier: ^16.0.10
- version: 16.1.3(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.3)
+ version: 16.1.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.3)
openai:
specifier: ^4.85.1
version: 4.104.0(encoding@0.1.13)(ws@8.19.0)(zod@3.25.76)
@@ -1430,7 +1430,7 @@ importers:
version: link:../../../../../packages/runtime
next:
specifier: 16.2.3
- version: 16.2.3(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.3)
+ version: 16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.3)
react:
specifier: 19.2.3
version: 19.2.3
@@ -1479,7 +1479,7 @@ importers:
version: link:../../../packages/react-core
next:
specifier: ^16.0.10
- version: 16.1.3(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.3)
+ version: 16.1.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.3)
react:
specifier: 19.2.3
version: 19.2.3
@@ -1739,7 +1739,7 @@ importers:
version: 4.12.15
next:
specifier: ^16.0.10
- version: 16.1.3(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.3)
+ version: 16.1.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.3)
openai:
specifier: ^5.9.0
version: 5.23.2(ws@8.19.0)(zod@3.25.76)
@@ -2956,8 +2956,8 @@ importers:
packages/runtime:
dependencies:
'@ag-ui/a2ui-middleware':
- specifier: 0.0.8
- version: 0.0.8(@ag-ui/client@0.0.57)(rxjs@7.8.1)
+ specifier: 0.0.10
+ version: 0.0.10(@ag-ui/client@0.0.57)(rxjs@7.8.1)
'@ag-ui/client':
specifier: 0.0.57
version: 0.0.57
@@ -2968,8 +2968,8 @@ importers:
specifier: 0.0.57
version: 0.0.57
'@ag-ui/langgraph':
- specifier: 0.0.41
- version: 0.0.41(@ag-ui/client@0.0.57)(@ag-ui/core@0.0.57)(@opentelemetry/api@1.9.0)(openai@4.104.0(encoding@0.1.13)(ws@8.19.0)(zod@3.25.76))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(vue@3.5.34(typescript@5.9.3))(ws@8.19.0)(zod-to-json-schema@3.25.1(zod@3.25.76))
+ specifier: 0.0.42
+ version: 0.0.42(@ag-ui/client@0.0.57)(@ag-ui/core@0.0.57)(@opentelemetry/api@1.9.0)(openai@4.104.0(encoding@0.1.13)(ws@8.19.0)(zod@3.25.76))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(vue@3.5.34(typescript@5.9.3))(ws@8.19.0)(zod-to-json-schema@3.25.1(zod@3.25.76))
'@ag-ui/mcp-apps-middleware':
specifier: 0.0.3
version: 0.0.3(@ag-ui/client@0.0.57)(@cfworker/json-schema@4.1.1)(zod@3.25.76)
@@ -3243,8 +3243,8 @@ importers:
packages/sdk-js:
dependencies:
'@ag-ui/langgraph':
- specifier: 0.0.41
- version: 0.0.41(@ag-ui/client@0.0.57)(@ag-ui/core@0.0.57)(@opentelemetry/api@1.9.0)(openai@6.44.0(ws@8.19.0)(zod@3.25.76))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(vue@3.5.34(typescript@5.9.3))(ws@8.19.0)(zod-to-json-schema@3.25.1(zod@3.25.76))
+ specifier: 0.0.42
+ version: 0.0.42(@ag-ui/client@0.0.57)(@ag-ui/core@0.0.57)(@opentelemetry/api@1.9.0)(openai@6.44.0(ws@8.19.0)(zod@3.25.76))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(vue@3.5.34(typescript@5.9.3))(ws@8.19.0)(zod-to-json-schema@3.25.1(zod@3.25.76))
'@copilotkit/shared':
specifier: workspace:*
version: link:../shared
@@ -3764,17 +3764,14 @@ packages:
'@ag-ui/client': '>=0.0.42'
'@ag-ui/core': '>=0.0.42'
- '@ag-ui/a2ui-middleware@0.0.8':
- resolution: {integrity: sha512-YXabOMyNekshHWLc63fD166ndy/zOXp+UWbx1alYoGRhO2y2uZJzOlPLvBAkFY4PF3Lng78ByG4mNpxJlSLDvw==}
+ '@ag-ui/a2ui-middleware@0.0.10':
+ resolution: {integrity: sha512-2BQFUQ9vJzUAQSR0dNW/ijhyH8KpiRWISSLTP6mIe6ENyQ2cM1/XLG38/Dcb69olcs36gtZADZzAQWcno5H6fA==}
peerDependencies:
'@ag-ui/client': '>=0.0.40'
rxjs: 7.8.1
- '@ag-ui/a2ui-toolkit@0.0.2':
- resolution: {integrity: sha512-HFphlNxBxGSQfvxlI2LCQValSMDUTh3MAsaFMgYlF8sQXgCrXNiLJ70+Dz3uyOv4y/rfqdFafvlo1GKQtEVIVA==}
-
- '@ag-ui/a2ui-toolkit@0.0.3':
- resolution: {integrity: sha512-bKjtuYQufGZ+vc2oTz1v5S6ab2gH/whQIIgbGfP+LMisdAkDV7bqeg4e+lZO3xNmdmkCa6nvkovtudMkqxmxEA==}
+ '@ag-ui/a2ui-toolkit@0.0.4':
+ resolution: {integrity: sha512-9VPmgpCAsFVICk7z23kh+Kp/BwYMxw0D0KGjOiKXhm1MAH+Wid2iC3yKsXso+q7UZZiyhWgeDUSgaAkltyLmGg==}
'@ag-ui/client@0.0.36':
resolution: {integrity: sha512-1Ey2KqK9KQpRJcnJvKPfVyLiTK4+CLBQZ085oJvr6T1nznw224j0KyzXNJ7cRjXeEGnuafmXTgpU+xEbN3xuYQ==}
@@ -3830,8 +3827,8 @@ packages:
'@ag-ui/langgraph@0.0.11':
resolution: {integrity: sha512-3xUkaOelnpQ5tbsbuoOTin71tTgWEN0GDZBjGs/7xAwly2Dn4fahbBAoscXullO/pH9kTGGgbuJ0rWDUgo6fKQ==}
- '@ag-ui/langgraph@0.0.41':
- resolution: {integrity: sha512-xo7ja/kuctmdPiH83QOUIpDs/AY3GzxW1fM37x9otK9fqwnKgi2JIcjfcdvAdGYdsCkXBn2WWQ2PVH+rdsLOzg==}
+ '@ag-ui/langgraph@0.0.42':
+ resolution: {integrity: sha512-dXasEbGQFJcasdoy5khYyDHZHYoD1/i7hioaP8cejfw+Dss4tLvN8ndzD6c5j0hmANaKscekl+zkF7UQq3sI9w==}
peerDependencies:
'@ag-ui/client': '>=0.0.42'
'@ag-ui/core': '>=0.0.42'
@@ -25314,16 +25311,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@ag-ui/a2ui-middleware@0.0.8(@ag-ui/client@0.0.57)(rxjs@7.8.1)':
+ '@ag-ui/a2ui-middleware@0.0.10(@ag-ui/client@0.0.57)(rxjs@7.8.1)':
dependencies:
- '@ag-ui/a2ui-toolkit': 0.0.2
+ '@ag-ui/a2ui-toolkit': 0.0.4
'@ag-ui/client': 0.0.57
clarinet: 0.12.6
rxjs: 7.8.1
- '@ag-ui/a2ui-toolkit@0.0.2': {}
-
- '@ag-ui/a2ui-toolkit@0.0.3': {}
+ '@ag-ui/a2ui-toolkit@0.0.4': {}
'@ag-ui/client@0.0.36':
dependencies:
@@ -25460,9 +25455,9 @@ snapshots:
- react-dom
- ws
- '@ag-ui/langgraph@0.0.41(@ag-ui/client@0.0.57)(@ag-ui/core@0.0.57)(@opentelemetry/api@1.9.0)(openai@4.104.0(encoding@0.1.13)(ws@8.19.0)(zod@3.25.76))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(vue@3.5.34(typescript@5.9.3))(ws@8.19.0)(zod-to-json-schema@3.25.1(zod@3.25.76))':
+ '@ag-ui/langgraph@0.0.42(@ag-ui/client@0.0.57)(@ag-ui/core@0.0.57)(@opentelemetry/api@1.9.0)(openai@4.104.0(encoding@0.1.13)(ws@8.19.0)(zod@3.25.76))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(vue@3.5.34(typescript@5.9.3))(ws@8.19.0)(zod-to-json-schema@3.25.1(zod@3.25.76))':
dependencies:
- '@ag-ui/a2ui-toolkit': 0.0.3
+ '@ag-ui/a2ui-toolkit': 0.0.4
'@ag-ui/client': 0.0.57
'@ag-ui/core': 0.0.57
'@langchain/core': 1.1.42(@opentelemetry/api@1.9.0)(openai@4.104.0(encoding@0.1.13)(ws@8.19.0)(zod@3.25.76))(ws@8.19.0)
@@ -25482,9 +25477,9 @@ snapshots:
- ws
- zod-to-json-schema
- '@ag-ui/langgraph@0.0.41(@ag-ui/client@0.0.57)(@ag-ui/core@0.0.57)(@opentelemetry/api@1.9.0)(openai@6.44.0(ws@8.19.0)(zod@3.25.76))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(vue@3.5.34(typescript@5.9.3))(ws@8.19.0)(zod-to-json-schema@3.25.1(zod@3.25.76))':
+ '@ag-ui/langgraph@0.0.42(@ag-ui/client@0.0.57)(@ag-ui/core@0.0.57)(@opentelemetry/api@1.9.0)(openai@6.44.0(ws@8.19.0)(zod@3.25.76))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(vue@3.5.34(typescript@5.9.3))(ws@8.19.0)(zod-to-json-schema@3.25.1(zod@3.25.76))':
dependencies:
- '@ag-ui/a2ui-toolkit': 0.0.3
+ '@ag-ui/a2ui-toolkit': 0.0.4
'@ag-ui/client': 0.0.57
'@ag-ui/core': 0.0.57
'@langchain/core': 1.1.42(@opentelemetry/api@1.9.0)(openai@6.44.0(ws@8.19.0)(zod@3.25.76))(ws@8.19.0)
@@ -27383,20 +27378,6 @@ snapshots:
- supports-color
optional: true
- '@babel/helper-create-class-features-plugin@7.29.7(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-annotate-as-pure': 7.29.7
- '@babel/helper-member-expression-to-functions': 7.29.7
- '@babel/helper-optimise-call-expression': 7.29.7
- '@babel/helper-replace-supers': 7.29.7(@babel/core@7.28.5)
- '@babel/helper-skip-transparent-expression-wrappers': 7.29.7
- '@babel/traverse': 7.29.7
- semver: 6.3.1
- transitivePeerDependencies:
- - supports-color
- optional: true
-
'@babel/helper-create-class-features-plugin@7.29.7(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
@@ -27440,14 +27421,6 @@ snapshots:
semver: 6.3.1
optional: true
- '@babel/helper-create-regexp-features-plugin@7.29.7(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-annotate-as-pure': 7.29.7
- regexpu-core: 6.4.0
- semver: 6.3.1
- optional: true
-
'@babel/helper-create-regexp-features-plugin@7.29.7(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
@@ -27501,18 +27474,6 @@ snapshots:
- supports-color
optional: true
- '@babel/helper-define-polyfill-provider@0.6.8(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-compilation-targets': 7.29.7
- '@babel/helper-plugin-utils': 7.28.6
- debug: 4.4.3(supports-color@5.5.0)
- lodash.debounce: 4.0.8
- resolve: 1.22.11
- transitivePeerDependencies:
- - supports-color
- optional: true
-
'@babel/helper-define-polyfill-provider@0.6.8(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
@@ -27698,16 +27659,6 @@ snapshots:
- supports-color
optional: true
- '@babel/helper-replace-supers@7.29.7(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-member-expression-to-functions': 7.29.7
- '@babel/helper-optimise-call-expression': 7.29.7
- '@babel/traverse': 7.29.7
- transitivePeerDependencies:
- - supports-color
- optional: true
-
'@babel/helper-replace-supers@7.29.7(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
@@ -27889,15 +27840,6 @@ snapshots:
- supports-color
optional: true
- '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.29.7(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.29.7
- '@babel/traverse': 7.29.7
- transitivePeerDependencies:
- - supports-color
- optional: true
-
'@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.29.7(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
@@ -28046,12 +27988,6 @@ snapshots:
'@babel/helper-plugin-utils': 7.29.7
optional: true
- '@babel/plugin-syntax-import-assertions@7.29.7(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.29.7
- optional: true
-
'@babel/plugin-syntax-import-assertions@7.29.7(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
@@ -28073,12 +28009,6 @@ snapshots:
'@babel/helper-plugin-utils': 7.29.7
optional: true
- '@babel/plugin-syntax-import-attributes@7.29.7(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.29.7
- optional: true
-
'@babel/plugin-syntax-import-attributes@7.29.7(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
@@ -28283,16 +28213,6 @@ snapshots:
- supports-color
optional: true
- '@babel/plugin-transform-async-generator-functions@7.29.0(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.28.6
- '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.5)
- '@babel/traverse': 7.29.7
- transitivePeerDependencies:
- - supports-color
- optional: true
-
'@babel/plugin-transform-async-generator-functions@7.29.0(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
@@ -28341,16 +28261,6 @@ snapshots:
- supports-color
optional: true
- '@babel/plugin-transform-async-to-generator@7.28.6(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-module-imports': 7.29.7
- '@babel/helper-plugin-utils': 7.28.6
- '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.5)
- transitivePeerDependencies:
- - supports-color
- optional: true
-
'@babel/plugin-transform-async-to-generator@7.28.6(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
@@ -28392,12 +28302,6 @@ snapshots:
'@babel/helper-plugin-utils': 7.29.7
optional: true
- '@babel/plugin-transform-block-scoping@7.29.7(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.29.7
- optional: true
-
'@babel/plugin-transform-block-scoping@7.29.7(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
@@ -28429,15 +28333,6 @@ snapshots:
- supports-color
optional: true
- '@babel/plugin-transform-class-properties@7.29.7(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.28.5)
- '@babel/helper-plugin-utils': 7.29.7
- transitivePeerDependencies:
- - supports-color
- optional: true
-
'@babel/plugin-transform-class-properties@7.29.7(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
@@ -28463,15 +28358,6 @@ snapshots:
- supports-color
optional: true
- '@babel/plugin-transform-class-static-block@7.29.7(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.28.5)
- '@babel/helper-plugin-utils': 7.29.7
- transitivePeerDependencies:
- - supports-color
- optional: true
-
'@babel/plugin-transform-class-static-block@7.29.7(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
@@ -28517,19 +28403,6 @@ snapshots:
- supports-color
optional: true
- '@babel/plugin-transform-classes@7.29.7(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-annotate-as-pure': 7.29.7
- '@babel/helper-compilation-targets': 7.29.7
- '@babel/helper-globals': 7.29.7
- '@babel/helper-plugin-utils': 7.29.7
- '@babel/helper-replace-supers': 7.29.7(@babel/core@7.28.5)
- '@babel/traverse': 7.29.7
- transitivePeerDependencies:
- - supports-color
- optional: true
-
'@babel/plugin-transform-classes@7.29.7(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
@@ -28561,13 +28434,6 @@ snapshots:
'@babel/template': 7.29.7
optional: true
- '@babel/plugin-transform-computed-properties@7.29.7(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.29.7
- '@babel/template': 7.29.7
- optional: true
-
'@babel/plugin-transform-computed-properties@7.29.7(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
@@ -28599,15 +28465,6 @@ snapshots:
- supports-color
optional: true
- '@babel/plugin-transform-destructuring@7.29.7(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.29.7
- '@babel/traverse': 7.29.7
- transitivePeerDependencies:
- - supports-color
- optional: true
-
'@babel/plugin-transform-destructuring@7.29.7(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
@@ -28629,13 +28486,6 @@ snapshots:
'@babel/helper-plugin-utils': 7.29.7
optional: true
- '@babel/plugin-transform-dotall-regex@7.29.7(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.28.5)
- '@babel/helper-plugin-utils': 7.29.7
- optional: true
-
'@babel/plugin-transform-dotall-regex@7.29.7(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
@@ -28671,13 +28521,6 @@ snapshots:
'@babel/helper-plugin-utils': 7.29.7
optional: true
- '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.7(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.28.5)
- '@babel/helper-plugin-utils': 7.29.7
- optional: true
-
'@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.7(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
@@ -28717,15 +28560,6 @@ snapshots:
- supports-color
optional: true
- '@babel/plugin-transform-explicit-resource-management@7.29.7(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.29.7
- '@babel/plugin-transform-destructuring': 7.29.7(@babel/core@7.28.5)
- transitivePeerDependencies:
- - supports-color
- optional: true
-
'@babel/plugin-transform-explicit-resource-management@7.29.7(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
@@ -28745,12 +28579,6 @@ snapshots:
'@babel/helper-plugin-utils': 7.29.7
optional: true
- '@babel/plugin-transform-exponentiation-operator@7.29.7(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.29.7
- optional: true
-
'@babel/plugin-transform-exponentiation-operator@7.29.7(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
@@ -28848,12 +28676,6 @@ snapshots:
'@babel/helper-plugin-utils': 7.29.7
optional: true
- '@babel/plugin-transform-json-strings@7.29.7(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.29.7
- optional: true
-
'@babel/plugin-transform-json-strings@7.29.7(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
@@ -28886,12 +28708,6 @@ snapshots:
'@babel/helper-plugin-utils': 7.29.7
optional: true
- '@babel/plugin-transform-logical-assignment-operators@7.29.7(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.29.7
- optional: true
-
'@babel/plugin-transform-logical-assignment-operators@7.29.7(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
@@ -28963,15 +28779,6 @@ snapshots:
- supports-color
optional: true
- '@babel/plugin-transform-modules-commonjs@7.29.7(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-module-transforms': 7.29.7(@babel/core@7.28.5)
- '@babel/helper-plugin-utils': 7.29.7
- transitivePeerDependencies:
- - supports-color
- optional: true
-
'@babel/plugin-transform-modules-commonjs@7.29.7(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
@@ -29001,17 +28808,6 @@ snapshots:
- supports-color
optional: true
- '@babel/plugin-transform-modules-systemjs@7.29.7(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-module-transforms': 7.29.7(@babel/core@7.28.5)
- '@babel/helper-plugin-utils': 7.29.7
- '@babel/helper-validator-identifier': 7.29.7
- '@babel/traverse': 7.29.7
- transitivePeerDependencies:
- - supports-color
- optional: true
-
'@babel/plugin-transform-modules-systemjs@7.29.7(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
@@ -29067,13 +28863,6 @@ snapshots:
'@babel/helper-plugin-utils': 7.29.7
optional: true
- '@babel/plugin-transform-named-capturing-groups-regex@7.29.7(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.28.5)
- '@babel/helper-plugin-utils': 7.29.7
- optional: true
-
'@babel/plugin-transform-named-capturing-groups-regex@7.29.7(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
@@ -29113,12 +28902,6 @@ snapshots:
'@babel/helper-plugin-utils': 7.29.7
optional: true
- '@babel/plugin-transform-nullish-coalescing-operator@7.29.7(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.29.7
- optional: true
-
'@babel/plugin-transform-nullish-coalescing-operator@7.29.7(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
@@ -29135,12 +28918,6 @@ snapshots:
'@babel/helper-plugin-utils': 7.29.7
optional: true
- '@babel/plugin-transform-numeric-separator@7.29.7(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.29.7
- optional: true
-
'@babel/plugin-transform-numeric-separator@7.29.7(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
@@ -29169,18 +28946,6 @@ snapshots:
- supports-color
optional: true
- '@babel/plugin-transform-object-rest-spread@7.29.7(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-compilation-targets': 7.29.7
- '@babel/helper-plugin-utils': 7.29.7
- '@babel/plugin-transform-destructuring': 7.29.7(@babel/core@7.28.5)
- '@babel/plugin-transform-parameters': 7.29.7(@babel/core@7.28.5)
- '@babel/traverse': 7.29.7
- transitivePeerDependencies:
- - supports-color
- optional: true
-
'@babel/plugin-transform-object-rest-spread@7.29.7(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
@@ -29234,12 +28999,6 @@ snapshots:
'@babel/helper-plugin-utils': 7.29.7
optional: true
- '@babel/plugin-transform-optional-catch-binding@7.29.7(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.29.7
- optional: true
-
'@babel/plugin-transform-optional-catch-binding@7.29.7(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
@@ -29279,15 +29038,6 @@ snapshots:
- supports-color
optional: true
- '@babel/plugin-transform-optional-chaining@7.29.7(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.29.7
- '@babel/helper-skip-transparent-expression-wrappers': 7.29.7
- transitivePeerDependencies:
- - supports-color
- optional: true
-
'@babel/plugin-transform-optional-chaining@7.29.7(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
@@ -29312,12 +29062,6 @@ snapshots:
'@babel/helper-plugin-utils': 7.29.7
optional: true
- '@babel/plugin-transform-parameters@7.29.7(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.29.7
- optional: true
-
'@babel/plugin-transform-parameters@7.29.7(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
@@ -29349,15 +29093,6 @@ snapshots:
- supports-color
optional: true
- '@babel/plugin-transform-private-methods@7.29.7(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.28.5)
- '@babel/helper-plugin-utils': 7.29.7
- transitivePeerDependencies:
- - supports-color
- optional: true
-
'@babel/plugin-transform-private-methods@7.29.7(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
@@ -29395,16 +29130,6 @@ snapshots:
- supports-color
optional: true
- '@babel/plugin-transform-private-property-in-object@7.29.7(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-annotate-as-pure': 7.29.7
- '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.28.5)
- '@babel/helper-plugin-utils': 7.29.7
- transitivePeerDependencies:
- - supports-color
- optional: true
-
'@babel/plugin-transform-private-property-in-object@7.29.7(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
@@ -29538,12 +29263,6 @@ snapshots:
'@babel/helper-plugin-utils': 7.29.7
optional: true
- '@babel/plugin-transform-regenerator@7.29.7(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.29.7
- optional: true
-
'@babel/plugin-transform-regenerator@7.29.7(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
@@ -29562,13 +29281,6 @@ snapshots:
'@babel/helper-plugin-utils': 7.29.7
optional: true
- '@babel/plugin-transform-regexp-modifiers@7.29.7(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.28.5)
- '@babel/helper-plugin-utils': 7.29.7
- optional: true
-
'@babel/plugin-transform-regexp-modifiers@7.29.7(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
@@ -29682,15 +29394,6 @@ snapshots:
- supports-color
optional: true
- '@babel/plugin-transform-spread@7.29.7(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.29.7
- '@babel/helper-skip-transparent-expression-wrappers': 7.29.7
- transitivePeerDependencies:
- - supports-color
- optional: true
-
'@babel/plugin-transform-spread@7.29.7(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
@@ -29798,13 +29501,6 @@ snapshots:
'@babel/helper-plugin-utils': 7.29.7
optional: true
- '@babel/plugin-transform-unicode-property-regex@7.29.7(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.28.5)
- '@babel/helper-plugin-utils': 7.29.7
- optional: true
-
'@babel/plugin-transform-unicode-property-regex@7.29.7(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
@@ -29843,13 +29539,6 @@ snapshots:
'@babel/helper-plugin-utils': 7.29.7
optional: true
- '@babel/plugin-transform-unicode-sets-regex@7.29.7(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.28.5)
- '@babel/helper-plugin-utils': 7.29.7
- optional: true
-
'@babel/plugin-transform-unicode-sets-regex@7.29.7(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
@@ -30009,83 +29698,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@babel/preset-env@7.29.2(@babel/core@7.28.5)':
- dependencies:
- '@babel/compat-data': 7.29.7
- '@babel/core': 7.28.5
- '@babel/helper-compilation-targets': 7.29.7
- '@babel/helper-plugin-utils': 7.28.6
- '@babel/helper-validator-option': 7.29.7
- '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.28.5(@babel/core@7.28.5)
- '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.29.7(@babel/core@7.28.5)
- '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.5)
- '@babel/plugin-syntax-import-assertions': 7.29.7(@babel/core@7.28.5)
- '@babel/plugin-syntax-import-attributes': 7.29.7(@babel/core@7.28.5)
- '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.28.5)
- '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-async-generator-functions': 7.29.0(@babel/core@7.28.5)
- '@babel/plugin-transform-async-to-generator': 7.28.6(@babel/core@7.28.5)
- '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-block-scoping': 7.29.7(@babel/core@7.28.5)
- '@babel/plugin-transform-class-properties': 7.29.7(@babel/core@7.28.5)
- '@babel/plugin-transform-class-static-block': 7.29.7(@babel/core@7.28.5)
- '@babel/plugin-transform-classes': 7.29.7(@babel/core@7.28.5)
- '@babel/plugin-transform-computed-properties': 7.29.7(@babel/core@7.28.5)
- '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.5)
- '@babel/plugin-transform-dotall-regex': 7.29.7(@babel/core@7.28.5)
- '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.29.7(@babel/core@7.28.5)
- '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-explicit-resource-management': 7.29.7(@babel/core@7.28.5)
- '@babel/plugin-transform-exponentiation-operator': 7.29.7(@babel/core@7.28.5)
- '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-json-strings': 7.29.7(@babel/core@7.28.5)
- '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-logical-assignment-operators': 7.29.7(@babel/core@7.28.5)
- '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-modules-commonjs': 7.29.7(@babel/core@7.28.5)
- '@babel/plugin-transform-modules-systemjs': 7.29.7(@babel/core@7.28.5)
- '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-named-capturing-groups-regex': 7.29.7(@babel/core@7.28.5)
- '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-nullish-coalescing-operator': 7.29.7(@babel/core@7.28.5)
- '@babel/plugin-transform-numeric-separator': 7.29.7(@babel/core@7.28.5)
- '@babel/plugin-transform-object-rest-spread': 7.29.7(@babel/core@7.28.5)
- '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-optional-catch-binding': 7.29.7(@babel/core@7.28.5)
- '@babel/plugin-transform-optional-chaining': 7.29.7(@babel/core@7.28.5)
- '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.5)
- '@babel/plugin-transform-private-methods': 7.29.7(@babel/core@7.28.5)
- '@babel/plugin-transform-private-property-in-object': 7.29.7(@babel/core@7.28.5)
- '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-regenerator': 7.29.7(@babel/core@7.28.5)
- '@babel/plugin-transform-regexp-modifiers': 7.29.7(@babel/core@7.28.5)
- '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-spread': 7.29.7(@babel/core@7.28.5)
- '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-unicode-property-regex': 7.29.7(@babel/core@7.28.5)
- '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-unicode-sets-regex': 7.29.7(@babel/core@7.28.5)
- '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.28.5)
- babel-plugin-polyfill-corejs2: 0.4.17(@babel/core@7.28.5)
- babel-plugin-polyfill-corejs3: 0.14.2(@babel/core@7.28.5)
- babel-plugin-polyfill-regenerator: 0.6.8(@babel/core@7.28.5)
- core-js-compat: 3.49.0
- semver: 6.3.1
- transitivePeerDependencies:
- - supports-color
- optional: true
-
'@babel/preset-env@7.29.2(@babel/core@7.29.0)':
dependencies:
'@babel/compat-data': 7.29.7
@@ -30882,6 +30494,11 @@ snapshots:
eslint: 8.57.1
eslint-visitor-keys: 3.4.3
+ '@eslint-community/eslint-utils@4.9.1(eslint@9.39.2(jiti@1.21.7))':
+ dependencies:
+ eslint: 9.39.2(jiti@1.21.7)
+ eslint-visitor-keys: 3.4.3
+
'@eslint-community/eslint-utils@4.9.1(eslint@9.39.2(jiti@2.6.1))':
dependencies:
eslint: 9.39.2(jiti@2.6.1)
@@ -36234,9 +35851,7 @@ snapshots:
metro-runtime: 0.84.4
transitivePeerDependencies:
- '@babel/core'
- - bufferutil
- supports-color
- - utf-8-validate
optional: true
'@react-native/normalize-colors@0.85.2': {}
@@ -38964,16 +38579,16 @@ snapshots:
'@types/node': 22.19.11
optional: true
- '@typescript-eslint/eslint-plugin@7.2.0(@typescript-eslint/parser@7.2.0(eslint@9.39.2(jiti@2.7.0))(typescript@5.9.2))(eslint@9.39.2(jiti@2.7.0))(typescript@5.9.2)':
+ '@typescript-eslint/eslint-plugin@7.2.0(@typescript-eslint/parser@7.2.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.2))(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.2)':
dependencies:
'@eslint-community/regexpp': 4.12.2
- '@typescript-eslint/parser': 7.2.0(eslint@9.39.2(jiti@2.7.0))(typescript@5.9.2)
+ '@typescript-eslint/parser': 7.2.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.2)
'@typescript-eslint/scope-manager': 7.2.0
- '@typescript-eslint/type-utils': 7.2.0(eslint@9.39.2(jiti@2.7.0))(typescript@5.9.2)
- '@typescript-eslint/utils': 7.2.0(eslint@9.39.2(jiti@2.7.0))(typescript@5.9.2)
+ '@typescript-eslint/type-utils': 7.2.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.2)
+ '@typescript-eslint/utils': 7.2.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.2)
'@typescript-eslint/visitor-keys': 7.2.0
debug: 4.4.3(supports-color@5.5.0)
- eslint: 9.39.2(jiti@2.7.0)
+ eslint: 9.39.2(jiti@1.21.7)
graphemer: 1.4.0
ignore: 5.3.2
natural-compare: 1.4.0
@@ -39032,14 +38647,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@7.2.0(eslint@9.39.2(jiti@2.7.0))(typescript@5.9.2)':
+ '@typescript-eslint/parser@7.2.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.2)':
dependencies:
'@typescript-eslint/scope-manager': 7.2.0
'@typescript-eslint/types': 7.2.0
'@typescript-eslint/typescript-estree': 7.2.0(typescript@5.9.2)
'@typescript-eslint/visitor-keys': 7.2.0
debug: 4.4.3(supports-color@5.5.0)
- eslint: 9.39.2(jiti@2.7.0)
+ eslint: 9.39.2(jiti@1.21.7)
optionalDependencies:
typescript: 5.9.2
transitivePeerDependencies:
@@ -39117,12 +38732,12 @@ snapshots:
dependencies:
typescript: 5.9.3
- '@typescript-eslint/type-utils@7.2.0(eslint@9.39.2(jiti@2.7.0))(typescript@5.9.2)':
+ '@typescript-eslint/type-utils@7.2.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.2)':
dependencies:
'@typescript-eslint/typescript-estree': 7.2.0(typescript@5.9.2)
- '@typescript-eslint/utils': 7.2.0(eslint@9.39.2(jiti@2.7.0))(typescript@5.9.2)
+ '@typescript-eslint/utils': 7.2.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.2)
debug: 4.4.3(supports-color@5.5.0)
- eslint: 9.39.2(jiti@2.7.0)
+ eslint: 9.39.2(jiti@1.21.7)
ts-api-utils: 1.4.3(typescript@5.9.2)
optionalDependencies:
typescript: 5.9.2
@@ -39214,15 +38829,15 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@7.2.0(eslint@9.39.2(jiti@2.7.0))(typescript@5.9.2)':
+ '@typescript-eslint/utils@7.2.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.2)':
dependencies:
- '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.7.0))
+ '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@1.21.7))
'@types/json-schema': 7.0.15
'@types/semver': 7.7.1
'@typescript-eslint/scope-manager': 7.2.0
'@typescript-eslint/types': 7.2.0
'@typescript-eslint/typescript-estree': 7.2.0(typescript@5.9.2)
- eslint: 9.39.2(jiti@2.7.0)
+ eslint: 9.39.2(jiti@1.21.7)
semver: 7.8.1
transitivePeerDependencies:
- supports-color
@@ -39511,6 +39126,14 @@ snapshots:
optionalDependencies:
vite: 7.3.2(@types/node@18.19.130)(jiti@2.7.0)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0)
+ '@vitest/mocker@3.2.4(vite@7.3.2(@types/node@20.19.27)(jiti@2.7.0)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0))':
+ dependencies:
+ '@vitest/spy': 3.2.4
+ estree-walker: 3.0.3
+ magic-string: 0.30.21
+ optionalDependencies:
+ vite: 7.3.2(@types/node@20.19.27)(jiti@2.7.0)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0)
+
'@vitest/mocker@3.2.4(vite@7.3.2(@types/node@22.19.11)(jiti@2.7.0)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0))':
dependencies:
'@vitest/spy': 3.2.4
@@ -39626,7 +39249,7 @@ snapshots:
sirv: 3.0.2
tinyglobby: 0.2.15
tinyrainbow: 2.0.0
- vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.11)(@vitest/ui@3.2.4)(jiti@2.7.0)(jsdom@29.1.0(@noble/hashes@1.8.0))(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0)
+ vitest: 3.2.4(@types/debug@4.1.12)(@types/node@20.19.27)(@vitest/ui@3.2.4)(jiti@2.7.0)(jsdom@29.1.0(@noble/hashes@1.8.0))(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0)
'@vitest/utils@3.2.4':
dependencies:
@@ -40574,16 +40197,6 @@ snapshots:
- supports-color
optional: true
- babel-plugin-polyfill-corejs2@0.4.17(@babel/core@7.28.5):
- dependencies:
- '@babel/compat-data': 7.29.7
- '@babel/core': 7.28.5
- '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.28.5)
- semver: 6.3.1
- transitivePeerDependencies:
- - supports-color
- optional: true
-
babel-plugin-polyfill-corejs2@0.4.17(@babel/core@7.29.0):
dependencies:
'@babel/compat-data': 7.29.7
@@ -40618,15 +40231,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- babel-plugin-polyfill-corejs3@0.14.2(@babel/core@7.28.5):
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.28.5)
- core-js-compat: 3.49.0
- transitivePeerDependencies:
- - supports-color
- optional: true
-
babel-plugin-polyfill-corejs3@0.14.2(@babel/core@7.29.0):
dependencies:
'@babel/core': 7.29.0
@@ -40657,14 +40261,6 @@ snapshots:
- supports-color
optional: true
- babel-plugin-polyfill-regenerator@0.6.8(@babel/core@7.28.5):
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.28.5)
- transitivePeerDependencies:
- - supports-color
- optional: true
-
babel-plugin-polyfill-regenerator@0.6.8(@babel/core@7.29.0):
dependencies:
'@babel/core': 7.29.0
@@ -43138,19 +42734,19 @@ snapshots:
optionalDependencies:
source-map: 0.6.1
- eslint-config-next@15.4.4(eslint@9.39.2(jiti@2.7.0))(typescript@5.9.2):
+ eslint-config-next@15.4.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.2):
dependencies:
'@next/eslint-plugin-next': 15.4.4
'@rushstack/eslint-patch': 1.15.0
- '@typescript-eslint/eslint-plugin': 7.2.0(@typescript-eslint/parser@7.2.0(eslint@9.39.2(jiti@2.7.0))(typescript@5.9.2))(eslint@9.39.2(jiti@2.7.0))(typescript@5.9.2)
- '@typescript-eslint/parser': 7.2.0(eslint@9.39.2(jiti@2.7.0))(typescript@5.9.2)
- eslint: 9.39.2(jiti@2.7.0)
+ '@typescript-eslint/eslint-plugin': 7.2.0(@typescript-eslint/parser@7.2.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.2))(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.2)
+ '@typescript-eslint/parser': 7.2.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.2)
+ eslint: 9.39.2(jiti@1.21.7)
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@2.7.0))
- eslint-plugin-import: 2.32.0(@typescript-eslint/parser@7.2.0(eslint@9.39.2(jiti@2.7.0))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@2.7.0))
- eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.2(jiti@2.7.0))
- eslint-plugin-react: 7.37.5(eslint@9.39.2(jiti@2.7.0))
- eslint-plugin-react-hooks: 5.2.0(eslint@9.39.2(jiti@2.7.0))
+ eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@1.21.7))
+ eslint-plugin-import: 2.32.0(@typescript-eslint/parser@7.2.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@1.21.7))
+ eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.2(jiti@1.21.7))
+ eslint-plugin-react: 7.37.5(eslint@9.39.2(jiti@1.21.7))
+ eslint-plugin-react-hooks: 5.2.0(eslint@9.39.2(jiti@1.21.7))
optionalDependencies:
typescript: 5.9.2
transitivePeerDependencies:
@@ -43201,29 +42797,29 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@2.7.0)):
+ eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@1.21.7)):
dependencies:
'@nolyfill/is-core-module': 1.0.39
debug: 4.4.3(supports-color@5.5.0)
- eslint: 9.39.2(jiti@2.7.0)
+ eslint: 9.39.2(jiti@1.21.7)
get-tsconfig: 4.13.6
is-bun-module: 2.0.0
stable-hash: 0.0.5
tinyglobby: 0.2.16
unrs-resolver: 1.11.1
optionalDependencies:
- eslint-plugin-import: 2.32.0(@typescript-eslint/parser@7.2.0(eslint@9.39.2(jiti@2.7.0))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@2.7.0))
+ eslint-plugin-import: 2.32.0(@typescript-eslint/parser@7.2.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@1.21.7))
transitivePeerDependencies:
- supports-color
- eslint-module-utils@2.12.1(@typescript-eslint/parser@7.2.0(eslint@9.39.2(jiti@2.7.0))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@2.7.0)):
+ eslint-module-utils@2.12.1(@typescript-eslint/parser@7.2.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@1.21.7)):
dependencies:
debug: 3.2.7
optionalDependencies:
- '@typescript-eslint/parser': 7.2.0(eslint@9.39.2(jiti@2.7.0))(typescript@5.9.2)
- eslint: 9.39.2(jiti@2.7.0)
+ '@typescript-eslint/parser': 7.2.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.2)
+ eslint: 9.39.2(jiti@1.21.7)
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@2.7.0))
+ eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@1.21.7))
transitivePeerDependencies:
- supports-color
@@ -43237,7 +42833,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-plugin-import@2.32.0(@typescript-eslint/parser@7.2.0(eslint@9.39.2(jiti@2.7.0))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@2.7.0)):
+ eslint-plugin-import@2.32.0(@typescript-eslint/parser@7.2.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@1.21.7)):
dependencies:
'@rtsao/scc': 1.1.0
array-includes: 3.1.9
@@ -43246,9 +42842,9 @@ snapshots:
array.prototype.flatmap: 1.3.3
debug: 3.2.7
doctrine: 2.1.0
- eslint: 9.39.2(jiti@2.7.0)
+ eslint: 9.39.2(jiti@1.21.7)
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.12.1(@typescript-eslint/parser@7.2.0(eslint@9.39.2(jiti@2.7.0))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@2.7.0))
+ eslint-module-utils: 2.12.1(@typescript-eslint/parser@7.2.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@1.21.7))
hasown: 2.0.2
is-core-module: 2.16.1
is-glob: 4.0.3
@@ -43260,7 +42856,7 @@ snapshots:
string.prototype.trimend: 1.0.9
tsconfig-paths: 3.15.0
optionalDependencies:
- '@typescript-eslint/parser': 7.2.0(eslint@9.39.2(jiti@2.7.0))(typescript@5.9.2)
+ '@typescript-eslint/parser': 7.2.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.2)
transitivePeerDependencies:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
@@ -43293,6 +42889,25 @@ snapshots:
- eslint-import-resolver-webpack
- supports-color
+ eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.2(jiti@1.21.7)):
+ dependencies:
+ aria-query: 5.3.2
+ array-includes: 3.1.9
+ array.prototype.flatmap: 1.3.3
+ ast-types-flow: 0.0.8
+ axe-core: 4.11.1
+ axobject-query: 4.1.0
+ damerau-levenshtein: 1.0.8
+ emoji-regex: 9.2.2
+ eslint: 9.39.2(jiti@1.21.7)
+ hasown: 2.0.2
+ jsx-ast-utils: 3.3.5
+ language-tags: 1.0.9
+ minimatch: 10.2.4
+ object.fromentries: 2.0.8
+ safe-regex-test: 1.1.0
+ string.prototype.includes: 2.0.1
+
eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.2(jiti@2.7.0)):
dependencies:
aria-query: 5.3.2
@@ -43312,9 +42927,9 @@ snapshots:
safe-regex-test: 1.1.0
string.prototype.includes: 2.0.1
- eslint-plugin-react-hooks@5.2.0(eslint@9.39.2(jiti@2.7.0)):
+ eslint-plugin-react-hooks@5.2.0(eslint@9.39.2(jiti@1.21.7)):
dependencies:
- eslint: 9.39.2(jiti@2.7.0)
+ eslint: 9.39.2(jiti@1.21.7)
eslint-plugin-react-hooks@7.1.1(eslint@9.39.2(jiti@2.7.0)):
dependencies:
@@ -43327,6 +42942,28 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ eslint-plugin-react@7.37.5(eslint@9.39.2(jiti@1.21.7)):
+ dependencies:
+ array-includes: 3.1.9
+ array.prototype.findlast: 1.2.5
+ array.prototype.flatmap: 1.3.3
+ array.prototype.tosorted: 1.1.4
+ doctrine: 2.1.0
+ es-iterator-helpers: 1.2.2
+ eslint: 9.39.2(jiti@1.21.7)
+ estraverse: 5.3.0
+ hasown: 2.0.2
+ jsx-ast-utils: 3.3.5
+ minimatch: 10.2.4
+ object.entries: 1.1.9
+ object.fromentries: 2.0.8
+ object.values: 1.2.1
+ prop-types: 15.8.1
+ resolve: 2.0.0-next.5
+ semver: 6.3.1
+ string.prototype.matchall: 4.0.12
+ string.prototype.repeat: 1.0.0
+
eslint-plugin-react@7.37.5(eslint@9.39.2(jiti@2.7.0)):
dependencies:
array-includes: 3.1.9
@@ -43439,6 +43076,47 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ eslint@9.39.2(jiti@1.21.7):
+ dependencies:
+ '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@1.21.7))
+ '@eslint-community/regexpp': 4.12.2
+ '@eslint/config-array': 0.21.2
+ '@eslint/config-helpers': 0.4.2
+ '@eslint/core': 0.17.0
+ '@eslint/eslintrc': 3.3.5
+ '@eslint/js': 9.39.2
+ '@eslint/plugin-kit': 0.4.1
+ '@humanfs/node': 0.16.7
+ '@humanwhocodes/module-importer': 1.0.1
+ '@humanwhocodes/retry': 0.4.3
+ '@types/estree': 1.0.8
+ ajv: 6.14.0
+ chalk: 4.1.2
+ cross-spawn: 7.0.6
+ debug: 4.4.3(supports-color@5.5.0)
+ escape-string-regexp: 4.0.0
+ eslint-scope: 8.4.0
+ eslint-visitor-keys: 4.2.1
+ espree: 10.4.0
+ esquery: 1.7.0
+ esutils: 2.0.3
+ fast-deep-equal: 3.1.3
+ file-entry-cache: 8.0.0
+ find-up: 5.0.0
+ glob-parent: 6.0.2
+ ignore: 5.3.2
+ imurmurhash: 0.1.4
+ is-glob: 4.0.3
+ json-stable-stringify-without-jsonify: 1.0.1
+ lodash.merge: 4.6.2
+ minimatch: 10.2.4
+ natural-compare: 1.4.0
+ optionator: 0.9.4
+ optionalDependencies:
+ jiti: 1.21.7
+ transitivePeerDependencies:
+ - supports-color
+
eslint@9.39.2(jiti@2.6.1):
dependencies:
'@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1))
@@ -46290,7 +45968,7 @@ snapshots:
jsc-safe-url@0.2.4: {}
- jscodeshift@17.3.0(@babel/preset-env@7.29.2(@babel/core@7.28.5)):
+ jscodeshift@17.3.0(@babel/preset-env@7.29.2(@babel/core@7.29.0)):
dependencies:
'@babel/core': 7.28.5
'@babel/parser': 7.28.5
@@ -46311,7 +45989,7 @@ snapshots:
tmp: 0.2.5
write-file-atomic: 5.0.1
optionalDependencies:
- '@babel/preset-env': 7.29.2(@babel/core@7.28.5)
+ '@babel/preset-env': 7.29.2(@babel/core@7.29.0)
transitivePeerDependencies:
- supports-color
@@ -48553,39 +48231,11 @@ snapshots:
- supports-color
- unified
- next-themes@0.2.1(next@16.1.3(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3):
- dependencies:
- next: 16.1.3(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.3)
- react: 19.2.3
- react-dom: 19.2.3(react@19.2.3)
-
- next@16.1.3(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.3):
+ next-themes@0.2.1(next@16.1.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3):
dependencies:
- '@next/env': 16.1.3
- '@swc/helpers': 0.5.15
- baseline-browser-mapping: 2.9.13
- caniuse-lite: 1.0.30001769
- postcss: 8.4.31
+ next: 16.1.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.3)
react: 19.2.3
react-dom: 19.2.3(react@19.2.3)
- styled-jsx: 5.1.6(@babel/core@7.28.5)(react@19.2.3)
- optionalDependencies:
- '@next/swc-darwin-arm64': 16.1.3
- '@next/swc-darwin-x64': 16.1.3
- '@next/swc-linux-arm64-gnu': 16.1.3
- '@next/swc-linux-arm64-musl': 16.1.3
- '@next/swc-linux-x64-gnu': 16.1.3
- '@next/swc-linux-x64-musl': 16.1.3
- '@next/swc-win32-arm64-msvc': 16.1.3
- '@next/swc-win32-x64-msvc': 16.1.3
- '@opentelemetry/api': 1.9.0
- '@playwright/test': 1.59.1
- babel-plugin-react-compiler: 1.0.0
- sass: 1.97.3
- sharp: 0.34.5
- transitivePeerDependencies:
- - '@babel/core'
- - babel-plugin-macros
next@16.1.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.3):
dependencies:
@@ -48615,7 +48265,7 @@ snapshots:
- '@babel/core'
- babel-plugin-macros
- next@16.2.3(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.3):
+ next@16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.3):
dependencies:
'@next/env': 16.2.3
'@swc/helpers': 0.5.15
@@ -48624,7 +48274,7 @@ snapshots:
postcss: 8.4.31
react: 19.2.3
react-dom: 19.2.3(react@19.2.3)
- styled-jsx: 5.1.6(@babel/core@7.28.5)(react@19.2.3)
+ styled-jsx: 5.1.6(@babel/core@7.29.0)(react@19.2.3)
optionalDependencies:
'@next/swc-darwin-arm64': 16.2.3
'@next/swc-darwin-x64': 16.2.3
@@ -52930,13 +52580,6 @@ snapshots:
dependencies:
inline-style-parser: 0.2.7
- styled-jsx@5.1.6(@babel/core@7.28.5)(react@19.2.3):
- dependencies:
- client-only: 0.0.1
- react: 19.2.3
- optionalDependencies:
- '@babel/core': 7.28.5
-
styled-jsx@5.1.6(@babel/core@7.29.0)(react@19.2.3):
dependencies:
client-only: 0.0.1
@@ -54846,7 +54489,7 @@ snapshots:
dependencies:
'@types/chai': 5.2.3
'@vitest/expect': 3.2.4
- '@vitest/mocker': 3.2.4(vite@7.3.2(@types/node@18.19.130)(jiti@2.7.0)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0))
+ '@vitest/mocker': 3.2.4(vite@7.3.2(@types/node@20.19.27)(jiti@2.7.0)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0))
'@vitest/pretty-format': 3.2.4
'@vitest/runner': 3.2.4
'@vitest/snapshot': 3.2.4
@@ -54934,7 +54577,7 @@ snapshots:
dependencies:
'@types/chai': 5.2.3
'@vitest/expect': 3.2.4
- '@vitest/mocker': 3.2.4(vite@7.3.2(@types/node@22.19.11)(jiti@2.7.0)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0))
+ '@vitest/mocker': 3.2.4(vite@7.3.2(@types/node@18.19.130)(jiti@2.7.0)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0))
'@vitest/pretty-format': 3.2.4
'@vitest/runner': 3.2.4
'@vitest/snapshot': 3.2.4
diff --git a/sdk-python/copilotkit/copilotkit_lg_middleware.py b/sdk-python/copilotkit/copilotkit_lg_middleware.py
index 2e49a42e4d8..789ec052d2a 100644
--- a/sdk-python/copilotkit/copilotkit_lg_middleware.py
+++ b/sdk-python/copilotkit/copilotkit_lg_middleware.py
@@ -16,7 +16,7 @@
import json
import re
-from typing import Any, Callable, Awaitable, ClassVar, Iterable, Union
+from typing import Any, Callable, Awaitable, ClassVar, Iterable, Optional, Union
from langchain_core.messages import AIMessage, SystemMessage, ToolMessage
from langchain.agents.middleware import (
@@ -189,6 +189,9 @@ class StateSchema(AgentState):
copilotkit: CopilotKitProperties
+StateSchema.__annotations__["ag-ui"] = CopilotKitProperties
+
+
# Internal/framework keys that should never be surfaced to the LLM as
# user-facing state. These are either reducer-managed message buckets,
# CopilotKit/AG-UI plumbing, or graph-internal scaffolding.
@@ -231,6 +234,20 @@ class CopilotKitMiddleware(AgentMiddleware[StateSchema, Any]):
- ``list``/``tuple``/``set[str]`` — only surface the named keys.
Use this when you want explicit control over what the LLM
sees (e.g. ``["liked", "todos"]``).
+ a2ui_params: Optional host overrides for the auto-injected
+ ``generate_a2ui`` tool, forwarded to ``get_a2ui_tools`` when A2UI
+ injection fires. An ``A2UIToolParams``-shaped dict: ``guidelines``
+ (``generation_guidelines`` / ``design_guidelines`` /
+ ``composition_guide``), ``default_catalog_id``,
+ ``default_surface_id``, ``tool_name``, ``recovery``, etc. Lets a
+ host steer the subagent (e.g. override the default design
+ guidelines to favor a repeating-card layout) on the auto-inject
+ path, which otherwise only ever uses the toolkit defaults.
+
+ The middleware always injects ``model`` from the bound request
+ model (the host cannot supply the live, header-hooked model), and
+ folds the registered catalog id + component schema into the params
+ unless the host already set them — so host values win.
"""
state_schema = StateSchema
@@ -240,12 +257,18 @@ def __init__(
self,
*,
expose_state: Union[bool, Iterable[str]] = False,
+ a2ui_params: "Optional[A2UIToolParams]" = None,
):
super().__init__()
if isinstance(expose_state, bool):
self._expose_state: Union[bool, frozenset[str]] = expose_state
else:
self._expose_state = frozenset(expose_state)
+ # Host-supplied A2UI tool overrides (guidelines, catalog id, tool name,
+ # recovery, ...). Copied so later mutation of the caller's dict can't
+ # bleed into the middleware. ``model`` + the registered catalog are
+ # layered in at build time; everything here is host-owned and wins.
+ self._a2ui_params: dict = dict(a2ui_params or {})
@property
def name(self) -> str:
@@ -422,15 +445,22 @@ def _maybe_build_a2ui_tool(self, request: ModelRequest) -> Any | None:
component_schema, catalog_id = resolved if resolved else (None, None)
# Shared A2UIToolParams: a single params object owned by the toolkit.
- # ``model`` lives inside it; ``composition_guide`` is folded into the
- # ``guidelines`` bag alongside generation/design overrides.
- params: "A2UIToolParams" = {"model": request.model}
- if catalog_id:
+ # Start from the host overrides (guidelines / catalog id / tool name /
+ # recovery) so a host can steer the subagent, then layer in only what
+ # the host cannot know — the bound model, and the registered catalog id
+ # + component schema — without clobbering any host-set value.
+ params: "A2UIToolParams" = dict(self._a2ui_params)
+ params["model"] = request.model
+ if catalog_id and "default_catalog_id" not in params:
params["default_catalog_id"] = catalog_id
# Feed the registered component schema to the subagent so it composes
# only catalog components (the toolkit appends this to its prompt).
+ # Merge into any host ``guidelines`` bag; a host-set composition_guide
+ # wins, and host generation/design overrides are preserved.
if component_schema:
- params["guidelines"] = {"composition_guide": component_schema}
+ guidelines = dict(params.get("guidelines") or {})
+ guidelines.setdefault("composition_guide", component_schema)
+ params["guidelines"] = guidelines
tool = get_a2ui_tools(params)
diff --git a/sdk-python/poetry.lock b/sdk-python/poetry.lock
index c5008e690b3..fa1c9773380 100644
--- a/sdk-python/poetry.lock
+++ b/sdk-python/poetry.lock
@@ -2,30 +2,30 @@
[[package]]
name = "ag-ui-a2ui-toolkit"
-version = "0.0.3"
+version = "0.0.4"
description = "Framework-agnostic helpers for building A2UI subagent tools — op builders, prompt assembly, history walkers, and request/envelope orchestration shared across framework adapters."
optional = false
python-versions = "<3.15,>=3.10"
groups = ["main"]
files = [
- {file = "ag_ui_a2ui_toolkit-0.0.3-py3-none-any.whl", hash = "sha256:e0354bd361c09f342fbe671cf870cbd19fdcb1b27e7a5bb2d8a392a4f00c2ba9"},
- {file = "ag_ui_a2ui_toolkit-0.0.3.tar.gz", hash = "sha256:468f25473ac00d098878da54c0069b7fa27dc63b4c1ff61315d4349a324c2fb7"},
+ {file = "ag_ui_a2ui_toolkit-0.0.4-py3-none-any.whl", hash = "sha256:236fc511e1ec2399bcda0c14a109b3fb0a0c3e3988c18ef1918745b1c1535e30"},
+ {file = "ag_ui_a2ui_toolkit-0.0.4.tar.gz", hash = "sha256:172e2724e53df8173685a3fb896a6e5175eea06e1dc166c715db110ba4beba76"},
]
[[package]]
name = "ag-ui-langgraph"
-version = "0.0.41"
+version = "0.0.42"
description = "Implementation of the AG-UI protocol for LangGraph."
optional = false
python-versions = "<3.15,>=3.10"
groups = ["main"]
files = [
- {file = "ag_ui_langgraph-0.0.41-py3-none-any.whl", hash = "sha256:ff5f4c3d03305ff51329543ff61bd686a3e0b5c3c4ea071b3575f328d13936ae"},
- {file = "ag_ui_langgraph-0.0.41.tar.gz", hash = "sha256:3ea1fcb49b147d9532b0a90f2a5554d6ffd0d9365590fa2557ba16a881aeeb7a"},
+ {file = "ag_ui_langgraph-0.0.42-py3-none-any.whl", hash = "sha256:4fd19f0da6d0e16d727ec89e99b692916cbba2b0302f96aba2497043cbfec5db"},
+ {file = "ag_ui_langgraph-0.0.42.tar.gz", hash = "sha256:5384647b9b7b098189530c59b26741581dd009c8dfda907fbfaa9bafa8d21249"},
]
[package.dependencies]
-ag-ui-a2ui-toolkit = ">=0.0.3"
+ag-ui-a2ui-toolkit = ">=0.0.4"
ag-ui-protocol = ">=0.1.15"
fastapi = {version = ">=0.115.12", optional = true, markers = "extra == \"fastapi\""}
langchain = ">=1.2.0"
@@ -5642,4 +5642,4 @@ crewai = ["crewai"]
[metadata]
lock-version = "2.1"
python-versions = ">=3.10,<3.15"
-content-hash = "5fc9ecbf95de1d25040712c2675d39dfedc8a099be1e425390c03014e8c97d58"
+content-hash = "5d1af465655fc26c4bfdd9c81edc0760c838e8328ce5ba7c860b18640488d8a4"
diff --git a/sdk-python/pyproject.toml b/sdk-python/pyproject.toml
index d0b5b7b5868..3e52f703b2d 100644
--- a/sdk-python/pyproject.toml
+++ b/sdk-python/pyproject.toml
@@ -31,7 +31,7 @@ python = ">=3.10,<3.15"
langgraph = { version = ">=0.3.25,<2" }
langchain = { version = ">=0.3.0" }
crewai = { version = ">=0.118.0", optional = true, python = ">=3.10,<3.14" }
-ag-ui-langgraph = { version = ">=0.0.41", extras = ["fastapi"] }
+ag-ui-langgraph = { version = ">=0.0.42", extras = ["fastapi"] }
ag-ui-protocol = ">=0.1.15"
fastapi = ">=0.115.0,<1.0.0"
partialjson = "^0.0.8"
diff --git a/sdk-python/tests/test_copilotkit_lg_middleware.py b/sdk-python/tests/test_copilotkit_lg_middleware.py
index 647e735f1fa..5d301a3375a 100644
--- a/sdk-python/tests/test_copilotkit_lg_middleware.py
+++ b/sdk-python/tests/test_copilotkit_lg_middleware.py
@@ -1160,6 +1160,111 @@ def test_injected_when_flag_present(self):
assert "backend" in names
assert "generate_a2ui" in names
+ # --- host a2ui_params override (the design-guidelines parity gap) ---------
+ #
+ # Before this, the auto-inject path hardwired get_a2ui_tools to the toolkit
+ # defaults: a host serving via CopilotKitMiddleware() could NOT override the
+ # design/generation guidelines (e.g. to favor a repeating-card layout). The
+ # a2ui_params kwarg threads a host override through; the middleware still
+ # injects the bound model and folds the registered catalog in (host wins).
+
+ @staticmethod
+ def _spy_get_a2ui_tools(monkeypatch) -> "list[dict]":
+ """Patch get_a2ui_tools to capture the params dict it is called with and
+ return a stub tool named generate_a2ui. Returns the capture list."""
+ captured: "list[dict]" = []
+
+ def _spy(params):
+ captured.append(params)
+ stub = MagicMock(name="generate_a2ui_tool")
+ stub.name = "generate_a2ui"
+ return stub
+
+ monkeypatch.setattr("copilotkit.copilotkit_lg_middleware.get_a2ui_tools", _spy)
+ return captured
+
+ # Runtime-proxy path: a registered catalog arrives as a context entry, so
+ # the middleware derives a component_schema + catalog_id to fold in.
+ _A2UI_CONTEXT_STATE = {
+ "messages": [],
+ "ag-ui": {"inject_a2ui_tool": True},
+ "copilotkit": {
+ "context": [
+ {
+ "description": "A2UI catalog capabilities",
+ "value": "Available A2UI catalog:\n- my-custom-catalog\n"
+ " - Card: {...}",
+ }
+ ]
+ },
+ }
+
+ def test_host_a2ui_params_guidelines_reach_subagent(self, monkeypatch):
+ captured = self._spy_get_a2ui_tools(monkeypatch)
+ middleware = CopilotKitMiddleware(
+ a2ui_params={"guidelines": {"design_guidelines": "REPEAT_CARDS_MARK"}}
+ )
+ request = _make_request(state=dict(_A2UI_STATE), tools=[])
+
+ _run_wrap(middleware, request)
+
+ assert len(captured) == 1
+ params = captured[0]
+ # Host override survives...
+ assert params["guidelines"]["design_guidelines"] == "REPEAT_CARDS_MARK"
+ # ...the middleware still injects the bound model...
+ assert params["model"] is request.model
+ # ...and the native path contributes no composition_guide.
+ assert "composition_guide" not in params["guidelines"]
+
+ def test_host_override_merges_with_registered_catalog(self, monkeypatch):
+ captured = self._spy_get_a2ui_tools(monkeypatch)
+ middleware = CopilotKitMiddleware(
+ a2ui_params={"guidelines": {"design_guidelines": "REPEAT_CARDS_MARK"}}
+ )
+
+ _run_wrap(
+ middleware, _make_request(state=dict(self._A2UI_CONTEXT_STATE), tools=[])
+ )
+
+ params = captured[0]
+ # Host guidance preserved alongside the catalog the middleware folded in.
+ assert params["guidelines"]["design_guidelines"] == "REPEAT_CARDS_MARK"
+ assert "my-custom-catalog" in params["guidelines"]["composition_guide"]
+ assert params["default_catalog_id"] == "my-custom-catalog"
+
+ def test_host_composition_guide_and_catalog_id_win(self, monkeypatch):
+ captured = self._spy_get_a2ui_tools(monkeypatch)
+ middleware = CopilotKitMiddleware(
+ a2ui_params={
+ "default_catalog_id": "host-catalog",
+ "guidelines": {"composition_guide": "HOST_COMP"},
+ }
+ )
+
+ _run_wrap(
+ middleware, _make_request(state=dict(self._A2UI_CONTEXT_STATE), tools=[])
+ )
+
+ params = captured[0]
+ # Host-set values are never clobbered by the registered catalog.
+ assert params["guidelines"]["composition_guide"] == "HOST_COMP"
+ assert params["default_catalog_id"] == "host-catalog"
+
+ def test_default_no_params_carries_only_model(self, monkeypatch):
+ captured = self._spy_get_a2ui_tools(monkeypatch)
+ middleware = CopilotKitMiddleware()
+ request = _make_request(state=dict(_A2UI_STATE), tools=[])
+
+ _run_wrap(middleware, request)
+
+ params = captured[0]
+ # Prior behavior intact: just the inferred model, no host guidelines, no
+ # catalog (native path with a non-JSON schema yields neither).
+ assert params["model"] is request.model
+ assert "guidelines" not in params
+ assert "default_catalog_id" not in params
+
def test_executed_via_wrap_tool_call_with_inferred_model(self):
middleware = CopilotKitMiddleware()
# Model call infers the model + stashes the built tool.