Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 61 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,64 @@
## 0.1.0 (2026-09-08)

### 🚀 Features

- one route family — every capability is a docs page ([#1010](https://github.com/cacheplane/angular-agent-framework/pull/1010))
- **ag-ui:** scriptable provideFakeAgent() and a duplicate-AgentRef warning ([#1053](https://github.com/cacheplane/angular-agent-framework/pull/1053))
- **chat:** public scrollToBottom() on ChatComponent; the stage pins through it ([#1045](https://github.com/cacheplane/angular-agent-framework/pull/1045))
- ⚠️ **chat:** remove provideChat(), fix app-level markdown registry overrides, and three API cleanups ([#1055](https://github.com/cacheplane/angular-agent-framework/pull/1055))
- **docs:** ExampleCode include + guards; retire the walkthrough renderer ([#1025](https://github.com/cacheplane/angular-agent-framework/pull/1025))
- **examples/chat:** executable approval tools behind the hero's pause ([#1011](https://github.com/cacheplane/angular-agent-framework/pull/1011))
- **examples/chat:** /stage — the real chat beside the real devtools, seekable to any recorded time (live-stage plan 2 of 3) ([#1030](https://github.com/cacheplane/angular-agent-framework/pull/1030))
- **growth:** add inspectable company research pilot ([#1009](https://github.com/cacheplane/angular-agent-framework/pull/1009))
- **growth:** explain company capture failures ([#1015](https://github.com/cacheplane/angular-agent-framework/pull/1015))
- **growth:** attribute campaign sends per template with a bounded Resend tag ([#1020](https://github.com/cacheplane/angular-agent-framework/pull/1020))
- **growth:** enrich install activations and report developer journeys ([#1027](https://github.com/cacheplane/angular-agent-framework/pull/1027))
- **growth:** integrate gated Dawn company enrichment ([#1028](https://github.com/cacheplane/angular-agent-framework/pull/1028))
- **growth:** cut over company enrichment to Dawn ([#1041](https://github.com/cacheplane/angular-agent-framework/pull/1041))
- **growth:** schedule founder emails on Pacific business mornings ([#1044](https://github.com/cacheplane/angular-agent-framework/pull/1044))
- **lifecycle:** founder session offer as step one, one-word unsubscribe link ([#1012](https://github.com/cacheplane/angular-agent-framework/pull/1012))
- **lifecycle:** add optional bounded Firecrawl company capture ([#1017](https://github.com/cacheplane/angular-agent-framework/pull/1017))
- **lifecycle:** integrate self-hosted Firecrawl browser scraper ([#1019](https://github.com/cacheplane/angular-agent-framework/pull/1019))
- **lifecycle:** fulfillment mail in the campaign register ([#1018](https://github.com/cacheplane/angular-agent-framework/pull/1018))
- **lifecycle:** print the business postal address in every email footer ([#1021](https://github.com/cacheplane/angular-agent-framework/pull/1021))
- **website:** homepage restructure (live-stage plan 1 of 3) ([#1024](https://github.com/cacheplane/angular-agent-framework/pull/1024))
- **website:** whitepaper block and toast on the form kit; old form CSS removed ([#1026](https://github.com/cacheplane/angular-agent-framework/pull/1026))
- **website:** the stage on the homepage — one real run, scrubbed by scroll (live-stage plan 3 of 3) ([#1032](https://github.com/cacheplane/angular-agent-framework/pull/1032))
- **website:** the stage rail is a completeness ledger ([#1043](https://github.com/cacheplane/angular-agent-framework/pull/1043))
- **website:** the social card shows the product, and the brand gets a real mark ([#1047](https://github.com/cacheplane/angular-agent-framework/pull/1047))
- **website:** retire the last stale positioning from the brand assets ([#1051](https://github.com/cacheplane/angular-agent-framework/pull/1051))
- **website:** architecture diagram — the UI layer between your users and your agents ([#1048](https://github.com/cacheplane/angular-agent-framework/pull/1048))
- **website:** the homepage closes on a quiet open-source strip ([#1057](https://github.com/cacheplane/angular-agent-framework/pull/1057))
- **website:** ATC theme spike — aviation yellow, Archivo Black, scope navy ([#1058](https://github.com/cacheplane/angular-agent-framework/pull/1058), [#15253](https://github.com/cacheplane/angular-agent-framework/issues/15253), [#004090](https://github.com/cacheplane/angular-agent-framework/issues/004090), [#1048](https://github.com/cacheplane/angular-agent-framework/issues/1048), [#963](https://github.com/cacheplane/angular-agent-framework/issues/963), [#1057](https://github.com/cacheplane/angular-agent-framework/issues/1057))

### 🩹 Fixes

- **growth:** validate telemetry and align PostHog dashboards ([#1050](https://github.com/cacheplane/angular-agent-framework/pull/1050))
- **langgraph:** lifecycle token, error kind, root registry, required interrupt, awaitable mock transport ([#1054](https://github.com/cacheplane/angular-agent-framework/pull/1054))
- **libs:** make the type-tests targets runnable again ([#1064](https://github.com/cacheplane/angular-agent-framework/pull/1064))
- **lifecycle:** ground company research in substantive evidence ([add9e6801](https://github.com/cacheplane/angular-agent-framework/commit/add9e6801))
- ⚠️ **middleware:** server_tools router default; Python emit_custom_event helper ([#1052](https://github.com/cacheplane/angular-agent-framework/pull/1052))
- **render:** honor every ActionBinding field, per-item visible, real element lifecycle and state paths ([#1056](https://github.com/cacheplane/angular-agent-framework/pull/1056))
- **render:** resolve repeated element readiness and props in the row's own scope ([#1062](https://github.com/cacheplane/angular-agent-framework/pull/1062))
- **website:** pin the stage hold one millisecond inside it so the frame reports pause ([#1034](https://github.com/cacheplane/angular-agent-framework/pull/1034), [#1032](https://github.com/cacheplane/angular-agent-framework/issues/1032))
- **website:** ATC theme follow-ups — favicon, social cards, whitepapers ([#1059](https://github.com/cacheplane/angular-agent-framework/pull/1059), [#004090](https://github.com/cacheplane/angular-agent-framework/issues/004090), [#15253](https://github.com/cacheplane/angular-agent-framework/issues/15253))
- **website:** give arch-flow console badges an on-dark palette ([#1060](https://github.com/cacheplane/angular-agent-framework/pull/1060), [#1](https://github.com/cacheplane/angular-agent-framework/issues/1), [#15253](https://github.com/cacheplane/angular-agent-framework/issues/15253))

### ⚠️ Breaking Changes

- **chat:** remove provideChat(), fix app-level markdown registry overrides, and three API cleanups ([#1055](https://github.com/cacheplane/angular-agent-framework/pull/1055))
- **middleware:** server_tools router default; Python emit_custom_event helper ([#1052](https://github.com/cacheplane/angular-agent-framework/pull/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>

## 0.0.66 (2026-09-05)

### 🚀 Features
Expand Down
2 changes: 1 addition & 1 deletion apps/website/public/AGENTS.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Threadplane v0.0.66
# Threadplane v0.1.0

Production-ready chat, thread/history/branch UI, interrupts, subagents, planning, memory, and generative UI for Angular agent apps.

Expand Down
2 changes: 1 addition & 1 deletion apps/website/public/CLAUDE.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Threadplane v0.0.66
# Threadplane v0.1.0

Production-ready chat, thread/history/branch UI, interrupts, subagents, planning, memory, and generative UI for Angular agent apps.

Expand Down
14 changes: 8 additions & 6 deletions docs/RELEASE.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Release Process

The six publishable libraries (`@threadplane/chat`, `@threadplane/langgraph`, `@threadplane/ag-ui`, `@threadplane/render`, `@threadplane/a2ui`, `@threadplane/telemetry`) ship together at a synchronized version via Nx Release. During the `0.0.x` exploratory phase, only patch bumps are used.
The six publishable libraries (`@threadplane/chat`, `@threadplane/langgraph`, `@threadplane/ag-ui`, `@threadplane/render`, `@threadplane/a2ui`, `@threadplane/telemetry`) ship together at a synchronized version via Nx Release. Releases use **minor** bumps (`0.1.0` → `0.2.0` → …). **Never cut `1.0.0` without explicit approval from the repository owner, every time.**

Nx updates internal dependency and peer ranges with the synchronized release. `preserveMatchingDependencyRanges` is disabled so a prior `^0.0.x` peer range cannot block the next patch or leave companion packages on incompatible versions. External dependency ranges remain unchanged.

Expand All @@ -25,7 +25,7 @@ git checkout main && git pull

# 1. Version bump. Runs preVersionCommand (builds all six projects), rewrites every
# package.json, updates package-lock.json, and stages the result.
npx nx release version --specifier=patch
npx nx release version --specifier=minor

# 2. Regenerate the public agent-context files. They embed the release
# version, and the Website unit suite fails the release commit until
Expand Down Expand Up @@ -110,7 +110,7 @@ Always sanity-check before a real release. Dry-run each subcommand — the
one-shot `nx release patch --dry-run` fails the same way the real command does:

```bash
npx nx release version --specifier=patch --dry-run
npx nx release version --specifier=minor --dry-run
npx nx release changelog 0.0.57 --dry-run # bare version; check the printed tag URL
```

Expand All @@ -132,11 +132,13 @@ Anything above `0` means main has unpublished commits.

`Publish` workflow accepts `workflow_dispatch` with a `dry-run` input (default `true`). Trigger from the GitHub Actions UI to verify CI's publish path without actually shipping.

## Why patch-only during 0.0.x
## Versioning policy

While the API is still settling we bump only the patch component (`0.0.1` → `0.0.2` → `0.0.3`). This signals to consumers that breaking changes can land in any release; lock to an exact version.
Releases bump the **minor** component (`0.1.0` → `0.2.0` → ). Breaking changes can still land in any release while the major is `0`, so consumers should lock to an exact version; the changelog names the breaking entries.

When the API stabilizes enough to make compatibility promises, transition to `0.1.0` and start using minor/major bumps with conventional-commit-driven semver.
`1.0.0` is a deliberate gate, not something to infer from scope or stability: **ask the repository owner and wait for an explicit yes before cutting it.**

Through `v0.0.66` the project used patch-only bumps. That ended on 2026-09-08, when a backlog of breaking changes made the patch counter actively misleading.

## Internal peer dependencies

Expand Down
2 changes: 1 addition & 1 deletion libs/a2ui/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@threadplane/a2ui",
"version": "0.0.66",
"version": "0.1.0",
"description": "A2UI protocol types, streaming parser, and dynamic-value resolver for agent-generated UI. Pure TypeScript.",
"license": "MIT",
"repository": {
Expand Down
6 changes: 3 additions & 3 deletions libs/ag-ui/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@threadplane/ag-ui",
"version": "0.0.66",
"version": "0.1.0",
"description": "AG-UI adapter for the Angular AI agent UI — connect any AG-UI-compatible backend to the same chat surface.",
"keywords": [
"angular",
Expand All @@ -10,8 +10,8 @@
"threadplane"
],
"peerDependencies": {
"@threadplane/chat": "0.0.66",
"@threadplane/telemetry": "^0.0.66",
"@threadplane/chat": "0.1.0",
"@threadplane/telemetry": "^0.1.0",
"@angular/core": "^20.0.0 || ^21.0.0 || ^22.0.0",
"@ag-ui/client": "*",
"@ag-ui/core": "*",
Expand Down
8 changes: 4 additions & 4 deletions libs/chat/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@threadplane/chat",
"version": "0.0.66",
"version": "0.1.0",
"description": "The Angular AI agent chat UI: <chat>, headless primitives, interrupts, subagents, and generative UI on Signals.",
"exports": {
"./chat.css": "./chat.css",
Expand All @@ -18,14 +18,14 @@
"@cacheplane/partial-markdown": "0.5.8"
},
"peerDependencies": {
"@threadplane/telemetry": "^0.0.66",
"@threadplane/telemetry": "^0.1.0",
"zod": "^3.25.0",
"@angular/core": "^20.0.0 || ^21.0.0 || ^22.0.0",
"@angular/common": "^20.0.0 || ^21.0.0 || ^22.0.0",
"@angular/platform-browser": "^20.0.0 || ^21.0.0 || ^22.0.0",
"@angular/router": "^20.0.0 || ^21.0.0 || ^22.0.0",
"@threadplane/render": "0.0.66",
"@threadplane/a2ui": "0.0.66",
"@threadplane/render": "0.1.0",
"@threadplane/a2ui": "0.1.0",
"@json-render/core": "^0.16.0",
"rxjs": "~7.8.0",
"marked": "^15.0.0 || ^16.0.0",
Expand Down
6 changes: 3 additions & 3 deletions libs/langgraph/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@threadplane/langgraph",
"version": "0.0.66",
"version": "0.1.0",
"description": "LangGraph adapter for the Angular AI agent UI — provideAgent()/injectAgent() expose a run as Angular Signals.",
"keywords": [
"angular",
Expand All @@ -11,8 +11,8 @@
"threadplane"
],
"peerDependencies": {
"@threadplane/chat": "0.0.66",
"@threadplane/telemetry": "^0.0.66",
"@threadplane/chat": "0.1.0",
"@threadplane/telemetry": "^0.1.0",
"@angular/core": "^20.0.0 || ^21.0.0 || ^22.0.0",
"@langchain/core": "^1.1.33",
"@langchain/langgraph-sdk": "^1.7.4",
Expand Down
4 changes: 2 additions & 2 deletions libs/render/package.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{
"name": "@threadplane/render",
"version": "0.0.66",
"version": "0.1.0",
"description": "Angular render engine for agent-generated UI: maps JSON specs onto your own design-system components.",
"peerDependencies": {
"@threadplane/telemetry": "^0.0.66",
"@threadplane/telemetry": "^0.1.0",
"@angular/core": "^20.0.0 || ^21.0.0 || ^22.0.0",
"@angular/common": "^20.0.0 || ^21.0.0 || ^22.0.0",
"@json-render/core": "^0.16.0"
Expand Down
2 changes: 1 addition & 1 deletion libs/telemetry/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@threadplane/telemetry",
"version": "0.0.66",
"version": "0.1.0",
"description": "Explicit Node and browser capture helpers for Angular AI agent applications that choose to send events.",
"license": "MIT",
"publishConfig": {
Expand Down
Loading
Loading