- ag-ui: expose complete interrupt sessions, optional atomic persistence and authoritative recovery, and provider lifetime cleanup.
- langgraph: retain null-payload resume commands and combined message/state input for intentional retry without reusing an aborted signal.
- ag-ui: retain exact resume decisions, roll failed state back to committed boundaries, and reject stale callbacks and concurrent recovery actions.
- ag-ui: native batches take precedence over compatibility events in
automode. Selectlegacy-commandormastra-commandexplicitly for backends requiring command transport. - ag-ui: resume requires a pending batch and each native ID exactly once; scalar responses apply only to single-entry batches. New messages, regeneration, and client-tool continuation cannot abandon an unresolved interrupt.
- ag-ui: uncertain resumes require authoritative reconciliation before retry. Durable client claims require an application-provided atomic store; backend duplicate-effect protection requires server idempotency.
- 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)
- 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)
- 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
- 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)
- 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)
- 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)
- 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)
- website: close the docs shell's nav-height and column-measure defects (#942, #932)
- website: legible diagram text on phones — 600px floor + scroll shadows (#953)
- website: production-smoke spec must not use import.meta.url (#973, #963)
- website: keep the post-promotion e2e run off the local fixture runtime (#983, #982)
- workspace: keep utility panel focus when the drawer opens in one commit (#972)
- 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)
- website: mobile polish for the homepage (#886)
- move all packages to MIT (#881)
- examples/chat: announce the research subagent's stream identity (#874)
- website: unify all fonts onto the next/font variables (#876)
- website: redesign pricing and licensing journey (#875)
- proxy: remove unauthenticated _proxy_debug disclosure endpoint (#882)
- website: AnnouncementToast mobile presentation and a11y (#877)
- website: fit meta descriptions to the search-snippet budget (#880, #826)
- 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)
- Brian Love @blove
- Claude Opus 5
- 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)
- Brian Love @blove
- Claude Opus 5
- ci: working aimock drift detection (#846)
- design-tokens: complete the CSS-var surface so the website can leave inline styles (#845, #555770, #8, #1)
- Brian Love @blove
- Claude Opus 5
- 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)
- cockpit-langgraph: make the subgraphs example demonstrate real nesting (#838)
- website: repair frontmatter handling in docs, then use it for SERP descriptions (#827)
- langgraph: classify any namespaced event as child content (#844)
- Brian Love @blove
- Claude Fable 5
- Claude Opus 5
⚠️ 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)
- 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)
- a2ui: migrate to A2UI v0.9.1 stable wire format (#817)
- Brian Love @blove
- Claude Fable 5
- Claude Opus 5
- add client tool abort signal (#786)
- add client tool execution guard (#788)
- add client tool execution claims (#789)
- batch client tool continuations (#792)
- add signal resource agent proof (448503dc)
- add signal resource adapter package (7ee0b445)
- chat-graph: spike client-tool binding + client-tool-aware routing (#itinerary) (74d45e2b)
- chat-graph: add itinerary Stop state channel (e23fb54a)
- chat-graph: planner framing + itinerary context injection when client tools present (cdaeeeac)
- cockpit-langgraph: redesign 7 langgraph examples' bespoke UI (encapsulated CSS, sky-blue accent) (#777)
- examples-chat: wire Google Maps key via inject-env (local only) (de8f706e)
- examples-chat: port map-bounds, geocoding, google-maps-loader (e55515c7)
- examples-chat: port ItineraryStore — empty start, value hydration, no localStorage (0f37460b)
- examples-chat: port itinerary panel/map/day-card/clear-day UI (langgraph agent) (662c94a4)
- examples-chat: port itinerary client tools (drop get_itinerary, use demo agent) (cc953105)
- examples-chat: sync itinerary — submit state + value hydration + SDK checkpoint push (d5bae8ac)
- examples-chat: App-mode toggle + map-compatible routing (embed↔sidebar coercion) (62b456f7)
- examples-chat: App-mode cockpit layout (map bg + itinerary overlay + sidenav→drawer) (7d941ad6)
- examples-chat: wire client tools + cockpit into modes; context-aware welcome suggestions (77ababf3)
- examples-chat: dark map via colorScheme, drop cloud-style dependency (f8e1383d)
- examples-chat: map light/dark follows the app color scheme (eee067b5)
- remove unused fake agent delay variable (#787)
- AG-UI: version authoritative snapshot rewrites (#804)
- chat: closed drawer sidenav must not intercept clicks on content (#778)
- chat: never leave a client tool call unanswered on the server (#807, #782, #805)
- cockpit-examples: use CSS sidebar widths (496db8e8)
- examples-chat: import vitest globals in client-tools.spec (build compiles specs) (2ab792e0)
- examples-chat: drop dangling get_itinerary reference in client-tool error strings (c81c7b87)
- examples-chat: reliably persist itinerary to checkpoint (retry mid-run 409) (f3f29ede)
- examples-chat: retry checkpoint push only on 409, capped (review) (3fb99b46)
- Brian Love @blove
- Claude Opus 4.8
- Claude Opus 5
- billing: Stripe Customer Portal route + email + /thanks link (#537)
- blog: brand-polish landing + Recent articles home section (#543)
⚠️ chat: relicense @ngaf/chat — MIT → PolyForm Noncommercial 1.0.0 OR commercial (#501)- examples-chat: URL-based thread routing — //:threadId (#500)
- examples-chat: round-trip agent knobs through URL query params (#527)
- licensing: verification runtime — minting deploy + prod public-key wiring (PR C) (#510)
- minting: handle charge.refunded to revoke license + email customer (#529)
- website: pricing rebuild + sitewide MIT-qualification (PR B) (#502)
- website: Stripe Checkout for paid pricing tiers (PR B-Stripe) (#508)
- website: AG-UI tutorial blog post + brand-polished blog template (#528)
- ci: minting-deploy health check uses correct domain mint.threadplane.ai (#512, #510)
- ci: add required PR gate (bd2bebb7)
- ci: repair main test regressions (9e17fcb6)
- examples-chat: collapse mode routes via UrlMatcher to preserve component instance (#504, #500)
- graph: use SDK in-process ASGI transport for thread metadata writes (#493, #492, #474)
- minting: handle one-time-payment Checkout sessions + align tier slugs (PR D) (#516)
- minting: rename DATABASE_URL → MINTING_DATABASE_URL to avoid Neon integration override (#525)
- minting: read current_period_end from subscription item (#534, #532)
- chat: relicense @ngaf/chat — MIT → PolyForm Noncommercial 1.0.0 OR commercial (#501)
- Brian Love @blove
- Claude Opus 4.7 (1M context)
- Claude Sonnet 4.6
- gtm: Spec 1E — qualified lead + drift guard (analytics-foundation 1e) (#376)
- chat: lifecycle-guaranteed root token injection (production regression) (#375)
- Brian Love @blove
- Claude Opus 4.7
- Claude Opus 4.7 (1M context)
- validate telemetry install and dogfood runtime events (#370)
- gtm: Spec 1D — website reconciliation (analytics-foundation 1d) (#365, #1)
- remove legacy licensing telemetry (#367)
- c-generative-ui: tighten plan_tools to call ONE tool for filter/scope (#363)
- c-generative-ui: use gpt-5 + minimal reasoning for planner LLM (#372, #363)
- chat: user-bubble word-wrap — give .chat-message__layout width:100% (#362, #313, #325)
- chat: A2UI surface progressive renderer must route through render-spec (#371)
- render: strip undeclared inputs in NgComponentOutlet pass (NG0303) (#368)
- Brian Love @blove
- Claude Opus 4.7
- Claude Opus 4.7 (1M context)
- c-generative-ui: airline operations KPI dashboard (PR 3 of 4) (#355)
- chat: chat-launcher-button emits (clicked) output (#354)
- cockpit: aimock harness library + per-example e2e (Phase 2) (#356)
- c-generative-ui: switch emit_state to get_stream_writer (LangGraph 1.x) (#360)
- chat: chat-debug right-dock self-feedback (peer-only claim reads) (#359, #346)
- cockpit: Spec 1C smoke-test fixes (nx run, env, hydration, posthog) (#357)
- website-e2e: assert differentiator section by stable id, not stale heading copy (#358)
- Brian Love @blove
- Claude Opus 4.7
- Claude Opus 4.7 (1M context)
- c-examples: aviation foundation + c-tool-calls + c-subagents (PR 1 of 4) (#347)
- c-examples: aviation prompts for 7 simple c-* graphs (PR 2 of 4) (#350)
- chat: move chat-debug launcher + fix Dark theme override (#341)
- chat: chat-debug × chat-sidebar coexistence (edge-claim primitive + auto-dock) (#346)
- cockpit: aimock E2E harness — Phase 1 (streaming pilot, replaces legacy cockpit e2e) (#349)
- gtm: Spec 1C — cockpit instrumentation (analytics-foundation 1c) (#351, #328)
- Brian Love @blove
- Claude Opus 4.7
- Claude Opus 4.7 (1M context)
- example-layouts: PR-0 auto-install side effect + pilot cleanup (#338)
- website: Phase 5 — marketing rewire to canonical demo (#335)
- telemetry: preserve public publish packaging and add install reporting dashboards (#340)
- telemetry: publish package as public (4f463f35)
- Brian Love @blove
- Claude Opus 4.7
- Claude Opus 4.7 (1M context)
@ngaf/langgraph—regenerate(index)now repositions the LangGraph thread viaas_node: '__start__'before re-submitting, so the next pull resumes at the entry node and re-runsgenerateagainst the rolled-back state. Previously the run could resume mid-graph and skip generation. (#209)
@ngaf/langgraph—regenerate(assistantMessageIndex)is now declared on the publicLangGraphAgentsurface (previously implemented + tested but missing fromagent.types.ts). JSDoc matches the canonicalAgent.regeneratecontract in@ngaf/chat. (#207, #208)AgentTransport.updateState— optionaloptions.asNodeparameter mirrors LangGraph'sas_node, used byregenerate()to anchor the rolled-back state at the entry node.
- All 7 publishable @ngaf libraries synchronized to
0.0.29per project policy (single version across the suite).
@ngaf/langgraph— removed themessagesKeyoption fromAgentOptions. The messages slot is now fixed at themessagesstate key, matching the LangGraph Python/JS conventions. Consumers passingmessagesKey: 'customKey'should rename the upstream graph state slot tomessagesinstead. (Landed in #202; this entry backfills the release notes.)
@ngaf/langgraph—RemoveMessagewire-shape now includesrole+contentso checkpoint rollback (used byregenerate()) round-trips correctly through the LangGraph SDK serializer.
@ngaf/langgraph—regenerate(N)now performs proper server-side rollback: emitsRemoveMessageinstances for every rawBaseMessageat index > userIdx and callsclient.threads.updateStateto roll back LangGraph thread state. Local buffer truncated inclusive of the preceding user message; re-runs viamanager.submit(null). Fixes the 2u/2a duplication regression from 0.0.26. (#200)@ngaf/ag-ui—regenerate(N)truncates inclusive of user, syncs source agent state viasource.setMessages(trimmed), then callssource.runAgent(). (#200)
AgentTransport.updateState()— optional method on the transport interface;FetchStreamTransportimplements it viaclient.threads.updateState.StreamManagerBridgeexposesupdateState()+currentThreadId. Safe no-op when unsupported. (#200)
@ngaf/ag-ui— replacedfast-json-patch.applyPatchwith an inline ~50-line RFC-6902 helper (apply-patch.ts). Eliminates the CommonJS-in-ESM crash in Vite/vitest ESM contexts. (#200)
Agent.regenerate(index)— new method on theAgentinterface implemented by both LangGraph and AG-UI adapters. Replace-semantics: discards the target assistant message and all subsequent messages, then re-runs against the prior user prompt. (#199)<chat-message-actions>— regenerate button is disabled whileagent.isLoading(). (#199)
- Regenerate semantics — clicking "Regenerate response" no longer duplicates the conversation; runs the agent on the prior user prompt and replaces. (#199)
@ngaf/chat—@cacheplane/partial-markdownpeer bumped to^0.3.0(consumes nested-list parser fix andStreamStatusrename).- All 16 @ngaf libraries synchronized to
0.0.26.
<chat-input>— textarea now auto-resizes fromscrollHeight(capped at 200px / ~8 lines) so multi-line input via Shift+Enter is visible. Previously stuck at the fixed 24px /rows="1"height. (#198)<chat-select>— Escape now closes the menu when focus is on the trigger (previously only handled keydown inside the menu). (#198)<chat-message-actions>— thumbs-up/down rating buttons gain[attr.aria-pressed]bound to the rating signal so screen readers can communicate toggle state. (#198)
- Markdown table rendering —
MarkdownTableComponentnow imports and dispatchesMarkdownTableRowComponentdirectly instead of walking row children, so theIS_HEADER_ROWDI provider runs and<thead>/<tbody>cells render as proper<th>/<td>. (#197) - Citation marker without URL — splits resolved branch into "with URL" (
<a [attr.href]>) and "without URL" (<span class="chat-citation-marker--no-url">); switched to[attr.href]for explicit attribute removal so we no longer emit<a href="">. (#197) - Sources panel — Pandoc-only citations (
[^id]:defs in message content with no provider metadata) now render in<chat-citations>. Optionally injectsCitationsResolverServiceand merges markdown-sidecar defs;Message.citationstakes precedence by id. (#197) - Task-list checkbox layout — checkbox + text now flow on a single line via flexbox on
.chat-md-list-item--taskwith collapsed inner<p>margin. Multi-paragraph task items still wrap correctly. (#197)
@ngaf/langgraph— public-API export ofextractCitations(already wired internally in 0.0.21; advanced consumers building custom adapters can now reuse). (#196)@ngaf/ag-ui— public-API export ofbridgeCitationsState. (#196)
- All 16 @ngaf libraries synchronized to
0.0.23.
@ngaf/chat— markdown view components for GFM tables (chat-md-table,chat-md-table-row,chat-md-table-cell) and task-list checkbox prefix onMarkdownListItemComponent. The view registry now exposes all 22 node types emitted by@cacheplane/partial-markdown@0.2.0.
- All 16 @ngaf libraries synchronized to
0.0.22.
@ngaf/chat—Citationinterface,Message.citationsfield,<chat-citations>primitive (sources panel),MarkdownCitationReferenceComponentregistered in the markdown view registry,CitationsResolverServicefor message-first / markdown-fallback citation lookup.@ngaf/langgraph—extractCitations()populatesMessage.citationsfromadditional_kwargs.citationsoradditional_kwargs.sources.@ngaf/ag-ui—bridgeCitationsState()populatesMessage.citationsfrom STATE_DELTA at JSON Pointer/citations/{messageId}.@cacheplane/partial-markdownpeer in@ngaf/chatbumped to^0.2.0.
- All @ngaf libraries synchronized to
0.0.21per project policy (single version across the suite).
- Brian Love @blove
- Claude Opus 4
- add cockpit registry foundation (758995c2)
- scaffold cockpit app and harness (d14ff406)
- add manifest-driven cockpit shell (78e8f5e3)
- add cockpit registry foundation (f199b6fd)
- scaffold cockpit app and harness (60591a9c)
- add manifest-driven cockpit shell (54ddcc37)
- add metadata-driven cockpit docs system (a6fa88f4)
- roll out cockpit capability matrix (89147140)
- add cockpit testing and deployment gates (ec0aba99)
- refresh cockpit workspace ui (83f069a1)
- glassy gradient website redesign + docs refresh (#3)
- autogenerated API reference from JSDoc (#4)
- Mintlify-aligned docs design + code highlighting (#6)
- animated arch diagram, copy buttons, tab labels, deploy docs (#8)
- gradient feature chips, copy icon, TOC fix (#9)
- add @cacheplane/render and @cacheplane/chat libraries (d2a8bd63)
- rebrand to Angular Agent Framework — agent() + @cacheplane/angular (#39, #27, #28, #29)
- add lead capture form to whitepaper announcement toast (#49, #27, #28, #29)
- animated company logo scroll strip for social proof (#50, #27, #28, #29)
- add Loops.so integration for drip email campaigns (#51, #27, #28, #29)
- replace Loops with self-hosted drip via Resend scheduled_at (#52, #27, #28, #29)
- unified gradient-header email template design (#53, #27, #28, #29)
- generative UI views system — views() API + chat integration (#57, #14, #55, #48, #56, #8, #9, #10, #11, #12, #13, #2, #16, #19, #24, #25, #26, #27, #28, #29, #30, #31, #32, #33)
- real SVG brand logos in social proof scroll strip (#62, #8, #9, #10, #11, #12, #13, #2, #14, #16, #19, #24, #25, #26, #27, #28, #29, #30, #31, #32, #33, #34, #35, #36, #37, #38, #39, #40, #41, #42, #44, #43, #45, #46, #47, #49, #50, #51, #48, #52, #53, #55)
- streaming generative UI with partial JSON parser (#69, #14)
- A2UI v0.9 protocol support — message parsing, surface rendering, 12-component catalog (#78)
- A2UI v0.9 Phase 2 — functions, validation, template expansion, two-way binding, actions (#81)
- A2UI Phase 3 — render events, 6 new components, custom catalogs (#89, #14)
- add A2UI cockpit integration with auto event routing (#93)
- handler injection context and consumer-extensible A2UI handlers (#94)
- generative UI phase 2 — SaaS metrics dashboard (#127)
- relicense to MIT (selective; minting-service stays proprietary) (#141)
- a2ui: align validation with v0.9 CheckRule spec (#97)
- a2ui: v0.9 action envelope and sendDataModel transport (#101)
- AG-UI: @cacheplane/ag-ui adapter wrapping @ag-ui/client (#139)
- AG-UI: FakeAgent for offline cockpit demo (#140)
- agent: run license check at provider init (fd95400f)
- chat: Apple-clean UI redesign + streaming example integration (499ef645)
- chat: eliminate streaming jank with append-only markdown and frame-synced pipeline (#107)
- chat: run license check at provider init (6addcd17)
- chat: decouple primitives from LangGraph via runtime-neutral ChatAgent contract (#135)
- chat: complete runtime decoupling — compositions back to @cacheplane/chat (#136)
- chat: require events$ on Agent contract with structured AgentEvent union (#138)
- chat): ship-readiness polish — Tailwind, auto-scroll, markdown, a11y (#27) * docs(chat): add ship-readiness polish implementation plan Addresses all 19 audit issues: theme consolidation, Tailwind conversion, auto-scroll, textarea auto-expand, markdown rendering, empty state, responsive sidebar, SVG icons, ARIA, and API cleanup. * feat(chat): consolidate theme into shared TS module, add icons + markdown utils * feat(chat): convert ChatComponent to Tailwind, add auto-scroll + empty state + responsive sidebar - Replace 80+ lines of inlined CSS vars with CHAT_THEME_STYLES import - Add CHAT_MARKDOWN_STYLES + renderMarkdown for AI message rendering - Convert all inline style="" attributes to Tailwind utility classes - Add auto-scroll via viewChild + effect tracking message count - Add empty state when no messages and not loading - Make thread sidebar responsive with hidden md:flex + mobile toggle - Add ARIA attributes: role=log, aria-live=polite, role=navigation - Use ViewEncapsulation.None for markdown styles * feat(chat): convert primitives to Tailwind, add textarea auto-expand + focused signal * feat(chat): convert ChatDebug + sub-components to theme-aware Tailwind * feat(chat): convert remaining compositions to Tailwind with SVG icons + theme vars * feat(chat: clean up public API, add marked peer dep, verify build Remove legacy cp-chat/cp-chat-input/cp-chat-message components and migrate all cockpit examples to the new ChatComponent composition. Export shared styles, icons, and markdown utilities from public API. Update ChatConfig with renderRegistry, avatarLabel, assistantName. Add marked as optional peer dep and fix dynamic import for library build. Add @source directive to cockpit styles for Tailwind scanning. (#27)
- cockpit: complete cockpit application with 14 capability examples (#2)
- cockpit: complete cockpit application with 14 capability examples (#14)
- cockpit: add design tokens CSS, Tailwind v4 to Angular apps, fix sidebar and code overflow (#16)
- cockpit: wire all 13 remaining Angular examples to @cacheplane/chat (40def35a)
- cockpit: production deployment - LangGraph Cloud, Angular hosting, CI (#19)
- cockpit: Tier 1 example customization — thread management + capability sidebars (7e2da191)
- cockpit: Tier 2 — memory sidebar, subagent tracking, interrupt panel (f0f1967c)
- cockpit: Tier 3 — time-travel checkpoint nav + durable-execution step pipeline (170b3047)
- cockpit: wire view components into all 6 examples (#67)
- cockpit: add render and chat product sections (#68)
- cockpit: update generative-ui example for streaming auto-detection (#75)
- cockpit: full-screen mobile navigation overlay (#91)
- cockpit): complete sidebar implementations for all 14 capability examples (#31) * fix(stream-resource): fix 3 runtime errors in streaming chat flow 1. Guard Object.keys(v) against null/undefined in values$ subscriber (stream-resource.fn.ts:94) — crashed when values event had no data 2. Handle plain JSON messages from SSE (not hydrated BaseMessage instances) in getMessageType() — _getType() is a class method not available on plain objects; fall back to reading the
typeproperty 3. Fix event data extraction in processEvent — normalizeSdkEvent spreads data into the event object, so event['values'] was always undefined; use extractEventData() to read from event['data'] instead. Also sync messages$ from values events and merge messages/partial updates by id to preserve the full message history including human messages. * fix(stream-resource): handle both SDK and mock event formats in extractEventData * docs(cockpit): add cockpit examples validation implementation plan * feat(cockpit): add thread picker sidebar to persistence example * feat(cockpit): add checkpoint timeline sidebar to time-travel example * feat(cockpit): add step progress sidebar to durable-execution example * feat(cockpit): add plan checklist sidebar to planning example * feat(cockpit): add skill invocations sidebar to skills example * feat(cockpit): add delegation tracker sidebar to subagents example Derive delegations from stream.messages() by finding tool_calls in AI messages and matching them with tool result messages. Each delegation shows a status dot (green=complete, amber=running, red=error), agent name, and status text. * feat(cockpit): add file operations sidebar to filesystem example * feat(cockpit): add execution output sidebar to sandboxes example * feat(cockpit: add learned facts sidebar to memory example Derive memory entries from stream.value() by checking for agent_memory or memory dict fields in graph state. Sidebar displays each fact as a bold key with muted value text, plus a count in the header. (#31) - db: scaffold @cacheplane/db lib (eea577c3)
- db: add Drizzle client factory (15dcbd88)
- db: add licenses table schema (aea37a5f)
- db: add processed_events table schema (3d46420d)
- db: configure drizzle-kit and generate initial migration (9dc0ad3e)
- db: add testcontainers-based integration test helpers (42c5a44d)
- db: add processed-events queries with idempotency (00c0cb73)
- db: add license queries (upsert, get, revoke, updateToken, byEmail) (97f23917)
- example-layouts: shared responsive layout library for 30 cockpit apps (#95)
- generative-ui: update standalone graph to Phase 2 dashboard (#129)
- licensing: scaffold @cacheplane/licensing library (3c825f1a)
- licensing: add license token schema and parser (17ae35f8)
- licensing: add offline ed25519 license verification (5f0464d2)
- licensing: add license status evaluation with grace window (952d0671)
- licensing: add nag UX with per-package dedupe (192cdc73)
- licensing: add non-blocking telemetry client with opt-out (5e3787c2)
- licensing: embed ed25519 public key at build time (b9aac384)
- licensing: add runLicenseCheck orchestrator and public API (f8d816b3)
- licensing: add signLicense for minting signed license tokens (bb2d6255)
- minting-service: scaffold Nx Node app (6d248412)
- minting-service: add runtime deps and .env.example (cfd6cd3a)
- minting-service: add env var validation (6091cb4b)
- minting-service: add tier extraction and seat computation (ff392a0d)
- minting-service: add mintToken wrapper over @cacheplane/licensing (08711164)
- minting-service: add license email renderer and Resend wrapper (c1be7713)
- minting-service: add Stripe SDK singleton (351f0d05)
- minting-service: add handleEvent dispatcher with idempotency + compensating delete (3eea7110)
- minting-service: implement handleCheckoutCompleted (84595278)
- minting-service: implement handleSubscriptionUpdated with material-change check (43f86e58)
- minting-service: add /api/health probe (d65b2e5b)
- minting-service: add /api/stripe-webhook endpoint (e1ce4082)
- minting-service: add Vercel deployment config (c8e80ca3)
- minting-service: add manual re-mint CLI (7907e787)
- render: run license check at provider init (ad8a5e73)
- website: add Examples link to header and footer (#25)
- website: lead gen with Resend + mobile fixes + design improvements (#36, #27, #28, #29)
- website: multi-library docs for agent, render, and chat (#48)
- website: replace FullStackSection with LibrariesSection teaser cards (316bf2bc)
- website: add Libraries column to footer for SEO/bot discovery (0a41e5d5)
- website: merge DocsMobileNav into header for unified mobile navigation (f7e1d703)
- website: add /angular landing page with full conversion funnel (63daf39e)
- website: add /render landing page — Vercel json-render generative UI (0495a109)
- website: add /chat landing page — batteries-included agent chat UI (cae4b94f)
- website: refactor whitepaper pipeline for multi-config generation (d712c256)
- website: whitepaper signup API accepts paper field for library-specific tracking (d0812ba1)
- website: add library-specific download confirmation and drip email campaigns (8c0eeb06)
- website: full-screen mobile nav overlay with tab-based docs navigation (aa751c4d)
- website: wire whitepaper signup to email pipeline (90bd1046)
- website: update landing pages with A2UI specifics (f1879c3f)
- website: add Shiki syntax highlighting to landing page code blocks (2a4e2d8f)
- website: home page narrative funnel redesign (#125)
- website: add solutions landing pages for enterprise use cases (#128)
- website: align product landing pages with home page narrative (#130)
- website): add narrative sections, pilot-to-prod page, and rebrand integration (#29) * fix(website): add track shake animation to ProblemSection stall phase * fix(website): ProblemSection quality fixes — timer cleanup, unique SVG ID, aria-hidden, correct import - Store setTimeout IDs and clear them on unmount (prevents state updates on unmounted component) - Use useId() to generate unique hatchId per instance (prevents SVG pattern id collision) - Add role=progressbar + aria-valuenow to track container for screen readers - Add aria-hidden=true to decorative animated elements (pins, labels, badge, counter) - Fix import: use local lib/design-tokens instead of unresolved @cacheplane/design-tokens - Add invariant comment for done-timeout vs counter-duration coupling * feat: add FullStackSection with animated stack diagram and roadmap strip * feat: add ChatFeaturesSection with 4 interactive chat scenarios * feat: add FairComparisonSection comparison table * feat: wire ProblemSection, FullStackSection, ChatFeaturesSection, FairComparisonSection into landing page - Insert ProblemSection + FullStackSection + ChatFeaturesSection after StatsStrip - Insert FairComparisonSection after DeepAgentsShowcase - Add two ambient gradient blobs for extended page height - Task 5 (FeatureStrip copy): no-op — the problematic 'no established pattern' copy was not present in this branch * chore: add puppeteer devDependency and generate-whitepaper script * feat: add whitepaper signup API route with NDJSON persistence * feat: add whitepaper generation script * feat: add WhitePaperSection with free download and optional lead-gen form * feat: add WhitePaperSection to landing page; remove useStream parity copy from FeatureStrip * fix(whitepaper): add JetBrains Mono to Google Fonts URL and regenerate preview Fixes missing code font in whitepaper output. Regenerates whitepaper-preview.html with correct 'EB Garamond' and 'JetBrains Mono' font references throughout. * feat: add PilotHero component and /pilot-to-prod page skeleton * fix: PilotHero responsive padding, eyebrow style conflict, page metadata * feat: add WhatIsIncluded 3-column component for pilot-to-prod page * feat: add HowItWorks 3-phase timeline for pilot-to-prod page * feat: add PricingSignal pricing callout for pilot-to-prod page * feat: add WhitePaperGate 5-field lead gen form for pilot-to-prod page * fix: change role=alert to role=status to match aria-live=polite in WhitePaperGate * feat: add PilotFooterCTA and wire complete pilot-to-prod page * fix: use tokens.colors.accent in PilotFooterCTA, add aria-hidden to page blobs * feat: add Pilot to Prod nav link and restructure homepage (remove FeatureStrip/CockpitCTA/CodeBlock, add PilotProgram CTA) * fix: correct design-tokens import path in pilot-to-prod page (3 levels up) * fix: apply full review findings — messaging, mobile, UX, and RiskRemoval section - Remove useStream() parity messaging from HeroTwoCol, WhatIsIncluded, StatsStrip - Fix PricingSignal: remove ambiguous '/year', clarify as fixed fee + pilot included - Add PricingSignal mobile padding reduction via media query - Fix ProblemSection stat grid to collapse on mobile (auto-fit minmax) - Add RiskRemoval section to pilot-to-prod page (between PricingSignal and WhitePaperGate) - Fix Nav Examples link: external=true, target=_blank, rel=noopener noreferrer - Fix WhitePaperGate: role field sent in message body, not merged into company string - Fix PilotFooterCTA: replace broken whileHover borderColor with CSS class hover - Fix PilotHero: remove opacity from initial animations (prevents blank hero flash) - Increase PilotHero CTA padding to meet 44px touch target * fix: remove remaining useStream parity messaging from layout, Footer, and ValueProps * fix: second review pass — docs messaging, title, broken link, a11y labels - introduction.mdx: remove parity/useStream opening line, use Signal-native positioning - AGENTS.md.template + CLAUDE.md.template: update tagline to Signal-native - layout.tsx: update <title> from LangChain to LangGraph - Footer.tsx: fix /api-reference → /docs/api/stream-resource (was 404) - PilotHero.tsx: add aria-hidden to decorative gradient blobs - WhitePaperSection.tsx: add sr-only labels + aria-label to name/email inputs - LeadForm.tsx (pricing): add sr-only labels + aria-label to all four form inputs * feat: add whitepaper.pdf to public directory Generated from whitepaper-preview.html via Puppeteer. All 6 chapters present (Streaming State Management, Thread Persistence, Tool-Call Rendering, Human Approval Flows, Generative UI, Deterministic Testing). Fixes dead 'Download the Guide' CTAs on pilot-to-prod and homepage. * feat: citation badges on stats, pricing reframe to app deployment license Citation badges: - New CitationBadge component — click-to-open popover with source, stat, note, and link - 66% stat → Stack Overflow Developer Survey 2025 - 31% stat → ISG AI Adoption Reports - 75% stat → Stack Overflow Developer Survey 2025 - Keyboard (Escape) and outside-click dismissal, ARIA dialog role Pricing reframe (app deployment license): - Remove ALL refund/money-back/guarantee language site-wide - PilotHero: trust line → "App deployment license · $20,000 · 3-month co-pilot engagement" - PilotHero: subheadline removes "guaranteed outcome" - WhatIsIncluded: card 3 renamed from "Production Guarantee" → "App Deployment License" - HowItWorks: phase 3 removes "full refund" language, deliverable → "Production deployment" - PricingSignal: subtitle + features list updated to license/co-pilot framing - RiskRemoval: section reframed from guarantee → "What's included in the license" Replaces money-back card with "We work alongside your team" card - PilotFooterCTA: fine print updated - pilot-to-prod/page.tsx: meta description updated * feat: subtler citation badge + citations on all 77% claims CitationBadge: - Reduced to 13px, transparent background, faint border (rgba 0.2) - Text color rgba(0,64,144,0.35) at rest — nearly invisible until hovered - No fill on idle state, border-only approach New citation placements: - PilotHero subheadline: 77% → McKinsey State of AI 2024 - PilotFooterCTA body copy: 77% → McKinsey State of AI 2024 - HomePilotCTA (new component): extracts inline pilot CTA from page.tsx so it can be a client component with CitationBadge on the 77% claim - page.tsx: replaces inline section with * docs: add FullStackSection redesign spec (EM/CTO layer narrative + Gen UI bug fix) * feat(website): redesign FullStackSection for EM/CTO audience * docs: apply Angular Stream Resource rebrand to narrative components * chore: sync package-lock.json after merge * fix(website: update e2e test for new landing page structure (#29)
- guard cockpit secret integration in ci (01d6c738)
- stabilize cockpit integration workflows (1dc96157)
- align website cockpit integration checks (f18745f5)
- stabilize cockpit deployment verification (7e431109)
- align chat agent with langgraph dev runtime (542b7448)
- verify website deploy via custom domain (1427f8d2)
- align chat agent e2e stream assertions (768d2f38)
- deploy affected apps via nx (a124eaaf)
- use portable deploy target detection (7a8e6fa9)
- fetch base commit for affected deploys (4e43963c)
- stabilize cockpit e2e shell hydration (bf0a8f58)
- TOC links, mobile polish, glass callouts, expanded intro (#7, #1, #3, #4, #5)
- complete rebrand audit — nav bug, hero copy, templates (#42, #27, #28, #29)
- API docs, pricing updates, rebrand audit fixes (#44, #27, #28, #29)
- docs tables, pricing, favicon, animation, announcement toast (#47, #27, #28, #29)
- redesign logo strip with larger ghost-style logos (#58, #8, #9, #10, #11, #12, #13, #2, #14, #16, #19, #24, #25, #26, #27, #28, #29, #30, #31, #32, #33, #34, #35, #36, #37, #38, #39, #40, #41, #42, #44, #43, #45, #46, #47, #49, #50, #51, #48, #52, #53, #55)
- resolve merge conflicts in SocialProof, increase logo visibility (#60, #8, #9, #10, #11, #12, #13, #2, #14, #16, #19, #24, #25, #26, #27, #28, #29, #30, #31, #32, #33, #34, #35, #36, #37, #38, #39, #40, #41, #42, #44, #43, #45, #46, #47, #49, #50, #51, #48, #52, #53, #55)
- resolve merge conflicts + cockpit iframe URL + stale references (#61, #57)
- clean up remaining stale stream-resource references (#72)
- add production error handling for streaming JSON parsing (#82)
- deploy 17 chat/render examples to LangGraph Cloud (#115)
- a2ui: remove unused EnvelopeKey type alias breaking production builds (#84)
- a2ui: improve catalog tests and fix misleading _bindings docs (#106)
- agent: filter SDK metadata from messages/partial events (#102)
- agent: consolidate chat graphs into streaming LangGraph deployment (#113)
- angular: normalize relative apiUrl to absolute for LangGraph SDK (#43)
- chat: fix broken style interpolation in ChatInput border-color (5fb4a584)
- chat: send simple {role, content} dict instead of HumanMessage object (b35ea6af)
- chat: refocus input after submit + force scroll on new messages (#34)
- chat: wrap content classifier in untracked() to fix NG0600 streaming crash (#104)
- chat: correct generative-ui prompt — use root not rootKey (#116)
- chat: align a2ui assistant ID with deployed graph name (#117)
- chat: revert a2ui assistant ID to c-a2ui to match deployment (#118, #117)
- chat: use c-a2ui assistant ID matching standalone deployment (#119, #117, #118)
- chat: replace LLM-based a2ui graph with hardcoded JSONL (#120)
- chat: route chat examples through streaming backend (#121, #113, #120)
- chat: add trailing newline to a2ui JSONL for parser compatibility (#122)
- chat): fix runtime errors + ViewEncapsulation breaking theme (#30) * fix(stream-resource): fix 3 runtime errors in streaming chat flow 1. Guard Object.keys(v) against null/undefined in values$ subscriber (stream-resource.fn.ts:94) — crashed when values event had no data 2. Handle plain JSON messages from SSE (not hydrated BaseMessage instances) in getMessageType() — _getType() is a class method not available on plain objects; fall back to reading the
typeproperty 3. Fix event data extraction in processEvent — normalizeSdkEvent spreads data into the event object, so event['values'] was always undefined; use extractEventData() to read from event['data'] instead. Also sync messages$ from values events and merge messages/partial updates by id to preserve the full message history including human messages. * fix(chat): fix ViewEncapsulation breaking all CSS theme variables ViewEncapsulation.None caused :host selectors in CHAT_THEME_STYLES to not match anything (no shadow DOM = :host doesn't apply). All 40+ CSS custom properties were empty, breaking the entire design. Fix: remove ViewEncapsulation.None from ChatComponent and ChatDebugComponent (default Emulated encapsulation processes :host correctly). Prefix markdown styles with ::ng-deep for innerHTML content penetration. * fix(chat): replace [innerHTML] icon bindings with inline SVG (sanitizer fix) * fix(chat): center input text, remove Assistant label, ChatGPT pattern - Input: items-end → items-center for vertical centering of single-line text - Input: inline SVG for send button (replaces [innerHTML] which Angular sanitizes) - AI messages: remove "Assistant" label, use avatar inline with content (ChatGPT pattern) - Typing indicator: match new AI message layout (avatar + dots, no label) * fix(stream-resource: handle both SDK and mock event formats in extractEventData (#30) - ci: isolate examples deploy to prevent overwriting website (#26)
- ci: trigger examples redeploy when libs change (#46, #43)
- cockpit: production review pass — 22 fixes across 14 examples (647aa50e)
- cockpit: restore streaming and deployment-runtime to use ChatComponent (reverted by PR #19) (#19)
- cockpit: update e2e tests for current UI (#24)
- cockpit: restore fileReplacements for dev environment in all 13 Angular examples (ef804f1a)
- cockpit: use full URLs in dev environments (SDK requires absolute URLs) (9d3e02a9)
- cockpit: align all proxy configs to port 8123 (#35)
- cockpit: fix chat/input and chat/threads production builds (#77)
- cockpit: add Render/Chat to sidebar labels and prefix stripping (#80)
- cockpit: prevent [object Object] rendering when props contain unresolved $state bindings (#83)
- cockpit: add render and chat to examples deployment pipeline (79e8e0c6)
- cockpit: preserve iframe when switching between Run and Code tabs (#112)
- cockpit: align production smoke checks with chat demos (#124)
- deploy: rewrite base href per example so assets resolve to correct subpath (#37)
- e2e: update stale selectors from pre-rebrand cp-chat to chat (cf3a2a29)
- e2e: fix stale selectors in production smoke and all e2e tests (26143a6c)
- e2e: update stale test — FairComparisonSection removed, test LibrariesSection instead (4811c95b)
- e2e: use .first() for .chat-md locator to avoid strict mode violation (525c8324)
- licensing: make library dist ESM-loadable (4c19e299)
- licensing: repair fixtures.ts import after signLicense consolidation (de34a3de)
- licensing: make library browser-safe for Angular consumers (1d394107)
- minting-service: bundle Vercel functions via Nx esbuild build (#133)
- minting-service: move handler sources out of api/ for Vercel deploy (#134, #133)
- stream-resource: persist thread ID across messages + smooth scroll (#32)
- website: replace unsourced stats with verified Gartner citations (#33, #27, #28, #29)
- website: fix flaky e2e test blocking production deploys (#38)
- website: correct api reference e2e test path after rebrand (#40)
- website: remove invalid eslint-disable blocking all deploys (#64)
- website: fix API nav link, comment out logo strip, add missing deps (#87)
- website: correct cockpit iframe URLs to match 5-segment route pattern (0336c75d)
- website: simplify mobile docs nav — remove pills, uppercase labels, background highlights (fefed4ba)
- website: redesign mobile docs nav — larger touch targets, match sidebar style (0706e9f8)
- website: enlarge mobile nav section headers — match link size with SVG chevron (56e6a206)
- website: lock body scroll when mobile menu open, fix overlay gap, bigger chevrons (0aa329e0)
- website: remove unused headerColor variable breaking Vercel build (d1006300)
- website: resolve all 27 lint warnings — zero warnings (01cb4950)
- website: update SVG assets — replace streamResource with agent() and cacheplane branding (309010db)
- website: address code review — responsive grid, unique IDs, iframe sandbox, design tokens (#1, #5)
- website: prevent mobile horizontal overflow on docs pages (906f5290)
- website: remove fair comparison section and fix mobile alignment (e845ed5a)
- website: make all landing page sections responsive on mobile (a081862c)
- website: landing page polish — code padding, SDK comparison, embed frames (3bd6d267)
- website: add mobile responsive padding and sizing to home page sections (#126)
- website: correct stale GitHub URL in Footer and Nav (a59d0b12)
- Brian Love @blove
- Claude Haiku 4.5
- Claude Opus 4
- Claude Opus 4.6
- Claude Opus 4.6 (1M context)
- Claude Opus 4.7
- Claude Sonnet 4.6