From bdc83fd7aa89ace535e5e34ac63e9a0cbd9795e4 Mon Sep 17 00:00:00 2001 From: Markus Ecker Date: Wed, 20 May 2026 14:06:04 +0200 Subject: [PATCH 1/7] docs(premium/self-hosting): add user memory closed-beta section Adds two pieces to the self-hosting docs: 1. A short public Callout in `## What is this?` announcing that the Intelligence Platform image includes an opt-in user memory capability and pointing readers at the gated configuration section below. No implementation details exposed. 2. A password-gated `### User memory (closed beta)` sub-section in `## Configuration reference` that describes: - The user-visible effect (recall of prior conversations with example questions) - Scope guarantees (per-user, per-org, per-project; read-only) - The two flips required to enable it: app-api: appApi.env: [{ name: SL_ENABLED, value: "true" }] runtime: mcpServer: true on the CopilotKitIntelligence constructor in @copilotkit/runtime/v2 - A runtime.ts code snippet The gating uses the existing InsecurePasswordProtected component already registered as an MDX component on both (home) and integrations routes. The password is currently hardcoded as cpki-mem-beta directly on the prop, which keeps the gate working locally without env-var setup. Swap to an env-var-backed prop before broader rollout if a different password than the existing LangGraph Cloud beta is desired. Scope of this change is the self-hosting snippet only; no integration-specific docs, no new pages, no nav changes. Co-Authored-By: Claude Opus 4.7 --- docs/snippets/shared/premium/self-hosting.mdx | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/docs/snippets/shared/premium/self-hosting.mdx b/docs/snippets/shared/premium/self-hosting.mdx index 55ae8e91efd..7864bc2ecc0 100644 --- a/docs/snippets/shared/premium/self-hosting.mdx +++ b/docs/snippets/shared/premium/self-hosting.mdx @@ -21,6 +21,14 @@ CopilotKit Intelligence — the platform that powers threads, shared state, the Plus a `database-migrations` Job, a `thread-culler` CronJob, and the usual supporting resources (Services, Ingress, HPAs, PodDisruptionBudgets, ConfigMaps, and — when ESO is enabled — ExternalSecret resources). + +The Intelligence Platform image also includes an opt-in user memory +capability: agents can recall information from prior conversations in the +same project (e.g. *"what did we discuss earlier?"*, *"remind me about X"*). +Currently supported with the Built-in Agent runtime. Reach out to your +CopilotKit contact for access; see [Configuration reference → User memory](#user-memory-closed-beta) below for the enablement variables. + + ## When should I use this? - Your organization requires CopilotKit Intelligence to run inside your own VPC or data center for compliance, data residency, or security reasons @@ -474,6 +482,44 @@ The tables below summarize the most common values. For every option, see `values Enabling the realtime gateway requires that either `realtimeGateway.existingSecret` is set, or that `externalSecrets.secrets.realtimeGateway.enabled` or `selfHostedSecrets.enabled` is `true` — the chart fails validation otherwise. +### User memory (closed beta) + + + +User memory lets agents recall information from prior conversations in the same project. Built-in Agent runtime only today; LangGraph, Mastra, and other frameworks are in development. + +**What it does.** The chat agent can recall the user's prior conversations and use that recall to answer questions like: + +- *"What did we discuss last week?"* +- *"Remind me what I decided about X"* +- *"Have we covered Y before?"* + +**Scope.** Only the current user's conversations in the current `(organization, project)`. The agent never sees another user's conversations or another project's data, and it cannot modify what was said. + +**Discovery.** The agent will use the capability on its own when asked recall-style questions; for best results, add one line to your agent's `prompt` nudging it to consult its memory when relevant. + +**Enabling it.** Two flips, one on each side: + +| Where | How | +|---|---| +| `app-api` (platform) | Set `SL_ENABLED=true` via `appApi.env: [{ name: SL_ENABLED, value: "true" }]` in your `values.yaml`. This mounts the platform's `/mcp` endpoint on `app-api`. | +| Your runtime / BFF | Pass `mcpServer: true` when constructing `CopilotKitIntelligence` from `@copilotkit/runtime/v2`. The runtime then auto-attaches the platform's `/mcp` endpoint to every `BuiltInAgent` run. | + +```typescript title="runtime.ts" +import { CopilotKitIntelligence } from "@copilotkit/runtime/v2"; + +const intelligence = new CopilotKitIntelligence({ + apiKey: process.env.INTELLIGENCE_API_KEY!, + apiUrl: process.env.INTELLIGENCE_API_URL!, + wsUrl: process.env.INTELLIGENCE_GATEWAY_WS_URL!, + mcpServer: true, // [!code highlight] +}); +``` + +Once both flips are in place the agent gains recall on its next turn — no further application changes needed. + + + ### External Secrets Operator integration | Key | Description | Default | From 9107e00a9afbd63bb28c957d172e9b2669445941 Mon Sep 17 00:00:00 2001 From: Jordan Ritter Date: Thu, 21 May 2026 01:39:28 -0700 Subject: [PATCH 2/7] fix(runtime): close header propagation gap for LangGraphAgent The if (agent.headers) guard in configureAgentForRequest silently skipped header forwarding when agent.headers was undefined (the default for LangGraphAgent). This meant x-aimock-context, x-test-id, and other x-* headers were never forwarded to agent backends. Also wires install_httpx_hook in the Python SDK middleware so forwarded headers propagate to outgoing LLM API calls. Closes the gap documented in PR #4773 spec as out-of-scope. --- .../agent-utils-header-forwarding.test.ts | 188 ++++++++++++++++++ .../v2/runtime/handlers/shared/agent-utils.ts | 10 +- .../copilotkit/copilotkit_lg_middleware.py | 22 ++ 3 files changed, 214 insertions(+), 6 deletions(-) create mode 100644 packages/runtime/src/v2/runtime/__tests__/agent-utils-header-forwarding.test.ts diff --git a/packages/runtime/src/v2/runtime/__tests__/agent-utils-header-forwarding.test.ts b/packages/runtime/src/v2/runtime/__tests__/agent-utils-header-forwarding.test.ts new file mode 100644 index 00000000000..5370e3d130b --- /dev/null +++ b/packages/runtime/src/v2/runtime/__tests__/agent-utils-header-forwarding.test.ts @@ -0,0 +1,188 @@ +import { describe, it, expect } from "vitest"; +import { configureAgentForRequest } from "../handlers/shared/agent-utils"; +import type { AbstractAgent } from "@ag-ui/client"; +import type { CopilotRuntimeLike } from "../core/runtime"; + +/** + * Minimal agent stub that satisfies the MiddlewareCapableAgent shape + * used inside configureAgentForRequest. + */ +function createMockAgent(headers?: Record): AbstractAgent { + return { + headers, + // configureAgentForRequest checks `typeof agent.use === "function"` + use: () => {}, + } as unknown as AbstractAgent; +} + +function createMockRuntime(): CopilotRuntimeLike { + return { + agents: Promise.resolve({}), + } as unknown as CopilotRuntimeLike; +} + +function createRequest(headers: Record): Request { + return new Request("https://example.com/agent/test-agent/run", { + method: "POST", + headers, + }); +} + +describe("configureAgentForRequest – header forwarding", () => { + it("forwards x-aimock-context when agent.headers is undefined (default LangGraphAgent)", () => { + const agent = createMockAgent(/* headers = undefined */); + const request = createRequest({ + "Content-Type": "application/json", + "x-aimock-context": "langgraph-python", + }); + + configureAgentForRequest({ + runtime: createMockRuntime(), + request, + agentId: "test-agent", + agent, + }); + + // The core regression: before the fix, agent.headers stayed undefined + // because the old `if (agent.headers)` guard skipped the assignment. + expect((agent as any).headers).toBeDefined(); + expect((agent as any).headers["x-aimock-context"]).toBe("langgraph-python"); + }); + + it("forwards x-test-id when agent.headers is undefined", () => { + const agent = createMockAgent(); + const request = createRequest({ + "Content-Type": "application/json", + "x-test-id": "run-42", + }); + + configureAgentForRequest({ + runtime: createMockRuntime(), + request, + agentId: "test-agent", + agent, + }); + + expect((agent as any).headers["x-test-id"]).toBe("run-42"); + }); + + it("merges forwardable headers with pre-existing agent.headers", () => { + const agent = createMockAgent({ + "x-existing": "keep-me", + authorization: "Bearer original-token", + }); + const request = createRequest({ + "Content-Type": "application/json", + "x-aimock-context": "langgraph-python", + "x-test-id": "run-99", + }); + + configureAgentForRequest({ + runtime: createMockRuntime(), + request, + agentId: "test-agent", + agent, + }); + + const headers = (agent as any).headers as Record; + + // Pre-existing headers preserved + expect(headers["x-existing"]).toBe("keep-me"); + expect(headers["authorization"]).toBe("Bearer original-token"); + + // Forwardable headers merged in + expect(headers["x-aimock-context"]).toBe("langgraph-python"); + expect(headers["x-test-id"]).toBe("run-99"); + }); + + it("request forwardable headers override matching pre-existing agent headers", () => { + const agent = createMockAgent({ + "x-aimock-context": "old-context", + }); + const request = createRequest({ + "x-aimock-context": "new-context", + }); + + configureAgentForRequest({ + runtime: createMockRuntime(), + request, + agentId: "test-agent", + agent, + }); + + // The spread order is { ...agent.headers, ...extracted } so request wins + expect((agent as any).headers["x-aimock-context"]).toBe("new-context"); + }); + + it("does NOT forward non-forwardable headers like content-type or origin", () => { + const agent = createMockAgent(); + const request = createRequest({ + "Content-Type": "application/json", + Origin: "http://localhost:3000", + "User-Agent": "test-runner", + Cookie: "session=abc", + Host: "example.com", + Accept: "text/event-stream", + // Only this one should come through + "x-aimock-context": "langgraph-python", + }); + + configureAgentForRequest({ + runtime: createMockRuntime(), + request, + agentId: "test-agent", + agent, + }); + + const headers = (agent as any).headers as Record; + + // Non-forwardable headers must NOT be present + expect(headers["content-type"]).toBeUndefined(); + expect(headers["origin"]).toBeUndefined(); + expect(headers["user-agent"]).toBeUndefined(); + expect(headers["cookie"]).toBeUndefined(); + expect(headers["host"]).toBeUndefined(); + expect(headers["accept"]).toBeUndefined(); + + // The x- header IS forwarded + expect(headers["x-aimock-context"]).toBe("langgraph-python"); + }); + + it("authorization header IS forwarded (it is in the allowlist)", () => { + const agent = createMockAgent(); + const request = createRequest({ + Authorization: "Bearer secret-token", + "Content-Type": "application/json", + }); + + configureAgentForRequest({ + runtime: createMockRuntime(), + request, + agentId: "test-agent", + agent, + }); + + const headers = (agent as any).headers as Record; + expect(headers["authorization"]).toBe("Bearer secret-token"); + expect(headers["content-type"]).toBeUndefined(); + }); + + it("results in empty headers object when request has no forwardable headers and agent.headers is undefined", () => { + const agent = createMockAgent(); + const request = createRequest({ + "Content-Type": "application/json", + Origin: "http://localhost", + }); + + configureAgentForRequest({ + runtime: createMockRuntime(), + request, + agentId: "test-agent", + agent, + }); + + // Even with no forwardable headers, agent.headers should be set (not undefined) + expect((agent as any).headers).toBeDefined(); + expect((agent as any).headers).toEqual({}); + }); +}); diff --git a/packages/runtime/src/v2/runtime/handlers/shared/agent-utils.ts b/packages/runtime/src/v2/runtime/handlers/shared/agent-utils.ts index 32b98bb766f..6bd481ad655 100644 --- a/packages/runtime/src/v2/runtime/handlers/shared/agent-utils.ts +++ b/packages/runtime/src/v2/runtime/handlers/shared/agent-utils.ts @@ -86,12 +86,10 @@ export function configureAgentForRequest(params: { } } - if (agent.headers) { - agent.headers = { - ...agent.headers, - ...extractForwardableHeaders(request), - }; - } + agent.headers = { + ...agent.headers, + ...extractForwardableHeaders(request), + }; } export async function parseRunRequest( diff --git a/sdk-python/copilotkit/copilotkit_lg_middleware.py b/sdk-python/copilotkit/copilotkit_lg_middleware.py index c922ff54338..ce345970a91 100644 --- a/sdk-python/copilotkit/copilotkit_lg_middleware.py +++ b/sdk-python/copilotkit/copilotkit_lg_middleware.py @@ -27,8 +27,28 @@ ) from langgraph.runtime import Runtime +from .header_propagation import install_httpx_hook from .langgraph import CopilotKitProperties +# Track which httpx clients already have the header-propagation hook installed +# (by object id) so we never double-install on repeated model calls. +_hooked_clients: set[int] = set() + + +def _ensure_httpx_hook(model: Any) -> None: + """Install the header-propagation httpx hook on a LangChain chat model's + underlying HTTP client(s), if present. No-op for models that don't expose + an httpx transport (e.g. non-OpenAI/Anthropic providers). + """ + for attr in ("client", "async_client"): + client = getattr(model, attr, None) + if client is None: + continue + cid = id(client) + if cid not in _hooked_clients: + install_httpx_hook(client) + _hooked_clients.add(cid) + class StateSchema(AgentState): copilotkit: CopilotKitProperties @@ -152,6 +172,7 @@ def wrap_model_call( request: ModelRequest, handler: Callable[[ModelRequest], ModelResponse], ) -> ModelResponse: + _ensure_httpx_hook(request.model) request = self._apply_state_note(request) frontend_tools = request.state.get("copilotkit", {}).get("actions", []) @@ -340,6 +361,7 @@ async def awrap_model_call( request: ModelRequest, handler: Callable[[ModelRequest], Awaitable[ModelResponse]], ) -> ModelResponse: + _ensure_httpx_hook(request.model) self._fix_messages_for_bedrock(request.messages) request = self._apply_state_note(request) From c9ec6ee7355232b72c5628e89179a87458e7bf92 Mon Sep 17 00:00:00 2001 From: Alem Tuzlak Date: Thu, 21 May 2026 15:02:26 +0200 Subject: [PATCH 3/7] fix(showcase): resync scripts lockfile after aimock 1.26.1 bump PR #4956 bumped @copilotkit/aimock in showcase/scripts/package.json from "latest" to "1.26.1" but did not regenerate package-lock.json (still pinned to 1.16.4). This broke the Showcase Docker builds for showcase-harness and shell-dashboard, since both run `npm ci` inside showcase/scripts/ and `npm ci` fails on out-of-sync lockfiles. --- showcase/scripts/package-lock.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/showcase/scripts/package-lock.json b/showcase/scripts/package-lock.json index b2c01b163e2..dca2b364814 100644 --- a/showcase/scripts/package-lock.json +++ b/showcase/scripts/package-lock.json @@ -6,7 +6,7 @@ "": { "name": "@copilotkit/showcase-scripts", "dependencies": { - "@copilotkit/aimock": "latest", + "@copilotkit/aimock": "1.26.1", "@playwright/test": "^1.59.1", "ajv": "^8.17.1", "ajv-formats": "^3.0.1", @@ -85,9 +85,9 @@ } }, "node_modules/@copilotkit/aimock": { - "version": "1.16.4", - "resolved": "https://registry.npmjs.org/@copilotkit/aimock/-/aimock-1.16.4.tgz", - "integrity": "sha512-DA9WjJWpi2Yh36ltsnfMycj+BbifSS9G0pyHw0JjQZQPm41+FziGIdl2gusBtwYebStypQ4v9Jj2rjqjJqqtvQ==", + "version": "1.26.1", + "resolved": "https://registry.npmjs.org/@copilotkit/aimock/-/aimock-1.26.1.tgz", + "integrity": "sha512-bxnXdd4yFVKdbLvXmlcrgXQprimtXeg5SrmZMYvw2BFhfhAwGJmaVhCSv/9gSHUn+m3mxgrRlwJeok7o9Z2Bsw==", "license": "MIT", "bin": { "aimock": "dist/aimock-cli.js", From 2bac901dcd0b76f8d6173da2c8be79b68eb26460 Mon Sep 17 00:00:00 2001 From: Alem Tuzlak Date: Thu, 21 May 2026 16:03:49 +0200 Subject: [PATCH 4/7] fix(showcase/ms-agent-python): drop trailing slash on subpath HttpAgent URLs The mcp-apps and voice-demo HttpAgent URLs had a trailing slash (`${AGENT_URL}/mcp-apps/`, `${AGENT_URL}/voice/`), but the FastAPI backend in agent_server.py mounts those agents at `/mcp-apps` and `/voice` exactly. Posting to the trailing-slash URL triggers FastAPI's default `redirect_slashes` 307, which drops the SSE streaming body and surfaces in the runtime as `RUN_ERROR: fetch failed (INCOMPLETE_STREAM)` for every pill click on the deployed ms-agent-python showcase. Reproduced live against showcase-ms-agent-python-production. Every other ms-agent-python HttpAgent URL (`/hitl-in-app`, `/headless-complete`, `/multimodal`, `/agent-config`, etc.) already uses no trailing slash and works fine, confirming the trailing slash is the only delta. --- .../src/app/api/copilotkit-mcp-apps/[[...slug]]/route.ts | 7 ++++++- .../src/app/api/copilotkit-voice/[[...slug]]/route.ts | 8 +++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/showcase/integrations/ms-agent-python/src/app/api/copilotkit-mcp-apps/[[...slug]]/route.ts b/showcase/integrations/ms-agent-python/src/app/api/copilotkit-mcp-apps/[[...slug]]/route.ts index b0488fbe22c..7a112c92788 100644 --- a/showcase/integrations/ms-agent-python/src/app/api/copilotkit-mcp-apps/[[...slug]]/route.ts +++ b/showcase/integrations/ms-agent-python/src/app/api/copilotkit-mcp-apps/[[...slug]]/route.ts @@ -25,7 +25,12 @@ import { HttpAgent } from "@ag-ui/client"; const AGENT_URL = process.env.AGENT_URL || "http://localhost:8000"; -const mcpAppsAgent = new HttpAgent({ url: `${AGENT_URL}/mcp-apps/` }); +// No trailing slash on the URL. FastAPI mounts this agent at `/mcp-apps` +// exactly (via `add_agent_framework_fastapi_endpoint(path="/mcp-apps")` in +// agent_server.py); posting to `/mcp-apps/` triggers FastAPI's +// redirect-to-canonical 307, which kills the streaming SSE response and +// surfaces as `fetch failed` / `INCOMPLETE_STREAM` in the runtime. +const mcpAppsAgent = new HttpAgent({ url: `${AGENT_URL}/mcp-apps` }); // headless-complete shares this runtime because its cell also exercises // MCP Apps activity rendering (the "Sketch a diagram" pill exercises the diff --git a/showcase/integrations/ms-agent-python/src/app/api/copilotkit-voice/[[...slug]]/route.ts b/showcase/integrations/ms-agent-python/src/app/api/copilotkit-voice/[[...slug]]/route.ts index 12c2996427c..9a273431cd9 100644 --- a/showcase/integrations/ms-agent-python/src/app/api/copilotkit-voice/[[...slug]]/route.ts +++ b/showcase/integrations/ms-agent-python/src/app/api/copilotkit-voice/[[...slug]]/route.ts @@ -29,7 +29,13 @@ const AGENT_URL = process.env.AGENT_URL || "http://localhost:8000"; // Point at the tool-free /voice endpoint so aimock returns a direct text // response instead of a tool call that the agent can't summarize. -const voiceDemoAgent = new HttpAgent({ url: `${AGENT_URL}/voice/` }); +// +// No trailing slash on the URL. FastAPI mounts this agent at `/voice` +// exactly (via `add_agent_framework_fastapi_endpoint(path="/voice")` in +// agent_server.py); posting to `/voice/` triggers FastAPI's +// redirect-to-canonical 307, which kills the streaming SSE response and +// surfaces as `fetch failed` / `INCOMPLETE_STREAM` in the runtime. +const voiceDemoAgent = new HttpAgent({ url: `${AGENT_URL}/voice` }); /** * Transcription service wrapper that reports a clean, typed auth error when From 938803e6f4ef040069036050a812bff87589e85f Mon Sep 17 00:00:00 2001 From: tylerslaton <54378333+tylerslaton@users.noreply.github.com> Date: Thu, 21 May 2026 14:25:58 +0000 Subject: [PATCH 5/7] chore: release monorepo v1.57.4 --- packages/a2ui-renderer/package.json | 2 +- packages/agentcore-runner/package.json | 2 +- packages/core/package.json | 2 +- packages/react-core/package.json | 2 +- packages/react-native/package.json | 2 +- packages/react-textarea/package.json | 2 +- packages/react-ui/package.json | 2 +- packages/runtime-client-gql/package.json | 2 +- packages/runtime/package.json | 2 +- packages/sdk-js/package.json | 2 +- packages/shared/package.json | 2 +- packages/sqlite-runner/package.json | 2 +- packages/voice/package.json | 2 +- packages/vue/package.json | 2 +- packages/web-inspector/package.json | 2 +- 15 files changed, 15 insertions(+), 15 deletions(-) diff --git a/packages/a2ui-renderer/package.json b/packages/a2ui-renderer/package.json index 466bce649a8..7d04efe10a6 100644 --- a/packages/a2ui-renderer/package.json +++ b/packages/a2ui-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@copilotkit/a2ui-renderer", - "version": "1.57.3", + "version": "1.57.4", "private": false, "description": "A2UI Renderer for CopilotKit - render A2UI surfaces in React applications", "keywords": [ diff --git a/packages/agentcore-runner/package.json b/packages/agentcore-runner/package.json index 428f6a2df65..8e5b80f307a 100644 --- a/packages/agentcore-runner/package.json +++ b/packages/agentcore-runner/package.json @@ -1,6 +1,6 @@ { "name": "@copilotkit/agentcore-runner", - "version": "1.57.3", + "version": "1.57.4", "description": "AWS Bedrock AgentCore-compatible agent runner for CopilotKit2", "type": "module", "main": "./dist/index.cjs", diff --git a/packages/core/package.json b/packages/core/package.json index b508fedef4b..c1ffca83f59 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@copilotkit/core", - "version": "1.57.3", + "version": "1.57.4", "description": "Core web utilities for CopilotKit2", "type": "module", "main": "./dist/index.cjs", diff --git a/packages/react-core/package.json b/packages/react-core/package.json index 208c5040042..0d91a3aced9 100644 --- a/packages/react-core/package.json +++ b/packages/react-core/package.json @@ -1,6 +1,6 @@ { "name": "@copilotkit/react-core", - "version": "1.57.3", + "version": "1.57.4", "private": false, "keywords": [ "ai", diff --git a/packages/react-native/package.json b/packages/react-native/package.json index 2042368932d..3666ccc107b 100644 --- a/packages/react-native/package.json +++ b/packages/react-native/package.json @@ -1,6 +1,6 @@ { "name": "@copilotkit/react-native", - "version": "1.57.3", + "version": "1.57.4", "private": false, "keywords": [ "ai", diff --git a/packages/react-textarea/package.json b/packages/react-textarea/package.json index 8c882f6e4fb..51013342454 100644 --- a/packages/react-textarea/package.json +++ b/packages/react-textarea/package.json @@ -1,6 +1,6 @@ { "name": "@copilotkit/react-textarea", - "version": "1.57.3", + "version": "1.57.4", "private": false, "keywords": [ "ai", diff --git a/packages/react-ui/package.json b/packages/react-ui/package.json index 8517164aa1e..af7aaaa2e66 100644 --- a/packages/react-ui/package.json +++ b/packages/react-ui/package.json @@ -1,6 +1,6 @@ { "name": "@copilotkit/react-ui", - "version": "1.57.3", + "version": "1.57.4", "private": false, "keywords": [ "ai", diff --git a/packages/runtime-client-gql/package.json b/packages/runtime-client-gql/package.json index 09302ea3abe..6f231eb2dad 100644 --- a/packages/runtime-client-gql/package.json +++ b/packages/runtime-client-gql/package.json @@ -1,6 +1,6 @@ { "name": "@copilotkit/runtime-client-gql", - "version": "1.57.3", + "version": "1.57.4", "private": false, "keywords": [ "ai", diff --git a/packages/runtime/package.json b/packages/runtime/package.json index 14725e0040a..55207731918 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -1,6 +1,6 @@ { "name": "@copilotkit/runtime", - "version": "1.57.3", + "version": "1.57.4", "private": false, "keywords": [ "ai", diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index 67448323ca7..5e0f282831b 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -1,6 +1,6 @@ { "name": "@copilotkit/sdk-js", - "version": "1.57.3", + "version": "1.57.4", "private": false, "keywords": [ "ai", diff --git a/packages/shared/package.json b/packages/shared/package.json index 9880764edef..b1bb17e2f1b 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -1,6 +1,6 @@ { "name": "@copilotkit/shared", - "version": "1.57.3", + "version": "1.57.4", "private": false, "keywords": [ "ai", diff --git a/packages/sqlite-runner/package.json b/packages/sqlite-runner/package.json index ff8642a6587..0bb498a7649 100644 --- a/packages/sqlite-runner/package.json +++ b/packages/sqlite-runner/package.json @@ -1,6 +1,6 @@ { "name": "@copilotkit/sqlite-runner", - "version": "1.57.3", + "version": "1.57.4", "description": "SQLite-backed agent runner for CopilotKit2", "type": "module", "main": "./dist/index.cjs", diff --git a/packages/voice/package.json b/packages/voice/package.json index aa8817d09b1..b380ccb22ca 100644 --- a/packages/voice/package.json +++ b/packages/voice/package.json @@ -1,6 +1,6 @@ { "name": "@copilotkit/voice", - "version": "1.57.3", + "version": "1.57.4", "description": "Voice services for CopilotKit (transcription, text-to-speech, etc.)", "type": "module", "main": "./dist/index.cjs", diff --git a/packages/vue/package.json b/packages/vue/package.json index d8eb18baf76..5ba28615930 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -1,6 +1,6 @@ { "name": "@copilotkit/vue", - "version": "1.57.3", + "version": "1.57.4", "private": false, "description": "Vue 3 components and composables for CopilotKit", "keywords": [ diff --git a/packages/web-inspector/package.json b/packages/web-inspector/package.json index dd6421621b7..fc5b0649309 100644 --- a/packages/web-inspector/package.json +++ b/packages/web-inspector/package.json @@ -1,6 +1,6 @@ { "name": "@copilotkit/web-inspector", - "version": "1.57.3", + "version": "1.57.4", "description": "Lit-based web component for the CopilotKit web inspector", "type": "module", "main": "./dist/index.cjs", From 6f3080ce058cbe1d7d8d586d7b4ab6fdcc6c3cd9 Mon Sep 17 00:00:00 2001 From: Ran Shem Tov Date: Thu, 21 May 2026 10:24:13 -0500 Subject: [PATCH 6/7] chore: release sdk python 0.1.90 --- sdk-python/pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk-python/pyproject.toml b/sdk-python/pyproject.toml index b8e53bc8d32..56a75dff2af 100644 --- a/sdk-python/pyproject.toml +++ b/sdk-python/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "copilotkit" -version = "0.1.88" +version = "0.1.90" description = "CopilotKit python SDK" authors = ["Markus Ecker "] license = "MIT" From 949659e17835b80497d1341c8b0e6c5ff3710ffa Mon Sep 17 00:00:00 2001 From: Alem Tuzlak Date: Thu, 21 May 2026 17:47:58 +0200 Subject: [PATCH 7/7] feat(showcase/ms-agent-python): register reasoning-default and reasoning-custom MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Surfaces the reasoning-default and reasoning-custom demos for the MS Agent Python integration. The code, agent, UI, suggestions, e2e specs, D5 probe mapping and aimock fixtures were already ported from the langgraph-python north-star — only the manifest entries were missing, which meant the cells never appeared in the showcase shell, weren't counted as features, and weren't picked up by D5 routing. Adds: - `reasoning-custom` + `reasoning-default` to the features list (between headless-complete and frontend-tools, matching LGP order). - `demos:` entries for both, mirroring the LGP manifest verbatim. After regeneration the shell catalog now reports the two cells with `status: wired` and `max_depth: 4`, identical to LGP. validate-parity goes 38 demos / 37 specs (the e2e specs were already present); the ratchet validate-pins count stays at 93. The remaining `no qa/...` warnings match the existing LGP/MAF pattern (LGP also has no qa/reasoning-*.md), so no new QA docs are introduced here. --- .../ms-agent-python/manifest.yaml | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/showcase/integrations/ms-agent-python/manifest.yaml b/showcase/integrations/ms-agent-python/manifest.yaml index 7f97530ad43..e4507a3796c 100644 --- a/showcase/integrations/ms-agent-python/manifest.yaml +++ b/showcase/integrations/ms-agent-python/manifest.yaml @@ -31,6 +31,8 @@ features: - chat-customization-css - headless-simple - headless-complete + - reasoning-custom + - reasoning-default - frontend-tools - frontend-tools-async - hitl @@ -296,6 +298,28 @@ demos: - src/app/demos/headless-complete/hooks/use-headless-suggestions.ts - src/app/demos/headless-complete/attachments/use-attachments-config.ts - src/app/api/copilotkit/route.ts + - id: reasoning-default + name: "Reasoning: Default" + description: Built-in CopilotChatReasoningMessage rendering with no slot override. + tags: + - chat-ui + route: /demos/reasoning-default + highlight: + - src/app/demos/reasoning-default/page.tsx + - src/app/demos/reasoning-default/suggestions.ts + - src/agents/reasoning_agent.py + - id: reasoning-custom + name: "Reasoning: Custom" + description: Visible reasoning/thinking chain alongside the final answer + tags: + - chat-ui + route: /demos/reasoning-custom + animated_preview_url: + highlight: + - src/app/demos/reasoning-custom/page.tsx + - src/app/demos/reasoning-custom/reasoning-block.tsx + - src/agents/reasoning_agent.py + - src/app/api/copilotkit/route.ts - id: gen-ui-interrupt name: In-Chat HITL (useInterrupt — low-level primitive) description: Interactive component rendered inline in the chat via the lower-level `useInterrupt` primitive — direct control over the interrupt lifecycle