Skip to content

docs(website): add an agent runtimes docs section - #913

Merged
blove merged 2 commits into
mainfrom
blove/docs-runtimes-section
Sep 1, 2026
Merged

docs(website): add an agent runtimes docs section#913
blove merged 2 commits into
mainfrom
blove/docs-runtimes-section

Conversation

@blove

@blove blove commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Adds a runtimes docs library to the website, one section per measured AG-UI runtime. apps/website/content/docs/ had no runtimes content at all, so nothing on the site described the three examples under cockpit/runtimes/.

Structural assumption (flip this if you disagree)

One runtimes library with a section per runtime, mirroring how apps/website/src/lib/docs-config.ts structures the existing libraries:

/docs/runtimes/getting-started/introduction
/docs/runtimes/aws-strands/{overview,quickstart,how-it-connects}
/docs/runtimes/microsoft-agent-framework/{overview,quickstart,how-it-connects}
/docs/runtimes/mastra/{overview,quickstart,how-it-connects}

A getting-started/introduction page is not optional here: libraryIntroPath() is what the breadcrumb and the BreadcrumbList structured data both point at for every library.

The alternative — three separate top-level libraries — would triple the sidebar entries in the docs nav for what is really one comparison.

Finding: docsPath does not resolve anywhere, for any product

The runtimes descriptors declare docsPath: '/docs/runtimes/core-capabilities/<topic>/overview/<lang>'. Before writing anything I checked where the existing products' docsPath values resolve in production. They do not:

URL Status
threadplane.ai/docs/langgraph/core-capabilities/streaming/overview/python 404
examples.threadplane.ai/docs/langgraph/core-capabilities/streaming/overview/python 404
examples.threadplane.ai/langgraph/core-capabilities/streaming/overview/python 404
threadplane.ai/docs/langgraph/guides/streaming (the real website route) 200

The website serves a three-segment docs route, /docs/[library]/[section]/[slug]. Every docsPath in the repo is five segments. Grepping the consumers, docsPath is declared in libs/cockpit-shell/src/lib/capability-contract.ts, copied through apps/cockpit/src/lib/route-resolution.ts into CapabilityPresentation, and then rendered as a link nowhere. It is dead metadata under a repo-wide convention that no route serves, and cockpit/*/matrix.spec.ts asserts its exact shape.

So the runtimes docsPath values are not specially broken — they are consistent with every other product. This PR therefore leaves all descriptors untouched, which also means no generator artifacts and no drift-check surface. Pointing only the runtimes descriptors at the new website URLs would have made runtimes the one product that breaks the convention, for a link that still is not rendered.

Wiring docsPath to a real destination is a separate change and worth doing — it needs a decision about whether the cockpit deep-links into the website or a five-segment route is added. Happy to take that next.

Content

Source of truth was the measured matrix in content/docs/choosing-an-adapter/index.mdx, docs/superpowers/plans/2026-08-31-runtime-portability-matrix.md, the two cockpit/runtimes/*/python/docs/guide.md guides, and — for Mastra, which has no guide — deployments/ag-ui-mastra/README.md plus agents.mjs.

Page Words
runtimes/getting-started/introduction 647
runtimes/aws-strands/overview 426
runtimes/aws-strands/quickstart 414
runtimes/aws-strands/how-it-connects 501
runtimes/microsoft-agent-framework/overview 402
runtimes/microsoft-agent-framework/quickstart 410
runtimes/microsoft-agent-framework/how-it-connects 438
runtimes/mastra/overview 500
runtimes/mastra/quickstart 513
runtimes/mastra/how-it-connects 565

Per-runtime honesty is kept rather than smoothed: Strands state is documented as snapshot-only and opt-in per ToolBehavior hook, with the full-object requirement called out; subagents are red on all three with the three different upstream reasons named; the stale ag-ui-strands PyPI wheel and the git pin are explained.

Mastra is thinner than the others, but its hosted demo is live

Mastra has no docs/guide.md, so its three pages are assembled from the deployment README, the agent source, and the matrix. I did not pad the gap — those pages carry less first-party prose than the Strands and MAF ones by design.

An earlier revision of this PR warned that the hosted Mastra demo had no reachable backend. That was accurate when measured (AG_UI_MASTRA_URL was unset and the proxy returned 500 no upstream configured for topic mastra) and is no longer true: the Railway service, volume, domain, and Vercel env var have since been provisioned. Re-verified directly against production before rewriting:

POST https://examples.threadplane.ai/runtimes/mastra/agent   (valid RunAgentInput)
  data: {"type":"RUN_STARTED",...}
  data: {"type":"TEXT_MESSAGE_CHUNK","delta":"Ready"}
  data: {"type":"TEXT_MESSAGE_CHUNK","delta":"."}
  data: {"type":"RUN_FINISHED",...,"usage":[{"inputTokens":670,"outputTokens":4,...}]}
  [HTTP 200]

A real model call end to end. Commit 177799eb therefore drops the caveat, gives the Mastra overview the same See it live callout the Strands and MAF overviews use, and keeps the local Quickstart as ordinary run-it-yourself content rather than a workaround.

It also corrects content/docs/choosing-an-adapter/index.mdx, which still said the Mastra row was "not yet running in the hosted demo deployment". That page is the source of truth these new pages cross-link, so leaving it contradicting them was not an option. The genuinely durable distinction is kept: Mastra is not served by the shared FastAPI deployment, because upstream ships no plain AG-UI HTTP endpoint.

Also changed

  • LibraryMark gains a layers glyph for the new library (MARKS is Record<LibraryId, …>, so it is exhaustive).
  • /docs index gains one helper link under "Pick your backend": Running a non-LangGraph backend? Agent runtimes →.

Verification

  • npx vitest run --config vite.config.mts in apps/website: 390 passed, 48 files, 0 failed — re-run green after commit 177799eb. Includes the configured-page sweep, the no-orphan-MDX sweep, description uniqueness, the ≤160-char clamp, sitemap coverage, internal-link validity, and the docs structured-data suite.
    • One transient failure worth noting: sitemap-dates.spec.ts failed while the new MDX files were untracked, because it dates routes from git history. Committing them fixed it. Anyone adding docs pages will hit this.
  • npx next build: clean, docs route now prerenders 121 paths (was 111).
  • npx nx lint website: 0 errors (31 pre-existing warnings).
  • Dev-server render check: all 10 new pages return 200; the sidebar renders all four sections on every page. Re-run for the three Mastra pages plus /docs/choosing-an-adapter after commit 177799eb.
  • Link sweep of every href in the new content — 13 internal (200 against the dev server) and 13 external (200) — script-checked, not eyeballed.
  • Register: zero contractions, no emoji; all 10 descriptions 93–146 chars.

Not auto-merged.

🤖 Generated with Claude Code

@vercel

vercel Bot commented Sep 1, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated
threadplane Ignored Ignored Preview Sep 1, 2026 2:52am UTC

Request Review

@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Claude finished @blove's task in 0s —— View job


I'll analyze this and get back to you.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Automated approval: this PR received an intelligent (AI) code review. See the review comments on this PR.

@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Claude finished @blove's task in 0s —— View job


I'll analyze this and get back to you.

@blove
blove enabled auto-merge (squash) September 1, 2026 02:50
blove and others added 2 commits August 31, 2026 19:51
One `runtimes` docs library with a section per measured AG-UI runtime —
AWS Strands, Microsoft Agent Framework, and Mastra — each carrying an
overview, a local quickstart, and a page recording the wire conventions
measured on 2026-08-31.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The Mastra Railway service and AG_UI_MASTRA_URL are now provisioned, and
POST examples.threadplane.ai/runtimes/mastra/agent returns a real
RUN_STARTED -> TEXT_MESSAGE_CHUNK -> RUN_FINISHED stream. Drop the
hosted-backend caveat and the local-quickstart-as-workaround framing, and
match the See-it-live callout the Strands and MAF overviews use. Also
correct the now-false 'not yet running in the hosted demo deployment'
note on the runtime matrix.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@blove
blove force-pushed the blove/docs-runtimes-section branch from 177799e to fbe43ee Compare September 1, 2026 02:52
@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Claude finished @blove's task in 0s —— View job


I'll analyze this and get back to you.

@blove
blove merged commit 8c48de1 into main Sep 1, 2026
6 checks passed
blove added a commit that referenced this pull request Sep 1, 2026
…untimes

The cockpit -> docs direction shipped with both libraries (COCKPIT_DOCS_LINKS
covers all six deep-agents entries and all four runtimes entries), but the
reverse table only knew the five first-iteration pages. Every deep-agents page
(#937) and every runtimes page (#913) sent its Run/Code/API buttons to Cockpit
home instead of the demo the page describes.

Add the 16 missing entries:

- deep-agents: the five capability pages map to their core-capabilities topic;
  the introduction maps to deep-agents/getting-started/overview.
- runtimes: all three pages of each runtime section (overview, quickstart,
  how-it-connects) map to that runtime's one demo, since a single demo serves
  them equally well; the introduction maps to runtimes/getting-started/overview.

Also add deep-agents and runtimes to AnalyticsLibrary. Without it every handoff
from these two libraries would have been attributed to 'unknown', so the new
links would be invisible in the funnel they exist to feed.

Each of the ten destination URLs was checked against production and returns a
hard 200. The check discriminates: an unknown topic 307s to the fallback and an
unknown product 500s, so the 200s are real pages rather than SPA soft-200s.

Tests: the exact pin is updated, plus four guards — every key names a page that
exists in docs-config (a typo'd key is otherwise invisible: the page just keeps
the Cockpit-home fallback), the deep-agents/runtimes links round-trip against
COCKPIT_DOCS_LINKS, the analytics library is no longer 'unknown', and each
runtime section's three pages resolve to the same demo. All four were
mutation-tested to confirm they fail when the mapping is wrong.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
blove added a commit that referenced this pull request Sep 1, 2026
…untimes

The cockpit -> docs direction shipped with both libraries (COCKPIT_DOCS_LINKS
covers all six deep-agents entries and all four runtimes entries), but the
reverse table only knew the five first-iteration pages. Every deep-agents page
(#937) and every runtimes page (#913) sent its Run/Code/API buttons to Cockpit
home instead of the demo the page describes.

Add the 16 missing entries:

- deep-agents: the five capability pages map to their core-capabilities topic;
  the introduction maps to deep-agents/getting-started/overview.
- runtimes: all three pages of each runtime section (overview, quickstart,
  how-it-connects) map to that runtime's one demo, since a single demo serves
  them equally well; the introduction maps to runtimes/getting-started/overview.

Also add deep-agents and runtimes to AnalyticsLibrary. Without it every handoff
from these two libraries would have been attributed to 'unknown', so the new
links would be invisible in the funnel they exist to feed.

Each of the ten destination URLs was checked against production and returns a
hard 200. The check discriminates: an unknown topic 307s to the fallback and an
unknown product 500s, so the 200s are real pages rather than SPA soft-200s.

Tests: the exact pin is updated, plus four guards — every key names a page that
exists in docs-config (a typo'd key is otherwise invisible: the page just keeps
the Cockpit-home fallback), the deep-agents/runtimes links round-trip against
COCKPIT_DOCS_LINKS, the analytics library is no longer 'unknown', and each
runtime section's three pages resolve to the same demo. All four were
mutation-tested to confirm they fail when the mapping is wrong.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
blove added a commit that referenced this pull request Sep 1, 2026
…untimes

The cockpit -> docs direction shipped with both libraries (COCKPIT_DOCS_LINKS
covers all six deep-agents entries and all four runtimes entries), but the
reverse table only knew the five first-iteration pages. Every deep-agents page
(#937) and every runtimes page (#913) sent its Run/Code/API buttons to Cockpit
home instead of the demo the page describes.

Add the 16 missing entries:

- deep-agents: the five capability pages map to their core-capabilities topic;
  the introduction maps to deep-agents/getting-started/overview.
- runtimes: all three pages of each runtime section (overview, quickstart,
  how-it-connects) map to that runtime's one demo, since a single demo serves
  them equally well; the introduction maps to runtimes/getting-started/overview.

Also add deep-agents and runtimes to AnalyticsLibrary. Without it every handoff
from these two libraries would have been attributed to 'unknown', so the new
links would be invisible in the funnel they exist to feed.

Each of the ten destination URLs was checked against production and returns a
hard 200. The check discriminates: an unknown topic 307s to the fallback and an
unknown product 500s, so the 200s are real pages rather than SPA soft-200s.

Tests: the exact pin is updated, plus four guards — every key names a page that
exists in docs-config (a typo'd key is otherwise invisible: the page just keeps
the Cockpit-home fallback), the deep-agents/runtimes links round-trip against
COCKPIT_DOCS_LINKS, the analytics library is no longer 'unknown', and each
runtime section's three pages resolve to the same demo. All four were
mutation-tested to confirm they fail when the mapping is wrong.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
blove added a commit that referenced this pull request Sep 1, 2026
…untimes (#938)

The cockpit -> docs direction shipped with both libraries (COCKPIT_DOCS_LINKS
covers all six deep-agents entries and all four runtimes entries), but the
reverse table only knew the five first-iteration pages. Every deep-agents page
(#937) and every runtimes page (#913) sent its Run/Code/API buttons to Cockpit
home instead of the demo the page describes.

Add the 16 missing entries:

- deep-agents: the five capability pages map to their core-capabilities topic;
  the introduction maps to deep-agents/getting-started/overview.
- runtimes: all three pages of each runtime section (overview, quickstart,
  how-it-connects) map to that runtime's one demo, since a single demo serves
  them equally well; the introduction maps to runtimes/getting-started/overview.

Also add deep-agents and runtimes to AnalyticsLibrary. Without it every handoff
from these two libraries would have been attributed to 'unknown', so the new
links would be invisible in the funnel they exist to feed.

Each of the ten destination URLs was checked against production and returns a
hard 200. The check discriminates: an unknown topic 307s to the fallback and an
unknown product 500s, so the 200s are real pages rather than SPA soft-200s.

Tests: the exact pin is updated, plus four guards — every key names a page that
exists in docs-config (a typo'd key is otherwise invisible: the page just keeps
the Cockpit-home fallback), the deep-agents/runtimes links round-trip against
COCKPIT_DOCS_LINKS, the analytics library is no longer 'unknown', and each
runtime section's three pages resolve to the same demo. All four were
mutation-tested to confirm they fail when the mapping is wrong.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
@blove
blove deleted the blove/docs-runtimes-section branch September 3, 2026 22:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant