## Problem
The discontinued AG-UI protocol mirror remained published on
docs.copilotkit.ai. Its sitemap advertised pages owned by the separate
AG-UI repository, including eight routes that returned 500.
## Why
The protocol documentation is maintained at docs.ag-ui.com. Keeping an
unsynchronized duplicate on the CopilotKit host created broken
user-facing URLs and misleading search results.
## Fix
Remove the vendored `/ag-ui/*` content, renderer, sitemap/search/LLM
enumeration, and mirror-specific tests. Retain CopilotKit's own AG-UI
integration documentation under `/backend/ag-ui` and
`/agentic-protocols/ag-ui`.
Validation: `npm run typecheck`; focused Vitest suite (39 tests).
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **Documentation**
* AG-UI protocol documentation has been removed from the documentation
site.
* AG-UI documentation updates are now directed to the upstream protocol
project.
* Related guides, SDK references, drafts, roadmap, integrations, and
contribution pages are no longer available here.
* **Search & Navigation**
* AG-UI pages no longer appear in search indexes, sitemap listings, or
LLM-generated documentation content.
* Documentation routing now resolves supported content areas without the
former AG-UI route.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
The prompt a developer copies from the Inspector, the docs hero and the feature
cards opened with two sentences of instruction to the coding agent: identify
yourself with a slug, and pass it as a flag. It is the one piece of text a human
reads, decides on and pastes, and most of it was addressed to something else.
Help me get started with CopilotKit. Run this command and follow the
instructions:
npx --yes copilotkit@latest onboard start --run <run-id>
Identification moves into the prompt graph, which is the surface that talks to
the agent for the rest of the run: `onboard identify --coding-agent <slug>` is
run by `authenticate/start` (Intelligence OSS-1157). The CLI still accepts
`--coding-agent` on `start`, so this wording and the old wording both work and
neither repository has to land first.
The feature prompts keep their standing permission for the CLI session check.
That sentence is the developer granting something by copying the text, and the
graph cannot grant it to itself, so only the identification half is cut.
Kept byte-identical across the Inspector template, the docs constant, and
Intelligence's own `createCodingAgentOnboardingPrompt`.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The three docs expansion tests pinned the hand-written prose that OSS-1150
retired. They now assert the command that reaches the route instead, and
keep the structural check that the prompt tag is expanded.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The seven `--intent` feature routes shipped with no caller. Every copyable
prompt still ran `onboard start --run … --coding-agent …`, so the only way
to reach a route was to type the flag by hand, and the Inspector solved the
same problem again with its own per-feature prose.
Home's feature buttons now emit `onboard start … --intent <slug>` and carry
no feature-specific instruction. The route owns the guide links, the plan,
the per-phase check-ins, the refusal when a prerequisite is missing, and the
proof step. One table maps each tile to one intent, and a test holds the two
sets equal in both directions.
The two docs feature prompts follow: Learning and Rich Threads name an
intent instead of repeating setup prose that had already drifted from the
shipped API once. The generic prompts on docs and the Intelligence web app
stay generic, because every feature route requires an app that those
readers do not have yet.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
## Summary
The same onboarding prompt supports greenfield projects, brownfield
applications or agent backends, and existing CopilotKit OSS projects
connecting to Intelligence. The index states these starting points
explicitly and explains where to run the prompt.
Replace the exhaustive default `/llms.txt` expansion with a curated
index that exposes the canonical onboarding prompt, then routes readers
to their existing agent framework. The prompt is imported from the same
template used by the docs copy button, with instructions to create a
fresh run ID per onboarding session. Research-only readers are directed
to the documentation links.
Every visible external framework in the docs registry receives an
overview and quickstart link in a dedicated section. This includes the
LangGraph variants, Google ADK, Claude Agent SDK, Strands, Microsoft
Agent Framework, and other published integrations; hidden integrations
remain excluded.
The following section covers chat, generative UI, human-in-the-loop
workflows, Rich Threads, Automatic Learning, Intelligence, Channels, and
thread imports. Built-in Agent quickstart, model selection, and server
tools are explicitly labeled. Readers are directed to framework-specific
implementation guides instead of assuming root instructions apply to
every backend. `/llms-full.txt` remains available for exhaustive
retrieval.
Channels has two prominent canonical entries, with descriptions covering
native messages, approvals, and managed connection availability.
Repeated framework-specific channel guides remain in the full index.
Regression coverage now requires Slack and Teams entry points instead of
excluding every channel route.
## Validation
- Focused index tests cover the shared onboarding prompt, deterministic
output, every visible framework's canonical overview and quickstart,
hidden exclusions, ordering, and duplicates.
- Explicit TypeScript check passed after adding the onboarding prompt.
- Changed-file formatting and diff checks passed.
- Both canonical Slack and Teams documentation URLs returned HTTP 200.
- The initial implementation passed typecheck, lint, production build,
and commit hooks.
## Existing verification failures
The broader Nx `verify-shell-docs:fast` check reported existing unknown
snippet regions, internal dead links, and essential-content findings.
The unchanged Mastra LLM rendering test also expects a `createTool`
import absent from an existing generated snippet. These failures are
recorded separately from the passing index contract tests.
Linear: PDX-332
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
- **New Features**
- Updated `/llms.txt` with a curated documentation index covering key
capabilities, interfaces, agent workflows, persistence, and supported
channels.
- Added dynamically generated entries for supported external agent
frameworks and integration quickstarts.
- Added onboarding instructions for connecting CopilotKit with a coding
agent.
- Clarified built-in agent documentation labels.
- Linked to `/llms-full.txt` for the complete documentation inventory.
- **Bug Fixes**
- Improved index consistency through validated ordering, uniqueness, and
visibility checks.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Two independent docs-frontend improvements in `showcase/shell-docs`.
Rebased onto current `main` (the branch was 158 commits behind).
## 1. `<Tabs persist>` now actually persists
101 tab groups in the content tree are authored as `<Tabs groupId="..."
persist>`. The wrapper accepted both props and ignored them — the
comment in `docs-tabs.tsx` said so outright:
> `groupId` and `persist` are accepted and currently ignored
So every page reopened on its own default. A reader working through the
LangGraph guide in TypeScript had to reselect TypeScript on each page.
Fumadocs holds tab selection in local component state and exposes no
persistence hook, so the wrapper takes over the controlled
`value`/`onValueChange` pair and mirrors the pick into `localStorage`
under `shell-docs.tab.<groupId>`.
**Selection precedence**, strongest first:
| # | Source | Where it comes from |
|---|--------|---------------------|
| 1 | `urlDefault` | The framework-route override the page shell derives
from the URL (`TAB_DEFAULTS_BY_SLUG`) |
| 2 | Stored pick | `localStorage`, same `groupId` |
| 3 | `default=` | The author's value in the MDX |
| 4 | First item | Fallback |
The page shell passes its URL-derived value as a **separate `urlDefault`
prop** rather than overwriting `default`. This matters: 45 of the 101
`persist` groups also carry an author `default=`. Collapsing the two
sources into one prop ranks the author's default above storage, which
would leave the stored pick unreachable on almost half of the pages the
feature exists for. `language_langgraph_agent` appears both ways (30
sites with `default="Python"`, 8 without), so the same group would have
behaved inconsistently within one guide.
Two details worth noting for review:
- The stored value is read in an **effect**, not in the initial state,
so server and client render identical markup and hydration stays clean.
- Every `localStorage` read and write is wrapped in `try`/`catch`.
Private mode and quota errors leave the tabs fully working, just without
persistence.
## 2. API-key hints under `.env` snippets
The LangGraph quickstart tells the reader to put `OPENAI_API_KEY` in
`.env` and leaves them to go find the key page. `<ApiKeyHint
provider="openai" />` renders a muted one-line link under the snippet.
The component maps a provider id to a label and URL — `openai`,
`anthropic`, `google`, `langsmith`, `copilotkit`. An unknown id renders
nothing, so a typo degrades to today's behaviour instead of throwing. It
is navigational only: it neither reads nor writes a key. Both `.env`
steps on the LangGraph quickstart use it.
## Removed from this branch
The earlier revision led the LangGraph quickstart with a `<InlineDemo
demo="agentic-chat" />` block under a "See it working" heading. That is
gone, along with the `inline-demo.test.tsx` file that covered it —
`InlineDemo` is pre-existing `main` code this PR no longer touches.
Two tests in `docs-page-view-toc.test.tsx` were also dropped rather than
kept. They were named for this PR's components but did not exercise
them: `docs-page-view-toc.test.tsx` asserts on `DocsPage` props, and the
page body is never rendered. Verified by mutation — deleting
`ApiKeyHint` from the MDX registry left the test titled `renders the
LangGraph quickstart (InlineDemo + ApiKeyHint) without errors`
**passing**. Real coverage lives in `api-key-hint.test.tsx` instead.
## Testing
No CI job runs the `showcase/shell-docs` vitest suite.
`test_unit-showcase.yml` covers only `harness` and `shell-dashboard`;
`showcase_validate.yml` runs vitest only in `showcase/scripts`.
Everything below was therefore run locally.
**Full suite, branch vs. pristine `origin/main` in the same
environment** — `main` carries 6 pre-existing failures here, so the
failure *set* is the comparison, not zero:
```
base (origin/main) 843 tests, 6 failed
branch (this PR) 858 tests, 6 failed
NEW failures: none
```
The 6 are identical on both sides: `brand-nav` layout cap, 3 ×
`angular-docs-content`, `llm-text` mastra, `ms-agent-python-stable-api`.
**Mutation checks** — every new test was verified to fail when the
mechanism it claims to cover is broken:
| Mutation | Result |
|----------|--------|
| `canPersist = false` (persistence off) | ✅ `persists a groupId pick
and reapplies it on a fresh mount` fails |
| Author `default` outranks storage (the pre-fix precedence) | ✅ `ranks
a stored pick above the author's MDX default` fails |
| `urlDefault` demoted below author `default` | ✅ `ranks a urlDefault
above the author's MDX default` fails |
| `ApiKeyHint` removed from the MDX registry | ✅ `is registered as an
MDX component` fails |
| `href={meta.url}` → `href={undefined}` | ✅ 5 of 7 `ApiKeyHint` tests
fail |
**End-to-end render** — `ApiKeyHint` was rendered through the real
`MDXRemote` pipeline (same `remarkGfm` options, nested in
`<Steps>/<Step>` as the quickstart uses it) to confirm the `provider`
prop survives compilation and the anchor reaches the HTML:
```
✓ ApiKeyHint through the real MDX pipeline > survives compilation with its provider prop
expect(html).toContain("https://platform.openai.com/api-keys")
```
**Typecheck and lint** (`showcase/shell-docs`):
```
$ npx tsc --noEmit → exit 0
$ npx oxlint . → Found 28 warnings and 0 errors
$ npx oxfmt --check <touched files> → All matched files use the correct format
```
The 28 lint warnings are pre-existing. The only two in a file this PR
touches (`mdx-registry.tsx`) are `iframe-missing-sandbox` on
pre-existing `InlineDemo` iframes, untouched here.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **New Features**
* Added inline API key guidance below relevant documentation code
blocks, with links to provider credential pages.
* Added tab selection persistence across documentation pages, with
support for URL and author-defined defaults.
* Added API key guidance to the LangGraph quickstart.
* **Tests**
* Added coverage for tab persistence, selection precedence, invalid
values, disabled persistence, and API key hint behavior.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
A self-review of the previous commit found three gaps.
- Nothing tested that the page wires the fixes up. A new test walks the
rendered `DocsPageView` tree, asserts `blockJS` is off in the page's
own MDXRemote options, and renders the registered `CTACards` override
to confirm it prefixes card hrefs with the framework being read.
Removing either the option or the override fails it.
- The compile test asserted `grid-cols-1`, which the two-column class
also contains, so the `columns` half of that test proved nothing. It
now asserts the absence of the `sm:` variant.
- The per-page test guarded the extracted href count but not the title
count, so a regex that matched no titles would have passed silently.
Also correct the component comment: four content files author the
block, but the pydantic-ai one is shadowed by a sibling leaf file and
renders nowhere.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The component fix alone was inert on the real page. next-mdx-remote 6
defaults `blockJS` to true, which runs a remark plugin that deletes
every JSX attribute whose value is an expression. On the docs route
`<CTACards columns={2} cards={[...]} />` reached the component with no
props at all, so it still rendered an empty grid. The unit tests passed
because they call the component directly and skip the MDX pipeline.
- Turn `blockJS` off for the docs route. Every source there is
first-party content from `src/content`. `blockDangerousJS` keeps its
default. The other MDXRemote call sites keep the default too, because
`ag-ui/introduction.mdx` authors inline `onMouseEnter` handlers that
the stripping currently keeps out of a server component.
- Resolve each card href against the framework being read. The cards
render through the registry `Card`, so they never reached the
href-resolving `Card` override, and a reader on
`/ms-agent-python/human-in-the-loop` was redirected to the .NET page.
Content now authors the hrefs root-relative.
- Stack the grid to one column below the `sm` breakpoint. An inline
`grid-template-columns` cannot be overridden by a class, so the two
cards stayed 157px wide side by side on a 390px viewport.
- Pass each description through the `Card` `description` prop, the same
as every other card grid in the docs.
- Match `iconKey` against own properties only.
- Add a test that compiles the four authored blocks through the MDX
pipeline, which is the check the earlier tests were missing.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
`CTACards` accepted only `children`, but every call site in content
authors `<CTACards columns={n} cards={[...]} />` self-closing. Both
props were dropped, so the grid rendered empty and the pages lost
their links with no error anywhere.
Four human-in-the-loop landing pages are affected: crewai-flows,
mastra, pydantic-ai, and microsoft-agent-framework.
The component now renders each entry through the shared `Card`, honors
`columns` in the grid template, and falls back to wrapping `children`
so legacy `<CTACards>...</CTACards>` authoring keeps working — the same
prop-or-children contract `EcosystemTable` uses in this file.
`iconKey` values on these cards are lucide names, not the framework
keys in `customIcons`, so they get their own lookup. An unregistered
key renders the card without an icon rather than throwing.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The LangGraph quickstart tells the reader to put `OPENAI_API_KEY` in
`.env` and leaves them to find the key page themselves. `<ApiKeyHint
provider="openai" />` renders a muted one-line link under the snippet.
The component maps a provider id to a label and a URL, covering openai,
anthropic, google, langsmith and copilotkit. An unknown id renders
nothing, so a typo degrades to the current behaviour instead of
throwing. It is navigational only: it neither reads nor writes a key.
Both `.env` steps on the LangGraph quickstart use it.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
## The problem
Every Channels page that tells a reader what to install named a pair
that is four minors stale:
```sh
npm install --save-exact @copilotkit/channels@0.6.1 @copilotkit/runtime@1.65.0
```
That pin is not merely old, it is load-bearing in the wrong direction.
`@copilotkit/channels@0.6.1`
does not export `defineChannelComponent`. Compiling an agent-rendered
component against the version
our own quickstart installs fails outright:
```
error TS2724: '"@copilotkit/channels"' has no exported member named
'defineChannelComponent'. Did you mean 'ChannelComponent'?
```
The export listing confirms where the boundary sits.
`@copilotkit/channels-core@0.6.1` ships
`defineChannelCommand` and `defineChannelTool` and nothing else in that
family; `defineChannelComponent`
first appears in the 0.6.2 canary line and first ships stable in 0.7.0.
So the two halves of our own documentation disagree. The Channels setup
guide gates success on "at
least one `defineChannelComponent` must render," while the reference
page and both provider
quickstarts hand the reader a version in which that success criterion
cannot be satisfied. A builder
following the docs faithfully reaches a compile error, and the error
blames their code rather than
our pin. The bad trade they make next is guessing — dropping
`--save-exact`, reaching for `@latest`,
or abandoning agent-rendered components entirely, each of which discards
the tested-pair guarantee
the pin existed to provide.
The timing is what makes this worth a same-day fix rather than a queued
one. The "Agents, Everywhere"
global hackathon runs Saturday 12 September 2026 across 51 cities with
CopilotKit as a global
sponsor, and these are precisely the pages participants will open first.
## The approach
Every pinned pair in the Channels docs moves to
`@copilotkit/channels@0.9.2` +
`@copilotkit/runtime@1.70.2`, the current published pair as of
2026-09-08. Five install lines across
the reference index, the direct-adapters reference, the
deploy-and-operate how-to, and the Slack and
Teams quickstarts.
**The pin is what changes, not the prose.** Where a page's guidance
implies agent-rendered components
are available, that guidance was already correct — it was the version
underneath it that was wrong.
Nothing about the described behaviour is edited.
**The direct-adapters availability note moves too.** It read "their
direct adapters already ship in
`@copilotkit/channels@0.6.1`," an availability claim rather than a
first-shipped-in claim, sitting
directly above an install block that now names 0.9.2. Leaving it would
make the page contradict
itself within fifteen lines.
**The SDK reference index gains the tested-pair framing it was
missing.** The quickstarts and the
deploy-and-operate page already explain that the two packages ship as a
tested pair and must be
upgraded together; the reference index pinned exact versions while
explaining nothing, which is how a
pin decays into a number nobody knows they may not touch.
**One file outside the docs content changes, and the cost is worth
naming.**
`src/lib/__tests__/channels-docs.test.ts` asserts the quickstarts
contain the exact tested install
string, so it hard-codes the pair. Updating the docs without it produces
a red PR. Only the two
version constants move; no assertion is added, removed, or loosened.
## What is not covered
- **No recording.** The change is text in six files with no runtime
surface to demonstrate. The
durable evidence is the export listing above, which is reproducible from
the registry rather than
from this branch.
-
`showcase/shell-docs/src/content/reference/channels/functions/createChannel.mdx:114`
still reads
"Channels 0.6.1 warns when enumerable fields are dropped." This is a
behaviour-provenance note, not
an install pin, and rewriting the number would change a factual claim
about when the behaviour
changed. It needs a maintainer to say whether it means "as of 0.6.1" or
"in 0.6.1."
- `skills/setup-slack-channel/SKILL.md:81` and
`skills/setup-slack-channel/references/troubleshooting.md:8`
reference `@copilotkit/channels@0.6.0` and `@copilotkit/runtime@1.65.0`
— an even older pin, and one
the guard test explicitly calls "the broken Channels 0.6.0 release."
Same class of bug, outside docs
content, left for a separate decision.
- The three `doctest.json` files pin `@copilotkit/runtime@1.68.3`, also
stale, also a different
purpose.
- `CopilotKit/channels-sdk` carries the same stale install line in
`.agents/skills/build-channels-agent/SKILL.md`. Different repository.
- The docs do not document `defineChannelComponent` anywhere, despite
the setup guide gating success
on it. That gap is not addressed here.
- The guard test could ratchet against 0.6.1 and 1.65.0 the way it
already ratchets against 0.5.0,
0.6.0, and 1.64.2, which would stop this recurring. Deliberately not
added, to keep the diff to the
bug.
## Verification
Registry state re-checked at edit time: `npm view @copilotkit/channels
version` → `0.9.2`,
`npm view @copilotkit/runtime version` → `1.70.2`.
Export boundary confirmed by unpacking the published tarballs:
`channels-core@0.6.1` has no
`defineChannelComponent`; `0.6.2-canary.1785779327`, `0.7.0`, `0.7.1`,
and `0.9.2` all have it.
All 10 assertions in the `channels-docs` guard test's install and
Node-version blocks were replayed
against the edited files for both provider quickstart slugs — 20 checks,
all passing. The `--save-exact`
negative lookaheads still hold: the docs contain no unpinned
`@copilotkit/channels` or
`@copilotkit/runtime` install, no `@latest` or `@next` tag, and none of
the previously blocked 0.5.0,
0.6.0, or 1.64.2 versions.
`grep` across `showcase/shell-docs/src` returns no remaining
`channels@0.6.1` or `runtime@1.65.0`.
No new test files. No source, config, or lockfile changes.
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **Documentation**
* Updated channel, Slack, Teams, and direct adapter setup guides with
the latest pinned SDK versions.
* Updated the channel reference documentation to reflect the current
package versions.
* **Tests**
* Updated documentation checks to validate the newer SDK versions in
provider quickstarts.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
The Channels pages pinned @copilotkit/channels@0.6.1 with
@copilotkit/runtime@1.65.0, four minors behind the current release.
Anyone following them installs a Channels version that predates
defineChannelComponent, which landed in 0.7.0, so agent-rendered
components cannot compile.
Update every pinned pair in the Channels docs to
@copilotkit/channels@0.9.2 + @copilotkit/runtime@1.70.2, refresh the
direct-adapters availability note that named 0.6.1, and add the
tested-pair framing to the SDK reference index, which pinned versions
without explaining that the two ship and upgrade together.
Also updates the pinned constants in the shell-docs guard test, which
asserts the quickstarts contain the exact tested install string.
`generative-ui/tool-based` is the terminal page every onboarding run fetches,
and its `## How it works in code` section renders a per-framework snippet.
Nine frameworks shipped no snippet, so the section rendered nothing and the
silence meant both "no agent-side wiring is needed" and "wiring is needed and
nobody wrote it down".
Each verdict was read out of the pinned adapter rather than the docs:
- ag2: `run_stream` builds `client_tools` from `incoming.tools`.
- mastra: the adapter reduces `input.tools` into `clientTools`.
- strands, strands-typescript: a proxy tool per forwarded tool is registered
in the agent's tool registry, and a native tool of the same name wins.
- agno: its AG-UI interface never reads `RunAgentInput.tools`, so a component
needs an `external_execution=True` stub and a `db` for the paused run.
- deepagents: `CopilotKitMiddleware` merges `copilotkit.actions` into
`request.tools`, so the middleware is load-bearing.
- built-in-agent: config mode forwards for you, a factory does not. It is also
the root framework, so this is the unscoped default page.
The two .NET columns rest on their own demo agents, which render charts with
an empty tool list. No .NET SDK was available to read the NuGet hosting
package.
REQUIREMENT_NOT_ESTABLISHED is now empty. The shape test pins each snippet,
and setup-concept.test.ts no longer depends on ag2 being an open gap.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Announce recommendation selection without invalid active descendants, omit
missing controlled elements, and cover empty-result and result-slot behavior.
Report snippet expansion failures and reject partially staged content roots
before either search index is overwritten.
Validation: 829 tests pass; three Angular/Mastra content failures already
reported in PR #6887 remain. Typecheck and lint pass (existing lint warnings).
Browser-verified local search, keyboard selection, and recommendation navigation.
## Summary
- carry Intelligence thread, memory, and annotation requests through the
single Runtime endpoint
- advertise the bridge through an optional Runtime info capability
- reuse the existing REST route matcher, handlers, method checks, hooks,
and memory gate
- route Core memory and React annotation calls through the negotiated
Runtime fetch
- make single-route the documented Intelligence quickstart while keeping
multi-route supported
## Compatibility
- Multi-route behavior does not change.
- A new client uses the bridge only when a single-route Runtime
advertises it.
- An old client ignores the new optional capability.
- A new client keeps the old behavior with a Runtime that does not
advertise the capability.
## Validation
- `pnpm nx run-many -t check-types,build
--projects=@copilotkit/shared,@copilotkit/core,@copilotkit/runtime,@copilotkit/react-core`
- package pre-commit gate: tests, `publint`, and `attw` passed for all
affected packages
- Runtime focused suite: 102 tests passed
- Core focused suite: 108 tests passed
- React focused suite: 53 tests passed
- React full suite: 1,591 Vitest tests and 47 script tests passed
- Angular and React memory tests: 18 tests passed
- docs type-check and production build passed
- changed docs contract tests: 33 tests passed
## Local baseline notes
The full docs test command also reads Git LFS images and generated
cross-framework fixtures. It has six unrelated failures in this
checkout: three image-pointer checks, two Angular content checks, and
one Mastra content check. The changed docs tests pass, and the docs
production build passes.
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
- **New Features**
- Added single-route support for thread, memory, and annotation
operations.
- Runtime capability discovery now advertises single-route resource
support.
- Resource requests preserve paths, query parameters, headers, methods,
and request bodies.
- Memory and annotation operations consistently use the configured
runtime transport.
- **Documentation**
- Updated setup guides for single-route configuration, capability
negotiation, and compatibility.
- Added guidance for single-route LangGraph deployments.
- **Tests**
- Added coverage for transport behavior, validation, resource
operations, and error handling.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Pin Intelligence in the header and sidebar, add an Explore docs mega menu, and collapse top-level sidebar sections so people do not have to scroll past a long list to reach Intelligence.