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

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
contents: read
id-token: write # for npm provenance
env:
NPM_PUBLISHABLE_PROJECTS: chat,langgraph,ag-ui,render,a2ui,partial-json,licensing,mcp
NPM_PUBLISHABLE_PROJECTS: chat,langgraph,ag-ui,render,a2ui,partial-json,licensing
steps:
- uses: actions/checkout@v6.0.2
- uses: actions/setup-node@v6.3.0
Expand Down
4 changes: 2 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,9 @@ This file is for agents working in this repository. It is contributor-facing, no

## Repo Layout

- `libs/langgraph`: main Angular library (`@cacheplane/langgraph`).
- `libs/langgraph`: main Angular library (`@ngaf/langgraph`).
- `apps/website`: docs and marketing site.
- `packages/mcp`: MCP server package (`@cacheplane/langgraph-mcp`).
- `packages/mcp`: MCP server package (`@ngaf/langgraph-mcp`).
- `e2e/agent-e2e`: end-to-end coverage for the workspace.
- `apps/demo` and `apps/demo-e2e`: demo application and related end-to-end coverage.

Expand Down
2 changes: 1 addition & 1 deletion COMMERCIAL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Licensing

The libraries in this repository (`@cacheplane/langgraph`, `@cacheplane/chat`, and all related packages) are released under the **MIT License**. You are free to use, modify, and distribute them in any project — commercial or noncommercial — at no cost. See [`LICENSE`](./LICENSE).
The libraries in this repository (`@ngaf/langgraph`, `@ngaf/chat`, and all related packages) are released under the **MIT License**. You are free to use, modify, and distribute them in any project — commercial or noncommercial — at no cost. See [`LICENSE`](./LICENSE).

## Minting Service

Expand Down
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
</p>

<p align="center">
<a href="https://www.npmjs.com/package/@cacheplane/langgraph">
<a href="https://www.npmjs.com/package/@ngaf/langgraph">
<img alt="npm version" src="https://img.shields.io/npm/v/@cacheplane%2Fangular?color=6C8EFF&labelColor=080B14&style=flat-square" />
</a>
<a href="./LICENSE">
Expand All @@ -34,7 +34,7 @@
## Install

```bash
npm install @cacheplane/langgraph
npm install @ngaf/langgraph
```

**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`
Expand All @@ -45,7 +45,7 @@ npm install @cacheplane/langgraph

```typescript
import { Component } from '@angular/core';
import { agent } from '@cacheplane/langgraph';
import { agent } from '@ngaf/langgraph';
import type { BaseMessage } from '@langchain/core/messages';

@Component({
Expand Down Expand Up @@ -134,4 +134,4 @@ That's it. `chat.messages()` is an Angular Signal. Bind it directly in your temp

**MIT** — free for any use. See [`LICENSE`](./LICENSE).

`@cacheplane/langgraph` and all libraries in this repository are released under the [MIT License](./LICENSE). You are free to use, modify, and distribute them in both commercial and noncommercial projects without restriction.
`@ngaf/langgraph` and all libraries in this repository are released under the [MIT License](./LICENSE). You are free to use, modify, and distribute them in both commercial and noncommercial projects without restriction.
2 changes: 1 addition & 1 deletion apps/cockpit/src/app/layout.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import type { ReactNode } from 'react';
import { cssVars } from '@cacheplane/ui-react';
import { cssVars } from '@ngaf/ui-react';
import './cockpit.css';

export const metadata = {
Expand Down
2 changes: 1 addition & 1 deletion apps/cockpit/src/components/cockpit-shell.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
'use client';

import React, { useEffect, useState } from 'react';
import { cockpitManifest } from '@cacheplane/cockpit-registry';
import { cockpitManifest } from '@ngaf/cockpit-registry';
import type { ContentBundle } from '../lib/content-bundle';
import type { CapabilityPresentation, NavigationProduct } from '../lib/route-resolution';
import { CodeMode } from './code-mode/code-mode';
Expand Down
2 changes: 1 addition & 1 deletion apps/cockpit/src/components/mobile-nav-overlay.spec.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import React from 'react';
import { renderToStaticMarkup } from 'react-dom/server';
import { describe, expect, it } from 'vitest';
import { cockpitManifest } from '@cacheplane/cockpit-registry';
import { cockpitManifest } from '@ngaf/cockpit-registry';
import { buildNavigationTree } from '../lib/route-resolution';
import { MobileNavOverlay } from './mobile-nav-overlay';

Expand Down
2 changes: 1 addition & 1 deletion apps/cockpit/src/components/mobile-nav-overlay.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
'use client';

import React, { useEffect, useState } from 'react';
import type { CockpitManifestEntry } from '@cacheplane/cockpit-registry';
import type { CockpitManifestEntry } from '@ngaf/cockpit-registry';
import type { NavigationProduct } from '../lib/route-resolution';
import { toCockpitPath } from '../lib/route-resolution';
import { PRODUCT_LABELS, stripProductPrefix } from '../lib/navigation-labels';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import React from 'react';
import { renderToStaticMarkup } from 'react-dom/server';
import { describe, expect, it } from 'vitest';
import { buildNavigationTree } from '../../lib/route-resolution';
import { cockpitManifest } from '@cacheplane/cockpit-registry';
import { cockpitManifest } from '@ngaf/cockpit-registry';
import { CockpitSidebar } from './cockpit-sidebar';

describe('CockpitSidebar', () => {
Expand Down
2 changes: 1 addition & 1 deletion apps/cockpit/src/components/sidebar/cockpit-sidebar.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import React from 'react';
import type {
CockpitManifestEntry,
} from '@cacheplane/cockpit-registry';
} from '@ngaf/cockpit-registry';
import type { NavigationProduct } from '../../lib/route-resolution';
import { LanguagePicker } from './language-picker';
import { NavigationGroups } from './navigation-groups';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { act } from 'react-dom/test-utils';
import { createRoot } from 'react-dom/client';
import { JSDOM } from 'jsdom';
import { afterEach, describe, expect, it } from 'vitest';
import { cockpitManifest } from '@cacheplane/cockpit-registry';
import { cockpitManifest } from '@ngaf/cockpit-registry';
import { LanguagePicker } from './language-picker';

describe('LanguagePicker', () => {
Expand Down
4 changes: 2 additions & 2 deletions apps/cockpit/src/components/sidebar/language-picker.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import React, { useState, useEffect, useRef } from 'react';
import type {
CockpitLanguage,
CockpitManifestEntry,
} from '@cacheplane/cockpit-registry';
import { resolveManifestLanguage } from '@cacheplane/cockpit-registry';
} from '@ngaf/cockpit-registry';
import { resolveManifestLanguage } from '@ngaf/cockpit-registry';
import { toCockpitPath } from '../../lib/route-resolution';

const LANGUAGE_OPTIONS: Array<{ language: CockpitLanguage; label: string }> = [
Expand Down
2 changes: 1 addition & 1 deletion apps/cockpit/src/components/sidebar/navigation-groups.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
'use client';

import React, { useState } from 'react';
import type { CockpitManifestEntry } from '@cacheplane/cockpit-registry';
import type { CockpitManifestEntry } from '@ngaf/cockpit-registry';
import type { NavigationProduct } from '../../lib/route-resolution';
import { toCockpitPath } from '../../lib/route-resolution';
import { PRODUCT_LABELS, stripProductPrefix } from '../../lib/navigation-labels';
Expand Down
2 changes: 1 addition & 1 deletion apps/cockpit/src/lib/cockpit-page.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { cockpitManifest, type CockpitProduct, type CockpitSection, type CockpitPageId, type CockpitLanguage } from '@cacheplane/cockpit-registry';
import { cockpitManifest, type CockpitProduct, type CockpitSection, type CockpitPageId, type CockpitLanguage } from '@ngaf/cockpit-registry';
import {
buildNavigationTree,
getCapabilityPresentation,
Expand Down
2 changes: 1 addition & 1 deletion apps/cockpit/src/lib/route-resolution.spec.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { describe, expect, it } from 'vitest';
import { cockpitManifest } from '@cacheplane/cockpit-registry';
import { cockpitManifest } from '@ngaf/cockpit-registry';
import {
buildNavigationTree,
getCapabilityPresentation,
Expand Down
2 changes: 1 addition & 1 deletion apps/cockpit/src/lib/route-resolution.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import {
resolveManifestLanguage,
type CockpitLanguage,
type CockpitManifestEntry,
} from '@cacheplane/cockpit-registry';
} from '@ngaf/cockpit-registry';
import { langgraphStreamingPythonModule } from '../../../../cockpit/langgraph/streaming/python/src/index';
import { langgraphPersistencePythonModule } from '../../../../cockpit/langgraph/persistence/python/src/index';
import { langgraphInterruptsPythonModule } from '../../../../cockpit/langgraph/interrupts/python/src/index';
Expand Down
2 changes: 1 addition & 1 deletion apps/cockpit/src/lib/utils.ts
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export { cn } from '@cacheplane/ui-react';
export { cn } from '@ngaf/ui-react';
6 changes: 3 additions & 3 deletions apps/cockpit/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@
"baseUrl": ".",
"paths": {
"@/*": ["./src/*"],
"@cacheplane/design-tokens": ["../../libs/design-tokens/src/index.ts"],
"@cacheplane/ui-react": ["../../libs/ui-react/src/index.ts"],
"@cacheplane/cockpit-registry": ["../../libs/cockpit-registry/src/index.ts"]
"@ngaf/design-tokens": ["../../libs/design-tokens/src/index.ts"],
"@ngaf/ui-react": ["../../libs/ui-react/src/index.ts"],
"@ngaf/cockpit-registry": ["../../libs/cockpit-registry/src/index.ts"]
}
},
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
Expand Down
2 changes: 1 addition & 1 deletion apps/demo/src/app/chat-demo/chat-demo.component.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Component, Input, OnInit, Injector, runInInjectionContext } from '@angular/core';
import { agent } from '@cacheplane/langgraph';
import { agent } from '@ngaf/langgraph';
import type { BaseMessage } from '@langchain/core/messages';

@Component({
Expand Down
8 changes: 4 additions & 4 deletions apps/website/content/AGENTS.md.template
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,21 @@
Angular agent framework for LangChain/LangGraph. Provides `agent()` — Signal-native streaming for Angular agents, built for LangGraph.

## Install
npm install @cacheplane/langgraph
npm install @ngaf/langgraph

## Key requirement
`agent()` MUST be called within an Angular injection context (component constructor or field initializer). Calling it in ngOnInit or any async context throws "NG0203: inject() must be called from an injection context".

## Basic usage
```typescript
// app.config.ts
import { provideAgent } from '@cacheplane/langgraph';
import { provideAgent } from '@ngaf/langgraph';
export const appConfig: ApplicationConfig = {
providers: [provideAgent({ apiUrl: 'http://localhost:2024' })]
};

// chat.component.ts
import { agent } from '@cacheplane/langgraph';
import { agent } from '@ngaf/langgraph';
import type { BaseMessage } from '@langchain/core/messages';

@Component({ template: `
Expand All @@ -38,7 +38,7 @@ export class ChatComponent {

## MCP server (for tool access)
Add to ~/.claude/settings.json:
{"mcpServers":{"angular-agent":{"command":"npx","args":["@cacheplane/langgraph-mcp"]}}}
{"mcpServers":{"angular-agent":{"command":"npx","args":["@ngaf/langgraph-mcp"]}}}

## Version check
If this file is stale, fetch the latest: https://cacheplane.ai/llms-full.txt
8 changes: 4 additions & 4 deletions apps/website/content/CLAUDE.md.template
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,21 @@
Angular agent framework for LangChain/LangGraph. Provides `agent()` — Signal-native streaming for Angular agents, built for LangGraph.

## Install
npm install @cacheplane/langgraph
npm install @ngaf/langgraph

## Key requirement
`agent()` MUST be called within an Angular injection context (component constructor or field initializer). Calling it in ngOnInit or any async context throws "NG0203: inject() must be called from an injection context".

## Basic usage
```typescript
// app.config.ts
import { provideAgent } from '@cacheplane/langgraph';
import { provideAgent } from '@ngaf/langgraph';
export const appConfig: ApplicationConfig = {
providers: [provideAgent({ apiUrl: 'http://localhost:2024' })]
};

// chat.component.ts
import { agent } from '@cacheplane/langgraph';
import { agent } from '@ngaf/langgraph';
import type { BaseMessage } from '@langchain/core/messages';

@Component({ template: `
Expand All @@ -38,7 +38,7 @@ export class ChatComponent {

## MCP server (for tool access)
Add to ~/.claude/settings.json:
{"mcpServers":{"angular-agent":{"command":"npx","args":["@cacheplane/langgraph-mcp"]}}}
{"mcpServers":{"angular-agent":{"command":"npx","args":["@ngaf/langgraph-mcp"]}}}

## Version check
If this file is stale, fetch the latest: https://cacheplane.ai/llms-full.txt
2 changes: 1 addition & 1 deletion apps/website/content/docs/agent/api/agent.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
When the `url` signal changes, the resource tears down the previous connection and opens a fresh one automatically. You never write subscription management or cleanup logic yourself.

```ts
import { agent } from '@cacheplane/langgraph';
import { agent } from '@ngaf/langgraph';

// Inside a component or service with injection context
const repo = agent<Repository>({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ In most apps you will never import or inject `FetchStreamTransport` by name —

```ts
import { inject } from '@angular/core';
import { agent, FetchStreamTransport } from '@cacheplane/langgraph';
import { agent, FetchStreamTransport } from '@ngaf/langgraph';

// Override transport for a single resource
const events = agent<Event>({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import {
provideAgent,
MockAgentTransport,
agent,
} from '@cacheplane/langgraph';
} from '@ngaf/langgraph';

@Component({ template: '' })
class RepoComponent {
Expand Down
2 changes: 1 addition & 1 deletion apps/website/content/docs/agent/api/provide-agent.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import { bootstrapApplication } from '@angular/platform-browser';
import {
provideAgent,
FetchStreamTransport,
} from '@cacheplane/langgraph';
} from '@ngaf/langgraph';
import { AppComponent } from './app/app.component';

bootstrapApplication(AppComponent, {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Agent Architecture

How AI agents work — the planning, execution, and tool-calling lifecycle that agent() connects your Angular app to. This page shows you the Python patterns that power modern agents and exactly how each pattern surfaces in Angular through `@cacheplane/langgraph`.
How AI agents work — the planning, execution, and tool-calling lifecycle that agent() connects your Angular app to. This page shows you the Python patterns that power modern agents and exactly how each pattern surfaces in Angular through `@ngaf/langgraph`.

<Callout type="info" title="Python + Angular, both sides">
Every section below shows the Python backend code first, then the Angular frontend code that consumes it. You need both halves to build a production agent application — LangGraph handles the intelligence, agent() handles the reactivity.
Expand Down Expand Up @@ -149,7 +149,7 @@ graph = builder.compile()

```typescript
import { ChangeDetectionStrategy, Component, computed } from '@angular/core';
import { agent } from '@cacheplane/langgraph';
import { agent } from '@ngaf/langgraph';

interface AgentState {
messages: BaseMessage[];
Expand Down Expand Up @@ -401,7 +401,7 @@ graph = builder.compile()

```typescript
import { ChangeDetectionStrategy, Component, computed } from '@angular/core';
import { agent } from '@cacheplane/langgraph';
import { agent } from '@ngaf/langgraph';

interface OrchestratorState {
messages: BaseMessage[];
Expand Down
8 changes: 4 additions & 4 deletions apps/website/content/docs/agent/concepts/angular-signals.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ const status = toSignal(status$, { initialValue: 'idle' });
<Tab label="What you see">

```typescript
import { agent } from '@cacheplane/langgraph';
import { agent } from '@ngaf/langgraph';

// You never touch BehaviorSubjects or toSignal() yourself.
// agent() hands you clean Signals:
Expand Down Expand Up @@ -154,7 +154,7 @@ console.log(chat.isLoading()); // false

```typescript
import { computed } from '@angular/core';
import { agent } from '@cacheplane/langgraph';
import { agent } from '@ngaf/langgraph';

const chat = agent<ChatState>({
assistantId: 'chat_agent',
Expand Down Expand Up @@ -259,7 +259,7 @@ Angular's new control flow syntax (`@if`, `@for`, `@switch`) works naturally wit

```typescript
import { ChangeDetectionStrategy, Component, computed, effect, ElementRef, ViewChild } from '@angular/core';
import { agent } from '@cacheplane/langgraph';
import { agent } from '@ngaf/langgraph';

@Component({
selector: 'app-chat',
Expand Down Expand Up @@ -457,7 +457,7 @@ graph = builder.compile()

```typescript
import { ChangeDetectionStrategy, Component, computed, effect } from '@angular/core';
import { agent } from '@cacheplane/langgraph';
import { agent } from '@ngaf/langgraph';

@Component({
selector: 'app-chat',
Expand Down
4 changes: 2 additions & 2 deletions apps/website/content/docs/agent/concepts/state-management.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ This inversion is intentional. Agent state can span multiple LLM calls, tool exe
Your Angular component calls `agent.submit({ messages: [userMsg] })`. No state is stored in the component.
</Step>
<Step title="agent() sends the request">
`@cacheplane/langgraph` forwards the input to `FetchStreamTransport`, which opens an HTTP POST and SSE connection to LangGraph Platform.
`@ngaf/langgraph` forwards the input to `FetchStreamTransport`, which opens an HTTP POST and SSE connection to LangGraph Platform.
</Step>
<Step title="LangGraph Platform executes the graph">
The agent runs its nodes — calling the LLM, invoking tools, checking conditions — and streams SSE events back with incremental state updates.
Expand Down Expand Up @@ -419,7 +419,7 @@ def researcher_node(state: ResearchState) -> dict:

```typescript
import { BaseMessage } from '@langchain/core/messages';
import { agent } from '@cacheplane/langgraph';
import { agent } from '@ngaf/langgraph';

interface ResearchState {
messages: BaseMessage[];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ A running LangGraph agent accessible via HTTP. Can be local (langgraph dev) or d
## Install the package

```bash
npm install @cacheplane/langgraph
npm install @ngaf/langgraph
```

This installs the library and its peer dependencies including `@langchain/langgraph-sdk`.
Expand All @@ -31,7 +31,7 @@ Add `provideAgent()` to your application configuration. This sets global default
```typescript
// app.config.ts
import { ApplicationConfig } from '@angular/core';
import { provideAgent } from '@cacheplane/langgraph';
import { provideAgent } from '@ngaf/langgraph';
import { environment } from '../environments/environment';

export const appConfig: ApplicationConfig = {
Expand Down
Loading
Loading