Skip to content

Dashboard Agent: investigations, watches, alerts, and notifications - #4418

Draft
kathiekiwi wants to merge 158 commits into
mainfrom
feat/dashboard-agent-flows
Draft

Dashboard Agent: investigations, watches, alerts, and notifications#4418
kathiekiwi wants to merge 158 commits into
mainfrom
feat/dashboard-agent-flows

Conversation

@kathiekiwi

@kathiekiwi kathiekiwi commented Jul 29, 2026

Copy link
Copy Markdown
Collaborator

An AI assistant in a side panel on every dashboard page, behind the dashboard-agent feature flag. It reads runs, errors, queues, deploys and health through the public API (read-only, delegated user token), answers with rich cards, and can keep watching things after the conversation ends.

What's inside

  • Foundation@internal/dashboard-agent-contracts (trigger:// URI grammar, intents, watch specs, block envelope), investigations + watches tables, head-start reliability fix, eval sample-rate gate.
  • Reportsget_report renders the deterministic health report as a card (metric grid, sparklines, Next steps button row); stale telemetry is flagged and never trusted for advice.
  • Investigate — hypothesis-driven investigation on a live card with system-owned identity and revisions; entry buttons on failed runs, errors, and backed-up queues; code-grounded when a repo is connected.
  • Watch — durable conditions checked on a schedule with zero LLM in the ticks (run start/finished, backlog drain, error recurrence, health recovery); the fire wakes the chat with a toned banner.
  • Alerts & notifications — a new DASHBOARD_AGENT_WATCH alert type on the standard channels with one-click unsubscribe; the agent offers, lists and disables subscriptions on request; ungated in-dashboard signal: persistent toast, unread dot on the chat launcher, unread-first history with per-chat status icons.
  • Tooling — navigation, TRQL queries with live charts, deploy correlation, docs answers, suggested prompts; golden eval suite; seeder for a live playground project (db:seed:agent-examples, with --heartbeat / --degrade / --recover for demos).

How to review

GUIDEBOOK.md — 10-minute local setup and a hands-on walkthrough of every case. Component gallery at /storybook/agent-ui.

Notes

  • Everything is gated by canAccessDashboardAgent; no behavior change with the flag off.
  • The seeder's --heartbeat mode is a review-stand crutch and will be removed before merge.

ericallam added 30 commits July 13, 2026 20:38
…signals

Gauges are read inside the enqueue/dequeue Lua and returned on the script reply
as a 2-tuple; counters are cumulative odometers. The run-queue Redis carries no
metrics stream of its own.
…counters

entryOrderKey returns a string built with BigInt math so ordering stays correct at real epoch magnitudes. Odometer keys are namespaced by definition name. The consumer reports null lag for a missing consumer group instead of 0, and empty gauge values parse as NaN rather than 0.
…ng order keys

The wait-time quantile materialized view now excludes wait_ms = 0 rows so it matches the count aggregation. order_key accepts a string or a number. Migration comments no longer contain semicolons that split the migration into invalid statements.
…rride

The queues list tolerates a metrics query failure by rendering without metrics and logging a warning. UsageSparkline renders its total override even when every bucket is zero. The queue detail page returns 404 and its loader skips the metrics query when the feature flag is off. The seed script validates bucket size and only writes ClickHouse against a local host.
A bucket-led ORDER BY DESC combined with fillGaps emitted an ascending WITH FILL (positive step, ascending bounds), which produces invalid or empty fills. Skip the gap-fill rewrite for descending orders and let the plain descending query stand. Adds a DESC fillGaps test.
Packs the stream sequence with a 1e6 factor (was 1e5) so up to 1M entries per millisecond per shard fit before a seq could spill into the next millisecond's range, far above what a single Redis stream can produce. ms*1e6 stays within UInt64. Also fixes the webapp mapping test that still expected a numeric order_key after the switch to a BigInt-derived string.
The queues list and queue detail pages now use the shared TimeFilter (any preset period or a custom date range) and everything on the page follows it: header tiles, per queue metric columns, charts, and stats. The custom period buttons, hand rolled chart cards, and duplicated metric fetch loops are replaced by the ChartCard and Chart primitives, UsageSparkline, and a shared useMetricResourceQuery hook. The ClickHouse list queries take an explicit end bound so fixed ranges query only their window.
Queries using deltaSumTimestampMerge failed with an unknown function error, which broke the queue detail stats and the started counts on the built in Queues dashboard.
The queues list header tiles now render the same line chart, grid, and tooltip as the rest of the metrics charts instead of a row sparkline, with the headline value in the tile header. The env saturation tile draws the environment concurrency limit and burst limit as labeled reference lines. Chart tooltips keep a gap between the series label and the value, and the shared line chart gains showDots and referenceLines options.
Adds an Allocation tab to the Queues page (behind the queue metrics UI flag): overview cards, a burst-aware capacity bar showing each queue allocation and its live usage in a distinct color, an inline-editable limits table with per-queue locks, load-weighted auto-balance, and a review dialog that bulk-applies limits as overrides through the existing concurrency system.

The queue list now defaults to Busiest ordering (with Backlog and Name options). ClickHouse ranks queues by activity over the last 15 minutes and returns just the requested page of names, so the cost per page is one small aggregate regardless of environment size; idle queues follow in name order and any failure falls back to name ordering. The classic page keeps plain name order.
The fallback WHERE injection only targeted the top-level SELECT, so a
query shaped as an outer aggregation over a FROM subquery failed to
compile: the time column only exists inside the subquery. Descend into
the subquery so the fallback lands next to the table reference.
Adds two rollups fed from the raw landing table: a per-queue 5-minute
tier and an environment-level 1-minute tier (gauges plus TDigest wait
quantiles). Ranking now reads the 5m tier and returns the page and the
ranked total in one windowed query instead of two scans.

The 5m materialized view reads raw rather than cascading off the 10s
table: deltaSumTimestamp states hold a single first/last segment, so
merging states in an MV's hash-ordered GROUP BY double-counts bridging
spans. For the same reason the env tier carries no counter columns, and
env-wide counter totals must group by queue before summing.
The built-in queues dashboard's enqueued vs started chart merged counter
states across queues, which mixes unrelated cumulative counters and
returns wrong totals; it now merges per queue and sums outside. Env
header tiles and saturation charts read the environment rollup, so their
cost no longer scales with queue count, and coarse-bucket ranges are
served from the 5m rollup automatically. Queue list ranking runs as one
query, time bounds are aligned to the bucket grid, and repeated
auto-refresh reads share ClickHouse query-cache entries.
… rollup

The env rollup's win comes from dropping the queue dimension, not from
coarser buckets: row count is queue-independent (~8640/day/env), so full
10-second granularity stays cheap at any range. Env header tiles and
saturation charts now resolve short-range detail exactly like the
per-queue charts, and the current-value tiles read the latest 10-second
bucket instead of a minute-wide one.
The simulator's --reset only cleared the raw and 10s tables, leaving
stale rows in the 5m and env rollups. It also force-merges the rollups
after seeding so current-value widgets read cleanly.
…ne-shots

The review stand can now recover on command for the health_recovery
watch demo: a mode file flips the heartbeat's gauges per tick, --recover
flushes the degraded story from the report window (raw + rollups, Redis
depth included) and --degrade restores it, purging the pinned story from
the baseline so the stand actually reads degraded again.
New DASHBOARD_AGENT_WATCH alert type on the standard channels
(email/Slack/webhook), configurable on the Alerts page. The watcher
task calls back after a fired transition (token-authenticated,
idempotent, user re-authorized against the watch's environment); the
alert job is payload-carried like error-group alerts. Emails carry a
signed one-click unsubscribe link (GET confirms, POST mutates). New
UAT-scoped alerts API lets the agent list, create, and disable
subscriptions; plan/flag gate enforced at both subscribe and delivery.
The in-dashboard notification badge stays ungated.
… history list

A chat with an unread wake shows a dot and a brighter title and rises to
the top of History; opening it clears the highlight (optimistically, and
masked across the read/reload race).
The createWatch response now says whether the project already has a
watch-fire alert subscription (subscribed / none / unavailable); on
none the agent's watch confirmation ends with a one-line offer, on
unavailable it stays silent, and the after-fire offer remains for
older watches.
A history row now shows what's ongoing in that chat: a spinner while
the agent is answering (client-known, active chat only), a magnifier
for an open investigation (latest revision wins), an eye for an active
watch.
…er everywhere

- A wake message now opens with an unmistakable banner (tone by outcome
  and watch kind: all clear / needs attention / expired), composed via a
  new ChatWakeSlot micro-layout; gallery section added.
- A wake arriving while the dashboard is open raises a persistent toast
  (manual close only, one per wake, summary above three) with an Open
  chat action.
- Every report footer now ends like the diagnosis card: a Next steps
  heading with the buttons in one row and stated options as a dimmed
  line; docs entries without a URL fall back to their canonical page,
  and the stale variant's watch offer is a real Watch recovery button
  again.
… the docs button

A card's watch button now sends a visible request the agent answers
with schedule_watch — the transcript shows what was asked, the agent
confirms, and the email-alert offer applies. Docs footer entries render
as the docs button whatever shape their link arrived in; cited
references keep a link via a status-page fallback.
…tions state the lifetime

The chat's watch list now includes fired/expired watches (chips still
filter to active), so a wake banner can tell good news from bad instead
of falling back to the neutral wording. The agent's watch confirmation
must now always say it fires once and exactly when it gives up.
…ved slot

Every chat row keeps the leading slot so titles align; watching spins
like thinking (the hover title says which) and the short status text
stays on hover.
…n through

The endpoints require chatId (the same chat-scoped floor watch creation
uses); the tools sent none and every call died as a 400.
…umber in one column

The throughput label now sits vertically centered against its
value+breakdown stack, and 842/830 start on the same vertical as
+12/min and the other rows' values; sub labels follow their numbers.
…aks plainly

One conversational message with the watch's note, a lime CTA, and the
same skeleton as the billing-limit email; the fielded fact sheet is
gone and the unsubscribe link keeps its wiring with footer styling.
'Watch update — all clear / needs your attention', toned by kind; the
identity moves to the details line and the subject follows suit.
@changeset-bot

changeset-bot Bot commented Jul 29, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 1d15fe3

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 27 packages
Name Type
@trigger.dev/core Patch
trigger.dev Patch
@trigger.dev/build Patch
@trigger.dev/python Patch
@trigger.dev/redis-worker Patch
@trigger.dev/schema-to-json Patch
@trigger.dev/sdk Patch
@internal/cache Patch
@internal/clickhouse Patch
@internal/llm-model-catalog Patch
@internal/metrics-pipeline Patch
@trigger.dev/rbac Patch
@internal/redis Patch
@internal/replication Patch
@internal/run-engine Patch
@internal/run-store Patch
@internal/schedule-engine Patch
@trigger.dev/sso Patch
@internal/testcontainers Patch
@internal/tracing Patch
@internal/tsql Patch
@internal/dashboard-agent Patch
@internal/sdk-compat-tests Patch
@trigger.dev/react-hooks Patch
@trigger.dev/rsc Patch
@trigger.dev/database Patch
@trigger.dev/otlp-importer Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@coderabbitai

coderabbitai Bot commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 340 files, which is 40 over the limit of 300.

To get a review, narrow the scope:
• coderabbit review --committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

Usage-priced reviews support at most 300 files.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 4d8d8dd0-756f-487f-99ee-a5edb2fe8813

📥 Commits

Reviewing files that changed from the base of the PR and between 4eb9292 and 1d15fe3.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (340)
  • .changeset/report-health.md
  • .server-changes/agent-detail-metrics-layout.md
  • .server-changes/dashboard-agent-first-turn-error.md
  • .server-changes/dashboard-agent-investigate.md
  • .server-changes/dashboard-agent-watch-alerts.md
  • .server-changes/dashboard-agent-watches.md
  • .server-changes/paginate-concurrency-keys-table.md
  • .server-changes/queue-metrics-api.md
  • .server-changes/queue-metrics-dashboard.md
  • .server-changes/remove-header-docs-buttons.md
  • apps/webapp/.gitignore
  • apps/webapp/app/components/dashboard-agent/AgentChart.tsx
  • apps/webapp/app/components/dashboard-agent/DashboardAgent.tsx
  • apps/webapp/app/components/dashboard-agent/DashboardAgentChat.tsx
  • apps/webapp/app/components/dashboard-agent/DashboardAgentComposer.tsx
  • apps/webapp/app/components/dashboard-agent/DashboardAgentContextBanner.tsx
  • apps/webapp/app/components/dashboard-agent/DashboardAgentDraft.tsx
  • apps/webapp/app/components/dashboard-agent/DashboardAgentHeader.tsx
  • apps/webapp/app/components/dashboard-agent/DashboardAgentHistory.tsx
  • apps/webapp/app/components/dashboard-agent/DashboardAgentMessages.tsx
  • apps/webapp/app/components/dashboard-agent/DashboardAgentPanel.tsx
  • apps/webapp/app/components/dashboard-agent/DashboardAgentSuggestedPrompts.tsx
  • apps/webapp/app/components/dashboard-agent/InvestigateButton.tsx
  • apps/webapp/app/components/dashboard-agent/InvestigationCard.test.ts
  • apps/webapp/app/components/dashboard-agent/InvestigationCard.tsx
  • apps/webapp/app/components/dashboard-agent/ReportView.test.ts
  • apps/webapp/app/components/dashboard-agent/ReportView.tsx
  • apps/webapp/app/components/dashboard-agent/RunDiagnosisCard.tsx
  • apps/webapp/app/components/dashboard-agent/WakeBanner.tsx
  • apps/webapp/app/components/dashboard-agent/WatchChips.tsx
  • apps/webapp/app/components/dashboard-agent/WatchWakeToast.tsx
  • apps/webapp/app/components/dashboard-agent/agent-badges.tsx
  • apps/webapp/app/components/dashboard-agent/chat-layout.test.ts
  • apps/webapp/app/components/dashboard-agent/chat-layout.tsx
  • apps/webapp/app/components/dashboard-agent/dashboardAgentLauncher.tsx
  • apps/webapp/app/components/dashboard-agent/demo/components/DemoChartCard.tsx
  • apps/webapp/app/components/dashboard-agent/demo/components/DemoIntentBubble.tsx
  • apps/webapp/app/components/dashboard-agent/demo/components/DemoInvestigationCard.tsx
  • apps/webapp/app/components/dashboard-agent/demo/components/DemoReportCard.tsx
  • apps/webapp/app/components/dashboard-agent/demo/components/DemoSuggestedPromptsRow.tsx
  • apps/webapp/app/components/dashboard-agent/demo/components/DemoWatchChips.tsx
  • apps/webapp/app/components/dashboard-agent/demo/demo-chats.ts
  • apps/webapp/app/components/dashboard-agent/demo/demo.test.ts
  • apps/webapp/app/components/dashboard-agent/demo/fixtures/blocks.ts
  • apps/webapp/app/components/dashboard-agent/demo/fixtures/chart.ts
  • apps/webapp/app/components/dashboard-agent/demo/fixtures/index.ts
  • apps/webapp/app/components/dashboard-agent/demo/fixtures/intents.ts
  • apps/webapp/app/components/dashboard-agent/demo/fixtures/investigation.ts
  • apps/webapp/app/components/dashboard-agent/demo/fixtures/messages.ts
  • apps/webapp/app/components/dashboard-agent/demo/fixtures/page-context.ts
  • apps/webapp/app/components/dashboard-agent/demo/fixtures/reports.ts
  • apps/webapp/app/components/dashboard-agent/demo/fixtures/watches.ts
  • apps/webapp/app/components/dashboard-agent/demo/ids.ts
  • apps/webapp/app/components/dashboard-agent/demo/index.ts
  • apps/webapp/app/components/dashboard-agent/investigate-prompts.test.ts
  • apps/webapp/app/components/dashboard-agent/investigate-prompts.ts
  • apps/webapp/app/components/dashboard-agent/list-row.tsx
  • apps/webapp/app/components/dashboard-agent/message-order.test.ts
  • apps/webapp/app/components/dashboard-agent/message-order.ts
  • apps/webapp/app/components/dashboard-agent/navigate-target.test.ts
  • apps/webapp/app/components/dashboard-agent/navigate-target.ts
  • apps/webapp/app/components/dashboard-agent/page-context-types.ts
  • apps/webapp/app/components/dashboard-agent/page-label.test.ts
  • apps/webapp/app/components/dashboard-agent/page-label.ts
  • apps/webapp/app/components/dashboard-agent/progress-line.test.ts
  • apps/webapp/app/components/dashboard-agent/progress-line.ts
  • apps/webapp/app/components/dashboard-agent/report-block-adapter.test.ts
  • apps/webapp/app/components/dashboard-agent/report-block-adapter.ts
  • apps/webapp/app/components/dashboard-agent/report-sparkline.tsx
  • apps/webapp/app/components/dashboard-agent/run-id.test.ts
  • apps/webapp/app/components/dashboard-agent/run-id.ts
  • apps/webapp/app/components/dashboard-agent/suggested-prompts/dismissal.ts
  • apps/webapp/app/components/dashboard-agent/suggested-prompts/index.ts
  • apps/webapp/app/components/dashboard-agent/suggested-prompts/page-mappers.test.ts
  • apps/webapp/app/components/dashboard-agent/suggested-prompts/page-mappers.ts
  • apps/webapp/app/components/dashboard-agent/suggested-prompts/promoted.test.ts
  • apps/webapp/app/components/dashboard-agent/suggested-prompts/promoted.ts
  • apps/webapp/app/components/dashboard-agent/suggested-prompts/promotedPrompt.server.ts
  • apps/webapp/app/components/dashboard-agent/suggested-prompts/registry.ts
  • apps/webapp/app/components/dashboard-agent/suggested-prompts/resolver.test.ts
  • apps/webapp/app/components/dashboard-agent/suggested-prompts/resolver.ts
  • apps/webapp/app/components/dashboard-agent/tool-labels.test.ts
  • apps/webapp/app/components/dashboard-agent/tool-labels.ts
  • apps/webapp/app/components/dashboard-agent/useTranscriptAutoScroll.ts
  • apps/webapp/app/components/dashboard-agent/view-blocks.test.ts
  • apps/webapp/app/components/dashboard-agent/view-blocks.ts
  • apps/webapp/app/components/dashboard-agent/view-catalog.tsx
  • apps/webapp/app/components/dashboard-agent/watch-chips.test.ts
  • apps/webapp/app/components/dashboard-agent/watch-chips.ts
  • apps/webapp/app/components/layout/MetricsLayout.tsx
  • apps/webapp/app/components/metrics/ActivityBarChart.tsx
  • apps/webapp/app/components/metrics/BigNumber.tsx
  • apps/webapp/app/components/metrics/MiniLineChart.tsx
  • apps/webapp/app/components/primitives/Buttons.tsx
  • apps/webapp/app/components/primitives/Callout.tsx
  • apps/webapp/app/components/primitives/SegmentedControl.tsx
  • apps/webapp/app/components/primitives/Table.tsx
  • apps/webapp/app/components/primitives/Tooltip.tsx
  • apps/webapp/app/components/primitives/TooltipPortal.tsx
  • apps/webapp/app/components/primitives/UsageSparkline.tsx
  • apps/webapp/app/components/primitives/charts/Card.tsx
  • apps/webapp/app/components/primitives/charts/Chart.tsx
  • apps/webapp/app/components/primitives/charts/ChartBar.tsx
  • apps/webapp/app/components/primitives/charts/ChartCard.tsx
  • apps/webapp/app/components/primitives/charts/ChartLine.tsx
  • apps/webapp/app/components/primitives/charts/ChartSyncContext.tsx
  • apps/webapp/app/components/primitives/useTableSort.ts
  • apps/webapp/app/components/query/QueryEditor.tsx
  • apps/webapp/app/components/queues/QueueControls.tsx
  • apps/webapp/app/components/queues/QueueMetricCards.tsx
  • apps/webapp/app/components/runs/v3/agent/AgentMessageView.tsx
  • apps/webapp/app/entry.server.tsx
  • apps/webapp/app/env.server.ts
  • apps/webapp/app/hooks/useAgentPageContext.ts
  • apps/webapp/app/hooks/useMetricResourceQuery.ts
  • apps/webapp/app/models/queueMutation.server.ts
  • apps/webapp/app/presenters/v3/ApiAlertChannelPresenter.server.ts
  • apps/webapp/app/presenters/v3/BuiltInDashboards.server.ts
  • apps/webapp/app/presenters/v3/MetricDashboardPresenter.server.ts
  • apps/webapp/app/presenters/v3/QueueAllocationPresenter.server.ts
  • apps/webapp/app/presenters/v3/QueueListPresenter.server.ts
  • apps/webapp/app/presenters/v3/QueueMetricsPresenter.server.ts
  • apps/webapp/app/presenters/v3/QueueRetrievePresenter.server.ts
  • apps/webapp/app/presenters/v3/RunQueueMetricsPresenter.server.ts
  • apps/webapp/app/presenters/v3/reports/ReportPresenter.server.ts
  • apps/webapp/app/presenters/v3/reports/health/execution.ts
  • apps/webapp/app/presenters/v3/reports/health/flow.ts
  • apps/webapp/app/presenters/v3/reports/health/health-core.ts
  • apps/webapp/app/presenters/v3/reports/health/health-data.ts
  • apps/webapp/app/presenters/v3/reports/health/health-messages.ts
  • apps/webapp/app/presenters/v3/reports/health/health.ts
  • apps/webapp/app/presenters/v3/reports/health/liveness.ts
  • apps/webapp/app/presenters/v3/reports/renderMarkdown.ts
  • apps/webapp/app/presenters/v3/reports/report-messages.ts
  • apps/webapp/app/presenters/v3/reports/report-registry.ts
  • apps/webapp/app/presenters/v3/reports/report-view-model.ts
  • apps/webapp/app/presenters/v3/waitingRun/waitingRunDiagnosis.server.ts
  • apps/webapp/app/presenters/v3/waitingRun/waitingRunDiagnosis.ts
  • apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam._index/route.tsx
  • apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.agents.$agentParam/route.tsx
  • apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.alerts.new/route.tsx
  • apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.alerts/route.tsx
  • apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.apikeys/route.tsx
  • apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.batches/route.tsx
  • apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.branches/route.tsx
  • apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.bulk-actions/route.tsx
  • apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.dashboards.$dashboardKey/route.tsx
  • apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.deployments/route.tsx
  • apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.dev-branches/route.tsx
  • apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.environment-variables/route.tsx
  • apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.errors.$fingerprint/route.tsx
  • apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.limits/route.tsx
  • apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.prompts._index/route.tsx
  • apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.query/ExamplesContent.tsx
  • apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.query/TableSchemaContent.tsx
  • apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.queues/route.tsx
  • apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.queues_.$queueParam/route.tsx
  • apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs.$runParam/route.tsx
  • apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs._index/route.tsx
  • apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.sessions.$sessionParam/route.tsx
  • apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.sessions._index/route.tsx
  • apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.tasks.scheduled.$taskParam/route.tsx
  • apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.tasks.standard.$taskParam/route.tsx
  • apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.test/route.tsx
  • apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.waitpoints.tokens/route.tsx
  • apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam/route.tsx
  • apps/webapp/app/routes/_app.orgs.$organizationSlug.settings.private-connections._index/route.tsx
  • apps/webapp/app/routes/_app.orgs.$organizationSlug.settings.private-connections.new/route.tsx
  • apps/webapp/app/routes/_app.orgs.$organizationSlug.settings.usage/route.tsx
  • apps/webapp/app/routes/account.tokens/route.tsx
  • apps/webapp/app/routes/admin.api.v1.environments.$environmentId.ts
  • apps/webapp/app/routes/admin.api.v1.orgs.$organizationId.concurrency.ts
  • apps/webapp/app/routes/admin.api.v1.queue-metrics.ts
  • apps/webapp/app/routes/admin.queue-metrics.tsx
  • apps/webapp/app/routes/admin.tsx
  • apps/webapp/app/routes/api.v1.dashboard-agent.alerts.$channelId.ts
  • apps/webapp/app/routes/api.v1.dashboard-agent.alerts.ts
  • apps/webapp/app/routes/api.v1.dashboard-agent.watches.$watchId.check.ts
  • apps/webapp/app/routes/api.v1.dashboard-agent.watches.$watchId.fired.ts
  • apps/webapp/app/routes/api.v1.dashboard-agent.watches.ts
  • apps/webapp/app/routes/api.v1.projects.$projectRef.$env.jwt.ts
  • apps/webapp/app/routes/api.v1.projects.$projectRef.$env.repo.snapshot.ts
  • apps/webapp/app/routes/api.v1.projects.$projectRef.$env.runs.$runId.commit.ts
  • apps/webapp/app/routes/api.v1.projects.$projectRef.$env.runs.$runId.waiting.ts
  • apps/webapp/app/routes/api.v1.projects.$projectRef.$env.workers.$tagName.ts
  • apps/webapp/app/routes/api.v1.query.schema.ts
  • apps/webapp/app/routes/api.v1.queues.$queueParam.concurrency.override.ts
  • apps/webapp/app/routes/api.v1.queues.$queueParam.metrics.ts
  • apps/webapp/app/routes/api.v1.reports.$key.ts
  • apps/webapp/app/routes/resources.dashboard-agent.alerts.$channelId.unsubscribe.tsx
  • apps/webapp/app/routes/resources.metric.tsx
  • apps/webapp/app/routes/resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.dashboard-agent.in.$.ts
  • apps/webapp/app/routes/resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.dashboard-agent.ts
  • apps/webapp/app/routes/resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.query.ai-generate.tsx
  • apps/webapp/app/routes/resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs.$runParam.spans.$spanParam/route.tsx
  • apps/webapp/app/routes/resources.queues.concurrency-keys.ts
  • apps/webapp/app/routes/storybook.agent-ui/manifest.ts
  • apps/webapp/app/routes/storybook.agent-ui/route.tsx
  • apps/webapp/app/routes/storybook.callout/route.tsx
  • apps/webapp/app/routes/storybook.charts/route.tsx
  • apps/webapp/app/routes/storybook.layout/route.tsx
  • apps/webapp/app/routes/storybook/route.tsx
  • apps/webapp/app/services/dashboardAgentAlertContext.server.ts
  • apps/webapp/app/services/dashboardAgentAlertUnsubscribeToken.server.ts
  • apps/webapp/app/services/dashboardAgentHeadStart.server.ts
  • apps/webapp/app/services/dashboardAgentWatchAlerts.server.ts
  • apps/webapp/app/services/dashboardAgentWatchChecks.server.ts
  • apps/webapp/app/services/dashboardAgentWatchChecks.ts
  • apps/webapp/app/services/dashboardAgentWatchToken.server.ts
  • apps/webapp/app/services/dashboardAgentWatches.server.ts
  • apps/webapp/app/services/queryService.server.ts
  • apps/webapp/app/services/resolveTriggerUri.server.ts
  • apps/webapp/app/services/uatRoutePreamble.server.ts
  • apps/webapp/app/utils/handle.ts
  • apps/webapp/app/utils/pathBuilder.ts
  • apps/webapp/app/v3/alertsWorker.server.ts
  • apps/webapp/app/v3/canAccessQueueMetricsUi.server.ts
  • apps/webapp/app/v3/featureFlags.ts
  • apps/webapp/app/v3/querySchemas.ts
  • apps/webapp/app/v3/queueMetrics.server.ts
  • apps/webapp/app/v3/queueMetricsMapping.ts
  • apps/webapp/app/v3/runEngine.server.ts
  • apps/webapp/app/v3/services/alerts/deliverAlert.server.ts
  • apps/webapp/app/v3/services/alerts/deliverDashboardAgentWatchAlert.server.ts
  • apps/webapp/app/v3/services/allocateConcurrency.server.ts
  • apps/webapp/app/v3/services/concurrencySystem.server.ts
  • apps/webapp/package.json
  • apps/webapp/scripts/agent-ui-screenshots.ts
  • apps/webapp/seed-agent-examples-chats.mts
  • apps/webapp/seed-agent-examples.mts
  • apps/webapp/seed-queue-metrics.mts
  • apps/webapp/test/concurrencySystemPercentOverride.test.ts
  • apps/webapp/test/dashboardAgentHeadStart.test.ts
  • apps/webapp/test/dashboardAgentRoutes.test.ts
  • apps/webapp/test/dashboardAgentWatchChecks.test.ts
  • apps/webapp/test/dashboardAgentWatchToken.test.ts
  • apps/webapp/test/dashboardAgentWatches.test.ts
  • apps/webapp/test/queueMetricsMapping.test.ts
  • apps/webapp/test/reportHealth.test.ts
  • apps/webapp/test/reportHealthData.test.ts
  • apps/webapp/test/resolveTriggerUri.test.ts
  • apps/webapp/test/seedAgentExamplesChats.test.ts
  • apps/webapp/test/useTableSort.test.ts
  • apps/webapp/test/waitingRunDiagnosis.test.ts
  • apps/webapp/vitest.config.ts
  • internal-packages/clickhouse/schema/036_create_queue_metrics_v1.sql
  • internal-packages/clickhouse/src/client/tsql.ts
  • internal-packages/clickhouse/src/index.ts
  • internal-packages/clickhouse/src/queueMetrics.test.ts
  • internal-packages/clickhouse/src/queueMetrics.ts
  • internal-packages/dashboard-agent-contracts/package.json
  • internal-packages/dashboard-agent-contracts/src/blocks.test.ts
  • internal-packages/dashboard-agent-contracts/src/blocks.ts
  • internal-packages/dashboard-agent-contracts/src/contracts.test.ts
  • internal-packages/dashboard-agent-contracts/src/evidence.ts
  • internal-packages/dashboard-agent-contracts/src/index.ts
  • internal-packages/dashboard-agent-contracts/src/intent.ts
  • internal-packages/dashboard-agent-contracts/src/page-context.ts
  • internal-packages/dashboard-agent-contracts/src/run-filters.ts
  • internal-packages/dashboard-agent-contracts/src/suggested-prompts.ts
  • internal-packages/dashboard-agent-contracts/src/trigger-uri.test.ts
  • internal-packages/dashboard-agent-contracts/src/trigger-uri.ts
  • internal-packages/dashboard-agent-contracts/src/watch.test.ts
  • internal-packages/dashboard-agent-contracts/src/watch.ts
  • internal-packages/dashboard-agent-contracts/tsconfig.json
  • internal-packages/dashboard-agent-contracts/vitest.config.ts
  • internal-packages/dashboard-agent-db/README.md
  • internal-packages/dashboard-agent-db/drizzle/0002_luxuriant_king_cobra.sql
  • internal-packages/dashboard-agent-db/drizzle/0003_famous_champions.sql
  • internal-packages/dashboard-agent-db/drizzle/meta/0002_snapshot.json
  • internal-packages/dashboard-agent-db/drizzle/meta/0003_snapshot.json
  • internal-packages/dashboard-agent-db/drizzle/meta/_journal.json
  • internal-packages/dashboard-agent-db/package.json
  • internal-packages/dashboard-agent-db/src/ids.ts
  • internal-packages/dashboard-agent-db/src/index.ts
  • internal-packages/dashboard-agent-db/src/queries.ts
  • internal-packages/dashboard-agent-db/src/schema.ts
  • internal-packages/dashboard-agent/GUIDEBOOK.md
  • internal-packages/dashboard-agent/PLAYBOOK.md
  • internal-packages/dashboard-agent/VERDICTS.md
  • internal-packages/dashboard-agent/package.json
  • internal-packages/dashboard-agent/src/dashboard-agent.eval.ts
  • internal-packages/dashboard-agent/src/dashboard-agent.test.ts
  • internal-packages/dashboard-agent/src/dashboard-agent.ts
  • internal-packages/dashboard-agent/src/index.ts
  • internal-packages/dashboard-agent/src/tool-schemas.ts
  • internal-packages/dashboard-agent/src/tools.ts
  • internal-packages/dashboard-agent/src/watch-tick.test.ts
  • internal-packages/dashboard-agent/src/watch-tick.ts
  • internal-packages/dashboard-agent/vitest.eval.config.ts
  • internal-packages/database/prisma/migrations/20260716120000_add_task_queue_concurrency_limit_override_percent/migration.sql
  • internal-packages/database/prisma/migrations/20260729120000_add_dashboard_agent_watch_alert_type/migration.sql
  • internal-packages/database/prisma/schema.prisma
  • internal-packages/emails/emails/alert-dashboard-agent-watch.tsx
  • internal-packages/emails/src/index.tsx
  • internal-packages/metrics-pipeline/package.json
  • internal-packages/metrics-pipeline/src/cachedValue.ts
  • internal-packages/metrics-pipeline/src/consumer.test.ts
  • internal-packages/metrics-pipeline/src/consumer.ts
  • internal-packages/metrics-pipeline/src/emitter.ts
  • internal-packages/metrics-pipeline/src/flag.ts
  • internal-packages/metrics-pipeline/src/hash.ts
  • internal-packages/metrics-pipeline/src/idempotency.ts
  • internal-packages/metrics-pipeline/src/index.ts
  • internal-packages/metrics-pipeline/src/lua.ts
  • internal-packages/metrics-pipeline/src/pipeline.test.ts
  • internal-packages/metrics-pipeline/src/types.ts
  • internal-packages/metrics-pipeline/test/setup.ts
  • internal-packages/metrics-pipeline/tsconfig.build.json
  • internal-packages/metrics-pipeline/tsconfig.json
  • internal-packages/metrics-pipeline/tsconfig.src.json
  • internal-packages/metrics-pipeline/tsconfig.test.json
  • internal-packages/metrics-pipeline/vitest.config.ts
  • internal-packages/run-engine/package.json
  • internal-packages/run-engine/src/engine/index.ts
  • internal-packages/run-engine/src/engine/systems/enqueueSystem.ts
  • internal-packages/run-engine/src/engine/tests/ttl.test.ts
  • internal-packages/run-engine/src/engine/types.ts
  • internal-packages/run-engine/src/run-queue/index.ts
  • internal-packages/run-engine/src/run-queue/keyProducer.ts
  • internal-packages/run-engine/src/run-queue/metrics.test.ts
  • internal-packages/run-engine/src/run-queue/tests/ckIndex.test.ts
  • internal-packages/run-engine/src/run-queue/types.ts
  • internal-packages/tsql/src/index.test.ts
  • internal-packages/tsql/src/index.ts
  • internal-packages/tsql/src/query/functions.ts
  • internal-packages/tsql/src/query/printer.test.ts
  • internal-packages/tsql/src/query/printer.ts
  • internal-packages/tsql/src/query/printer_context.ts
  • internal-packages/tsql/src/query/schema.ts
  • packages/cli-v3/src/apiClient.ts
  • packages/cli-v3/src/cli/index.ts
  • packages/cli-v3/src/commands/mcp.ts
  • packages/cli-v3/src/commands/report.ts
  • packages/cli-v3/src/mcp/config.ts
  • packages/cli-v3/src/mcp/prompts.ts
  • packages/cli-v3/src/mcp/schemas.ts
  • packages/cli-v3/src/mcp/tools.ts
  • packages/cli-v3/src/mcp/tools/report.ts
  • packages/core/src/v3/apiClient/index.ts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

…t button; URLs are links

The prompt now treats earlier turns' pages as history — deictic
questions re-read the current page every turn, and page explanations
end with a matching docs link. The report's contact action falls back
to the contact page as a real external button instead of an ask
round-trip, and answers that point at a URL carry it as a link.
…ress line, wake toast opens its chat as an agent Callout

- navigate intents and navigate_to outputs resolve trigger:// URIs
  server-side and navigate in place; same-origin citation buttons
  navigate instead of opening a new tab.
- The transcript autoscrolls on send and follows streaming near the
  bottom; a store-order stable merge stops messages landing mid-chat
  after a page change (server-side single-read follow-up noted).
- The generic Working line yields to a tool-specific one.
- The wake toast is the new agent Callout variant (chat icon) and opens
  the exact chat that woke.
Base automatically changed from feat/queue-metrics-and-health to main July 29, 2026 15:45
An in-flight tool call now shows a compact pill (per-tool phrase +
spinner, watch-chip visual language) instead of raw streaming JSON —
covering render_view and get_report, the biggest offenders. Completed
and error states render as before; gallery in-flight examples reworked
and a pill line-up section added.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants