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
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,9 +91,9 @@ For the labels, retries, and every workflow, see [Workflows](docs/workflows/over

## Use with my data (agent chat)

> **Status:** experimental, rolling out. It isn't open to every visitor yet.
> **Status:** experimental, open to every visitor since 2 November 2026.
Comment thread
MarkusNeusinger marked this conversation as resolved.
Resolved

On a plot page, you paste your own data. An agent adapts that plot's catalogue code to your data, renders it in a
On a plot page, choose **use with my data** and paste your own data. An agent adapts that plot's catalogue code to your data, renders it in a
sandbox, reviews the render against the catalogue's rubric, repairs it once if needed, and returns the image and the
code.

Expand Down
3 changes: 3 additions & 0 deletions changelog.d/readme-agent-live.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
### Changed

- **The README and the docs say the agent chat is open**: since 2 November 2026 every visitor can use "Use with my data", labelled experimental. The README's status line no longer says it is rolling out, and the vision, repository, database, style-guide, Plausible and telemetry docs no longer call it admin-only. (#12537)
2 changes: 1 addition & 1 deletion docs/concepts/vision.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ anyplot is different: **AI curates and maintains, humans discover and choose.**
2. **AI Code Generation**: Automatically creates implementations for all major libraries
3. **Continuous Quality**: AI validates, tests, and improves examples constantly
4. **Smart Discovery**: Typo-tolerant search over tags and titles + dynamic tagging + a similarity map of the catalogue
5. **Your Data**: Paste your data on a plot page, and an agent adapts that plot's code to it (experimental, rolling out)
5. **Your Data**: Paste your data on a plot page, and an agent adapts that plot's code to it (experimental)

### What makes it different

Expand Down
2 changes: 1 addition & 1 deletion docs/reference/agent-telemetry.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
> deployed, and reach the typed views after you create the views again (step 6 of
> [Set up the BigQuery side](#set-up-the-bigquery-side)).

The admin-only agent chat ("Use with my data") records how it is used, without recording what anyone
The agent chat ("Use with my data") records how it is used, without recording what anyone
used it for. This page lists what is recorded, where it goes, how long it stays, and how to read it.

## What is recorded, and what never is
Expand Down
8 changes: 4 additions & 4 deletions docs/reference/database.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ anyplot uses **PostgreSQL** (Cloud SQL) as the primary data store for the websit

**Feedback:**
- Site feedback from the feedback widget and the plot votes (`feedback`), with its triage status
- One row per quick-feedback case of the admin-only agent chat (`agent_feedback`): the reaction, the message, hashed user and session ids, the run's metadata, and the triage state (status, tags, expected outcome, promotion, supersession); never the conversation, code, images or data
- One row per quick-feedback case of the agent chat (`agent_feedback`): the reaction, the message, hashed user and session ids, the run's metadata, and the triage state (status, tags, expected outcome, promotion, supersession); never the conversation, code, images or data

**Other:**
- Library information (name, version, docs URL)
Expand Down Expand Up @@ -190,7 +190,7 @@ CREATE INDEX ix_feedback_created_at ON feedback (created_at DESC);
CREATE INDEX ix_feedback_ip_hash_created_at ON feedback (ip_hash, created_at DESC);
CREATE INDEX ix_feedback_spec_library ON feedback (spec_id, library_id);

-- Quick-feedback cases of the admin-only agent chat (written by the API)
-- Quick-feedback cases of the agent chat (written by the API)
CREATE TABLE agent_feedback
(
id VARCHAR(25) PRIMARY KEY, -- the case id: "20261012T143005Z-1a2b3c4d"
Expand Down Expand Up @@ -333,7 +333,7 @@ INSERT INTO libraries (id, name, version, documentation_url) VALUES

### `agent_feedback`

**Purpose**: Index the quick-feedback cases of the admin-only agent chat and hold their triage state. The feedback route `POST /debug/agent/sessions/{sid}/feedback` inserts one row per case right after the case's files are in `gs://anyplot-agent-cases`, and the "agent cases" section of `/debug` reads and updates it through the case routes ([Feedback triage](api.md#feedback-triage)). The row is the source of truth for the triage; the bucket holds the files until its lifecycle rule deletes them after 180 days, and the row stays, so the class statistics outlive the files. Created by migration `b4e7a9c2d6f1`.
**Purpose**: Index the quick-feedback cases of the agent chat and hold their triage state. The feedback route (`POST /debug/agent/sessions/{sid}/feedback` for admins, its public twin under `/agent/`) inserts one row per case right after the case's files are in `gs://anyplot-agent-cases`, and the "agent cases" section of `/debug` reads and updates it through the case routes ([Feedback triage](api.md#feedback-triage)). The row is the source of truth for the triage; the bucket holds the files until its lifecycle rule deletes them after 180 days, and the row stays, so the class statistics outlive the files. Created by migration `b4e7a9c2d6f1`.

**Key Fields**:
- `id` - The bucket's case id: the UTC time in ISO 8601 basic format and eight random hex digits, so ids sort by time and link a row to its files under `cases/<id>/`
Expand Down Expand Up @@ -652,7 +652,7 @@ await session.execute(f"SELECT * FROM specs WHERE id = '{spec_id}'")

### Data privacy

- No user data stored permanently, with one exception: the quick-feedback cases of the admin-only agent chat. When an admin submits one, the case (the conversation, the code, the images, the message, a hashed user id, and `data.csv` when the box is ticked) is stored in the private bucket `gs://anyplot-agent-cases` until the lifecycle rule deletes it after 180 days. Its row in `agent_feedback` holds the message and the hashed ids, but no conversation, code, images or data, and stays
- No user data stored permanently, with one exception: the quick-feedback cases of the agent chat. When someone submits one, the case (the conversation, the code, the images, the message, a hashed user id, and `data.csv` when the box is ticked) is stored in the private bucket `gs://anyplot-agent-cases` until the lifecycle rule deletes it after 180 days. Its row in `agent_feedback` holds the message and the hashed ids, but no conversation, code, images or data, and stays
- Anonymous session IDs only
- Usage data auto-deleted after 90 days
- GDPR-compliant (no personal data)
Expand Down
2 changes: 1 addition & 1 deletion docs/reference/plausible.md
Original file line number Diff line number Diff line change
Expand Up @@ -753,7 +753,7 @@ home # HomePage grid view (client) or og:image home endpoint (server)
plots # PlotsPage (server og:image only)
spec_overview # SpecPage showing all libraries
spec_detail # SpecPage showing single library
agent_chat # Admin-only agent chat result card (copy_code only)
agent_chat # Agent chat result card (copy_code only)
```

### `platform` values (server-side og:image tracking only)
Expand Down
4 changes: 2 additions & 2 deletions docs/reference/repository.md
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ anyplot/
├── app/ # React frontend
│ ├── src/
│ │ ├── components/
│ │ ├── pages/ # AgentChatPage.tsx: the admin-only agent chat
│ │ ├── pages/ # AgentChatPage.tsx: the agent chat (/agent, admins /debug/agent)
│ │ ├── sections/ # agent-chat/: data panel, thread, result card; debug/: agent case triage on /debug
│ │ └── lib/ # api.ts; agent.ts and sse.ts for the agent chat BFF and its case routes
│ ├── scripts/
Expand Down Expand Up @@ -579,7 +579,7 @@ plt.savefig('plot.png', dpi=300)

**Purpose**: React frontend (Vite + TypeScript + MUI)

The admin-only agent chat ("Use with my data") lives in `src/pages/AgentChatPage.tsx`, `src/sections/agent-chat/`, `src/hooks/useAgentSession.ts`, `src/lib/agent.ts` and `src/lib/sse.ts`; it is built only with `VITE_ENABLE_AGENT_CHAT=true`. `scripts/agent-bff-mock.mjs` is a local mock of its backend for driving the page in a browser (see `agents/README.md`). The triage of the chat's quick-feedback cases is the "agent cases" section of `src/pages/DebugPage.tsx`, built from `src/sections/debug/` in every build; while the API's agent kill switch is off, it shows one line instead of the list.
The agent chat ("Use with my data", public at `/agent` and for admins at `/debug/agent`) lives in `src/pages/AgentChatPage.tsx`, `src/sections/agent-chat/`, `src/hooks/useAgentSession.ts`, `src/lib/agent.ts` and `src/lib/sse.ts`; it is built only with `VITE_ENABLE_AGENT_CHAT=true`. `scripts/agent-bff-mock.mjs` is a local mock of its backend for driving the page in a browser (see `agents/README.md`). The triage of the chat's quick-feedback cases is the "agent cases" section of `src/pages/DebugPage.tsx`, built from `src/sections/debug/` in every build; while the API's agent kill switch is off, it shows one line instead of the list.

---

Expand Down
2 changes: 1 addition & 1 deletion docs/reference/style-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -850,7 +850,7 @@ Pluralisation: prefer the natural plural for collections (`plots.browse()`, `lib
.btn-cta:hover::before { opacity: 1; }
```

Used for `[.start()]` and `[.browse()]` in the hero box. The one other use is `.create_plot()` in the admin-only agent chat (`/debug/agent`), the action that page leads to once the data is confirmed (`app/src/sections/agent-chat/styles.ts`, `ctaButtonSx`); that variant hovers with the light theme's ink (`#1A1A17`) as the foreground in both themes, because 14 px white text on the green reads 3.4:1 and the dark theme's ink 3.0:1, under the 4.5:1 of WCAG AA, while the dark ink on it reads 5.1:1. Pill shape replaced with a more terminal-native rectangle (4px radius). Dark-to-green hover transition stays as the signature moment.
Used for `[.start()]` and `[.browse()]` in the hero box. The one other use is `.create_plot()` in the agent chat (`/agent`, and `/debug/agent` for admins), the action that page leads to once the data is confirmed (`app/src/sections/agent-chat/styles.ts`, `ctaButtonSx`); that variant hovers with the light theme's ink (`#1A1A17`) as the foreground in both themes, because 14 px white text on the green reads 3.4:1 and the dark theme's ink 3.0:1, under the 4.5:1 of WCAG AA, while the dark ink on it reads 5.1:1. Pill shape replaced with a more terminal-native rectangle (4px radius). Dark-to-green hover transition stays as the signature moment.

**Ghost (rare — only when a primary already occupies visual space)**

Expand Down
Loading