The render-callback reference omitted the always-present attribution props.
Document toolCallId (the per-interrupt correlation key) and agentId (static
registration scope, undefined for unscoped tools), matching the type's JSDoc.
Pre-merge checklist for the promote-notify workflow: Slack-membership
checks (#team-showcase + #oss-alerts), SLACK_BOT_TOKEN scope verification,
gh workflow run dispatch commands for all three canonical fixtures, and
a schema-mismatch test that verifies the workflow emits a ::warning::
annotation with NO Slack API call.
New users were still discovering cloud.copilotkit.ai through docs pages,
the README, example READMEs, and in-app banners/console messages. Replace
all user-facing web links with dashboard.operations.copilotkit.ai (the
destination the marketing-site CTAs already use). Functional API endpoints
(api.cloud.copilotkit.ai) are deliberately untouched since existing cloud
customers depend on them.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The shared self-hosting snippet renders under every framework section
(built-in-agent, langgraph, ...), and the NavigationLink rewriter makes
absolute links section-relative.
- "Intelligence Platform Works" linked /learn/intelligence-platform,
which became /<framework>/learn/intelligence-platform (404). The page
is served at /premium/intelligence-platform in every section.
- The GHCR chart-releases link used the repo-scoped URL for the private
Intelligence repo (404 for public readers); switched to the public
org-scoped package URL.
The top-level docs/ app is retired but nothing said so, and two
instruction surfaces still pointed contributors there. Establish a
single canonical rule and reduce the other surfaces to pointers.
- Add .claude/docs/documentation.md as the source of truth: CopilotKit
docs are authored in showcase/shell-docs/src/content/; the top-level
docs/ folder is retired; AG-UI protocol docs are authored upstream in
ag-ui-protocol/ag-ui and mirrored here.
- CLAUDE.md: add an Essentials rule and a Reference link.
- docs/README.md: replace boilerplate with a retired/STOP banner.
- .claude/docs/hooks.md: fix the stale /docs pointer; document that a
hook's API reference page lives in reference/hooks/ and that v2
reference nav is generated from frontmatter (no meta.json).
- CONTRIBUTING.md: add a two-domain documentation section.
The @ag-ui/aws-strands TypeScript adapter ships alongside the Python
ag_ui_strands package but the docs only showed Python snippets. Add a
TypeScript tab next to every Python snippet (Python default, `persist`
on the tab group so a reader's choice sticks across pages) covering:
- quickstart: project init, install, agent file, run command
- frontend-tools: @tool stub + createStrandsApp server
- shared-state (read + write): StrandsAgentConfig.stateContextBuilder
- generative-ui tool-rendering: backend tool definition
- generative-ui state-rendering: ToolBehavior.stateFromArgs
Also applied to the parallel showcase/shell-docs tree. Non-code pages
(deploy-agentcore, copilot-runtime, inspector, etc.) remain untouched
since they either re-export shared snippets or have no framework code.
## Summary
Adds a closed-beta user memory section to the self-hosted Intelligence
docs (no new pages, no nav changes — inline addition to the existing
`self-hosting.mdx` snippet).
- A short public `<Callout>` in `## What is this?` announces the
capability and points readers at the gated configuration sub-section
below. No implementation details exposed publicly.
- A password-gated `### User memory (closed beta)` sub-section in `##
Configuration reference` describes the user-visible effect, the scope
guarantees (per-user, per-org, per-project, read-only), and the two
flips to enable it:
- `app-api`: `appApi.env: [{ name: SL_ENABLED, value: "true" }]` in
`values.yaml`
- runtime / BFF: `mcpServer: true` on the `CopilotKitIntelligence`
constructor in `@copilotkit/runtime/v2`
- Includes a `runtime.ts` code snippet.
Heading sits outside the gate so readers see "User memory (closed beta)"
in the TOC; only the body is behind the password.
## Implementation notes
- Uses the existing `<InsecurePasswordProtected>` MDX component already
registered on both `(home)` and `integrations` routes — no new
infrastructure.
- Password is hardcoded as `cpki-mem-beta` on the prop. Reviewer choice:
keep as-is, swap to a new `NEXT_PUBLIC_*` env var, or reuse the existing
`NEXT_PUBLIC_LGC_DOCS_PASSWORD` (which would share access with the
LangGraph Cloud beta group).
- Locally bypassable when the env-var default is empty, which is the
same posture as Threads' existing precedent.
## Test plan
- [ ] Open `/premium/self-hosting` — verify the public Callout renders
in "What is this?" and the section anchor link works.
- [ ] Scroll to Configuration reference → after "Realtime gateway
(additional keys)" — verify the gate panel shows.
- [ ] Enter `cpki-mem-beta` — verify the SL_ENABLED table + `runtime.ts`
snippet reveal.
- [ ] Confirm the heading "User memory (closed beta)" is visible to
non-authenticated readers (sits outside `<InsecurePasswordProtected>`).
Stack upgrade
- fumadocs-core/ui 15.8.5 → 16.8.12, next 15 → 16 (Turbopack), react 19 → 19.2
- Swap "next lint" → "oxlint ." to match the rest of the repo
- New deps for the page-actions component: @radix-ui/react-popover,
class-variance-authority, clsx, tailwind-merge
Layout & brand polish
- Sidebar floats as a rounded-2xl card with column-aligned padding;
framework picker pill, accent-purple section icons (16px), accent
active state, and a single divider line at the footer
- New custom <ThemeSwitch> — single 50×28 neutral switch replaces the
fumadocs sun/moon split (drops the vertical divider and purple tint)
- Sidebar folder collapse state persists across navigations via
SidebarFolderStatePreserver
- BrandNav: wider top bar, lowercase "Talk to an engineer", BookIcon
for Docs, GitHub/Discord icons rendered inline in our footer row
- Mobile: nav clipping + content padding fixes, content grid-span-full
- TOC-less pages: lift article max-width so content stretches into the
empty TOC column on wide viewports
New routes
- /llms.txt — page index per fumadocs LLMs integration
- /llms-full.txt — concatenated full text of every docs page
- /<path>.md and /<path>.mdx — per-page raw markdown with <Snippet>
regions inlined as fenced code blocks (resolver in lib/llm-text.ts
reuses the same demo-content.json the <Snippet> runtime reads)
- Page-actions bar: Copy Markdown + Open in Claude / Claude Code /
Windsurf / Codex (Codex links to https://chatgpt.com/codex for
universal coverage)
Content fixes
- Reasoning page (generative-ui/reasoning.mdx): rewrite to point at
the real reasoning-default / reasoning-custom cells instead of the
stale agentic-chat-reasoning / reasoning-default-render names
- Strip <FeatureIntegrations /> chip list ("SUPPORTED BY ...") from
16 docs MDX files (component definition kept in mdx-registry)
- Drop hideTOC: true from 11 pages so they pick up the lifted-cap rule
- Default home (/) to the built-in-agent authored sidebar; fix active
state matching on the home url
- Restore default fumadocs Callout (drop the bespoke docs-callout)
- OpsPlatformCTA redesign — light bordered card with accent stripe
- FrameworkOverview redesign — drop atmospheric chrome, smaller hero
- Homepage / docs-landing redesign
Integrations (LGP / LGT / ADK)
- Tag @region[default-reasoning-zero-config] in reasoning-default and
@region[reasoning-block-render] in reasoning-custom for all three
frameworks so the docs <Snippet> calls resolve
- Tag @region[use-agent-simple] + @region[message-list-simple] in
headless-simple and @region[use-rendered-messages-hook] +
@region[manual-tool-call-rendering] +
@region[manual-activity-message-rendering] + @region[custom-bubbles]
across headless-complete
Other
- docs/components/layout/mobile-sidebar.tsx: lowercase "engineer" to
match shell-docs
- .claude/launch.json + .claude/preview/ — dev launch configs for the
worktree so /preview brings up shell-docs on :3003
CR round 1 caught two middleware redirects still targeting the
pre-rename /coding-agents slug:
- /coding-agent-setup → /coding-agents (now → /build-with-agents)
- per-framework vibe-coding-mcp → coding-agents (now → build-with-agents)
Both produced a 2-hop 308 chain through next.config.mjs after the
rename. Repointing them directly to /build-with-agents collapses the
chain.
Also adds a trailing newline to langgraph/build-with-agents.mdx for
consistency with the other 13 build-with-agents.mdx files.
Adds two pieces to the self-hosting docs:
1. A short public Callout in `## What is this?` announcing that the
Intelligence Platform image includes an opt-in user memory
capability and pointing readers at the gated configuration section
below. No implementation details exposed.
2. A password-gated `### User memory (closed beta)` sub-section in
`## Configuration reference` that describes:
- The user-visible effect (recall of prior conversations with
example questions)
- Scope guarantees (per-user, per-org, per-project; read-only)
- The two flips required to enable it:
app-api: appApi.env: [{ name: SL_ENABLED, value: "true" }]
runtime: mcpServer: true on the CopilotKitIntelligence
constructor in @copilotkit/runtime/v2
- A runtime.ts code snippet
The gating uses the existing InsecurePasswordProtected component
already registered as an MDX component on both (home) and
integrations routes. The password is currently hardcoded as
cpki-mem-beta directly on the prop, which keeps the gate working
locally without env-var setup. Swap to an env-var-backed prop before
broader rollout if a different password than the existing LangGraph
Cloud beta is desired.
Scope of this change is the self-hosting snippet only; no
integration-specific docs, no new pages, no nav changes.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Neither app had a favicon configured locally, so the browser tab
showed the generic globe icon. Drop the canonical copilotkit.ai
favicon (3-image .ico, 16×16 + 32×32) into each app's app/ directory
so Next.js auto-serves it via its file-system convention. Same asset
on both surfaces.
The drawer aside was set to `bg-white/50 dark:bg-white/[0.01]` with a
`backdrop-blur-3xl`. In light mode this rendered as a 50%-transparent
white panel over the page underneath, which made every item read
"grayed-out" through the blur. In dark mode the 0.01 white was so
faint that the panel was effectively transparent.
Switch to `bg-sidebar` — the opaque sidebar token already used by the
desktop navbar — and drop the backdrop blur (pointless without the
transparency). Items now sit on a solid surface with normal contrast
in both themes.
## Label
"Talk to Our Engineers" → "Talk to an Engineer" everywhere it appears
(button text, aria-labels, mobile drawer entry, source comment).
## Desktop pill (≥1100px)
- Gradient fill (indigo-500/90 → purple-500/90 at rest, full at hover)
- Soft shadow lift on hover
- Shimmer animation: a translucent white stripe slides across via an
::after pseudo-element on hover (overflow-hidden + after:translate-x
transition over 700ms). Replaces the earlier scale-on-hover.
- Breakpoint lowered from 1400px → 1100px so the pill is visible at
most laptop widths where there's plenty of room
## Compact calendar icon (md → 1099px)
- New second button rendered alongside the pill, visible only when
the rest of the right cluster is icon-only (768–1099px)
- Same gradient + shimmer treatment in a 36×36 rounded-full button
- Inline calendar SVG (matches the Lucide calendar shape)
## Free Developer Access — shell-docs parity with docs/
- Added as a text link in shell-docs' LEFT_LINKS (mirrors the existing
docs/ pattern); cloud icon on the right cluster now hands off to it
at ≥1100px
- Visibility transitions on both surfaces realigned to 1100px so the
cloud↔text and calendar↔pill flips happen at the same boundary
- whitespace-nowrap on LEFT_LINKS label spans so long labels like
"Free Developer Access" don't wrap when the nav gets tight
## Mobile drawer
- docs/: add a Talk-to-Engineer button at the top of MobileSidebar
(was missing entirely). Tracks `talk_to_us_clicked` with
location: docs_navbar_mobile.
- shell-docs: move the existing Talk-to-Engineer button to the top of
the drawer column so it's the first thing readers see.
The Python A2UI SDK (sdk-python/copilotkit/a2ui.py) exposes v0.9 helpers
create_surface, update_components, and update_data_model, but the
integration docs still referenced earlier names (surface_update,
data_model_update, begin_rendering) and the corresponding wire-format
op keys (surfaceUpdate, dataModelUpdate, beginRendering). The frontend
renderer (A2UIMessageRenderer) routes operations by the v0.9 keys, so
the docs as written would not round-trip through the runtime.
Updates 9 mdx files under integrations/{deepagents,langgraph,a2a}:
- Python helper names in code snippets
- Op keys in prose and TS action-handler return values
- Reorders operations so createSurface comes first (no trailing
beginRendering)
- a2a example: renames the root component id from "root-column" to
"root" per the v0.9 catalog convention (exactly one component must
have id="root")
No SDK or runtime changes.
Every integration quickstart in docs/ and showcase/shell-docs/ now opens with
a "Create a free account" step that points the reader at the Enterprise
Intelligence Platform before the framework path. Existing top-of-page
<OpsPlatformCTA> blocks on the six integrations that already had one are
left in place.
- New <SignupLink surface="docs_<int>_quickstart_step1">…</SignupLink> MDX
component in both apps. It mirrors OpsPlatformCTA's URL+UTM contract
(https://dashboard.operations.copilotkit.ai/ with the canonical docs
UTMs, picked up from NEXT_PUBLIC_INTELLIGENCE_SIGNUP_URL when set) and
fires the same PostHog event the other CTAs use:
posthog.capture("try_for_free_clicked", { location: surface }).
- Registered as an MDX global in:
docs/app/integrations/[[...slug]]/page.tsx
docs/app/(home)/[[...slug]]/page.tsx
showcase/shell-docs/src/lib/mdx-registry.tsx
- All 28 integration quickstart .mdx files now lead with a Step that uses
this component as an inline link inside a single sentence of prose —
no CTA card inside <Steps>.
The <TailoredContent> "Choose your starting point" / "How do you want to
get started?" selector is now wrapped in its own <Step> so it advances
the counter, and the inner CLI/manual paths render as steps 3, 4, 5, …
instead of 2, 3, 4, …. Applies to all 20 quickstarts that use the
picker.
- Indigo→purple gradient text on the Step 1 heading on both surfaces
(`.fd-steps > .fd-step:first-child h3` on docs/,
`.docs-steps > div:first-child h3` on shell-docs). Direct-child
combinator scopes it to the outer first Step so inner first-children
inside TailoredContentOption don't pick it up. Bump weight to 700
and font-size to 1.375rem on docs/ to compensate for the
background-clip:text rendering path (grayscale AA, no solid fill)
which makes glyphs look lighter/smaller than the adjacent solid
600/20px headings.
- Tone down the selected TailoredContent option card on both surfaces
to a near-grayscale wash (from-slate-50 → to-indigo-50/30) and
shorten the card itself (smaller padding, smaller icon, smaller
title; extra left padding for breathing room) so the picker takes
less vertical space and doesn't compete with the Step 1 gradient
heading. Indigo ring still does the "selected" signal.
- Bump the tablist's bottom margin in shell-docs (my-2 → mt-2 mb-6)
so the gap between the picker and the first inner Step matches the
1.5rem gap that every other consecutive-Step transition uses.
- Black SignupLink color in Step 1 on shell-docs so the link doesn't
clash with the gradient heading above it.
- Shell-docs: reset margin-top on the first heading inside any Step so
the badge and heading align, and nudge the badge top from -0.125rem
to 0.1875rem so its vertical center matches the heading line center.
Moved the badge's appearance (background/border/color/font-weight)
out of inline style and into globals.css so :first-child overrides
can win without fighting inline-style specificity.
Per Ben Taylor: leave the CTA link URL param for later. Removing the
paragraph describing it from the docs until the approach is confirmed.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Don't fire banner_clicked on copy-button clicks (move track call to
the non-copy-button branch of handleAnnouncementContentClick)
- Defer ensureTelemetryDistinctId() to runtime connection so no UUID
is written to localStorage when COPILOTKIT_TELEMETRY_DISABLED is set
- Remove setTelemetryOptOut re-export from telemetry.ts (no production
caller; tests already import directly from persistence.ts)
- Fix docs: replace Privacy tab toggle description with env var opt-out
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add telemetryDisabled to RuntimeInfo from COPILOTKIT_TELEMETRY_DISABLED/DO_NOT_TRACK env vars
- Mirror through AgentRegistry and expose via CopilotKitCore getter
- Guard track calls, URL param appending, and console disclosure on core.telemetryDisabled
- Move maybeShowDisclosure() to onRuntimeConnectionStatusChanged (fires after core attaches)
- Update docs to replace localStorage toggle description with env var approach
- Add telemetryDisabled test suite to get-runtime-info tests
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Move `package` from properties string to top-level `{ name }` object per
Ben's confirmed IngestPayload schema (telemetry-sink-ingest/index.ts:127-134)
- Add typed per-event helpers trackBannerViewed/trackBannerClicked/trackThreadsTabClicked
to enforce property shapes at call sites and prevent PII leakage under wrong keys
- Add trackBannerClickedOnce guard in index.ts (per-mount Set keyed by
banner_id + cta) to prevent banner_clicked inflation on repeated clicks
- Fix handleTelemetryOptOutToggle: replace ?? true fallback with
instanceof HTMLInputElement guard (wrong fallback was a privacy bug)
- Add threadsTabClicked re-selection guard (skip if already on threads tab)
- Replace getTelemetryDistinctIdForUrl() call on mount with ensureTelemetryDistinctId()
- Add inMemoryFallbackId in persistence.ts for funnel coherence when
localStorage is unavailable (same UUID returned per page load)
- Add _resetTelemetryPersistenceForTesting() for test isolation
- Remove @copilotkit/shared dep from telemetry-disclosure.ts (inline
env-var check; keeps module self-contained and testable in isolation)
- Add clearMocks: true to web-inspector vitest config (fixes spy call
history accumulating across tests)
- Expand telemetry.test.ts to 22 tests covering wire body shape, opt-out,
5 error-resilience paths, typed helpers, distinct ID lifecycle (SSR +
localStorage-throws + funnel coherence), maybeShowDisclosure, and
getTelemetryDistinctIdForUrl
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Three V1 funnel events from the inspector — oss.inspector.banner_viewed,
oss.inspector.banner_clicked, oss.inspector.threads_tab_clicked — plus a
privacy panel for opt-out, a first-run console disclosure on inspector
mount and runtime startup, and inspector content added to the canonical
/telemetry docs page on main.
Inspector POSTs directly from the browser to telemetry.copilotkit.ai/ingest
(per ticket: URL is intentionally clearly named for transparency in DevTools).
Inline fetch POST in lib/telemetry.ts — no @copilotkit/shared dep on the
inspector, no dependency on any non-main branch.
Wire body shape (conservative; needs Ben confirmation):
POST https://telemetry.copilotkit.ai/ingest
{ event, properties: { ...caller, distinct_id, package }, ts }
If the lambda expects a richer envelope, update the single JSON.stringify
in lib/telemetry.ts.
Privacy invariants:
- Opt-out toggle short-circuits before any network call (verified by test).
- Properties are scoped to event metadata only — no message content, agent
state, prompts, completions, banner markdown. Negative test pins the wire.
- Anonymous distinct ID (UUID v4 in localStorage) set on inspector load and
propagated onto banner CTA links as ?posthog_distinct_id=<uuid> so the
destination site can posthog.alias() and close the
banner_viewed → banner_clicked → signup_attributed funnel. URL param
suppressed when opted out.
- Console disclosure on first inspector mount and runtime startup. Both
link to https://docs.copilotkit.ai/telemetry.
Plan gaps addressed:
- CTA name on banner_clicked: cta:'body'|'dismiss' (click location) plus
optional cta_label read defensively. Sam: confirm dismiss treatment.
- De-anon opt-out folded into the single toggle. Docs say so explicitly.
- banner_viewed dedup: per-instance Set<string> keyed by timestamp.
- EPIC consent / pixel review: out of scope for this PR; flagged at merge.
Deferred for V1.1:
- Wire body shape (Ben).
- Event-type allowlist for oss.inspector.* (Ben — oss-path-to-production).
- posthog_distinct_id URL-param key name (Ben/Tyler/website team).
Refs https://linear.app/copilotkit/issue/OSS-96
Mirror of #4430 by @MalaikaAbb.
Adds an agentId note for non-default agents, replaces `agent.id` with
`agent.agentId`, corrects the `@copilotkit/shared/v2` import to
`@copilotkit/shared`, and adds the missing `[agent]` dependency to a
useEffect.
The /langgraph/advanced/persistence/* and /crewai-flows/persistence/* pages
documented the older threadId/setThreadId mechanism. They're replaced by the
useThreads-based /langgraph/threads and /crewai-flows/threads pages backed by
the shared threads snippet.
Adds redirects from the deleted paths (and their legacy /langgraph/persistence
aliases) to the new framework-scoped /threads pages, and drops "persistence"
from the crewai-flows sidebar.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Updates the docs navbar and showcase shell-docs brand-nav so the "Talk
to engineers" CTA points at copilotkit.ai/talk-to-an-engineer instead
of the deprecated /contact-us endpoint.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds a Callout linking to "Build Interactive Agents with Generative UI"
(free DeepLearning.AI short course) on the two Generative UI overview
pages and the six lesson-specific pattern pages (display-only,
tool-rendering, state-rendering, open-generative-ui, a2ui, mcp-apps),
mirrored across docs/ and showcase/shell-docs/.
Add a subtle footer to the docs root page with MCP server,
llms.txt, and Pathfinder URLs. Visible to humans but designed
for AI agents that hit the root docs page.
Add an llms.txt section to the shared mcp-server-setup snippet
so /coding-agent-setup and /coding-agents pages tell users
where to find it for tools that don't speak MCP.
Delete stale docs/public/llms.txt and docs/public/llms-full.txt.
Replace with 301 redirects to mcp.copilotkit.ai where the
files are now generated and served as the source of truth.
## Summary
- Extract `CopilotKitContext` and `useCopilotKit` into standalone
`context.ts` in react-core, enabling cross-platform reuse without web
dependencies
- Add new `@copilotkit/react-native` package with lightweight provider,
polyfills, and streaming fetch
- All hooks (`useAgent`, `useFrontendTool`, `useHumanInTheLoop`, etc.)
are re-exported directly from react-core — no reimplementation
## Motivation
CopilotKit's React hooks are platform-agnostic, but the barrel import in
`@copilotkit/react-core` pulls in web-only dependencies (Radix UI, Lit,
A2UI renderer, react-dom, CSS). This makes the package unusable in React
Native without extensive Metro shimming.
By extracting the React context into a standalone entry point
(`@copilotkit/react-core/v2/context`), the new
`@copilotkit/react-native` package can provide its own lightweight
provider while reusing all existing hooks.
## What's in `@copilotkit/react-native`
| Export | Description |
|--------|-------------|
| `CopilotKitProvider` | Lightweight provider — no DOM, CSS, Radix, Lit,
or A2UI deps |
| `installStreamingFetch()` | XHR-based streaming fetch for
`response.body.getReader()` support |
| `@copilotkit/react-native/polyfills` | All polyfills at once
(ReadableStream, TextEncoder, crypto, DOMException, window.location) |
| `@copilotkit/react-native/polyfills/*` | Granular per-polyfill imports
(`/streams`, `/encoding`, `/crypto`, `/dom`, `/location`) for users who
need to avoid overriding their own shims |
| `useAgent`, `useFrontendTool`, etc. | Re-exported from react-core
(shared context) |
## Usage
```tsx
// index.js (entry point, before other imports)
import "@copilotkit/react-native/polyfills";
import { installStreamingFetch } from "@copilotkit/react-native";
installStreamingFetch();
// App.tsx
import { CopilotKitProvider, useAgent, useCopilotKit } from "@copilotkit/react-native";
function App() {
return (
<CopilotKitProvider runtimeUrl="https://your-server/api/copilotkit">
<ChatScreen />
</CopilotKitProvider>
);
}
```
## Test plan
- [x] `nx run react-core:build` passes
- [x] `nx run @copilotkit/react-native:build` passes
- [x] `nx run react-core:test` — all 1153 tests pass
- [x] Manual test in React Native app (tested during development with
bare RN 0.84 project)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Several shared snippets linked to paths that no longer exist:
- /generative-ui/specs/* → /learn/generative-ui/specs/* (specs moved)
- /premium/threads → /threads (page is at root, not under /premium)
- /premium/inspector → /inspector (page is at root, not under /premium)
Because these snippets are inlined into many integration pages,
each broken link multiplied across the site and accounted for the
majority of internal-referrer 404s on docs.copilotkit.ai.
Renames the proxy-config field, the field on the agent instance, and
all matching references in tests and the useCopilotKit reference page.
"runtime" reads more naturally now that the proxy concept is documented
as "a local agent that delegates to a runtime agent" rather than
"remote agent" — the latter conflates with `remoteAgents` (the
registry of agents fetched from the runtime), which keeps its name.
No behavioral change; the field still controls the outbound REST URL
used by the proxy.
Threads pages: drop @copilotkit/cli-vnext alias for the canonical
@copilotkit/cli, bump react-core minimum from v1.50 to v1.56, and trim
the redundant "(via Copilot Cloud or self-hosted)" parenthetical from
the Prerequisites bullets.
Self-hosting snippet: restructure the "What is this?" intro into a
labeled "What you bring" / "What the chart deploys" pair (with a
component table for ports), tighten the kubeconfig-check sentence, and
collapse the local-validation Callout into two parallel options (bundled
overlay vs one-shot script). Drop the "If none of these apply, use
Copilot Cloud" line — readers who land on /premium/self-hosting have
already opted in.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The self-hosting pages are heavy on helm install, kubectl apply, and
shell-script invocations — without these in KNOWN_INSTALL_TYPES they
all bucket as "code" and the self-hosting funnel goes blind to install
method. Skips sudo deliberately: it's a wrapper that would swallow the
real installer in the funnel.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The Threads, Intelligence Platform explainer, multi-conversation
tutorial, useThreads reference, and the shared threads snippet were
restored at their pre-rollout state, so they carried no OpsPlatformCTA
while peer pages picked one up earlier on this branch. Wires each
restored page to the new try_for_free_clicked event with snake_case
surface identifiers, and fixes the "a Enterprise" → "an Enterprise"
article mismatch the rebrand left in both self-hosting pages.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Renames the platform name across docs prose, CTA copy, frontmatter
descriptions, and the Learn landing card. Three patterns were collapsed
into one canonical form:
- "CopilotKit platform" → "Enterprise Intelligence Platform"
- "CopilotKit Intelligence Platform" → "Enterprise Intelligence Platform"
- "Intelligence Platform" → "Enterprise Intelligence Platform"
URL slugs (/learn/intelligence-platform, /premium/intelligence-platform)
are intentionally unchanged. The CTA component button label
("Get Intelligence free") is also unchanged.