Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
157 commits
Select commit Hold shift + click to select a range
eb53d60
feat: animated arch diagram, copy buttons, tab labels, deploy docs (#8)
blove Apr 4, 2026
a2549a5
feat: gradient feature chips, copy icon, TOC fix (#9)
blove Apr 4, 2026
fae8af8
docs: improve all 18 docs pages to intro quality (#10)
blove Apr 4, 2026
421b5fc
docs: expand LangGraph Basics with 4 agent patterns + fix data flow (…
blove Apr 4, 2026
7dfc915
docs: comprehensive overhaul — 8 pages rewritten, 3300+ lines added (…
blove Apr 5, 2026
349578a
docs: Phase 2+3 — polish guides, fix quickstart/install, expand API p…
blove Apr 5, 2026
89c2ecf
feat(cockpit): complete cockpit application with 14 capability exampl…
blove Apr 5, 2026
d6a9cd0
feat(cockpit): complete cockpit application with 14 capability exampl…
blove Apr 5, 2026
e5c00b3
feat: add @cacheplane/render and @cacheplane/chat libraries
Apr 5, 2026
39922fe
feat(cockpit): add design tokens CSS, Tailwind v4 to Angular apps, fi…
blove Apr 5, 2026
2c7d42a
feat(chat): Apple-clean UI redesign + streaming example integration
Apr 5, 2026
33d9925
feat(cockpit): wire all 13 remaining Angular examples to @cacheplane/…
Apr 6, 2026
c620c91
feat(cockpit): production deployment - LangGraph Cloud, Angular hosti…
blove Apr 6, 2026
c9c93f5
feat(cockpit): Tier 1 example customization — thread management + cap…
Apr 6, 2026
ed65946
feat(cockpit): Tier 2 — memory sidebar, subagent tracking, interrupt …
Apr 6, 2026
2179dff
feat(cockpit): Tier 3 — time-travel checkpoint nav + durable-executio…
Apr 6, 2026
9a4e20d
fix(cockpit): production review pass — 22 fixes across 14 examples
Apr 6, 2026
c8fc73e
fix(cockpit): restore streaming and deployment-runtime to use ChatCom…
blove Apr 6, 2026
6b68e8a
fix(cockpit): update e2e tests for current UI (#24)
blove Apr 6, 2026
cf14665
fix(cockpit): restore fileReplacements for dev environment in all 13 …
blove Apr 6, 2026
2dd2c55
fix(cockpit): use full URLs in dev environments (SDK requires absolut…
blove Apr 6, 2026
50e391e
feat(website): add Examples link to header and footer (#25)
blove Apr 6, 2026
d021da7
fix(chat): fix broken style interpolation in ChatInput border-color
blove Apr 6, 2026
c197f18
fix(ci): isolate examples deploy to prevent overwriting website (#26)
blove Apr 6, 2026
41f8553
fix(chat): send simple {role, content} dict instead of HumanMessage o…
blove Apr 6, 2026
7690d04
docs: add continuation context for chat library + cockpit integration
blove Apr 6, 2026
d4dd70c
feat(chat): ship-readiness polish — Tailwind, auto-scroll, markdown, …
blove Apr 6, 2026
682485d
feat(chat): ship-readiness polish — Tailwind, auto-scroll, markdown, …
blove Apr 6, 2026
ba89f13
feat(chat): ship-readiness polish — Tailwind, auto-scroll, markdown, …
blove Apr 6, 2026
867c23e
Rebrand to Angular Stream Resource (#28)
blove Apr 6, 2026
dd10288
Rebrand to Angular Stream Resource (#28)
blove Apr 6, 2026
2dccb0a
Rebrand to Angular Stream Resource (#28)
blove Apr 6, 2026
20247b3
feat(website): add narrative sections, pilot-to-prod page, and rebran…
blove Apr 6, 2026
510befe
feat(website): add narrative sections, pilot-to-prod page, and rebran…
blove Apr 6, 2026
65f13df
feat(website): add narrative sections, pilot-to-prod page, and rebran…
blove Apr 6, 2026
8d24542
fix(chat): fix runtime errors + ViewEncapsulation breaking theme (#30)
blove Apr 6, 2026
beee42a
feat(cockpit): complete sidebar implementations for all 14 capability…
blove Apr 6, 2026
0e3fb00
fix(website): replace unsourced stats with verified Gartner and Stack…
blove Apr 6, 2026
1c9e7b6
fix(website): replace unsourced stats with verified Gartner and Stack…
blove Apr 6, 2026
8a83e34
fix(stream-resource): persist thread ID across messages + smooth scro…
blove Apr 6, 2026
c7423cb
merge: resolve conflicts with main
blove Apr 6, 2026
16d37f7
merge: resolve conflicts with main
blove Apr 6, 2026
49d2c87
fix(website): replace unsourced stats with verified Gartner citations…
blove Apr 6, 2026
205f9db
fix(chat): refocus input after submit + force scroll on new messages …
blove Apr 6, 2026
88c748e
fix(cockpit): align all proxy configs to port 8123 (#35)
blove Apr 6, 2026
91db98a
docs: add website audit and lead generation specs
blove Apr 6, 2026
40a967b
docs: add website audit and lead generation specs
blove Apr 6, 2026
8e99805
docs: add implementation plans for lead gen and website audit
blove Apr 6, 2026
5e52aeb
docs: add implementation plans for lead gen and website audit
blove Apr 6, 2026
d0eee24
chore: install resend and react-email dependencies
blove Apr 6, 2026
b8e8ba2
chore: install resend and react-email dependencies
blove Apr 6, 2026
b19a131
feat: add shared resend module with audience helper
blove Apr 6, 2026
e53d86d
feat: add shared resend module with audience helper
blove Apr 6, 2026
07e19be
feat: add lead notification email template
blove Apr 6, 2026
fd13886
feat: add lead notification email template
blove Apr 6, 2026
bd3b71f
feat: add whitepaper download email template
blove Apr 6, 2026
7f16a19
feat: add whitepaper download email template
blove Apr 6, 2026
53000c3
feat: add newsletter welcome email template
blove Apr 6, 2026
e41dd9f
feat: add newsletter welcome email template
blove Apr 6, 2026
ad23adc
feat: wire /api/leads to Resend email + audience
blove Apr 6, 2026
c948d1a
feat: wire /api/leads to Resend email + audience
blove Apr 6, 2026
aee1641
feat: wire /api/whitepaper-signup to Resend email delivery
blove Apr 6, 2026
c33e2e1
feat: wire /api/whitepaper-signup to Resend email delivery
blove Apr 6, 2026
206b000
feat: add /api/newsletter route with Resend welcome email
blove Apr 6, 2026
4b5d310
feat: add /api/newsletter route with Resend welcome email
blove Apr 6, 2026
732f292
fix: convert email templates to plain HTML to avoid React dual-instan…
blove Apr 6, 2026
5c700cf
fix: convert email templates to plain HTML to avoid React dual-instan…
blove Apr 6, 2026
253d262
fix: lazy-init Resend client to gracefully handle missing API key
blove Apr 6, 2026
fba8c65
fix: lazy-init Resend client to gracefully handle missing API key
blove Apr 6, 2026
170fffe
fix: make ChatFeaturesSection responsive on mobile
blove Apr 6, 2026
3092ca4
fix: make ChatFeaturesSection responsive on mobile
blove Apr 6, 2026
4fb5580
fix: stack FairComparisonSection rows vertically on mobile
blove Apr 6, 2026
150ca98
fix: stack FairComparisonSection rows vertically on mobile
blove Apr 6, 2026
0489a6d
fix: increase touch targets to meet WCAG 44px minimum
blove Apr 6, 2026
1aaaec2
fix: increase touch targets to meet WCAG 44px minimum
blove Apr 6, 2026
ee94f62
fix: enforce 12px minimum font size on progress bar labels
blove Apr 6, 2026
5975f8f
fix: enforce 12px minimum font size on progress bar labels
blove Apr 6, 2026
13928b2
feat: add social proof badge strip below stats
blove Apr 6, 2026
b65d9e2
feat: add social proof badge strip below stats
blove Apr 6, 2026
80a2e9b
feat: add newsletter signup form to footer
blove Apr 6, 2026
fcfe07b
feat: add newsletter signup form to footer
blove Apr 6, 2026
1f788f9
feat: restructure white paper section with soft gate
blove Apr 6, 2026
5f62f73
feat: restructure white paper section with soft gate
blove Apr 6, 2026
0207286
feat: add OpenGraph and Twitter Card meta tags
blove Apr 6, 2026
32b2221
feat: add OpenGraph and Twitter Card meta tags
blove Apr 6, 2026
bc624a5
merge: resolve ProblemSection conflict with main (keep our stat + fon…
blove Apr 6, 2026
888701c
merge: resolve ProblemSection conflict with main (keep our stat + fon…
blove Apr 6, 2026
ea717e6
feat(website): lead gen with Resend + mobile fixes + design improveme…
blove Apr 6, 2026
7f31ebb
fix(deploy): rewrite base href per example so assets resolve to corre…
blove Apr 6, 2026
d504b17
fix(website): fix flaky e2e test blocking production deploys (#38)
blove Apr 7, 2026
e880111
feat: rebrand from streamResource to agent() — @cacheplane/angular
blove Apr 7, 2026
8f6ec67
feat: rebrand from streamResource to agent() — @cacheplane/angular
blove Apr 7, 2026
352daff
merge: resolve conflicts with main (keep renamed versions)
blove Apr 7, 2026
5dbeb85
merge: resolve conflicts with main (keep renamed versions)
blove Apr 7, 2026
7af946a
feat: rebrand to Angular Agent Framework — agent() + @cacheplane/angu…
blove Apr 7, 2026
3beba17
fix(website): correct api reference e2e test path after rebrand (#40)
blove Apr 7, 2026
62a2478
chore: trigger examples redeploy with base-href fix (#41)
blove Apr 7, 2026
93b7dab
merge: pull latest main
blove Apr 7, 2026
7353ae7
merge: pull latest main
blove Apr 7, 2026
82412c4
fix: complete rebrand audit — nav bug, hero copy, templates, footer
blove Apr 7, 2026
e439b03
fix: complete rebrand audit — nav bug, hero copy, templates, footer
blove Apr 7, 2026
4e93b69
fix: complete rebrand audit — nav bug, hero copy, templates (#42)
blove Apr 7, 2026
6bde751
fix: remove $20k from pilot program, include with app license, annual…
blove Apr 7, 2026
b96574c
fix: remove $20k from pilot program, include with app license, annual…
blove Apr 7, 2026
b8b1300
fix: resolve API docs slug mismatch after rename
blove Apr 7, 2026
0b4e127
fix: resolve API docs slug mismatch after rename
blove Apr 7, 2026
96c0b49
fix: API docs, pricing updates, rebrand audit fixes (#44)
blove Apr 7, 2026
66b6f7c
Merge remote-tracking branch 'origin/main' into claude/zealous-jones
blove Apr 7, 2026
615898d
Merge remote-tracking branch 'origin/main' into claude/zealous-jones
blove Apr 7, 2026
c24819a
fix(angular): normalize relative apiUrl to absolute for LangGraph SDK…
blove Apr 7, 2026
7499df5
refactor: rename stream-resource lib to agent in Nx project structure
blove Apr 7, 2026
f7a90e3
refactor: rename stream-resource lib to agent in Nx project structure
blove Apr 7, 2026
0818eb6
Merge remote-tracking branch 'origin/main' into claude/zealous-jones
blove Apr 7, 2026
aca9d65
Merge remote-tracking branch 'origin/main' into claude/zealous-jones
blove Apr 7, 2026
5df4b89
refactor: rename stream-resource lib to agent in Nx project structure…
blove Apr 7, 2026
35cc8b7
fix(ci): trigger examples redeploy when libs change (#46)
blove Apr 7, 2026
99192f2
Merge remote-tracking branch 'origin/main' into claude/zealous-jones
blove Apr 7, 2026
8aec369
Merge remote-tracking branch 'origin/main' into claude/zealous-jones
blove Apr 7, 2026
4d57744
feat: add airplane emoji favicon and logo to header/footer
blove Apr 7, 2026
58a0e11
feat: add airplane emoji favicon and logo to header/footer
blove Apr 7, 2026
a298356
fix: prevent FullStackSection connector animations from overlapping c…
blove Apr 7, 2026
db10a06
fix: prevent FullStackSection connector animations from overlapping c…
blove Apr 7, 2026
8d7d57f
fix: add remark-gfm to enable markdown table rendering in docs
blove Apr 7, 2026
24c4326
fix: add remark-gfm to enable markdown table rendering in docs
blove Apr 7, 2026
32393f5
fix: update developer seat feature text to "12-month license"
blove Apr 7, 2026
b0305da
fix: update developer seat feature text to "12-month license"
blove Apr 7, 2026
533dd42
feat: add dismissible whitepaper announcement toast
blove Apr 7, 2026
8ee2ec8
feat: add dismissible whitepaper announcement toast
blove Apr 7, 2026
9b6b349
fix: docs tables, pricing, favicon, animation, announcement toast (#47)
blove Apr 7, 2026
24cc135
feat: add lead capture form to announcement toast
blove Apr 7, 2026
f3923da
feat: add lead capture form to announcement toast
blove Apr 7, 2026
1dd71db
merge: resolve AnnouncementToast conflict (keep form version)
blove Apr 7, 2026
b225874
merge: resolve AnnouncementToast conflict (keep form version)
blove Apr 7, 2026
b253a27
feat: add lead capture form to whitepaper announcement toast (#49)
blove Apr 7, 2026
5f08b93
feat: replace social proof badges with animated logo scroll strip
blove Apr 7, 2026
7e8ded9
feat: replace social proof badges with animated logo scroll strip
blove Apr 7, 2026
c671226
Merge remote-tracking branch 'origin/main' into claude/zealous-jones
blove Apr 7, 2026
aa1697a
Merge remote-tracking branch 'origin/main' into claude/zealous-jones
blove Apr 7, 2026
99d6a8b
feat: animated company logo scroll strip for social proof (#50)
blove Apr 7, 2026
a3e8c9f
Merge remote-tracking branch 'origin/main' into claude/zealous-jones
blove Apr 7, 2026
fce1b7b
Merge remote-tracking branch 'origin/main' into claude/zealous-jones
blove Apr 7, 2026
09a773c
feat: add Loops.so integration for drip email campaigns
blove Apr 7, 2026
d94f93f
feat: add Loops.so integration for drip email campaigns
blove Apr 7, 2026
a791806
feat: add Loops.so integration for drip email campaigns (#51)
blove Apr 7, 2026
2f40696
feat(website): multi-library docs for agent, render, and chat (#48)
blove Apr 7, 2026
77fa37a
feat: replace Loops with self-hosted drip via Resend scheduled_at
blove Apr 7, 2026
4ba5f38
feat: replace Loops with self-hosted drip via Resend scheduled_at
blove Apr 7, 2026
ca2856c
merge: resolve whitepaper-signup conflict (keep drip version)
blove Apr 7, 2026
7bd0a37
merge: resolve whitepaper-signup conflict (keep drip version)
blove Apr 7, 2026
2496029
feat: replace Loops with self-hosted drip via Resend scheduled_at (#52)
blove Apr 7, 2026
67836c0
feat: unified gradient-header email template design
blove Apr 7, 2026
558676f
feat: unified gradient-header email template design
blove Apr 7, 2026
413d3fa
merge: resolve drip template conflict (keep gradient-header version)
blove Apr 7, 2026
7064f3f
merge: resolve drip template conflict (keep gradient-header version)
blove Apr 7, 2026
69c9859
Merge remote-tracking branch 'origin/main' into claude/zealous-jones
blove Apr 7, 2026
3bf6c08
Merge remote-tracking branch 'origin/claude/zealous-jones' into claud…
blove Apr 7, 2026
448f622
feat: migrate all domains from stream-resource.dev to cacheplane.ai
blove Apr 7, 2026
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
10 changes: 5 additions & 5 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ jobs:
node-version: 22
cache: npm
- run: npm ci
- run: npx tsx apps/cockpit/scripts/deploy-smoke.ts --url https://cockpit.stream-resource.dev --dry-run
- run: npx tsx apps/cockpit/scripts/deploy-smoke.ts --url https://cockpit.cacheplane.ai --dry-run

mcp:
name: MCP — build / smoke
Expand Down Expand Up @@ -239,7 +239,7 @@ jobs:
if: steps.affected.outputs.website == 'true'
run: npx nx e2e website --skip-nx-cache
env:
BASE_URL: https://stream-resource.dev
BASE_URL: https://cacheplane.ai
- name: Prepare cockpit Vercel project
if: steps.affected.outputs.cockpit == 'true'
run: |
Expand All @@ -259,7 +259,7 @@ jobs:
- name: Verify deployed cockpit
if: steps.affected.outputs.cockpit == 'true'
run: |
npx tsx apps/cockpit/scripts/deploy-smoke.ts --url https://cockpit.stream-resource.dev --retries 20 --retry-delay-ms 5000
npx tsx apps/cockpit/scripts/deploy-smoke.ts --url https://cockpit.cacheplane.ai --retries 20 --retry-delay-ms 5000

# ── Angular examples deploy ──────────────────────────────────────────
- name: Check if examples changed
Expand Down Expand Up @@ -314,6 +314,6 @@ jobs:
- name: Run production smoke tests
run: npx playwright test apps/cockpit/e2e/production-smoke.spec.ts --reporter=list
env:
BASE_URL: https://cockpit.stream-resource.dev
EXAMPLES_URL: https://examples.stream-resource.dev
BASE_URL: https://cockpit.cacheplane.ai
EXAMPLES_URL: https://examples.cacheplane.ai
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
2 changes: 1 addition & 1 deletion COMMERCIAL.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ Any use in a for-profit product, service, or organization requires a paid commer

## Purchase or inquire

- Website: https://stream-resource.dev/pricing
- Website: https://cacheplane.ai/pricing
- Email: hello@cacheplane.ai

See [`LICENSE-COMMERCIAL`](./LICENSE-COMMERCIAL) for the full commercial license terms.
20 changes: 10 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<p align="center">
<img
src="https://stream-resource.dev/assets/hero.svg"
src="https://cacheplane.ai/assets/hero.svg"
alt="Angular Agent Framework — The Enterprise Streaming Resource for LangChain and Angular"
width="100%"
/>
Expand All @@ -17,7 +17,7 @@
<a href="./LICENSE">
<img alt="License: PolyForm Noncommercial + Commercial" src="https://img.shields.io/badge/license-PolyForm%20Noncommercial%20%2B%20Commercial-6C8EFF?labelColor=080B14&style=flat-square" />
</a>
<a href="https://stream-resource.dev">
<a href="https://cacheplane.ai">
<img alt="Angular 20+" src="https://img.shields.io/badge/Angular-20%2B-6C8EFF?labelColor=080B14&style=flat-square" />
</a>
<a href="https://langchain-ai.github.io/langgraph/">
Expand Down Expand Up @@ -110,7 +110,7 @@ That's it. `chat.messages()` is an Angular Signal. Bind it directly in your temp

<p align="center">
<img
src="https://stream-resource.dev/assets/arch-diagram.svg"
src="https://cacheplane.ai/assets/arch-diagram.svg"
alt="Angular Agent Framework architecture: Angular Component → agent() → StreamManager Bridge → LangGraph Platform, with signals returned reactively"
width="100%"
/>
Expand All @@ -129,17 +129,17 @@ That's it. `chat.messages()` is an Angular Signal. Bind it directly in your temp
| **Application Deployment** | $2,000 / app | One-time per application — covers dev, staging, and prod |
| **Enterprise** | Custom | Volume licensing, priority support, custom contract |

[Full pricing details and license terms →](https://stream-resource.dev/pricing)
[Full pricing details and license terms →](https://cacheplane.ai/pricing)

---

## Documentation

- [Getting Started](https://stream-resource.dev/docs/getting-started)
- [API Reference](https://stream-resource.dev/api-reference)
- [Testing with MockAgentTransport](https://stream-resource.dev/docs/testing)
- [Human-in-the-Loop / Interrupts](https://stream-resource.dev/docs/interrupts)
- [Subagent Streaming](https://stream-resource.dev/docs/subagents)
- [Getting Started](https://cacheplane.ai/docs/getting-started)
- [API Reference](https://cacheplane.ai/api-reference)
- [Testing with MockAgentTransport](https://cacheplane.ai/docs/testing)
- [Human-in-the-Loop / Interrupts](https://cacheplane.ai/docs/interrupts)
- [Subagent Streaming](https://cacheplane.ai/docs/subagents)

---

Expand All @@ -150,4 +150,4 @@ That's it. `chat.messages()` is an Angular Signal. Bind it directly in your temp
- **PolyForm Noncommercial 1.0.0** — free for noncommercial use (personal projects, academic, research, non-profit internal tooling). See [`LICENSE`](./LICENSE).
- **Angular Agent Framework Commercial License** — required for any for-profit or revenue-generating use. See [`LICENSE-COMMERCIAL`](./LICENSE-COMMERCIAL) and [`COMMERCIAL.md`](./COMMERCIAL.md).

This is **not** an open-source license. Commercial use — including use in a for-profit product, service, or organization — requires a paid commercial license. See [pricing](https://stream-resource.dev/pricing).
This is **not** an open-source license. Commercial use — including use in a for-profit product, service, or organization — requires a paid commercial license. See [pricing](https://cacheplane.ai/pricing).
8 changes: 4 additions & 4 deletions apps/cockpit/e2e/production-smoke.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,16 @@ import { expect, test } from '@playwright/test';
* Production smoke test — verifies the deployed stack works end-to-end.
*
* Requires:
* EXAMPLES_URL - e.g., https://examples.stream-resource.dev
* EXAMPLES_URL - e.g., https://examples.cacheplane.ai
* OPENAI_API_KEY - for send/receive tests (optional)
*
* Run:
* BASE_URL=https://cockpit.stream-resource.dev \
* EXAMPLES_URL=https://examples.stream-resource.dev \
* BASE_URL=https://cockpit.cacheplane.ai \
* EXAMPLES_URL=https://examples.cacheplane.ai \
* npx playwright test apps/cockpit/e2e/production-smoke.spec.ts
*/

const EXAMPLES_URL = process.env['EXAMPLES_URL'] ?? 'https://examples.stream-resource.dev';
const EXAMPLES_URL = process.env['EXAMPLES_URL'] ?? 'https://examples.cacheplane.ai';

const CAPABILITIES = [
'langgraph/streaming',
Expand Down
12 changes: 6 additions & 6 deletions apps/cockpit/scripts/deploy-smoke.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@ describe('deploy smoke helper', () => {
expect(
parseDeploySmokeArgs([
'--url',
'https://cockpit.stream-resource.dev',
'https://cockpit.cacheplane.ai',
'--dry-run',
'--retries',
'5',
'--retry-delay-ms',
'1000',
])
).toEqual({
url: 'https://cockpit.stream-resource.dev',
url: 'https://cockpit.cacheplane.ai',
expectedTitle: 'Cockpit',
dryRun: true,
retries: 5,
Expand All @@ -25,11 +25,11 @@ describe('deploy smoke helper', () => {
it('formats dry-run output without performing a network request', async () => {
await expect(
runDeploySmoke({
url: 'https://cockpit.stream-resource.dev',
url: 'https://cockpit.cacheplane.ai',
expectedTitle: 'Cockpit',
dryRun: true,
})
).resolves.toBe('dry-run:https://cockpit.stream-resource.dev:Cockpit');
).resolves.toBe('dry-run:https://cockpit.cacheplane.ai:Cockpit');
});

it('retries until the deployment responds with the expected title', async () => {
Expand All @@ -46,13 +46,13 @@ describe('deploy smoke helper', () => {

await expect(
runDeploySmoke({
url: 'https://cockpit.stream-resource.dev',
url: 'https://cockpit.cacheplane.ai',
retries: 1,
retryDelayMs: 1,
fetchImpl,
sleep,
})
).resolves.toBe('pass:https://cockpit.stream-resource.dev:Cockpit');
).resolves.toBe('pass:https://cockpit.cacheplane.ai:Cockpit');

expect(fetchImpl).toHaveBeenCalledTimes(2);
expect(sleep).toHaveBeenCalledTimes(1);
Expand Down
6 changes: 3 additions & 3 deletions apps/cockpit/src/lib/content-bundle.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,10 @@ describe('resolveRuntimeUrl', () => {
});

it('uses NEXT_PUBLIC_COCKPIT_RUNTIME_BASE_URL when set', () => {
vi.stubEnv('NEXT_PUBLIC_COCKPIT_RUNTIME_BASE_URL', 'https://examples.stream-resource.dev');
vi.stubEnv('NEXT_PUBLIC_COCKPIT_RUNTIME_BASE_URL', 'https://examples.cacheplane.ai');
expect(
resolveRuntimeUrl({ runtimeUrl: 'langgraph/streaming', devPort: 4300 })
).toBe('https://examples.stream-resource.dev/langgraph/streaming');
).toBe('https://examples.cacheplane.ai/langgraph/streaming');
});

it('falls back to localhost with devPort when no env var is set', () => {
Expand All @@ -49,7 +49,7 @@ describe('resolveRuntimeUrl', () => {
});

it('returns null when runtimeUrl is undefined even with env var set', () => {
vi.stubEnv('NEXT_PUBLIC_COCKPIT_RUNTIME_BASE_URL', 'https://examples.stream-resource.dev');
vi.stubEnv('NEXT_PUBLIC_COCKPIT_RUNTIME_BASE_URL', 'https://examples.cacheplane.ai');
expect(
resolveRuntimeUrl({ runtimeUrl: undefined, devPort: undefined })
).toBeNull();
Expand Down
6 changes: 3 additions & 3 deletions apps/website/emails/drip-whitepaper-followup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ export function dripWhitepaperFollowupHtml(day: number): { subject: string; html
<p style="font-size:11px;font-family:monospace;text-transform:uppercase;letter-spacing:0.08em;color:#004090;font-weight:700;margin:0 0 8px">Whitepaper Follow-up</p>
<p style="font-size:20px;font-weight:700;color:#1a1a2e;margin:0 0 14px;line-height:1.3">Did you get a chance to read Chapter 3?</p>
<p style="font-size:14px;color:#555770;line-height:1.7;margin:0 0 24px">Chapter 3 covers <strong>tool-call rendering</strong> — how to surface agent actions as real UI instead of raw JSON. It's the chapter most teams bookmark first.</p>
<a href="https://stream-resource.dev/whitepaper.pdf" style="display:inline-block;background-color:#004090;color:#fff;padding:12px 28px;border-radius:8px;font-size:14px;font-weight:700;text-decoration:none">Read the Guide →</a>
<a href="https://cacheplane.ai/whitepaper.pdf" style="display:inline-block;background-color:#004090;color:#fff;padding:12px 28px;border-radius:8px;font-size:14px;font-weight:700;text-decoration:none">Read the Guide →</a>
`,
showUnsubscribe: true,
}),
Expand All @@ -24,7 +24,7 @@ export function dripWhitepaperFollowupHtml(day: number): { subject: string; html
<p style="font-size:11px;font-family:monospace;text-transform:uppercase;letter-spacing:0.08em;color:#004090;font-weight:700;margin:0 0 8px">Production Readiness</p>
<p style="font-size:20px;font-weight:700;color:#1a1a2e;margin:0 0 14px;line-height:1.3">The gap between demo and production</p>
<p style="font-size:14px;color:#555770;line-height:1.7;margin:0 0 24px">Half of GenAI projects die after proof of concept. The gap isn't the model — it's the frontend production path: streaming state, thread persistence, human approval flows, and deterministic testing.</p>
<a href="https://stream-resource.dev/docs" style="display:inline-block;background-color:#004090;color:#fff;padding:12px 28px;border-radius:8px;font-size:14px;font-weight:700;text-decoration:none">See How It Works →</a>
<a href="https://cacheplane.ai/docs" style="display:inline-block;background-color:#004090;color:#fff;padding:12px 28px;border-radius:8px;font-size:14px;font-weight:700;text-decoration:none">See How It Works →</a>
`,
showUnsubscribe: true,
}),
Expand All @@ -44,7 +44,7 @@ export function dripWhitepaperFollowupHtml(day: number): { subject: string; html
<p style="font-size:13px;color:#555770;margin:0 0 4px;line-height:1.6"><strong style="color:#004090">Month 1</strong> · First agent in staging</p>
<p style="font-size:13px;color:#555770;margin:0;line-height:1.6"><strong style="color:#004090">Month 3</strong> · Production deployment</p>
</div>
<a href="https://stream-resource.dev/pilot-to-prod" style="display:inline-block;background-color:#004090;color:#fff;padding:12px 28px;border-radius:8px;font-size:14px;font-weight:700;text-decoration:none">Learn About the Pilot →</a>
<a href="https://cacheplane.ai/pilot-to-prod" style="display:inline-block;background-color:#004090;color:#fff;padding:12px 28px;border-radius:8px;font-size:14px;font-weight:700;text-decoration:none">Learn About the Pilot →</a>
`,
showUnsubscribe: true,
}),
Expand Down
2 changes: 1 addition & 1 deletion apps/website/emails/email-wrapper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ export function wrapEmail(opts: {
${opts.body}
<div style="border-top:1px solid #e4e4e7;margin-top:28px;padding-top:16px">
<p style="font-size:11px;color:#a1a1aa;line-height:1.5;margin:0">Angular Agent Framework — Signal-native streaming for LangGraph.</p>
${opts.showUnsubscribe ? '<p style="font-size:10px;color:#d4d4d8;margin:6px 0 0"><a href="https://stream-resource.dev/api/unsubscribe?email=RECIPIENT" style="color:#d4d4d8;text-decoration:underline">Unsubscribe</a></p>' : ''}
${opts.showUnsubscribe ? '<p style="font-size:10px;color:#d4d4d8;margin:6px 0 0"><a href="https://cacheplane.ai/api/unsubscribe?email=RECIPIENT" style="color:#d4d4d8;text-decoration:underline">Unsubscribe</a></p>' : ''}
</div>
</div>
</div>
Expand Down
2 changes: 1 addition & 1 deletion apps/website/emails/newsletter-welcome.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ export function newsletterWelcomeHtml(): string {
body: `
<p style="font-size:20px;font-weight:700;color:#1a1a2e;margin:0 0 8px;line-height:1.3">Welcome to Angular Agent Framework updates</p>
<p style="font-size:14px;color:#555770;line-height:1.7;margin:0 0 24px">You'll receive updates on new capabilities, production patterns, and Angular agent best practices. We keep it focused and infrequent — no spam.</p>
<a href="https://stream-resource.dev/docs" style="display:inline-block;background-color:#004090;color:#fff;padding:12px 28px;border-radius:8px;font-size:14px;font-weight:700;text-decoration:none">Explore the Docs</a>
<a href="https://cacheplane.ai/docs" style="display:inline-block;background-color:#004090;color:#fff;padding:12px 28px;border-radius:8px;font-size:14px;font-weight:700;text-decoration:none">Explore the Docs</a>
`,
});
}
2 changes: 1 addition & 1 deletion apps/website/emails/whitepaper-download.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { wrapEmail, esc } from './email-wrapper';

const DOWNLOAD_URL = 'https://stream-resource.dev/whitepaper.pdf';
const DOWNLOAD_URL = 'https://cacheplane.ai/whitepaper.pdf';

export function whitepaperDownloadHtml(name?: string): string {
return wrapEmail({
Expand Down
2 changes: 1 addition & 1 deletion apps/website/public/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,4 @@ Add to ~/.claude/settings.json:
{"mcpServers":{"angular":{"command":"npx","args":["@angular/mcp"]}}}

## Version check
If this file is stale, fetch the latest: https://stream-resource.dev/llms-full.txt
If this file is stale, fetch the latest: https://cacheplane.ai/llms-full.txt
2 changes: 1 addition & 1 deletion apps/website/public/CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,4 @@ Add to ~/.claude/settings.json:
{"mcpServers":{"angular":{"command":"npx","args":["@angular/mcp"]}}}

## Version check
If this file is stale, fetch the latest: https://stream-resource.dev/llms-full.txt
If this file is stale, fetch the latest: https://cacheplane.ai/llms-full.txt
2 changes: 1 addition & 1 deletion apps/website/src/app/llms.txt/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ function buildLlmsTxt(): string {
'npx @cacheplane/angular-mcp',
'',
'## Full reference',
'https://stream-resource.dev/llms-full.txt',
'https://cacheplane.ai/llms-full.txt',
].join('\n');
}

Expand Down
2 changes: 1 addition & 1 deletion apps/website/src/components/shared/Footer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ export function Footer() {
onMouseLeave={(e) => (e.currentTarget.style.color = tokens.colors.textSecondary)}>
API Reference
</Link>
<a href="https://cockpit.stream-resource.dev" className="transition-colors" style={{ color: tokens.colors.textSecondary }}
<a href="https://cockpit.cacheplane.ai" className="transition-colors" style={{ color: tokens.colors.textSecondary }}
onMouseEnter={(e) => (e.currentTarget.style.color = tokens.colors.accent)}
onMouseLeave={(e) => (e.currentTarget.style.color = tokens.colors.textSecondary)}>
Examples
Expand Down
2 changes: 1 addition & 1 deletion apps/website/src/components/shared/Nav.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ const links = [
{ label: 'Pilot to Prod', href: '/pilot-to-prod', external: false },
{ label: 'Docs', href: '/docs', external: false },
{ label: 'API', href: '/docs/agent/api/agent', external: false },
{ label: 'Examples', href: 'https://cockpit.stream-resource.dev', external: true },
{ label: 'Examples', href: 'https://cockpit.cacheplane.ai', external: true },
{ label: 'Pricing', href: '/pricing', external: false },
];

Expand Down
6 changes: 3 additions & 3 deletions docs/superpowers/plans/2026-03-17-angular-library.md
Original file line number Diff line number Diff line change
Expand Up @@ -1627,7 +1627,7 @@ NON-COMMERCIAL USE is defined as:
- Internal tooling at non-profit organizations

COMMERCIAL USE requires a separate commercial license. See LICENSE-COMMERCIAL
or visit https://stream-resource.dev/pricing for details.
or visit https://cacheplane.ai/pricing for details.

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
Expand Down Expand Up @@ -1664,9 +1664,9 @@ ENTERPRISE LICENSE: Custom pricing
- Volume seat discounts (10+ developers)
- Unlimited deployment licenses
- Dedicated support and SLA agreements
- Contact: enterprise@stream-resource.dev
- Contact: enterprise@cacheplane.ai

To purchase a license, visit: https://stream-resource.dev/pricing
To purchase a license, visit: https://cacheplane.ai/pricing

Unauthorized commercial use is a violation of this license.
```
Expand Down
2 changes: 1 addition & 1 deletion docs/superpowers/plans/2026-03-17-readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -260,7 +260,7 @@ apps/website/public/assets/
<a href="./LICENSE">
<img alt="License: MIT (non-commercial)" src="https://img.shields.io/badge/license-MIT%20%2B%20Commercial-d4aa6a?labelColor=080705&style=flat-square" />
</a>
<a href="https://stream-resource.dev">
<a href="https://cacheplane.ai">
<img alt="Angular 20+" src="https://img.shields.io/badge/Angular-20%2B-d4aa6a?labelColor=080705&style=flat-square" />
</a>
<a href="https://langchain-ai.github.io/langgraph/">
Expand Down
6 changes: 3 additions & 3 deletions docs/superpowers/plans/2026-03-18-agentic-additions.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ Download Angular logo SVG into the project:
```bash
mkdir -p apps/website/public/logos
curl -o apps/website/public/logos/angular.svg \
"https://stream-resource.dev/assets/icons/logo.svg" 2>/dev/null || \
"https://cacheplane.ai/assets/icons/logo.svg" 2>/dev/null || \
echo '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 250 250"><path fill="#DD0031" d="M125 30L31.9 63.2l14.2 123.1L125 230l78.9-43.7 14.2-123.1z"/><path fill="#C3002F" d="M125 30v22.2l-61.7 162.4L125 230z"/><path fill="#fff" d="M125 52.1L66.8 182.6h21.7l11.7-29.2h49.4l11.7 29.2H183L125 52.1zm17 83.3h-34l17-40.9z"/></svg>',
```

Expand Down Expand Up @@ -755,7 +755,7 @@ const chat = agent({ assistantId: 'chat_agent', apiUrl: 'http://localhost:2024'
npx @angular/mcp

## Full reference
https://stream-resource.dev/llms-full.txt
https://cacheplane.ai/llms-full.txt
`.trim();
}

Expand Down Expand Up @@ -887,7 +887,7 @@ Add to ~/.claude/settings.json:
{"mcpServers":{"angular":{"command":"npx","args":["@angular/mcp"]}}}

## Version check
If this file is stale, fetch the latest: https://stream-resource.dev/llms-full.txt
If this file is stale, fetch the latest: https://cacheplane.ai/llms-full.txt
```

Create `apps/website/content/AGENTS.md.template` with identical content (same file, different name).
Expand Down
2 changes: 1 addition & 1 deletion docs/superpowers/plans/2026-03-19-langsmith-deployment.md
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ Either push a commit or manually trigger a redeploy from the Vercel dashboard.

### Step 3: Verify live demo works

Visit https://stream-resource.dev and confirm the `<stream-chat-demo>` web component connects and streams responses.
Visit https://cacheplane.ai and confirm the `<stream-chat-demo>` web component connects and streams responses.

---

Expand Down
2 changes: 1 addition & 1 deletion docs/superpowers/plans/2026-03-19-next-steps.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@
2. Add `NEXT_PUBLIC_LANGGRAPH_URL` = `https://<your-langgraph-cloud-url>`
3. Set for: Production + Preview + Development
4. Trigger a redeploy
5. Verify live demo at https://stream-resource.dev streams real responses
5. Verify live demo at https://cacheplane.ai streams real responses

---

Expand Down
Loading