Releases: cacheplane/angular-agent-framework
Release list
v0.1.0
The first minor release. Through v0.0.66 the project bumped only the patch component; a backlog of breaking changes made that counter misleading, so releases now move the minor.
Breaking changes
- chat:
provideChat(),ChatConfigandCHAT_CONFIGare removed. No component ever read the token, so calling it configured nothing —<chat>is configured through its inputs. Delete the call and the import. - chat:
@langchain/coreis no longer a peer dependency; nothing in the published package imports it. It remains a peer of@threadplane/langgraph, so keep installing it alongside the adapter. - middleware: the JavaScript router's default
toolsNodeis nowserver_tools.toolscannot be a node name on a graph that usesclientToolsChannel(), because LangGraph shares one namespace between node names and state channels. - langgraph:
streamErrorAt().classificationis now.kind, carrying theAgentErrorkind rather than the error's constructor name. - langgraph:
LangGraphAgent.interruptis required rather than optional; the adapter always provides it.
Also in this release
provideAgent() now provides AGENT_LIFECYCLE; the lifecycle registry is root-provided so agents register regardless of injector depth; MockAgentTransport.emit()/emitError()/close() are awaitable and gain flush(); both adapters warn in development when several provideAgent(ref, …) calls share an injector; provideFakeAgent() accepts a script; render resolves repeated-element readiness, props, action params and the render host in each row's own scope, validates JSON-pointer paths, and implements confirm/preventDefault/onSuccess/onError.
0.1.0 (2026-09-08)
🚀 Features
- one route family — every capability is a docs page (#1010)
- ag-ui: scriptable provideFakeAgent() and a duplicate-AgentRef warning (#1053)
- chat: public scrollToBottom() on ChatComponent; the stage pins through it (#1045)
⚠️ chat: remove provideChat(), fix app-level markdown registry overrides, and three API cleanups (#1055)- docs: ExampleCode include + guards; retire the walkthrough renderer (#1025)
- examples/chat: executable approval tools behind the hero's pause (#1011)
- examples/chat: /stage — the real chat beside the real devtools, seekable to any recorded time (live-stage plan 2 of 3) (#1030)
- growth: add inspectable company research pilot (#1009)
- growth: explain company capture failures (#1015)
- growth: attribute campaign sends per template with a bounded Resend tag (#1020)
- growth: enrich install activations and report developer journeys (#1027)
- growth: integrate gated Dawn company enrichment (#1028)
- growth: cut over company enrichment to Dawn (#1041)
- growth: schedule founder emails on Pacific business mornings (#1044)
- lifecycle: founder session offer as step one, one-word unsubscribe link (#1012)
- lifecycle: add optional bounded Firecrawl company capture (#1017)
- lifecycle: integrate self-hosted Firecrawl browser scraper (#1019)
- lifecycle: fulfillment mail in the campaign register (#1018)
- lifecycle: print the business postal address in every email footer (#1021)
- website: homepage restructure (live-stage plan 1 of 3) (#1024)
- website: whitepaper block and toast on the form kit; old form CSS removed (#1026)
- website: the stage on the homepage — one real run, scrubbed by scroll (live-stage plan 3 of 3) (#1032)
- website: the stage rail is a completeness ledger (#1043)
- website: the social card shows the product, and the brand gets a real mark (#1047)
- website: retire the last stale positioning from the brand assets (#1051)
- website: architecture diagram — the UI layer between your users and your agents (#1048)
- website: the homepage closes on a quiet open-source strip (#1057)
- website: ATC theme spike — aviation yellow, Archivo Black, scope navy (#1058, #15253, #004090, #1048, #963, #1057)
🩹 Fixes
- growth: validate telemetry and align PostHog dashboards (#1050)
- langgraph: lifecycle token, error kind, root registry, required interrupt, awaitable mock transport (#1054)
- libs: make the type-tests targets runnable again (#1064)
- lifecycle: ground company research in substantive evidence (add9e6801)
⚠️ middleware: server_tools router default; Python emit_custom_event helper (#1052)- render: honor every ActionBinding field, per-item visible, real element lifecycle and state paths (#1056)
- render: resolve repeated element readiness and props in the row's own scope (#1062)
- website: pin the stage hold one millisecond inside it so the frame reports pause (#1034, #1032)
- website: ATC theme follow-ups — favicon, social cards, whitepapers (#1059, #004090, #15253)
- website: give arch-flow console badges an on-dark palette (#1060, #1, #15253)
⚠️ Breaking Changes
- chat: remove provideChat(), fix app-level markdown registry overrides, and three API cleanups (#1055)
- middleware: server_tools router default; Python emit_custom_event helper (#1052)
the default is now 'server_tools'. Rename your server tool
node to server_tools and drop the override, or keep the override pointing at
whatever name your node uses. There is no shim. The Python package's
route_after_agent() keeps tools_node="tools"; Python LangGraph has no such
namespace collision.
Two integration specs record the behavior: one invokes a graph whose ToolNode
is named server_tools with no override and asserts the tool actually ran (it
failed with "Branch condition returned unknown or null destination" before the
fix), and one pins the addNode('tools', …) throw so the reason is written down.
Co-Authored-By: Claude Fable 5.1 noreply@anthropic.com
v0.0.66
0.0.66 (2026-09-05)
🚀 Features
- growth: add synthetic Dawn research app for LangSmith (#1003)
- growth: link install and development runtime to founder outreach (#1004)
- telemetry: collect installs and development progress for founder outreach (#1007)
- website: lead-form kit and footer newsletter fix (#994)
- website: contact page on the form kit; enterprise form merges into it (#995)
- website: replace the Yes wall with the reliability band (#996)
- website: homepage rebuild — category hero, live demo, install dialog (#997)
- website: phone-width hero poster, re-recorded desktop poster, redesigned OG card (#1002)
🩹 Fixes
- growth: accept Resend's current webhook payload shape (#989)
- growth: accept Resend webhook payloads that carry a headers array; log every outcome (#991)
- hero: drop the internal tool name from the walkthrough prompt (#1006)
- langgraph: adopt a transport-created thread id instead of aborting the run (#1005)
- langgraph, ag-ui: give each AgentRef its own agent instead of aliasing one token (#1000)
- release: update internal peer ranges with synchronized versions (#1007)
- telemetry: keep contributor workspace installation inert (#1007)
- telemetry: provide inert install bridges in source checkouts (#1007)
- telemetry: exclude automated browsers from developer collection (#1007)
- website: readable code panes, self-healing hero handshake, focus ring, mobile hero (#998)
- website: restore the works-with ribbon and subhead highlight; retime the hero walkthrough (#999)
v0.0.65
🚀 Features
- Mastra runtime Lane B — ag-ui-mastra Node service, proxy map, rt-mastra example, deploy workflow (#903, #899)
- add operational sidebar control plane (#921)
- unify docs and cockpit workspace (#949)
- unify docs and runtime control plane (#963)
- ag-ui: upgrade @ag-ui/* to 0.0.59 and send protocol-standard top-level resume (#891)
- ag-ui: consume the protocol's SUBAGENT_* events and subagentRunId attribution (#955)
- cockpit: per-topic framework adapters in the AG-UI deployment generator (#894)
- cockpit: Microsoft Agent Framework runtime example (cockpit/runtimes) (#896, #888, #889, #891)
- cockpit: AWS Strands runtime example (rt-strands) (#898)
- cockpit: make Run discoverable from Code (#934)
- cockpit: ag-ui subagents demo emits the protocol's SUBAGENT_* events (#962)
- e2e-harness: restore aimock — replay+record wrapper, drift infra, scrub repairs (#947)
- e2e-harness: bucket metadata-hash mismatches as promptChanged in the drift differ (#951)
- examples: ag-ui demo emits the protocol's SUBAGENT_* events (#964)
- examples/chat: /hero route — replayed LangGraph walkthrough with live takeover (#976)
- runtimes: strands subagent delegation demo with standard SUBAGENT_* emission (#956)
- runtimes: maf subagent delegation demo with queue-merged SUBAGENT_* emission (#957)
- runtimes: mastra subagent delegation demo with SUBAGENT_* injection in the bridge (#958)
- runtimes: mastra sub-agent streaming via a public-API stream tee (#961)
- runtimes: stand-down guard so the mastra subagent injector retires (#971)
- website: homepage punch list — hero merge, FAQ copy, FeatureBlock rows everywhere (#897)
- website: homepage lower half — ledgers, numerals, paper, intent-gated toast (#901)
- website: add 'We Measured the Runtime Swap' blog post (#905, #888, #889, #891)
- website: tighten the pricing page (#908)
- website: library pages in the homepage manner (#914)
- website: design-program follow-ups — showcase rails, Angular proof cell, closer order (#919)
- website: align the docs index with the control plane (#923, #920, #911)
- website: ninth arc — solutions and pilot join the design language (#927)
- website: wire the docs -> cockpit handoff for deep-agents and runtimes (#938, #937, #913)
🩹 Fixes
- subagent hardening batch — eviction order, args-buffer scoping, field-based lookup, AIMOCK_MODE warning (#960)
- ag-ui: detect protocol-standard RUN_FINISHED interrupt outcomes (#888)
- ag-ui: carry interrupt identity on the resume payload (#889)
- ag-ui: relative imports in subagents topic + deploy boot gate (#899)
- ag-ui: resolve the subagents agent URL against (#902)
- ag-ui: attributed TOOL_CALL_START links the child message's toolCallIds so cards draw the call (#965)
- ci: unbreak main — drop verify assertions for the removed pricing matrix (#915, #908)
- ci: accept branded AG-UI compatibility marker (#930)
- ci: stop fanning out the whole cockpit e2e matrix for unrelated changes (#939, #932)
- ci: bump scorecard-action to v2.4.4 so the image pulls again (#940, #367732848534)
- ci: compare requirements.txt drift against git, not a scratch export (#967, #966)
- ci: give the Website Vercel build its growth form policy (#981, #968)
- ci: scope vercel promote to the team that owns the deployment (#982, #963, #945)
- ci: open the protected immutable cockpit preview with its own automation bypass (#984, #983, #974)
- cockpit: teach the cockpit the runtimes product (#910)
- cockpit: point docsPath at docs pages that actually exist (#918)
- cockpit: accept the platform slash collapse for the consecutive-slash raw canary (#987)
- deployments: regenerate ag-ui-dev artifacts after the --no-dev re-export (#970, #967, #963)
- examples: sync requirements.txt with uv.lock; guard drift in CI (#966, #964)
- examples/chat: keep reading pauses in the hero walkthrough under reduced motion (#979)
- langgraph: harden subagent attribution — ladder tests, empty-description guard, nested-delegation streams (#945)
- lifecycle: own enrichment provenance in code; mailbox-poller: drop numeric separators (#985)
- website: repair and redesign the docs adapter picker (#911, #892)
- website: give library-neutral docs pages an honest control plane (#920, #892)
- website: final-review fix batch (#922)
- website: restore padding on Shiki code blocks (#924, #863, [#926](https://github.com/cacheplane/angular-a...
v0.0.64
0.0.64 (2026-08-31)
🚀 Features
- support Angular 22 consumers (#887)
- website: Basecamp-informed homepage — Yes wall, proof strip, problem-first hero (#885, #881)
- website: homepage cohesion — logo ribbon + feature-block rows (#890)
- website: add 'What Changes in Your Angular Code When the Agent Runtime Changes' (#884)
🩹 Fixes
- website: mobile polish for the homepage (#886)
v0.0.63
v0.0.62
0.0.62 (2026-08-30)
🚀 Features
- cockpit: wire the dark design tokens into the 14 dark-designed apps (#868)
- design-tokens: generate tokens-dark.css for the dark-designed cockpit apps (#867, #111, #64)
- langgraph: server-announced subagent identity (#869, #864)
- website: premium-polish pass on the docs chrome (#872, #865, #004090)
❤️ Thank You
- Brian Love @blove
- Claude Opus 5
v0.0.61
0.0.61 (2026-08-30)
🚀 Features
🩹 Fixes
- langgraph: don't guess subagent attribution when it's a coin flip (#864)
- website: docs polish 1/3 — sticky rails, anchor offsets, honest mobile widths (#861)
- website: docs polish 2/3 — breadcrumb, tables, rails, and mdx details (#863)
- website: docs polish 3/3 — a11y and interaction (#865)
❤️ Thank You
- Brian Love @blove
- Claude Opus 5
v0.0.60
v0.0.59
0.0.59 (2026-08-29)
🚀 Features
- examples/chat: open the demo on a chosen suggestion via ?featured= (#832)
⚠️ langgraph: classify any namespaced event as child content (#844)- website: AI search optimization — Search Console harness, structured data, and measurement (#826, #1)
- website: first-person /about prose, sourced and guarded (#828, #826)
- website: link Brian's X and LinkedIn profiles from the Person node (#829)
- website: give each solutions page real code, and split the duplicated proof point (#830)
- website: let homepage sections switch between video and code (#831)
- website: finish the medium switcher — Render, Ship, and live tabs (#833, #832)
- website: add 'What injectAgent() Actually Returns' blog post (#836)
- website: add 'json-render vs A2UI' blog post (#837)
- website: add 'LangGraph Subgraphs: When to Split a Graph and When Not To' blog post (#839, #838, #1)
🩹 Fixes
- cockpit-langgraph: make the subgraphs example demonstrate real nesting (#838)
- website: repair frontmatter handling in docs, then use it for SERP descriptions (#827)
⚠️ Breaking Changes
- langgraph: classify any namespaced event as child content (#844)
Upgrading to 0.0.59 (@threadplane/langgraph)
filterSubagentMessages is removed. Delete it from provideAgent(...) — it is now a compile-time error. The behavior it opted into is the default, and broader.
Child-graph output no longer reaches messages(). Any namespaced stream event — a tool-dispatched subagent (tools:<id>) or a compiled child added with add_node (research:<uuid>) — belongs to that child's stream and never merges into the parent transcript or values(). If your UI relied on child tokens appearing inline, render them from subagents() instead.
subagents() may contain more entries. Plain subgraph nodes now register there, keyed by their namespace segment and named by node. Tool-dispatched children are unchanged: keyed by tool-call id, named by subagent_type.
transcriptNodeNames is unaffected and keeps its original job — filtering top-level side-effect nodes such as routers and title generators. It was never the right lever for child graphs; that distinction is now structural.
Full rationale and verification: #844 · Subgraphs guide
❤️ Thank You
- Brian Love @blove
- Claude Fable 5
- Claude Opus 5
v0.0.58
0.0.58 (2026-08-18)
🚀 Features
⚠️ a2ui: migrate to A2UI v0.9.1 stable wire format (#817)- a2ui: client-side functions (Phase 2 of the v0.9 migration) (#818)
- a2ui: validation checks + client error message (Phase 3 of the v0.9 migration) (#819)
- a2ui: live sendDataModel round-trip + capabilities helper (Phase 4 of the v0.9 migration) (#820)
- a2ui: advertise client capabilities through the transports (#822)
- chat: render A2UI surface theme chrome (agentDisplayName + iconUrl) (#823)
🩹 Fixes
- ci: never promote a superseded commit to production (#816, #813, #814)
- deploy: restore shared-deployment namespace merge broken by src/init.py (#825, #642)
- examples: raise ag-ui demo initial bundle budget to chat parity (#821)
- langgraph: reject non-durable client tool flushes (#809)
- langgraph: retain client tool results across failed runs (#810)
- website: render grouped API entries on middleware helpers page (#815)
⚠️ Breaking Changes
- a2ui: migrate to A2UI v0.9.1 stable wire format (#817)
❤️ Thank You
- Brian Love @blove
- Claude Fable 5
- Claude Opus 5