diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 3ee36d470..6380fa31d 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -17,9 +17,9 @@ jobs:
node-version: 22
cache: npm
- run: npm ci
- - run: npx nx lint stream-resource
- - run: npx nx test stream-resource --coverage
- - run: npx nx build stream-resource --configuration=production
+ - run: npx nx lint angular
+ - run: npx nx test angular --coverage
+ - run: npx nx build angular --configuration=production
website:
name: Website — lint / build
@@ -224,7 +224,7 @@ jobs:
run: |
mkdir -p .vercel
cat > .vercel/project.json <
-
-
{{ chat.messages().length }} messages Angular Stream Resource Welcome to Angular Stream Resource updates Angular Agent Framework Welcome to Angular Agent Framework updates You'll receive updates on new capabilities, production patterns, and Angular agent best practices. We keep it focused and infrequent — no spam. Angular Stream Resource — Signal-native streaming for LangGraph. Angular Agent Framework — Signal-native streaming for LangGraph. Angular Stream Resource Angular Agent Framework Your Angular Agent Readiness Guide ${name ? `Hi ${esc(name)}, t` : 'T'}he guide covers six production-readiness dimensions: streaming state, thread persistence, tool-call rendering, human approval flows, generative UI, and deterministic testing. Angular Stream Resource — Signal-native streaming for LangGraph. Angular Agent Framework — Signal-native streaming for LangGraph. The Angular Agent Readiness Guide When you move from prototype to production, the requirements change fundamentally. What worked in a demo — direct API calls, synchronous state, manual zone management — falls apart at scale. StreamResource provides a signals-native approach that eliminates the boilerplate: Agent provides a signals-native approach that eliminates the boilerplate: Demos work with ephemeral state. Production agents need conversation history that survives page refreshes, tab switches, and navigation — wired to LangGraph's MemorySaver backend. Agent UIs are notoriously hard to test because they depend on live LLM responses. Flaky tests, slow CI, and inability to reproduce edge cases are the main reasons agent UIs ship with low confidence.
+
+
-
+
@@ -27,14 +27,14 @@
---
-`streamResource()` is the Angular equivalent of LangGraph's React `useStream()` hook — a full-parity implementation built on Angular Signals and the Angular Resource API. It gives enterprise Angular teams the same production-grade streaming primitives available to React developers on LangChain, without compromises or workarounds. Drop it into any Angular 20+ component, point it at your LangGraph Platform endpoint, and get reactive, signal-driven access to streaming state, messages, tool calls, interrupts, and thread history.
+`agent()` is the Angular equivalent of LangGraph's React `useStream()` hook — a full-parity implementation built on Angular Signals and the Angular Resource API. It gives enterprise Angular teams the same production-grade streaming primitives available to React developers on LangChain, without compromises or workarounds. Drop it into any Angular 20+ component, point it at your LangGraph Platform endpoint, and get reactive, signal-driven access to streaming state, messages, tool calls, interrupts, and thread history.
---
## Install
```bash
-npm install @cacheplane/stream-resource
+npm install @cacheplane/angular
```
**Peer dependencies:** `@angular/core ^20.0.0 || ^21.0.0`, `@langchain/core ^1.1.0`, `@langchain/langgraph-sdk ^1.7.0`, `rxjs ~7.8.0`
@@ -45,7 +45,7 @@ npm install @cacheplane/stream-resource
```typescript
import { Component } from '@angular/core';
-import { streamResource } from '@cacheplane/stream-resource';
+import { agent } from '@cacheplane/angular';
import type { BaseMessage } from '@langchain/core/messages';
@Component({
@@ -65,7 +65,7 @@ import type { BaseMessage } from '@langchain/core/messages';
`,
})
export class ChatComponent {
- chat = streamResource<{ messages: BaseMessage[] }>({
+ chat = agent<{ messages: BaseMessage[] }>({
apiUrl: 'https://your-langgraph-platform.com',
assistantId: 'my-agent',
messagesKey: 'messages',
@@ -83,7 +83,7 @@ That's it. `chat.messages()` is an Angular Signal. Bind it directly in your temp
## Feature Comparison
-| Feature | `streamResource()` (Angular) | `useStream()` (React) |
+| Feature | `agent()` (Angular) | `useStream()` (React) |
|---|---|---|
| Streaming state as reactive primitives | Angular Signals | React state |
| Messages signal | `messages()` | `messages` |
@@ -99,7 +99,7 @@ That's it. `chat.messages()` is an Angular Signal. Bind it directly in your temp
| Submit | `submit(values, opts?)` | `submit(values, opts?)` |
| Stop | `stop()` | `stop()` |
| Reload last submission | `reload()` | — |
-| Custom transport (for testing) | `MockStreamTransport` | mock fetch |
+| Custom transport (for testing) | `MockAgentTransport` | mock fetch |
| Angular `ResourceRef
-
- From Prototype
to ProductionOverview
The Signals-Native Approach
-@Component({...})
export class ChatComponent {
- chat = streamResource<{ messages: BaseMessage[] }>({
+ chat = agent<{ messages: BaseMessage[] }>({
assistantId: 'chat_agent',
});
}
@@ -84,7 +84,7 @@ Overview
The threadId Pattern
-provideStreamResource({
+provideAgent({
apiUrl: 'http://localhost:2024',
threadId: signal(localStorage.getItem('threadId')),
onThreadId: (id) => localStorage.setItem('threadId', id),
@@ -150,8 +150,8 @@ Production Checklist
Deterministic Testing
Overview
The MockStreamTransport Approach
-const ref = createMockStreamResourceRefThe MockAgentTransport Approach
+const ref = createMockAgentRefThe MockStreamTransport Approach
Production Checklist