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
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 0 additions & 27 deletions .buildkite/pipeline.yml

This file was deleted.

4 changes: 4 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,7 @@ ELEVENLABS_API_KEY=
# AI_VIDEO_MODEL=
# Where generated video clips are written on disk (default: .data/video/):
# A2UI_VIDEO_DIR=
# Where generated music beds are written on disk (default: .data/music/):
# A2UI_MUSIC_DIR=
# Where generated TTS recordings are written on disk (default: .data/tts/):
# A2UI_RECORDING_DIR=
18 changes: 12 additions & 6 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,12 @@ on:
pull_request:
branches: [main]

# Cancel a PR's superseded in-flight runs when a new commit is pushed; main runs
# are keyed by ref and never auto-cancelled.
concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

jobs:
check:
runs-on: ubuntu-latest
Expand All @@ -28,9 +34,9 @@ jobs:
cache: "pnpm"

- name: Install dependencies
run: pnpm install
run: pnpm install --frozen-lockfile

- name: Run checks (prettier, eslint, vitest, build)
- name: Run checks (prettier, eslint, stylelint, typecheck, vitest, build)
run: pnpm check

# End-to-end Playwright specs. Non-blocking (continue-on-error) and the visual
Expand All @@ -42,9 +48,9 @@ jobs:
runs-on: ubuntu-latest
needs: check
continue-on-error: true
# Hard backstop: e2e serves a production build (see playwright.config.ts) and
# runs ~100 specs; this caps a hung run rather than letting it idle for the
# default 6h. Comfortably above the expected build + suite time.
# Hard backstop: e2e runs the suite against a `next dev` server (see
# playwright.config.ts), which cold-compiles each route on first hit; this
# caps a hung run rather than letting it idle for the default 6h.
timeout-minutes: 20

strategy:
Expand All @@ -64,7 +70,7 @@ jobs:
cache: "pnpm"

- name: Install dependencies
run: pnpm install
run: pnpm install --frozen-lockfile

- name: Install Playwright browsers
run: pnpm exec playwright install --with-deps chromium
Expand Down
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@
/.pnp
.pnp.*

# pnpm is the only package manager (see packageManager field); the npm lockfile
# must never be committed — a stale one once drifted from pnpm-lock.yaml.
package-lock.json

# pnpm content-addressable store (created locally when store-dir resolves to
# the repo; must never be committed — prettier --check walks it and CI fails)
.pnpm-store/
Expand Down
2 changes: 1 addition & 1 deletion .husky/pre-commit
Original file line number Diff line number Diff line change
@@ -1 +1 @@
pnpm check
pnpm exec lint-staged
1 change: 1 addition & 0 deletions .nvmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
24
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -251,4 +251,4 @@ pnpm e2e tests/e2e/a2ui/

### Legacy Protocol

The original tool-result protocol (`src/lib/protocol/schema.ts`, 23 component types) is still functional but superseded. New features should use A2UI v0.9.
The original tool-result protocol (`src/lib/protocol/schema.ts`, 24 component types) is still functional but superseded. New features should use A2UI v0.9.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
An [A2UI Protocol](https://a2ui.org/) showcase built as a noir-themed AI interface: generated UI arrives with a matching palette, typography, voice, and soundtrack. The chat → generate → eject-to-code loop draws on tools like [Lovable](https://lovable.dev) and v0, but the rest of the app is its own thing.

[![CI](https://img.shields.io/badge/CI-passing-brightgreen)]()
[![Tests](https://img.shields.io/badge/tests-1193%20passing-brightgreen)]()
[![Tests](https://img.shields.io/badge/tests-1200%2B%20passing-brightgreen)]()

![Detective workspace with evidence board and chat](docs/screenshots/noirable_screen.jpg)

Expand All @@ -20,7 +20,7 @@ synthNoirUI is a full-stack reference implementation of the **A2UI (Agent to UI)
The project implements two protocol versions:

- **A2UI v0.9** -- 18 components in the standard catalog, streamed via SSE as JSONL messages (`createSurface`, `updateComponents`)
- **Legacy protocol** -- 23 component types delivered through Vercel AI SDK tool calls, validated with Zod schemas
- **Legacy protocol** -- 24 component types delivered through Vercel AI SDK tool calls, validated with Zod schemas

Both protocols produce the same visual output. The v0.9 path is the active development target.

Expand Down
2 changes: 1 addition & 1 deletion docs/DEVELOPMENT.md
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ The Vitest thresholds in `vitest.config.ts` are the gate:
- Functions: **65%**
- Statements: **70%**

Run `pnpm test:coverage` to check. The suite currently has 875 tests across 91 test files.
Run `pnpm test:coverage` to check. The suite currently has 1,200+ tests across 100+ test files.

---

Expand Down
Loading