examples/integrations/adk-angular/README.md
This is a starter template for building AI agents using Google's ADK and CopilotKit, with an Angular frontend. It pairs an Angular SPA with a standalone Node Copilot Runtime and a Python ADK agent — demonstrating shared agent state, generative UI, frontend tools, suggestions, and (optionally) a managed threads drawer.
Three processes run behind a single npm run dev (via concurrently):
| Process | Port | What it is |
|---|---|---|
ui | 4200 | The Angular app (ng serve) |
runtime | 8200 | The standalone Copilot Runtime (tsx server.ts), served at /api/copilotkit |
agent | 8000 | The Python ADK agent (uv) |
The Angular app talks to the runtime (http://localhost:8200/api/copilotkit), and the runtime proxies the ADK agent (AGENT_URL, default http://localhost:8000/).
uv (installs the Python agent's dependencies)Install dependencies. This also provisions the Python agent's virtual environment via uv (a postinstall step):
npm install
Note: This creates a
.venvinside theagentdirectory. To activate it manually:bashsource agent/.venv/bin/activate
Configure your environment. Copy .env.example to .env and set your Google API key:
cp .env.example .env
# then edit .env and set GOOGLE_API_KEY=...
Start the full dev stack (UI + runtime + agent):
npm run dev
Then open http://localhost:4200.
dev — Starts the UI, runtime, and agent concurrentlydev:debug — Same as dev with LOG_LEVEL=debugdev:ui — Starts only the Angular UI (ng serve)dev:runtime — Starts only the Copilot Runtime (tsx server.ts)dev:agent — Starts only the Python ADK agentbuild — Builds the Angular application for production (ng build)start — Serves the Angular app (ng serve)install:agent — Installs the Python agent's dependencies via uvsrc/app/app.ts — the three-column layout (threads drawer / themed main panel / chat) and the setThemeColor frontend tool.src/app/app.config.ts — provideCopilotKit wiring: the runtime URL, the get_weather generative-UI renderer, and the static suggestions.src/app/proverbs.ts — shared agent state (injectAgentStore), read and written from the UI.src/app/main-content.ts — the themed center panel that hosts the proverbs card.src/app/agent-state.ts — the shared AgentState type.src/app/weather-card.ts — the generative-UI card rendered when the agent calls get_weather.src/app/web-inspector.ts — dev aid: mounts the CopilotKit web inspector (cpk-web-inspector) for watching AG-UI events, agent state, and runtime connectivity. Safe to delete for production.server.ts — the standalone Copilot Runtime, registering the default agent (with env-gated managed Intelligence).scripts/ — cross-platform launchers used by the dev/install npm scripts to set up and run the Python agent.agent/ — the Python ADK agent (unchanged from the React ADK example).The threads drawer and persistent conversation memory are powered by CopilotKit Intelligence. They are off by default — the drawer renders a locked "Upgrade" state until you enable Intelligence.
To enable them, set COPILOTKIT_LICENSE_TOKEN (and the Intelligence endpoint vars) in .env. See the commented block in .env.example:
COPILOTKIT_LICENSE_TOKEN=
INTELLIGENCE_API_URL=http://localhost:4201
INTELLIGENCE_GATEWAY_WS_URL=ws://localhost:4401
INTELLIGENCE_API_KEY=
Run copilotkit license to provision a license. When COPILOTKIT_LICENSE_TOKEN is set, server.ts wires CopilotKitIntelligence (threads + memory); otherwise it falls back to an in-memory runner and the drawer stays locked.
Notes for the Intelligence path:
- The managed-Intelligence path requires Node.js ≥ 22 (the base UI + runtime run on Node 20+).
server.tsships a demoidentifyUserstub returningdemo-user. The Intelligence platform requires the identified user to actually exist, so thread persistence needs a real, provisioned user id — replace the stub with your auth-derived identity (thecopilotkitCLI provisions one when it scaffolds a project). Leavingdemo-userin place can cause thread operations to fail.- Set
INTELLIGENCE_API_KEYwhenever you setCOPILOTKIT_LICENSE_TOKEN. The runtime buildsCopilotKitIntelligenceoff the license token alone; if the API key is missing, threads/memory fail with an opaque auth error at request time rather than a clear startup error.
This project is licensed under the MIT License — see the LICENSE file for details.
If the chat reports trouble connecting, make sure:
8000.GOOGLE_API_KEY is set correctly in .env.8200 (check for the "Copilot Runtime listening at ..." log line).If the agent fails to start, re-provision its environment:
npm run install:agent