ai-console · git:20261029.920c254 · 2026-10-29 · sha256 cf321ed04a6992f4

ai-console git:20261029.920c254C

Immutable. This exact content never changes and is served at /api/v1/blob/cf321ed04a6992f4.

```yaml
version: 1
name: atmosphere/ai-console
archetype_version: 1.0.0
surface: web
tags: ["atmosphere", "ai-console", "must-pass"]
flows:
  - chat-stream
  - chat-broadcast
  - chat-tool-call
inputs:
  PORT: "8080"
  MESSAGE: "Hello — one short sentence please."
```

# Atmosphere AI Console — Skill prompts

The flows below are LLM-followable. Each is also emitted as a mirroir-run
scenario YAML under `scenarios/<flow>.yaml`. The two stay in sync.

## chat-stream

Single-turn AI chat against the bundled Vue console. The canonical
happy-path for any `@AiEndpoint`-bearing Spring Boot / Quarkus sample.

### Steps

1. Open `http://127.0.0.1:${PORT}/atmosphere/console/`.
2. Wait for `[data-testid=status-label]` text to begin with `"Connected"`
   (the full label appends a transport tail).
3. Tap `[data-testid=chat-input]` to focus.
4. Type `${MESSAGE}`.
5. Tap `[data-testid=chat-send]`. (Button is disabled until input is
   non-empty; do not race the click ahead of the keystroke.)
6. Wait for `[data-testid=message-bubble].message--assistant` to be
   visible (up to `${ASSISTANT_TIMEOUT_MS}` milliseconds).
7. Assert exactly one user bubble + at least one assistant bubble.

## chat-broadcast

Used by `@Broadcaster` samples — broadcast a chat message to one or more
attached subscribers. For single-browser replay we assert the local
bubble; cross-browser broadcast verification is a future flow extension.

### Steps

1. Open `http://127.0.0.1:${PORT}/atmosphere/console/`.
2. Wait for `[data-testid=status-label]` to be `"Connected"`.
3. Type `${MESSAGE}` into `[data-testid=chat-input]`; send.
4. Wait for `[data-testid=message-bubble].message--user` to render.
5. Wait for `[data-testid=message-bubble].message--assistant` (echo or
   broadcast response).

## chat-tool-call

Sample exercises `@AiTool` — assistant invokes a tool before producing
the response. Distinguishing assertion: a
`[data-testid=tool-activity]` panel renders.

### Steps

1. Open `http://127.0.0.1:${PORT}/atmosphere/console/`.
2. Wait for `[data-testid=status-label]` to be `"Connected"`.
3. Type a tool-triggering prompt (sample-specific; instance may override
   via `MESSAGE`).
4. Tap `[data-testid=chat-send]`.
5. Wait for `[data-testid=tool-activity]` to be visible.
6. Wait for `[data-testid=message-bubble].message--assistant`.

## Cross-browser

All three flows run on chromium + firefox + webkit. The Connected prefix
match is transport-agnostic; transport negotiation is described in the
archetype's `APP.md`.

## Skip / obstacles

- `ATMOSPHERE_AUTH_ENABLED=true` (default in sample `application.yml`):
  step 2 never succeeds. Override in `boot.env`.
- `LLM_MODE` unset or invalid for chat-stream / chat-tool-call: step 6
  hangs. Set to `fake` for replay.