Commit Graph

4909 Commits

Author SHA1 Message Date
Katia Bulatova 42a76fb93d perf(dashboard-agent): say a settled watch outcome without a model, and narrate the rest with Haiku 2026-08-06 00:49:01 +00:00
Katia Bulatova f96361452a chore(webapp): restore the dashboard agent's flag gate 2026-08-06 00:38:40 +00:00
Katia Bulatova fc32fc61e2 refactor(webapp): split the suggested-prompt registry by responsibility
The chip factory and slot vocabulary, the evergreen docs chips, the per-page slot
table and the signal chips each get their own module; registry.ts is now the
public face that re-exports them. A pure move.
2026-08-06 00:13:25 +00:00
Katia Bulatova 4876e074ed refactor(webapp): give each watch condition family its own module
dashboardAgentWatchChecks.ts keeps the dispatcher, the failure envelope and the
previous-facts reader, and re-exports the run, queue, error and health families
plus the shared reader contract. A pure move; every import path is unchanged.
2026-08-06 00:13:25 +00:00
Katia Bulatova a4b4ef1b55 feat(webapp): let an organization turn off judging of its agent turns
A per-org feature flag the agent checks before every judged turn, and a turn is judged only
on an explicit yes.
2026-08-06 00:11:23 +00:00
Katia Bulatova 7f13add1a0 feat(webapp): retire judged-turn rows after 30 days
The table is append-only quality data with no reader, so the sweep now drops rows past
the period in one bounded statement per run.
2026-08-06 00:11:21 +00:00
Katia Bulatova 08dc7ba732 fix(webapp): keep the watch card in step with its draft, and frozen while it submits 2026-08-05 23:48:03 +00:00
Katia Bulatova c3ee6a4dbe perf(webapp): resolve the agent card's links in one request 2026-08-05 23:48:02 +00:00
Katia Bulatova ebad471b43 fix(webapp): cap the size of a message to the agent 2026-08-05 23:48:01 +00:00
Katia Bulatova a0d06e4eec fix(webapp): send the agent wake signal to a browser that has never opened the panel 2026-08-05 23:48:01 +00:00
Katia Bulatova d6debe8fb7 test(webapp): cover the user-actor token's environment scope on every route that accepts one 2026-08-05 23:34:45 +00:00
Katia Bulatova 5b5a25882f fix(webapp): scope a delegated user-actor token to the environment it was minted for 2026-08-05 23:34:44 +00:00
Katia Bulatova a88228c838 chore(webapp): move the agent storybook gallery out to a follow-up
The gallery pages, their fixtures and the screenshot script only exist to
look at the agent UI, so they ship separately. The fixtures two unit tests
read — the report view models and the page contexts — stay here.
2026-08-05 22:30:45 +00:00
Katia Bulatova 8b042bed30 perf(webapp): skip the admin read on the watch authorization path 2026-08-05 22:17:43 +00:00
Katia Bulatova 1dd85367b7 perf(webapp): answer the wake poll with one narrow read per database 2026-08-05 22:17:42 +00:00
Katia Bulatova d26a28b0e6 perf(webapp): only poll the wake feed for a browser that knows a watch exists 2026-08-05 22:17:41 +00:00
Katia Bulatova e109a243f5 fix(webapp): read the alert channel and the watch target on the primary 2026-08-05 22:17:41 +00:00
Katia Bulatova fc4381d50e fix(webapp): keep the agent wake poll to one chain per tab 2026-08-05 22:17:40 +00:00
Katia Bulatova 9b4e4734a1 perf(dashboard-agent): share one 1h-TTL prompt cache between head start and the agent
Head start passed `system` as a bare string, so Anthropic neither wrote nor read
the cache: the ~18.4k-token prefix was billed in full and the agent's step 2 then
paid for a fresh write. Both breakpoints now carry a 1-hour TTL.

The two prefixes were also not identical — `get_run` sat in a different position in
the agent's tool set than in the canonical schema-only one, so they could never have
shared a cache. Reordered, and a fingerprint over system text + tool definitions is
logged per model call alongside the provider's cache-write, cache-read and uncached
input token counts, so a future drift is visible instead of silent.
2026-08-05 22:16:30 +00:00
Katia Bulatova d4f0357ac1 chore(webapp): move the gallery's transcripts into the storybook fixtures and drop demo-chats 2026-08-05 22:12:44 +00:00
Katia Bulatova 0760f1b55d refactor(webapp): give the agent cards one card primitive 2026-08-05 22:12:42 +00:00
Katia Bulatova 3f85acc2a7 fix(webapp): give the diagnosis card links a focus ring via a TextLink variant 2026-08-05 22:12:41 +00:00
Katia Bulatova 5a80876b16 fix(webapp): ring the unread dot against the navbar surface 2026-08-05 22:12:40 +00:00
Katia Bulatova 9b32bfda66 fix(webapp): let agent chips follow the interface-contrast control 2026-08-05 22:12:39 +00:00
Katia Bulatova fd83288906 fix(webapp): drop the metric sparkline to its own line on a narrow panel 2026-08-05 22:12:38 +00:00
Katia Bulatova 3773f31d22 fix(webapp): route the report's stale-data badge through AgentBadge 2026-08-05 22:12:37 +00:00
Katia Bulatova 5800e8929d chore: drop the unrendered demo cards and fold the release notes back into one 2026-08-05 21:49:37 +00:00
Katia Bulatova 8d3676a874 chore: oxfmt the lines the removed comments let collapse 2026-08-05 21:38:32 +00:00
Katia Bulatova 9270caf715 chore(webapp): cut the watch service and route comments to their invariants 2026-08-05 21:38:24 +00:00
Katia Bulatova 5153cca045 chore: restore the comments an off-by-one over-trimmed 2026-08-05 21:38:13 +00:00
Katia Bulatova 9b7ca8c1de chore: bring the last three-line comments down to two 2026-08-05 21:37:46 +00:00
Katia Bulatova e6ec1d2d11 chore(webapp): delete the agent panel and view rationale comments 2026-08-05 21:37:45 +00:00
Katia Bulatova a4f8ed1906 chore(webapp): trim the seed-script narration 2026-08-05 21:37:09 +00:00
Katia Bulatova 0739337c24 chore: cut the report, waiting-run and package comments to their facts 2026-08-05 21:37:08 +00:00
Katia Bulatova 93bc6c158d chore(webapp): clear the demo fixture and storybook commentary 2026-08-05 21:36:19 +00:00
Katia Bulatova 0d415c04ef chore(webapp): strip the step narration from the agent and report tests 2026-08-05 21:35:59 +00:00
Katia Bulatova cb70b83059 chore(webapp): drop the prose from the chat markdown css rules 2026-08-05 21:35:24 +00:00
Katia Bulatova bd6835f9d9 chore(webapp): drop the page-context notes from the route files 2026-08-05 21:35:23 +00:00
Katia Bulatova 17e11c771f chore(webapp): cut the chat-layout header and stop the test asserting on it 2026-08-05 21:35:22 +00:00
Katia Bulatova f3237decb7 chore(webapp): drop the unused demo report card 2026-08-05 21:21:52 +00:00
Katia Bulatova 78aea57480 test(webapp): assert the card and the text report stay one report
Landmarks derived from the layout spec must appear in the same order in the server-rendered card
and in the markdown, over healthy, degraded, untrustworthy and empty reports.
2026-08-05 21:17:33 +00:00
Katia Bulatova 880d94ae3a feat(webapp): build the report card from the shared layout
The card no longer formats values, resolves codes or classifies footer codes of its own, and a
genuinely-unknown state now gets a neutral icon instead of a green tick.
2026-08-05 21:17:33 +00:00
Katia Bulatova f6865d581a feat(webapp): render the markdown and ANSI report from the shared layout
The text surfaces gain the card's structure (headline, hero evidence, why: block, aggregated
read:, trust flag) and keep their alignment: fixed sparkline column, aligned notes.
2026-08-05 21:17:32 +00:00
Katia Bulatova 547ec711d8 feat(webapp): declare the report layout once, shared by the card and the text surfaces
Section order, section labels, the tone -> glyph vocabulary, the footer styles and every
string a renderer places now live in report-layout.ts. Renderers decide typography only.
2026-08-05 21:17:32 +00:00
Katia Bulatova 5aef047d87 fix(webapp): cap the query API's scope at the credential's environment
/api/v1/query took its tenant scope from the request body, so a public access
token minted for one environment could read the whole organization by asking for
organization scope. The credential is now the ceiling and a wider ask is refused;
secret keys and the membership-authorized Query page are unchanged.
2026-08-05 21:13:40 +00:00
Katia Bulatova 1af895bb47 fix(dashboard-agent): keep a failed turn in the conversation
A turn that ends in an error was only a stream event, so reloading history showed
a turn that just stops. It is now appended to the transcript through the same
id-deduped path a wake uses, in the same wording the live stream shows, and the
panel drops its live callout once that record is the last message.
2026-08-05 21:13:39 +00:00
Katia Bulatova a303cb0648 refactor(webapp): one presenter for all watch and view-block wording
Every watch sentence (card, banner, toast, email, Slack, webhook) now comes from
app/presenters/v3/dashboardAgent. The condition is written once per kind in four
registers instead of in four switches across three files, and a plain-text block
renderer lets the non-React surfaces say what the card says.
2026-08-05 21:13:39 +00:00
Katia Bulatova 04687767c9 chore: oxfmt the blank lines left by the removed comments 2026-08-05 16:21:32 +00:00
Katia Bulatova c331843dfc chore(webapp): shorten the watch service and test comments 2026-08-05 16:21:30 +00:00
Katia Bulatova a5dd3f13b6 chore(webapp): shorten the report, waiting-run and agent route comments 2026-08-05 16:21:30 +00:00