diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 01f0c653e..4c7fd0ee6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -377,11 +377,14 @@ jobs: with: python-version: '3.12' - run: npm ci + # The venv bakes in the absolute workspace path (/home/runner/work//), + # so the key carries github.repository: a repository rename must not restore a + # venv whose launcher shebangs point at the old path. - name: Cache examples-chat python venv uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 with: path: examples/chat/python/.venv - key: uv-venv-${{ runner.os }}-py3.12-${{ hashFiles('examples/chat/python/uv.lock') }} + key: uv-venv-${{ github.repository }}-${{ runner.os }}-py3.12-${{ hashFiles('examples/chat/python/uv.lock') }} - working-directory: examples/chat/python run: uv sync - run: npx nx run examples-chat-python:smoke --skip-nx-cache @@ -411,7 +414,7 @@ jobs: uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 with: path: examples/chat/python/.venv - key: uv-venv-${{ runner.os }}-py3.12-${{ hashFiles('examples/chat/python/uv.lock') }} + key: uv-venv-${{ github.repository }}-${{ runner.os }}-py3.12-${{ hashFiles('examples/chat/python/uv.lock') }} - working-directory: examples/chat/python run: uv sync - name: Cache Playwright browsers @@ -468,7 +471,7 @@ jobs: uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 with: path: examples/ag-ui/python/.venv - key: uv-venv-${{ runner.os }}-py3.12-${{ hashFiles('examples/ag-ui/python/uv.lock') }} + key: uv-venv-${{ github.repository }}-${{ runner.os }}-py3.12-${{ hashFiles('examples/ag-ui/python/uv.lock') }} - working-directory: examples/ag-ui/python run: uv sync - name: Check requirements.txt matches uv.lock @@ -578,7 +581,7 @@ jobs: uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 with: path: ${{ matrix.cap.python }}/.venv - key: uv-venv-${{ runner.os }}-py3.12-${{ matrix.cap.python }}-${{ hashFiles(format('{0}/uv.lock', matrix.cap.python)) }} + key: uv-venv-${{ github.repository }}-${{ runner.os }}-py3.12-${{ matrix.cap.python }}-${{ hashFiles(format('{0}/uv.lock', matrix.cap.python)) }} - name: uv sync per-cap python if: matrix.cap.python != '' working-directory: ${{ matrix.cap.python }} diff --git a/.github/workflows/publish-middleware-npm.yml b/.github/workflows/publish-middleware-npm.yml index 71c43c1a8..5ec7d02c7 100644 --- a/.github/workflows/publish-middleware-npm.yml +++ b/.github/workflows/publish-middleware-npm.yml @@ -13,7 +13,7 @@ # That initial upload creates the @threadplane/middleware package on npm. # 2. On npmjs.com → @threadplane/middleware → Settings → "Trusted Publisher", # add this repo + workflow: -# Repository: cacheplane/angular-agent-framework +# Repository: cacheplane/threadplane # Workflow: publish-middleware-npm.yml # 3. After that, all releases use OIDC from this workflow — no secret needed. # diff --git a/.github/workflows/publish-middleware-python.yml b/.github/workflows/publish-middleware-python.yml index 9d9f66db1..c4051c207 100644 --- a/.github/workflows/publish-middleware-python.yml +++ b/.github/workflows/publish-middleware-python.yml @@ -8,7 +8,7 @@ # 1. Log into PyPI under the **cacheplane** organization. # 2. Navigate to threadplane-middleware → Settings → "Trusted Publishers". # 3. Add a **Pending Publisher** with: -# Repository: cacheplane/angular-agent-framework +# Repository: cacheplane/threadplane # Workflow: publish-middleware-python.yml # Environment: (leave blank, or set to "pypi" if you create one) # 4. The FIRST-EVER publish must be bootstrapped locally by a maintainer diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 66a966e0e..53cda8514 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -5,7 +5,7 @@ Threadplane is MIT-licensed and developed in the open. Contributions are welcome ## How to contribute 1. **Found a bug or have a feature idea?** Open an issue at - describing the + describing the problem or proposal. Please search existing issues first. 2. **Code changes:** fork the repository (or create a topic branch if you have access), make your change on a branch, and open a pull request against `main`. @@ -148,11 +148,11 @@ Compare what was actually posted on the head SHA against what protection requires: ```bash -gh api repos/cacheplane/angular-agent-framework/commits//status --jq '[.statuses[].context]' +gh api repos/cacheplane/threadplane/commits//status --jq '[.statuses[].context]' ``` ```bash -gh api repos/cacheplane/angular-agent-framework/branches/main/protection --jq '.required_status_checks.checks' +gh api repos/cacheplane/threadplane/branches/main/protection --jq '.required_status_checks.checks' ``` Any required context missing from the posted list is the cause. Fix branch @@ -162,7 +162,7 @@ the next one. Note that check *runs* (GitHub Actions) and commit *statuses* (external apps like Vercel) are different APIs. `CI — required` is a check run, so it appears in `gh pr checks` but not in the `/status` output above; use -`gh api repos/cacheplane/angular-agent-framework/commits//check-runs` +`gh api repos/cacheplane/threadplane/commits//check-runs` for those. ### Rollback reference diff --git a/README.md b/README.md index 4743e5e1c..e7da256a4 100644 --- a/README.md +++ b/README.md @@ -20,8 +20,8 @@ LangGraph - - OpenSSF Scorecard + + OpenSSF Scorecard OpenSSF Best Practices diff --git a/SECURITY.md b/SECURITY.md index 3ebda5e3f..d820b9d5a 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -14,7 +14,7 @@ fixes. ## Reporting a Vulnerability Please report security issues privately via GitHub's -[private vulnerability reporting](https://github.com/cacheplane/angular-agent-framework/security/advisories/new). +[private vulnerability reporting](https://github.com/cacheplane/threadplane/security/advisories/new). We aim to acknowledge reports within 5 business days and to provide a remediation timeline after triage. Please do not open public issues for diff --git a/apps/website/content/blog/2026-05-28-human-in-the-loop-langgraph-agents-in-angular.mdx b/apps/website/content/blog/2026-05-28-human-in-the-loop-langgraph-agents-in-angular.mdx index f12ead0ac..eb6c61821 100644 --- a/apps/website/content/blog/2026-05-28-human-in-the-loop-langgraph-agents-in-angular.mdx +++ b/apps/website/content/blog/2026-05-28-human-in-the-loop-langgraph-agents-in-angular.mdx @@ -19,7 +19,7 @@ Clone the repo, run `nx serve cockpit-langgraph-interrupts-angular`, and follow The refund agent running in the docs workspace. Walk the approve / edit / cancel flow yourself. - + The exact graph.py and Angular component from this post. diff --git a/apps/website/content/blog/2026-06-04-human-in-the-loop-ag-ui-agents-in-angular.mdx b/apps/website/content/blog/2026-06-04-human-in-the-loop-ag-ui-agents-in-angular.mdx index 9d9db4c5f..0ee878962 100644 --- a/apps/website/content/blog/2026-06-04-human-in-the-loop-ag-ui-agents-in-angular.mdx +++ b/apps/website/content/blog/2026-06-04-human-in-the-loop-ag-ui-agents-in-angular.mdx @@ -21,7 +21,7 @@ Clone the repo, run `nx serve cockpit-ag-ui-interrupts-angular`, and follow alon The refund agent running in the docs workspace. Walk the approve / edit / cancel flow yourself. - + The exact graph.py, server.py, and Angular component from this post. @@ -439,7 +439,7 @@ Your chat surface does not pick. Pointers: -- The working example: [`cockpit/ag-ui/interrupts`](https://github.com/cacheplane/angular-agent-framework/tree/main/cockpit/ag-ui/interrupts) — Angular + Python, e2e-tested. +- The working example: [`cockpit/ag-ui/interrupts`](https://github.com/cacheplane/threadplane/tree/main/cockpit/ag-ui/interrupts) — Angular + Python, e2e-tested. - The cross-adapter parity rendered in docs: [Choosing an adapter](https://threadplane.ai/docs/choosing-an-adapter). - The AG-UI interrupts guide for protocol-level detail: [/docs/ag-ui/guides/interrupts](https://threadplane.ai/docs/ag-ui/guides/interrupts). - The langgraph counterpart, if you want both sides side-by-side: [Human-in-the-Loop LangGraph Agents in Angular](/blog/2026-05-28-human-in-the-loop-langgraph-agents-in-angular). diff --git a/apps/website/content/blog/2026-06-24-threadplane-earns-grade-a-hvtrust.mdx b/apps/website/content/blog/2026-06-24-threadplane-earns-grade-a-hvtrust.mdx index 91b203df5..fefc2b25a 100644 --- a/apps/website/content/blog/2026-06-24-threadplane-earns-grade-a-hvtrust.mdx +++ b/apps/website/content/blog/2026-06-24-threadplane-earns-grade-a-hvtrust.mdx @@ -121,7 +121,7 @@ The full breakdown — every dimension, the Scorecard checks, and the raw JSON A trust grade is a starting point, not a finish line. The real way to evaluate a framework is to build something with it. -So if you are curious: read the [listing](https://hvtracker.net/agents/threadplane/) and the [Agent Frameworks leaderboard](https://hvtracker.net/categories/agent-frameworks/), browse the [source on GitHub](https://github.com/cacheplane/angular-agent-framework) (all of it — it is almost all open), and ship your first streaming agent UI with the [quickstart](/docs/chat/getting-started/quickstart). +So if you are curious: read the [listing](https://hvtracker.net/agents/threadplane/) and the [Agent Frameworks leaderboard](https://hvtracker.net/categories/agent-frameworks/), browse the [source on GitHub](https://github.com/cacheplane/threadplane) (all of it — it is almost all open), and ship your first streaming agent UI with the [quickstart](/docs/chat/getting-started/quickstart). We will keep the signals fresh, keep the framework open, and keep working on the one number I am not proud of yet. The rest, you can verify. 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 f5c66127f..6ea15979d 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 @@ -84,7 +84,7 @@ It finalized as a success, with a tool call sitting there waiting for an approva The adapter's `interrupt` signal stayed undefined. It failed silently, which only means it took longer to notice. -The fix was small once the cause was clear, and it landed in [#888](https://github.com/cacheplane/angular-agent-framework/pull/888). +The fix was small once the cause was clear, and it landed in [#888](https://github.com/cacheplane/threadplane/pull/888). Both conventions are now recognized. Updated September 9, 2026: the adapter retains both forms in one session. Native batches take precedence in `auto` mode regardless of arrival order; the Mastra integration explicitly selects `mastra-command` so the resume includes its decision and suspended-tool correlation. @@ -112,8 +112,8 @@ Send it nothing addressable and it raises an error. Four runtimes, three answers to the question of how a resume identifies itself. The adapter now derives the outgoing shape from how the interrupt arrived, which is the only signal available that is not a hardcoded runtime name. -That work is in [#889](https://github.com/cacheplane/angular-agent-framework/pull/889). -The protocol-package upgrade in [#891](https://github.com/cacheplane/angular-agent-framework/pull/891) is what made the standard top-level array sendable at all. +That work is in [#889](https://github.com/cacheplane/threadplane/pull/889). +The protocol-package upgrade in [#891](https://github.com/cacheplane/threadplane/pull/891) is what made the standard top-level array sendable at all. The application-facing call did not change. You still write `submit({ resume })` and the adapter decides what goes on the wire. @@ -158,7 +158,7 @@ The platform kept serving the last image that booted. Nothing was red anywhere. The route had been returning a not-found for months. -The fix in [#899](https://github.com/cacheplane/angular-agent-framework/pull/899) was two import statements. +The fix in [#899](https://github.com/cacheplane/threadplane/pull/899) was two import statements. The deploy workflow now installs the exact dependency set, imports the server, and fails the job if it cannot boot. Verify the route, not the exit code. diff --git a/apps/website/content/docs/choosing-an-adapter/index.mdx b/apps/website/content/docs/choosing-an-adapter/index.mdx index 68af03b7c..2a6296ff1 100644 --- a/apps/website/content/docs/choosing-an-adapter/index.mdx +++ b/apps/website/content/docs/choosing-an-adapter/index.mdx @@ -145,16 +145,16 @@ Each demo backend ships its emitter in tree, roughly 200 to 430 lines per runtim Each runtime got a real server, started against the upstream AG-UI integration and driven with live model calls. The raw Server-Sent Events were captured off the wire, then replayed event-for-event through the pinned `@ag-ui/client` — schema parse plus `verifyEvents` — and through the adapter reducer itself. -The captures for messages, tool calls, state, and interrupts are committed at [`libs/ag-ui/fixtures/runtime-transcripts/`](https://github.com/cacheplane/angular-agent-framework/tree/main/libs/ag-ui/fixtures/runtime-transcripts), verbatim from the wire, and the adapter test suite replays them on every run. +The captures for messages, tool calls, state, and interrupts are committed at [`libs/ag-ui/fixtures/runtime-transcripts/`](https://github.com/cacheplane/threadplane/tree/main/libs/ag-ui/fixtures/runtime-transcripts), verbatim from the wire, and the adapter test suite replays them on every run. The subagent captures are committed as a `wire-capture-subagents.md` document alongside each backend under `cockpit/runtimes//`; the subagent transcript the suite replays is synthetic, built to the event shape those captures record. ### Runnable examples Each runtime has a standalone Angular example bound through `@threadplane/ag-ui`, with its own backend: -- [`cockpit/runtimes/aws-strands`](https://github.com/cacheplane/angular-agent-framework/tree/main/cockpit/runtimes/aws-strands) — Python, hosted in the shared FastAPI deployment. -- [`cockpit/runtimes/microsoft-agent-framework`](https://github.com/cacheplane/angular-agent-framework/tree/main/cockpit/runtimes/microsoft-agent-framework) — Python, hosted in that same FastAPI deployment, running beside the Strands and LangGraph topics in one process. -- [`cockpit/runtimes/mastra`](https://github.com/cacheplane/angular-agent-framework/tree/main/cockpit/runtimes/mastra) — TypeScript, hosted by a Node AG-UI service, because the upstream Mastra integration ships an in-process bridge rather than an HTTP endpoint. +- [`cockpit/runtimes/aws-strands`](https://github.com/cacheplane/threadplane/tree/main/cockpit/runtimes/aws-strands) — Python, hosted in the shared FastAPI deployment. +- [`cockpit/runtimes/microsoft-agent-framework`](https://github.com/cacheplane/threadplane/tree/main/cockpit/runtimes/microsoft-agent-framework) — Python, hosted in that same FastAPI deployment, running beside the Strands and LangGraph topics in one process. +- [`cockpit/runtimes/mastra`](https://github.com/cacheplane/threadplane/tree/main/cockpit/runtimes/mastra) — TypeScript, hosted by a Node AG-UI service, because the upstream Mastra integration ships an in-process bridge rather than an HTTP endpoint. In all three, the component binds the agent through `injectAgent()` and renders ``; the shared-state panels and approval cards around it are demo-specific, and each example wraps `provideAgent()` in a factory only because it resolves its endpoint at runtime. diff --git a/apps/website/content/docs/deep-agents/getting-started/introduction.mdx b/apps/website/content/docs/deep-agents/getting-started/introduction.mdx index 94bc9880e..6a810c2c0 100644 --- a/apps/website/content/docs/deep-agents/getting-started/introduction.mdx +++ b/apps/website/content/docs/deep-agents/getting-started/introduction.mdx @@ -76,7 +76,7 @@ That last row is a real constraint of the framework as it stands, not an oversig ## The demos -Each capability page describes a standalone example that runs the real framework against a real model. The examples live in the [repository's deep-agents examples](https://github.com/cacheplane/angular-agent-framework/tree/main/cockpit/deep-agents) and run in the [Threadplane docs workspace](/docs/deep-agents/capabilities/planning?mode=run), which shows the Angular source, the Python graph, and the system prompt beside the running demo. +Each capability page describes a standalone example that runs the real framework against a real model. The examples live in the [repository's deep-agents examples](https://github.com/cacheplane/threadplane/tree/main/cockpit/deep-agents) and run in the [Threadplane docs workspace](/docs/deep-agents/capabilities/planning?mode=run), which shows the Angular source, the Python graph, and the system prompt beside the running demo. All five share one scenario — an aviation dispatch desk with a handful of airport lookup tools — so the difference between two pages is the capability under test and nothing else. diff --git a/apps/website/content/docs/runtimes/aws-strands/how-it-connects.mdx b/apps/website/content/docs/runtimes/aws-strands/how-it-connects.mdx index a8b27c20a..30ebe34fd 100644 --- a/apps/website/content/docs/runtimes/aws-strands/how-it-connects.mdx +++ b/apps/website/content/docs/runtimes/aws-strands/how-it-connects.mdx @@ -5,7 +5,7 @@ description: The AG-UI wire conventions measured for AWS Strands: outcome interr # How AWS Strands Connects -This page records the AG-UI wire behavior measured for the Strands bridge on 2026-08-31. It describes what the runtime emitted, not what the protocol permits in general. The captured Server-Sent Events are committed at [`libs/ag-ui/fixtures/runtime-transcripts/`](https://github.com/cacheplane/angular-agent-framework/tree/main/libs/ag-ui/fixtures/runtime-transcripts) and replayed by the adapter test suite on every run. +This page records the AG-UI wire behavior measured for the Strands bridge on 2026-08-31. It describes what the runtime emitted, not what the protocol permits in general. The captured Server-Sent Events are committed at [`libs/ag-ui/fixtures/runtime-transcripts/`](https://github.com/cacheplane/threadplane/tree/main/libs/ag-ui/fixtures/runtime-transcripts) and replayed by the adapter test suite on every run. ## Transport diff --git a/apps/website/content/docs/runtimes/aws-strands/overview.mdx b/apps/website/content/docs/runtimes/aws-strands/overview.mdx index 7b16062b3..de3d48be4 100644 --- a/apps/website/content/docs/runtimes/aws-strands/overview.mdx +++ b/apps/website/content/docs/runtimes/aws-strands/overview.mdx @@ -127,7 +127,7 @@ Strands wraps every value an async-generator tool yields as a `tool_stream_event The handler registered on `research_availability` closes that gap. `subagent_emitter.py` translates the specialist's stream into `SUBAGENT_STARTED`, attributed `TEXT_MESSAGE_*` deltas carrying `subagentRunId`, and `SUBAGENT_FINISHED`, deriving every identifier from the tool call identifier the bridge already put on the wire. The adapter routes those attributed events into a subagent entry instead of the parent transcript, which is why the card streams the specialist's tokens live. -The wire capture behind that matrix cell is committed beside the backend at [`docs/wire-capture-subagents.md`](https://github.com/cacheplane/angular-agent-framework/blob/main/cockpit/runtimes/aws-strands/python/docs/wire-capture-subagents.md), before and after the emitter. Multi-agent routes crash the stale published wheel, which is one reason the example pins the bridge to a git reference instead. +The wire capture behind that matrix cell is committed beside the backend at [`docs/wire-capture-subagents.md`](https://github.com/cacheplane/threadplane/blob/main/cockpit/runtimes/aws-strands/python/docs/wire-capture-subagents.md), before and after the emitter. Multi-agent routes crash the stale published wheel, which is one reason the example pins the bridge to a git reference instead. ## Model access diff --git a/apps/website/content/docs/runtimes/aws-strands/quickstart.mdx b/apps/website/content/docs/runtimes/aws-strands/quickstart.mdx index 1416a01d9..b739e27ad 100644 --- a/apps/website/content/docs/runtimes/aws-strands/quickstart.mdx +++ b/apps/website/content/docs/runtimes/aws-strands/quickstart.mdx @@ -5,7 +5,7 @@ description: Run the AWS Strands runtime example locally, backend and Angular ap # AWS Strands Quickstart -This runs the example from a clone of the [monorepo](https://github.com/cacheplane/angular-agent-framework). The backend is a uvicorn process on port 5331; the Angular dev server is on port 4331 and proxies `/agent` to it. +This runs the example from a clone of the [monorepo](https://github.com/cacheplane/threadplane). The backend is a uvicorn process on port 5331; the Angular dev server is on port 4331 and proxies `/agent` to it. Node.js 20 or newer, Python 3.12 or newer, [`uv`](https://docs.astral.sh/uv/), and an OpenAI API key. No AWS account and no AWS credentials are required. @@ -15,8 +15,8 @@ Node.js 20 or newer, Python 3.12 or newer, [`uv`](https://docs.astral.sh/uv/), a ```bash -git clone https://github.com/cacheplane/angular-agent-framework.git -cd angular-agent-framework +git clone https://github.com/cacheplane/threadplane.git +cd threadplane npm ci ``` diff --git a/apps/website/content/docs/runtimes/getting-started/introduction.mdx b/apps/website/content/docs/runtimes/getting-started/introduction.mdx index bc3ba0649..817f971b5 100644 --- a/apps/website/content/docs/runtimes/getting-started/introduction.mdx +++ b/apps/website/content/docs/runtimes/getting-started/introduction.mdx @@ -96,4 +96,4 @@ Three differences turned up repeatedly, and each runtime page returns to them. - [AG-UI adapter introduction](/docs/ag-ui/getting-started/introduction) — the adapter these runtimes bind through. - [What changes when the runtime changes](/blog/what-changes-when-the-runtime-changes) — the argument for measuring portability. - [We measured the runtime swap](/blog/we-measured-the-runtime-swap) — the results write-up. -- [`libs/ag-ui/fixtures/runtime-transcripts/`](https://github.com/cacheplane/angular-agent-framework/tree/main/libs/ag-ui/fixtures/runtime-transcripts) — the captured Server-Sent Events, verbatim from the wire, plus one synthetic subagent transcript built to the shape those captures record. +- [`libs/ag-ui/fixtures/runtime-transcripts/`](https://github.com/cacheplane/threadplane/tree/main/libs/ag-ui/fixtures/runtime-transcripts) — the captured Server-Sent Events, verbatim from the wire, plus one synthetic subagent transcript built to the shape those captures record. 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 72135d829..67edf7e73 100644 --- a/apps/website/content/docs/runtimes/mastra/how-it-connects.mdx +++ b/apps/website/content/docs/runtimes/mastra/how-it-connects.mdx @@ -5,11 +5,11 @@ description: Measured AG-UI wire behavior for Mastra: both interrupt conventions # How Mastra Connects -This page records the AG-UI wire behavior measured for Mastra on 2026-08-31. It describes what the runtime emitted, not what the protocol permits in general. The captured Server-Sent Events are committed at [`libs/ag-ui/fixtures/runtime-transcripts/`](https://github.com/cacheplane/angular-agent-framework/tree/main/libs/ag-ui/fixtures/runtime-transcripts) and replayed by the adapter test suite on every run. +This page records the AG-UI wire behavior measured for Mastra on 2026-08-31. It describes what the runtime emitted, not what the protocol permits in general. The captured Server-Sent Events are committed at [`libs/ag-ui/fixtures/runtime-transcripts/`](https://github.com/cacheplane/threadplane/tree/main/libs/ag-ui/fixtures/runtime-transcripts) and replayed by the adapter test suite on every run. ## Transport is Threadplane's, not upstream's -`@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. +`@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/threadplane/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 21a0c56b1..35e825ad8 100644 --- a/apps/website/content/docs/runtimes/mastra/overview.mdx +++ b/apps/website/content/docs/runtimes/mastra/overview.mdx @@ -152,7 +152,7 @@ The bridge itself is unmodified; the tee touches only the public agent members t Its cells come from a real Mastra server driven with live model calls. The raw Server-Sent Events were captured off the wire and are committed and replayed like every other runtime's, including the interrupt and resume round trip driven through the real `@ag-ui/client`. [How it connects](/docs/runtimes/mastra/how-it-connects) records the resulting wire conventions. -The subagent capture behind the Subagents row is committed beside the example as [`angular/docs/wire-capture-subagents.md`](https://github.com/cacheplane/angular-agent-framework/blob/main/cockpit/runtimes/mastra/angular/docs/wire-capture-subagents.md). +The subagent capture behind the Subagents row is committed beside the example as [`angular/docs/wire-capture-subagents.md`](https://github.com/cacheplane/threadplane/blob/main/cockpit/runtimes/mastra/angular/docs/wire-capture-subagents.md). ## What's Next diff --git a/apps/website/content/docs/runtimes/mastra/quickstart.mdx b/apps/website/content/docs/runtimes/mastra/quickstart.mdx index 19829ae88..8d1c6d906 100644 --- a/apps/website/content/docs/runtimes/mastra/quickstart.mdx +++ b/apps/website/content/docs/runtimes/mastra/quickstart.mdx @@ -5,7 +5,7 @@ description: Run the Mastra runtime example locally against the Node AG-UI hosti # Mastra Quickstart -This runs the example from a clone of the [monorepo](https://github.com/cacheplane/angular-agent-framework). The backend is **not** Python: it is the Node service in `deployments/ag-ui-mastra`, listening on port 5332. The Angular dev server is on port 4332. +This runs the example from a clone of the [monorepo](https://github.com/cacheplane/threadplane). The backend is **not** Python: it is the Node service in `deployments/ag-ui-mastra`, listening on port 5332. The Angular dev server is on port 4332. Node.js 22 or newer and an OpenAI API key. No Python toolchain is involved in this example. @@ -19,8 +19,8 @@ Node.js 22 or newer and an OpenAI API key. No Python toolchain is involved in th ```bash -git clone https://github.com/cacheplane/angular-agent-framework.git -cd angular-agent-framework +git clone https://github.com/cacheplane/threadplane.git +cd threadplane npm ci ``` diff --git a/apps/website/content/docs/runtimes/microsoft-agent-framework/how-it-connects.mdx b/apps/website/content/docs/runtimes/microsoft-agent-framework/how-it-connects.mdx index 347394a37..7843a9c18 100644 --- a/apps/website/content/docs/runtimes/microsoft-agent-framework/how-it-connects.mdx +++ b/apps/website/content/docs/runtimes/microsoft-agent-framework/how-it-connects.mdx @@ -5,7 +5,7 @@ description: Measured AG-UI wire behavior for Microsoft Agent Framework: outcome # How Microsoft Agent Framework Connects -This page records the AG-UI wire behavior measured for the Microsoft Agent Framework bridge on 2026-08-31. It describes what the runtime emitted, not what the protocol permits in general. The captured Server-Sent Events are committed at [`libs/ag-ui/fixtures/runtime-transcripts/`](https://github.com/cacheplane/angular-agent-framework/tree/main/libs/ag-ui/fixtures/runtime-transcripts) and replayed by the adapter test suite on every run. +This page records the AG-UI wire behavior measured for the Microsoft Agent Framework bridge on 2026-08-31. It describes what the runtime emitted, not what the protocol permits in general. The captured Server-Sent Events are committed at [`libs/ag-ui/fixtures/runtime-transcripts/`](https://github.com/cacheplane/threadplane/tree/main/libs/ag-ui/fixtures/runtime-transcripts) and replayed by the adapter test suite on every run. ## Transport diff --git a/apps/website/content/docs/runtimes/microsoft-agent-framework/overview.mdx b/apps/website/content/docs/runtimes/microsoft-agent-framework/overview.mdx index 7d58d9804..60df019d9 100644 --- a/apps/website/content/docs/runtimes/microsoft-agent-framework/overview.mdx +++ b/apps/website/content/docs/runtimes/microsoft-agent-framework/overview.mdx @@ -45,7 +45,7 @@ The `delegation_*` helpers close that gap. They live in `src/subagent_emitter.py -The wire capture behind the design is committed next to the module as [`python/docs/wire-capture-subagents.md`](https://github.com/cacheplane/angular-agent-framework/blob/main/cockpit/runtimes/microsoft-agent-framework/python/docs/wire-capture-subagents.md). +The wire capture behind the design is committed next to the module as [`python/docs/wire-capture-subagents.md`](https://github.com/cacheplane/threadplane/blob/main/cockpit/runtimes/microsoft-agent-framework/python/docs/wire-capture-subagents.md). ### Choosing the model client diff --git a/apps/website/content/docs/runtimes/microsoft-agent-framework/quickstart.mdx b/apps/website/content/docs/runtimes/microsoft-agent-framework/quickstart.mdx index 674ecbaae..60a11562a 100644 --- a/apps/website/content/docs/runtimes/microsoft-agent-framework/quickstart.mdx +++ b/apps/website/content/docs/runtimes/microsoft-agent-framework/quickstart.mdx @@ -5,7 +5,7 @@ description: Run the Microsoft Agent Framework runtime example locally on ports # Microsoft Agent Framework Quickstart -This runs the example from a clone of the [monorepo](https://github.com/cacheplane/angular-agent-framework). The backend is a uvicorn process on port 5330; the Angular dev server is on port 4330 and proxies `/agent` to it. +This runs the example from a clone of the [monorepo](https://github.com/cacheplane/threadplane). The backend is a uvicorn process on port 5330; the Angular dev server is on port 4330 and proxies `/agent` to it. Node.js 20 or newer, Python 3.12 or newer, [`uv`](https://docs.astral.sh/uv/), and either an Azure OpenAI resource or an OpenAI API key. @@ -15,8 +15,8 @@ Node.js 20 or newer, Python 3.12 or newer, [`uv`](https://docs.astral.sh/uv/), a ```bash -git clone https://github.com/cacheplane/angular-agent-framework.git -cd angular-agent-framework +git clone https://github.com/cacheplane/threadplane.git +cd threadplane npm ci ``` diff --git a/apps/website/src/app/about/page.tsx b/apps/website/src/app/about/page.tsx index e9d9491ac..3e7066f93 100644 --- a/apps/website/src/app/about/page.tsx +++ b/apps/website/src/app/about/page.tsx @@ -75,7 +75,7 @@ export default function AboutPage() {

The source is public at{' '} - github.com/cacheplane/angular-agent-framework + github.com/cacheplane/threadplane .

diff --git a/apps/website/src/app/ag-ui/page.tsx b/apps/website/src/app/ag-ui/page.tsx index 71bf7626e..65644c87d 100644 --- a/apps/website/src/app/ag-ui/page.tsx +++ b/apps/website/src/app/ag-ui/page.tsx @@ -45,7 +45,7 @@ export default async function AgUiPage() {

- +

Talking to LangGraph Platform directly? See Choosing an adapter. diff --git a/apps/website/src/app/contact/page.spec.tsx b/apps/website/src/app/contact/page.spec.tsx index 6a35de8f3..d23d4f862 100644 --- a/apps/website/src/app/contact/page.spec.tsx +++ b/apps/website/src/app/contact/page.spec.tsx @@ -25,7 +25,7 @@ describe('ContactPage', () => { const email = screen.getByRole('link', { name: 'brian@threadplane.ai' }); expect(email.getAttribute('href')).toBe('mailto:brian@threadplane.ai'); const github = screen.getByRole('link', { name: 'GitHub issues' }); - expect(github.getAttribute('href')).toBe('https://github.com/cacheplane/angular-agent-framework/issues'); + expect(github.getAttribute('href')).toBe('https://github.com/cacheplane/threadplane/issues'); const discord = screen.getByRole('link', { name: 'Discord' }); expect(discord.getAttribute('href')).toBe('https://discord.gg/cacheplane'); expect(screen.getByTestId('stars')).toBeTruthy(); diff --git a/apps/website/src/app/contact/page.tsx b/apps/website/src/app/contact/page.tsx index 1dec146fd..055eb7be5 100644 --- a/apps/website/src/app/contact/page.tsx +++ b/apps/website/src/app/contact/page.tsx @@ -56,7 +56,7 @@ export default async function ContactPage({ Prefer not to use a form

diff --git a/apps/website/src/app/langgraph/page.tsx b/apps/website/src/app/langgraph/page.tsx index 2eed328db..f1d7b3594 100644 --- a/apps/website/src/app/langgraph/page.tsx +++ b/apps/website/src/app/langgraph/page.tsx @@ -44,7 +44,7 @@ export default async function LangGraphPage() {

- +

Not sure if LangGraph is right for your backend? See Choosing an adapter. diff --git a/apps/website/src/app/render/page.tsx b/apps/website/src/app/render/page.tsx index 89002dd0d..66b66429b 100644 --- a/apps/website/src/app/render/page.tsx +++ b/apps/website/src/app/render/page.tsx @@ -44,7 +44,7 @@ export default async function RenderPage() {

- +
MIT diff --git a/apps/website/src/components/contact/GitHubStarsPill.spec.tsx b/apps/website/src/components/contact/GitHubStarsPill.spec.tsx index 6e9bf5e63..c03d603fc 100644 --- a/apps/website/src/components/contact/GitHubStarsPill.spec.tsx +++ b/apps/website/src/components/contact/GitHubStarsPill.spec.tsx @@ -20,7 +20,7 @@ describe('GitHubStarsPill', () => { const { container } = render(el); expect(container.textContent).toMatch(/1,234/); expect(container.querySelector('a')?.getAttribute('href')) - .toBe('https://github.com/cacheplane/angular-agent-framework'); + .toBe('https://github.com/cacheplane/threadplane'); }); it('renders fallback when fetch returns null', async () => { diff --git a/apps/website/src/components/contact/GitHubStarsPill.tsx b/apps/website/src/components/contact/GitHubStarsPill.tsx index eed127da7..524dcab27 100644 --- a/apps/website/src/components/contact/GitHubStarsPill.tsx +++ b/apps/website/src/components/contact/GitHubStarsPill.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { Pill } from '../ui/Pill'; import { getGitHubStars } from '../../lib/github'; -const REPO = 'cacheplane/angular-agent-framework'; +const REPO = 'cacheplane/threadplane'; const REPO_URL = `https://github.com/${REPO}`; export async function GitHubStarsPill() { diff --git a/apps/website/src/components/docs/PageActions.spec.tsx b/apps/website/src/components/docs/PageActions.spec.tsx index 459c51921..38b1e9bbd 100644 --- a/apps/website/src/components/docs/PageActions.spec.tsx +++ b/apps/website/src/components/docs/PageActions.spec.tsx @@ -182,6 +182,6 @@ describe('PageActions', () => { expect(chatgpt.getAttribute('href')).toContain('https://chatgpt.com/?hints=search&q='); expect(chatgpt.getAttribute('href')).toContain(encodeURIComponent('https://threadplane.ai/docs/langgraph/guides/streaming')); const github = screen.getByRole('menuitem', { name: /edit on github/i }) as HTMLAnchorElement; - expect(github.getAttribute('href')).toBe('https://github.com/cacheplane/angular-agent-framework/edit/main/apps/website/content/docs/langgraph/guides/streaming.mdx'); + expect(github.getAttribute('href')).toBe('https://github.com/cacheplane/threadplane/edit/main/apps/website/content/docs/langgraph/guides/streaming.mdx'); }); }); diff --git a/apps/website/src/components/docs/PageActions.tsx b/apps/website/src/components/docs/PageActions.tsx index 3246d165b..a17317c07 100644 --- a/apps/website/src/components/docs/PageActions.tsx +++ b/apps/website/src/components/docs/PageActions.tsx @@ -16,7 +16,7 @@ import type { DocHeading } from '../../lib/extract-headings'; import { SITE_ORIGIN } from '../../lib/site-origin'; const GITHUB_EDIT_BASE = - 'https://github.com/cacheplane/angular-agent-framework/edit/main/apps/website/content/docs'; + 'https://github.com/cacheplane/threadplane/edit/main/apps/website/content/docs'; interface Props { library: string; diff --git a/apps/website/src/components/shared/Nav.spec.tsx b/apps/website/src/components/shared/Nav.spec.tsx index fe6fe37d2..3e6133ad7 100644 --- a/apps/website/src/components/shared/Nav.spec.tsx +++ b/apps/website/src/components/shared/Nav.spec.tsx @@ -205,7 +205,7 @@ describe('Docs mobile navigation', () => { within(screen.getByRole('navigation')) .getByRole('link', { name: 'GitHub repository' }) .getAttribute('href'), - ).toBe('https://github.com/cacheplane/angular-agent-framework'); + ).toBe('https://github.com/cacheplane/threadplane'); }); it('opens pre-pushed to the docs tree on a docs route, with no tab strip', () => { diff --git a/apps/website/src/components/shared/SiteFooter.spec.tsx b/apps/website/src/components/shared/SiteFooter.spec.tsx index c31cd73fd..4dc203049 100644 --- a/apps/website/src/components/shared/SiteFooter.spec.tsx +++ b/apps/website/src/components/shared/SiteFooter.spec.tsx @@ -77,7 +77,7 @@ describe('SiteFooter', () => { .every( (link) => link.getAttribute('href') === - 'https://github.com/cacheplane/angular-agent-framework', + 'https://github.com/cacheplane/threadplane', ), ).toBe(true); }); diff --git a/apps/website/src/lib/github.spec.ts b/apps/website/src/lib/github.spec.ts index 1af83901f..278106906 100644 --- a/apps/website/src/lib/github.spec.ts +++ b/apps/website/src/lib/github.spec.ts @@ -14,10 +14,10 @@ describe('getGitHubStars', () => { ok: true, json: async () => ({ stargazers_count: 1234 }), }); - const stars = await getGitHubStars('cacheplane/angular-agent-framework'); + const stars = await getGitHubStars('cacheplane/threadplane'); expect(stars).toBe(1234); expect(fetchMock).toHaveBeenCalledWith( - 'https://api.github.com/repos/cacheplane/angular-agent-framework', + 'https://api.github.com/repos/cacheplane/threadplane', expect.objectContaining({ next: { revalidate: 86400 }, }), diff --git a/apps/website/src/lib/github.ts b/apps/website/src/lib/github.ts index ee4018f65..db18fd7af 100644 --- a/apps/website/src/lib/github.ts +++ b/apps/website/src/lib/github.ts @@ -1,5 +1,5 @@ export async function getGitHubStars( - repo = 'cacheplane/angular-agent-framework', + repo = 'cacheplane/threadplane', ): Promise { try { const res = await fetch(`https://api.github.com/repos/${repo}`, { diff --git a/apps/website/src/lib/positioning.ts b/apps/website/src/lib/positioning.ts index ecc368552..dde31e6d5 100644 --- a/apps/website/src/lib/positioning.ts +++ b/apps/website/src/lib/positioning.ts @@ -68,7 +68,7 @@ export const HERO_TRUST_LINE = `MIT · ${formatAngularRange(WEBSITE_SUPPORTED_AN * the browser bundle and the page 500s. positioning.ts is client-safe — the * hero already imports it. */ -export const GITHUB_REPO_URL = 'https://github.com/cacheplane/angular-agent-framework'; +export const GITHUB_REPO_URL = 'https://github.com/cacheplane/threadplane'; // ── The open-source band (the dark full stop after the stage). An eyebrow, // two words, the licence and the repo. It used to be the quietest band on the diff --git a/apps/website/src/lib/preflight-checklist.ts b/apps/website/src/lib/preflight-checklist.ts index 3e55bbf5c..28a4f87c7 100644 --- a/apps/website/src/lib/preflight-checklist.ts +++ b/apps/website/src/lib/preflight-checklist.ts @@ -33,7 +33,7 @@ export interface ChecklistRow { */ export const AIRWORTHINESS: readonly ChecklistRow[] = [ { challenge: 'Framework rank', response: '#11', unit: 'OF 122', href: 'https://hvtracker.net/categories/agent-frameworks/' }, - { challenge: 'OpenSSF Scorecard', response: '8.3', unit: '/ 10', href: 'https://scorecard.dev/viewer/?uri=github.com/cacheplane/angular-agent-framework' }, + { challenge: 'OpenSSF Scorecard', response: '8.3', unit: '/ 10', href: 'https://scorecard.dev/viewer/?uri=github.com/cacheplane/threadplane' }, { challenge: 'Supply-chain grade', // Deliberately empty: the badge is the response. It sits near an A-band diff --git a/apps/website/src/lib/structured-data.spec.ts b/apps/website/src/lib/structured-data.spec.ts index 1be974102..be5928c4e 100644 --- a/apps/website/src/lib/structured-data.spec.ts +++ b/apps/website/src/lib/structured-data.spec.ts @@ -54,7 +54,7 @@ describe('organizationJsonLd', () => { it('links only to absolute https profile urls', () => { const sameAs = organizationJsonLd()['sameAs']; - expect(sameAs).toContain('https://github.com/cacheplane/angular-agent-framework'); + expect(sameAs).toContain('https://github.com/cacheplane/threadplane'); for (const url of sameAs) expect(url).toMatch(/^https:\/\//); }); @@ -193,7 +193,7 @@ describe('softwareSourceCodeJsonLd', () => { it('points at the real repository', () => { expect(softwareSourceCodeJsonLd()['codeRepository']).toBe( - 'https://github.com/cacheplane/angular-agent-framework', + 'https://github.com/cacheplane/threadplane', ); }); diff --git a/apps/website/src/lib/structured-data.ts b/apps/website/src/lib/structured-data.ts index 3661bc0f4..478c92df4 100644 --- a/apps/website/src/lib/structured-data.ts +++ b/apps/website/src/lib/structured-data.ts @@ -11,7 +11,7 @@ const SCHEMA_CONTEXT = 'https://schema.org'; * The canonical repository. Verified public; the npm *organization* page is * member-gated, so `sameAs` links the public package page instead. */ -export const REPOSITORY_URL = 'https://github.com/cacheplane/angular-agent-framework'; +export const REPOSITORY_URL = 'https://github.com/cacheplane/threadplane'; /** * Stable identity for the publisher node. Every other node refers to the diff --git a/examples/ag-ui/angular/README.md b/examples/ag-ui/angular/README.md index 3dd12f6da..c8f7f26a1 100644 --- a/examples/ag-ui/angular/README.md +++ b/examples/ag-ui/angular/README.md @@ -1,7 +1,7 @@ # AG-UI Itinerary example (Angular) A trip-planner demo where the agent edits a live itinerary UI over the -[AG-UI](https://github.com/cacheplane/angular-agent-framework) transport. It has a +[AG-UI](https://github.com/cacheplane/threadplane) transport. It has a chat/panel layout and an **App mode** that swaps the panel for a full-bleed Google Map cockpit. diff --git a/examples/chat/README.md b/examples/chat/README.md index 452f2d5fe..9a58aaf5e 100644 --- a/examples/chat/README.md +++ b/examples/chat/README.md @@ -17,8 +17,8 @@ This example serves two audiences: ```bash # 1. Clone & install workspace deps -git clone https://github.com/cacheplane/angular-agent-framework.git -cd angular-agent-framework +git clone https://github.com/cacheplane/threadplane.git +cd threadplane npm ci # 2. Configure the backend diff --git a/libs/a2ui/README.md b/libs/a2ui/README.md index ddaa12331..9520270ab 100644 --- a/libs/a2ui/README.md +++ b/libs/a2ui/README.md @@ -1,6 +1,6 @@ # @threadplane/a2ui -The A2UI (Agent-to-UI) protocol layer behind generative UI in [Threadplane](https://github.com/cacheplane/angular-agent-framework), the open-source thread-plane for agents, targeting the **A2UI v0.9.1 stable release**. It defines the wire format an agent uses to drive a UI surface, plus the parser and resolver that read it — framework-agnostic, pure TypeScript, no Angular dependency, usable in any TypeScript environment. +The A2UI (Agent-to-UI) protocol layer behind generative UI in [Threadplane](https://github.com/cacheplane/threadplane), the open-source thread-plane for agents, targeting the **A2UI v0.9.1 stable release**. It defines the wire format an agent uses to drive a UI surface, plus the parser and resolver that read it — framework-agnostic, pure TypeScript, no Angular dependency, usable in any TypeScript environment.

diff --git a/libs/a2ui/package.json b/libs/a2ui/package.json index 62b351bdd..6501bac3c 100644 --- a/libs/a2ui/package.json +++ b/libs/a2ui/package.json @@ -5,12 +5,12 @@ "license": "MIT", "repository": { "type": "git", - "url": "https://github.com/cacheplane/angular-agent-framework.git", + "url": "https://github.com/cacheplane/threadplane.git", "directory": "libs/a2ui" }, - "homepage": "https://github.com/cacheplane/angular-agent-framework#readme", + "homepage": "https://github.com/cacheplane/threadplane#readme", "bugs": { - "url": "https://github.com/cacheplane/angular-agent-framework/issues" + "url": "https://github.com/cacheplane/threadplane/issues" }, "sideEffects": false } diff --git a/libs/ag-ui/README.md b/libs/ag-ui/README.md index 4b6c8d309..14b1d420a 100644 --- a/libs/ag-ui/README.md +++ b/libs/ag-ui/README.md @@ -1,6 +1,6 @@ # @threadplane/ag-ui -The AG-UI adapter for [Threadplane](https://github.com/cacheplane/angular-agent-framework), the open-source thread-plane for agents. Wraps an [AG-UI](https://github.com/ag-ui-protocol/ag-ui) `AbstractAgent` into the runtime-neutral `Agent` contract that `@threadplane/chat` consumes, so any AG-UI-compatible backend drives the same chat surface. +The AG-UI adapter for [Threadplane](https://github.com/cacheplane/threadplane), the open-source thread-plane for agents. Wraps an [AG-UI](https://github.com/ag-ui-protocol/ag-ui) `AbstractAgent` into the runtime-neutral `Agent` contract that `@threadplane/chat` consumes, so any AG-UI-compatible backend drives the same chat surface.

@@ -14,7 +14,7 @@ The AG-UI adapter for [Threadplane](https://github.com/cacheplane/angular-agent-

-Part of [Threadplane](https://github.com/cacheplane/angular-agent-framework). +Part of [Threadplane](https://github.com/cacheplane/threadplane). > Talking to LangGraph Platform directly? See [`@threadplane/langgraph`](https://www.npmjs.com/package/@threadplane/langgraph) — same API shape, LangGraph SDK underneath. @@ -258,5 +258,5 @@ plain-text console announcements. No click or registration is required. It has b queues/retries and a three-second request deadline; collection failures do not affect application use. A linked eligible install email can receive the generic founder hello; runtime evidence alone does not approve a contact. See the -[telemetry controls and collection details](https://github.com/cacheplane/angular-agent-framework/tree/main/libs/telemetry#automatic-development-runtime-collection) +[telemetry controls and collection details](https://github.com/cacheplane/threadplane/tree/main/libs/telemetry#automatic-development-runtime-collection) and [Privacy](https://threadplane.ai/privacy). diff --git a/libs/ag-ui/package.json b/libs/ag-ui/package.json index 2abb9d314..65bea2d8c 100644 --- a/libs/ag-ui/package.json +++ b/libs/ag-ui/package.json @@ -20,12 +20,12 @@ "license": "MIT", "repository": { "type": "git", - "url": "https://github.com/cacheplane/angular-agent-framework.git", + "url": "https://github.com/cacheplane/threadplane.git", "directory": "libs/ag-ui" }, - "homepage": "https://github.com/cacheplane/angular-agent-framework#readme", + "homepage": "https://github.com/cacheplane/threadplane#readme", "bugs": { - "url": "https://github.com/cacheplane/angular-agent-framework/issues" + "url": "https://github.com/cacheplane/threadplane/issues" }, "sideEffects": false, "exports": { diff --git a/libs/chat/README.md b/libs/chat/README.md index 6744b85ca..30640fcda 100644 --- a/libs/chat/README.md +++ b/libs/chat/README.md @@ -1,6 +1,6 @@ # @threadplane/chat -The chat surface of [Threadplane](https://github.com/cacheplane/angular-agent-framework), the open-source thread-plane for agents. Headless primitives plus opinionated compositions read a runtime-neutral `Agent` contract, so the UI is built once and runs over LangGraph or AG-UI without changes. Angular 20–22, on Signals and DI. +The chat surface of [Threadplane](https://github.com/cacheplane/threadplane), the open-source thread-plane for agents. Headless primitives plus opinionated compositions read a runtime-neutral `Agent` contract, so the UI is built once and runs over LangGraph or AG-UI without changes. Angular 20–22, on Signals and DI.

@@ -403,5 +403,5 @@ plain-text console announcements. No click or registration is required. It has b queues/retries and a three-second request deadline; collection failures do not affect application use. A linked eligible install email can receive the generic founder hello; runtime evidence alone does not approve a contact. See the -[telemetry controls and collection details](https://github.com/cacheplane/angular-agent-framework/tree/main/libs/telemetry#automatic-development-runtime-collection) +[telemetry controls and collection details](https://github.com/cacheplane/threadplane/tree/main/libs/telemetry#automatic-development-runtime-collection) and [Privacy](https://threadplane.ai/privacy). diff --git a/libs/chat/package.json b/libs/chat/package.json index 08fde33fb..d4e73532e 100644 --- a/libs/chat/package.json +++ b/libs/chat/package.json @@ -39,12 +39,12 @@ "license": "MIT", "repository": { "type": "git", - "url": "https://github.com/cacheplane/angular-agent-framework.git", + "url": "https://github.com/cacheplane/threadplane.git", "directory": "libs/chat" }, - "homepage": "https://github.com/cacheplane/angular-agent-framework#readme", + "homepage": "https://github.com/cacheplane/threadplane#readme", "bugs": { - "url": "https://github.com/cacheplane/angular-agent-framework/issues" + "url": "https://github.com/cacheplane/threadplane/issues" }, "sideEffects": [ "**/chat-tokens.ts", diff --git a/libs/cockpit-registry/package.json b/libs/cockpit-registry/package.json index 2260db58b..e6624e930 100644 --- a/libs/cockpit-registry/package.json +++ b/libs/cockpit-registry/package.json @@ -4,12 +4,12 @@ "license": "MIT", "repository": { "type": "git", - "url": "https://github.com/cacheplane/angular-agent-framework.git", + "url": "https://github.com/cacheplane/threadplane.git", "directory": "libs/cockpit-registry" }, - "homepage": "https://github.com/cacheplane/angular-agent-framework#readme", + "homepage": "https://github.com/cacheplane/threadplane#readme", "bugs": { - "url": "https://github.com/cacheplane/angular-agent-framework/issues" + "url": "https://github.com/cacheplane/threadplane/issues" }, "sideEffects": false, "private": true diff --git a/libs/cockpit-runtime-bridge/package.json b/libs/cockpit-runtime-bridge/package.json index b3fcfe1ef..8ac9608f5 100644 --- a/libs/cockpit-runtime-bridge/package.json +++ b/libs/cockpit-runtime-bridge/package.json @@ -4,12 +4,12 @@ "license": "MIT", "repository": { "type": "git", - "url": "https://github.com/cacheplane/angular-agent-framework.git", + "url": "https://github.com/cacheplane/threadplane.git", "directory": "libs/cockpit-runtime-bridge" }, - "homepage": "https://github.com/cacheplane/angular-agent-framework#readme", + "homepage": "https://github.com/cacheplane/threadplane#readme", "bugs": { - "url": "https://github.com/cacheplane/angular-agent-framework/issues" + "url": "https://github.com/cacheplane/threadplane/issues" }, "sideEffects": false, "private": true diff --git a/libs/cockpit-shell/package.json b/libs/cockpit-shell/package.json index fd603c014..2d44a9486 100644 --- a/libs/cockpit-shell/package.json +++ b/libs/cockpit-shell/package.json @@ -4,12 +4,12 @@ "license": "MIT", "repository": { "type": "git", - "url": "https://github.com/cacheplane/angular-agent-framework.git", + "url": "https://github.com/cacheplane/threadplane.git", "directory": "libs/cockpit-shell" }, - "homepage": "https://github.com/cacheplane/angular-agent-framework#readme", + "homepage": "https://github.com/cacheplane/threadplane#readme", "bugs": { - "url": "https://github.com/cacheplane/angular-agent-framework/issues" + "url": "https://github.com/cacheplane/threadplane/issues" }, "sideEffects": false, "private": true, diff --git a/libs/design-tokens/package.json b/libs/design-tokens/package.json index 74183274c..b785348d8 100644 --- a/libs/design-tokens/package.json +++ b/libs/design-tokens/package.json @@ -13,12 +13,12 @@ }, "repository": { "type": "git", - "url": "https://github.com/cacheplane/angular-agent-framework.git", + "url": "https://github.com/cacheplane/threadplane.git", "directory": "libs/design-tokens" }, - "homepage": "https://github.com/cacheplane/angular-agent-framework#readme", + "homepage": "https://github.com/cacheplane/threadplane#readme", "bugs": { - "url": "https://github.com/cacheplane/angular-agent-framework/issues" + "url": "https://github.com/cacheplane/threadplane/issues" }, "sideEffects": false, "private": true diff --git a/libs/example-layouts/package.json b/libs/example-layouts/package.json index 996956865..6f9dad125 100644 --- a/libs/example-layouts/package.json +++ b/libs/example-layouts/package.json @@ -12,12 +12,12 @@ "license": "MIT", "repository": { "type": "git", - "url": "https://github.com/cacheplane/angular-agent-framework.git", + "url": "https://github.com/cacheplane/threadplane.git", "directory": "libs/example-layouts" }, - "homepage": "https://github.com/cacheplane/angular-agent-framework#readme", + "homepage": "https://github.com/cacheplane/threadplane#readme", "bugs": { - "url": "https://github.com/cacheplane/angular-agent-framework/issues" + "url": "https://github.com/cacheplane/threadplane/issues" }, "sideEffects": [ "./src/public-api.ts" diff --git a/libs/langgraph/README.md b/libs/langgraph/README.md index 1b9b299cc..679d6d21b 100644 --- a/libs/langgraph/README.md +++ b/libs/langgraph/README.md @@ -1,6 +1,6 @@ # @threadplane/langgraph -The LangGraph adapter for [Threadplane](https://github.com/cacheplane/angular-agent-framework), the open-source thread-plane for agents. Wraps a LangGraph agent into the runtime-neutral `Agent` contract that `@threadplane/chat` consumes — the Angular counterpart to LangGraph's React `useStream()` hook, with signal-driven access to messages, status, tool calls, interrupts, subagents, branch history, and thread persistence. +The LangGraph adapter for [Threadplane](https://github.com/cacheplane/threadplane), the open-source thread-plane for agents. Wraps a LangGraph agent into the runtime-neutral `Agent` contract that `@threadplane/chat` consumes — the Angular counterpart to LangGraph's React `useStream()` hook, with signal-driven access to messages, status, tool calls, interrupts, subagents, branch history, and thread persistence.

@@ -275,5 +275,5 @@ plain-text console announcements. No click or registration is required. It has b queues/retries and a three-second request deadline; collection failures do not affect application use. A linked eligible install email can receive the generic founder hello; runtime evidence alone does not approve a contact. See the -[telemetry controls and collection details](https://github.com/cacheplane/angular-agent-framework/tree/main/libs/telemetry#automatic-development-runtime-collection) +[telemetry controls and collection details](https://github.com/cacheplane/threadplane/tree/main/libs/telemetry#automatic-development-runtime-collection) and [Privacy](https://threadplane.ai/privacy). diff --git a/libs/langgraph/package.json b/libs/langgraph/package.json index 145dc20ad..2b8f9e0a2 100644 --- a/libs/langgraph/package.json +++ b/libs/langgraph/package.json @@ -21,12 +21,12 @@ "license": "MIT", "repository": { "type": "git", - "url": "https://github.com/cacheplane/angular-agent-framework.git", + "url": "https://github.com/cacheplane/threadplane.git", "directory": "libs/langgraph" }, - "homepage": "https://github.com/cacheplane/angular-agent-framework#readme", + "homepage": "https://github.com/cacheplane/threadplane#readme", "bugs": { - "url": "https://github.com/cacheplane/angular-agent-framework/issues" + "url": "https://github.com/cacheplane/threadplane/issues" }, "sideEffects": false, "exports": { diff --git a/libs/middleware/README.md b/libs/middleware/README.md index f236683eb..f28ea5cc6 100644 --- a/libs/middleware/README.md +++ b/libs/middleware/README.md @@ -1,6 +1,6 @@ # @threadplane/middleware -The backend half of client tools in [Threadplane](https://github.com/cacheplane/angular-agent-framework), +The backend half of client tools in [Threadplane](https://github.com/cacheplane/threadplane), the open-source thread-plane for agents. Client tools are declared in the browser: the model calls them, and the browser executes them. diff --git a/libs/middleware/package.json b/libs/middleware/package.json index dee085256..eeca53d8a 100644 --- a/libs/middleware/package.json +++ b/libs/middleware/package.json @@ -7,9 +7,9 @@ "type": "module", "sideEffects": false, "publishConfig": { "access": "public" }, - "repository": { "type": "git", "url": "https://github.com/cacheplane/angular-agent-framework.git", "directory": "libs/middleware" }, - "homepage": "https://github.com/cacheplane/angular-agent-framework#readme", - "bugs": { "url": "https://github.com/cacheplane/angular-agent-framework/issues" }, + "repository": { "type": "git", "url": "https://github.com/cacheplane/threadplane.git", "directory": "libs/middleware" }, + "homepage": "https://github.com/cacheplane/threadplane#readme", + "bugs": { "url": "https://github.com/cacheplane/threadplane/issues" }, "exports": { "./langgraph": { "types": "./src/langgraph/index.d.ts", "default": "./src/langgraph/index.js" }, "./README.md": "./README.md" diff --git a/libs/render/README.md b/libs/render/README.md index d58cbb1ab..128326a8d 100644 --- a/libs/render/README.md +++ b/libs/render/README.md @@ -1,6 +1,6 @@ # @threadplane/render -The generative-UI render engine of [Threadplane](https://github.com/cacheplane/angular-agent-framework), the open-source thread-plane for agents. `@json-render/core`-backed: it maps a JSON spec to Angular components through a registry you define, so agent-generated UI can only render the design-system components you registered. `@threadplane/chat` uses it for generative UI. +The generative-UI render engine of [Threadplane](https://github.com/cacheplane/threadplane), the open-source thread-plane for agents. `@json-render/core`-backed: it maps a JSON spec to Angular components through a registry you define, so agent-generated UI can only render the design-system components you registered. `@threadplane/chat` uses it for generative UI.

@@ -152,5 +152,5 @@ plain-text console announcements. No click or registration is required. It has b queues/retries and a three-second request deadline; collection failures do not affect application use. A linked eligible install email can receive the generic founder hello; runtime evidence alone does not approve a contact. See the -[telemetry controls and collection details](https://github.com/cacheplane/angular-agent-framework/tree/main/libs/telemetry#automatic-development-runtime-collection) +[telemetry controls and collection details](https://github.com/cacheplane/threadplane/tree/main/libs/telemetry#automatic-development-runtime-collection) and [Privacy](https://threadplane.ai/privacy). diff --git a/libs/render/package.json b/libs/render/package.json index 7eb9c41b8..cb2549152 100644 --- a/libs/render/package.json +++ b/libs/render/package.json @@ -11,12 +11,12 @@ "license": "MIT", "repository": { "type": "git", - "url": "https://github.com/cacheplane/angular-agent-framework.git", + "url": "https://github.com/cacheplane/threadplane.git", "directory": "libs/render" }, - "homepage": "https://github.com/cacheplane/angular-agent-framework#readme", + "homepage": "https://github.com/cacheplane/threadplane#readme", "bugs": { - "url": "https://github.com/cacheplane/angular-agent-framework/issues" + "url": "https://github.com/cacheplane/threadplane/issues" }, "sideEffects": false, "exports": { diff --git a/libs/telemetry/README.md b/libs/telemetry/README.md index 6ef7a3fa4..8c49354ca 100644 --- a/libs/telemetry/README.md +++ b/libs/telemetry/README.md @@ -1,7 +1,7 @@ # @threadplane/telemetry Explicit capture helpers and automatic development runtime collection for -applications built with [Threadplane](https://github.com/cacheplane/angular-agent-framework), +applications built with [Threadplane](https://github.com/cacheplane/threadplane), the open-source thread-plane for agents. The automatic path starts only when a supported development integration is used, as described below. diff --git a/libs/telemetry/package.json b/libs/telemetry/package.json index b5ab461b6..da3dc692a 100644 --- a/libs/telemetry/package.json +++ b/libs/telemetry/package.json @@ -8,12 +8,12 @@ }, "repository": { "type": "git", - "url": "https://github.com/cacheplane/angular-agent-framework.git", + "url": "https://github.com/cacheplane/threadplane.git", "directory": "libs/telemetry" }, - "homepage": "https://github.com/cacheplane/angular-agent-framework#readme", + "homepage": "https://github.com/cacheplane/threadplane#readme", "bugs": { - "url": "https://github.com/cacheplane/angular-agent-framework/issues" + "url": "https://github.com/cacheplane/threadplane/issues" }, "sideEffects": false, "type": "module", diff --git a/libs/ui-react/package.json b/libs/ui-react/package.json index d210f2c73..6966dfc73 100644 --- a/libs/ui-react/package.json +++ b/libs/ui-react/package.json @@ -4,12 +4,12 @@ "license": "MIT", "repository": { "type": "git", - "url": "https://github.com/cacheplane/angular-agent-framework.git", + "url": "https://github.com/cacheplane/threadplane.git", "directory": "libs/ui-react" }, - "homepage": "https://github.com/cacheplane/angular-agent-framework#readme", + "homepage": "https://github.com/cacheplane/threadplane#readme", "bugs": { - "url": "https://github.com/cacheplane/angular-agent-framework/issues" + "url": "https://github.com/cacheplane/threadplane/issues" }, "sideEffects": false, "peerDependencies": { diff --git a/libs/workspace-react/package.json b/libs/workspace-react/package.json index b5c674a72..018db7ce9 100644 --- a/libs/workspace-react/package.json +++ b/libs/workspace-react/package.json @@ -4,12 +4,12 @@ "license": "MIT", "repository": { "type": "git", - "url": "https://github.com/cacheplane/angular-agent-framework.git", + "url": "https://github.com/cacheplane/threadplane.git", "directory": "libs/workspace-react" }, - "homepage": "https://github.com/cacheplane/angular-agent-framework#readme", + "homepage": "https://github.com/cacheplane/threadplane#readme", "bugs": { - "url": "https://github.com/cacheplane/angular-agent-framework/issues" + "url": "https://github.com/cacheplane/threadplane/issues" }, "sideEffects": false, "peerDependencies": { diff --git a/marketing/assets/package.json b/marketing/assets/package.json index de57b321a..5c7b1a470 100644 --- a/marketing/assets/package.json +++ b/marketing/assets/package.json @@ -6,7 +6,7 @@ "types": "./src/index.ts", "repository": { "type": "git", - "url": "https://github.com/cacheplane/angular-agent-framework.git", + "url": "https://github.com/cacheplane/threadplane.git", "directory": "marketing/assets" }, "sideEffects": false, diff --git a/marketing/channels/package.json b/marketing/channels/package.json index f6526d102..0f574eddb 100644 --- a/marketing/channels/package.json +++ b/marketing/channels/package.json @@ -6,7 +6,7 @@ "types": "./src/index.ts", "repository": { "type": "git", - "url": "https://github.com/cacheplane/angular-agent-framework.git", + "url": "https://github.com/cacheplane/threadplane.git", "directory": "marketing/channels" }, "sideEffects": false, diff --git a/tools/posthog/dashboards/developer-funnel.json b/tools/posthog/dashboards/developer-funnel.json index 36c14416d..25c1ad377 100644 --- a/tools/posthog/dashboards/developer-funnel.json +++ b/tools/posthog/dashboards/developer-funnel.json @@ -2,7 +2,7 @@ "slug": "developer-funnel", "posthog_id": 1582272, "name": "Growth \u00b7 Acquisition and demo engagement", - "description": "Website intent, client-observed form acceptance and independent demo milestones. Not a sequential install-to-email funnel. Actual install/runtime activation, enrichment and outreach outcomes are in Neon; use growth:report. https://github.com/cacheplane/angular-agent-framework/blob/main/docs/growth/README.md", + "description": "Website intent, client-observed form acceptance and independent demo milestones. Not a sequential install-to-email funnel. Actual install/runtime activation, enrichment and outreach outcomes are in Neon; use growth:report. https://github.com/cacheplane/threadplane/blob/main/docs/growth/README.md", "tags": [ "gtm", "growth", diff --git a/tools/posthog/dashboards/growth-overview.json b/tools/posthog/dashboards/growth-overview.json index c90978b20..df7204528 100644 --- a/tools/posthog/dashboards/growth-overview.json +++ b/tools/posthog/dashboards/growth-overview.json @@ -2,7 +2,7 @@ "slug": "growth-overview", "posthog_id": 2073577, "name": "Growth · Quick overview", - "description": "V1 acquisition and observed usage, with explicit data-quality context. Copy attempts are not installs; demo milestones are not activation. Neon owns actual installs, enrichment, authorization and email outcomes: npm run growth:report -- funnel / journey. No automatic person linkage is implied. https://github.com/cacheplane/angular-agent-framework/blob/main/docs/growth/README.md", + "description": "V1 acquisition and observed usage, with explicit data-quality context. Copy attempts are not installs; demo milestones are not activation. Neon owns actual installs, enrichment, authorization and email outcomes: npm run growth:report -- funnel / journey. No automatic person linkage is implied. https://github.com/cacheplane/threadplane/blob/main/docs/growth/README.md", "tags": [ "gtm", "growth",