[pull] main from CopilotKit:main#271
Merged
Merged
Conversation
pnpm v11 ships with stronger supply-chain protections, notably `minimumReleaseAge` enforcement against tarball-substitution attacks and hardened script execution defaults. Regenerates `pnpm-lock.yaml` to match. Workflow-level `version:` hardcodes are removed in the follow-up commit so `pnpm/action-setup` inherits from `packageManager` (one source of truth — earlier drift between the field and workflow pins caused lockfile-vs-engine mismatches that only surfaced on the slow `--frozen-lockfile` path).
…ssions Comprehensive CI/CD security hardening pass over all 33 workflows. Action pinning - Every `uses:` is now pinned to a 40-char commit SHA with a `# vX.Y.Z` comment alongside (167 occurrences resolved). Tag-style refs like `@v4` are mutable and have been used in past supply-chain attacks (e.g. tj-actions/changed-files in March 2025) to repoint widely-used actions to malicious commits. - Removed redundant `version: "10.13.1"` hardcodes from `pnpm/action-setup` call sites so the action inherits from package.json `packageManager` (one source of truth). Automated maintenance - Added `.github/dependabot.yml` for the `github-actions` ecosystem so SHA pins stay current. Without this, pins go stale fast and new upstream advisories never reach us. Minor/patch bumps are grouped; major bumps stay separate so they get a real review. Static analysis - Added `.github/zizmor.yml` configuration and `.github/workflows/security_zizmor.yml` (blocking on PR, runs on push to main, weekly schedule for advisory drift). zizmor catches the well-known classes of Actions footguns: template injection from untrusted input, dangerous triggers, unpinned uses, excessive token scopes, secret exfil patterns. - All 28 high-severity and 54 medium-severity findings from the baseline scan are remediated. Each suppression in zizmor.yml carries a per-finding justification comment so future maintainers can audit the trust assumption. Workflow hardening (from zizmor + manual audit) - Added `persist-credentials: false` to every `actions/checkout` except the 7 workflows that legitimately push back to the repo via the workflow token (release tagging, auto-formatting, docs-sync, registry updates). Each retained credential persistence carries a `persist-credentials required: ...` comment explaining the call site. - Routed every attacker-controllable expansion (`github.head_ref`, `github.event.pull_request.head.repo.full_name`, `inputs.*`, step outputs) through `env:` and referenced as quoted shell variables. Eliminates 17 template-injection vectors in fork-PR-reachable workflows. - Added per-job `permissions:` blocks across 14 workflows; demoted broad workflow-level `id-token: write` to the specific Depot-runner jobs that need it; narrowed `pull-requests: write` / `actions: write` to the jobs that actually call those APIs. Audit-driven fixes - `publish-release.yml` build job: dropped `token:` and added `persist-credentials: false`. The subsequent `Upload workspace` step was packing `.git/config` (with the persisted GITHUB_TOKEN) into a 1-day-retention artifact downloadable by anyone with `actions:read`. - `auto_merge_showcases.yml`: team-membership check now authorizes on the PR AUTHOR (`pull_request.user.login`), never `context.actor` — the actor is whoever triggered the latest event, so a team member synchronizing or reopening an outsider's PR would otherwise green-light auto-merge of code they didn't author. - `static_quality.yml`: pinned ruff to a specific version so a compromised release can't land on the next PR run with the persisted-credentials write token in the format job. - `showcase_capture-previews.yml`: switched the args-string construction to a bash array so a slug or demo value containing whitespace or shell metacharacters stays a single argument rather than being re-tokenized by the shell.
Node 22.4+ ships an experimental built-in `localStorage` global that is
installed before vitest's jsdom environment runs, leaving
`window.localStorage` as an uninitialized stub without `getItem` /
`setItem` / `clear`. The telemetry persistence tests all crash with
"window.localStorage.clear is not a function" on Node 25.
Add a vitest setup file that installs a minimal in-memory `Storage`
shim on `globalThis.{localStorage,sessionStorage}` so tests behave the
same on Node 18/20/22/25+ without depending on
`--no-experimental-webstorage`. All 29 web-inspector tests now pass on
Node 25.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Two small dojo-only design tweaks: 1. Replace the single static "Demos" label in the dojo sidebar with the feature category names already present in the registry, so the navigation reflects how demos are grouped instead of presenting them as one flat list. Section titles bumped to 11px / weight 600 / primary text color for a touch more prominence — applies uniformly to the existing "Integrations" and "View" headers as well. 2. Drop the "(TanStack AI)" qualifier from the built-in agent's display name and description. The integration is now surfaced as "CopilotKit Built-in Agent" so users aren't pushed to think about the LLM backend in the integration name. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Two related dojo polish items so the page is more navigable: 1. Sync integration + demo selection to the URL as ?integration=<slug>&demo=<id>. On mount the page hydrates state from the query string (with fallback to the first deployed integration's first demo when params are missing or invalid). On every selection change the URL is rewritten via history.replaceState, so refreshing lands on the same selection and links are now shareable. 2. Replace the flat horizontal file-tab strip above the code panel with a vertical folder tree on the right side of the code view. Filenames like `src/app/api/copilotkit/route.ts` now nest under their `src/ → app/ → api/ → copilotkit/` ancestors instead of competing for horizontal space, which scales much better as demos accumulate backend + frontend files. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adopt the same highlighted-file pattern the standalone shell already uses at `showcase/shell/src/app/integrations/[slug]/[demo]/code/page.tsx`: - Each demo's `highlight: […]` list in the integration manifest already flows into the bundled `demo-content.json` as `file.highlighted: true`. The dojo file tree now consumes that flag instead of ignoring it. - Core files render bold + ★ in amber and float to the top within their parent directory. Non-core files render dimmer (muted color, normal weight) so the eye lands on the demo's "real" code first. - A "show all" toggle in the tree header switches between the curated core view (highlights only) and the full tree. Default is "core" when any file is highlighted, otherwise "all". The mode resets per demo. - Selection switched from index to filename so it survives the core⇄all toggle without aliasing to the wrong file. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…of the sidebar
Hand-curated entry-point demos that should be the first thing a visitor
sees, regardless of where they happen to live in the feature taxonomy:
Featured
• Multimodal Attachments (platform → multimodal)
• Tool-Based Generative UI (controlled-gen-ui → gen-ui-tool-based)
• Declarative Gen UI (Dynamic) (declarative-gen-ui → declarative-gen-ui)
• MCP Apps (open-gen-ui → mcp-apps)
• Fully Open-Ended Gen UI (open-gen-ui → open-gen-ui)
This list lives in the dojo page itself rather than in the registry so
the editorial pick can evolve without touching the underlying feature
taxonomy or each integration's manifest. Each demo also still appears
in its real category group below, since the goal is "look here first,"
not "remove from elsewhere."
Featured demos are pulled from the *current* integration's demos, in
the curated order; any IDs the active integration hasn't implemented
are silently skipped.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…e view Demo source files use inline region markers like // @region[provider-setup] ...lines belonging to the region... // @endregion[provider-setup] (see `showcase/scripts/bundle-demo-content.ts` for the spec). The bundler strips the markers and emits each region as `{ file, startLine, endLine }` on the demo's `regions` map. 537 of the 697 bundled demos have at least one region today. The dojo's code viewer was ignoring this. Now: for the active file, any 1-based line numbers that fall inside one of its regions render with a yellow per-line background, so the author-marked "this is the interesting bit" sections jump out visually without any data-format change. To make per-line backgrounds work, `CodeBlock` was rewritten from a single `<pre>` + `hljs.highlightElement()` to a per-line render: highlight once with `hljs.highlight()`, split by `\n`, render each line as its own row with optional background. Tradeoff: multi-line constructs (block comments, template literals) can lose their wrapping span at the line break — minor cosmetic glitch for cheap per-line styling. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Replace Multimodal Attachments with Agentic Chat as the top Featured
entry (chat is a better landing demo than attachments). Append three
more entries to round out the curated set:
Featured
• Agentic Chat (was Multimodal Attachments)
• Tool-Based Generative UI
• Declarative Gen UI (Dynamic)
• MCP Apps
• Fully Open-Ended Gen UI
• Chat Customization (CSS) ← new
• Headless Chat (Simple) ← new
• Frontend Tools ← new (in-app actions)
All eight still appear in their real category groups below.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Findings from a self-review pass on this PR:
- code-block.tsx: hoist the seven per-row inline-style objects to module
scope so the file-render hot path stops re-allocating ~3 fresh objects
per line per render. ~500-line demos previously allocated ~1.5k style
objects on every parent re-render.
- page.tsx URL-sync effect: add a same-value guard before
history.replaceState so unrelated re-renders don't write the same
query string back to the address bar.
- page.tsx FileTreeRow: collapse the color ternary chain — both selected
and highlighted leaves resolve to the same primary color, so
`isSelected || isHighlighted ? primary : disabled` reads cleaner than
the nested `?:?:`.
- page.tsx: trim the restated WHAT-comment above the reset-on-demo
effect (the function body already says what the comment said).
- vitest.setup.ts MemoryStorage: coerce keys in getItem/removeItem to
match setItem and the real Storage spec (all key args coerce to string).
Deferred to a follow-up PR (would also touch showcase/shell/* and
showcase/shell-docs/*): hoisting `escapeHtml` (5 copies in the repo
today), the hljs `try { highlight } catch { escapeHtml }` pattern (also
copied), and the file-tree build/sort utilities the dojo duplicates from
showcase/shell/.../code/page.tsx.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ained shared-state gating Three follow-ups on top of PR #4837 that I had on the same branch but didn't make it into the squash merge. 1. **packages/runtime: stamp `audio/webm` on empty-type Blobs in the transcription handler.** Browser MediaRecorder writes the audio as webm/opus, but the Blob's `type` field is often empty by the time it hits the server. `isValidAudioType` lets empty / octet-stream through for compatibility, but OpenAI Whisper then rejects the upload with `502 Invalid file format. Supported formats: ['flac', 'm4a', 'mp3', 'mp4', 'mpeg', 'mpga', 'oga', 'ogg', 'wav', 'webm']` because it can't pick a decoder. Reconstructing the File with an explicit `audio/webm` type (and a `.webm` filename fallback) makes Whisper accept the bytes that were already valid. Monorepo-wide — applies to every integration using `/api/copilotkit-voice/transcribe`. 2. **showcase/aimock/feature-parity.json: port 12 subagents fixtures from d5-all.json** so the three pills (cold-exposure blog, LLM tool-calling explanation, reusable-rockets summary) work in production. d5-all.json already has the full research → writing → critique chain with substantive content; feature-parity only had the single LP remote-work pill. Production aimock loads both files but any case where feature-parity wins first-match needs the same content. Verbatim port — no fabricated text. Net result: no more `[sub-agent error] the writing agent...` on the demo's pills. 3. **showcase/aimock both files: scope shared-state-read-write Greet + Plan-a-weekend fixtures with a true all-defaults systemMessage gate.** The PR #4837 gate (`systemMessage: "tone: casual"`) only caught tone changes — name / language / interests changes still hit the canned fixture. Replaced with a two-element array gate (aimock supports all-present substring matching, verified in `/app/dist/router.js`): - `preferences:\n- Preferred tone: casual\n` — breaks if name is set (Name line inserts between signature and tone) or tone changes. - `- Preferred language: English\nTailor every response` — breaks if language changes or interests are added (Interests line inserts between language and Tailor). With `--provider-gemini` already wired in both local docker-compose and Railway prod, any state change now proxies to real Gemini and returns a personalised reply. 4. **showcase/aimock/feature-parity.json: re-remove bare 'plan' / 'steps' / 'mars' / 'dashboard' / 'report' substring catch-alls + the bare 'alice' / 'Alice' fixtures.** These were removed in commit `ddc2e179` on the PR #4837 branch but didn't survive the squash merge, so they're back in main and still hijacking hitl-in-app downgrade-#12346 ('plan'), shared-state-rw weekend pill ('plan'), subagents 'rockets' pills, hitl-in-chat Schedule-1:1 with Alice ('alice'). Replace the alice pair with a single scoped `Hi, my name is Alice` fixture for the showcase-assistant introduction flow. Local verification: - `bin/showcase test google-adk --d5` → 38/38 green, 165s. - Paired curl on shared-state-read-write: - Default state → canned fixture ("Hi — I'm your shared-state co-pilot…") - `name=alem` → real Gemini ("Hi there! …") - `interests=[Cooking, Travel]` weekend pill → real Gemini ("Hey there! Since you're into cooking and travel, how about a weekend plan that combines both?") Production deploys this PR will pick up the aimock fixture changes (prod loads feature-parity.json from GitHub raw at boot — no image rebuild needed for that file) plus the runtime change once the packages/runtime build is republished.
…ained shared-state gating (#4838) ## Summary Three follow-ups on top of PR #4837. (My second commit on that branch — the one that removed the bare `plan`/`steps`/`mars`/`dashboard`/`report`/`alice`/`Alice` substring catch-alls — didn't survive the squash merge, so the catch-alls are back on main and still hijacking demos.) **Fixes:** - **packages/runtime: stamp `audio/webm` on empty-type Blobs in the transcription handler.** Browser MediaRecorder writes audio as webm/opus but the Blob's `type` is often empty by the time it hits the server. OpenAI Whisper then rejects with `502 Invalid file format`. Reconstructing the File with explicit `audio/webm` + `.webm` filename fallback makes Whisper accept the bytes. Monorepo-wide — applies to every integration using `/api/copilotkit-voice/transcribe`. - **showcase/aimock/feature-parity.json: port 12 subagents fixtures from `d5-all.json`** so the three pills (cold-exposure blog, LLM tool-calling explanation, reusable-rockets summary) get deterministic content in production. `d5-all.json` already has the full research → writing → critique chain with substantive content; feature-parity only had the single LP remote-work pill. Verbatim port — no fabricated text. Net result: no more `[sub-agent error] the writing agent…` on the demo. - **showcase/aimock both files: replace the `tone: casual` shared-state-rw gate with a true all-defaults `match.systemMessage` array.** The previous single-substring gate only caught tone changes — name / language / interests changes still hit the canned fixture. Replaced with a two-element array gate (aimock supports all-present substring matching, verified in `/app/dist/router.js`): - `preferences:\n- Preferred tone: casual\n` — breaks if name is set (Name line inserts between signature and tone) or tone changes. - `- Preferred language: English\nTailor every response` — breaks if language changes or interests are added (Interests line inserts between language and Tailor). With `--provider-gemini` already wired in local + Railway prod, any state change now proxies to real Gemini and returns a personalised reply. - **feature-parity.json: re-remove the bare `plan` / `steps` / `mars` / `dashboard` / `report` / `alice` / `Alice` substring catch-alls** (lost in the #4837 squash). Replace the alice pair with a single scoped `Hi, my name is Alice` fixture for the showcase-assistant intro flow. ## Test plan - [x] `bin/showcase test google-adk --d5` → 38/38 green, 165s. - [x] Paired curl on shared-state-rw: - Default state → canned fixture (`"Hi — I'm your shared-state co-pilot…"`) - `name=alem` → real Gemini (`"Hi there! …"`) - `interests=[Cooking, Travel]` weekend pill → real Gemini (`"Hey there! Since you're into cooking and travel, how about a weekend plan that combines both?"`) - [x] Validate JSON on both fixture files. - [ ] **Manual Railway prod test** after merge — please drive shared-state-rw with state changes, subagents pills, voice mic, and hitl-in-app downgrade-#12346 to confirm the prod-only manifestations are gone. ## Notes - Production aimock fetches `feature-parity.json` from GitHub raw at boot (per `RAILWAY.md`), so once this merges Railway picks up the new fixtures without rebuilding the image. - The `packages/runtime` handle-transcribe change needs the runtime package to be rebuilt + published for production to receive the fix — that's a separate deploy step depending on how the integrations consume `@copilotkit/runtime`.
The mic recording path on Railway prod was returning `502 Invalid file
format. Supported formats: ['flac', 'm4a', 'mp3', 'mp4', 'mpeg', 'mpga',
'oga', 'ogg', 'wav', 'webm']` even though the browser was sending valid
WebM Opus bytes (audio/webm;codecs=opus, ~40KB recordings).
Root cause: `new OpenAI({ apiKey })` falls through to `OPENAI_BASE_URL`,
which in showcase environments points at aimock (`http://aimock:4010/v1`).
Aimock's proxy mode forwards unmatched requests to real OpenAI but
re-encodes the multipart body, corrupting the audio bytes en route to
Whisper. Whisper inspects the bytes (not just the MIME), so it rejects
the corrupted payload with the format error.
LangGraph-Python's voice route already documents and works around this:
it pins the transcription client's `baseURL` to real OpenAI (or
`OPENAI_TRANSCRIPTION_BASE_URL` when set) so the audio bypasses aimock
entirely. Mirroring that here verbatim. The non-transcription paths
(chat completions etc.) still go through aimock for deterministic
fixtures; only `/v1/audio/transcriptions` skips it.
Verified locally: mic recording in the browser now transcribes the
user's actual words via real Whisper instead of failing 502.
The audio/webm stamping I added to `packages/runtime` in the previous
commit is still useful defensive hardening for empty-type Blobs that
arrive at the server-side handler — keep it. With this route-level
change those bytes never reach aimock anyway.
…nAI (#4840) ## Summary Voice mic recording on Railway prod was returning `502 Invalid file format. Supported formats: ['flac', 'm4a', 'mp3', 'mp4', 'mpeg', 'mpga', 'oga', 'ogg', 'wav', 'webm']` even though the browser was sending valid WebM Opus bytes (~40 KB `audio/webm;codecs=opus` recordings). **Root cause:** `new OpenAI({ apiKey })` falls through to `OPENAI_BASE_URL`, which in showcase environments is set to `http://aimock:4010/v1`. Aimock's `--proxy-only` forwards unmatched requests to real OpenAI but re-encodes the multipart body in the process, corrupting the audio bytes by the time Whisper sees them. Whisper inspects the actual bytes (not just the MIME), so it rejects the mangled payload with the format error above. **Fix:** Mirror `langgraph-python`'s voice route — pin the transcription client's `baseURL` to real OpenAI (or `OPENAI_TRANSCRIPTION_BASE_URL` when explicitly set) so the audio bypasses aimock entirely. Non-transcription paths (chat completions etc.) keep going through aimock for deterministic fixtures. ```diff constructor() { super(); const apiKey = process.env.OPENAI_API_KEY; + const baseURL = + process.env.OPENAI_TRANSCRIPTION_BASE_URL ?? "https://api.openai.com/v1"; this.delegate = apiKey - ? new TranscriptionServiceOpenAI({ openai: new OpenAI({ apiKey }) }) + ? new TranscriptionServiceOpenAI({ + openai: new OpenAI({ apiKey, baseURL }), + }) : null; } ``` ## Test plan - [x] Local: mic recording at http://localhost:3103/demos/voice now transcribes the user's actual words via real Whisper instead of failing 502. Confirmed end-to-end by user. - [ ] Manual Railway prod test after merge. ## Notes - This was the last fix from PR #4838 that didn't make it into the squash merge (`dd43576035` only included the prior commit). - The `packages/runtime` `audio/webm` stamping shipped in PR #4838 is still useful defensive hardening for empty-type Blobs at the server-side handler; with this route-level change those bytes never reach aimock anyway.
> ℹ️ **Note**
>
> This PR body was truncated due to platform limits.
This PR contains the following updates:
| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
|
[@copilotkit/a2ui-renderer](https://redirect.github.com/CopilotKit/CopilotKit)
([source](https://redirect.github.com/CopilotKit/CopilotKit/tree/HEAD/packages/a2ui-renderer))
| [`0.0.0-mme-ag-ui-0-0-46-20260227141603` →
`1.57.1`](https://renovatebot.com/diffs/npm/@copilotkit%2fa2ui-renderer/0.0.0-mme-ag-ui-0-0-46-20260227141603/1.57.1)
|

|

|
|
[@copilotkit/react-core](https://redirect.github.com/CopilotKit/CopilotKit)
| [`0.0.0-mme-ag-ui-0-0-46-20260227141603` →
`1.57.1`](https://renovatebot.com/diffs/npm/@copilotkit%2freact-core/0.0.0-mme-ag-ui-0-0-46-20260227141603/1.57.1)
|

|

|
|
[@copilotkit/react-ui](https://redirect.github.com/CopilotKit/CopilotKit)
| [`0.0.0-mme-ag-ui-0-0-46-20260227141603` →
`1.57.1`](https://renovatebot.com/diffs/npm/@copilotkit%2freact-ui/0.0.0-mme-ag-ui-0-0-46-20260227141603/1.57.1)
|

|

|
|
[@copilotkit/runtime](https://redirect.github.com/CopilotKit/CopilotKit)
| [`0.0.0-mme-ag-ui-0-0-46-20260227141603` →
`1.57.1`](https://renovatebot.com/diffs/npm/@copilotkit%2fruntime/0.0.0-mme-ag-ui-0-0-46-20260227141603/1.57.1)
|

|

|
|
[@copilotkit/runtime-client-gql](https://redirect.github.com/CopilotKit/CopilotKit)
| [`0.0.0-mme-ag-ui-0-0-46-20260227141603` →
`1.57.1`](https://renovatebot.com/diffs/npm/@copilotkit%2fruntime-client-gql/0.0.0-mme-ag-ui-0-0-46-20260227141603/1.57.1)
|

|

|
|
[@copilotkit/shared](https://redirect.github.com/CopilotKit/CopilotKit)
| [`0.0.0-mme-ag-ui-0-0-46-20260227141603` →
`1.57.1`](https://renovatebot.com/diffs/npm/@copilotkit%2fshared/0.0.0-mme-ag-ui-0-0-46-20260227141603/1.57.1)
|

|

|
| copilotkit | [`^0.0.45` →
`^2.0.0`](https://renovatebot.com/diffs/npm/copilotkit/0.0.45/2.0.4) |

|

|
---
### Release Notes
<details>
<summary>CopilotKit/CopilotKit
(@​copilotkit/a2ui-renderer)</summary>
###
[`v1.57.1`](https://redirect.github.com/CopilotKit/CopilotKit/compare/v1.57.0...v1.57.1)
[Compare
Source](https://redirect.github.com/CopilotKit/CopilotKit/compare/v1.57.0...v1.57.1)
###
[`v1.57.0`](https://redirect.github.com/CopilotKit/CopilotKit/compare/v1.56.5...v1.57.0)
[Compare
Source](https://redirect.github.com/CopilotKit/CopilotKit/compare/v1.56.5...v1.57.0)
###
[`v1.56.5`](https://redirect.github.com/CopilotKit/CopilotKit/compare/v1.56.4...v1.56.5)
[Compare
Source](https://redirect.github.com/CopilotKit/CopilotKit/compare/v1.56.4...v1.56.5)
###
[`v1.56.4`](https://redirect.github.com/CopilotKit/CopilotKit/compare/v1.56.3...v1.56.4)
[Compare
Source](https://redirect.github.com/CopilotKit/CopilotKit/compare/v1.56.3...v1.56.4)
###
[`v1.56.3`](https://redirect.github.com/CopilotKit/CopilotKit/compare/v1.56.2...v1.56.3)
[Compare
Source](https://redirect.github.com/CopilotKit/CopilotKit/compare/v1.56.2...v1.56.3)
###
[`v1.56.2`](https://redirect.github.com/CopilotKit/CopilotKit/releases/tag/v1.56.2)
[Compare
Source](https://redirect.github.com/CopilotKit/CopilotKit/compare/v1.56.1...v1.56.2)
### CopilotKit v1.56.2
A hygiene release on the `1.56` line. Removes a leftover peer dependency
that was generating install warnings for users not on LangChain.
#### Install
```bash
npm install @​copilotkit/react-core@1.56.2 @​copilotkit/react-ui@1.56.2 @​copilotkit/runtime@1.56.2
```
#### SDK fixes (`@copilotkit/sdk-js`)
- **Remove unused `@langchain/community` peer dependency** —
`@langchain/community` was a leftover peer dep that nothing inside
`@copilotkit/sdk-js` actually used, but it still generated install
warnings for anyone not on LangChain. Dropped. If you've been installing
`@langchain/community` only to quiet a peer-dep warning, you can drop
it.
([#​3960](https://redirect.github.com/CopilotKit/CopilotKit/pull/3960))
#### Packages republished at `1.56.2`
`@copilotkit/runtime`, `@copilotkit/react-core`, `@copilotkit/react-ui`,
`@copilotkit/core`, `@copilotkit/shared`,
`@copilotkit/runtime-client-gql`, `@copilotkit/sdk-js`,
`@copilotkit/voice`, `@copilotkit/web-inspector`,
`@copilotkit/a2ui-renderer`, `@copilotkit/react-textarea`,
`@copilotkit/sqlite-runner`, and `@copilotkit/angular`.
###
[`v1.56.1`](https://redirect.github.com/CopilotKit/CopilotKit/releases/tag/v1.56.1)
[Compare
Source](https://redirect.github.com/CopilotKit/CopilotKit/compare/v1.56.0...v1.56.1)
### CopilotKit v1.56.1
A patch release on the `1.56` line. No breaking API changes —
thirty-plus fixes across adapters, the React UI surface, and the
runtime/agent layer. Most of these address long-standing issues that had
been quietly biting users; batch-resolved here.
#### Install
```bash
npm install @​copilotkit/react-core@1.56.1 @​copilotkit/react-ui@1.56.1 @​copilotkit/runtime@1.56.1
```
#### Adapter fixes (`@copilotkit/runtime`)
- **Anthropic `max_tokens` default bumped 1024 → 4096** — the old
default was short enough that longer completions were getting truncated
without warning.
([#​3785](https://redirect.github.com/CopilotKit/CopilotKit/pull/3785))
- **Anthropic adapter skips unknown `tool_use` blocks** — no more crash
when Anthropic emits `content_block_delta` for a `tool_use` the adapter
hasn't seen.
([#​3824](https://redirect.github.com/CopilotKit/CopilotKit/pull/3824),
closes
[#​2504](https://redirect.github.com/CopilotKit/CopilotKit/issues/2504))
- **Anthropic `tool_result` paired with `tool_use` after token
trimming** — token trimming no longer orphans `tool_result` messages.
([#​3820](https://redirect.github.com/CopilotKit/CopilotKit/pull/3820),
closes
[#​2450](https://redirect.github.com/CopilotKit/CopilotKit/issues/2450))
- **Configurable `maxInputTokens` on OpenAI and Anthropic adapters** —
cap input tokens explicitly per request.
([#​3823](https://redirect.github.com/CopilotKit/CopilotKit/pull/3823),
closes
[#​2405](https://redirect.github.com/CopilotKit/CopilotKit/issues/2405))
- **LangChain adapter always generates unique message IDs** — prevents
downstream deduplication issues.
([#​3829](https://redirect.github.com/CopilotKit/CopilotKit/pull/3829))
- **Zod v4 compatibility for schema-to-JSON conversion** — the
schema-to-JSON converter now handles the Zod v4 shape.
([#​3837](https://redirect.github.com/CopilotKit/CopilotKit/pull/3837))
- **MCP `TOOL_CALL_RESULT` array-content normalization** — array-shaped
tool results are now normalized into strings the runtime can emit.
([#​3832](https://redirect.github.com/CopilotKit/CopilotKit/pull/3832))
- **Non-unique provider IDs replaced with UUIDs** — placeholders like
`txt-0` were colliding; the adapter now emits proper UUIDs.
([#​3800](https://redirect.github.com/CopilotKit/CopilotKit/pull/3800),
closes
[#​3410](https://redirect.github.com/CopilotKit/CopilotKit/issues/3410),
[#​3623](https://redirect.github.com/CopilotKit/CopilotKit/issues/3623))
#### React fixes (`@copilotkit/react-core`, `@copilotkit/react-ui`)
- **Export `CopilotModal` and `CopilotModalProps`** — public components
without a public export, now corrected.
([#​3817](https://redirect.github.com/CopilotKit/CopilotKit/pull/3817),
closes
[#​2194](https://redirect.github.com/CopilotKit/CopilotKit/issues/2194))
- **`Button` uses `forwardRef` for Radix interop** — no more ref
warnings when composing with Radix `DropdownMenuTrigger`.
([#​3830](https://redirect.github.com/CopilotKit/CopilotKit/pull/3830))
- **IME composition guard in `CopilotChatInput`** — no more accidental
sends mid-composition for CJK/IME input.
([#​3835](https://redirect.github.com/CopilotKit/CopilotKit/pull/3835))
- **Loading indicator during tool execution** — keeps the UI honest
about what's happening mid-tool-call.
([#​3833](https://redirect.github.com/CopilotKit/CopilotKit/pull/3833))
- **Controlled-input reset after send** — `onChange("")` fires after
submit in controlled mode.
([#​3836](https://redirect.github.com/CopilotKit/CopilotKit/pull/3836))
- **`available: "disabled"` tools excluded from `buildFrontendTools`** —
disabled tools are no longer announced to the model.
([#​3793](https://redirect.github.com/CopilotKit/CopilotKit/pull/3793),
closes
[#​3020](https://redirect.github.com/CopilotKit/CopilotKit/issues/3020))
- **Thumbs callbacks receive `AssistantMessage`** —
`onThumbsUp`/`onThumbsDown` now pass the message instead of a
`SyntheticEvent`.
([#​3796](https://redirect.github.com/CopilotKit/CopilotKit/pull/3796),
closes
[#​3457](https://redirect.github.com/CopilotKit/CopilotKit/issues/3457))
- **`urlTransform` forwards to `ReactMarkdown`** — the prop was being
dropped silently.
([#​3845](https://redirect.github.com/CopilotKit/CopilotKit/pull/3845))
- **Message footer width** — hardcoded `97%` replaced with `100%`.
([#​3786](https://redirect.github.com/CopilotKit/CopilotKit/pull/3786))
#### Runtime + agent fixes (`@copilotkit/runtime`,
`@copilotkit/react-core`)
- **Duck-type `Request` for Hono polyfill compat** — `instanceof` was
brittle under Hono's polyfilled `Request`; the runtime now type-sniffs
instead.
([#​3790](https://redirect.github.com/CopilotKit/CopilotKit/pull/3790))
- **LangGraph agent pagination default 10 → 100** — larger default page
size for LangGraph thread/run listings.
([#​3812](https://redirect.github.com/CopilotKit/CopilotKit/pull/3812),
closes
[#​2056](https://redirect.github.com/CopilotKit/CopilotKit/issues/2056))
- **Handle void return from `sendFunction` in `usePushToTalk`** —
push-to-talk no longer assumes a non-void return.
([#​3783](https://redirect.github.com/CopilotKit/CopilotKit/pull/3783))
- **`useRenderCustomMessages` returns `null` when agent missing** — used
to throw; now safely no-ops.
([#​3797](https://redirect.github.com/CopilotKit/CopilotKit/pull/3797),
closes
[#​3497](https://redirect.github.com/CopilotKit/CopilotKit/issues/3497))
- **`CopilotListeners` guards empty agents map** — stops `useAgent`
throwing on initial boot.
([#​3798](https://redirect.github.com/CopilotKit/CopilotKit/pull/3798),
closes
[#​3249](https://redirect.github.com/CopilotKit/CopilotKit/issues/3249))
- **Skip version check when `showDevConsole={false}`** — fewer requests
when the dev console is disabled.
([#​3827](https://redirect.github.com/CopilotKit/CopilotKit/pull/3827))
- **Forward credentials on all agent registration paths** — one
registration path was not forwarding credentials; now consistent.
([#​3839](https://redirect.github.com/CopilotKit/CopilotKit/pull/3839))
- **`toolCallId` passed to `useRenderTool` render components** — render
functions now receive the tool call ID.
([#​3843](https://redirect.github.com/CopilotKit/CopilotKit/pull/3843))
- **`hookParams` passed to `onAfterRequest`** — the callback was
receiving an empty object. Now receives the actual hook params.
([#​3801](https://redirect.github.com/CopilotKit/CopilotKit/pull/3801),
closes
[#​2124](https://redirect.github.com/CopilotKit/CopilotKit/issues/2124))
- **Configurable audio `mediaType` + mic tracks released on stop** — mic
tracks no longer linger after a recording ends.
([#​3811](https://redirect.github.com/CopilotKit/CopilotKit/pull/3811),
closes
[#​2049](https://redirect.github.com/CopilotKit/CopilotKit/issues/2049),
[#​2050](https://redirect.github.com/CopilotKit/CopilotKit/issues/2050))
#### Build / packaging
- **Release pipeline hardened** — registry error handling, tag-existence
checks before publish, and prerelease smoke tests in the release
workflow.
([#​3858](https://redirect.github.com/CopilotKit/CopilotKit/pull/3858))
#### Packages republished at `1.56.1`
`@copilotkit/runtime`, `@copilotkit/react-core`, `@copilotkit/react-ui`,
`@copilotkit/core`, `@copilotkit/shared`,
`@copilotkit/runtime-client-gql`, `@copilotkit/sdk-js`,
`@copilotkit/voice`, `@copilotkit/web-inspector`,
`@copilotkit/a2ui-renderer`, `@copilotkit/react-textarea`,
`@copilotkit/sqlite-runner`, and `@copilotkit/angular`.
###
[`v1.56.0`](https://redirect.github.com/CopilotKit/CopilotKit/releases/tag/v1.56.0)
[Compare
Source](https://redirect.github.com/CopilotKit/CopilotKit/compare/v1.55.3...v1.56.0)
### CopilotKit v1.56.0
A minor release on the `1.56` line. The headline is **debug mode** — a
single `debug` flag on the runtime and the `<CopilotKit>` provider that
threads structured logging through the full stack, with PII-safe
defaults. Also fixes the state streaming path on LangGraph prebuilt
agents and realigns A2UI with the v0.9 spec.
#### Install
```bash
npm install @​copilotkit/react-core@1.56.0 @​copilotkit/react-ui@1.56.0 @​copilotkit/runtime@1.56.0
```
#### Features
- **Debug mode for runtime and client** — a single `debug` flag on
`CopilotRuntime` and the `<CopilotKit>` provider, with structured
logging across the SSE event pipeline. Defaults to `verbose: false` to
prevent accidental PII exposure in logs. Shared `DebugConfig` type and
`resolveDebugConfig` helper live in `@copilotkit/shared`. Changes apply
at runtime; toggling the flag does not require a remount.
([#​3562](https://redirect.github.com/CopilotKit/CopilotKit/pull/3562))
```tsx
// Client
import { CopilotKit } from "@​copilotkit/react-core";
<CopilotKit debug runtimeUrl="/api/copilotkit">
<App />
</CopilotKit>
```
```ts
// Runtime
import { CopilotRuntime } from "@​copilotkit/runtime";
const runtime = new CopilotRuntime({
debug: { events: true, lifecycle: true, verbose: false },
});
```
- **State streaming on LangGraph prebuilt agents** — the state streaming
path now works on prebuilt LangGraph agents without unwrapping the graph
manually. A reference example landed alongside the fix.
([#​3934](https://redirect.github.com/CopilotKit/CopilotKit/pull/3934),
[#​3649](https://redirect.github.com/CopilotKit/CopilotKit/pull/3649))
#### Runtime fixes (`@copilotkit/runtime`)
- **A2UI schema realigned with v0.9 spec** — the schema format had
drifted from the v0.9 spec as upstream tightened constraints. Realigned,
with improved path-binding prompts so the model produces schema-valid
output more reliably.
([#​3929](https://redirect.github.com/CopilotKit/CopilotKit/pull/3929))
- **Latest `@ag-ui/langgraph` packages** — runtime and examples now pull
the latest `@ag-ui/langgraph` packages, picking up upstream fixes. No
API change.
([#​3932](https://redirect.github.com/CopilotKit/CopilotKit/pull/3932))
#### Build / packaging
- **Release pipeline hardening** — registry error handling, a
tag-existence check before publish, and prerelease smoke tests so
release-time failures get caught before the git tag.
([#​3858](https://redirect.github.com/CopilotKit/CopilotKit/pull/3858))
- **Docs-sync PR flow** — review items now staged before creating the
PR.
([#​3779](https://redirect.github.com/CopilotKit/CopilotKit/pull/3779))
#### Packages republished at `1.56.0`
`@copilotkit/runtime`, `@copilotkit/react-core`, `@copilotkit/react-ui`,
`@copilotkit/core`, `@copilotkit/shared`,
`@copilotkit/runtime-client-gql`, `@copilotkit/sdk-js`,
`@copilotkit/voice`, `@copilotkit/web-inspector`,
`@copilotkit/a2ui-renderer`, `@copilotkit/react-textarea`,
`@copilotkit/sqlite-runner`, and `@copilotkit/angular`.
###
[`v1.55.3`](https://redirect.github.com/CopilotKit/CopilotKit/releases/tag/v1.55.3)
### CopilotKit v1.55.3
A consolidation release on the `1.55` line, rolling up everything that
landed in `1.55.0`, `1.55.1`, and `1.55.2`. The headline: every
`@copilotkitnext/*` package has been folded into its flat
`@copilotkit/*` equivalent. v1 imports stay on `@copilotkit/react-core`;
v2 imports continue to use the `@copilotkit/react-core/v2` subpath.
On top of the consolidation: multimodal attachments for the built-in
agent, A2UI v0.9 with Open Generative UI, a fetch-based runtime handler,
Vertex AI provider, `BuiltInAgent` factory mode, and a long list of
fixes to streaming, reasoning, layout, and re-render behavior.
#### Install
```bash
npm install @​copilotkit/react-core@1.55.3 @​copilotkit/react-ui@1.55.3 @​copilotkit/runtime@1.55.3
```
#### Features
- **Package consolidation: `@copilotkitnext/*` → `@copilotkit/*`** —
every `@copilotkitnext/*` package is folded into its flat
`@copilotkit/*` equivalent. The v1 API surface stays at the package root
(e.g. `@copilotkit/react-core`); the v2 API surface continues to be
available via the `@copilotkit/react-core/v2` subpath. The
`@copilotkitnext/*` scope was deprecated in 1.54 and is removed here.
- **Multimodal attachments for the built-in agent** —
`@copilotkit/runtime` now accepts multimodal attachments (images, files,
anything non-text) and passes them through to the model with content
types preserved.
([#​3604](https://redirect.github.com/CopilotKit/CopilotKit/pull/3604))
- **A2UI v0.9 + Open Generative UI** — A2UI aligns with the v0.9 spec
and Open Generative UI lands with BYOC catalogs (the agent renders from
your component catalog), built-in dark mode, and sandboxed UI generation
(generated components render inside a sandbox instead of being spliced
into the host tree).
([#​3588](https://redirect.github.com/CopilotKit/CopilotKit/pull/3588))
- **Fetch-based runtime handler** — `@copilotkit/runtime` exposes a
fetch-based handler alongside the Node/Hono integrations, plus a
consistency pass on public function names. Targets Cloudflare Workers,
Vercel Edge, and other Web `fetch` runtimes.
([#​3550](https://redirect.github.com/CopilotKit/CopilotKit/pull/3550))
- **`BuiltInAgent` factory mode** — the built-in agent now supports a
factory construction path, so you can pass your own LLM-producing
factory and decouple the agent from the providers baked in today. Landed
in 1.55.2.
([#​3572](https://redirect.github.com/CopilotKit/CopilotKit/pull/3572))
- **Auto-detected runtime transport** — `@copilotkit/core` and
`@copilotkit/react-core` now detect REST vs. single-endpoint transport
from the runtime and adapt automatically.
([#​3601](https://redirect.github.com/CopilotKit/CopilotKit/pull/3601))
- **Vertex AI provider** — first-class provider on the runtime.
- **State streaming LangGraph middleware re-exported** — re-exported
directly from `@copilotkit/runtime` so callers no longer have to reach
into `@ag-ui/*` to wire it up.
([#​3473](https://redirect.github.com/CopilotKit/CopilotKit/pull/3473))
- **Custom `mcpClients` configuration** — pass your own MCP client
configuration to the runtime to control how tool providers connect and
reuse.
([#​3493](https://redirect.github.com/CopilotKit/CopilotKit/pull/3493))
#### Runtime fixes (`@copilotkit/runtime`)
- **Reasoning lifecycle hardening** — keeps the AG-UI reasoning event
stream well-formed regardless of SDK behavior: skip empty reasoning
deltas (which violate the `@ag-ui/core` schema), auto-close reasoning
when the SDK omits `reasoning-end` (covers consecutive-start, phase
changes, aborts, errors, and fallback paths), make `reasoning-end`
idempotent, regenerate `reasoningMessageId` between consecutive
reasoning blocks, and close reasoning in the outer catch block.
([#​3526](https://redirect.github.com/CopilotKit/CopilotKit/pull/3526))
- **Race condition dropping agent runs** — `RunHandler.runAgent()` had a
race that could drop runs invoked in quick succession. Closed.
([#​3514](https://redirect.github.com/CopilotKit/CopilotKit/pull/3514))
- **Empty tool arguments no longer crash** — tool calls with empty,
`null`, or `undefined` argument strings were throwing a JSON parse error
instead of being treated as the logically empty object they represent.
The runtime now normalizes them to `{}`.
([#​3439](https://redirect.github.com/CopilotKit/CopilotKit/pull/3439))
- **Open-generative-ui middleware import fix** — corrects an incorrect
import in the open-generative-ui middleware that surfaced after the
consolidation. Shipped in 1.55.1.
([#​3680](https://redirect.github.com/CopilotKit/CopilotKit/pull/3680))
#### React fixes (`@copilotkit/react-core`, `@copilotkit/react-ui`)
- **`messageView` and `labels` props stabilized** — `CopilotChat` was
re-rendering the entire message list on every keystroke because prop
identity was shifting. Replaced with `useShallowStableRef` to keep
references stable.
([#​3646](https://redirect.github.com/CopilotKit/CopilotKit/pull/3646))
- **Multiple `CopilotChat` instances no longer share state across
`threadId`s** — two chats mounted at different threads were sharing
message state. Per-thread agent instances are now isolated.
([#​3525](https://redirect.github.com/CopilotKit/CopilotKit/pull/3525))
- **Markdown components ref stabilized** — the Markdown component ref
was changing every render, cascading into unnecessary work during
streaming. Stabilized.
([#​3535](https://redirect.github.com/CopilotKit/CopilotKit/pull/3535))
- **Assistant text preserved across multi-tool turns** — when an
assistant turn emitted text plus multiple tool calls, the text portion
could get dropped. Preserved correctly now (CPK-7154).
([#​3622](https://redirect.github.com/CopilotKit/CopilotKit/pull/3622))
- **Chat layout regressions from 1.55.0 fixed** — the chat input is
pinned to the bottom of the window again, and mounting `CopilotSidebar`
no longer adds empty space below the page content.
([#​3759](https://redirect.github.com/CopilotKit/CopilotKit/pull/3759))
- **React keys on `CopilotMessages` children** — suppresses the "unique
key prop" warning React was emitting.
- **`defaultOpen={false}` respected in `CopilotSidebar` and
`CopilotPopup`** — the prop was being ignored on initial mount.
#### Upgrading
- The `@copilotkitnext/*` scope is removed in this release. The
deprecation notice shipped in v1.54.0.
- For v2 imports, switch from `@copilotkitnext/react` to the
`@copilotkit/react-core/v2` subpath:
```diff
- import { CopilotChat } from "@​copilotkitnext/react";
+ import { CopilotChat } from "@​copilotkit/react-core/v2";
```
- Other `@copilotkitnext/*` packages map one-to-one to their
`@copilotkit/*` equivalents (e.g. `@copilotkitnext/angular` →
`@copilotkit/angular`).
- v1 APIs are unchanged. If you were importing v1 hooks from
`@copilotkit/react-core`, nothing changes.
#### Packages republished at `1.55.3`
`@copilotkit/runtime`, `@copilotkit/react-core`, `@copilotkit/react-ui`,
`@copilotkit/core`, `@copilotkit/shared`,
`@copilotkit/runtime-client-gql`, `@copilotkit/sdk-js`,
`@copilotkit/voice`, `@copilotkit/web-inspector`,
`@copilotkit/a2ui-renderer`, `@copilotkit/react-textarea`,
`@copilotkit/sqlite-runner`, and `@copilotkit/angular`.
###
[`v1.55.2`](https://redirect.github.com/CopilotKit/CopilotKit/blob/HEAD/packages/a2ui-renderer/CHANGELOG.md#1552)
##### Patch Changes
-
[`62c6042`](https://redirect.github.com/CopilotKit/CopilotKit/commit/62c6042):
Bumping the a2ui-middleware underneath the a2ui renderer
###
[`v1.55.1`](https://redirect.github.com/CopilotKit/CopilotKit/blob/HEAD/packages/a2ui-renderer/CHANGELOG.md#1551)
###
[`v1.55.0`](https://redirect.github.com/CopilotKit/CopilotKit/blob/HEAD/packages/a2ui-renderer/CHANGELOG.md#1550)
##### Minor Changes
-
[`1ceb963`](https://redirect.github.com/CopilotKit/CopilotKit/commit/1ceb963):
refactor: consolidate V1/V2 packages into flat @​copilotkit/\*
structure
-
[`434ccd8`](https://redirect.github.com/CopilotKit/CopilotKit/commit/434ccd8):
A2UI v0.9 + Open Generative UI: BYOC catalogs, dark mode, sandboxed UI
generation
##### Patch Changes
-
[`52a9322`](https://redirect.github.com/CopilotKit/CopilotKit/commit/52a9322):
Fixing license warnings, barrel export and typing
###
[`v1.54.1`](https://redirect.github.com/CopilotKit/CopilotKit/blob/HEAD/packages/a2ui-renderer/CHANGELOG.md#1541-next6)
###
[`v1.54.0`](https://redirect.github.com/CopilotKit/CopilotKit/blob/HEAD/packages/a2ui-renderer/CHANGELOG.md#1540)
[Compare
Source](https://redirect.github.com/CopilotKit/CopilotKit/compare/v1.53.0...v1.54.0)
##### Patch Changes
-
[`6e0cddf`](https://redirect.github.com/CopilotKit/CopilotKit/commit/6e0cddf):
feat: move a2ui message renderer to v2s react package
-
[`7916df6`](https://redirect.github.com/CopilotKit/CopilotKit/commit/7916df6):
feat: set default a2ui theme to fit cpk main theme
###
[`v1.53.0`](https://redirect.github.com/CopilotKit/CopilotKit/blob/HEAD/packages/a2ui-renderer/CHANGELOG.md#1530)
[Compare
Source](https://redirect.github.com/CopilotKit/CopilotKit/compare/v1.52.1...v1.53.0)
##### Patch Changes
- Updated dependencies
\[[`1510f64`](https://redirect.github.com/CopilotKit/CopilotKit/commit/1510f64)]
- Updated dependencies
\[[`f1eaa4c`](https://redirect.github.com/CopilotKit/CopilotKit/commit/f1eaa4c)]
- Updated dependencies
\[[`ac31331`](https://redirect.github.com/CopilotKit/CopilotKit/commit/ac31331)]
-
[@​copilotkit/react-core](https://redirect.github.com/copilotkit/react-core)@​1.53.0
###
[`v1.52.1`](https://redirect.github.com/CopilotKit/CopilotKit/blob/HEAD/packages/a2ui-renderer/CHANGELOG.md#1521)
[Compare
Source](https://redirect.github.com/CopilotKit/CopilotKit/compare/v1.52.0...v1.52.1)
##### Patch Changes
- Updated dependencies
\[[`b555ac4`](https://redirect.github.com/CopilotKit/CopilotKit/commit/b555ac4)]
-
[@​copilotkit/react-core](https://redirect.github.com/copilotkit/react-core)@​1.52.1
###
[`v1.52.0`](https://redirect.github.com/CopilotKit/CopilotKit/blob/HEAD/packages/a2ui-renderer/CHANGELOG.md#1520)
[Compare
Source](https://redirect.github.com/CopilotKit/CopilotKit/compare/v1.51.4...v1.52.0)
##### Patch Changes
-
[`80418e3`](https://redirect.github.com/CopilotKit/CopilotKit/commit/80418e3):
Fix a2ui-renderer to use workspace:\* for
[@​copilotkit/react-core](https://redirect.github.com/copilotkit/react-core)
peer dependency, preventing lockfile drift on release
- Updated dependencies
\[[`6dd6c84`](https://redirect.github.com/CopilotKit/CopilotKit/commit/6dd6c84)]
- Updated dependencies
\[[`d77f347`](https://redirect.github.com/CopilotKit/CopilotKit/commit/d77f347)]
- Updated dependencies
\[[`2007f8b`](https://redirect.github.com/CopilotKit/CopilotKit/commit/2007f8b)]
- Updated dependencies
\[[`ef0f539`](https://redirect.github.com/CopilotKit/CopilotKit/commit/ef0f539)]
- Updated dependencies
\[[`412965a`](https://redirect.github.com/CopilotKit/CopilotKit/commit/412965a)]
- Updated dependencies
\[[`5f941db`](https://redirect.github.com/CopilotKit/CopilotKit/commit/5f941db)]
-
[@​copilotkit/react-core](https://redirect.github.com/copilotkit/react-core)@​1.52.0
###
[`v1.51.4`](https://redirect.github.com/CopilotKit/CopilotKit/blob/HEAD/packages/a2ui-renderer/CHANGELOG.md#1514)
[Compare
Source](https://redirect.github.com/CopilotKit/CopilotKit/compare/v1.51.3...v1.51.4)
##### Patch Changes
-
[`ac64163`](https://redirect.github.com/CopilotKit/CopilotKit/commit/ac64163):
feat(a2ui-renderer): replace Lit wrapper with React renderer
- Updated dependencies
\[[`6b9c60e`](https://redirect.github.com/CopilotKit/CopilotKit/commit/6b9c60e)]
- Updated dependencies
\[[`12ee574`](https://redirect.github.com/CopilotKit/CopilotKit/commit/12ee574)]
- Updated dependencies
\[[`9bc868d`](https://redirect.github.com/CopilotKit/CopilotKit/commit/9bc868d)]
- Updated dependencies
\[[`c998f30`](https://redirect.github.com/CopilotKit/CopilotKit/commit/c998f30)]
- Updated dependencies
\[[`6b7d8ef`](https://redirect.github.com/CopilotKit/CopilotKit/commit/6b7d8ef)]
-
[@​copilotkit/react-core](https://redirect.github.com/copilotkit/react-core)@​1.51.4
###
[`v1.51.3`](https://redirect.github.com/CopilotKit/CopilotKit/blob/HEAD/packages/a2ui-renderer/CHANGELOG.md#1513)
[Compare
Source](https://redirect.github.com/CopilotKit/CopilotKit/compare/v1.51.2...v1.51.3)
##### Patch Changes
-
[`d36fc1e`](https://redirect.github.com/CopilotKit/CopilotKit/commit/d36fc1e):
Add UMD export
-
[`ffb46f4`](https://redirect.github.com/CopilotKit/CopilotKit/commit/ffb46f4):
fix(a2ui-renderer): ensure the component updates when A2UI operations
change
- Updated dependencies
\[[`d655e75`](https://redirect.github.com/CopilotKit/CopilotKit/commit/d655e75)]
- Updated dependencies
\[[`d36fc1e`](https://redirect.github.com/CopilotKit/CopilotKit/commit/d36fc1e)]
- Updated dependencies
\[[`e89fe98`](https://redirect.github.com/CopilotKit/CopilotKit/commit/e89fe98)]
- Updated dependencies
\[[`3f00a01`](https://redirect.github.com/CopilotKit/CopilotKit/commit/3f00a01)]
-
[@​copilotkit/react-core](https://redirect.github.com/copilotkit/react-core)@​1.51.3
###
[`v1.51.2`](https://redirect.github.com/CopilotKit/CopilotKit/blob/HEAD/packages/a2ui-renderer/CHANGELOG.md#1512)
[Compare
Source](https://redirect.github.com/CopilotKit/CopilotKit/compare/v1.51.1...v1.51.2)
##### Patch Changes
-
[`e59d23f`](https://redirect.github.com/CopilotKit/CopilotKit/commit/e59d23f):
Use deps instead of peerdeps
-
[`e59d23f`](https://redirect.github.com/CopilotKit/CopilotKit/commit/e59d23f):
Move in-repo deps from peerdeps to actual deps
- Updated dependencies
\[[`e59d23f`](https://redirect.github.com/CopilotKit/CopilotKit/commit/e59d23f)]
- Updated dependencies
\[[`e59d23f`](https://redirect.github.com/CopilotKit/CopilotKit/commit/e59d23f)]
-
[@​copilotkit/react-core](https://redirect.github.com/copilotkit/react-core)@​1.51.2
###
[`v1.51.1`](https://redirect.github.com/CopilotKit/CopilotKit/blob/HEAD/packages/a2ui-renderer/CHANGELOG.md#1511)
##### Patch Changes
- Updated dependencies
\[[`329653b`](https://redirect.github.com/CopilotKit/CopilotKit/commit/329653b)]
-
[@​copilotkit/react-core](https://redirect.github.com/copilotkit/react-core)@​1.51.1
###
[`v1.51.0`](https://redirect.github.com/CopilotKit/CopilotKit/blob/HEAD/packages/a2ui-renderer/CHANGELOG.md#1510)
##### Patch Changes
-
[`2839a15`](https://redirect.github.com/CopilotKit/CopilotKit/commit/2839a15):
Update versioning strategy
- Updated dependencies
\[[`2839a15`](https://redirect.github.com/CopilotKit/CopilotKit/commit/2839a15)]
-
[@​copilotkit/react-core](https://redirect.github.com/copilotkit/react-core)@​1.51.0
###
[`v1.50.1`](https://redirect.github.com/CopilotKit/CopilotKit/blob/HEAD/packages/a2ui-renderer/CHANGELOG.md#1501)
##### Patch Changes
-
[`eac8b20`](https://redirect.github.com/CopilotKit/CopilotKit/commit/eac8b20):
- fix: use latest vnext
- Updated dependencies
\[[`bdc7a8f`](https://redirect.github.com/CopilotKit/CopilotKit/commit/bdc7a8f)]
- Updated dependencies
\[[`80dffec`](https://redirect.github.com/CopilotKit/CopilotKit/commit/80dffec)]
- Updated dependencies
\[[`cfa4185`](https://redirect.github.com/CopilotKit/CopilotKit/commit/cfa4185)]
- Updated dependencies
\[[`eac8b20`](https://redirect.github.com/CopilotKit/CopilotKit/commit/eac8b20)]
-
[@​copilotkit/react-core](https://redirect.github.com/copilotkit/react-core)@​1.50.1
</details>
<details>
<summary>CopilotKit/CopilotKit (@​copilotkit/react-core)</summary>
###
[`v1.57.1`](https://redirect.github.com/CopilotKit/CopilotKit/compare/v1.57.0...v1.57.1)
[Compare
Source](https://redirect.github.com/CopilotKit/CopilotKit/compare/v1.57.0...v1.57.1)
###
[`v1.57.0`](https://redirect.github.com/CopilotKit/CopilotKit/compare/v1.56.5...v1.57.0)
[Compare
Source](https://redirect.github.com/CopilotKit/CopilotKit/compare/v1.56.5...v1.57.0)
###
[`v1.56.5`](https://redirect.github.com/CopilotKit/CopilotKit/compare/v1.56.4...v1.56.5)
[Compare
Source](https://redirect.github.com/CopilotKit/CopilotKit/compare/v1.56.4...v1.56.5)
###
[`v1.56.4`](https://redirect.github.com/CopilotKit/CopilotKit/compare/v1.56.3...v1.56.4)
[Compare
Source](https://redirect.github.com/CopilotKit/CopilotKit/compare/v1.56.3...v1.56.4)
###
[`v1.56.3`](https://redirect.github.com/CopilotKit/CopilotKit/compare/v1.56.2...v1.56.3)
[Compare
Source](https://redirect.github.com/CopilotKit/CopilotKit/compare/v1.56.2...v1.56.3)
###
[`v1.56.2`](https://redirect.github.com/CopilotKit/CopilotKit/releases/tag/v1.56.2)
[Compare
Source](https://redirect.github.com/CopilotKit/CopilotKit/compare/v1.56.1...v1.56.2)
Release v1.56.2
###
[`v1.56.1`](https://redirect.github.com/CopilotKit/CopilotKit/releases/tag/v1.56.1)
[Compare
Source](https://redirect.github.com/CopilotKit/CopilotKit/compare/v1.56.0...v1.56.1)
Release v1.56.1
###
[`v1.56.0`](https://redirect.github.com/CopilotKit/CopilotKit/releases/tag/v1.56.0)
[Compare
Source](https://redirect.github.com/CopilotKit/CopilotKit/compare/v1.55.3...v1.56.0)
Release v1.56.0
###
[`v1.55.3`](https://redirect.github.com/CopilotKit/CopilotKit/releases/tag/v1.55.3)
Release v1.55.3
###
[`v1.54.0`](https://redirect.github.com/CopilotKit/CopilotKit/releases/tag/v1.54.0)
[Compare
Source](https://redirect.github.com/CopilotKit/CopilotKit/compare/v1.53.0...v1.54.0)
#####
[@​copilotkit/react-core](https://redirect.github.com/copilotkit/react-core)
##### 1.54.0
##### Minor Changes
-
[`fa0d1cd`](https://redirect.github.com/CopilotKit/CopilotKit/commit/fa0d1cd):
Add support for Standard Schema (instead of just Zod)
##### Patch Changes
-
[`c80498e`](https://redirect.github.com/CopilotKit/CopilotKit/commit/c80498e):
feat(core): add copilotkit.runTool() for programmatic tool execution
-
[`af11b1e`](https://redirect.github.com/CopilotKit/CopilotKit/commit/af11b1e):
Fixed hook render registrations lost under React Strict Mode.
- Updated dependencies
\[[`eb1e0bf`](https://redirect.github.com/CopilotKit/CopilotKit/commit/eb1e0bf)]
- Updated dependencies
\[[`3780c6a`](https://redirect.github.com/CopilotKit/CopilotKit/commit/3780c6a)]
- Updated dependencies
\[[`6e0cddf`](https://redirect.github.com/CopilotKit/CopilotKit/commit/6e0cddf)]
- Updated dependencies
\[[`fa0d1cd`](https://redirect.github.com/CopilotKit/CopilotKit/commit/fa0d1cd)]
- Updated dependencies
\[[`c80498e`](https://redirect.github.com/CopilotKit/CopilotKit/commit/c80498e)]
- Updated dependencies
\[[`d746e4f`](https://redirect.github.com/CopilotKit/CopilotKit/commit/d746e4f)]
- Updated dependencies
\[[`f1571ef`](https://redirect.github.com/CopilotKit/CopilotKit/commit/f1571ef)]
-
[@​copilotkitnext/core](https://redirect.github.com/copilotkitnext/core)@​1.54.0
-
[@​copilotkitnext/react](https://redirect.github.com/copilotkitnext/react)@​1.54.0
-
[@​copilotkit/runtime-client-gql](https://redirect.github.com/copilotkit/runtime-client-gql)@​1.54.0
-
[@​copilotkit/shared](https://redirect.github.com/copilotkit/shared)@​1.54.0
#####
[@​copilotkit/react-ui](https://redirect.github.com/copilotkit/react-ui)
##### 1.54.0
##### Patch Changes
- Updated dependencies
\[[`fa0d1cd`](https://redirect.github.com/CopilotKit/CopilotKit/commit/fa0d1cd)]
- Updated dependencies
\[[`c80498e`](https://redirect.github.com/CopilotKit/CopilotKit/commit/c80498e)]
- Updated dependencies
\[[`af11b1e`](https://redirect.github.com/CopilotKit/CopilotKit/commit/af11b1e)]
-
[@​copilotkit/react-core](https://redirect.github.com/copilotkit/react-core)@​1.54.0
-
[@​copilotkit/runtime-client-gql](https://redirect.github.com/copilotkit/runtime-client-gql)@​1.54.0
-
[@​copilotkit/shared](https://redirect.github.com/copilotkit/shared)@​1.54.0
#####
[@​copilotkit/sdk-js](https://redirect.github.com/copilotkit/sdk-js)
##### 1.54.0
##### Patch Changes
-
[@​copilotkit/shared](https://redirect.github.com/copilotkit/shared)@​1.54.0
#####
[@​copilotkit/react-textarea](https://redirect.github.com/copilotkit/react-textarea)
##### 1.54.0
##### Patch Changes
-
[`40c22a0`](https://redirect.github.com/CopilotKit/CopilotKit/commit/40c22a0):
fix: restore focus to textarea when hitting Escape in CMD+K popup
- Updated dependencies
\[[`fa0d1cd`](https://redirect.github.com/CopilotKit/CopilotKit/commit/fa0d1cd)]
- Updated dependencies
\[[`c80498e`](https://redirect.github.com/CopilotKit/CopilotKit/commit/c80498e)]
- Updated dependencies
\[[`af11b1e`](https://redirect.github.com/CopilotKit/CopilotKit/commit/af11b1e)]
-
[@​copilotkit/react-core](https://redirect.github.com/copilotkit/react-core)@​1.54.0
-
[@​copilotkit/runtime-client-gql](https://redirect.github.com/copilotkit/runtime-client-gql)@​1.54.0
-
[@​copilotkit/shared](https://redirect.github.com/copilotkit/shared)@​1.54.0
#####
[@​copilotkit/runtime](https://redirect.github.com/copilotkit/runtime)
##### 1.54.0
##### Minor Changes
-
[`fa0d1cd`](https://redirect.github.com/CopilotKit/CopilotKit/commit/fa0d1cd):
Add support for Standard Schema (instead of just Zod)
##### Patch Changes
- Updated dependencies
\[[`3780c6a`](https://redirect.github.com/CopilotKit/CopilotKit/commit/3780c6a)]
- Updated dependencies
\[[`fa0d1cd`](https://redirect.github.com/CopilotKit/CopilotKit/commit/fa0d1cd)]
-
[@​copilotkitnext/agent](https://redirect.github.com/copilotkitnext/agent)@​1.54.0
-
[@​copilotkitnext/runtime](https://redirect.github.com/copilotkitnext/runtime)@​1.54.0
-
[@​copilotkit/shared](https://redirect.github.com/copilotkit/shared)@​1.54.0
#####
[@​copilotkit/runtime-client-gql](https://redirect.github.com/copilotkit/runtime-client-gql)
##### 1.54.0
##### Patch Changes
-
[@​copilotkit/shared](https://redirect.github.com/copilotkit/shared)@​1.54.0
#####
[@​copilotkit/shared](https://redirect.github.com/copilotkit/shared)
##### 1.54.0
#####
[@​copilotkit/react-core](https://redirect.github.com/copilotkit/react-core)
##### 1.54.0
##### Minor Changes
-
[`fa0d1cd`](https://redirect.github.com/CopilotKit/CopilotKit/commit/fa0d1cd):
Add support for Standard Schema (instead of just Zod)
##### Patch Changes
-
[`c80498e`](https://redirect.github.com/CopilotKit/CopilotKit/commit/c80498e):
feat(core): add copilotkit.runTool() for programmatic tool execution
-
[`af11b1e`](https://redirect.github.com/CopilotKit/CopilotKit/commit/af11b1e):
Fixed hook render registrations lost under React Strict Mode.
- Updated dependencies
\[[`eb1e0bf`](https://redirect.github.com/CopilotKit/CopilotKit/commit/eb1e0bf)]
- Updated dependencies
\[[`3780c6a`](https://redirect.github.com/CopilotKit/CopilotKit/commit/3780c6a)]
- Updated dependencies
\[[`6e0cddf`](https://redirect.github.com/CopilotKit/CopilotKit/commit/6e0cddf)]
- Updated dependencies
\[[`fa0d1cd`](https://redirect.github.com/CopilotKit/CopilotKit/commit/fa0d1cd)]
- Updated dependencies
\[[`c80498e`](https://redirect.github.com/CopilotKit/CopilotKit/commit/c80498e)]
- Updated dependencies
\[[`d746e4f`](https://redirect.github.com/CopilotKit/CopilotKit/commit/d746e4f)]
- Updated dependencies
\[[`f1571ef`](https://redirect.github.com/CopilotKit/CopilotKit/commit/f1571ef)]
-
[@​copilotkitnext/core](https://redirect.github.com/copilotkitnext/core)@​1.54.0
-
[@​copilotkitnext/react](https://redirect.github.com/copilotkitnext/react)@​1.54.0
-
[@​copilotkit/runtime-client-gql](https://redirect.github.com/copilotkit/runtime-client-gql)@​1.54.0
-
[@​copilotkit/shared](https://redirect.github.com/copilotkit/shared)@​1.54.0
#####
[@​copilotkit/react-ui](https://redirect.github.com/copilotkit/react-ui)
##### 1.54.0
##### Patch Changes
- Updated dependencies
\[[`fa0d1cd`](https://redirect.github.com/CopilotKit/CopilotKit/commit/fa0d1cd)]
- Updated dependencies
\[[`c80498e`](https://redirect.github.com/CopilotKit/CopilotKit/commit/c80498e)]
- Updated dependencies
\[[`af11b1e`](https://redirect.github.com/CopilotKit/CopilotKit/commit/af11b1e)]
-
[@​copilotkit/react-core](https://redirect.github.com/copilotkit/react-core)@​1.54.0
-
[@​copilotkit/runtime-client-gql](https://redirect.github.com/copilotkit/runtime-client-gql)@​1.54.0
-
[@​copilotkit/shared](https://redirect.github.com/copilotkit/shared)@​1.54.0
#####
[@​copilotkit/sdk-js](https://redirect.github.com/copilotkit/sdk-js)
##### 1.54.0
##### Patch Changes
-
[@​copilotkit/shared](https://redirect.github.com/copilotkit/shared)@​1.54.0
#####
[@​copilotkit/react-textarea](https://redirect.github.com/copilotkit/react-textarea)
##### 1.54.0
##### Patch Changes
-
[`40c22a0`](https://redirect.github.com/CopilotKit/CopilotKit/commit/40c22a0):
fix: restore focus to textarea when hitting Escape in CMD+K popup
- Updated dependencies
\[[`fa0d1cd`](https://redirect.github.com/CopilotKit/CopilotKit/commit/fa0d1cd)]
- Updated dependencies
\[[`c80498e`](https://redirect.github.com/CopilotKit/CopilotKit/commit/c80498e)]
- Updated dependencies
\[[`af11b1e`](https://redirect.github.com/CopilotKit/CopilotKit/commit/af11b1e)]
-
[@​copilotkit/react-core](https://redirect.github.com/copilotkit/react-core)@​1.54.0
-
[@​copilotkit/runtime-client-gql](https://redirect.github.com/copilotkit/runtime-client-gql)@​1.54.0
-
[@​copilotkit/shared](https://redirect.github.com/copilotkit/shared)@​1.54.0
#####
[@​copilotkit/runtime](https://redirect.github.com/copilotkit/runtime)
##### 1.54.0
##### Minor Changes
-
[`fa0d1cd`](https://redirect.github.com/CopilotKit/CopilotKit/commit/fa0d1cd):
Add support for Standard Schema (instead of just Zod)
##### Patch Changes
- Updated dependencies
\[[`3780c6a`](https://redirect.github.com/CopilotKit/CopilotKit/commit/3780c6a)]
- Updated dependencies
\[[`fa0d1cd`](https://redirect.github.com/CopilotKit/CopilotKit/commit/fa0d1cd)]
-
[@​copilotkitnext/agent](https://redirect.github.com/copilotkitnext/agent)@​1.54.0
-
[@​copilotkitnext/runtime](https://redirect.github.com/copilotkitnext/runtime)@​1.54.0
-
[@​copilotkit/shared](https://redirect.github.com/copilotkit/shared)@​1.54.0
#####
[@​copilotkit/runtime-client-gql](https://redirect.github.com/copilotkit/runtime-client-gql)
##### 1.54.0
##### Patch Changes
-
[@​copilotkit/shared](https://redirect.github.com/copilotkit/shared)@​1.54.0
#####
[@​copilotkit/shared](https://redirect.github.com/copilotkit/shared)
##### 1.54.0
###
[`v1.53.0`](https://redirect.github.com/CopilotKit/CopilotKit/releases/tag/v1.53.0)
[Compare
Source](https://redirect.github.com/CopilotKit/CopilotKit/compare/v1.52.1...v1.53.0)
#####
[@​copilotkit/react-core](https://redirect.github.com/copilotkit/react-core)
##### 1.53.0
##### Patch Changes
-
[`1510f64`](https://redirect.github.com/CopilotKit/CopilotKit/commit/1510f64):
feat: enable mcp and a2ui middleware directly from copilotkit runtime
-
[`f1eaa4c`](https://redirect.github.com/CopilotKit/CopilotKit/commit/f1eaa4c):
Fixing a regression with setModalOpen
-
[`ac31331`](https://redirect.github.com/CopilotKit/CopilotKit/commit/ac31331):
- Prevents error propagating out of CPK when an agent runtime is defined
but not reachable
- Adds an onError callback to CopilotChat and CopilotKitProvider
- Updated dependencies
\[[`1510f64`](https://redirect.github.com/CopilotKit/CopilotKit/commit/1510f64)]
- Updated dependencies
\[[`bf1fc6f`](https://redirect.github.com/CopilotKit/CopilotKit/commit/bf1fc6f)]
-
[@​copilotkit/shared](https://redirect.github.com/copilotkit/shared)@​1.53.0
-
[@​copilotkitnext/core](https://redirect.github.com/copilotkitnext/core)@​1.53.0
-
[@​copilotkitnext/react](https://redirect.github.com/copilotkitnext/react)@​1.53.0
-
[@​copilotkit/runtime-client-gql](https://redirect.github.com/copilotkit/runtime-client-gql)@​1.53.0
#####
[@​copilotkit/react-ui](https://redirect.github.com/copilotkit/react-ui)
##### 1.53.0
##### Patch Changes
- Updated dependencies
\[[`1510f64`](https://redirect.github.com/CopilotKit/CopilotKit/commit/1510f64)]
- Updated dependencies
\[[`f1eaa4c`](https://redirect.github.com/CopilotKit/CopilotKit/commit/f1eaa4c)]
- Updated dependencies
\[[`bf1fc6f`](https://redirect.github.com/CopilotKit/CopilotKit/commit/bf1fc6f)]
- Updated dependencies
\[[`ac31331`](https://redirect.github.com/CopilotKit/CopilotKit/commit/ac31331)]
-
[@​copilotkit/react-core](https://redirect.github.com/copilotkit/react-core)@​1.53.0
-
[@​copilotkit/shared](https://redirect.github.com/copilotkit/shared)@​1.53.0
-
[@​copilotkit/runtime-client-gql](https://redirect.github.com/copilotkit/runtime-client-gql)@​1.53.0
#####
[@​copilotkit/sdk-js](https://redirect.github.com/copilotkit/sdk-js)
##### 1.53.0
##### Patch Changes
- Updated dependencies
\[[`1510f64`](https://redirect.github.com/CopilotKit/CopilotKit/commit/1510f64)]
- Updated dependencies
\[[`bf1fc6f`](https://redirect.github.com/CopilotKit/CopilotKit/commit/bf1fc6f)]
-
[@​copilotkit/shared](https://redirect.github.com/copilotkit/shared)@​1.53.0
#####
[@​copilotkit/react-textarea](https://redirect.github.com/copilotkit/react-textarea)
##### 1.53.0
##### Patch Changes
- Updated dependencies
\[[`1510f64`](https://redirect.github.com/CopilotKit/CopilotKit/commit/1510f64)]
- Updated dependencies
\[[`f1eaa4c`](https://redirect.github.com/CopilotKit/CopilotKit/commit/f1eaa4c)]
- Updated dependencies
\[[`bf1fc6f`](https://redirect.github.com/CopilotKit/CopilotKit/commit/bf1fc6f)]
- Updated dependencies
\[[`ac31331`](https://redirect.github.com/CopilotKit/CopilotKit/commit/ac31331)]
-
[@​copilotkit/react-core](https://redirect.github.com/copilotkit/react-core)@​1.53.0
-
[@​copilotkit/shared](https://redirect.github.com/copilotkit/shared)@​1.53.0
-
[@​copilotkit/runtime-client-gql](https://redirect.github.com/copilotkit/runtime-client-gql)@​1.53.0
#####
[@​copilotkit/runtime](https://redirect.github.com/copilotkit/runtime)
##### 1.53.0
##### Minor Changes
-
[`f822c05`](https://redirect.github.com/CopilotKit/CopilotKit/commit/f822c05):
Updating the path and devex for mcp apps
##### Patch Changes
-
[`d1f7aba`](https://redirect.github.com/CopilotKit/CopilotKit/commit/d1f7aba):
feat(runtime): expose messages in afterRequestMiddleware
-
[`1510f64`](https://redirect.github.com/CopilotKit/CopilotKit/commit/1510f64):
feat: enable mcp and a2ui middleware directly from copilotkit runtime
-
[`8e0f94f`](https://redirect.github.com/CopilotKit/CopilotKit/commit/8e0f94f):
Bump AI SDK from v5 to v6
-
[`501e8d7`](https://redirect.github.com/CopilotKit/CopilotKit/commit/501e8d7):
surpress sse warning in middleware callback
- Updated dependencies
\[[`1510f64`](https://redirect.github.com/CopilotKit/CopilotKit/commit/1510f64)]
- Updated dependencies
\[[`bf1fc6f`](https://redirect.github.com/CopilotKit/CopilotKit/commit/bf1fc6f)]
-
[@​copilotkit/shared](https://redirect.github.com/copilotkit/shared)@​1.53.0
-
[@​copilotkitnext/agent](https://redirect.github.com/copilotkitnext/agent)@​1.53.0
-
[@​copilotkitnext/runtime](https://redirect.github.com/copilotkitnext/runtime)@​1.53.0
#####
[@​copilotkit/runtime-client-gql](https://redirect.github.com/copilotkit/runtime-client-gql)
##### 1.53.0
##### Patch Changes
- Updated dependencies
\[[`1510f64`](https://redirect.github.com/CopilotKit/CopilotKit/commit/1510f64)]
- Updated dependencies
\[[`bf1fc6f`](https://redirect.github.com/CopilotKit/CopilotKit/commit/bf1fc6f)]
-
[@​copilotkit/shared](https://redirect.github.com/copilotkit/shared)@​1.53.0
#####
[@​copilotkit/shared](https://redirect.github.com/copilotkit/shared)
##### 1.53.0
##### Patch Changes
-
[`1510f64`](https://redirect.github.com/CopilotKit/CopilotKit/commit/1510f64):
feat: enable mcp and a2ui middleware directly from copilotkit runtime
-
[`bf1fc6f`](https://redirect.github.com/CopilotKit/CopilotKit/commit/bf1fc6f):
fix: `convertJsonSchemaToZodSchema` drops enum constraints
#####
[@​copilotkit/react-core](https://redirect.github.com/copilotkit/react-core)
##### 1.53.0
##### Patch Changes
-
[`1510f64`](https://redirect.github.com/CopilotKit/CopilotKit/commit/1510f64):
feat: enable mcp and a2ui middleware directly from copilotkit runtime
-
[`f1eaa4c`](https://redirect.github.com/CopilotKit/CopilotKit/commit/f1eaa4c):
Fixing a regression with setModalOpen
-
[`ac31331`](https://redirect.github.com/CopilotKit/CopilotKit/commit/ac31331):
- Prevents error propagating out of CPK when an agent runtime is defined
but not reachable
- Adds an onError callback to CopilotChat and CopilotKitProvider
- Updated dependencies
\[[`1510f64`](https://redirect.github.com/CopilotKit/CopilotKit/commit/1510f64)]
- Updated dependencies
\[[`bf1fc6f`](https://redirect.github.com/CopilotKit/CopilotKit/commit/bf1fc6f)]
-
[@​copilotkit/shared](https://redirect.github.com/copilotkit/shared)@​1.53.0
-
[@​copilotkitnext/core](https://redirect.github.com/copilotkitnext/core)@​1.53.0
-
[@​copilotkitnext/react](https://redirect.github.com/copilotkitnext/react)@​1.53.0
-
[@​copilotkit/runtime-client-gql](https://redirect.github.com/copilotkit/runtime-client-gql)@​1.53.0
#####
[@​copilotkit/react-ui](https://redirect.github.com/copilotkit/react-ui)
##### 1.53.0
##### Patch Changes
- Updated dependencies
\[[`1510f64`](https://redirect.github.com/CopilotKit/CopilotKit/commit/1510f64)]
- Updated dependencies
\[[`f1eaa4c`](https://redirect.github.com/CopilotKit/CopilotKit/commit/f1eaa4c)]
- Updated dependencies
\[[`bf1fc6f`](https://redirect.github.com/CopilotKit/CopilotKit/commit/bf1fc6f)]
- Updated dependencies
\[[`ac31331`](https://redirect.github.com/CopilotKit/CopilotKit/commit/ac31331)]
-
[@​copilotkit/react-core](https://redirect.github.com/copilotkit/react-core)@​1.53.0
-
[@​copilotkit/shared](https://redirect.github.com/copilotkit/shared)@​1.53.0
-
[@​copilotkit/runtime-client-gql](https://redirect.github.com/copilotkit/runtime-client-gql)@​1.53.0
#####
[@​copilotkit/sdk-js](https://redirect.github.com/copilotkit/sdk-js)
##### 1.53.0
##### Patch Changes
- Updated dependencies
\[[`1510f64`](https://redirect.github.com/CopilotKit/CopilotKit/commit/1510f64)]
- Updated dependencies
\[[`bf1fc6f`](https://redirect.github.com/CopilotKit/CopilotKit/commit/bf1fc6f)]
-
[@​copilotkit/shared](https://redirect.github.com/copilotkit/shared)@​1.53.0
#####
[@​copilotkit/react-textarea](https://redirect.github.com/copilotkit/react-textarea)
##### 1.53.0
##### Patch Changes
- Updated dependencies
\[[`1510f64`](https://redirect.github.com/CopilotKit/CopilotKit/commit/1510f64)]
- Updated dependencies
\[[`f1eaa4c`](https://redirect.github.com/CopilotKit/CopilotKit/commit/f1eaa4c)]
- Updated dependencies
\[[`bf1fc6f`](https://redirect.github.com/CopilotKit/CopilotKit/commit/bf1fc6f)]
- Updated dependencies
\[[`ac31331`](https://redirect.github.com/CopilotKit/CopilotKit/commit/ac31331)]
-
[@​copilotkit/react-core](https://redirect.github.com/copilotkit/react-core)@​1.53.0
-
[@​copilotkit/shared](https://redirect.github.com/copilotkit/shared)@​1.53.0
-
[@​copilotkit/runtime-client-gql](https://redirect.github.com/copilotkit/runtime-client-gql)@​1.53.0
#####
[@​copilotkit/runtime](https://redirect.github.com/copilotkit/runtime)
##### 1.53.0
##### Minor Changes
-
[`f822c05`](https://redirect.github.com/CopilotKit/CopilotKit/commit/f822c05):
Updating the path and devex for mcp apps
##### Patch Changes
-
[`d1f7aba`](https://redirect.github.com/CopilotKit/CopilotKit/commit/d1f7aba):
feat(runtime): expose messages in afterRequestMiddleware
-
[`1510f64`](https://redirect.github.com/CopilotKit/CopilotKit/commit/1510f64):
feat: enable mcp and a2ui middleware directly from copilotkit runtime
-
[`8e0f94f`](https://redirect.github.com/CopilotKit/CopilotKit/commit/8e0f94f):
Bump AI SDK from v5 to v6
-
[`501e8d7`](https://redirect.github.com/CopilotKit/CopilotKit/commit/501e8d7):
surpress sse warning in middleware callback
- Updated dependencies
\[[`1510f64`](https://redirect.github.com/CopilotKit/CopilotKit/commit/1510f64)]
- Updated dependencies
\[[`bf1fc6f`](https://redirect.github.com/CopilotKit/CopilotKit/commit/bf1fc6f)]
-
[@​copilotkit/shared](https://redirect.github.com/copilotkit/shared)@​1.53.0
-
[@​copilotkitnext/agent](https://redirect.github.com/copilotkitnext/agent)@​1.53.0
-
[@​copilotkitnext/runtime](https://redirect.github.com/copilotkitnext/runtime)@​1.53.0
#####
[@​copilotkit/runtime-client-gql](https://redirect.github.com/copilotkit/runtime-client-gql)
##### 1.53.0
##### Patch Changes
- Updated dependencies
\[[`1510f64`](https://redirect.github.com/CopilotKit/CopilotKit/commit/1510f64)]
- Updated dependencies
\[[`bf1fc6f`](https://redirect.github.com/CopilotKit/CopilotKit/commit/bf1fc6f)]
-
[@​copilotkit/shared](https://redirect.github.com/copilotkit/shared)@​1.53.0
#####
[@​copilotkit/shared](https://redirect.github.com/copilotkit/shared)
##### 1.53.0
##### Patch Changes
-
[`1510f64`](https://redirect.github.com/CopilotKit/CopilotKit/commit/1510f64):
feat: enable mcp and a2ui middleware directly from copilotkit runtime
-
[`bf1fc6f`](https://redirect.github.com/CopilotKit/CopilotKit/commit/bf1fc6f):
fix: `convertJsonSchemaToZodSchema` drops enum constraints
###
[`v1.52.1`](https://redirect.github.com/CopilotKit/CopilotKit/releases/tag/v1.52.1)
[Compare
Source](https://redirect.github.com/CopilotKit/CopilotKit/compare/v1.52.0...v1.52.1)
#####
[@​copilotkit/react-core](https://redirect.github.com/copilotkit/react-core)
##### 1.52.1
##### Patch Changes
-
[`b555ac4`](https://redirect.github.com/CopilotKit/CopilotKit/commit/b555ac4):
fix(react-core): allow overriding useSingleEndpoint in CopilotKit
provider
The V1 `<CopilotKit>` provider previously hardcoded
`useSingleEndpoint={true}` when wrapping the V2 provider, preventing
users from opting into REST transport mode. The prop is now passed
through from user config, defaulting to `true` to preserve backward
compatibility.
- Updated dependencies
\[[`bbdf67d`](https://redirect.github.com/CopilotKit/CopilotKit/commit/bbdf67d)]
-
[@​copilotkitnext/react](https://redirect.github.com/copilotkitnext/react)@​1.52.1
-
[@​copilotkit/runtime-client-gql](https://redirect.github.com/copilotkit/runtime-client-gql)@​1.52.1
-
[@​copilotkit/shared](https://redirect.github.com/copilotkit/shared)@​1.52.1
-
[@​copilotkitnext/core](https://redirect.github.com/copilotkitnext/core)@​1.52.1
#####
[@​copilotkit/react-ui](https://redirect.github.com/copilotkit/react-ui)
##### 1.52.1
##### Patch Changes
-
[`bbdf67d`](https://redirect.github.com/CopilotKit/CopilotKit/commit/bbdf67d):
fix(css): address imcompat with CJS
- Updated dependencies
\[[`b555ac4`](https://redirect.github.com/CopilotKit/CopilotKit/commit/b555ac4)]
- [@​co
> ✂ **Note**
>
> PR body was truncated to here.
</details>
---
### Configuration
📅 **Schedule**: (UTC)
- Branch creation
- At any time (no schedule defined)
- Automerge
- At any time (no schedule defined)
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config
help](https://redirect.github.com/renovatebot/renovate/discussions) if
that's undesired.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box
---
This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/CopilotKit/CopilotKit).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xNTkuMiIsInVwZGF0ZWRJblZlciI6IjQzLjE1OS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJleGFtcGxlcyJdfQ==-->
…rs via addEventListener
Calculator pill rendered the layout but no button responded. Root cause:
Gemini's default emit for the calculator widget used `<form>` /
`<button type="submit">` for clicks — the iframe runs with
`sandbox="allow-scripts"` only, so the browser silently blocks form
submission before any handler fires. The buttons drew, nothing happened.
Expand the `generateSandboxedUi` guidance in `_INSTRUCTION` with the same
sandbox-iframe contract `_OPEN_GEN_UI_ADVANCED_INSTRUCTION` already
spells out:
- Forms and submit-type buttons are blocked silently.
- Use `<button type="button" data-key="…">` plus a single delegated
`document.addEventListener('click', e => …)` that reads
`e.target.dataset.key` / `data-value`. Keyboard input via a `keydown`
listener that checks `e.key === 'Enter'`.
- All handler code in a `<script>` tag inside `html`.
Verified: the calculator widget Gemini now produces wires every key /
metric-shortcut button with delegated click handlers; clicks update the
calculator display end-to-end. Matches the LangGraph-Python output.
(The instruction nudge for generateSandboxedUi itself shipped in #4837.
This change is purely about teaching Gemini the sandbox restrictions so
the generated HTML stays interactive.)
…rs via addEventListener (#4841) ## Summary The Beautiful Chat **Calculator App (Open Generative UI)** pill rendered the layout but no button responded to clicks. **Root cause:** Gemini's default emit for the calculator widget wrapped buttons in `<form>` with `type="submit"` for click handling. The iframe runs with `sandbox="allow-scripts"` ONLY, so the browser silently blocks form submission before any onsubmit / click handler fires. The buttons drew, nothing happened on click — exactly the "white empty / dead UI" the user reported in prod. **Fix:** Expand the `generateSandboxedUi` guidance in `beautiful_chat_agent.py`'s `_INSTRUCTION` with the same sandbox-iframe contract `_OPEN_GEN_UI_ADVANCED_INSTRUCTION` already spells out: - Forms and submit-type buttons are blocked silently — never use them. - Use `<button type="button" data-key="…">` plus a single delegated `document.addEventListener('click', e => …)` that reads `e.target.dataset.key` / `data-value`. Keyboard input via a `keydown` listener checking `e.key === 'Enter'`. - All handler code in a `<script>` tag inside `html`. - For calculators specifically: each digit/operator button carries `data-key`, each metric-shortcut button carries `data-value`, one delegated click handler updates the display. ## Test plan - [x] Local browser: Calculator pill in Beautiful Chat now produces a widget whose number / operator / metric-shortcut buttons all respond to clicks; matches the LangGraph-Python output. - [ ] Manual Railway prod check after merge. ## Notes - The instruction nudge for `generateSandboxedUi` itself shipped in #4837. This PR is purely about teaching Gemini the sandbox-iframe restrictions so the generated HTML stays interactive.
Type contracts for the data-driven framework intro pages. Optional fields cover observed variance across the 13 in-scope integrations: a2a omits bannerVideo, crewai-flows uses architectureVideo instead of architectureImage, llamaindex's only feature lacks a videoUrl.
Ports the FrameworkOverview marketing layout from legacy docs/ with
data-driven icon resolution via a customIcons registry. The original
shadcn Button (CVA / clsx / tailwind-merge / @radix-ui/react-slot) is
deliberately not ported — its only consumer here is six marketing CTAs
and a demo toggle, all of which use plain <button> + inlined Tailwind
matching the existing copy-button.tsx convention. This keeps shell-docs
out of the workspace lockfile and avoids the latent gray-matter /
js-yaml-v4 override that fires under workspace pnpm but not under
prod's npm install in the Dockerfile.
The component accepts a currentFramework prop and rewrites any
embedded slug in the data record's links (guideLink, featuresLink,
per-feature documentationLink / demoLink, tutorialLink) to that slug
— so when langgraph-typescript or langgraph-fastapi alias the
langgraph-python record, every CTA still routes within the user's
selected variant. Covers internal paths ("/<slug>/...") and
feature-viewer URLs ("feature-viewer.copilotkit.ai/<slug>/...").
Adds A2AIcon and AgentSpecMarkIcon as new icon components; extends the
existing framework-icons module with a DeepAgentsIcon and a customIcons
barrel typed by IconKey.
One TS record per integration (canonical slug): name, icon key, hero copy, banner video, three supported-feature cards, architecture asset, live-demo iframes, optional structured CTA. The aggregator src/data/frameworks/index.ts exports the slug-keyed map consumed by the framework-root route. Three frameworks (ms-agent-dotnet, ag2, agent-spec) have post-features content that doesn't fit the structured cta field (Resources links, a Callout, an Agent Spec how-to body). Each ships a sibling after-features.mdx loaded into the FrameworkOverview's afterFeatures slot when hasAfterFeaturesMdx is true. LangGraph variants (langgraph-typescript, langgraph-fastapi) and ms-agent-python alias the same record as their primary variant — their content folders are shared and the legacy docs never differentiated variants at the intro-page level. The component's link rewriter keeps every CTA on the variant's own URL. built-in-agent is excluded — it's the default framework and the docs root '/' IS its overview page.
Replaces the hardcoded FrameworkLandingPage splash with a three-tier
resolution at /<framework>:
1. frameworkOverviews[slug] exists → render <FrameworkOverview> with
the data record (plus an optional after-features.mdx slot for the
three frameworks that need one).
2. integrations/<folder>/index.mdx exists → render through loadDoc /
DocsPageView.
3. otherwise notFound().
Recognizes docs-only integrations (a2a, agent-spec, deepagents) that
have docs content but no showcase/integrations/<slug>/ demo package —
previously the registry check sent them to UnscopedDocsPage and they
404'd at /<slug>.
Adds an "index" slug rewrite in buildNavTree and
buildFrameworkOverridesNav so meta.json "index" entries resolve to
the bare /<framework> URL rather than /<framework>/index.
Hoists the framework's Introduction (slug "") to position 0 of the
merged sidebar so users see it above the global root nav rather than
buried inside the per-framework section. RenderNav and sidebar-link
pass an empty slugPath through for active-state matching at the root.
Adds "index" as the first page in 13 integration meta.json files (all except built-in-agent) so the framework intro page appears at the top of the left sidebar. Pairs with buildNavTree's "index"-slug rewrite which resolves "index" to the bare /<framework> URL, and with mergeFrameworkNav's hoist which places this entry above the global root nav. For the 12 integrations whose Getting Started section had only the intro under it, the now-empty section header is dropped. For deepagents (Getting Started also has quickstart) the section header stays after Introduction. built-in-agent and deepagents previously had no meta.json (sidebar fell through to filesystem order); a new meta.json is added for each. built-in-agent's omits "index" because /built-in-agent redirects to the docs root rather than rendering a separate intro.
… root Two related next.config tweaks for the framework intro pages: 1. images.remotePatterns allows cdn.copilotkit.ai so next/image stops throwing 'hostname not configured' for banner videos, architecture diagrams, and the CopilotKit color logo embedded in every FrameworkOverview data record. 2. 308 redirect /built-in-agent → / since built-in-agent is the default framework and the docs root is its overview. Without the redirect, /built-in-agent rendered a separate intro and the sidebar carried a redundant Introduction link.
Two existing MDX pages reference lucide-react's <Blocks /> inside
<Card icon={...}> attributes — built-in-agent/index.mdx and the shared
snippet premium/headless-ui.mdx — but the docs MDX component registry
didn't stub it alongside Sparkles, Wrench, Server, Plug, ArrowLeftRight,
Cpu, BookA, and Cog. Both pages rendered fine pre-cutover (the BIA
intro was hidden behind a hardcoded splash and the shared snippet was
unused), so the gap is only visible now that the framework-root route
exercises both surfaces.
…ello' / 'paris' fixtures
The subagents demo was randomly returning the showcase-assistant
boilerplate "Hi there! I'm your showcase assistant. I can help with
weather, charts, meetings…" for sub-agent (research / writing /
critique) calls instead of the expected sub-task output. Each failure
ended the chain with a "[sub-agent error] writing_agent returned an
unexpected boilerplate response" message and the user got no blog post.
Root cause: feature-parity.json had a `match: { userMessage: "hi" }`
catch-all that aimock applied as a case-sensitive substring match
against the last user message. The writer / critique sub-agent prompts
contain ordinary English ("this", "history", "achieving") which all
contain the literal substring "hi" — so the showcase-assistant
boilerplate hijacked the sub-LLM call mid-chain, the supervisor saw
an off-topic response, and the chain bailed.
Same shape as the bare 'plan' / 'dashboard' / 'report' catch-alls
removed in earlier PRs — these are tiny, 2-4 character substring
matchers that look harmless individually but capture far more prompts
than intended.
Scope each one to a full intent phrase that won't accidentally appear
inside unrelated text:
- 'hi' -> 'Hi, who are you' (was substring-matching 'this', 'history')
- 'hello' -> 'hello, what can you do' (also collapses the duplicate
capital-H entry; 'hello' alone substring-matched 'mellow', 'fellow')
- 'help' -> 'what can you help me with' (was matching 'helpful',
'helping')
- 'deal' -> 'add a new enterprise deal' (was matching 'dealing',
'idealized')
- 'city' -> 'what city do I live in' (was matching 'capacity',
'velocity', 'specificity')
- 'paris' -> 'flights to Paris' (was matching 'comparison',
'preparing')
Verified by inspecting the subagents flow that previously failed
twice running with the boilerplate response. With these tighter
anchors the sub-LLM calls fall through to real Gemini (via
aimock --provider-gemini, already configured both locally and on
Railway) and produce on-topic writing / critique output.
Remove pnpm run build (and pnpm run test) calls from publish-release.ts and prerelease.ts so that repository build code never executes with NPM_TOKEN in the environment. The CI build job (contents: read, no secrets) now handles all building and testing, uploading pre-built artifacts for the publish job to consume. For prerelease: extract version bumping into a new bump-prerelease.ts script that runs in the build job before the build step, ensuring the built artifacts contain the correct canary version numbers. Also fix prerelease build job to use persist-credentials: false, matching the publish-release build job pattern.
Add explicit permission-* inputs to actions/create-github-app-token to satisfy the zizmor github-app rule. Without these, the token inherits all installation permissions instead of only what's needed. showcase_eval.yml (post-result job): - permission-checks: write (checks.update) showcase_eval_check.yml (create-check job): - permission-checks: write (checks.create) - permission-issues: write (issues.listComments/createComment/updateComment) - permission-pull-requests: write (PR comment operations)
## Summary Fixes 5 zizmor `github-app` findings across `showcase_eval.yml` and `showcase_eval_check.yml`. Both workflows use `actions/create-github-app-token` without explicit `permission-*` inputs, causing the generated token to inherit **all** installation permissions instead of only what the downstream steps need. ## Changes **`showcase_eval.yml`** (post-result job) — token used for `checks.update()`: - Added `permission-checks: write` **`showcase_eval_check.yml`** (create-check job) — token used for `checks.create()`, `issues.listComments/createComment/updateComment`: - Added `permission-checks: write` - Added `permission-issues: write` - Added `permission-pull-requests: write` ## Test plan - [ ] `showcase_eval_check.yml` is currently gated by `if: false` so no runtime impact - [ ] `showcase_eval.yml` post-result job: trigger via `/eval` comment on a test PR and verify the Check Run updates correctly - [ ] Confirm zizmor no longer flags these files for `github-app`
Last 2 zizmor github-app findings — devops-bot tokens in capture-previews and docs-sync need scoped permissions. - **capture-previews**: token used for checkout + git push to main → `permission-contents: write` - **docs-sync**: token used for git push + PR create/list/merge → `permission-contents: write` + `permission-pull-requests: write`
Low severity. Cooldown configured but zizmor wants longer. Migrating to Renovate.
…s + backfill region markers (#4846) ## Summary Five live shell-docs pages ended with a hardcoded heading + `<IntegrationGrid>`. Because `<IntegrationGrid>` returns `null` on framework-scoped routes (`useFramework()` resolves a framework slug → component hides because the user already picked a backend), those pages truncated to a content-less heading on every `/{framework}/{page}` route — looked like a layout/scroll bug; actually missing content. This PR wires framework-aware `<InlineDemo>` + `<Snippet>` blocks above the picker on all five pages, following the `frontend-tools.mdx` reference shape. Demo cells already existed; some needed region marker backfill to broaden coverage. ## Affected pages | Page | Cell | New body shape | |---|---|---| | `shared-state.mdx` | `shared-state-read-write` + `shared-state-streaming` | 4 Snippets: `use-agent-read`, `use-agent-write`, `notes-card-render`, `state-streaming-middleware` + cross-links to existing sub-pages | | `generative-ui/interactive.mdx` | `gen-ui-interrupt` | InlineDemo + 2 Snippets: `frontend-useinterrupt-render`, `backend-interrupt-tool` | | `generative-ui/state-rendering.mdx` | `shared-state-streaming` | InlineDemo + 2 Snippets: `frontend-use-coagent-state`, `state-streaming-middleware` | | `generative-ui/display.mdx` | `gen-ui-tool-based` | InlineDemo + Snippet `bar-chart-renderer` + dropped redundant `## Choose your Integration` heading (picker renders its own) | | `generative-ui/your-components/display-only.mdx` | `gen-ui-tool-based` | Same as `display.mdx` | Each affected page also gets `<FeatureIntegrations feature="..." />` pills (framework-aware, always renders) above the picker. ## Region marker backfill `gen-ui-interrupt` had region markers in only 3 of 17 integrations. Backfilled to 17 frontends + 16 backends (one frontend-only demo has no coherent backend file). All markers follow PR #4829's "one contiguous region wraps imports + body" rule, with three documented exceptions on `langroid` / `strands` / `mastra` where the markers nest around existing inner regions in large shared `agent.py` files — restructuring those files just for docs benefit was disproportionate. Snippets in those three integrations render the tool/agent definition without imports (acceptable degradation; matches a small number of pre-existing snippet bodies). `shared-state-streaming` already had markers in the 4 integrations that support it. The other 14 are explicitly `not_supported_features: shared-state-streaming` in their manifests, so the `Snippet` component routes to the neutral `UnsupportedBox` placeholder via catalog status — not a yellow "Missing snippet" warning. Graceful degradation is already correct; no markers needed. ## Files changed - 5 MDX files in `showcase/shell-docs/src/content/docs/` - 27 demo cell files in `showcase/integrations/*/src/app/demos/gen-ui-interrupt/` (+ backend agent files) Three commits stacked: - `43d62e345` — wire `shared-state.mdx` - `4b432368e` — wire 4 generative-ui pages - `e70bd26b0` — backfill `gen-ui-interrupt` region markers across 14 integrations ## Test plan - [ ] `/google-adk/shared-state` (and every other `/{framework}/shared-state`) renders Snippet blocks instead of a dangling header - [ ] `/google-adk/generative-ui/interactive` renders demo + snippets - [ ] `/google-adk/generative-ui/state-rendering` renders demo + snippets - [ ] `/google-adk/generative-ui/display` and `/google-adk/generative-ui/your-components/display-only` render demo + snippet - [ ] Unscoped routes (e.g. `/shared-state`) still render the IntegrationGrid picker correctly; framework-aware content above the picker also displays - [ ] Bundle regenerates clean (`npx tsx showcase/scripts/bundle-demo-content.ts`) - [ ] No yellow "Missing snippet" warnings on framework-scoped routes for the wired Snippets (excepting the documented `not_supported_features` UnsupportedBox cases for shared-state-streaming) ## Out of scope - Consolidation of `display.mdx` / `tool-based.mdx` / `your-components/display-only.mdx` (near-duplicates on the same topic) and folding `interactive.mdx` into `/human-in-the-loop` are tracked in [PDX-170](https://linear.app/copilotkit/issue/PDX-170) for post-cutover. - Backfilling `shared-state-streaming` region markers on unsupported integrations is intentionally NOT done — the `UnsupportedBox` placeholder is the correct UX there. ## Hook bypass Pre-commit `test-and-check-packages` fails on a pre-existing `@copilotkit/web-inspector` telemetry test on main; some commits also bypassed `commitlint` because its binary isn't installed in fresh worktrees. All commits used `LEFTHOOK_EXCLUDE` for those specific hooks only; lint-fix, lockfile-sync, and check-binaries all ran and passed.
## Summary Restores per-framework introduction pages at `/<canonical-slug>` for the 13 third-party integrations. Pages render via a single `<FrameworkOverview>` component driven by per-framework TypeScript data records, with per-variant link rewriting and an MDX escape hatch for the three frameworks that need post-features content. PostHog shows these intros (under their legacy slugs on the previous docs surface) drew ~56K external visits over 90 days — 1.3–2× the traffic of their corresponding quickstarts in 13 of 14 cases, with ~8.3K organic-search landings. Shipping shell-docs without them would have left meaningful SEO and acquisition surface dark. ## What's included - Data-driven `<FrameworkOverview>` component ported from legacy docs/, with plain `<button>` + Tailwind CTAs (no shadcn / CVA / clsx / radix-slot dragged into shell-docs). - 13 per-framework data records under `src/data/frameworks/` (langgraph-python, google-adk, ms-agent-dotnet, a2a, strands, pydantic-ai, mastra, agno, ag2, agent-spec, crewai-crews, deepagents, llamaindex), aliased to cover variant slugs (langgraph-typescript, langgraph-fastapi, ms-agent-python). - Three `after-features.mdx` escape hatches (ms-agent-dotnet, ag2, agent-spec) for content that doesn't fit the structured CTA shape. - Three-tier resolution in `app/[framework]/[[...slug]]/page.tsx`: data record → MDX index → 404. Also recognizes docs-only integrations (a2a, agent-spec, deepagents) that have docs content but no demo package in `showcase/integrations/`. - `"index"` slug rewrite in `buildNavTree` + `buildFrameworkOverridesNav` so meta.json `"index"` entries resolve to `/<framework>` rather than `/<framework>/index`. - `mergeFrameworkNav` hoists the Introduction to position 0 of the sidebar, above the global root nav — not buried in the per-framework section. - Per-variant link rewriting inside `<FrameworkOverview>`: when langgraph-typescript renders the shared langgraph data record, Quickstart / Learn more / Live demo / feature-viewer URLs all route within `langgraph-typescript`, not the python primary. - `built-in-agent` is the default framework and the docs root `/` is its overview, so `/built-in-agent` 308s to `/` and no separate Introduction sidebar entry is rendered for it. - `next.config.ts` allows `cdn.copilotkit.ai` in `images.remotePatterns` for banner videos, architecture diagrams, and the CopilotKit logo. - `Blocks` lucide icon stub added to the MDX component registry — referenced by both built-in-agent's index.mdx and the shared `premium/headless-ui.mdx` snippet. ## Test plan - [ ] `/langgraph-python`, `/google-adk`, `/ms-agent-dotnet`, `/a2a`, `/strands`, `/pydantic-ai`, `/mastra`, `/agno`, `/ag2`, `/agent-spec`, `/crewai-crews`, `/deepagents`, `/llamaindex` render the FrameworkOverview with correct hero copy, video, supported features, architecture asset, live demos, and CTA. - [ ] `/langgraph-typescript`, `/langgraph-fastapi`, `/ms-agent-python` render the aliased intro and every CTA stays on the variant's slug (Quickstart → `/langgraph-typescript/quickstart`, not `/langgraph-python/quickstart`). - [ ] `/built-in-agent` returns 308 to `/`. - [ ] Legacy slug redirects still work: `/langgraph`, `/adk`, `/aws-strands`, `/microsoft-agent-framework`, `/crewai-flows` all 301 to their canonical slugs. - [ ] Sidebar on every framework page shows "Introduction" at position 0, above the global root nav sections. - [ ] `pnpm run build` in `showcase/shell-docs` succeeds.
## Summary - PR #4864 added LinkPreview to the deprecated `ComposedCell` but production uses `UnifiedCell` - This adds the same `LinkPreview` wrapping to `unified-cell.tsx` so hover previews work in production ## Test plan - [ ] 14 unified-cell tests pass with link-preview mock - [ ] Manual verification on production after deploy 🤖 Generated with [Claude Code](https://claude.com/claude-code)
## Summary - Add `permissions: contents: read` at the top level of prerelease.yml, publish-commit.yml, publish-release.yml, and showcase_docs-sync.yml - All four workflows already have job-level permissions blocks; the top-level block constrains the default token scope for any future jobs that might be added without explicit permissions ## Test plan - [ ] Verify prerelease workflow_dispatch still works - [ ] Verify publish-commit still posts snapshot comments (job-level `pull-requests: write` preserved) - [ ] Verify publish-release still reads content on PR merge - [ ] Verify showcase docs-sync still creates PRs (job-level `contents: write` + `pull-requests: write` preserved)
Upstream release notes contain @username references that trigger GitHub notifications when posted as PR comments. Strip mention-prefix @ from standalone mentions while preserving @scope/pkg, email@domain, and action@version patterns. Closes CopilotKit/aimock#216
…nts (#4872) ## Summary - Strip `@username` mentions from upstream release notes before posting as PR comments - Prevents notification spam to external open-source contributors - Preserves `@scope/pkg`, `email@domain`, and `action@version` patterns Closes CopilotKit/aimock#216 ## Test plan - [x] Regex tested against real spam comment from aimock PR #214 (44 mentions stripped, 0 collateral damage) - [x] YAML code refs (`checkout@v5`) preserved - [x] npm scopes (`@actions/cache`) preserved - [x] Email patterns preserved
Add `environment:` declarations to all publish and deploy jobs so that GitHub Environment protection rules (required reviewers, deployment branches, wait timers) can gate package publishing and deploys. - prerelease.yml publish → environment: npm - publish-commit.yml build → environment: npm - publish-release.yml publish → environment: npm - stable-release.yml create-release-pr → environment: npm - showcase_deploy.yml verify → environment: railway
## Summary - Add `environment:` declarations to all 5 publish/deploy jobs across CopilotKit workflows - This enables GitHub Environment protection rules (required reviewers, deployment branch policies, wait timers) to gate package publishing and Railway deploys ### Workflows updated | Workflow | Job | Environment | |----------|-----|-------------| | prerelease.yml | publish | npm | | publish-commit.yml | build | npm | | publish-release.yml | publish | npm | | stable-release.yml | create-release-pr | npm | | showcase_deploy.yml | verify | railway | ### Environments created - `npm` - for TypeScript package publishing - `railway` - for showcase deployment verification ### Next steps After merging, add required reviewers to each environment via repo Settings > Environments. ## Test plan - [ ] Verify workflow YAML is valid (no syntax errors) - [ ] Confirm environments exist in repo settings - [ ] Test a dry-run prerelease to verify environment gates work
git config --global persists user.name/email beyond the job into the runner environment. Changed to --local so credentials are scoped to the checkout directory only.
## Summary - Changed `git config --global` to `git config --local` for user.email and user.name in the publish job's "Configure git user" step - `--global` persists credentials beyond the job into the runner environment; `--local` scopes them to the checkout directory only ## Test plan - [ ] Verify next release publish still creates and pushes git tags correctly - [ ] Confirm no other steps in the workflow depend on global git config
Pinning to a specific version prevents unexpected breakage from new aimock releases and makes CI builds reproducible.
## Summary - Pin `@copilotkit/aimock` from `@latest` to `@1.24.1` in test_integration-docs.yml - Prevents unexpected breakage from new aimock releases and makes CI builds reproducible ## Test plan - Workflow-only change; the pinned version matches current latest (1.24.1)
… agentic-chat-reasoning demos The // @endregion[reasoning-block-render] comment was indented inside the Chat function body, causing the rendered docs snippet to omit the final closing brace — a visible syntax error. Moves the marker to after the } in all 16 agentic-chat-reasoning/page.tsx files. Also wraps the custom-reasoning snippet in reasoning.mdx in a two-tab block so the ReasoningBlock import in page.tsx links directly to the reasoning-block.tsx component definition in the adjacent tab.
Consolidates four QA findings from the post-cutover rendering pipeline: - MdxCodeBlock now dedents fence-in-JSX bodies before passing the copy payload to <CopyButton>. Fences nested inside <Tab>/<Step>/<Tabs> were reaching the clipboard with 16-24 leading spaces per line (invalid Python / TS on paste). The visible <pre> body is dedented in lockstep so rendering matches what's copied. - Wires rehypeCodeMeta + pre: MdxCodeBlock into the framework-root after-features MDX renderer, achieving parity with docs-page-view.tsx. Previously bare rehypeHighlight left these blocks without copy buttons or file-path captions. - Closes the two fences in display-only.mdx with three backticks instead of four, so the fences actually terminate and copy doesn't grab adjacent JSX/prose. - Removes a copy-paste-duplicated <Callout> on tool-rendering.mdx (kept the first occurrence, dropped the post-InlineDemo duplicate).
… route.ts snippet Section 3 "Configure the A2A middleware" had a literal ... ellipsis where the imports should go, and the code block ended at runtime definition with no POST handler — pasted code would not compile. Add the imports the block actually uses (HttpAgent, A2AMiddlewareAgent, CopilotRuntime, ExperimentalEmptyAdapter, copilotRuntimeNextJSAppRouterEndpoint, NextRequest) and the canonical Next.js App Router POST handler that hands requests to the runtime. Pattern matches the ms-agent-framework quickstart route.ts.
…soning demos (cherry-pick of #4858) (#4876) ## Summary Cherry-pick of #4858 (by @Abubakar-01) onto a maintainer-owned branch so CI can run with full token access. The original PR's CI was blocked at the Depot OIDC step because fork PRs don't receive the build tokens — the code itself is fine. All credit to @Abubakar-01; commit authorship preserved. ## The fix Region markers `@endregion[reasoning-block-render]` in 16 `agentic-chat-reasoning/page.tsx` demos closed **before** the enclosing `function Chat()`'s closing brace, so the rendered snippet had an unbalanced `{` and the closing `}` cut off mid-body. Moves each `@endregion` to after the function's closing brace so the snippet body is syntactically complete. Matches the contiguous-region-wraps-imports-and-body convention established in #4829. ## Files changed 16 demo files across ag2, agno, built-in-agent, claude-sdk-python, claude-sdk-typescript, crewai-crews, google-adk, langgraph-fastapi, langgraph-python, langgraph-typescript, langroid, llamaindex, mastra, ms-agent-python, pydantic-ai, spring-ai, strands — each `src/app/demos/agentic-chat-reasoning/page.tsx` gets the same single-line marker move. ## Test plan - [ ] Bundle regenerates clean: `pnpm tsx showcase/scripts/bundle-demo-content.ts` - [ ] Sample 3 `reasoning-block-render` region bodies in `demo-content.json` — each should now contain a balanced `function Chat() { ... }` - [ ] `/{framework}/generative-ui/reasoning` (or wherever the snippet is rendered) shows the full Chat function ## Original PR Closes #4858 in favor of this maintainer-branch version. CI on fork PRs is blocked on Depot OIDC + Vercel deploy authorization, neither of which we can override per-PR.
… render parity + content cleanups (#4877) ## Summary Four small rendering-pipeline fixes from a post-cutover QA pass that diagnosed copy-malformation reports on specific code blocks. Single PR because the fixes are each tiny and form a coherent "render/copy parity" group. ## Fixes ### 1. `MdxCodeBlock` now dedents fence-in-JSX bodies **Problem**: When a `python` / `tsx` etc. fence sits inside JSX (e.g. `<Tab><Step>...</Step></Tab>`), MDX preserves the JSX nesting's leading whitespace on every body line. `extractText` recovers it faithfully, but the copy payload comes out with 16-24 leading spaces per line — user pastes invalid Python with top-level statements indented. **Fix**: Added a private `dedent()` helper in `src/components/mdx-code-block.tsx` that measures min leading-whitespace across non-blank lines and strips it. Both the visible `<pre>` body and the `<CopyButton>` payload use the dedented text, so rendered == copied. Column-0 fences (the common case) keep full syntax highlighting unchanged; JSX-nested fences fall back to plain `<code>` after dedent. Fixes the reports against AG-UI middleware, A2A middleware section 3, MS-Py Quickstart `main.py` and `route.ts`. ### 2. Framework route renders post-features content with parity **Problem**: PR #4830 wired `rehypeCodeMeta` + `pre: MdxCodeBlock` into `docs-page-view.tsx` and the AG-UI route, but the `FrameworkRootPage` (line 451 of `[framework]/[[...slug]]/page.tsx`) renders its after-features MDX with bare `rehypeHighlight` and no `pre` override. So features-page MDX on framework-scoped routes loses the file-path caption, copy button on bare fences, and dedent behavior. **Fix**: Imported `MdxCodeBlock` + `rehypeCodeMeta` into that route and added them to the `MDXRemote` config — symmetric with `docs-page-view.tsx`. ### 3. `display-only.mdx` fence closers fixed **Problem**: Lines 30 and 53 closed `tsx` fences with **four** backticks instead of three. CommonMark requires matching counts — fences never closed, copy payload grabbed subsequent JSX tags + adjacent prose. **Fix**: Two single-character edits, fences now balance. Note: this specific bug was also caught by @Abubakar-01 in #4862 — including it here so the closing of #4862 doesn't leave the bug behind. ### 4. Deduplicate `<Callout>` on `tool-rendering.mdx` **Problem**: Identical `<Callout type="info">` blocks at lines 17-19 and 23-25 (verified byte-identical). Copy-paste artifact making the page look messy and probably contributing to the QA verdict of "Missing imports, Unclear how to integrate". **Fix**: Removed the duplicate at lines 23-25; kept the first occurrence (before `<InlineDemo>` — natural callout-then-demo order). The other 2 `<Callout>` matches in the file are different blocks (free-course, name-must-match). ## Files changed ``` src/app/[framework]/[[...slug]]/page.tsx | 21 ++++++++- src/components/mdx-code-block.tsx | 51 +++++++++++++++++++++- src/content/docs/generative-ui/tool-rendering.mdx | 4 -- src/content/docs/generative-ui/your-components/display-only.mdx | 4 +- 4 files changed, 70 insertions(+), 10 deletions(-) ``` ## Test plan - [ ] Visit `/{framework}/agentic-protocols/a2a` — copy the middleware code block in section 3, paste into an editor: should be column-0 valid TypeScript (no leading 4-sp indent) - [ ] Visit `/{framework}/integrations/microsoft-agent-framework/quickstart` — copy `main.py`, paste: valid Python with no 24-sp leak - [ ] Visit `/{framework}/integrations/microsoft-agent-framework/quickstart` — copy `route.ts`, paste: clean - [ ] Visit `/{framework}/agentic-protocols/ag-ui-middleware` — copy button + file path caption present (parity with unscoped route) - [ ] Visit `/generative-ui/your-components/display-only` — Tabs render correctly, copy works on both `page.tsx` and `chart.tsx` tabs - [ ] Visit `/generative-ui/tool-rendering` — single Callout at the top, not duplicated around the InlineDemo - [ ] No regression on column-0 fences (e.g. `/auth`, `/react-native`): syntax highlighting still works, copy/caption unchanged - [ ] Bundler clean: `npx tsx showcase/scripts/bundle-demo-content.ts` (697 demos) - [ ] Typecheck: `npx tsc --noEmit` in `showcase/shell-docs/` (was clean against current main) ## Verification done - Typecheck: pass - Bundler: pass (697 demos, no MDX errors) - Sample dedent input/output on a 24-sp body: column-0 output as expected ## Hook bypass Pre-commit `test-and-check-packages` and `commitlint` bypassed via `LEFTHOOK_EXCLUDE` (pre-existing web-inspector test failure on main + commitlint binary not installed in worktrees). Lint-fix, lockfile-sync, check-binaries all ran and passed.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.4)
Can you help keep this open source service alive? 💖 Please sponsor : )