diff --git a/apps/website/content/blog/2026-08-31-we-measured-the-runtime-swap.mdx b/apps/website/content/blog/2026-08-31-we-measured-the-runtime-swap.mdx index 76af8a05f..6b8074848 100644 --- a/apps/website/content/blog/2026-08-31-we-measured-the-runtime-swap.mdx +++ b/apps/website/content/blog/2026-08-31-we-measured-the-runtime-swap.mdx @@ -29,7 +29,7 @@ The short version is that the contract held where it mattered and broke in two p Each runtime got a server standing on its upstream AG-UI integration, not on anything we wrote to make the numbers look good. Microsoft Agent Framework runs behind `agent-framework-ag-ui`. Strands runs behind the community `ag-ui-strands` bridge, pinned to a git reference because the published release crashes on multi-agent routes. -Mastra needed about two hundred lines of Node hosting code, because the upstream package ships an in-process bridge and a CopilotKit mount rather than a plain HTTP endpoint. +Mastra needed about two hundred lines of Node hosting code, because the upstream package ships an in-process bridge and a mount for its own chat frontend, rather than a plain HTTP endpoint. Every server was driven with live model calls until it produced each surface we cared about: streaming text, a tool call, shared state, and a human approval. The raw event stream from each of those runs was saved. diff --git a/apps/website/content/docs/runtimes/mastra/how-it-connects.mdx b/apps/website/content/docs/runtimes/mastra/how-it-connects.mdx index bab64d51a..1c366e411 100644 --- a/apps/website/content/docs/runtimes/mastra/how-it-connects.mdx +++ b/apps/website/content/docs/runtimes/mastra/how-it-connects.mdx @@ -9,7 +9,7 @@ This page records the AG-UI wire behavior measured for Mastra on 2026-08-31. It ## Transport is Threadplane's, not upstream's -`@ag-ui/mastra` ships an in-process `MastraAgent` bridge and a CopilotKit runtime mount, and no plain AG-UI HTTP endpoint. The service in [`deployments/ag-ui-mastra`](https://github.com/cacheplane/angular-agent-framework/tree/main/deployments/ag-ui-mastra) supplies the missing endpoint. +`@ag-ui/mastra` ships an in-process `MastraAgent` bridge and a mount for its own chat frontend runtime, and no plain AG-UI HTTP endpoint. The service in [`deployments/ag-ui-mastra`](https://github.com/cacheplane/angular-agent-framework/tree/main/deployments/ag-ui-mastra) supplies the missing endpoint. | Route | Method | Auth | Notes | |---|---|---|---| diff --git a/apps/website/content/docs/runtimes/mastra/overview.mdx b/apps/website/content/docs/runtimes/mastra/overview.mdx index 21ade5f11..7b73d134e 100644 --- a/apps/website/content/docs/runtimes/mastra/overview.mdx +++ b/apps/website/content/docs/runtimes/mastra/overview.mdx @@ -25,7 +25,7 @@ The hosted example runs at [examples.threadplane.ai/runtimes/mastra](https://exa ## Upstream ships no HTTP endpoint -`@ag-ui/mastra` provides an in-process `MastraAgent` bridge and a CopilotKit runtime mount. It does not provide a plain AG-UI HTTP endpoint, which is what `@threadplane/ag-ui` connects to. +`@ag-ui/mastra` provides an in-process `MastraAgent` bridge and a mount for its own chat frontend runtime. It does not provide a plain AG-UI HTTP endpoint, which is what `@threadplane/ag-ui` connects to. Threadplane therefore maintains a small hosting service, [`deployments/ag-ui-mastra`](https://github.com/cacheplane/angular-agent-framework/tree/main/deployments/ag-ui-mastra). It accepts `POST /agent/`, calls `MastraAgent.run(input)`, and writes one Server-Sent Events frame per AG-UI event. It is deliberately hand-written rather than generated: the Python generator targets one aggregated FastAPI process, and Mastra is a different language on a different hosting lane. diff --git a/cockpit/runtimes/mastra/angular/docs/guide.md b/cockpit/runtimes/mastra/angular/docs/guide.md index d60340a11..7d48675aa 100644 --- a/cockpit/runtimes/mastra/angular/docs/guide.md +++ b/cockpit/runtimes/mastra/angular/docs/guide.md @@ -29,8 +29,9 @@ store would orphan every pending approval across HTTP requests. ## The hosting service (Node lane) Upstream `@ag-ui/mastra` ships no plain AG-UI HTTP endpoint — only the -in-process `MastraAgent` bridge and a CopilotKit runtime mount. The backend -is therefore the hand-written Node service `deployments/ag-ui-mastra/`: +in-process `MastraAgent` bridge and a mount for its own chat frontend +runtime. The backend is therefore the hand-written Node service +`deployments/ag-ui-mastra/`: `server.mjs` subscribes to `MastraAgent.run(input)` (the raw AG-UI event Observable) and encodes each event as one SSE `data:` frame — exactly what `@ag-ui/client`'s `HttpAgent` consumes. It mirrors the Python lane's diff --git a/deployments/ag-ui-mastra/README.md b/deployments/ag-ui-mastra/README.md index 1e84bcd9c..3291c4e69 100644 --- a/deployments/ag-ui-mastra/README.md +++ b/deployments/ag-ui-mastra/README.md @@ -4,10 +4,11 @@ Hand-written Node hosting service for the **Mastra** AG-UI runtime — Lane B of the runtime-portability matrix (`docs/superpowers/plans/2026-08-31-runtime-portability-matrix.md`). Upstream `@ag-ui/mastra` ships **no** plain AG-UI HTTP endpoint (only the -in-process `MastraAgent` bridge and a CopilotKit runtime mount). This service -is that missing endpoint: `POST /agent/` → `MastraAgent.run(input)` → -one SSE `data:` frame per AG-UI event. It is deliberately hand-written, not -generated: the Python generator (`scripts/generate-ag-ui-deployment-config.ts`) +in-process `MastraAgent` bridge and a mount for its own chat frontend +runtime). This service is that missing endpoint: `POST /agent/` → +`MastraAgent.run(input)` → one SSE `data:` frame per AG-UI event. It is +deliberately hand-written, not generated: the Python generator +(`scripts/generate-ag-ui-deployment-config.ts`) targets one aggregated FastAPI process, and Mastra is a different language and hosting lane. diff --git a/deployments/ag-ui-mastra/server.mjs b/deployments/ag-ui-mastra/server.mjs index 0a1b3a023..a3caa4dd3 100644 --- a/deployments/ag-ui-mastra/server.mjs +++ b/deployments/ag-ui-mastra/server.mjs @@ -2,8 +2,8 @@ // AG-UI HTTP/SSE hosting service for Mastra agents (Lane B). // // Upstream @ag-ui/mastra ships NO plain AG-UI HTTP endpoint — only the -// in-process `MastraAgent` bridge and a CopilotKit runtime mount. This -// hand-written service is the missing piece: it subscribes to +// in-process `MastraAgent` bridge and a mount for its own chat frontend +// runtime. This hand-written service is the missing piece: it subscribes to // `MastraAgent.run(input)` (the raw AG-UI event Observable) and encodes each // event as an SSE `data: {json}` frame — exactly what @ag-ui/client's // HttpAgent consumes, and exactly what the Python lane's FastAPI bridges diff --git a/docs/superpowers/plans/2026-08-31-runtime-portability-matrix.md b/docs/superpowers/plans/2026-08-31-runtime-portability-matrix.md index a8e066559..3872d4328 100644 --- a/docs/superpowers/plans/2026-08-31-runtime-portability-matrix.md +++ b/docs/superpowers/plans/2026-08-31-runtime-portability-matrix.md @@ -136,7 +136,7 @@ our own demo-backend convention; no third party emits it. | runtime | cost | notes | |---|---|---| | Microsoft | ~30 min | `agent-framework-ag-ui` is the real bridge, not the upstream dojo shim. **Azure creds NOT required** — plain `OPENAI_API_KEY`. Deps co-resolve with the existing lane. | -| Mastra | ~15 min | Upstream ships **no** plain AG-UI HTTP endpoint — only in-process `MastraAgent` + a CopilotKit runtime mount. A ~200-line Node shim was wire-correct first try. | +| Mastra | ~15 min | Upstream ships **no** plain AG-UI HTTP endpoint — only an in-process `MastraAgent` and a mount for its own chat frontend runtime. A ~200-line Node shim was wire-correct first try. | | Strands | ~5 min | ⚠️ **PyPI `ag-ui-strands` 0.3.0 is stale and crashes on multi-agent routes** — install from a git ref, not the release. | ## Phase 2 sequencing (approved 2026-08-31) diff --git a/docs/superpowers/specs/2026-08-27-basecamp-homepage-design.md b/docs/superpowers/specs/2026-08-27-basecamp-homepage-design.md index 0850000f9..a24a4dfa6 100644 --- a/docs/superpowers/specs/2026-08-27-basecamp-homepage-design.md +++ b/docs/superpowers/specs/2026-08-27-basecamp-homepage-design.md @@ -162,8 +162,8 @@ committed. Three corrections to the design content: ("most packages MIT, chat commercially licensed") — it is now an unqualified yes: *"Can I use every package commercially without a license fee?" → Yes, MIT.* The old licensing FAQ item is gone from main; do not resurrect it. -- **The CopilotKit migration question no longer exists.** #881 scrubbed - CopilotKit from the entire site (FAQ item, logo, differentiator copy). The +- **The competitor-migration question no longer exists.** #881 scrubbed the + competitor's name from the entire site (FAQ item, logo, differentiator copy). The surviving-FAQ list above reflects that; reintroducing the comparison would run against a deliberate decision on main. - **The telemetry Yes-wall row strengthens.** Main's language is now "package